diff --git a/CLAUDE.md b/CLAUDE.md index 4fcc71ca..618ce37e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -199,7 +199,7 @@ Frontend JS modules have `@fileoverview` with `@dependency`/`@loadorder` tags. L ### API Routes -~130 handlers across 15 route files in `src/web/routes/`: system (37, incl. `POST /api/system/span-displays` → spawns `scripts/span-codeman.sh`), sessions (28), orchestrator (10), cases (9), ralph (9), plan (8), respawn (7), files (5), mux (5), push (4), scheduled (4), teams (2), hooks (1), clipboard (1), ws (1 WebSocket). Each file has `@fileoverview` with endpoint details. +~130 handlers across 15 route files in `src/web/routes/`: system (37, incl. `POST /api/system/span-displays` → spawns `scripts/span-codeman.sh`), sessions (28), orchestrator (10), cases (9), ralph (9), plan (8), respawn (7), files (6), mux (5), push (4), scheduled (4), teams (2), hooks (1), clipboard (1), ws (1 WebSocket). Each file has `@fileoverview` with endpoint details. ## Adding Features diff --git a/src/web/public/constants.js b/src/web/public/constants.js index 9375853b..9e5b7723 100644 --- a/src/web/public/constants.js +++ b/src/web/public/constants.js @@ -10,7 +10,7 @@ * @globals {function} scheduleBackground - scheduler.postTask wrapper (background priority) * @globals {function} getEventCoords - Unified mouse/touch coordinate extractor * @globals {function} escapeHtml - XSS-safe HTML escaping - * @globals {object} SSE_EVENTS - Centralized SSE event type constants (~73 event types) + * @globals {object} SSE_EVENTS - Centralized SSE event type constants (120 event types; must match backend src/web/sse-events.ts) * @globals {Array} BUILTIN_RESPAWN_PRESETS - Built-in respawn configuration presets * * @dependency None (first in load order) @@ -241,27 +241,45 @@ const SSE_EVENTS = { SESSION_IDLE: 'session:idle', SESSION_WORKING: 'session:working', SESSION_AUTO_CLEAR: 'session:autoClear', + SESSION_AUTO_COMPACT: 'session:autoCompact', SESSION_CLI_INFO: 'session:cliInfo', + SESSION_MESSAGE: 'session:message', + SESSION_INTERACTIVE: 'session:interactive', + SESSION_RUNNING: 'session:running', // Scheduled runs SCHEDULED_CREATED: 'scheduled:created', SCHEDULED_UPDATED: 'scheduled:updated', SCHEDULED_COMPLETED: 'scheduled:completed', SCHEDULED_STOPPED: 'scheduled:stopped', + SCHEDULED_LOG: 'scheduled:log', + SCHEDULED_DELETED: 'scheduled:deleted', // Respawn RESPAWN_STARTED: 'respawn:started', RESPAWN_STOPPED: 'respawn:stopped', RESPAWN_STATE_CHANGED: 'respawn:stateChanged', RESPAWN_CYCLE_STARTED: 'respawn:cycleStarted', + RESPAWN_CYCLE_COMPLETED: 'respawn:cycleCompleted', RESPAWN_BLOCKED: 'respawn:blocked', - RESPAWN_AUTO_ACCEPT_SENT: 'respawn:autoAcceptSent', + RESPAWN_STEP_SENT: 'respawn:stepSent', + RESPAWN_STEP_COMPLETED: 'respawn:stepCompleted', RESPAWN_DETECTION_UPDATE: 'respawn:detectionUpdate', + RESPAWN_AUTO_ACCEPT_SENT: 'respawn:autoAcceptSent', + RESPAWN_AI_CHECK_STARTED: 'respawn:aiCheckStarted', + RESPAWN_AI_CHECK_COMPLETED: 'respawn:aiCheckCompleted', + RESPAWN_AI_CHECK_FAILED: 'respawn:aiCheckFailed', + RESPAWN_AI_CHECK_COOLDOWN: 'respawn:aiCheckCooldown', + RESPAWN_PLAN_CHECK_STARTED: 'respawn:planCheckStarted', + RESPAWN_PLAN_CHECK_COMPLETED: 'respawn:planCheckCompleted', + RESPAWN_PLAN_CHECK_FAILED: 'respawn:planCheckFailed', RESPAWN_TIMER_STARTED: 'respawn:timerStarted', RESPAWN_TIMER_CANCELLED: 'respawn:timerCancelled', RESPAWN_TIMER_COMPLETED: 'respawn:timerCompleted', - RESPAWN_ERROR: 'respawn:error', RESPAWN_ACTION_LOG: 'respawn:actionLog', + RESPAWN_LOG: 'respawn:log', + RESPAWN_ERROR: 'respawn:error', + RESPAWN_CONFIG_UPDATED: 'respawn:configUpdated', // Tasks TASK_CREATED: 'task:created', @@ -288,6 +306,12 @@ const SSE_EVENTS = { SESSION_BASH_TOOL_END: 'session:bashToolEnd', SESSION_BASH_TOOLS_UPDATE: 'session:bashToolsUpdate', + // Session: Plan + SESSION_PLAN_TASK_UPDATE: 'session:planTaskUpdate', + SESSION_PLAN_CHECKPOINT: 'session:planCheckpoint', + SESSION_PLAN_ROLLBACK: 'session:planRollback', + SESSION_PLAN_TASK_ADDED: 'session:planTaskAdded', + // Hooks (Claude Code hook events) HOOK_IDLE_PROMPT: 'hook:idle_prompt', HOOK_PERMISSION_PROMPT: 'hook:permission_prompt', @@ -338,6 +362,18 @@ const SSE_EVENTS = { ORCHESTRATOR_COMPLETED: 'orchestrator:completed', ORCHESTRATOR_ERROR: 'orchestrator:error', + // Teams (agent teams) + TEAM_CREATED: 'team:created', + TEAM_UPDATED: 'team:updated', + TEAM_REMOVED: 'team:removed', + TEAM_TASK_UPDATED: 'team:taskUpdated', + + // Transcript + TRANSCRIPT_COMPLETE: 'transcript:complete', + TRANSCRIPT_PLAN_MODE: 'transcript:plan_mode', + TRANSCRIPT_TOOL_START: 'transcript:tool_start', + TRANSCRIPT_TOOL_END: 'transcript:tool_end', + // Clipboard CLIPBOARD_WRITE: 'clipboard:write', diff --git a/src/web/sse-events.ts b/src/web/sse-events.ts index b6c8d7a7..3924021c 100644 --- a/src/web/sse-events.ts +++ b/src/web/sse-events.ts @@ -5,7 +5,7 @@ * and referenced by the frontend (`SSE_EVENTS` in `constants.js`). * Both files MUST be kept in sync. * - * ~117 event constants organized by category: + * 120 event constants organized by category: * - **Core** (1): init * - **Session lifecycle** (17): created, updated, deleted, terminal, idle, working, ... * - **Session: Ralph** (6): ralphLoopUpdate, todoUpdate, completionDetected, ... @@ -13,7 +13,7 @@ * - **Session: Plan** (4): planTaskUpdate, planCheckpoint, planRollback, planTaskAdded * - **Tasks** (4): created, completed, failed, updated * - **Mux** (4): created, killed, died, statsUpdated - * - **Respawn** (17): stateChanged, cycleStarted, aiCheck*, timer*, log, ... + * - **Respawn** (24): stateChanged, cycleStarted/Completed, step*, aiCheck*, planCheck*, timer*, log, ... * - **Subagents** (7): discovered, updated, tool_call, tool_result, progress, message, completed * - **Scheduled** (6): created, updated, completed, stopped, log, deleted * - **Teams** (4): created, updated, removed, taskUpdated @@ -22,7 +22,9 @@ * - **Tunnel** (7): started, stopped, progress, error, qrRotated, qrRegenerated, qrAuthUsed * - **Image** (1): detected * - **Hooks** (6): idle_prompt, permission_prompt, elicitation_dialog, stop, teammate_idle, task_completed - * - **Cases** (2): created, linked + * - **Orchestrator** (12): stateChanged, planProgress, planReady, phase*, verification, task*, completed, error + * - **Clipboard** (1): write + * - **Cases** (4): created, linked, deleted, order-changed * * Naming convention: `domain:action` (e.g., `session:created`, `respawn:stateChanged`) *