@parhelia/core 0.1.12836 → 0.1.12838

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 (80) hide show
  1. package/dist/components/ui/avatar.d.ts +30 -0
  2. package/dist/components/ui/avatar.js +46 -0
  3. package/dist/components/ui/avatar.js.map +1 -0
  4. package/dist/config/config.js +9 -2
  5. package/dist/config/config.js.map +1 -1
  6. package/dist/editor/client/EditorShell.js +67 -18
  7. package/dist/editor/client/EditorShell.js.map +1 -1
  8. package/dist/editor/client/editContext.d.ts +8 -0
  9. package/dist/editor/client/editContext.js.map +1 -1
  10. package/dist/editor/client/hooks/useEditorWebSocket.d.ts +2 -0
  11. package/dist/editor/client/hooks/useEditorWebSocket.js +214 -10
  12. package/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -1
  13. package/dist/editor/client/hooks/useWorkbox.js +19 -2
  14. package/dist/editor/client/hooks/useWorkbox.js.map +1 -1
  15. package/dist/editor/client/realtime/realtimeTransport.d.ts +56 -0
  16. package/dist/editor/client/realtime/realtimeTransport.js +197 -0
  17. package/dist/editor/client/realtime/realtimeTransport.js.map +1 -0
  18. package/dist/editor/menubar/ActiveUsers.js +17 -31
  19. package/dist/editor/menubar/ActiveUsers.js.map +1 -1
  20. package/dist/editor/menubar/User.js +2 -7
  21. package/dist/editor/menubar/User.js.map +1 -1
  22. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +48 -3
  23. package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
  24. package/dist/editor/page-editor-chrome/CommentHighlightings.js +180 -44
  25. package/dist/editor/page-editor-chrome/CommentHighlightings.js.map +1 -1
  26. package/dist/editor/page-editor-chrome/InlineEditor.js +145 -6
  27. package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -1
  28. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +40 -53
  29. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js.map +1 -1
  30. package/dist/editor/page-editor-chrome/overlay/geometry.d.ts +2 -0
  31. package/dist/editor/page-editor-chrome/overlay/geometry.js +45 -5
  32. package/dist/editor/page-editor-chrome/overlay/geometry.js.map +1 -1
  33. package/dist/editor/page-viewer/PageViewerFrame.js +45 -10
  34. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  35. package/dist/editor/page-viewer/pageViewContext.js +7 -1
  36. package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
  37. package/dist/editor/reviews/CommentView.js +7 -2
  38. package/dist/editor/reviews/CommentView.js.map +1 -1
  39. package/dist/editor/reviews/SuggestedEdit.js +7 -2
  40. package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
  41. package/dist/editor/reviews/SuggestionDisplayPopover.js +7 -2
  42. package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
  43. package/dist/editor/services/agentSubscriptionRegistry.js +12 -13
  44. package/dist/editor/services/agentSubscriptionRegistry.js.map +1 -1
  45. package/dist/editor/services/editService.d.ts +2 -0
  46. package/dist/editor/services/editService.js.map +1 -1
  47. package/dist/editor/services/systemService.d.ts +9 -0
  48. package/dist/editor/services/systemService.js +7 -0
  49. package/dist/editor/services/systemService.js.map +1 -1
  50. package/dist/editor/services/userResolution.d.ts +18 -0
  51. package/dist/editor/services/userResolution.js +86 -0
  52. package/dist/editor/services/userResolution.js.map +1 -0
  53. package/dist/editor/services/userService.d.ts +8 -0
  54. package/dist/editor/services/userService.js +26 -0
  55. package/dist/editor/services/userService.js.map +1 -1
  56. package/dist/editor/settings/panels/SystemSettingsPanel.d.ts +2 -0
  57. package/dist/editor/settings/panels/SystemSettingsPanel.js +69 -0
  58. package/dist/editor/settings/panels/SystemSettingsPanel.js.map +1 -0
  59. package/dist/editor/settings/panels/UserPreferencesPanel.js +50 -2
  60. package/dist/editor/settings/panels/UserPreferencesPanel.js.map +1 -1
  61. package/dist/editor/settings/panels/index.d.ts +1 -0
  62. package/dist/editor/settings/panels/index.js +1 -0
  63. package/dist/editor/settings/panels/index.js.map +1 -1
  64. package/dist/editor/settings/status/coreStatusChecks.js +65 -5
  65. package/dist/editor/settings/status/coreStatusChecks.js.map +1 -1
  66. package/dist/editor/setup-wizard/steps/ProviderStep.js +4 -4
  67. package/dist/editor/setup-wizard/steps/ProviderStep.js.map +1 -1
  68. package/dist/editor/ui/Section.js +6 -6
  69. package/dist/editor/ui/Section.js.map +1 -1
  70. package/dist/editor/ui/SimpleMenu.js +1 -1
  71. package/dist/editor/ui/SimpleMenu.js.map +1 -1
  72. package/dist/editor/views/editorSlotContext.js +5 -0
  73. package/dist/editor/views/editorSlotContext.js.map +1 -1
  74. package/dist/index.d.ts +2 -0
  75. package/dist/index.js +1 -0
  76. package/dist/index.js.map +1 -1
  77. package/dist/revision.d.ts +2 -2
  78. package/dist/revision.js +2 -2
  79. package/dist/types.d.ts +4 -0
  80. package/package.json +1 -1
@@ -43,6 +43,13 @@ export type SelectionRange = {
43
43
  /** Callback for replacing the selected text - each editing context provides its own implementation */
44
44
  replaceText?: (newText: string) => void;
45
45
  };
46
+ export type RemoteCaretPosition = {
47
+ sessionId: string;
48
+ fieldId?: string | null;
49
+ item?: ItemDescriptor | null;
50
+ offset: number | null;
51
+ value?: string | null;
52
+ };
46
53
  export type DialogProps<T> = {
47
54
  onClose: (result: T | null) => void;
48
55
  };
@@ -310,6 +317,7 @@ export type EditContextType = {
310
317
  setHistorySearchQuery: React.Dispatch<React.SetStateAction<string>>;
311
318
  refreshHistory: (mode?: "global" | "page-centric" | "current-version" | "timeline", filterBySession?: boolean, filterByLanguage?: boolean) => Promise<void>;
312
319
  activeSessions: EditSession[];
320
+ remoteCarets: Record<string, RemoteCaretPosition>;
313
321
  validating: boolean;
314
322
  isCommandDisabled: <T extends CommandData>({ command, data, }: {
315
323
  command: Command<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"editContext.js","sourceRoot":"","sources":["../../../src/editor/client/editContext.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAK,EAAE,EAGZ,UAAU,EAEV,MAAM,GACP,MAAM,OAAO,CAAC;AAwoBf,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAA8B,SAAS,CAAC,CAAC;AAChF,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC,QAAQ,CAAC;AAExD,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAE5D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACxC,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC;IAElC,OAAO,UAAU,CAAC;AACpB,CAAC;AAwCD,MAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAE3C,SAAS,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,QAAQ,CAAC;AAEpE,mDAAmD;AACnD,MAAM,UAAU,uBAAuB;IACrC,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACxC,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC;IAElC,OAAO,UAAU,CAAC;AACpB,CAAC;AASD,MAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAE3C,SAAS,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,QAAQ,CAAC"}
1
+ {"version":3,"file":"editContext.js","sourceRoot":"","sources":["../../../src/editor/client/editContext.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAK,EAAE,EAGZ,UAAU,EAEV,MAAM,GACP,MAAM,OAAO,CAAC;AAipBf,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAA8B,SAAS,CAAC,CAAC;AAChF,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC,QAAQ,CAAC;AAExD,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAE5D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACxC,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC;IAElC,OAAO,UAAU,CAAC;AACpB,CAAC;AAwCD,MAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAE3C,SAAS,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,QAAQ,CAAC;AAEpE,mDAAmD;AACnD,MAAM,UAAU,uBAAuB;IACrC,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACxC,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC;IAElC,OAAO,UAAU,CAAC;AACpB,CAAC;AASD,MAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAE3C,SAAS,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,QAAQ,CAAC"}
@@ -28,6 +28,8 @@ export declare function useEditorWebSocket(params: {
28
28
  requestQuota?: () => void;
29
29
  sendClientInfo: () => Promise<void> | void;
30
30
  setSocketDiagnostics?: Dispatch<SetStateAction<EditorSocketDiagnostics>>;
31
+ enableWebSocketTransport?: boolean;
32
+ enableSseFallback?: boolean;
31
33
  }): {
32
34
  readonly socketRef: import("react").RefObject<WebSocket | null>;
33
35
  };
@@ -1,6 +1,7 @@
1
1
  import { useEffect, useRef } from "react";
2
2
  import { checkConnectionAvailability, } from "../../services/editService";
3
3
  import { createEditorSocketDiagnostics, getEditorSocketReadyStateLabel, } from "../socketDiagnostics";
4
+ import { createSseTransport, createWebSocketAdapter, ensureEditorRealtimeHandle, getEditorRealtime, setActiveTransport, setReconnectHandler, } from "../realtime/realtimeTransport";
4
5
  /**
5
6
  * Closes the active editor websocket so the hook's own reconnect machinery picks it back
6
7
  * up. Used by recovery code that wants the freshly opened socket to re-issue agent
@@ -13,6 +14,13 @@ import { createEditorSocketDiagnostics, getEditorSocketReadyStateLabel, } from "
13
14
  * scheduleReconnect tick.
14
15
  */
15
16
  export function forceEditorSocketReconnect(reason) {
17
+ // In SSE fallback mode there is no globalThis.editorSocket; route through the transport handle,
18
+ // which re-establishes the EventSource via the hook's registered reconnect handler.
19
+ const realtime = getEditorRealtime();
20
+ if (realtime.mode() === "sse") {
21
+ realtime.reconnect(reason);
22
+ return true;
23
+ }
16
24
  const socket = globalThis.editorSocket;
17
25
  if (!socket)
18
26
  return false;
@@ -29,13 +37,17 @@ export function forceEditorSocketReconnect(reason) {
29
37
  return false;
30
38
  }
31
39
  export function useEditorWebSocket(params) {
32
- const { sessionId, onMessage, onOpen, onError, onConcurrentUserLimit, onSessionRevoked, connectSocket, requestQuota, sendClientInfo, setSocketDiagnostics, } = params;
40
+ const { sessionId, onMessage, onOpen, onError, onConcurrentUserLimit, onSessionRevoked, connectSocket, requestQuota, sendClientInfo, setSocketDiagnostics, enableWebSocketTransport = true, enableSseFallback = true, } = params;
33
41
  const socketInstanceRef = useRef(null);
34
42
  const attachedMessageHandlerRef = useRef(null);
35
43
  const reconnectTimeoutRef = useRef(null);
36
44
  const reconnectAttemptsRef = useRef(0);
37
45
  const reconnectCountRef = useRef(0);
38
46
  const isConcurrentUserLimitRef = useRef(false);
47
+ const modeRef = useRef(null);
48
+ const sseTransportRef = useRef(null);
49
+ const hadOpenedRef = useRef(false);
50
+ const fallbackTimerRef = useRef(null);
39
51
  // Stable refs for callbacks to avoid re-connecting on every render
40
52
  const onMessageRef = useRef(onMessage);
41
53
  const onOpenRef = useRef(onOpen);
@@ -44,6 +56,14 @@ export function useEditorWebSocket(params) {
44
56
  const onSessionRevokedRef = useRef(onSessionRevoked);
45
57
  const requestQuotaRef = useRef(requestQuota);
46
58
  const sendClientInfoRef = useRef(sendClientInfo);
59
+ const wsEnabledRef = useRef(enableWebSocketTransport);
60
+ const sseEnabledRef = useRef(enableSseFallback);
61
+ useEffect(() => {
62
+ wsEnabledRef.current = enableWebSocketTransport;
63
+ }, [enableWebSocketTransport]);
64
+ useEffect(() => {
65
+ sseEnabledRef.current = enableSseFallback;
66
+ }, [enableSseFallback]);
47
67
  useEffect(() => {
48
68
  onMessageRef.current = onMessage;
49
69
  }, [onMessage]);
@@ -116,7 +136,7 @@ export function useEditorWebSocket(params) {
116
136
  }, socket);
117
137
  };
118
138
  const scheduleReconnect = (socket) => {
119
- if (reconnectTimeoutRef.current) {
139
+ if (reconnectTimeoutRef.current || modeRef.current === "sse") {
120
140
  return;
121
141
  }
122
142
  const attempts = reconnectAttemptsRef.current;
@@ -140,7 +160,146 @@ export function useEditorWebSocket(params) {
140
160
  attachedMessageHandlerRef.current = handler;
141
161
  markSocketEvent(reusedExistingSocket ? "reused-socket" : "connect-attempt", socket);
142
162
  };
163
+ // Hoisted so both the WebSocket and the SSE fallback dispatch incoming messages identically.
164
+ const handleMessage = (event) => {
165
+ if (shouldRecordSocketMessageActivity(event)) {
166
+ markSocketEvent("message", socketInstanceRef.current, {
167
+ lastMessageAt: new Date().toISOString(),
168
+ });
169
+ }
170
+ onMessageRef.current?.(event);
171
+ };
172
+ const clearFallbackTimer = () => {
173
+ if (fallbackTimerRef.current) {
174
+ clearTimeout(fallbackTimerRef.current);
175
+ fallbackTimerRef.current = null;
176
+ }
177
+ };
178
+ const startFallbackTimer = () => {
179
+ clearFallbackTimer();
180
+ if (!sseEnabledRef.current)
181
+ return; // SSE fallback disabled in settings.
182
+ fallbackTimerRef.current = setTimeout(() => {
183
+ fallbackTimerRef.current = null;
184
+ const ws = socketInstanceRef.current;
185
+ if (!disposed &&
186
+ modeRef.current !== "sse" &&
187
+ !isConcurrentUserLimitRef.current &&
188
+ (!ws || ws.readyState !== WebSocket.OPEN)) {
189
+ fallbackToSse();
190
+ }
191
+ }, 5000);
192
+ };
193
+ // Establishes (or re-establishes) the SSE fallback transport for the rest of the page lifetime.
194
+ const connectSse = () => {
195
+ if (disposed)
196
+ return;
197
+ modeRef.current = "sse";
198
+ clearFallbackTimer();
199
+ if (reconnectTimeoutRef.current) {
200
+ clearTimeout(reconnectTimeoutRef.current);
201
+ reconnectTimeoutRef.current = null;
202
+ }
203
+ const existingWs = globalThis.editorSocket;
204
+ try {
205
+ existingWs?.close();
206
+ }
207
+ catch {
208
+ /* ignore */
209
+ }
210
+ globalThis.editorSocket = undefined;
211
+ socketInstanceRef.current = null;
212
+ sseTransportRef.current?.close();
213
+ const sse = createSseTransport(sessionId, {
214
+ onOpen: () => {
215
+ if (disposed)
216
+ return;
217
+ isConcurrentUserLimitRef.current = false;
218
+ markSocketEvent("open", null, {
219
+ lastOpenAt: new Date().toISOString(),
220
+ lastCloseCode: null,
221
+ lastCloseReason: null,
222
+ lastErrorMessage: null,
223
+ });
224
+ onOpenRef.current?.();
225
+ sendClientInfoRef.current?.();
226
+ requestQuotaRef.current?.();
227
+ },
228
+ onMessage: (event) => {
229
+ if (!disposed)
230
+ handleMessage(event);
231
+ },
232
+ onError: (event) => {
233
+ if (disposed)
234
+ return;
235
+ markSocketEvent("error", null, {
236
+ lastErrorAt: new Date().toISOString(),
237
+ });
238
+ onErrorRef.current?.(event);
239
+ // EventSource auto-reconnects on transient drops. Disambiguate a concurrent-user-limit
240
+ // rejection (surface it) from a transient failure (let EventSource retry).
241
+ checkConnectionAvailability(sessionId)
242
+ .then((availability) => {
243
+ if (disposed || availability.allowed)
244
+ return;
245
+ isConcurrentUserLimitRef.current = true;
246
+ if (availability.currentUsers !== undefined &&
247
+ availability.maxUsers !== undefined &&
248
+ availability.message) {
249
+ onConcurrentUserLimitRef.current?.({
250
+ currentUsers: availability.currentUsers,
251
+ maxUsers: availability.maxUsers,
252
+ message: availability.message,
253
+ });
254
+ }
255
+ })
256
+ .catch(() => { });
257
+ },
258
+ onSessionRevoked: () => {
259
+ if (disposed)
260
+ return;
261
+ sseTransportRef.current?.close();
262
+ sseTransportRef.current = null;
263
+ setActiveTransport(null);
264
+ onSessionRevokedRef.current?.();
265
+ },
266
+ });
267
+ sseTransportRef.current = sse;
268
+ setActiveTransport(sse);
269
+ };
270
+ function fallbackToSse() {
271
+ if (disposed || modeRef.current === "sse")
272
+ return;
273
+ if (!sseEnabledRef.current)
274
+ return; // SSE fallback disabled in settings.
275
+ connectSse();
276
+ }
277
+ ensureEditorRealtimeHandle();
278
+ setReconnectHandler((reason) => {
279
+ if (disposed)
280
+ return;
281
+ if (modeRef.current === "sse") {
282
+ connectSse();
283
+ }
284
+ else {
285
+ const ws = globalThis.editorSocket;
286
+ try {
287
+ ws?.close(4000, reason);
288
+ }
289
+ catch {
290
+ /* ignore */
291
+ }
292
+ }
293
+ });
143
294
  const connect = async () => {
295
+ if (disposed || modeRef.current === "sse")
296
+ return;
297
+ // WebSocket transport disabled in settings — skip straight to SSE (if it's enabled).
298
+ if (!wsEnabledRef.current) {
299
+ if (sseEnabledRef.current)
300
+ connectSse();
301
+ return;
302
+ }
144
303
  // Check connection availability before attempting WebSocket connection
145
304
  try {
146
305
  const availability = await checkConnectionAvailability(sessionId);
@@ -176,14 +335,6 @@ export function useEditorWebSocket(params) {
176
335
  existingSocketSessionId !== sessionId ||
177
336
  socket.readyState === WebSocket.CLOSING ||
178
337
  socket.readyState === WebSocket.CLOSED;
179
- const handleMessage = (event) => {
180
- if (shouldRecordSocketMessageActivity(event)) {
181
- markSocketEvent("message", socketInstanceRef.current ?? socket, {
182
- lastMessageAt: new Date().toISOString(),
183
- });
184
- }
185
- onMessageRef.current?.(event);
186
- };
187
338
  if (needsNewSocket) {
188
339
  if (socket &&
189
340
  existingSocketSessionId &&
@@ -201,6 +352,9 @@ export function useEditorWebSocket(params) {
201
352
  }
202
353
  reconnectAttemptsRef.current = 0;
203
354
  isConcurrentUserLimitRef.current = false;
355
+ hadOpenedRef.current = true;
356
+ modeRef.current = "websocket";
357
+ clearFallbackTimer();
204
358
  markSocketEvent("open", socket, {
205
359
  lastOpenAt: new Date().toISOString(),
206
360
  lastCloseCode: null,
@@ -236,6 +390,33 @@ export function useEditorWebSocket(params) {
236
390
  onSessionRevokedRef.current?.();
237
391
  return;
238
392
  }
393
+ // A WebSocket that closes before it ever opened indicates the transport is unavailable
394
+ // in this environment (IIS feature missing, Upgrade stripped). Fall back to SSE for the
395
+ // page lifetime instead of retrying the WebSocket — but only after ruling out a
396
+ // concurrent-user-limit rejection.
397
+ if (!hadOpenedRef.current && modeRef.current !== "sse") {
398
+ checkConnectionAvailability(sessionId)
399
+ .then((availability) => {
400
+ if (disposed)
401
+ return;
402
+ if (!availability.allowed) {
403
+ isConcurrentUserLimitRef.current = true;
404
+ if (availability.currentUsers !== undefined &&
405
+ availability.maxUsers !== undefined &&
406
+ availability.message) {
407
+ onConcurrentUserLimitRef.current?.({
408
+ currentUsers: availability.currentUsers,
409
+ maxUsers: availability.maxUsers,
410
+ message: availability.message,
411
+ });
412
+ }
413
+ return;
414
+ }
415
+ fallbackToSse();
416
+ })
417
+ .catch(() => fallbackToSse());
418
+ return;
419
+ }
239
420
  if (shouldCheckAvailability) {
240
421
  checkConnectionAvailability(sessionId)
241
422
  .then((availability) => {
@@ -274,10 +455,21 @@ export function useEditorWebSocket(params) {
274
455
  onErrorRef.current?.(error);
275
456
  });
276
457
  globalThis.editorSocket = socket;
458
+ // Expose this socket as the active realtime transport and arm the SSE fallback timer:
459
+ // if it does not reach OPEN shortly, switch to SSE for the page lifetime.
460
+ setActiveTransport(createWebSocketAdapter(socket));
461
+ startFallbackTimer();
277
462
  }
278
463
  if (socket) {
279
464
  attach(socket, handleMessage, !needsNewSocket);
465
+ if (!needsNewSocket) {
466
+ // Reused an already-open socket — expose it as the active transport.
467
+ modeRef.current = "websocket";
468
+ setActiveTransport(createWebSocketAdapter(socket));
469
+ }
280
470
  if (socket.readyState === WebSocket.OPEN) {
471
+ hadOpenedRef.current = true;
472
+ clearFallbackTimer();
281
473
  updateSocketDiagnostics({}, socket);
282
474
  sendClientInfoRef.current?.();
283
475
  requestQuotaRef.current?.();
@@ -295,6 +487,18 @@ export function useEditorWebSocket(params) {
295
487
  clearTimeout(reconnectTimeoutRef.current);
296
488
  reconnectTimeoutRef.current = null;
297
489
  }
490
+ clearFallbackTimer();
491
+ setReconnectHandler(null);
492
+ if (sseTransportRef.current) {
493
+ sseTransportRef.current.close();
494
+ sseTransportRef.current = null;
495
+ }
496
+ if (getEditorRealtime().mode() !== "websocket") {
497
+ // Only clear the active transport if it isn't a live WebSocket we want to keep across
498
+ // re-renders (the WS path intentionally persists globalThis.editorSocket).
499
+ setActiveTransport(null);
500
+ }
501
+ modeRef.current = null;
298
502
  if (socketInstanceRef.current && attachedMessageHandlerRef.current) {
299
503
  socketInstanceRef.current.removeEventListener("message", attachedMessageHandlerRef.current);
300
504
  attachedMessageHandlerRef.current = null;
@@ -1 +1 @@
1
- {"version":3,"file":"useEditorWebSocket.js","sourceRoot":"","sources":["../../../../src/editor/client/hooks/useEditorWebSocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useEditorWebSocket.js","sourceRoot":"","sources":["../../../../src/editor/client/hooks/useEditorWebSocket.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,22 @@ import { useCallback, useEffect, useRef, useState } from "react";
2
2
  import { useDebouncedCallback } from "use-debounce";
3
3
  import { getWorkbox } from "../../services/contentService";
4
4
  import { buildWorkboxDescriptorRequest } from "./workboxDescriptors";
5
+ function getDescriptorKey(item) {
6
+ return [
7
+ item.id?.toLowerCase() ?? "",
8
+ item.language?.toLowerCase() ?? "",
9
+ item.version ?? 0,
10
+ item.database?.toLowerCase() ?? "",
11
+ ].join("|");
12
+ }
13
+ function getWorkboxRequestKey(request) {
14
+ const itemsKey = request.items.map(getDescriptorKey).sort().join(",");
15
+ const renderedItemsKey = request.renderedItems
16
+ .map(getDescriptorKey)
17
+ .sort()
18
+ .join(",");
19
+ return `${itemsKey}::${renderedItemsKey}`;
20
+ }
5
21
  export function useWorkbox(params) {
6
22
  const { page, currentItemDescriptor, validate } = params;
7
23
  const [workboxItems, setWorkboxItems] = useState([]);
@@ -52,14 +68,15 @@ export function useWorkbox(params) {
52
68
  const loadWorkboxDebounced = useDebouncedCallback((items, renderedItems, requestId) => {
53
69
  loadWorkbox(items, renderedItems, requestId);
54
70
  }, 500);
71
+ const request = buildWorkboxDescriptorRequest(page, currentItemDescriptor);
72
+ const requestKey = getWorkboxRequestKey(request);
55
73
  useEffect(() => {
56
- const request = buildWorkboxDescriptorRequest(page, currentItemDescriptor);
57
74
  const requestId = requestIdRef.current + 1;
58
75
  requestIdRef.current = requestId;
59
76
  setIsWorkboxLoading(request.items.length > 0 || request.renderedItems.length > 0);
60
77
  loadWorkboxDebounced(request.items, request.renderedItems, requestId);
61
78
  return () => loadWorkboxDebounced.cancel();
62
- }, [page, currentItemDescriptor, loadWorkboxDebounced]);
79
+ }, [requestKey]);
63
80
  return { workboxItems, isWorkboxLoading };
64
81
  }
65
82
  //# sourceMappingURL=useWorkbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useWorkbox.js","sourceRoot":"","sources":["../../../../src/editor/client/hooks/useWorkbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useWorkbox.js","sourceRoot":"","sources":["../../../../src/editor/client/hooks/useWorkbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ export type RealtimeMode = "websocket" | "sse";
2
+ export interface RealtimeMessage {
3
+ type: string;
4
+ [key: string]: unknown;
5
+ }
6
+ export interface RealtimeTransportAdapter {
7
+ readonly mode: RealtimeMode;
8
+ isOpen(): boolean;
9
+ send(message: RealtimeMessage): void;
10
+ /**
11
+ * Sends and resolves once the message is known to have reached the server (WebSocket: on
12
+ * synchronous send; SSE: when the POST completes). Resolves false if it could not be delivered.
13
+ * Used by callers that must not record server-side state until delivery is confirmed (e.g.
14
+ * agent subscriptions).
15
+ */
16
+ sendWithAck(message: RealtimeMessage): Promise<boolean>;
17
+ close(): void;
18
+ }
19
+ export declare function setReconnectHandler(fn: ((reason: string) => void) | null): void;
20
+ export interface EditorRealtimeHandle {
21
+ /** Sends a client->server message over whichever transport is active. No-op if none is open. */
22
+ send(message: RealtimeMessage): boolean;
23
+ /** Sends and resolves once delivery to the server is confirmed (false if not delivered). */
24
+ sendWithAck(message: RealtimeMessage): Promise<boolean>;
25
+ /** True when a transport is attached and able to send. */
26
+ isOpen(): boolean;
27
+ /** "websocket" | "sse" | null when disconnected. */
28
+ mode(): RealtimeMode | null;
29
+ /** Drops the active transport so the hook's connect loop re-establishes it (recovery paths). */
30
+ reconnect(reason: string): void;
31
+ }
32
+ /** Installs the global handle. Idempotent; call once at module load. */
33
+ export declare function ensureEditorRealtimeHandle(): EditorRealtimeHandle;
34
+ export declare function getEditorRealtime(): EditorRealtimeHandle;
35
+ /** Sets the active transport (called by the connection hook when WS/SSE attaches). */
36
+ export declare function setActiveTransport(transport: RealtimeTransportAdapter | null): void;
37
+ export declare function getActiveTransport(): RealtimeTransportAdapter | null;
38
+ export declare function createWebSocketAdapter(socket: WebSocket): RealtimeTransportAdapter;
39
+ export interface SseTransportCallbacks {
40
+ onOpen: () => void;
41
+ onMessage: (event: {
42
+ data: string;
43
+ }) => void;
44
+ onError: (error: Event) => void;
45
+ onSessionRevoked: () => void;
46
+ }
47
+ export interface SseTransport extends RealtimeTransportAdapter {
48
+ readonly eventSource: EventSource;
49
+ }
50
+ /**
51
+ * Opens an EventSource to the SSE stream and returns an adapter whose `send` POSTs client->server
52
+ * messages through a per-session FIFO queue (HTTP POSTs have no ordering guarantee, unlike a
53
+ * WebSocket). Consecutive pending `caret-position` messages collapse to the latest (the server
54
+ * coalesces them anyway); all other message types preserve strict order.
55
+ */
56
+ export declare function createSseTransport(sessionId: string, callbacks: SseTransportCallbacks): SseTransport;