@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 "./index-pavzsdc6.js";
4
4
  import {
5
5
  sessionLog2
6
- } from "./index-nsjyysj0.js";
6
+ } from "./index-mvvephtj.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 "./index-1j8jcjpa.js";
26
+ } from "./index-xpn05jxq.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 "./index-qx53vezw.js";
43
+ } from "./index-gjvjh960.js";
44
44
  import {
45
45
  prepareCachedStatement2
46
- } from "./index-0nnd4bry.js";
46
+ } from "./index-wafzvyhg.js";
47
47
  import {
48
48
  stableStringify
49
- } from "./index-1bt88epp.js";
49
+ } from "./index-bd9cjab3.js";
50
50
  import {
51
51
  renderToolTemplate,
52
52
  resolveModelConfigValue,
53
53
  deriveDefaultProtectedTokens
54
- } from "./index-k6xvbj2e.js";
54
+ } from "./index-w28y7d0z.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 "./index-vnjhmkwk.js";
71
+ } from "./index-angx1s0k.js";
72
72
  import {
73
73
  openCodeDbExists,
74
74
  withReadOnlySessionDb,
75
75
  getRawSessionMessageCountFromDb,
76
76
  getMessageTimesFromOpenCodeDb
77
- } from "./index-ab3bgm2m.js";
77
+ } from "./index-q76br5zn.js";
78
78
  import {
79
79
  getToolDefinitionMeasurementSignature,
80
80
  getLargestMeasuredToolDefinitionTokens,
81
81
  getMeasuredToolDefinitionTokens
82
- } from "./index-h2wc01qk.js";
82
+ } from "./index-8kk7yh6m.js";
83
83
  import {
84
84
  canonicalModelIdentity,
85
85
  piModelRefToCanonical
86
86
  } from "./index-avwt563y.js";
87
87
  import {
88
88
  logSlowWriteTransaction
89
- } from "./index-4mjhqadz.js";
89
+ } from "./index-150zz6fh.js";
90
90
 
91
91
  // src/features/magic-context/dreamer/token-budget.ts
92
92
  class DreamTokenBudgetExceeded extends Error {
@@ -1182,6 +1182,12 @@ function safeSlice(str, maxLen) {
1182
1182
  function isEditTool(name) {
1183
1183
  return name === "edit" || name === "write";
1184
1184
  }
1185
+ function needsEditMarker(input) {
1186
+ return Object.keys(input).some((key) => {
1187
+ const value = input[key];
1188
+ return DIFF_KEYS.has(key) && typeof value === "string" && value.length > EDIT_REGION_HINT_LEN && !value.endsWith(TRUNCATION_SENTINEL);
1189
+ });
1190
+ }
1185
1191
  function applyEditMarkerToInput(input) {
1186
1192
  for (const key of Object.keys(input)) {
1187
1193
  if (PATH_KEYS.has(key))
@@ -1946,8 +1952,25 @@ function clearCachedM0M1(db, sessionId) {
1946
1952
  }
1947
1953
 
1948
1954
  // src/features/magic-context/storage-replay-document.ts
1955
+ import { AsyncLocalStorage } from "node:async_hooks";
1949
1956
  var CAS_RETRY_LIMIT = 5;
1950
1957
  var MISSING_REPLAY_DOCUMENT_COLUMN = Symbol("missing replay document column");
1958
+ var replaySnapshots = new AsyncLocalStorage;
1959
+ async function withReplayEnvelopeSnapshot(db, sessionId, work) {
1960
+ const snapshot = { db, sessionId, active: true, loaded: false };
1961
+ return replaySnapshots.run(snapshot, async () => {
1962
+ try {
1963
+ return await work();
1964
+ } finally {
1965
+ snapshot.active = false;
1966
+ }
1967
+ });
1968
+ }
1969
+ function invalidateReplayEnvelopeSnapshot(db, sessionId) {
1970
+ const snapshot = replaySnapshots.getStore();
1971
+ if (snapshot?.db === db && snapshot.sessionId === sessionId)
1972
+ snapshot.loaded = false;
1973
+ }
1951
1974
  function isRustMarkerAdmissionFenced(db, sessionId) {
1952
1975
  const row = db.prepare("SELECT COALESCE(json_extract(NULLIF(trailing_blank_decisions, ''), '$.rustMarkerAdmissionFence'), 0) AS fenced FROM session_meta WHERE session_id=?").get(sessionId);
1953
1976
  return row?.fenced === 1;
@@ -2070,16 +2093,30 @@ function readDecisionRows(db, sessionId, messageIds) {
2070
2093
  return db.prepare(`SELECT message_id, decision FROM session_replay_decisions
2071
2094
  WHERE session_id = ? AND message_id IN (SELECT value FROM json_each(?))`).all(sessionId, JSON.stringify(messageIds));
2072
2095
  }
2073
- function readRawReplayDocument(db, sessionId) {
2096
+ function readRawReplayDocument(db, sessionId, fresh = false) {
2097
+ const snapshot = replaySnapshots.getStore();
2098
+ const reusable = !fresh && snapshot?.active && snapshot.db === db && snapshot.sessionId === sessionId;
2099
+ if (reusable && snapshot.loaded)
2100
+ return snapshot.raw;
2074
2101
  try {
2075
2102
  const row = db.prepare("SELECT trailing_blank_decisions FROM session_meta WHERE session_id = ?").get(sessionId);
2076
2103
  const raw = row?.trailing_blank_decisions;
2077
- if (raw === null || raw === undefined || typeof raw === "string")
2104
+ if (raw === null || raw === undefined || typeof raw === "string") {
2105
+ if (reusable) {
2106
+ snapshot.raw = raw;
2107
+ snapshot.loaded = true;
2108
+ }
2078
2109
  return raw;
2110
+ }
2079
2111
  throw invalidReplayDocument("stored value is not text");
2080
2112
  } catch (error) {
2081
- if (isMissingReplayDocumentColumn(error))
2113
+ if (isMissingReplayDocumentColumn(error)) {
2114
+ if (reusable) {
2115
+ snapshot.raw = MISSING_REPLAY_DOCUMENT_COLUMN;
2116
+ snapshot.loaded = true;
2117
+ }
2082
2118
  return MISSING_REPLAY_DOCUMENT_COLUMN;
2119
+ }
2083
2120
  throw error;
2084
2121
  }
2085
2122
  }
@@ -2178,9 +2215,10 @@ function readAllTrailingBlankDecisions(db, sessionId, rawColumn) {
2178
2215
  return decisions;
2179
2216
  }
2180
2217
  function updateReplayDocument(db, sessionId, mutate) {
2218
+ invalidateReplayEnvelopeSnapshot(db, sessionId);
2181
2219
  let initial;
2182
2220
  try {
2183
- initial = readRawReplayDocument(db, sessionId);
2221
+ initial = readRawReplayDocument(db, sessionId, true);
2184
2222
  } catch (error) {
2185
2223
  if (error instanceof ReplayDocumentError)
2186
2224
  return false;
@@ -2192,7 +2230,7 @@ function updateReplayDocument(db, sessionId, mutate) {
2192
2230
  for (let attempt = 0;attempt < CAS_RETRY_LIMIT; attempt += 1) {
2193
2231
  let raw;
2194
2232
  try {
2195
- raw = readRawReplayDocument(db, sessionId);
2233
+ raw = readRawReplayDocument(db, sessionId, true);
2196
2234
  } catch (error) {
2197
2235
  if (error instanceof ReplayDocumentError)
2198
2236
  return false;
@@ -2247,7 +2285,7 @@ function updateTrailingBlankDecisions(db, sessionId, messageIds, decide) {
2247
2285
  }
2248
2286
  let initial;
2249
2287
  try {
2250
- initial = readRawReplayDocument(db, sessionId);
2288
+ initial = readRawReplayDocument(db, sessionId, true);
2251
2289
  } catch (error) {
2252
2290
  if (error instanceof ReplayDocumentError)
2253
2291
  return false;
@@ -2259,7 +2297,7 @@ function updateTrailingBlankDecisions(db, sessionId, messageIds, decide) {
2259
2297
  for (let attempt = 0;attempt < CAS_RETRY_LIMIT; attempt += 1) {
2260
2298
  let columnDecisions;
2261
2299
  try {
2262
- const raw = readRawReplayDocument(db, sessionId);
2300
+ const raw = readRawReplayDocument(db, sessionId, true);
2263
2301
  if (raw === MISSING_REPLAY_DOCUMENT_COLUMN)
2264
2302
  return false;
2265
2303
  columnDecisions = parseReplayDocument(raw).trailingBlank;
@@ -2314,6 +2352,7 @@ function updateTrailingBlankDecisions(db, sessionId, messageIds, decide) {
2314
2352
  return false;
2315
2353
  }
2316
2354
  function writeReplayDocument(db, sessionId, doc) {
2355
+ invalidateReplayEnvelopeSnapshot(db, sessionId);
2317
2356
  if (!hasReplayDecisionTable(db)) {
2318
2357
  db.prepare("UPDATE session_meta SET trailing_blank_decisions = ? WHERE session_id = ?").run(serializeReplayDocument(doc), sessionId);
2319
2358
  return;
@@ -3709,10 +3748,32 @@ function addStaleReduceStrippedIds(db, sessionId, ids) {
3709
3748
  return false;
3710
3749
  }
3711
3750
  function getProcessedImageStrippedIds(db, sessionId) {
3751
+ return new Set(getProcessedImageMarkers(db, sessionId).keys());
3752
+ }
3753
+ function parseProcessedImageMarkers(raw) {
3754
+ if (!raw)
3755
+ return new Map;
3756
+ try {
3757
+ const parsed = JSON.parse(raw);
3758
+ const ids = Array.isArray(parsed) ? parsed : parsed?.ids;
3759
+ const textIds = new Set(Array.isArray(parsed?.textMarkerIds) ? parsed.textMarkerIds : []);
3760
+ return new Map((Array.isArray(ids) ? ids : []).filter((id) => typeof id === "string").map((id) => [id, textIds.has(id) ? "[image stripped]" : ""]));
3761
+ } catch {
3762
+ return new Map;
3763
+ }
3764
+ }
3765
+ function serializeProcessedImageMarkers(markers) {
3766
+ const ids = [...markers.keys()];
3767
+ if (ids.length === 0)
3768
+ return "";
3769
+ const textMarkerIds = ids.filter((id) => markers.get(id) === "[image stripped]");
3770
+ return JSON.stringify(textMarkerIds.length > 0 ? { ids, textMarkerIds } : ids);
3771
+ }
3772
+ function getProcessedImageMarkers(db, sessionId) {
3712
3773
  const row = db.prepare("SELECT processed_image_stripped_ids FROM session_meta WHERE session_id = ?").get(sessionId);
3713
- return new Set(parseStrippedBlob(row?.processed_image_stripped_ids));
3774
+ return parseProcessedImageMarkers(row?.processed_image_stripped_ids);
3714
3775
  }
3715
- function addProcessedImageStrippedIds(db, sessionId, ids) {
3776
+ function addProcessedImageStrippedIds(db, sessionId, ids, marker = "") {
3716
3777
  const add = [...ids];
3717
3778
  if (add.length === 0)
3718
3779
  return true;
@@ -3720,17 +3781,17 @@ function addProcessedImageStrippedIds(db, sessionId, ids) {
3720
3781
  for (let attempt = 0;attempt < CAS_RETRY_LIMIT2; attempt += 1) {
3721
3782
  const row = db.prepare("SELECT processed_image_stripped_ids FROM session_meta WHERE session_id = ?").get(sessionId);
3722
3783
  const rawStored = row ? row.processed_image_stripped_ids ?? null : null;
3723
- const current = new Set(parseStrippedBlob(rawStored));
3784
+ const current = parseProcessedImageMarkers(rawStored);
3724
3785
  let changed = false;
3725
3786
  for (const id of add) {
3726
3787
  if (!current.has(id)) {
3727
- current.add(id);
3788
+ current.set(id, typeof marker === "string" ? marker : marker.get(id) ?? "");
3728
3789
  changed = true;
3729
3790
  }
3730
3791
  }
3731
3792
  if (!changed)
3732
3793
  return true;
3733
- const nextBlob = JSON.stringify([...current]);
3794
+ const nextBlob = serializeProcessedImageMarkers(current);
3734
3795
  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);
3735
3796
  if (result.changes > 0)
3736
3797
  return true;
@@ -3784,7 +3845,8 @@ function loadPostprocessReplaySnapshot(db, sessionId) {
3784
3845
  const thinkingBindingRecoveryTarget = row?.thinking_binding_recovery_target;
3785
3846
  return {
3786
3847
  staleReduceStrippedIds: new Set(parseStrippedBlob(row?.stale_reduce_stripped_ids)),
3787
- processedImageStrippedIds: new Set(parseStrippedBlob(row?.processed_image_stripped_ids)),
3848
+ processedImageStrippedIds: new Set(parseProcessedImageMarkers(row?.processed_image_stripped_ids).keys()),
3849
+ processedImageMarkers: parseProcessedImageMarkers(row?.processed_image_stripped_ids),
3788
3850
  strippedPlaceholderIds: new Set(placeholders.ids),
3789
3851
  hiddenSeamPlaceholderIds: new Set(placeholders.hiddenSeamIds),
3790
3852
  noteNudgeAnchors: parseJsonArray(row?.note_nudge_anchors, isValidNoteNudgeAnchor),
@@ -3828,15 +3890,22 @@ function getPendingPiCompactionMarkerState(db, sessionId) {
3828
3890
  return parsed;
3829
3891
  }
3830
3892
  } catch {}
3831
- db.prepare("UPDATE session_meta SET pending_pi_compaction_marker_state = NULL WHERE session_id = ? AND pending_pi_compaction_marker_state = ?").run(sessionId, raw);
3893
+ 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);
3894
+ if (cleared.changes > 0)
3895
+ sessionLog2(sessionId, "Pi compaction-marker clear: reason=malformed-state");
3832
3896
  return null;
3833
3897
  }
3834
- function clearPendingPiCompactionMarkerStateIf(db, sessionId, expected) {
3898
+ function clearPendingPiCompactionMarkerStateIf(db, sessionId, expected, reason = "explicit-clear") {
3835
3899
  const expectedBlob = stableStringify(expected);
3836
3900
  const result = db.prepare(`UPDATE session_meta SET pending_pi_compaction_marker_state = NULL
3837
3901
  WHERE session_id = ? AND pending_pi_compaction_marker_state = ?`).run(sessionId, expectedBlob);
3902
+ if (result.changes > 0 && reason !== null)
3903
+ logPiCompactionMarkerClear(sessionId, expected, reason);
3838
3904
  return result.changes > 0;
3839
3905
  }
3906
+ function logPiCompactionMarkerClear(sessionId, marker, reason) {
3907
+ sessionLog2(sessionId, `Pi compaction-marker clear: reason=${reason} endMessageId=${marker.endMessageId} ordinal=${marker.ordinal} firstKeptEntryId=${marker.firstKeptEntryId ?? "<none>"}`);
3908
+ }
3840
3909
  function getSessionsWithPendingMarker(db) {
3841
3910
  const rows = db.prepare(`SELECT session_id FROM session_meta
3842
3911
  WHERE pending_compaction_marker_state IS NOT NULL
@@ -4441,6 +4510,27 @@ function hasAnthropicReasoning(messages) {
4441
4510
  });
4442
4511
  }
4443
4512
 
4513
+ // src/shared/processed-image-eligibility.ts
4514
+ function createProcessedImageEligibility(messages, messageTagNumbers, options) {
4515
+ const ageTags = new Map;
4516
+ let nextTag;
4517
+ for (let index = messages.length - 1;index >= 0; index--) {
4518
+ const message = messages[index];
4519
+ const ownTag = messageTagNumbers.get(message);
4520
+ if (ownTag !== undefined && Number.isFinite(ownTag) && ownTag > 0)
4521
+ nextTag = ownTag;
4522
+ if (nextTag !== undefined)
4523
+ ageTags.set(message, nextTag);
4524
+ }
4525
+ return {
4526
+ ageTags,
4527
+ mayStrip: (message) => {
4528
+ const age = ageTags.get(message);
4529
+ return options.watermark > 0 && age !== undefined && age <= options.watermark && ((options.contextPercentage ?? 0) >= 95 || options.protectedCutoff == null || age < options.protectedCutoff);
4530
+ }
4531
+ };
4532
+ }
4533
+
4444
4534
  // src/hooks/magic-context/strip-content.ts
4445
4535
  var MARKER_ONLY_PATTERN = /^(?:(?:§\d+§|\[dropped(?: §\d+§)?\]|\[cleared\])\s*)+$/;
4446
4536
  function isMarkerOnlyText(text) {
@@ -4990,59 +5080,142 @@ function stripReasoningFromMergedAssistants(messages, providerID, options) {
4990
5080
  }
4991
5081
  return stripped;
4992
5082
  }
5083
+ var emptyImageParts = new WeakMap;
5084
+ function getEmptyImageParts(messages) {
5085
+ return emptyImageParts.get(messages) ?? new Map;
5086
+ }
5087
+ function imageOmissionBreaksStructure(messages, index, omitted) {
5088
+ let before = index - 1;
5089
+ let after = index + 1;
5090
+ while (omitted.has(before))
5091
+ before--;
5092
+ while (omitted.has(after))
5093
+ after++;
5094
+ const previous = messages[before];
5095
+ const next = messages[after];
5096
+ return previous !== undefined && next !== undefined && previous.info.role === next.info.role;
5097
+ }
4993
5098
  function stripProcessedImages(messages, frozenIds, options) {
4994
- const { detect, watermark, messageTagNumbers } = options;
5099
+ const omissions = new Map;
5100
+ emptyImageParts.set(messages, omissions);
5101
+ const { detect, messageTagNumbers } = options;
5102
+ const eligibility = createProcessedImageEligibility(messages, messageTagNumbers, options);
4995
5103
  let stripped = 0;
4996
5104
  const newlyStrippedIds = [];
4997
5105
  const planned = [];
5106
+ const newMarkers = new Map;
4998
5107
  let hasAssistantResponse = false;
4999
5108
  for (let i = messages.length - 1;i >= 0; i--) {
5000
5109
  const msg = messages[i];
5110
+ const answered = hasAssistantResponse;
5001
5111
  if (msg.info.role === "assistant") {
5002
5112
  hasAssistantResponse = true;
5003
- continue;
5004
5113
  }
5005
- if (msg.info.role !== "user") {
5114
+ if (msg.info.role !== "user" && msg.info.role !== "assistant") {
5006
5115
  continue;
5007
5116
  }
5008
5117
  const id = typeof msg.info.id === "string" ? msg.info.id : undefined;
5009
5118
  const inFrozen = id !== undefined && frozenIds.has(id);
5010
- const maxTag = messageTagNumbers.get(msg) ?? 0;
5011
- const isNewDetection = !inFrozen && detect && hasAssistantResponse && id !== undefined && maxTag <= watermark;
5119
+ const isNewDetection = !inFrozen && detect && answered && id !== undefined && eligibility.mayStrip(msg) && !options.protectedMessageIds?.has(id);
5012
5120
  if (!inFrozen && !isNewDetection) {
5013
5121
  continue;
5014
5122
  }
5015
5123
  let touchedThisMsg = false;
5016
5124
  for (let j = 0;j < msg.parts.length; j++) {
5017
5125
  const part = msg.parts[j];
5018
- if (!isRecord(part) || part.type !== "file") {
5019
- continue;
5020
- }
5021
- if (typeof part.mime !== "string" || !part.mime.startsWith("image/")) {
5022
- continue;
5023
- }
5024
- if (typeof part.url === "string" && part.url.startsWith("data:") && part.url.length > 200) {
5025
- planned.push({ message: msg, partIndex: j, firstApplication: isNewDetection });
5126
+ const tool = msg.info.role === "assistant" && isRecord(part) && part.type === "tool" && isRecord(part.state) && part.state.status === "completed";
5127
+ const images = tool && isRecord(part) && isRecord(part.state) && Array.isArray(part.state.attachments) ? part.state.attachments : msg.info.role === "user" ? [part] : [];
5128
+ if (images.some(isProcessedImagePart)) {
5129
+ planned.push({
5130
+ message: msg,
5131
+ partIndex: j,
5132
+ firstApplication: isNewDetection,
5133
+ tool
5134
+ });
5026
5135
  touchedThisMsg = true;
5027
5136
  }
5028
5137
  }
5029
5138
  if (touchedThisMsg && isNewDetection && id !== undefined) {
5030
5139
  newlyStrippedIds.push(id);
5140
+ newMarkers.set(id, msg.info.role === "assistant" ? "[image stripped]" : options.replacementText ?? "");
5031
5141
  }
5032
5142
  }
5033
- const persisted = newlyStrippedIds.length === 0 || options.persistNewIds?.(newlyStrippedIds) !== false;
5143
+ const imageIndices = new Map;
5144
+ for (const { message, partIndex, tool } of planned) {
5145
+ if (tool)
5146
+ continue;
5147
+ const indices = imageIndices.get(message) ?? new Set;
5148
+ indices.add(partIndex);
5149
+ imageIndices.set(message, indices);
5150
+ }
5151
+ const emptiedRows = new Set;
5152
+ const newEmptyRows = [];
5153
+ for (let index = 0;index < messages.length; index++) {
5154
+ const message = messages[index];
5155
+ if (message.parts.every((part) => isRecord(part) && part.type === "text" && part.text === ""))
5156
+ emptiedRows.add(index);
5157
+ const id = message.info.id;
5158
+ const indices = imageIndices.get(message);
5159
+ if (!id || !indices)
5160
+ continue;
5161
+ const marker = options.frozenMarkers?.get(id) ?? newMarkers.get(id) ?? "";
5162
+ if (marker !== "" || !message.parts.every((part, partIndex) => indices.has(partIndex) || isRecord(part) && part.type === "text" && part.text === ""))
5163
+ continue;
5164
+ if (newMarkers.has(id))
5165
+ newEmptyRows.push({ index, id });
5166
+ else
5167
+ emptiedRows.add(index);
5168
+ }
5169
+ for (const { index, id } of newEmptyRows) {
5170
+ if (imageOmissionBreaksStructure(messages, index, emptiedRows))
5171
+ newMarkers.set(id, "[image stripped]");
5172
+ else
5173
+ emptiedRows.add(index);
5174
+ }
5175
+ const persisted = newlyStrippedIds.length === 0 || options.persistNewIds?.(newlyStrippedIds, newMarkers) !== false;
5034
5176
  if (!persisted)
5035
5177
  newlyStrippedIds.length = 0;
5036
- for (const { message, partIndex, firstApplication } of planned) {
5178
+ for (const { message, partIndex, firstApplication, tool } of planned) {
5037
5179
  if (firstApplication && !persisted)
5038
5180
  continue;
5039
5181
  if (firstApplication)
5040
5182
  options.onFirstApplication?.(message, partIndex);
5041
- message.parts[partIndex] = makeSentinel(message.parts[partIndex]);
5042
- stripped++;
5183
+ const marker = tool ? "[image stripped]" : options.frozenMarkers?.get(message.info.id ?? "") ?? (firstApplication ? newMarkers.get(message.info.id ?? "") : "") ?? "";
5184
+ const original = message.parts[partIndex];
5185
+ if (tool && isRecord(original) && isRecord(original.state) && Array.isArray(original.state.attachments)) {
5186
+ const attachments = original.state.attachments;
5187
+ const count = attachments.filter(isProcessedImagePart).length;
5188
+ const output = typeof original.state.output === "string" ? original.state.output : "";
5189
+ message.parts[partIndex] = {
5190
+ ...original,
5191
+ state: {
5192
+ ...original.state,
5193
+ output: [output, ...Array(count).fill(marker)].filter(Boolean).join(`
5194
+ `),
5195
+ attachments: attachments.filter((part) => !isProcessedImagePart(part))
5196
+ }
5197
+ };
5198
+ stripped += count;
5199
+ } else {
5200
+ message.parts[partIndex] = { ...makeSentinel(original), text: marker };
5201
+ if (marker === "" && message.info.id) {
5202
+ const indices = omissions.get(message.info.id) ?? new Set;
5203
+ indices.add(partIndex);
5204
+ omissions.set(message.info.id, indices);
5205
+ }
5206
+ stripped++;
5207
+ }
5043
5208
  }
5044
5209
  return { stripped, newlyStrippedIds };
5045
5210
  }
5211
+ function isProcessedImagePart(part) {
5212
+ if (isRecord(part) && part.type === "media" && isRecord(part.media)) {
5213
+ const { source, mediaType } = part.media;
5214
+ 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;
5215
+ return typeof mediaType === "string" && mediaType.startsWith("image/") && inlineLength > 0 && inlineLength + `data:${mediaType};base64,`.length > 200;
5216
+ }
5217
+ 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;
5218
+ }
5046
5219
 
5047
5220
  // src/hooks/magic-context/reasoning-budget.ts
5048
5221
  function projectOpencodeReasoningBudgetCutoff(db, sessionId, messages, budget, watermark, proseRatio) {
@@ -5657,24 +5830,18 @@ function setToolContent(part, content) {
5657
5830
  }
5658
5831
  }
5659
5832
  function clonePart(part) {
5660
- if (part === null || typeof part !== "object")
5661
- return part;
5662
- try {
5663
- return structuredClone(part);
5664
- } catch {
5665
- try {
5666
- return JSON.parse(JSON.stringify(part));
5667
- } catch {
5668
- return part;
5669
- }
5670
- }
5833
+ return {
5834
+ ...part,
5835
+ ...isRecord(part.state) ? { state: { ...part.state } } : {}
5836
+ };
5671
5837
  }
5672
5838
  function clampCloneInPlace(occurrence, clamp) {
5673
- const clone = clonePart(occurrence.part);
5674
- clamp(clone);
5675
5839
  const parts = occurrence.message.parts;
5676
5840
  const index = parts.indexOf(servedPart(occurrence));
5677
5841
  if (index >= 0) {
5842
+ const clone = clamp(occurrence.part);
5843
+ if (clone === servedPart(occurrence))
5844
+ return;
5678
5845
  parts[index] = clone;
5679
5846
  occurrence.served = clone;
5680
5847
  }
@@ -5684,17 +5851,24 @@ function servedPart(occurrence) {
5684
5851
  }
5685
5852
  function skeletonRealToolPart(part, tagId, stripAttachments = false) {
5686
5853
  if (!isRecord(part))
5687
- return;
5854
+ return part;
5688
5855
  const sentinel = `[dropped §${tagId}§]`;
5689
5856
  if (part.type === "tool" && isRecord(part.state)) {
5690
- part.state.output = sentinel;
5857
+ if (part.state.output === sentinel && !needsAttachmentStrip(part.state, stripAttachments))
5858
+ return part;
5859
+ const clone = clonePart(part);
5860
+ const state = clone.state;
5861
+ state.output = sentinel;
5691
5862
  if (stripAttachments)
5692
- part.state.attachments = [];
5693
- return;
5694
- }
5695
- if (part.type === "tool_result") {
5696
- part.content = sentinel;
5863
+ state.attachments = [];
5864
+ return clone;
5697
5865
  }
5866
+ if (part.type === "tool_result" && part.content !== sentinel)
5867
+ return { ...part, content: sentinel };
5868
+ return part;
5869
+ }
5870
+ function needsAttachmentStrip(state, strip) {
5871
+ return strip && (!Array.isArray(state.attachments) || state.attachments.length !== 0);
5698
5872
  }
5699
5873
  function readToolPartRawInput(part) {
5700
5874
  if (!isRecord(part))
@@ -5707,51 +5881,62 @@ function readToolPartRawInput(part) {
5707
5881
  return part.input;
5708
5882
  return;
5709
5883
  }
5884
+ function isDroppedInput(input, sentinel) {
5885
+ return isRecord(input) && Object.keys(input).length === 1 && Object.hasOwn(input, "dropped") && input.dropped === sentinel;
5886
+ }
5710
5887
  function truncateToolPart(part, tagId) {
5711
5888
  if (!isRecord(part))
5712
- return;
5889
+ return part;
5713
5890
  const sentinel = `[dropped §${tagId}§]`;
5714
5891
  if (part.type === "tool" && isRecord(part.state)) {
5715
- const state = part.state;
5892
+ if (part.state.output === sentinel && isDroppedInput(part.state.input, sentinel))
5893
+ return part;
5894
+ const clone = clonePart(part);
5895
+ const state = clone.state;
5716
5896
  state.output = sentinel;
5717
5897
  state.input = droppedInputMarker(tagId);
5718
- return;
5898
+ return clone;
5719
5899
  }
5720
5900
  if (part.type === "tool_result") {
5721
- part.content = sentinel;
5722
- return;
5901
+ return part.content === sentinel ? part : { ...part, content: sentinel };
5723
5902
  }
5724
5903
  if (part.type === "tool-invocation") {
5725
- part.args = droppedInputMarker(tagId);
5726
- return;
5904
+ return isDroppedInput(part.args, sentinel) ? part : { ...part, args: droppedInputMarker(tagId) };
5727
5905
  }
5728
5906
  if (part.type === "tool_use") {
5729
- part.input = droppedInputMarker(tagId);
5907
+ return isDroppedInput(part.input, sentinel) ? part : { ...part, input: droppedInputMarker(tagId) };
5730
5908
  }
5909
+ return part;
5731
5910
  }
5732
5911
  function editMarkerToolPart(part, tagId, stripAttachments = false) {
5733
5912
  if (!isRecord(part))
5734
- return;
5913
+ return part;
5735
5914
  const sentinel = `[dropped §${tagId}§]`;
5915
+ const input = readToolPartInput(part);
5916
+ const rewriteInput = input !== null && needsEditMarker(input);
5736
5917
  if (part.type === "tool" && isRecord(part.state)) {
5737
- part.state.output = sentinel;
5918
+ if (part.state.output === sentinel && !rewriteInput && !needsAttachmentStrip(part.state, stripAttachments))
5919
+ return part;
5920
+ const clone = clonePart(part);
5921
+ const state = clone.state;
5922
+ state.output = sentinel;
5738
5923
  if (stripAttachments)
5739
- part.state.attachments = [];
5740
- if (isRecord(part.state.input))
5741
- applyEditMarkerToInput(part.state.input);
5742
- return;
5924
+ state.attachments = [];
5925
+ if (rewriteInput) {
5926
+ state.input = { ...input };
5927
+ applyEditMarkerToInput(state.input);
5928
+ }
5929
+ return clone;
5743
5930
  }
5744
5931
  if (part.type === "tool_result") {
5745
- part.content = sentinel;
5746
- return;
5747
- }
5748
- if (part.type === "tool-invocation" && isRecord(part.args)) {
5749
- applyEditMarkerToInput(part.args);
5750
- return;
5932
+ return part.content === sentinel ? part : { ...part, content: sentinel };
5751
5933
  }
5752
- if (part.type === "tool_use" && isRecord(part.input)) {
5753
- applyEditMarkerToInput(part.input);
5934
+ if (rewriteInput) {
5935
+ const markedInput = { ...input };
5936
+ applyEditMarkerToInput(markedInput);
5937
+ return { ...part, [part.type === "tool-invocation" ? "args" : "input"]: markedInput };
5754
5938
  }
5939
+ return part;
5755
5940
  }
5756
5941
  function readToolPartInput(part) {
5757
5942
  if (!isRecord(part))
@@ -5980,9 +6165,7 @@ function createToolDropTarget(compositeKey, thinkingParts, index, batch, tagId)
5980
6165
  parts
5981
6166
  });
5982
6167
  const before = count(parts);
5983
- const retained = skeleton ? structuredClone(parts) : [];
5984
- for (const part of retained)
5985
- skeletonRealToolPart(part, tagId);
6168
+ const retained = skeleton ? parts.map((part) => skeletonRealToolPart(part, tagId)) : [];
5986
6169
  const after = count(retained);
5987
6170
  return {
5988
6171
  beforeTools: before.toolCall,
@@ -6030,6 +6213,10 @@ function createToolDropTarget(compositeKey, thinkingParts, index, batch, tagId)
6030
6213
  return false;
6031
6214
  return batch.wouldStrandConversationEnd(entry.occurrences);
6032
6215
  },
6216
+ prepareDrop: () => {
6217
+ const entry = index.get(compositeKey);
6218
+ return !!entry && entry.occurrences.length > 0 && entry.hasResult;
6219
+ },
6033
6220
  canDrop: () => {
6034
6221
  const entry = index.get(compositeKey);
6035
6222
  return !!entry && entry.occurrences.length > 0 && entry.hasResult && !entry.occurrences.some((occurrence) => toolPartHasUserAnswer(occurrence.part));
@@ -6292,6 +6479,21 @@ function visitRawSessionMessages2(sessionId, fromOrdinal, toOrdinal, visit, opti
6292
6479
  after = last ? { timeCreated: last.createdAt ?? 0, id: last.id } : undefined;
6293
6480
  }
6294
6481
  }
6482
+ async function visitRawSessionMessagesAsync2(sessionId, fromOrdinal, toOrdinal, visit, options = {}) {
6483
+ const from = Math.max(1, Math.floor(fromOrdinal));
6484
+ const to = Math.floor(toOrdinal);
6485
+ if (to < from)
6486
+ return;
6487
+ const provider = sessionProviders.get(sessionId)?.provider;
6488
+ if (!provider?.iterateMessageRangeAsync) {
6489
+ visitRawSessionMessages2(sessionId, from, to, visit, options);
6490
+ return;
6491
+ }
6492
+ for await (const message of provider.iterateMessageRangeAsync(from, to)) {
6493
+ if (!visit(message))
6494
+ return;
6495
+ }
6496
+ }
6295
6497
  function readRawSessionMessageRange2(sessionId, fromOrdinal, toOrdinal) {
6296
6498
  const from = Math.max(1, Math.floor(fromOrdinal));
6297
6499
  const to = Math.floor(toOrdinal);
@@ -6515,13 +6717,20 @@ function readRawSessionMessageOrdinalById2(sessionId, messageId) {
6515
6717
  return null;
6516
6718
  return withReadOnlySessionDb((db) => readRawSessionMessageOrdinalByIdFromDb2(db, sessionId, messageId));
6517
6719
  }
6720
+ function readRawSessionMessageOrderPosition(sessionId, messageId) {
6721
+ const provider = sessionProviders.get(sessionId)?.provider;
6722
+ if (provider) {
6723
+ return provider.readMessageOrderById ? provider.readMessageOrderById(messageId) : provider.readMessageOrdinalById?.(messageId) ?? null;
6724
+ }
6725
+ return readRawSessionMessageOrdinalById2(sessionId, messageId);
6726
+ }
6518
6727
  function compareRawSessionMessageOrder2(sessionId, leftId, rightId) {
6519
6728
  const provider = sessionProviders.get(sessionId)?.provider;
6520
6729
  if (provider) {
6521
- if (!provider.readMessageOrdinalById)
6730
+ if (!provider.readMessageOrderById && !provider.readMessageOrdinalById)
6522
6731
  return null;
6523
- const left = provider.readMessageOrdinalById(leftId);
6524
- const right = provider.readMessageOrdinalById(rightId);
6732
+ const left = readRawSessionMessageOrderPosition(sessionId, leftId);
6733
+ const right = readRawSessionMessageOrderPosition(sessionId, rightId);
6525
6734
  return left === null || right === null ? null : left - right;
6526
6735
  }
6527
6736
  if (!openCodeDbExists())
@@ -6717,7 +6926,10 @@ function readSessionChunk2(sessionId, tokenBudget, offset = 1, eligibleEndOrdina
6717
6926
  if (state?.input === undefined && state?.output !== undefined && typeof p.callID === "string") {
6718
6927
  const call = calls.get(p.callID);
6719
6928
  if (call) {
6720
- const expansion = expandToolPart({ ...call, state: { ...call.state, output: state.output } }, options.expandTools);
6929
+ const expansion = expandToolPart({
6930
+ ...call,
6931
+ state: { ...call.state, output: state.output }
6932
+ }, options.expandTools);
6721
6933
  if (expansion !== null) {
6722
6934
  expandedParts.set(call, expansion);
6723
6935
  expandedResults.add(part);
@@ -7000,4 +7212,4 @@ function readRawSessionSeedTail2(sessionId, boundaryId, onQuery) {
7000
7212
  });
7001
7213
  }
7002
7214
 
7003
- export { expandToolPart, markHostUnservedRow, retreatPastHostUnservedRows, snapTerminalCompartmentToServedRow, isHostRenderedSystemMessage, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, invalidateTrueRawTokenCache, stripSystemInjection, isTextPart, isToolPartWithOutput, isFilePart, buildFileSourceContent, toolPartHasUserAnswer, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, recordToolParameters, createDroppedInputGuard, assertExecutableToolInput, createDroppedInputToolExecuteBeforeHook, isEditTool, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, MAX_EXECUTE_THRESHOLD, escalationBands, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, getProtectionWindowForSession, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, 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, getPersistedReasoningWatermark, setPersistedReasoningWatermark, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, markChannel1PostReduceGracePending, captureChannel1PostReduceGraceBaseline, getChannel2NudgeState, getChannel2NudgeClaim, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, removeNoteNudgeAnchorByMessageId, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, removeAutoSearchHintDecisionByMessageId, getPersistedTodoPermissionDenied, setPersistedTodoPermissionDenied, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, loadTransformPassStateSnapshot, recordOverflowDetected, recordDetectedContextLimit, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, getDeferredClearedCompactionMarkerState, retireDeferredClearedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, removeStrippedPlaceholderId, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, getThinkingBindingRecoveryTarget, armThinkingBindingRecovery, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getTrailingBlankDecisions, addTrailingBlankDecisions, demoteTrailingBlankKeepDecisions, getStaleReduceStrippedIds, addStaleReduceStrippedIds, getProcessedImageStrippedIds, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, loadPostprocessReplaySnapshot, setPendingCompactionMarkerState, replacePendingCompactionMarkerStateIf, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, getSessionsWithPendingMarker, setSessionWorkMetrics, getObservedEpochFloor, resolveEpochFloorForPass, getReasoningRemovalState, addRemovedReasoningIds, markDropLeavesReasoning, detectThinkingBindingMismatch, detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, 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, reasoningStepCost, 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 };
7215
+ export { expandToolPart, markHostUnservedRow, retreatPastHostUnservedRows, snapTerminalCompartmentToServedRow, isHostRenderedSystemMessage, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, invalidateTrueRawTokenCache, stripSystemInjection, isTextPart, isToolPartWithOutput, isFilePart, buildFileSourceContent, toolPartHasUserAnswer, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, recordToolParameters, createDroppedInputGuard, assertExecutableToolInput, createDroppedInputToolExecuteBeforeHook, isEditTool, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, MAX_EXECUTE_THRESHOLD, escalationBands, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, getProtectionWindowForSession, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, 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, getPersistedReasoningWatermark, setPersistedReasoningWatermark, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, markChannel1PostReduceGracePending, captureChannel1PostReduceGraceBaseline, getChannel2NudgeState, getChannel2NudgeClaim, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, removeNoteNudgeAnchorByMessageId, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, removeAutoSearchHintDecisionByMessageId, getPersistedTodoPermissionDenied, setPersistedTodoPermissionDenied, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, loadTransformPassStateSnapshot, recordOverflowDetected, recordDetectedContextLimit, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, getDeferredClearedCompactionMarkerState, retireDeferredClearedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, removeStrippedPlaceholderId, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, getThinkingBindingRecoveryTarget, armThinkingBindingRecovery, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getTrailingBlankDecisions, addTrailingBlankDecisions, demoteTrailingBlankKeepDecisions, getStaleReduceStrippedIds, addStaleReduceStrippedIds, getProcessedImageStrippedIds, parseProcessedImageMarkers, serializeProcessedImageMarkers, getProcessedImageMarkers, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, loadPostprocessReplaySnapshot, setPendingCompactionMarkerState, replacePendingCompactionMarkerStateIf, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, logPiCompactionMarkerClear, getSessionsWithPendingMarker, setSessionWorkMetrics, getObservedEpochFloor, resolveEpochFloorForPass, getReasoningRemovalState, addRemovedReasoningIds, markDropLeavesReasoning, detectThinkingBindingMismatch, detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, 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, reasoningStepCost, 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 };