Commit Graph
240 Commits
Author SHA1 Message Date
arkonandClaude Opus 4.5 7c8dcdbbc4 style: fix Ralph panel info section alignment with CSS grid
Use CSS grid with display:contents for perfect value alignment.
Labels are right-aligned in column 1, values aligned in column 2.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 20:30:54 +01:00
arkonandClaude Opus 4.5 f014aecd41 style: unify Ralph panel info section
Merge Waiting for, Elapsed, and Tasks into one unified card:
- All labels aligned on left (60px width)
- Values aligned after labels
- Task cards flow to the right
- Cleaner, more compact layout

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 20:26:04 +01:00
arkonandClaude Opus 4.5 3ef9b29899 style: improve Ralph panel Tasks label and detached mode
- Move Tasks label to left side with count underneath (TASKS / 16/16)
- Make detached panel larger (600x400) and properly resizable
- Allow tasks grid to expand to fill available space when detached
- Add promo screenshot of detached panel

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 20:22:17 +01:00
arkonandClaude Opus 4.5 e16e1a7ef4 style: remove redundant Tasks header from Ralph panel
The task count is already shown in the summary bar (✓ 16/16), so the
"Tasks" header in the expanded view was redundant. Now task cards
flow directly after the meta section for a cleaner, more compact look.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 20:18:59 +01:00
arkonandClaude Opus 4.5 7ebe130828 style: improve Ralph panel meta section and task cards
- Add card-like background to meta section (Waiting for / Elapsed)
- Fix label width alignment so values are properly aligned
- Remove strikethrough on completed tasks (keep readable with checkmark)
- Uppercase labels with muted color for better visual hierarchy
- Add promo screenshots for README

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 20:16:52 +01:00
arkonandClaude Opus 4.5 4d689a7f26 style: improve toolbar and Ralph panel mini ring
- Better center 100% text in mini progress ring
- Make case selector auto-width with min/max constraints
- Reduce folder path max-width to 250px
- Match Run Claude button color to Claudeman header color

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 20:04:43 +01:00
arkonandClaude Opus 4.5 141bb40eb4 style: improve Ralph panel mini ring gradient and meta layout
- Add gradient definition to mini ring SVG so it shows colors when
  collapsed (was only defined in large ring)
- Change meta items to row layout so "Waiting for" and completion
  phrase are inline
- Reduce font sizes for completion phrase and elapsed time
- Add text overflow handling for long completion phrases

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 20:00:57 +01:00
arkonandClaude Opus 4.5 612274743f fix: Ralph panel toggle icon no longer changes erratically
The toggle icon was confusing because CSS rotation (90deg when expanded)
combined with JS icon swapping caused left arrow → right arrow transitions.

Changes:
- Remove CSS rotation transform from .ralph-toggle
- Use consistent down/up arrows matching Monitor panel convention
- Collapsed: ▼ (down) - click to expand
- Expanded: ▲ (up) - click to collapse

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 18:56:55 +01:00
arkonandClaude Opus 4.5 7951f69baa style: make Ralph header percentage smaller and colorful
- Reduced font size from 0.55rem to 0.45rem to fit in mini ring
- Added gradient text effect matching the progress ring colors

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 18:40:52 +01:00
arkonandClaude Opus 4.5 e3d6049b19 style: improve tab and Ralph panel compact layout
- Tabs now size to fit content (removed max-width)
- Close/gear icons hidden by default, appear on hover (with width transition)
- Tabs wrap to new row when container is full
- Ralph progress ring enlarged to 75px for better percentage display
- Tighter spacing in Ralph meta section

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 18:05:43 +01:00
arkonandClaude Opus 4.5 bef38234fa refactor: make Ralph Wiggum panel more compact
- Horizontal layout: ring | meta | tasks in one row
- Smaller progress ring (60px)
- Tasks displayed inline with wrap
- Removed Iterations counter from summary and detail
- Reduced overall panel height

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 17:59:34 +01:00
arkonandClaude Opus 4.5 6599ad0600 feat: add close buttons for Ralph tracker and Monitor panels
- Add close button (×) to Ralph Wiggum tracker panel
- Add close button (×) to Monitor panel
- Add "Show Monitor Panel" toggle in app settings (default: on)
- closeRalphTracker() disables tracker and hides panel
- closeMonitor() hides panel and saves setting

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 17:54:59 +01:00
arkonandClaude Opus 4.5 d406ed9a28 fix: update Ralph panel toggle icons
- Collapsed: ◀ (left arrow)
- Expanded: ▲ (up arrow)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 17:49:42 +01:00
arkonandClaude Opus 4.5 2e31db524a feat: UI consistency improvements
- Use same detach icon (⧉) for Ralph panel as Monitor panel
- Auto-focus on single session tab when only one session exists

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 17:37:49 +01:00
arkonandClaude Opus 4.5 eda7c0fd6c fix: preserve scroll position when toggling Ralph Wiggum panel
- Save xterm viewport scroll position before toggle
- Restore scroll position after panel expand/collapse
- Refit terminal to new container size after layout change
- Add overflow-anchor: none to prevent browser scroll anchoring

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 17:24:42 +01:00
arkonandClaude Opus 4.5 3646c3b34a fix: only show Complete status when all todos are done
Previously the Ralph tracker showed "Complete" whenever a completion phrase
was detected, even if tasks were still pending. Now it only shows "Complete"
when all todos are actually marked completed (100%).

Shows "Tracking" when:
- Tracker is enabled with pending tasks
- Completion phrase detected but tasks remain

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 16:05:37 +01:00
arkonandClaude Opus 4.5 1cd68cabaf fix: remove completion celebration animation
Remove the large "done" animation that appeared when Ralph loops completed.
The completion state is now simply reflected in the tracker panel without
the intrusive overlay.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 15:57:30 +01:00
arkonandClaude Opus 4.5 23430754a0 fix: render Ralph panel when global tracker setting enabled for new sessions
When the global "Enable Ralph Wiggum Tracker" setting was enabled,
new sessions had the tracker enabled on the server but the panel
wasn't rendered. The inner-config API call happened before
activeSessionId was set, so updateInnerState() didn't trigger
renderInnerStatePanel(). Added explicit call after setting activeSessionId.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 22:18:19 +01:00
arkonandClaude Opus 4.5 a7ab2aebd4 fix: persist Ralph Wiggum tracking settings across server restarts
Restore inner loop tracker state (enabled flag, todos, loop state) when
sessions are restored from screen sessions after server restart.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 20:01:52 +01:00
arkonandClaude Opus 4.5 3e26a6a18e fix: session restoration now properly attaches to existing screens
- Pass existing screenSession to Session constructor for restored sessions
- Skip terminal buffer clearing when attaching to restored (existing) screens
- Frontend auto-calls /interactive endpoint when selecting a restored session
- Fixes issue where restored sessions appeared broken after server restart

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 19:56:28 +01:00
arkonandClaude Opus 4.5 611815628e fix(ui): improve monitor panel icons and width
- Change toggle icon to show ▲ when closed, ▼ when open
- Update detach/attach icons: ⧉ (detach) and ⊞ (attach)
- Adjust panel width to 380px

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 19:28:46 +01:00
arkonandClaude Opus 4.5 0d2e1f20a9 feat(ui): hide monitor panel by default and reduce width
- Remove auto-open of monitor panel on startup
- Reduce monitor panel width from 500px to 320px

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 19:24:33 +01:00
arkonandClaude Opus 4.5 e202d0753d feat(ui): add header display settings for font controls, system stats, and token count
- Add visibility toggles in App Settings modal for A-/A+, CPU/MEM, and token count
- Make settings gear icon larger (32px) for better accessibility
- Apply settings on startup and immediately when saved
- All options enabled by default, persisted to localStorage

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 19:22:28 +01:00
arkonandClaude Opus 4.5 fc319d8987 feat(ui): add enable/disable toggle for Ralph Wiggum tracker
Add ability to enable/disable the Ralph tracker:
- Per-session toggle in Session Options > Ralph Wiggum tab
- Global default toggle in App Settings

Changes:
- Add "Enable Tracker" toggle to ralph-tab in session options modal
- Add "Enable Ralph Wiggum Tracker" toggle to app settings modal
- Update /api/sessions/:id/inner-config endpoint to handle `enabled` param
- Add CSS for toggle switch component
- New sessions inherit global setting from app settings
- Setting is saved in innerConfig and synced with backend

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 18:56:34 +01:00
arkonandClaude Opus 4.5 6a414a2648 feat(ui): make Ralph Wiggum tracker panel detachable
Add ability to detach the Ralph Wiggum tracker panel as a floating
window that can be dragged around the screen.

Changes:
- Add detach button to the Ralph panel header
- Restructure HTML to separate clickable content from controls
- Add CSS styles for detached state (floating, draggable, resizable)
- Add toggleRalphDetach() and setupRalphDrag() JavaScript methods
- Panel auto-expands when detached for better visibility

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 18:41:14 +01:00
arkonandClaude Opus 4.5 2c38f7924a feat(tracker): disable Ralph Wiggum tracker by default, auto-enable on detection
The InnerLoopTracker is now disabled by default and auto-enables when
Ralph-related patterns are detected:
- /ralph-loop command
- <promise>PHRASE</promise> completion phrases
- TodoWrite tool usage
- Iteration patterns (Iteration 5/50, [5/50])
- Todo checkboxes (- [ ]/- [x]) or indicator icons

This reduces noise for sessions that don't use Ralph loops while
maintaining full functionality when loops are detected.

Changes:
- Add `enabled` property to InnerLoopState type
- Add enable()/disable() methods to InnerLoopTracker
- Implement shouldAutoEnable() for pattern detection
- Update frontend to show "Tracking" status when enabled
- Add CSS for tracking state indicator
- Update CLAUDE.md documentation
- Add comprehensive tests for auto-enable behavior

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 18:34:43 +01:00
arkonandClaude Opus 4.5 7e7bfb66e4 fix(ui): fix case creation not updating dropdown immediately
- Add cache-busting to /api/cases fetch to prevent stale data
- Use created case path from API response (was using old empty caseData)
- Add selectCaseName parameter to loadQuickStartCases for post-create selection
- Add toast() alias for showToast() to fix "toast is not a function" error
- Prevent duplicate event listeners on case dropdown
- Show "(will be created)" hint when no cases exist
- Add Ralph Wiggum config tab to session options modal
- Add inner-config API endpoint for Ralph loop settings

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 18:25:31 +01:00
arkonandClaude Opus 4.5 d1a6955931 fix(ui): prevent duplicate loop completion notifications
Add deduplication guard to prevent spamming the same completion toast.
Uses a Set to track shown completions per session, with 30s expiry to
allow re-notification if loop restarts.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:22:55 +01:00
arkonandClaude Opus 4.5 3b072c051f feat(ui): rename panel to "Ralph Wiggum Tracker"
Add title text to the Ralph panel summary bar for better identification.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:21:57 +01:00
arkonandClaude Opus 4.5 684ccc2b07 feat(ralph): enhance Ralph Wiggum loop visualization
Add polished, animated Ralph Wiggum Loop panel with:
- Circular progress ring showing task completion percentage
- Task cards with status indicators (pending/in-progress/completed)
- Animated status badge with pulsing indicator when active
- Completion celebration animation with animated checkmark
- Smart time formatting ("1h 23m" instead of "1.38 hours")

Enhanced detection patterns based on official Ralph plugin:
- /ralph-loop command detection
- Iteration patterns: "Iteration 5/50", "[5/50]"
- Max iterations from YAML: "max-iterations: 50"
- TodoWrite tool output detection

Adds maxIterations field to InnerLoopState for tracking loop limits.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:09:56 +01:00
arkonandClaude Opus 4.5 085b78c5e3 fix: use writeViaScreen for all programmatic console input
- Auto-compact now uses writeViaScreen with \r
- Auto-clear now uses writeViaScreen with \r
- Standardized respawn controller to use \r consistently
- Removed session name input from options modal (use right-click to rename)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 16:39:45 +01:00
arkonandClaude Opus 4.5 d8ca000da1 refactor(ui): move save/cancel buttons inline with session name
Shortens the session options modal by putting the name input
and action buttons on the same row at the top.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 15:07:52 +01:00
arkonandClaude Opus 4.5 17a53c4da2 fix(ui): only show 'session renamed' toast when name actually changes
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 15:06:41 +01:00
arkonandClaude Opus 4.5 05322000f3 fix(ui): remove Node.js process references from browser code
process.env.HOME and process.cwd() don't exist in browsers.
Replaced with proper error handling when case path is missing.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 15:03:45 +01:00
arkonandClaude Opus 4.5 d412096649 fix(respawn): wait for idle timeout before triggering cycle
- Fixed respawn controller immediately sending commands when Claude
  becomes idle, which prevented users from typing. Now waits for
  idleTimeoutMs (default 10s) before triggering the respawn cycle.
- Removed Directory field from Session Options modal for cleaner UI
- Compacted CLAUDE.md documentation for better readability

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 15:00:49 +01:00
arkonandClaude Opus 4.5 035ffb42b9 feat(ui): improve respawn duration with preset buttons
Replace the simple number input for respawn duration with a preset
button group (30m, 1h, 2h, 4h, 8h, ∞, Custom). Move duration to be
the first option in the Respawn Controller settings.

- Add duration preset buttons with visual highlighting for selection
- ∞ (unlimited) is selected by default
- Custom option reveals a number input for arbitrary values
- Reset to default when modal opens

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 14:37:20 +01:00
arkonandClaude Opus 4.5 ee8f6bd0cb feat: track Ralph Wiggum loops and todo lists in Claude sessions
Add InnerLoopTracker to detect and expose internal Claude Code state
running inside claudeman sessions by parsing terminal output patterns.

Detection patterns:
- Completion phrases: <promise>PHRASE</promise>
- Todo items: checkbox format, indicator icons, status parentheses
- Loop status: cycle counts, elapsed time, start/completion

New features:
- Inner state panel UI (collapsible, below session tabs)
- SSE events: innerLoopUpdate, innerTodoUpdate, innerCompletionDetected
- API endpoint: GET /api/sessions/:id/inner-state
- State persistence to ~/.claudeman/state-inner.json

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 13:21:01 +01:00
arkonandClaude Opus 4.5 d711ec8b3a feat: add kickstart prompt and auto-compact context options
Kickstart Prompt:
- Remove Idle Timeout setting from respawn UI (uses 10s default)
- Add Kickstart Prompt field sent when /init doesn't trigger work
- New states: monitoring_init, sending_kickstart, waiting_kickstart
- Monitors 3s after /init to detect if Claude started working

Auto-Compact Context:
- Add auto-compact at 110k tokens (sends /compact with optional prompt)
- Preserves summarized context unlike /clear which wipes everything
- Optional focus prompt to guide what compact should preserve
- Blocks auto-clear while compacting to prevent conflicts

Also updates auto-clear default threshold from 100k to 140k tokens.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 13:08:53 +01:00
arkonandClaude Opus 4.5 66c8f323a8 refactor: remove Step Delay option from respawn UI
The interStepDelayMs config is rarely needed and clutters the UI.
Backend still supports it with default value (1000ms).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 12:52:37 +01:00
arkonandClaude Opus 4.5 ce61a3b2f2 perf: optimize hot paths across server, session, and frontend
- Pre-compile regex patterns (ANSI escape, token parsing) in session.ts
- Optimize SSE broadcast to serialize JSON once for all clients
- Add DOM element caching ($() helper) to avoid repeated getElementById
- Throttle resize observer with dimension change detection
- Use array.join() for session tab HTML building
- Replace DOM-based escapeHtml with regex replacement
- Cache toast container reference

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 11:48:02 +01:00
arkonandClaude Opus 4.5 0af813b3c4 style: label Kill All button in monitor panel
Change icon-only button to labeled "Kill All" button for clarity

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 11:37:16 +01:00
arkonandClaude Opus 4.5 7acce33d7d style: remove connection status, move tokens to far right
- Remove "Connected/Disconnected" indicator to save header space
- Move token count to the far right of the header (after settings icon)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 11:36:13 +01:00
arkonandClaude Opus 4.5 08ee3cd9b7 style: increase width of tabs, case select, and working dir display
- Session tabs: 150px → 220px (show more of filename)
- Case select dropdown: 120px → 180px (show full case names)
- Working dir display: 300px → 450px (show full paths)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 11:34:42 +01:00
arkonandClaude Opus 4.5 d0194d6420 fix: improve screen cleanup and add ghost screen discovery
- killScreen now uses 4 strategies for reliable cleanup:
  1. Kill all child processes recursively (SIGTERM then SIGKILL)
  2. Kill entire process group (-PID) to catch orphans
  3. Kill screen by name (screen -X quit)
  4. Direct SIGKILL as final fallback
- Refresh screen PID from screen -ls before killing (handles stale PIDs)
- reconcileScreens now discovers unknown claudeman screens from screen -ls
  This prevents "ghost" screens that persist after screens.json is lost
- restoreScreenSessions handles newly discovered screens

The rapid session creation test now fails because discovery is working -
it finds screens that weren't killed fast enough (test timing issue)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 11:24:14 +01:00
arkonandClaude Opus 4.5 a77abb574b fix: prevent orphaned claude processes and session memory leaks
- killScreen now finds and kills all child processes before quitting screen
  to prevent claude processes from becoming orphaned (the main bug)
- Add cleanupSession() method for comprehensive resource cleanup:
  respawn controllers, timers, batches, event listeners, and sessions
- Fix /api/run endpoint to cleanup sessions after completion
- Fix /api/quick-start error path to cleanup on failure
- Add MAX_CONCURRENT_SESSIONS (50) limit to prevent unbounded growth
- Update CLAUDE.md with improved documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 11:19:13 +01:00
arkonandClaude Opus 4.5 23cafd2556 feat: UI improvements - buttons, monitor panel, system stats
- Redesign Run Claude button with purple gradient
- Redesign Run Shell button with dark green gradient
- Add + button to create new cases from toolbar
- Add Create Case modal for quick case creation
- Add Kill All modal with two options (tabs only vs full kill)
- Add CPU/Memory progress bars with color gradients
- Make monitor panel detachable as floating draggable window
- Monitor panel resizable when detached (min 350x250)
- Default CLAUDE.md template now uses /home/arkon/default/CLAUDE.md
- Streamline CLAUDE.md documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 10:36:30 +01:00
arkonandClaude Opus 4.5 6a5beb3afa feat: add Kill All button to monitor panel + center close modal
- Add Kill All button with confirmation dialog to monitor panel header
- Button shows red X icon, confirms before killing all sessions
- Center-align close session modal options for better UX

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 07:57:13 +01:00
arkonandClaude Opus 4.5 c9094e6cf0 fix: send Ctrl+L after tab switch to fix squished Claude display
When switching between Claude session tabs, the terminal buffer was
rendered at a different size than the current terminal. This caused
Claude's banner to appear squished/corrupted.

Changes:
- Remove ANSI regex stripping that was breaking terminal output
- Send Ctrl+L after resize to trigger Claude CLI to redraw at correct size
- Only send Ctrl+L for Claude sessions, not shell sessions

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 07:54:30 +01:00
arkonandClaude Opus 4.5 5d1c60fd1a fix: send Ctrl+L after tab switch to fix squished Claude display
When switching between Claude session tabs, the terminal buffer was
rendered at a different size than the current terminal. This caused
Claude's banner to appear squished/corrupted. Sending Ctrl+L after
resize triggers Claude CLI to redraw at the correct dimensions.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 07:35:55 +01:00
arkonandClaude Opus 4.5 2cf3d66d0f fix: clear screen initialization blank space after attaching
GNU screen creates blank space at the top when initializing sessions.
This is now handled after attaching to the screen:

- Claude sessions: emit clearTerminal event after 100ms, client clears xterm
- Shell sessions: send 'clear' command after 100ms

Also updates CLAUDE.md with documentation of the fix.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 07:33:33 +01:00