Commit Graph
618 Commits
Author SHA1 Message Date
arkon 65f8cd7384 fix: scroll terminal to bottom when mobile keyboard appears 2026-01-31 08:29:14 +01:00
arkon 0f8ea635b5 fix: increase mobile content margin below fixed header 2026-01-31 08:25:25 +01:00
arkon 92ec121ce7 feat: fixed floating tabs on mobile - header stays at top when scrolling 2026-01-31 08:19:41 +01:00
arkonandClaude Opus 4.5 8641296aa2 fix: exclude xterm terminal from keyboard scroll handling
- Terminal has hidden textarea that was triggering scrollIntoView
- Exclude elements inside .xterm or .terminal-container
- Fixes scroll being broken when tapping terminal

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 08:11:37 +01:00
arkonandClaude Opus 4.5 24af779d54 fix: drastically simplify mobile keyboard handling
- Remove all complex viewport tracking (was causing scroll issues)
- Remove keyboard-visible class and CSS (not needed)
- Remove --keyboard-height CSS variable (not needed)
- Simple approach: on focusin, wait 400ms, scrollIntoView
- Keep scroll-margin on phone inputs as CSS fallback
- Much more reliable and no side effects

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 08:06:38 +01:00
arkonandClaude Opus 4.5 61c7a57426 fix: prevent app offset on mobile refresh - simplify keyboard handling
- Revert interactive-widget viewport meta (caused iOS layout shifts)
- Delay initial viewport height capture to let viewport stabilize
- Update initialViewportHeight on window resize (address bar changes)
- Remove visualViewport scroll handler (not needed, caused issues)
- Scope keyboard CSS to .modal.active only
- Use vh instead of dvh for more stable layout

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 08:02:27 +01:00
arkonandClaude Opus 4.5 1288338e58 fix: keyboard visibility offset issue - remove problematic top positioning
- Remove top/bottom positioning from modal-content when keyboard visible
- Reset --viewport-offset-top to 0 when keyboard closes
- Add focusout handler to help reset keyboard state on iOS
- Simplify modal keyboard CSS to only adjust max-height

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:58:12 +01:00
arkonandClaude Opus 4.5 fd30040289 feat: mobile keyboard input visibility - scroll inputs into view when keyboard opens
- Add KeyboardHandler module using visualViewport API for keyboard detection
- Set --keyboard-height CSS variable and toggle .keyboard-visible class
- Auto-scroll focused inputs into view after keyboard appears (350ms delay)
- Update viewport meta with interactive-widget=resizes-content for Android
- Add scroll-margin on inputs for tablet/phone breakpoints
- Resize modal-content and modal-body when keyboard visible on mobile

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:51:29 +01:00
arkon 5b4f79a3a5 fix: restore desktop UI to pre-mobile-optimization state, keep mobile optimizations in media queries 2026-01-31 07:17:02 +01:00
arkon ef220e9987 fix: hide header version display 2026-01-31 07:14:05 +01:00
arkon 09572ce9e2 fix: restore desktop Run Claude button with blue gradient, keep mobile optimizations separate 2026-01-31 07:13:23 +01:00
arkon c8d5fe0621 chore: bump version to 0.1447 2026-01-31 06:30:32 +01:00
arkonandClaude Opus 4.5 140bf6fdd6 fix: bottom toolbar layout - show case selector, gray Run Claude button
- Rearranged bottom toolbar: Run Claude + Run Shell left, + case selector center
- Made Run Claude button gray instead of blue gradient
- Fixed mobile CSS that was hiding toolbar-center with display:none
- Reduced toolbar height 20%, increased header height
- Tighter session tab styling (smaller padding, font, border-radius)
- Added version display to header next to logo

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:48:55 +01:00
arkonandClaude Opus 4.5 ad8410e29a fix: mobile terminal scroll - z-index viewport above screen rows
xterm.js has known limited mobile touch support because the viewport
sits underneath the screen rows. Fixed by:
- Setting xterm-viewport z-index: 10 on mobile to receive touch events
- Enabling native browser scrolling with touch-action: pan-y
- Adding -webkit-overflow-scrolling: touch for iOS momentum
- Skipping custom JS scroll handlers on mobile devices
- Moving wizard drag listeners to only attach during actual drag

See: https://github.com/xtermjs/xterm.js/issues/5377

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:36:12 +01:00
arkon 6123ce8ba9 chore: bump version to 0.1444 2026-01-31 04:44:46 +01:00
arkonandClaude Opus 4.5 2a8882a94b chore: bump version to 0.1443
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 22:25:59 +01:00
arkonandClaude Opus 4.5 20283019f4 feat: comprehensive codebase improvements (cleanup, logic, performance)
Code Cleanups:
- Consolidated PlanTaskStatus and TddPhase types to types.ts
- Standardized node: prefix for Node.js builtin imports
- Fixed timer type to NodeJS.Timeout in respawn-controller

Logic Improvements:
- Fixed AI check race condition with UUID tracking in respawn-controller
- Added comprehensive _isStopped guards in session timer callbacks
- Made RalphTracker reset events non-reentrant via process.nextTick()
- Improved SessionManager mutex pattern reliability

Performance Optimizations:
- Fixed pendingToolCalls memory leak with TTL cleanup in subagent-watcher
- Improved LRUMap.newest() from O(n) to O(1) with _newestKey tracking

Documentation:
- Enhanced README antiflicker section with 6-layer technical details

Version: 0.1441

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 19:05:46 +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 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 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 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 7dfd97df58 chore: bump version to 0.1434 2026-01-30 11:30:51 +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 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 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 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 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