Commit Graph
495 Commits
Author SHA1 Message Date
arkon ea81d94173 chore: bump version to 0.1440 2026-01-30 18:01:07 +01:00
arkon b520ce44e5 chore: bump version to 0.1439 2026-01-30 17:50:02 +01:00
arkon 5b6dd078f1 chore: bump version to 0.1438 2026-01-30 17:20:53 +01:00
arkon f4612278ef chore: bump version to 0.1437 2026-01-30 14:14:45 +01:00
arkonandClaude Opus 4.5 e27c046abf test: add memory leak prevention pattern tests (P1)
Add comprehensive tests for the cleanup patterns used to prevent
memory leaks in long-running sessions:

- Task description cache with TTL expiration
- Promise callback null-after-rejection pattern
- Event listener tracking and removal
- DOM handler storage for frontend cleanup
- Timer/interval management
- Map cleanup patterns and safe iteration
- WeakRef/WeakMap usage patterns
- Cleanup order verification (LIFO)

Update CLAUDE.md with reference to new test file.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:07:27 +01:00
arkonandClaude Opus 4.5 322802c1b9 perf(css): add CSS containment to floating windows
Added `contain: layout paint` to modal, subagent-window, log-viewer-window,
image-popup-window, plan-file-window, and plan-file-manager. This tells
the browser that these elements' layout and paint are independent from
the rest of the page, enabling rendering optimizations.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 13:36:18 +01:00
arkonandClaude Opus 4.5 0b257753a6 fix(frontend): add imagePopups cleanup to cleanupAllFloatingWindows
The imagePopups Map was not being cleaned up during SSE reconnects,
causing memory leaks from orphaned drag event listeners on document.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 13:33:40 +01:00
arkonandClaude Opus 4.5 b83d458156 docs: update CLAUDE.md with memory leak fix notes
- Added memory leak prevention patterns section
- Documented 2026-01-30 P0 fixes (commit e3e0d22)
- Added cleanup pattern guidance for future development

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 13:28:30 +01:00
arkonandClaude Opus 4.5 e3e0d226ce fix(memory): prevent memory leaks in session, server, and frontend
Backend fixes:
- Session: clear _recentTaskDescriptions Map in stop() and clearBuffers()
- Session: null promise callbacks after rejection in runPrompt() catch block
- Server: store subagent/image watcher listener refs and remove on shutdown

Frontend fixes:
- Plan file windows: store drag/resize handlers and clean up on close
- Plan file manager: store drag handler and clean up on close
- cleanupAllFloatingWindows: now cleans up plan file windows

These prevent unbounded memory growth in long-running sessions.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 13:25:18 +01:00
arkonandClaude Opus 4.5 2693aea11e fix: make test screen cleanup registration-based only
Previously killOrphanedTestScreens() would kill ANY detached claudeman
screen that wasn't in preExistingScreens. This was dangerous because:
- User screens can become temporarily detached (web server reconnect)
- Tests might start before user creates sessions
- Race conditions between screen status and cleanup timing

Now we ONLY kill screens that tests explicitly register via
registerTestScreen(). Orphaned screens are warned about but not killed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 12:17:38 +01:00
arkonandClaude Opus 4.5 a92826b66d refactor: simplify ralph wizard from 9 agents to 2
Remove execution layer that never actually controlled execution:
- execution-bridge.ts (model param was ignored)
- group-scheduler.ts (task-tool mode never used)
- model-selector.ts (recommendations were display-only)
- context-manager.ts (never invoked)
- execution-limits.ts

Remove redundant agent prompts (overlapping outputs):
- requirements-analyst, architecture-planner, risk-analyst
- testing-specialist, verification (merged into planner.ts)
- execution-optimizer (output was ignored)
- final-review (scores were cosmetic)

Simplify plan-orchestrator.ts from 2400 LOC to 520 LOC:
- Before: 9 agents, 6 phases, ~40-60 minutes
- After: 2 agents (research + planner), ~18 minutes

Remove /api/execution/* endpoints and related server code.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 12:15:09 +01:00
arkon 0020ae5a3e chore: bump version to 0.1436 2026-01-30 11:39:15 +01:00
arkon 1fb06ecf47 chore: bump version to 0.1435 2026-01-30 11:32:23 +01:00
arkon 7dfd97df58 chore: bump version to 0.1434 2026-01-30 11:30:51 +01:00
arkon da5d86a84f chore: bump version to 0.1433 2026-01-29 16:13:18 +01:00
arkonandClaude Opus 4.5 b13b725bd8 fix: robust agent-to-tab connection lines with persistent parent tracking
- Add --session-id flag to Claude CLI startup so Claudeman and Claude share the same session ID
- Set claudeSessionId immediately on session start (no waiting for JSON messages)
- Add persistent subagentParentMap to store agent-to-tab associations permanently
- Add /api/subagent-parents endpoints for server-side persistence
- Add fallback: use active session when claudeSessionId matching fails
- Connection lines now reliably connect agent windows to their parent tabs
- Survives page refresh, reconnect, and server restart

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 14:56:11 +01:00
arkon 28f37d9d7c chore: remove screenshot 2026-01-29 13:24:44 +01:00
arkon 7b866c1998 chore: bump version to 0.1431 2026-01-29 13:22:02 +01:00
arkonandClaude Opus 4.5 8ed1c218f4 fix: remove stats cards from Summary tab
Remove Respawn Cycles, Tokens Used, Active Time, Issues stats
that cluttered the Summary tab.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 13:03:17 +01:00
arkonandClaude Opus 4.5 6b101ba919 fix: simplify respawn tab in session options
Remove advanced options (After Update Prompt, Kickstart, Auto-Accept)
to reduce clutter. Defaults preserved via hidden inputs.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 12:59:42 +01:00
arkonandClaude Opus 4.5 e92ae7c3ce fix: improve tab close button usability
- Change cursor to default arrow when hovering close button
- Increase clickable area with more padding
- Add subtle background highlight on hover

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 12:49:44 +01:00
arkonandClaude Opus 4.5 db20f4f63d chore: bump version to 0.1427
- Remove TUI from git (moved to .gitignore for local development)
- Remove React/Ink dependencies (unused in published version)
- Remove tui command from CLI

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 12:47:23 +01:00
arkonandClaude Opus 4.5 a73f7c3a4f fix: prevent stale subagent data from showing in windows
- Reduce getRecentSubagents window from 60 to 15 minutes
- Skip old/completed agents when restoring window states (10 min cutoff)
- Clear old activity data when new agent with same ID is discovered
- Force close existing window for agentId before opening fresh one

Fixes issue where old prompts/input from previous Ralph Loop runs
were displayed when clicking on subagent windows.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 12:04:14 +01:00
arkonandClaude Opus 4.5 5c2d985dce chore: bump version to 0.1425
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:49:00 +01:00
arkonandClaude Opus 4.5 d040722d1d docs: clarify HTTP is fine for localhost, HTTPS only for remote
Localhost is treated as a secure context by browsers, so notifications
and all browser APIs work without HTTPS. Updated README, CLI help,
install script, and systemd service to default to HTTP.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:47:24 +01:00
arkonandClaude Opus 4.5 8c908ec5e4 chore: bump version to 0.1423
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:40:55 +01:00
arkonandClaude Opus 4.5 c667e0baac fix: match subagents to sessions by claudeSessionId instead of newest heuristic
When multiple Claudeman sessions share the same workingDir, subagents were
incorrectly attaching to the newest session instead of the actual parent.
Now uses direct claudeSessionId matching for reliable parent detection.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:39:12 +01:00
arkon ed2a2323f8 chore: bump version to 0.1422 2026-01-29 11:27:44 +01:00
arkon 662a2418a0 chore: bump version to 0.1421 2026-01-29 11:19:01 +01:00
arkon e8b688d24f chore: bump version to 0.1420 2026-01-29 11:11:55 +01:00
arkon f7c884ecff chore: bump version to 0.1419 2026-01-29 11:06:22 +01:00
arkonandClaude Opus 4.5 6c07541288 refactor: consolidate shared regex patterns and token validation
- Create src/utils/regex-patterns.ts with ANSI_ESCAPE_PATTERN_FULL,
  ANSI_ESCAPE_PATTERN_SIMPLE, TOKEN_PATTERN, and helper functions
- Create src/utils/token-validation.ts with MAX_SESSION_TOKENS and
  validation utilities
- Update session.ts, respawn-controller.ts, ai-checker-base.ts,
  ralph-tracker.ts, state-store.ts to use shared utilities
- Export all new utilities from src/utils/index.ts

Reduces code duplication while maintaining pre-compiled patterns
for performance.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 10:55:49 +01:00
arkonandClaude Opus 4.5 451f0854eb docs: update CLAUDE.md with execution system documentation
- Add execution-bridge, group-scheduler, model-selector, context-manager files
- Add prompts directory reference
- Document execution limits configuration
- Update task description reference

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 20:19:20 +01:00
arkonandClaude Opus 4.5 8fb8e6fa83 fix: memory leaks and error handling improvements
- execution-bridge: track and cleanup retry timers to prevent memory leaks
- model-selector: add exhaustive type check for ModelTier
- ralph-tracker: fix division by zero when summary.total is 0
- respawn-controller: remove event listeners on stop to prevent memory leaks
- screen-manager: use Promise.allSettled for better error handling in stats
- session-manager: use Promise.allSettled for stopAllSessions resilience

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 20:19:14 +01:00
arkon e0a695fed7 chore: bump version to 0.1417 2026-01-28 07:18:45 +01:00
arkonandClaude Opus 4.5 55e9f9f0a5 feat(execution): add ExecutionBridge for parallel task execution
Implements the Execution Optimizer Rework plan that enables the system
to actually use the optimizer metadata (parallelGroups, agentType,
recommendedModel, requiresFreshContext, estimatedTokens) that was
previously generated but ignored.

New components:
- ExecutionBridge: Central coordinator that loads optimized plans,
  manages parallel execution within groups, and coordinates with
  SpawnOrchestrator for session-based execution
- ModelSelector: Routes tasks to appropriate models (opus/sonnet/haiku)
  based on user defaults and agent type overrides. Optimizer
  recommendations are advisory only - user preferences always win
- GroupScheduler: Builds topologically ordered execution groups,
  manages dependencies, determines execution mode (session vs task-tool)
- ContextManager: Handles fresh context requirements via /clear+/init
  or new session spawning

Features:
- Parallel task execution within groups (configurable limit)
- Group-level dependency tracking (lower groups complete first)
- Partial failure handling (continue with non-dependent tasks)
- Model configuration in App Settings > Models tab
- Agent type overrides (explore, implement, test, review)
- Execution control API endpoints (start, pause, resume, cancel)
- SSE events for real-time execution progress visibility
- Execution history tracking

API endpoints:
- GET/POST/PUT /api/execution/* for execution control
- GET/PUT /api/execution/model-config for model settings

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 07:07:18 +01:00
arkonandClaude Opus 4.5 9eccd061b9 fix(orchestrator): pass enriched task description to all subagents
Verification, execution optimizer, and final review agents were receiving
the raw taskDescription instead of effectiveTaskDescription (which includes
research context). This caused them to work with outdated/wrong prompts
when regenerating plans.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 06:19:03 +01:00
arkonandClaude Opus 4.5 c17dc57fd9 feat(wizard): add minimize button and network retry for Ralph wizard
- Add minimize button to Ralph wizard modal header
- Minimized indicator shows at bottom of screen with elapsed time
- Click indicator to restore wizard
- Add retry logic (3 attempts with exponential backoff) for plan generation
- Shows "Connection lost, retrying..." message during retries

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 06:03:48 +01:00
arkonandClaude Opus 4.5 e60ef9a931 fix(respawn): preserve respawn state when session is renamed
Session updates (like renaming) were broadcasting toDetailedState() which
doesn't include respawn controller state. The frontend would then overwrite
the session object, losing respawnEnabled/respawnConfig/respawn fields.

Added getSessionStateWithRespawn() helper that includes respawn controller
state in all session:updated broadcasts.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 05:56:39 +01:00
arkonandClaude Opus 4.5 077e296750 fix(session): prevent isWorking flag from getting stuck true
- Add _awaitingIdleConfirmation flag to prevent status bar redraws from
  resetting the 2-second idle detection timeout
- Strip ANSI/OSC escape sequences before checking working patterns to
  avoid false positives from window titles like '3 File Reading Task'
- Reset _awaitingIdleConfirmation on PTY exit for proper cleanup

chore: bump version to 0.1412

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 05:34:25 +01:00
arkonandClaude Opus 4.5 1ff89c8251 fix(test): allow timing variance in StaleExpirationMap remaining TTL test
setTimeout isn't exact, so the remaining TTL after 100ms wait may be
slightly more than expected (901ms instead of ≤900ms). Adding 10ms
tolerance to prevent flaky test failures.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 05:20:10 +01:00
arkonandClaude Opus 4.5 c659b7769e feat: enhance /api/debug/memory endpoint with comprehensive metrics
- Add getStats() method to SubagentWatcher for internal resource tracking
- Return detailed Map sizes for all server and subagent Maps
- Track file watchers, directory watchers, and transcript watchers separately
- Track all timer types (respawn, idle, pending starts)
- Add totals for quick overview of resource usage
- Useful for debugging memory leaks and resource exhaustion

The enhanced endpoint now returns:
- Memory usage (heap, external, array buffers)
- Map sizes by component (server, subagent watcher)
- Watcher counts (file, directory, transcript)
- Timer counts by type
- Spawn agent statistics

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 04:44:29 +01:00
arkonandClaude Opus 4.5 596098015f feat: add StaleExpirationMap utility for TTL-based cache expiration
- Automatically removes entries not accessed within TTL
- Periodic cleanup with configurable interval
- Optional onExpire callback for cleanup notifications
- Refresh TTL on get (configurable)
- Touch, peek, getAge, getRemainingTtl methods
- Full iteration support
- Implements Disposable interface

Useful for caching ephemeral data like pending tool calls, subagent activity.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 04:41:49 +01:00
arkonandClaude Opus 4.5 63d2265316 refactor: migrate session.ts and respawn-controller.ts to shared utilities
- Replace local BufferAccumulator in session.ts with shared utility
- Replace local BufferAccumulator in respawn-controller.ts with shared utility
- Import buffer constants from config/buffer-limits.ts
- Reduces code duplication and centralizes buffer management

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 04:38:43 +01:00
arkonandClaude Opus 4.5 83e5b0b78e feat: add resource management types and utilities for memory optimization
- Add Disposable, BufferConfig, MemoryMetrics, CleanupRegistration types
- Create src/config/buffer-limits.ts with consolidated buffer size constants
- Create src/config/map-limits.ts with Map size limits to prevent unbounded growth
- Implement BufferAccumulator utility with configurable trim and onTrim callback
- Implement LRUMap with automatic eviction and O(1) operations
- Implement CleanupManager for unified resource cleanup with isStopped guard
- Add comprehensive tests for all new utilities

This lays the foundation for memory leak prevention and performance improvements.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 04:35:20 +01:00
arkon 0a928144da chore: bump version to 0.1411 2026-01-28 04:17:14 +01:00
arkon 38c36502ec chore: bump version to 0.1410 2026-01-28 04:04:40 +01:00
arkonandClaude Opus 4.5 beb4242c74 feat(ralph-wizard): add auto-start option and improve /init timing
- Research agent now explores local project first (CLAUDE.md priority)
- Added {WORKING_DIR} placeholder to research prompt
- New "Auto-Start After Plan" checkbox in advanced options
- Increased /init timeout from 10s to 3 minutes
- Added 3s delay after /init completes for stability

chore: bump version to 0.1409

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 03:33:41 +01:00
arkonandClaude Opus 4.5 d3690a963f refactor(prompts): extract plan orchestrator prompts to separate files
Each prompt now lives in its own file under src/prompts/ for easier
editing and iteration. Includes index.ts for convenient re-exports.

chore: bump version to 0.1408

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 03:08:18 +01:00
arkonandClaude Opus 4.5 78c4912dcc fix(image-watcher): detect images in subdirectories
Removed depth:0 restriction so images saved in src/, assets/, etc.
are detected. Added filtering for node_modules, .git, dist, .next
for performance.

chore: bump version to 0.1407

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 02:43:18 +01:00