@cortexkit/opencode-magic-context 0.49.6 → 0.49.8

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 (255) hide show
  1. package/dist/auto-search-worker.js +10 -7
  2. package/dist/compaction-marker-candidates-worker.js +2 -2
  3. package/dist/{compaction-marker-candidates-cz72pm1t.js → compaction-marker-candidates-xxz35vwp.js} +3 -3
  4. package/dist/{conflict-warning-hook-1jq1rxx7.js → conflict-warning-hook-w3crzrar.js} +8 -8
  5. package/dist/{context-ae3gxdye.js → context-x0ccfv0f.js} +88 -53
  6. package/dist/{derive-budgets-j4ry8j8n.js → derive-budgets-3nbxsyss.js} +2 -2
  7. package/dist/embedding-backfill-3h2m5n0q.js +21 -0
  8. package/dist/embedding-worker-process.js +6 -2
  9. package/dist/embedding-worker.js +6 -5
  10. package/dist/features/magic-context/compaction-marker-candidates.d.ts.map +1 -1
  11. package/dist/features/magic-context/compaction-marker.d.ts.map +1 -1
  12. package/dist/features/magic-context/dreamer/cron.d.ts +2 -0
  13. package/dist/features/magic-context/dreamer/cron.d.ts.map +1 -1
  14. package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts +6 -3
  15. package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts.map +1 -1
  16. package/dist/features/magic-context/dreamer/map-memories-prompt.d.ts +7 -1
  17. package/dist/features/magic-context/dreamer/map-memories-prompt.d.ts.map +1 -1
  18. package/dist/features/magic-context/dreamer/map-memories.d.ts +2 -2
  19. package/dist/features/magic-context/dreamer/map-memories.d.ts.map +1 -1
  20. package/dist/features/magic-context/dreamer/primer-seed.d.ts +2 -0
  21. package/dist/features/magic-context/dreamer/primer-seed.d.ts.map +1 -1
  22. package/dist/features/magic-context/dreamer/provider-output-failure.d.ts +1 -0
  23. package/dist/features/magic-context/dreamer/provider-output-failure.d.ts.map +1 -1
  24. package/dist/features/magic-context/dreamer/refresh-primers.d.ts +2 -2
  25. package/dist/features/magic-context/memory/embedding-local.d.ts.map +1 -1
  26. package/dist/features/magic-context/memory/embedding-worker-client.d.ts.map +1 -1
  27. package/dist/features/magic-context/message-index-async.d.ts.map +1 -1
  28. package/dist/features/magic-context/migration-worker-client.d.ts.map +1 -1
  29. package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
  30. package/dist/features/magic-context/smart-notes/wake-plane.d.ts.map +1 -1
  31. package/dist/features/magic-context/storage-clone.d.ts.map +1 -1
  32. package/dist/features/magic-context/storage-meta-persisted.d.ts +10 -3
  33. package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
  34. package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
  35. package/dist/features/magic-context/storage-replay-document.d.ts +4 -0
  36. package/dist/features/magic-context/storage-replay-document.d.ts.map +1 -1
  37. package/dist/features/magic-context/transform-decision-log.d.ts.map +1 -1
  38. package/dist/history-owner-ty29fz0f.js +244 -0
  39. package/dist/hooks/auto-update-checker/checker.d.ts.map +1 -1
  40. package/dist/hooks/magic-context/apply-operations.d.ts +7 -0
  41. package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
  42. package/dist/hooks/magic-context/auto-search-worker-client.d.ts.map +1 -1
  43. package/dist/hooks/magic-context/compartment-runner-recomp.d.ts.map +1 -1
  44. package/dist/hooks/magic-context/compartment-runner.d.ts.map +1 -1
  45. package/dist/hooks/magic-context/edit-marker.d.ts +2 -0
  46. package/dist/hooks/magic-context/edit-marker.d.ts.map +1 -1
  47. package/dist/hooks/magic-context/heuristic-cleanup.d.ts.map +1 -1
  48. package/dist/hooks/magic-context/history-boundary-repair.d.ts.map +1 -1
  49. package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
  50. package/dist/hooks/magic-context/lkg-persist.d.ts.map +1 -1
  51. package/dist/hooks/magic-context/module-transport.d.ts +1 -0
  52. package/dist/hooks/magic-context/module-transport.d.ts.map +1 -1
  53. package/dist/hooks/magic-context/note-nudger.d.ts +5 -3
  54. package/dist/hooks/magic-context/note-nudger.d.ts.map +1 -1
  55. package/dist/hooks/magic-context/postprocess-read-cache.d.ts.map +1 -1
  56. package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts.map +1 -1
  57. package/dist/hooks/magic-context/read-session-chunk.d.ts +15 -4
  58. package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
  59. package/dist/hooks/magic-context/replay-committed-drops.d.ts +9 -0
  60. package/dist/hooks/magic-context/replay-committed-drops.d.ts.map +1 -0
  61. package/dist/hooks/magic-context/rust-lkg-freeze-registry.d.ts +2 -2
  62. package/dist/hooks/magic-context/rust-lkg-freeze-registry.d.ts.map +1 -1
  63. package/dist/hooks/magic-context/rust-mode-transform.d.ts +4 -0
  64. package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
  65. package/dist/hooks/magic-context/rust-refusal-recovery.d.ts.map +1 -1
  66. package/dist/hooks/magic-context/rust-served-raw.d.ts +29 -0
  67. package/dist/hooks/magic-context/rust-served-raw.d.ts.map +1 -0
  68. package/dist/hooks/magic-context/strip-content.d.ts +23 -24
  69. package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
  70. package/dist/hooks/magic-context/tag-messages.d.ts +2 -0
  71. package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
  72. package/dist/hooks/magic-context/tool-drop-target.d.ts +2 -0
  73. package/dist/hooks/magic-context/tool-drop-target.d.ts.map +1 -1
  74. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  75. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  76. package/dist/hooks/magic-context/unresolved-history-boundary.d.ts +5 -1
  77. package/dist/hooks/magic-context/unresolved-history-boundary.d.ts.map +1 -1
  78. package/dist/hooks/magic-context/wrapup-orchestrator.d.ts.map +1 -1
  79. package/dist/{index-g9exahnx.js → index-0jz47061.js} +6 -3
  80. package/dist/{index-4mjhqadz.js → index-150zz6fh.js} +1 -1
  81. package/dist/{index-ch08qwgd.js → index-2rw244rh.js} +88 -81
  82. package/dist/{index-6q5h70h2.js → index-4hb8nt93.js} +3 -3
  83. package/dist/{index-j55vn694.js → index-7bjgyaj1.js} +4 -4
  84. package/dist/{index-h2wc01qk.js → index-8kk7yh6m.js} +2 -2
  85. package/dist/{index-vztbgcdk.js → index-9g1c4bt9.js} +304 -92
  86. package/dist/{index-7q1m1qjk.js → index-a43xq1pg.js} +5 -5
  87. package/dist/{index-tqf7yg27.js → index-a4b0gbyg.js} +1 -1
  88. package/dist/{index-vnjhmkwk.js → index-angx1s0k.js} +4 -3
  89. package/dist/{index-1xaw2pq8.js → index-b4gcb3rk.js} +8 -8
  90. package/dist/{index-z1tjp257.js → index-b64n4d0h.js} +1 -1
  91. package/dist/{index-1bt88epp.js → index-bd9cjab3.js} +1 -1
  92. package/dist/{index-gbmqa9x9.js → index-bmwfzz28.js} +9 -6
  93. package/dist/{index-qx53vezw.js → index-gjvjh960.js} +1 -1
  94. package/dist/{index-zgzdm6dg.js → index-gzg9ekc1.js} +155 -103
  95. package/dist/{index-vh3e2mvr.js → index-hxrvx6cy.js} +121 -51
  96. package/dist/{index-w23dh319.js → index-jw4gbfkv.js} +1 -1
  97. package/dist/index-knvkbfvh.js +25 -0
  98. package/dist/{index-vkbqdnkj.js → index-kvw6xew3.js} +6 -3
  99. package/dist/{index-bg5qqene.js → index-mp2kghkv.js} +3 -27
  100. package/dist/{index-nsjyysj0.js → index-mvvephtj.js} +5 -1
  101. package/dist/{index-cm4hmxyk.js → index-n78avt2p.js} +1 -1
  102. package/dist/{index-hr64sth2.js → index-pgy3h49n.js} +4 -4
  103. package/dist/{index-a796ct3s.js → index-pjgzdezw.js} +13 -9
  104. package/dist/{index-9m7bn21d.js → index-q28hsbpg.js} +15 -3
  105. package/dist/{index-ab3bgm2m.js → index-q76br5zn.js} +3 -3
  106. package/dist/{index-xqyj5c85.js → index-qgp5vnt4.js} +5 -5
  107. package/dist/{index-9s58tq95.js → index-rg1cezmj.js} +22 -22
  108. package/dist/{index-f3dnvnw6.js → index-s178h9z8.js} +4 -3
  109. package/dist/{index-mj1fgfrk.js → index-w1ejb9qr.js} +939 -160
  110. package/dist/{index-k6xvbj2e.js → index-w28y7d0z.js} +2 -0
  111. package/dist/{index-0nnd4bry.js → index-wafzvyhg.js} +63 -19
  112. package/dist/{index-ck6y3td2.js → index-xf6k8szp.js} +4 -4
  113. package/dist/{index-1j8jcjpa.js → index-xpn05jxq.js} +4 -4
  114. package/dist/{index-s0gsmthp.js → index-ydjgz36f.js} +7 -7
  115. package/dist/{index-besxhcsh.js → index-zf9nydbd.js} +50 -39
  116. package/dist/index.js +53 -52
  117. package/dist/{logger-ewak5q1s.js → logger-wn328tfg.js} +1 -1
  118. package/dist/{message-index-bounded-630j53ps.js → message-index-bounded-hxjp56qk.js} +16 -16
  119. package/dist/{message-index-c84wm2g0.js → message-index-zs882h8e.js} +16 -16
  120. package/dist/{message-time-backfill-8kj57qe3.js → message-time-backfill-nb5hhnrt.js} +3 -3
  121. package/dist/migration-worker.js +11 -11
  122. package/dist/plugin/boot-quiet.d.ts.map +1 -1
  123. package/dist/plugin/dream-timer.d.ts.map +1 -1
  124. package/dist/plugin/messages-transform.d.ts.map +1 -1
  125. package/dist/plugin/rpc-handlers.d.ts +2 -0
  126. package/dist/plugin/rpc-handlers.d.ts.map +1 -1
  127. package/dist/{project-embedding-registry-vv59t7ah.js → project-embedding-registry-vy7sv9jt.js} +11 -11
  128. package/dist/raw-ordinal-warmup-worker.js +17 -15
  129. package/dist/{read-session-chunk-t3vjd0h0.js → read-session-chunk-t9r7r0sg.js} +13 -11
  130. package/dist/{read-session-raw-gf7eytnm.js → read-session-raw-gm6xj30v.js} +3 -3
  131. package/dist/recomp-orchestrator-gr36zvd2.js +60 -0
  132. package/dist/{safe-notification-target-q0cyrx3x.js → safe-notification-target-jdynm677.js} +2 -2
  133. package/dist/{search-kth2p6cc.js → search-qjen1pmz.js} +24 -24
  134. package/dist/{send-session-notification-3j6krd4w.js → send-session-notification-q8ngbap3.js} +6 -6
  135. package/dist/shared/history-owner.d.ts +12 -0
  136. package/dist/shared/history-owner.d.ts.map +1 -0
  137. package/dist/shared/off-thread-migration-clock.d.ts +8 -1
  138. package/dist/shared/off-thread-migration-clock.d.ts.map +1 -1
  139. package/dist/shared/processed-image-eligibility.d.ts +22 -0
  140. package/dist/shared/processed-image-eligibility.d.ts.map +1 -0
  141. package/dist/shared/recovery-reasoning-prefix.d.ts +9 -0
  142. package/dist/shared/recovery-reasoning-prefix.d.ts.map +1 -0
  143. package/dist/shared/redaction.d.ts.map +1 -1
  144. package/dist/shared/rpc-server.d.ts.map +1 -1
  145. package/dist/shared/sqlite.d.ts +3 -1
  146. package/dist/shared/sqlite.d.ts.map +1 -1
  147. package/dist/shared/tag-transcript.d.ts +9 -0
  148. package/dist/shared/tag-transcript.d.ts.map +1 -1
  149. package/dist/shared/user-facing-codes.d.ts +2 -2
  150. package/dist/{sqlite-d7edbk1s.js → sqlite-4pqyynrs.js} +3 -1
  151. package/dist/{storage-memory-af5zdz98.js → storage-memory-j3v3hc83.js} +2 -2
  152. package/dist/{storage-tags-dyj7mmbq.js → storage-tags-a513rkj3.js} +5 -5
  153. package/dist/tools/ctx-expand/search-archive.d.ts +4 -0
  154. package/dist/tools/ctx-expand/search-archive.d.ts.map +1 -0
  155. package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
  156. package/dist/{transform-postprocess-phase-bv3kb5s1.js → transform-postprocess-phase-yv463b7y.js} +30 -30
  157. package/dist/v2/auto-search-worker.js +10 -7
  158. package/dist/v2/{compaction-marker-candidates-6gqp5wrc.js → compaction-marker-candidates-a15w3mqh.js} +3 -3
  159. package/dist/v2/compaction-marker-candidates-worker.js +2 -2
  160. package/dist/v2/{context-p8f2shp1.js → context-wd82v9z6.js} +1133 -278
  161. package/dist/v2/{derive-budgets-enckmg7y.js → derive-budgets-0rmpmxjw.js} +3 -3
  162. package/dist/v2/embedding-backfill-vr7wdtrf.js +20 -0
  163. package/dist/v2/embedding-worker-process.js +6 -2
  164. package/dist/v2/embedding-worker.js +6 -5
  165. package/dist/v2/hidden-completion.d.ts.map +1 -1
  166. package/dist/v2/history-owner-2cr9py37.js +243 -0
  167. package/dist/v2/hooks/context.d.ts.map +1 -1
  168. package/dist/v2/hooks/payload.d.ts.map +1 -1
  169. package/dist/v2/hooks/store.d.ts +1 -0
  170. package/dist/v2/hooks/store.d.ts.map +1 -1
  171. package/dist/v2/{logger-pj02s7sr.js → logger-te6e1j72.js} +1 -1
  172. package/dist/v2/{message-index-bounded-yzxmf6vp.js → message-index-bounded-madg2kfr.js} +16 -16
  173. package/dist/v2/{message-index-3ws17x1g.js → message-index-yd94vt9n.js} +16 -16
  174. package/dist/v2/{message-time-backfill-5nf10c65.js → message-time-backfill-rz1pnpaj.js} +3 -3
  175. package/dist/v2/migration-worker.js +11 -11
  176. package/dist/v2/{project-embedding-registry-rsnf2263.js → project-embedding-registry-ja23aygk.js} +11 -11
  177. package/dist/v2/raw-ordinal-warmup-worker.js +17 -15
  178. package/dist/v2/{read-session-chunk-vtb0w2kd.js → read-session-chunk-7qs791f3.js} +13 -11
  179. package/dist/v2/{read-session-raw-gpcddemt.js → read-session-raw-h4azh85b.js} +3 -3
  180. package/dist/v2/recomp-orchestrator-ee91r9s6.js +59 -0
  181. package/dist/v2/{safe-notification-target-y3p1hce9.js → safe-notification-target-936374xx.js} +2 -2
  182. package/dist/v2/search-pn15rr52.js +46 -0
  183. package/dist/v2/{send-session-notification-5aj2j7vf.js → send-session-notification-6n7chhyp.js} +6 -6
  184. package/dist/v2/{server-09g9pkvx.js → server-08k4zkfk.js} +50 -39
  185. package/dist/v2/{server-ras2sxnc.js → server-44ryn9rb.js} +9 -6
  186. package/dist/v2/{server-158ehmk2.js → server-4easnf78.js} +19 -19
  187. package/dist/v2/{server-ww9nr8pe.js → server-4gz0xkrc.js} +5 -5
  188. package/dist/v2/{server-d6g4whc2.js → server-4qr18rfg.js} +3 -3
  189. package/dist/v2/{server-f9py7s7a.js → server-4rs8sm06.js} +5 -5
  190. package/dist/v2/{server-yezz0cp2.js → server-63ha7f0f.js} +3 -27
  191. package/dist/v2/{server-3t0q2cqx.js → server-7dv9wt9r.js} +1 -1
  192. package/dist/v2/{server-cw6521wn.js → server-7e087rvk.js} +2 -0
  193. package/dist/v2/{server-hb6xhh9q.js → server-988cqjme.js} +6 -3
  194. package/dist/v2/{server-keswwkvv.js → server-9a6bwc12.js} +4 -4
  195. package/dist/v2/{server-t4k4qexw.js → server-9e5r8y60.js} +5 -1
  196. package/dist/v2/{server-7ekna9zs.js → server-adfte03x.js} +2 -2
  197. package/dist/v2/{server-9zqewm6g.js → server-ak7w74j9.js} +4 -4
  198. package/dist/v2/{server-387vkhjq.js → server-bx59ezg6.js} +4 -3
  199. package/dist/v2/{server-676xw7at.js → server-ckrb5rm8.js} +1 -1
  200. package/dist/v2/{server-wrem2nmz.js → server-cxsr0ng6.js} +15 -3
  201. package/dist/v2/{server-t528t8qm.js → server-hn9fb3v0.js} +2 -2
  202. package/dist/v2/{server-qn23p4h7.js → server-j3dm74ey.js} +9 -9
  203. package/dist/v2/{server-yd01snxq.js → server-jjsf29aq.js} +4 -4
  204. package/dist/v2/server-knvkbfvh.js +25 -0
  205. package/dist/v2/{server-cm4hmxyk.js → server-n78avt2p.js} +1 -1
  206. package/dist/v2/{server-btgnsv7w.js → server-njnx39q2.js} +6 -3
  207. package/dist/v2/{server-6a9mxnb2.js → server-npm52h2q.js} +4 -3
  208. package/dist/v2/{server-vb7pbd9p.js → server-nveratm5.js} +1 -1
  209. package/dist/v2/{server-7skbfb81.js → server-q360kdb8.js} +121 -51
  210. package/dist/v2/{server-kzns2hbz.js → server-s6jqh8bj.js} +1 -1
  211. package/dist/v2/{server-6byqfbqf.js → server-shme41gj.js} +1 -1
  212. package/dist/v2/{server-0nnd4bry.js → server-wafzvyhg.js} +63 -19
  213. package/dist/v2/{server-fby0cxbq.js → server-xj4mewze.js} +304 -92
  214. package/dist/v2/{server-aa9w15cs.js → server-y5g32dhq.js} +88 -81
  215. package/dist/v2/{server-x2r63c0x.js → server-yak3sxya.js} +7 -7
  216. package/dist/v2/{server-4tn95znb.js → server-zrwaj29a.js} +2 -2
  217. package/dist/v2/server.js +9 -8
  218. package/dist/v2/{sqlite-d7edbk1s.js → sqlite-4pqyynrs.js} +3 -1
  219. package/dist/v2/{storage-memory-af5zdz98.js → storage-memory-j3v3hc83.js} +2 -2
  220. package/dist/v2/{storage-tags-d47bpaqa.js → storage-tags-spa92sgj.js} +5 -5
  221. package/dist/v2/store-reader.d.ts.map +1 -1
  222. package/dist/v2/{wrapup-orchestrator-cahk37n7.js → wrapup-orchestrator-5wxy1ggv.js} +38 -35
  223. package/dist/wrapup-orchestrator-gv08c6f9.js +47 -0
  224. package/package.json +3 -3
  225. package/src/config/compaction-accessor-guard.test.ts +3 -0
  226. package/src/features/magic-context/dreamer/cron.ts +8 -0
  227. package/src/shared/history-owner.test.ts +60 -0
  228. package/src/shared/history-owner.ts +43 -0
  229. package/src/shared/host-stall-profiler-node.ts +3 -1
  230. package/src/shared/host-stall-profiler.ts +3 -1
  231. package/src/shared/off-thread-migration-clock.test.ts +80 -10
  232. package/src/shared/off-thread-migration-clock.ts +37 -13
  233. package/src/shared/processed-image-eligibility.test.ts +68 -0
  234. package/src/shared/processed-image-eligibility.ts +41 -0
  235. package/src/shared/processed-image-position-review.json +20 -0
  236. package/src/shared/processed-image-position-review.test.ts +19 -0
  237. package/src/shared/recovery-reasoning-prefix.test.ts +34 -0
  238. package/src/shared/recovery-reasoning-prefix.ts +35 -0
  239. package/src/shared/redaction.test.ts +16 -0
  240. package/src/shared/redaction.ts +8 -1
  241. package/src/shared/root-async-context.probe.mjs +36 -0
  242. package/src/shared/root-async-context.test.ts +49 -0
  243. package/src/shared/rpc-server.ts +27 -23
  244. package/src/shared/sqlite-busy-budget-review.test.ts +291 -0
  245. package/src/shared/sqlite-foreground-wait.test.ts +253 -1
  246. package/src/shared/sqlite-writer-diagnostics.test.ts +31 -0
  247. package/src/shared/sqlite.ts +112 -30
  248. package/src/shared/tag-transcript.ts +118 -0
  249. package/src/shared/user-facing-codes.ts +2 -2
  250. package/dist/embedding-backfill-dtjmyktb.js +0 -21
  251. package/dist/recomp-orchestrator-1d08g57a.js +0 -60
  252. package/dist/v2/embedding-backfill-cg4rv90f.js +0 -20
  253. package/dist/v2/recomp-orchestrator-v64r4s4r.js +0 -59
  254. package/dist/v2/search-bpa4fxq1.js +0 -46
  255. package/dist/wrapup-orchestrator-mqp0v195.js +0 -47
@@ -3,7 +3,7 @@ import {
3
3
  } from "./server-pavzsdc6.js";
4
4
  import {
5
5
  prepareCachedStatement2
6
- } from "./server-0nnd4bry.js";
6
+ } from "./server-wafzvyhg.js";
7
7
  import {
8
8
  UNKNOWN_FIT_RATIO,
9
9
  resolveDecisionCalibration,
@@ -23,7 +23,7 @@ import {
23
23
  TAG_SELECT_COLUMNS2,
24
24
  getCandidateToolOwners2,
25
25
  pickNearestPriorOwner2
26
- } from "./server-yd01snxq.js";
26
+ } from "./server-jjsf29aq.js";
27
27
  import {
28
28
  OMO_INTERNAL_INITIATOR_MARKER,
29
29
  isSystemDirective,
@@ -40,18 +40,18 @@ import {
40
40
  formatBlock,
41
41
  compactTextForSummary,
42
42
  mergeCommitHashes
43
- } from "./server-kzns2hbz.js";
43
+ } from "./server-s6jqh8bj.js";
44
44
  import {
45
45
  sessionLog2
46
- } from "./server-t4k4qexw.js";
46
+ } from "./server-9e5r8y60.js";
47
47
  import {
48
48
  stableStringify
49
- } from "./server-6byqfbqf.js";
49
+ } from "./server-shme41gj.js";
50
50
  import {
51
51
  renderToolTemplate,
52
52
  resolveModelConfigValue,
53
53
  deriveDefaultProtectedTokens
54
- } from "./server-cw6521wn.js";
54
+ } from "./server-7e087rvk.js";
55
55
  import {
56
56
  readRawSessionMessagesFromDb2,
57
57
  readRawSessionMessagePageFromDb2,
@@ -68,25 +68,25 @@ import {
68
68
  readRawSeedTailFromDb2,
69
69
  readRawSessionBoundaryEndpointsFromDb2,
70
70
  prewarmRawSessionOrdinalsForDb
71
- } from "./server-387vkhjq.js";
71
+ } from "./server-bx59ezg6.js";
72
72
  import {
73
73
  openCodeDbExists,
74
74
  withReadOnlySessionDb,
75
75
  getRawSessionMessageCountFromDb,
76
76
  getMessageTimesFromOpenCodeDb
77
- } from "./server-4tn95znb.js";
77
+ } from "./server-zrwaj29a.js";
78
78
  import {
79
79
  getToolDefinitionMeasurementSignature,
80
80
  getLargestMeasuredToolDefinitionTokens,
81
81
  getMeasuredToolDefinitionTokens
82
- } from "./server-7ekna9zs.js";
82
+ } from "./server-adfte03x.js";
83
83
  import {
84
84
  canonicalModelIdentity,
85
85
  piModelRefToCanonical
86
86
  } from "./server-avwt563y.js";
87
87
  import {
88
88
  logSlowWriteTransaction
89
- } from "./server-3t0q2cqx.js";
89
+ } from "./server-7dv9wt9r.js";
90
90
 
91
91
  // src/features/magic-context/overflow-detection.ts
92
92
  var OVERFLOW_PATTERNS = [
@@ -1696,6 +1696,12 @@ function safeSlice(str, maxLen) {
1696
1696
  function isEditTool(name) {
1697
1697
  return name === "edit" || name === "write";
1698
1698
  }
1699
+ function needsEditMarker(input) {
1700
+ return Object.keys(input).some((key) => {
1701
+ const value = input[key];
1702
+ return DIFF_KEYS.has(key) && typeof value === "string" && value.length > EDIT_REGION_HINT_LEN && !value.endsWith(TRUNCATION_SENTINEL);
1703
+ });
1704
+ }
1699
1705
  function applyEditMarkerToInput(input) {
1700
1706
  for (const key of Object.keys(input)) {
1701
1707
  if (PATH_KEYS.has(key))
@@ -2101,8 +2107,25 @@ function getProtectionWindowForSession(db, sessionId, floor) {
2101
2107
  }
2102
2108
 
2103
2109
  // src/features/magic-context/storage-replay-document.ts
2110
+ import { AsyncLocalStorage } from "node:async_hooks";
2104
2111
  var CAS_RETRY_LIMIT = 5;
2105
2112
  var MISSING_REPLAY_DOCUMENT_COLUMN = Symbol("missing replay document column");
2113
+ var replaySnapshots = new AsyncLocalStorage;
2114
+ async function withReplayEnvelopeSnapshot(db, sessionId, work) {
2115
+ const snapshot = { db, sessionId, active: true, loaded: false };
2116
+ return replaySnapshots.run(snapshot, async () => {
2117
+ try {
2118
+ return await work();
2119
+ } finally {
2120
+ snapshot.active = false;
2121
+ }
2122
+ });
2123
+ }
2124
+ function invalidateReplayEnvelopeSnapshot(db, sessionId) {
2125
+ const snapshot = replaySnapshots.getStore();
2126
+ if (snapshot?.db === db && snapshot.sessionId === sessionId)
2127
+ snapshot.loaded = false;
2128
+ }
2106
2129
  function isRustMarkerAdmissionFenced(db, sessionId) {
2107
2130
  const row = db.prepare("SELECT COALESCE(json_extract(NULLIF(trailing_blank_decisions, ''), '$.rustMarkerAdmissionFence'), 0) AS fenced FROM session_meta WHERE session_id=?").get(sessionId);
2108
2131
  return row?.fenced === 1;
@@ -2225,16 +2248,30 @@ function readDecisionRows(db, sessionId, messageIds) {
2225
2248
  return db.prepare(`SELECT message_id, decision FROM session_replay_decisions
2226
2249
  WHERE session_id = ? AND message_id IN (SELECT value FROM json_each(?))`).all(sessionId, JSON.stringify(messageIds));
2227
2250
  }
2228
- function readRawReplayDocument(db, sessionId) {
2251
+ function readRawReplayDocument(db, sessionId, fresh = false) {
2252
+ const snapshot = replaySnapshots.getStore();
2253
+ const reusable = !fresh && snapshot?.active && snapshot.db === db && snapshot.sessionId === sessionId;
2254
+ if (reusable && snapshot.loaded)
2255
+ return snapshot.raw;
2229
2256
  try {
2230
2257
  const row = db.prepare("SELECT trailing_blank_decisions FROM session_meta WHERE session_id = ?").get(sessionId);
2231
2258
  const raw = row?.trailing_blank_decisions;
2232
- if (raw === null || raw === undefined || typeof raw === "string")
2259
+ if (raw === null || raw === undefined || typeof raw === "string") {
2260
+ if (reusable) {
2261
+ snapshot.raw = raw;
2262
+ snapshot.loaded = true;
2263
+ }
2233
2264
  return raw;
2265
+ }
2234
2266
  throw invalidReplayDocument("stored value is not text");
2235
2267
  } catch (error) {
2236
- if (isMissingReplayDocumentColumn(error))
2268
+ if (isMissingReplayDocumentColumn(error)) {
2269
+ if (reusable) {
2270
+ snapshot.raw = MISSING_REPLAY_DOCUMENT_COLUMN;
2271
+ snapshot.loaded = true;
2272
+ }
2237
2273
  return MISSING_REPLAY_DOCUMENT_COLUMN;
2274
+ }
2238
2275
  throw error;
2239
2276
  }
2240
2277
  }
@@ -2333,9 +2370,10 @@ function readAllTrailingBlankDecisions(db, sessionId, rawColumn) {
2333
2370
  return decisions;
2334
2371
  }
2335
2372
  function updateReplayDocument(db, sessionId, mutate) {
2373
+ invalidateReplayEnvelopeSnapshot(db, sessionId);
2336
2374
  let initial;
2337
2375
  try {
2338
- initial = readRawReplayDocument(db, sessionId);
2376
+ initial = readRawReplayDocument(db, sessionId, true);
2339
2377
  } catch (error) {
2340
2378
  if (error instanceof ReplayDocumentError)
2341
2379
  return false;
@@ -2347,7 +2385,7 @@ function updateReplayDocument(db, sessionId, mutate) {
2347
2385
  for (let attempt = 0;attempt < CAS_RETRY_LIMIT; attempt += 1) {
2348
2386
  let raw;
2349
2387
  try {
2350
- raw = readRawReplayDocument(db, sessionId);
2388
+ raw = readRawReplayDocument(db, sessionId, true);
2351
2389
  } catch (error) {
2352
2390
  if (error instanceof ReplayDocumentError)
2353
2391
  return false;
@@ -2402,7 +2440,7 @@ function updateTrailingBlankDecisions(db, sessionId, messageIds, decide) {
2402
2440
  }
2403
2441
  let initial;
2404
2442
  try {
2405
- initial = readRawReplayDocument(db, sessionId);
2443
+ initial = readRawReplayDocument(db, sessionId, true);
2406
2444
  } catch (error) {
2407
2445
  if (error instanceof ReplayDocumentError)
2408
2446
  return false;
@@ -2414,7 +2452,7 @@ function updateTrailingBlankDecisions(db, sessionId, messageIds, decide) {
2414
2452
  for (let attempt = 0;attempt < CAS_RETRY_LIMIT; attempt += 1) {
2415
2453
  let columnDecisions;
2416
2454
  try {
2417
- const raw = readRawReplayDocument(db, sessionId);
2455
+ const raw = readRawReplayDocument(db, sessionId, true);
2418
2456
  if (raw === MISSING_REPLAY_DOCUMENT_COLUMN)
2419
2457
  return false;
2420
2458
  columnDecisions = parseReplayDocument(raw).trailingBlank;
@@ -2469,6 +2507,7 @@ function updateTrailingBlankDecisions(db, sessionId, messageIds, decide) {
2469
2507
  return false;
2470
2508
  }
2471
2509
  function writeReplayDocument(db, sessionId, doc) {
2510
+ invalidateReplayEnvelopeSnapshot(db, sessionId);
2472
2511
  if (!hasReplayDecisionTable(db)) {
2473
2512
  db.prepare("UPDATE session_meta SET trailing_blank_decisions = ? WHERE session_id = ?").run(serializeReplayDocument(doc), sessionId);
2474
2513
  return;
@@ -3814,10 +3853,32 @@ function addStaleReduceStrippedIds(db, sessionId, ids) {
3814
3853
  return false;
3815
3854
  }
3816
3855
  function getProcessedImageStrippedIds(db, sessionId) {
3856
+ return new Set(getProcessedImageMarkers(db, sessionId).keys());
3857
+ }
3858
+ function parseProcessedImageMarkers(raw) {
3859
+ if (!raw)
3860
+ return new Map;
3861
+ try {
3862
+ const parsed = JSON.parse(raw);
3863
+ const ids = Array.isArray(parsed) ? parsed : parsed?.ids;
3864
+ const textIds = new Set(Array.isArray(parsed?.textMarkerIds) ? parsed.textMarkerIds : []);
3865
+ return new Map((Array.isArray(ids) ? ids : []).filter((id) => typeof id === "string").map((id) => [id, textIds.has(id) ? "[image stripped]" : ""]));
3866
+ } catch {
3867
+ return new Map;
3868
+ }
3869
+ }
3870
+ function serializeProcessedImageMarkers(markers) {
3871
+ const ids = [...markers.keys()];
3872
+ if (ids.length === 0)
3873
+ return "";
3874
+ const textMarkerIds = ids.filter((id) => markers.get(id) === "[image stripped]");
3875
+ return JSON.stringify(textMarkerIds.length > 0 ? { ids, textMarkerIds } : ids);
3876
+ }
3877
+ function getProcessedImageMarkers(db, sessionId) {
3817
3878
  const row = db.prepare("SELECT processed_image_stripped_ids FROM session_meta WHERE session_id = ?").get(sessionId);
3818
- return new Set(parseStrippedBlob(row?.processed_image_stripped_ids));
3879
+ return parseProcessedImageMarkers(row?.processed_image_stripped_ids);
3819
3880
  }
3820
- function addProcessedImageStrippedIds(db, sessionId, ids) {
3881
+ function addProcessedImageStrippedIds(db, sessionId, ids, marker = "") {
3821
3882
  const add = [...ids];
3822
3883
  if (add.length === 0)
3823
3884
  return true;
@@ -3825,17 +3886,17 @@ function addProcessedImageStrippedIds(db, sessionId, ids) {
3825
3886
  for (let attempt = 0;attempt < CAS_RETRY_LIMIT2; attempt += 1) {
3826
3887
  const row = db.prepare("SELECT processed_image_stripped_ids FROM session_meta WHERE session_id = ?").get(sessionId);
3827
3888
  const rawStored = row ? row.processed_image_stripped_ids ?? null : null;
3828
- const current = new Set(parseStrippedBlob(rawStored));
3889
+ const current = parseProcessedImageMarkers(rawStored);
3829
3890
  let changed = false;
3830
3891
  for (const id of add) {
3831
3892
  if (!current.has(id)) {
3832
- current.add(id);
3893
+ current.set(id, typeof marker === "string" ? marker : marker.get(id) ?? "");
3833
3894
  changed = true;
3834
3895
  }
3835
3896
  }
3836
3897
  if (!changed)
3837
3898
  return true;
3838
- const nextBlob = JSON.stringify([...current]);
3899
+ const nextBlob = serializeProcessedImageMarkers(current);
3839
3900
  const result = db.prepare("UPDATE session_meta SET processed_image_stripped_ids = ? WHERE session_id = ? AND processed_image_stripped_ids IS ?").run(nextBlob, sessionId, rawStored);
3840
3901
  if (result.changes > 0)
3841
3902
  return true;
@@ -3889,7 +3950,8 @@ function loadPostprocessReplaySnapshot(db, sessionId) {
3889
3950
  const thinkingBindingRecoveryTarget = row?.thinking_binding_recovery_target;
3890
3951
  return {
3891
3952
  staleReduceStrippedIds: new Set(parseStrippedBlob(row?.stale_reduce_stripped_ids)),
3892
- processedImageStrippedIds: new Set(parseStrippedBlob(row?.processed_image_stripped_ids)),
3953
+ processedImageStrippedIds: new Set(parseProcessedImageMarkers(row?.processed_image_stripped_ids).keys()),
3954
+ processedImageMarkers: parseProcessedImageMarkers(row?.processed_image_stripped_ids),
3893
3955
  strippedPlaceholderIds: new Set(placeholders.ids),
3894
3956
  hiddenSeamPlaceholderIds: new Set(placeholders.hiddenSeamIds),
3895
3957
  noteNudgeAnchors: parseJsonArray(row?.note_nudge_anchors, isValidNoteNudgeAnchor),
@@ -3933,15 +3995,22 @@ function getPendingPiCompactionMarkerState(db, sessionId) {
3933
3995
  return parsed;
3934
3996
  }
3935
3997
  } catch {}
3936
- db.prepare("UPDATE session_meta SET pending_pi_compaction_marker_state = NULL WHERE session_id = ? AND pending_pi_compaction_marker_state = ?").run(sessionId, raw);
3998
+ const cleared = db.prepare("UPDATE session_meta SET pending_pi_compaction_marker_state = NULL WHERE session_id = ? AND pending_pi_compaction_marker_state = ?").run(sessionId, raw);
3999
+ if (cleared.changes > 0)
4000
+ sessionLog2(sessionId, "Pi compaction-marker clear: reason=malformed-state");
3937
4001
  return null;
3938
4002
  }
3939
- function clearPendingPiCompactionMarkerStateIf(db, sessionId, expected) {
4003
+ function clearPendingPiCompactionMarkerStateIf(db, sessionId, expected, reason = "explicit-clear") {
3940
4004
  const expectedBlob = stableStringify(expected);
3941
4005
  const result = db.prepare(`UPDATE session_meta SET pending_pi_compaction_marker_state = NULL
3942
4006
  WHERE session_id = ? AND pending_pi_compaction_marker_state = ?`).run(sessionId, expectedBlob);
4007
+ if (result.changes > 0 && reason !== null)
4008
+ logPiCompactionMarkerClear(sessionId, expected, reason);
3943
4009
  return result.changes > 0;
3944
4010
  }
4011
+ function logPiCompactionMarkerClear(sessionId, marker, reason) {
4012
+ sessionLog2(sessionId, `Pi compaction-marker clear: reason=${reason} endMessageId=${marker.endMessageId} ordinal=${marker.ordinal} firstKeptEntryId=${marker.firstKeptEntryId ?? "<none>"}`);
4013
+ }
3945
4014
  function setSessionWorkMetrics(db, sessionId, newWorkTokens, totalInputTokens) {
3946
4015
  ensureSessionMetaRow(db, sessionId);
3947
4016
  db.prepare(`UPDATE session_meta
@@ -4329,6 +4398,27 @@ function hasAnthropicReasoning(messages) {
4329
4398
  });
4330
4399
  }
4331
4400
 
4401
+ // src/shared/processed-image-eligibility.ts
4402
+ function createProcessedImageEligibility(messages, messageTagNumbers, options) {
4403
+ const ageTags = new Map;
4404
+ let nextTag;
4405
+ for (let index = messages.length - 1;index >= 0; index--) {
4406
+ const message = messages[index];
4407
+ const ownTag = messageTagNumbers.get(message);
4408
+ if (ownTag !== undefined && Number.isFinite(ownTag) && ownTag > 0)
4409
+ nextTag = ownTag;
4410
+ if (nextTag !== undefined)
4411
+ ageTags.set(message, nextTag);
4412
+ }
4413
+ return {
4414
+ ageTags,
4415
+ mayStrip: (message) => {
4416
+ const age = ageTags.get(message);
4417
+ return options.watermark > 0 && age !== undefined && age <= options.watermark && ((options.contextPercentage ?? 0) >= 95 || options.protectedCutoff == null || age < options.protectedCutoff);
4418
+ }
4419
+ };
4420
+ }
4421
+
4332
4422
  // src/hooks/magic-context/strip-content.ts
4333
4423
  var MARKER_ONLY_PATTERN = /^(?:(?:§\d+§|\[dropped(?: §\d+§)?\]|\[cleared\])\s*)+$/;
4334
4424
  function isMarkerOnlyText(text) {
@@ -4878,59 +4968,142 @@ function stripReasoningFromMergedAssistants(messages, providerID, options) {
4878
4968
  }
4879
4969
  return stripped;
4880
4970
  }
4971
+ var emptyImageParts = new WeakMap;
4972
+ function getEmptyImageParts(messages) {
4973
+ return emptyImageParts.get(messages) ?? new Map;
4974
+ }
4975
+ function imageOmissionBreaksStructure(messages, index, omitted) {
4976
+ let before = index - 1;
4977
+ let after = index + 1;
4978
+ while (omitted.has(before))
4979
+ before--;
4980
+ while (omitted.has(after))
4981
+ after++;
4982
+ const previous = messages[before];
4983
+ const next = messages[after];
4984
+ return previous !== undefined && next !== undefined && previous.info.role === next.info.role;
4985
+ }
4881
4986
  function stripProcessedImages(messages, frozenIds, options) {
4882
- const { detect, watermark, messageTagNumbers } = options;
4987
+ const omissions = new Map;
4988
+ emptyImageParts.set(messages, omissions);
4989
+ const { detect, messageTagNumbers } = options;
4990
+ const eligibility = createProcessedImageEligibility(messages, messageTagNumbers, options);
4883
4991
  let stripped = 0;
4884
4992
  const newlyStrippedIds = [];
4885
4993
  const planned = [];
4994
+ const newMarkers = new Map;
4886
4995
  let hasAssistantResponse = false;
4887
4996
  for (let i = messages.length - 1;i >= 0; i--) {
4888
4997
  const msg = messages[i];
4998
+ const answered = hasAssistantResponse;
4889
4999
  if (msg.info.role === "assistant") {
4890
5000
  hasAssistantResponse = true;
4891
- continue;
4892
5001
  }
4893
- if (msg.info.role !== "user") {
5002
+ if (msg.info.role !== "user" && msg.info.role !== "assistant") {
4894
5003
  continue;
4895
5004
  }
4896
5005
  const id = typeof msg.info.id === "string" ? msg.info.id : undefined;
4897
5006
  const inFrozen = id !== undefined && frozenIds.has(id);
4898
- const maxTag = messageTagNumbers.get(msg) ?? 0;
4899
- const isNewDetection = !inFrozen && detect && hasAssistantResponse && id !== undefined && maxTag <= watermark;
5007
+ const isNewDetection = !inFrozen && detect && answered && id !== undefined && eligibility.mayStrip(msg) && !options.protectedMessageIds?.has(id);
4900
5008
  if (!inFrozen && !isNewDetection) {
4901
5009
  continue;
4902
5010
  }
4903
5011
  let touchedThisMsg = false;
4904
5012
  for (let j = 0;j < msg.parts.length; j++) {
4905
5013
  const part = msg.parts[j];
4906
- if (!isRecord(part) || part.type !== "file") {
4907
- continue;
4908
- }
4909
- if (typeof part.mime !== "string" || !part.mime.startsWith("image/")) {
4910
- continue;
4911
- }
4912
- if (typeof part.url === "string" && part.url.startsWith("data:") && part.url.length > 200) {
4913
- planned.push({ message: msg, partIndex: j, firstApplication: isNewDetection });
5014
+ const tool = msg.info.role === "assistant" && isRecord(part) && part.type === "tool" && isRecord(part.state) && part.state.status === "completed";
5015
+ const images = tool && isRecord(part) && isRecord(part.state) && Array.isArray(part.state.attachments) ? part.state.attachments : msg.info.role === "user" ? [part] : [];
5016
+ if (images.some(isProcessedImagePart)) {
5017
+ planned.push({
5018
+ message: msg,
5019
+ partIndex: j,
5020
+ firstApplication: isNewDetection,
5021
+ tool
5022
+ });
4914
5023
  touchedThisMsg = true;
4915
5024
  }
4916
5025
  }
4917
5026
  if (touchedThisMsg && isNewDetection && id !== undefined) {
4918
5027
  newlyStrippedIds.push(id);
5028
+ newMarkers.set(id, msg.info.role === "assistant" ? "[image stripped]" : options.replacementText ?? "");
4919
5029
  }
4920
5030
  }
4921
- const persisted = newlyStrippedIds.length === 0 || options.persistNewIds?.(newlyStrippedIds) !== false;
5031
+ const imageIndices = new Map;
5032
+ for (const { message, partIndex, tool } of planned) {
5033
+ if (tool)
5034
+ continue;
5035
+ const indices = imageIndices.get(message) ?? new Set;
5036
+ indices.add(partIndex);
5037
+ imageIndices.set(message, indices);
5038
+ }
5039
+ const emptiedRows = new Set;
5040
+ const newEmptyRows = [];
5041
+ for (let index = 0;index < messages.length; index++) {
5042
+ const message = messages[index];
5043
+ if (message.parts.every((part) => isRecord(part) && part.type === "text" && part.text === ""))
5044
+ emptiedRows.add(index);
5045
+ const id = message.info.id;
5046
+ const indices = imageIndices.get(message);
5047
+ if (!id || !indices)
5048
+ continue;
5049
+ const marker = options.frozenMarkers?.get(id) ?? newMarkers.get(id) ?? "";
5050
+ if (marker !== "" || !message.parts.every((part, partIndex) => indices.has(partIndex) || isRecord(part) && part.type === "text" && part.text === ""))
5051
+ continue;
5052
+ if (newMarkers.has(id))
5053
+ newEmptyRows.push({ index, id });
5054
+ else
5055
+ emptiedRows.add(index);
5056
+ }
5057
+ for (const { index, id } of newEmptyRows) {
5058
+ if (imageOmissionBreaksStructure(messages, index, emptiedRows))
5059
+ newMarkers.set(id, "[image stripped]");
5060
+ else
5061
+ emptiedRows.add(index);
5062
+ }
5063
+ const persisted = newlyStrippedIds.length === 0 || options.persistNewIds?.(newlyStrippedIds, newMarkers) !== false;
4922
5064
  if (!persisted)
4923
5065
  newlyStrippedIds.length = 0;
4924
- for (const { message, partIndex, firstApplication } of planned) {
5066
+ for (const { message, partIndex, firstApplication, tool } of planned) {
4925
5067
  if (firstApplication && !persisted)
4926
5068
  continue;
4927
5069
  if (firstApplication)
4928
5070
  options.onFirstApplication?.(message, partIndex);
4929
- message.parts[partIndex] = makeSentinel(message.parts[partIndex]);
4930
- stripped++;
5071
+ const marker = tool ? "[image stripped]" : options.frozenMarkers?.get(message.info.id ?? "") ?? (firstApplication ? newMarkers.get(message.info.id ?? "") : "") ?? "";
5072
+ const original = message.parts[partIndex];
5073
+ if (tool && isRecord(original) && isRecord(original.state) && Array.isArray(original.state.attachments)) {
5074
+ const attachments = original.state.attachments;
5075
+ const count = attachments.filter(isProcessedImagePart).length;
5076
+ const output = typeof original.state.output === "string" ? original.state.output : "";
5077
+ message.parts[partIndex] = {
5078
+ ...original,
5079
+ state: {
5080
+ ...original.state,
5081
+ output: [output, ...Array(count).fill(marker)].filter(Boolean).join(`
5082
+ `),
5083
+ attachments: attachments.filter((part) => !isProcessedImagePart(part))
5084
+ }
5085
+ };
5086
+ stripped += count;
5087
+ } else {
5088
+ message.parts[partIndex] = { ...makeSentinel(original), text: marker };
5089
+ if (marker === "" && message.info.id) {
5090
+ const indices = omissions.get(message.info.id) ?? new Set;
5091
+ indices.add(partIndex);
5092
+ omissions.set(message.info.id, indices);
5093
+ }
5094
+ stripped++;
5095
+ }
4931
5096
  }
4932
5097
  return { stripped, newlyStrippedIds };
4933
5098
  }
5099
+ function isProcessedImagePart(part) {
5100
+ if (isRecord(part) && part.type === "media" && isRecord(part.media)) {
5101
+ const { source, mediaType } = part.media;
5102
+ const inlineLength = isRecord(source) ? source.type === "base64" && typeof source.data === "string" ? source.data.length : source.type === "bytes" && source.data instanceof Uint8Array ? Math.ceil(source.data.byteLength / 3) * 4 : 0 : 0;
5103
+ return typeof mediaType === "string" && mediaType.startsWith("image/") && inlineLength > 0 && inlineLength + `data:${mediaType};base64,`.length > 200;
5104
+ }
5105
+ return isRecord(part) && part.type === "file" && typeof part.mime === "string" && part.mime.startsWith("image/") && typeof part.url === "string" && part.url.startsWith("data:") && part.url.length > 200;
5106
+ }
4934
5107
 
4935
5108
  // src/hooks/magic-context/reasoning-budget.ts
4936
5109
  function projectOpencodeReasoningBudgetCutoff(db, sessionId, messages, budget, watermark, proseRatio) {
@@ -5545,24 +5718,18 @@ function setToolContent(part, content) {
5545
5718
  }
5546
5719
  }
5547
5720
  function clonePart(part) {
5548
- if (part === null || typeof part !== "object")
5549
- return part;
5550
- try {
5551
- return structuredClone(part);
5552
- } catch {
5553
- try {
5554
- return JSON.parse(JSON.stringify(part));
5555
- } catch {
5556
- return part;
5557
- }
5558
- }
5721
+ return {
5722
+ ...part,
5723
+ ...isRecord(part.state) ? { state: { ...part.state } } : {}
5724
+ };
5559
5725
  }
5560
5726
  function clampCloneInPlace(occurrence, clamp) {
5561
- const clone = clonePart(occurrence.part);
5562
- clamp(clone);
5563
5727
  const parts = occurrence.message.parts;
5564
5728
  const index = parts.indexOf(servedPart(occurrence));
5565
5729
  if (index >= 0) {
5730
+ const clone = clamp(occurrence.part);
5731
+ if (clone === servedPart(occurrence))
5732
+ return;
5566
5733
  parts[index] = clone;
5567
5734
  occurrence.served = clone;
5568
5735
  }
@@ -5572,17 +5739,24 @@ function servedPart(occurrence) {
5572
5739
  }
5573
5740
  function skeletonRealToolPart(part, tagId, stripAttachments = false) {
5574
5741
  if (!isRecord(part))
5575
- return;
5742
+ return part;
5576
5743
  const sentinel = `[dropped §${tagId}§]`;
5577
5744
  if (part.type === "tool" && isRecord(part.state)) {
5578
- part.state.output = sentinel;
5745
+ if (part.state.output === sentinel && !needsAttachmentStrip(part.state, stripAttachments))
5746
+ return part;
5747
+ const clone = clonePart(part);
5748
+ const state = clone.state;
5749
+ state.output = sentinel;
5579
5750
  if (stripAttachments)
5580
- part.state.attachments = [];
5581
- return;
5582
- }
5583
- if (part.type === "tool_result") {
5584
- part.content = sentinel;
5751
+ state.attachments = [];
5752
+ return clone;
5585
5753
  }
5754
+ if (part.type === "tool_result" && part.content !== sentinel)
5755
+ return { ...part, content: sentinel };
5756
+ return part;
5757
+ }
5758
+ function needsAttachmentStrip(state, strip) {
5759
+ return strip && (!Array.isArray(state.attachments) || state.attachments.length !== 0);
5586
5760
  }
5587
5761
  function readToolPartRawInput(part) {
5588
5762
  if (!isRecord(part))
@@ -5595,51 +5769,62 @@ function readToolPartRawInput(part) {
5595
5769
  return part.input;
5596
5770
  return;
5597
5771
  }
5772
+ function isDroppedInput(input, sentinel) {
5773
+ return isRecord(input) && Object.keys(input).length === 1 && Object.hasOwn(input, "dropped") && input.dropped === sentinel;
5774
+ }
5598
5775
  function truncateToolPart(part, tagId) {
5599
5776
  if (!isRecord(part))
5600
- return;
5777
+ return part;
5601
5778
  const sentinel = `[dropped §${tagId}§]`;
5602
5779
  if (part.type === "tool" && isRecord(part.state)) {
5603
- const state = part.state;
5780
+ if (part.state.output === sentinel && isDroppedInput(part.state.input, sentinel))
5781
+ return part;
5782
+ const clone = clonePart(part);
5783
+ const state = clone.state;
5604
5784
  state.output = sentinel;
5605
5785
  state.input = droppedInputMarker(tagId);
5606
- return;
5786
+ return clone;
5607
5787
  }
5608
5788
  if (part.type === "tool_result") {
5609
- part.content = sentinel;
5610
- return;
5789
+ return part.content === sentinel ? part : { ...part, content: sentinel };
5611
5790
  }
5612
5791
  if (part.type === "tool-invocation") {
5613
- part.args = droppedInputMarker(tagId);
5614
- return;
5792
+ return isDroppedInput(part.args, sentinel) ? part : { ...part, args: droppedInputMarker(tagId) };
5615
5793
  }
5616
5794
  if (part.type === "tool_use") {
5617
- part.input = droppedInputMarker(tagId);
5795
+ return isDroppedInput(part.input, sentinel) ? part : { ...part, input: droppedInputMarker(tagId) };
5618
5796
  }
5797
+ return part;
5619
5798
  }
5620
5799
  function editMarkerToolPart(part, tagId, stripAttachments = false) {
5621
5800
  if (!isRecord(part))
5622
- return;
5801
+ return part;
5623
5802
  const sentinel = `[dropped §${tagId}§]`;
5803
+ const input = readToolPartInput(part);
5804
+ const rewriteInput = input !== null && needsEditMarker(input);
5624
5805
  if (part.type === "tool" && isRecord(part.state)) {
5625
- part.state.output = sentinel;
5806
+ if (part.state.output === sentinel && !rewriteInput && !needsAttachmentStrip(part.state, stripAttachments))
5807
+ return part;
5808
+ const clone = clonePart(part);
5809
+ const state = clone.state;
5810
+ state.output = sentinel;
5626
5811
  if (stripAttachments)
5627
- part.state.attachments = [];
5628
- if (isRecord(part.state.input))
5629
- applyEditMarkerToInput(part.state.input);
5630
- return;
5812
+ state.attachments = [];
5813
+ if (rewriteInput) {
5814
+ state.input = { ...input };
5815
+ applyEditMarkerToInput(state.input);
5816
+ }
5817
+ return clone;
5631
5818
  }
5632
5819
  if (part.type === "tool_result") {
5633
- part.content = sentinel;
5634
- return;
5635
- }
5636
- if (part.type === "tool-invocation" && isRecord(part.args)) {
5637
- applyEditMarkerToInput(part.args);
5638
- return;
5820
+ return part.content === sentinel ? part : { ...part, content: sentinel };
5639
5821
  }
5640
- if (part.type === "tool_use" && isRecord(part.input)) {
5641
- applyEditMarkerToInput(part.input);
5822
+ if (rewriteInput) {
5823
+ const markedInput = { ...input };
5824
+ applyEditMarkerToInput(markedInput);
5825
+ return { ...part, [part.type === "tool-invocation" ? "args" : "input"]: markedInput };
5642
5826
  }
5827
+ return part;
5643
5828
  }
5644
5829
  function readToolPartInput(part) {
5645
5830
  if (!isRecord(part))
@@ -5868,9 +6053,7 @@ function createToolDropTarget(compositeKey, thinkingParts, index, batch, tagId)
5868
6053
  parts
5869
6054
  });
5870
6055
  const before = count(parts);
5871
- const retained = skeleton ? structuredClone(parts) : [];
5872
- for (const part of retained)
5873
- skeletonRealToolPart(part, tagId);
6056
+ const retained = skeleton ? parts.map((part) => skeletonRealToolPart(part, tagId)) : [];
5874
6057
  const after = count(retained);
5875
6058
  return {
5876
6059
  beforeTools: before.toolCall,
@@ -5918,6 +6101,10 @@ function createToolDropTarget(compositeKey, thinkingParts, index, batch, tagId)
5918
6101
  return false;
5919
6102
  return batch.wouldStrandConversationEnd(entry.occurrences);
5920
6103
  },
6104
+ prepareDrop: () => {
6105
+ const entry = index.get(compositeKey);
6106
+ return !!entry && entry.occurrences.length > 0 && entry.hasResult;
6107
+ },
5921
6108
  canDrop: () => {
5922
6109
  const entry = index.get(compositeKey);
5923
6110
  return !!entry && entry.occurrences.length > 0 && entry.hasResult && !entry.occurrences.some((occurrence) => toolPartHasUserAnswer(occurrence.part));
@@ -6180,6 +6367,21 @@ function visitRawSessionMessages2(sessionId, fromOrdinal, toOrdinal, visit, opti
6180
6367
  after = last ? { timeCreated: last.createdAt ?? 0, id: last.id } : undefined;
6181
6368
  }
6182
6369
  }
6370
+ async function visitRawSessionMessagesAsync2(sessionId, fromOrdinal, toOrdinal, visit, options = {}) {
6371
+ const from = Math.max(1, Math.floor(fromOrdinal));
6372
+ const to = Math.floor(toOrdinal);
6373
+ if (to < from)
6374
+ return;
6375
+ const provider = sessionProviders.get(sessionId)?.provider;
6376
+ if (!provider?.iterateMessageRangeAsync) {
6377
+ visitRawSessionMessages2(sessionId, from, to, visit, options);
6378
+ return;
6379
+ }
6380
+ for await (const message of provider.iterateMessageRangeAsync(from, to)) {
6381
+ if (!visit(message))
6382
+ return;
6383
+ }
6384
+ }
6183
6385
  function readRawSessionMessageRange2(sessionId, fromOrdinal, toOrdinal) {
6184
6386
  const from = Math.max(1, Math.floor(fromOrdinal));
6185
6387
  const to = Math.floor(toOrdinal);
@@ -6403,13 +6605,20 @@ function readRawSessionMessageOrdinalById2(sessionId, messageId) {
6403
6605
  return null;
6404
6606
  return withReadOnlySessionDb((db) => readRawSessionMessageOrdinalByIdFromDb2(db, sessionId, messageId));
6405
6607
  }
6608
+ function readRawSessionMessageOrderPosition(sessionId, messageId) {
6609
+ const provider = sessionProviders.get(sessionId)?.provider;
6610
+ if (provider) {
6611
+ return provider.readMessageOrderById ? provider.readMessageOrderById(messageId) : provider.readMessageOrdinalById?.(messageId) ?? null;
6612
+ }
6613
+ return readRawSessionMessageOrdinalById2(sessionId, messageId);
6614
+ }
6406
6615
  function compareRawSessionMessageOrder2(sessionId, leftId, rightId) {
6407
6616
  const provider = sessionProviders.get(sessionId)?.provider;
6408
6617
  if (provider) {
6409
- if (!provider.readMessageOrdinalById)
6618
+ if (!provider.readMessageOrderById && !provider.readMessageOrdinalById)
6410
6619
  return null;
6411
- const left = provider.readMessageOrdinalById(leftId);
6412
- const right = provider.readMessageOrdinalById(rightId);
6620
+ const left = readRawSessionMessageOrderPosition(sessionId, leftId);
6621
+ const right = readRawSessionMessageOrderPosition(sessionId, rightId);
6413
6622
  return left === null || right === null ? null : left - right;
6414
6623
  }
6415
6624
  if (!openCodeDbExists())
@@ -6605,7 +6814,10 @@ function readSessionChunk2(sessionId, tokenBudget, offset = 1, eligibleEndOrdina
6605
6814
  if (state?.input === undefined && state?.output !== undefined && typeof p.callID === "string") {
6606
6815
  const call = calls.get(p.callID);
6607
6816
  if (call) {
6608
- const expansion = expandToolPart({ ...call, state: { ...call.state, output: state.output } }, options.expandTools);
6817
+ const expansion = expandToolPart({
6818
+ ...call,
6819
+ state: { ...call.state, output: state.output }
6820
+ }, options.expandTools);
6609
6821
  if (expansion !== null) {
6610
6822
  expandedParts.set(call, expansion);
6611
6823
  expandedResults.add(part);
@@ -6888,4 +7100,4 @@ function readRawSessionSeedTail2(sessionId, boundaryId, onQuery) {
6888
7100
  });
6889
7101
  }
6890
7102
 
6891
- export { detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, expandToolPart, markHostUnservedRow, retreatPastHostUnservedRows, snapTerminalCompartmentToServedRow, isHostRenderedSystemMessage, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, stripSystemInjection, isTextPart, isToolPartWithOutput, isFilePart, buildFileSourceContent, toolPartHasUserAnswer, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, recordToolParameters, createDroppedInputGuard, assertExecutableToolInput, isEditTool, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, MAX_EXECUTE_THRESHOLD, escalationBands, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, getProtectionWindowForSession, isRustMarkerAdmissionFenced, setRustMarkerAdmissionFence, ReplayDocumentError, readReplayEnvelope, readReplayDocument, updateReplayDocument, writeReplayDocument, isEmergencyRecoveryArmed, isProviderOverflowReconfirmed, isProviderOverflowFailClosedProven, getEmergencyRecoveryArmedAt, describeProtectedTailDrainBudgetSkip, loadPersistedUsage, loadProtectedTailMeta, markProtectedTailPolicyV3Seeded, recordProtectedTailPublicationFloor, recordProtectedTailNoEligibleHead, resetProtectedTailNoEligibleHead, getWrapupInProgressState, isWrapupInProgress, acquireWrapupInProgress, updateWrapupInProgress, releaseWrapupInProgress, resolveCompactionModeRecord, getCompactionModeRecord, setCompactionModeRecord, getProtectedTailDrainBudgetSkip, reserveProtectedTailDrainTokens, clearEmergencyDrainLatch, recordHistorianDrainFailure, clearHistorianDrainFailure, rollbackProtectedTailDrainReservation, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, markChannel1PostReduceGracePending, captureChannel1PostReduceGraceBaseline, getChannel2NudgeState, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, getPersistedTodoPermissionDenied, setPersistedTodoPermissionDenied, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, loadTransformPassStateSnapshot, recordOverflowDetected, recordDetectedContextLimit, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, getDeferredClearedCompactionMarkerState, retireDeferredClearedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, getThinkingBindingRecoveryTarget, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getTrailingBlankDecisions, addTrailingBlankDecisions, demoteTrailingBlankKeepDecisions, getStaleReduceStrippedIds, addStaleReduceStrippedIds, getProcessedImageStrippedIds, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, loadPostprocessReplaySnapshot, setPendingCompactionMarkerState, replacePendingCompactionMarkerStateIf, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, setSessionWorkMetrics, getObservedEpochFloor, resolveEpochFloorForPass, getReasoningRemovalState, addRemovedReasoningIds, markDropLeavesReasoning, modelAcceptsEmptyContent, isAnthropicFamilyRoute, neutralizeDroppedReasoningPart, restoreNeutralizedReasoningPart, isNeutralizedReasoningPart, variantChangeBustsProviderCache, makeSentinel, makeWholeMessageSentinel, isSentinel, replaySentinelByMessageIds, isInActiveAnthropicTurn, activeAnthropicTurnStart, hasAnthropicReasoning, stripSystemInjectedMessages, stripDroppedPlaceholderMessages, replayClearedReasoning, replayStrippedInlineThinking, clearOldReasoning, stripClearedReasoning, stripInlineThinking, findReasoningBearingAssistantIds, findLatestAssistantReasoningMutationExemptMessage, snapshotTrailingBlankSourceDecisions, findTrailingBlankDecisionCandidates, applyFrozenTrailingBlankDecisions, stripReasoningFromAssistantIds, findMergedReasoningStripDecisions, stripReasoningFromMergedAssistants, stripProcessedImages, projectOpencodeReasoningBudgetCutoff, DEFAULT_KEEP_REASONING_TOKENS, resolveKeepReasoningTokens, reasoningBudgetCutoff, reasoningTextAndOpaque, opencodeReasoningBudgetCutoff, describeFinalWireTail, estimateMessageTokens, wireContentBytes, createFinalWireUsageTracker, estimateFinalWireInputTokens, estimateAppendedWireTokens, SKELETON_REAL_INPUT_MAX_BYTES, partHasCompletedResult, extractToolCallObservation, ToolMutationBatch, createToolDropTarget, resolveHostServedBoundaryId2, hasRawMessageProvider2, setRawMessageProvider2, setBoundedRawMessageProvider2, withRawMessageProvider2, cleanUserText2, withRawSessionMessageCache2, readRawSessionMessages2, readRawSessionMessagePage2, getRawSessionMessageOrdinalCount2, RAW_MESSAGE_VISIT_PAGE_SIZE2, visitRawSessionMessages2, readRawSessionMessageRange2, prepareRawSessionOrdinals2, primeTailRawMessageCache2, getCachedAbsoluteMessageCount2, primeInMemoryTailRawMessageCache2, readRawSessionMessageOrdinalPage2, getRawSessionStoredMessageCount2, readRawSessionMessageIdOrdinalsForRange2, readRawSessionMessageIdOrdinals2, readRawSessionMessagePartsById2, readRawSessionBoundaryEndpoints2, hasRawSessionMessageById2, readRawSessionMessageOrdinalById2, compareRawSessionMessageOrder2, readRawSessionMessageById2, getRawSessionMessageCount2, RAW_SESSION_TAG_KEY_PAGE_SIZE2, getRawSessionTagKeysThrough2, getLegacyProtectedTailStartOrdinal2, getProtectedTailStartOrdinal2, readSessionChunk2, getRawSessionMessageIdsThrough2, readRawSessionSeedTail2 };
7103
+ export { detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, expandToolPart, markHostUnservedRow, retreatPastHostUnservedRows, snapTerminalCompartmentToServedRow, isHostRenderedSystemMessage, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, stripSystemInjection, isTextPart, isToolPartWithOutput, isFilePart, buildFileSourceContent, toolPartHasUserAnswer, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, recordToolParameters, createDroppedInputGuard, assertExecutableToolInput, isEditTool, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, MAX_EXECUTE_THRESHOLD, escalationBands, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, getProtectionWindowForSession, withReplayEnvelopeSnapshot, invalidateReplayEnvelopeSnapshot, isRustMarkerAdmissionFenced, setRustMarkerAdmissionFence, ReplayDocumentError, readReplayEnvelope, readReplayDocument, updateReplayDocument, writeReplayDocument, isEmergencyRecoveryArmed, isProviderOverflowReconfirmed, isProviderOverflowFailClosedProven, getEmergencyRecoveryArmedAt, describeProtectedTailDrainBudgetSkip, loadPersistedUsage, loadProtectedTailMeta, markProtectedTailPolicyV3Seeded, recordProtectedTailPublicationFloor, recordProtectedTailNoEligibleHead, resetProtectedTailNoEligibleHead, getWrapupInProgressState, isWrapupInProgress, acquireWrapupInProgress, updateWrapupInProgress, releaseWrapupInProgress, resolveCompactionModeRecord, getCompactionModeRecord, setCompactionModeRecord, getProtectedTailDrainBudgetSkip, reserveProtectedTailDrainTokens, clearEmergencyDrainLatch, recordHistorianDrainFailure, clearHistorianDrainFailure, rollbackProtectedTailDrainReservation, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, markChannel1PostReduceGracePending, captureChannel1PostReduceGraceBaseline, getChannel2NudgeState, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, getPersistedTodoPermissionDenied, setPersistedTodoPermissionDenied, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, loadTransformPassStateSnapshot, recordOverflowDetected, recordDetectedContextLimit, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, getDeferredClearedCompactionMarkerState, retireDeferredClearedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, getThinkingBindingRecoveryTarget, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getTrailingBlankDecisions, addTrailingBlankDecisions, demoteTrailingBlankKeepDecisions, getStaleReduceStrippedIds, addStaleReduceStrippedIds, getProcessedImageStrippedIds, parseProcessedImageMarkers, serializeProcessedImageMarkers, getProcessedImageMarkers, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, loadPostprocessReplaySnapshot, setPendingCompactionMarkerState, replacePendingCompactionMarkerStateIf, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, logPiCompactionMarkerClear, setSessionWorkMetrics, getObservedEpochFloor, resolveEpochFloorForPass, getReasoningRemovalState, addRemovedReasoningIds, markDropLeavesReasoning, modelAcceptsEmptyContent, isAnthropicFamilyRoute, neutralizeDroppedReasoningPart, restoreNeutralizedReasoningPart, isNeutralizedReasoningPart, variantChangeBustsProviderCache, makeSentinel, makeWholeMessageSentinel, isSentinel, replaySentinelByMessageIds, isInActiveAnthropicTurn, activeAnthropicTurnStart, hasAnthropicReasoning, stripSystemInjectedMessages, stripDroppedPlaceholderMessages, replayClearedReasoning, replayStrippedInlineThinking, clearOldReasoning, stripClearedReasoning, stripInlineThinking, findReasoningBearingAssistantIds, findLatestAssistantReasoningMutationExemptMessage, snapshotTrailingBlankSourceDecisions, findTrailingBlankDecisionCandidates, applyFrozenTrailingBlankDecisions, stripReasoningFromAssistantIds, findMergedReasoningStripDecisions, stripReasoningFromMergedAssistants, getEmptyImageParts, stripProcessedImages, projectOpencodeReasoningBudgetCutoff, DEFAULT_KEEP_REASONING_TOKENS, resolveKeepReasoningTokens, reasoningBudgetCutoff, reasoningTextAndOpaque, opencodeReasoningBudgetCutoff, describeFinalWireTail, estimateMessageTokens, wireContentBytes, createFinalWireUsageTracker, estimateFinalWireInputTokens, estimateAppendedWireTokens, SKELETON_REAL_INPUT_MAX_BYTES, partHasCompletedResult, extractToolCallObservation, ToolMutationBatch, createToolDropTarget, resolveHostServedBoundaryId2, hasRawMessageProvider2, setRawMessageProvider2, setBoundedRawMessageProvider2, withRawMessageProvider2, cleanUserText2, withRawSessionMessageCache2, readRawSessionMessages2, readRawSessionMessagePage2, getRawSessionMessageOrdinalCount2, RAW_MESSAGE_VISIT_PAGE_SIZE2, visitRawSessionMessages2, visitRawSessionMessagesAsync2, readRawSessionMessageRange2, prepareRawSessionOrdinals2, primeTailRawMessageCache2, getCachedAbsoluteMessageCount2, primeInMemoryTailRawMessageCache2, readRawSessionMessageOrdinalPage2, getRawSessionStoredMessageCount2, readRawSessionMessageIdOrdinalsForRange2, readRawSessionMessageIdOrdinals2, readRawSessionMessagePartsById2, readRawSessionBoundaryEndpoints2, hasRawSessionMessageById2, readRawSessionMessageOrdinalById2, compareRawSessionMessageOrder2, readRawSessionMessageById2, getRawSessionMessageCount2, RAW_SESSION_TAG_KEY_PAGE_SIZE2, getRawSessionTagKeysThrough2, getLegacyProtectedTailStartOrdinal2, getProtectedTailStartOrdinal2, readSessionChunk2, getRawSessionMessageIdsThrough2, readRawSessionSeedTail2 };