@wrongstack/webui-server 0.295.1 → 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.
Files changed (144) hide show
  1. package/dist/index.js +4142 -1805
  2. package/dist/index.js.map +4 -4
  3. package/dist/protocol/client-conversation.d.ts +1 -1
  4. package/dist/protocol/client-conversation.d.ts.map +1 -1
  5. package/dist/protocol/client-integrations.d.ts +1 -1
  6. package/dist/protocol/client-integrations.d.ts.map +1 -1
  7. package/dist/protocol/client-operations.d.ts +2 -2
  8. package/dist/protocol/client-operations.d.ts.map +1 -1
  9. package/dist/protocol/client-workspace.d.ts +1 -1
  10. package/dist/protocol/client-workspace.d.ts.map +1 -1
  11. package/dist/protocol/index.js +33 -2
  12. package/dist/protocol/index.js.map +2 -2
  13. package/dist/protocol/registry.d.ts +2 -2
  14. package/dist/protocol/registry.d.ts.map +1 -1
  15. package/dist/protocol/replay-payload.d.ts.map +1 -1
  16. package/dist/protocol/server-conversation.d.ts +1 -1
  17. package/dist/protocol/server-conversation.d.ts.map +1 -1
  18. package/dist/protocol/server-integrations.d.ts +1 -1
  19. package/dist/protocol/server-integrations.d.ts.map +1 -1
  20. package/dist/protocol/server-operations.d.ts +1 -1
  21. package/dist/protocol/server-operations.d.ts.map +1 -1
  22. package/dist/protocol/server-workspace.d.ts +1 -1
  23. package/dist/protocol/server-workspace.d.ts.map +1 -1
  24. package/dist/protocol/version.d.ts +5 -1
  25. package/dist/protocol/version.d.ts.map +1 -1
  26. package/dist/server/agent-roster-handlers.d.ts +31 -0
  27. package/dist/server/agent-roster-handlers.d.ts.map +1 -1
  28. package/dist/server/backend-services.d.ts.map +1 -1
  29. package/dist/server/brain-handlers.d.ts.map +1 -1
  30. package/dist/server/chronicle-routes.d.ts +2 -5
  31. package/dist/server/chronicle-routes.d.ts.map +1 -1
  32. package/dist/server/client-presence.d.ts +2 -2
  33. package/dist/server/client-presence.d.ts.map +1 -1
  34. package/dist/server/codebase-index-server-control.d.ts +15 -0
  35. package/dist/server/codebase-index-server-control.d.ts.map +1 -0
  36. package/dist/server/codebase-indexing.d.ts.map +1 -1
  37. package/dist/server/codemap-handlers.d.ts +3 -3
  38. package/dist/server/codemap-handlers.d.ts.map +1 -1
  39. package/dist/server/collaboration-ws-handler.d.ts.map +1 -1
  40. package/dist/server/connection-handler.d.ts +7 -0
  41. package/dist/server/connection-handler.d.ts.map +1 -1
  42. package/dist/server/connection-lifecycle.d.ts +76 -0
  43. package/dist/server/connection-lifecycle.d.ts.map +1 -1
  44. package/dist/server/connections-health-route.d.ts +46 -0
  45. package/dist/server/connections-health-route.d.ts.map +1 -0
  46. package/dist/server/context-editor.d.ts +114 -0
  47. package/dist/server/context-editor.d.ts.map +1 -0
  48. package/dist/server/context-meta.d.ts.map +1 -1
  49. package/dist/server/conversation-operations.d.ts.map +1 -1
  50. package/dist/server/deadcode-handlers.d.ts +8 -0
  51. package/dist/server/deadcode-handlers.d.ts.map +1 -0
  52. package/dist/server/embedded-host-adapters.d.ts +11 -1
  53. package/dist/server/embedded-host-adapters.d.ts.map +1 -1
  54. package/dist/server/embedded-message-router.d.ts +4 -0
  55. package/dist/server/embedded-message-router.d.ts.map +1 -1
  56. package/dist/server/entry.js +3922 -1689
  57. package/dist/server/entry.js.map +4 -4
  58. package/dist/server/goal-routes.d.ts +2 -2
  59. package/dist/server/goal-routes.d.ts.map +1 -1
  60. package/dist/server/goal-ws-handler.d.ts +20 -1
  61. package/dist/server/goal-ws-handler.d.ts.map +1 -1
  62. package/dist/server/handlers.js +0 -1
  63. package/dist/server/handlers.js.map +2 -2
  64. package/dist/server/http-server/api-handlers.d.ts +1 -1
  65. package/dist/server/http-server/api-handlers.d.ts.map +1 -1
  66. package/dist/server/http-server.d.ts.map +1 -1
  67. package/dist/server/index.d.ts +3 -1
  68. package/dist/server/index.d.ts.map +1 -1
  69. package/dist/server/kanban-board-watcher.d.ts +4 -13
  70. package/dist/server/kanban-board-watcher.d.ts.map +1 -1
  71. package/dist/server/kanban-daemon-subscriber.d.ts +3 -0
  72. package/dist/server/kanban-daemon-subscriber.d.ts.map +1 -0
  73. package/dist/server/kanban-decomposition-routes.d.ts +10 -0
  74. package/dist/server/kanban-decomposition-routes.d.ts.map +1 -0
  75. package/dist/server/kanban-dispatch.d.ts.map +1 -1
  76. package/dist/server/kanban-route-helpers.d.ts +17 -0
  77. package/dist/server/kanban-route-helpers.d.ts.map +1 -0
  78. package/dist/server/kanban-route-pagination.d.ts +16 -0
  79. package/dist/server/kanban-route-pagination.d.ts.map +1 -0
  80. package/dist/server/kanban-route-protocol.d.ts +2 -0
  81. package/dist/server/kanban-route-protocol.d.ts.map +1 -0
  82. package/dist/server/kanban-routes.d.ts +2 -23
  83. package/dist/server/kanban-routes.d.ts.map +1 -1
  84. package/dist/server/kanban-run-mirror.d.ts.map +1 -1
  85. package/dist/server/kanban-task-routes.d.ts +10 -0
  86. package/dist/server/kanban-task-routes.d.ts.map +1 -0
  87. package/dist/server/mailbox-handlers.d.ts +3 -3
  88. package/dist/server/mailbox-handlers.d.ts.map +1 -1
  89. package/dist/server/message-dispatcher.d.ts.map +1 -1
  90. package/dist/server/mode-handlers.d.ts +4 -6
  91. package/dist/server/mode-handlers.d.ts.map +1 -1
  92. package/dist/server/model-catalog-search.d.ts +17 -0
  93. package/dist/server/model-catalog-search.d.ts.map +1 -0
  94. package/dist/server/model-operations.d.ts +2 -0
  95. package/dist/server/model-operations.d.ts.map +1 -1
  96. package/dist/server/pre-context-services.d.ts.map +1 -1
  97. package/dist/server/pref-helpers.d.ts +7 -7
  98. package/dist/server/pref-helpers.d.ts.map +1 -1
  99. package/dist/server/project-handlers.d.ts +3 -2
  100. package/dist/server/project-handlers.d.ts.map +1 -1
  101. package/dist/server/provider-handlers.d.ts +10 -0
  102. package/dist/server/provider-handlers.d.ts.map +1 -1
  103. package/dist/server/provider-keys.d.ts +2 -0
  104. package/dist/server/provider-keys.d.ts.map +1 -1
  105. package/dist/server/provider-routes.d.ts +9 -0
  106. package/dist/server/provider-routes.d.ts.map +1 -1
  107. package/dist/server/routes.d.ts +8 -3
  108. package/dist/server/routes.d.ts.map +1 -1
  109. package/dist/server/sdd-board-ws-handler.d.ts.map +1 -1
  110. package/dist/server/sdd-wizard-wiring.d.ts +10 -0
  111. package/dist/server/sdd-wizard-wiring.d.ts.map +1 -1
  112. package/dist/server/sdd-wizard-ws-handler.d.ts +41 -8
  113. package/dist/server/sdd-wizard-ws-handler.d.ts.map +1 -1
  114. package/dist/server/session-handlers.d.ts +13 -3
  115. package/dist/server/session-handlers.d.ts.map +1 -1
  116. package/dist/server/session-history.d.ts +3 -0
  117. package/dist/server/session-history.d.ts.map +1 -1
  118. package/dist/server/session-routes.d.ts +3 -0
  119. package/dist/server/session-routes.d.ts.map +1 -1
  120. package/dist/server/setup-events-core-watchers.d.ts +15 -0
  121. package/dist/server/setup-events-core-watchers.d.ts.map +1 -0
  122. package/dist/server/setup-events-fleet-broadcaster.d.ts +15 -0
  123. package/dist/server/setup-events-fleet-broadcaster.d.ts.map +1 -0
  124. package/dist/server/setup-events-provider-handlers.d.ts +19 -0
  125. package/dist/server/setup-events-provider-handlers.d.ts.map +1 -0
  126. package/dist/server/setup-events-session-helpers.d.ts +10 -0
  127. package/dist/server/setup-events-session-helpers.d.ts.map +1 -0
  128. package/dist/server/setup-events-status-watcher.d.ts +15 -0
  129. package/dist/server/setup-events-status-watcher.d.ts.map +1 -0
  130. package/dist/server/setup-events-watcher.d.ts +3 -0
  131. package/dist/server/setup-events-watcher.d.ts.map +1 -1
  132. package/dist/server/setup-events.d.ts +1 -1
  133. package/dist/server/setup-events.d.ts.map +1 -1
  134. package/dist/server/skills-handlers.d.ts.map +1 -1
  135. package/dist/server/standalone-session-identity.d.ts +10 -6
  136. package/dist/server/standalone-session-identity.d.ts.map +1 -1
  137. package/dist/server/start-webui.d.ts.map +1 -1
  138. package/dist/server/types.d.ts +2 -0
  139. package/dist/server/types.d.ts.map +1 -1
  140. package/dist/server/ws-payload-preferences.d.ts +13 -0
  141. package/dist/server/ws-payload-preferences.d.ts.map +1 -0
  142. package/dist/server/ws-payload-validation.d.ts +2 -5
  143. package/dist/server/ws-payload-validation.d.ts.map +1 -1
  144. 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.metrics', '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,mBAAmB,EACnB,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"}
@@ -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",
@@ -126,6 +129,7 @@ var CLIENT_KNOWLEDGE_MESSAGE_TYPES = [
126
129
  "chronicle.graph",
127
130
  "chronicle.metrics",
128
131
  "chronicle.query",
132
+ "chronicle.status",
129
133
  "config.doctor",
130
134
  "design.list",
131
135
  "design.materialize",
@@ -187,6 +191,7 @@ var CLIENT_EXTENSION_MESSAGE_TYPES = [
187
191
  var CLIENT_GOAL_MESSAGE_TYPES = [
188
192
  "goal-state.get",
189
193
  "goal.addTask",
194
+ "goal.assess",
190
195
  "goal.assignTask",
191
196
  "goal.clear",
192
197
  "goal.get",
@@ -230,8 +235,11 @@ var CLIENT_SDD_MESSAGE_TYPES = [
230
235
  "sdd.board.set_task_verification",
231
236
  "sdd.board.split_task",
232
237
  "sdd.board.stop",
238
+ "sdd.run.from_graph",
239
+ "sdd.run.from_spec",
233
240
  "sdd.run.start",
234
241
  "sdd.spec.approve",
242
+ "sdd.spec.discard",
235
243
  "sdd.spec.get",
236
244
  "sdd.spec.message",
237
245
  "sdd.spec.start",
@@ -268,6 +276,8 @@ var CLIENT_WORKSPACE_MESSAGE_TYPES = [
268
276
  "terminal.resize"
269
277
  ];
270
278
  var CLIENT_CONFIGURATION_MESSAGE_TYPES = [
279
+ "codebase.index.server.shutdown",
280
+ "connections.health",
271
281
  "diag.get",
272
282
  "key.add",
273
283
  "key.delete",
@@ -278,8 +288,12 @@ var CLIENT_CONFIGURATION_MESSAGE_TYPES = [
278
288
  "provider.add",
279
289
  "provider.clear_models",
280
290
  "provider.models",
291
+ "provider.models.search",
281
292
  "provider.probe",
282
293
  "provider.remove",
294
+ "provider.status.clear",
295
+ "provider.status.get",
296
+ "provider.status.retry",
283
297
  "provider.undo_clear",
284
298
  "provider.update",
285
299
  "providers.list",
@@ -303,6 +317,9 @@ var SERVER_CONVERSATION_MESSAGE_TYPES = [
303
317
  "completion.result",
304
318
  "context.compacted",
305
319
  "context.debug",
320
+ "context.editor.snapshot",
321
+ "context.editor.validation",
322
+ "context.editor.applied",
306
323
  "context.mode.changed",
307
324
  "context.modes.list",
308
325
  "context.repaired",
@@ -381,6 +398,7 @@ var SERVER_KNOWLEDGE_MESSAGE_TYPES = [
381
398
  "chronicle.graph_result",
382
399
  "chronicle.metrics_result",
383
400
  "chronicle.query_result",
401
+ "chronicle.status_result",
384
402
  "config.doctor.result",
385
403
  "design.list",
386
404
  "design.materialize",
@@ -447,6 +465,7 @@ var SERVER_GOAL_MESSAGE_TYPES = [
447
465
  "eternal.iteration",
448
466
  "fleet.concurrency_update",
449
467
  "goal-state.updated",
468
+ "goal.assess.result",
450
469
  "goal.list",
451
470
  "goal.paused",
452
471
  "goal.resumed",
@@ -529,12 +548,18 @@ var SERVER_WORKSPACE_MESSAGE_TYPES = [
529
548
  ];
530
549
  var SERVER_CONFIGURATION_MESSAGE_TYPES = [
531
550
  "auth.oauth.status",
551
+ "codebase.index.server.shutdown_result",
552
+ "connections.health_error",
553
+ "connections.health_result",
532
554
  "diag.get",
533
555
  "key.operation_result",
556
+ "model.switch_result",
534
557
  "prefs.updated",
535
558
  "provider.catalog",
536
559
  "provider.models",
560
+ "provider.models.search_result",
537
561
  "provider.probe",
562
+ "provider.status.snapshot",
538
563
  "providers.saved"
539
564
  ];
540
565
 
@@ -784,7 +809,7 @@ function projectHqCommandStatusMessage(message) {
784
809
  }
785
810
 
786
811
  // src/protocol/replay-payload.ts
787
- import { CHAT_MARKER_SOURCES, projectSessionMarkers } from "@wrongstack/core/types";
812
+ import { CHAT_MARKER_SOURCES, projectSessionMarkers } from "@wrongstack/core/types/session-markers";
788
813
  var REPLAY_MESSAGE_CAP = 2e3;
789
814
  function buildReplayPayload(source) {
790
815
  const out = {};
@@ -818,7 +843,13 @@ var SURFACE_PROTOCOL_CAPABILITIES = [
818
843
  "chronicle.facet",
819
844
  "chronicle.facets",
820
845
  "chronicle.graph",
821
- "chronicle.metrics"
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"
822
853
  ];
823
854
  function protocolAdvertisement() {
824
855
  return {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/protocol/connection-fsm.ts", "../../src/protocol/client-conversation.ts", "../../src/protocol/client-integrations.ts", "../../src/protocol/client-operations.ts", "../../src/protocol/client-workspace.ts", "../../src/protocol/server-conversation.ts", "../../src/protocol/server-integrations.ts", "../../src/protocol/server-operations.ts", "../../src/protocol/server-workspace.ts", "../../src/protocol/registry.ts", "../../src/protocol/decoder.ts", "../../src/protocol/projections.ts", "../../src/protocol/replay-payload.ts", "../../src/protocol/version.ts"],
4
- "sourcesContent": ["export type SurfaceConnectionPhase = 'idle' | 'connecting' | 'open' | 'reconnecting' | 'closed';\n\nexport interface SurfaceConnectionConfig {\n maxReconnectAttempts: number;\n initialBackoffMs: number;\n maxBackoffMs: number;\n backoffMultiplier: number;\n jitterRatio: number;\n queueLimit: number;\n heartbeatIntervalMs: number;\n heartbeatTimeoutMs: number;\n}\n\nexport interface SurfaceConnectionState {\n phase: SurfaceConnectionPhase;\n reconnectAttempt: number;\n lastActivityAt: number | null;\n stopped: boolean;\n}\n\nexport interface ReconnectPlan {\n attempt: number;\n delayMs: number;\n retryAt: number;\n}\n\nexport const DEFAULT_SURFACE_CONNECTION_CONFIG: SurfaceConnectionConfig = {\n maxReconnectAttempts: 10,\n initialBackoffMs: 1_000,\n maxBackoffMs: 30_000,\n backoffMultiplier: 2,\n jitterRatio: 0,\n queueLimit: 1_000,\n heartbeatIntervalMs: 0,\n heartbeatTimeoutMs: 0,\n};\n\nexport function createSurfaceConnectionState(): SurfaceConnectionState {\n return { phase: 'idle', reconnectAttempt: 0, lastActivityAt: null, stopped: false };\n}\n\nexport function markConnectionConnecting(state: SurfaceConnectionState): SurfaceConnectionState {\n if (state.stopped) return state;\n return { ...state, phase: 'connecting' };\n}\n\nexport function markConnectionOpen(\n state: SurfaceConnectionState,\n now = Date.now(),\n): SurfaceConnectionState {\n return {\n ...state,\n phase: 'open',\n reconnectAttempt: 0,\n lastActivityAt: now,\n stopped: false,\n };\n}\n\nexport function markConnectionActivity(\n state: SurfaceConnectionState,\n now = Date.now(),\n): SurfaceConnectionState {\n return { ...state, lastActivityAt: now };\n}\n\nexport function stopConnection(state: SurfaceConnectionState): SurfaceConnectionState {\n return { ...state, phase: 'closed', stopped: true };\n}\n\nexport function resetConnection(state: SurfaceConnectionState): SurfaceConnectionState {\n return { ...state, phase: 'idle', reconnectAttempt: 0, stopped: false };\n}\n\nexport function planConnectionReconnect(\n state: SurfaceConnectionState,\n config: SurfaceConnectionConfig,\n now = Date.now(),\n random = Math.random,\n): { state: SurfaceConnectionState; plan: ReconnectPlan | null } {\n if (state.stopped || state.reconnectAttempt >= config.maxReconnectAttempts) {\n return { state: { ...state, phase: 'closed' }, plan: null };\n }\n const attempt = state.reconnectAttempt + 1;\n const base = Math.min(\n config.initialBackoffMs * config.backoffMultiplier ** (attempt - 1),\n config.maxBackoffMs,\n );\n const centeredJitter = (random() * 2 - 1) * config.jitterRatio;\n const delayMs = Math.max(0, Math.round(base * (1 + centeredJitter)));\n return {\n state: { ...state, phase: 'reconnecting', reconnectAttempt: attempt },\n plan: { attempt, delayMs, retryAt: now + delayMs },\n };\n}\n\nexport function isConnectionHeartbeatTimedOut(\n state: SurfaceConnectionState,\n config: SurfaceConnectionConfig,\n now = Date.now(),\n): boolean {\n if (state.phase !== 'open' || state.lastActivityAt === null) return false;\n if (config.heartbeatIntervalMs <= 0) return false;\n return now - state.lastActivityAt > config.heartbeatIntervalMs + config.heartbeatTimeoutMs;\n}\n\nexport function enqueueBounded<T>(\n queue: readonly T[],\n item: T,\n limit: number,\n): { queue: T[]; dropped: T | null } {\n if (limit <= 0) return { queue: [], dropped: item };\n if (queue.length < limit) return { queue: [...queue, item], dropped: null };\n return { queue: [...queue.slice(queue.length - limit + 1), item], dropped: queue[0] ?? null };\n}\n", "export const CLIENT_CONVERSATION_MESSAGE_TYPES = [\n 'abort',\n 'ping',\n 'user_message',\n 'tool.confirm_result',\n 'completion.request',\n 'model.switch',\n 'model.refine',\n 'autonomy.switch',\n 'context.clear',\n 'context.compact',\n 'context.debug',\n 'context.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 '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.metrics_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.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 '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 /** 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';\nimport { CHAT_MARKER_SOURCES, projectSessionMarkers } from '@wrongstack/core/types';\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] 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;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;;;ACnEO,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;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;;;ACnEO,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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",
4
+ "sourcesContent": ["export type SurfaceConnectionPhase = 'idle' | 'connecting' | 'open' | 'reconnecting' | 'closed';\n\nexport interface SurfaceConnectionConfig {\n maxReconnectAttempts: number;\n initialBackoffMs: number;\n maxBackoffMs: number;\n backoffMultiplier: number;\n jitterRatio: number;\n queueLimit: number;\n heartbeatIntervalMs: number;\n heartbeatTimeoutMs: number;\n}\n\nexport interface SurfaceConnectionState {\n phase: SurfaceConnectionPhase;\n reconnectAttempt: number;\n lastActivityAt: number | null;\n stopped: boolean;\n}\n\nexport interface ReconnectPlan {\n attempt: number;\n delayMs: number;\n retryAt: number;\n}\n\nexport const DEFAULT_SURFACE_CONNECTION_CONFIG: SurfaceConnectionConfig = {\n maxReconnectAttempts: 10,\n initialBackoffMs: 1_000,\n maxBackoffMs: 30_000,\n backoffMultiplier: 2,\n jitterRatio: 0,\n queueLimit: 1_000,\n heartbeatIntervalMs: 0,\n heartbeatTimeoutMs: 0,\n};\n\nexport function createSurfaceConnectionState(): SurfaceConnectionState {\n return { phase: 'idle', reconnectAttempt: 0, lastActivityAt: null, stopped: false };\n}\n\nexport function markConnectionConnecting(state: SurfaceConnectionState): SurfaceConnectionState {\n if (state.stopped) return state;\n return { ...state, phase: 'connecting' };\n}\n\nexport function markConnectionOpen(\n state: SurfaceConnectionState,\n now = Date.now(),\n): SurfaceConnectionState {\n return {\n ...state,\n phase: 'open',\n reconnectAttempt: 0,\n lastActivityAt: now,\n stopped: false,\n };\n}\n\nexport function markConnectionActivity(\n state: SurfaceConnectionState,\n now = Date.now(),\n): SurfaceConnectionState {\n return { ...state, lastActivityAt: now };\n}\n\nexport function stopConnection(state: SurfaceConnectionState): SurfaceConnectionState {\n return { ...state, phase: 'closed', stopped: true };\n}\n\nexport function resetConnection(state: SurfaceConnectionState): SurfaceConnectionState {\n return { ...state, phase: 'idle', reconnectAttempt: 0, stopped: false };\n}\n\nexport function planConnectionReconnect(\n state: SurfaceConnectionState,\n config: SurfaceConnectionConfig,\n now = Date.now(),\n random = Math.random,\n): { state: SurfaceConnectionState; plan: ReconnectPlan | null } {\n if (state.stopped || state.reconnectAttempt >= config.maxReconnectAttempts) {\n return { state: { ...state, phase: 'closed' }, plan: null };\n }\n const attempt = state.reconnectAttempt + 1;\n const base = Math.min(\n config.initialBackoffMs * config.backoffMultiplier ** (attempt - 1),\n config.maxBackoffMs,\n );\n const centeredJitter = (random() * 2 - 1) * config.jitterRatio;\n const delayMs = Math.max(0, Math.round(base * (1 + centeredJitter)));\n return {\n state: { ...state, phase: 'reconnecting', reconnectAttempt: attempt },\n plan: { attempt, delayMs, retryAt: now + delayMs },\n };\n}\n\nexport function isConnectionHeartbeatTimedOut(\n state: SurfaceConnectionState,\n config: SurfaceConnectionConfig,\n now = Date.now(),\n): boolean {\n if (state.phase !== 'open' || state.lastActivityAt === null) return false;\n if (config.heartbeatIntervalMs <= 0) return false;\n return now - state.lastActivityAt > config.heartbeatIntervalMs + config.heartbeatTimeoutMs;\n}\n\nexport function enqueueBounded<T>(\n queue: readonly T[],\n item: T,\n limit: number,\n): { queue: T[]; dropped: T | null } {\n if (limit <= 0) return { queue: [], dropped: item };\n if (queue.length < limit) return { queue: [...queue, item], dropped: null };\n return { queue: [...queue.slice(queue.length - limit + 1), item], dropped: queue[0] ?? null };\n}\n", "export const CLIENT_CONVERSATION_MESSAGE_TYPES = [\n 'abort',\n 'ping',\n 'user_message',\n 'tool.confirm_result',\n 'completion.request',\n 'model.switch',\n 'model.refine',\n 'autonomy.switch',\n 'context.clear',\n 'context.compact',\n 'context.debug',\n 'context.editor.open',\n 'context.editor.validate',\n 'context.editor.apply',\n 'context.mode.create',\n 'context.mode.delete',\n 'context.mode.switch',\n 'context.mode.update',\n 'context.modes.list',\n 'context.repair',\n 'mode.switch',\n 'modes.list',\n 'session.checkpoints',\n 'session.delete',\n 'session.new',\n 'session.rename',\n 'session.resume',\n 'session.rewind',\n 'session.save',\n 'sessions.list',\n 'side_effects.list',\n 'stats.get',\n 'todo.update',\n 'todos.clear',\n 'todos.get',\n 'todos.remove',\n] as const;\n\nexport const CLIENT_COLLABORATION_MESSAGE_TYPES = [\n 'collab.join',\n 'collab.leave',\n 'collab.annotate',\n 'collab.resolve',\n 'collab.request_pause',\n 'collab.resume',\n 'collab.grant_control',\n 'collab.inject_tool',\n 'mailbox.agents',\n 'mailbox.clear',\n 'mailbox.compact',\n 'mailbox.messages',\n 'mailbox.purge',\n 'mailbox.send',\n] as const;\n", "export const CLIENT_KNOWLEDGE_MESSAGE_TYPES = [\n 'brain.ask',\n 'brain.config.get',\n 'brain.config.set',\n 'brain.risk',\n 'brain.status',\n 'chronicle.facet',\n 'chronicle.facets',\n 'chronicle.graph',\n 'chronicle.metrics',\n 'chronicle.query',\n 'chronicle.status',\n 'config.doctor',\n 'design.list',\n 'design.materialize',\n 'design.set',\n 'design.state',\n 'design.swap',\n 'design.tune',\n 'design.use',\n 'design.verify',\n 'memory.list',\n 'memory.sage.backfillRecoverable',\n 'memory.sage.candidateResolve',\n 'memory.sage.delete',\n 'memory.sage.forFile',\n 'memory.sage.get',\n 'memory.sage.graph',\n 'memory.sage.list',\n 'memory.sage.listPage',\n 'memory.sage.recover',\n 'memory.sage.remember',\n 'memory.sage.update',\n] as const;\n\nexport const CLIENT_EXTENSION_MESSAGE_TYPES = [\n 'auth.oauth.cancel',\n 'auth.oauth.code',\n 'auth.oauth.start',\n 'mcp.add',\n 'mcp.disable',\n 'mcp.discover',\n 'mcp.enable',\n 'mcp.list',\n 'mcp.prompt.get',\n 'mcp.prompts',\n 'mcp.remove',\n 'mcp.resource.read',\n 'mcp.resources',\n 'mcp.restart',\n 'mcp.sleep',\n 'mcp.update',\n 'mcp.wake',\n 'prompts.content',\n 'prompts.create',\n 'prompts.favorite',\n 'prompts.list',\n 'prompts.recent',\n 'prompts.search',\n 'prompts.used',\n 'skills.content',\n 'skills.create',\n 'skills.edit',\n 'skills.export',\n 'skills.install',\n 'skills.list',\n 'skills.uninstall',\n 'skills.update',\n] as const;\n", "export const CLIENT_GOAL_MESSAGE_TYPES = [\n 'goal-state.get',\n 'goal.addTask',\n 'goal.assess',\n 'goal.assignTask',\n 'goal.clear',\n 'goal.get',\n 'goal.list',\n 'goal.load',\n 'goal.moveTask',\n 'goal.pause',\n 'goal.resume',\n 'goal.retryTask',\n 'goal.revert',\n 'goal.runTask',\n 'goal.save',\n 'goal.selectPhase',\n 'goal.start',\n 'goal.state',\n 'goal.status',\n 'goal.stop',\n 'goal.taskStatus',\n 'goal.toggleAutonomous',\n 'plan.get',\n 'plan.item.update',\n 'plan.template_use',\n 'task.update',\n 'tasks.get',\n] as const;\n\nexport const CLIENT_SDD_MESSAGE_TYPES = [\n 'sdd.board.cancel_task',\n 'sdd.board.cleanup_worktrees',\n 'sdd.board.delete_task',\n 'sdd.board.destroy',\n 'sdd.board.get',\n 'sdd.board.list',\n 'sdd.board.pause',\n 'sdd.board.reassign',\n 'sdd.board.resume',\n 'sdd.board.retry',\n 'sdd.board.retry_all_failed',\n 'sdd.board.rollback',\n 'sdd.board.set_task_fallbacks',\n 'sdd.board.set_task_model',\n 'sdd.board.set_task_verification',\n 'sdd.board.split_task',\n 'sdd.board.stop',\n 'sdd.run.from_graph',\n 'sdd.run.from_spec',\n 'sdd.run.start',\n 'sdd.spec.approve',\n 'sdd.spec.discard',\n 'sdd.spec.get',\n 'sdd.spec.message',\n 'sdd.spec.start',\n 'specs.get',\n 'specs.list',\n 'specs.taskStatus',\n] as const;\n", "export const CLIENT_WORKSPACE_MESSAGE_TYPES = [\n 'files.list',\n 'files.read',\n 'files.tree',\n 'files.write',\n 'git.changes',\n 'git.diff',\n 'git.info',\n 'projects.add',\n 'projects.list',\n 'projects.select',\n 'working_dir.set',\n 'worktree.cleanup',\n 'worktree.diff',\n 'worktree.merge',\n 'worktree.remove',\n 'worktree.scan',\n 'shell.open',\n 'process.kill',\n 'process.killAll',\n 'process.list',\n 'terminal.close',\n 'terminal.create',\n 'terminal.input',\n 'terminal.resize',\n] as const;\n\nexport const CLIENT_CONFIGURATION_MESSAGE_TYPES = [\n 'codebase.index.server.shutdown',\n 'connections.health',\n '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
  }
@@ -1,5 +1,5 @@
1
- export declare const CLIENT_MESSAGE_TYPES: readonly ["abort", "ping", "user_message", "tool.confirm_result", "completion.request", "model.switch", "model.refine", "autonomy.switch", "context.clear", "context.compact", "context.debug", "context.mode.create", "context.mode.delete", "context.mode.switch", "context.mode.update", "context.modes.list", "context.repair", "mode.switch", "modes.list", "session.checkpoints", "session.delete", "session.new", "session.rename", "session.resume", "session.rewind", "session.save", "sessions.list", "side_effects.list", "stats.get", "todo.update", "todos.clear", "todos.get", "todos.remove", "collab.join", "collab.leave", "collab.annotate", "collab.resolve", "collab.request_pause", "collab.resume", "collab.grant_control", "collab.inject_tool", "mailbox.agents", "mailbox.clear", "mailbox.compact", "mailbox.messages", "mailbox.purge", "mailbox.send", "files.list", "files.read", "files.tree", "files.write", "git.changes", "git.diff", "git.info", "projects.add", "projects.list", "projects.select", "working_dir.set", "worktree.cleanup", "worktree.diff", "worktree.merge", "worktree.remove", "worktree.scan", "shell.open", "process.kill", "process.killAll", "process.list", "terminal.close", "terminal.create", "terminal.input", "terminal.resize", "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", "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", "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", "brain.ask", "brain.config.get", "brain.config.set", "brain.risk", "brain.status", "chronicle.facet", "chronicle.facets", "chronicle.graph", "chronicle.metrics", "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", "auth.oauth.cancel", "auth.oauth.code", "auth.oauth.start", "mcp.add", "mcp.disable", "mcp.discover", "mcp.enable", "mcp.list", "mcp.prompt.get", "mcp.prompts", "mcp.remove", "mcp.resource.read", "mcp.resources", "mcp.restart", "mcp.sleep", "mcp.update", "mcp.wake", "prompts.content", "prompts.create", "prompts.favorite", "prompts.list", "prompts.recent", "prompts.search", "prompts.used", "skills.content", "skills.create", "skills.edit", "skills.export", "skills.install", "skills.list", "skills.uninstall", "skills.update"];
2
- export declare const SERVER_MESSAGE_TYPES: readonly ["error", "log", "pong", "side_effects", "agent.status_changed", "agent.timeline.message", "client.status_update", "compaction.failed", "completion.result", "context.compacted", "context.debug", "context.mode.changed", "context.modes.list", "context.repaired", "ctx.max_context", "ctx.pct", "delegate.completed", "delegate.started", "iteration.completed", "iteration.limit_reached", "iteration.started", "model.refine_result", "modes.list", "provider.active_blocked", "provider.error", "provider.fallback", "provider.response", "provider.retry", "provider.status_changed", "provider.stream_error", "provider.text_delta", "provider.thinking_delta", "run.result", "session.checkpoints", "session.damaged", "session.end", "session.rewound", "session.start", "session.stats", "sessions.list", "sessions.status_update", "stats.get", "token.cost_estimate_unavailable", "token.threshold", "tool.confirm_needed", "tool.disabled", "tool.enabled", "tool.executed", "tool.loop_detected", "tool.progress", "tool.started", "tools.list", "trust.persisted", "collab.annotation.added", "collab.annotation.resolved", "collab.event", "collab.injection.granted", "collab.participant.joined", "collab.participant.left", "collab.pause.granted", "collab.pause.released", "collab.state", "mailbox.agent_registered", "mailbox.agents", "mailbox.cleared", "mailbox.compacted", "mailbox.event", "mailbox.messages", "mailbox.sent", "mailbox.purged", "mailbox.received", "subagent.budget_extended", "subagent.event", "checkpoint.written", "codemap.file_event", "codemap.index_updated", "codemap.tool_executed", "codemap.tool_started", "file.saved", "files.list", "files.read", "files.tree", "files.written", "git.changes", "git.diff", "git.info", "process.list", "projects.added", "projects.list", "projects.selected", "terminal.exit", "terminal.output", "working_dir.changed", "worktree.cleanup_result", "worktree.diff_result", "worktree.event", "worktree.merge_result", "worktree.orphans", "worktree.state", "auth.oauth.status", "diag.get", "key.operation_result", "prefs.updated", "provider.catalog", "provider.models", "provider.probe", "providers.saved", "budget.decision", "budget.threshold_reached", "coordinator.stats", "coordinator.status", "eternal.iteration", "fleet.concurrency_update", "goal-state.updated", "goal.list", "goal.paused", "goal.resumed", "goal.saved", "goal.error", "goal.stopped", "goal.failed", "goal.completed", "goal.cleared", "goal.reverted", "goal.progress", "goal.state", "in_flight.ended", "in_flight.started", "plan.updated", "task.completed", "task.failed", "task.pending", "task.started", "tasks.updated", "todos.cleared", "todos.updated", "kanban.task.activity", "sdd.board.lifecycle_result", "sdd.board.list", "sdd.board.snapshot", "sdd.run.started", "sdd.spec.agent_text", "sdd.spec.error", "sdd.spec.snapshot", "specs.detail", "specs.list", "consensus.vote_cast", "consensus.vote_initiated", "consensus.vote_resolved", "cron.job_fired", "cron.snapshot", "techstack.job.cancelled", "techstack.job.failed", "techstack.job.progress", "techstack.job.started", "techstack.report.delivered", "techstack.report.ready", "techstack.snapshot.updated", "techstack.workspace.completed", "brain.answer", "brain.config", "brain.event", "brain.status", "chronicle.error", "chronicle.facet_result", "chronicle.facets_result", "chronicle.graph_result", "chronicle.metrics_result", "chronicle.query_result", "config.doctor.result", "design.list", "design.materialize", "design.set", "design.state", "design.swap", "design.tune", "design.use", "design.verify", "memory.event", "memory.list", "memory.sage.backfillRecoverable", "memory.sage.candidateResolve", "memory.sage.delete", "memory.sage.forFile", "memory.sage.get", "memory.sage.graph", "memory.sage.list", "memory.sage.listPage", "memory.sage.recover", "memory.sage.remember", "memory.sage.update", "mcp.content.error", "mcp.content.selected", "mcp.list", "mcp.operation_result", "mcp.prompts", "mcp.resources", "mcp.server.added", "mcp.server.connected", "mcp.server.disconnected", "mcp.server.discovered", "mcp.server.error", "mcp.server.reconnected", "mcp.server.removed", "mcp.server.sleeping", "mcp.server.updated", "mcp.server.waking", "prompts.content", "prompts.created", "prompts.favorite", "prompts.list", "prompts.recent", "prompts.search", "prompts.used", "skills.content", "skills.created", "skills.edited", "skills.exported", "skills.installed", "skills.list", "skills.uninstalled", "skills.updated"];
1
+ export declare const CLIENT_MESSAGE_TYPES: readonly ["abort", "ping", "user_message", "tool.confirm_result", "completion.request", "model.switch", "model.refine", "autonomy.switch", "context.clear", "context.compact", "context.debug", "context.editor.open", "context.editor.validate", "context.editor.apply", "context.mode.create", "context.mode.delete", "context.mode.switch", "context.mode.update", "context.modes.list", "context.repair", "mode.switch", "modes.list", "session.checkpoints", "session.delete", "session.new", "session.rename", "session.resume", "session.rewind", "session.save", "sessions.list", "side_effects.list", "stats.get", "todo.update", "todos.clear", "todos.get", "todos.remove", "collab.join", "collab.leave", "collab.annotate", "collab.resolve", "collab.request_pause", "collab.resume", "collab.grant_control", "collab.inject_tool", "mailbox.agents", "mailbox.clear", "mailbox.compact", "mailbox.messages", "mailbox.purge", "mailbox.send", "files.list", "files.read", "files.tree", "files.write", "git.changes", "git.diff", "git.info", "projects.add", "projects.list", "projects.select", "working_dir.set", "worktree.cleanup", "worktree.diff", "worktree.merge", "worktree.remove", "worktree.scan", "shell.open", "process.kill", "process.killAll", "process.list", "terminal.close", "terminal.create", "terminal.input", "terminal.resize", "codebase.index.server.shutdown", "connections.health", "diag.get", "key.add", "key.delete", "key.set_active", "key.update", "prefs.get", "prefs.update", "provider.add", "provider.clear_models", "provider.models", "provider.models.search", "provider.probe", "provider.remove", "provider.status.clear", "provider.status.get", "provider.status.retry", "provider.undo_clear", "provider.update", "providers.list", "providers.saved", "tool.disable", "tool.enable", "tools.list", "webui.shutdown", "goal-state.get", "goal.addTask", "goal.assess", "goal.assignTask", "goal.clear", "goal.get", "goal.list", "goal.load", "goal.moveTask", "goal.pause", "goal.resume", "goal.retryTask", "goal.revert", "goal.runTask", "goal.save", "goal.selectPhase", "goal.start", "goal.state", "goal.status", "goal.stop", "goal.taskStatus", "goal.toggleAutonomous", "plan.get", "plan.item.update", "plan.template_use", "task.update", "tasks.get", "sdd.board.cancel_task", "sdd.board.cleanup_worktrees", "sdd.board.delete_task", "sdd.board.destroy", "sdd.board.get", "sdd.board.list", "sdd.board.pause", "sdd.board.reassign", "sdd.board.resume", "sdd.board.retry", "sdd.board.retry_all_failed", "sdd.board.rollback", "sdd.board.set_task_fallbacks", "sdd.board.set_task_model", "sdd.board.set_task_verification", "sdd.board.split_task", "sdd.board.stop", "sdd.run.from_graph", "sdd.run.from_spec", "sdd.run.start", "sdd.spec.approve", "sdd.spec.discard", "sdd.spec.get", "sdd.spec.message", "sdd.spec.start", "specs.get", "specs.list", "specs.taskStatus", "brain.ask", "brain.config.get", "brain.config.set", "brain.risk", "brain.status", "chronicle.facet", "chronicle.facets", "chronicle.graph", "chronicle.metrics", "chronicle.query", "chronicle.status", "config.doctor", "design.list", "design.materialize", "design.set", "design.state", "design.swap", "design.tune", "design.use", "design.verify", "memory.list", "memory.sage.backfillRecoverable", "memory.sage.candidateResolve", "memory.sage.delete", "memory.sage.forFile", "memory.sage.get", "memory.sage.graph", "memory.sage.list", "memory.sage.listPage", "memory.sage.recover", "memory.sage.remember", "memory.sage.update", "auth.oauth.cancel", "auth.oauth.code", "auth.oauth.start", "mcp.add", "mcp.disable", "mcp.discover", "mcp.enable", "mcp.list", "mcp.prompt.get", "mcp.prompts", "mcp.remove", "mcp.resource.read", "mcp.resources", "mcp.restart", "mcp.sleep", "mcp.update", "mcp.wake", "prompts.content", "prompts.create", "prompts.favorite", "prompts.list", "prompts.recent", "prompts.search", "prompts.used", "skills.content", "skills.create", "skills.edit", "skills.export", "skills.install", "skills.list", "skills.uninstall", "skills.update"];
2
+ export declare const SERVER_MESSAGE_TYPES: readonly ["error", "log", "pong", "side_effects", "agent.status_changed", "agent.timeline.message", "client.status_update", "compaction.failed", "completion.result", "context.compacted", "context.debug", "context.editor.snapshot", "context.editor.validation", "context.editor.applied", "context.mode.changed", "context.modes.list", "context.repaired", "ctx.max_context", "ctx.pct", "delegate.completed", "delegate.started", "iteration.completed", "iteration.limit_reached", "iteration.started", "model.refine_result", "modes.list", "provider.active_blocked", "provider.error", "provider.fallback", "provider.response", "provider.retry", "provider.status_changed", "provider.stream_error", "provider.text_delta", "provider.thinking_delta", "run.result", "session.checkpoints", "session.damaged", "session.end", "session.rewound", "session.start", "session.stats", "sessions.list", "sessions.status_update", "stats.get", "token.cost_estimate_unavailable", "token.threshold", "tool.confirm_needed", "tool.disabled", "tool.enabled", "tool.executed", "tool.loop_detected", "tool.progress", "tool.started", "tools.list", "trust.persisted", "collab.annotation.added", "collab.annotation.resolved", "collab.event", "collab.injection.granted", "collab.participant.joined", "collab.participant.left", "collab.pause.granted", "collab.pause.released", "collab.state", "mailbox.agent_registered", "mailbox.agents", "mailbox.cleared", "mailbox.compacted", "mailbox.event", "mailbox.messages", "mailbox.sent", "mailbox.purged", "mailbox.received", "subagent.budget_extended", "subagent.event", "checkpoint.written", "codemap.file_event", "codemap.index_updated", "codemap.tool_executed", "codemap.tool_started", "file.saved", "files.list", "files.read", "files.tree", "files.written", "git.changes", "git.diff", "git.info", "process.list", "projects.added", "projects.list", "projects.selected", "terminal.exit", "terminal.output", "working_dir.changed", "worktree.cleanup_result", "worktree.diff_result", "worktree.event", "worktree.merge_result", "worktree.orphans", "worktree.state", "auth.oauth.status", "codebase.index.server.shutdown_result", "connections.health_error", "connections.health_result", "diag.get", "key.operation_result", "model.switch_result", "prefs.updated", "provider.catalog", "provider.models", "provider.models.search_result", "provider.probe", "provider.status.snapshot", "providers.saved", "budget.decision", "budget.threshold_reached", "coordinator.stats", "coordinator.status", "eternal.iteration", "fleet.concurrency_update", "goal-state.updated", "goal.assess.result", "goal.list", "goal.paused", "goal.resumed", "goal.saved", "goal.error", "goal.stopped", "goal.failed", "goal.completed", "goal.cleared", "goal.reverted", "goal.progress", "goal.state", "in_flight.ended", "in_flight.started", "plan.updated", "task.completed", "task.failed", "task.pending", "task.started", "tasks.updated", "todos.cleared", "todos.updated", "kanban.task.activity", "sdd.board.lifecycle_result", "sdd.board.list", "sdd.board.snapshot", "sdd.run.started", "sdd.spec.agent_text", "sdd.spec.error", "sdd.spec.snapshot", "specs.detail", "specs.list", "consensus.vote_cast", "consensus.vote_initiated", "consensus.vote_resolved", "cron.job_fired", "cron.snapshot", "techstack.job.cancelled", "techstack.job.failed", "techstack.job.progress", "techstack.job.started", "techstack.report.delivered", "techstack.report.ready", "techstack.snapshot.updated", "techstack.workspace.completed", "brain.answer", "brain.config", "brain.event", "brain.status", "chronicle.error", "chronicle.facet_result", "chronicle.facets_result", "chronicle.graph_result", "chronicle.metrics_result", "chronicle.query_result", "chronicle.status_result", "config.doctor.result", "design.list", "design.materialize", "design.set", "design.state", "design.swap", "design.tune", "design.use", "design.verify", "memory.event", "memory.list", "memory.sage.backfillRecoverable", "memory.sage.candidateResolve", "memory.sage.delete", "memory.sage.forFile", "memory.sage.get", "memory.sage.graph", "memory.sage.list", "memory.sage.listPage", "memory.sage.recover", "memory.sage.remember", "memory.sage.update", "mcp.content.error", "mcp.content.selected", "mcp.list", "mcp.operation_result", "mcp.prompts", "mcp.resources", "mcp.server.added", "mcp.server.connected", "mcp.server.disconnected", "mcp.server.discovered", "mcp.server.error", "mcp.server.reconnected", "mcp.server.removed", "mcp.server.sleeping", "mcp.server.updated", "mcp.server.waking", "prompts.content", "prompts.created", "prompts.favorite", "prompts.list", "prompts.recent", "prompts.search", "prompts.used", "skills.content", "skills.created", "skills.edited", "skills.exported", "skills.installed", "skills.list", "skills.uninstalled", "skills.updated"];
3
3
  export type ExactClientMessageType = (typeof CLIENT_MESSAGE_TYPES)[number];
4
4
  export type ExactServerMessageType = (typeof SERVER_MESSAGE_TYPES)[number];
5
5
  export declare function isRegisteredMessageType(type: string, direction: 'client' | 'server'): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/protocol/registry.ts"],"names":[],"mappings":"AA+BA,eAAO,MAAM,oBAAoB,+lHASvB,CAAC;AAEX,eAAO,MAAM,oBAAoB,63IAUvB,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3E,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAK3E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAO7F"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/protocol/registry.ts"],"names":[],"mappings":"AA+BA,eAAO,MAAM,oBAAoB,s6HASvB,CAAC;AAEX,eAAO,MAAM,oBAAoB,srJAUvB,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3E,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAK3E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAO7F"}
@@ -1 +1 @@
1
- {"version":3,"file":"replay-payload.d.ts","sourceRoot":"","sources":["../../src/protocol/replay-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAG1F;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,uFAAuF;IACvF,MAAM,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAC;IAC7C,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IACvC,aAAa,CAAC,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAC5C,WAAW,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;CACjC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,mBAAmB,CA8B5E"}
1
+ {"version":3,"file":"replay-payload.d.ts","sourceRoot":"","sources":["../../src/protocol/replay-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAO1F;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,uFAAuF;IACvF,MAAM,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAC;IAC7C,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IACvC,aAAa,CAAC,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAC5C,WAAW,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;CACjC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,mBAAmB,CA8B5E"}
@@ -1,3 +1,3 @@
1
- export declare const SERVER_CONVERSATION_MESSAGE_TYPES: readonly ['error', 'log', 'pong', 'side_effects', 'agent.status_changed', 'agent.timeline.message', 'client.status_update', 'compaction.failed', 'completion.result', 'context.compacted', 'context.debug', 'context.mode.changed', 'context.modes.list', 'context.repaired', 'ctx.max_context', 'ctx.pct', 'delegate.completed', 'delegate.started', 'iteration.completed', 'iteration.limit_reached', 'iteration.started', 'model.refine_result', 'modes.list', 'provider.active_blocked', 'provider.error', 'provider.fallback', 'provider.response', 'provider.retry', 'provider.status_changed', 'provider.stream_error', 'provider.text_delta', 'provider.thinking_delta', 'run.result', 'session.checkpoints', 'session.damaged', 'session.end', 'session.rewound', 'session.start', 'session.stats', 'sessions.list', 'sessions.status_update', 'stats.get', 'token.cost_estimate_unavailable', 'token.threshold', 'tool.confirm_needed', 'tool.disabled', 'tool.enabled', 'tool.executed', 'tool.loop_detected', 'tool.progress', 'tool.started', 'tools.list', 'trust.persisted'];
1
+ export declare const SERVER_CONVERSATION_MESSAGE_TYPES: readonly ['error', 'log', 'pong', 'side_effects', 'agent.status_changed', 'agent.timeline.message', 'client.status_update', 'compaction.failed', 'completion.result', 'context.compacted', 'context.debug', 'context.editor.snapshot', 'context.editor.validation', 'context.editor.applied', 'context.mode.changed', 'context.modes.list', 'context.repaired', 'ctx.max_context', 'ctx.pct', 'delegate.completed', 'delegate.started', 'iteration.completed', 'iteration.limit_reached', 'iteration.started', 'model.refine_result', 'modes.list', 'provider.active_blocked', 'provider.error', 'provider.fallback', 'provider.response', 'provider.retry', 'provider.status_changed', 'provider.stream_error', 'provider.text_delta', 'provider.thinking_delta', 'run.result', 'session.checkpoints', 'session.damaged', 'session.end', 'session.rewound', 'session.start', 'session.stats', 'sessions.list', 'sessions.status_update', 'stats.get', 'token.cost_estimate_unavailable', 'token.threshold', 'tool.confirm_needed', 'tool.disabled', 'tool.enabled', 'tool.executed', 'tool.loop_detected', 'tool.progress', 'tool.started', 'tools.list', 'trust.persisted'];
2
2
  export declare const SERVER_COLLABORATION_MESSAGE_TYPES: readonly ['collab.annotation.added', 'collab.annotation.resolved', 'collab.event', 'collab.injection.granted', 'collab.participant.joined', 'collab.participant.left', 'collab.pause.granted', 'collab.pause.released', 'collab.state', 'mailbox.agent_registered', 'mailbox.agents', 'mailbox.cleared', 'mailbox.compacted', 'mailbox.event', 'mailbox.messages', 'mailbox.sent', 'mailbox.purged', 'mailbox.received', 'subagent.budget_extended', 'subagent.event'];
3
3
  //# sourceMappingURL=server-conversation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-conversation.d.ts","sourceRoot":"","sources":["../../src/protocol/server-conversation.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iCAAiC,YAC5C,OAAO,EACP,KAAK,EACL,MAAM,EACN,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,WAAW,EACX,iCAAiC,EACjC,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,iBAAiB,CACT,CAAC;AAEX,eAAO,MAAM,kCAAkC,YAC7C,yBAAyB,EACzB,4BAA4B,EAC5B,cAAc,EACd,0BAA0B,EAC1B,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,0BAA0B,EAC1B,gBAAgB,CACR,CAAC"}
1
+ {"version":3,"file":"server-conversation.d.ts","sourceRoot":"","sources":["../../src/protocol/server-conversation.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iCAAiC,YAC5C,OAAO,EACP,KAAK,EACL,MAAM,EACN,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,WAAW,EACX,iCAAiC,EACjC,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,iBAAiB,CACT,CAAC;AAEX,eAAO,MAAM,kCAAkC,YAC7C,yBAAyB,EACzB,4BAA4B,EAC5B,cAAc,EACd,0BAA0B,EAC1B,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,0BAA0B,EAC1B,gBAAgB,CACR,CAAC"}
@@ -1,3 +1,3 @@
1
- export declare const SERVER_KNOWLEDGE_MESSAGE_TYPES: readonly ['brain.answer', 'brain.config', 'brain.event', 'brain.status', 'chronicle.error', 'chronicle.facet_result', 'chronicle.facets_result', 'chronicle.graph_result', 'chronicle.metrics_result', 'chronicle.query_result', 'config.doctor.result', 'design.list', 'design.materialize', 'design.set', 'design.state', 'design.swap', 'design.tune', 'design.use', 'design.verify', 'memory.event', 'memory.list', 'memory.sage.backfillRecoverable', 'memory.sage.candidateResolve', 'memory.sage.delete', 'memory.sage.forFile', 'memory.sage.get', 'memory.sage.graph', 'memory.sage.list', 'memory.sage.listPage', 'memory.sage.recover', 'memory.sage.remember', 'memory.sage.update'];
1
+ export declare const SERVER_KNOWLEDGE_MESSAGE_TYPES: readonly ['brain.answer', 'brain.config', 'brain.event', 'brain.status', 'chronicle.error', 'chronicle.facet_result', 'chronicle.facets_result', 'chronicle.graph_result', 'chronicle.metrics_result', 'chronicle.query_result', 'chronicle.status_result', 'config.doctor.result', 'design.list', 'design.materialize', 'design.set', 'design.state', 'design.swap', 'design.tune', 'design.use', 'design.verify', 'memory.event', 'memory.list', 'memory.sage.backfillRecoverable', 'memory.sage.candidateResolve', 'memory.sage.delete', 'memory.sage.forFile', 'memory.sage.get', 'memory.sage.graph', 'memory.sage.list', 'memory.sage.listPage', 'memory.sage.recover', 'memory.sage.remember', 'memory.sage.update'];
2
2
  export declare const SERVER_EXTENSION_MESSAGE_TYPES: readonly ['mcp.content.error', 'mcp.content.selected', 'mcp.list', 'mcp.operation_result', 'mcp.prompts', 'mcp.resources', 'mcp.server.added', 'mcp.server.connected', 'mcp.server.disconnected', 'mcp.server.discovered', 'mcp.server.error', 'mcp.server.reconnected', 'mcp.server.removed', 'mcp.server.sleeping', 'mcp.server.updated', 'mcp.server.waking', 'prompts.content', 'prompts.created', 'prompts.favorite', 'prompts.list', 'prompts.recent', 'prompts.search', 'prompts.used', 'skills.content', 'skills.created', 'skills.edited', 'skills.exported', 'skills.installed', 'skills.list', 'skills.uninstalled', 'skills.updated'];
3
3
  //# sourceMappingURL=server-integrations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-integrations.d.ts","sourceRoot":"","sources":["../../src/protocol/server-integrations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,YACzC,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,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,sBAAsB,EACtB,UAAU,EACV,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,gBAAgB,CACR,CAAC"}
1
+ {"version":3,"file":"server-integrations.d.ts","sourceRoot":"","sources":["../../src/protocol/server-integrations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,YACzC,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,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,sBAAsB,EACtB,UAAU,EACV,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,gBAAgB,CACR,CAAC"}