@schlessera/brain-ui-server 0.34.1 → 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 (169) hide show
  1. package/README.md +28 -0
  2. package/dist/activity/notify.d.ts.map +1 -1
  3. package/dist/activity/notify.js +18 -8
  4. package/dist/activity/notify.js.map +1 -1
  5. package/dist/activity/push-sender.d.ts +7 -3
  6. package/dist/activity/push-sender.d.ts.map +1 -1
  7. package/dist/activity/push-sender.js +45 -11
  8. package/dist/activity/push-sender.js.map +1 -1
  9. package/dist/activity/query.d.ts.map +1 -1
  10. package/dist/activity/query.js +8 -0
  11. package/dist/activity/query.js.map +1 -1
  12. package/dist/activity/recorder.d.ts +11 -1
  13. package/dist/activity/recorder.d.ts.map +1 -1
  14. package/dist/activity/recorder.js +52 -2
  15. package/dist/activity/recorder.js.map +1 -1
  16. package/dist/activity/runtime.d.ts.map +1 -1
  17. package/dist/activity/runtime.js +2 -5
  18. package/dist/activity/runtime.js.map +1 -1
  19. package/dist/activity/sql.d.ts +3 -3
  20. package/dist/activity/sql.d.ts.map +1 -1
  21. package/dist/activity/sql.js +7 -5
  22. package/dist/activity/sql.js.map +1 -1
  23. package/dist/activity/store.d.ts +7 -0
  24. package/dist/activity/store.d.ts.map +1 -1
  25. package/dist/activity/store.js +15 -3
  26. package/dist/activity/store.js.map +1 -1
  27. package/dist/activity/stream.d.ts +3 -1
  28. package/dist/activity/stream.d.ts.map +1 -1
  29. package/dist/activity/stream.js +32 -17
  30. package/dist/activity/stream.js.map +1 -1
  31. package/dist/app-env.d.ts +8 -0
  32. package/dist/app-env.d.ts.map +1 -0
  33. package/dist/app-env.js +2 -0
  34. package/dist/app-env.js.map +1 -0
  35. package/dist/app.d.ts.map +1 -1
  36. package/dist/app.js +28 -3
  37. package/dist/app.js.map +1 -1
  38. package/dist/brain/client.d.ts +4 -2
  39. package/dist/brain/client.d.ts.map +1 -1
  40. package/dist/brain/client.js +60 -20
  41. package/dist/brain/client.js.map +1 -1
  42. package/dist/brain/types.d.ts +9 -0
  43. package/dist/brain/types.d.ts.map +1 -1
  44. package/dist/cron/run-job.d.ts.map +1 -1
  45. package/dist/cron/run-job.js +60 -10
  46. package/dist/cron/run-job.js.map +1 -1
  47. package/dist/db/principals.d.ts +72 -0
  48. package/dist/db/principals.d.ts.map +1 -0
  49. package/dist/db/principals.js +294 -0
  50. package/dist/db/principals.js.map +1 -0
  51. package/dist/files/walker.d.ts.map +1 -1
  52. package/dist/files/walker.js +6 -1
  53. package/dist/files/walker.js.map +1 -1
  54. package/dist/index.d.ts +4 -1
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +1 -1
  57. package/dist/index.js.map +1 -1
  58. package/dist/middleware/auth.d.ts +37 -9
  59. package/dist/middleware/auth.d.ts.map +1 -1
  60. package/dist/middleware/auth.js +148 -74
  61. package/dist/middleware/auth.js.map +1 -1
  62. package/dist/middleware/passkeys.d.ts +9 -7
  63. package/dist/middleware/passkeys.d.ts.map +1 -1
  64. package/dist/middleware/passkeys.js +25 -7
  65. package/dist/middleware/passkeys.js.map +1 -1
  66. package/dist/middleware/principals.d.ts +18 -0
  67. package/dist/middleware/principals.d.ts.map +1 -0
  68. package/dist/middleware/principals.js +138 -0
  69. package/dist/middleware/principals.js.map +1 -0
  70. package/dist/middleware/require-owner.d.ts +5 -0
  71. package/dist/middleware/require-owner.d.ts.map +1 -0
  72. package/dist/middleware/require-owner.js +10 -0
  73. package/dist/middleware/require-owner.js.map +1 -0
  74. package/dist/observability/loggers.js +1 -1
  75. package/dist/observability/loggers.js.map +1 -1
  76. package/dist/routes/activity.d.ts.map +1 -1
  77. package/dist/routes/activity.js +3 -0
  78. package/dist/routes/activity.js.map +1 -1
  79. package/dist/routes/brain.d.ts.map +1 -1
  80. package/dist/routes/brain.js +102 -63
  81. package/dist/routes/brain.js.map +1 -1
  82. package/dist/routes/files.d.ts.map +1 -1
  83. package/dist/routes/files.js +7 -2
  84. package/dist/routes/files.js.map +1 -1
  85. package/dist/routes/push.d.ts +61 -2
  86. package/dist/routes/push.d.ts.map +1 -1
  87. package/dist/routes/push.js +8 -3
  88. package/dist/routes/push.js.map +1 -1
  89. package/dist/routes/sessions.d.ts.map +1 -1
  90. package/dist/routes/sessions.js +30 -4
  91. package/dist/routes/sessions.js.map +1 -1
  92. package/dist/share/staging.d.ts.map +1 -1
  93. package/dist/share/staging.js +11 -4
  94. package/dist/share/staging.js.map +1 -1
  95. package/dist/ws/bridge.d.ts.map +1 -1
  96. package/dist/ws/bridge.js +6 -2
  97. package/dist/ws/bridge.js.map +1 -1
  98. package/dist/ws/clients.d.ts +9 -2
  99. package/dist/ws/clients.d.ts.map +1 -1
  100. package/dist/ws/clients.js +44 -6
  101. package/dist/ws/clients.js.map +1 -1
  102. package/dist/ws/connection.d.ts +7 -4
  103. package/dist/ws/connection.d.ts.map +1 -1
  104. package/dist/ws/connection.js +83 -12
  105. package/dist/ws/connection.js.map +1 -1
  106. package/dist/ws/dispatch.d.ts +12 -1
  107. package/dist/ws/dispatch.d.ts.map +1 -1
  108. package/dist/ws/dispatch.js +46 -6
  109. package/dist/ws/dispatch.js.map +1 -1
  110. package/dist/ws/history.d.ts.map +1 -1
  111. package/dist/ws/history.js +7 -5
  112. package/dist/ws/history.js.map +1 -1
  113. package/dist/ws/host.d.ts +22 -0
  114. package/dist/ws/host.d.ts.map +1 -1
  115. package/dist/ws/host.js +39 -1
  116. package/dist/ws/host.js.map +1 -1
  117. package/dist/ws/run-session.d.ts +7 -7
  118. package/dist/ws/run-session.d.ts.map +1 -1
  119. package/dist/ws/run-session.js +208 -52
  120. package/dist/ws/run-session.js.map +1 -1
  121. package/dist/ws/shrink.d.ts +3 -1
  122. package/dist/ws/shrink.d.ts.map +1 -1
  123. package/dist/ws/shrink.js +46 -16
  124. package/dist/ws/shrink.js.map +1 -1
  125. package/dist/ws/turns.d.ts +58 -3
  126. package/dist/ws/turns.d.ts.map +1 -1
  127. package/dist/ws/turns.js +101 -2
  128. package/dist/ws/turns.js.map +1 -1
  129. package/migrations/011_principals.sql +13 -0
  130. package/migrations/012_activity_principals.sql +12 -0
  131. package/migrations/013_push_subscription_principals.sql +7 -0
  132. package/migrations/014_invalidate_legacy_sessions.sql +14 -0
  133. package/package.json +3 -3
  134. package/src/activity/notify.ts +16 -7
  135. package/src/activity/push-sender.ts +79 -16
  136. package/src/activity/query.ts +8 -0
  137. package/src/activity/recorder.ts +68 -3
  138. package/src/activity/runtime.ts +2 -5
  139. package/src/activity/sql.ts +7 -5
  140. package/src/activity/store.ts +32 -1
  141. package/src/activity/stream.ts +37 -17
  142. package/src/app-env.ts +8 -0
  143. package/src/app.ts +33 -4
  144. package/src/brain/client.ts +61 -20
  145. package/src/brain/types.ts +10 -0
  146. package/src/cron/run-job.ts +41 -17
  147. package/src/db/principals.ts +452 -0
  148. package/src/files/walker.ts +5 -1
  149. package/src/index.ts +6 -1
  150. package/src/middleware/auth.ts +241 -81
  151. package/src/middleware/passkeys.ts +35 -14
  152. package/src/middleware/principals.ts +189 -0
  153. package/src/middleware/require-owner.ts +13 -0
  154. package/src/observability/loggers.ts +1 -1
  155. package/src/routes/activity.ts +3 -0
  156. package/src/routes/brain.ts +107 -70
  157. package/src/routes/files.ts +10 -5
  158. package/src/routes/push.ts +11 -5
  159. package/src/routes/sessions.ts +45 -20
  160. package/src/share/staging.ts +11 -4
  161. package/src/ws/bridge.ts +14 -2
  162. package/src/ws/clients.ts +52 -7
  163. package/src/ws/connection.ts +98 -20
  164. package/src/ws/dispatch.ts +66 -6
  165. package/src/ws/history.ts +7 -5
  166. package/src/ws/host.ts +59 -1
  167. package/src/ws/run-session.ts +247 -74
  168. package/src/ws/shrink.ts +48 -14
  169. package/src/ws/turns.ts +136 -5
@@ -1 +1 @@
1
- {"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/ws/host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/ws/host.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,9 @@
1
1
  import type { ChatImageAttachment, ClientEnvironment } from "@schlessera/brain-ui-sdk/protocol";
2
2
  import type { WSContext } from "./clients.js";
3
+ import type { AuthorizationContext } from "./turns.js";
3
4
  import { type WsHost } from "./host.js";
4
- /**
5
- * Run one session slot: the initial turn, then any queued follow-up turns in
6
- * order. The host owns per-turn cancellation (AbortController + timeout). Never
7
- * throws — runtime failures are emitted as error frames.
8
- */
9
- export declare function runSession(host: WsHost, initial: {
5
+ type RunSessionInput = {
6
+ authorization: AuthorizationContext;
10
7
  text: string;
11
8
  sessionId?: string;
12
9
  attachments: ChatImageAttachment[];
@@ -14,9 +11,11 @@ export declare function runSession(host: WsHost, initial: {
14
11
  client?: ClientEnvironment;
15
12
  /** Client correlation id for a new conversation; echoed on session_info. */
16
13
  draftId?: string;
17
- }): Promise<void>;
14
+ };
15
+ export declare function runSession(host: WsHost, initial: RunSessionInput): Promise<void>;
18
16
  /** Dispatch a chat_message: follow-up to a running session, or a new session. */
19
17
  export declare function handleChatMessage(host: WsHost, ws: WSContext, msg: {
18
+ authorization: AuthorizationContext;
20
19
  text: string;
21
20
  sessionId?: string;
22
21
  attachments: ChatImageAttachment[];
@@ -24,4 +23,5 @@ export declare function handleChatMessage(host: WsHost, ws: WSContext, msg: {
24
23
  client?: ClientEnvironment;
25
24
  draftId?: string;
26
25
  }): Promise<void>;
26
+ export {};
27
27
  //# sourceMappingURL=run-session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-session.d.ts","sourceRoot":"","sources":["../../src/ws/run-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAO9C,OAAO,EAKL,KAAK,MAAM,EACZ,MAAM,WAAW,CAAC;AAEnB;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,IAAI,CAAC,CAyKf;AAqCD,iFAAiF;AACjF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,SAAS,EACb,GAAG,EAAE;IACH,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,IAAI,CAAC,CAkGf"}
1
+ {"version":3,"file":"run-session.d.ts","sourceRoot":"","sources":["../../src/ws/run-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAK9C,OAAO,KAAK,EAAE,oBAAoB,EAA+B,MAAM,YAAY,CAAC;AAEpF,OAAO,EAKL,KAAK,MAAM,EACZ,MAAM,WAAW,CAAC;AA6CnB,KAAK,eAAe,GAAG;IACrB,aAAa,EAAE,oBAAoB,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAOtF;AAqVD,iFAAiF;AACjF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,SAAS,EACb,GAAG,EAAE;IACH,aAAa,EAAE,oBAAoB,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,IAAI,CAAC,CA0Ff"}
@@ -9,8 +9,50 @@ import { MAX_SESSION_QUEUE, QUEUE_MAX_BYTES, QUEUE_WARN_BYTES, turnLogAttributes
9
9
  * order. The host owns per-turn cancellation (AbortController + timeout). Never
10
10
  * throws — runtime failures are emitted as error frames.
11
11
  */
12
+ /**
13
+ * Write out cancellations that were accepted before a recorder existed.
14
+ *
15
+ * A cancel can land while routing or billing is still in flight, when there is
16
+ * nothing to record it on yet, so the actor is buffered on the turn. Both exits
17
+ * from that window have to drain it — the ordinary one, which then has a
18
+ * recorder, and the revoked one, which must build a throwaway recorder rather
19
+ * than drop a decision someone actually made.
20
+ */
21
+ function recordPendingCancellations(host, turn, billing) {
22
+ if (turn.pendingCancellationPrincipalIds.length === 0)
23
+ return;
24
+ const recorder = turn.recorder ??
25
+ (host.activity
26
+ ? createTurnRecorder({
27
+ store: host.activity.store,
28
+ onWrite: () => host.activity.stream.pump(),
29
+ log: host.log,
30
+ }, {
31
+ turnId: turn.turnId,
32
+ sessionId: turn.sessionId,
33
+ principalId: turn.principalId,
34
+ ...billing,
35
+ })
36
+ : undefined);
37
+ for (const principalId of turn.pendingCancellationPrincipalIds) {
38
+ recorder?.recordCancellation(principalId);
39
+ }
40
+ turn.pendingCancellationPrincipalIds.length = 0;
41
+ }
12
42
  export async function runSession(host, initial) {
43
+ const releaseAuthorization = initial.authorization.retain();
44
+ try {
45
+ await runRetainedSession(host, initial);
46
+ }
47
+ finally {
48
+ releaseAuthorization();
49
+ }
50
+ }
51
+ async function runRetainedSession(host, initial) {
13
52
  const { coordinator } = host;
53
+ const starting = { queue: [], cancelled: false };
54
+ if (initial.sessionId)
55
+ coordinator.startingBySession.set(initial.sessionId, starting);
14
56
  coordinator.startingSessions += 1;
15
57
  let target;
16
58
  try {
@@ -31,7 +73,14 @@ export async function runSession(host, initial) {
31
73
  }
32
74
  finally {
33
75
  coordinator.startingSessions = Math.max(0, coordinator.startingSessions - 1);
76
+ if (initial.sessionId && coordinator.startingBySession.get(initial.sessionId) === starting) {
77
+ coordinator.startingBySession.delete(initial.sessionId);
78
+ }
34
79
  }
80
+ if (starting.cancelled)
81
+ return;
82
+ if (!initial.authorization.valid)
83
+ return;
35
84
  const { backend, profileId: initialProfileId } = target;
36
85
  if (target.droppedPin) {
37
86
  host.log.emit({
@@ -47,6 +96,8 @@ export async function runSession(host, initial) {
47
96
  });
48
97
  }
49
98
  const turn = {
99
+ principalId: initial.authorization.principalId,
100
+ authorization: initial.authorization,
50
101
  sessionId: initial.sessionId ?? null,
51
102
  turnId: crypto.randomUUID(),
52
103
  // Only meaningful when the client had no session id to send.
@@ -55,7 +106,8 @@ export async function runSession(host, initial) {
55
106
  backend,
56
107
  abortController: new AbortController(),
57
108
  timeoutHandle: setTimeout(() => { }, 0),
58
- queue: [],
109
+ queue: starting.queue,
110
+ pendingCancellationPrincipalIds: [],
59
111
  cancelled: false,
60
112
  lastResult: null,
61
113
  };
@@ -66,12 +118,29 @@ export async function runSession(host, initial) {
66
118
  let profileId = initialProfileId;
67
119
  let resumeId = initial.sessionId;
68
120
  let next = {
121
+ principalId: initial.authorization.principalId,
122
+ authorization: initial.authorization,
69
123
  text: initial.text,
70
124
  attachments: initial.attachments,
71
125
  ...(initial.client ? { client: initial.client } : {}),
126
+ releaseAuthorization: () => { },
72
127
  };
128
+ let releaseActiveAuthorization;
73
129
  try {
74
130
  while (next && !turn.cancelled) {
131
+ releaseActiveAuthorization = next.releaseAuthorization;
132
+ turn.principalId = next.principalId;
133
+ turn.authorization = next.authorization;
134
+ if (!turn.authorization.valid) {
135
+ releaseActiveAuthorization();
136
+ releaseActiveAuthorization = undefined;
137
+ next = turn.queue.shift() ?? null;
138
+ if (next) {
139
+ turn.turnId = crypto.randomUUID();
140
+ turn.lastResult = null;
141
+ }
142
+ continue;
143
+ }
75
144
  const { text, attachments, client } = next;
76
145
  next = null;
77
146
  const abortController = new AbortController();
@@ -101,13 +170,49 @@ export async function runSession(host, initial) {
101
170
  const billing = host.activity
102
171
  ? await resolveRunBilling(host.registry, backend.id, profileId)
103
172
  : undefined;
173
+ // Revocation can land while routing or billing is in flight. This is the
174
+ // final await boundary before startTurn, so an invalid principal never
175
+ // reaches the backend while an already-running turn remains untouched.
176
+ // Expiry is authoritative, not advisory: the sweep that turns an expired
177
+ // principal into a revocation runs on a timer, and a follow-up dequeued
178
+ // inside that window would otherwise start — reviewer measured one
179
+ // starting 12ms past expiry — and then survive, because a started turn is
180
+ // deliberately never aborted. Enforce it at the same boundary that
181
+ // enforces revocation, so the timer only has to close the socket.
182
+ host.expireAuthorizationContexts();
183
+ if (!turn.authorization.valid) {
184
+ clearTimeout(timeoutHandle);
185
+ releaseActiveAuthorization();
186
+ releaseActiveAuthorization = undefined;
187
+ // A cancellation accepted while billing was in flight is already a
188
+ // decision someone made; losing it because the turn's own principal
189
+ // was revoked a moment later would erase the actor, not the turn. Drain
190
+ // the buffer before leaving.
191
+ recordPendingCancellations(host, turn, billing);
192
+ if (turn.queue.length > 0) {
193
+ next = turn.queue.shift();
194
+ turn.turnId = crypto.randomUUID();
195
+ turn.lastResult = null;
196
+ }
197
+ continue;
198
+ }
104
199
  const recorder = host.activity
105
200
  ? createTurnRecorder({
106
201
  store: host.activity.store,
107
202
  onWrite: () => host.activity.stream.pump(),
108
203
  log: host.log,
109
- }, { turnId: turn.turnId, sessionId: turn.sessionId, ...billing })
204
+ }, {
205
+ turnId: turn.turnId,
206
+ sessionId: turn.sessionId,
207
+ principalId: turn.principalId,
208
+ ...billing,
209
+ })
110
210
  : undefined;
211
+ turn.recorder = recorder;
212
+ for (const principalId of turn.pendingCancellationPrincipalIds) {
213
+ recorder?.recordCancellation(principalId);
214
+ }
215
+ turn.pendingCancellationPrincipalIds.length = 0;
111
216
  const bridge = makeBridge(host, turn, text, backend.id, recorder);
112
217
  const startedAt = Date.now();
113
218
  host.reportTurnStarted(turn);
@@ -150,6 +255,9 @@ export async function runSession(host, initial) {
150
255
  }
151
256
  finally {
152
257
  clearTimeout(timeoutHandle);
258
+ turn.recorder = undefined;
259
+ releaseActiveAuthorization();
260
+ releaseActiveAuthorization = undefined;
153
261
  }
154
262
  // Subsequent (queued) turns resume the now-known session and keep its
155
263
  // pin. turn.providerId is the resolved profile (set from initial routing
@@ -167,8 +275,13 @@ export async function runSession(host, initial) {
167
275
  }
168
276
  }
169
277
  finally {
170
- if (turn.sessionId)
278
+ releaseActiveAuthorization?.();
279
+ next?.releaseAuthorization();
280
+ for (const entry of turn.queue.splice(0))
281
+ entry.releaseAuthorization();
282
+ if (turn.sessionId && coordinator.bySession.get(turn.sessionId) === turn) {
171
283
  coordinator.bySession.delete(turn.sessionId);
284
+ }
172
285
  coordinator.running.delete(turn);
173
286
  coordinator.drainPendingForTurn(turn, "Session ended");
174
287
  }
@@ -204,66 +317,108 @@ async function resolveRunBilling(registry, backendId, profileId) {
204
317
  function formatMb(bytes) {
205
318
  return `${(bytes / 1024 / 1024).toFixed(1)} MB`;
206
319
  }
320
+ /** Apply the same queue budgets during routing and during a running turn. */
321
+ function queueFollowUp(host, ws, sessionId, slot, entry) {
322
+ const parked = queuedBytes(slot);
323
+ const incoming = queuedFollowUpBytes(entry);
324
+ // A single message can never exceed the budget on its own: the frame cap
325
+ // is 12 MB and a message's attachments are capped well below that, so an
326
+ // empty queue always has room and this cannot wedge.
327
+ const overBudget = parked + incoming > QUEUE_MAX_BYTES;
328
+ const overDepth = slot.queue.length >= MAX_SESSION_QUEUE;
329
+ if (overBudget || overDepth) {
330
+ host.sendMessage(ws,
331
+ // Session-scoped only: the rejected message would have become a
332
+ // FUTURE turn in this slot, not the one currently running.
333
+ withSessionId({
334
+ type: "error",
335
+ code: "SESSION_QUEUE_FULL",
336
+ message: overBudget
337
+ ? `This session's queue is full (${formatMb(parked)} of ${formatMb(QUEUE_MAX_BYTES)}; this message needs ${formatMb(incoming)}). Wait for it to catch up.`
338
+ : `This session's queue is full (${MAX_SESSION_QUEUE} messages). Wait for it to catch up.`,
339
+ }, sessionId));
340
+ // The entry never joins a queue, so nothing else will ever release its
341
+ // lease: a refused follow-up would otherwise hold its principal
342
+ // discoverable forever and the registry would never empty.
343
+ entry.releaseAuthorization();
344
+ return;
345
+ }
346
+ // Queue it as the session's next turn; report queued immediately.
347
+ slot.queue.push(entry);
348
+ const total = parked + incoming;
349
+ // Accepted, but heavy enough that the sender should know before they hit
350
+ // the wall — every queued byte is held in this process until its turn runs.
351
+ const detail = total >= QUEUE_WARN_BYTES
352
+ ? `Queue is holding ${formatMb(total)} across ${slot.queue.length} messages (limit ${formatMb(QUEUE_MAX_BYTES)}).`
353
+ : undefined;
354
+ if (detail) {
355
+ host.log.emit({
356
+ severityText: "WARN",
357
+ body: "session follow-up queue is heavy",
358
+ attributes: {
359
+ "session.id": sessionId,
360
+ size: formatMb(total),
361
+ queued: slot.queue.length,
362
+ },
363
+ });
364
+ }
365
+ host.sendToClients(withSessionId({ type: "status", status: "queued", ...(detail ? { detail } : {}) }, sessionId));
366
+ }
207
367
  /** Dispatch a chat_message: follow-up to a running session, or a new session. */
208
368
  export async function handleChatMessage(host, ws, msg) {
209
- const { text, attachments, sessionId, providerId: requestedProviderId, client, draftId } = msg;
369
+ const { authorization, text, attachments, sessionId, providerId: requestedProviderId, client, draftId, } = msg;
210
370
  const { coordinator } = host;
211
371
  const runningTurn = sessionId ? coordinator.bySession.get(sessionId) : undefined;
372
+ const starting = sessionId ? coordinator.startingBySession.get(sessionId) : undefined;
373
+ if (starting && sessionId) {
374
+ if (starting.cancelled) {
375
+ host.sendMessage(ws, { type: "error", code: "SESSION_BUSY", sessionId, message: "This session is cancelling. Wait before sending again." });
376
+ }
377
+ else {
378
+ queueFollowUp(host, ws, sessionId, starting, {
379
+ principalId: authorization.principalId,
380
+ authorization,
381
+ text,
382
+ attachments,
383
+ ...(client ? { client } : {}),
384
+ releaseAuthorization: authorization.retain(),
385
+ });
386
+ }
387
+ return;
388
+ }
212
389
  if (runningTurn && sessionId) {
213
390
  const backend = runningTurn.backend;
214
- // Message to a session whose turn is running = a follow-up.
215
- if (backend.capabilities.followUp && backend.followUp) {
391
+ // Drain older messages queued during routing before allowing native
392
+ // injection to overtake them.
393
+ if (backend.capabilities.followUp && backend.followUp && runningTurn.queue.length === 0) {
216
394
  // Inject into the running turn; frames flow through its bridge. The
217
395
  // device snapshot is deliberately not forwarded: a follow-up joins a
218
396
  // turn whose system prompt was already built and cannot be revised.
219
- backend.followUp({ sessionId, prompt: text, attachments }).catch((err) => {
220
- const message = err instanceof Error ? err.message : String(err);
221
- host.reportTurnFailed("FOLLOWUP_FAILED", runningTurn, message);
222
- host.sendToClients(withTurnScope({ type: "error", code: "FOLLOWUP_FAILED", message }, runningTurn));
223
- });
397
+ runningTurn.recorder?.recordFollowUp(authorization.principalId);
398
+ void (async () => {
399
+ const releaseFollowUp = authorization.retain();
400
+ try {
401
+ await backend.followUp({ sessionId, prompt: text, attachments });
402
+ }
403
+ catch (err) {
404
+ const message = err instanceof Error ? err.message : String(err);
405
+ host.reportTurnFailed("FOLLOWUP_FAILED", runningTurn, message);
406
+ host.sendToClients(withTurnScope({ type: "error", code: "FOLLOWUP_FAILED", message }, runningTurn));
407
+ }
408
+ finally {
409
+ releaseFollowUp();
410
+ }
411
+ })();
224
412
  }
225
413
  else {
226
- const entry = { text, attachments, ...(client ? { client } : {}) };
227
- const parked = queuedBytes(runningTurn);
228
- const incoming = queuedFollowUpBytes(entry);
229
- // A single message can never exceed the budget on its own: the frame cap
230
- // is 12 MB and a message's attachments are capped well below that, so an
231
- // empty queue always has room and this cannot wedge.
232
- const overBudget = parked + incoming > QUEUE_MAX_BYTES;
233
- const overDepth = runningTurn.queue.length >= MAX_SESSION_QUEUE;
234
- if (overBudget || overDepth) {
235
- host.sendMessage(ws,
236
- // Session-scoped only: the rejected message would have become a
237
- // FUTURE turn in this slot, not the one currently running.
238
- withSessionId({
239
- type: "error",
240
- code: "SESSION_QUEUE_FULL",
241
- message: overBudget
242
- ? `This session's queue is full (${formatMb(parked)} of ${formatMb(QUEUE_MAX_BYTES)}; this message needs ${formatMb(incoming)}). Wait for it to catch up.`
243
- : `This session's queue is full (${MAX_SESSION_QUEUE} messages). Wait for it to catch up.`,
244
- }, sessionId));
245
- return;
246
- }
247
- // Queue it as the session's next turn; report queued immediately.
248
- runningTurn.queue.push(entry);
249
- const total = parked + incoming;
250
- // Accepted, but heavy enough that the sender should know before they hit
251
- // the wall — every queued byte is held in this process until its turn runs.
252
- const detail = total >= QUEUE_WARN_BYTES
253
- ? `Queue is holding ${formatMb(total)} across ${runningTurn.queue.length} messages (limit ${formatMb(QUEUE_MAX_BYTES)}).`
254
- : undefined;
255
- if (detail) {
256
- host.log.emit({
257
- severityText: "WARN",
258
- body: "session follow-up queue is heavy",
259
- attributes: {
260
- "session.id": sessionId,
261
- size: formatMb(total),
262
- queued: runningTurn.queue.length,
263
- },
264
- });
265
- }
266
- host.sendToClients(withSessionId({ type: "status", status: "queued", ...(detail ? { detail } : {}) }, sessionId));
414
+ queueFollowUp(host, ws, sessionId, runningTurn, {
415
+ principalId: authorization.principalId,
416
+ authorization,
417
+ text,
418
+ attachments,
419
+ ...(client ? { client } : {}),
420
+ releaseAuthorization: authorization.retain(),
421
+ });
267
422
  }
268
423
  return;
269
424
  }
@@ -282,6 +437,7 @@ export async function handleChatMessage(host, ws, msg) {
282
437
  host.sendToClients(withSessionId({ type: "status", status: "thinking" }, sessionId));
283
438
  }
284
439
  void runSession(host, {
440
+ authorization,
285
441
  text,
286
442
  sessionId,
287
443
  attachments,
@@ -1 +1 @@
1
- {"version":3,"file":"run-session.js","sourceRoot":"","sources":["../../src/ws/run-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-session.js","sourceRoot":"","sources":["../../src/ws/run-session.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,8 @@ export declare const MAX_WS_MESSAGE_BYTES = 512000;
23
23
  /** Target byte size for one `session_history` chunk. Below the frame cap so a
24
24
  * batch plus its wrapper stays comfortably under {@link MAX_WS_MESSAGE_BYTES}. */
25
25
  export declare const HISTORY_CHUNK_BYTES = 400000;
26
+ /** JSON's UTF-8 wire size, including escaped control characters. */
27
+ export declare function jsonBytes(value: unknown): number;
26
28
  /**
27
29
  * Return `value` unchanged when its JSON serialization already fits
28
30
  * {@link MAX_WS_MESSAGE_BYTES}; otherwise return a deep-cloned shadow shrunk
@@ -30,5 +32,5 @@ export declare const HISTORY_CHUNK_BYTES = 400000;
30
32
  * only string leaves and array tails change — discriminator fields, ids, and
31
33
  * other small metadata pass through untouched.
32
34
  */
33
- export declare function shrinkForReplication<T>(value: T): T;
35
+ export declare function shrinkForReplication<T>(value: T, maxBytes?: number): T;
34
36
  //# sourceMappingURL=shrink.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shrink.d.ts","sourceRoot":"","sources":["../../src/ws/shrink.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;yDACyD;AACzD,eAAO,MAAM,oBAAoB,SAAU,CAAC;AAE5C;kFACkF;AAClF,eAAO,MAAM,mBAAmB,SAAU,CAAC;AAqD3C;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAQnD"}
1
+ {"version":3,"file":"shrink.d.ts","sourceRoot":"","sources":["../../src/ws/shrink.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;yDACyD;AACzD,eAAO,MAAM,oBAAoB,SAAU,CAAC;AAE5C;kFACkF;AAClF,eAAO,MAAM,mBAAmB,SAAU,CAAC;AAwB3C,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEhD;AA4DD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,SAAuB,GAAG,CAAC,CAQpF"}
package/dist/ws/shrink.js CHANGED
@@ -24,10 +24,9 @@ export const MAX_WS_MESSAGE_BYTES = 512_000;
24
24
  * batch plus its wrapper stays comfortably under {@link MAX_WS_MESSAGE_BYTES}. */
25
25
  export const HISTORY_CHUNK_BYTES = 400_000;
26
26
  /**
27
- * Progressive shrink passes. Each tightens both the per-string cap and the
28
- * per-array head limit; the loop stops at the first pass whose output fits
29
- * {@link MAX_WS_MESSAGE_BYTES}. The final pass clamps every string to 64 B and
30
- * every array to one element, so even pathological mixes converge.
27
+ * Progressive shrink passes. Each tightens display strings and array tails;
28
+ * the loop stops when the serialized UTF-8 payload fits. Identity strings
29
+ * remain intact, and typed arrays never receive an untyped elision marker.
31
30
  */
32
31
  const SHRINK_PASSES = [
33
32
  { stringCap: 64 * 1024, arrayLimit: 256 },
@@ -39,33 +38,64 @@ const SHRINK_PASSES = [
39
38
  { stringCap: 64, arrayLimit: 1 },
40
39
  ];
41
40
  const STRING_ELISION_RESERVE = 80;
41
+ /** JSON's UTF-8 wire size, including escaped control characters. */
42
+ export function jsonBytes(value) {
43
+ return Buffer.byteLength(JSON.stringify(value), "utf8");
44
+ }
45
+ // These strings identify protocol objects rather than display text.
46
+ const IDENTITY_FIELDS = new Set([
47
+ "id", "type", "kind", "role", "name", "sessionId", "turnId", "draftId",
48
+ "requestId", "toolUseId", "parentToolUseId", "providerId", "backendId",
49
+ ]);
42
50
  /**
43
51
  * Recursively walk `value`, head-truncating any string longer than
44
52
  * `stringCap` and head-clipping any array longer than `arrayLimit`. Returns a
45
53
  * freshly built deep clone; short strings/numbers/booleans pass through.
46
54
  */
47
- function shrinkWalk(value, stringCap, arrayLimit) {
55
+ function shrinkWalk(value, stringCap, arrayLimit, opaque = false) {
48
56
  if (typeof value === "string") {
49
57
  if (value.length <= stringCap)
50
58
  return value;
51
- const headLen = Math.max(0, stringCap - STRING_ELISION_RESERVE);
59
+ let headLen = Math.max(0, stringCap - STRING_ELISION_RESERVE);
60
+ // Never split a UTF-16 surrogate pair at the truncation boundary.
61
+ const last = value.charCodeAt(headLen - 1);
62
+ if (last >= 0xd800 && last <= 0xdbff)
63
+ headLen--;
52
64
  return `${value.slice(0, headLen)}\n…[${value.length - headLen} chars elided]`;
53
65
  }
54
66
  if (Array.isArray(value)) {
55
67
  const keep = Math.min(value.length, arrayLimit);
56
- const elided = value.length - keep;
57
- const out = new Array(elided > 0 ? keep + 1 : keep);
68
+ const out = new Array(keep);
58
69
  for (let i = 0; i < keep; i++)
59
- out[i] = shrinkWalk(value[i], stringCap, arrayLimit);
60
- if (elided > 0)
61
- out[keep] = `…[${elided} items elided]`;
70
+ out[i] = shrinkWalk(value[i], stringCap, arrayLimit, opaque);
62
71
  return out;
63
72
  }
64
73
  if (value && typeof value === "object") {
65
74
  const src = value;
66
75
  const out = {};
67
- for (const k in src)
68
- out[k] = shrinkWalk(src[k], stringCap, arrayLimit);
76
+ // Arbitrary tool input can exceed the cap through key count alone. Clip
77
+ // its records recursively, while preserving fields on protocol objects.
78
+ const keys = Object.keys(src);
79
+ for (const k of opaque ? keys.slice(0, arrayLimit) : keys) {
80
+ out[k] = !opaque && IDENTITY_FIELDS.has(k) && typeof src[k] === "string"
81
+ ? src[k]
82
+ : shrinkWalk(src[k], stringCap, arrayLimit, opaque || k === "input");
83
+ }
84
+ // History parts refer to toolCalls by array index. Head clipping preserves
85
+ // retained indices, but references to removed tools must go with them.
86
+ if (!opaque && (src.role === "assistant" || src.role === "user") && Array.isArray(out.toolCalls)) {
87
+ const toolCount = out.toolCalls.length;
88
+ if (Array.isArray(out.parts)) {
89
+ out.parts = out.parts.filter((part) => !part || part.kind !== "tool" ||
90
+ (Number.isInteger(part.toolIndex) && part.toolIndex >= 0 && part.toolIndex < toolCount));
91
+ }
92
+ if (Array.isArray(src.toolCalls) && src.toolCalls.length > toolCount && typeof out.content === "string") {
93
+ const notice = `\n…[${src.toolCalls.length - toolCount} tool calls elided]`;
94
+ out.content += notice;
95
+ if (Array.isArray(out.parts))
96
+ out.parts.push({ kind: "text", text: notice });
97
+ }
98
+ }
69
99
  return out;
70
100
  }
71
101
  return value;
@@ -77,13 +107,13 @@ function shrinkWalk(value, stringCap, arrayLimit) {
77
107
  * only string leaves and array tails change — discriminator fields, ids, and
78
108
  * other small metadata pass through untouched.
79
109
  */
80
- export function shrinkForReplication(value) {
81
- if (JSON.stringify(value).length <= MAX_WS_MESSAGE_BYTES)
110
+ export function shrinkForReplication(value, maxBytes = MAX_WS_MESSAGE_BYTES) {
111
+ if (jsonBytes(value) <= maxBytes)
82
112
  return value;
83
113
  let shrunk = value;
84
114
  for (const pass of SHRINK_PASSES) {
85
115
  shrunk = shrinkWalk(value, pass.stringCap, pass.arrayLimit);
86
- if (JSON.stringify(shrunk).length <= MAX_WS_MESSAGE_BYTES)
116
+ if (jsonBytes(shrunk) <= maxBytes)
87
117
  return shrunk;
88
118
  }
89
119
  return shrunk;
@@ -1 +1 @@
1
- {"version":3,"file":"shrink.js","sourceRoot":"","sources":["../../src/ws/shrink.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shrink.js","sourceRoot":"","sources":["../../src/ws/shrink.ts"],"names":[],"mappings":"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"}