Commit Graph
1136 Commits
Author SHA1 Message Date
arkonandClaude Opus 4.5 619f2a3403 fix: clean up test case directories after each test instead of at end
Moves case directory cleanup from afterAll to afterEach in all test
files that create cases. Previously, if the test suite was interrupted
or afterAll timed out, all case directories were left behind. Now each
test cleans up immediately after itself.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 22:54:26 +01:00
arkonandClaude Opus 4.5 afaa1d3adb refactor: move default CLAUDE.md template to bundled case-template.md
Replaces the ~400-line inline template string in claude-md.ts with a
file read from src/templates/case-template.md. Removes the hardcoded
/home/arkon/default/CLAUDE.md path from server.ts. The build script
now copies the template to dist/templates/ for production use.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 22:43:09 +01:00
arkonandClaude Opus 4.5 0ff0dcac82 docs: document Format 4 and Format 5 todo detection patterns
Add native checkbox (☐/◐/☒) and Claude Code checkmark-based
(✔ Task #N) formats to CLAUDE.md and ralph-wiggum-guide.md,
matching the recently added detection code.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 22:25:51 +01:00
arkonandClaude Opus 4.5 bf44925ea4 feat: detect Claude Code checkmark-based TodoWrite output format
The RalphTracker now recognizes Format 5 - the checkmark-based output
that Claude Code's TodoWrite tool produces:
- "✔ Task #N created: <content>" → creates todo
- "✔ #N <content>" → registers task summary
- "✔ Task #N updated: status → in progress/completed" → updates status

Previously only detected markdown checkboxes, icon indicators, and
native ☐/☒/◐ format, missing the primary output format used by
Claude Code CLI sessions.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 22:02:49 +01:00
arkonandClaude Opus 4.5 d291dc0d05 docs: sync all documentation with recent state persistence and respawn changes
- CLAUDE.md: Add step confirmation behavior, respawnEnabled field, recovery
  strategy with dual redundancy, updated state lifecycle
- README.md: Multi-layer idle detection, step confirmation, state persistence
  in performance table, updated architecture diagram with State Store
- docs/: Updated last-modified dates to 2026-01-22

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 21:36:43 +01:00
arkonandClaude Opus 4.5 024425e979 fix: add screens.json fallback for respawn recovery
state.json is now the primary source for session recovery, but
screens.json is used as a fallback for respawn config since it was
the proven working path before. This provides double-redundancy:
both files would need to be lost for respawn state to disappear.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 21:23:59 +01:00
arkonandClaude Opus 4.5 a006621cd0 fix: don't wipe session state from state.json on server shutdown
cleanupSession() always called store.removeSession() which deleted the
session from state.json. On server stop, cleanupSession(id, false) was
called for all sessions - preserving screens but deleting their saved
state. On next restart, state.json was empty so nothing was restored.

Now only removes from state.json when killScreen=true (user explicitly
deleting a session), preserving state for recovery on restart.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 21:22:07 +01:00
arkonandClaude Opus 4.5 35c2f4fb61 fix: use state.json as single source of truth for session recovery
All session settings (auto-compact, auto-clear, ralph, respawn) are now
restored from state.json on server restart. Previously settings were
split across state.json, screens.json, and state-inner.json which was
fragile. state-inner.json is kept as a fallback for ralph state only.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 21:17:55 +01:00
arkonandClaude Opus 4.5 1c430e0cbd fix: persist session state after all restorations complete on restart
persistSessionState was called before the respawn controller was restored,
so respawnEnabled was always saved as false during recovery. Moved the
persist call to after all restorations (auto-compact, auto-clear, ralph,
respawn) are applied.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 21:13:23 +01:00
arkonandClaude Opus 4.5 8501dcbec5 fix: restore auto-compact/auto-clear settings on server restart
Session recovery from screens created fresh Session objects with default
values, losing the auto-compact and auto-clear settings that were saved
to state.json. Now reads them back during recovery.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 20:59:18 +01:00
arkonandClaude Opus 4.5 60f73fc5fe fix: correct property paths for auto-compact/clear in session options modal
The modal was reading from non-existent nested paths (session.autoClear?.autoCompact?)
instead of the flat properties from toState() (session.autoCompactEnabled, etc.).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 20:56:40 +01:00
arkonandClaude Opus 4.5 23c75578c0 fix: persist respawnEnabled state to state.json
The respawn controller's enabled/disabled state was not being saved,
so CLI status couldn't show whether respawn was active.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 20:52:41 +01:00
arkonandClaude Opus 4.5 e5aff372e8 feat: auto-save session options and restore on modal open
- Add GET /api/sessions/:id/respawn/config endpoint for reading saved config
- PUT /api/sessions/:id/respawn/config now works without running controller
  (saves pre-config to screens.json for when respawn starts)
- Respawn start/enable merges pre-saved config from screens.json
- Frontend auto-saves respawn config, auto-compact, auto-clear on field change
- Frontend loads saved config when opening session options modal
- Updated CLAUDE.md with state persistence docs, new API endpoint,
  SessionState fields table, state lifecycle, and session setting guide

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 20:49:09 +01:00
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