Commit Graph
1273 Commits
Author SHA1 Message Date
arkonandClaude Opus 4.5 43eaafe084 feat: persist full session state to state.json for CLI visibility
The web server now persists all per-session settings (name, mode,
auto-compact, auto-clear, respawn config, ralph state, tokens, cost)
to state.json so the CLI status/session commands can display them.
Also removes unused pendingStepConfirm property from respawn controller.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 20:36:06 +01:00
arkonandClaude Opus 4.5 5a97403066 fix: add step confirmation to respawn controller
- Add step confirmation timer for waiting_update, waiting_init, waiting_kickstart states
- After detecting completion in waiting states, wait for completionConfirmMs silence
- Prevents sending next command before Claude finishes processing current one
- Cancel step confirmation when working patterns detected
- Update CLAUDE.md with step confirmation documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 19:31:24 +01:00
arkonandClaude Opus 4.5 ec92e5b1cf fix: respawn controller multi-layer detection and cleanup
- Update idle detection from legacy '↵ send' to completion message pattern
  ("for Xm Xs" time patterns like "Worked for 2m 46s")
- Add confirming_idle state for false positive prevention
- Add completionConfirmMs (5s) and noOutputTimeoutMs (30s) config options
- Add multi-layer detection with confidence scoring (0-100%)
- Fix null pointer error in extractTokenCount with guard clause
- Fix respawn controller not stopping on session cleanup (broadcast respawn:stopped)
- Update tests to use new completion message patterns
- Add detection status UI display (confidence level, waiting state)
- Update CLAUDE.md with new detection documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 19:24:36 +01:00
arkonandClaude Opus 4.5 34fb33fbc6 test: add global test setup with screen limits and reach 1337 tests
- Add test/setup.ts with max 10 concurrent screen sessions limiter
- Add orphaned Claude/screen process cleanup before/after tests
- Add semaphore-based screen slot acquisition for concurrency control
- Update vitest.config.ts with setupFiles and fileParallelism: false
- Add 16 new test files for comprehensive coverage
- Update README badge to show 1337 total tests
- Update CLAUDE.md with test setup documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 11:30:10 +01:00
arkon 675e5f2616 docs: rename Respawn agents to Respawn Controller 2026-01-22 09:17:35 +01:00
arkon 5d8a5f2e57 docs: update Ralph tracking description 2026-01-22 09:15:00 +01:00
arkonandClaude Opus 4.5 bd09e8acd9 docs: update README naming consistency and buffer sizes
- Rename "Ralph Wiggum Loop Tracking" to "Ralph / Todo Tracking"
- Shorten "Ralph Wiggum loops" to "Ralph loops"
- Fix memory buffer sizes (2MB terminal, 1MB text) to match code

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 09:14:32 +01:00
arkonandClaude Opus 4.5 add8f8c84b fix: memory leak prevention and resource cleanup improvements
SSE Client Management:
- Add periodic health check (30s) to detect dead SSE connections
- Clean up clients with destroyed/non-writable sockets
- Clear all SSE clients on server stop

Session Lifecycle:
- Add _isStopped flag to prevent new timers after session stops
- Check flag in auto-compact/clear callbacks to avoid timer races
- Check flag in line buffer flush timer creation

Server Shutdown:
- Add _isStopping flag to prevent timer creation during shutdown
- Skip batch timer creation in terminal/output/task/state handlers
- Clear SSE health check timer on stop

Ralph Tracker:
- Call clearDebounceTimers() in clear() method (was missing)
- Add MAX_COMPLETION_PHRASE_ENTRIES (50) to trim phrase map
- Add MAX_LINE_BUFFER_SIZE (64KB) to prevent unbounded growth
- Trim line buffer when exceeding max size

Task Tracker:
- Add timestamp to pending tool uses for age-based cleanup
- Add PENDING_TOOL_USE_MAX_AGE_MS (1 hour) expiry
- Add MAX_PENDING_TOOL_USES (100) limit
- Clean up old entries on new tool use

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 00:08:32 +01:00
arkonandClaude Opus 4.5 5bd1e9e536 perf: optimize terminal buffer rendering for smoother tab switches
- Reduce buffer limits (terminal: 5MB→2MB, text: 2MB→1MB) to decrease
  render payload
- Add chunkedTerminalWrite() that writes in 64KB chunks via
  requestAnimationFrame to avoid UI jank
- Add tail mode to /api/sessions/:id/terminal endpoint (?tail=256KB)
  for faster initial load on tab switch
- Show truncation indicator when earlier output is cut
- Update CLAUDE.md with new buffer limits and performance notes

Fixes jittery behavior when switching tabs with large (2MB+) buffers.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 23:55:16 +01:00
arkonandClaude Opus 4.5 50150befef docs: update API and class references to ralph-* naming
- README.md: Update API endpoints to /ralph-state and /ralph-config
- ralph-wiggum-guide.md: Update class names (RalphTracker, RalphLoopState),
  file paths (ralph-tracker.ts), SSE events (session:ralphLoopUpdate), and
  API endpoints throughout

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 23:07:05 +01:00
arkonandClaude Opus 4.5 0d1ca37b6e refactor: rename inner-loop-tracker to ralph-tracker with API improvements
- Rename inner-loop-tracker.ts → ralph-tracker.ts throughout codebase
- Add ralph-config.ts for parsing .claude/ralph-loop.local.md config
- Standardize API error responses using createErrorResponse()
- Add input validation for auto-compact/auto-clear thresholds
- Update UI labels to "Ralph / Todo Tracker" consistently
- Add 46 integration tests for Ralph tracking functionality
- Update test badge to 438 total tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 22:36:45 +01:00
arkonandClaude Opus 4.5 5be0babf01 docs: add animated demo GIF to README
Shows dashboard in action with 8 frames at 1 second intervals,
last frame held for 3 seconds.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 19:56:44 +01:00
arkonandClaude Opus 4.5 403c7e77fb feat: auto-detect completion phrase from CLAUDE.md
- Extract <promise>PHRASE</promise> from CLAUDE.md on session start
- Configure inner loop tracker before first broadcast so UI shows phrase immediately
- More lenient bare phrase detection (triggers when loop is active)
- Auto-detect on session restoration from screens
- Add logging for auto-detection debugging

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 19:49:44 +01:00
arkonandClaude Opus 4.5 e469b30ddb feat: persist respawn config and inner loop state across server restarts
- Add PersistedRespawnConfig type and respawnConfig field to ScreenSession
- Add innerLoopEnabled field to ScreenSession for Ralph Wiggum tracking
- Add updateRespawnConfig, clearRespawnConfig, updateInnerLoopEnabled methods to ScreenManager
- Save respawn config when enabled/updated via API endpoints
- Save inner loop enabled state when changed via API
- Restore respawn controllers and inner loop state on server startup

This ensures respawn continues working after claudeman restarts.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:30:06 +01:00
arkonandClaude Opus 4.5 6bfc7f9027 fix: add 10s fallback timeout for /clear step in respawn controller
After sending /clear, if no prompt indicator is detected within 10 seconds,
proceed to send /init anyway. This fixes respawn getting stuck when Claude
doesn't show the expected prompt characters after /clear completes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:19:22 +01:00
arkonandClaude Opus 4.5 ae7c003089 fix: add input validation for /input and /resize API endpoints
- Add validation for input parameter in /input endpoint
- Add validation for cols/rows as positive integers in /resize endpoint
- Use standardized error responses with ApiErrorCode

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 16:20:56 +01:00
arkonandClaude Opus 4.5 3007abdbb2 docs: remove TUI from Quick Start options
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:54:20 +01:00
arkonandClaude Opus 4.5 469e8fedf4 docs: add more run options to Quick Start
Include custom port, TUI mode, and dev mode examples.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:53:58 +01:00
arkonandClaude Opus 4.5 51ac311920 docs: update closing tagline
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:52:01 +01:00
Ark0N 7a11280ab3 Fix formatting in README.md features list 2026-01-21 15:49:44 +01:00
Ark0N ba81cb8285 Update README.md 2026-01-21 15:48:04 +01:00
arkonandClaude Opus 4.5 90241b2ff1 docs: simplify README tagline
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:47:23 +01:00
arkonandClaude Opus 4.5 dc34eadaa7 chore: remove .claude/ from version control
Internal Claude Code development files are not needed in the public repo.
Files remain locally but are now gitignored.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:45:52 +01:00
arkonandClaude Opus 4.5 b81e6b0c3e docs: update test count badge to 355
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:20:20 +01:00
arkonandClaude Opus 4.5 ed67aa25b5 fix: update repository URLs in package.json
Replace placeholder yourusername with actual Ark0N repository.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:19:33 +01:00
arkonandClaude Opus 4.5 72ec288226 docs: remove internal references from CLAUDE.md for publishing
Remove E2E Testing and Optimization Status sections that reference
internal .claude/ files not intended for public distribution.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:17:37 +01:00
arkonandClaude Opus 4.5 469e737eef docs: replace ASCII art with Mermaid diagram
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:11:52 +01:00
arkonandClaude Opus 4.5 5f90a612b1 docs: improve Architecture ASCII art diagram
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:11:17 +01:00
arkonandClaude Opus 4.5 6efa27d202 docs: expand feature tagline
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:10:40 +01:00
arkonandClaude Opus 4.5 b6dcf085ad docs: add 'Manage' to tagline
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:09:12 +01:00
arkonandClaude Opus 4.5 bc17cc3e47 docs: update README taglines
- "Autonomous Claude Code work while you sleep"
- "Track and Monitor Claude Code sessions better than ever"

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:07:13 +01:00
arkonandClaude Opus 4.5 da61a71f89 docs: reorganize README header with bigger title
- Make Claudeman title larger (52px, bold)
- "Autonomous work while you sleep" as main subtitle (h2)
- "Track Claude Code Sessions Better Than Ever" as smaller text
- "Persistent sessions. Ralph Loop tracking. Respawn agents." as tagline

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:00:41 +01:00
arkonandClaude Opus 4.5 1a92d3ddf4 docs: replace Claudeman title with colored SVG image
- Remove robot emoji from title
- Create SVG image with Claudeman text in #60a5fa color
- Use SVG for consistent color display on GitHub

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 14:58:47 +01:00
arkonandClaude Opus 4.5 b27402c61e docs: use claude-overview.png as main README image
- Replace main-interface.png with claude-overview.png
- Add color styling to Claudeman title (#60a5fa)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 14:57:21 +01:00
Ark0N 485e1d1695 Add files via upload 2026-01-21 14:54:10 +01:00
arkonandClaude Opus 4.5 d58cf15bfd docs: update screenshots for multi-session dashboard and monitor
- Add multi-session dashboard screenshot with 7 tabs (Claude + Shell)
- Add monitor panel screenshot showing screen session stats
- Simplify Ralph Wiggum section to show only in-progress tracking
- Remove unused ralph-tracker-8tasks-complete.png

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 14:53:29 +01:00
arkonandClaude Opus 4.5 be737bb374 docs: add Ralph tracker screenshots with 8-task demo
- Add screenshot of completed Ralph loop (9/9 tasks, 100%)
- Add screenshot of in-progress tracking (4/9 tasks, 44%)
- Update README with new Ralph Wiggum tracking screenshots
- Show realistic task tracking: TypeScript types, validation,
  JSDoc, unit tests, and barrel file creation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 14:43:43 +01:00
arkonandClaude Opus 4.5 2eaa7dfed3 docs: rewrite README focused on core capabilities
- Persistent Screen Sessions
- Respawn Controller (autonomous work while you sleep)
- Ralph Wiggum Loop Tracking
- Smart Token Management
- Multi-Session Dashboard

Removed problem/solution framing, now focused purely on features.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 14:24:21 +01:00
arkonandClaude Opus 4.5 d726d2f661 docs: update README badges to match web GUI color scheme
Uses the same blue (#1e3a5f, #3b82f6) and green (#22c55e) colors
from the web interface for consistent branding.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 14:22:45 +01:00
arkonandClaude Opus 4.5 eb0c4aefaf chore: remove todo.md
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 14:21:08 +01:00
arkonandClaude Opus 4.5 f9f79af8ec docs: revamp README with improved structure and visuals
- Complete README rewrite with better visual hierarchy
- New tagline: "Track Claude Code Sessions Better Than Ever"
- Emphasize Respawn Controller as key feature for autonomous work
- Add ASCII art diagrams for architecture and token lifecycle
- Add feature comparison tables
- Include Ralph Wiggum loop screenshot
- Add comprehensive API reference section
- Improve Quick Start section with clear prerequisites
- Add FAQ section
- Remove TUI references (feature not ready)
- Update GitHub clone URL

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 14:17:10 +01:00
arkonandClaude Opus 4.5 384350f731 feat: add type-safe error handling utilities
- Add isError() type guard to check if value is Error instance
- Add getErrorMessage() utility for safe error message extraction
  in catch blocks (handles TypeScript 4.4+ unknown error type)
- Replace all (err as Error).message patterns with getErrorMessage(err)
  across server.ts, cli.ts, ralph-loop.ts, and screen-manager.ts
- Follows TypeScript best practice of treating caught errors as unknown

This improves code safety by properly handling the case where caught
values may not be Error instances (e.g., thrown strings or objects).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 14:07:04 +01:00
arkonandClaude Opus 4.5 c33d6e0987 refactor: improve code quality with stricter TypeScript and memory leak prevention
- Add stricter TypeScript compiler flags (noUnusedLocals, noUnusedParameters,
  noImplicitReturns, noImplicitOverride, noFallthroughCasesInSwitch,
  allowUnreachableCode, allowUnusedLabels)
- Remove unused variables caught by stricter flags:
  - Remove unused `renameSession` destructuring in App.tsx
  - Remove unused `BG_GRAY` constant in DirectAttach.ts
  - Remove unused `INPUT_BATCH_INTERVAL` constant in useSessionManager.ts
- Add proper EventEmitter cleanup to RalphLoop:
  - Store bound event handlers for cleanup
  - Add cleanupEventHandlers() method
  - Add destroy() method for complete cleanup
  - Add destroyRalphLoop() singleton cleanup function
- Update ralph-loop tests to use destroy() instead of stop() to prevent
  MaxListenersExceededWarning

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 14:01:47 +01:00
arkonandClaude Opus 4.5 8b04734538 feat(ui): persist last used case selection
Save selected case to settings when changed, created, or linked.
Automatically restore last used case on page load.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 13:38:23 +01:00
arkonandClaude Opus 4.5 9801cdf591 fix: prevent Ralph tracker auto-enable when setting disabled
Add disableAutoEnable mechanism to InnerLoopTracker that prevents
pattern-based activation when the user has explicitly disabled the
Ralph tracker in settings.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 13:38:12 +01:00
arkonandClaude Opus 4.5 7b83124ecd fix(ui): simplify welcome message text styling
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 13:23:54 +01:00
arkonandClaude Opus 4.5 e3ea33f9de feat(ui): add link existing folder as case and improve UX
- Add tabbed "Add Case" modal with "Create New" and "Link Existing" tabs
- Add POST /api/cases/link endpoint to register existing folders
- Store linked cases in ~/.claudeman/linked-cases.json
- Update GET /api/cases to include linked cases
- Add instance count controls (+/-) for Run Shell button
- Update welcome message to explain instance count selector

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 13:20:43 +01:00
arkonandClaude Opus 4.5 951d13b6e6 feat(ui): add shell instance count and improve welcome message
- Add instance count controls (+/- buttons) for Run Shell
- Update runShell() to support launching multiple shell sessions
- Update welcome message to explain persistent GNU Screen sessions
- Add "Instance count" tooltips to both Claude and Shell controls

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 13:16:13 +01:00
arkonandClaude Opus 4.5 f61df0b89e feat(ui): improve settings modal with tabs and bolder Run Claude text
- Add tabbed interface to App Settings modal (Display, Claude CLI, Paths)
- Add modal-lg class for wider settings modal (520px)
- Remove "(will be created)" text from empty case display
- Make Run Claude button text bolder (font-weight: 700)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 13:08:32 +01:00
arkonandClaude Opus 4.5 e8c30b9880 fix(tui): resolve screen attach ambiguity with multiple sessions
- Add getFullScreenId() to get PID.screenName format for unambiguous attach
- Update DirectAttach.ts and index.tsx to use full screen IDs
- Remove TUI documentation from README (still in development)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 12:52:38 +01:00