@schlessera/brain-ui-react 0.34.0 → 0.35.0

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 (223) hide show
  1. package/README.md +12 -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/session-drawer.d.ts.map +1 -1
  41. package/dist/components/chat/session-drawer.js +25 -10
  42. package/dist/components/chat/session-drawer.js.map +1 -1
  43. package/dist/components/chat/tool-views.d.ts +2 -2
  44. package/dist/components/chat/tool-views.d.ts.map +1 -1
  45. package/dist/components/chat/tool-views.js +2 -16
  46. package/dist/components/chat/tool-views.js.map +1 -1
  47. package/dist/components/chat/use-markdown-highlight.d.ts +12 -0
  48. package/dist/components/chat/use-markdown-highlight.d.ts.map +1 -0
  49. package/dist/components/chat/use-markdown-highlight.js +56 -0
  50. package/dist/components/chat/use-markdown-highlight.js.map +1 -0
  51. package/dist/components/connectivity/connection-gate.d.ts.map +1 -1
  52. package/dist/components/connectivity/connection-gate.js +94 -8
  53. package/dist/components/connectivity/connection-gate.js.map +1 -1
  54. package/dist/components/connectivity/connection-state.d.ts +12 -0
  55. package/dist/components/connectivity/connection-state.d.ts.map +1 -0
  56. package/dist/components/connectivity/connection-state.js +23 -0
  57. package/dist/components/connectivity/connection-state.js.map +1 -0
  58. package/dist/components/graph/graph-canvas-lazy.d.ts +2 -0
  59. package/dist/components/graph/graph-canvas-lazy.d.ts.map +1 -0
  60. package/dist/components/graph/graph-canvas-lazy.js +4 -0
  61. package/dist/components/graph/graph-canvas-lazy.js.map +1 -0
  62. package/dist/components/graph/graph-controls.js +4 -1
  63. package/dist/components/graph/graph-controls.js.map +1 -1
  64. package/dist/components/graph/graph-maintenance.d.ts +8 -0
  65. package/dist/components/graph/graph-maintenance.d.ts.map +1 -0
  66. package/dist/components/graph/graph-maintenance.js +115 -0
  67. package/dist/components/graph/graph-maintenance.js.map +1 -0
  68. package/dist/components/graph/graph-page.d.ts.map +1 -1
  69. package/dist/components/graph/graph-page.js +11 -306
  70. package/dist/components/graph/graph-page.js.map +1 -1
  71. package/dist/components/graph/graph-scene.d.ts +8 -0
  72. package/dist/components/graph/graph-scene.d.ts.map +1 -0
  73. package/dist/components/graph/graph-scene.js +208 -0
  74. package/dist/components/graph/graph-scene.js.map +1 -0
  75. package/dist/components/graph/graph-spinner.d.ts +2 -0
  76. package/dist/components/graph/graph-spinner.d.ts.map +1 -0
  77. package/dist/components/graph/graph-spinner.js +6 -0
  78. package/dist/components/graph/graph-spinner.js.map +1 -0
  79. package/dist/components/layout/app-shell.d.ts.map +1 -1
  80. package/dist/components/layout/app-shell.js +2 -1
  81. package/dist/components/layout/app-shell.js.map +1 -1
  82. package/dist/components/quick-actions/add-modal.d.ts.map +1 -1
  83. package/dist/components/quick-actions/add-modal.js +47 -4
  84. package/dist/components/quick-actions/add-modal.js.map +1 -1
  85. package/dist/components/quick-actions/search-modal.d.ts.map +1 -1
  86. package/dist/components/quick-actions/search-modal.js +46 -18
  87. package/dist/components/quick-actions/search-modal.js.map +1 -1
  88. package/dist/components/quick-actions/streaming-modal.d.ts.map +1 -1
  89. package/dist/components/quick-actions/streaming-modal.js +4 -1
  90. package/dist/components/quick-actions/streaming-modal.js.map +1 -1
  91. package/dist/components/settings/devices-agents-tab.d.ts +5 -0
  92. package/dist/components/settings/devices-agents-tab.d.ts.map +1 -0
  93. package/dist/components/settings/devices-agents-tab.js +96 -0
  94. package/dist/components/settings/devices-agents-tab.js.map +1 -0
  95. package/dist/components/settings/one-time-agent-credential.d.ts +3 -0
  96. package/dist/components/settings/one-time-agent-credential.d.ts.map +1 -0
  97. package/dist/components/settings/one-time-agent-credential.js +55 -0
  98. package/dist/components/settings/one-time-agent-credential.js.map +1 -0
  99. package/dist/components/settings/settings-panel.d.ts.map +1 -1
  100. package/dist/components/settings/settings-panel.js +16 -3
  101. package/dist/components/settings/settings-panel.js.map +1 -1
  102. package/dist/hooks/use-vpn-status.d.ts +6 -1
  103. package/dist/hooks/use-vpn-status.d.ts.map +1 -1
  104. package/dist/hooks/use-vpn-status.js +67 -30
  105. package/dist/hooks/use-vpn-status.js.map +1 -1
  106. package/dist/hooks/use-websocket.d.ts +3 -2
  107. package/dist/hooks/use-websocket.d.ts.map +1 -1
  108. package/dist/hooks/use-websocket.js +65 -254
  109. package/dist/hooks/use-websocket.js.map +1 -1
  110. package/dist/hooks/websocket-handlers/activity.d.ts +5 -0
  111. package/dist/hooks/websocket-handlers/activity.d.ts.map +1 -0
  112. package/dist/hooks/websocket-handlers/activity.js +10 -0
  113. package/dist/hooks/websocket-handlers/activity.js.map +1 -0
  114. package/dist/hooks/websocket-handlers/chat.d.ts +17 -0
  115. package/dist/hooks/websocket-handlers/chat.d.ts.map +1 -0
  116. package/dist/hooks/websocket-handlers/chat.js +175 -0
  117. package/dist/hooks/websocket-handlers/chat.js.map +1 -0
  118. package/dist/hooks/websocket-handlers/connection.d.ts +6 -0
  119. package/dist/hooks/websocket-handlers/connection.d.ts.map +1 -0
  120. package/dist/hooks/websocket-handlers/connection.js +27 -0
  121. package/dist/hooks/websocket-handlers/connection.js.map +1 -0
  122. package/dist/hooks/websocket-handlers/index.d.ts +4 -0
  123. package/dist/hooks/websocket-handlers/index.d.ts.map +1 -0
  124. package/dist/hooks/websocket-handlers/index.js +19 -0
  125. package/dist/hooks/websocket-handlers/index.js.map +1 -0
  126. package/dist/hooks/websocket-handlers/mask.d.ts +4 -0
  127. package/dist/hooks/websocket-handlers/mask.d.ts.map +1 -0
  128. package/dist/hooks/websocket-handlers/mask.js +14 -0
  129. package/dist/hooks/websocket-handlers/mask.js.map +1 -0
  130. package/dist/hooks/websocket-handlers/provider.d.ts +4 -0
  131. package/dist/hooks/websocket-handlers/provider.d.ts.map +1 -0
  132. package/dist/hooks/websocket-handlers/provider.js +31 -0
  133. package/dist/hooks/websocket-handlers/provider.js.map +1 -0
  134. package/dist/hooks/websocket-handlers/types.d.ts +24 -0
  135. package/dist/hooks/websocket-handlers/types.d.ts.map +1 -0
  136. package/dist/hooks/websocket-handlers/types.js +2 -0
  137. package/dist/hooks/websocket-handlers/types.js.map +1 -0
  138. package/dist/lib/api-client.d.ts +32 -0
  139. package/dist/lib/api-client.d.ts.map +1 -1
  140. package/dist/lib/api-client.js +11 -0
  141. package/dist/lib/api-client.js.map +1 -1
  142. package/dist/lib/format-time.d.ts +3 -0
  143. package/dist/lib/format-time.d.ts.map +1 -0
  144. package/dist/lib/format-time.js +25 -0
  145. package/dist/lib/format-time.js.map +1 -0
  146. package/dist/lib/push-registration.d.ts +7 -0
  147. package/dist/lib/push-registration.d.ts.map +1 -0
  148. package/dist/lib/push-registration.js +26 -0
  149. package/dist/lib/push-registration.js.map +1 -0
  150. package/dist/stores/activity-store-helpers.d.ts +50 -0
  151. package/dist/stores/activity-store-helpers.d.ts.map +1 -0
  152. package/dist/stores/activity-store-helpers.js +143 -0
  153. package/dist/stores/activity-store-helpers.js.map +1 -0
  154. package/dist/stores/activity-store-types.d.ts +48 -0
  155. package/dist/stores/activity-store-types.d.ts.map +1 -0
  156. package/dist/stores/activity-store-types.js +2 -0
  157. package/dist/stores/activity-store-types.js.map +1 -0
  158. package/dist/stores/activity-store.d.ts +2 -78
  159. package/dist/stores/activity-store.d.ts.map +1 -1
  160. package/dist/stores/activity-store.js +22 -142
  161. package/dist/stores/activity-store.js.map +1 -1
  162. package/dist/stores/connection-store.d.ts +14 -2
  163. package/dist/stores/connection-store.d.ts.map +1 -1
  164. package/dist/stores/connection-store.js +17 -0
  165. package/dist/stores/connection-store.js.map +1 -1
  166. package/dist/stores/file-store.d.ts.map +1 -1
  167. package/dist/stores/file-store.js +54 -18
  168. package/dist/stores/file-store.js.map +1 -1
  169. package/dist/stores/principal-store.d.ts +16 -0
  170. package/dist/stores/principal-store.d.ts.map +1 -0
  171. package/dist/stores/principal-store.js +29 -0
  172. package/dist/stores/principal-store.js.map +1 -0
  173. package/dist/stores/ui-store.d.ts +1 -1
  174. package/dist/stores/ui-store.d.ts.map +1 -1
  175. package/dist/styles.css +1 -1
  176. package/package.json +2 -2
  177. package/src/components/activity/activity-page.tsx +6 -477
  178. package/src/components/activity/activity-rollups.tsx +94 -0
  179. package/src/components/activity/activity-run-detail.tsx +301 -0
  180. package/src/components/activity/activity-run-list.tsx +97 -0
  181. package/src/components/chat/brain-markdown-code.tsx +60 -0
  182. package/src/components/chat/brain-markdown-entities.tsx +116 -0
  183. package/src/components/chat/brain-markdown-links.tsx +247 -0
  184. package/src/components/chat/brain-markdown-share.ts +47 -0
  185. package/src/components/chat/brain-markdown.tsx +27 -535
  186. package/src/components/chat/composer.tsx +14 -1
  187. package/src/components/chat/session-drawer.tsx +29 -10
  188. package/src/components/chat/tool-views.tsx +2 -13
  189. package/src/components/chat/use-markdown-highlight.ts +63 -0
  190. package/src/components/connectivity/connection-gate.tsx +128 -14
  191. package/src/components/connectivity/connection-state.ts +37 -0
  192. package/src/components/graph/graph-canvas-lazy.tsx +4 -0
  193. package/src/components/graph/graph-controls.tsx +4 -1
  194. package/src/components/graph/graph-maintenance.tsx +304 -0
  195. package/src/components/graph/graph-page.tsx +11 -840
  196. package/src/components/graph/graph-scene.tsx +548 -0
  197. package/src/components/graph/graph-spinner.tsx +9 -0
  198. package/src/components/layout/app-shell.tsx +2 -0
  199. package/src/components/quick-actions/add-modal.tsx +49 -4
  200. package/src/components/quick-actions/search-modal.tsx +46 -18
  201. package/src/components/quick-actions/streaming-modal.tsx +3 -1
  202. package/src/components/settings/devices-agents-tab.tsx +231 -0
  203. package/src/components/settings/one-time-agent-credential.tsx +131 -0
  204. package/src/components/settings/settings-panel.tsx +20 -5
  205. package/src/hooks/use-vpn-status.ts +71 -31
  206. package/src/hooks/use-websocket.ts +74 -275
  207. package/src/hooks/websocket-handlers/activity.ts +13 -0
  208. package/src/hooks/websocket-handlers/chat.ts +210 -0
  209. package/src/hooks/websocket-handlers/connection.ts +30 -0
  210. package/src/hooks/websocket-handlers/index.ts +59 -0
  211. package/src/hooks/websocket-handlers/mask.ts +17 -0
  212. package/src/hooks/websocket-handlers/provider.ts +35 -0
  213. package/src/hooks/websocket-handlers/types.ts +27 -0
  214. package/src/lib/api-client.ts +40 -1
  215. package/src/lib/format-time.ts +20 -0
  216. package/src/lib/push-registration.ts +29 -0
  217. package/src/stores/activity-store-helpers.ts +164 -0
  218. package/src/stores/activity-store-types.ts +55 -0
  219. package/src/stores/activity-store.ts +21 -217
  220. package/src/stores/connection-store.ts +33 -2
  221. package/src/stores/file-store.ts +42 -12
  222. package/src/stores/principal-store.ts +38 -0
  223. package/src/stores/ui-store.ts +1 -1
@@ -1,58 +1,92 @@
1
- import { useEffect } from "react";
2
- import { useConnectionStore } from "../stores/connection-store.js";
1
+ import { useEffect, useState } from "react";
2
+ import { useConnectionStore, } from "../stores/connection-store.js";
3
3
  import { getBackendUrl } from "../lib/backend.js";
4
4
  const POLL_INTERVAL = 15_000;
5
5
  // Tighter cadence while offline so recovery is near-immediate
6
6
  const OFFLINE_POLL_INTERVAL = 3_000;
7
7
  const TIMEOUT_MS = 5_000;
8
+ let activeRecheck = null;
9
+ async function fetchVpnStatus() {
10
+ const controller = new AbortController();
11
+ const timeout = setTimeout(() => controller.abort(), TIMEOUT_MS);
12
+ try {
13
+ const res = await fetch(getBackendUrl("/api/vpn-check"), {
14
+ signal: controller.signal,
15
+ });
16
+ if (res.ok)
17
+ return "connected";
18
+ if (res.status === 401)
19
+ return "unauthorized";
20
+ if (res.status === 403)
21
+ return "forbidden";
22
+ return "unreachable";
23
+ }
24
+ catch {
25
+ return "unreachable";
26
+ }
27
+ finally {
28
+ clearTimeout(timeout);
29
+ }
30
+ }
31
+ /**
32
+ * Ask the mounted connectivity poller for a fresh reading. The poller remains
33
+ * the only writer of vpnStatus and serializes this with its scheduled checks.
34
+ */
35
+ export function recheckVpnStatus() {
36
+ activeRecheck?.();
37
+ }
8
38
  export function useVpnStatus() {
9
- const setVpnStatus = useConnectionStore((s) => s.setVpnStatus);
39
+ const [successfulProbeCount, setSuccessfulProbeCount] = useState(0);
10
40
  useEffect(() => {
11
41
  let timer;
12
42
  let inFlight = false;
43
+ let recheckRequested = false;
13
44
  let disposed = false;
14
45
  async function check() {
15
- if (inFlight || disposed)
46
+ if (disposed)
16
47
  return;
48
+ if (inFlight) {
49
+ recheckRequested = true;
50
+ return;
51
+ }
17
52
  inFlight = true;
18
- let connected = false;
53
+ const opensAtStart = useConnectionStore.getState().socketOpens;
19
54
  try {
20
- const controller = new AbortController();
21
- const timeout = setTimeout(() => controller.abort(), TIMEOUT_MS);
22
- const res = await fetch(getBackendUrl("/api/vpn-check"), {
23
- signal: controller.signal,
24
- });
25
- clearTimeout(timeout);
26
- if (res.ok) {
27
- setVpnStatus("connected");
28
- connected = true;
55
+ const status = await fetchVpnStatus();
56
+ // A socket that reached `open` while this probe was in flight is newer
57
+ // reachability evidence than a failure the probe was started for.
58
+ // Counting opens rather than sampling wsStatus twice also catches a
59
+ // drop and a replacement open inside one probe, where both samples
60
+ // read "connected".
61
+ const socketOpenedDuringCheck = useConnectionStore.getState().socketOpens !== opensAtStart;
62
+ if (!disposed && !(socketOpenedDuringCheck && status !== "connected")) {
63
+ useConnectionStore.getState().setVpnStatus(status);
64
+ if (status === "connected") {
65
+ setSuccessfulProbeCount((count) => count + 1);
66
+ }
29
67
  }
30
- else if (res.status === 401) {
31
- // Auth required (password / proxy mode) but no valid session yet.
32
- setVpnStatus("unauthorized");
33
- connected = true; // reachable — poll at the relaxed cadence
34
- }
35
- else if (res.status === 403) {
36
- setVpnStatus("forbidden");
37
- }
38
- else {
39
- setVpnStatus("unreachable");
40
- }
41
- }
42
- catch {
43
- setVpnStatus("unreachable");
44
68
  }
45
69
  finally {
46
70
  inFlight = false;
47
71
  if (!disposed) {
48
72
  clearTimeout(timer);
49
- timer = setTimeout(check, connected ? POLL_INTERVAL : OFFLINE_POLL_INTERVAL);
73
+ if (recheckRequested) {
74
+ recheckRequested = false;
75
+ void check();
76
+ }
77
+ else {
78
+ const status = useConnectionStore.getState().vpnStatus;
79
+ // Auth required but no valid session is still a reachable server.
80
+ const reachable = status === "connected" || status === "unauthorized";
81
+ timer = setTimeout(check, reachable ? POLL_INTERVAL : OFFLINE_POLL_INTERVAL);
82
+ }
50
83
  }
51
84
  }
52
85
  }
53
86
  // Re-check immediately when the network returns or the PWA is foregrounded
54
87
  // instead of waiting out the poll interval.
55
88
  const recheckNow = () => void check();
89
+ activeRecheck = recheckNow;
56
90
  const onVisible = () => {
57
91
  if (document.visibilityState === "visible")
58
92
  void check();
@@ -63,9 +97,12 @@ export function useVpnStatus() {
63
97
  return () => {
64
98
  disposed = true;
65
99
  clearTimeout(timer);
100
+ if (activeRecheck === recheckNow)
101
+ activeRecheck = null;
66
102
  window.removeEventListener("online", recheckNow);
67
103
  document.removeEventListener("visibilitychange", onVisible);
68
104
  };
69
- }, [setVpnStatus]);
105
+ }, []);
106
+ return successfulProbeCount;
70
107
  }
71
108
  //# sourceMappingURL=use-vpn-status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-vpn-status.js","sourceRoot":"","sources":["../../src/hooks/use-vpn-status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-vpn-status.js","sourceRoot":"","sources":["../../src/hooks/use-vpn-status.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import type { ServerMessage, ClientMessage } 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";
2
+ export { runStateForFrame } from "./websocket-handlers/chat.js";
4
3
  /**
5
4
  * Apply every buffered delta, in arrival order, and clear the buffer.
6
5
  *
@@ -23,6 +22,8 @@ export declare function handleServerMessage(msg: ServerMessage): void;
23
22
  * case and a caller that just staged an upload needs to know.
24
23
  */
25
24
  export declare function sendClientMessage(msg: ClientMessage): boolean;
25
+ /** Retry the singleton socket immediately, skipping any remaining backoff. */
26
+ export declare function reconnectWebSocketNow(): void;
26
27
  export declare function useWebSocket(): {
27
28
  send: (msg: ClientMessage) => void;
28
29
  };
@@ -1 +1 @@
1
- {"version":3,"file":"use-websocket.d.ts","sourceRoot":"","sources":["../../src/hooks/use-websocket.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAId,MAAM,mCAAmC,CAAC;AA0F3C,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAOpF;AA4DD;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAqCD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,QAsOrD;AAoHD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAK7D;AAED,wBAAgB,YAAY;gBA8CK,aAAa;EAK7C"}
1
+ {"version":3,"file":"use-websocket.d.ts","sourceRoot":"","sources":["../../src/hooks/use-websocket.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAEd,MAAM,mCAAmC,CAAC;AAM3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AA8DhE;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAqCD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,QAyFrD;AAwID;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAK7D;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,wBAAgB,YAAY;gBAoDK,aAAa;EAK7C"}
@@ -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?
@@ -112,10 +24,12 @@ export function runStateForFrame(msg) {
112
24
  * where the information exists, compatibility where it does not.
113
25
  */
114
26
  function isOurDraftAnnouncement(state, msg) {
115
- if (msg.type !== "session_info" && msg.type !== "result")
27
+ // A terminal result has no draft correlation. Another client's turn may
28
+ // finish before our session_info arrives, so it can never claim our draft.
29
+ if (msg.type !== "session_info")
116
30
  return false;
117
31
  const pending = state.pendingDraftId;
118
- if (msg.type === "session_info" && msg.draftId)
32
+ if (msg.draftId)
119
33
  return msg.draftId === pending;
120
34
  // No echo to compare against.
121
35
  return true;
@@ -197,21 +111,22 @@ export function handleServerMessage(msg) {
197
111
  flushDeltas();
198
112
  const state = useChatStore.getState();
199
113
  // 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);
114
+ if (msg.type === "server_hello" ||
115
+ msg.type === "activity_snapshot" ||
116
+ msg.type === "activity_delta") {
117
+ const key = state.activeSessionId;
118
+ dispatchServerMessage(msg, {
119
+ state,
120
+ frameSessionId: undefined,
121
+ key,
122
+ buffer: () => (key === null ? state.draft : state.buffers[key]),
123
+ enqueueDelta,
124
+ ensureActivitySubscription,
125
+ requestBrowserLocation,
126
+ resyncIfNeeded,
127
+ coldResumeIfNeeded,
128
+ markHistoryReplaced,
129
+ });
215
130
  return;
216
131
  }
217
132
  // Parallel-session demux (per-session buffers). Every frame is scoped by
@@ -261,149 +176,18 @@ export function handleServerMessage(msg) {
261
176
  const s = useChatStore.getState();
262
177
  return key === null ? s.draft : s.buffers[key];
263
178
  };
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
- }
179
+ dispatchServerMessage(msg, {
180
+ state,
181
+ frameSessionId,
182
+ key,
183
+ buffer,
184
+ enqueueDelta,
185
+ ensureActivitySubscription,
186
+ requestBrowserLocation,
187
+ resyncIfNeeded,
188
+ coldResumeIfNeeded,
189
+ markHistoryReplaced,
190
+ });
407
191
  }
408
192
  /**
409
193
  * The server asked the browser for its location (the agent called
@@ -460,6 +244,14 @@ function requestBrowserLocation(msg) {
460
244
  // reconnect), so a background session settling first cannot consume it.
461
245
  let wasDisconnected = false;
462
246
  let resyncSessionId = null;
247
+ function handleSocketClose(close) {
248
+ const connection = useConnectionStore.getState();
249
+ connection.recordWsClose(close.opened, close.code);
250
+ if (!close.opened &&
251
+ useConnectionStore.getState().handshakeFailures >= REFUSAL_ATTEMPTS) {
252
+ recheckVpnStatus();
253
+ }
254
+ }
463
255
  function resyncIfNeeded(sessionId) {
464
256
  if (!resyncSessionId || !sessionId || sessionId !== resyncSessionId)
465
257
  return;
@@ -474,6 +266,11 @@ function resyncIfNeeded(sessionId) {
474
266
  // connection — an empty session would otherwise re-trigger on every idle
475
267
  // status and loop.
476
268
  let coldResumedSessionId = null;
269
+ function markHistoryReplaced(key) {
270
+ if (key !== null && key === resyncSessionId)
271
+ resyncSessionId = null;
272
+ coldResumedSessionId = key;
273
+ }
477
274
  function coldResumeIfNeeded(sessionId, messageCount) {
478
275
  if (!sessionId || messageCount > 0)
479
276
  return;
@@ -484,6 +281,9 @@ function coldResumeIfNeeded(sessionId, messageCount) {
484
281
  }
485
282
  function handleStatusChange(status) {
486
283
  useConnectionStore.getState().setWsStatus(status);
284
+ if (status === "connected") {
285
+ useConnectionStore.getState().noteSocketOpen();
286
+ }
487
287
  // A status change can be followed by a history replay that rewrites the
488
288
  // buffer, so land whatever is still buffered before anything reads it. In a
489
289
  // hidden tab requestAnimationFrame does not run at all, which is exactly the
@@ -530,18 +330,28 @@ export function sendClientMessage(msg) {
530
330
  wsClient.send(msg);
531
331
  return true;
532
332
  }
333
+ /** Retry the singleton socket immediately, skipping any remaining backoff. */
334
+ export function reconnectWebSocketNow() {
335
+ wsClient?.reconnectNow();
336
+ }
533
337
  export function useWebSocket() {
534
338
  const initialized = useRef(false);
535
339
  useEffect(() => {
536
340
  if (initialized.current)
537
341
  return;
538
342
  initialized.current = true;
343
+ let disposed = false;
344
+ useConnectionStore.getState().noteSocketOpen();
539
345
  wsClient = new BrainUiClient({
540
346
  url: getWsUrl(),
541
347
  // One handler with a shared preamble, rather than sixteen copies of the
542
348
  // session-buffer demux — see handleServerMessage.
543
349
  handlers: { onAny: handleServerMessage },
544
350
  onStatusChange: handleStatusChange,
351
+ onClose: (close) => {
352
+ if (!disposed)
353
+ handleSocketClose(close);
354
+ },
545
355
  // A frame the SDK refused. Surfaced rather than logged into a console
546
356
  // nobody is attached to; the server-side counterpart is the
547
357
  // ws.frames.dropped counter.
@@ -563,6 +373,7 @@ export function useWebSocket() {
563
373
  window.addEventListener("online", reconnectNow);
564
374
  document.addEventListener("visibilitychange", onVisible);
565
375
  return () => {
376
+ disposed = true;
566
377
  window.removeEventListener("online", reconnectNow);
567
378
  document.removeEventListener("visibilitychange", onVisible);
568
379
  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"}