@cortexkit/opencode-magic-context 0.49.18 → 0.49.20

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 (296) hide show
  1. package/dist/auto-search-worker.js +53 -10
  2. package/dist/chunk-embedding-write-worker.js +30 -23
  3. package/dist/{compaction-marker-candidates-n4krhat4.js → compaction-marker-candidates-b2q30cft.js} +3 -3
  4. package/dist/compaction-marker-candidates-worker.js +2 -2
  5. package/dist/compartment-chunk-embedding-va090as0.js +65 -0
  6. package/dist/config/schema/magic-context.d.ts +6 -6
  7. package/dist/{conflict-warning-hook-4pmz879v.js → conflict-warning-hook-frp3z2wk.js} +9 -8
  8. package/dist/{context-m897gfp9.js → context-mkece1db.js} +460 -135
  9. package/dist/{derive-budgets-zn7yzd2d.js → derive-budgets-pqybnx09.js} +2 -2
  10. package/dist/embedding-backfill-gy3p78py.js +25 -0
  11. package/dist/embedding-worker-process.js +2 -2
  12. package/dist/embedding-worker.js +5 -5
  13. package/dist/features/magic-context/chunk-embedding-writer.d.ts.map +1 -1
  14. package/dist/features/magic-context/compartment-chunk-embedding.d.ts +44 -1
  15. package/dist/features/magic-context/compartment-chunk-embedding.d.ts.map +1 -1
  16. package/dist/features/magic-context/dreamer/classify.d.ts +3 -0
  17. package/dist/features/magic-context/dreamer/classify.d.ts.map +1 -1
  18. package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts +11 -0
  19. package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts.map +1 -1
  20. package/dist/features/magic-context/dreamer/map-memories.d.ts +3 -0
  21. package/dist/features/magic-context/dreamer/map-memories.d.ts.map +1 -1
  22. package/dist/features/magic-context/dreamer/task-config.d.ts.map +1 -1
  23. package/dist/features/magic-context/dreamer/task-scheduler.d.ts +2 -0
  24. package/dist/features/magic-context/dreamer/task-scheduler.d.ts.map +1 -1
  25. package/dist/features/magic-context/dreamer/verify.d.ts +3 -0
  26. package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
  27. package/dist/features/magic-context/memory/embedding-identity.d.ts.map +1 -1
  28. package/dist/features/magic-context/memory/embedding-local.d.ts +1 -0
  29. package/dist/features/magic-context/memory/embedding-local.d.ts.map +1 -1
  30. package/dist/features/magic-context/memory/local-embedding-pooling.d.ts +22 -0
  31. package/dist/features/magic-context/memory/local-embedding-pooling.d.ts.map +1 -0
  32. package/dist/features/magic-context/message-index-async.d.ts.map +1 -1
  33. package/dist/features/magic-context/message-index.d.ts +2 -0
  34. package/dist/features/magic-context/message-index.d.ts.map +1 -1
  35. package/dist/features/magic-context/migrations.d.ts.map +1 -1
  36. package/dist/features/magic-context/mural/compress-cues.d.ts.map +1 -1
  37. package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
  38. package/dist/features/magic-context/search.d.ts +27 -0
  39. package/dist/features/magic-context/search.d.ts.map +1 -1
  40. package/dist/features/magic-context/smart-notes/compiler.d.ts.map +1 -1
  41. package/dist/features/magic-context/storage-clone.d.ts.map +1 -1
  42. package/dist/features/magic-context/storage-meta-persisted.d.ts +14 -0
  43. package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
  44. package/dist/features/magic-context/subagent-token-capture.d.ts +20 -0
  45. package/dist/features/magic-context/subagent-token-capture.d.ts.map +1 -1
  46. package/dist/features/magic-context/user-memory/review-user-memories.d.ts.map +1 -1
  47. package/dist/{history-owner-xp3pngv7.js → history-owner-36wp3mkb.js} +2 -2
  48. package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
  49. package/dist/hooks/magic-context/auto-embed-session.d.ts.map +1 -1
  50. package/dist/hooks/magic-context/auto-search-hint.d.ts +7 -1
  51. package/dist/hooks/magic-context/auto-search-hint.d.ts.map +1 -1
  52. package/dist/hooks/magic-context/auto-search-runner.d.ts.map +1 -1
  53. package/dist/hooks/magic-context/auto-search-worker-client.d.ts +33 -6
  54. package/dist/hooks/magic-context/auto-search-worker-client.d.ts.map +1 -1
  55. package/dist/hooks/magic-context/auto-search-worker-evaluation.fixture.d.ts +2 -0
  56. package/dist/hooks/magic-context/auto-search-worker-evaluation.fixture.d.ts.map +1 -0
  57. package/dist/hooks/magic-context/cache-busting-signals.d.ts +5 -2
  58. package/dist/hooks/magic-context/cache-busting-signals.d.ts.map +1 -1
  59. package/dist/hooks/magic-context/channel2-delivery.d.ts.map +1 -1
  60. package/dist/hooks/magic-context/compartment-runner-historian.d.ts.map +1 -1
  61. package/dist/hooks/magic-context/compartment-runner-types.d.ts +5 -0
  62. package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -1
  63. package/dist/hooks/magic-context/compartment-trigger.d.ts +1 -1
  64. package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
  65. package/dist/hooks/magic-context/diagnostic-log-state.d.ts +4 -0
  66. package/dist/hooks/magic-context/diagnostic-log-state.d.ts.map +1 -0
  67. package/dist/hooks/magic-context/execute-reclaim.d.ts +35 -0
  68. package/dist/hooks/magic-context/execute-reclaim.d.ts.map +1 -0
  69. package/dist/hooks/magic-context/hook-handlers.d.ts.map +1 -1
  70. package/dist/hooks/magic-context/hook.d.ts +1 -3
  71. package/dist/hooks/magic-context/hook.d.ts.map +1 -1
  72. package/dist/hooks/magic-context/latest-assistant-turn.d.ts +8 -0
  73. package/dist/hooks/magic-context/latest-assistant-turn.d.ts.map +1 -1
  74. package/dist/hooks/magic-context/lkg-recovery-fence.d.ts +5 -0
  75. package/dist/hooks/magic-context/lkg-recovery-fence.d.ts.map +1 -1
  76. package/dist/hooks/magic-context/lkg-recovery-prefix.d.ts +13 -0
  77. package/dist/hooks/magic-context/lkg-recovery-prefix.d.ts.map +1 -1
  78. package/dist/hooks/magic-context/nudge-evaluation-log.d.ts +3 -0
  79. package/dist/hooks/magic-context/nudge-evaluation-log.d.ts.map +1 -0
  80. package/dist/hooks/magic-context/pending-drop-eligibility.d.ts.map +1 -1
  81. package/dist/hooks/magic-context/protected-tail-boundary.d.ts +4 -0
  82. package/dist/hooks/magic-context/protected-tail-boundary.d.ts.map +1 -1
  83. package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts.map +1 -1
  84. package/dist/hooks/magic-context/system-date-refresh.d.ts +15 -2
  85. package/dist/hooks/magic-context/system-date-refresh.d.ts.map +1 -1
  86. package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
  87. package/dist/hooks/magic-context/system-prompt-sticky-date.d.ts +10 -0
  88. package/dist/hooks/magic-context/system-prompt-sticky-date.d.ts.map +1 -0
  89. package/dist/hooks/magic-context/tag-messages.d.ts +2 -0
  90. package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
  91. package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -1
  92. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +23 -6
  93. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  94. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  95. package/dist/{index-bjcnntmz.js → index-0wthn7fp.js} +468 -18
  96. package/dist/{index-kq82mtg0.js → index-11zf2wwc.js} +3 -3
  97. package/dist/{index-b5vqckbw.js → index-153r2q6z.js} +314 -127
  98. package/dist/{index-v8awdgvd.js → index-1pefp8ar.js} +5 -5
  99. package/dist/{v2/server-beht37jy.js → index-1zx2pa5d.js} +1 -1
  100. package/dist/{index-ze7mvk54.js → index-2yhtnfcf.js} +75 -57
  101. package/dist/{index-cf74k5ak.js → index-305y133n.js} +4 -4
  102. package/dist/{index-s734jcsr.js → index-35qc6606.js} +9 -3
  103. package/dist/{index-x4njr8df.js → index-48stjd56.js} +105 -19
  104. package/dist/{index-24jbw52d.js → index-4n7w9rad.js} +6 -6
  105. package/dist/{index-kee4kn5j.js → index-4pnsgvfk.js} +1 -1
  106. package/dist/{v2/server-8cd2j99z.js → index-5kym00ag.js} +32 -13
  107. package/dist/{index-4s3t0nd0.js → index-616rsjrv.js} +2 -2
  108. package/dist/{index-e4xv8890.js → index-67nyj0gy.js} +507 -210
  109. package/dist/{index-6x57ar45.js → index-adk2z5d8.js} +3 -3
  110. package/dist/{index-c5pytzne.js → index-b88dwwrh.js} +1 -1
  111. package/dist/{index-rr2bb45z.js → index-c4b76d4t.js} +2 -2
  112. package/dist/{index-nj7yykkx.js → index-c7phnbvk.js} +1 -1
  113. package/dist/index-cpjk5jd2.js +82 -0
  114. package/dist/{index-6s5941tm.js → index-d6rp4dxh.js} +5 -5
  115. package/dist/{index-s7j8tvhv.js → index-dc8hy95c.js} +69 -17
  116. package/dist/{index-j75v2476.js → index-h7tgn49j.js} +12 -15
  117. package/dist/{index-ke416mdc.js → index-j76ah6d7.js} +2 -2
  118. package/dist/{index-r4nkrs05.js → index-jfh3cktr.js} +4 -4
  119. package/dist/{index-a6mc0v4d.js → index-jmycsey7.js} +3 -3
  120. package/dist/{index-24fezq97.js → index-jr5na10t.js} +4 -4
  121. package/dist/{index-s74zqahq.js → index-kc9pn495.js} +4 -4
  122. package/dist/{index-p5y3k4g7.js → index-nda0zgna.js} +2 -1
  123. package/dist/{index-jn12fvvh.js → index-neb2jaed.js} +3 -3
  124. package/dist/{index-qn7xstt2.js → index-pnjwa6qa.js} +6 -7
  125. package/dist/{index-fgncb0ng.js → index-rmd0069m.js} +11 -11
  126. package/dist/{index-y9f76s3f.js → index-rrv26qjz.js} +1 -1
  127. package/dist/{index-v10f1rjv.js → index-spwjbkc7.js} +1 -1
  128. package/dist/{index-k29z4aqh.js → index-t5pck3ss.js} +1 -1
  129. package/dist/{index-936py2wm.js → index-t7hx3qcb.js} +361 -113
  130. package/dist/{index-s1ex9y6p.js → index-v7r4td4c.js} +464 -79
  131. package/dist/{index-2vxtcb95.js → index-vkc1ca9p.js} +2 -2
  132. package/dist/{index-rmwykbbb.js → index-x4k3f4mf.js} +33 -10
  133. package/dist/{index-bp5083x2.js → index-x9k3mqrf.js} +1 -1
  134. package/dist/{index-n37sebck.js → index-y4a3nhtk.js} +1 -1
  135. package/dist/index.js +57 -50
  136. package/dist/{logger-jm3sqqzr.js → logger-94kew5wm.js} +1 -1
  137. package/dist/{message-fts-rowid-map-17s0dfn4.js → message-fts-rowid-map-22tevnnj.js} +6 -5
  138. package/dist/{message-index-66jv6fh4.js → message-index-5qxcz6h7.js} +16 -15
  139. package/dist/{message-index-bounded-n1frdn85.js → message-index-bounded-n0m0t7tv.js} +16 -15
  140. package/dist/{message-time-backfill-73mmm76q.js → message-time-backfill-0myx7fz3.js} +3 -3
  141. package/dist/migration-worker.js +13 -12
  142. package/dist/{model-resolution-nx97z3x7.js → model-resolution-280gmqvd.js} +1 -1
  143. package/dist/plugin/embedding-bootstrap.d.ts +3 -1
  144. package/dist/plugin/embedding-bootstrap.d.ts.map +1 -1
  145. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  146. package/dist/plugin/messages-transform.d.ts.map +1 -1
  147. package/dist/plugin/rpc-handlers.d.ts +8 -0
  148. package/dist/plugin/rpc-handlers.d.ts.map +1 -1
  149. package/dist/plugin/subagent-tool-policy.d.ts +9 -0
  150. package/dist/plugin/subagent-tool-policy.d.ts.map +1 -1
  151. package/dist/plugin/tool-registry.d.ts.map +1 -1
  152. package/dist/{project-embedding-registry-z74mhqkf.js → project-embedding-registry-s2pqgec9.js} +13 -12
  153. package/dist/raw-ordinal-warmup-worker.js +136 -101
  154. package/dist/{read-session-chunk-v06g3vka.js → read-session-chunk-0a8vdyqp.js} +11 -10
  155. package/dist/{read-session-raw-rsc8c7qy.js → read-session-raw-y5cszf0b.js} +4 -3
  156. package/dist/recomp-orchestrator-61vyha9j.js +62 -0
  157. package/dist/{safe-notification-target-1szv1k5k.js → safe-notification-target-mkr9yzvr.js} +2 -2
  158. package/dist/{search-archive-4d53y23e.js → search-archive-8q9s49p5.js} +12 -11
  159. package/dist/{search-nkf271d4.js → search-v1y9ejws.js} +25 -24
  160. package/dist/{send-session-notification-6ve0e8p4.js → send-session-notification-0k6qzydk.js} +7 -6
  161. package/dist/shared/logger.d.ts.map +1 -1
  162. package/dist/shared/model-resolution.d.ts +2 -0
  163. package/dist/shared/model-resolution.d.ts.map +1 -1
  164. package/dist/shared/model-suggestion-retry.d.ts +30 -1
  165. package/dist/shared/model-suggestion-retry.d.ts.map +1 -1
  166. package/dist/shared/prompt-async-transport.d.ts +3 -0
  167. package/dist/shared/prompt-async-transport.d.ts.map +1 -1
  168. package/dist/shared/rpc-types.d.ts +7 -0
  169. package/dist/shared/rpc-types.d.ts.map +1 -1
  170. package/dist/shared/sqlite.d.ts +1 -1
  171. package/dist/shared/sqlite.d.ts.map +1 -1
  172. package/dist/shared/subagent-runner.d.ts +2 -0
  173. package/dist/shared/subagent-runner.d.ts.map +1 -1
  174. package/dist/shared/worker-shutdown.d.ts +68 -0
  175. package/dist/shared/worker-shutdown.d.ts.map +1 -0
  176. package/dist/shared/worker-shutdown.fixture.d.ts +2 -0
  177. package/dist/shared/worker-shutdown.fixture.d.ts.map +1 -0
  178. package/dist/{sqlite-zf72c52d.js → sqlite-1rpvw2rj.js} +1 -1
  179. package/dist/{storage-memory-y3qmy00r.js → storage-memory-nm7v82mj.js} +2 -2
  180. package/dist/{storage-tags-r7k9tjcv.js → storage-tags-r6nk29n4.js} +5 -5
  181. package/dist/{task-config-x3qmayd2.js → task-config-t6bpyka7.js} +2 -2
  182. package/dist/tools/ctx-expand/rust-mode-tag.test-support.d.ts +15 -0
  183. package/dist/tools/ctx-expand/rust-mode-tag.test-support.d.ts.map +1 -0
  184. package/dist/tools/ctx-expand/tools.d.ts +11 -0
  185. package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
  186. package/dist/tools/ctx-search/tools.d.ts.map +1 -1
  187. package/dist/{transform-postprocess-phase-zpgav0h7.js → transform-postprocess-phase-vtrgb7m6.js} +34 -31
  188. package/dist/v2/auto-search-worker.js +53 -10
  189. package/dist/v2/chunk-embedding-write-worker.js +30 -23
  190. package/dist/v2/{compaction-marker-candidates-ebx3388k.js → compaction-marker-candidates-cfab70cs.js} +3 -3
  191. package/dist/v2/compaction-marker-candidates-worker.js +2 -2
  192. package/dist/v2/compartment-chunk-embedding-nbdqx1td.js +64 -0
  193. package/dist/v2/{context-f2xh7ba4.js → context-cc33tv2z.js} +1259 -404
  194. package/dist/v2/{derive-budgets-2zh4gm2c.js → derive-budgets-knf763tt.js} +3 -3
  195. package/dist/v2/embedding-backfill-yxv2h5mc.js +24 -0
  196. package/dist/v2/embedding-worker-process.js +2 -2
  197. package/dist/v2/embedding-worker.js +5 -5
  198. package/dist/v2/hidden-child-record.d.ts +2 -0
  199. package/dist/v2/hidden-child-record.d.ts.map +1 -1
  200. package/dist/v2/hidden-completion.d.ts +2 -0
  201. package/dist/v2/hidden-completion.d.ts.map +1 -1
  202. package/dist/v2/hidden-model-activity.d.ts +7 -0
  203. package/dist/v2/hidden-model-activity.d.ts.map +1 -0
  204. package/dist/v2/{history-owner-42e16w0n.js → history-owner-ad0crnrn.js} +2 -2
  205. package/dist/v2/hooks/context.d.ts.map +1 -1
  206. package/dist/v2/hooks/generate.d.ts +36 -1
  207. package/dist/v2/hooks/generate.d.ts.map +1 -1
  208. package/dist/v2/hooks/lkg-system.d.ts +35 -4
  209. package/dist/v2/hooks/lkg-system.d.ts.map +1 -1
  210. package/dist/v2/hooks/payload.d.ts +16 -1
  211. package/dist/v2/hooks/payload.d.ts.map +1 -1
  212. package/dist/v2/hooks/tools.d.ts.map +1 -1
  213. package/dist/v2/{logger-7qt02bnb.js → logger-p34mjtja.js} +1 -1
  214. package/dist/v2/{message-fts-rowid-map-wfx67gfd.js → message-fts-rowid-map-dg12wymk.js} +6 -5
  215. package/dist/v2/{message-index-bounded-w3hfm29z.js → message-index-bounded-f4e01xk0.js} +16 -15
  216. package/dist/v2/{message-index-48f7hw7a.js → message-index-ydzrp6y6.js} +16 -15
  217. package/dist/v2/{message-time-backfill-04t0km1z.js → message-time-backfill-ddh8n9gy.js} +3 -3
  218. package/dist/v2/migration-worker.js +13 -12
  219. package/dist/v2/{model-resolution-nx97z3x7.js → model-resolution-280gmqvd.js} +1 -1
  220. package/dist/v2/{project-embedding-registry-gnkj56xp.js → project-embedding-registry-deza9ksw.js} +13 -12
  221. package/dist/v2/raw-ordinal-warmup-worker.js +136 -101
  222. package/dist/v2/{read-session-chunk-zpgmxwte.js → read-session-chunk-8cxfagky.js} +11 -10
  223. package/dist/v2/{read-session-raw-yaegtjzh.js → read-session-raw-1nrrecvx.js} +4 -3
  224. package/dist/v2/recomp-orchestrator-47m4hv5g.js +61 -0
  225. package/dist/v2/{safe-notification-target-qg7n2s77.js → safe-notification-target-khnzg57c.js} +2 -2
  226. package/dist/v2/{search-archive-vv48s2aa.js → search-archive-e80cvc09.js} +12 -11
  227. package/dist/v2/{search-kza414f0.js → search-fjz746zr.js} +25 -24
  228. package/dist/v2/{send-session-notification-3pxn658x.js → send-session-notification-nwvrv34d.js} +7 -6
  229. package/dist/v2/{server-8by8qfec.js → server-0epqaxhd.js} +75 -57
  230. package/dist/v2/{server-pwv4ezb0.js → server-168pb207.js} +1 -1
  231. package/dist/v2/{server-h0410h0v.js → server-1bw1wcbp.js} +1 -1
  232. package/dist/{index-beht37jy.js → v2/server-1zx2pa5d.js} +1 -1
  233. package/dist/v2/{server-a9xqj88f.js → server-230fnbws.js} +4 -4
  234. package/dist/v2/{server-tbe1femw.js → server-29qp8nz4.js} +1 -1
  235. package/dist/v2/{server-tgnbmwah.js → server-3mz2qh5a.js} +1 -1
  236. package/dist/v2/{server-hy3d3vsx.js → server-4nw4fqhr.js} +2 -2
  237. package/dist/v2/{server-qv7f0hhe.js → server-4sxjs6hn.js} +5 -5
  238. package/dist/v2/{server-34kwfsr4.js → server-53eh1r8r.js} +2 -2
  239. package/dist/v2/{server-xj136kt8.js → server-55rgxfrw.js} +9 -3
  240. package/dist/v2/{server-nj659894.js → server-5arr9ecn.js} +2 -2
  241. package/dist/{index-8cd2j99z.js → v2/server-5kym00ag.js} +32 -13
  242. package/dist/v2/{server-2ehj0bw7.js → server-63fqdghs.js} +106 -20
  243. package/dist/v2/{server-f2xf5gcb.js → server-6495nmn9.js} +12 -15
  244. package/dist/v2/{server-qd11g795.js → server-92g7d776.js} +2 -1
  245. package/dist/v2/{server-gpvay0xz.js → server-9x0kmta4.js} +6 -7
  246. package/dist/v2/{server-27gq4mfz.js → server-a3dwxfgd.js} +4 -4
  247. package/dist/v2/{server-6tmj0s7j.js → server-af2pght7.js} +3 -3
  248. package/dist/v2/{server-1wy7b9de.js → server-br1x0tev.js} +3 -3
  249. package/dist/v2/{server-n1prf1g6.js → server-brj8j2gk.js} +2 -2
  250. package/dist/v2/{server-bfpda1tb.js → server-c7dxxsj7.js} +466 -81
  251. package/dist/v2/server-cpjk5jd2.js +82 -0
  252. package/dist/v2/{server-g3qma5c0.js → server-dj7tz4ph.js} +2 -2
  253. package/dist/v2/{server-xhab8jx8.js → server-ej96a39v.js} +33 -10
  254. package/dist/v2/{server-6pmqg9m4.js → server-gyy4k6mf.js} +1 -1
  255. package/dist/v2/{server-a2eqhkxr.js → server-hqzyq8n4.js} +11 -11
  256. package/dist/v2/{server-h1v0pyxb.js → server-j4jnp9b5.js} +468 -18
  257. package/dist/v2/{server-da07v4xp.js → server-k3t06fxr.js} +1 -1
  258. package/dist/v2/{server-1nyybqan.js → server-m91f9m5s.js} +69 -17
  259. package/dist/v2/{server-rmygf5pn.js → server-ne8arh8t.js} +2 -2
  260. package/dist/v2/{server-my7k4eds.js → server-vn2nwcv6.js} +5 -5
  261. package/dist/v2/{server-46neh5fa.js → server-wyawsa88.js} +314 -127
  262. package/dist/v2/{server-zzkj2fch.js → server-xsryvyf6.js} +4 -4
  263. package/dist/v2/{server-n37sebck.js → server-y4a3nhtk.js} +1 -1
  264. package/dist/v2/{server-d04vrx0j.js → server-ygtykank.js} +2 -2
  265. package/dist/v2/server.js +6 -6
  266. package/dist/v2/{sqlite-zf72c52d.js → sqlite-1rpvw2rj.js} +1 -1
  267. package/dist/v2/{storage-memory-y3qmy00r.js → storage-memory-nm7v82mj.js} +2 -2
  268. package/dist/v2/{storage-tags-3wdb8zph.js → storage-tags-ss08kj5r.js} +5 -5
  269. package/dist/v2/store-reader.d.ts +8 -0
  270. package/dist/v2/store-reader.d.ts.map +1 -1
  271. package/dist/v2/{task-config-nvz8mapa.js → task-config-7md27rx8.js} +2 -2
  272. package/dist/v2/{wrapup-orchestrator-psqz7yh0.js → wrapup-orchestrator-639whfhq.js} +32 -31
  273. package/dist/wrapup-orchestrator-mnvt2g8m.js +49 -0
  274. package/package.json +1 -1
  275. package/src/config/index.test.ts +28 -6
  276. package/src/shared/logger.test.ts +42 -1
  277. package/src/shared/logger.ts +11 -13
  278. package/src/shared/model-resolution.test.ts +67 -12
  279. package/src/shared/model-resolution.ts +43 -16
  280. package/src/shared/model-suggestion-retry.test.ts +166 -0
  281. package/src/shared/model-suggestion-retry.ts +165 -14
  282. package/src/shared/prompt-async-transport.test.ts +107 -0
  283. package/src/shared/prompt-async-transport.ts +86 -3
  284. package/src/shared/rpc-types.ts +7 -0
  285. package/src/shared/sqlite-busy-budget-review.test.ts +6 -1
  286. package/src/shared/sqlite.ts +4 -2
  287. package/src/shared/subagent-runner.ts +2 -0
  288. package/src/shared/worker-shutdown-fence.test.ts +87 -0
  289. package/src/shared/worker-shutdown.fixture.ts +25 -0
  290. package/src/shared/worker-shutdown.test.ts +127 -0
  291. package/src/shared/worker-shutdown.ts +160 -0
  292. package/dist/embedding-backfill-fmz50tsy.js +0 -24
  293. package/dist/recomp-orchestrator-ghpk2dtq.js +0 -61
  294. package/dist/v2/embedding-backfill-7c7yr69y.js +0 -23
  295. package/dist/v2/recomp-orchestrator-4vfxej9t.js +0 -60
  296. package/dist/wrapup-orchestrator-s9zc5b00.js +0 -48
@@ -4,13 +4,13 @@ import {
4
4
  withSqliteBackgroundWriter2,
5
5
  withoutSqliteTransformPass2,
6
6
  isTransientSqliteError2
7
- } from "./server-beht37jy.js";
7
+ } from "./server-1zx2pa5d.js";
8
8
  import {
9
9
  DEFAULT_LOCAL_EMBEDDING_MODEL
10
10
  } from "./server-271qxsf5.js";
11
11
  import {
12
12
  setBootQuietPeriodForTests
13
- } from "./server-rmygf5pn.js";
13
+ } from "./server-ne8arh8t.js";
14
14
  import {
15
15
  isEmbeddingHostBusy2
16
16
  } from "./server-qt1qqasc.js";
@@ -20,34 +20,37 @@ import {
20
20
  import {
21
21
  sanitizeDiagnosticText,
22
22
  log2
23
- } from "./server-f2xf5gcb.js";
23
+ } from "./server-6495nmn9.js";
24
+ import {
25
+ createWorkerShutdown
26
+ } from "./server-cpjk5jd2.js";
24
27
  import {
25
28
  SYNAPSE_DEFAULT_MODEL,
26
29
  isSynapseEmbeddingTruncated,
27
30
  getSynapseBatchRequestKey,
28
31
  SynapseEmbeddingProvider
29
- } from "./server-6tmj0s7j.js";
32
+ } from "./server-af2pght7.js";
30
33
  import {
31
34
  estimateTokens
32
- } from "./server-tgnbmwah.js";
35
+ } from "./server-3mz2qh5a.js";
33
36
  import {
34
- DEFAULT_COMPARTMENT_CHUNK_MAX_INPUT_TOKENS,
35
- CHUNK_WINDOW_SAFETY_RATIO,
36
- normalizeCompartmentChunkMaxInputTokens,
37
- buildCanonicalChunkTextFromFts,
38
- buildCompartmentSummaryFallbackText,
39
- chunkCanonicalText,
40
- chunkEmbeddingWindowsAreCurrent,
41
- replaceCompartmentChunkEmbeddings,
42
- loadUnembeddedShadowChunkCandidates,
43
- loadUnembeddedCompartmentChunkCandidatesPolite,
44
- recordChunkEmbedBackoff,
45
- chunkWindowSourceKey,
46
- loadUnembeddedSessionChunkCandidatesPolite,
47
- countSessionCompartmentEmbedCoverage,
48
- countSessionCompartmentEmbedCoveragePolite,
49
- countUnembeddedSessionCompartmentsPolite
50
- } from "./server-46neh5fa.js";
37
+ DEFAULT_COMPARTMENT_CHUNK_MAX_INPUT_TOKENS2,
38
+ CHUNK_WINDOW_SAFETY_RATIO2,
39
+ normalizeCompartmentChunkMaxInputTokens2,
40
+ buildCanonicalChunkTextFromFts2,
41
+ buildCompartmentSummaryFallbackText2,
42
+ chunkCanonicalText2,
43
+ chunkEmbeddingWindowsAreCurrent2,
44
+ replaceCompartmentChunkEmbeddings2,
45
+ loadUnembeddedShadowChunkCandidates2,
46
+ loadUnembeddedCompartmentChunkCandidatesPolite2,
47
+ recordChunkEmbedBackoff2,
48
+ chunkWindowSourceKey2,
49
+ loadUnembeddedSessionChunkCandidatesPolite2,
50
+ countSessionCompartmentEmbedCoverage2,
51
+ countSessionCompartmentEmbedCoveragePolite2,
52
+ countUnembeddedSessionCompartmentsPolite2
53
+ } from "./server-wyawsa88.js";
51
54
  import {
52
55
  acquireGitSweepLease,
53
56
  renewGitSweepLease,
@@ -55,7 +58,7 @@ import {
55
58
  findMisScopedCompartmentChunkEmbeddingIdsForProject,
56
59
  recordSessionProjectIdentity,
57
60
  repairMisScopedCompartmentChunkEmbeddingsForProject
58
- } from "./server-hy3d3vsx.js";
61
+ } from "./server-4nw4fqhr.js";
59
62
  import {
60
63
  saveEmbeddingIfHashMatches,
61
64
  getMemoryEmbedCoverage,
@@ -65,12 +68,15 @@ import {
65
68
  dominantEmbeddingFailure,
66
69
  embeddingModelsMatch,
67
70
  resolveEmbeddingTextPrefixes,
71
+ getCachedLocalEmbeddingPooling,
72
+ logLocalEmbeddingPoolingDecisionOnce,
73
+ logLocalEmbeddingPoolingUnavailableOnce,
68
74
  getEmbeddingProviderIdentity,
69
75
  LocalEmbeddingProvider
70
- } from "./server-h1v0pyxb.js";
76
+ } from "./server-j4jnp9b5.js";
71
77
  import {
72
78
  logSlowWriteTransaction
73
- } from "./server-6pmqg9m4.js";
79
+ } from "./server-gyy4k6mf.js";
74
80
 
75
81
  // src/hooks/magic-context/embed-session-state.ts
76
82
  var embedPauseBySession = new Set;
@@ -202,6 +208,7 @@ function createChunkEmbeddingWriter(db) {
202
208
  const entry = new URL(import.meta.url.endsWith(".ts") ? "./chunk-embedding-write-worker.ts" : "./chunk-embedding-write-worker.js", import.meta.url);
203
209
  const timeout = db.prepare("PRAGMA busy_timeout").get().timeout;
204
210
  const worker = inRootAsyncContext2(() => new Worker(entry, { workerData: { path, harness: getHarness2(), timeout } }));
211
+ const shutdown = createWorkerShutdown(worker, "chunk-embedding-writer", timeout + 2000);
205
212
  let pending;
206
213
  let failure;
207
214
  let deadline;
@@ -232,7 +239,7 @@ function createChunkEmbeddingWriter(db) {
232
239
  pending = { resolve, reject };
233
240
  deadline = inRootAsyncContext2(() => setTimeout(() => {
234
241
  fail(new Error("chunk embedding database operation timed out; coverage will be rechecked"));
235
- worker.terminate();
242
+ shutdown.close();
236
243
  }, 30000));
237
244
  deadline.unref();
238
245
  worker.postMessage(message);
@@ -264,7 +271,7 @@ function createChunkEmbeddingWriter(db) {
264
271
  release: (project, holder) => request({ kind: "release", project, holder }),
265
272
  async close() {
266
273
  clearTimeout(deadline);
267
- await worker.terminate();
274
+ await shutdown.close();
268
275
  }
269
276
  };
270
277
  }
@@ -525,7 +532,7 @@ function responseSlots(items, inputCount) {
525
532
  return slots;
526
533
  }
527
534
  function capEmbeddingInput(input, maxInputTokens, purpose) {
528
- const ratio = purpose === "query" ? CHUNK_WINDOW_SAFETY_RATIO : 1;
535
+ const ratio = purpose === "query" ? CHUNK_WINDOW_SAFETY_RATIO2 : 1;
529
536
  const budget = Math.max(1, Math.floor(maxInputTokens * ratio));
530
537
  if (estimateTokens(input) <= budget)
531
538
  return input;
@@ -635,12 +642,12 @@ class OpenAICompatibleEmbeddingProvider {
635
642
  this.truncate = options.truncate?.trim() ?? "";
636
643
  this.rateLimitKey = rateLimitStateKey(this.endpoint, this.apiKey);
637
644
  const maxInputTokensSet = typeof options.maxInputTokens === "number" && Number.isFinite(options.maxInputTokens);
638
- this.maxInputTokens = maxInputTokensSet ? Math.max(1, Math.floor(options.maxInputTokens)) : DEFAULT_COMPARTMENT_CHUNK_MAX_INPUT_TOKENS;
645
+ this.maxInputTokens = maxInputTokensSet ? Math.max(1, Math.floor(options.maxInputTokens)) : DEFAULT_COMPARTMENT_CHUNK_MAX_INPUT_TOKENS2;
639
646
  if (!maxInputTokensSet && this.endpoint && this.model) {
640
647
  const warningKey = `${this.endpoint}\x00${this.model}`;
641
648
  if (!maxInputTokensWarnings.has(warningKey)) {
642
649
  maxInputTokensWarnings.add(warningKey);
643
- log2(`[magic-context] embedding.max_input_tokens is not set for openai-compatible model "${sanitizeDiagnosticText(this.model)}"; chunk embeddings use the ${DEFAULT_COMPARTMENT_CHUNK_MAX_INPUT_TOKENS}-token default, which is sized for the bundled local model and splits history into small pieces. Set embedding.max_input_tokens to the model's input limit (changing it re-embeds stored chunks once).`);
650
+ log2(`[magic-context] embedding.max_input_tokens is not set for openai-compatible model "${sanitizeDiagnosticText(this.model)}"; chunk embeddings use the ${DEFAULT_COMPARTMENT_CHUNK_MAX_INPUT_TOKENS2}-token default, which is sized for the bundled local model and splits history into small pieces. Set embedding.max_input_tokens to the model's input limit (changing it re-embeds stored chunks once).`);
644
651
  }
645
652
  }
646
653
  this.modelId = getEmbeddingProviderIdentity({
@@ -1229,7 +1236,7 @@ function resolveEmbeddingConfig(config) {
1229
1236
  model: config?.model?.trim() || DEFAULT_LOCAL_EMBEDDING_MODEL,
1230
1237
  local_runtime: config?.local_runtime ?? "auto",
1231
1238
  ...config?.max_input_tokens ? {
1232
- max_input_tokens: normalizeCompartmentChunkMaxInputTokens(config.max_input_tokens)
1239
+ max_input_tokens: normalizeCompartmentChunkMaxInputTokens2(config.max_input_tokens)
1233
1240
  } : {},
1234
1241
  ...config?.local_dtype ? { local_dtype: config.local_dtype } : {}
1235
1242
  };
@@ -1250,7 +1257,7 @@ function resolveEmbeddingConfig(config) {
1250
1257
  ...config.document_prefix !== undefined ? { document_prefix: config.document_prefix } : {},
1251
1258
  ...truncate ? { truncate } : {},
1252
1259
  ...config.max_input_tokens ? {
1253
- max_input_tokens: normalizeCompartmentChunkMaxInputTokens(config.max_input_tokens)
1260
+ max_input_tokens: normalizeCompartmentChunkMaxInputTokens2(config.max_input_tokens)
1254
1261
  } : {}
1255
1262
  };
1256
1263
  }
@@ -1263,7 +1270,7 @@ function resolveEmbeddingConfig(config) {
1263
1270
  return {
1264
1271
  provider: "synapse",
1265
1272
  model: synapse.model?.trim() || "gte-modernbert-base-f16",
1266
- max_input_tokens: normalizeCompartmentChunkMaxInputTokens(descriptor?.max_tokens ?? synapse.max_input_tokens),
1273
+ max_input_tokens: normalizeCompartmentChunkMaxInputTokens2(descriptor?.max_tokens ?? synapse.max_input_tokens),
1267
1274
  ...synapse.synapse_connection_file ? { synapse_connection_file: synapse.synapse_connection_file } : {},
1268
1275
  ...synapse.synapse_fingerprint ? { synapse_fingerprint: synapse.synapse_fingerprint } : {},
1269
1276
  ...typeof synapse.synapse_table_epoch === "number" ? { synapse_table_epoch: synapse.synapse_table_epoch } : {},
@@ -1351,7 +1358,7 @@ function getChunkEmbeddingModelId(config, providerIdentity) {
1351
1358
  const chunkIdentity = {
1352
1359
  providerIdentity,
1353
1360
  chunkerVersion: 2,
1354
- maxInputTokens: normalizeCompartmentChunkMaxInputTokens("max_input_tokens" in config ? config.max_input_tokens : undefined),
1361
+ maxInputTokens: normalizeCompartmentChunkMaxInputTokens2("max_input_tokens" in config ? config.max_input_tokens : undefined),
1355
1362
  truncate: config.provider === "openai-compatible" ? config.truncate ?? "" : ""
1356
1363
  };
1357
1364
  return `${providerIdentity}:chunk:${sha256Prefix(stableStringify(chunkIdentity))}`;
@@ -1677,6 +1684,17 @@ async function drainStaleEmbeddingIdentitiesForProject2(db, projectIdentity, bud
1677
1684
  }
1678
1685
  function registerProjectEmbedding2(db, projectIdentity, config, features, sourceDirectory) {
1679
1686
  const resolvedConfig = resolveEmbeddingConfig(config);
1687
+ if (resolvedConfig.provider === "local") {
1688
+ const pooling = getCachedLocalEmbeddingPooling(resolvedConfig.model?.trim() || DEFAULT_LOCAL_EMBEDDING_MODEL);
1689
+ if (pooling?.status === "unresolved" || !pooling) {
1690
+ logLocalEmbeddingPoolingUnavailableOnce(resolvedConfig.model?.trim() || DEFAULT_LOCAL_EMBEDDING_MODEL, pooling?.reason ?? "pooling metadata has not been resolved by the background embedding bootstrap", log2);
1691
+ } else {
1692
+ logLocalEmbeddingPoolingDecisionOnce(resolvedConfig.model?.trim() || DEFAULT_LOCAL_EMBEDDING_MODEL, pooling, log2);
1693
+ }
1694
+ if (pooling?.status === "unsupported") {
1695
+ return registerProjectInObservationMode2(db, projectIdentity, sourceDirectory, resolvedConfig, pooling ? `local model pooling is unsupported: ${pooling.reason}` : "local model pooling metadata has not been resolved");
1696
+ }
1697
+ }
1680
1698
  const providerIdentity = getEmbeddingProviderIdentity(resolvedConfig);
1681
1699
  const runtimeFingerprint = getRuntimeFingerprint(resolvedConfig);
1682
1700
  const chunkModelId = getChunkEmbeddingModelId(resolvedConfig, providerIdentity);
@@ -1872,7 +1890,7 @@ function shadowBackfillMissingBase(scope, primaryModelId, shadowModelId, project
1872
1890
  }
1873
1891
  function shadowBackfillMissingIds(db, projectIdentity, scope, primaryModelId, shadowModelId, limit, shadowMaxInputTokens) {
1874
1892
  if (scope === "chunk") {
1875
- return loadUnembeddedShadowChunkCandidates(db, projectIdentity, primaryModelId, shadowModelId, limit, shadowMaxInputTokens).map((candidate) => String(candidate.id));
1893
+ return loadUnembeddedShadowChunkCandidates2(db, projectIdentity, primaryModelId, shadowModelId, limit, shadowMaxInputTokens).map((candidate) => String(candidate.id));
1876
1894
  }
1877
1895
  const { sql, params, orderBy } = shadowBackfillMissingBase(scope, primaryModelId, shadowModelId, projectIdentity);
1878
1896
  const rows = db.prepare(`${sql}${orderBy} LIMIT ?`).all(...params, limit);
@@ -1880,7 +1898,7 @@ function shadowBackfillMissingIds(db, projectIdentity, scope, primaryModelId, sh
1880
1898
  }
1881
1899
  function countShadowBackfillMissing(db, projectIdentity, scope, primaryModelId, shadowModelId, shadowMaxInputTokens) {
1882
1900
  if (scope === "chunk") {
1883
- return loadUnembeddedShadowChunkCandidates(db, projectIdentity, primaryModelId, shadowModelId, Number.MAX_SAFE_INTEGER, shadowMaxInputTokens).length;
1901
+ return loadUnembeddedShadowChunkCandidates2(db, projectIdentity, primaryModelId, shadowModelId, Number.MAX_SAFE_INTEGER, shadowMaxInputTokens).length;
1884
1902
  }
1885
1903
  const { sql, params } = shadowBackfillMissingBase(scope, primaryModelId, shadowModelId, projectIdentity);
1886
1904
  return db.prepare(`SELECT COUNT(*) AS count FROM (${sql})`).get(...params).count;
@@ -1889,7 +1907,7 @@ function shadowModelIdForScope(registration, scope) {
1889
1907
  return scope === "chunk" ? registration.chunkModelId : registration.modelId;
1890
1908
  }
1891
1909
  function shadowMaxInputTokensFor(registration) {
1892
- return normalizeCompartmentChunkMaxInputTokens("max_input_tokens" in registration.config ? registration.config.max_input_tokens : undefined);
1910
+ return normalizeCompartmentChunkMaxInputTokens2("max_input_tokens" in registration.config ? registration.config.max_input_tokens : undefined);
1893
1911
  }
1894
1912
  function shadowBackfillCohortFingerprint(db, projectIdentity, scope, primaryModelId) {
1895
1913
  if (scope === "memory") {
@@ -2227,14 +2245,14 @@ async function processShadowQueueItem(item) {
2227
2245
  let ftsMappingIncomplete = false;
2228
2246
  let emptyCanonicalText = false;
2229
2247
  for (const candidate of candidates) {
2230
- const mappedText = buildCanonicalChunkTextFromFts(db, candidate.session_id, candidate.start_message, candidate.end_message);
2248
+ const mappedText = buildCanonicalChunkTextFromFts2(db, candidate.session_id, candidate.start_message, candidate.end_message);
2231
2249
  if (mappedText === null) {
2232
2250
  ftsMappingIncomplete = true;
2233
2251
  } else {
2234
- const text = mappedText || buildCompartmentSummaryFallbackText(db, candidate.id);
2252
+ const text = mappedText || buildCompartmentSummaryFallbackText2(db, candidate.id);
2235
2253
  const shadowMaxInputTokens = shadowMaxInputTokensFor(registration);
2236
- const windows = chunkCanonicalText(text, candidate.start_message, candidate.end_message, shadowMaxInputTokens);
2237
- const windowSourceKey = chunkWindowSourceKey(text, candidate.start_message, candidate.end_message, shadowMaxInputTokens);
2254
+ const windows = chunkCanonicalText2(text, candidate.start_message, candidate.end_message, shadowMaxInputTokens);
2255
+ const windowSourceKey = chunkWindowSourceKey2(text, candidate.start_message, candidate.end_message, shadowMaxInputTokens);
2238
2256
  if (windows.length > 0)
2239
2257
  prepared.push({ candidate, windows, windowSourceKey });
2240
2258
  else
@@ -2275,7 +2293,7 @@ async function processShadowQueueItem(item) {
2275
2293
  ] : [];
2276
2294
  });
2277
2295
  if (rows.length === item.windows.length) {
2278
- replaceCompartmentChunkEmbeddings(db, rows, item.windowSourceKey);
2296
+ replaceCompartmentChunkEmbeddings2(db, rows, item.windowSourceKey);
2279
2297
  writes += 1;
2280
2298
  } else {
2281
2299
  partialVectorSet = true;
@@ -2410,7 +2428,7 @@ function getProjectChunkEmbeddingModelId2(projectIdentity) {
2410
2428
  function getProjectEmbeddingMaxInputTokens2(projectIdentity) {
2411
2429
  const registration = projectRegistrations.get(projectIdentity);
2412
2430
  const configMax = registration?.config && "max_input_tokens" in registration.config ? registration.config.max_input_tokens : undefined;
2413
- return normalizeCompartmentChunkMaxInputTokens(registration?.provider?.maxInputTokens ?? configMax);
2431
+ return normalizeCompartmentChunkMaxInputTokens2(registration?.provider?.maxInputTokens ?? configMax);
2414
2432
  }
2415
2433
  function getOrCreateProjectProvider(registration) {
2416
2434
  if (registration.providerIdentity === OFF_PROVIDER_IDENTITY || registration.observationMode) {
@@ -2668,7 +2686,7 @@ async function embedCompartmentChunkBatch(db, projectIdentity, batchSize, signal
2668
2686
  const priorModels = db.prepare(`SELECT COUNT(*) AS total,
2669
2687
  COALESCE(MAX(model_id = ?), 0) AS current
2670
2688
  FROM compartment_chunk_embeddings WHERE compartment_id = ?`);
2671
- const candidates = await loadUnembeddedCompartmentChunkCandidatesPolite(db, projectIdentity, snapshot.chunkModelId, batchSize, getProjectEmbeddingMaxInputTokens2(projectIdentity), true, (candidate) => {
2689
+ const candidates = await loadUnembeddedCompartmentChunkCandidatesPolite2(db, projectIdentity, snapshot.chunkModelId, batchSize, getProjectEmbeddingMaxInputTokens2(projectIdentity), true, (candidate) => {
2672
2690
  const activity = activeEmbeddingSessions.get(candidate.sessionId);
2673
2691
  if (activity?.project === projectIdentity && activity.model === snapshot.chunkModelId && !embedPauseBySession.has(candidate.sessionId))
2674
2692
  return true;
@@ -2694,27 +2712,27 @@ async function embedCandidateChunkBatch(db, projectIdentity, modelId, candidates
2694
2712
  const prepared = [];
2695
2713
  for (const candidate of candidates) {
2696
2714
  await new Promise((resolve) => setTimeout(resolve, 0));
2697
- const mappedText = buildCanonicalChunkTextFromFts(db, candidate.sessionId, candidate.startMessage, candidate.endMessage);
2715
+ const mappedText = buildCanonicalChunkTextFromFts2(db, candidate.sessionId, candidate.startMessage, candidate.endMessage);
2698
2716
  if (mappedText === null)
2699
2717
  continue;
2700
- const canonicalText = mappedText || buildCompartmentSummaryFallbackText(db, candidate.id);
2718
+ const canonicalText = mappedText || buildCompartmentSummaryFallbackText2(db, candidate.id);
2701
2719
  if (canonicalText.length === 0) {
2702
2720
  if (writer)
2703
2721
  await writer.backoff(candidate, projectIdentity, modelId);
2704
2722
  else
2705
- recordChunkEmbedBackoff(db, candidate, projectIdentity, modelId);
2723
+ recordChunkEmbedBackoff2(db, candidate, projectIdentity, modelId);
2706
2724
  noWork.push(candidate.id);
2707
2725
  continue;
2708
2726
  }
2709
- const windows = chunkCanonicalText(canonicalText, candidate.startMessage, candidate.endMessage, maxInputTokens);
2710
- if (windows.length === 0 || chunkEmbeddingWindowsAreCurrent(db, candidate.id, modelId, windows, projectIdentity)) {
2727
+ const windows = chunkCanonicalText2(canonicalText, candidate.startMessage, candidate.endMessage, maxInputTokens);
2728
+ if (windows.length === 0 || chunkEmbeddingWindowsAreCurrent2(db, candidate.id, modelId, windows, projectIdentity)) {
2711
2729
  noWork.push(candidate.id);
2712
2730
  continue;
2713
2731
  }
2714
2732
  prepared.push({
2715
2733
  candidate,
2716
2734
  windows,
2717
- windowSourceKey: chunkWindowSourceKey(canonicalText, candidate.startMessage, candidate.endMessage, maxInputTokens)
2735
+ windowSourceKey: chunkWindowSourceKey2(canonicalText, candidate.startMessage, candidate.endMessage, maxInputTokens)
2718
2736
  });
2719
2737
  }
2720
2738
  if (prepared.length === 0)
@@ -2778,7 +2796,7 @@ async function embedCandidateChunkBatch(db, projectIdentity, modelId, candidates
2778
2796
  if (writer)
2779
2797
  await writer.replace(rows, item.windowSourceKey);
2780
2798
  else
2781
- replaceCompartmentChunkEmbeddings(db, rows, item.windowSourceKey);
2799
+ replaceCompartmentChunkEmbeddings2(db, rows, item.windowSourceKey);
2782
2800
  persistedIds.add(item.candidate.id);
2783
2801
  enqueueShadowEmbeddingItems2(projectIdentity, "chunk", [
2784
2802
  String(item.candidate.id)
@@ -2806,7 +2824,7 @@ async function embedCandidateChunkBatch(db, projectIdentity, modelId, candidates
2806
2824
  if (writer)
2807
2825
  await writer.backoff(item.candidate, projectIdentity, modelId);
2808
2826
  else
2809
- recordChunkEmbedBackoff(db, item.candidate, projectIdentity, modelId);
2827
+ recordChunkEmbedBackoff2(db, item.candidate, projectIdentity, modelId);
2810
2828
  failed.push(item.candidate.id);
2811
2829
  }
2812
2830
  }
@@ -2880,7 +2898,7 @@ async function embedSessionCompartmentChunks2(db, projectIdentity, sessionId, op
2880
2898
  else
2881
2899
  recordSessionProjectIdentity(db, sessionId, projectIdentity);
2882
2900
  const maxInputTokens = getProjectEmbeddingMaxInputTokens2(projectIdentity);
2883
- const total = writer ? await writer.count(projectIdentity, sessionId, snapshot.chunkModelId, maxInputTokens) : await countUnembeddedSessionCompartmentsPolite(db, projectIdentity, sessionId, snapshot.chunkModelId, maxInputTokens);
2901
+ const total = writer ? await writer.count(projectIdentity, sessionId, snapshot.chunkModelId, maxInputTokens) : await countUnembeddedSessionCompartmentsPolite2(db, projectIdentity, sessionId, snapshot.chunkModelId, maxInputTokens);
2884
2902
  const holderId = `session-embed-${randomUUID()}`;
2885
2903
  const lease = writer ? await writer.acquire(projectIdentity, holderId) : acquireGitSweepLease(db, projectIdentity, holderId, { ignoreCooldown: true });
2886
2904
  if (!lease.acquired)
@@ -2923,7 +2941,7 @@ async function embedSessionCompartmentChunks2(db, projectIdentity, sessionId, op
2923
2941
  break;
2924
2942
  }
2925
2943
  }
2926
- const candidates = writer ? await writer.candidates(projectIdentity, sessionId, snapshot.chunkModelId, batchSize, [...skipIds, ...failedIds], maxInputTokens) : await loadUnembeddedSessionChunkCandidatesPolite(db, projectIdentity, sessionId, snapshot.chunkModelId, batchSize, [...skipIds, ...failedIds], maxInputTokens, true);
2944
+ const candidates = writer ? await writer.candidates(projectIdentity, sessionId, snapshot.chunkModelId, batchSize, [...skipIds, ...failedIds], maxInputTokens) : await loadUnembeddedSessionChunkCandidatesPolite2(db, projectIdentity, sessionId, snapshot.chunkModelId, batchSize, [...skipIds, ...failedIds], maxInputTokens, true);
2927
2945
  if (candidates.length === 0)
2928
2946
  break;
2929
2947
  const {
@@ -2973,7 +2991,7 @@ async function embedSessionCompartmentChunks2(db, projectIdentity, sessionId, op
2973
2991
  if (aborted)
2974
2992
  return { status: "aborted", embedded, total, failed: failedIds.length };
2975
2993
  if (providerDown || failedIds.length > 0) {
2976
- const remaining = Math.max(failedIds.length, (writer ? await writer.count(projectIdentity, sessionId, snapshot.chunkModelId, maxInputTokens) : await countUnembeddedSessionCompartmentsPolite(db, projectIdentity, sessionId, snapshot.chunkModelId, maxInputTokens)) - skipIds.length);
2994
+ const remaining = Math.max(failedIds.length, (writer ? await writer.count(projectIdentity, sessionId, snapshot.chunkModelId, maxInputTokens) : await countUnembeddedSessionCompartmentsPolite2(db, projectIdentity, sessionId, snapshot.chunkModelId, maxInputTokens)) - skipIds.length);
2977
2995
  if (remaining > 0) {
2978
2996
  return {
2979
2997
  status: "stalled",
@@ -3001,7 +3019,7 @@ function getEmbeddingCoverageStatus2(db, projectIdentity, sessionId) {
3001
3019
  shadowBackfillStalls: listShadowBackfillStalls2(db, projectIdentity)
3002
3020
  };
3003
3021
  }
3004
- const session = countSessionCompartmentEmbedCoverage(db, projectIdentity, sessionId, snapshot.chunkModelId, getProjectEmbeddingMaxInputTokens2(projectIdentity));
3022
+ const session = countSessionCompartmentEmbedCoverage2(db, projectIdentity, sessionId, snapshot.chunkModelId, getProjectEmbeddingMaxInputTokens2(projectIdentity));
3005
3023
  const memories = snapshot.enabled ? getMemoryEmbedCoverage(db, projectIdentity, snapshot.modelId) : { embedded: 0, total: 0, memoryEnabled: false };
3006
3024
  const gitEnabled = snapshot.gitCommitEnabled;
3007
3025
  const commits = gitEnabled ? {
@@ -3025,7 +3043,7 @@ async function getAutoEmbeddingSessionCoverage2(db, projectIdentity, sessionId)
3025
3043
  if (!snapshot?.historyEnabled || snapshot.chunkModelId === "off") {
3026
3044
  return { enabled: false, embedded: 0, total: 0 };
3027
3045
  }
3028
- const coverage = await countSessionCompartmentEmbedCoveragePolite(db, projectIdentity, sessionId, snapshot.chunkModelId, getProjectEmbeddingMaxInputTokens2(projectIdentity));
3046
+ const coverage = await countSessionCompartmentEmbedCoveragePolite2(db, projectIdentity, sessionId, snapshot.chunkModelId, getProjectEmbeddingMaxInputTokens2(projectIdentity));
3029
3047
  return { enabled: true, ...coverage };
3030
3048
  }
3031
3049
  async function sweepAllRegisteredProjects2(db, batchSize = 10) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionLog2
3
- } from "./server-f2xf5gcb.js";
3
+ } from "./server-6495nmn9.js";
4
4
  import {
5
5
  isKnownAutocommit
6
6
  } from "./server-8ajstryz.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  log2
3
- } from "./server-f2xf5gcb.js";
3
+ } from "./server-6495nmn9.js";
4
4
 
5
5
  // src/shared/safe-notification-target.ts
6
6
  var DEFAULT_TITLE_RE = /^(New session - |Child session - )\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;
@@ -752,7 +752,7 @@ async function withAsyncPrivilegedWriter2(db, operation, options = {}) {
752
752
  } catch (error) {
753
753
  if (entered || !(error instanceof SqliteAcquisitionBusyError2))
754
754
  throw error;
755
- options.beforeRetry?.(error);
755
+ await options.beforeRetry?.(error);
756
756
  const elapsed = performance.now() - started;
757
757
  if (elapsed >= budgetMs) {
758
758
  reportSqliteDiagnostic(`sqlite writer site=privileged_writer lane=foreground acquire_ms=${Math.round(elapsed)} attempts=${attempts} outcome=busy`);
@@ -4,13 +4,13 @@ import {
4
4
  import {
5
5
  importPluginModule,
6
6
  sessionLog2
7
- } from "./server-f2xf5gcb.js";
7
+ } from "./server-6495nmn9.js";
8
8
  import {
9
9
  isDefaultSessionTitle2
10
- } from "./server-h0410h0v.js";
10
+ } from "./server-1bw1wcbp.js";
11
11
  import {
12
12
  shouldHoldIgnoredNotification
13
- } from "./server-n1prf1g6.js";
13
+ } from "./server-brj8j2gk.js";
14
14
  import {
15
15
  getErrorMessage
16
16
  } from "./server-y8v6yerm.js";
@@ -142,7 +142,7 @@ async function sendIgnoredMessageNow(client, sessionId, text, params, forcePersi
142
142
  holdIgnoredNotification({ client, sessionId, text, params, forcePersist }, "during target checks");
143
143
  return "queued";
144
144
  }
145
- const { waitForSafeNotificationTarget } = await importPluginModule(() => import("./safe-notification-target-qg7n2s77.js"));
145
+ const { waitForSafeNotificationTarget } = await importPluginModule(() => import("./safe-notification-target-khnzg57c.js"));
146
146
  if (await waitForSafeNotificationTarget(client, sessionId) === "skip") {
147
147
  sessionLog2(sessionId, "notification skipped (session not titled yet)");
148
148
  return "skipped";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  getMagicContextStorageDir,
6
6
  sessionLog2
7
- } from "./server-f2xf5gcb.js";
7
+ } from "./server-6495nmn9.js";
8
8
  import {
9
9
  modelRefLookupOrder
10
10
  } from "./server-avwt563y.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  log2
3
- } from "./server-f2xf5gcb.js";
3
+ } from "./server-6495nmn9.js";
4
4
 
5
5
  // src/hooks/magic-context/read-session-formatting.ts
6
6
  import { existsSync, readFileSync, realpathSync, statSync } from "node:fs";
@@ -3,10 +3,10 @@ import {
3
3
  } from "./server-pavzsdc6.js";
4
4
  import {
5
5
  isUserHomeDirectory
6
- } from "./server-rmygf5pn.js";
6
+ } from "./server-ne8arh8t.js";
7
7
  import {
8
8
  logSlowWriteTransaction
9
- } from "./server-6pmqg9m4.js";
9
+ } from "./server-gyy4k6mf.js";
10
10
 
11
11
  // src/features/magic-context/git-commits/sweep-coordinator.ts
12
12
  var GIT_SWEEP_COOLDOWN_MS = 10 * 60 * 1000;
@@ -3,21 +3,21 @@ import {
3
3
  } from "./server-kaqs6h31.js";
4
4
  import {
5
5
  getSqliteDatabasePath2
6
- } from "./server-beht37jy.js";
6
+ } from "./server-1zx2pa5d.js";
7
7
  import {
8
8
  runSessionWarmupWorker
9
- } from "./server-xj136kt8.js";
9
+ } from "./server-55rgxfrw.js";
10
10
  import {
11
11
  estimateTokens
12
- } from "./server-tgnbmwah.js";
12
+ } from "./server-3mz2qh5a.js";
13
13
  import {
14
14
  openCodeDbExists,
15
15
  withReadOnlySessionDb
16
- } from "./server-n1prf1g6.js";
16
+ } from "./server-brj8j2gk.js";
17
17
  import {
18
18
  hasRawMessageProvider2,
19
19
  readRawSessionMessageIdOrdinalsForRange2
20
- } from "./server-xhab8jx8.js";
20
+ } from "./server-ej96a39v.js";
21
21
 
22
22
  // src/tools/ctx-expand/search-archive.ts
23
23
  var archiveReadsOnThisThread = 0;
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  log2
3
- } from "./server-f2xf5gcb.js";
3
+ } from "./server-6495nmn9.js";
4
4
  import {
5
5
  getSdkWindowGeometry,
6
6
  getSdkContextLimit,
7
7
  getSdkInputLimit
8
- } from "./server-tbe1femw.js";
8
+ } from "./server-29qp8nz4.js";
9
9
  import {
10
10
  localBudget,
11
11
  calibrationForModelKey
@@ -3,12 +3,15 @@ import {
3
3
  } from "./server-51779zs2.js";
4
4
  import {
5
5
  log2
6
- } from "./server-f2xf5gcb.js";
6
+ } from "./server-6495nmn9.js";
7
7
  import {
8
8
  inRootAsyncContext2,
9
9
  getSqliteDatabasePath2,
10
10
  releaseIndexOwner2
11
- } from "./server-beht37jy.js";
11
+ } from "./server-1zx2pa5d.js";
12
+ import {
13
+ createWorkerShutdown
14
+ } from "./server-cpjk5jd2.js";
12
15
 
13
16
  // src/hooks/magic-context/raw-ordinal-warmup.ts
14
17
  import { Worker } from "node:worker_threads";
@@ -1127,6 +1130,7 @@ function readRawSessionBoundaryEndpointsFromDb2(db, sessionId, ids, blockIds = [
1127
1130
  // src/hooks/magic-context/raw-ordinal-warmup.ts
1128
1131
  var ACCEPT_TIMEOUT_MS = 2000;
1129
1132
  var RESULT_TIMEOUT_MS = 10 * 60000;
1133
+ var WARMUP_CLOSE_DEADLINE_MS = 2000;
1130
1134
  var FAILURE_BACKOFF_MS = 5 * 60000;
1131
1135
  var inFlight = new Map;
1132
1136
  var connectionIds = new WeakMap;
@@ -1155,6 +1159,7 @@ function runSessionWarmupWorker(input, options) {
1155
1159
  return new Promise((resolve) => {
1156
1160
  const openCancellation = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT));
1157
1161
  let worker;
1162
+ let shutdown;
1158
1163
  let deadline;
1159
1164
  let settled = false;
1160
1165
  const finish = (result) => {
@@ -1166,7 +1171,7 @@ function runSessionWarmupWorker(input, options) {
1166
1171
  options.signal?.removeEventListener("abort", abort);
1167
1172
  if (worker) {
1168
1173
  activeWorkers.delete(worker);
1169
- const stopped = worker.terminate();
1174
+ const stopped = shutdown?.close() ?? worker.terminate();
1170
1175
  worker.unref();
1171
1176
  stopped.finally(() => {
1172
1177
  releaseIndexOwner2(input);
@@ -1192,6 +1197,7 @@ function runSessionWarmupWorker(input, options) {
1192
1197
  worker = inRootAsyncContext2(() => new Worker(options.entry ?? defaultEntry(), {
1193
1198
  workerData: { ...input, openCancellation: openCancellation.buffer }
1194
1199
  }));
1200
+ shutdown = createWorkerShutdown(worker, "raw-ordinal-warmup", WARMUP_CLOSE_DEADLINE_MS);
1195
1201
  } catch (error) {
1196
1202
  finish({ failure: "start-failed", detail: String(error) });
1197
1203
  return;
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  log2
3
- } from "./server-f2xf5gcb.js";
3
+ } from "./server-6495nmn9.js";
4
4
  import {
5
5
  setOutputReserveConfig
6
- } from "./server-tbe1femw.js";
6
+ } from "./server-29qp8nz4.js";
7
7
  import {
8
8
  DEFAULT_EXECUTE_THRESHOLD_PERCENTAGE,
9
9
  PROTECTED_TOKENS_MIN,
@@ -15,6 +15,9 @@ function resolveHarnessBlock(container, harness) {
15
15
  const selected = harness === "omp" ? container?.omp ?? container?.pi : container?.[harness];
16
16
  return asRecord(selected);
17
17
  }
18
+ function sourceHarness(container, harness) {
19
+ return harness === "omp" && container?.omp == null ? "pi" : harness;
20
+ }
18
21
  function normalizeModelEntry2(entry, harness) {
19
22
  if (typeof entry === "string") {
20
23
  const model = readString(entry);
@@ -61,13 +64,19 @@ function resolveHistorianModel2(config, harness) {
61
64
  const block = resolveHarnessBlock(historian, harness);
62
65
  if (!block)
63
66
  return { fallbacks: [] };
67
+ const source = `historian.${sourceHarness(historian, harness)}`;
68
+ const primary = resolvePrimaryEntry({
69
+ entry: block.model,
70
+ defaultQualifier: block[harness === "opencode" ? "variant" : "thinking_level"],
71
+ harness
72
+ });
73
+ const fallbacks = resolveFallbackEntries2(block.fallback_models, harness);
64
74
  return {
65
- primary: resolvePrimaryEntry({
66
- entry: block.model,
67
- defaultQualifier: block[harness === "opencode" ? "variant" : "thinking_level"],
68
- harness
69
- }),
70
- fallbacks: resolveFallbackEntries2(block.fallback_models, harness)
75
+ primary: primary ? { ...primary, sourceConfigKey: `${source}.model` } : undefined,
76
+ fallbacks: fallbacks.map((entry) => ({
77
+ ...entry,
78
+ sourceConfigKey: `${source}.fallback_models`
79
+ }))
71
80
  };
72
81
  }
73
82
  function resolveDreamerTaskModel2(args) {
@@ -86,15 +95,25 @@ function resolveDreamerTaskModel2(args) {
86
95
  const taskQualifier = taskBlock?.[args.harness === "opencode" ? "variant" : "thinking_level"];
87
96
  const harnessQualifier = harnessBlock[args.harness === "opencode" ? "variant" : "thinking_level"] ?? normalizeModelEntry2(harnessBlock.model, args.harness)?.qualifier;
88
97
  const taskHasModel = taskBlock !== undefined && hasOwn(taskBlock, "model");
98
+ const taskHasFallbacks = taskBlock !== undefined && hasOwn(taskBlock, "fallback_models");
89
99
  const primarySource = taskHasModel ? taskBlock?.model : harnessBlock.model;
90
- const fallbackSource = taskBlock !== undefined && hasOwn(taskBlock, "fallback_models") ? taskBlock.fallback_models : harnessBlock.fallback_models;
100
+ const fallbackSource = taskHasFallbacks ? taskBlock?.fallback_models : harnessBlock.fallback_models;
101
+ const source = `dreamer.${sourceHarness(dreamer, args.harness)}`;
102
+ const primary = resolvePrimaryEntry({
103
+ entry: primarySource,
104
+ defaultQualifier: taskQualifier ?? harnessQualifier,
105
+ harness: args.harness
106
+ });
107
+ const fallbacks = resolveFallbackEntries2(fallbackSource, args.harness);
91
108
  return {
92
- primary: resolvePrimaryEntry({
93
- entry: primarySource,
94
- defaultQualifier: taskQualifier ?? harnessQualifier,
95
- harness: args.harness
96
- }),
97
- fallbacks: resolveFallbackEntries2(fallbackSource, args.harness),
109
+ primary: primary ? {
110
+ ...primary,
111
+ sourceConfigKey: taskHasModel ? `${source}.tasks.${args.task}.model` : `${source}.model`
112
+ } : undefined,
113
+ fallbacks: fallbacks.map((entry) => ({
114
+ ...entry,
115
+ sourceConfigKey: taskHasFallbacks ? `${source}.tasks.${args.task}.fallback_models` : `${source}.fallback_models`
116
+ })),
98
117
  schedule: readString(schedulingTask?.schedule),
99
118
  timeoutMinutes: typeof taskBlock?.timeout_minutes === "number" ? taskBlock.timeout_minutes : undefined,
100
119
  promotionThreshold: typeof schedulingTask?.promotion_threshold === "number" ? schedulingTask.promotion_threshold : undefined