@wrongstack/webui-server 0.293.0 → 0.295.1

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 (247) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +19499 -14317
  4. package/dist/index.js.map +4 -4
  5. package/dist/protocol/client-conversation.d.ts +3 -0
  6. package/dist/protocol/client-conversation.d.ts.map +1 -0
  7. package/dist/protocol/client-integrations.d.ts +3 -0
  8. package/dist/protocol/client-integrations.d.ts.map +1 -0
  9. package/dist/protocol/client-operations.d.ts +3 -0
  10. package/dist/protocol/client-operations.d.ts.map +1 -0
  11. package/dist/protocol/client-workspace.d.ts +3 -0
  12. package/dist/protocol/client-workspace.d.ts.map +1 -0
  13. package/dist/protocol/connection-fsm.d.ts +39 -0
  14. package/dist/protocol/connection-fsm.d.ts.map +1 -0
  15. package/dist/protocol/decoder.d.ts +6 -0
  16. package/dist/protocol/decoder.d.ts.map +1 -0
  17. package/dist/protocol/index.d.ts +8 -0
  18. package/dist/protocol/index.d.ts.map +1 -0
  19. package/dist/protocol/index.js +874 -0
  20. package/dist/protocol/index.js.map +7 -0
  21. package/dist/protocol/projections.d.ts +113 -0
  22. package/dist/protocol/projections.d.ts.map +1 -0
  23. package/dist/protocol/registry.d.ts +6 -0
  24. package/dist/protocol/registry.d.ts.map +1 -0
  25. package/dist/protocol/replay-payload.d.ts +41 -0
  26. package/dist/protocol/replay-payload.d.ts.map +1 -0
  27. package/dist/protocol/server-conversation.d.ts +3 -0
  28. package/dist/protocol/server-conversation.d.ts.map +1 -0
  29. package/dist/protocol/server-integrations.d.ts +3 -0
  30. package/dist/protocol/server-integrations.d.ts.map +1 -0
  31. package/dist/protocol/server-operations.d.ts +4 -0
  32. package/dist/protocol/server-operations.d.ts.map +1 -0
  33. package/dist/protocol/server-workspace.d.ts +3 -0
  34. package/dist/protocol/server-workspace.d.ts.map +1 -0
  35. package/dist/protocol/types.d.ts +24 -0
  36. package/dist/protocol/types.d.ts.map +1 -0
  37. package/dist/protocol/version.d.ts +20 -0
  38. package/dist/protocol/version.d.ts.map +1 -0
  39. package/dist/server/agent-roster-handlers.d.ts +31 -0
  40. package/dist/server/agent-roster-handlers.d.ts.map +1 -0
  41. package/dist/server/agent-roster-routes.d.ts +8 -0
  42. package/dist/server/agent-roster-routes.d.ts.map +1 -0
  43. package/dist/server/autonomy-routes.d.ts +9 -0
  44. package/dist/server/autonomy-routes.d.ts.map +1 -0
  45. package/dist/server/backend-services.d.ts +19 -6
  46. package/dist/server/backend-services.d.ts.map +1 -1
  47. package/dist/server/boot.d.ts +4 -1
  48. package/dist/server/boot.d.ts.map +1 -1
  49. package/dist/server/brain-handlers.d.ts +47 -0
  50. package/dist/server/brain-handlers.d.ts.map +1 -0
  51. package/dist/server/chronicle-routes.d.ts +14 -0
  52. package/dist/server/chronicle-routes.d.ts.map +1 -0
  53. package/dist/server/client-presence.d.ts +26 -0
  54. package/dist/server/client-presence.d.ts.map +1 -0
  55. package/dist/server/client-transport-routes.d.ts +8 -0
  56. package/dist/server/client-transport-routes.d.ts.map +1 -0
  57. package/dist/server/codebase-indexing.d.ts +3 -1
  58. package/dist/server/codebase-indexing.d.ts.map +1 -1
  59. package/dist/server/codemap-cache.d.ts +14 -0
  60. package/dist/server/codemap-cache.d.ts.map +1 -0
  61. package/dist/server/codemap-handlers.d.ts +2 -3
  62. package/dist/server/codemap-handlers.d.ts.map +1 -1
  63. package/dist/server/codemap-telemetry.d.ts.map +1 -1
  64. package/dist/server/collaboration-ws-handler.d.ts +3 -1
  65. package/dist/server/collaboration-ws-handler.d.ts.map +1 -1
  66. package/dist/server/completion-handlers.d.ts +2 -1
  67. package/dist/server/completion-handlers.d.ts.map +1 -1
  68. package/dist/server/completion-routes.d.ts +7 -0
  69. package/dist/server/completion-routes.d.ts.map +1 -0
  70. package/dist/server/config-doctor.d.ts +11 -0
  71. package/dist/server/config-doctor.d.ts.map +1 -0
  72. package/dist/server/connection-handler.d.ts +9 -46
  73. package/dist/server/connection-handler.d.ts.map +1 -1
  74. package/dist/server/connection-lifecycle.d.ts +43 -0
  75. package/dist/server/connection-lifecycle.d.ts.map +1 -0
  76. package/dist/server/content-routes.d.ts +15 -0
  77. package/dist/server/content-routes.d.ts.map +1 -0
  78. package/dist/server/conversation-operations.d.ts +28 -0
  79. package/dist/server/conversation-operations.d.ts.map +1 -0
  80. package/dist/server/conversation-routes.d.ts +10 -0
  81. package/dist/server/conversation-routes.d.ts.map +1 -0
  82. package/dist/server/custom-context-modes.d.ts +1 -1
  83. package/dist/server/custom-context-modes.d.ts.map +1 -1
  84. package/dist/server/design-handlers.d.ts +8 -0
  85. package/dist/server/design-handlers.d.ts.map +1 -1
  86. package/dist/server/discover-mailbox-bridge.d.ts.map +1 -1
  87. package/dist/server/embedded-host-adapters.d.ts +96 -0
  88. package/dist/server/embedded-host-adapters.d.ts.map +1 -0
  89. package/dist/server/embedded-lifecycle.d.ts +113 -0
  90. package/dist/server/embedded-lifecycle.d.ts.map +1 -0
  91. package/dist/server/embedded-message-router.d.ts +64 -0
  92. package/dist/server/embedded-message-router.d.ts.map +1 -0
  93. package/dist/server/entry.js +17227 -14052
  94. package/dist/server/entry.js.map +4 -4
  95. package/dist/server/eternal-iteration-broadcast.d.ts +1 -1
  96. package/dist/server/eternal-iteration-broadcast.d.ts.map +1 -1
  97. package/dist/server/file-handlers.d.ts.map +1 -1
  98. package/dist/server/frontend-static-serve.d.ts +133 -0
  99. package/dist/server/frontend-static-serve.d.ts.map +1 -0
  100. package/dist/server/git-process.d.ts +4 -0
  101. package/dist/server/git-process.d.ts.map +1 -0
  102. package/dist/server/goal-snapshot-routes.d.ts +7 -0
  103. package/dist/server/goal-snapshot-routes.d.ts.map +1 -0
  104. package/dist/server/goal-ws-handler.d.ts +3 -1
  105. package/dist/server/goal-ws-handler.d.ts.map +1 -1
  106. package/dist/server/handlers/worklist-handlers.d.ts +14 -20
  107. package/dist/server/handlers/worklist-handlers.d.ts.map +1 -1
  108. package/dist/server/handlers.js +150 -121
  109. package/dist/server/handlers.js.map +3 -3
  110. package/dist/server/host-routes.d.ts +7 -0
  111. package/dist/server/host-routes.d.ts.map +1 -0
  112. package/dist/server/http-server/analytics-handler.d.ts +2 -0
  113. package/dist/server/http-server/analytics-handler.d.ts.map +1 -1
  114. package/dist/server/http-server/api-handlers.d.ts.map +1 -1
  115. package/dist/server/http-server.d.ts +20 -23
  116. package/dist/server/http-server.d.ts.map +1 -1
  117. package/dist/server/index.d.ts +57 -22
  118. package/dist/server/index.d.ts.map +1 -1
  119. package/dist/server/instance-registry.d.ts +1 -3
  120. package/dist/server/instance-registry.d.ts.map +1 -1
  121. package/dist/server/introspection-routes.d.ts +19 -0
  122. package/dist/server/introspection-routes.d.ts.map +1 -0
  123. package/dist/server/kanban-board-watcher.d.ts +19 -0
  124. package/dist/server/kanban-board-watcher.d.ts.map +1 -0
  125. package/dist/server/kanban-dispatch.d.ts +42 -0
  126. package/dist/server/kanban-dispatch.d.ts.map +1 -0
  127. package/dist/server/kanban-host-routes.d.ts +10 -0
  128. package/dist/server/kanban-host-routes.d.ts.map +1 -0
  129. package/dist/server/kanban-routes.d.ts +13 -3
  130. package/dist/server/kanban-routes.d.ts.map +1 -1
  131. package/dist/server/kanban-run-mirror.d.ts +76 -0
  132. package/dist/server/kanban-run-mirror.d.ts.map +1 -0
  133. package/dist/server/kanban-supervisor.d.ts +47 -0
  134. package/dist/server/kanban-supervisor.d.ts.map +1 -0
  135. package/dist/server/mailbox-handlers.d.ts +12 -4
  136. package/dist/server/mailbox-handlers.d.ts.map +1 -1
  137. package/dist/server/mailbox-routes.d.ts +8 -0
  138. package/dist/server/mailbox-routes.d.ts.map +1 -1
  139. package/dist/server/mcp-handlers.d.ts +4 -0
  140. package/dist/server/mcp-handlers.d.ts.map +1 -1
  141. package/dist/server/memory-handlers.d.ts +54 -46
  142. package/dist/server/memory-handlers.d.ts.map +1 -1
  143. package/dist/server/memory-routes.d.ts +11 -0
  144. package/dist/server/memory-routes.d.ts.map +1 -0
  145. package/dist/server/message-dispatcher.d.ts +3 -4
  146. package/dist/server/message-dispatcher.d.ts.map +1 -1
  147. package/dist/server/mode-handlers.d.ts +6 -15
  148. package/dist/server/mode-handlers.d.ts.map +1 -1
  149. package/dist/server/mode-operations.d.ts +24 -0
  150. package/dist/server/mode-operations.d.ts.map +1 -0
  151. package/dist/server/mode-routes.d.ts +2 -0
  152. package/dist/server/mode-routes.d.ts.map +1 -1
  153. package/dist/server/model-auto-discovery.d.ts +1 -1
  154. package/dist/server/model-auto-discovery.d.ts.map +1 -1
  155. package/dist/server/model-catalog.d.ts +1 -1
  156. package/dist/server/model-catalog.d.ts.map +1 -1
  157. package/dist/server/model-operations.d.ts +29 -0
  158. package/dist/server/model-operations.d.ts.map +1 -0
  159. package/dist/server/network-info.d.ts +50 -0
  160. package/dist/server/network-info.d.ts.map +1 -0
  161. package/dist/server/path-containment.d.ts.map +1 -1
  162. package/dist/server/port-utils.d.ts +18 -25
  163. package/dist/server/port-utils.d.ts.map +1 -1
  164. package/dist/server/pre-context-services.d.ts +32 -5
  165. package/dist/server/pre-context-services.d.ts.map +1 -1
  166. package/dist/server/pref-helpers.d.ts +1 -3
  167. package/dist/server/pref-helpers.d.ts.map +1 -1
  168. package/dist/server/prefs-handlers.d.ts +22 -0
  169. package/dist/server/prefs-handlers.d.ts.map +1 -0
  170. package/dist/server/prefs-routes.d.ts +5 -0
  171. package/dist/server/prefs-routes.d.ts.map +1 -1
  172. package/dist/server/privileged-actions.d.ts +16 -0
  173. package/dist/server/privileged-actions.d.ts.map +1 -0
  174. package/dist/server/process-handlers.d.ts +8 -6
  175. package/dist/server/process-handlers.d.ts.map +1 -1
  176. package/dist/server/process-routes.d.ts +9 -0
  177. package/dist/server/process-routes.d.ts.map +1 -0
  178. package/dist/server/project-handlers.d.ts +25 -33
  179. package/dist/server/project-handlers.d.ts.map +1 -1
  180. package/dist/server/projects-manifest.d.ts +8 -0
  181. package/dist/server/projects-manifest.d.ts.map +1 -1
  182. package/dist/server/prompts-handlers.d.ts +2 -1
  183. package/dist/server/prompts-handlers.d.ts.map +1 -1
  184. package/dist/server/provider-config-io.d.ts +2 -2
  185. package/dist/server/provider-config-io.d.ts.map +1 -1
  186. package/dist/server/provider-config-standalone.d.ts +5 -3
  187. package/dist/server/provider-config-standalone.d.ts.map +1 -1
  188. package/dist/server/provider-handlers.d.ts +63 -6
  189. package/dist/server/provider-handlers.d.ts.map +1 -1
  190. package/dist/server/provider-keys.d.ts +1 -1
  191. package/dist/server/provider-keys.d.ts.map +1 -1
  192. package/dist/server/provider-routes.d.ts +28 -2
  193. package/dist/server/provider-routes.d.ts.map +1 -1
  194. package/dist/server/provider-store.d.ts +5 -4
  195. package/dist/server/provider-store.d.ts.map +1 -1
  196. package/dist/server/route-family-dispatcher.d.ts +71 -0
  197. package/dist/server/route-family-dispatcher.d.ts.map +1 -0
  198. package/dist/server/routes.d.ts +17 -7
  199. package/dist/server/routes.d.ts.map +1 -1
  200. package/dist/server/sdd-board-ws-handler.d.ts +5 -1
  201. package/dist/server/sdd-board-ws-handler.d.ts.map +1 -1
  202. package/dist/server/sdd-wizard-wiring.d.ts +14 -3
  203. package/dist/server/sdd-wizard-wiring.d.ts.map +1 -1
  204. package/dist/server/sdd-wizard-ws-handler.d.ts.map +1 -1
  205. package/dist/server/server-runtime.d.ts +16 -12
  206. package/dist/server/server-runtime.d.ts.map +1 -1
  207. package/dist/server/session-handlers.d.ts +30 -11
  208. package/dist/server/session-handlers.d.ts.map +1 -1
  209. package/dist/server/session-history.d.ts +1 -1
  210. package/dist/server/session-history.d.ts.map +1 -1
  211. package/dist/server/setup-event-projection.d.ts +10 -0
  212. package/dist/server/setup-event-projection.d.ts.map +1 -0
  213. package/dist/server/setup-events-watcher.d.ts +13 -0
  214. package/dist/server/setup-events-watcher.d.ts.map +1 -0
  215. package/dist/server/setup-events.d.ts +11 -21
  216. package/dist/server/setup-events.d.ts.map +1 -1
  217. package/dist/server/setup-screen.d.ts +2 -1
  218. package/dist/server/setup-screen.d.ts.map +1 -1
  219. package/dist/server/shell-open.d.ts +26 -2
  220. package/dist/server/shell-open.d.ts.map +1 -1
  221. package/dist/server/skills-handlers.d.ts +2 -2
  222. package/dist/server/skills-handlers.d.ts.map +1 -1
  223. package/dist/server/specs-ws-handler.d.ts.map +1 -1
  224. package/dist/server/standalone-session-identity.d.ts +3 -2
  225. package/dist/server/standalone-session-identity.d.ts.map +1 -1
  226. package/dist/server/start-webui.d.ts +9 -1
  227. package/dist/server/start-webui.d.ts.map +1 -1
  228. package/dist/server/stream-coalescer.d.ts +49 -0
  229. package/dist/server/stream-coalescer.d.ts.map +1 -0
  230. package/dist/server/techstack-handlers.d.ts +12 -2
  231. package/dist/server/techstack-handlers.d.ts.map +1 -1
  232. package/dist/server/terminal-ws-handler.d.ts +5 -3
  233. package/dist/server/terminal-ws-handler.d.ts.map +1 -1
  234. package/dist/server/types.d.ts +10 -3
  235. package/dist/server/types.d.ts.map +1 -1
  236. package/dist/server/worklist-routes.d.ts +21 -0
  237. package/dist/server/worklist-routes.d.ts.map +1 -0
  238. package/dist/server/worktree-routes.d.ts +10 -0
  239. package/dist/server/worktree-routes.d.ts.map +1 -0
  240. package/dist/server/worktree-ws-handler.d.ts +2 -1
  241. package/dist/server/worktree-ws-handler.d.ts.map +1 -1
  242. package/dist/server/ws-auth.d.ts.map +1 -1
  243. package/dist/server/ws-payload-validation.d.ts +11 -0
  244. package/dist/server/ws-payload-validation.d.ts.map +1 -1
  245. package/dist/server/ws-utils.d.ts +8 -0
  246. package/dist/server/ws-utils.d.ts.map +1 -1
  247. package/package.json +14 -10
@@ -0,0 +1,874 @@
1
+ // src/protocol/connection-fsm.ts
2
+ var DEFAULT_SURFACE_CONNECTION_CONFIG = {
3
+ maxReconnectAttempts: 10,
4
+ initialBackoffMs: 1e3,
5
+ maxBackoffMs: 3e4,
6
+ backoffMultiplier: 2,
7
+ jitterRatio: 0,
8
+ queueLimit: 1e3,
9
+ heartbeatIntervalMs: 0,
10
+ heartbeatTimeoutMs: 0
11
+ };
12
+ function createSurfaceConnectionState() {
13
+ return { phase: "idle", reconnectAttempt: 0, lastActivityAt: null, stopped: false };
14
+ }
15
+ function markConnectionConnecting(state) {
16
+ if (state.stopped) return state;
17
+ return { ...state, phase: "connecting" };
18
+ }
19
+ function markConnectionOpen(state, now = Date.now()) {
20
+ return {
21
+ ...state,
22
+ phase: "open",
23
+ reconnectAttempt: 0,
24
+ lastActivityAt: now,
25
+ stopped: false
26
+ };
27
+ }
28
+ function markConnectionActivity(state, now = Date.now()) {
29
+ return { ...state, lastActivityAt: now };
30
+ }
31
+ function stopConnection(state) {
32
+ return { ...state, phase: "closed", stopped: true };
33
+ }
34
+ function resetConnection(state) {
35
+ return { ...state, phase: "idle", reconnectAttempt: 0, stopped: false };
36
+ }
37
+ function planConnectionReconnect(state, config, now = Date.now(), random = Math.random) {
38
+ if (state.stopped || state.reconnectAttempt >= config.maxReconnectAttempts) {
39
+ return { state: { ...state, phase: "closed" }, plan: null };
40
+ }
41
+ const attempt = state.reconnectAttempt + 1;
42
+ const base = Math.min(
43
+ config.initialBackoffMs * config.backoffMultiplier ** (attempt - 1),
44
+ config.maxBackoffMs
45
+ );
46
+ const centeredJitter = (random() * 2 - 1) * config.jitterRatio;
47
+ const delayMs = Math.max(0, Math.round(base * (1 + centeredJitter)));
48
+ return {
49
+ state: { ...state, phase: "reconnecting", reconnectAttempt: attempt },
50
+ plan: { attempt, delayMs, retryAt: now + delayMs }
51
+ };
52
+ }
53
+ function isConnectionHeartbeatTimedOut(state, config, now = Date.now()) {
54
+ if (state.phase !== "open" || state.lastActivityAt === null) return false;
55
+ if (config.heartbeatIntervalMs <= 0) return false;
56
+ return now - state.lastActivityAt > config.heartbeatIntervalMs + config.heartbeatTimeoutMs;
57
+ }
58
+ function enqueueBounded(queue, item, limit) {
59
+ if (limit <= 0) return { queue: [], dropped: item };
60
+ if (queue.length < limit) return { queue: [...queue, item], dropped: null };
61
+ return { queue: [...queue.slice(queue.length - limit + 1), item], dropped: queue[0] ?? null };
62
+ }
63
+
64
+ // src/protocol/client-conversation.ts
65
+ var CLIENT_CONVERSATION_MESSAGE_TYPES = [
66
+ "abort",
67
+ "ping",
68
+ "user_message",
69
+ "tool.confirm_result",
70
+ "completion.request",
71
+ "model.switch",
72
+ "model.refine",
73
+ "autonomy.switch",
74
+ "context.clear",
75
+ "context.compact",
76
+ "context.debug",
77
+ "context.mode.create",
78
+ "context.mode.delete",
79
+ "context.mode.switch",
80
+ "context.mode.update",
81
+ "context.modes.list",
82
+ "context.repair",
83
+ "mode.switch",
84
+ "modes.list",
85
+ "session.checkpoints",
86
+ "session.delete",
87
+ "session.new",
88
+ "session.rename",
89
+ "session.resume",
90
+ "session.rewind",
91
+ "session.save",
92
+ "sessions.list",
93
+ "side_effects.list",
94
+ "stats.get",
95
+ "todo.update",
96
+ "todos.clear",
97
+ "todos.get",
98
+ "todos.remove"
99
+ ];
100
+ var CLIENT_COLLABORATION_MESSAGE_TYPES = [
101
+ "collab.join",
102
+ "collab.leave",
103
+ "collab.annotate",
104
+ "collab.resolve",
105
+ "collab.request_pause",
106
+ "collab.resume",
107
+ "collab.grant_control",
108
+ "collab.inject_tool",
109
+ "mailbox.agents",
110
+ "mailbox.clear",
111
+ "mailbox.compact",
112
+ "mailbox.messages",
113
+ "mailbox.purge",
114
+ "mailbox.send"
115
+ ];
116
+
117
+ // src/protocol/client-integrations.ts
118
+ var CLIENT_KNOWLEDGE_MESSAGE_TYPES = [
119
+ "brain.ask",
120
+ "brain.config.get",
121
+ "brain.config.set",
122
+ "brain.risk",
123
+ "brain.status",
124
+ "chronicle.facet",
125
+ "chronicle.facets",
126
+ "chronicle.graph",
127
+ "chronicle.metrics",
128
+ "chronicle.query",
129
+ "config.doctor",
130
+ "design.list",
131
+ "design.materialize",
132
+ "design.set",
133
+ "design.state",
134
+ "design.swap",
135
+ "design.tune",
136
+ "design.use",
137
+ "design.verify",
138
+ "memory.list",
139
+ "memory.sage.backfillRecoverable",
140
+ "memory.sage.candidateResolve",
141
+ "memory.sage.delete",
142
+ "memory.sage.forFile",
143
+ "memory.sage.get",
144
+ "memory.sage.graph",
145
+ "memory.sage.list",
146
+ "memory.sage.listPage",
147
+ "memory.sage.recover",
148
+ "memory.sage.remember",
149
+ "memory.sage.update"
150
+ ];
151
+ var CLIENT_EXTENSION_MESSAGE_TYPES = [
152
+ "auth.oauth.cancel",
153
+ "auth.oauth.code",
154
+ "auth.oauth.start",
155
+ "mcp.add",
156
+ "mcp.disable",
157
+ "mcp.discover",
158
+ "mcp.enable",
159
+ "mcp.list",
160
+ "mcp.prompt.get",
161
+ "mcp.prompts",
162
+ "mcp.remove",
163
+ "mcp.resource.read",
164
+ "mcp.resources",
165
+ "mcp.restart",
166
+ "mcp.sleep",
167
+ "mcp.update",
168
+ "mcp.wake",
169
+ "prompts.content",
170
+ "prompts.create",
171
+ "prompts.favorite",
172
+ "prompts.list",
173
+ "prompts.recent",
174
+ "prompts.search",
175
+ "prompts.used",
176
+ "skills.content",
177
+ "skills.create",
178
+ "skills.edit",
179
+ "skills.export",
180
+ "skills.install",
181
+ "skills.list",
182
+ "skills.uninstall",
183
+ "skills.update"
184
+ ];
185
+
186
+ // src/protocol/client-operations.ts
187
+ var CLIENT_GOAL_MESSAGE_TYPES = [
188
+ "goal-state.get",
189
+ "goal.addTask",
190
+ "goal.assignTask",
191
+ "goal.clear",
192
+ "goal.get",
193
+ "goal.list",
194
+ "goal.load",
195
+ "goal.moveTask",
196
+ "goal.pause",
197
+ "goal.resume",
198
+ "goal.retryTask",
199
+ "goal.revert",
200
+ "goal.runTask",
201
+ "goal.save",
202
+ "goal.selectPhase",
203
+ "goal.start",
204
+ "goal.state",
205
+ "goal.status",
206
+ "goal.stop",
207
+ "goal.taskStatus",
208
+ "goal.toggleAutonomous",
209
+ "plan.get",
210
+ "plan.item.update",
211
+ "plan.template_use",
212
+ "task.update",
213
+ "tasks.get"
214
+ ];
215
+ var CLIENT_SDD_MESSAGE_TYPES = [
216
+ "sdd.board.cancel_task",
217
+ "sdd.board.cleanup_worktrees",
218
+ "sdd.board.delete_task",
219
+ "sdd.board.destroy",
220
+ "sdd.board.get",
221
+ "sdd.board.list",
222
+ "sdd.board.pause",
223
+ "sdd.board.reassign",
224
+ "sdd.board.resume",
225
+ "sdd.board.retry",
226
+ "sdd.board.retry_all_failed",
227
+ "sdd.board.rollback",
228
+ "sdd.board.set_task_fallbacks",
229
+ "sdd.board.set_task_model",
230
+ "sdd.board.set_task_verification",
231
+ "sdd.board.split_task",
232
+ "sdd.board.stop",
233
+ "sdd.run.start",
234
+ "sdd.spec.approve",
235
+ "sdd.spec.get",
236
+ "sdd.spec.message",
237
+ "sdd.spec.start",
238
+ "specs.get",
239
+ "specs.list",
240
+ "specs.taskStatus"
241
+ ];
242
+
243
+ // src/protocol/client-workspace.ts
244
+ var CLIENT_WORKSPACE_MESSAGE_TYPES = [
245
+ "files.list",
246
+ "files.read",
247
+ "files.tree",
248
+ "files.write",
249
+ "git.changes",
250
+ "git.diff",
251
+ "git.info",
252
+ "projects.add",
253
+ "projects.list",
254
+ "projects.select",
255
+ "working_dir.set",
256
+ "worktree.cleanup",
257
+ "worktree.diff",
258
+ "worktree.merge",
259
+ "worktree.remove",
260
+ "worktree.scan",
261
+ "shell.open",
262
+ "process.kill",
263
+ "process.killAll",
264
+ "process.list",
265
+ "terminal.close",
266
+ "terminal.create",
267
+ "terminal.input",
268
+ "terminal.resize"
269
+ ];
270
+ var CLIENT_CONFIGURATION_MESSAGE_TYPES = [
271
+ "diag.get",
272
+ "key.add",
273
+ "key.delete",
274
+ "key.set_active",
275
+ "key.update",
276
+ "prefs.get",
277
+ "prefs.update",
278
+ "provider.add",
279
+ "provider.clear_models",
280
+ "provider.models",
281
+ "provider.probe",
282
+ "provider.remove",
283
+ "provider.undo_clear",
284
+ "provider.update",
285
+ "providers.list",
286
+ "providers.saved",
287
+ "tool.disable",
288
+ "tool.enable",
289
+ "tools.list",
290
+ "webui.shutdown"
291
+ ];
292
+
293
+ // src/protocol/server-conversation.ts
294
+ var SERVER_CONVERSATION_MESSAGE_TYPES = [
295
+ "error",
296
+ "log",
297
+ "pong",
298
+ "side_effects",
299
+ "agent.status_changed",
300
+ "agent.timeline.message",
301
+ "client.status_update",
302
+ "compaction.failed",
303
+ "completion.result",
304
+ "context.compacted",
305
+ "context.debug",
306
+ "context.mode.changed",
307
+ "context.modes.list",
308
+ "context.repaired",
309
+ "ctx.max_context",
310
+ "ctx.pct",
311
+ "delegate.completed",
312
+ "delegate.started",
313
+ "iteration.completed",
314
+ "iteration.limit_reached",
315
+ "iteration.started",
316
+ "model.refine_result",
317
+ "modes.list",
318
+ "provider.active_blocked",
319
+ "provider.error",
320
+ "provider.fallback",
321
+ "provider.response",
322
+ "provider.retry",
323
+ "provider.status_changed",
324
+ "provider.stream_error",
325
+ "provider.text_delta",
326
+ "provider.thinking_delta",
327
+ "run.result",
328
+ "session.checkpoints",
329
+ "session.damaged",
330
+ "session.end",
331
+ "session.rewound",
332
+ "session.start",
333
+ "session.stats",
334
+ "sessions.list",
335
+ "sessions.status_update",
336
+ "stats.get",
337
+ "token.cost_estimate_unavailable",
338
+ "token.threshold",
339
+ "tool.confirm_needed",
340
+ "tool.disabled",
341
+ "tool.enabled",
342
+ "tool.executed",
343
+ "tool.loop_detected",
344
+ "tool.progress",
345
+ "tool.started",
346
+ "tools.list",
347
+ "trust.persisted"
348
+ ];
349
+ var SERVER_COLLABORATION_MESSAGE_TYPES = [
350
+ "collab.annotation.added",
351
+ "collab.annotation.resolved",
352
+ "collab.event",
353
+ "collab.injection.granted",
354
+ "collab.participant.joined",
355
+ "collab.participant.left",
356
+ "collab.pause.granted",
357
+ "collab.pause.released",
358
+ "collab.state",
359
+ "mailbox.agent_registered",
360
+ "mailbox.agents",
361
+ "mailbox.cleared",
362
+ "mailbox.compacted",
363
+ "mailbox.event",
364
+ "mailbox.messages",
365
+ "mailbox.sent",
366
+ "mailbox.purged",
367
+ "mailbox.received",
368
+ "subagent.budget_extended",
369
+ "subagent.event"
370
+ ];
371
+
372
+ // src/protocol/server-integrations.ts
373
+ var SERVER_KNOWLEDGE_MESSAGE_TYPES = [
374
+ "brain.answer",
375
+ "brain.config",
376
+ "brain.event",
377
+ "brain.status",
378
+ "chronicle.error",
379
+ "chronicle.facet_result",
380
+ "chronicle.facets_result",
381
+ "chronicle.graph_result",
382
+ "chronicle.metrics_result",
383
+ "chronicle.query_result",
384
+ "config.doctor.result",
385
+ "design.list",
386
+ "design.materialize",
387
+ "design.set",
388
+ "design.state",
389
+ "design.swap",
390
+ "design.tune",
391
+ "design.use",
392
+ "design.verify",
393
+ "memory.event",
394
+ "memory.list",
395
+ "memory.sage.backfillRecoverable",
396
+ "memory.sage.candidateResolve",
397
+ "memory.sage.delete",
398
+ "memory.sage.forFile",
399
+ "memory.sage.get",
400
+ "memory.sage.graph",
401
+ "memory.sage.list",
402
+ "memory.sage.listPage",
403
+ "memory.sage.recover",
404
+ "memory.sage.remember",
405
+ "memory.sage.update"
406
+ ];
407
+ var SERVER_EXTENSION_MESSAGE_TYPES = [
408
+ "mcp.content.error",
409
+ "mcp.content.selected",
410
+ "mcp.list",
411
+ "mcp.operation_result",
412
+ "mcp.prompts",
413
+ "mcp.resources",
414
+ "mcp.server.added",
415
+ "mcp.server.connected",
416
+ "mcp.server.disconnected",
417
+ "mcp.server.discovered",
418
+ "mcp.server.error",
419
+ "mcp.server.reconnected",
420
+ "mcp.server.removed",
421
+ "mcp.server.sleeping",
422
+ "mcp.server.updated",
423
+ "mcp.server.waking",
424
+ "prompts.content",
425
+ "prompts.created",
426
+ "prompts.favorite",
427
+ "prompts.list",
428
+ "prompts.recent",
429
+ "prompts.search",
430
+ "prompts.used",
431
+ "skills.content",
432
+ "skills.created",
433
+ "skills.edited",
434
+ "skills.exported",
435
+ "skills.installed",
436
+ "skills.list",
437
+ "skills.uninstalled",
438
+ "skills.updated"
439
+ ];
440
+
441
+ // src/protocol/server-operations.ts
442
+ var SERVER_GOAL_MESSAGE_TYPES = [
443
+ "budget.decision",
444
+ "budget.threshold_reached",
445
+ "coordinator.stats",
446
+ "coordinator.status",
447
+ "eternal.iteration",
448
+ "fleet.concurrency_update",
449
+ "goal-state.updated",
450
+ "goal.list",
451
+ "goal.paused",
452
+ "goal.resumed",
453
+ "goal.saved",
454
+ "goal.error",
455
+ "goal.stopped",
456
+ "goal.failed",
457
+ "goal.completed",
458
+ "goal.cleared",
459
+ "goal.reverted",
460
+ "goal.progress",
461
+ "goal.state",
462
+ "in_flight.ended",
463
+ "in_flight.started",
464
+ "plan.updated",
465
+ "task.completed",
466
+ "task.failed",
467
+ "task.pending",
468
+ "task.started",
469
+ "tasks.updated",
470
+ "todos.cleared",
471
+ "todos.updated"
472
+ ];
473
+ var SERVER_SDD_MESSAGE_TYPES = [
474
+ "kanban.task.activity",
475
+ "sdd.board.lifecycle_result",
476
+ "sdd.board.list",
477
+ "sdd.board.snapshot",
478
+ "sdd.run.started",
479
+ "sdd.spec.agent_text",
480
+ "sdd.spec.error",
481
+ "sdd.spec.snapshot",
482
+ "specs.detail",
483
+ "specs.list"
484
+ ];
485
+ var SERVER_AUTOMATION_MESSAGE_TYPES = [
486
+ "consensus.vote_cast",
487
+ "consensus.vote_initiated",
488
+ "consensus.vote_resolved",
489
+ "cron.job_fired",
490
+ "cron.snapshot",
491
+ "techstack.job.cancelled",
492
+ "techstack.job.failed",
493
+ "techstack.job.progress",
494
+ "techstack.job.started",
495
+ "techstack.report.delivered",
496
+ "techstack.report.ready",
497
+ "techstack.snapshot.updated",
498
+ "techstack.workspace.completed"
499
+ ];
500
+
501
+ // src/protocol/server-workspace.ts
502
+ var SERVER_WORKSPACE_MESSAGE_TYPES = [
503
+ "checkpoint.written",
504
+ "codemap.file_event",
505
+ "codemap.index_updated",
506
+ "codemap.tool_executed",
507
+ "codemap.tool_started",
508
+ "file.saved",
509
+ "files.list",
510
+ "files.read",
511
+ "files.tree",
512
+ "files.written",
513
+ "git.changes",
514
+ "git.diff",
515
+ "git.info",
516
+ "process.list",
517
+ "projects.added",
518
+ "projects.list",
519
+ "projects.selected",
520
+ "terminal.exit",
521
+ "terminal.output",
522
+ "working_dir.changed",
523
+ "worktree.cleanup_result",
524
+ "worktree.diff_result",
525
+ "worktree.event",
526
+ "worktree.merge_result",
527
+ "worktree.orphans",
528
+ "worktree.state"
529
+ ];
530
+ var SERVER_CONFIGURATION_MESSAGE_TYPES = [
531
+ "auth.oauth.status",
532
+ "diag.get",
533
+ "key.operation_result",
534
+ "prefs.updated",
535
+ "provider.catalog",
536
+ "provider.models",
537
+ "provider.probe",
538
+ "providers.saved"
539
+ ];
540
+
541
+ // src/protocol/registry.ts
542
+ var CLIENT_MESSAGE_TYPES = [
543
+ ...CLIENT_CONVERSATION_MESSAGE_TYPES,
544
+ ...CLIENT_COLLABORATION_MESSAGE_TYPES,
545
+ ...CLIENT_WORKSPACE_MESSAGE_TYPES,
546
+ ...CLIENT_CONFIGURATION_MESSAGE_TYPES,
547
+ ...CLIENT_GOAL_MESSAGE_TYPES,
548
+ ...CLIENT_SDD_MESSAGE_TYPES,
549
+ ...CLIENT_KNOWLEDGE_MESSAGE_TYPES,
550
+ ...CLIENT_EXTENSION_MESSAGE_TYPES
551
+ ];
552
+ var SERVER_MESSAGE_TYPES = [
553
+ ...SERVER_CONVERSATION_MESSAGE_TYPES,
554
+ ...SERVER_COLLABORATION_MESSAGE_TYPES,
555
+ ...SERVER_WORKSPACE_MESSAGE_TYPES,
556
+ ...SERVER_CONFIGURATION_MESSAGE_TYPES,
557
+ ...SERVER_GOAL_MESSAGE_TYPES,
558
+ ...SERVER_SDD_MESSAGE_TYPES,
559
+ ...SERVER_AUTOMATION_MESSAGE_TYPES,
560
+ ...SERVER_KNOWLEDGE_MESSAGE_TYPES,
561
+ ...SERVER_EXTENSION_MESSAGE_TYPES
562
+ ];
563
+ var CLIENT_TYPE_SET = new Set(CLIENT_MESSAGE_TYPES);
564
+ var SERVER_TYPE_SET = new Set(SERVER_MESSAGE_TYPES);
565
+ function isRegisteredMessageType(type, direction) {
566
+ const exact = direction === "client" ? CLIENT_TYPE_SET : SERVER_TYPE_SET;
567
+ return exact.has(type) || type.startsWith("kanban.") && type.length > "kanban.".length || type.startsWith("agent-roster.") && type.length > "agent-roster.".length;
568
+ }
569
+
570
+ // src/protocol/decoder.ts
571
+ var FORBIDDEN_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
572
+ var MAX_PAYLOAD_DEPTH = 32;
573
+ function inspectValue(value, path, depth) {
574
+ if (depth > MAX_PAYLOAD_DEPTH) {
575
+ return { code: "too_deep", message: "Protocol payload exceeds the nesting limit", path };
576
+ }
577
+ if (value === null || typeof value !== "object") return null;
578
+ for (const key of Object.keys(value)) {
579
+ const childPath = `${path}.${key}`;
580
+ if (FORBIDDEN_KEYS.has(key)) {
581
+ return { code: "unsafe_key", message: `Unsafe protocol key: ${key}`, path: childPath };
582
+ }
583
+ const issue = inspectValue(value[key], childPath, depth + 1);
584
+ if (issue) return issue;
585
+ }
586
+ return null;
587
+ }
588
+ function decodeProtocolMessage(input, direction) {
589
+ if (input === null || typeof input !== "object" || Array.isArray(input)) {
590
+ return {
591
+ ok: false,
592
+ issue: { code: "invalid_envelope", message: "Protocol message must be an object" }
593
+ };
594
+ }
595
+ const envelope = input;
596
+ if (typeof envelope["type"] !== "string" || envelope["type"].length === 0) {
597
+ return {
598
+ ok: false,
599
+ issue: { code: "invalid_type", message: "Protocol message type must be a non-empty string" }
600
+ };
601
+ }
602
+ if (!isRegisteredMessageType(envelope["type"], direction)) {
603
+ return {
604
+ ok: false,
605
+ issue: { code: "unknown_type", message: `Unknown ${direction} message: ${envelope["type"]}` }
606
+ };
607
+ }
608
+ if (direction === "server" && !Object.hasOwn(envelope, "payload")) {
609
+ return {
610
+ ok: false,
611
+ issue: { code: "invalid_envelope", message: "Server protocol messages require a payload" }
612
+ };
613
+ }
614
+ const issue = inspectValue(envelope, "$", 0);
615
+ if (issue) return { ok: false, issue };
616
+ return { ok: true, message: input };
617
+ }
618
+ function decodeProtocolFrame(frame, direction) {
619
+ try {
620
+ return decodeProtocolMessage(JSON.parse(frame), direction);
621
+ } catch {
622
+ return {
623
+ ok: false,
624
+ issue: { code: "invalid_envelope", message: "Protocol frame is not valid JSON" }
625
+ };
626
+ }
627
+ }
628
+
629
+ // src/protocol/projections.ts
630
+ function record(value) {
631
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
632
+ }
633
+ function text(value, fallback = "") {
634
+ return typeof value === "string" ? value : fallback;
635
+ }
636
+ function finite(value, fallback = 0) {
637
+ return typeof value === "number" && Number.isFinite(value) ? value : fallback;
638
+ }
639
+ function optionalArray(value) {
640
+ return value === void 0 || Array.isArray(value);
641
+ }
642
+ function isValidHqTotals(totals) {
643
+ return finite(totals["activeProjects"]) === totals["activeProjects"] && finite(totals["activeClients"]) === totals["activeClients"] && finite(totals["activeSessions"]) === totals["activeSessions"] && finite(totals["activeSubagents"]) === totals["activeSubagents"] && finite(totals["unreadMailboxMessages"]) === totals["unreadMailboxMessages"] && finite(totals["incompleteMailboxMessages"]) === totals["incompleteMailboxMessages"] && finite(totals["totalCostUsd"]) === totals["totalCostUsd"];
644
+ }
645
+ function projectSessionMessage(message) {
646
+ if (message.type !== "session.start") return null;
647
+ const payload = record(message.payload);
648
+ if (!payload) return null;
649
+ return {
650
+ kind: "session",
651
+ id: text(payload["sessionId"]),
652
+ provider: text(payload["provider"]),
653
+ model: text(payload["model"]),
654
+ projectName: text(payload["projectName"], "Project"),
655
+ cwd: text(payload["cwd"]),
656
+ maxContext: finite(payload["maxContext"]),
657
+ reset: payload["reset"] === true,
658
+ replayMessages: Array.isArray(payload["replayMessages"]) ? payload["replayMessages"] : null,
659
+ replayMarkers: Array.isArray(payload["replayMarkers"]) ? payload["replayMarkers"] : null,
660
+ replayUsage: record(payload["replayUsage"])
661
+ };
662
+ }
663
+ function projectChatMessage(message) {
664
+ const payload = record(message.payload);
665
+ if (!payload) return null;
666
+ switch (message.type) {
667
+ case "provider.thinking_delta": {
668
+ const value = text(payload["text"]);
669
+ return value ? { kind: "thinking-delta", text: value } : null;
670
+ }
671
+ case "provider.text_delta": {
672
+ const value = text(payload["text"]);
673
+ return value ? { kind: "text-delta", text: value, messageId: text(payload["messageId"]) } : null;
674
+ }
675
+ case "provider.response":
676
+ return { kind: "response", content: payload["content"] };
677
+ case "run.result":
678
+ return {
679
+ kind: "run-result",
680
+ status: text(payload["status"]),
681
+ iterations: finite(payload["iterations"], 1),
682
+ ...typeof payload["finalText"] === "string" ? { finalText: payload["finalText"] } : {}
683
+ };
684
+ case "error":
685
+ return { kind: "error", message: text(payload["message"], "Run failed") };
686
+ default:
687
+ return null;
688
+ }
689
+ }
690
+ function projectToolMessage(message) {
691
+ const payload = record(message.payload);
692
+ if (!payload) return null;
693
+ if (message.type === "tool.started") {
694
+ const name = text(payload["name"], "tool");
695
+ return {
696
+ kind: "started",
697
+ id: text(payload["id"], name),
698
+ name,
699
+ input: payload["input"],
700
+ messageId: text(payload["messageId"])
701
+ };
702
+ }
703
+ if (message.type === "tool.progress") {
704
+ const event = record(payload["event"]);
705
+ return {
706
+ kind: "progress",
707
+ id: text(payload["id"]),
708
+ name: text(payload["name"], "tool"),
709
+ eventType: text(event?.["type"]),
710
+ text: text(event?.["text"]).trim()
711
+ };
712
+ }
713
+ if (message.type === "tool.executed") {
714
+ return {
715
+ kind: "executed",
716
+ id: text(payload["id"]),
717
+ name: text(payload["name"]),
718
+ ok: payload["ok"] !== false,
719
+ durationMs: finite(payload["durationMs"]),
720
+ ...typeof payload["output"] === "string" ? { output: payload["output"] } : {}
721
+ };
722
+ }
723
+ return null;
724
+ }
725
+ function projectFleetMessage(message) {
726
+ const payload = record(message.payload);
727
+ if (!payload) return null;
728
+ switch (message.type) {
729
+ case "fleet.concurrency_update":
730
+ return {
731
+ kind: "concurrency",
732
+ active: finite(payload["fleetConcurrency"]),
733
+ maximum: finite(payload["fleetConcurrencyMax"])
734
+ };
735
+ case "client.status_update":
736
+ return { kind: "client-status", status: payload };
737
+ case "sessions.status_update":
738
+ return {
739
+ kind: "sessions",
740
+ sessions: Array.isArray(payload["sessions"]) ? payload["sessions"] : []
741
+ };
742
+ case "coordinator.stats":
743
+ return {
744
+ kind: "coordinator",
745
+ agents: Array.isArray(payload["subagentStatuses"]) ? payload["subagentStatuses"].filter(
746
+ (item) => record(item) !== null
747
+ ) : []
748
+ };
749
+ default:
750
+ return null;
751
+ }
752
+ }
753
+ function projectHqFleetMessage(message) {
754
+ if (message.type !== "hq.snapshot") return null;
755
+ const snapshot = record(message.snapshot);
756
+ const totals = snapshot ? record(snapshot["totals"]) : null;
757
+ if (!snapshot || typeof snapshot["generatedAt"] !== "string" || !Array.isArray(snapshot["clients"]) || !Array.isArray(snapshot["projects"]) || !Array.isArray(snapshot["sessions"]) || !Array.isArray(snapshot["fleets"]) || !Array.isArray(snapshot["mailboxes"]) || !totals || !isValidHqTotals(totals) || !optionalArray(snapshot["machines"]) || !optionalArray(snapshot["liveSessions"]) || !optionalArray(snapshot["mcpServers"])) {
758
+ return null;
759
+ }
760
+ return { kind: "hq-snapshot", snapshot };
761
+ }
762
+ function projectHqEventMessage(message) {
763
+ if (message.type !== "hq.event") return null;
764
+ const event = record(message.event);
765
+ if (!event || typeof event["id"] !== "string" || typeof event["type"] !== "string" || typeof event["timestamp"] !== "string" || typeof event["clientId"] !== "string" || typeof event["projectId"] !== "string" || typeof event["seq"] !== "number") {
766
+ return null;
767
+ }
768
+ return { kind: "hq-event", event };
769
+ }
770
+ function projectHqAlertMessage(message) {
771
+ if (message.type !== "hq.alert") return null;
772
+ if (typeof message["severity"] !== "string" || !["info", "warn", "error"].includes(message["severity"]) || typeof message["message"] !== "string" || typeof message["timestamp"] !== "string") {
773
+ return null;
774
+ }
775
+ return { kind: "hq-alert", alert: message };
776
+ }
777
+ function projectHqCommandStatusMessage(message) {
778
+ if (message.type !== "hq.command_status") return null;
779
+ const command = record(message.command);
780
+ if (!command || typeof command["commandId"] !== "string" || typeof command["type"] !== "string" || typeof command["clientId"] !== "string" || typeof command["enqueuedBy"] !== "string" || typeof command["enqueuedAt"] !== "string" || typeof command["status"] !== "string" || !["queued", "delivered", "acked"].includes(command["status"])) {
781
+ return null;
782
+ }
783
+ return { kind: "hq-command-status", command };
784
+ }
785
+
786
+ // src/protocol/replay-payload.ts
787
+ import { CHAT_MARKER_SOURCES, projectSessionMarkers } from "@wrongstack/core/types";
788
+ var REPLAY_MESSAGE_CAP = 2e3;
789
+ function buildReplayPayload(source) {
790
+ const out = {};
791
+ const messages = source.messages;
792
+ if (messages.length > 0) {
793
+ out.replayMessages = messages.length > REPLAY_MESSAGE_CAP ? messages.slice(-REPLAY_MESSAGE_CAP) : [...messages];
794
+ }
795
+ if (source.events && source.events.length > 0) {
796
+ const markers = projectSessionMarkers(source.events, CHAT_MARKER_SOURCES);
797
+ if (markers.length > 0) out.replayMarkers = markers;
798
+ }
799
+ const usage = source.usage;
800
+ if (usage && usage.input + usage.output + (usage.cacheRead ?? 0) + (usage.cacheWrite ?? 0) > 0) {
801
+ out.replayUsage = {
802
+ input: usage.input,
803
+ output: usage.output,
804
+ cacheRead: usage.cacheRead ?? 0,
805
+ cacheWrite: usage.cacheWrite ?? 0
806
+ };
807
+ }
808
+ return out;
809
+ }
810
+
811
+ // src/protocol/version.ts
812
+ var SURFACE_PROTOCOL_VERSION = 1;
813
+ var SURFACE_PROTOCOL_MIN_VERSION = 1;
814
+ var SURFACE_PROTOCOL_CAPABILITIES = [
815
+ "protocol.directional-decoder",
816
+ "protocol.recursive-key-safety",
817
+ "chronicle.query",
818
+ "chronicle.facet",
819
+ "chronicle.facets",
820
+ "chronicle.graph",
821
+ "chronicle.metrics"
822
+ ];
823
+ function protocolAdvertisement() {
824
+ return {
825
+ protocolVersion: SURFACE_PROTOCOL_VERSION,
826
+ protocolCapabilities: [...SURFACE_PROTOCOL_CAPABILITIES]
827
+ };
828
+ }
829
+ function negotiateProtocol(peer) {
830
+ const peerVersion = peer.protocolVersion;
831
+ const legacyPeer = peerVersion === void 0;
832
+ const version = legacyPeer ? SURFACE_PROTOCOL_VERSION : Math.min(peerVersion, SURFACE_PROTOCOL_VERSION);
833
+ const compatible = legacyPeer || Number.isInteger(peerVersion) && peerVersion >= SURFACE_PROTOCOL_MIN_VERSION;
834
+ const advertised = new Set(peer.protocolCapabilities ?? []);
835
+ return {
836
+ compatible,
837
+ legacyPeer,
838
+ version,
839
+ capabilities: SURFACE_PROTOCOL_CAPABILITIES.filter((item) => advertised.has(item))
840
+ };
841
+ }
842
+ export {
843
+ CLIENT_MESSAGE_TYPES,
844
+ DEFAULT_SURFACE_CONNECTION_CONFIG,
845
+ REPLAY_MESSAGE_CAP,
846
+ SERVER_MESSAGE_TYPES,
847
+ SURFACE_PROTOCOL_CAPABILITIES,
848
+ SURFACE_PROTOCOL_MIN_VERSION,
849
+ SURFACE_PROTOCOL_VERSION,
850
+ buildReplayPayload,
851
+ createSurfaceConnectionState,
852
+ decodeProtocolFrame,
853
+ decodeProtocolMessage,
854
+ enqueueBounded,
855
+ isConnectionHeartbeatTimedOut,
856
+ isRegisteredMessageType,
857
+ markConnectionActivity,
858
+ markConnectionConnecting,
859
+ markConnectionOpen,
860
+ negotiateProtocol,
861
+ planConnectionReconnect,
862
+ projectChatMessage,
863
+ projectFleetMessage,
864
+ projectHqAlertMessage,
865
+ projectHqCommandStatusMessage,
866
+ projectHqEventMessage,
867
+ projectHqFleetMessage,
868
+ projectSessionMessage,
869
+ projectToolMessage,
870
+ protocolAdvertisement,
871
+ resetConnection,
872
+ stopConnection
873
+ };
874
+ //# sourceMappingURL=index.js.map