@cortexkit/opencode-magic-context 0.48.0 → 0.49.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 (203) hide show
  1. package/dist/auto-search-worker.js +3 -3
  2. package/dist/{conflict-warning-hook-w8cykrnf.js → conflict-warning-hook-kzx4dmk1.js} +7 -7
  3. package/dist/{context-m0cy262m.js → context-nj5f293n.js} +96 -43
  4. package/dist/{derive-budgets-sg0xsq7s.js → derive-budgets-qz5rrr08.js} +2 -2
  5. package/dist/embedding-backfill-aetxv1vt.js +21 -0
  6. package/dist/embedding-worker.js +4 -4
  7. package/dist/features/magic-context/git-commits/search-git-commits.d.ts +2 -0
  8. package/dist/features/magic-context/git-commits/search-git-commits.d.ts.map +1 -1
  9. package/dist/features/magic-context/message-index.d.ts.map +1 -1
  10. package/dist/features/magic-context/pi-content-decisions.d.ts +1 -1
  11. package/dist/features/magic-context/pi-content-decisions.d.ts.map +1 -1
  12. package/dist/features/magic-context/search-rerank.d.ts +35 -0
  13. package/dist/features/magic-context/search-rerank.d.ts.map +1 -0
  14. package/dist/features/magic-context/search.d.ts +11 -0
  15. package/dist/features/magic-context/search.d.ts.map +1 -1
  16. package/dist/features/magic-context/storage-meta-persisted.d.ts +13 -2
  17. package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
  18. package/dist/features/magic-context/storage-meta-session.d.ts +1 -1
  19. package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
  20. package/dist/features/magic-context/storage-meta.d.ts +1 -1
  21. package/dist/features/magic-context/storage-meta.d.ts.map +1 -1
  22. package/dist/features/magic-context/storage-session-tables.d.ts +2 -0
  23. package/dist/features/magic-context/storage-session-tables.d.ts.map +1 -1
  24. package/dist/features/magic-context/storage-tag-identity-revision.d.ts +29 -9
  25. package/dist/features/magic-context/storage-tag-identity-revision.d.ts.map +1 -1
  26. package/dist/features/magic-context/storage-tags.d.ts +9 -0
  27. package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
  28. package/dist/features/magic-context/storage.d.ts +1 -1
  29. package/dist/features/magic-context/storage.d.ts.map +1 -1
  30. package/dist/features/magic-context/tagger.d.ts +2 -0
  31. package/dist/features/magic-context/tagger.d.ts.map +1 -1
  32. package/dist/features/magic-context/transform-decision-log.d.ts +3 -0
  33. package/dist/features/magic-context/transform-decision-log.d.ts.map +1 -1
  34. package/dist/hooks/magic-context/auto-search-deadline.d.ts.map +1 -1
  35. package/dist/hooks/magic-context/auto-search-replay.fixture.d.ts +24 -0
  36. package/dist/hooks/magic-context/auto-search-replay.fixture.d.ts.map +1 -0
  37. package/dist/hooks/magic-context/auto-search-runner.d.ts +1 -1
  38. package/dist/hooks/magic-context/auto-search-runner.d.ts.map +1 -1
  39. package/dist/hooks/magic-context/auto-search-worker-client.d.ts +2 -0
  40. package/dist/hooks/magic-context/auto-search-worker-client.d.ts.map +1 -1
  41. package/dist/hooks/magic-context/command-handler.d.ts +2 -0
  42. package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
  43. package/dist/hooks/magic-context/emergency-fail-closed.d.ts +28 -0
  44. package/dist/hooks/magic-context/emergency-fail-closed.d.ts.map +1 -1
  45. package/dist/hooks/magic-context/event-handler.d.ts.map +1 -1
  46. package/dist/hooks/magic-context/historian-host-runner.d.ts +8 -0
  47. package/dist/hooks/magic-context/historian-host-runner.d.ts.map +1 -1
  48. package/dist/hooks/magic-context/hook.d.ts +2 -1
  49. package/dist/hooks/magic-context/hook.d.ts.map +1 -1
  50. package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
  51. package/dist/hooks/magic-context/latest-thinking-recovery.d.ts +7 -0
  52. package/dist/hooks/magic-context/latest-thinking-recovery.d.ts.map +1 -1
  53. package/dist/hooks/magic-context/lkg-slot.d.ts.map +1 -1
  54. package/dist/hooks/magic-context/pass-outcome.d.ts +1 -0
  55. package/dist/hooks/magic-context/pass-outcome.d.ts.map +1 -1
  56. package/dist/hooks/magic-context/read-session-chunk.d.ts +7 -1
  57. package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
  58. package/dist/hooks/magic-context/read-session-raw.d.ts +35 -0
  59. package/dist/hooks/magic-context/read-session-raw.d.ts.map +1 -1
  60. package/dist/hooks/magic-context/rust-mode-transform.d.ts +36 -0
  61. package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
  62. package/dist/hooks/magic-context/shared-compartment-boundaries.d.ts +8 -1
  63. package/dist/hooks/magic-context/shared-compartment-boundaries.d.ts.map +1 -1
  64. package/dist/hooks/magic-context/strict-thinking-prefix.d.ts +8 -0
  65. package/dist/hooks/magic-context/strict-thinking-prefix.d.ts.map +1 -0
  66. package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
  67. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +13 -0
  68. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  69. package/dist/hooks/magic-context/transform.d.ts +1 -0
  70. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  71. package/dist/{index-db7zwa3v.js → index-1bt88epp.js} +93 -9
  72. package/dist/{index-f0h6xwqm.js → index-1g30axtz.js} +229 -67
  73. package/dist/{index-k1xb52kd.js → index-1r0k9js3.js} +5 -5
  74. package/dist/{index-692jzy0p.js → index-2jcbj7r1.js} +122 -371
  75. package/dist/{index-bdckkfw6.js → index-2jgwttpt.js} +16 -8
  76. package/dist/{index-2y0s2hep.js → index-4mjhqadz.js} +1 -1
  77. package/dist/{index-pdecwzrd.js → index-57mrqed8.js} +1 -1
  78. package/dist/{index-ty64eqcn.js → index-9qjqq45k.js} +3 -3
  79. package/dist/{index-yq8n9qcb.js → index-9rt53q79.js} +4 -4
  80. package/dist/{index-pg50n748.js → index-b7mv1jx3.js} +4 -4
  81. package/dist/{index-mmyh6d8f.js → index-ezmszwbd.js} +6 -4
  82. package/dist/{index-fbv1dn35.js → index-gzcmtmar.js} +1 -1
  83. package/dist/{index-0an7742d.js → index-h2py7207.js} +549 -973
  84. package/dist/{index-0qhce371.js → index-h2wc01qk.js} +2 -2
  85. package/dist/{index-dhwzyd54.js → index-h5zfkjyk.js} +160 -25
  86. package/dist/{index-q2tqeqde.js → index-ha87j7a8.js} +1229 -78
  87. package/dist/{index-14cjxt20.js → index-hj2q50k0.js} +45 -8
  88. package/dist/{index-cb7emxgj.js → index-kmpvemph.js} +336 -6
  89. package/dist/{index-c43kr12f.js → index-kp5qe690.js} +7 -7
  90. package/dist/{index-bhvjj0ys.js → index-kq57tdf0.js} +2 -2
  91. package/dist/{index-7mx8v0pw.js → index-nm6a8xpd.js} +4 -4
  92. package/dist/{index-8j7gqj40.js → index-nsjyysj0.js} +6 -2
  93. package/dist/{index-k9nnwad5.js → index-nydv6g8r.js} +44 -7
  94. package/dist/{index-5zygecde.js → index-peshmj6h.js} +4 -4
  95. package/dist/{index-knh4y330.js → index-pxwp2hjk.js} +7 -2
  96. package/dist/{index-1qb0z7wa.js → index-qx53vezw.js} +1 -1
  97. package/dist/{index-q7h7csab.js → index-s4j7t92z.js} +9 -9
  98. package/dist/{index-z8e0psj8.js → index-stbr4ce6.js} +3 -3
  99. package/dist/{index-jcbd3znx.js → index-tqf7yg27.js} +1 -1
  100. package/dist/{index-72nhv486.js → index-vkbqdnkj.js} +2 -2
  101. package/dist/{index-eeezr5zz.js → index-z1tjp257.js} +1 -1
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js +61 -44
  104. package/dist/{logger-d3wex3dz.js → logger-ewak5q1s.js} +1 -1
  105. package/dist/{message-index-bounded-7ezbgddp.js → message-index-bounded-h0mrd4pr.js} +13 -13
  106. package/dist/{message-time-backfill-brbd63hv.js → message-time-backfill-8x06r9kx.js} +2 -2
  107. package/dist/migration-worker.js +9 -9
  108. package/dist/plugin/hooks/create-session-hooks.d.ts +2 -0
  109. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  110. package/dist/plugin/tool-registry.d.ts.map +1 -1
  111. package/dist/{project-embedding-registry-7qzptcw7.js → project-embedding-registry-rtt0djyb.js} +9 -9
  112. package/dist/raw-ordinal-warmup-worker.js +4 -4
  113. package/dist/{read-session-chunk-6k83m4fj.js → read-session-chunk-ty89v75e.js} +10 -8
  114. package/dist/{read-session-raw-3g9qy1xa.js → read-session-raw-8sjbc9h0.js} +5 -3
  115. package/dist/{recomp-orchestrator-d3fp1cy0.js → recomp-orchestrator-4f1yyd1q.js} +25 -25
  116. package/dist/{safe-notification-target-5ffqq32m.js → safe-notification-target-q0cyrx3x.js} +2 -2
  117. package/dist/{search-epax1ecv.js → search-pz4f4wge.js} +20 -20
  118. package/dist/{send-session-notification-erecz4y4.js → send-session-notification-38cd5dqt.js} +5 -5
  119. package/dist/shared/auto-search-lifecycle.d.ts +14 -0
  120. package/dist/shared/auto-search-lifecycle.d.ts.map +1 -1
  121. package/dist/shared/logger.d.ts.map +1 -1
  122. package/dist/shared/models-dev-temperature.d.ts +18 -0
  123. package/dist/shared/models-dev-temperature.d.ts.map +1 -0
  124. package/dist/shared/project-directory-key.d.ts +16 -0
  125. package/dist/shared/project-directory-key.d.ts.map +1 -1
  126. package/dist/shared/subagent-temperature.d.ts +46 -0
  127. package/dist/shared/subagent-temperature.d.ts.map +1 -0
  128. package/dist/{storage-tags-d3b0v2ss.js → storage-tags-k0pda32s.js} +6 -4
  129. package/dist/tools/ctx-reduce/tools.d.ts.map +1 -1
  130. package/dist/tools/ctx-search/tools.d.ts.map +1 -1
  131. package/dist/tools/ctx-search/types.d.ts +1 -0
  132. package/dist/tools/ctx-search/types.d.ts.map +1 -1
  133. package/dist/{transform-postprocess-phase-spcy2qre.js → transform-postprocess-phase-tck4g20s.js} +25 -25
  134. package/dist/v2/auto-search-worker.js +3 -3
  135. package/dist/v2/{context-sf98kstd.js → context-crbt6p1y.js} +809 -1052
  136. package/dist/v2/{derive-budgets-3vc0y84t.js → derive-budgets-fgej9j46.js} +3 -3
  137. package/dist/v2/embedding-backfill-ph1qfyn3.js +21 -0
  138. package/dist/v2/embedding-worker.js +4 -4
  139. package/dist/v2/hidden-child-native.d.ts.map +1 -1
  140. package/dist/v2/hidden-completion.d.ts +7 -0
  141. package/dist/v2/hidden-completion.d.ts.map +1 -1
  142. package/dist/v2/hooks/context.d.ts.map +1 -1
  143. package/dist/v2/hooks/dream-trigger.d.ts +4 -1
  144. package/dist/v2/hooks/dream-trigger.d.ts.map +1 -1
  145. package/dist/v2/hooks/generate.d.ts +9 -2
  146. package/dist/v2/hooks/generate.d.ts.map +1 -1
  147. package/dist/v2/{logger-mxd0ym09.js → logger-pj02s7sr.js} +1 -1
  148. package/dist/v2/{message-index-bounded-dy3s2k1e.js → message-index-bounded-xwqdywxg.js} +13 -13
  149. package/dist/v2/{message-time-backfill-gtx1pwk1.js → message-time-backfill-cje68egj.js} +2 -2
  150. package/dist/v2/migration-worker.js +9 -9
  151. package/dist/v2/{project-embedding-registry-1tgba5dv.js → project-embedding-registry-d6m7tyxr.js} +9 -9
  152. package/dist/v2/raw-ordinal-warmup-worker.js +4 -4
  153. package/dist/v2/{read-session-chunk-rh4khdkv.js → read-session-chunk-8p5mdryx.js} +10 -8
  154. package/dist/v2/{read-session-raw-bsbmf0vj.js → read-session-raw-j8dvp7f4.js} +5 -3
  155. package/dist/v2/{recomp-orchestrator-az61rfcg.js → recomp-orchestrator-ckfgt6wq.js} +26 -26
  156. package/dist/v2/{safe-notification-target-73ax1p5v.js → safe-notification-target-y3p1hce9.js} +2 -2
  157. package/dist/v2/{search-nzkwrc6n.js → search-ym8rehhz.js} +20 -20
  158. package/dist/v2/{send-session-notification-6km439kn.js → send-session-notification-5m0yapqx.js} +5 -5
  159. package/dist/v2/{server-x2g40a71.js → server-19zjmn02.js} +2 -2
  160. package/dist/v2/{server-sggvvzhb.js → server-1tk82krw.js} +45 -8
  161. package/dist/v2/{server-vqpf3167.js → server-2s6ayq3t.js} +2 -2
  162. package/dist/v2/{server-z2037m6z.js → server-2s9qz6n7.js} +2 -2
  163. package/dist/v2/{server-k228xhjg.js → server-3j4d00kf.js} +1 -1
  164. package/dist/v2/{server-aan4q8mx.js → server-3t0q2cqx.js} +1 -1
  165. package/dist/v2/{server-2fbhp79z.js → server-4ez8mntn.js} +16 -8
  166. package/dist/v2/{server-zxhgvsf9.js → server-676xw7at.js} +1 -1
  167. package/dist/v2/{server-52awr2mw.js → server-6byqfbqf.js} +93 -9
  168. package/dist/v2/{server-qye6ykf7.js → server-7ekna9zs.js} +2 -2
  169. package/dist/v2/{server-g5r0n3b6.js → server-7h861yms.js} +160 -25
  170. package/dist/v2/{server-v06jcv0w.js → server-8k2agx29.js} +1 -1
  171. package/dist/v2/{server-686jg6eb.js → server-c5rrgrcd.js} +44 -7
  172. package/dist/v2/{server-4k748ke6.js → server-hb6xhh9q.js} +2 -2
  173. package/dist/v2/{server-7wwc2nga.js → server-jvxzm1jy.js} +7 -7
  174. package/dist/v2/{server-1r6pmz4f.js → server-kzns2hbz.js} +1 -1
  175. package/dist/v2/{server-xdfwt6kh.js → server-pj4pjv02.js} +2 -2
  176. package/dist/v2/{server-psqc7e9n.js → server-q4ph9bwn.js} +1227 -78
  177. package/dist/v2/{server-8pyt7hev.js → server-sa8jvrfc.js} +9 -9
  178. package/dist/v2/{server-ezhze64f.js → server-ss95ky04.js} +4 -4
  179. package/dist/v2/{server-5m3dt5r1.js → server-t4k4qexw.js} +6 -2
  180. package/dist/v2/{server-e0vdaae2.js → server-v4mewb78.js} +4 -4
  181. package/dist/v2/{server-gjcr4w98.js → server-w32kmdez.js} +4 -4
  182. package/dist/v2/{server-k8x2rbxc.js → server-x4hscabv.js} +119 -365
  183. package/dist/v2/{server-yczc713m.js → server-xwz4dqh9.js} +7 -2
  184. package/dist/v2/{server-xxm59eww.js → server-ycw9qqcy.js} +4 -4
  185. package/dist/v2/{server-8tqanswc.js → server-zp53y8js.js} +331 -4
  186. package/dist/v2/server.js +4 -4
  187. package/dist/v2/{storage-tags-w4tv77sn.js → storage-tags-8vw924zn.js} +6 -4
  188. package/dist/v2/store-reader.d.ts +8 -2
  189. package/dist/v2/store-reader.d.ts.map +1 -1
  190. package/dist/v2/{wrapup-orchestrator-mz7efs7w.js → wrapup-orchestrator-a7efxaax.js} +26 -26
  191. package/dist/wrapup-orchestrator-barbc6h9.js +44 -0
  192. package/package.json +1 -1
  193. package/src/shared/auto-search-lifecycle.ts +43 -0
  194. package/src/shared/logger.test.ts +38 -0
  195. package/src/shared/logger.ts +10 -2
  196. package/src/shared/models-dev-temperature.ts +107 -0
  197. package/src/shared/project-directory-key.test.ts +59 -0
  198. package/src/shared/project-directory-key.ts +20 -0
  199. package/src/shared/subagent-temperature.test.ts +270 -0
  200. package/src/shared/subagent-temperature.ts +110 -0
  201. package/dist/embedding-backfill-9rcm1mfy.js +0 -21
  202. package/dist/v2/embedding-backfill-vn8g1nh1.js +0 -21
  203. package/dist/wrapup-orchestrator-amzta1t4.js +0 -44
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  estimateTokens
3
- } from "./index-1qb0z7wa.js";
3
+ } from "./index-qx53vezw.js";
4
4
  import {
5
5
  stableStringify
6
- } from "./index-db7zwa3v.js";
6
+ } from "./index-1bt88epp.js";
7
7
 
8
8
  // src/features/magic-context/tool-definition-tokens.ts
9
9
  import { createHash } from "node:crypto";
@@ -4,7 +4,7 @@ import {
4
4
  } from "./index-kb9nn0a0.js";
5
5
  import {
6
6
  log2
7
- } from "./index-8j7gqj40.js";
7
+ } from "./index-nsjyysj0.js";
8
8
 
9
9
  // src/hooks/magic-context/read-session-raw.ts
10
10
  import { isMainThread } from "node:worker_threads";
@@ -315,30 +315,46 @@ function readRawMessagePageRows(db, sessionId, afterOrdinal, limit, finalWaterma
315
315
  const pageSize = Math.min(Math.max(1, Math.floor(limit)), remaining);
316
316
  if (pageSize === 0)
317
317
  return [];
318
- const parameters = [sessionId];
319
- if (after)
320
- parameters.push(after.timeCreated, after.timeCreated, after.timeCreated, after.id);
321
- parameters.push(pageSize);
322
- if (!after)
323
- parameters.push(Math.max(0, Math.floor(afterOrdinal)));
324
- return db.prepare(`SELECT id, data, time_created, time_updated
325
- FROM message
326
- WHERE session_id = ?
327
- ${after ? "AND time_created >= ? AND (time_created > ? OR (time_created = ? AND id > ?))" : ""}
328
- AND NOT (
329
- CASE WHEN json_valid(data) = 1
330
- THEN COALESCE(json_extract(data, '$.summary'), 0)
331
- ELSE 0 END = 1
332
- AND CASE WHEN json_valid(data) = 1
333
- THEN COALESCE(json_extract(data, '$.finish'), '')
334
- ELSE '' END = 'stop'
335
- )
336
- ORDER BY time_created ASC, id ASC
337
- LIMIT ? ${after ? "" : "OFFSET ?"}`).all(...parameters).filter(isRawMessageRow).map((row, index) => ({
338
- ...row,
339
- ordinal: Math.floor(afterOrdinal) + index + 1
340
- }));
318
+ return withReadSnapshot(db, () => {
319
+ const ordinal = Math.max(0, Math.floor(afterOrdinal));
320
+ const points = currentOrdinalCheckpoints(db, sessionId)?.scan.checkpoints ?? [];
321
+ let low = 0;
322
+ let high = points.length;
323
+ while (low < high) {
324
+ const middle = Math.floor((low + high) / 2);
325
+ if (points[middle].ordinal <= ordinal)
326
+ low = middle + 1;
327
+ else
328
+ high = middle;
329
+ }
330
+ const floor = points[low - 1];
331
+ const useFloor = floor && (!after || compareOrdinalKeys(floor, after) > 0);
332
+ const anchor = useFloor ? floor : after;
333
+ const skip = anchor === after && after ? 0 : ordinal - (floor?.ordinal ?? 0);
334
+ if (skip > ORDINAL_LOOKUP_LIMIT) {
335
+ prewarmRawSessionOrdinalsForDb(db, sessionId);
336
+ throw new RawOrdinalsNotReady;
337
+ }
338
+ const rawLimit = skip + pageSize + ORDINAL_LOOKUP_LIMIT;
339
+ const rows = db.prepare(`SELECT id, data, time_created, time_updated, ${EXCLUDED_ROW_SQL} AS excluded
340
+ FROM message WHERE id IN (
341
+ SELECT id FROM message WHERE session_id = ?
342
+ ${anchor ? "AND (time_created, id) > (?, ?)" : ""}
343
+ ORDER BY time_created, id LIMIT ?)
344
+ ORDER BY time_created, id`).all(sessionId, ...anchor ? [anchor.timeCreated, anchor.id] : [], rawLimit);
345
+ rawMessagePageRowsVisited += rows.length;
346
+ const eligible = rows.filter((row) => row.excluded !== 1);
347
+ if (eligible.length <= skip && rows.length === rawLimit) {
348
+ prewarmRawSessionOrdinalsForDb(db, sessionId);
349
+ throw new RawOrdinalsNotReady;
350
+ }
351
+ return eligible.slice(skip, skip + pageSize).filter(isRawMessageRow).map((row, index) => ({
352
+ ...row,
353
+ ordinal: ordinal + index + 1
354
+ }));
355
+ });
341
356
  }
357
+ var rawMessagePageRowsVisited = 0;
342
358
  function assembleRawMessagePage(messageRows, partRows) {
343
359
  const partsByMessageId = new Map;
344
360
  for (const part of partRows) {
@@ -1138,5 +1154,124 @@ function readRawSeedTailFromDb2(db, sessionId, boundaryId) {
1138
1154
  throw new Error("state_sync materialized boundary is missing from raw storage");
1139
1155
  return messages;
1140
1156
  }
1157
+ var BOUNDARY_ORDINAL_SQL = `
1158
+ SELECT id, ordinal FROM (
1159
+ SELECT id, ROW_NUMBER() OVER (ORDER BY time_created, id) AS ordinal
1160
+ FROM message
1161
+ WHERE session_id = ?
1162
+ AND typeof(id) = 'text' AND typeof(data) = 'text'
1163
+ AND CASE WHEN json_valid(data) THEN NOT (
1164
+ COALESCE(json_type(data, '$.summary'), '') = 'true'
1165
+ AND COALESCE(json_extract(data, '$.finish'), '') = 'stop'
1166
+ ) ELSE 1 END
1167
+ )
1168
+ WHERE id IN (SELECT value FROM json_each(?))`;
1169
+ var BOUNDARY_MESSAGE_SQL = `
1170
+ SELECT id, data, time_created FROM message
1171
+ WHERE +session_id = ? AND id IN (SELECT value FROM json_each(?))`;
1172
+ var BOUNDARY_BLOCK_COUNT_SQL = `
1173
+ SELECT message_id AS id, SUM(
1174
+ CASE
1175
+ WHEN NOT json_valid(data) OR json_type(data) <> 'object' THEN 0
1176
+ ELSE CASE (CASE WHEN json_type(data, '$.type') = 'text'
1177
+ THEN json_extract(data, '$.type') ELSE 'unknown' END)
1178
+ WHEN 'text' THEN CASE WHEN json_type(data, '$.ignored') = 'true' THEN 0 ELSE 1 END
1179
+ WHEN 'reasoning' THEN 1
1180
+ WHEN 'thinking' THEN 1
1181
+ WHEN 'redacted_thinking' THEN 1
1182
+ WHEN 'tool' THEN 1 + CASE
1183
+ WHEN json_type(data, '$.state') = 'object'
1184
+ AND json_type(data, '$.state.status') = 'text'
1185
+ AND json_extract(data, '$.state.status') IN ('completed', 'error')
1186
+ THEN 1 ELSE 0 END
1187
+ WHEN 'compaction' THEN 0
1188
+ WHEN 'step-finish' THEN 0
1189
+ WHEN 'snapshot' THEN 0
1190
+ WHEN 'patch' THEN 0
1191
+ WHEN 'agent' THEN 0
1192
+ WHEN 'retry' THEN 0
1193
+ ELSE 1
1194
+ END
1195
+ END) AS blocks
1196
+ FROM part
1197
+ WHERE +session_id = ?
1198
+ AND message_id IN (SELECT value FROM json_each(?))
1199
+ AND typeof(message_id) = 'text' AND typeof(data) = 'text'
1200
+ GROUP BY message_id`;
1201
+ var boundaryEndpointCaches = new WeakMap;
1202
+ var BOUNDARY_ENDPOINT_CACHE_SESSIONS = 16;
1203
+ var boundaryEndpointRowsRead = 0;
1204
+ function readBoundaryEndpointRows(db, sessionId, ids, blockIds, into) {
1205
+ if (ids.length > 0) {
1206
+ boundaryEndpointRowsRead += ids.length;
1207
+ const wanted = JSON.stringify(ids);
1208
+ const ordinals = new Map;
1209
+ for (const row of db.prepare(BOUNDARY_ORDINAL_SQL).all(sessionId, wanted)) {
1210
+ ordinals.set(row.id, row.ordinal);
1211
+ }
1212
+ const rows = db.prepare(BOUNDARY_MESSAGE_SQL).all(sessionId, wanted);
1213
+ for (const id of ids)
1214
+ into.set(id, null);
1215
+ for (const row of rows) {
1216
+ if (!isRawMessageRow(row) || typeof row.time_created !== "number")
1217
+ continue;
1218
+ const info = parseJsonRecord(row.data);
1219
+ if (!info || isRawCompactionSummaryInfo2(info))
1220
+ continue;
1221
+ into.set(row.id, {
1222
+ ordinal: ordinals.get(row.id) ?? null,
1223
+ createdAt: row.time_created
1224
+ });
1225
+ }
1226
+ }
1227
+ const servable = blockIds.filter((id) => {
1228
+ const endpoint = into.get(id);
1229
+ return endpoint && endpoint.lastBlockIndex === undefined;
1230
+ });
1231
+ if (servable.length === 0)
1232
+ return;
1233
+ const counts = new Map;
1234
+ for (const row of db.prepare(BOUNDARY_BLOCK_COUNT_SQL).all(sessionId, JSON.stringify(servable))) {
1235
+ counts.set(row.id, row.blocks);
1236
+ }
1237
+ for (const id of servable) {
1238
+ const endpoint = into.get(id);
1239
+ if (!endpoint)
1240
+ continue;
1241
+ const blocks = counts.get(id) ?? 0;
1242
+ into.set(id, { ...endpoint, lastBlockIndex: blocks > 0 ? blocks - 1 : 0 });
1243
+ }
1244
+ }
1245
+ function readRawSessionBoundaryEndpointsFromDb2(db, sessionId, ids, blockIds = []) {
1246
+ const wanted = [...new Set(ids)];
1247
+ const wantedBlocks = [...new Set(blockIds)];
1248
+ let sessions = boundaryEndpointCaches.get(db);
1249
+ if (!sessions) {
1250
+ sessions = new Map;
1251
+ boundaryEndpointCaches.set(db, sessions);
1252
+ }
1253
+ for (let attempt = 1;; attempt += 1) {
1254
+ const before = readStoreStamp(db);
1255
+ const cached = sessions.get(sessionId);
1256
+ const reuse = attempt === 1 && cached && sameStoreStamp(cached.stamp, before);
1257
+ const endpoints = new Map(reuse ? cached.endpoints : []);
1258
+ const missing = wanted.filter((id) => !endpoints.has(id));
1259
+ withReadSnapshot(db, () => readBoundaryEndpointRows(db, sessionId, missing, wantedBlocks, endpoints));
1260
+ const unchanged = before !== null && sameStoreStamp(before, readStoreStamp(db));
1261
+ if (unchanged) {
1262
+ sessions.delete(sessionId);
1263
+ sessions.set(sessionId, { stamp: before, endpoints });
1264
+ while (sessions.size > BOUNDARY_ENDPOINT_CACHE_SESSIONS) {
1265
+ const oldest = sessions.keys().next().value;
1266
+ if (oldest === undefined)
1267
+ break;
1268
+ sessions.delete(oldest);
1269
+ }
1270
+ } else if (reuse) {
1271
+ continue;
1272
+ }
1273
+ return new Map(wanted.map((id) => [id, endpoints.get(id) ?? null]));
1274
+ }
1275
+ }
1141
1276
 
1142
- export { registerExitAbort, unregisterExitAbort, isStrictGapHealingMessage2, isRawCompactionSummaryInfo2, readRawSessionMessagesFromDb2, readRawSessionMessagePageFromDb2, readRawSessionMessageSummaryPageFromDb2, countRawSessionMessageOrdinalsFromDb2, readRawSessionMessageIdOrdinalsForRangeFromDb2, readRawSessionMessageOrdinalPageFromDb2, countStoredRawSessionMessagesFromDb2, readRawSessionTailFromDb2, extractInMemoryMessageViews2, buildInMemoryTailRawMessages2, readRawSessionMessagePartsByIdFromDb2, forgetRawSessionOrdinalWatermark2, forgetRawSessionSummaryRows2, noteRawSessionSummaryRowWritten2, rawOrdinalSummarySeed2, scanRawSessionSummaryRows2, getRawSessionSummaryEpoch2, installRawSessionSummaryScan2, isRawSessionSummaryWarm2, readRawSessionMessageOrdinalByIdFromDb2, readRawSessionMessageByIdFromDb2, hasRawSessionMessageByIdFromDb2, readRawSeedTailFromDb2, runSessionWarmupWorker, prewarmRawSessionOrdinalsForDb };
1277
+ export { registerExitAbort, unregisterExitAbort, isStrictGapHealingMessage2, isRawCompactionSummaryInfo2, readRawSessionMessagesFromDb2, readRawSessionMessagePageFromDb2, readRawSessionMessageSummaryPageFromDb2, countRawSessionMessageOrdinalsFromDb2, readRawSessionMessageIdOrdinalsForRangeFromDb2, readRawSessionMessageOrdinalPageFromDb2, countStoredRawSessionMessagesFromDb2, readRawSessionTailFromDb2, extractInMemoryMessageViews2, buildInMemoryTailRawMessages2, readRawSessionMessagePartsByIdFromDb2, forgetRawSessionOrdinalWatermark2, forgetRawSessionSummaryRows2, noteRawSessionSummaryRowWritten2, rawOrdinalSummarySeed2, scanRawSessionSummaryRows2, getRawSessionSummaryEpoch2, installRawSessionSummaryScan2, isRawSessionSummaryWarm2, readRawSessionMessageOrdinalByIdFromDb2, readRawSessionMessageByIdFromDb2, hasRawSessionMessageByIdFromDb2, readRawSeedTailFromDb2, readRawSessionBoundaryEndpointsFromDb2, runSessionWarmupWorker, prewarmRawSessionOrdinalsForDb };