@schlessera/brain-ui-react 0.34.0 → 0.34.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 (157) hide show
  1. package/README.md +5 -0
  2. package/dist/components/activity/activity-page.d.ts.map +1 -1
  3. package/dist/components/activity/activity-page.js +8 -149
  4. package/dist/components/activity/activity-page.js.map +1 -1
  5. package/dist/components/activity/activity-rollups.d.ts +5 -0
  6. package/dist/components/activity/activity-rollups.d.ts.map +1 -0
  7. package/dist/components/activity/activity-rollups.js +39 -0
  8. package/dist/components/activity/activity-rollups.js.map +1 -0
  9. package/dist/components/activity/activity-run-detail.d.ts +11 -0
  10. package/dist/components/activity/activity-run-detail.d.ts.map +1 -0
  11. package/dist/components/activity/activity-run-detail.js +111 -0
  12. package/dist/components/activity/activity-run-detail.js.map +1 -0
  13. package/dist/components/activity/activity-run-list.d.ts +15 -0
  14. package/dist/components/activity/activity-run-list.d.ts.map +1 -0
  15. package/dist/components/activity/activity-run-list.js +25 -0
  16. package/dist/components/activity/activity-run-list.js.map +1 -0
  17. package/dist/components/chat/brain-markdown-code.d.ts +4 -0
  18. package/dist/components/chat/brain-markdown-code.d.ts.map +1 -0
  19. package/dist/components/chat/brain-markdown-code.js +47 -0
  20. package/dist/components/chat/brain-markdown-code.js.map +1 -0
  21. package/dist/components/chat/brain-markdown-entities.d.ts +14 -0
  22. package/dist/components/chat/brain-markdown-entities.d.ts.map +1 -0
  23. package/dist/components/chat/brain-markdown-entities.js +93 -0
  24. package/dist/components/chat/brain-markdown-entities.js.map +1 -0
  25. package/dist/components/chat/brain-markdown-links.d.ts +36 -0
  26. package/dist/components/chat/brain-markdown-links.d.ts.map +1 -0
  27. package/dist/components/chat/brain-markdown-links.js +176 -0
  28. package/dist/components/chat/brain-markdown-links.js.map +1 -0
  29. package/dist/components/chat/brain-markdown-share.d.ts +15 -0
  30. package/dist/components/chat/brain-markdown-share.d.ts.map +1 -0
  31. package/dist/components/chat/brain-markdown-share.js +40 -0
  32. package/dist/components/chat/brain-markdown-share.js.map +1 -0
  33. package/dist/components/chat/brain-markdown.d.ts +1 -34
  34. package/dist/components/chat/brain-markdown.d.ts.map +1 -1
  35. package/dist/components/chat/brain-markdown.js +9 -402
  36. package/dist/components/chat/brain-markdown.js.map +1 -1
  37. package/dist/components/chat/composer.d.ts.map +1 -1
  38. package/dist/components/chat/composer.js +14 -1
  39. package/dist/components/chat/composer.js.map +1 -1
  40. package/dist/components/chat/use-markdown-highlight.d.ts +12 -0
  41. package/dist/components/chat/use-markdown-highlight.d.ts.map +1 -0
  42. package/dist/components/chat/use-markdown-highlight.js +56 -0
  43. package/dist/components/chat/use-markdown-highlight.js.map +1 -0
  44. package/dist/components/connectivity/connection-gate.d.ts.map +1 -1
  45. package/dist/components/connectivity/connection-gate.js +41 -7
  46. package/dist/components/connectivity/connection-gate.js.map +1 -1
  47. package/dist/components/connectivity/connection-state.d.ts +12 -0
  48. package/dist/components/connectivity/connection-state.d.ts.map +1 -0
  49. package/dist/components/connectivity/connection-state.js +23 -0
  50. package/dist/components/connectivity/connection-state.js.map +1 -0
  51. package/dist/components/graph/graph-canvas-lazy.d.ts +2 -0
  52. package/dist/components/graph/graph-canvas-lazy.d.ts.map +1 -0
  53. package/dist/components/graph/graph-canvas-lazy.js +4 -0
  54. package/dist/components/graph/graph-canvas-lazy.js.map +1 -0
  55. package/dist/components/graph/graph-controls.js +4 -1
  56. package/dist/components/graph/graph-controls.js.map +1 -1
  57. package/dist/components/graph/graph-maintenance.d.ts +8 -0
  58. package/dist/components/graph/graph-maintenance.d.ts.map +1 -0
  59. package/dist/components/graph/graph-maintenance.js +115 -0
  60. package/dist/components/graph/graph-maintenance.js.map +1 -0
  61. package/dist/components/graph/graph-page.d.ts.map +1 -1
  62. package/dist/components/graph/graph-page.js +11 -306
  63. package/dist/components/graph/graph-page.js.map +1 -1
  64. package/dist/components/graph/graph-scene.d.ts +8 -0
  65. package/dist/components/graph/graph-scene.d.ts.map +1 -0
  66. package/dist/components/graph/graph-scene.js +208 -0
  67. package/dist/components/graph/graph-scene.js.map +1 -0
  68. package/dist/components/graph/graph-spinner.d.ts +2 -0
  69. package/dist/components/graph/graph-spinner.d.ts.map +1 -0
  70. package/dist/components/graph/graph-spinner.js +6 -0
  71. package/dist/components/graph/graph-spinner.js.map +1 -0
  72. package/dist/hooks/use-vpn-status.d.ts +5 -0
  73. package/dist/hooks/use-vpn-status.d.ts.map +1 -1
  74. package/dist/hooks/use-vpn-status.js +61 -29
  75. package/dist/hooks/use-vpn-status.js.map +1 -1
  76. package/dist/hooks/use-websocket.d.ts +3 -2
  77. package/dist/hooks/use-websocket.d.ts.map +1 -1
  78. package/dist/hooks/use-websocket.js +61 -252
  79. package/dist/hooks/use-websocket.js.map +1 -1
  80. package/dist/hooks/websocket-handlers/activity.d.ts +5 -0
  81. package/dist/hooks/websocket-handlers/activity.d.ts.map +1 -0
  82. package/dist/hooks/websocket-handlers/activity.js +10 -0
  83. package/dist/hooks/websocket-handlers/activity.js.map +1 -0
  84. package/dist/hooks/websocket-handlers/chat.d.ts +17 -0
  85. package/dist/hooks/websocket-handlers/chat.d.ts.map +1 -0
  86. package/dist/hooks/websocket-handlers/chat.js +175 -0
  87. package/dist/hooks/websocket-handlers/chat.js.map +1 -0
  88. package/dist/hooks/websocket-handlers/connection.d.ts +6 -0
  89. package/dist/hooks/websocket-handlers/connection.d.ts.map +1 -0
  90. package/dist/hooks/websocket-handlers/connection.js +27 -0
  91. package/dist/hooks/websocket-handlers/connection.js.map +1 -0
  92. package/dist/hooks/websocket-handlers/index.d.ts +4 -0
  93. package/dist/hooks/websocket-handlers/index.d.ts.map +1 -0
  94. package/dist/hooks/websocket-handlers/index.js +19 -0
  95. package/dist/hooks/websocket-handlers/index.js.map +1 -0
  96. package/dist/hooks/websocket-handlers/mask.d.ts +4 -0
  97. package/dist/hooks/websocket-handlers/mask.d.ts.map +1 -0
  98. package/dist/hooks/websocket-handlers/mask.js +14 -0
  99. package/dist/hooks/websocket-handlers/mask.js.map +1 -0
  100. package/dist/hooks/websocket-handlers/provider.d.ts +4 -0
  101. package/dist/hooks/websocket-handlers/provider.d.ts.map +1 -0
  102. package/dist/hooks/websocket-handlers/provider.js +31 -0
  103. package/dist/hooks/websocket-handlers/provider.js.map +1 -0
  104. package/dist/hooks/websocket-handlers/types.d.ts +24 -0
  105. package/dist/hooks/websocket-handlers/types.d.ts.map +1 -0
  106. package/dist/hooks/websocket-handlers/types.js +2 -0
  107. package/dist/hooks/websocket-handlers/types.js.map +1 -0
  108. package/dist/stores/activity-store-helpers.d.ts +50 -0
  109. package/dist/stores/activity-store-helpers.d.ts.map +1 -0
  110. package/dist/stores/activity-store-helpers.js +143 -0
  111. package/dist/stores/activity-store-helpers.js.map +1 -0
  112. package/dist/stores/activity-store-types.d.ts +48 -0
  113. package/dist/stores/activity-store-types.d.ts.map +1 -0
  114. package/dist/stores/activity-store-types.js +2 -0
  115. package/dist/stores/activity-store-types.js.map +1 -0
  116. package/dist/stores/activity-store.d.ts +2 -78
  117. package/dist/stores/activity-store.d.ts.map +1 -1
  118. package/dist/stores/activity-store.js +22 -142
  119. package/dist/stores/activity-store.js.map +1 -1
  120. package/dist/stores/connection-store.d.ts +14 -2
  121. package/dist/stores/connection-store.d.ts.map +1 -1
  122. package/dist/stores/connection-store.js +17 -0
  123. package/dist/stores/connection-store.js.map +1 -1
  124. package/dist/styles.css +1 -1
  125. package/package.json +2 -2
  126. package/src/components/activity/activity-page.tsx +6 -477
  127. package/src/components/activity/activity-rollups.tsx +94 -0
  128. package/src/components/activity/activity-run-detail.tsx +301 -0
  129. package/src/components/activity/activity-run-list.tsx +97 -0
  130. package/src/components/chat/brain-markdown-code.tsx +60 -0
  131. package/src/components/chat/brain-markdown-entities.tsx +116 -0
  132. package/src/components/chat/brain-markdown-links.tsx +247 -0
  133. package/src/components/chat/brain-markdown-share.ts +47 -0
  134. package/src/components/chat/brain-markdown.tsx +27 -535
  135. package/src/components/chat/composer.tsx +14 -1
  136. package/src/components/chat/use-markdown-highlight.ts +63 -0
  137. package/src/components/connectivity/connection-gate.tsx +64 -13
  138. package/src/components/connectivity/connection-state.ts +37 -0
  139. package/src/components/graph/graph-canvas-lazy.tsx +4 -0
  140. package/src/components/graph/graph-controls.tsx +4 -1
  141. package/src/components/graph/graph-maintenance.tsx +304 -0
  142. package/src/components/graph/graph-page.tsx +11 -840
  143. package/src/components/graph/graph-scene.tsx +548 -0
  144. package/src/components/graph/graph-spinner.tsx +9 -0
  145. package/src/hooks/use-vpn-status.ts +64 -31
  146. package/src/hooks/use-websocket.ts +70 -273
  147. package/src/hooks/websocket-handlers/activity.ts +13 -0
  148. package/src/hooks/websocket-handlers/chat.ts +210 -0
  149. package/src/hooks/websocket-handlers/connection.ts +30 -0
  150. package/src/hooks/websocket-handlers/index.ts +59 -0
  151. package/src/hooks/websocket-handlers/mask.ts +17 -0
  152. package/src/hooks/websocket-handlers/provider.ts +35 -0
  153. package/src/hooks/websocket-handlers/types.ts +27 -0
  154. package/src/stores/activity-store-helpers.ts +164 -0
  155. package/src/stores/activity-store-types.ts +55 -0
  156. package/src/stores/activity-store.ts +21 -217
  157. package/src/stores/connection-store.ts +33 -2
@@ -1,102 +1,14 @@
1
1
  import { useEffect, useRef, useCallback } from "react";
2
- import { BrainUiClient } from "@schlessera/brain-ui-sdk/client";
2
+ import { BrainUiClient, } from "@schlessera/brain-ui-sdk/client";
3
3
  import { useConnectionStore } from "../stores/connection-store.js";
4
4
  import { useChatStore, activeChat } from "../stores/chat-store.js";
5
- import { useProviderStore } from "../stores/provider-store.js";
6
- import { useMaskStore } from "../stores/mask-store.js";
7
5
  import { useActivityStore, loadSessionActivityHistory } from "../stores/activity-store.js";
8
6
  import { getWsUrl } from "../lib/backend.js";
9
- import { isAskUserTool } from "../lib/tool-names.js";
10
- let historyMessageCounter = 0;
11
- function historyId() {
12
- return `hist-${++historyMessageCounter}-${Date.now()}`;
13
- }
14
- function convertHistoryMessage(msg) {
15
- // Fallback for history without chronological parts: synthesize the legacy
16
- // grouped order (thinking, tools, text).
17
- const parts = msg.parts ??
18
- [
19
- ...(msg.thinking ? [{ kind: "thinking", text: msg.thinking }] : []),
20
- ...msg.toolCalls.map((_, i) => ({ kind: "tool", toolIndex: i })),
21
- ...(msg.content ? [{ kind: "text", text: msg.content }] : []),
22
- ];
23
- const askUserExchanges = reconstructAskUserExchanges(msg.toolCalls);
24
- return {
25
- id: historyId(),
26
- role: msg.role,
27
- content: msg.content,
28
- thinking: msg.thinking,
29
- toolCalls: msg.toolCalls.map((tc) => ({
30
- id: tc.id,
31
- name: tc.name,
32
- input: tc.input,
33
- inputJson: JSON.stringify(tc.input, null, 2),
34
- output: tc.output,
35
- isError: tc.isError,
36
- status: "complete",
37
- })),
38
- parts,
39
- isStreaming: false,
40
- timestamp: Date.now(),
41
- ...(askUserExchanges ? { askUserExchanges } : {}),
42
- ...(msg.attachmentCount ? { attachmentCount: msg.attachmentCount } : {}),
43
- };
44
- }
45
- /**
46
- * Rebuild ask_user exchanges from a resumed message's tool calls. The ask_user
47
- * tool's input carries the questions and its output carries the JSON answer
48
- * payload, so an answered question survives session resume (rendered in its
49
- * chronological slot, collapsed) instead of vanishing.
50
- */
51
- function isBareAnswersMap(v) {
52
- return (!!v &&
53
- typeof v === "object" &&
54
- !Array.isArray(v) &&
55
- Object.values(v).every((x) => typeof x === "string"));
56
- }
57
- function reconstructAskUserExchanges(toolCalls) {
58
- const exchanges = [];
59
- for (const tc of toolCalls) {
60
- if (!isAskUserTool(tc.name))
61
- continue;
62
- const questions = tc.input?.questions ?? [];
63
- const exchange = { requestId: tc.id, questions };
64
- if (tc.output) {
65
- try {
66
- const payload = JSON.parse(tc.output);
67
- if (payload && typeof payload === "object" && payload.answers) {
68
- exchange.answers = payload.answers;
69
- exchange.annotations = payload.annotations;
70
- }
71
- else if (isBareAnswersMap(payload)) {
72
- // The pi backend persists the bare answers map, without the
73
- // `{answers}` envelope the Claude tool writes.
74
- exchange.answers = payload;
75
- }
76
- }
77
- catch {
78
- // Non-JSON output means the question was dismissed or errored out.
79
- exchange.cancelled = true;
80
- }
81
- }
82
- if (tc.isError && !exchange.answers)
83
- exchange.cancelled = true;
84
- exchanges.push(exchange);
85
- }
86
- return exchanges.length ? exchanges : undefined;
87
- }
88
- /** Map a frame to the run-state its session should show in the session list. */
89
- export function runStateForFrame(msg) {
90
- if (msg.type === "result" || msg.type === "error")
91
- return "idle";
92
- if (msg.type === "status") {
93
- if (msg.status === "queued")
94
- return "queued";
95
- if (msg.status === "idle" || msg.status === "cancelled")
96
- return "idle";
97
- }
98
- return "streaming";
99
- }
7
+ import { dispatchServerMessage } from "./websocket-handlers/index.js";
8
+ import { runStateForFrame } from "./websocket-handlers/chat.js";
9
+ import { recheckVpnStatus } from "./use-vpn-status.js";
10
+ import { REFUSAL_ATTEMPTS } from "../components/connectivity/connection-state.js";
11
+ export { runStateForFrame } from "./websocket-handlers/chat.js";
100
12
  /**
101
13
  * Does this frame announce the identity of the conversation THIS client just
102
14
  * started?
@@ -197,21 +109,22 @@ export function handleServerMessage(msg) {
197
109
  flushDeltas();
198
110
  const state = useChatStore.getState();
199
111
  // Activity stream frames feed their own store and never touch chat state.
200
- if (msg.type === "server_hello") {
201
- useActivityStore.getState().setSupported(msg.capabilities?.activity === true);
202
- // A new hello means a new connection: server-side subscriptions are gone.
203
- useActivityStore.getState().resetSubscriptions();
204
- // …and view-owned subscriptions (the Activity index) must re-send too.
205
- useActivityStore.getState().bumpConnectionEpoch();
206
- ensureActivitySubscription(state.activeSessionId);
207
- return;
208
- }
209
- if (msg.type === "activity_snapshot") {
210
- useActivityStore.getState().applySnapshot(msg);
211
- return;
212
- }
213
- if (msg.type === "activity_delta") {
214
- useActivityStore.getState().applyDelta(msg);
112
+ if (msg.type === "server_hello" ||
113
+ msg.type === "activity_snapshot" ||
114
+ msg.type === "activity_delta") {
115
+ const key = state.activeSessionId;
116
+ dispatchServerMessage(msg, {
117
+ state,
118
+ frameSessionId: undefined,
119
+ key,
120
+ buffer: () => (key === null ? state.draft : state.buffers[key]),
121
+ enqueueDelta,
122
+ ensureActivitySubscription,
123
+ requestBrowserLocation,
124
+ resyncIfNeeded,
125
+ coldResumeIfNeeded,
126
+ markHistoryReplaced,
127
+ });
215
128
  return;
216
129
  }
217
130
  // Parallel-session demux (per-session buffers). Every frame is scoped by
@@ -261,149 +174,18 @@ export function handleServerMessage(msg) {
261
174
  const s = useChatStore.getState();
262
175
  return key === null ? s.draft : s.buffers[key];
263
176
  };
264
- switch (msg.type) {
265
- case "text_delta":
266
- // Opening the bubble stays immediate — the first token should show a
267
- // message starting, and every later delta needs isStreaming to be true.
268
- if (!buffer()?.isStreaming) {
269
- state.startAssistantMessage(key);
270
- }
271
- enqueueDelta(key, "text", msg.text);
272
- break;
273
- case "thinking_delta":
274
- if (!buffer()?.isStreaming) {
275
- state.startAssistantMessage(key);
276
- }
277
- enqueueDelta(key, "thinking", msg.text);
278
- break;
279
- case "tool_use_start":
280
- // A tool call INSIDE a subagent nests under its Agent entry, rendered
281
- // from the activity stream — putting it in the flat transcript would
282
- // interleave fan-out work with the main turn's steps.
283
- if (msg.parentToolUseId)
284
- break;
285
- state.startToolCall(key, msg.toolUseId, msg.toolName);
286
- break;
287
- case "tool_input_delta":
288
- state.appendToolInput(key, msg.partialJson);
289
- break;
290
- case "tool_use_complete":
291
- // Subagent tool calls render nested (activity stream), and the flat
292
- // store's name-based fallback match must never see them.
293
- if (msg.parentToolUseId)
294
- break;
295
- state.completeToolCall(key, msg.toolUseId, msg.toolName, msg.input);
296
- break;
297
- case "tool_approval_request":
298
- state.requestToolApproval(key, msg.toolUseId, msg.toolName, msg.input, msg.description, msg.kind);
299
- break;
300
- case "tool_result": {
301
- state.setToolResult(key, msg.toolUseId, msg.output, msg.isError);
302
- // Once the agent receives the ask_user tool result, the exchange is
303
- // complete — drop any leftover ask_user UI state.
304
- const chat = buffer();
305
- if (chat?.askUser?.answers || chat?.askUser?.cancelled) {
306
- state.clearAskUser(key);
307
- }
308
- break;
309
- }
310
- case "ask_user_request":
311
- state.setAskUserRequest(key, msg.requestId, msg.questions);
312
- break;
313
- case "location_request":
314
- requestBrowserLocation(msg);
315
- break;
316
- case "mask_request":
317
- // Opens the editor; the answer travels back from the component, because
318
- // only the user can say which part of the picture they meant.
319
- useMaskStore.getState().open({
320
- requestId: msg.requestId,
321
- imagePath: msg.imagePath,
322
- ...(msg.instruction ? { instruction: msg.instruction } : {}),
323
- ...(msg.turnId ? { turnId: msg.turnId } : {}),
324
- });
325
- break;
326
- case "result":
327
- state.finishAssistantMessage(key);
328
- resyncIfNeeded(msg.sessionId);
329
- break;
330
- case "session_info": {
331
- ensureActivitySubscription(msg.sessionId);
332
- // Record backend ownership for renderer scoping — for ANY session, since
333
- // background sessions keep their own transcript buffers. Older servers
334
- // omit backendId; derive it from the pinned profile when still possible
335
- // (fails only for since-hidden profiles, which then use the default).
336
- const ownerBackendId = msg.backendId ??
337
- useProviderStore
338
- .getState()
339
- .available.find((p) => p.id === msg.providerId)?.backendId;
340
- if (ownerBackendId) {
341
- useChatStore.getState().setSessionBackend(msg.sessionId, ownerBackendId);
342
- }
343
- // bindDraftSession above handled draft adoption; an info frame may still
344
- // re-pin the provider picker when it concerns the session in view.
345
- const current = useChatStore.getState();
346
- if (frameSessionId && frameSessionId === current.activeSessionId) {
347
- useProviderStore.getState().setPinned(msg.providerId ?? null);
348
- // Reattachment on a fresh connection: enter streaming mode so deltas
349
- // append to a live assistant message instead of vanishing.
350
- const chat = current.buffers[frameSessionId];
351
- if (chat && !chat.isStreaming && chat.messages.length === 0) {
352
- current.startAssistantMessage(frameSessionId);
353
- }
354
- }
355
- break;
356
- }
357
- case "session_history": {
358
- const converted = msg.messages.map(convertHistoryMessage);
359
- if (msg.append) {
360
- state.appendMessages(key, converted);
361
- }
362
- else {
363
- // First (replacing) chunk = fresh authoritative transcript. Cancel any
364
- // pending reconnect resync so we don't redundantly re-fetch it, and
365
- // mark this session cold-resumed so idle-status handling doesn't loop.
366
- state.setMessages(key, converted);
367
- if (key !== null && key === resyncSessionId)
368
- resyncSessionId = null;
369
- coldResumedSessionId = key;
370
- }
371
- break;
372
- }
373
- case "status": {
374
- // Only finish streaming if this buffer actually started it
375
- if ((msg.status === "idle" || msg.status === "cancelled") &&
376
- buffer()?.isStreaming) {
377
- state.finishAssistantMessage(key);
378
- }
379
- // A session that finished while we were offline never delivers its
380
- // `result` — the idle status on reconnect is the cue to resync. Keyed to
381
- // THIS frame's session: a background session settling must not consume
382
- // (or trigger) the active session's pending resync.
383
- if (msg.status === "idle" || msg.status === "cancelled") {
384
- const current = useChatStore.getState();
385
- resyncIfNeeded(frameSessionId ?? current.activeSessionId);
386
- // Cold load: we hold a stored session id but an empty transcript and
387
- // the server is idle (so it sent no snapshot). Fetch the history.
388
- // Only the active session's own (or an unscoped legacy) idle counts.
389
- if (!frameSessionId || frameSessionId === current.activeSessionId) {
390
- coldResumeIfNeeded(current.activeSessionId, activeChat(current).messages.length);
391
- }
392
- }
393
- break;
394
- }
395
- case "error":
396
- // ALWAYS recorded. Appending to the transcript only works while a
397
- // message is streaming, and this used to be the whole handler — so an
398
- // error arriving between turns (a rejected frame, a failed resume) was
399
- // dropped as silently on the client as it was on the server.
400
- useConnectionStore.getState().reportError(msg.code, msg.message);
401
- if (buffer()?.isStreaming) {
402
- state.appendText(key, `\n\n**Error:** ${msg.message}`);
403
- state.finishAssistantMessage(key);
404
- }
405
- break;
406
- }
177
+ dispatchServerMessage(msg, {
178
+ state,
179
+ frameSessionId,
180
+ key,
181
+ buffer,
182
+ enqueueDelta,
183
+ ensureActivitySubscription,
184
+ requestBrowserLocation,
185
+ resyncIfNeeded,
186
+ coldResumeIfNeeded,
187
+ markHistoryReplaced,
188
+ });
407
189
  }
408
190
  /**
409
191
  * The server asked the browser for its location (the agent called
@@ -460,6 +242,14 @@ function requestBrowserLocation(msg) {
460
242
  // reconnect), so a background session settling first cannot consume it.
461
243
  let wasDisconnected = false;
462
244
  let resyncSessionId = null;
245
+ function handleSocketClose(close) {
246
+ const connection = useConnectionStore.getState();
247
+ connection.recordWsClose(close.opened, close.code);
248
+ if (!close.opened &&
249
+ useConnectionStore.getState().handshakeFailures >= REFUSAL_ATTEMPTS) {
250
+ recheckVpnStatus();
251
+ }
252
+ }
463
253
  function resyncIfNeeded(sessionId) {
464
254
  if (!resyncSessionId || !sessionId || sessionId !== resyncSessionId)
465
255
  return;
@@ -474,6 +264,11 @@ function resyncIfNeeded(sessionId) {
474
264
  // connection — an empty session would otherwise re-trigger on every idle
475
265
  // status and loop.
476
266
  let coldResumedSessionId = null;
267
+ function markHistoryReplaced(key) {
268
+ if (key !== null && key === resyncSessionId)
269
+ resyncSessionId = null;
270
+ coldResumedSessionId = key;
271
+ }
477
272
  function coldResumeIfNeeded(sessionId, messageCount) {
478
273
  if (!sessionId || messageCount > 0)
479
274
  return;
@@ -484,6 +279,9 @@ function coldResumeIfNeeded(sessionId, messageCount) {
484
279
  }
485
280
  function handleStatusChange(status) {
486
281
  useConnectionStore.getState().setWsStatus(status);
282
+ if (status === "connected") {
283
+ useConnectionStore.getState().noteSocketOpen();
284
+ }
487
285
  // A status change can be followed by a history replay that rewrites the
488
286
  // buffer, so land whatever is still buffered before anything reads it. In a
489
287
  // hidden tab requestAnimationFrame does not run at all, which is exactly the
@@ -530,18 +328,28 @@ export function sendClientMessage(msg) {
530
328
  wsClient.send(msg);
531
329
  return true;
532
330
  }
331
+ /** Retry the singleton socket immediately, skipping any remaining backoff. */
332
+ export function reconnectWebSocketNow() {
333
+ wsClient?.reconnectNow();
334
+ }
533
335
  export function useWebSocket() {
534
336
  const initialized = useRef(false);
535
337
  useEffect(() => {
536
338
  if (initialized.current)
537
339
  return;
538
340
  initialized.current = true;
341
+ let disposed = false;
342
+ useConnectionStore.getState().noteSocketOpen();
539
343
  wsClient = new BrainUiClient({
540
344
  url: getWsUrl(),
541
345
  // One handler with a shared preamble, rather than sixteen copies of the
542
346
  // session-buffer demux — see handleServerMessage.
543
347
  handlers: { onAny: handleServerMessage },
544
348
  onStatusChange: handleStatusChange,
349
+ onClose: (close) => {
350
+ if (!disposed)
351
+ handleSocketClose(close);
352
+ },
545
353
  // A frame the SDK refused. Surfaced rather than logged into a console
546
354
  // nobody is attached to; the server-side counterpart is the
547
355
  // ws.frames.dropped counter.
@@ -563,6 +371,7 @@ export function useWebSocket() {
563
371
  window.addEventListener("online", reconnectNow);
564
372
  document.addEventListener("visibilitychange", onVisible);
565
373
  return () => {
374
+ disposed = true;
566
375
  window.removeEventListener("online", reconnectNow);
567
376
  document.removeEventListener("visibilitychange", onVisible);
568
377
  wsClient?.close();
@@ -1 +1 @@
1
- {"version":3,"file":"use-websocket.js","sourceRoot":"","sources":["../../src/hooks/use-websocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-websocket.js","sourceRoot":"","sources":["../../src/hooks/use-websocket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const activityFrameHandlers: {
2
+ activity_snapshot: (msg: import("@schlessera/brain-ui-sdk/protocol").ServerActivitySnapshot) => void;
3
+ activity_delta: (msg: import("@schlessera/brain-ui-sdk/protocol").ServerActivityDelta) => void;
4
+ };
5
+ //# sourceMappingURL=activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../../src/hooks/websocket-handlers/activity.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qBAAqB;;;CAOgB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { useActivityStore } from "../../stores/activity-store.js";
2
+ export const activityFrameHandlers = {
3
+ activity_snapshot: (msg) => {
4
+ useActivityStore.getState().applySnapshot(msg);
5
+ },
6
+ activity_delta: (msg) => {
7
+ useActivityStore.getState().applyDelta(msg);
8
+ },
9
+ };
10
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../../src/hooks/websocket-handlers/activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAKlE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE;QACzB,gBAAgB,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE;QACtB,gBAAgB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;CAC+C,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ServerMessage } from "@schlessera/brain-ui-sdk/protocol";
2
+ /** Map a frame to the run-state its session should show in the session list. */
3
+ export declare function runStateForFrame(msg: ServerMessage): "streaming" | "queued" | "idle";
4
+ export declare const chatFrameHandlers: {
5
+ text_delta: (msg: import("@schlessera/brain-ui-sdk/protocol").ServerTextDelta, context: import("./types.js").DispatchContext) => void;
6
+ thinking_delta: (msg: import("@schlessera/brain-ui-sdk/protocol").ServerThinkingDelta, context: import("./types.js").DispatchContext) => void;
7
+ tool_use_start: (msg: import("@schlessera/brain-ui-sdk/protocol").ServerToolUseStart, context: import("./types.js").DispatchContext) => void;
8
+ tool_input_delta: (msg: import("@schlessera/brain-ui-sdk/protocol").ServerToolInputDelta, context: import("./types.js").DispatchContext) => void;
9
+ tool_use_complete: (msg: import("@schlessera/brain-ui-sdk/protocol").ServerToolUseComplete, context: import("./types.js").DispatchContext) => void;
10
+ tool_approval_request: (msg: import("@schlessera/brain-ui-sdk/protocol").ServerToolApprovalRequest, context: import("./types.js").DispatchContext) => void;
11
+ tool_result: (msg: import("@schlessera/brain-ui-sdk/protocol").ServerToolResult, context: import("./types.js").DispatchContext) => void;
12
+ ask_user_request: (msg: import("@schlessera/brain-ui-sdk/protocol").ServerAskUserRequest, context: import("./types.js").DispatchContext) => void;
13
+ result: (msg: import("@schlessera/brain-ui-sdk/protocol").ServerResultMessage, context: import("./types.js").DispatchContext) => void;
14
+ session_history: (msg: import("@schlessera/brain-ui-sdk/protocol").ServerSessionHistory, context: import("./types.js").DispatchContext) => void;
15
+ status: (msg: import("@schlessera/brain-ui-sdk/protocol").ServerStatus, context: import("./types.js").DispatchContext) => void;
16
+ };
17
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../src/hooks/websocket-handlers/chat.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,aAAa,EAEd,MAAM,mCAAmC,CAAC;AAkG3C,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAOpF;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;CA+FgB,CAAC"}