Commit Graph
518 Commits
Author SHA1 Message Date
arkonandClaude Opus 4.5 a85603d8cf docs: add Mobile UI section to README
- Document fixed toolbar and keyboard handling
- Swipe navigation between sessions
- Keyboard accessory bar with /init, /clear, /compact
- Confirmation dialogs for commands
- Touch target sizes and mobile simplifications

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 15:41:15 +01:00
arkonandClaude Opus 4.5 d70e2d1d93 fix: mobile toolbar button sizing and accessory bar commands
- Fix Run Claude button being squeezed on mobile (use fit-content width)
- Remove Send button from accessory bar
- Add /init, /clear, /compact buttons with confirmation dialogs
- Center toolbar buttons instead of stretching

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 14:46:26 +01:00
arkon b655d2e29e fix: image watcher now uses relative path for subdirectory images
- Added relativePath field to ImageDetectedEvent
- Compute relative path from working directory in image-watcher
- Use relativePath in frontend URL (fixes 'Failed to load image' for subdirs)
- Minor CLAUDE.md improvements

chore: bump version to 0.1461
2026-01-31 14:32:20 +01:00
arkon c7488c4a56 fix: move mobile toolbar to bottom edge 2026-01-31 08:33:37 +01:00
arkon d3bc6fe655 fix: move mobile toolbar closer to bottom (30px -> 10px) 2026-01-31 08:30:51 +01:00
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 ce0139e393 chore: bump version to 0.1442
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 19:50:19 +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 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