Commit Graph
1368 Commits
Author SHA1 Message Date
arkonandClaude Opus 4.5 f5138e86a6 docs: document session cleanup and kill process
- Add Session Lifecycle & Cleanup section to CLAUDE.md
- Document MAX_CONCURRENT_SESSIONS limit (50)
- Document 4-strategy kill process for screens
- Document ghost screen discovery on startup
- Document cleanupSession() function
- Update ScreenManager description

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 11:31:32 +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 45a1d09665 docs: document tab switching Ctrl+L fix
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 07:54:56 +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
arkonandClaude Opus 4.5 7979e77924 perf: optimize for long-running Claude sessions
Critical fixes (unbounded growth):
- Add 64KB line buffer limit with 100ms periodic flush in session.ts
- Add task tracker cleanup (max 100 completed tasks)
- Add scheduled runs auto-cleanup after 1 hour
- Fix session leaks in scheduled run iterations

High priority (performance):
- Add SSE event batching (50ms output, 100ms task updates)
- Parallelize screen stats with Promise.all()
- Add 1MB buffer limit to respawn controller

Medium priority (frontend):
- Make xterm scrollback configurable (default 5000)
- Debounce renderSessionTabs() at 100ms

New feature:
- Add CPU and memory usage display in frontend header
- New /api/system/stats endpoint

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 06:51:25 +01:00
arkonandClaude Opus 4.5 40fd13480d docs: add missing API endpoints to CLAUDE.md
Document three endpoints that were in the code but missing from docs:
- GET /api/sessions/:id/output
- POST /api/sessions/:id/run
- POST /api/run

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 06:40:18 +01:00
arkonandClaude Opus 4.5 94b4ee5e6e docs: expand API endpoints and add frontend file references
- Add complete API endpoint listing organized by category
- Include request body formats for all endpoints
- Add key frontend files reference for easier navigation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 05:28:45 +01:00
arkonandClaude Opus 4.5 a471920c58 fix: auto-switch to new session now works correctly
Fixed bug where firstSessionId was set when i===1 instead of i===0,
causing it to never be set when creating a single session.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 05:00:21 +01:00
arkonandClaude Opus 4.5 c058395c3e feat: improve UI - larger monitor, cleaner close modal, remove toolbar buttons
- Monitor panel now 500px wide and 80vh max height
- Removed Copy, Clear, Monitor, Kill buttons from toolbar
- Redesigned close session modal with cleaner options:
  - "Remove Tab" keeps screen running
  - "Kill Claude" terminates completely
- Auto-switch to new session when created

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 04:55:51 +01:00
arkonandClaude Opus 4.5 0245f61c37 feat: add option to keep screen alive when closing tab
When clicking (x) on a session tab, users now choose:
- Hide Tab (Keep Screen): removes tab but screen session stays alive
- Close & Kill Screen: terminates both tab and screen session

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 04:47:48 +01:00
arkonandClaude Opus 4.5 79c5e4ba09 docs: update token tracking documentation
- Document different token tracking approaches for one-shot vs interactive modes
- Update PTY spawn mode examples to show --output-format stream-json flag
- Explain that interactive mode parses tokens from status line with 60/40 split estimate

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 04:45:51 +01:00
arkonandClaude Opus 4.5 40c2ef1491 fix: enable token tracking for both interactive and one-shot modes
- Add --output-format stream-json to runPrompt() for JSON output with
  token usage data
- Add parseTokensFromStatusLine() to parse tokens from Claude's status
  line display in interactive mode (e.g., "123.4k tokens")
- Token parsing supports numeric, k (thousands), and M (millions) suffixes
- Estimates input/output split (60/40) for interactive mode since only
  total is displayed

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 04:42:13 +01:00
arkonandClaude Opus 4.5 e4dfee0ea7 style: remove terminal padding completely for zero wasted space
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 04:39:21 +01:00
arkonandClaude Opus 4.5 96a4f5d79a style: reduce terminal padding to minimize wasted space
Changed xterm padding from 0.5rem to 2px 4px for tighter layout.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 04:32:50 +01:00
arkonandClaude Opus 4.5 ca98b33d6a feat: use w1/w2/s1/s2 naming convention for sessions
- Claude sessions: w1-casename, w2-casename, etc.
- Shell sessions: s1-casename, s2-casename, etc.
- Never reuses numbers - always increments from highest existing

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 04:27:57 +01:00
arkonandClaude Opus 4.5 f676df2a8c style: change busy tab indicator from yellow to green
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 04:23:50 +01:00
arkonandClaude Opus 4.5 ea9618e281 feat: improve Monitor panel UX and preserve session names
- Monitor panel now opens by default on webapp start
- Replace "Reconcile" button with refresh icon (↻)
- Change close button to toggle (▼/▲) for collapse/expand
- Preserve session display names when saving screen info
- Use stored name when restoring sessions (no more "Restored:" prefix)
- Show session name in Monitor panel instead of screen name
- Kill screen session when closing a tab

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 04:22:41 +01:00
arkonandClaude Opus 4.5 34c86488dd fix: hide Background Tasks section in Monitor panel when empty
Instead of showing "No background tasks" message, the section is now
completely hidden when there are no tasks, making the UI cleaner.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 04:02:46 +01:00
arkonandClaude Opus 4.5 e286866c60 docs: clarify web server startup commands in CLAUDE.md
Make it explicit that `npm run dev` shows CLI help, not starts server.
Document the correct command: `npx tsx src/index.ts web`

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 03:43:59 +01:00
arkonandClaude Opus 4.5 bf41dab827 feat: UI improvements and E2E testing with agent-browser
- Move font controls (A+/A-) to left of connection status
- Redesign tab count with stepper buttons (−/number/+)
- Remove respawn panel, integrate settings into session options modal
- Fix Monitor panel SSE handler (wrong element ID)
- Add screen wrapping support to Session class
- Add E2E testing skill using agent-browser
- Document testing approach in README.md and CLAUDE.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 03:40:57 +01:00
arkonandClaude Opus 4.5 7d01d3f274 docs: update README.md and CLAUDE.md with new features
README.md:
- Add multi-tab sessions, monitor panel, session restoration to features
- Update keyboard shortcuts (remove Ctrl+N, update descriptions)
- Document new UI features in Additional Features section

CLAUDE.md:
- Add screen-manager.ts to architecture diagram
- Add ScreenManager to key components section
- Update WebServer description with session restoration
- Add completed tasks for recent features

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 03:02:04 +01:00
arkonandClaude Opus 4.5 5b2091bd86 feat: add multi-tab feature to open 1-10 Claude sessions at once
- Add number input (1-10) next to "Run Claude" button in toolbar
- When tabCount > 1, create sessions named "1-projectname", "2-projectname", etc.
- All sessions share the same working directory (case folder)
- First session is auto-selected after creation
- Add CSS for small number input in toolbar

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 02:55:10 +01:00
arkonandClaude Opus 4.5 27323217a1 feat: restore screen sessions on server restart
- Add restoreScreenSessions() method to WebServer
- On startup, reconcile screens to find alive sessions from previous run
- Create Session objects for each alive screen with preserved ID
- Start stats collection automatically when restored sessions exist
- Log restoration activity for debugging

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 02:51:54 +01:00
arkonandClaude Opus 4.5 89c9b0fe85 feat: merge Process Monitor and Background Tasks into single Monitor panel
- Combine two separate panels into unified Monitor panel with sections
- Move font size controls from toolbar to header
- Add CSS styles for new monitor panel with section headers
- Update JS to handle combined panel with toggleMonitorPanel()
- Keep legacy toggleTaskPanel() as alias for backward compatibility

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 02:48:28 +01:00
arkonandClaude Opus 4.5 c2177b659e fix: remove New Session panel entirely
- Remove New Session slide-up panel from HTML
- Remove createNewSession, hideNewSessionPanel, createSessionFromPanel functions
- Remove Ctrl+N keyboard shortcut
- Remove "New Session" from help modal
- Clean up loadQuickStartCases and closeAllPanels references

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 02:40:03 +01:00
arkonandClaude Opus 4.5 3f614745d6 fix: also remove New Session tab from JS render function
The renderSessionTabs() function was re-adding the + button. Now it only
renders session tabs without the new session button. Users can still
create sessions via Ctrl+N keyboard shortcut.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 02:28:10 +01:00
arkonandClaude Opus 4.5 0e0b5263bc fix: remove New Session tab from header
The gear icon for app settings was already added, but the old New Session
tab was not removed. Users can still create sessions via Ctrl+N or other UI elements.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 02:27:25 +01:00
arkonandClaude Opus 4.5 fa036aecf6 docs: mark all pending tasks as completed
All 6 tasks from the pending list have been implemented:
1. Settings gear icon with app settings modal
2. Confirmation dialog for session close
3. Default CLAUDE.md template path setting
4. GNU screen wrapping with Process Monitor panel
5. UI cleanup (respawn controls, directory width)
6. Terminal focus escape sequence filtering

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 02:20:13 +01:00
arkonandClaude Opus 4.5 56c9f670e6 feat: add GNU screen wrapping with process monitor
Add screen session management infrastructure:
- ScreenManager class to create, track, and kill GNU screen sessions
- Persistence of screen sessions to ~/.claudeman/screens.json
- Process stats collection (memory, CPU, child count)
- Reconciliation to detect dead/orphan screens

New API endpoints:
- GET /api/screens - list screens with stats
- DELETE /api/screens/:sessionId - kill screen
- POST /api/screens/reconcile - find dead screens
- POST /api/screens/stats/start|stop - control stats polling

New Process Monitor panel:
- Slide-up panel with real-time stats (2s updates)
- Shows memory, CPU, child processes per screen
- Kill button for each screen session
- Reconcile button to clean up dead screens

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 02:18:51 +01:00
arkonandClaude Opus 4.5 b30657a36f feat: use custom CLAUDE.md template path when creating cases
When creating new cases via /api/cases or /api/quick-start, the
server now checks ~/.claudeman/settings.json for a defaultClaudeMdPath.
If found and the file exists, it uses that template with placeholder
substitution ([PROJECT_NAME], [PROJECT_DESCRIPTION], [DATE]).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 02:12:32 +01:00
arkonandClaude Opus 4.5 885e9dc729 feat: add confirmation dialog for session close
Shows a confirmation modal when clicking "x" on session tabs to warn
the user that the Claude session and running processes will be
terminated. Users can cancel or confirm the close action.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 02:10:44 +01:00
arkonandClaude Opus 4.5 5f29455bbb feat: add settings gear icon with app settings modal
- Add gear icon button in header-right for app settings
- Create App Settings modal with fields for:
  - Default CLAUDE.md template path
  - Default working directory
- Settings persist to ~/.claudeman/settings.json
- Add GET/PUT /api/settings endpoints
- Keep "+" tab for creating new sessions (useful UX)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 02:08:58 +01:00
arkonandClaude Opus 4.5 0876c2d4e9 docs: add Type Definitions section to CLAUDE.md
Document the centralized TypeScript interfaces in src/types.ts
including core state types, configuration types, and API error handling.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 02:07:46 +01:00
arkonandClaude Opus 4.5 363b6d1147 refactor: UI cleanup - move respawn controls, remove mode label, fix dir width
- Move respawn controls from toolbar to session options modal
- Remove unnecessary Mode label from session options (visible in tab)
- Increase directory input width from 200px to 350px
- Add RTL direction to directory display to show end of long paths
- Add respawn status indicator with stop/configure buttons in modal

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 02:06:37 +01:00
arkonandClaude Opus 4.5 3be3595907 fix: filter terminal focus escape sequences
Filter out ^[[I (focus in) and ^[[O (focus out) ANSI codes that appear
when clicking in/out of the Claude terminal. Also filters the enable/
disable sequences (\x1b[?1004h and \x1b[?1004l).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 02:04:30 +01:00
arkonandClaude Opus 4.5 e747e5a27f docs: update CLAUDE.md with new API endpoints
- Add session rename endpoint (PUT /api/sessions/:id/name)
- Add shell session endpoint (POST /api/sessions/:id/shell)
- Update session creation to include mode and name parameters

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 01:47:47 +01:00
arkonandClaude Opus 4.5 281651e553 fix: improve UI usability and keyboard shortcuts
- Fix terminal welcome message to say "Run Claude" instead of "Quick Start"
- Fix Ctrl+Enter keyboard shortcut by using capture phase
- Auto-select default case and show directory on load
- Make gear icon larger (1rem) with rotation animation on hover
- Add right-click on session tabs for inline rename
- Update directory display when case selection changes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 01:42:47 +01:00
arkonandClaude Opus 4.5 dc5c874b11 feat: add session rename, shell mode, and UI improvements
- Add session name property with rename API endpoint
- Add shell session mode (plain bash/zsh without Claude)
- Add gear icon on session tabs for options (rename)
- Add mode indicator on tabs for shell sessions
- Rename "Quick Start" button to "Run Claude"
- Add "Shell" button to start plain shell sessions
- Replace cost counter with total token counter
- Add session options modal for renaming

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 01:26:38 +01:00
arkonandClaude Opus 4.5 4903c45ec9 docs: update README and CLAUDE.md with new features
- Add documentation for token tracking and auto-clear
- Add documentation for enable respawn on existing sessions
- Add documentation for timed respawn duration
- Add TaskTracker to architecture diagram
- Update keyboard shortcuts section
- Add new SSE events to event catalog
- Add new API endpoints documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 00:49:30 +01:00
arkonandClaude Opus 4.5 ad99fe5922 feat: add auto-clear, timed respawn, and enable on existing sessions
- Add token tracking to Session class (input/output tokens)
- Add auto-clear feature that sends /clear when token threshold reached
- Add API endpoint to enable respawn on existing running sessions
- Add timed duration setting for respawn (auto-stops after N minutes)
- Add TaskTracker class for background task detection and tree display
- Update UI with duration input, auto-clear settings, and "Enable on Current" button
- Add respawn timer display in banner when timed run is active
- Add token count display in respawn banner

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 00:38:11 +01:00
arkonandClaude Opus 4.5 fd9254d8e5 docs: add testing commands to CLAUDE.md
Include npm test scripts and vitest commands for running
single test files and pattern matching.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 23:18:43 +01:00
arkonandClaude Opus 4.5 c0efba8fa3 feat(ui): enhance session status visual indicators
- Add glow effect to status dots (green/yellow/red)
- Add stopped status style for terminated sessions
- Add subtle pulsing glow animation for active session card

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 22:44:52 +01:00
arkonandClaude Opus 4.5 8c3d150638 docs: update README with all new UI features
- Document keyboard shortcuts including Ctrl+?
- Add new "Additional Features" section covering:
  - Terminal font controls
  - Copy terminal output
  - Session duration display
  - Working directory display
  - Session count in header
  - Toast notifications
  - Mobile support
  - Help modal
  - Reconnect button
  - Confirmation dialogs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 22:40:26 +01:00
arkonandClaude Opus 4.5 e6e3bf094b feat(ui): add started time display in timer banner
- Show start time in timer banner (e.g., "Started: 14:30")
- Style with monospace font for consistent width

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 22:37:02 +01:00
arkonandClaude Opus 4.5 4678e78b95 feat(ui): add confirmation for long timed runs
- Add confirmation dialog for runs 30+ minutes
- Show duration in human-readable format (hours/minutes)
- Replace alert with toast for empty prompt warning

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 22:32:45 +01:00