@kortix/sdk 0.13.5 → 0.13.9

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 (253) hide show
  1. package/README.md +69 -6
  2. package/dist/browser/session-sync/server-transcript-mirror.d.ts +82 -0
  3. package/dist/browser/session-sync/server-transcript-mirror.d.ts.map +1 -0
  4. package/dist/browser/session-sync/server-transcript-mirror.js +143 -0
  5. package/dist/browser/session-sync/server-transcript-mirror.js.map +1 -0
  6. package/dist/browser/session-sync/session-sync-registry.d.ts +11 -21
  7. package/dist/browser/session-sync/session-sync-registry.d.ts.map +1 -1
  8. package/dist/browser/session-sync/session-sync-registry.js +48 -3
  9. package/dist/browser/session-sync/session-sync-registry.js.map +1 -1
  10. package/dist/browser/stores/sandbox-connection-store.d.ts +13 -1
  11. package/dist/browser/stores/sandbox-connection-store.d.ts.map +1 -1
  12. package/dist/browser/stores/sandbox-connection-store.js +5 -2
  13. package/dist/browser/stores/sandbox-connection-store.js.map +1 -1
  14. package/dist/browser/stores/session-working-store.d.ts +10 -5
  15. package/dist/browser/stores/session-working-store.d.ts.map +1 -1
  16. package/dist/browser/stores/session-working-store.js +32 -8
  17. package/dist/browser/stores/session-working-store.js.map +1 -1
  18. package/dist/browser/stores/sync-store.d.ts +29 -1
  19. package/dist/browser/stores/sync-store.d.ts.map +1 -1
  20. package/dist/browser/stores/sync-store.js +516 -393
  21. package/dist/browser/stores/sync-store.js.map +1 -1
  22. package/dist/core/auth/app-viewer.d.ts +57 -0
  23. package/dist/core/auth/app-viewer.d.ts.map +1 -0
  24. package/dist/core/auth/app-viewer.js +82 -0
  25. package/dist/core/auth/app-viewer.js.map +1 -0
  26. package/dist/core/auth/session.d.ts +45 -0
  27. package/dist/core/auth/session.d.ts.map +1 -0
  28. package/dist/core/auth/session.js +113 -0
  29. package/dist/core/auth/session.js.map +1 -0
  30. package/dist/core/client/kortix.d.ts +37 -18
  31. package/dist/core/client/kortix.d.ts.map +1 -1
  32. package/dist/core/client/kortix.js +47 -0
  33. package/dist/core/client/kortix.js.map +1 -1
  34. package/dist/core/http/config.d.ts +4 -2
  35. package/dist/core/http/config.d.ts.map +1 -1
  36. package/dist/core/http/config.js.map +1 -1
  37. package/dist/core/http/opencode-errors.d.ts +17 -0
  38. package/dist/core/http/opencode-errors.d.ts.map +1 -1
  39. package/dist/core/http/opencode-errors.js +25 -0
  40. package/dist/core/http/opencode-errors.js.map +1 -1
  41. package/dist/core/rest/platform-client/auth.d.ts +120 -0
  42. package/dist/core/rest/platform-client/auth.d.ts.map +1 -0
  43. package/dist/core/rest/platform-client/auth.js +98 -0
  44. package/dist/core/rest/platform-client/auth.js.map +1 -0
  45. package/dist/core/rest/platform-client/host-boundary.d.ts +5 -0
  46. package/dist/core/rest/platform-client/host-boundary.d.ts.map +1 -1
  47. package/dist/core/rest/platform-client/host-boundary.js.map +1 -1
  48. package/dist/core/rest/projects-client/accounts.d.ts +57 -0
  49. package/dist/core/rest/projects-client/accounts.d.ts.map +1 -1
  50. package/dist/core/rest/projects-client/accounts.js +31 -0
  51. package/dist/core/rest/projects-client/accounts.js.map +1 -1
  52. package/dist/core/rest/projects-client/apps.d.ts +9 -0
  53. package/dist/core/rest/projects-client/apps.d.ts.map +1 -1
  54. package/dist/core/rest/projects-client/apps.js.map +1 -1
  55. package/dist/core/rest/projects-client/billing.d.ts +2 -0
  56. package/dist/core/rest/projects-client/billing.d.ts.map +1 -1
  57. package/dist/core/rest/projects-client/billing.js.map +1 -1
  58. package/dist/core/rest/projects-client/connectors.d.ts +104 -19
  59. package/dist/core/rest/projects-client/connectors.d.ts.map +1 -1
  60. package/dist/core/rest/projects-client/connectors.js +56 -2
  61. package/dist/core/rest/projects-client/connectors.js.map +1 -1
  62. package/dist/core/rest/projects-client/index.d.ts +1 -0
  63. package/dist/core/rest/projects-client/index.d.ts.map +1 -1
  64. package/dist/core/rest/projects-client/index.js +1 -0
  65. package/dist/core/rest/projects-client/index.js.map +1 -1
  66. package/dist/core/rest/projects-client/oauth-clients.d.ts +47 -0
  67. package/dist/core/rest/projects-client/oauth-clients.d.ts.map +1 -0
  68. package/dist/core/rest/projects-client/oauth-clients.js +33 -0
  69. package/dist/core/rest/projects-client/oauth-clients.js.map +1 -0
  70. package/dist/core/rest/projects-client/projects.d.ts +23 -6
  71. package/dist/core/rest/projects-client/projects.d.ts.map +1 -1
  72. package/dist/core/rest/projects-client/projects.js +1 -0
  73. package/dist/core/rest/projects-client/projects.js.map +1 -1
  74. package/dist/core/rest/projects-client/session-sandbox.d.ts +52 -0
  75. package/dist/core/rest/projects-client/session-sandbox.d.ts.map +1 -1
  76. package/dist/core/rest/projects-client/session-sandbox.js.map +1 -1
  77. package/dist/core/rest/projects-client/sessions.d.ts +134 -1
  78. package/dist/core/rest/projects-client/sessions.d.ts.map +1 -1
  79. package/dist/core/rest/projects-client/sessions.js +47 -1
  80. package/dist/core/rest/projects-client/sessions.js.map +1 -1
  81. package/dist/core/session/index.d.ts +1 -0
  82. package/dist/core/session/index.d.ts.map +1 -1
  83. package/dist/core/session/index.js +1 -0
  84. package/dist/core/session/index.js.map +1 -1
  85. package/dist/core/session/open-bundle.d.ts +110 -0
  86. package/dist/core/session/open-bundle.d.ts.map +1 -0
  87. package/dist/core/session/open-bundle.js +183 -0
  88. package/dist/core/session/open-bundle.js.map +1 -0
  89. package/dist/core/session/poll-owner.d.ts +35 -0
  90. package/dist/core/session/poll-owner.d.ts.map +1 -0
  91. package/dist/core/session/poll-owner.js +90 -0
  92. package/dist/core/session/poll-owner.js.map +1 -0
  93. package/dist/core/session/static-file-preview.d.ts +50 -0
  94. package/dist/core/session/static-file-preview.d.ts.map +1 -0
  95. package/dist/core/session/static-file-preview.js +91 -0
  96. package/dist/core/session/static-file-preview.js.map +1 -0
  97. package/dist/core/session/wake-escalation.d.ts +188 -0
  98. package/dist/core/session/wake-escalation.d.ts.map +1 -0
  99. package/dist/core/session/wake-escalation.js +241 -0
  100. package/dist/core/session/wake-escalation.js.map +1 -0
  101. package/dist/core/session/working.d.ts +63 -2
  102. package/dist/core/session/working.d.ts.map +1 -1
  103. package/dist/core/session/working.js +66 -9
  104. package/dist/core/session/working.js.map +1 -1
  105. package/dist/core/session-sync/session-sync-controller.d.ts +34 -2
  106. package/dist/core/session-sync/session-sync-controller.d.ts.map +1 -1
  107. package/dist/core/session-sync/session-sync-controller.js +97 -11
  108. package/dist/core/session-sync/session-sync-controller.js.map +1 -1
  109. package/dist/core/stream/keepalive.d.ts +17 -0
  110. package/dist/core/stream/keepalive.d.ts.map +1 -0
  111. package/dist/core/stream/keepalive.js +19 -0
  112. package/dist/core/stream/keepalive.js.map +1 -0
  113. package/dist/core/turns/grouping.d.ts.map +1 -1
  114. package/dist/core/turns/grouping.js +13 -0
  115. package/dist/core/turns/grouping.js.map +1 -1
  116. package/dist/core/turns/types.d.ts +5 -0
  117. package/dist/core/turns/types.d.ts.map +1 -1
  118. package/dist/index.d.ts +15 -1
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.js +18 -0
  121. package/dist/index.js.map +1 -1
  122. package/dist/kortix.esm.min.js +25 -25
  123. package/dist/kortix.global.js +25 -25
  124. package/dist/node/app-viewer.d.ts +41 -0
  125. package/dist/node/app-viewer.d.ts.map +1 -0
  126. package/dist/node/app-viewer.js +150 -0
  127. package/dist/node/app-viewer.js.map +1 -0
  128. package/dist/node/auth.d.ts +84 -0
  129. package/dist/node/auth.d.ts.map +1 -0
  130. package/dist/node/auth.js +414 -0
  131. package/dist/node/auth.js.map +1 -0
  132. package/dist/node/server.d.ts +19 -0
  133. package/dist/node/server.d.ts.map +1 -1
  134. package/dist/node/server.js +13 -1
  135. package/dist/node/server.js.map +1 -1
  136. package/dist/react/bedrock-invokable.d.ts +58 -0
  137. package/dist/react/bedrock-invokable.d.ts.map +1 -0
  138. package/dist/react/bedrock-invokable.js +83 -0
  139. package/dist/react/bedrock-invokable.js.map +1 -0
  140. package/dist/react/index.d.ts +3 -0
  141. package/dist/react/index.d.ts.map +1 -1
  142. package/dist/react/index.js +7 -0
  143. package/dist/react/index.js.map +1 -1
  144. package/dist/react/model-flatten.d.ts +14 -1
  145. package/dist/react/model-flatten.d.ts.map +1 -1
  146. package/dist/react/model-flatten.js +3 -4
  147. package/dist/react/model-flatten.js.map +1 -1
  148. package/dist/react/opencode.d.ts +2 -1
  149. package/dist/react/opencode.d.ts.map +1 -1
  150. package/dist/react/opencode.js +2 -1
  151. package/dist/react/opencode.js.map +1 -1
  152. package/dist/react/provider-selection.d.ts +58 -0
  153. package/dist/react/provider-selection.d.ts.map +1 -1
  154. package/dist/react/provider-selection.js +253 -2
  155. package/dist/react/provider-selection.js.map +1 -1
  156. package/dist/react/session-start-giveup.d.ts +12 -0
  157. package/dist/react/session-start-giveup.d.ts.map +1 -0
  158. package/dist/react/session-start-giveup.js +13 -0
  159. package/dist/react/session-start-giveup.js.map +1 -0
  160. package/dist/react/session-title-sync.d.ts.map +1 -1
  161. package/dist/react/session-title-sync.js +15 -5
  162. package/dist/react/session-title-sync.js.map +1 -1
  163. package/dist/react/sign-in-with-kortix.d.ts +346 -0
  164. package/dist/react/sign-in-with-kortix.d.ts.map +1 -0
  165. package/dist/react/sign-in-with-kortix.js +65 -0
  166. package/dist/react/sign-in-with-kortix.js.map +1 -0
  167. package/dist/react/use-admin-accounts.d.ts +1 -1
  168. package/dist/react/use-admin-accounts.d.ts.map +1 -1
  169. package/dist/react/use-admin-accounts.js +1 -0
  170. package/dist/react/use-admin-accounts.js.map +1 -1
  171. package/dist/react/use-gateway-routing-policy.d.ts +1 -0
  172. package/dist/react/use-gateway-routing-policy.d.ts.map +1 -1
  173. package/dist/react/use-gateway-routing-policy.js +12 -1
  174. package/dist/react/use-gateway-routing-policy.js.map +1 -1
  175. package/dist/react/use-kortix-app-viewer.d.ts +13 -0
  176. package/dist/react/use-kortix-app-viewer.d.ts.map +1 -0
  177. package/dist/react/use-kortix-app-viewer.js +29 -0
  178. package/dist/react/use-kortix-app-viewer.js.map +1 -0
  179. package/dist/react/use-model-defaults.d.ts +7 -0
  180. package/dist/react/use-model-defaults.d.ts.map +1 -1
  181. package/dist/react/use-model-defaults.js +7 -1
  182. package/dist/react/use-model-defaults.js.map +1 -1
  183. package/dist/react/use-model-enablement.d.ts.map +1 -1
  184. package/dist/react/use-model-enablement.js +5 -1
  185. package/dist/react/use-model-enablement.js.map +1 -1
  186. package/dist/react/use-model-store.d.ts +31 -0
  187. package/dist/react/use-model-store.d.ts.map +1 -1
  188. package/dist/react/use-model-store.js +31 -2
  189. package/dist/react/use-model-store.js.map +1 -1
  190. package/dist/react/use-opencode-events/helpers.d.ts +49 -5
  191. package/dist/react/use-opencode-events/helpers.d.ts.map +1 -1
  192. package/dist/react/use-opencode-events/helpers.js +54 -6
  193. package/dist/react/use-opencode-events/helpers.js.map +1 -1
  194. package/dist/react/use-opencode-events/index.d.ts.map +1 -1
  195. package/dist/react/use-opencode-events/index.js +22 -3
  196. package/dist/react/use-opencode-events/index.js.map +1 -1
  197. package/dist/react/use-opencode-events/use-event-stream-refs.d.ts.map +1 -1
  198. package/dist/react/use-opencode-events/use-event-stream-refs.js +14 -2
  199. package/dist/react/use-opencode-events/use-event-stream-refs.js.map +1 -1
  200. package/dist/react/use-opencode-local.d.ts.map +1 -1
  201. package/dist/react/use-opencode-local.js +27 -8
  202. package/dist/react/use-opencode-local.js.map +1 -1
  203. package/dist/react/use-opencode-sessions/providers.d.ts.map +1 -1
  204. package/dist/react/use-opencode-sessions/providers.js +44 -3
  205. package/dist/react/use-opencode-sessions/providers.js.map +1 -1
  206. package/dist/react/use-poll-owner.d.ts +14 -0
  207. package/dist/react/use-poll-owner.d.ts.map +1 -0
  208. package/dist/react/use-poll-owner.js +32 -0
  209. package/dist/react/use-poll-owner.js.map +1 -0
  210. package/dist/react/use-project-llm-gateway.d.ts +27 -0
  211. package/dist/react/use-project-llm-gateway.d.ts.map +1 -0
  212. package/dist/react/use-project-llm-gateway.js +41 -0
  213. package/dist/react/use-project-llm-gateway.js.map +1 -0
  214. package/dist/react/use-project-models.d.ts +9 -0
  215. package/dist/react/use-project-models.d.ts.map +1 -1
  216. package/dist/react/use-project-models.js +24 -1
  217. package/dist/react/use-project-models.js.map +1 -1
  218. package/dist/react/use-runtime-reconnect.d.ts +11 -0
  219. package/dist/react/use-runtime-reconnect.d.ts.map +1 -1
  220. package/dist/react/use-runtime-reconnect.js +34 -3
  221. package/dist/react/use-runtime-reconnect.js.map +1 -1
  222. package/dist/react/use-session-prompts.d.ts +16 -1
  223. package/dist/react/use-session-prompts.d.ts.map +1 -1
  224. package/dist/react/use-session-prompts.js +76 -11
  225. package/dist/react/use-session-prompts.js.map +1 -1
  226. package/dist/react/use-session-send.d.ts.map +1 -1
  227. package/dist/react/use-session-send.js +14 -1
  228. package/dist/react/use-session-send.js.map +1 -1
  229. package/dist/react/use-session-start-give-up.d.ts +20 -0
  230. package/dist/react/use-session-start-give-up.d.ts.map +1 -0
  231. package/dist/react/use-session-start-give-up.js +60 -0
  232. package/dist/react/use-session-start-give-up.js.map +1 -0
  233. package/dist/react/use-session-sync.d.ts +22 -0
  234. package/dist/react/use-session-sync.d.ts.map +1 -1
  235. package/dist/react/use-session-sync.js +61 -5
  236. package/dist/react/use-session-sync.js.map +1 -1
  237. package/dist/react/use-session-working.d.ts +38 -0
  238. package/dist/react/use-session-working.d.ts.map +1 -1
  239. package/dist/react/use-session-working.js +81 -10
  240. package/dist/react/use-session-working.js.map +1 -1
  241. package/dist/react/use-session.d.ts +13 -13
  242. package/dist/react/use-session.d.ts.map +1 -1
  243. package/dist/react/use-session.js +74 -53
  244. package/dist/react/use-session.js.map +1 -1
  245. package/dist/react/use-static-file-preview.d.ts +12 -0
  246. package/dist/react/use-static-file-preview.d.ts.map +1 -0
  247. package/dist/react/use-static-file-preview.js +119 -0
  248. package/dist/react/use-static-file-preview.js.map +1 -0
  249. package/dist/react/use-wake-escalation.d.ts +51 -0
  250. package/dist/react/use-wake-escalation.d.ts.map +1 -0
  251. package/dist/react/use-wake-escalation.js +62 -0
  252. package/dist/react/use-wake-escalation.js.map +1 -0
  253. package/package.json +6 -4
@@ -85,6 +85,25 @@ export const TURN_END_LEDGER_LAG_MS = 3_000;
85
85
  * because the evidence arrives sooner.
86
86
  */
87
87
  export const OPTIMISTIC_ABORT_MAX_MS = 15_000;
88
+ /**
89
+ * May `candidate` replace `current` as the session's inbox observation?
90
+ *
91
+ * ONE clock per comparison. When both observations carry the server's stamp,
92
+ * the server clock decides — it is the only pair drawn from one clock, and it
93
+ * orders a read against a write exactly (a read issued before a POST carries an
94
+ * older `observed_at` than the POST's response, so it can never erase it).
95
+ * Otherwise the browser stamps decide, as before. Ties stand aside for the
96
+ * candidate: two reads of the same instant agree, and the newer arrival may
97
+ * carry a corrected list.
98
+ */
99
+ export function inboxObservationSupersedes(candidate, current) {
100
+ if (!current)
101
+ return true;
102
+ if (current.serverAtMs != null && candidate.serverAtMs != null) {
103
+ return candidate.serverAtMs >= current.serverAtMs;
104
+ }
105
+ return candidate.atMs >= current.atMs;
106
+ }
88
107
  /**
89
108
  * How many inbox rows are work the server still intends to run.
90
109
  *
@@ -150,6 +169,11 @@ function instant(value) {
150
169
  export function projectWorking(inputs) {
151
170
  const { optimistic, abort, inbox, server, stream, activity, nowMs } = inputs;
152
171
  const receiptLive = !!optimistic && nowMs - optimistic.atMs < OPTIMISTIC_RECEIPT_MAX_MS;
172
+ const receiptTurnId = optimistic
173
+ ? optimistic.turnId === undefined
174
+ ? optimistic.messageId
175
+ : optimistic.turnId
176
+ : null;
153
177
  // TWO floors, because the two server-side observers have different knowledge.
154
178
  //
155
179
  // `GET .../turn` reads the control plane's ledger, and there is NO row in it
@@ -191,7 +215,12 @@ export function projectWorking(inputs) {
191
215
  // and permanently — at `stream.atMs + STREAM_OBSERVATION_MAX_MS` the veto
192
216
  // vanished with no new input, and a row the relay never closed put the
193
217
  // composer back on Stop until its deadline (240 MINUTES for an accepted turn).
194
- const idleFrame = stream && stream.type === 'idle' ? stream : null;
218
+ // WIRE frames only. A fabricated local idle (`origin: 'local'`) is the tab
219
+ // inferring, not the runtime speaking, and this veto is unbounded — one wrong
220
+ // local frame silenced every fresh `/turn` read for the rest of a quiet turn
221
+ // (dev, 2026-08-24: busy indicator gone, composer on Send, transcript poll
222
+ // switched off, all mid-run). See `WorkingStreamInput.origin`.
223
+ const idleFrame = stream && stream.type === 'idle' && stream.origin !== 'local' ? stream : null;
195
224
  // CONTENT FIRST. Bounded by the stream's own freshness rule, because it
196
225
  // arrives on the same transport and goes stale for the same reasons — but
197
226
  // within that window it outranks every observer, including an idle frame it
@@ -250,9 +279,22 @@ export function projectWorking(inputs) {
250
279
  // A turn that is genuinely still running says so, and that is what returns
251
280
  // authority to the ledger: any newer frame is not idle, so `idleFrame` is
252
281
  // null on the next evaluation and the row decides again — immediately, with
253
- // no window to tune. A runtime that goes silent instead is bounded by
254
- // `STREAM_OBSERVATION_MAX_MS`, after which the frame is too stale to veto
255
- // anything.
282
+ // no window to tune.
283
+ //
284
+ // "Says so" assumes the stream is delivering. When it is NOT — a
285
+ // black-holed SSE proxy answers 200 and never writes a byte, and the
286
+ // client heartbeat is the only detector (apps/api injects no keepalives)
287
+ // — this veto is deliberately NOT expired by `STREAM_OBSERVATION_MAX_MS`
288
+ // (a row still open past any time bound is more often a dropped
289
+ // `kind:"end"` relay than a live turn). The repair for the wrong case —
290
+ // a running turn behind a dead stream, prod 2026-08-26 — is EVIDENCE,
291
+ // not time: the transcript liveness poll stays on while the server holds
292
+ // a turn open (`livenessBusy`'s `serverHoldsTurn`), its runtime read
293
+ // stamps `sessionActivityAt` when the transcript moved with an open tail
294
+ // (`sync-store.hydrate`), and `activityAfterIdle` above then outranks
295
+ // this frame. Also note `started_at` is server clock while `atMs` is this
296
+ // tab's clock — skew can misclassify a NEW turn as ended, and the same
297
+ // evidence path is what recovers it.
256
298
  return true;
257
299
  };
258
300
  if (activityAfterIdle) {
@@ -261,10 +303,18 @@ export function projectWorking(inputs) {
261
303
  source: 'stream',
262
304
  turnId: null,
263
305
  since: activity.atMs,
264
- serverOpenTurnToken: serverFresh ? (server.turns[0]?.turn_token ?? null) : null,
306
+ serverOpenTurnToken: server?.turns[0]?.turn_token ?? null,
265
307
  };
266
308
  }
267
- const ledgerTurn = serverFresh ? server.turns[0] : undefined;
309
+ // NOT gated on `serverFresh`. A read going stale is a fact about the READ, not
310
+ // about the row: the control plane does not release a turn because this tab's
311
+ // last look got old. Gating it here made being wrong self-sealing — the token
312
+ // nulls, `serverHoldsTurn` (use-session.ts) goes false, `livenessBusy` goes
313
+ // false, and the transcript fallback poll clears its own interval. The one
314
+ // mechanism that could have produced fresh evidence was switched off BY the
315
+ // staleness it existed to repair, so a false idle could never be discovered.
316
+ // The token is retired by end-of-turn evidence, never by age.
317
+ const ledgerTurn = server?.turns[0];
268
318
  // `serverOpenTurnToken` deliberately keeps reporting the LEDGER's turn even
269
319
  // when the runtime's frame has decided the state above — see its docstring.
270
320
  // It answers "is the control plane still holding authority", which is what a
@@ -283,7 +333,14 @@ export function projectWorking(inputs) {
283
333
  // session went idle. The stream frame is newer BY OBSERVATION, and the daemon
284
334
  // relays `turn_end` to the control plane at the same moment the frame is
285
335
  // emitted — so a fresher idle frame means this read is simply out of date.
286
- if (openTurn && server.atMs >= abortFloor && (!stream || server.atMs >= stream.atMs)) {
336
+ //
337
+ // A LOCAL idle frame is exempt from that ordering: it is not the runtime
338
+ // speaking, so "newer" buys it nothing against the lifecycle authority. It
339
+ // lands between polls by construction (the sweep runs on connect), and
340
+ // waiting one poll interval for the row to outrank it again is exactly the
341
+ // flicker being fixed.
342
+ const streamContradicts = !!stream && !(stream.type === 'idle' && stream.origin === 'local');
343
+ if (openTurn && server.atMs >= abortFloor && (!streamContradicts || server.atMs >= stream.atMs)) {
287
344
  return {
288
345
  state: 'working',
289
346
  source: 'server',
@@ -305,7 +362,7 @@ export function projectWorking(inputs) {
305
362
  return {
306
363
  state: 'working',
307
364
  source: 'server',
308
- turnId: null,
365
+ turnId: receiptLive ? receiptTurnId : null,
309
366
  since: inbox.atMs,
310
367
  serverOpenTurnToken,
311
368
  };
@@ -334,7 +391,7 @@ export function projectWorking(inputs) {
334
391
  return {
335
392
  state: 'working',
336
393
  source: 'optimistic',
337
- turnId: optimistic.messageId,
394
+ turnId: receiptTurnId,
338
395
  since: optimistic.atMs,
339
396
  serverOpenTurnToken,
340
397
  };
@@ -1 +1 @@
1
- {"version":3,"file":"working.js","sourceRoot":"","sources":["../../../src/core/session/working.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"working.js","sourceRoot":"","sources":["../../../src/core/session/working.ts"],"names":[],"mappings":"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"}
@@ -97,10 +97,17 @@ export interface SessionSyncTelemetryEvent {
97
97
  }
98
98
  export interface SessionSyncControllerOptions {
99
99
  sessionId: string;
100
+ /**
101
+ * Read one bounded page. `signal` is the controller's own — aborted on
102
+ * `destroy()` (a scope reset destroys the controller), so a page loader that
103
+ * forwards it into `fetch` cancels a read the tab has navigated away from,
104
+ * and a superseded read can never hydrate the store. Passing it is optional;
105
+ * a loader that ignores it still works, it just cannot be cancelled.
106
+ */
100
107
  loadPage: (request: {
101
108
  limit: number;
102
109
  before?: string;
103
- }) => Promise<SessionSyncPage>;
110
+ }, signal?: AbortSignal) => Promise<SessionSyncPage>;
104
111
  /**
105
112
  * @deprecated Never called. The liveness poll no longer reads status: `GET
106
113
  * .../turn` is the status authority, and this controller's own `setBusy` is
@@ -122,8 +129,23 @@ export interface SessionSyncControllerOptions {
122
129
  onTelemetry?: (event: SessionSyncTelemetryEvent) => void;
123
130
  scheduler?: SessionSyncScheduler;
124
131
  livenessIntervalMs?: number;
132
+ /**
133
+ * Max age of the last tail read while the session is busy, whatever the
134
+ * stream delivers. Default 30s.
135
+ *
136
+ * The quiet-based poll trusts `noteActivity`: any transcript frame renews it.
137
+ * A DEGRADED stream — events lost at the source or the edge, connection
138
+ * alive, a trickle still arriving — therefore postponed the tail read
139
+ * indefinitely while the transcript diverged arbitrarily far from the
140
+ * runtime (prod, 2026-08-26: content minutes behind mid-run, repaired only
141
+ * by reload). Frames arriving proves the wire is up; it proves nothing about
142
+ * the frames that never arrived. This is the bound on how long that
143
+ * difference can go unchecked: one tail page per interval, and against a
144
+ * healthy stream the hydrate is a no-op.
145
+ */
146
+ verifyIntervalMs?: number;
125
147
  }
126
- export interface HttpSessionSyncControllerOptions extends Pick<SessionSyncControllerOptions, 'sessionId' | 'hydrate' | 'markLoaded' | 'setStatus' | 'onTelemetry' | 'scheduler' | 'livenessIntervalMs'> {
148
+ export interface HttpSessionSyncControllerOptions extends Pick<SessionSyncControllerOptions, 'sessionId' | 'hydrate' | 'markLoaded' | 'setStatus' | 'onTelemetry' | 'scheduler' | 'livenessIntervalMs' | 'verifyIntervalMs'> {
127
149
  baseUrl: string;
128
150
  getToken?: () => string | null | Promise<string | null>;
129
151
  fetch?: SessionSyncFetch;
@@ -157,6 +179,9 @@ export declare class SessionSyncController {
157
179
  private readonly options;
158
180
  private readonly scheduler;
159
181
  private readonly livenessIntervalMs;
182
+ private readonly verifyIntervalMs;
183
+ /** When the last tail read was ISSUED — see `verifyIntervalMs`. */
184
+ private lastTailReadAt;
160
185
  /** Consecutive failed tail reads, for the retry backoff. Reset by success. */
161
186
  private retryAttempt;
162
187
  private tailRetryTimer;
@@ -170,6 +195,13 @@ export declare class SessionSyncController {
170
195
  private lastActivityAt;
171
196
  private listeners;
172
197
  private destroyed;
198
+ /**
199
+ * One controller-lifetime signal, threaded into every read. A scope reset
200
+ * (registry `resetSessionSyncControllersForSession`) or unmount destroys this
201
+ * controller, `destroy()` aborts this, and the in-flight read cancels — so a
202
+ * navigated-away or superseded read frees its socket and can never hydrate.
203
+ */
204
+ private readonly abortController;
173
205
  constructor(options: SessionSyncControllerOptions);
174
206
  getSnapshot: () => SessionSyncSnapshot;
175
207
  subscribe: (listener: () => void) => (() => void);
@@ -1 +1 @@
1
- {"version":3,"file":"session-sync-controller.d.ts","sourceRoot":"","sources":["../../../src/core/session-sync/session-sync-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-sync-controller.d.ts","sourceRoot":"","sources":["../../../src/core/session-sync/session-sync-controller.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { SandboxNotReadyError, isSandboxNotReadyError } from '../http/opencode-errors.js';
2
+ import { isAbortError } from '../http/abort-error.js';
1
3
  /**
2
4
  * Messages per bounded read — the newest-first window a session opens with,
3
5
  * and the step size when the transcript pulls older history.
@@ -61,13 +63,22 @@ export const MAX_TURN_BACKFILL_PAGES = 10;
61
63
  export function createHttpSessionSyncPageLoader(options) {
62
64
  const fetchImpl = options.fetch ?? globalThis.fetch;
63
65
  const baseUrl = options.baseUrl.replace(/\/$/, '');
64
- return async ({ limit, before }) => {
66
+ return async ({ limit, before }, signal) => {
65
67
  const query = new URLSearchParams({ limit: String(limit) });
66
68
  if (before)
67
69
  query.set('before', before);
68
70
  const token = await options.getToken?.();
69
- const response = await fetchImpl(`${baseUrl}/session/${encodeURIComponent(options.sessionId)}/message?${query}`, { headers: token ? { Authorization: `Bearer ${token}` } : undefined });
71
+ const response = await fetchImpl(`${baseUrl}/session/${encodeURIComponent(options.sessionId)}/message?${query}`, {
72
+ headers: token ? { Authorization: `Bearer ${token}` } : undefined,
73
+ ...(signal ? { signal } : {}),
74
+ });
70
75
  if (!response.ok) {
76
+ // A 503 from the sandbox proxy is the box waking, not a failure — throw
77
+ // the retryable, "loading" error so the controller keeps polling instead
78
+ // of painting an error state over a session that is about to load.
79
+ if (response.status === 503) {
80
+ throw new SandboxNotReadyError(`session ${response.status}`);
81
+ }
71
82
  throw new Error(`Session synchronization failed: ${response.status}`);
72
83
  }
73
84
  return {
@@ -150,6 +161,9 @@ export class SessionSyncController {
150
161
  options;
151
162
  scheduler;
152
163
  livenessIntervalMs;
164
+ verifyIntervalMs;
165
+ /** When the last tail read was ISSUED — see `verifyIntervalMs`. */
166
+ lastTailReadAt;
153
167
  /** Consecutive failed tail reads, for the retry backoff. Reset by success. */
154
168
  retryAttempt = 0;
155
169
  tailRetryTimer;
@@ -167,11 +181,20 @@ export class SessionSyncController {
167
181
  lastActivityAt;
168
182
  listeners = new Set();
169
183
  destroyed = false;
184
+ /**
185
+ * One controller-lifetime signal, threaded into every read. A scope reset
186
+ * (registry `resetSessionSyncControllersForSession`) or unmount destroys this
187
+ * controller, `destroy()` aborts this, and the in-flight read cancels — so a
188
+ * navigated-away or superseded read frees its socket and can never hydrate.
189
+ */
190
+ abortController = new AbortController();
170
191
  constructor(options) {
171
192
  this.options = options;
172
193
  this.scheduler = options.scheduler ?? defaultScheduler;
173
194
  this.livenessIntervalMs = options.livenessIntervalMs ?? 10_000;
195
+ this.verifyIntervalMs = options.verifyIntervalMs ?? 30_000;
174
196
  this.lastActivityAt = this.scheduler.now();
197
+ this.lastTailReadAt = this.scheduler.now();
175
198
  }
176
199
  getSnapshot = () => this.snapshot;
177
200
  subscribe = (listener) => {
@@ -188,8 +211,13 @@ export class SessionSyncController {
188
211
  return Promise.resolve();
189
212
  if (this.tailRequest)
190
213
  return this.tailRequest;
214
+ // `loading` covers the first read AND a not-ready retry, so a waking box
215
+ // does not flip to `stale` between attempts; a session that already has a
216
+ // fresh transcript revalidates as `stale`.
191
217
  this.update({
192
- freshness: this.snapshot.freshness === 'idle' ? 'loading' : 'stale',
218
+ freshness: this.snapshot.freshness === 'idle' || this.snapshot.freshness === 'loading'
219
+ ? 'loading'
220
+ : 'stale',
193
221
  });
194
222
  this.tailRequest = this.loadTail(reason).finally(() => {
195
223
  this.tailRequest = undefined;
@@ -266,9 +294,16 @@ export class SessionSyncController {
266
294
  this.cancelTimer(this.tailRetryTimer);
267
295
  this.tailRetryTimer = undefined;
268
296
  }
297
+ // Cancel any in-flight read so it frees its socket and cannot hydrate a
298
+ // controller that is being torn down.
299
+ this.abortController.abort();
269
300
  this.listeners.clear();
270
301
  }
271
302
  async loadTail(reason) {
303
+ // Stamped at ISSUE: any tail read — initial, poll, gap, visible — is a
304
+ // verification, so the busy-verification cadence counts from the last
305
+ // attempt rather than piling on top of reads other reasons already ran.
306
+ this.lastTailReadAt = this.scheduler.now();
272
307
  try {
273
308
  // ONE PAGE. Render it. This is what OpenCode's own client does, and the
274
309
  // reason we now do it too is measured:
@@ -316,10 +351,19 @@ export class SessionSyncController {
316
351
  this.options.markLoaded();
317
352
  this.retryAttempt = 0;
318
353
  }
319
- catch {
354
+ catch (error) {
320
355
  if (this.destroyed)
321
356
  return;
322
- this.update({ freshness: 'error' });
357
+ // A superseded/cancelled read is not a failure and never hydrates — it
358
+ // must not paint an error over a live transcript, and it must not retry.
359
+ if (isAbortError(error) || this.abortController.signal.aborted)
360
+ return;
361
+ // A sandbox that is still waking is a RETRYABLE, "loading" state, not a
362
+ // fault: the box may come up any second, so keep polling and keep the UI
363
+ // on its loader. Only a genuine failure earns `error`. NEVER an
364
+ // empty-`fresh` — `markLoaded` above ran only on success, so a failed
365
+ // read never records the session as an empty transcript.
366
+ this.update({ freshness: isSandboxNotReadyError(error) ? 'loading' : 'error' });
323
367
  this.scheduleTailRetry(reason);
324
368
  }
325
369
  }
@@ -354,7 +398,7 @@ export class SessionSyncController {
354
398
  // asked for. Different budgets — see SESSION_SYNC_TAIL_PAGE_SIZE.
355
399
  limit: operation === 'tail' ? SESSION_SYNC_TAIL_PAGE_SIZE : SESSION_SYNC_PAGE_SIZE,
356
400
  ...(before ? { before } : {}),
357
- });
401
+ }, this.abortController.signal);
358
402
  this.options.onTelemetry?.({
359
403
  operation,
360
404
  reason,
@@ -377,7 +421,30 @@ export class SessionSyncController {
377
421
  }
378
422
  async loadCompleteOlderTurn(before) {
379
423
  const firstPage = await this.loadPage('older', 'manual', before);
380
- return this.loadCompleteTurn(firstPage, 'older', 'manual', before);
424
+ // Commit each page as it lands, including the page that fails. The walk
425
+ // is up to 11 sequential reads (MAX_TURN_BACKFILL_PAGES + 1) and used to
426
+ // commit all of them in one `.then`, so a rejection on ANY page —
427
+ // including the loop's very first, right after `firstPage` — discarded
428
+ // every successful read and left `nextCursor` unmoved: nothing to resume
429
+ // from, so the retry replayed the identical walk. `onPage` existed for
430
+ // exactly this and was never passed.
431
+ return this.loadCompleteTurn(firstPage, 'older', 'manual', before, (partialPage) => {
432
+ // `rememberUserMessages` mutates the instance-level `knownUserMessageIds`
433
+ // Set (below), and `onPage` fires on a rejection too (the catch in
434
+ // `loadCompleteTurn`, right before it rethrows). So a walk that fails
435
+ // partway permanently records the user-message ids from every page read
436
+ // so far. On the retry, `loadCompleteTurn` seeds its local
437
+ // `knownUserMessageIds` from this now-larger instance Set, which can
438
+ // already satisfy the termination condition ("some assistant has a
439
+ // `parentID` not in `knownUserMessageIds`") from `firstPage` alone — the
440
+ // retry's `while` loop never runs, and `nextCursor` advances by one page
441
+ // instead of walking the rest of the turn. Accepted: the pages already
442
+ // landed in the store on the failed attempt via this same callback,
443
+ // which is the fix this method exists for.
444
+ this.rememberUserMessages(partialPage.messages);
445
+ this.options.hydrate(partialPage.messages);
446
+ this.setCursor(partialPage.nextCursor);
447
+ });
381
448
  }
382
449
  async loadCompleteTurn(firstPage, operation, reason, initialCursor, onPage) {
383
450
  const messages = [...firstPage.messages];
@@ -401,7 +468,18 @@ export class SessionSyncController {
401
468
  throw new Error(`Session history cursor repeated: ${cursor}`);
402
469
  }
403
470
  seenCursors.add(cursor);
404
- const page = await this.loadPage(operation, reason, cursor);
471
+ let page;
472
+ try {
473
+ page = await this.loadPage(operation, reason, cursor);
474
+ }
475
+ catch (error) {
476
+ // `messages` already holds every page read so far — firstPage
477
+ // (seeded before the loop) plus every completed iteration. Commit it
478
+ // before rethrowing so a rejection on THIS read (including the
479
+ // loop's very first) cannot drop what was already read.
480
+ onPage?.({ messages: [...messages], nextCursor: cursor });
481
+ throw error;
482
+ }
405
483
  if (this.destroyed)
406
484
  return { messages, nextCursor: cursor };
407
485
  pagesRead += 1;
@@ -414,7 +492,7 @@ export class SessionSyncController {
414
492
  cursor = page.nextCursor;
415
493
  // Repaint as each page lands, so a long turn fills in front of the user
416
494
  // instead of withholding everything until the walk ends.
417
- onPage?.([...messages]);
495
+ onPage?.({ messages: [...messages], nextCursor: cursor });
418
496
  }
419
497
  return { messages, nextCursor: cursor };
420
498
  }
@@ -426,9 +504,17 @@ export class SessionSyncController {
426
504
  }
427
505
  }
428
506
  async checkLiveness() {
429
- if (this.destroyed || this.scheduler.now() - this.lastActivityAt <= this.livenessIntervalMs) {
507
+ if (this.destroyed)
508
+ return;
509
+ const nowMs = this.scheduler.now();
510
+ const quiet = nowMs - this.lastActivityAt > this.livenessIntervalMs;
511
+ // `noteActivity` proves frames are ARRIVING, not that none were lost. A
512
+ // degraded stream that still delivers a trickle renewed the quiet timer
513
+ // forever while the transcript diverged — so a busy session re-reads the
514
+ // tail at `verifyIntervalMs` no matter how live the stream looks.
515
+ const verifyDue = nowMs - this.lastTailReadAt >= this.verifyIntervalMs;
516
+ if (!quiet && !verifyDue)
430
517
  return;
431
- }
432
518
  // Reconcile the TAIL, and nothing else. This is the repair for a dropped
433
519
  // SSE stream: the transcript catches up on messages the stream never
434
520
  // delivered.
@@ -1 +1 @@
1
- {"version":3,"file":"session-sync-controller.js","sourceRoot":"","sources":["../../../src/core/session-sync/session-sync-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-sync-controller.js","sourceRoot":"","sources":["../../../src/core/session-sync/session-sync-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The frame the sandbox daemon injects to keep an idle SSE connection warm
3
+ * (`apps/kortix-sandbox-agent-server/src/sse-keepalive.ts`). It is minted one hop
4
+ * ABOVE opencode, so it proves the proxy is reachable and says nothing about the
5
+ * runtime.
6
+ */
7
+ export declare const KORTIX_KEEPALIVE_EVENT = "kortix.keepalive";
8
+ /**
9
+ * Does this frame count as proof the RUNTIME is alive?
10
+ *
11
+ * Not re-exported from the package index; kept out of the public surface by
12
+ * living in a file the SDK's `exports` map never lists.
13
+ */
14
+ export declare function isRuntimeLivenessEvent(e: {
15
+ type?: unknown;
16
+ } | undefined): boolean;
17
+ //# sourceMappingURL=keepalive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keepalive.d.ts","sourceRoot":"","sources":["../../../src/core/stream/keepalive.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AAEzD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GAAG,OAAO,CAGjF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The frame the sandbox daemon injects to keep an idle SSE connection warm
3
+ * (`apps/kortix-sandbox-agent-server/src/sse-keepalive.ts`). It is minted one hop
4
+ * ABOVE opencode, so it proves the proxy is reachable and says nothing about the
5
+ * runtime.
6
+ */
7
+ export const KORTIX_KEEPALIVE_EVENT = 'kortix.keepalive';
8
+ /**
9
+ * Does this frame count as proof the RUNTIME is alive?
10
+ *
11
+ * Not re-exported from the package index; kept out of the public surface by
12
+ * living in a file the SDK's `exports` map never lists.
13
+ */
14
+ export function isRuntimeLivenessEvent(e) {
15
+ if (!e || typeof e.type !== 'string' || e.type.length === 0)
16
+ return false;
17
+ return e.type !== KORTIX_KEEPALIVE_EVENT;
18
+ }
19
+ //# sourceMappingURL=keepalive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keepalive.js","sourceRoot":"","sources":["../../../src/core/stream/keepalive.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,kBAAkB,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,CAAiC;IACtE,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1E,OAAO,CAAC,CAAC,IAAI,KAAK,sBAAsB,CAAC;AAC3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"grouping.d.ts","sourceRoot":"","sources":["../../../src/core/turns/grouping.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,eAAe,EAAgB,QAAQ,EAAE,MAAM,SAAS,CAAC;AAuEvG,wBAAgB,yBAAyB,CACvC,CAAC,EAAE;IAAE,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,EACxD,CAAC,EAAE;IAAE,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,GACvD,MAAM,CAsBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,oBAAoB,EACnE,KAAK,EAAE,SAAS,CAAC,EAAE,GAClB,QAAQ,CAAC,CAAC,CAAC,EAAE,CAgEf;AAMD,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,oBAAoB,EAC7D,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAChB,eAAe,CAAC,CAAC,CAAC,EAAE,CAQtB;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,QAAQ,EACjD,KAAK,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,GAChC,CAAC,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,CAQpC;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,GAAG,OAAO,CAQ9E;AAMD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,oBAAoB,EACrE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EACjB,cAAc,EAAE,OAAO,EACvB,iBAAiB,EAAE,OAAO,GACzB,eAAe,CAAC,CAAC,CAAC,EAAE,CAgBtB;AAMD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACzD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAYvB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,IAGpC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAC9D,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,YAWjE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAS7F"}
1
+ {"version":3,"file":"grouping.d.ts","sourceRoot":"","sources":["../../../src/core/turns/grouping.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,eAAe,EAAgB,QAAQ,EAAE,MAAM,SAAS,CAAC;AAuEvG,wBAAgB,yBAAyB,CACvC,CAAC,EAAE;IAAE,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,EACxD,CAAC,EAAE;IAAE,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,GACvD,MAAM,CAsBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,oBAAoB,EACnE,KAAK,EAAE,SAAS,CAAC,EAAE,GAClB,QAAQ,CAAC,CAAC,CAAC,EAAE,CAgFf;AAMD,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,oBAAoB,EAC7D,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAChB,eAAe,CAAC,CAAC,CAAC,EAAE,CAQtB;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,QAAQ,EACjD,KAAK,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,GAChC,CAAC,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,CAQpC;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,GAAG,OAAO,CAQ9E;AAMD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,oBAAoB,EACrE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EACjB,cAAc,EAAE,OAAO,EACvB,iBAAiB,EAAE,OAAO,GACzB,eAAe,CAAC,CAAC,CAAC,EAAE,CAgBtB;AAMD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACzD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAYvB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,IAGpC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAC9D,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,YAWjE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAS7F"}
@@ -126,6 +126,19 @@ export function groupMessagesIntoTurns(input) {
126
126
  if (msg.info.role !== 'assistant')
127
127
  continue;
128
128
  const assistantMsg = msg.info;
129
+ // A runtime can persist an assistant shell before it writes any content.
130
+ // If that shell completes with zero usage and zero parts, it is an audit
131
+ // record, not a visible response. Keeping it in the source transcript
132
+ // preserves auditability; omitting it from the render projection prevents
133
+ // a malformed or stale parent from making a later user prompt look active.
134
+ const tokens = assistantMsg.tokens;
135
+ if (!assistantMsg.error &&
136
+ msg.parts.length === 0 &&
137
+ tokens?.input === 0 &&
138
+ tokens.output === 0 &&
139
+ tokens.reasoning === 0) {
140
+ continue;
141
+ }
129
142
  // Try parentID-based linking first (matches SolidJS)
130
143
  if (assistantMsg.parentID) {
131
144
  const parentTurn = turnsByUserMsgId.get(assistantMsg.parentID);