Commit Graph
181 Commits
Author SHA1 Message Date
arkonandClaude Opus 4.5 74e8dd27dd fix: use Claude Opus pricing for cost estimation
- Input: $15/M tokens (was $3/M for Sonnet)
- Output: $75/M tokens (was $15/M for Sonnet)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 20:16:46 +01:00
arkonandClaude Opus 4.5 9d32fd594b feat: add token cost estimation and improve token formatting
- Format tokens: 1000k → 1m, 1450k → 1.45m, etc.
- Estimate cost using Claude Sonnet pricing ($3/M input, $15/M output)
- Show estimated cost in respawn banner and header
- More accurate than stored cost which doesn't update in interactive mode

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 20:12:16 +01:00
arkonandClaude Opus 4.5 4eb361f204 ui: keep action log on right side, improve detection status readability
- Revert timers row to horizontal layout (timers left, action log right)
- Make detection status text more readable:
  - Larger font (0.75rem)
  - Better contrast (--text color)
  - Semi-bold weight
  - Subtle background pill

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 20:02:29 +01:00
arkonandClaude Opus 4.5 40df0748c5 ui: improve respawn controller layout and filter action log noise
- Stack timers row vertically (timers on top, action log below)
- Reduce action log height to 60px since it's now full width
- Filter action log to show only important entries:
  - Commands sent to console
  - Plan-check with action taken
  - Step completions
- Skip timer starts/cancels, detection updates, ai-check status

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 19:59:42 +01:00
arkonandClaude Opus 4.5 c6b16bf815 fix: subagent title extraction race condition
- Add 100ms debounce for new file detection to allow content to be written
- Add subagent:updated event for retroactive description updates
- Extract description in processEntry when first user message is processed
- Add extractDescriptionFromFile helper with retry in file change handler
- Update SubagentTranscriptEntry.content type to support string | array
- Add test coverage for subagent:updated event

Fixes 43% failure rate where subagents displayed raw IDs instead of descriptions
due to race condition when files were discovered before first line was written.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 19:49:58 +01:00
arkonandClaude Opus 4.5 87bdd9376c ui: make Subagents panel detachable and position on right side
- Move Subagents panel to right side (same as Monitor)
- Add detach/float functionality with drag support
- Add resize handle for detached mode
- Clean up duplicate CSS
- Bump version to 0.1358

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 18:33:43 +01:00
arkonandClaude Opus 4.5 dc1dc5844e ui: add JavaScript logic for standalone Subagents panel
- Add closeSubagentsPanel() and toggleSubagentsPanel() methods
- Add showSubagents setting to app settings
- Update applyMonitorVisibility() to handle subagents panel visibility

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 18:11:45 +01:00
arkonandClaude Opus 4.5 04e25b6b7d ui: separate Subagents panel from Monitor panel
- Move subagents view into its own independent panel
- Position subagents panel to the left of monitor panel
- Add collapsible/closeable behavior for subagents panel
- Add responsive stacking on small screens
- Simplify monitor panel (now just Screen Sessions + Background Tasks)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 18:11:14 +01:00
arkonandClaude Opus 4.5 0d22d19645 docs: improve CLAUDE.md structure and discoverability
- Move COM shorthand to prominent position after safety warning
- Add version sync note (must match package.json)
- Consolidate Key Files into 4 logical categories
- Clarify next available test port (3128)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 18:09:25 +01:00
arkonandClaude Opus 4.5 74bcede607 ui: add double-click to open subagent tracking window
Double-click on subagent items in the Subagents tab to open
the floating tracking window. Includes tooltip hint.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 17:47:44 +01:00
arkonandClaude Opus 4.5 cec9608b66 ui: improve subagent window titles and readability
- Extract better titles from task description (first line/sentence)
- Make subagent window text white for better readability
- Expand monitor panel to 700px when subagents tab is active
- Add smooth width transition when switching tabs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 17:40:28 +01:00
arkonandClaude Opus 4.5 ad24020cdc feat: add real-time subagent visibility - monitor Claude Code background agents
- Add SubagentWatcher service that discovers and tails Claude Code's subagent
  transcript files (~/.claude/projects/.../subagents/agent-*.jsonl)
- Track tool calls, progress events, and messages in real-time via file watching
- Add SSE events for subagent:discovered, subagent:tool_call, subagent:progress,
  subagent:message, subagent:completed
- Add REST API endpoints: GET /api/subagents, /api/subagents/:id,
  /api/subagents/:id/transcript
- Add subagent panel in Monitor section showing active agents and their activity
- Add floating draggable windows that auto-open for each active agent
- Add standalone CLI tool: scripts/watch-subagents.ts for terminal monitoring

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 14:33:12 +01:00
arkonandClaude Opus 4.5 4c34966827 ui: hide case folder display from bottom toolbar
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 09:11:48 +01:00
arkonandClaude Opus 4.5 9d42ff5bb6 fix: sticky scroll on tab switch - keep terminal at bottom after new output
Add isTerminalAtBottom() helper and modify batchTerminalWrite() to implement
sticky scroll behavior. When SSE terminal data arrives after tab switch,
terminal now stays scrolled to Claude input if user was already at bottom.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 08:30:42 +01:00
arkonandClaude Opus 4.5 fc97f6a41a refactor: extract AI checker base class + fix persistence + dedupe restoration
- Add AiCheckerBase abstract class to eliminate ~700 lines of duplication
  between AiIdleChecker and AiPlanChecker
- Fix missing persistence fields (completionConfirmMs, noOutputTimeoutMs)
  that caused custom timing values to be lost on server restart
- Extract restoreRespawnController() helper to dedupe session restoration
  logic between state.json and screens.json paths

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 08:25:51 +01:00
arkonandClaude Opus 4.5 3455b27f6f fix: respawn disabled state not persisted across server restarts
When /respawn/stop was called, the controller was stopped but remained
in the respawnControllers map. This caused persistSessionState() to
still read config.enabled=true and save respawnEnabled=true to state.json.

On server restart, the respawn controller would be re-enabled because
state.json had respawnEnabled=true.

Fix: Remove controller from map and clear any timed respawn when
/respawn/stop is called, so persistSessionState() correctly sets
respawnEnabled=false.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 08:01:57 +01:00
arkonandClaude Opus 4.5 4d1da8bb71 fix: persist respawn config across server restarts
- persistSessionState() now saves respawnEnabled based on config.enabled
  (user intent) instead of controller.state (running state)
- cleanupSession() saves respawn config BEFORE removing controller
- AiIdleChecker and AiPlanChecker constructors filter undefined values
  to prevent overwriting defaults (fixes "timed out after undefinedms")
- updateConfig() methods also filter undefined values

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 07:42:05 +01:00
arkonandClaude Opus 4.5 e56c8626e4 feat: persistent token tracking with global stats aggregation
- Add restoreTokens() method to Session class for recovery after restart
- Add GlobalStats type for cumulative usage tracking across all sessions
- Accumulate tokens from deleted sessions into global stats
- Track lifetime session count with incrementSessionsCreated()
- Add /api/stats endpoint for global stats
- Include globalStats in /api/status response
- Frontend shows aggregate tokens + cost in header
- Fix respawn controller config to filter undefined values
- Add 7 new tests for global stats functionality (v0.1343)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 07:26:49 +01:00
arkonandClaude Opus 4.5 706392d264 fix: prevent respawn cycle after plan mode auto-accept + enhance action log UI
- Add state check in startPlanCheck() to prevent Enter if state changed
- sendAutoAcceptEnter() now cancels pending AI idle checks and resets state
- Log auto-accept as [command] type for visibility in action log
- Highlight command entries with blue background in action log
- Show action log row when there are actions (not just timers)
- Increase action log height and opacity for better visibility

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 06:46:20 +01:00
arkonandClaude Opus 4.5 0f9caa9d29 feat: improve respawn display readability and AI check info (v0.1338)
- State label now white on green pill for better visibility
- AI check shows detailed status with color-coded badges:
  - Blue: Analyzing terminal output
  - Green: Idle confirmed
  - Yellow: Working detected
  - Gray: Disabled
- Shows time since last check when recent (<2min)
- Bump version to 0.1338

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 05:00:43 +01:00
arkonandClaude Opus 4.5 c6588ce352 refactor: simplify respawn controller display and improve CLAUDE.md
Respawn banner changes:
- Human-friendly state labels (e.g., "Kickstarting..." vs "waiting_kickstart")
- Removed redundant "→ waiting for" text
- Simplified AI check display (only shows when actively checking)
- Shorter cycle counter (#1 vs "Cycle 1")
- Fixed NaN timer bug with validation
- Flatter HTML structure

CLAUDE.md improvements:
- Reorganized Commands section into clear subsections
- Test port allocation in table format
- Simplified TypeScript config section
- Removed duplicate keyboard shortcuts (already in README)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 04:57:09 +01:00
arkonandClaude Opus 4.5 ee6b6596d6 feat: add version display in toolbar (v0.1337)
- Display version number in center of bottom toolbar
- Load version from package.json via server's /api/status
- Version shown on initial load and SSE reconnect

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 04:04:24 +01:00
arkonandClaude Opus 4.5 d19d6ceddd feat: add respawn controller verbosity with countdown timers and bug fixes
- Fix "enable twice" bug: add enabled:true to getModalRespawnConfig()
- Add timer tracking with countdown display in respawn banner
- New events: timerStarted, timerCancelled, timerCompleted, actionLog
- Show active timers with progress bars and recent action log
- Skip remaining timeouts after AI check returns IDLE/WORKING verdict
- Enhanced DetectionStatus with activeTimers, recentActions, currentPhase

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 03:57:44 +01:00
arkonandClaude Opus 4.5 ae4c445601 feat: add AI-powered plan mode detection for auto-accept
Adds a two-stage gate before auto-accepting plan mode prompts:
1. Strict regex pre-filter - checks for numbered options + selector
2. AI confirmation - spawns Opus to classify as PLAN_MODE or NOT_PLAN_MODE

This prevents spurious Enter key presses when Claude is paused mid-thought
or experiencing network lag, rather than showing a plan approval prompt.

New files:
- src/ai-plan-checker.ts: AI checker following ai-idle-checker.ts pattern

Config fields added to RespawnConfig:
- aiPlanCheckEnabled (default: true)
- aiPlanCheckModel (default: claude-opus-4-5-20251101)
- aiPlanCheckMaxContext (default: 8000)
- aiPlanCheckTimeoutMs (default: 60000)
- aiPlanCheckCooldownMs (default: 30000)

New events: planCheckStarted, planCheckCompleted, planCheckFailed

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 02:55:43 +01:00
arkonandClaude Opus 4.5 6025edd0b5 fix: remove duplicate border-left next to CPU stat
The header-system-stats had its own border-left in addition to the
header-right border-left, creating two vertical lines. Removed the
inner one for a cleaner look.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 19:57:28 +01:00
arkonandClaude Opus 4.5 7ec3e18044 fix: remove MEM stat from header, keep only CPU
Frees up horizontal space for session tabs in the header bar.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 19:54:34 +01:00
arkonandClaude Opus 4.5 e924cd3296 fix: reduce spacing between system stats and notification icon
Reduce header-right gap from 1rem to 0.5rem and remove margin-left
from notification button for tighter grouping.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 19:52:48 +01:00
arkonandClaude Opus 4.5 4b6248ac78 fix: align notification and settings icons at same height
Replace gear emoji with SVG icon matching the bell, remove extra margin
between them, and ensure both sit at the same vertical position.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 19:51:24 +01:00
arkonandClaude Opus 4.5 2bfebc5dba fix: replace notification bell emoji with gray SVG icon
Use an inline SVG bell that inherits currentColor, matching the gray
monochrome style of the settings gear icon.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 19:45:37 +01:00
arkonandClaude Opus 4.5 5c2937342b fix: use DOM wheel listener instead of non-existent xterm API
attachCustomWheelEventHandler doesn't exist in xterm.js 5.3.0,
causing initTerminal() to crash and abort all app initialization.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 19:35:11 +01:00
arkonandClaude Opus 4.5 3f082c5e01 fix: prevent mouse wheel from cycling plan mode options instead of scrolling
Claude's Ink UI enables terminal mouse reporting, causing xterm.js to
forward wheel events to the application. This made scrolling up to read
the plan impossible. Intercept wheel events to always scroll the terminal
viewport directly.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 19:21:04 +01:00
arkonandClaude Opus 4.5 b98913e328 refactor: move auto-compact/clear to new Context tab in session options
Split the session options modal into three tabs (Respawn, Context,
Ralph/Todo) to reduce vertical height. Removed redundant header and
border from the Respawn section. Also condensed CLAUDE.md and added
AI idle checker documentation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 19:12:47 +01:00
arkonandClaude Opus 4.5 0e56e590f3 feat: add AI-powered idle check for respawn controller
Replace the "Worked for Xm Xs" pattern as the sole primary idle
detection signal with a final AI-powered check. When pre-filter
conditions are met (output silence, no working patterns, tokens
stable), a fresh Claude CLI session is spawned in a screen to
analyze terminal output and provide a definitive IDLE/WORKING
verdict before proceeding with the respawn cycle.

New state in state machine: `ai_checking` (between pre-filter
confirmation and `sending_update`). WORKING verdict triggers a
3-minute cooldown. Errors auto-disable after 3 consecutive
failures, falling back to the existing noOutputTimeoutMs safety net.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 18:48:37 +01:00
arkonandClaude Opus 4.5 0ea7a21df2 fix: security hardening, SSE robustness, and API consistency
Security:
- Add sanitizeHookData() to whitelist/truncate hook event fields before SSE broadcast
- Add MAX_INPUT_LENGTH (64KB) validation on session input endpoint
- Add MAX_TERMINAL_COLS/ROWS bounds on resize endpoint
- Add MAX_SESSION_NAME_LENGTH on rename endpoint
- Remove Access-Control-Allow-Origin: * from SSE (same-origin only)
- Add X-Accel-Buffering: no header for nginx proxy compatibility

Robustness:
- Add SSE keep-alive comments in health check cycle (prevents proxy timeouts)
- Guard broadcast() against JSON.stringify failures (circular refs, BigInt)
- Prevent concurrent cleanup races with cleaningUp guard set
- Clear stateUpdatePending on session cleanup

API consistency:
- Normalize error responses to use createErrorResponse() with error codes
- Remove dead (session as any).ralphConfig assignment + unused destructuring

Performance:
- Pre-compile CLAUDE_BANNER_PATTERN, CTRL_L_PATTERN, LEADING_WHITESPACE_PATTERN

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 04:35:58 +01:00
arkonandClaude Opus 4.5 6393e00e95 fix: forward hook event data to notifications
The server was dropping the `data` field from hook-event POST requests,
so notifications always showed generic messages. Now forwards tool name,
command, question text, and reason to the frontend.

Notifications now show:
- permission_prompt: "Bash: docker push prod:latest"
- elicitation_dialog: "Merge PR #42 to main?"
- idle_prompt: custom message if provided
- stop: reason if provided

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 03:58:51 +01:00
arkonandClaude Opus 4.5 a2d4303300 feat: add systemd user service + slow down tab blink animations
- Add scripts/claudeman-web.service: respawning systemd user service
  for `claudeman web --https` (Restart=always, RestartSec=5)
- Slow tab blink animations: red 1s→2.5s, yellow 1.5s→3.5s
  with ease-in-out and reduced opacity for less aggressive feel

Install: symlink to ~/.config/systemd/user/, enable, start
Linger: loginctl enable-linger keeps it running after logout

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 03:52:13 +01:00
arkonandClaude Opus 4.5 7add243f39 feat: blinking tab alerts for sessions needing attention
- Red blink for action-required events (permission_prompt, elicitation_dialog)
- Yellow blink for idle sessions (idle_prompt)
- Alert clears when user clicks the tab or session starts working again
- Only blinks non-active tabs (active tab is already visible)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 03:49:19 +01:00
arkonandClaude Opus 4.5 66214478ff fix: browser notifications now fire correctly
Three issues fixed:
- Default browserNotifications to true (was false, never fired)
- Remove tab-visibility gate for critical/warning notifications
  (monitoring dashboard should alert regardless of tab focus)
- Auto-request Notification permission on first attempt instead of
  silently failing (re-sends the notification after permission granted)
- Migrate existing localStorage prefs from v1 default (false → true)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 03:37:40 +01:00
arkonandClaude Opus 4.5 4979df4a9f fix: notification click now navigates to affected session
switchToSession didn't exist - was calling a nonexistent method.
Changed to selectSession which actually switches the active tab and
loads the terminal buffer. Also enhanced browser push notifications
to navigate to the session when clicked (previously only focused window).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 03:33:56 +01:00
arkonandClaude Opus 4.5 d516609af5 docs: update all docs for hooks integration with elicitation_dialog
- Add hook:elicitation_dialog SSE handler in frontend (critical urgency)
- Add Desktop Notifications section to README with hook event table
- Add hooks API endpoint to README API reference
- Update CLAUDE.md SSE events and API routes for elicitation_dialog
- Add session log entry for hooks feature

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 03:20:03 +01:00
arkonandClaude Opus 4.5 10222075cb fix: restrict auto-accept to plan mode only, block AskUserQuestion prompts
The auto-accept feature was too aggressive - it would press Enter for any
silence without a completion message, including AskUserQuestion prompts.
Now uses the elicitation_dialog notification hook to detect when Claude is
asking a question, and blocks auto-accept in that case. Only plan mode
approvals (silence with no completion message AND no elicitation signal)
trigger auto-accept.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 03:10:02 +01:00
arkonandClaude Opus 4.5 b4aea57d9c feat: add Claude Code hooks for desktop notifications
Wire Claude Code's official hooks system (Notification, Stop) to POST
back to Claudeman's new /api/hook-event endpoint, which broadcasts SSE
events consumed by the existing NotificationManager for desktop alerts.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 02:46:24 +01:00
arkonandClaude Opus 4.5 f818fbb234 feat: persist notification preferences to server-side settings
Notification prefs are now included in the PUT /api/settings payload
and stored in ~/.claudeman/settings.json. On page load, server-stored
prefs are loaded as fallback when localStorage is empty (e.g. new
browser or cleared cache).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 02:19:46 +01:00
arkonandClaude Opus 4.5 1fb1007211 fix: hide notification bell icon when notifications are disabled
Also closes the notification drawer if it was open when the user
disables notifications in settings.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 02:17:27 +01:00
arkonandClaude Opus 4.5 582daf838c feat: add --https flag for self-signed TLS support
Enables the Web Notifications API when accessing via SSH tunnel or
non-localhost URLs. Self-signed cert is auto-generated with openssl
and stored in ~/.claudeman/certs/ for reuse across restarts.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 02:12:22 +01:00
arkonandClaude Opus 4.5 0fc52902cc feat: add multi-layer browser notification system
Implement a 4-layer notification system for alerting users when Claude
Code sessions need attention:

1. Notification Drawer - persistent in-page log with bell icon + badge
2. Tab Title Updates - flashing title with unread count when unfocused
3. Web Notifications - browser push notifications when tab hidden
4. Audio Alerts - Web Audio API beep for critical events

Notification triggers:
- Critical: session errors, crashes (non-zero exit), agent failures/timeouts
- Warning: Ralph loop completions, budget warnings, stuck sessions (idle >10min)
- Info: auto-accepts, auto-clears, agent completions

Features:
- NotificationManager class with debouncing/grouping (5s window)
- Settings tab in App Settings with per-layer/per-urgency toggles
- Configurable idle threshold for stuck session detection
- Click notification to switch to relevant session
- Notification permission request flow
- Rate-limited browser notifications (max 1/3s)
- Idle timer cleanup on session delete

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 01:22:53 +01:00
arkonandClaude Opus 4.5 e40849da79 fix: scroll terminal to bottom on tab switch
After loading the terminal buffer on tab switch, xterm.js wasn't
guaranteed to be scrolled to the bottom, requiring users to manually
scroll down. Fix by:
1. Adding scrollToBottom() after chunkedTerminalWrite completes
2. Adding scrollToBottom() after terminal.focus()
3. Delaying chunkedTerminalWrite resolution by one extra rAF to ensure
   xterm.js has finished rendering the final chunk

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 00:53:47 +01:00
arkonandClaude Opus 4.5 99919d6dfb feat: replace SpawnDetector with MCP server for spawn1337 protocol
Instead of parsing terminal output for <spawn1337> tags, spawn capabilities
are now exposed as native MCP tools that Claude Code can call directly.
The MCP server (stdio transport) proxies requests to the existing REST API.

- Add src/mcp-server.ts with 6 tools: spawn_agent, list_agents,
  get_agent_status, get_agent_result, send_agent_message, cancel_agent
- Remove src/spawn-detector.ts and all references in session.ts/server.ts
- Add CLAUDEMAN_API_URL env var propagation to sessions and screens
- Write .mcp.json to case directories during creation
- Remove spawn1337 tag documentation from case-template.md
- Add claudeman-mcp bin entry to package.json

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 23:16:21 +01:00
arkonandClaude Opus 4.5 9c322f7506 fix: make session numbering per-case instead of global
The w1/w2/s1/s2 session counter was scanning all sessions regardless
of case name, causing cross-case number inflation. Now only counts
sessions belonging to the same case when determining the next number.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 22:22:27 +01:00
arkonandClaude Opus 4.5 a41240049e feat: disable Ralph/Todo tracker auto-enable by default
Ralph tracker no longer auto-enables on pattern detection. It must be
explicitly enabled per-session (via API) or globally via the new
`ralphEnabled` AppConfig setting. Adds GET/PUT /api/config endpoints
for runtime configuration. Spawn agent ralph enable is unchanged.

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