@cortexkit/opencode-magic-context 0.49.16 → 0.49.18

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 (235) hide show
  1. package/dist/auto-search-worker.js +76 -63
  2. package/dist/chunk-embedding-write-worker.js +11 -11
  3. package/dist/{compaction-marker-candidates-v5c6997n.js → compaction-marker-candidates-n4krhat4.js} +2 -2
  4. package/dist/compaction-marker-candidates-worker.js +2 -2
  5. package/dist/config/schema/magic-context.d.ts +394 -394
  6. package/dist/{conflict-warning-hook-znry4j76.js → conflict-warning-hook-4pmz879v.js} +5 -5
  7. package/dist/{context-3znk23va.js → context-m897gfp9.js} +304 -145
  8. package/dist/{embedding-backfill-q4n8dend.js → embedding-backfill-fmz50tsy.js} +11 -11
  9. package/dist/embedding-worker-process.js +1 -1
  10. package/dist/embedding-worker.js +4 -4
  11. package/dist/features/magic-context/compartment-chunk-embedding.d.ts +1 -1
  12. package/dist/features/magic-context/compartment-chunk-embedding.d.ts.map +1 -1
  13. package/dist/features/magic-context/git-commits/indexer.d.ts.map +1 -1
  14. package/dist/features/magic-context/memory/embedding-openai.d.ts.map +1 -1
  15. package/dist/features/magic-context/memory/project-identity-cache.d.ts +2 -0
  16. package/dist/features/magic-context/memory/project-identity-cache.d.ts.map +1 -1
  17. package/dist/features/magic-context/message-index-async.d.ts +1 -1
  18. package/dist/features/magic-context/message-index-async.d.ts.map +1 -1
  19. package/dist/features/magic-context/message-index.d.ts +5 -0
  20. package/dist/features/magic-context/message-index.d.ts.map +1 -1
  21. package/dist/features/magic-context/search.d.ts +6 -1
  22. package/dist/features/magic-context/search.d.ts.map +1 -1
  23. package/dist/features/magic-context/storage-host-instruction-retention.d.ts +11 -0
  24. package/dist/features/magic-context/storage-host-instruction-retention.d.ts.map +1 -0
  25. package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
  26. package/dist/features/magic-context/storage-meta-shared.d.ts +2 -2
  27. package/dist/features/magic-context/storage-meta-shared.d.ts.map +1 -1
  28. package/dist/features/magic-context/storage-session-tables.d.ts +9 -1
  29. package/dist/features/magic-context/storage-session-tables.d.ts.map +1 -1
  30. package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
  31. package/dist/hooks/magic-context/auto-search-deadline.d.ts +2 -1
  32. package/dist/hooks/magic-context/auto-search-deadline.d.ts.map +1 -1
  33. package/dist/hooks/magic-context/auto-search-hint.d.ts +3 -0
  34. package/dist/hooks/magic-context/auto-search-hint.d.ts.map +1 -1
  35. package/dist/hooks/magic-context/auto-search-runner.d.ts.map +1 -1
  36. package/dist/hooks/magic-context/auto-search-worker-client.d.ts +10 -2
  37. package/dist/hooks/magic-context/auto-search-worker-client.d.ts.map +1 -1
  38. package/dist/hooks/magic-context/cache-busting-signals.d.ts +22 -1
  39. package/dist/hooks/magic-context/cache-busting-signals.d.ts.map +1 -1
  40. package/dist/hooks/magic-context/compartment-runner-historian.d.ts +2 -0
  41. package/dist/hooks/magic-context/compartment-runner-historian.d.ts.map +1 -1
  42. package/dist/hooks/magic-context/compartment-trigger.d.ts +4 -2
  43. package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
  44. package/dist/hooks/magic-context/file-token-coverage.d.ts +11 -0
  45. package/dist/hooks/magic-context/file-token-coverage.d.ts.map +1 -0
  46. package/dist/hooks/magic-context/final-wire-token-estimate.d.ts +9 -0
  47. package/dist/hooks/magic-context/final-wire-token-estimate.d.ts.map +1 -1
  48. package/dist/hooks/magic-context/historian-host-runner.d.ts.map +1 -1
  49. package/dist/hooks/magic-context/hook.d.ts.map +1 -1
  50. package/dist/hooks/magic-context/host-served-rows.d.ts +25 -0
  51. package/dist/hooks/magic-context/host-served-rows.d.ts.map +1 -1
  52. package/dist/hooks/magic-context/inject-compartments.d.ts +7 -1
  53. package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
  54. package/dist/hooks/magic-context/lkg-recovery-fence.d.ts.map +1 -1
  55. package/dist/hooks/magic-context/lkg-replay.d.ts.map +1 -1
  56. package/dist/hooks/magic-context/lkg-slot.d.ts +1 -1
  57. package/dist/hooks/magic-context/lkg-slot.d.ts.map +1 -1
  58. package/dist/hooks/magic-context/pass-outcome.d.ts +2 -0
  59. package/dist/hooks/magic-context/pass-outcome.d.ts.map +1 -1
  60. package/dist/hooks/magic-context/protected-tail-boundary.d.ts +2 -1
  61. package/dist/hooks/magic-context/protected-tail-boundary.d.ts.map +1 -1
  62. package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
  63. package/dist/hooks/magic-context/signed-thinking-hold.d.ts +59 -0
  64. package/dist/hooks/magic-context/signed-thinking-hold.d.ts.map +1 -0
  65. package/dist/hooks/magic-context/system-prompt-diagnostics.d.ts +8 -0
  66. package/dist/hooks/magic-context/system-prompt-diagnostics.d.ts.map +1 -0
  67. package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
  68. package/dist/hooks/magic-context/tag-content-primitives.d.ts.map +1 -1
  69. package/dist/hooks/magic-context/tag-messages.d.ts +6 -1
  70. package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
  71. package/dist/hooks/magic-context/todo-view.d.ts +2 -2
  72. package/dist/hooks/magic-context/tool-drop-target.d.ts +3 -2
  73. package/dist/hooks/magic-context/tool-drop-target.d.ts.map +1 -1
  74. package/dist/hooks/magic-context/transform-compartment-phase.d.ts +6 -0
  75. package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -1
  76. package/dist/hooks/magic-context/transform-context-state.d.ts +19 -0
  77. package/dist/hooks/magic-context/transform-context-state.d.ts.map +1 -1
  78. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +19 -0
  79. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  80. package/dist/hooks/magic-context/transform-stage-logger.d.ts +3 -0
  81. package/dist/hooks/magic-context/transform-stage-logger.d.ts.map +1 -1
  82. package/dist/hooks/magic-context/transform.d.ts +1 -0
  83. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  84. package/dist/{index-9nkg2dzk.js → index-24fezq97.js} +3 -3
  85. package/dist/{index-v9asb16b.js → index-24jbw52d.js} +5 -5
  86. package/dist/{index-a8bvhwqs.js → index-2vxtcb95.js} +32 -3
  87. package/dist/{index-f71thw8j.js → index-4s3t0nd0.js} +1 -1
  88. package/dist/{index-6a6dq53h.js → index-6s5941tm.js} +5 -5
  89. package/dist/{index-fkx2qnvw.js → index-6x57ar45.js} +2 -2
  90. package/dist/{index-ek1yxvvz.js → index-936py2wm.js} +361 -70
  91. package/dist/{index-dqe8pq4x.js → index-a6mc0v4d.js} +6 -3
  92. package/dist/{index-hehkf6zm.js → index-b5vqckbw.js} +12 -6
  93. package/dist/{v2/server-wafzvyhg.js → index-beht37jy.js} +8 -0
  94. package/dist/{index-7b2cfmaz.js → index-bjcnntmz.js} +2 -2
  95. package/dist/{index-hqkczed7.js → index-c5pytzne.js} +22 -2
  96. package/dist/{index-nd7m2a5a.js → index-cf74k5ak.js} +27 -5
  97. package/dist/{index-kn4t1haw.js → index-e4xv8890.js} +531 -253
  98. package/dist/{index-cj9g0j7a.js → index-fgncb0ng.js} +7 -7
  99. package/dist/{index-5mwk1nek.js → index-jn12fvvh.js} +1 -1
  100. package/dist/{index-n6m03s3n.js → index-ke416mdc.js} +1 -1
  101. package/dist/{index-mtw9e71a.js → index-kq82mtg0.js} +2 -2
  102. package/dist/{index-n78avt2p.js → index-n37sebck.js} +1 -1
  103. package/dist/{index-wk0n1cgt.js → index-qn7xstt2.js} +2 -2
  104. package/dist/{index-v63beg1z.js → index-r4nkrs05.js} +3 -3
  105. package/dist/{index-j6zw70pf.js → index-rmwykbbb.js} +60 -21
  106. package/dist/{index-saews2s3.js → index-rr2bb45z.js} +1 -1
  107. package/dist/{index-ayym1x7f.js → index-s1ex9y6p.js} +195 -748
  108. package/dist/{index-7pa32z07.js → index-s734jcsr.js} +1 -1
  109. package/dist/{index-b17m64g9.js → index-s74zqahq.js} +1 -1
  110. package/dist/{index-4qfy7v57.js → index-s7j8tvhv.js} +31 -20
  111. package/dist/{index-wv9n2zcq.js → index-v8awdgvd.js} +4 -4
  112. package/dist/{index-p4vde22c.js → index-x4njr8df.js} +965 -77
  113. package/dist/{index-qrahzcqv.js → index-ze7mvk54.js} +10 -7
  114. package/dist/index.js +39 -39
  115. package/dist/{message-fts-rowid-map-yvx5a9jw.js → message-fts-rowid-map-17s0dfn4.js} +5 -3
  116. package/dist/{message-index-t4pz7akd.js → message-index-66jv6fh4.js} +13 -13
  117. package/dist/{message-index-bounded-6th8djy9.js → message-index-bounded-n1frdn85.js} +17 -17
  118. package/dist/{message-time-backfill-8egzkd3z.js → message-time-backfill-73mmm76q.js} +1 -1
  119. package/dist/migration-worker.js +8 -8
  120. package/dist/plugin/dream-timer.d.ts +11 -0
  121. package/dist/plugin/dream-timer.d.ts.map +1 -1
  122. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  123. package/dist/{project-embedding-registry-2dea0a77.js → project-embedding-registry-z74mhqkf.js} +10 -10
  124. package/dist/raw-ordinal-warmup-worker.js +10 -10
  125. package/dist/{read-session-chunk-4pwqxm5a.js → read-session-chunk-v06g3vka.js} +7 -7
  126. package/dist/{read-session-raw-5ar8se5v.js → read-session-raw-rsc8c7qy.js} +2 -2
  127. package/dist/{recomp-orchestrator-tjcaj5x7.js → recomp-orchestrator-ghpk2dtq.js} +24 -24
  128. package/dist/{search-archive-02jws7hw.js → search-archive-4d53y23e.js} +8 -8
  129. package/dist/{search-rb01n29x.js → search-nkf271d4.js} +20 -20
  130. package/dist/{send-session-notification-2x9edkrp.js → send-session-notification-6ve0e8p4.js} +4 -4
  131. package/dist/shared/historian-cache.d.ts +8 -0
  132. package/dist/shared/historian-cache.d.ts.map +1 -0
  133. package/dist/shared/model-suggestion-retry.d.ts +2 -0
  134. package/dist/shared/model-suggestion-retry.d.ts.map +1 -1
  135. package/dist/shared/rpc-discovery-cleanup.d.ts +3 -0
  136. package/dist/shared/rpc-discovery-cleanup.d.ts.map +1 -0
  137. package/dist/shared/rpc-server.d.ts +2 -0
  138. package/dist/shared/rpc-server.d.ts.map +1 -1
  139. package/dist/shared/search-text.d.ts +8 -0
  140. package/dist/shared/search-text.d.ts.map +1 -0
  141. package/dist/shared/sqlite.d.ts +4 -2
  142. package/dist/shared/sqlite.d.ts.map +1 -1
  143. package/dist/shared/storage-file-mutex.d.ts.map +1 -1
  144. package/dist/shared/subagent-runner.d.ts +2 -0
  145. package/dist/shared/subagent-runner.d.ts.map +1 -1
  146. package/dist/shared/system-directive.d.ts +2 -0
  147. package/dist/shared/system-directive.d.ts.map +1 -1
  148. package/dist/{sqlite-4pqyynrs.js → sqlite-zf72c52d.js} +1 -1
  149. package/dist/{storage-memory-j3v3hc83.js → storage-memory-y3qmy00r.js} +2 -2
  150. package/dist/{storage-tags-4z1w27xa.js → storage-tags-r7k9tjcv.js} +8 -4
  151. package/dist/{transform-postprocess-phase-xaw5c3xp.js → transform-postprocess-phase-zpgav0h7.js} +24 -24
  152. package/dist/v2/auto-search-worker.js +76 -63
  153. package/dist/v2/chunk-embedding-write-worker.js +11 -11
  154. package/dist/v2/{compaction-marker-candidates-1vqwr3s5.js → compaction-marker-candidates-ebx3388k.js} +2 -2
  155. package/dist/v2/compaction-marker-candidates-worker.js +2 -2
  156. package/dist/v2/{context-acw1nhv8.js → context-f2xh7ba4.js} +1171 -448
  157. package/dist/v2/embedding-backfill-7c7yr69y.js +23 -0
  158. package/dist/v2/embedding-worker-process.js +1 -1
  159. package/dist/v2/embedding-worker.js +4 -4
  160. package/dist/v2/fold/native-replay.d.ts +11 -2
  161. package/dist/v2/fold/native-replay.d.ts.map +1 -1
  162. package/dist/v2/fold/policy.d.ts.map +1 -1
  163. package/dist/v2/fold/restore.d.ts.map +1 -1
  164. package/dist/v2/hooks/context.d.ts.map +1 -1
  165. package/dist/v2/hooks/hidden-child.d.ts +8 -0
  166. package/dist/v2/hooks/hidden-child.d.ts.map +1 -1
  167. package/dist/v2/hooks/payload.d.ts.map +1 -1
  168. package/dist/v2/hooks/types.d.ts +17 -0
  169. package/dist/v2/hooks/types.d.ts.map +1 -1
  170. package/dist/v2/{message-fts-rowid-map-8vf0v7cr.js → message-fts-rowid-map-wfx67gfd.js} +5 -3
  171. package/dist/v2/{message-index-e6qzw477.js → message-index-48f7hw7a.js} +13 -13
  172. package/dist/v2/{message-index-bounded-dsrf49y7.js → message-index-bounded-w3hfm29z.js} +17 -17
  173. package/dist/v2/{message-time-backfill-q5pgxf0d.js → message-time-backfill-04t0km1z.js} +1 -1
  174. package/dist/v2/migration-worker.js +8 -8
  175. package/dist/v2/{project-embedding-registry-rek75aqw.js → project-embedding-registry-gnkj56xp.js} +10 -10
  176. package/dist/v2/raw-ordinal-warmup-worker.js +10 -10
  177. package/dist/v2/{read-session-chunk-7bpygfv2.js → read-session-chunk-zpgmxwte.js} +7 -7
  178. package/dist/v2/{read-session-raw-pw2n1qgc.js → read-session-raw-yaegtjzh.js} +2 -2
  179. package/dist/v2/{recomp-orchestrator-hzpgg06e.js → recomp-orchestrator-4vfxej9t.js} +24 -24
  180. package/dist/v2/{search-archive-fn4wy8sx.js → search-archive-vv48s2aa.js} +8 -8
  181. package/dist/v2/{search-sf2vg5pk.js → search-kza414f0.js} +20 -20
  182. package/dist/v2/{send-session-notification-hmr7q0nt.js → send-session-notification-3pxn658x.js} +4 -4
  183. package/dist/v2/{server-n5q841qn.js → server-1nyybqan.js} +31 -20
  184. package/dist/v2/{server-785mb90s.js → server-1wy7b9de.js} +6 -3
  185. package/dist/v2/{server-0mzjjw3s.js → server-27gq4mfz.js} +27 -5
  186. package/dist/v2/{server-g59aatsz.js → server-2ehj0bw7.js} +965 -77
  187. package/dist/v2/{server-kqpawe1a.js → server-46neh5fa.js} +12 -6
  188. package/dist/v2/{server-rrqpvwqd.js → server-6tmj0s7j.js} +2 -2
  189. package/dist/v2/{server-kr2kc9dz.js → server-8by8qfec.js} +10 -7
  190. package/dist/v2/{server-r9gjxcte.js → server-a2eqhkxr.js} +7 -7
  191. package/dist/v2/{server-vbe4se57.js → server-a9xqj88f.js} +1 -1
  192. package/dist/{index-wafzvyhg.js → v2/server-beht37jy.js} +8 -0
  193. package/dist/v2/{server-6fyp0v67.js → server-bfpda1tb.js} +195 -749
  194. package/dist/v2/{server-05xjtq6c.js → server-d04vrx0j.js} +1 -1
  195. package/dist/v2/{server-zs8d0s3b.js → server-g3qma5c0.js} +1 -1
  196. package/dist/v2/{server-00hx04yn.js → server-gpvay0xz.js} +2 -2
  197. package/dist/v2/{server-gha9x4qq.js → server-h1v0pyxb.js} +2 -2
  198. package/dist/v2/{server-hgg55hde.js → server-hy3d3vsx.js} +1 -1
  199. package/dist/v2/{server-vgpab6rd.js → server-my7k4eds.js} +4 -4
  200. package/dist/v2/{server-d8tj10db.js → server-n1prf1g6.js} +1 -1
  201. package/dist/v2/{server-n78avt2p.js → server-n37sebck.js} +1 -1
  202. package/dist/v2/{server-y5pznjt9.js → server-nj659894.js} +5 -5
  203. package/dist/v2/{server-zyw55ygv.js → server-qv7f0hhe.js} +5 -5
  204. package/dist/v2/{server-e3ftpk7v.js → server-rmygf5pn.js} +32 -3
  205. package/dist/v2/{server-0ppsweh6.js → server-tgnbmwah.js} +22 -2
  206. package/dist/v2/{server-1hcbw661.js → server-xhab8jx8.js} +60 -21
  207. package/dist/v2/{server-6714jebr.js → server-xj136kt8.js} +1 -1
  208. package/dist/v2/{server-aavz8pm6.js → server-zzkj2fch.js} +3 -3
  209. package/dist/v2/server.js +4 -4
  210. package/dist/v2/{sqlite-4pqyynrs.js → sqlite-zf72c52d.js} +1 -1
  211. package/dist/v2/{storage-memory-j3v3hc83.js → storage-memory-y3qmy00r.js} +2 -2
  212. package/dist/v2/{storage-tags-hkwtbp3g.js → storage-tags-3wdb8zph.js} +8 -4
  213. package/dist/v2/store-reader.d.ts +8 -0
  214. package/dist/v2/store-reader.d.ts.map +1 -1
  215. package/dist/v2/{wrapup-orchestrator-x4xj1782.js → wrapup-orchestrator-psqz7yh0.js} +24 -24
  216. package/dist/wrapup-orchestrator-s9zc5b00.js +48 -0
  217. package/package.json +1 -1
  218. package/src/config/latch-permanence-guard.test.ts +4 -0
  219. package/src/shared/historian-cache.test.ts +69 -0
  220. package/src/shared/historian-cache.ts +55 -0
  221. package/src/shared/model-suggestion-retry.ts +2 -0
  222. package/src/shared/rpc-discovery-cleanup.test.ts +57 -0
  223. package/src/shared/rpc-discovery-cleanup.ts +57 -0
  224. package/src/shared/rpc-server.ts +36 -13
  225. package/src/shared/search-text.test.ts +47 -0
  226. package/src/shared/search-text.ts +63 -0
  227. package/src/shared/sqlite.test.ts +56 -0
  228. package/src/shared/sqlite.ts +51 -2
  229. package/src/shared/storage-file-mutex-review.test.ts +22 -2
  230. package/src/shared/storage-file-mutex.ts +11 -1
  231. package/src/shared/subagent-runner.ts +2 -0
  232. package/src/shared/system-directive.ts +19 -1
  233. package/src/shared/tag-transcript.ts +12 -4
  234. package/dist/v2/embedding-backfill-jyd6492b.js +0 -23
  235. package/dist/wrapup-orchestrator-vj2tbp22.js +0 -48
@@ -14,10 +14,6 @@ import {
14
14
  getUncoveredCompartmentEndsThrough,
15
15
  providerResponseFailed,
16
16
  isSuccessfulProviderCompletion,
17
- gaDatabasePath,
18
- RAW_MESSAGE_TYPES,
19
- V2StoreReaderPool,
20
- V2StoreReader,
21
17
  getOrCreateSessionMeta,
22
18
  updateSessionMeta,
23
19
  markSessionCleanupPending,
@@ -58,7 +54,7 @@ import {
58
54
  rebaseSessionCoordinatesAsync,
59
55
  resolveOpenCodeProtectedTailBoundary,
60
56
  getActiveCompartmentRun
61
- } from "./index-ayym1x7f.js";
57
+ } from "./index-s1ex9y6p.js";
62
58
  import"./index-sd3egckz.js";
63
59
  import {
64
60
  getHarness2
@@ -147,7 +143,7 @@ import {
147
143
  applyJsonSchemaParameterDescriptions,
148
144
  MagicContextRpcServer,
149
145
  subagentTemperature
150
- } from "./index-ek1yxvvz.js";
146
+ } from "./index-936py2wm.js";
151
147
  import {
152
148
  resolveHistorianModel2
153
149
  } from "./index-8cd2j99z.js";
@@ -162,15 +158,17 @@ import {
162
158
  openDatabaseAsync,
163
159
  isDatabasePersisted,
164
160
  getDatabasePersistenceError
165
- } from "./index-cj9g0j7a.js";
161
+ } from "./index-fgncb0ng.js";
166
162
  import {
167
163
  setHomeProjectPermission,
168
164
  resolveProjectIdentityForSession,
169
165
  scheduleAfterBootQuiet
170
- } from "./index-a8bvhwqs.js";
166
+ } from "./index-2vxtcb95.js";
171
167
  import {
172
168
  needsBlockedRead,
173
169
  markHostUnservedRow,
170
+ markCoveredInstructionRow,
171
+ isCoveredInstructionRow,
174
172
  DreamTokenBudgetExceeded,
175
173
  createDreamTokenBudget,
176
174
  recordToolParameters,
@@ -178,6 +176,7 @@ import {
178
176
  assertExecutableToolInput,
179
177
  getProtectionWindowForSession,
180
178
  clearCachedM0M1,
179
+ clearCachedM0,
181
180
  getChannel2NudgeState,
182
181
  claimChannel2NudgeState,
183
182
  casChannel2NudgeClaim,
@@ -199,36 +198,40 @@ import {
199
198
  cleanUserText2,
200
199
  readRawSessionMessageIdOrdinalsForRange2,
201
200
  readRawSessionMessageOrdinalById2
202
- } from "./index-j6zw70pf.js";
201
+ } from "./index-rmwykbbb.js";
203
202
  import {
204
203
  invalidateAutoEmbedSession,
205
204
  clearEmbedSessionState
206
- } from "./index-qrahzcqv.js";
205
+ } from "./index-ze7mvk54.js";
207
206
  import {
208
207
  hasMeaningfulUserText2,
209
208
  preloadTokenizer,
210
209
  estimateTokens
211
- } from "./index-hqkczed7.js";
212
- import"./index-fkx2qnvw.js";
210
+ } from "./index-c5pytzne.js";
211
+ import"./index-6x57ar45.js";
213
212
  import {
214
213
  inRootAsyncContext2,
215
214
  withSqliteTransformPass2,
216
215
  withoutSqliteTransformPass2,
217
216
  isTransientSqliteError2,
218
217
  withAsyncPrivilegedWriter2
219
- } from "./index-wafzvyhg.js";
218
+ } from "./index-beht37jy.js";
220
219
  import"./index-v0p37hm2.js";
221
- import"./index-7pa32z07.js";
222
- import"./index-dqe8pq4x.js";
220
+ import"./index-s734jcsr.js";
221
+ import"./index-a6mc0v4d.js";
223
222
  import {
224
223
  deleteChunkEmbedBackoffForSession
225
- } from "./index-hehkf6zm.js";
224
+ } from "./index-b5vqckbw.js";
226
225
  import"./index-nj7yykkx.js";
227
226
  import {
228
227
  BoundedSessionMap,
229
228
  advanceSessionActivity,
230
- backfillSessionActivity
231
- } from "./index-p4vde22c.js";
229
+ backfillSessionActivity,
230
+ gaDatabasePath,
231
+ RAW_MESSAGE_TYPES,
232
+ V2StoreReaderPool,
233
+ V2StoreReader
234
+ } from "./index-x4njr8df.js";
232
235
  import"./index-bp5083x2.js";
233
236
  import"./index-1zx87sdm.js";
234
237
  import {
@@ -237,20 +240,20 @@ import {
237
240
  isDroppedToolOutput,
238
241
  evaluateChannel2,
239
242
  buildChannel2Reminder
240
- } from "./index-nd7m2a5a.js";
243
+ } from "./index-cf74k5ak.js";
241
244
  import"./index-58e3y90n.js";
242
- import"./index-mtw9e71a.js";
245
+ import"./index-kq82mtg0.js";
243
246
  import {
244
247
  getCurrentToolSetHash,
245
248
  recordToolDefinition
246
- } from "./index-n6m03s3n.js";
249
+ } from "./index-ke416mdc.js";
247
250
  import"./index-fr0wbhdn.js";
248
- import"./index-wk0n1cgt.js";
251
+ import"./index-qn7xstt2.js";
249
252
  import"./index-fb3zxn06.js";
250
253
  import {
251
254
  renderUserFacingFailure,
252
255
  userFacingFailureCode
253
- } from "./index-wv9n2zcq.js";
256
+ } from "./index-v8awdgvd.js";
254
257
  import {
255
258
  createTagger,
256
259
  cavemanWordRulesForLanguage,
@@ -259,29 +262,29 @@ import {
259
262
  EmergencyFailClosedError,
260
263
  DegradedPassRefusalError,
261
264
  isSyntheticHeadMessage2
262
- } from "./index-kn4t1haw.js";
263
- import"./index-f71thw8j.js";
265
+ } from "./index-e4xv8890.js";
266
+ import"./index-4s3t0nd0.js";
264
267
  import"./index-qt1qqasc.js";
265
- import"./index-saews2s3.js";
268
+ import"./index-rr2bb45z.js";
266
269
  import"./index-4dhv7mqz.js";
267
- import"./index-7b2cfmaz.js";
268
- import"./index-9nkg2dzk.js";
269
- import"./index-n78avt2p.js";
270
+ import"./index-bjcnntmz.js";
271
+ import"./index-24fezq97.js";
272
+ import"./index-n37sebck.js";
270
273
  import {
271
274
  pushNotification2,
272
275
  isTuiConnected2
273
276
  } from "./index-x8a7jmkh.js";
274
277
  import"./index-y9f76s3f.js";
275
- import"./index-b17m64g9.js";
276
- import"./index-4qfy7v57.js";
277
- import"./index-v63beg1z.js";
278
+ import"./index-s74zqahq.js";
279
+ import"./index-s7j8tvhv.js";
280
+ import"./index-r4nkrs05.js";
278
281
  import"./index-gp3kcpc4.js";
279
282
  import {
280
283
  detectConflicts
281
284
  } from "./index-kee4kn5j.js";
282
285
  import"./index-fmsr7v69.js";
283
286
  import"./index-kaqs6h31.js";
284
- import"./index-6a6dq53h.js";
287
+ import"./index-6s5941tm.js";
285
288
  import {
286
289
  isDreamerRunnable,
287
290
  isSmartNoteSurfaceAvailable,
@@ -295,6 +298,9 @@ import {
295
298
  } from "./index-y8v6yerm.js";
296
299
  import"./index-k29z4aqh.js";
297
300
 
301
+ // src/v2/hooks/context.ts
302
+ import { setTimeout as delay } from "node:timers/promises";
303
+
298
304
  // src/hooks/magic-context/history-boundary-repair.ts
299
305
  function readBaseline(db, sessionId) {
300
306
  const row = db.prepare("SELECT cached_m0_bytes IS NOT NULL AS hasM0, cached_m0_last_baseline_end_message_id AS boundary FROM session_meta WHERE session_id = ?").get(sessionId);
@@ -1275,6 +1281,8 @@ function adaptPayload(draft, admittedIDs = new Set, messageTimes = new Map) {
1275
1281
  parts
1276
1282
  };
1277
1283
  originals.set(mapped, message);
1284
+ if (isCoveredInstructionRow(message))
1285
+ markCoveredInstructionRow(mapped.info);
1278
1286
  if (typeof message.id !== "string")
1279
1287
  bridgesByCarrier.set(mapped, byCallID);
1280
1288
  messages.push(mapped);
@@ -1631,24 +1639,31 @@ ${data.output?.output ?? ""}`
1631
1639
  const sameModel = sameProvider && previousModel?.id === model.id;
1632
1640
  const reuse = sameModel && data.error === undefined;
1633
1641
  const metadata = (state) => state === undefined ? undefined : { [model.providerID]: state };
1642
+ const reasoningInterrupted = data.content?.some((part) => part.type === "reasoning" && part.time !== undefined && part.time.completed === undefined);
1634
1643
  const content = [];
1635
1644
  const results = [];
1636
1645
  for (const part of data.content ?? []) {
1646
+ let native = "native" in part ? part.native : part.type === "tool" ? part.providerState : part.state;
1647
+ if (part.type === "tool" && part.providerResultState !== null && typeof part.providerResultState === "object" && !Array.isArray(part.providerResultState))
1648
+ native = {
1649
+ ...native !== null && typeof native === "object" && !Array.isArray(native) ? native : {},
1650
+ ...part.providerResultState
1651
+ };
1637
1652
  if (part.type === "text") {
1638
1653
  if (part.text !== "")
1639
1654
  content.push({
1640
1655
  type: "text",
1641
1656
  text: part.text,
1642
- providerMetadata: reuse ? metadata(part.state) : undefined
1657
+ providerMetadata: reuse ? metadata(native) : undefined
1643
1658
  });
1644
1659
  continue;
1645
1660
  }
1646
1661
  if (part.type === "reasoning") {
1647
- if (part.text !== "" || reuse && part.state !== undefined)
1662
+ if (part.text !== "" || reuse && !reasoningInterrupted && native !== undefined)
1648
1663
  content.push({
1649
- type: reuse || data.error === undefined ? "reasoning" : "text",
1664
+ type: data.error === undefined && !reasoningInterrupted ? "reasoning" : "text",
1650
1665
  text: part.text,
1651
- providerMetadata: reuse ? metadata(part.state) : undefined
1666
+ providerMetadata: reuse && !reasoningInterrupted ? metadata(native) : undefined
1652
1667
  });
1653
1668
  continue;
1654
1669
  }
@@ -1667,7 +1682,7 @@ ${data.output?.output ?? ""}`
1667
1682
  name: part.name,
1668
1683
  input,
1669
1684
  providerExecuted: part.executed,
1670
- providerMetadata: toolReuse ? metadata(part.providerState) : undefined
1685
+ providerMetadata: toolReuse ? metadata(native) : undefined
1671
1686
  });
1672
1687
  if (!completed)
1673
1688
  continue;
@@ -1678,7 +1693,7 @@ ${data.output?.output ?? ""}`
1678
1693
  id: part.id,
1679
1694
  name: part.name,
1680
1695
  providerExecuted: part.executed,
1681
- providerMetadata: toolReuse ? metadata(part.providerResultState ?? part.providerState) : sameProvider ? metadata(part.providerResultState) : undefined,
1696
+ providerMetadata: (part.executed === true ? sameProvider : reuse) ? metadata(native) : undefined,
1682
1697
  result: state.status === "error" ? { error: state.error, content: toolContent } : single?.type === "text" ? { type: "text", value: single.text } : { type: "content", value: toolContent },
1683
1698
  ...state.status === "error" ? { resultType: "error" } : {}
1684
1699
  };
@@ -1706,13 +1721,50 @@ function copyNativeInput(messages) {
1706
1721
  return copies;
1707
1722
  }
1708
1723
  function isLocalCheckpoint(row) {
1709
- return row.type === "compaction" && row.data.status === "completed" && row.data.providerContext === undefined;
1724
+ return row.type === "compaction" && row.data.status === "completed" && row.data.providerContext === undefined && row.data.native?.messages === undefined;
1725
+ }
1726
+ function isAdmittedLocalCheckpoint(storage, sessionID, cut) {
1727
+ if (!isLocalCheckpoint(cut) || cut.session_id !== sessionID)
1728
+ return false;
1729
+ const admission = storage.admission(sessionID, cut.id);
1730
+ if (!admission?.payload || admission.digest !== foldDigest(admission.payload))
1731
+ return false;
1732
+ try {
1733
+ const snapshot = JSON.parse(admission.payload);
1734
+ return snapshot.source === storage.sourceID && snapshot.sessionID === sessionID && snapshot.admissionID === cut.id && snapshot.summary === cut.data.summary;
1735
+ } catch {
1736
+ return false;
1737
+ }
1710
1738
  }
1711
1739
  var conversational = (row) => RAW_MESSAGE_TYPES.includes(row.type) || row.type === "location-switched";
1740
+ var historyDigest = (reader, sessionID, through) => foldDigest(JSON.stringify(reader.range(sessionID, -1, through).filter(conversational)));
1741
+ var admissionKey = (sessionID) => `native-fold/v2/${encodeURIComponent(sessionID)}`;
1742
+ async function forgetNativeFoldProvenance(storage, sessionID, legacyOnly = false) {
1743
+ const remove = async (key) => {
1744
+ if (storage.remove)
1745
+ await storage.remove(key);
1746
+ else
1747
+ await storage.set(key, null);
1748
+ };
1749
+ if (!legacyOnly)
1750
+ await remove(admissionKey(sessionID));
1751
+ if (!storage.scan)
1752
+ return;
1753
+ let after;
1754
+ do {
1755
+ const page = await storage.scan({ prefix: "native-fold/v1/", after, limit: 100 });
1756
+ for (const { key } of page.entries) {
1757
+ if (key.slice("native-fold/v1/".length).split("/").slice(1).join("/") === sessionID)
1758
+ await remove(key);
1759
+ }
1760
+ after = page.next;
1761
+ } while (after);
1762
+ }
1712
1763
 
1713
1764
  class NativeFoldReplay {
1714
1765
  storage;
1715
1766
  openReader;
1767
+ admissions;
1716
1768
  changed = new Set;
1717
1769
  dirty = new Set;
1718
1770
  unavailable = new Set;
@@ -1720,9 +1772,11 @@ class NativeFoldReplay {
1720
1772
  metadataThrough = new Map;
1721
1773
  loaded = new Map;
1722
1774
  sources = new Map;
1723
- constructor(storage, openReader) {
1775
+ staleHeads = new Set;
1776
+ constructor(storage, openReader, admissions) {
1724
1777
  this.storage = storage;
1725
1778
  this.openReader = openReader;
1779
+ this.admissions = admissions;
1726
1780
  storage.onEvict((sessionID) => this.clear(sessionID));
1727
1781
  }
1728
1782
  account(sessionID) {
@@ -1761,6 +1815,51 @@ class NativeFoldReplay {
1761
1815
  async baseline(sessionID) {
1762
1816
  return this.tail(sessionID)?.baseline;
1763
1817
  }
1818
+ admissionKey(sessionID) {
1819
+ return admissionKey(sessionID);
1820
+ }
1821
+ async removeAdmission(key) {
1822
+ if (this.admissions?.remove)
1823
+ await this.admissions.remove(key);
1824
+ else
1825
+ await this.admissions?.set(key, null);
1826
+ }
1827
+ async removeLegacyAdmissions(sessionID) {
1828
+ if (this.admissions)
1829
+ await forgetNativeFoldProvenance(this.admissions, sessionID, true);
1830
+ }
1831
+ async admits(sessionID, cut, reader) {
1832
+ if (!isLocalCheckpoint(cut) || cut.session_id !== sessionID)
1833
+ return false;
1834
+ if (isAdmittedLocalCheckpoint(this.storage, sessionID, cut))
1835
+ return true;
1836
+ if (!this.admissions)
1837
+ return false;
1838
+ try {
1839
+ const source = reader.hostIdentity();
1840
+ const saved = await this.admissions.get(this.admissionKey(sessionID));
1841
+ if (!saved?.payload || saved.digest !== foldDigest(saved.payload))
1842
+ return false;
1843
+ const snapshot = JSON.parse(saved.payload);
1844
+ if (snapshot.sourceDigest !== foldDigest(source) || snapshot.sessionID !== sessionID || snapshot.admissionID !== cut.id || snapshot.summaryDigest !== foldDigest(cut.data.summary ?? ""))
1845
+ return false;
1846
+ if (snapshot.historyDigest !== historyDigest(reader, sessionID, cut.seq - 1)) {
1847
+ this.staleHeads.add(sessionID);
1848
+ this.invalidate(sessionID);
1849
+ await this.removeAdmission(this.admissionKey(sessionID));
1850
+ return false;
1851
+ }
1852
+ await this.storage.supply(sessionID, cut.id, JSON.stringify({
1853
+ source: this.storage.sourceID,
1854
+ sessionID,
1855
+ admissionID: cut.id,
1856
+ summary: cut.data.summary
1857
+ }));
1858
+ return true;
1859
+ } catch {
1860
+ return false;
1861
+ }
1862
+ }
1764
1863
  rendered(row, model) {
1765
1864
  return restoreRow(row, model, hostUsesMediaAssets() ? {
1766
1865
  asset: hostMediaAsset,
@@ -1838,6 +1937,7 @@ class NativeFoldReplay {
1838
1937
  this.loaded.set(draft.sessionID, through);
1839
1938
  this.unavailable.delete(draft.sessionID);
1840
1939
  this.changed.delete(draft.sessionID);
1940
+ this.staleHeads.delete(draft.sessionID);
1841
1941
  } finally {
1842
1942
  reader.close();
1843
1943
  }
@@ -1864,7 +1964,8 @@ class NativeFoldReplay {
1864
1964
  async supplyHeld(args) {
1865
1965
  const { draft, reader, summary } = args;
1866
1966
  const tail = this.tail(draft.sessionID);
1867
- const id = reader.latestRunningCompaction(draft.sessionID)?.id;
1967
+ const running = reader.latestRunningCompaction(draft.sessionID);
1968
+ const id = running?.id;
1868
1969
  if (!id || !tail || tail.model !== `${draft.model.providerID}/${draft.model.id}`)
1869
1970
  return false;
1870
1971
  const through = reader.latestSequence(draft.sessionID);
@@ -1888,6 +1989,21 @@ class NativeFoldReplay {
1888
1989
  summary
1889
1990
  };
1890
1991
  await this.storage.supply(draft.sessionID, id, JSON.stringify(snapshot));
1992
+ if (this.admissions) {
1993
+ const provenance = {
1994
+ sourceDigest: foldDigest(reader.hostIdentity()),
1995
+ sessionID: draft.sessionID,
1996
+ admissionID: id,
1997
+ summaryDigest: foldDigest(summary),
1998
+ historyDigest: historyDigest(reader, draft.sessionID, (running?.seq ?? through) - 1)
1999
+ };
2000
+ const payload = JSON.stringify(provenance);
2001
+ await this.admissions.set(this.admissionKey(draft.sessionID), {
2002
+ payload,
2003
+ digest: foldDigest(payload)
2004
+ });
2005
+ await this.removeLegacyAdmissions(draft.sessionID);
2006
+ }
1891
2007
  return true;
1892
2008
  }
1893
2009
  async restore(sessionID, cut, model, options = {}) {
@@ -1972,6 +2088,9 @@ class NativeFoldReplay {
1972
2088
  sourceChanged(sessionID) {
1973
2089
  return this.changed.has(sessionID);
1974
2090
  }
2091
+ needsHeadRebuild(sessionID) {
2092
+ return this.staleHeads.has(sessionID);
2093
+ }
1975
2094
  clear(sessionID) {
1976
2095
  this.sources.delete(sessionID);
1977
2096
  this.metadata.delete(sessionID);
@@ -1980,8 +2099,11 @@ class NativeFoldReplay {
1980
2099
  this.unavailable.delete(sessionID);
1981
2100
  this.dirty.delete(sessionID);
1982
2101
  this.changed.delete(sessionID);
2102
+ this.staleHeads.delete(sessionID);
1983
2103
  }
1984
2104
  async forget(sessionID) {
2105
+ if (this.admissions)
2106
+ await forgetNativeFoldProvenance(this.admissions, sessionID);
1985
2107
  await this.storage.forget(sessionID);
1986
2108
  }
1987
2109
  }
@@ -1996,11 +2118,7 @@ class HostFoldPolicy {
1996
2118
  this.deps = deps;
1997
2119
  }
1998
2120
  owned(sessionID, cut, id) {
1999
- const row = this.deps.storage.admission(sessionID, id);
2000
- if (!isLocalCheckpoint(cut) || cut.id !== id || !row?.payload || row.digest !== foldDigest(row.payload))
2001
- return false;
2002
- const snapshot = JSON.parse(row.payload);
2003
- return snapshot.summary === cut.data.summary && snapshot.source === this.deps.storage.sourceID && snapshot.sessionID === sessionID && snapshot.admissionID === id;
2121
+ return cut.id === id && isAdmittedLocalCheckpoint(this.deps.storage, sessionID, cut);
2004
2122
  }
2005
2123
  async idle(sessionID) {
2006
2124
  const { storage, session, threshold } = this.deps;
@@ -4638,6 +4756,11 @@ async function applyV2SystemPrompt(systemPrompt, draft) {
4638
4756
  text
4639
4757
  })));
4640
4758
  }
4759
+ function coveredInstructionRows(reader, sessionID, throughSeq, model) {
4760
+ if (throughSeq < 0)
4761
+ return [];
4762
+ return reader.instructionRowsThrough(sessionID, throughSeq).flatMap((row) => restoreRow(row, model)).map((message) => markCoveredInstructionRow(message));
4763
+ }
4641
4764
  async function registerContext(context) {
4642
4765
  const directory = context.location.directory;
4643
4766
  const config = loadPluginConfigDetailed(directory).config;
@@ -4677,7 +4800,7 @@ async function registerContext(context) {
4677
4800
  }
4678
4801
  const folds = new FoldOwner(context.storage);
4679
4802
  const nativeFoldMemory = !compactionOff && process.env.MC_OC2_INVISIBLE_FOLD === "1" ? nativeFoldCache(() => storage.require()) : undefined;
4680
- const nativeFoldReplay = nativeFoldMemory ? new NativeFoldReplay(nativeFoldMemory, () => openStoreReader()) : undefined;
4803
+ const nativeFoldReplay = nativeFoldMemory ? new NativeFoldReplay(nativeFoldMemory, () => openStoreReader(), context.storage) : undefined;
4681
4804
  setOutputReserveConfig(config.output_reserve);
4682
4805
  const queriedModels = new Set;
4683
4806
  const rawLimits = new Map;
@@ -4729,6 +4852,7 @@ async function registerContext(context) {
4729
4852
  memorySyncRequestedSessions: rustMemorySyncRequestedSessions
4730
4853
  }) : undefined;
4731
4854
  const hiddenChildHook = new HiddenChildHook;
4855
+ await context.session.hook("http.request", (draft) => hiddenChildHook.cacheRequest(draft));
4732
4856
  const tools = db && isDatabasePersisted(db) ? await registerTools(context, db, config, moduleToolBackends?.backends, (id) => hiddenChildHook.owns(id)) : undefined;
4733
4857
  const usage = new Map;
4734
4858
  const generateReplay = new V2GenerateReplay;
@@ -5105,87 +5229,114 @@ async function registerContext(context) {
5105
5229
  }) : undefined;
5106
5230
  const usageController = new AbortController;
5107
5231
  const usageDone = (async () => {
5108
- try {
5109
- for await (const value of context.event.subscribe({ signal: usageController.signal })) {
5110
- if (usageController.signal.aborted)
5111
- break;
5112
- const event = value;
5113
- if (event.type === "provider.updated" || event.type === "model.updated") {
5114
- queriedModels.clear();
5115
- continue;
5116
- }
5117
- if (!event.data?.sessionID)
5118
- continue;
5119
- const sessionID = event.data.sessionID;
5120
- if (event.type?.startsWith("session.revert.") || event.type === "session.message.content.updated") {
5121
- nativeFoldReplay?.onEvent(event);
5122
- restoredRows.forget(sessionID);
5123
- }
5124
- if (event.type === "session.error" || event.type === "session.execution.failed") {
5125
- const error = hiddenTerminalError(event);
5126
- if (error !== undefined)
5127
- hiddenSessionErrors.set(sessionID, error);
5128
- if (error !== undefined && db && !compactionOff) {
5232
+ let retry = 0;
5233
+ while (!usageController.signal.aborted) {
5234
+ const subscribedAt = Date.now();
5235
+ try {
5236
+ for await (const value of context.event.subscribe({
5237
+ signal: usageController.signal
5238
+ })) {
5239
+ if (usageController.signal.aborted)
5240
+ break;
5241
+ const event = value;
5242
+ try {
5243
+ if (event.type === "provider.updated" || event.type === "model.updated") {
5244
+ queriedModels.clear();
5245
+ continue;
5246
+ }
5247
+ if (!event.data?.sessionID)
5248
+ continue;
5249
+ const sessionID = event.data.sessionID;
5250
+ if (event.type?.startsWith("session.revert.") || event.type === "session.message.content.updated") {
5251
+ nativeFoldReplay?.onEvent(event);
5252
+ restoredRows.forget(sessionID);
5253
+ }
5254
+ if (event.type === "session.error" || event.type === "session.execution.failed") {
5255
+ const error = hiddenTerminalError(event);
5256
+ if (error !== undefined)
5257
+ hiddenSessionErrors.set(sessionID, error);
5258
+ if (error !== undefined && db && !compactionOff) {
5259
+ const model = liveModels.get(sessionID);
5260
+ try {
5261
+ armLatestThinkingRecoveryFromError({
5262
+ db,
5263
+ sessionId: sessionID,
5264
+ error,
5265
+ providerID: model?.providerID,
5266
+ modelID: model?.modelID
5267
+ });
5268
+ } catch (armError) {
5269
+ log2("[magic-context] v2 latest-thinking recovery arm failed", armError);
5270
+ }
5271
+ }
5272
+ continue;
5273
+ }
5274
+ if (event.type === "session.deleted") {
5275
+ clearLkgMeasuredRequest(sessionID);
5276
+ deletedSessions.add(sessionID);
5277
+ transform?.clearSessionLogState(sessionID);
5278
+ if (db) {
5279
+ markSessionCleanupPending(db, sessionID);
5280
+ clearSession(db, sessionID);
5281
+ }
5282
+ rawProviders.get(sessionID)?.();
5283
+ rawProviders.delete(sessionID);
5284
+ usage.delete(sessionID);
5285
+ hiddenSessionErrors.delete(sessionID);
5286
+ storageNoticeBySession.delete(sessionID);
5287
+ liveModels.delete(sessionID);
5288
+ variants.delete(sessionID);
5289
+ agents.delete(sessionID);
5290
+ channel1.delete(sessionID);
5291
+ commitSeenLastPass.delete(sessionID);
5292
+ clearEmbedSessionState(sessionID);
5293
+ historyRefreshSessions.delete(sessionID);
5294
+ clearPendingMaterialization(pendingMaterializationSessions, sessionID);
5295
+ lastHeuristicsTurnId.delete(sessionID);
5296
+ restoredRows.forget(sessionID);
5297
+ if (nativeFoldReplay)
5298
+ await nativeFoldReplay.forget(sessionID);
5299
+ else
5300
+ await forgetNativeFoldProvenance(context.storage, sessionID);
5301
+ generateReplay.forget(sessionID);
5302
+ systemPromptRefreshSessions.delete(sessionID);
5303
+ systemPrompt?.clearSession(sessionID);
5304
+ tagger.cleanup(sessionID);
5305
+ continue;
5306
+ }
5307
+ if (event.type !== "session.execution.succeeded")
5308
+ continue;
5129
5309
  const model = liveModels.get(sessionID);
5130
- try {
5131
- armLatestThinkingRecoveryFromError({
5132
- db,
5133
- sessionId: sessionID,
5134
- error,
5135
- providerID: model?.providerID,
5136
- modelID: model?.modelID
5310
+ if (model) {
5311
+ await recordUsage({
5312
+ sessionID,
5313
+ model: { providerID: model.providerID, id: model.modelID }
5137
5314
  });
5138
- } catch (armError) {
5139
- log2("[magic-context] v2 latest-thinking recovery arm failed", armError);
5315
+ if (!compactionOff && typeof await nativeFoldReplay?.baseline(sessionID) === "string")
5316
+ hostFolds?.idle(sessionID);
5140
5317
  }
5318
+ } catch (error) {
5319
+ log2(`[magic-context] v2 event handler failed (type=${event.type ?? "unknown"}, session=${event.data?.sessionID ?? "none"})`, error);
5141
5320
  }
5142
- continue;
5143
- }
5144
- if (event.type === "session.deleted") {
5145
- clearLkgMeasuredRequest(sessionID);
5146
- deletedSessions.add(sessionID);
5147
- transform?.clearSessionLogState(sessionID);
5148
- if (db) {
5149
- markSessionCleanupPending(db, sessionID);
5150
- clearSession(db, sessionID);
5151
- }
5152
- rawProviders.get(sessionID)?.();
5153
- rawProviders.delete(sessionID);
5154
- usage.delete(sessionID);
5155
- hiddenSessionErrors.delete(sessionID);
5156
- storageNoticeBySession.delete(sessionID);
5157
- liveModels.delete(sessionID);
5158
- variants.delete(sessionID);
5159
- agents.delete(sessionID);
5160
- channel1.delete(sessionID);
5161
- commitSeenLastPass.delete(sessionID);
5162
- clearEmbedSessionState(sessionID);
5163
- historyRefreshSessions.delete(sessionID);
5164
- clearPendingMaterialization(pendingMaterializationSessions, sessionID);
5165
- lastHeuristicsTurnId.delete(sessionID);
5166
- restoredRows.forget(sessionID);
5167
- await nativeFoldReplay?.forget(sessionID);
5168
- generateReplay.forget(sessionID);
5169
- systemPromptRefreshSessions.delete(sessionID);
5170
- systemPrompt?.clearSession(sessionID);
5171
- tagger.cleanup(sessionID);
5172
- continue;
5173
- }
5174
- if (event.type !== "session.execution.succeeded")
5175
- continue;
5176
- const model = liveModels.get(sessionID);
5177
- if (model) {
5178
- await recordUsage({
5179
- sessionID,
5180
- model: { providerID: model.providerID, id: model.modelID }
5181
- });
5182
- if (!compactionOff && typeof await nativeFoldReplay?.baseline(sessionID) === "string")
5183
- hostFolds?.idle(sessionID);
5184
5321
  }
5322
+ } catch (error) {
5323
+ if (!usageController.signal.aborted)
5324
+ log2("[magic-context] v2 usage subscription failed", error);
5325
+ }
5326
+ if (usageController.signal.aborted)
5327
+ break;
5328
+ if (Date.now() - subscribedAt >= 30000)
5329
+ retry = 0;
5330
+ const ceiling = Math.min(30000, 250 * 2 ** retry);
5331
+ retry = Math.min(retry + 1, 7);
5332
+ try {
5333
+ await delay(ceiling * (0.5 + Math.random() * 0.5), undefined, {
5334
+ signal: usageController.signal
5335
+ });
5336
+ } catch (error) {
5337
+ if (!usageController.signal.aborted)
5338
+ throw error;
5185
5339
  }
5186
- } catch (error) {
5187
- if (!usageController.signal.aborted)
5188
- log2("[magic-context] v2 usage subscription failed", error);
5189
5340
  }
5190
5341
  })();
5191
5342
  const materialize = (draft) => {
@@ -5458,6 +5609,7 @@ async function registerContext(context) {
5458
5609
  compactionOff,
5459
5610
  storeGeneration: "v2",
5460
5611
  normalizeRestoredAssistantText: stripCopiedTagNotation,
5612
+ refreshSourceContents: (sessionID) => nativeFoldReplay?.needsHeadRebuild(sessionID) ?? false,
5461
5613
  hostCleanupCompactionMarkers: () => ({
5462
5614
  verified: true,
5463
5615
  removedLineages: 0,
@@ -5546,12 +5698,13 @@ async function registerContext(context) {
5546
5698
  historyRefreshSessions.add(draft.sessionID);
5547
5699
  requestPendingMaterialization(pendingMaterializationSessions, draft.sessionID, "boundary_repair");
5548
5700
  }
5549
- const incoming = cut && draft.messages.find((message) => message.id === cut.id);
5701
+ const localCut = cut && isLocalCheckpoint(cut) ? cut : undefined;
5702
+ const incoming = localCut && draft.messages.find((message) => message.id === localCut.id);
5550
5703
  postFold = cut !== undefined;
5551
- if (cut && !incoming)
5704
+ if (localCut && !incoming)
5552
5705
  throw new Error("The host checkpoint disappeared from the context draft");
5553
5706
  let nativeRestored;
5554
- if (cut && nativeFoldReplay && isLocalCheckpoint(cut)) {
5707
+ if (cut && nativeFoldReplay && await nativeFoldReplay.admits(draft.sessionID, cut, reader)) {
5555
5708
  try {
5556
5709
  nativeRestored = await nativeFoldReplay.restore(draft.sessionID, cut, `${draft.model.providerID}/${draft.model.id}`, { bounded: !rustModeModuleClient });
5557
5710
  } catch (error) {
@@ -5560,7 +5713,11 @@ async function registerContext(context) {
5560
5713
  nativeRestored = await nativeFoldReplay.restoreRead(draft.sessionID, cut, draft.model);
5561
5714
  }
5562
5715
  }
5563
- if (nativeRestored && nativeFoldReplay?.sourceChanged(draft.sessionID)) {
5716
+ if (cut && nativeFoldReplay?.sourceChanged(draft.sessionID)) {
5717
+ if (db && !rustModeModuleClient && nativeFoldReplay.needsHeadRebuild(draft.sessionID))
5718
+ clearCachedM0(db, draft.sessionID);
5719
+ if (nativeFoldReplay.needsHeadRebuild(draft.sessionID))
5720
+ restoredRows.forget(draft.sessionID);
5564
5721
  historyRefreshSessions.add(draft.sessionID);
5565
5722
  requestPendingMaterialization(pendingMaterializationSessions, draft.sessionID, "host_history_change");
5566
5723
  }
@@ -5571,25 +5728,27 @@ async function registerContext(context) {
5571
5728
  return !id || !present.has(id);
5572
5729
  });
5573
5730
  draft.messages.splice(0, draft.messages.length, ...hidden, ...draft.messages.filter((message) => message !== incoming));
5574
- } else if (cut && incoming) {
5575
- const identity = await folds.observe({
5576
- sessionID: draft.sessionID,
5577
- cutSeq: cut.seq,
5578
- summary: cut.data.summary ?? "",
5579
- rendered: incoming,
5580
- onHard: (reason) => {
5581
- sessionLog2(draft.sessionID, `HARD reason=${reason}`);
5582
- materialize(draft);
5583
- requestPendingMaterialization(pendingMaterializationSessions, draft.sessionID, "host_compaction");
5584
- }
5585
- });
5586
- checkpoint = structuredClone(identity.rendered ?? incoming);
5587
- submitted = identity.rendered ? identity.renderedSummary ?? identity.submitted : cut.data.summary ?? "";
5731
+ } else if (localCut && cut && incoming) {
5732
+ if (!nativeFoldReplay) {
5733
+ const identity = await folds.observe({
5734
+ sessionID: draft.sessionID,
5735
+ cutSeq: cut.seq,
5736
+ summary: cut.data.summary ?? "",
5737
+ rendered: incoming,
5738
+ onHard: (reason) => {
5739
+ sessionLog2(draft.sessionID, `HARD reason=${reason}`);
5740
+ materialize(draft);
5741
+ requestPendingMaterialization(pendingMaterializationSessions, draft.sessionID, "host_compaction");
5742
+ }
5743
+ });
5744
+ checkpoint = structuredClone(identity.rendered ?? incoming);
5745
+ submitted = identity.rendered ? identity.renderedSummary ?? identity.submitted : cut.data.summary ?? "";
5746
+ }
5588
5747
  const moduleBoundaryID = rustModeModuleClient ? getPersistedCompactionMarkerState(db, draft.sessionID)?.boundaryMessageId ?? null : null;
5589
5748
  const moduleBoundarySeq = moduleBoundaryID ? reader.sequenceForId(draft.sessionID, moduleBoundaryID) : undefined;
5590
5749
  const boundaryID = db.prepare("SELECT cached_m0_last_baseline_end_message_id AS id FROM session_meta WHERE session_id = ?").get(draft.sessionID)?.id ?? (boundaryRepair?.kind === "repaired" || boundaryRepair?.kind === "baseline-reset" ? boundaryRepair.anchorEndMessageId : null);
5591
5750
  const servedBoundary = boundaryID ? servedBoundaryRow(reader, draft.sessionID, boundaryID) : null;
5592
- const boundary = (moduleBoundarySeq !== undefined ? moduleBoundarySeq - 1 : undefined) ?? servedBoundary?.seq ?? reader.sequenceForId(draft.sessionID, boundaryID) ?? (reader.earliestSequence(draft.sessionID) ?? 0) - 1;
5751
+ const boundary = (nativeFoldReplay?.sourceChanged(draft.sessionID) && !rustModeModuleClient ? (reader.earliestSequence(draft.sessionID) ?? 0) - 1 : undefined) ?? (moduleBoundarySeq !== undefined ? moduleBoundarySeq - 1 : undefined) ?? servedBoundary?.seq ?? reader.sequenceForId(draft.sessionID, boundaryID) ?? (reader.earliestSequence(draft.sessionID) ?? 0) - 1;
5593
5752
  if (moduleBoundarySeq !== undefined)
5594
5753
  sessionLog2(draft.sessionID, `v2 restore: from the module boundary ${moduleBoundaryID} to the host checkpoint`);
5595
5754
  const present = new Set(draft.messages.map((message) => message.id));
@@ -5597,7 +5756,7 @@ async function registerContext(context) {
5597
5756
  asset: hostMediaAsset,
5598
5757
  unavailable: (detail) => sessionLog2(draft.sessionID, `v2 restore: attachment replaced by a note row=${detail.rowID} name=${JSON.stringify(detail.name ?? null)} mediaType=${detail.mediaType} reason=${JSON.stringify(detail.reason)}`)
5599
5758
  } : undefined));
5600
- draft.messages.splice(0, draft.messages.length, ...restored, ...draft.messages.filter((message) => message !== incoming));
5759
+ draft.messages.splice(0, draft.messages.length, ...rustModeModuleClient ? [] : coveredInstructionRows(reader, draft.sessionID, Math.min(boundary, cut.seq), draft.model), ...restored, ...draft.messages.filter((message) => message !== incoming));
5601
5760
  }
5602
5761
  if (config.temporal_awareness === true)
5603
5762
  messageTimes = reader.messageTimes(draft.sessionID, draft.messages.flatMap((message) => message.id ? [message.id] : []));
@@ -5840,13 +5999,13 @@ ${baseline}
5840
5999
  }, 0));
5841
6000
  return {
5842
6001
  async dispose() {
6002
+ usageController.abort();
5843
6003
  await hiddenCompletionExecutor?.dispose();
6004
+ await usageDone;
5844
6005
  rpcStopped = true;
5845
6006
  rpcServer.stop();
5846
6007
  transform?.disposeRust();
5847
6008
  tools?.dispose();
5848
- usageController.abort();
5849
- await usageDone;
5850
6009
  deletedSessions.clear();
5851
6010
  await dreamTrigger?.dispose();
5852
6011
  await maintenanceTimer?.dispose();