@wrongstack/webui-server 0.296.2 → 0.296.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/index.js +851 -238
  2. package/dist/index.js.map +4 -4
  3. package/dist/protocol/client-workspace.d.ts +1 -1
  4. package/dist/protocol/client-workspace.d.ts.map +1 -1
  5. package/dist/protocol/index.js +4 -1
  6. package/dist/protocol/index.js.map +2 -2
  7. package/dist/protocol/projections.d.ts +6 -0
  8. package/dist/protocol/projections.d.ts.map +1 -1
  9. package/dist/protocol/registry.d.ts +2 -2
  10. package/dist/protocol/registry.d.ts.map +1 -1
  11. package/dist/protocol/server-workspace.d.ts +1 -1
  12. package/dist/protocol/server-workspace.d.ts.map +1 -1
  13. package/dist/server/backend-services.d.ts.map +1 -1
  14. package/dist/server/connections-health-route.d.ts +8 -0
  15. package/dist/server/connections-health-route.d.ts.map +1 -1
  16. package/dist/server/embedded-host-adapters.d.ts +3 -0
  17. package/dist/server/embedded-host-adapters.d.ts.map +1 -1
  18. package/dist/server/embedded-message-router.d.ts.map +1 -1
  19. package/dist/server/entry.js +573 -209
  20. package/dist/server/entry.js.map +4 -4
  21. package/dist/server/http-server.d.ts.map +1 -1
  22. package/dist/server/project-handlers.d.ts +1 -0
  23. package/dist/server/project-handlers.d.ts.map +1 -1
  24. package/dist/server/routes.d.ts +2 -0
  25. package/dist/server/routes.d.ts.map +1 -1
  26. package/dist/server/sdd-board-ws-handler.d.ts +8 -1
  27. package/dist/server/sdd-board-ws-handler.d.ts.map +1 -1
  28. package/dist/server/session-handlers.d.ts +3 -0
  29. package/dist/server/session-handlers.d.ts.map +1 -1
  30. package/dist/server/setup-events.d.ts.map +1 -1
  31. package/dist/server/start-webui.d.ts +12 -0
  32. package/dist/server/start-webui.d.ts.map +1 -1
  33. package/package.json +10 -10
@@ -1,3 +1,3 @@
1
1
  export declare const CLIENT_WORKSPACE_MESSAGE_TYPES: readonly ['files.list', 'files.read', 'files.tree', 'files.write', 'git.changes', 'git.diff', 'git.info', 'projects.add', 'projects.list', 'projects.select', 'working_dir.set', 'worktree.cleanup', 'worktree.diff', 'worktree.merge', 'worktree.remove', 'worktree.scan', 'shell.open', 'process.kill', 'process.killAll', 'process.list', 'terminal.close', 'terminal.create', 'terminal.input', 'terminal.resize'];
2
- export declare const CLIENT_CONFIGURATION_MESSAGE_TYPES: readonly ['codebase.index.server.shutdown', 'connections.health', 'diag.get', 'key.add', 'key.delete', 'key.set_active', 'key.update', 'prefs.get', 'prefs.update', 'provider.add', 'provider.clear_models', 'provider.models', 'provider.models.search', 'provider.probe', 'provider.remove', 'provider.status.clear', 'provider.status.get', 'provider.status.retry', 'provider.undo_clear', 'provider.update', 'providers.list', 'providers.saved', 'tool.disable', 'tool.enable', 'tools.list', 'webui.shutdown'];
2
+ export declare const CLIENT_CONFIGURATION_MESSAGE_TYPES: readonly ['codebase.index.server.shutdown', 'connections.health', 'connections.service_action', 'diag.get', 'key.add', 'key.delete', 'key.set_active', 'key.update', 'prefs.get', 'prefs.update', 'provider.add', 'provider.clear_models', 'provider.models', 'provider.models.search', 'provider.probe', 'provider.remove', 'provider.status.clear', 'provider.status.get', 'provider.status.retry', 'provider.undo_clear', 'provider.update', 'providers.list', 'providers.saved', 'tool.disable', 'tool.enable', 'tools.list', 'webui.shutdown'];
3
3
  //# sourceMappingURL=client-workspace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-workspace.d.ts","sourceRoot":"","sources":["../../src/protocol/client-workspace.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,YACzC,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,UAAU,EACV,UAAU,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,CACT,CAAC;AAEX,eAAO,MAAM,kCAAkC,YAC7C,gCAAgC,EAChC,oBAAoB,EACpB,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,gBAAgB,CACR,CAAC"}
1
+ {"version":3,"file":"client-workspace.d.ts","sourceRoot":"","sources":["../../src/protocol/client-workspace.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,YACzC,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,UAAU,EACV,UAAU,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,CACT,CAAC;AAEX,eAAO,MAAM,kCAAkC,YAC7C,gCAAgC,EAChC,oBAAoB,EACpB,4BAA4B,EAC5B,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,gBAAgB,CACR,CAAC"}
@@ -278,6 +278,7 @@ var CLIENT_WORKSPACE_MESSAGE_TYPES = [
278
278
  var CLIENT_CONFIGURATION_MESSAGE_TYPES = [
279
279
  "codebase.index.server.shutdown",
280
280
  "connections.health",
281
+ "connections.service_action",
281
282
  "diag.get",
282
283
  "key.add",
283
284
  "key.delete",
@@ -551,6 +552,7 @@ var SERVER_CONFIGURATION_MESSAGE_TYPES = [
551
552
  "codebase.index.server.shutdown_result",
552
553
  "connections.health_error",
553
554
  "connections.health_result",
555
+ "connections.service_action_result",
554
556
  "diag.get",
555
557
  "key.operation_result",
556
558
  "model.switch_result",
@@ -742,7 +744,8 @@ function projectToolMessage(message) {
742
744
  name: text(payload["name"]),
743
745
  ok: payload["ok"] !== false,
744
746
  durationMs: finite(payload["durationMs"]),
745
- ...typeof payload["output"] === "string" ? { output: payload["output"] } : {}
747
+ ...typeof payload["output"] === "string" ? { output: payload["output"] } : {},
748
+ ...Array.isArray(payload["sage"]) ? { sage: payload["sage"].filter((line) => typeof line === "string") } : {}
746
749
  };
747
750
  }
748
751
  return null;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/protocol/connection-fsm.ts", "../../src/protocol/client-conversation.ts", "../../src/protocol/client-integrations.ts", "../../src/protocol/client-operations.ts", "../../src/protocol/client-workspace.ts", "../../src/protocol/server-conversation.ts", "../../src/protocol/server-integrations.ts", "../../src/protocol/server-operations.ts", "../../src/protocol/server-workspace.ts", "../../src/protocol/registry.ts", "../../src/protocol/decoder.ts", "../../src/protocol/projections.ts", "../../src/protocol/replay-payload.ts", "../../src/protocol/version.ts"],
4
- "sourcesContent": ["export type SurfaceConnectionPhase = 'idle' | 'connecting' | 'open' | 'reconnecting' | 'closed';\n\nexport interface SurfaceConnectionConfig {\n maxReconnectAttempts: number;\n initialBackoffMs: number;\n maxBackoffMs: number;\n backoffMultiplier: number;\n jitterRatio: number;\n queueLimit: number;\n heartbeatIntervalMs: number;\n heartbeatTimeoutMs: number;\n}\n\nexport interface SurfaceConnectionState {\n phase: SurfaceConnectionPhase;\n reconnectAttempt: number;\n lastActivityAt: number | null;\n stopped: boolean;\n}\n\nexport interface ReconnectPlan {\n attempt: number;\n delayMs: number;\n retryAt: number;\n}\n\nexport const DEFAULT_SURFACE_CONNECTION_CONFIG: SurfaceConnectionConfig = {\n maxReconnectAttempts: 10,\n initialBackoffMs: 1_000,\n maxBackoffMs: 30_000,\n backoffMultiplier: 2,\n jitterRatio: 0,\n queueLimit: 1_000,\n heartbeatIntervalMs: 0,\n heartbeatTimeoutMs: 0,\n};\n\nexport function createSurfaceConnectionState(): SurfaceConnectionState {\n return { phase: 'idle', reconnectAttempt: 0, lastActivityAt: null, stopped: false };\n}\n\nexport function markConnectionConnecting(state: SurfaceConnectionState): SurfaceConnectionState {\n if (state.stopped) return state;\n return { ...state, phase: 'connecting' };\n}\n\nexport function markConnectionOpen(\n state: SurfaceConnectionState,\n now = Date.now(),\n): SurfaceConnectionState {\n return {\n ...state,\n phase: 'open',\n reconnectAttempt: 0,\n lastActivityAt: now,\n stopped: false,\n };\n}\n\nexport function markConnectionActivity(\n state: SurfaceConnectionState,\n now = Date.now(),\n): SurfaceConnectionState {\n return { ...state, lastActivityAt: now };\n}\n\nexport function stopConnection(state: SurfaceConnectionState): SurfaceConnectionState {\n return { ...state, phase: 'closed', stopped: true };\n}\n\nexport function resetConnection(state: SurfaceConnectionState): SurfaceConnectionState {\n return { ...state, phase: 'idle', reconnectAttempt: 0, stopped: false };\n}\n\nexport function planConnectionReconnect(\n state: SurfaceConnectionState,\n config: SurfaceConnectionConfig,\n now = Date.now(),\n random = Math.random,\n): { state: SurfaceConnectionState; plan: ReconnectPlan | null } {\n if (state.stopped || state.reconnectAttempt >= config.maxReconnectAttempts) {\n return { state: { ...state, phase: 'closed' }, plan: null };\n }\n const attempt = state.reconnectAttempt + 1;\n const base = Math.min(\n config.initialBackoffMs * config.backoffMultiplier ** (attempt - 1),\n config.maxBackoffMs,\n );\n const centeredJitter = (random() * 2 - 1) * config.jitterRatio;\n const delayMs = Math.max(0, Math.round(base * (1 + centeredJitter)));\n return {\n state: { ...state, phase: 'reconnecting', reconnectAttempt: attempt },\n plan: { attempt, delayMs, retryAt: now + delayMs },\n };\n}\n\nexport function isConnectionHeartbeatTimedOut(\n state: SurfaceConnectionState,\n config: SurfaceConnectionConfig,\n now = Date.now(),\n): boolean {\n if (state.phase !== 'open' || state.lastActivityAt === null) return false;\n if (config.heartbeatIntervalMs <= 0) return false;\n return now - state.lastActivityAt > config.heartbeatIntervalMs + config.heartbeatTimeoutMs;\n}\n\nexport function enqueueBounded<T>(\n queue: readonly T[],\n item: T,\n limit: number,\n): { queue: T[]; dropped: T | null } {\n if (limit <= 0) return { queue: [], dropped: item };\n if (queue.length < limit) return { queue: [...queue, item], dropped: null };\n return { queue: [...queue.slice(queue.length - limit + 1), item], dropped: queue[0] ?? null };\n}\n", "export const CLIENT_CONVERSATION_MESSAGE_TYPES = [\n 'abort',\n 'ping',\n 'user_message',\n 'tool.confirm_result',\n 'completion.request',\n 'model.switch',\n 'model.refine',\n 'autonomy.switch',\n 'context.clear',\n 'context.compact',\n 'context.debug',\n 'context.editor.open',\n 'context.editor.validate',\n 'context.editor.apply',\n 'context.mode.create',\n 'context.mode.delete',\n 'context.mode.switch',\n 'context.mode.update',\n 'context.modes.list',\n 'context.repair',\n 'mode.switch',\n 'modes.list',\n 'session.checkpoints',\n 'session.delete',\n 'session.new',\n 'session.rename',\n 'session.resume',\n 'session.rewind',\n 'session.save',\n 'sessions.list',\n 'side_effects.list',\n 'stats.get',\n 'todo.update',\n 'todos.clear',\n 'todos.get',\n 'todos.remove',\n] as const;\n\nexport const CLIENT_COLLABORATION_MESSAGE_TYPES = [\n 'collab.join',\n 'collab.leave',\n 'collab.annotate',\n 'collab.resolve',\n 'collab.request_pause',\n 'collab.resume',\n 'collab.grant_control',\n 'collab.inject_tool',\n 'mailbox.agents',\n 'mailbox.clear',\n 'mailbox.compact',\n 'mailbox.messages',\n 'mailbox.purge',\n 'mailbox.send',\n] as const;\n", "export const CLIENT_KNOWLEDGE_MESSAGE_TYPES = [\n 'brain.ask',\n 'brain.config.get',\n 'brain.config.set',\n 'brain.risk',\n 'brain.status',\n 'chronicle.facet',\n 'chronicle.facets',\n 'chronicle.graph',\n 'chronicle.metrics',\n 'chronicle.query',\n 'chronicle.status',\n 'config.doctor',\n 'design.list',\n 'design.materialize',\n 'design.set',\n 'design.state',\n 'design.swap',\n 'design.tune',\n 'design.use',\n 'design.verify',\n 'memory.list',\n 'memory.sage.backfillRecoverable',\n 'memory.sage.candidateResolve',\n 'memory.sage.delete',\n 'memory.sage.forFile',\n 'memory.sage.get',\n 'memory.sage.graph',\n 'memory.sage.list',\n 'memory.sage.listPage',\n 'memory.sage.recover',\n 'memory.sage.remember',\n 'memory.sage.update',\n] as const;\n\nexport const CLIENT_EXTENSION_MESSAGE_TYPES = [\n 'auth.oauth.cancel',\n 'auth.oauth.code',\n 'auth.oauth.start',\n 'mcp.add',\n 'mcp.disable',\n 'mcp.discover',\n 'mcp.enable',\n 'mcp.list',\n 'mcp.prompt.get',\n 'mcp.prompts',\n 'mcp.remove',\n 'mcp.resource.read',\n 'mcp.resources',\n 'mcp.restart',\n 'mcp.sleep',\n 'mcp.update',\n 'mcp.wake',\n 'prompts.content',\n 'prompts.create',\n 'prompts.favorite',\n 'prompts.list',\n 'prompts.recent',\n 'prompts.search',\n 'prompts.used',\n 'skills.content',\n 'skills.create',\n 'skills.edit',\n 'skills.export',\n 'skills.install',\n 'skills.list',\n 'skills.uninstall',\n 'skills.update',\n] as const;\n", "export const CLIENT_GOAL_MESSAGE_TYPES = [\n 'goal-state.get',\n 'goal.addTask',\n 'goal.assess',\n 'goal.assignTask',\n 'goal.clear',\n 'goal.get',\n 'goal.list',\n 'goal.load',\n 'goal.moveTask',\n 'goal.pause',\n 'goal.resume',\n 'goal.retryTask',\n 'goal.revert',\n 'goal.runTask',\n 'goal.save',\n 'goal.selectPhase',\n 'goal.start',\n 'goal.state',\n 'goal.status',\n 'goal.stop',\n 'goal.taskStatus',\n 'goal.toggleAutonomous',\n 'plan.get',\n 'plan.item.update',\n 'plan.template_use',\n 'task.update',\n 'tasks.get',\n] as const;\n\nexport const CLIENT_SDD_MESSAGE_TYPES = [\n 'sdd.board.cancel_task',\n 'sdd.board.cleanup_worktrees',\n 'sdd.board.delete_task',\n 'sdd.board.destroy',\n 'sdd.board.get',\n 'sdd.board.list',\n 'sdd.board.pause',\n 'sdd.board.reassign',\n 'sdd.board.resume',\n 'sdd.board.retry',\n 'sdd.board.retry_all_failed',\n 'sdd.board.rollback',\n 'sdd.board.set_task_fallbacks',\n 'sdd.board.set_task_model',\n 'sdd.board.set_task_verification',\n 'sdd.board.split_task',\n 'sdd.board.stop',\n 'sdd.run.from_graph',\n 'sdd.run.from_spec',\n 'sdd.run.start',\n 'sdd.spec.approve',\n 'sdd.spec.discard',\n 'sdd.spec.get',\n 'sdd.spec.message',\n 'sdd.spec.start',\n 'specs.get',\n 'specs.list',\n 'specs.taskStatus',\n] as const;\n", "export const CLIENT_WORKSPACE_MESSAGE_TYPES = [\n 'files.list',\n 'files.read',\n 'files.tree',\n 'files.write',\n 'git.changes',\n 'git.diff',\n 'git.info',\n 'projects.add',\n 'projects.list',\n 'projects.select',\n 'working_dir.set',\n 'worktree.cleanup',\n 'worktree.diff',\n 'worktree.merge',\n 'worktree.remove',\n 'worktree.scan',\n 'shell.open',\n 'process.kill',\n 'process.killAll',\n 'process.list',\n 'terminal.close',\n 'terminal.create',\n 'terminal.input',\n 'terminal.resize',\n] as const;\n\nexport const CLIENT_CONFIGURATION_MESSAGE_TYPES = [\n 'codebase.index.server.shutdown',\n 'connections.health',\n 'diag.get',\n 'key.add',\n 'key.delete',\n 'key.set_active',\n 'key.update',\n 'prefs.get',\n 'prefs.update',\n 'provider.add',\n 'provider.clear_models',\n 'provider.models',\n 'provider.models.search',\n 'provider.probe',\n 'provider.remove',\n 'provider.status.clear',\n 'provider.status.get',\n 'provider.status.retry',\n 'provider.undo_clear',\n 'provider.update',\n 'providers.list',\n 'providers.saved',\n 'tool.disable',\n 'tool.enable',\n 'tools.list',\n 'webui.shutdown',\n] as const;\n", "export const SERVER_CONVERSATION_MESSAGE_TYPES = [\n 'error',\n 'log',\n 'pong',\n 'side_effects',\n 'agent.status_changed',\n 'agent.timeline.message',\n 'client.status_update',\n 'compaction.failed',\n 'completion.result',\n 'context.compacted',\n 'context.debug',\n 'context.editor.snapshot',\n 'context.editor.validation',\n 'context.editor.applied',\n 'context.mode.changed',\n 'context.modes.list',\n 'context.repaired',\n 'ctx.max_context',\n 'ctx.pct',\n 'delegate.completed',\n 'delegate.started',\n 'iteration.completed',\n 'iteration.limit_reached',\n 'iteration.started',\n 'model.refine_result',\n 'modes.list',\n 'provider.active_blocked',\n 'provider.error',\n 'provider.fallback',\n 'provider.response',\n 'provider.retry',\n 'provider.status_changed',\n 'provider.stream_error',\n 'provider.text_delta',\n 'provider.thinking_delta',\n 'run.result',\n 'session.checkpoints',\n 'session.damaged',\n 'session.end',\n 'session.rewound',\n 'session.start',\n 'session.stats',\n 'sessions.list',\n 'sessions.status_update',\n 'stats.get',\n 'token.cost_estimate_unavailable',\n 'token.threshold',\n 'tool.confirm_needed',\n 'tool.disabled',\n 'tool.enabled',\n 'tool.executed',\n 'tool.loop_detected',\n 'tool.progress',\n 'tool.started',\n 'tools.list',\n 'trust.persisted',\n] as const;\n\nexport const SERVER_COLLABORATION_MESSAGE_TYPES = [\n 'collab.annotation.added',\n 'collab.annotation.resolved',\n 'collab.event',\n 'collab.injection.granted',\n 'collab.participant.joined',\n 'collab.participant.left',\n 'collab.pause.granted',\n 'collab.pause.released',\n 'collab.state',\n 'mailbox.agent_registered',\n 'mailbox.agents',\n 'mailbox.cleared',\n 'mailbox.compacted',\n 'mailbox.event',\n 'mailbox.messages',\n 'mailbox.sent',\n 'mailbox.purged',\n 'mailbox.received',\n 'subagent.budget_extended',\n 'subagent.event',\n] as const;\n", "export const SERVER_KNOWLEDGE_MESSAGE_TYPES = [\n 'brain.answer',\n 'brain.config',\n 'brain.event',\n 'brain.status',\n 'chronicle.error',\n 'chronicle.facet_result',\n 'chronicle.facets_result',\n 'chronicle.graph_result',\n 'chronicle.metrics_result',\n 'chronicle.query_result',\n 'chronicle.status_result',\n 'config.doctor.result',\n 'design.list',\n 'design.materialize',\n 'design.set',\n 'design.state',\n 'design.swap',\n 'design.tune',\n 'design.use',\n 'design.verify',\n 'memory.event',\n 'memory.list',\n 'memory.sage.backfillRecoverable',\n 'memory.sage.candidateResolve',\n 'memory.sage.delete',\n 'memory.sage.forFile',\n 'memory.sage.get',\n 'memory.sage.graph',\n 'memory.sage.list',\n 'memory.sage.listPage',\n 'memory.sage.recover',\n 'memory.sage.remember',\n 'memory.sage.update',\n] as const;\n\nexport const SERVER_EXTENSION_MESSAGE_TYPES = [\n 'mcp.content.error',\n 'mcp.content.selected',\n 'mcp.list',\n 'mcp.operation_result',\n 'mcp.prompts',\n 'mcp.resources',\n 'mcp.server.added',\n 'mcp.server.connected',\n 'mcp.server.disconnected',\n 'mcp.server.discovered',\n 'mcp.server.error',\n 'mcp.server.reconnected',\n 'mcp.server.removed',\n 'mcp.server.sleeping',\n 'mcp.server.updated',\n 'mcp.server.waking',\n 'prompts.content',\n 'prompts.created',\n 'prompts.favorite',\n 'prompts.list',\n 'prompts.recent',\n 'prompts.search',\n 'prompts.used',\n 'skills.content',\n 'skills.created',\n 'skills.edited',\n 'skills.exported',\n 'skills.installed',\n 'skills.list',\n 'skills.uninstalled',\n 'skills.updated',\n] as const;\n", "export const SERVER_GOAL_MESSAGE_TYPES = [\n 'budget.decision',\n 'budget.threshold_reached',\n 'coordinator.stats',\n 'coordinator.status',\n 'eternal.iteration',\n 'fleet.concurrency_update',\n 'goal-state.updated',\n 'goal.assess.result',\n 'goal.list',\n 'goal.paused',\n 'goal.resumed',\n 'goal.saved',\n 'goal.error',\n 'goal.stopped',\n 'goal.failed',\n 'goal.completed',\n 'goal.cleared',\n 'goal.reverted',\n 'goal.progress',\n 'goal.state',\n 'in_flight.ended',\n 'in_flight.started',\n 'plan.updated',\n 'task.completed',\n 'task.failed',\n 'task.pending',\n 'task.started',\n 'tasks.updated',\n 'todos.cleared',\n 'todos.updated',\n] as const;\n\nexport const SERVER_SDD_MESSAGE_TYPES = [\n 'kanban.task.activity',\n 'sdd.board.lifecycle_result',\n 'sdd.board.list',\n 'sdd.board.snapshot',\n 'sdd.run.started',\n 'sdd.spec.agent_text',\n 'sdd.spec.error',\n 'sdd.spec.snapshot',\n 'specs.detail',\n 'specs.list',\n] as const;\n\nexport const SERVER_AUTOMATION_MESSAGE_TYPES = [\n 'consensus.vote_cast',\n 'consensus.vote_initiated',\n 'consensus.vote_resolved',\n 'cron.job_fired',\n 'cron.snapshot',\n 'techstack.job.cancelled',\n 'techstack.job.failed',\n 'techstack.job.progress',\n 'techstack.job.started',\n 'techstack.report.delivered',\n 'techstack.report.ready',\n 'techstack.snapshot.updated',\n 'techstack.workspace.completed',\n] as const;\n", "export const SERVER_WORKSPACE_MESSAGE_TYPES = [\n 'checkpoint.written',\n 'codemap.file_event',\n 'codemap.index_updated',\n 'codemap.tool_executed',\n 'codemap.tool_started',\n 'file.saved',\n 'files.list',\n 'files.read',\n 'files.tree',\n 'files.written',\n 'git.changes',\n 'git.diff',\n 'git.info',\n 'process.list',\n 'projects.added',\n 'projects.list',\n 'projects.selected',\n 'terminal.exit',\n 'terminal.output',\n 'working_dir.changed',\n 'worktree.cleanup_result',\n 'worktree.diff_result',\n 'worktree.event',\n 'worktree.merge_result',\n 'worktree.orphans',\n 'worktree.state',\n] as const;\n\nexport const SERVER_CONFIGURATION_MESSAGE_TYPES = [\n 'auth.oauth.status',\n 'codebase.index.server.shutdown_result',\n 'connections.health_error',\n 'connections.health_result',\n 'diag.get',\n 'key.operation_result',\n 'model.switch_result',\n 'prefs.updated',\n 'provider.catalog',\n 'provider.models',\n 'provider.models.search_result',\n 'provider.probe',\n 'provider.status.snapshot',\n 'providers.saved',\n] as const;\n", "import {\n CLIENT_COLLABORATION_MESSAGE_TYPES,\n CLIENT_CONVERSATION_MESSAGE_TYPES,\n} from './client-conversation.js';\nimport {\n CLIENT_EXTENSION_MESSAGE_TYPES,\n CLIENT_KNOWLEDGE_MESSAGE_TYPES,\n} from './client-integrations.js';\nimport { CLIENT_GOAL_MESSAGE_TYPES, CLIENT_SDD_MESSAGE_TYPES } from './client-operations.js';\nimport {\n CLIENT_CONFIGURATION_MESSAGE_TYPES,\n CLIENT_WORKSPACE_MESSAGE_TYPES,\n} from './client-workspace.js';\nimport {\n SERVER_COLLABORATION_MESSAGE_TYPES,\n SERVER_CONVERSATION_MESSAGE_TYPES,\n} from './server-conversation.js';\nimport {\n SERVER_EXTENSION_MESSAGE_TYPES,\n SERVER_KNOWLEDGE_MESSAGE_TYPES,\n} from './server-integrations.js';\nimport {\n SERVER_AUTOMATION_MESSAGE_TYPES,\n SERVER_GOAL_MESSAGE_TYPES,\n SERVER_SDD_MESSAGE_TYPES,\n} from './server-operations.js';\nimport {\n SERVER_CONFIGURATION_MESSAGE_TYPES,\n SERVER_WORKSPACE_MESSAGE_TYPES,\n} from './server-workspace.js';\n\nexport const CLIENT_MESSAGE_TYPES = [\n ...CLIENT_CONVERSATION_MESSAGE_TYPES,\n ...CLIENT_COLLABORATION_MESSAGE_TYPES,\n ...CLIENT_WORKSPACE_MESSAGE_TYPES,\n ...CLIENT_CONFIGURATION_MESSAGE_TYPES,\n ...CLIENT_GOAL_MESSAGE_TYPES,\n ...CLIENT_SDD_MESSAGE_TYPES,\n ...CLIENT_KNOWLEDGE_MESSAGE_TYPES,\n ...CLIENT_EXTENSION_MESSAGE_TYPES,\n] as const;\n\nexport const SERVER_MESSAGE_TYPES = [\n ...SERVER_CONVERSATION_MESSAGE_TYPES,\n ...SERVER_COLLABORATION_MESSAGE_TYPES,\n ...SERVER_WORKSPACE_MESSAGE_TYPES,\n ...SERVER_CONFIGURATION_MESSAGE_TYPES,\n ...SERVER_GOAL_MESSAGE_TYPES,\n ...SERVER_SDD_MESSAGE_TYPES,\n ...SERVER_AUTOMATION_MESSAGE_TYPES,\n ...SERVER_KNOWLEDGE_MESSAGE_TYPES,\n ...SERVER_EXTENSION_MESSAGE_TYPES,\n] as const;\n\nexport type ExactClientMessageType = (typeof CLIENT_MESSAGE_TYPES)[number];\nexport type ExactServerMessageType = (typeof SERVER_MESSAGE_TYPES)[number];\n\nconst CLIENT_TYPE_SET: ReadonlySet<string> = new Set(CLIENT_MESSAGE_TYPES);\nconst SERVER_TYPE_SET: ReadonlySet<string> = new Set(SERVER_MESSAGE_TYPES);\n\nexport function isRegisteredMessageType(type: string, direction: 'client' | 'server'): boolean {\n const exact = direction === 'client' ? CLIENT_TYPE_SET : SERVER_TYPE_SET;\n return (\n exact.has(type) ||\n (type.startsWith('kanban.') && type.length > 'kanban.'.length) ||\n (type.startsWith('agent-roster.') && type.length > 'agent-roster.'.length)\n );\n}\n", "import { isRegisteredMessageType } from './registry.js';\nimport type {\n CanonicalClientMessage,\n CanonicalServerMessage,\n ProtocolDecodeIssue,\n ProtocolDecodeResult,\n ProtocolDirection,\n ProtocolEnvelope,\n} from './types.js';\n\nconst FORBIDDEN_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\nconst MAX_PAYLOAD_DEPTH = 32;\n\nfunction inspectValue(value: unknown, path: string, depth: number): ProtocolDecodeIssue | null {\n if (depth > MAX_PAYLOAD_DEPTH) {\n return { code: 'too_deep', message: 'Protocol payload exceeds the nesting limit', path };\n }\n if (value === null || typeof value !== 'object') return null;\n\n for (const key of Object.keys(value)) {\n const childPath = `${path}.${key}`;\n if (FORBIDDEN_KEYS.has(key)) {\n return { code: 'unsafe_key', message: `Unsafe protocol key: ${key}`, path: childPath };\n }\n const issue = inspectValue((value as Record<string, unknown>)[key], childPath, depth + 1);\n if (issue) return issue;\n }\n return null;\n}\n\nexport function decodeProtocolMessage(\n input: unknown,\n direction: 'client',\n): ProtocolDecodeResult<CanonicalClientMessage>;\nexport function decodeProtocolMessage(\n input: unknown,\n direction: 'server',\n): ProtocolDecodeResult<CanonicalServerMessage>;\nexport function decodeProtocolMessage(\n input: unknown,\n direction: ProtocolDirection,\n): ProtocolDecodeResult<ProtocolEnvelope> {\n if (input === null || typeof input !== 'object' || Array.isArray(input)) {\n return {\n ok: false,\n issue: { code: 'invalid_envelope', message: 'Protocol message must be an object' },\n };\n }\n\n const envelope = input as Record<string, unknown>;\n if (typeof envelope['type'] !== 'string' || envelope['type'].length === 0) {\n return {\n ok: false,\n issue: { code: 'invalid_type', message: 'Protocol message type must be a non-empty string' },\n };\n }\n if (!isRegisteredMessageType(envelope['type'], direction)) {\n return {\n ok: false,\n issue: { code: 'unknown_type', message: `Unknown ${direction} message: ${envelope['type']}` },\n };\n }\n if (direction === 'server' && !Object.hasOwn(envelope, 'payload')) {\n return {\n ok: false,\n issue: { code: 'invalid_envelope', message: 'Server protocol messages require a payload' },\n };\n }\n\n const issue = inspectValue(envelope, '$', 0);\n if (issue) return { ok: false, issue };\n return { ok: true, message: input as ProtocolEnvelope };\n}\n\nexport function decodeProtocolFrame(\n frame: string,\n direction: 'client',\n): ProtocolDecodeResult<CanonicalClientMessage>;\nexport function decodeProtocolFrame(\n frame: string,\n direction: 'server',\n): ProtocolDecodeResult<CanonicalServerMessage>;\nexport function decodeProtocolFrame(\n frame: string,\n direction: ProtocolDirection,\n): ProtocolDecodeResult<ProtocolEnvelope> {\n try {\n return decodeProtocolMessage(JSON.parse(frame), direction as 'client');\n } catch {\n return {\n ok: false,\n issue: { code: 'invalid_envelope', message: 'Protocol frame is not valid JSON' },\n };\n }\n}\n", "import type { HqAlertMessage, HqCommandAuditEntry, HqEventEnvelope, HqSnapshot } from '@wrongstack/core/hq';\nimport type { ProtocolEnvelope } from './types.js';\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction text(value: unknown, fallback = ''): string {\n return typeof value === 'string' ? value : fallback;\n}\n\nfunction finite(value: unknown, fallback = 0): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n}\n\n/** When a key is present it must be an array; when absent it is acceptable. */\nfunction optionalArray(value: unknown): boolean {\n return value === undefined || Array.isArray(value);\n}\n\n/** Validate that all required numeric fields of a totals object are finite. */\nfunction isValidHqTotals(totals: Record<string, unknown>): boolean {\n return (\n finite(totals['activeProjects']) === totals['activeProjects'] &&\n finite(totals['activeClients']) === totals['activeClients'] &&\n finite(totals['activeSessions']) === totals['activeSessions'] &&\n finite(totals['activeSubagents']) === totals['activeSubagents'] &&\n finite(totals['unreadMailboxMessages']) === totals['unreadMailboxMessages'] &&\n finite(totals['incompleteMailboxMessages']) === totals['incompleteMailboxMessages'] &&\n finite(totals['totalCostUsd']) === totals['totalCostUsd']\n );\n}\n\nexport interface SessionProjection {\n kind: 'session';\n id: string;\n provider: string;\n model: string;\n projectName: string;\n cwd: string;\n maxContext: number;\n reset: boolean;\n replayMessages: unknown[] | null;\n /** Audit markers replayed alongside the conversation. */\n replayMarkers: unknown[] | null;\n replayUsage: Record<string, unknown> | null;\n}\n\nexport function projectSessionMessage(message: ProtocolEnvelope): SessionProjection | null {\n if (message.type !== 'session.start') return null;\n const payload = record(message.payload);\n if (!payload) return null;\n return {\n kind: 'session',\n id: text(payload['sessionId']),\n provider: text(payload['provider']),\n model: text(payload['model']),\n projectName: text(payload['projectName'], 'Project'),\n cwd: text(payload['cwd']),\n maxContext: finite(payload['maxContext']),\n reset: payload['reset'] === true,\n replayMessages: Array.isArray(payload['replayMessages']) ? payload['replayMessages'] : null,\n replayMarkers: Array.isArray(payload['replayMarkers']) ? payload['replayMarkers'] : null,\n replayUsage: record(payload['replayUsage']),\n };\n}\n\nexport type ChatProjection =\n | { kind: 'thinking-delta'; text: string }\n | { kind: 'text-delta'; text: string; messageId: string }\n | { kind: 'response'; content: unknown }\n | { kind: 'run-result'; status: string; iterations: number; finalText?: string | undefined }\n | { kind: 'error'; message: string };\n\nexport function projectChatMessage(message: ProtocolEnvelope): ChatProjection | null {\n const payload = record(message.payload);\n if (!payload) return null;\n switch (message.type) {\n case 'provider.thinking_delta': {\n const value = text(payload['text']);\n return value ? { kind: 'thinking-delta', text: value } : null;\n }\n case 'provider.text_delta': {\n const value = text(payload['text']);\n return value\n ? { kind: 'text-delta', text: value, messageId: text(payload['messageId']) }\n : null;\n }\n case 'provider.response':\n return { kind: 'response', content: payload['content'] };\n case 'run.result':\n return {\n kind: 'run-result',\n status: text(payload['status']),\n iterations: finite(payload['iterations'], 1),\n ...(typeof payload['finalText'] === 'string' ? { finalText: payload['finalText'] } : {}),\n };\n case 'error':\n return { kind: 'error', message: text(payload['message'], 'Run failed') };\n default:\n return null;\n }\n}\n\nexport type ToolProjection =\n | { kind: 'started'; id: string; name: string; input: unknown; messageId: string }\n | { kind: 'progress'; id: string; name: string; eventType: string; text: string }\n | {\n kind: 'executed';\n id: string;\n name: string;\n ok: boolean;\n output?: string | undefined;\n durationMs: number;\n };\n\nexport function projectToolMessage(message: ProtocolEnvelope): ToolProjection | null {\n const payload = record(message.payload);\n if (!payload) return null;\n if (message.type === 'tool.started') {\n const name = text(payload['name'], 'tool');\n return {\n kind: 'started',\n id: text(payload['id'], name),\n name,\n input: payload['input'],\n messageId: text(payload['messageId']),\n };\n }\n if (message.type === 'tool.progress') {\n const event = record(payload['event']);\n return {\n kind: 'progress',\n id: text(payload['id']),\n name: text(payload['name'], 'tool'),\n eventType: text(event?.['type']),\n text: text(event?.['text']).trim(),\n };\n }\n if (message.type === 'tool.executed') {\n return {\n kind: 'executed',\n id: text(payload['id']),\n name: text(payload['name']),\n ok: payload['ok'] !== false,\n durationMs: finite(payload['durationMs']),\n ...(typeof payload['output'] === 'string' ? { output: payload['output'] } : {}),\n };\n }\n return null;\n}\n\nexport type FleetProjection =\n | { kind: 'concurrency'; active: number; maximum: number }\n | { kind: 'client-status'; status: Record<string, unknown> }\n | { kind: 'sessions'; sessions: unknown[] }\n | { kind: 'coordinator'; agents: Array<Record<string, unknown>> };\n\nexport function projectFleetMessage(message: ProtocolEnvelope): FleetProjection | null {\n const payload = record(message.payload);\n if (!payload) return null;\n switch (message.type) {\n case 'fleet.concurrency_update':\n return {\n kind: 'concurrency',\n active: finite(payload['fleetConcurrency']),\n maximum: finite(payload['fleetConcurrencyMax']),\n };\n case 'client.status_update':\n return { kind: 'client-status', status: payload };\n case 'sessions.status_update':\n return {\n kind: 'sessions',\n sessions: Array.isArray(payload['sessions']) ? payload['sessions'] : [],\n };\n case 'coordinator.stats':\n return {\n kind: 'coordinator',\n agents: Array.isArray(payload['subagentStatuses'])\n ? payload['subagentStatuses'].filter(\n (item): item is Record<string, unknown> => record(item) !== null,\n )\n : [],\n };\n default:\n return null;\n }\n}\n\nexport interface HqFleetProjection {\n kind: 'hq-snapshot';\n snapshot: HqSnapshot;\n}\n\n/**\n * Validate the stable outer shape of an HQ fleet snapshot before a browser\n * surface commits it to state. Domain-specific records remain owned by Core;\n * this boundary only rejects truncated or unrelated wire frames.\n */\nexport function projectHqFleetMessage(message: {\n type: string;\n snapshot?: unknown;\n}): HqFleetProjection | null {\n if (message.type !== 'hq.snapshot') return null;\n const snapshot = record(message.snapshot);\n const totals = snapshot ? record(snapshot['totals']) : null;\n if (\n !snapshot ||\n typeof snapshot['generatedAt'] !== 'string' ||\n !Array.isArray(snapshot['clients']) ||\n !Array.isArray(snapshot['projects']) ||\n !Array.isArray(snapshot['sessions']) ||\n !Array.isArray(snapshot['fleets']) ||\n !Array.isArray(snapshot['mailboxes']) ||\n !totals ||\n !isValidHqTotals(totals) ||\n !optionalArray(snapshot['machines']) ||\n !optionalArray(snapshot['liveSessions']) ||\n !optionalArray(snapshot['mcpServers'])\n ) {\n return null;\n }\n return { kind: 'hq-snapshot', snapshot: snapshot as unknown as HqSnapshot };\n}\n\n// \u2500\u2500 HQ sibling projections (event, alert, command_status) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n//\n// These mirrors of projectHqFleetMessage validate the outer envelope shape of\n// hq.event / hq.alert / hq.command_status frames before the browser surface\n// commits them to store state, closing the trust-boundary gap flagged in\n// review \u2014 every branch now passes through a projection, not just hq.snapshot.\n\nexport interface HqEventProjection {\n kind: 'hq-event';\n event: HqEventEnvelope;\n}\n\nexport function projectHqEventMessage(message: {\n type: string;\n event?: unknown;\n}): HqEventProjection | null {\n if (message.type !== 'hq.event') return null;\n const event = record(message.event);\n if (\n !event ||\n typeof event['id'] !== 'string' ||\n typeof event['type'] !== 'string' ||\n typeof event['timestamp'] !== 'string' ||\n typeof event['clientId'] !== 'string' ||\n typeof event['projectId'] !== 'string' ||\n typeof event['seq'] !== 'number'\n ) {\n return null;\n }\n return { kind: 'hq-event', event: event as unknown as HqEventEnvelope };\n}\n\nexport interface HqAlertProjection {\n kind: 'hq-alert';\n alert: HqAlertMessage;\n}\n\nexport function projectHqAlertMessage(message: {\n type: string;\n severity?: unknown;\n message?: unknown;\n timestamp?: unknown;\n}): HqAlertProjection | null {\n if (message.type !== 'hq.alert') return null;\n if (\n typeof message['severity'] !== 'string' ||\n !['info', 'warn', 'error'].includes(message['severity']) ||\n typeof message['message'] !== 'string' ||\n typeof message['timestamp'] !== 'string'\n ) {\n return null;\n }\n return { kind: 'hq-alert', alert: message as unknown as HqAlertMessage };\n}\n\nexport interface HqCommandStatusProjection {\n kind: 'hq-command-status';\n command: HqCommandAuditEntry;\n}\n\nexport function projectHqCommandStatusMessage(message: {\n type: string;\n command?: unknown;\n}): HqCommandStatusProjection | null {\n if (message.type !== 'hq.command_status') return null;\n const command = record(message.command);\n if (\n !command ||\n typeof command['commandId'] !== 'string' ||\n typeof command['type'] !== 'string' ||\n typeof command['clientId'] !== 'string' ||\n typeof command['enqueuedBy'] !== 'string' ||\n typeof command['enqueuedAt'] !== 'string' ||\n typeof command['status'] !== 'string' ||\n !['queued', 'delivered', 'acked'].includes(command['status'])\n ) {\n return null;\n }\n return { kind: 'hq-command-status', command: command as unknown as HqCommandAuditEntry };\n}\n", "/**\n * Replay payload assembly for `session.start`.\n *\n * Two servers build this frame \u2014 the standalone WebUI server and the\n * CLI-hosted bridge \u2014 and they had already drifted (one fell back to the live\n * in-memory conversation, the other did not; only one applied the message cap\n * consistently). Both now call this, so the wire shape has a single definition.\n *\n * `replayMarkers` carries audit markers (compaction, mode switch, skill\n * activation, subagent lifecycle, provider retries, truncation) that a live\n * client renders as they stream in. Without them a reconnect or a session\n * resume silently drops everything except the conversation, so the same\n * session reads differently before and after a reload. Only the *projected*\n * markers cross the wire \u2014 never the raw event stream \u2014 so a 50k-event session\n * still costs a few dozen short strings.\n */\nimport type { Message, SessionEvent, SessionMarker, Usage } from '@wrongstack/core/types';\n// Narrow subpath, not the `types` barrel: this module is the only value import\n// in `src/protocol/`, which the browser bundles pull in wholesale. Going\n// through the barrel reached `types/mode.ts` \u2192 `types/mode-prompts.ts` and\n// dragged `node:fs`/`node:path`/`node:url` into every UI build.\nimport { CHAT_MARKER_SOURCES, projectSessionMarkers } from '@wrongstack/core/types/session-markers';\n\n/**\n * Upper bound on replayed conversation messages. A very long session would\n * otherwise push a multi-megabyte frame on every connect; the full transcript\n * remains on disk and in the session store.\n */\nexport const REPLAY_MESSAGE_CAP = 2_000;\n\nexport interface ReplaySource {\n messages: readonly Message[];\n /** Raw JSONL events, when the caller loaded them. Markers are projected from these. */\n events?: readonly SessionEvent[] | undefined;\n usage?: Usage | undefined;\n}\n\nexport interface ReplayPayloadFields {\n replayMessages?: Message[] | undefined;\n replayMarkers?: SessionMarker[] | undefined;\n replayUsage?: Usage | undefined;\n}\n\n/**\n * Build the replay fields of a `session.start` payload. Fields are omitted\n * rather than sent empty, so an existing client's \"did the server send a\n * replay?\" checks keep working unchanged.\n */\nexport function buildReplayPayload(source: ReplaySource): ReplayPayloadFields {\n const out: ReplayPayloadFields = {};\n\n const messages = source.messages;\n if (messages.length > 0) {\n out.replayMessages =\n messages.length > REPLAY_MESSAGE_CAP\n ? messages.slice(-REPLAY_MESSAGE_CAP)\n : [...messages];\n }\n\n if (source.events && source.events.length > 0) {\n const markers = projectSessionMarkers(source.events, CHAT_MARKER_SOURCES);\n if (markers.length > 0) out.replayMarkers = markers;\n }\n\n const usage = source.usage;\n if (\n usage &&\n usage.input + usage.output + (usage.cacheRead ?? 0) + (usage.cacheWrite ?? 0) > 0\n ) {\n out.replayUsage = {\n input: usage.input,\n output: usage.output,\n cacheRead: usage.cacheRead ?? 0,\n cacheWrite: usage.cacheWrite ?? 0,\n };\n }\n\n return out;\n}\n", "export const SURFACE_PROTOCOL_VERSION = 1 as const;\nexport const SURFACE_PROTOCOL_MIN_VERSION = 1 as const;\n\nexport const SURFACE_PROTOCOL_CAPABILITIES = [\n 'protocol.directional-decoder',\n 'protocol.recursive-key-safety',\n 'chronicle.query',\n 'chronicle.facet',\n 'chronicle.facets',\n 'chronicle.graph',\n 'chronicle.metrics',\n 'chronicle.status',\n 'connections.health',\n /** Interview resume/discard + lastAgentText/lastRunId continuity. */\n 'sdd.interview.continuity',\n /** Launch multi-agent runs from a graph id or resolved spec id. */\n 'sdd.run.from_graph',\n] as const;\n\nexport type SurfaceProtocolCapability = (typeof SURFACE_PROTOCOL_CAPABILITIES)[number];\n\nexport interface ProtocolAdvertisement {\n protocolVersion?: number | undefined;\n protocolCapabilities?: readonly string[] | undefined;\n}\n\nexport interface ProtocolNegotiation {\n compatible: boolean;\n legacyPeer: boolean;\n version: number;\n capabilities: SurfaceProtocolCapability[];\n}\n\nexport function protocolAdvertisement(): {\n protocolVersion: typeof SURFACE_PROTOCOL_VERSION;\n protocolCapabilities: SurfaceProtocolCapability[];\n} {\n return {\n protocolVersion: SURFACE_PROTOCOL_VERSION,\n protocolCapabilities: [...SURFACE_PROTOCOL_CAPABILITIES],\n };\n}\n\nexport function negotiateProtocol(peer: ProtocolAdvertisement): ProtocolNegotiation {\n const peerVersion = peer.protocolVersion;\n const legacyPeer = peerVersion === undefined;\n const version = legacyPeer\n ? SURFACE_PROTOCOL_VERSION\n : Math.min(peerVersion, SURFACE_PROTOCOL_VERSION);\n const compatible =\n legacyPeer || (Number.isInteger(peerVersion) && peerVersion >= SURFACE_PROTOCOL_MIN_VERSION);\n const advertised = new Set(peer.protocolCapabilities ?? []);\n return {\n compatible,\n legacyPeer,\n version,\n capabilities: SURFACE_PROTOCOL_CAPABILITIES.filter((item) => advertised.has(item)),\n };\n}\n"],
5
- "mappings": "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A,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACpEO,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,2BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC3DO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,qCAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACtDO,IAAM,oCAAoC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,qCAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AChFO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACpEO,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,2BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,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",
4
+ "sourcesContent": ["export type SurfaceConnectionPhase = 'idle' | 'connecting' | 'open' | 'reconnecting' | 'closed';\n\nexport interface SurfaceConnectionConfig {\n maxReconnectAttempts: number;\n initialBackoffMs: number;\n maxBackoffMs: number;\n backoffMultiplier: number;\n jitterRatio: number;\n queueLimit: number;\n heartbeatIntervalMs: number;\n heartbeatTimeoutMs: number;\n}\n\nexport interface SurfaceConnectionState {\n phase: SurfaceConnectionPhase;\n reconnectAttempt: number;\n lastActivityAt: number | null;\n stopped: boolean;\n}\n\nexport interface ReconnectPlan {\n attempt: number;\n delayMs: number;\n retryAt: number;\n}\n\nexport const DEFAULT_SURFACE_CONNECTION_CONFIG: SurfaceConnectionConfig = {\n maxReconnectAttempts: 10,\n initialBackoffMs: 1_000,\n maxBackoffMs: 30_000,\n backoffMultiplier: 2,\n jitterRatio: 0,\n queueLimit: 1_000,\n heartbeatIntervalMs: 0,\n heartbeatTimeoutMs: 0,\n};\n\nexport function createSurfaceConnectionState(): SurfaceConnectionState {\n return { phase: 'idle', reconnectAttempt: 0, lastActivityAt: null, stopped: false };\n}\n\nexport function markConnectionConnecting(state: SurfaceConnectionState): SurfaceConnectionState {\n if (state.stopped) return state;\n return { ...state, phase: 'connecting' };\n}\n\nexport function markConnectionOpen(\n state: SurfaceConnectionState,\n now = Date.now(),\n): SurfaceConnectionState {\n return {\n ...state,\n phase: 'open',\n reconnectAttempt: 0,\n lastActivityAt: now,\n stopped: false,\n };\n}\n\nexport function markConnectionActivity(\n state: SurfaceConnectionState,\n now = Date.now(),\n): SurfaceConnectionState {\n return { ...state, lastActivityAt: now };\n}\n\nexport function stopConnection(state: SurfaceConnectionState): SurfaceConnectionState {\n return { ...state, phase: 'closed', stopped: true };\n}\n\nexport function resetConnection(state: SurfaceConnectionState): SurfaceConnectionState {\n return { ...state, phase: 'idle', reconnectAttempt: 0, stopped: false };\n}\n\nexport function planConnectionReconnect(\n state: SurfaceConnectionState,\n config: SurfaceConnectionConfig,\n now = Date.now(),\n random = Math.random,\n): { state: SurfaceConnectionState; plan: ReconnectPlan | null } {\n if (state.stopped || state.reconnectAttempt >= config.maxReconnectAttempts) {\n return { state: { ...state, phase: 'closed' }, plan: null };\n }\n const attempt = state.reconnectAttempt + 1;\n const base = Math.min(\n config.initialBackoffMs * config.backoffMultiplier ** (attempt - 1),\n config.maxBackoffMs,\n );\n const centeredJitter = (random() * 2 - 1) * config.jitterRatio;\n const delayMs = Math.max(0, Math.round(base * (1 + centeredJitter)));\n return {\n state: { ...state, phase: 'reconnecting', reconnectAttempt: attempt },\n plan: { attempt, delayMs, retryAt: now + delayMs },\n };\n}\n\nexport function isConnectionHeartbeatTimedOut(\n state: SurfaceConnectionState,\n config: SurfaceConnectionConfig,\n now = Date.now(),\n): boolean {\n if (state.phase !== 'open' || state.lastActivityAt === null) return false;\n if (config.heartbeatIntervalMs <= 0) return false;\n return now - state.lastActivityAt > config.heartbeatIntervalMs + config.heartbeatTimeoutMs;\n}\n\nexport function enqueueBounded<T>(\n queue: readonly T[],\n item: T,\n limit: number,\n): { queue: T[]; dropped: T | null } {\n if (limit <= 0) return { queue: [], dropped: item };\n if (queue.length < limit) return { queue: [...queue, item], dropped: null };\n return { queue: [...queue.slice(queue.length - limit + 1), item], dropped: queue[0] ?? null };\n}\n", "export const CLIENT_CONVERSATION_MESSAGE_TYPES = [\n 'abort',\n 'ping',\n 'user_message',\n 'tool.confirm_result',\n 'completion.request',\n 'model.switch',\n 'model.refine',\n 'autonomy.switch',\n 'context.clear',\n 'context.compact',\n 'context.debug',\n 'context.editor.open',\n 'context.editor.validate',\n 'context.editor.apply',\n 'context.mode.create',\n 'context.mode.delete',\n 'context.mode.switch',\n 'context.mode.update',\n 'context.modes.list',\n 'context.repair',\n 'mode.switch',\n 'modes.list',\n 'session.checkpoints',\n 'session.delete',\n 'session.new',\n 'session.rename',\n 'session.resume',\n 'session.rewind',\n 'session.save',\n 'sessions.list',\n 'side_effects.list',\n 'stats.get',\n 'todo.update',\n 'todos.clear',\n 'todos.get',\n 'todos.remove',\n] as const;\n\nexport const CLIENT_COLLABORATION_MESSAGE_TYPES = [\n 'collab.join',\n 'collab.leave',\n 'collab.annotate',\n 'collab.resolve',\n 'collab.request_pause',\n 'collab.resume',\n 'collab.grant_control',\n 'collab.inject_tool',\n 'mailbox.agents',\n 'mailbox.clear',\n 'mailbox.compact',\n 'mailbox.messages',\n 'mailbox.purge',\n 'mailbox.send',\n] as const;\n", "export const CLIENT_KNOWLEDGE_MESSAGE_TYPES = [\n 'brain.ask',\n 'brain.config.get',\n 'brain.config.set',\n 'brain.risk',\n 'brain.status',\n 'chronicle.facet',\n 'chronicle.facets',\n 'chronicle.graph',\n 'chronicle.metrics',\n 'chronicle.query',\n 'chronicle.status',\n 'config.doctor',\n 'design.list',\n 'design.materialize',\n 'design.set',\n 'design.state',\n 'design.swap',\n 'design.tune',\n 'design.use',\n 'design.verify',\n 'memory.list',\n 'memory.sage.backfillRecoverable',\n 'memory.sage.candidateResolve',\n 'memory.sage.delete',\n 'memory.sage.forFile',\n 'memory.sage.get',\n 'memory.sage.graph',\n 'memory.sage.list',\n 'memory.sage.listPage',\n 'memory.sage.recover',\n 'memory.sage.remember',\n 'memory.sage.update',\n] as const;\n\nexport const CLIENT_EXTENSION_MESSAGE_TYPES = [\n 'auth.oauth.cancel',\n 'auth.oauth.code',\n 'auth.oauth.start',\n 'mcp.add',\n 'mcp.disable',\n 'mcp.discover',\n 'mcp.enable',\n 'mcp.list',\n 'mcp.prompt.get',\n 'mcp.prompts',\n 'mcp.remove',\n 'mcp.resource.read',\n 'mcp.resources',\n 'mcp.restart',\n 'mcp.sleep',\n 'mcp.update',\n 'mcp.wake',\n 'prompts.content',\n 'prompts.create',\n 'prompts.favorite',\n 'prompts.list',\n 'prompts.recent',\n 'prompts.search',\n 'prompts.used',\n 'skills.content',\n 'skills.create',\n 'skills.edit',\n 'skills.export',\n 'skills.install',\n 'skills.list',\n 'skills.uninstall',\n 'skills.update',\n] as const;\n", "export const CLIENT_GOAL_MESSAGE_TYPES = [\n 'goal-state.get',\n 'goal.addTask',\n 'goal.assess',\n 'goal.assignTask',\n 'goal.clear',\n 'goal.get',\n 'goal.list',\n 'goal.load',\n 'goal.moveTask',\n 'goal.pause',\n 'goal.resume',\n 'goal.retryTask',\n 'goal.revert',\n 'goal.runTask',\n 'goal.save',\n 'goal.selectPhase',\n 'goal.start',\n 'goal.state',\n 'goal.status',\n 'goal.stop',\n 'goal.taskStatus',\n 'goal.toggleAutonomous',\n 'plan.get',\n 'plan.item.update',\n 'plan.template_use',\n 'task.update',\n 'tasks.get',\n] as const;\n\nexport const CLIENT_SDD_MESSAGE_TYPES = [\n 'sdd.board.cancel_task',\n 'sdd.board.cleanup_worktrees',\n 'sdd.board.delete_task',\n 'sdd.board.destroy',\n 'sdd.board.get',\n 'sdd.board.list',\n 'sdd.board.pause',\n 'sdd.board.reassign',\n 'sdd.board.resume',\n 'sdd.board.retry',\n 'sdd.board.retry_all_failed',\n 'sdd.board.rollback',\n 'sdd.board.set_task_fallbacks',\n 'sdd.board.set_task_model',\n 'sdd.board.set_task_verification',\n 'sdd.board.split_task',\n 'sdd.board.stop',\n 'sdd.run.from_graph',\n 'sdd.run.from_spec',\n 'sdd.run.start',\n 'sdd.spec.approve',\n 'sdd.spec.discard',\n 'sdd.spec.get',\n 'sdd.spec.message',\n 'sdd.spec.start',\n 'specs.get',\n 'specs.list',\n 'specs.taskStatus',\n] as const;\n", "export const CLIENT_WORKSPACE_MESSAGE_TYPES = [\n 'files.list',\n 'files.read',\n 'files.tree',\n 'files.write',\n 'git.changes',\n 'git.diff',\n 'git.info',\n 'projects.add',\n 'projects.list',\n 'projects.select',\n 'working_dir.set',\n 'worktree.cleanup',\n 'worktree.diff',\n 'worktree.merge',\n 'worktree.remove',\n 'worktree.scan',\n 'shell.open',\n 'process.kill',\n 'process.killAll',\n 'process.list',\n 'terminal.close',\n 'terminal.create',\n 'terminal.input',\n 'terminal.resize',\n] as const;\n\nexport const CLIENT_CONFIGURATION_MESSAGE_TYPES = [\n 'codebase.index.server.shutdown',\n 'connections.health',\n 'connections.service_action',\n 'diag.get',\n 'key.add',\n 'key.delete',\n 'key.set_active',\n 'key.update',\n 'prefs.get',\n 'prefs.update',\n 'provider.add',\n 'provider.clear_models',\n 'provider.models',\n 'provider.models.search',\n 'provider.probe',\n 'provider.remove',\n 'provider.status.clear',\n 'provider.status.get',\n 'provider.status.retry',\n 'provider.undo_clear',\n 'provider.update',\n 'providers.list',\n 'providers.saved',\n 'tool.disable',\n 'tool.enable',\n 'tools.list',\n 'webui.shutdown',\n] as const;\n", "export const SERVER_CONVERSATION_MESSAGE_TYPES = [\n 'error',\n 'log',\n 'pong',\n 'side_effects',\n 'agent.status_changed',\n 'agent.timeline.message',\n 'client.status_update',\n 'compaction.failed',\n 'completion.result',\n 'context.compacted',\n 'context.debug',\n 'context.editor.snapshot',\n 'context.editor.validation',\n 'context.editor.applied',\n 'context.mode.changed',\n 'context.modes.list',\n 'context.repaired',\n 'ctx.max_context',\n 'ctx.pct',\n 'delegate.completed',\n 'delegate.started',\n 'iteration.completed',\n 'iteration.limit_reached',\n 'iteration.started',\n 'model.refine_result',\n 'modes.list',\n 'provider.active_blocked',\n 'provider.error',\n 'provider.fallback',\n 'provider.response',\n 'provider.retry',\n 'provider.status_changed',\n 'provider.stream_error',\n 'provider.text_delta',\n 'provider.thinking_delta',\n 'run.result',\n 'session.checkpoints',\n 'session.damaged',\n 'session.end',\n 'session.rewound',\n 'session.start',\n 'session.stats',\n 'sessions.list',\n 'sessions.status_update',\n 'stats.get',\n 'token.cost_estimate_unavailable',\n 'token.threshold',\n 'tool.confirm_needed',\n 'tool.disabled',\n 'tool.enabled',\n 'tool.executed',\n 'tool.loop_detected',\n 'tool.progress',\n 'tool.started',\n 'tools.list',\n 'trust.persisted',\n] as const;\n\nexport const SERVER_COLLABORATION_MESSAGE_TYPES = [\n 'collab.annotation.added',\n 'collab.annotation.resolved',\n 'collab.event',\n 'collab.injection.granted',\n 'collab.participant.joined',\n 'collab.participant.left',\n 'collab.pause.granted',\n 'collab.pause.released',\n 'collab.state',\n 'mailbox.agent_registered',\n 'mailbox.agents',\n 'mailbox.cleared',\n 'mailbox.compacted',\n 'mailbox.event',\n 'mailbox.messages',\n 'mailbox.sent',\n 'mailbox.purged',\n 'mailbox.received',\n 'subagent.budget_extended',\n 'subagent.event',\n] as const;\n", "export const SERVER_KNOWLEDGE_MESSAGE_TYPES = [\n 'brain.answer',\n 'brain.config',\n 'brain.event',\n 'brain.status',\n 'chronicle.error',\n 'chronicle.facet_result',\n 'chronicle.facets_result',\n 'chronicle.graph_result',\n 'chronicle.metrics_result',\n 'chronicle.query_result',\n 'chronicle.status_result',\n 'config.doctor.result',\n 'design.list',\n 'design.materialize',\n 'design.set',\n 'design.state',\n 'design.swap',\n 'design.tune',\n 'design.use',\n 'design.verify',\n 'memory.event',\n 'memory.list',\n 'memory.sage.backfillRecoverable',\n 'memory.sage.candidateResolve',\n 'memory.sage.delete',\n 'memory.sage.forFile',\n 'memory.sage.get',\n 'memory.sage.graph',\n 'memory.sage.list',\n 'memory.sage.listPage',\n 'memory.sage.recover',\n 'memory.sage.remember',\n 'memory.sage.update',\n] as const;\n\nexport const SERVER_EXTENSION_MESSAGE_TYPES = [\n 'mcp.content.error',\n 'mcp.content.selected',\n 'mcp.list',\n 'mcp.operation_result',\n 'mcp.prompts',\n 'mcp.resources',\n 'mcp.server.added',\n 'mcp.server.connected',\n 'mcp.server.disconnected',\n 'mcp.server.discovered',\n 'mcp.server.error',\n 'mcp.server.reconnected',\n 'mcp.server.removed',\n 'mcp.server.sleeping',\n 'mcp.server.updated',\n 'mcp.server.waking',\n 'prompts.content',\n 'prompts.created',\n 'prompts.favorite',\n 'prompts.list',\n 'prompts.recent',\n 'prompts.search',\n 'prompts.used',\n 'skills.content',\n 'skills.created',\n 'skills.edited',\n 'skills.exported',\n 'skills.installed',\n 'skills.list',\n 'skills.uninstalled',\n 'skills.updated',\n] as const;\n", "export const SERVER_GOAL_MESSAGE_TYPES = [\n 'budget.decision',\n 'budget.threshold_reached',\n 'coordinator.stats',\n 'coordinator.status',\n 'eternal.iteration',\n 'fleet.concurrency_update',\n 'goal-state.updated',\n 'goal.assess.result',\n 'goal.list',\n 'goal.paused',\n 'goal.resumed',\n 'goal.saved',\n 'goal.error',\n 'goal.stopped',\n 'goal.failed',\n 'goal.completed',\n 'goal.cleared',\n 'goal.reverted',\n 'goal.progress',\n 'goal.state',\n 'in_flight.ended',\n 'in_flight.started',\n 'plan.updated',\n 'task.completed',\n 'task.failed',\n 'task.pending',\n 'task.started',\n 'tasks.updated',\n 'todos.cleared',\n 'todos.updated',\n] as const;\n\nexport const SERVER_SDD_MESSAGE_TYPES = [\n 'kanban.task.activity',\n 'sdd.board.lifecycle_result',\n 'sdd.board.list',\n 'sdd.board.snapshot',\n 'sdd.run.started',\n 'sdd.spec.agent_text',\n 'sdd.spec.error',\n 'sdd.spec.snapshot',\n 'specs.detail',\n 'specs.list',\n] as const;\n\nexport const SERVER_AUTOMATION_MESSAGE_TYPES = [\n 'consensus.vote_cast',\n 'consensus.vote_initiated',\n 'consensus.vote_resolved',\n 'cron.job_fired',\n 'cron.snapshot',\n 'techstack.job.cancelled',\n 'techstack.job.failed',\n 'techstack.job.progress',\n 'techstack.job.started',\n 'techstack.report.delivered',\n 'techstack.report.ready',\n 'techstack.snapshot.updated',\n 'techstack.workspace.completed',\n] as const;\n", "export const SERVER_WORKSPACE_MESSAGE_TYPES = [\n 'checkpoint.written',\n 'codemap.file_event',\n 'codemap.index_updated',\n 'codemap.tool_executed',\n 'codemap.tool_started',\n 'file.saved',\n 'files.list',\n 'files.read',\n 'files.tree',\n 'files.written',\n 'git.changes',\n 'git.diff',\n 'git.info',\n 'process.list',\n 'projects.added',\n 'projects.list',\n 'projects.selected',\n 'terminal.exit',\n 'terminal.output',\n 'working_dir.changed',\n 'worktree.cleanup_result',\n 'worktree.diff_result',\n 'worktree.event',\n 'worktree.merge_result',\n 'worktree.orphans',\n 'worktree.state',\n] as const;\n\nexport const SERVER_CONFIGURATION_MESSAGE_TYPES = [\n 'auth.oauth.status',\n 'codebase.index.server.shutdown_result',\n 'connections.health_error',\n 'connections.health_result',\n 'connections.service_action_result',\n 'diag.get',\n 'key.operation_result',\n 'model.switch_result',\n 'prefs.updated',\n 'provider.catalog',\n 'provider.models',\n 'provider.models.search_result',\n 'provider.probe',\n 'provider.status.snapshot',\n 'providers.saved',\n] as const;\n", "import {\n CLIENT_COLLABORATION_MESSAGE_TYPES,\n CLIENT_CONVERSATION_MESSAGE_TYPES,\n} from './client-conversation.js';\nimport {\n CLIENT_EXTENSION_MESSAGE_TYPES,\n CLIENT_KNOWLEDGE_MESSAGE_TYPES,\n} from './client-integrations.js';\nimport { CLIENT_GOAL_MESSAGE_TYPES, CLIENT_SDD_MESSAGE_TYPES } from './client-operations.js';\nimport {\n CLIENT_CONFIGURATION_MESSAGE_TYPES,\n CLIENT_WORKSPACE_MESSAGE_TYPES,\n} from './client-workspace.js';\nimport {\n SERVER_COLLABORATION_MESSAGE_TYPES,\n SERVER_CONVERSATION_MESSAGE_TYPES,\n} from './server-conversation.js';\nimport {\n SERVER_EXTENSION_MESSAGE_TYPES,\n SERVER_KNOWLEDGE_MESSAGE_TYPES,\n} from './server-integrations.js';\nimport {\n SERVER_AUTOMATION_MESSAGE_TYPES,\n SERVER_GOAL_MESSAGE_TYPES,\n SERVER_SDD_MESSAGE_TYPES,\n} from './server-operations.js';\nimport {\n SERVER_CONFIGURATION_MESSAGE_TYPES,\n SERVER_WORKSPACE_MESSAGE_TYPES,\n} from './server-workspace.js';\n\nexport const CLIENT_MESSAGE_TYPES = [\n ...CLIENT_CONVERSATION_MESSAGE_TYPES,\n ...CLIENT_COLLABORATION_MESSAGE_TYPES,\n ...CLIENT_WORKSPACE_MESSAGE_TYPES,\n ...CLIENT_CONFIGURATION_MESSAGE_TYPES,\n ...CLIENT_GOAL_MESSAGE_TYPES,\n ...CLIENT_SDD_MESSAGE_TYPES,\n ...CLIENT_KNOWLEDGE_MESSAGE_TYPES,\n ...CLIENT_EXTENSION_MESSAGE_TYPES,\n] as const;\n\nexport const SERVER_MESSAGE_TYPES = [\n ...SERVER_CONVERSATION_MESSAGE_TYPES,\n ...SERVER_COLLABORATION_MESSAGE_TYPES,\n ...SERVER_WORKSPACE_MESSAGE_TYPES,\n ...SERVER_CONFIGURATION_MESSAGE_TYPES,\n ...SERVER_GOAL_MESSAGE_TYPES,\n ...SERVER_SDD_MESSAGE_TYPES,\n ...SERVER_AUTOMATION_MESSAGE_TYPES,\n ...SERVER_KNOWLEDGE_MESSAGE_TYPES,\n ...SERVER_EXTENSION_MESSAGE_TYPES,\n] as const;\n\nexport type ExactClientMessageType = (typeof CLIENT_MESSAGE_TYPES)[number];\nexport type ExactServerMessageType = (typeof SERVER_MESSAGE_TYPES)[number];\n\nconst CLIENT_TYPE_SET: ReadonlySet<string> = new Set(CLIENT_MESSAGE_TYPES);\nconst SERVER_TYPE_SET: ReadonlySet<string> = new Set(SERVER_MESSAGE_TYPES);\n\nexport function isRegisteredMessageType(type: string, direction: 'client' | 'server'): boolean {\n const exact = direction === 'client' ? CLIENT_TYPE_SET : SERVER_TYPE_SET;\n return (\n exact.has(type) ||\n (type.startsWith('kanban.') && type.length > 'kanban.'.length) ||\n (type.startsWith('agent-roster.') && type.length > 'agent-roster.'.length)\n );\n}\n", "import { isRegisteredMessageType } from './registry.js';\nimport type {\n CanonicalClientMessage,\n CanonicalServerMessage,\n ProtocolDecodeIssue,\n ProtocolDecodeResult,\n ProtocolDirection,\n ProtocolEnvelope,\n} from './types.js';\n\nconst FORBIDDEN_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\nconst MAX_PAYLOAD_DEPTH = 32;\n\nfunction inspectValue(value: unknown, path: string, depth: number): ProtocolDecodeIssue | null {\n if (depth > MAX_PAYLOAD_DEPTH) {\n return { code: 'too_deep', message: 'Protocol payload exceeds the nesting limit', path };\n }\n if (value === null || typeof value !== 'object') return null;\n\n for (const key of Object.keys(value)) {\n const childPath = `${path}.${key}`;\n if (FORBIDDEN_KEYS.has(key)) {\n return { code: 'unsafe_key', message: `Unsafe protocol key: ${key}`, path: childPath };\n }\n const issue = inspectValue((value as Record<string, unknown>)[key], childPath, depth + 1);\n if (issue) return issue;\n }\n return null;\n}\n\nexport function decodeProtocolMessage(\n input: unknown,\n direction: 'client',\n): ProtocolDecodeResult<CanonicalClientMessage>;\nexport function decodeProtocolMessage(\n input: unknown,\n direction: 'server',\n): ProtocolDecodeResult<CanonicalServerMessage>;\nexport function decodeProtocolMessage(\n input: unknown,\n direction: ProtocolDirection,\n): ProtocolDecodeResult<ProtocolEnvelope> {\n if (input === null || typeof input !== 'object' || Array.isArray(input)) {\n return {\n ok: false,\n issue: { code: 'invalid_envelope', message: 'Protocol message must be an object' },\n };\n }\n\n const envelope = input as Record<string, unknown>;\n if (typeof envelope['type'] !== 'string' || envelope['type'].length === 0) {\n return {\n ok: false,\n issue: { code: 'invalid_type', message: 'Protocol message type must be a non-empty string' },\n };\n }\n if (!isRegisteredMessageType(envelope['type'], direction)) {\n return {\n ok: false,\n issue: { code: 'unknown_type', message: `Unknown ${direction} message: ${envelope['type']}` },\n };\n }\n if (direction === 'server' && !Object.hasOwn(envelope, 'payload')) {\n return {\n ok: false,\n issue: { code: 'invalid_envelope', message: 'Server protocol messages require a payload' },\n };\n }\n\n const issue = inspectValue(envelope, '$', 0);\n if (issue) return { ok: false, issue };\n return { ok: true, message: input as ProtocolEnvelope };\n}\n\nexport function decodeProtocolFrame(\n frame: string,\n direction: 'client',\n): ProtocolDecodeResult<CanonicalClientMessage>;\nexport function decodeProtocolFrame(\n frame: string,\n direction: 'server',\n): ProtocolDecodeResult<CanonicalServerMessage>;\nexport function decodeProtocolFrame(\n frame: string,\n direction: ProtocolDirection,\n): ProtocolDecodeResult<ProtocolEnvelope> {\n try {\n return decodeProtocolMessage(JSON.parse(frame), direction as 'client');\n } catch {\n return {\n ok: false,\n issue: { code: 'invalid_envelope', message: 'Protocol frame is not valid JSON' },\n };\n }\n}\n", "import type { HqAlertMessage, HqCommandAuditEntry, HqEventEnvelope, HqSnapshot } from '@wrongstack/core/hq';\nimport type { ProtocolEnvelope } from './types.js';\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction text(value: unknown, fallback = ''): string {\n return typeof value === 'string' ? value : fallback;\n}\n\nfunction finite(value: unknown, fallback = 0): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n}\n\n/** When a key is present it must be an array; when absent it is acceptable. */\nfunction optionalArray(value: unknown): boolean {\n return value === undefined || Array.isArray(value);\n}\n\n/** Validate that all required numeric fields of a totals object are finite. */\nfunction isValidHqTotals(totals: Record<string, unknown>): boolean {\n return (\n finite(totals['activeProjects']) === totals['activeProjects'] &&\n finite(totals['activeClients']) === totals['activeClients'] &&\n finite(totals['activeSessions']) === totals['activeSessions'] &&\n finite(totals['activeSubagents']) === totals['activeSubagents'] &&\n finite(totals['unreadMailboxMessages']) === totals['unreadMailboxMessages'] &&\n finite(totals['incompleteMailboxMessages']) === totals['incompleteMailboxMessages'] &&\n finite(totals['totalCostUsd']) === totals['totalCostUsd']\n );\n}\n\nexport interface SessionProjection {\n kind: 'session';\n id: string;\n provider: string;\n model: string;\n projectName: string;\n cwd: string;\n maxContext: number;\n reset: boolean;\n replayMessages: unknown[] | null;\n /** Audit markers replayed alongside the conversation. */\n replayMarkers: unknown[] | null;\n replayUsage: Record<string, unknown> | null;\n}\n\nexport function projectSessionMessage(message: ProtocolEnvelope): SessionProjection | null {\n if (message.type !== 'session.start') return null;\n const payload = record(message.payload);\n if (!payload) return null;\n return {\n kind: 'session',\n id: text(payload['sessionId']),\n provider: text(payload['provider']),\n model: text(payload['model']),\n projectName: text(payload['projectName'], 'Project'),\n cwd: text(payload['cwd']),\n maxContext: finite(payload['maxContext']),\n reset: payload['reset'] === true,\n replayMessages: Array.isArray(payload['replayMessages']) ? payload['replayMessages'] : null,\n replayMarkers: Array.isArray(payload['replayMarkers']) ? payload['replayMarkers'] : null,\n replayUsage: record(payload['replayUsage']),\n };\n}\n\nexport type ChatProjection =\n | { kind: 'thinking-delta'; text: string }\n | { kind: 'text-delta'; text: string; messageId: string }\n | { kind: 'response'; content: unknown }\n | { kind: 'run-result'; status: string; iterations: number; finalText?: string | undefined }\n | { kind: 'error'; message: string };\n\nexport function projectChatMessage(message: ProtocolEnvelope): ChatProjection | null {\n const payload = record(message.payload);\n if (!payload) return null;\n switch (message.type) {\n case 'provider.thinking_delta': {\n const value = text(payload['text']);\n return value ? { kind: 'thinking-delta', text: value } : null;\n }\n case 'provider.text_delta': {\n const value = text(payload['text']);\n return value\n ? { kind: 'text-delta', text: value, messageId: text(payload['messageId']) }\n : null;\n }\n case 'provider.response':\n return { kind: 'response', content: payload['content'] };\n case 'run.result':\n return {\n kind: 'run-result',\n status: text(payload['status']),\n iterations: finite(payload['iterations'], 1),\n ...(typeof payload['finalText'] === 'string' ? { finalText: payload['finalText'] } : {}),\n };\n case 'error':\n return { kind: 'error', message: text(payload['message'], 'Run failed') };\n default:\n return null;\n }\n}\n\nexport type ToolProjection =\n | { kind: 'started'; id: string; name: string; input: unknown; messageId: string }\n | { kind: 'progress'; id: string; name: string; eventType: string; text: string }\n | {\n kind: 'executed';\n id: string;\n name: string;\n ok: boolean;\n output?: string | undefined;\n /**\n * SAGE Memory Injector block (header line first) split off the tool text\n * at the emit site. Clients render it as a memory card \u2014 it must never be\n * concatenated back into `output`.\n */\n sage?: string[] | undefined;\n durationMs: number;\n };\n\nexport function projectToolMessage(message: ProtocolEnvelope): ToolProjection | null {\n const payload = record(message.payload);\n if (!payload) return null;\n if (message.type === 'tool.started') {\n const name = text(payload['name'], 'tool');\n return {\n kind: 'started',\n id: text(payload['id'], name),\n name,\n input: payload['input'],\n messageId: text(payload['messageId']),\n };\n }\n if (message.type === 'tool.progress') {\n const event = record(payload['event']);\n return {\n kind: 'progress',\n id: text(payload['id']),\n name: text(payload['name'], 'tool'),\n eventType: text(event?.['type']),\n text: text(event?.['text']).trim(),\n };\n }\n if (message.type === 'tool.executed') {\n return {\n kind: 'executed',\n id: text(payload['id']),\n name: text(payload['name']),\n ok: payload['ok'] !== false,\n durationMs: finite(payload['durationMs']),\n ...(typeof payload['output'] === 'string' ? { output: payload['output'] } : {}),\n ...(Array.isArray(payload['sage'])\n ? { sage: payload['sage'].filter((line): line is string => typeof line === 'string') }\n : {}),\n };\n }\n return null;\n}\n\nexport type FleetProjection =\n | { kind: 'concurrency'; active: number; maximum: number }\n | { kind: 'client-status'; status: Record<string, unknown> }\n | { kind: 'sessions'; sessions: unknown[] }\n | { kind: 'coordinator'; agents: Array<Record<string, unknown>> };\n\nexport function projectFleetMessage(message: ProtocolEnvelope): FleetProjection | null {\n const payload = record(message.payload);\n if (!payload) return null;\n switch (message.type) {\n case 'fleet.concurrency_update':\n return {\n kind: 'concurrency',\n active: finite(payload['fleetConcurrency']),\n maximum: finite(payload['fleetConcurrencyMax']),\n };\n case 'client.status_update':\n return { kind: 'client-status', status: payload };\n case 'sessions.status_update':\n return {\n kind: 'sessions',\n sessions: Array.isArray(payload['sessions']) ? payload['sessions'] : [],\n };\n case 'coordinator.stats':\n return {\n kind: 'coordinator',\n agents: Array.isArray(payload['subagentStatuses'])\n ? payload['subagentStatuses'].filter(\n (item): item is Record<string, unknown> => record(item) !== null,\n )\n : [],\n };\n default:\n return null;\n }\n}\n\nexport interface HqFleetProjection {\n kind: 'hq-snapshot';\n snapshot: HqSnapshot;\n}\n\n/**\n * Validate the stable outer shape of an HQ fleet snapshot before a browser\n * surface commits it to state. Domain-specific records remain owned by Core;\n * this boundary only rejects truncated or unrelated wire frames.\n */\nexport function projectHqFleetMessage(message: {\n type: string;\n snapshot?: unknown;\n}): HqFleetProjection | null {\n if (message.type !== 'hq.snapshot') return null;\n const snapshot = record(message.snapshot);\n const totals = snapshot ? record(snapshot['totals']) : null;\n if (\n !snapshot ||\n typeof snapshot['generatedAt'] !== 'string' ||\n !Array.isArray(snapshot['clients']) ||\n !Array.isArray(snapshot['projects']) ||\n !Array.isArray(snapshot['sessions']) ||\n !Array.isArray(snapshot['fleets']) ||\n !Array.isArray(snapshot['mailboxes']) ||\n !totals ||\n !isValidHqTotals(totals) ||\n !optionalArray(snapshot['machines']) ||\n !optionalArray(snapshot['liveSessions']) ||\n !optionalArray(snapshot['mcpServers'])\n ) {\n return null;\n }\n return { kind: 'hq-snapshot', snapshot: snapshot as unknown as HqSnapshot };\n}\n\n// \u2500\u2500 HQ sibling projections (event, alert, command_status) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n//\n// These mirrors of projectHqFleetMessage validate the outer envelope shape of\n// hq.event / hq.alert / hq.command_status frames before the browser surface\n// commits them to store state, closing the trust-boundary gap flagged in\n// review \u2014 every branch now passes through a projection, not just hq.snapshot.\n\nexport interface HqEventProjection {\n kind: 'hq-event';\n event: HqEventEnvelope;\n}\n\nexport function projectHqEventMessage(message: {\n type: string;\n event?: unknown;\n}): HqEventProjection | null {\n if (message.type !== 'hq.event') return null;\n const event = record(message.event);\n if (\n !event ||\n typeof event['id'] !== 'string' ||\n typeof event['type'] !== 'string' ||\n typeof event['timestamp'] !== 'string' ||\n typeof event['clientId'] !== 'string' ||\n typeof event['projectId'] !== 'string' ||\n typeof event['seq'] !== 'number'\n ) {\n return null;\n }\n return { kind: 'hq-event', event: event as unknown as HqEventEnvelope };\n}\n\nexport interface HqAlertProjection {\n kind: 'hq-alert';\n alert: HqAlertMessage;\n}\n\nexport function projectHqAlertMessage(message: {\n type: string;\n severity?: unknown;\n message?: unknown;\n timestamp?: unknown;\n}): HqAlertProjection | null {\n if (message.type !== 'hq.alert') return null;\n if (\n typeof message['severity'] !== 'string' ||\n !['info', 'warn', 'error'].includes(message['severity']) ||\n typeof message['message'] !== 'string' ||\n typeof message['timestamp'] !== 'string'\n ) {\n return null;\n }\n return { kind: 'hq-alert', alert: message as unknown as HqAlertMessage };\n}\n\nexport interface HqCommandStatusProjection {\n kind: 'hq-command-status';\n command: HqCommandAuditEntry;\n}\n\nexport function projectHqCommandStatusMessage(message: {\n type: string;\n command?: unknown;\n}): HqCommandStatusProjection | null {\n if (message.type !== 'hq.command_status') return null;\n const command = record(message.command);\n if (\n !command ||\n typeof command['commandId'] !== 'string' ||\n typeof command['type'] !== 'string' ||\n typeof command['clientId'] !== 'string' ||\n typeof command['enqueuedBy'] !== 'string' ||\n typeof command['enqueuedAt'] !== 'string' ||\n typeof command['status'] !== 'string' ||\n !['queued', 'delivered', 'acked'].includes(command['status'])\n ) {\n return null;\n }\n return { kind: 'hq-command-status', command: command as unknown as HqCommandAuditEntry };\n}\n", "/**\n * Replay payload assembly for `session.start`.\n *\n * Two servers build this frame \u2014 the standalone WebUI server and the\n * CLI-hosted bridge \u2014 and they had already drifted (one fell back to the live\n * in-memory conversation, the other did not; only one applied the message cap\n * consistently). Both now call this, so the wire shape has a single definition.\n *\n * `replayMarkers` carries audit markers (compaction, mode switch, skill\n * activation, subagent lifecycle, provider retries, truncation) that a live\n * client renders as they stream in. Without them a reconnect or a session\n * resume silently drops everything except the conversation, so the same\n * session reads differently before and after a reload. Only the *projected*\n * markers cross the wire \u2014 never the raw event stream \u2014 so a 50k-event session\n * still costs a few dozen short strings.\n */\nimport type { Message, SessionEvent, SessionMarker, Usage } from '@wrongstack/core/types';\n// Narrow subpath, not the `types` barrel: this module is the only value import\n// in `src/protocol/`, which the browser bundles pull in wholesale. Going\n// through the barrel reached `types/mode.ts` \u2192 `types/mode-prompts.ts` and\n// dragged `node:fs`/`node:path`/`node:url` into every UI build.\nimport { CHAT_MARKER_SOURCES, projectSessionMarkers } from '@wrongstack/core/types/session-markers';\n\n/**\n * Upper bound on replayed conversation messages. A very long session would\n * otherwise push a multi-megabyte frame on every connect; the full transcript\n * remains on disk and in the session store.\n */\nexport const REPLAY_MESSAGE_CAP = 2_000;\n\nexport interface ReplaySource {\n messages: readonly Message[];\n /** Raw JSONL events, when the caller loaded them. Markers are projected from these. */\n events?: readonly SessionEvent[] | undefined;\n usage?: Usage | undefined;\n}\n\nexport interface ReplayPayloadFields {\n replayMessages?: Message[] | undefined;\n replayMarkers?: SessionMarker[] | undefined;\n replayUsage?: Usage | undefined;\n}\n\n/**\n * Build the replay fields of a `session.start` payload. Fields are omitted\n * rather than sent empty, so an existing client's \"did the server send a\n * replay?\" checks keep working unchanged.\n */\nexport function buildReplayPayload(source: ReplaySource): ReplayPayloadFields {\n const out: ReplayPayloadFields = {};\n\n const messages = source.messages;\n if (messages.length > 0) {\n out.replayMessages =\n messages.length > REPLAY_MESSAGE_CAP\n ? messages.slice(-REPLAY_MESSAGE_CAP)\n : [...messages];\n }\n\n if (source.events && source.events.length > 0) {\n const markers = projectSessionMarkers(source.events, CHAT_MARKER_SOURCES);\n if (markers.length > 0) out.replayMarkers = markers;\n }\n\n const usage = source.usage;\n if (\n usage &&\n usage.input + usage.output + (usage.cacheRead ?? 0) + (usage.cacheWrite ?? 0) > 0\n ) {\n out.replayUsage = {\n input: usage.input,\n output: usage.output,\n cacheRead: usage.cacheRead ?? 0,\n cacheWrite: usage.cacheWrite ?? 0,\n };\n }\n\n return out;\n}\n", "export const SURFACE_PROTOCOL_VERSION = 1 as const;\nexport const SURFACE_PROTOCOL_MIN_VERSION = 1 as const;\n\nexport const SURFACE_PROTOCOL_CAPABILITIES = [\n 'protocol.directional-decoder',\n 'protocol.recursive-key-safety',\n 'chronicle.query',\n 'chronicle.facet',\n 'chronicle.facets',\n 'chronicle.graph',\n 'chronicle.metrics',\n 'chronicle.status',\n 'connections.health',\n /** Interview resume/discard + lastAgentText/lastRunId continuity. */\n 'sdd.interview.continuity',\n /** Launch multi-agent runs from a graph id or resolved spec id. */\n 'sdd.run.from_graph',\n] as const;\n\nexport type SurfaceProtocolCapability = (typeof SURFACE_PROTOCOL_CAPABILITIES)[number];\n\nexport interface ProtocolAdvertisement {\n protocolVersion?: number | undefined;\n protocolCapabilities?: readonly string[] | undefined;\n}\n\nexport interface ProtocolNegotiation {\n compatible: boolean;\n legacyPeer: boolean;\n version: number;\n capabilities: SurfaceProtocolCapability[];\n}\n\nexport function protocolAdvertisement(): {\n protocolVersion: typeof SURFACE_PROTOCOL_VERSION;\n protocolCapabilities: SurfaceProtocolCapability[];\n} {\n return {\n protocolVersion: SURFACE_PROTOCOL_VERSION,\n protocolCapabilities: [...SURFACE_PROTOCOL_CAPABILITIES],\n };\n}\n\nexport function negotiateProtocol(peer: ProtocolAdvertisement): ProtocolNegotiation {\n const peerVersion = peer.protocolVersion;\n const legacyPeer = peerVersion === undefined;\n const version = legacyPeer\n ? SURFACE_PROTOCOL_VERSION\n : Math.min(peerVersion, SURFACE_PROTOCOL_VERSION);\n const compatible =\n legacyPeer || (Number.isInteger(peerVersion) && peerVersion >= SURFACE_PROTOCOL_MIN_VERSION);\n const advertised = new Set(peer.protocolCapabilities ?? []);\n return {\n compatible,\n legacyPeer,\n version,\n capabilities: SURFACE_PROTOCOL_CAPABILITIES.filter((item) => advertised.has(item)),\n };\n}\n"],
5
+ "mappings": "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A,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACpEO,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,2BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC3DO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,qCAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACvDO,IAAM,oCAAoC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,qCAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AChFO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACpEO,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,2BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,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",
6
6
  "names": []
7
7
  }
@@ -53,6 +53,12 @@ export type ToolProjection = {
53
53
  name: string;
54
54
  ok: boolean;
55
55
  output?: string | undefined;
56
+ /**
57
+ * SAGE Memory Injector block (header line first) split off the tool text
58
+ * at the emit site. Clients render it as a memory card — it must never be
59
+ * concatenated back into `output`.
60
+ */
61
+ sage?: string[] | undefined;
56
62
  durationMs: number;
57
63
  };
58
64
  export declare function projectToolMessage(message: ProtocolEnvelope): ToolProjection | null;
@@ -1 +1 @@
1
- {"version":3,"file":"projections.d.ts","sourceRoot":"","sources":["../../src/protocol/projections.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projections.d.ts","sourceRoot":"","sources":["../../src/protocol/projections.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- export declare const CLIENT_MESSAGE_TYPES: readonly ["abort", "ping", "user_message", "tool.confirm_result", "completion.request", "model.switch", "model.refine", "autonomy.switch", "context.clear", "context.compact", "context.debug", "context.editor.open", "context.editor.validate", "context.editor.apply", "context.mode.create", "context.mode.delete", "context.mode.switch", "context.mode.update", "context.modes.list", "context.repair", "mode.switch", "modes.list", "session.checkpoints", "session.delete", "session.new", "session.rename", "session.resume", "session.rewind", "session.save", "sessions.list", "side_effects.list", "stats.get", "todo.update", "todos.clear", "todos.get", "todos.remove", "collab.join", "collab.leave", "collab.annotate", "collab.resolve", "collab.request_pause", "collab.resume", "collab.grant_control", "collab.inject_tool", "mailbox.agents", "mailbox.clear", "mailbox.compact", "mailbox.messages", "mailbox.purge", "mailbox.send", "files.list", "files.read", "files.tree", "files.write", "git.changes", "git.diff", "git.info", "projects.add", "projects.list", "projects.select", "working_dir.set", "worktree.cleanup", "worktree.diff", "worktree.merge", "worktree.remove", "worktree.scan", "shell.open", "process.kill", "process.killAll", "process.list", "terminal.close", "terminal.create", "terminal.input", "terminal.resize", "codebase.index.server.shutdown", "connections.health", "diag.get", "key.add", "key.delete", "key.set_active", "key.update", "prefs.get", "prefs.update", "provider.add", "provider.clear_models", "provider.models", "provider.models.search", "provider.probe", "provider.remove", "provider.status.clear", "provider.status.get", "provider.status.retry", "provider.undo_clear", "provider.update", "providers.list", "providers.saved", "tool.disable", "tool.enable", "tools.list", "webui.shutdown", "goal-state.get", "goal.addTask", "goal.assess", "goal.assignTask", "goal.clear", "goal.get", "goal.list", "goal.load", "goal.moveTask", "goal.pause", "goal.resume", "goal.retryTask", "goal.revert", "goal.runTask", "goal.save", "goal.selectPhase", "goal.start", "goal.state", "goal.status", "goal.stop", "goal.taskStatus", "goal.toggleAutonomous", "plan.get", "plan.item.update", "plan.template_use", "task.update", "tasks.get", "sdd.board.cancel_task", "sdd.board.cleanup_worktrees", "sdd.board.delete_task", "sdd.board.destroy", "sdd.board.get", "sdd.board.list", "sdd.board.pause", "sdd.board.reassign", "sdd.board.resume", "sdd.board.retry", "sdd.board.retry_all_failed", "sdd.board.rollback", "sdd.board.set_task_fallbacks", "sdd.board.set_task_model", "sdd.board.set_task_verification", "sdd.board.split_task", "sdd.board.stop", "sdd.run.from_graph", "sdd.run.from_spec", "sdd.run.start", "sdd.spec.approve", "sdd.spec.discard", "sdd.spec.get", "sdd.spec.message", "sdd.spec.start", "specs.get", "specs.list", "specs.taskStatus", "brain.ask", "brain.config.get", "brain.config.set", "brain.risk", "brain.status", "chronicle.facet", "chronicle.facets", "chronicle.graph", "chronicle.metrics", "chronicle.query", "chronicle.status", "config.doctor", "design.list", "design.materialize", "design.set", "design.state", "design.swap", "design.tune", "design.use", "design.verify", "memory.list", "memory.sage.backfillRecoverable", "memory.sage.candidateResolve", "memory.sage.delete", "memory.sage.forFile", "memory.sage.get", "memory.sage.graph", "memory.sage.list", "memory.sage.listPage", "memory.sage.recover", "memory.sage.remember", "memory.sage.update", "auth.oauth.cancel", "auth.oauth.code", "auth.oauth.start", "mcp.add", "mcp.disable", "mcp.discover", "mcp.enable", "mcp.list", "mcp.prompt.get", "mcp.prompts", "mcp.remove", "mcp.resource.read", "mcp.resources", "mcp.restart", "mcp.sleep", "mcp.update", "mcp.wake", "prompts.content", "prompts.create", "prompts.favorite", "prompts.list", "prompts.recent", "prompts.search", "prompts.used", "skills.content", "skills.create", "skills.edit", "skills.export", "skills.install", "skills.list", "skills.uninstall", "skills.update"];
2
- export declare const SERVER_MESSAGE_TYPES: readonly ["error", "log", "pong", "side_effects", "agent.status_changed", "agent.timeline.message", "client.status_update", "compaction.failed", "completion.result", "context.compacted", "context.debug", "context.editor.snapshot", "context.editor.validation", "context.editor.applied", "context.mode.changed", "context.modes.list", "context.repaired", "ctx.max_context", "ctx.pct", "delegate.completed", "delegate.started", "iteration.completed", "iteration.limit_reached", "iteration.started", "model.refine_result", "modes.list", "provider.active_blocked", "provider.error", "provider.fallback", "provider.response", "provider.retry", "provider.status_changed", "provider.stream_error", "provider.text_delta", "provider.thinking_delta", "run.result", "session.checkpoints", "session.damaged", "session.end", "session.rewound", "session.start", "session.stats", "sessions.list", "sessions.status_update", "stats.get", "token.cost_estimate_unavailable", "token.threshold", "tool.confirm_needed", "tool.disabled", "tool.enabled", "tool.executed", "tool.loop_detected", "tool.progress", "tool.started", "tools.list", "trust.persisted", "collab.annotation.added", "collab.annotation.resolved", "collab.event", "collab.injection.granted", "collab.participant.joined", "collab.participant.left", "collab.pause.granted", "collab.pause.released", "collab.state", "mailbox.agent_registered", "mailbox.agents", "mailbox.cleared", "mailbox.compacted", "mailbox.event", "mailbox.messages", "mailbox.sent", "mailbox.purged", "mailbox.received", "subagent.budget_extended", "subagent.event", "checkpoint.written", "codemap.file_event", "codemap.index_updated", "codemap.tool_executed", "codemap.tool_started", "file.saved", "files.list", "files.read", "files.tree", "files.written", "git.changes", "git.diff", "git.info", "process.list", "projects.added", "projects.list", "projects.selected", "terminal.exit", "terminal.output", "working_dir.changed", "worktree.cleanup_result", "worktree.diff_result", "worktree.event", "worktree.merge_result", "worktree.orphans", "worktree.state", "auth.oauth.status", "codebase.index.server.shutdown_result", "connections.health_error", "connections.health_result", "diag.get", "key.operation_result", "model.switch_result", "prefs.updated", "provider.catalog", "provider.models", "provider.models.search_result", "provider.probe", "provider.status.snapshot", "providers.saved", "budget.decision", "budget.threshold_reached", "coordinator.stats", "coordinator.status", "eternal.iteration", "fleet.concurrency_update", "goal-state.updated", "goal.assess.result", "goal.list", "goal.paused", "goal.resumed", "goal.saved", "goal.error", "goal.stopped", "goal.failed", "goal.completed", "goal.cleared", "goal.reverted", "goal.progress", "goal.state", "in_flight.ended", "in_flight.started", "plan.updated", "task.completed", "task.failed", "task.pending", "task.started", "tasks.updated", "todos.cleared", "todos.updated", "kanban.task.activity", "sdd.board.lifecycle_result", "sdd.board.list", "sdd.board.snapshot", "sdd.run.started", "sdd.spec.agent_text", "sdd.spec.error", "sdd.spec.snapshot", "specs.detail", "specs.list", "consensus.vote_cast", "consensus.vote_initiated", "consensus.vote_resolved", "cron.job_fired", "cron.snapshot", "techstack.job.cancelled", "techstack.job.failed", "techstack.job.progress", "techstack.job.started", "techstack.report.delivered", "techstack.report.ready", "techstack.snapshot.updated", "techstack.workspace.completed", "brain.answer", "brain.config", "brain.event", "brain.status", "chronicle.error", "chronicle.facet_result", "chronicle.facets_result", "chronicle.graph_result", "chronicle.metrics_result", "chronicle.query_result", "chronicle.status_result", "config.doctor.result", "design.list", "design.materialize", "design.set", "design.state", "design.swap", "design.tune", "design.use", "design.verify", "memory.event", "memory.list", "memory.sage.backfillRecoverable", "memory.sage.candidateResolve", "memory.sage.delete", "memory.sage.forFile", "memory.sage.get", "memory.sage.graph", "memory.sage.list", "memory.sage.listPage", "memory.sage.recover", "memory.sage.remember", "memory.sage.update", "mcp.content.error", "mcp.content.selected", "mcp.list", "mcp.operation_result", "mcp.prompts", "mcp.resources", "mcp.server.added", "mcp.server.connected", "mcp.server.disconnected", "mcp.server.discovered", "mcp.server.error", "mcp.server.reconnected", "mcp.server.removed", "mcp.server.sleeping", "mcp.server.updated", "mcp.server.waking", "prompts.content", "prompts.created", "prompts.favorite", "prompts.list", "prompts.recent", "prompts.search", "prompts.used", "skills.content", "skills.created", "skills.edited", "skills.exported", "skills.installed", "skills.list", "skills.uninstalled", "skills.updated"];
1
+ export declare const CLIENT_MESSAGE_TYPES: readonly ["abort", "ping", "user_message", "tool.confirm_result", "completion.request", "model.switch", "model.refine", "autonomy.switch", "context.clear", "context.compact", "context.debug", "context.editor.open", "context.editor.validate", "context.editor.apply", "context.mode.create", "context.mode.delete", "context.mode.switch", "context.mode.update", "context.modes.list", "context.repair", "mode.switch", "modes.list", "session.checkpoints", "session.delete", "session.new", "session.rename", "session.resume", "session.rewind", "session.save", "sessions.list", "side_effects.list", "stats.get", "todo.update", "todos.clear", "todos.get", "todos.remove", "collab.join", "collab.leave", "collab.annotate", "collab.resolve", "collab.request_pause", "collab.resume", "collab.grant_control", "collab.inject_tool", "mailbox.agents", "mailbox.clear", "mailbox.compact", "mailbox.messages", "mailbox.purge", "mailbox.send", "files.list", "files.read", "files.tree", "files.write", "git.changes", "git.diff", "git.info", "projects.add", "projects.list", "projects.select", "working_dir.set", "worktree.cleanup", "worktree.diff", "worktree.merge", "worktree.remove", "worktree.scan", "shell.open", "process.kill", "process.killAll", "process.list", "terminal.close", "terminal.create", "terminal.input", "terminal.resize", "codebase.index.server.shutdown", "connections.health", "connections.service_action", "diag.get", "key.add", "key.delete", "key.set_active", "key.update", "prefs.get", "prefs.update", "provider.add", "provider.clear_models", "provider.models", "provider.models.search", "provider.probe", "provider.remove", "provider.status.clear", "provider.status.get", "provider.status.retry", "provider.undo_clear", "provider.update", "providers.list", "providers.saved", "tool.disable", "tool.enable", "tools.list", "webui.shutdown", "goal-state.get", "goal.addTask", "goal.assess", "goal.assignTask", "goal.clear", "goal.get", "goal.list", "goal.load", "goal.moveTask", "goal.pause", "goal.resume", "goal.retryTask", "goal.revert", "goal.runTask", "goal.save", "goal.selectPhase", "goal.start", "goal.state", "goal.status", "goal.stop", "goal.taskStatus", "goal.toggleAutonomous", "plan.get", "plan.item.update", "plan.template_use", "task.update", "tasks.get", "sdd.board.cancel_task", "sdd.board.cleanup_worktrees", "sdd.board.delete_task", "sdd.board.destroy", "sdd.board.get", "sdd.board.list", "sdd.board.pause", "sdd.board.reassign", "sdd.board.resume", "sdd.board.retry", "sdd.board.retry_all_failed", "sdd.board.rollback", "sdd.board.set_task_fallbacks", "sdd.board.set_task_model", "sdd.board.set_task_verification", "sdd.board.split_task", "sdd.board.stop", "sdd.run.from_graph", "sdd.run.from_spec", "sdd.run.start", "sdd.spec.approve", "sdd.spec.discard", "sdd.spec.get", "sdd.spec.message", "sdd.spec.start", "specs.get", "specs.list", "specs.taskStatus", "brain.ask", "brain.config.get", "brain.config.set", "brain.risk", "brain.status", "chronicle.facet", "chronicle.facets", "chronicle.graph", "chronicle.metrics", "chronicle.query", "chronicle.status", "config.doctor", "design.list", "design.materialize", "design.set", "design.state", "design.swap", "design.tune", "design.use", "design.verify", "memory.list", "memory.sage.backfillRecoverable", "memory.sage.candidateResolve", "memory.sage.delete", "memory.sage.forFile", "memory.sage.get", "memory.sage.graph", "memory.sage.list", "memory.sage.listPage", "memory.sage.recover", "memory.sage.remember", "memory.sage.update", "auth.oauth.cancel", "auth.oauth.code", "auth.oauth.start", "mcp.add", "mcp.disable", "mcp.discover", "mcp.enable", "mcp.list", "mcp.prompt.get", "mcp.prompts", "mcp.remove", "mcp.resource.read", "mcp.resources", "mcp.restart", "mcp.sleep", "mcp.update", "mcp.wake", "prompts.content", "prompts.create", "prompts.favorite", "prompts.list", "prompts.recent", "prompts.search", "prompts.used", "skills.content", "skills.create", "skills.edit", "skills.export", "skills.install", "skills.list", "skills.uninstall", "skills.update"];
2
+ export declare const SERVER_MESSAGE_TYPES: readonly ["error", "log", "pong", "side_effects", "agent.status_changed", "agent.timeline.message", "client.status_update", "compaction.failed", "completion.result", "context.compacted", "context.debug", "context.editor.snapshot", "context.editor.validation", "context.editor.applied", "context.mode.changed", "context.modes.list", "context.repaired", "ctx.max_context", "ctx.pct", "delegate.completed", "delegate.started", "iteration.completed", "iteration.limit_reached", "iteration.started", "model.refine_result", "modes.list", "provider.active_blocked", "provider.error", "provider.fallback", "provider.response", "provider.retry", "provider.status_changed", "provider.stream_error", "provider.text_delta", "provider.thinking_delta", "run.result", "session.checkpoints", "session.damaged", "session.end", "session.rewound", "session.start", "session.stats", "sessions.list", "sessions.status_update", "stats.get", "token.cost_estimate_unavailable", "token.threshold", "tool.confirm_needed", "tool.disabled", "tool.enabled", "tool.executed", "tool.loop_detected", "tool.progress", "tool.started", "tools.list", "trust.persisted", "collab.annotation.added", "collab.annotation.resolved", "collab.event", "collab.injection.granted", "collab.participant.joined", "collab.participant.left", "collab.pause.granted", "collab.pause.released", "collab.state", "mailbox.agent_registered", "mailbox.agents", "mailbox.cleared", "mailbox.compacted", "mailbox.event", "mailbox.messages", "mailbox.sent", "mailbox.purged", "mailbox.received", "subagent.budget_extended", "subagent.event", "checkpoint.written", "codemap.file_event", "codemap.index_updated", "codemap.tool_executed", "codemap.tool_started", "file.saved", "files.list", "files.read", "files.tree", "files.written", "git.changes", "git.diff", "git.info", "process.list", "projects.added", "projects.list", "projects.selected", "terminal.exit", "terminal.output", "working_dir.changed", "worktree.cleanup_result", "worktree.diff_result", "worktree.event", "worktree.merge_result", "worktree.orphans", "worktree.state", "auth.oauth.status", "codebase.index.server.shutdown_result", "connections.health_error", "connections.health_result", "connections.service_action_result", "diag.get", "key.operation_result", "model.switch_result", "prefs.updated", "provider.catalog", "provider.models", "provider.models.search_result", "provider.probe", "provider.status.snapshot", "providers.saved", "budget.decision", "budget.threshold_reached", "coordinator.stats", "coordinator.status", "eternal.iteration", "fleet.concurrency_update", "goal-state.updated", "goal.assess.result", "goal.list", "goal.paused", "goal.resumed", "goal.saved", "goal.error", "goal.stopped", "goal.failed", "goal.completed", "goal.cleared", "goal.reverted", "goal.progress", "goal.state", "in_flight.ended", "in_flight.started", "plan.updated", "task.completed", "task.failed", "task.pending", "task.started", "tasks.updated", "todos.cleared", "todos.updated", "kanban.task.activity", "sdd.board.lifecycle_result", "sdd.board.list", "sdd.board.snapshot", "sdd.run.started", "sdd.spec.agent_text", "sdd.spec.error", "sdd.spec.snapshot", "specs.detail", "specs.list", "consensus.vote_cast", "consensus.vote_initiated", "consensus.vote_resolved", "cron.job_fired", "cron.snapshot", "techstack.job.cancelled", "techstack.job.failed", "techstack.job.progress", "techstack.job.started", "techstack.report.delivered", "techstack.report.ready", "techstack.snapshot.updated", "techstack.workspace.completed", "brain.answer", "brain.config", "brain.event", "brain.status", "chronicle.error", "chronicle.facet_result", "chronicle.facets_result", "chronicle.graph_result", "chronicle.metrics_result", "chronicle.query_result", "chronicle.status_result", "config.doctor.result", "design.list", "design.materialize", "design.set", "design.state", "design.swap", "design.tune", "design.use", "design.verify", "memory.event", "memory.list", "memory.sage.backfillRecoverable", "memory.sage.candidateResolve", "memory.sage.delete", "memory.sage.forFile", "memory.sage.get", "memory.sage.graph", "memory.sage.list", "memory.sage.listPage", "memory.sage.recover", "memory.sage.remember", "memory.sage.update", "mcp.content.error", "mcp.content.selected", "mcp.list", "mcp.operation_result", "mcp.prompts", "mcp.resources", "mcp.server.added", "mcp.server.connected", "mcp.server.disconnected", "mcp.server.discovered", "mcp.server.error", "mcp.server.reconnected", "mcp.server.removed", "mcp.server.sleeping", "mcp.server.updated", "mcp.server.waking", "prompts.content", "prompts.created", "prompts.favorite", "prompts.list", "prompts.recent", "prompts.search", "prompts.used", "skills.content", "skills.created", "skills.edited", "skills.exported", "skills.installed", "skills.list", "skills.uninstalled", "skills.updated"];
3
3
  export type ExactClientMessageType = (typeof CLIENT_MESSAGE_TYPES)[number];
4
4
  export type ExactServerMessageType = (typeof SERVER_MESSAGE_TYPES)[number];
5
5
  export declare function isRegisteredMessageType(type: string, direction: 'client' | 'server'): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/protocol/registry.ts"],"names":[],"mappings":"AA+BA,eAAO,MAAM,oBAAoB,s6HASvB,CAAC;AAEX,eAAO,MAAM,oBAAoB,srJAUvB,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3E,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAK3E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAO7F"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/protocol/registry.ts"],"names":[],"mappings":"AA+BA,eAAO,MAAM,oBAAoB,o8HASvB,CAAC;AAEX,eAAO,MAAM,oBAAoB,2tJAUvB,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3E,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAK3E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAO7F"}
@@ -1,3 +1,3 @@
1
1
  export declare const SERVER_WORKSPACE_MESSAGE_TYPES: readonly ['checkpoint.written', 'codemap.file_event', 'codemap.index_updated', 'codemap.tool_executed', 'codemap.tool_started', 'file.saved', 'files.list', 'files.read', 'files.tree', 'files.written', 'git.changes', 'git.diff', 'git.info', 'process.list', 'projects.added', 'projects.list', 'projects.selected', 'terminal.exit', 'terminal.output', 'working_dir.changed', 'worktree.cleanup_result', 'worktree.diff_result', 'worktree.event', 'worktree.merge_result', 'worktree.orphans', 'worktree.state'];
2
- export declare const SERVER_CONFIGURATION_MESSAGE_TYPES: readonly ['auth.oauth.status', 'codebase.index.server.shutdown_result', 'connections.health_error', 'connections.health_result', 'diag.get', 'key.operation_result', 'model.switch_result', 'prefs.updated', 'provider.catalog', 'provider.models', 'provider.models.search_result', 'provider.probe', 'provider.status.snapshot', 'providers.saved'];
2
+ export declare const SERVER_CONFIGURATION_MESSAGE_TYPES: readonly ['auth.oauth.status', 'codebase.index.server.shutdown_result', 'connections.health_error', 'connections.health_result', 'connections.service_action_result', 'diag.get', 'key.operation_result', 'model.switch_result', 'prefs.updated', 'provider.catalog', 'provider.models', 'provider.models.search_result', 'provider.probe', 'provider.status.snapshot', 'providers.saved'];
3
3
  //# sourceMappingURL=server-workspace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-workspace.d.ts","sourceRoot":"","sources":["../../src/protocol/server-workspace.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,YACzC,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,EACb,UAAU,EACV,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,CACR,CAAC;AAEX,eAAO,MAAM,kCAAkC,YAC7C,mBAAmB,EACnB,uCAAuC,EACvC,0BAA0B,EAC1B,2BAA2B,EAC3B,UAAU,EACV,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,+BAA+B,EAC/B,gBAAgB,EAChB,0BAA0B,EAC1B,iBAAiB,CACT,CAAC"}
1
+ {"version":3,"file":"server-workspace.d.ts","sourceRoot":"","sources":["../../src/protocol/server-workspace.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,YACzC,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,EACb,UAAU,EACV,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,CACR,CAAC;AAEX,eAAO,MAAM,kCAAkC,YAC7C,mBAAmB,EACnB,uCAAuC,EACvC,0BAA0B,EAC1B,2BAA2B,EAC3B,mCAAmC,EACnC,UAAU,EACV,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,+BAA+B,EAC/B,gBAAgB,EAChB,0BAA0B,EAC1B,iBAAiB,CACT,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"backend-services.d.ts","sourceRoot":"","sources":["../../src/server/backend-services.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backend-services.d.ts","sourceRoot":"","sources":["../../src/server/backend-services.ts"],"names":[],"mappings":"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"}
@@ -43,4 +43,12 @@ export declare function collectConnectionsHealth(options: {
43
43
  indexDir?: string | undefined;
44
44
  backend: ConnectionsHealthReport['backend'];
45
45
  }): Promise<ConnectionsHealthReport>;
46
+ export interface ServiceActionResult {
47
+ serviceId: ConnectionHealthService['id'] | null;
48
+ action: 'shutdown' | 'restart';
49
+ success: boolean;
50
+ message: string;
51
+ }
52
+ /** Handle WS message type `connections.service_action` — reset or kill a service. */
53
+ export declare function handleConnectionsServiceAction(ws: WebSocket, message: WSClientMessage, context: ConnectionsHealthContext): Promise<boolean>;
46
54
  //# sourceMappingURL=connections-health-route.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connections-health-route.d.ts","sourceRoot":"","sources":["../../src/server/connections-health-route.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnE,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,CAAC;AAElG,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,OAAO,GAAG,WAAW,GAAG,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,sBAAsB,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;IAC7E,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IAC1C,OAAO,EAAE,YAAY,GAAG,cAAc,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,uBAAuB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,IAAI,MAAM,CAAC;IACzB,WAAW,IAAI,MAAM,GAAG,SAAS,CAAC;IAClC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IACpD,OAAO,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,uBAAuB,CAAC,CAAC,GAAG,SAAS,CAAC;CAChE;AAED,4EAA4E;AAC5E,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,wBAAwB,EACjC,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;CAC7C,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAsBnC"}
1
+ {"version":3,"file":"connections-health-route.d.ts","sourceRoot":"","sources":["../../src/server/connections-health-route.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnE,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,CAAC;AAElG,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,OAAO,GAAG,WAAW,GAAG,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,sBAAsB,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;IAC7E,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IAC1C,OAAO,EAAE,YAAY,GAAG,cAAc,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,uBAAuB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,IAAI,MAAM,CAAC;IACzB,WAAW,IAAI,MAAM,GAAG,SAAS,CAAC;IAClC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IACpD,OAAO,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,uBAAuB,CAAC,CAAC,GAAG,SAAS,CAAC;CAChE;AAED,4EAA4E;AAC5E,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,wBAAwB,EACjC,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;CAC7C,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAsBnC;AAgVD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,uBAAuB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAChD,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qFAAqF;AACrF,wBAAsB,8BAA8B,CAClD,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,OAAO,CAAC,CAwElB"}
@@ -1,4 +1,5 @@
1
1
  import type { Agent } from '@wrongstack/core/agent';
2
+ import { type EventBus } from '@wrongstack/core/kernel';
2
3
  import type { Config, MemoryPort, ModelsRegistry, ModeStore, ProviderConfig, SessionStore, SessionWriter } from '@wrongstack/core/types';
3
4
  import type { WebSocket } from 'ws';
4
5
  import type { ConversationRouteHandlers } from './conversation-routes.js';
@@ -77,10 +78,12 @@ export declare function createEmbeddedConversationRoutes(ctx: EmbeddedConversati
77
78
  export interface EmbeddedSessionOptions {
78
79
  projectRoot?: string | undefined;
79
80
  agent: Agent;
81
+ events?: EventBus | undefined;
80
82
  session: SessionWriter;
81
83
  sessionStore?: SessionStore | undefined;
82
84
  sessionsDir?: string | undefined;
83
85
  claimSession?: ((sessionId: string, target?: SessionIdentityTarget) => Promise<() => Promise<void>>) | undefined;
86
+ onBeforeSessionTodosReplaced?: ((sessionId: string, sessionsDir: string) => void | Promise<void>) | undefined;
84
87
  onSessionSwapped?: ((sessionId: string, target?: SessionIdentityTarget) => void | Promise<void>) | undefined;
85
88
  }
86
89
  export interface EmbeddedSessionContext extends EmbeddedHostTransport {
@@ -1 +1 @@
1
- {"version":3,"file":"embedded-host-adapters.d.ts","sourceRoot":"","sources":["../../src/server/embedded-host-adapters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"embedded-host-adapters.d.ts","sourceRoot":"","sources":["../../src/server/embedded-host-adapters.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"embedded-message-router.d.ts","sourceRoot":"","sources":["../../src/server/embedded-message-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"embedded-message-router.d.ts","sourceRoot":"","sources":["../../src/server/embedded-message-router.ts"],"names":[],"mappings":"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"}