@wrongstack/webui-server 0.295.0 → 0.296.2
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.
- package/dist/index.js +16915 -13874
- package/dist/index.js.map +4 -4
- package/dist/protocol/client-conversation.d.ts +1 -1
- package/dist/protocol/client-conversation.d.ts.map +1 -1
- package/dist/protocol/client-integrations.d.ts +1 -1
- package/dist/protocol/client-integrations.d.ts.map +1 -1
- package/dist/protocol/client-operations.d.ts +2 -2
- package/dist/protocol/client-operations.d.ts.map +1 -1
- package/dist/protocol/client-workspace.d.ts +1 -1
- package/dist/protocol/client-workspace.d.ts.map +1 -1
- package/dist/protocol/index.d.ts +1 -0
- package/dist/protocol/index.d.ts.map +1 -1
- package/dist/protocol/index.js +64 -1
- package/dist/protocol/index.js.map +3 -3
- package/dist/protocol/projections.d.ts +2 -0
- package/dist/protocol/projections.d.ts.map +1 -1
- package/dist/protocol/registry.d.ts +2 -2
- package/dist/protocol/registry.d.ts.map +1 -1
- package/dist/protocol/replay-payload.d.ts +41 -0
- package/dist/protocol/replay-payload.d.ts.map +1 -0
- package/dist/protocol/server-conversation.d.ts +1 -1
- package/dist/protocol/server-conversation.d.ts.map +1 -1
- package/dist/protocol/server-integrations.d.ts +1 -1
- package/dist/protocol/server-integrations.d.ts.map +1 -1
- package/dist/protocol/server-operations.d.ts +1 -1
- package/dist/protocol/server-operations.d.ts.map +1 -1
- package/dist/protocol/server-workspace.d.ts +2 -2
- package/dist/protocol/server-workspace.d.ts.map +1 -1
- package/dist/protocol/version.d.ts +5 -1
- package/dist/protocol/version.d.ts.map +1 -1
- package/dist/server/agent-roster-handlers.d.ts +36 -1
- package/dist/server/agent-roster-handlers.d.ts.map +1 -1
- package/dist/server/backend-services.d.ts.map +1 -1
- package/dist/server/brain-handlers.d.ts.map +1 -1
- package/dist/server/chronicle-routes.d.ts +2 -3
- package/dist/server/chronicle-routes.d.ts.map +1 -1
- package/dist/server/client-presence.d.ts +2 -2
- package/dist/server/client-presence.d.ts.map +1 -1
- package/dist/server/codebase-index-server-control.d.ts +15 -0
- package/dist/server/codebase-index-server-control.d.ts.map +1 -0
- package/dist/server/codebase-indexing.d.ts.map +1 -1
- package/dist/server/codemap-cache.d.ts +14 -0
- package/dist/server/codemap-cache.d.ts.map +1 -0
- package/dist/server/codemap-handlers.d.ts +5 -6
- package/dist/server/codemap-handlers.d.ts.map +1 -1
- package/dist/server/collaboration-ws-handler.d.ts.map +1 -1
- package/dist/server/connection-handler.d.ts +9 -1
- package/dist/server/connection-handler.d.ts.map +1 -1
- package/dist/server/connection-lifecycle.d.ts +76 -0
- package/dist/server/connection-lifecycle.d.ts.map +1 -1
- package/dist/server/connections-health-route.d.ts +46 -0
- package/dist/server/connections-health-route.d.ts.map +1 -0
- package/dist/server/context-editor.d.ts +114 -0
- package/dist/server/context-editor.d.ts.map +1 -0
- package/dist/server/context-meta.d.ts.map +1 -1
- package/dist/server/conversation-operations.d.ts.map +1 -1
- package/dist/server/deadcode-handlers.d.ts +8 -0
- package/dist/server/deadcode-handlers.d.ts.map +1 -0
- package/dist/server/embedded-host-adapters.d.ts +11 -1
- package/dist/server/embedded-host-adapters.d.ts.map +1 -1
- package/dist/server/embedded-lifecycle.d.ts.map +1 -1
- package/dist/server/embedded-message-router.d.ts +4 -0
- package/dist/server/embedded-message-router.d.ts.map +1 -1
- package/dist/server/entry.js +14952 -12161
- package/dist/server/entry.js.map +4 -4
- package/dist/server/goal-routes.d.ts +2 -2
- package/dist/server/goal-routes.d.ts.map +1 -1
- package/dist/server/goal-ws-handler.d.ts +20 -1
- package/dist/server/goal-ws-handler.d.ts.map +1 -1
- package/dist/server/handlers.js +0 -1
- package/dist/server/handlers.js.map +2 -2
- package/dist/server/http-server/api-handlers.d.ts +1 -1
- package/dist/server/http-server/api-handlers.d.ts.map +1 -1
- package/dist/server/http-server.d.ts.map +1 -1
- package/dist/server/index.d.ts +6 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/kanban-board-watcher.d.ts +10 -0
- package/dist/server/kanban-board-watcher.d.ts.map +1 -0
- package/dist/server/kanban-daemon-subscriber.d.ts +3 -0
- package/dist/server/kanban-daemon-subscriber.d.ts.map +1 -0
- package/dist/server/kanban-decomposition-routes.d.ts +10 -0
- package/dist/server/kanban-decomposition-routes.d.ts.map +1 -0
- package/dist/server/kanban-dispatch.d.ts +1 -0
- package/dist/server/kanban-dispatch.d.ts.map +1 -1
- package/dist/server/kanban-route-helpers.d.ts +17 -0
- package/dist/server/kanban-route-helpers.d.ts.map +1 -0
- package/dist/server/kanban-route-pagination.d.ts +16 -0
- package/dist/server/kanban-route-pagination.d.ts.map +1 -0
- package/dist/server/kanban-route-protocol.d.ts +2 -0
- package/dist/server/kanban-route-protocol.d.ts.map +1 -0
- package/dist/server/kanban-routes.d.ts +2 -15
- package/dist/server/kanban-routes.d.ts.map +1 -1
- package/dist/server/kanban-run-mirror.d.ts.map +1 -1
- package/dist/server/kanban-supervisor.d.ts.map +1 -1
- package/dist/server/kanban-task-routes.d.ts +10 -0
- package/dist/server/kanban-task-routes.d.ts.map +1 -0
- package/dist/server/mailbox-handlers.d.ts +3 -3
- package/dist/server/mailbox-handlers.d.ts.map +1 -1
- package/dist/server/message-dispatcher.d.ts.map +1 -1
- package/dist/server/mode-handlers.d.ts +4 -6
- package/dist/server/mode-handlers.d.ts.map +1 -1
- package/dist/server/model-catalog-search.d.ts +17 -0
- package/dist/server/model-catalog-search.d.ts.map +1 -0
- package/dist/server/model-operations.d.ts +2 -0
- package/dist/server/model-operations.d.ts.map +1 -1
- package/dist/server/network-info.d.ts +50 -0
- package/dist/server/network-info.d.ts.map +1 -0
- package/dist/server/pre-context-services.d.ts +1 -1
- package/dist/server/pre-context-services.d.ts.map +1 -1
- package/dist/server/pref-helpers.d.ts +7 -7
- package/dist/server/pref-helpers.d.ts.map +1 -1
- package/dist/server/project-handlers.d.ts +3 -2
- package/dist/server/project-handlers.d.ts.map +1 -1
- package/dist/server/provider-handlers.d.ts +10 -0
- package/dist/server/provider-handlers.d.ts.map +1 -1
- package/dist/server/provider-keys.d.ts +2 -0
- package/dist/server/provider-keys.d.ts.map +1 -1
- package/dist/server/provider-routes.d.ts +9 -0
- package/dist/server/provider-routes.d.ts.map +1 -1
- package/dist/server/routes.d.ts +8 -3
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/sdd-board-ws-handler.d.ts.map +1 -1
- package/dist/server/sdd-wizard-wiring.d.ts +17 -1
- package/dist/server/sdd-wizard-wiring.d.ts.map +1 -1
- package/dist/server/sdd-wizard-ws-handler.d.ts +41 -8
- package/dist/server/sdd-wizard-ws-handler.d.ts.map +1 -1
- package/dist/server/session-handlers.d.ts +13 -3
- package/dist/server/session-handlers.d.ts.map +1 -1
- package/dist/server/session-history.d.ts +3 -0
- package/dist/server/session-history.d.ts.map +1 -1
- package/dist/server/session-routes.d.ts +3 -0
- package/dist/server/session-routes.d.ts.map +1 -1
- package/dist/server/setup-events-core-watchers.d.ts +15 -0
- package/dist/server/setup-events-core-watchers.d.ts.map +1 -0
- package/dist/server/setup-events-fleet-broadcaster.d.ts +15 -0
- package/dist/server/setup-events-fleet-broadcaster.d.ts.map +1 -0
- package/dist/server/setup-events-provider-handlers.d.ts +19 -0
- package/dist/server/setup-events-provider-handlers.d.ts.map +1 -0
- package/dist/server/setup-events-session-helpers.d.ts +10 -0
- package/dist/server/setup-events-session-helpers.d.ts.map +1 -0
- package/dist/server/setup-events-status-watcher.d.ts +15 -0
- package/dist/server/setup-events-status-watcher.d.ts.map +1 -0
- package/dist/server/setup-events-watcher.d.ts +3 -0
- package/dist/server/setup-events-watcher.d.ts.map +1 -1
- package/dist/server/setup-events.d.ts +1 -1
- package/dist/server/setup-events.d.ts.map +1 -1
- package/dist/server/skills-handlers.d.ts.map +1 -1
- package/dist/server/standalone-session-identity.d.ts +10 -6
- package/dist/server/standalone-session-identity.d.ts.map +1 -1
- package/dist/server/start-webui.d.ts.map +1 -1
- package/dist/server/types.d.ts +2 -0
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/ws-auth.d.ts.map +1 -1
- package/dist/server/ws-payload-preferences.d.ts +13 -0
- package/dist/server/ws-payload-preferences.d.ts.map +1 -0
- package/dist/server/ws-payload-validation.d.ts +2 -5
- package/dist/server/ws-payload-validation.d.ts.map +1 -1
- package/package.json +10 -10
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const CLIENT_CONVERSATION_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.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'];
|
|
1
|
+
export declare const CLIENT_CONVERSATION_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'];
|
|
2
2
|
export declare const CLIENT_COLLABORATION_MESSAGE_TYPES: readonly ['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'];
|
|
3
3
|
//# sourceMappingURL=client-conversation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-conversation.d.ts","sourceRoot":"","sources":["../../src/protocol/client-conversation.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iCAAiC,YAC5C,OAAO,EACP,MAAM,EACN,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,aAAa,EACb,WAAW,EACX,cAAc,CACN,CAAC;AAEX,eAAO,MAAM,kCAAkC,YAC7C,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,cAAc,CACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"client-conversation.d.ts","sourceRoot":"","sources":["../../src/protocol/client-conversation.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iCAAiC,YAC5C,OAAO,EACP,MAAM,EACN,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,aAAa,EACb,WAAW,EACX,cAAc,CACN,CAAC;AAEX,eAAO,MAAM,kCAAkC,YAC7C,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,cAAc,CACN,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const CLIENT_KNOWLEDGE_MESSAGE_TYPES: readonly ['brain.ask', 'brain.config.get', 'brain.config.set', 'brain.risk', 'brain.status', 'chronicle.facet', 'chronicle.facets', 'chronicle.graph', 'chronicle.query', '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'];
|
|
1
|
+
export declare const CLIENT_KNOWLEDGE_MESSAGE_TYPES: readonly ['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'];
|
|
2
2
|
export declare const CLIENT_EXTENSION_MESSAGE_TYPES: readonly ['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'];
|
|
3
3
|
//# sourceMappingURL=client-integrations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-integrations.d.ts","sourceRoot":"","sources":["../../src/protocol/client-integrations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,YACzC,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,iCAAiC,EACjC,8BAA8B,EAC9B,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,CACZ,CAAC;AAEX,eAAO,MAAM,8BAA8B,YACzC,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,cAAc,EACd,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,eAAe,CACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"client-integrations.d.ts","sourceRoot":"","sources":["../../src/protocol/client-integrations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,YACzC,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,iCAAiC,EACjC,8BAA8B,EAC9B,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,CACZ,CAAC;AAEX,eAAO,MAAM,8BAA8B,YACzC,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,cAAc,EACd,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,eAAe,CACP,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const CLIENT_GOAL_MESSAGE_TYPES: readonly ['goal-state.get', 'goal.addTask', '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'];
|
|
2
|
-
export declare const CLIENT_SDD_MESSAGE_TYPES: readonly ['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.start', 'sdd.spec.approve', 'sdd.spec.get', 'sdd.spec.message', 'sdd.spec.start', 'specs.get', 'specs.list', 'specs.taskStatus'];
|
|
1
|
+
export declare const CLIENT_GOAL_MESSAGE_TYPES: readonly ['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'];
|
|
2
|
+
export declare const CLIENT_SDD_MESSAGE_TYPES: readonly ['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'];
|
|
3
3
|
//# sourceMappingURL=client-operations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-operations.d.ts","sourceRoot":"","sources":["../../src/protocol/client-operations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,YACpC,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,WAAW,CACH,CAAC;AAEX,eAAO,MAAM,wBAAwB,YACnC,uBAAuB,EACvB,6BAA6B,EAC7B,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,4BAA4B,EAC5B,oBAAoB,EACpB,8BAA8B,EAC9B,0BAA0B,EAC1B,iCAAiC,EACjC,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,kBAAkB,CACV,CAAC"}
|
|
1
|
+
{"version":3,"file":"client-operations.d.ts","sourceRoot":"","sources":["../../src/protocol/client-operations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,YACpC,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,WAAW,CACH,CAAC;AAEX,eAAO,MAAM,wBAAwB,YACnC,uBAAuB,EACvB,6BAA6B,EAC7B,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,4BAA4B,EAC5B,oBAAoB,EACpB,8BAA8B,EAC9B,0BAA0B,EAC1B,iCAAiC,EACjC,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,kBAAkB,CACV,CAAC"}
|
|
@@ -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 ['diag.get', 'key.add', 'key.delete', 'key.set_active', 'key.update', 'prefs.get', 'prefs.update', 'provider.add', 'provider.clear_models', 'provider.models', 'provider.probe', 'provider.remove', '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', '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,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,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,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"}
|
package/dist/protocol/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { createSurfaceConnectionState, DEFAULT_SURFACE_CONNECTION_CONFIG, enqueueBounded, isConnectionHeartbeatTimedOut, markConnectionActivity, markConnectionConnecting, markConnectionOpen, planConnectionReconnect, type ReconnectPlan, resetConnection, type SurfaceConnectionConfig, type SurfaceConnectionPhase, type SurfaceConnectionState, stopConnection, } from './connection-fsm.js';
|
|
2
2
|
export { decodeProtocolFrame, decodeProtocolMessage } from './decoder.js';
|
|
3
3
|
export { type ChatProjection, type FleetProjection, type HqAlertProjection, type HqCommandStatusProjection, type HqEventProjection, type HqFleetProjection, projectChatMessage, projectFleetMessage, projectHqAlertMessage, projectHqCommandStatusMessage, projectHqEventMessage, projectHqFleetMessage, projectSessionMessage, projectToolMessage, type SessionProjection, type ToolProjection, } from './projections.js';
|
|
4
|
+
export { buildReplayPayload, REPLAY_MESSAGE_CAP, type ReplayPayloadFields, type ReplaySource, } from './replay-payload.js';
|
|
4
5
|
export { CLIENT_MESSAGE_TYPES, type ExactClientMessageType, type ExactServerMessageType, isRegisteredMessageType, SERVER_MESSAGE_TYPES, } from './registry.js';
|
|
5
6
|
export type { CanonicalClientMessage, CanonicalClientMessageType, CanonicalServerMessage, CanonicalServerMessageType, ProtocolDecodeIssue, ProtocolDecodeResult, ProtocolDirection, ProtocolEnvelope, } from './types.js';
|
|
6
7
|
export { negotiateProtocol, type ProtocolAdvertisement, type ProtocolNegotiation, protocolAdvertisement, SURFACE_PROTOCOL_CAPABILITIES, SURFACE_PROTOCOL_MIN_VERSION, SURFACE_PROTOCOL_VERSION, type SurfaceProtocolCapability, } from './version.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/protocol/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,iCAAiC,EACjC,cAAc,EACd,6BAA6B,EAC7B,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,aAAa,EAClB,eAAe,EACf,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,qBAAqB,EACrB,6BAA6B,EAC7B,4BAA4B,EAC5B,wBAAwB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/protocol/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,iCAAiC,EACjC,cAAc,EACd,6BAA6B,EAC7B,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,aAAa,EAClB,eAAe,EACf,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,qBAAqB,EACrB,6BAA6B,EAC7B,4BAA4B,EAC5B,wBAAwB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,cAAc,CAAC"}
|
package/dist/protocol/index.js
CHANGED
|
@@ -74,6 +74,9 @@ var CLIENT_CONVERSATION_MESSAGE_TYPES = [
|
|
|
74
74
|
"context.clear",
|
|
75
75
|
"context.compact",
|
|
76
76
|
"context.debug",
|
|
77
|
+
"context.editor.open",
|
|
78
|
+
"context.editor.validate",
|
|
79
|
+
"context.editor.apply",
|
|
77
80
|
"context.mode.create",
|
|
78
81
|
"context.mode.delete",
|
|
79
82
|
"context.mode.switch",
|
|
@@ -124,7 +127,9 @@ var CLIENT_KNOWLEDGE_MESSAGE_TYPES = [
|
|
|
124
127
|
"chronicle.facet",
|
|
125
128
|
"chronicle.facets",
|
|
126
129
|
"chronicle.graph",
|
|
130
|
+
"chronicle.metrics",
|
|
127
131
|
"chronicle.query",
|
|
132
|
+
"chronicle.status",
|
|
128
133
|
"config.doctor",
|
|
129
134
|
"design.list",
|
|
130
135
|
"design.materialize",
|
|
@@ -186,6 +191,7 @@ var CLIENT_EXTENSION_MESSAGE_TYPES = [
|
|
|
186
191
|
var CLIENT_GOAL_MESSAGE_TYPES = [
|
|
187
192
|
"goal-state.get",
|
|
188
193
|
"goal.addTask",
|
|
194
|
+
"goal.assess",
|
|
189
195
|
"goal.assignTask",
|
|
190
196
|
"goal.clear",
|
|
191
197
|
"goal.get",
|
|
@@ -229,8 +235,11 @@ var CLIENT_SDD_MESSAGE_TYPES = [
|
|
|
229
235
|
"sdd.board.set_task_verification",
|
|
230
236
|
"sdd.board.split_task",
|
|
231
237
|
"sdd.board.stop",
|
|
238
|
+
"sdd.run.from_graph",
|
|
239
|
+
"sdd.run.from_spec",
|
|
232
240
|
"sdd.run.start",
|
|
233
241
|
"sdd.spec.approve",
|
|
242
|
+
"sdd.spec.discard",
|
|
234
243
|
"sdd.spec.get",
|
|
235
244
|
"sdd.spec.message",
|
|
236
245
|
"sdd.spec.start",
|
|
@@ -267,6 +276,8 @@ var CLIENT_WORKSPACE_MESSAGE_TYPES = [
|
|
|
267
276
|
"terminal.resize"
|
|
268
277
|
];
|
|
269
278
|
var CLIENT_CONFIGURATION_MESSAGE_TYPES = [
|
|
279
|
+
"codebase.index.server.shutdown",
|
|
280
|
+
"connections.health",
|
|
270
281
|
"diag.get",
|
|
271
282
|
"key.add",
|
|
272
283
|
"key.delete",
|
|
@@ -277,8 +288,12 @@ var CLIENT_CONFIGURATION_MESSAGE_TYPES = [
|
|
|
277
288
|
"provider.add",
|
|
278
289
|
"provider.clear_models",
|
|
279
290
|
"provider.models",
|
|
291
|
+
"provider.models.search",
|
|
280
292
|
"provider.probe",
|
|
281
293
|
"provider.remove",
|
|
294
|
+
"provider.status.clear",
|
|
295
|
+
"provider.status.get",
|
|
296
|
+
"provider.status.retry",
|
|
282
297
|
"provider.undo_clear",
|
|
283
298
|
"provider.update",
|
|
284
299
|
"providers.list",
|
|
@@ -302,6 +317,9 @@ var SERVER_CONVERSATION_MESSAGE_TYPES = [
|
|
|
302
317
|
"completion.result",
|
|
303
318
|
"context.compacted",
|
|
304
319
|
"context.debug",
|
|
320
|
+
"context.editor.snapshot",
|
|
321
|
+
"context.editor.validation",
|
|
322
|
+
"context.editor.applied",
|
|
305
323
|
"context.mode.changed",
|
|
306
324
|
"context.modes.list",
|
|
307
325
|
"context.repaired",
|
|
@@ -378,7 +396,9 @@ var SERVER_KNOWLEDGE_MESSAGE_TYPES = [
|
|
|
378
396
|
"chronicle.facet_result",
|
|
379
397
|
"chronicle.facets_result",
|
|
380
398
|
"chronicle.graph_result",
|
|
399
|
+
"chronicle.metrics_result",
|
|
381
400
|
"chronicle.query_result",
|
|
401
|
+
"chronicle.status_result",
|
|
382
402
|
"config.doctor.result",
|
|
383
403
|
"design.list",
|
|
384
404
|
"design.materialize",
|
|
@@ -445,6 +465,7 @@ var SERVER_GOAL_MESSAGE_TYPES = [
|
|
|
445
465
|
"eternal.iteration",
|
|
446
466
|
"fleet.concurrency_update",
|
|
447
467
|
"goal-state.updated",
|
|
468
|
+
"goal.assess.result",
|
|
448
469
|
"goal.list",
|
|
449
470
|
"goal.paused",
|
|
450
471
|
"goal.resumed",
|
|
@@ -500,6 +521,7 @@ var SERVER_AUTOMATION_MESSAGE_TYPES = [
|
|
|
500
521
|
var SERVER_WORKSPACE_MESSAGE_TYPES = [
|
|
501
522
|
"checkpoint.written",
|
|
502
523
|
"codemap.file_event",
|
|
524
|
+
"codemap.index_updated",
|
|
503
525
|
"codemap.tool_executed",
|
|
504
526
|
"codemap.tool_started",
|
|
505
527
|
"file.saved",
|
|
@@ -526,12 +548,18 @@ var SERVER_WORKSPACE_MESSAGE_TYPES = [
|
|
|
526
548
|
];
|
|
527
549
|
var SERVER_CONFIGURATION_MESSAGE_TYPES = [
|
|
528
550
|
"auth.oauth.status",
|
|
551
|
+
"codebase.index.server.shutdown_result",
|
|
552
|
+
"connections.health_error",
|
|
553
|
+
"connections.health_result",
|
|
529
554
|
"diag.get",
|
|
530
555
|
"key.operation_result",
|
|
556
|
+
"model.switch_result",
|
|
531
557
|
"prefs.updated",
|
|
532
558
|
"provider.catalog",
|
|
533
559
|
"provider.models",
|
|
560
|
+
"provider.models.search_result",
|
|
534
561
|
"provider.probe",
|
|
562
|
+
"provider.status.snapshot",
|
|
535
563
|
"providers.saved"
|
|
536
564
|
];
|
|
537
565
|
|
|
@@ -653,6 +681,7 @@ function projectSessionMessage(message) {
|
|
|
653
681
|
maxContext: finite(payload["maxContext"]),
|
|
654
682
|
reset: payload["reset"] === true,
|
|
655
683
|
replayMessages: Array.isArray(payload["replayMessages"]) ? payload["replayMessages"] : null,
|
|
684
|
+
replayMarkers: Array.isArray(payload["replayMarkers"]) ? payload["replayMarkers"] : null,
|
|
656
685
|
replayUsage: record(payload["replayUsage"])
|
|
657
686
|
};
|
|
658
687
|
}
|
|
@@ -779,6 +808,31 @@ function projectHqCommandStatusMessage(message) {
|
|
|
779
808
|
return { kind: "hq-command-status", command };
|
|
780
809
|
}
|
|
781
810
|
|
|
811
|
+
// src/protocol/replay-payload.ts
|
|
812
|
+
import { CHAT_MARKER_SOURCES, projectSessionMarkers } from "@wrongstack/core/types/session-markers";
|
|
813
|
+
var REPLAY_MESSAGE_CAP = 2e3;
|
|
814
|
+
function buildReplayPayload(source) {
|
|
815
|
+
const out = {};
|
|
816
|
+
const messages = source.messages;
|
|
817
|
+
if (messages.length > 0) {
|
|
818
|
+
out.replayMessages = messages.length > REPLAY_MESSAGE_CAP ? messages.slice(-REPLAY_MESSAGE_CAP) : [...messages];
|
|
819
|
+
}
|
|
820
|
+
if (source.events && source.events.length > 0) {
|
|
821
|
+
const markers = projectSessionMarkers(source.events, CHAT_MARKER_SOURCES);
|
|
822
|
+
if (markers.length > 0) out.replayMarkers = markers;
|
|
823
|
+
}
|
|
824
|
+
const usage = source.usage;
|
|
825
|
+
if (usage && usage.input + usage.output + (usage.cacheRead ?? 0) + (usage.cacheWrite ?? 0) > 0) {
|
|
826
|
+
out.replayUsage = {
|
|
827
|
+
input: usage.input,
|
|
828
|
+
output: usage.output,
|
|
829
|
+
cacheRead: usage.cacheRead ?? 0,
|
|
830
|
+
cacheWrite: usage.cacheWrite ?? 0
|
|
831
|
+
};
|
|
832
|
+
}
|
|
833
|
+
return out;
|
|
834
|
+
}
|
|
835
|
+
|
|
782
836
|
// src/protocol/version.ts
|
|
783
837
|
var SURFACE_PROTOCOL_VERSION = 1;
|
|
784
838
|
var SURFACE_PROTOCOL_MIN_VERSION = 1;
|
|
@@ -788,7 +842,14 @@ var SURFACE_PROTOCOL_CAPABILITIES = [
|
|
|
788
842
|
"chronicle.query",
|
|
789
843
|
"chronicle.facet",
|
|
790
844
|
"chronicle.facets",
|
|
791
|
-
"chronicle.graph"
|
|
845
|
+
"chronicle.graph",
|
|
846
|
+
"chronicle.metrics",
|
|
847
|
+
"chronicle.status",
|
|
848
|
+
"connections.health",
|
|
849
|
+
/** Interview resume/discard + lastAgentText/lastRunId continuity. */
|
|
850
|
+
"sdd.interview.continuity",
|
|
851
|
+
/** Launch multi-agent runs from a graph id or resolved spec id. */
|
|
852
|
+
"sdd.run.from_graph"
|
|
792
853
|
];
|
|
793
854
|
function protocolAdvertisement() {
|
|
794
855
|
return {
|
|
@@ -812,10 +873,12 @@ function negotiateProtocol(peer) {
|
|
|
812
873
|
export {
|
|
813
874
|
CLIENT_MESSAGE_TYPES,
|
|
814
875
|
DEFAULT_SURFACE_CONNECTION_CONFIG,
|
|
876
|
+
REPLAY_MESSAGE_CAP,
|
|
815
877
|
SERVER_MESSAGE_TYPES,
|
|
816
878
|
SURFACE_PROTOCOL_CAPABILITIES,
|
|
817
879
|
SURFACE_PROTOCOL_MIN_VERSION,
|
|
818
880
|
SURFACE_PROTOCOL_VERSION,
|
|
881
|
+
buildReplayPayload,
|
|
819
882
|
createSurfaceConnectionState,
|
|
820
883
|
decodeProtocolFrame,
|
|
821
884
|
decodeProtocolMessage,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 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/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.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.query',\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.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.start',\n 'sdd.spec.approve',\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 '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.probe',\n 'provider.remove',\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.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.query_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.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.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 'diag.get',\n 'key.operation_result',\n 'prefs.updated',\n 'provider.catalog',\n 'provider.models',\n 'provider.probe',\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 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 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", "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] 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;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;;;AClEO,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;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;AACF;;;ACvDO,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;AACF;;;AChDO,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;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;;;AC7EO,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;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;;;AClEO,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;AACF;AAEO,IAAM,2BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,kCAAkC;AAAA,EAC7C;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;AAAA,EACA;AACF;AAEO,IAAM,qCAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACNO,IAAM,uBAAuB;AAAA,EAClC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAEO,IAAM,uBAAuB;AAAA,EAClC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAKA,IAAM,kBAAuC,IAAI,IAAI,oBAAoB;AACzE,IAAM,kBAAuC,IAAI,IAAI,oBAAoB;AAElE,SAAS,wBAAwB,MAAc,WAAyC;AAC7F,QAAM,QAAQ,cAAc,WAAW,kBAAkB;AACzD,SACE,MAAM,IAAI,IAAI,KACb,KAAK,WAAW,SAAS,KAAK,KAAK,SAAS,UAAU,UACtD,KAAK,WAAW,eAAe,KAAK,KAAK,SAAS,gBAAgB;AAEvE;;;ACzDA,IAAM,iBAAiB,oBAAI,IAAI,CAAC,aAAa,eAAe,WAAW,CAAC;AACxE,IAAM,oBAAoB;AAE1B,SAAS,aAAa,OAAgB,MAAc,OAA2C;AAC7F,MAAI,QAAQ,mBAAmB;AAC7B,WAAO,EAAE,MAAM,YAAY,SAAS,8CAA8C,KAAK;AAAA,EACzF;AACA,MAAI,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO;AAExD,aAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACpC,UAAM,YAAY,GAAG,IAAI,IAAI,GAAG;AAChC,QAAI,eAAe,IAAI,GAAG,GAAG;AAC3B,aAAO,EAAE,MAAM,cAAc,SAAS,wBAAwB,GAAG,IAAI,MAAM,UAAU;AAAA,IACvF;AACA,UAAM,QAAQ,aAAc,MAAkC,GAAG,GAAG,WAAW,QAAQ,CAAC;AACxF,QAAI,MAAO,QAAO;AAAA,EACpB;AACA,SAAO;AACT;AAUO,SAAS,sBACd,OACA,WACwC;AACxC,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACvE,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO,EAAE,MAAM,oBAAoB,SAAS,qCAAqC;AAAA,IACnF;AAAA,EACF;AAEA,QAAM,WAAW;AACjB,MAAI,OAAO,SAAS,MAAM,MAAM,YAAY,SAAS,MAAM,EAAE,WAAW,GAAG;AACzE,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO,EAAE,MAAM,gBAAgB,SAAS,mDAAmD;AAAA,IAC7F;AAAA,EACF;AACA,MAAI,CAAC,wBAAwB,SAAS,MAAM,GAAG,SAAS,GAAG;AACzD,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO,EAAE,MAAM,gBAAgB,SAAS,WAAW,SAAS,aAAa,SAAS,MAAM,CAAC,GAAG;AAAA,IAC9F;AAAA,EACF;AACA,MAAI,cAAc,YAAY,CAAC,OAAO,OAAO,UAAU,SAAS,GAAG;AACjE,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO,EAAE,MAAM,oBAAoB,SAAS,6CAA6C;AAAA,IAC3F;AAAA,EACF;AAEA,QAAM,QAAQ,aAAa,UAAU,KAAK,CAAC;AAC3C,MAAI,MAAO,QAAO,EAAE,IAAI,OAAO,MAAM;AACrC,SAAO,EAAE,IAAI,MAAM,SAAS,MAA0B;AACxD;AAUO,SAAS,oBACd,OACA,WACwC;AACxC,MAAI;AACF,WAAO,sBAAsB,KAAK,MAAM,KAAK,GAAG,SAAqB;AAAA,EACvE,QAAQ;AACN,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO,EAAE,MAAM,oBAAoB,SAAS,mCAAmC;AAAA,IACjF;AAAA,EACF;AACF;;;AC3FA,SAAS,OAAO,OAAgD;AAC9D,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IACrE,QACD;AACN;AAEA,SAAS,KAAK,OAAgB,WAAW,IAAY;AACnD,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,OAAO,OAAgB,WAAW,GAAW;AACpD,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ;AACvE;AAGA,SAAS,cAAc,OAAyB;AAC9C,SAAO,UAAU,UAAa,MAAM,QAAQ,KAAK;AACnD;AAGA,SAAS,gBAAgB,QAA0C;AACjE,SACE,OAAO,OAAO,gBAAgB,CAAC,MAAM,OAAO,gBAAgB,KAC5D,OAAO,OAAO,eAAe,CAAC,MAAM,OAAO,eAAe,KAC1D,OAAO,OAAO,gBAAgB,CAAC,MAAM,OAAO,gBAAgB,KAC5D,OAAO,OAAO,iBAAiB,CAAC,MAAM,OAAO,iBAAiB,KAC9D,OAAO,OAAO,uBAAuB,CAAC,MAAM,OAAO,uBAAuB,KAC1E,OAAO,OAAO,2BAA2B,CAAC,MAAM,OAAO,2BAA2B,KAClF,OAAO,OAAO,cAAc,CAAC,MAAM,OAAO,cAAc;AAE5D;AAeO,SAAS,sBAAsB,SAAqD;AACzF,MAAI,QAAQ,SAAS,gBAAiB,QAAO;AAC7C,QAAM,UAAU,OAAO,QAAQ,OAAO;AACtC,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,IAAI,KAAK,QAAQ,WAAW,CAAC;AAAA,IAC7B,UAAU,KAAK,QAAQ,UAAU,CAAC;AAAA,IAClC,OAAO,KAAK,QAAQ,OAAO,CAAC;AAAA,IAC5B,aAAa,KAAK,QAAQ,aAAa,GAAG,SAAS;AAAA,IACnD,KAAK,KAAK,QAAQ,KAAK,CAAC;AAAA,IACxB,YAAY,OAAO,QAAQ,YAAY,CAAC;AAAA,IACxC,OAAO,QAAQ,OAAO,MAAM;AAAA,IAC5B,gBAAgB,MAAM,QAAQ,QAAQ,gBAAgB,CAAC,IAAI,QAAQ,gBAAgB,IAAI;AAAA,IACvF,aAAa,OAAO,QAAQ,aAAa,CAAC;AAAA,EAC5C;AACF;AASO,SAAS,mBAAmB,SAAkD;AACnF,QAAM,UAAU,OAAO,QAAQ,OAAO;AACtC,MAAI,CAAC,QAAS,QAAO;AACrB,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK,2BAA2B;AAC9B,YAAM,QAAQ,KAAK,QAAQ,MAAM,CAAC;AAClC,aAAO,QAAQ,EAAE,MAAM,kBAAkB,MAAM,MAAM,IAAI;AAAA,IAC3D;AAAA,IACA,KAAK,uBAAuB;AAC1B,YAAM,QAAQ,KAAK,QAAQ,MAAM,CAAC;AAClC,aAAO,QACH,EAAE,MAAM,cAAc,MAAM,OAAO,WAAW,KAAK,QAAQ,WAAW,CAAC,EAAE,IACzE;AAAA,IACN;AAAA,IACA,KAAK;AACH,aAAO,EAAE,MAAM,YAAY,SAAS,QAAQ,SAAS,EAAE;AAAA,IACzD,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ,KAAK,QAAQ,QAAQ,CAAC;AAAA,QAC9B,YAAY,OAAO,QAAQ,YAAY,GAAG,CAAC;AAAA,QAC3C,GAAI,OAAO,QAAQ,WAAW,MAAM,WAAW,EAAE,WAAW,QAAQ,WAAW,EAAE,IAAI,CAAC;AAAA,MACxF;AAAA,IACF,KAAK;AACH,aAAO,EAAE,MAAM,SAAS,SAAS,KAAK,QAAQ,SAAS,GAAG,YAAY,EAAE;AAAA,IAC1E;AACE,aAAO;AAAA,EACX;AACF;AAcO,SAAS,mBAAmB,SAAkD;AACnF,QAAM,UAAU,OAAO,QAAQ,OAAO;AACtC,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,QAAQ,SAAS,gBAAgB;AACnC,UAAM,OAAO,KAAK,QAAQ,MAAM,GAAG,MAAM;AACzC,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAI,KAAK,QAAQ,IAAI,GAAG,IAAI;AAAA,MAC5B;AAAA,MACA,OAAO,QAAQ,OAAO;AAAA,MACtB,WAAW,KAAK,QAAQ,WAAW,CAAC;AAAA,IACtC;AAAA,EACF;AACA,MAAI,QAAQ,SAAS,iBAAiB;AACpC,UAAM,QAAQ,OAAO,QAAQ,OAAO,CAAC;AACrC,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAI,KAAK,QAAQ,IAAI,CAAC;AAAA,MACtB,MAAM,KAAK,QAAQ,MAAM,GAAG,MAAM;AAAA,MAClC,WAAW,KAAK,QAAQ,MAAM,CAAC;AAAA,MAC/B,MAAM,KAAK,QAAQ,MAAM,CAAC,EAAE,KAAK;AAAA,IACnC;AAAA,EACF;AACA,MAAI,QAAQ,SAAS,iBAAiB;AACpC,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAI,KAAK,QAAQ,IAAI,CAAC;AAAA,MACtB,MAAM,KAAK,QAAQ,MAAM,CAAC;AAAA,MAC1B,IAAI,QAAQ,IAAI,MAAM;AAAA,MACtB,YAAY,OAAO,QAAQ,YAAY,CAAC;AAAA,MACxC,GAAI,OAAO,QAAQ,QAAQ,MAAM,WAAW,EAAE,QAAQ,QAAQ,QAAQ,EAAE,IAAI,CAAC;AAAA,IAC/E;AAAA,EACF;AACA,SAAO;AACT;AAQO,SAAS,oBAAoB,SAAmD;AACrF,QAAM,UAAU,OAAO,QAAQ,OAAO;AACtC,MAAI,CAAC,QAAS,QAAO;AACrB,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ,OAAO,QAAQ,kBAAkB,CAAC;AAAA,QAC1C,SAAS,OAAO,QAAQ,qBAAqB,CAAC;AAAA,MAChD;AAAA,IACF,KAAK;AACH,aAAO,EAAE,MAAM,iBAAiB,QAAQ,QAAQ;AAAA,IAClD,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,MAAM,QAAQ,QAAQ,UAAU,CAAC,IAAI,QAAQ,UAAU,IAAI,CAAC;AAAA,MACxE;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ,MAAM,QAAQ,QAAQ,kBAAkB,CAAC,IAC7C,QAAQ,kBAAkB,EAAE;AAAA,UAC1B,CAAC,SAA0C,OAAO,IAAI,MAAM;AAAA,QAC9D,IACA,CAAC;AAAA,MACP;AAAA,IACF;AACE,aAAO;AAAA,EACX;AACF;AAYO,SAAS,sBAAsB,SAGT;AAC3B,MAAI,QAAQ,SAAS,cAAe,QAAO;AAC3C,QAAM,WAAW,OAAO,QAAQ,QAAQ;AACxC,QAAM,SAAS,WAAW,OAAO,SAAS,QAAQ,CAAC,IAAI;AACvD,MACE,CAAC,YACD,OAAO,SAAS,aAAa,MAAM,YACnC,CAAC,MAAM,QAAQ,SAAS,SAAS,CAAC,KAClC,CAAC,MAAM,QAAQ,SAAS,UAAU,CAAC,KACnC,CAAC,MAAM,QAAQ,SAAS,UAAU,CAAC,KACnC,CAAC,MAAM,QAAQ,SAAS,QAAQ,CAAC,KACjC,CAAC,MAAM,QAAQ,SAAS,WAAW,CAAC,KACpC,CAAC,UACD,CAAC,gBAAgB,MAAM,KACvB,CAAC,cAAc,SAAS,UAAU,CAAC,KACnC,CAAC,cAAc,SAAS,cAAc,CAAC,KACvC,CAAC,cAAc,SAAS,YAAY,CAAC,GACrC;AACA,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,eAAe,SAA4C;AAC5E;AAcO,SAAS,sBAAsB,SAGT;AAC3B,MAAI,QAAQ,SAAS,WAAY,QAAO;AACxC,QAAM,QAAQ,OAAO,QAAQ,KAAK;AAClC,MACE,CAAC,SACD,OAAO,MAAM,IAAI,MAAM,YACvB,OAAO,MAAM,MAAM,MAAM,YACzB,OAAO,MAAM,WAAW,MAAM,YAC9B,OAAO,MAAM,UAAU,MAAM,YAC7B,OAAO,MAAM,WAAW,MAAM,YAC9B,OAAO,MAAM,KAAK,MAAM,UACxB;AACA,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,YAAY,MAA2C;AACxE;AAOO,SAAS,sBAAsB,SAKT;AAC3B,MAAI,QAAQ,SAAS,WAAY,QAAO;AACxC,MACE,OAAO,QAAQ,UAAU,MAAM,YAC/B,CAAC,CAAC,QAAQ,QAAQ,OAAO,EAAE,SAAS,QAAQ,UAAU,CAAC,KACvD,OAAO,QAAQ,SAAS,MAAM,YAC9B,OAAO,QAAQ,WAAW,MAAM,UAChC;AACA,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,YAAY,OAAO,QAAqC;AACzE;AAOO,SAAS,8BAA8B,SAGT;AACnC,MAAI,QAAQ,SAAS,oBAAqB,QAAO;AACjD,QAAM,UAAU,OAAO,QAAQ,OAAO;AACtC,MACE,CAAC,WACD,OAAO,QAAQ,WAAW,MAAM,YAChC,OAAO,QAAQ,MAAM,MAAM,YAC3B,OAAO,QAAQ,UAAU,MAAM,YAC/B,OAAO,QAAQ,YAAY,MAAM,YACjC,OAAO,QAAQ,YAAY,MAAM,YACjC,OAAO,QAAQ,QAAQ,MAAM,YAC7B,CAAC,CAAC,UAAU,aAAa,OAAO,EAAE,SAAS,QAAQ,QAAQ,CAAC,GAC5D;AACA,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,qBAAqB,QAAmD;AACzF;;;AC/SO,IAAM,2BAA2B;AACjC,IAAM,+BAA+B;AAErC,IAAM,gCAAgC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAgBO,SAAS,wBAGd;AACA,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,sBAAsB,CAAC,GAAG,6BAA6B;AAAA,EACzD;AACF;AAEO,SAAS,kBAAkB,MAAkD;AAClF,QAAM,cAAc,KAAK;AACzB,QAAM,aAAa,gBAAgB;AACnC,QAAM,UAAU,aACZ,2BACA,KAAK,IAAI,aAAa,wBAAwB;AAClD,QAAM,aACJ,cAAe,OAAO,UAAU,WAAW,KAAK,eAAe;AACjE,QAAM,aAAa,IAAI,IAAI,KAAK,wBAAwB,CAAC,CAAC;AAC1D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,8BAA8B,OAAO,CAAC,SAAS,WAAW,IAAI,IAAI,CAAC;AAAA,EACnF;AACF;",
|
|
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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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -10,6 +10,8 @@ export interface SessionProjection {
|
|
|
10
10
|
maxContext: number;
|
|
11
11
|
reset: boolean;
|
|
12
12
|
replayMessages: unknown[] | null;
|
|
13
|
+
/** Audit markers replayed alongside the conversation. */
|
|
14
|
+
replayMarkers: unknown[] | null;
|
|
13
15
|
replayUsage: Record<string, unknown> | null;
|
|
14
16
|
}
|
|
15
17
|
export declare function projectSessionMessage(message: ProtocolEnvelope): SessionProjection | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projections.d.ts","sourceRoot":"","sources":["../../src/protocol/projections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAkCnD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC7C;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"projections.d.ts","sourceRoot":"","sources":["../../src/protocol/projections.ts"],"names":[],"mappings":"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"}
|