-
Notifications
You must be signed in to change notification settings - Fork 1
Dev #34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
ebowwa
wants to merge
45
commits into
main
Choose a base branch
from
dev
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- Add LaneTool for installing lane CLI from bun-migration branch - Remove outdated documentation files - Add test scripts and lane test suite Co-Authored-By: Claude <noreply@anthropic.com>
This reverts commit ec471d0.
* feat: add Ralph Iterative plugin installer - Add RalphTool for installing the ralph-iterative Claude Code plugin - Ralph provides loop-until-completion task execution (Mr. Meeseeks mode) - Clones from https://github.com/ebowwa/ralph - Installs as Claude Code marketplace plugin - Only installs when Claude Code is present Co-Authored-By: Claude <noreply@anthropic.com> * fix: resolve node-agent path from parent directory when run from v2 - Add parent directory (..) to possiblePaths search locations - Use realpath shell command to resolve relative paths to absolute - Fixes issue where setup run from v2 couldn't find node-agent The Node Agent tool installer searches for the node-agent directory in multiple locations. When setup.sh is run from the root, it uses process.cwd() which points to v2/src during execution. This change adds the parent directory to the search path and uses realpath for proper path resolution. Co-Authored-By: Claude <noreply@anthropic.com> * fix: use symlink instead of bun install -g for lane bun install -g . fails with dependency loop error on lane package. Replaced with direct symlink from binDir to the built binary. Co-Authored-By: Claude <noreply@anthropic.com> * fix: use $HOME for bun PATH configuration Was using /.bun/bin (root), corrected to ${HOME}/.bun/bin for proper bun discovery across environments. Co-Authored-By: Claude <noreply@anthropic.com> * fix: add bun PATH to shell configs for persistence Previously only tried /etc/environment which requires sudo. Now falls back to shell config files (~/.zshrc, ~/.bashrc, etc.) ensuring bun is available in new shell sessions. Co-Authored-By: Claude <noreply@anthropic.com> * fix: detect user shell and prioritize its config file Previously tried configs in fixed order. Now: 1. Detects $SHELL (zsh, bash, sh) 2. Prioritizes that shell's config file 3. Falls back to other configs if needed Works correctly on both macOS (zsh default) and Linux (bash common). Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
* feat: add Ralph Iterative plugin installer - Add RalphTool for installing the ralph-iterative Claude Code plugin - Ralph provides loop-until-completion task execution (Mr. Meeseeks mode) - Clones from https://github.com/ebowwa/ralph - Installs as Claude Code marketplace plugin - Only installs when Claude Code is present Co-Authored-By: Claude <noreply@anthropic.com> * fix: resolve node-agent path from parent directory when run from v2 - Add parent directory (..) to possiblePaths search locations - Use realpath shell command to resolve relative paths to absolute - Fixes issue where setup run from v2 couldn't find node-agent The Node Agent tool installer searches for the node-agent directory in multiple locations. When setup.sh is run from the root, it uses process.cwd() which points to v2/src during execution. This change adds the parent directory to the search path and uses realpath for proper path resolution. Co-Authored-By: Claude <noreply@anthropic.com> * fix: use symlink instead of bun install -g for lane bun install -g . fails with dependency loop error on lane package. Replaced with direct symlink from binDir to the built binary. Co-Authored-By: Claude <noreply@anthropic.com> * fix: use $HOME for bun PATH configuration Was using /.bun/bin (root), corrected to ${HOME}/.bun/bin for proper bun discovery across environments. Co-Authored-By: Claude <noreply@anthropic.com> * fix: add bun PATH to shell configs for persistence Previously only tried /etc/environment which requires sudo. Now falls back to shell config files (~/.zshrc, ~/.bashrc, etc.) ensuring bun is available in new shell sessions. Co-Authored-By: Claude <noreply@anthropic.com> * fix: detect user shell and prioritize its config file Previously tried configs in fixed order. Now: 1. Detects $SHELL (zsh, bash, sh) 2. Prioritizes that shell's config file 3. Falls back to other configs if needed Works correctly on both macOS (zsh default) and Linux (bash common). Co-Authored-By: Claude <noreply@anthropic.com> * chore: move Ralph scripts to ralph repo Ralph execution scripts moved to their canonical home: - ralph (agent orchestration) is the right place - seed (bootstrap) should only have environment setup See: ralph@974509c Co-Authored-By: Claude <noreply@anthropic.com> * chore: move AUTONOMOUS.md to ralph repo Documentation for autonomous Ralph belongs with the agent. Co-Authored-By: Claude <noreply@anthropic.com> * fix: remove docs/ prefix from tracked file paths The docs/ directory doesn't exist in this repository. Changed paths to root level. Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
Tools are now installed concurrently using Promise.all(), with bun as a prerequisite installed first. This significantly reduces setup time since most tools are independent. Co-Authored-By: Claude <noreply@anthropic.com>
BREAKING: Optimizes installation order for faster tool availability Changes: - Phase 1: curl tools (claude, doppler) - parallel, no deps - Phase 2: bun - verification only - Phase 3: bun-dependent tools (lane, node-agent) - parallel, requires bun - Phase 4: apt tools (node, tmux, gh) - serial (dpkg lock constraint) - Helper functions runToolsParallel() and runToolsSerial() to reduce duplication - Per-phase timing logs for debugging Benefits: - 4 common tools finish 45-60s earlier (claude, doppler, lane, node-agent) - Better user experience with faster access to commonly-used tools - Only apt-based tools wait until end (unavoidable dpkg lock) Co-authored-by: Clawdbot <assistant@clawdbot.ai>
This reverts commit ec471d0.
Remove duplicate scripts from root and organize into scripts/ directory. Also add Claude Code tracking files. Co-Authored-By: Claude <noreply@anthropic.com>
The old Yarn repository has an expired GPG key that causes apt-get update to fail. Remove it before updating packages since Node.js is installed via apt, not Yarn. Co-Authored-By: Claude <noreply@anthropic.com>
- Changed setup.sh to use regular bun run instead of exec (allows continuation) - Added systemd service setup in setup.sh after TypeScript setup completes - Removed ~115 lines of systemd logic from node-agent.ts - Removed runDirectly() method that handled background process spawning - Node-agent now only installs and builds; startup delegated to bash script Co-Authored-By: Claude <noreply@anthropic.com>
Remove interactive prompt that was blocking parallel installation in Phase 3. Node-agent now always installs when detected. Co-Authored-By: Claude <noreply@anthropic.com>
- Check checkInstalled() before running install to skip existing tools - Start node-agent directly when systemd unavailable (containers) - This saves ~90s by skipping node on codespaces (already installed) Co-Authored-By: Claude <noreply@anthropic.com>
Update setup.sh to detect if systemd is available. In containers (codespaces), start node-agent directly with bun instead of using systemd which doesn't run in containers. Co-Authored-By: Claude <noreply@anthropic.com>
Previous check only verified systemctl exists, but codespaces has systemctl without running systemd. Use is-system-running to verify systemd is actually active before using it. Co-Authored-By: Claude <noreply@anthropic.com>
- Check port 8911 instead of unreliable pgrep for verification - Save PID to file for proper process tracking - Redirect output to log file for debugging - Show log content if startup fails Co-Authored-By: Claude <noreply@anthropic.com>
systemctl is-system-running returns exit code 0 even when systemd is not running (error goes to stderr). Check for the systemd runtime directory which only exists when systemd is active. Co-Authored-By: Claude <noreply@anthropic.com>
- Handle root's home directory (/root not /home/root) - Update Group field in service file - Use actual NODE_AGENT_PATH for WorkingDirectory - Update ExecStart path to use correct bun location - Update ReadWritePaths to use correct directories Co-Authored-By: Claude <noreply@anthropic.com>
Add support for monitoring .claude/.ralph-iterative.*.json files: - Add RalphIterativeStateFile type matching the JSON schema - Scan /root/seed and /root/seed/worktrees recursively - Skip node_modules and hidden dirs (except .claude) - Extract prompt, iteration, SLAM phase, completion promise - Backward compatible with legacy markdown state files Co-Authored-By: Claude <noreply@anthropic.com>
Add support for monitoring .claude/.ralph-iterative.*.json files: - Add RalphIterativeStateFile type matching the JSON schema - Scan /root/seed and /root/seed/worktrees recursively - Skip node_modules and hidden dirs (except .claude) - Extract prompt, iteration, SLAM phase, completion promise - Backward compatible with legacy markdown state files Co-Authored-By: Claude <noreply@anthropic.com>
Enhance RalphLoop response with Ralph Iterative specific fields: - phase: planning/executing/review/complete - current_task: current subtask being worked on - total_subtasks: total number of subtasks - completed_subtasks: count of completed subtasks - subtasks: array of subtask summaries (id, title, status) Co-Authored-By: Claude <noreply@anthropic.com>
Add relative path display showing where each Ralph loop is running: - project_path: ~/seed or ~/seed/worktrees/feature-x - Extracted from state file location - Formatted relative to home directory Co-Authored-By: Claude <noreply@anthropic.com>
Fetch and display git context for each running Ralph loop: - git_info.remote: e.g., "ebowwa/seed" (extracted from origin URL) - git_info.branch: current checked out branch - Fallback to null if not a git repo Co-Authored-By: Claude <noreply@anthropic.com>
- index.ts: Worktree CRUD endpoints not tested with actual git worktrees - ralph.ts: Add caching and fs.watch() for real-time state updates Co-Authored-By: Claude <noreply@anthropic.com>
- Add Ralph Iterative options to CreateRalphLoopRequest (enable_subagents, auto_commit, auto_pr, base_branch) - Rewrite startRalphLoop() to use .claude/.ralph-iterative.local.json instead of legacy markdown format - Add detectMachineResources() for SLAM capacity scoring (CPU, memory, disk, platform) - Add checkIfContainer() to detect if running in Docker/containerd - Add parseSizeToGB() helper for parsing df output - Update permissions to use Skill(ralph-iterative:ralph-iterative) Co-Authored-By: Claude <noreply@anthropic.com>
- Remove --porcelain flag which outputs key-value pairs - Parse regular output format: /path commit [branch] - Fix broken worktree display in GUI Co-Authored-By: Claude <noreply@anthropic.com>
Resolved conflicts: - ralph.ts: Combined Ralph Iterative features with TODO comments - lane.ts: Use bun-migration branch for lane tool - claude-code-* files: Kept renamed versions in docs/ Co-Authored-By: Claude <noreply@anthropic.com>
* feat: Add PM Daemon - Telegram-Connected Node Orchestrator Implements the PM Daemon design from docs/internal/docs/PM-DAEMON-DESIGN.md. The PM Daemon is an LLM-powered AI agent that runs as a persistent loop on each seed node, providing a 24/7 project manager interface via Telegram. **New Services:** - services/telegram.ts - Telegram Bot API client (long-polling, exponential backoff) - services/node-registry.ts - Multi-node registry with health checks - services/pm-commands.ts - Slash command router (/status, /loops, /start, /stop, etc.) - services/pm-monitor.ts - Monitor loop (detects completions, errors, stalls) - services/pm-brain.ts - Claude Code session manager via doppler subprocess **Configuration:** - src/config/nodes.yaml - Node registry template - .env.example - Added PM_DAEMON_ENABLED, TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID - CLAUDE.md - PM daemon persona/system prompt **Changes:** - src/types/index.ts - Added PM daemon types (Telegram, NodeRegistry, MonitorEvent, etc.) - src/index.ts - Conditional PM daemon startup when PM_DAEMON_ENABLED=true **Doppler Secrets (seed/prd):** - TELEGRAM_BOT_TOKEN - Bot token for @SimulationapiBot - TELEGRAM_CHAT_ID - Allowed chat ID for operator - PM_DAEMON_ENABLED - Enables PM daemon on all nodes Co-Authored-By: Claude <noreply@anthropic.com> * fix: PM brain now uses persistent session with conversation memory Previously spawned a new Claude Code session per message (stateless). Now maintains a persistent virtual session with conversation history. Changes: - pmBrain.start() called on PM daemon startup - pmBrain.stop() called on shutdown - Each message includes last 20 messages for context - Max 100 messages stored (with system prompt preserved) - Processing lock prevents concurrent messages This gives the PM "memory" - it remembers previous context and can reference earlier parts of the conversation. Co-Authored-By: Claude <noreply@anthropic.com> * feat: PM brain now uses true persistent Claude session + workers Two types of Claude sessions: 1. Persistent session (main brain) - One long-running doppler run -- claude process - Communicates via stdin/stdout pipes - Maintains conversation memory - Auto-restarts on crash 2. Spawned workers (for isolated tasks) - Fresh claude -p instances for one-off tasks - Don't affect persistent session memory - Can run multiple in parallel Changes: - Added PersistentClaudeSession class with stdin/stdout handling - pmBrain.processMessage() uses persistent session - pmBrain.spawnWorker() spawns fresh instances - pmBrain.spawnWorkers() for parallel execution Co-Authored-By: Claude <noreply@anthropic.com> * refactor: strip PM brain to essentials - let Claude handle memory Removed all the manual conversation tracking that I overengineered. Claude Code already has built-in memory and context management. What it does now: - Spawn ONE persistent doppler run -- claude process - Pipe stdin/stdout for communication - Claude handles all memory (no manual tracking needed) - Monitor loop injects context as messages - Spawned workers available for parallel tasks 600+ lines → 410 lines Co-Authored-By: Claude <noreply@anthropic.com> * refactor: organize PM daemon services into /daemon subdirectory PM daemon services now live in src/services/daemon/: - telegram.ts - pm-brain.ts - pm-commands.ts pm-monitor.ts - node-registry.ts Core services remain in src/services/: - git.ts -ralph.ts -setup.ts Co-Authored-By: Claude <noreply@anthropic.com> * feat: Add WebSocket oversight for PM daemon - Add real-time bidirectional WebSocket for peeking into running Claude sessions - Store process handles (stdin/stdout) for active Ralph loops - Add WS endpoint: /api/ralph-loops/:id/ws - Stream Claude stdout → WebSocket for visibility - Relay WebSocket messages → Claude stdin for oversight - Remove node-registry (deferred to multi-node architecture) - Update PM daemon to single-node mode - Add NODE-REGISTRY-DESIGN.md for future multi-node reference Co-Authored-By: Claude <noreply@anthropic.com> * refactor: Rename PmBrainService to DaemonLayerAgentService - Rename pm-brain.ts → daemon-layer-agent.ts - Update class name: PmBrainService → DaemonLayerAgentService - Update imports and references in index.ts Co-Authored-By: Claude <noreply@anthropic.com> * feat: Install lane from npm via bun install + symlink - Install @ebowwa/lane from npm using bun install - Symlink ~/.lane-install/node_modules/.bin/lane to ~/.local/bin/lane - Avoids broken bun -g and unnecessary git clone - Update tests for npm-based installation Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
- Add architecture overview with ASCII diagram - Document integration points for @codespaces/tooling - Add 17 TODO markers for future tooling integration - Enhance JSDoc comments for all public methods - Add placeholder methods (syncRepos, getRepoStatus, validate) Co-Authored-By: Claude <noreply@anthropic.com>
…atus - Add ConsoleLoggerService with periodic status updates - Track all Claude Code processes with PID, worktree, loop info - Display full Ralph loop state (iteration, phase, subtasks, git info, PID) - Detect and display active plugins (MCP servers, skills, hooks) - Beautiful box-drawing character formatting Co-Authored-By: Claude <noreply@anthropic.com>
- Check if Claude Code process is actually running before returning loop - Skip stopped loops completely - Skip complete loops older than 6 minutes - Add process_id to RalphLoop response - This fixes GUI showing old/stale loop data Co-Authored-By: Claude <noreply@anthropic.com>
- Add log buffer to ConsoleLoggerService (stores last 100 entries) - Add console_logs to NodeStatus type - Include recent 20 logs in /api/status response - Export ConsoleLogEntry type for backend use This allows the backend to fetch and display node-agent console logs. Co-Authored-By: Claude <noreply@anthropic.com>
- Override console.log and console.error to capture output to buffer - Store last 100 log entries for /api/status response - Restore original console functions on stop This ensures all console output is captured without needing to update every console.log call in the codebase. Co-Authored-By: Claude <noreply@anthropic.com>
- Remove box-drawing ASCII art and fancy formatting - Output simple [NodeAgent] prefixed log lines - Focus on the information, not presentation Before: Massive ASCII blocks with borders After: Clean single-line logs Co-Authored-By: Claude <noreply@anthropic.com>
- Add cpuPercent and memoryPercent to ClaudeCodeProcess type - Add active_claude_processes to NodeStatus response - Add claude_cpu_total and claude_process_count to Capacity - Add getActiveClaudeProcesses() function to fetch processes via ps aux - Map PIDs to loop IDs using ~/.node-agent/pids/ files - Update /api/status endpoint to include active Claude processes Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Node agent: - Add console logger service - Add daemon layer agent with PM integration - Add git, ralph, and setup services - Add TypeScript type definitions V2 tools: - Add environment detection and packages tools - Add health check utilities - Add base tool interface and implementations - Add tools for: bun, claude, doppler, gh, lane, node-agent, node, ralph, registry, tmux
Add @codespaces/rolling-keys integration for API key rotation: - Add KeyManager class with round-robin key rotation - Integrate with daemon-layer-agent for GLM API calls - Integrate with ralph service for Anthropic API calls - Add health tracking with exponential backoff on errors - Support multiple keys from ANTHROPIC_API_KEYS Doppler config Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Removed stale duplicate of seed repo from inside itself - Preserved all current changes in parent seed directory
…m package - Update package.json to use published @ebowwa/rolling-keys@^1.0.0 - Update all TypeScript imports from @codespaces/rolling-keys to @ebowwa/rolling-keys - Update build script to use --target bun for Node.js built-ins - Update integration comments in daemon-layer-agent to reference @ebowwa/tooling Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Published version is 0.1.0, not 1.0.0 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The @ebowwa/rolling-keys package uses catalog: for zod which doesn't resolve in bun/npm. Adding zod directly as a workaround. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The new version has proper dist/ entry points and concrete zod dependency, resolving the "catalog: failed to resolve" error in bun. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
No description provided.