@cortexkit/opencode-magic-context 0.47.0 → 0.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/dist/agents/magic-context-prompt.d.ts +1 -1
  2. package/dist/agents/magic-context-prompt.d.ts.map +1 -1
  3. package/dist/{announcement-y35wzg2r.js → announcement-fp14dw0n.js} +3 -2
  4. package/dist/auto-search-worker.js +27 -30
  5. package/dist/config/index.d.ts.map +1 -1
  6. package/dist/config/mural-model-deprecation.d.ts +15 -0
  7. package/dist/config/mural-model-deprecation.d.ts.map +1 -0
  8. package/dist/config/project-security.d.ts +0 -3
  9. package/dist/config/project-security.d.ts.map +1 -1
  10. package/dist/config/schema/magic-context.d.ts +10 -6
  11. package/dist/config/schema/magic-context.d.ts.map +1 -1
  12. package/dist/{conflict-warning-hook-z44ynfz7.js → conflict-warning-hook-kzx4dmk1.js} +12 -10
  13. package/dist/{context-wq4ffwyb.js → context-nj5f293n.js} +2765 -1925
  14. package/dist/{derive-budgets-ke12jnnh.js → derive-budgets-qz5rrr08.js} +4 -3
  15. package/dist/embedding-activity-g1dhes6g.js +10 -0
  16. package/dist/embedding-backfill-aetxv1vt.js +21 -0
  17. package/dist/embedding-cache-mgyr73ef.js +16 -0
  18. package/dist/embedding-worker.js +11 -9
  19. package/dist/features/magic-context/compaction-marker.d.ts.map +1 -1
  20. package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts +1 -0
  21. package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts.map +1 -1
  22. package/dist/features/magic-context/dreamer/task-config.d.ts +3 -3
  23. package/dist/features/magic-context/dreamer/task-config.d.ts.map +1 -1
  24. package/dist/features/magic-context/dreamer/task-executor.d.ts +1 -1
  25. package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
  26. package/dist/features/magic-context/dreamer/task-registry.d.ts +1 -0
  27. package/dist/features/magic-context/dreamer/task-registry.d.ts.map +1 -1
  28. package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
  29. package/dist/features/magic-context/git-commits/search-git-commits.d.ts +2 -0
  30. package/dist/features/magic-context/git-commits/search-git-commits.d.ts.map +1 -1
  31. package/dist/features/magic-context/message-index-async.d.ts +16 -3
  32. package/dist/features/magic-context/message-index-async.d.ts.map +1 -1
  33. package/dist/features/magic-context/message-index-bounded.d.ts +17 -0
  34. package/dist/features/magic-context/message-index-bounded.d.ts.map +1 -0
  35. package/dist/features/magic-context/message-index.d.ts +7 -1
  36. package/dist/features/magic-context/message-index.d.ts.map +1 -1
  37. package/dist/features/magic-context/mural/render-trigger.d.ts +7 -4
  38. package/dist/features/magic-context/mural/render-trigger.d.ts.map +1 -1
  39. package/dist/features/magic-context/pi-content-decisions.d.ts +7 -1
  40. package/dist/features/magic-context/pi-content-decisions.d.ts.map +1 -1
  41. package/dist/features/magic-context/search-rerank.d.ts +35 -0
  42. package/dist/features/magic-context/search-rerank.d.ts.map +1 -0
  43. package/dist/features/magic-context/search.d.ts +40 -0
  44. package/dist/features/magic-context/search.d.ts.map +1 -1
  45. package/dist/features/magic-context/session-activity.d.ts.map +1 -1
  46. package/dist/features/magic-context/smart-notes/runner.d.ts +1 -0
  47. package/dist/features/magic-context/smart-notes/runner.d.ts.map +1 -1
  48. package/dist/features/magic-context/storage-db.d.ts.map +1 -1
  49. package/dist/features/magic-context/storage-meta-persisted.d.ts +13 -2
  50. package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
  51. package/dist/features/magic-context/storage-meta-session.d.ts +7 -1
  52. package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
  53. package/dist/features/magic-context/storage-meta.d.ts +1 -1
  54. package/dist/features/magic-context/storage-meta.d.ts.map +1 -1
  55. package/dist/features/magic-context/storage-session-tables.d.ts +2 -0
  56. package/dist/features/magic-context/storage-session-tables.d.ts.map +1 -1
  57. package/dist/features/magic-context/storage-tag-identity-revision.d.ts +50 -0
  58. package/dist/features/magic-context/storage-tag-identity-revision.d.ts.map +1 -0
  59. package/dist/features/magic-context/storage-tags.d.ts +153 -4
  60. package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
  61. package/dist/features/magic-context/storage.d.ts +1 -1
  62. package/dist/features/magic-context/storage.d.ts.map +1 -1
  63. package/dist/features/magic-context/subagent-token-capture.d.ts.map +1 -1
  64. package/dist/features/magic-context/tagger.d.ts +2 -0
  65. package/dist/features/magic-context/tagger.d.ts.map +1 -1
  66. package/dist/features/magic-context/transform-decision-log.d.ts +4 -1
  67. package/dist/features/magic-context/transform-decision-log.d.ts.map +1 -1
  68. package/dist/harness-e4avh192.js +10 -0
  69. package/dist/hooks/magic-context/active-anthropic-turn.d.ts +2 -0
  70. package/dist/hooks/magic-context/active-anthropic-turn.d.ts.map +1 -1
  71. package/dist/hooks/magic-context/auto-search-deadline.d.ts.map +1 -1
  72. package/dist/hooks/magic-context/auto-search-replay.fixture.d.ts +24 -0
  73. package/dist/hooks/magic-context/auto-search-replay.fixture.d.ts.map +1 -0
  74. package/dist/hooks/magic-context/auto-search-runner.d.ts +1 -1
  75. package/dist/hooks/magic-context/auto-search-runner.d.ts.map +1 -1
  76. package/dist/hooks/magic-context/auto-search-worker-client.d.ts +34 -3
  77. package/dist/hooks/magic-context/auto-search-worker-client.d.ts.map +1 -1
  78. package/dist/hooks/magic-context/command-handler.d.ts +3 -0
  79. package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
  80. package/dist/hooks/magic-context/compartment-runner-incremental.d.ts.map +1 -1
  81. package/dist/hooks/magic-context/compartment-runner-recomp.d.ts.map +1 -1
  82. package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
  83. package/dist/hooks/magic-context/emergency-fail-closed.d.ts +28 -0
  84. package/dist/hooks/magic-context/emergency-fail-closed.d.ts.map +1 -1
  85. package/dist/hooks/magic-context/event-handler.d.ts.map +1 -1
  86. package/dist/hooks/magic-context/historian-host-runner.d.ts +8 -0
  87. package/dist/hooks/magic-context/historian-host-runner.d.ts.map +1 -1
  88. package/dist/hooks/magic-context/hook.d.ts +3 -2
  89. package/dist/hooks/magic-context/hook.d.ts.map +1 -1
  90. package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
  91. package/dist/hooks/magic-context/latest-thinking-recovery.d.ts +7 -0
  92. package/dist/hooks/magic-context/latest-thinking-recovery.d.ts.map +1 -1
  93. package/dist/hooks/magic-context/lkg-persist.d.ts +4 -3
  94. package/dist/hooks/magic-context/lkg-persist.d.ts.map +1 -1
  95. package/dist/hooks/magic-context/lkg-replay.d.ts +13 -8
  96. package/dist/hooks/magic-context/lkg-replay.d.ts.map +1 -1
  97. package/dist/hooks/magic-context/lkg-slot.d.ts +139 -2
  98. package/dist/hooks/magic-context/lkg-slot.d.ts.map +1 -1
  99. package/dist/hooks/magic-context/message-search-accepting-silent-worker.fixture.d.ts +2 -0
  100. package/dist/hooks/magic-context/message-search-accepting-silent-worker.fixture.d.ts.map +1 -0
  101. package/dist/hooks/magic-context/oc-stall-r2-warmup-worker.fixture.d.ts +2 -0
  102. package/dist/hooks/magic-context/oc-stall-r2-warmup-worker.fixture.d.ts.map +1 -0
  103. package/dist/hooks/magic-context/oc-stall-search-review.fixture.d.ts +2 -0
  104. package/dist/hooks/magic-context/oc-stall-search-review.fixture.d.ts.map +1 -0
  105. package/dist/hooks/magic-context/opencode1-to-model-messages.fixture.d.ts +63 -0
  106. package/dist/hooks/magic-context/opencode1-to-model-messages.fixture.d.ts.map +1 -0
  107. package/dist/hooks/magic-context/pass-outcome.d.ts +1 -0
  108. package/dist/hooks/magic-context/pass-outcome.d.ts.map +1 -1
  109. package/dist/hooks/magic-context/provider-visible-parts.d.ts +45 -0
  110. package/dist/hooks/magic-context/provider-visible-parts.d.ts.map +1 -0
  111. package/dist/hooks/magic-context/raw-ordinal-warmup-silent-worker.fixture.d.ts +2 -0
  112. package/dist/hooks/magic-context/raw-ordinal-warmup-silent-worker.fixture.d.ts.map +1 -0
  113. package/dist/hooks/magic-context/raw-ordinal-warmup-worker.d.ts +2 -0
  114. package/dist/hooks/magic-context/raw-ordinal-warmup-worker.d.ts.map +1 -0
  115. package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts +87 -0
  116. package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts.map +1 -0
  117. package/dist/hooks/magic-context/read-session-chunk.d.ts +19 -1
  118. package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
  119. package/dist/hooks/magic-context/read-session-db.d.ts.map +1 -1
  120. package/dist/hooks/magic-context/read-session-formatting.d.ts +5 -0
  121. package/dist/hooks/magic-context/read-session-formatting.d.ts.map +1 -1
  122. package/dist/hooks/magic-context/read-session-raw.d.ts +118 -1
  123. package/dist/hooks/magic-context/read-session-raw.d.ts.map +1 -1
  124. package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts.map +1 -1
  125. package/dist/hooks/magic-context/reasoning-budget.d.ts.map +1 -1
  126. package/dist/hooks/magic-context/rust-mode-transform.d.ts +36 -0
  127. package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
  128. package/dist/hooks/magic-context/sentinel.d.ts +41 -1
  129. package/dist/hooks/magic-context/sentinel.d.ts.map +1 -1
  130. package/dist/hooks/magic-context/shared-compartment-boundaries.d.ts +8 -1
  131. package/dist/hooks/magic-context/shared-compartment-boundaries.d.ts.map +1 -1
  132. package/dist/hooks/magic-context/strict-thinking-prefix.d.ts +8 -0
  133. package/dist/hooks/magic-context/strict-thinking-prefix.d.ts.map +1 -0
  134. package/dist/hooks/magic-context/strip-content.d.ts +14 -2
  135. package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
  136. package/dist/hooks/magic-context/system-prompt-hash.d.ts +1 -0
  137. package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
  138. package/dist/hooks/magic-context/tag-messages.d.ts +8 -0
  139. package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
  140. package/dist/hooks/magic-context/tag-owner-warmup.d.ts +6 -0
  141. package/dist/hooks/magic-context/tag-owner-warmup.d.ts.map +1 -0
  142. package/dist/hooks/magic-context/tail-hygiene-walk.d.ts.map +1 -1
  143. package/dist/hooks/magic-context/token-count-exact.d.ts +35 -0
  144. package/dist/hooks/magic-context/token-count-exact.d.ts.map +1 -0
  145. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +13 -0
  146. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  147. package/dist/hooks/magic-context/transform.d.ts +9 -2
  148. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  149. package/dist/hooks/magic-context/wrapup-orchestrator.d.ts.map +1 -1
  150. package/dist/{index-q6hef7fh.js → index-0sahzkwr.js} +6 -19
  151. package/dist/{index-k5bdx1bx.js → index-0w56v4fm.js} +3 -5
  152. package/dist/{index-5gq3b2ya.js → index-1bt88epp.js} +227 -205
  153. package/dist/{index-cwf6s3ay.js → index-1g30axtz.js} +3279 -2907
  154. package/dist/{index-5a2r0p9f.js → index-1r0k9js3.js} +20 -13
  155. package/dist/index-2bvekkfy.js +11 -0
  156. package/dist/{index-6d9e1m08.js → index-2jcbj7r1.js} +13301 -13225
  157. package/dist/index-2jgwttpt.js +3269 -0
  158. package/dist/index-4dhv7mqz.js +131 -0
  159. package/dist/{index-sj29b3z2.js → index-4mjhqadz.js} +3 -3
  160. package/dist/{index-0c82743p.js → index-57mrqed8.js} +17 -15
  161. package/dist/{index-b35pxds2.js → index-58e3y90n.js} +1 -18
  162. package/dist/index-7jzrrxap.js +931 -0
  163. package/dist/index-8ajstryz.js +18 -0
  164. package/dist/{index-sfpzqvdz.js → index-8cd2j99z.js} +2 -3
  165. package/dist/{index-6wkcswft.js → index-9qjqq45k.js} +29 -19
  166. package/dist/{index-adwfkpex.js → index-9rt53q79.js} +23 -23
  167. package/dist/index-b7mv1jx3.js +1060 -0
  168. package/dist/index-d9vfe7xq.js +16 -0
  169. package/dist/{index-gg8j07zz.js → index-ezmszwbd.js} +8 -6
  170. package/dist/index-fb3zxn06.js +13 -0
  171. package/dist/index-fr0wbhdn.js +43 -0
  172. package/dist/{index-mc22ayvf.js → index-ghc9f0n7.js} +11 -9
  173. package/dist/index-gzcmtmar.js +171 -0
  174. package/dist/{index-w2t4ah5j.js → index-h2py7207.js} +6762 -7400
  175. package/dist/index-h2wc01qk.js +120 -0
  176. package/dist/index-h5zfkjyk.js +1277 -0
  177. package/dist/{index-92bp57hg.js → index-ha87j7a8.js} +1343 -149
  178. package/dist/index-hj2q50k0.js +856 -0
  179. package/dist/{index-wx8a6bw3.js → index-kb9nn0a0.js} +270 -53
  180. package/dist/index-kmpvemph.js +1314 -0
  181. package/dist/index-kp5qe690.js +3030 -0
  182. package/dist/{index-m5fe6jch.js → index-kq57tdf0.js} +152 -2453
  183. package/dist/{v2/server-fq7kq32k.js → index-mfkzp7qj.js} +1 -16
  184. package/dist/{v2/server-njt3np1k.js → index-nm6a8xpd.js} +220 -961
  185. package/dist/{index-hybnrwq0.js → index-nsjyysj0.js} +137 -130
  186. package/dist/index-nydv6g8r.js +3569 -0
  187. package/dist/index-pavzsdc6.js +17 -0
  188. package/dist/index-peshmj6h.js +152 -0
  189. package/dist/index-pxwp2hjk.js +571 -0
  190. package/dist/{v2/server-yr3zj7e7.js → index-qt1qqasc.js} +6 -7
  191. package/dist/{v2/server-51dv1pr5.js → index-qx53vezw.js} +301 -27
  192. package/dist/{index-rrrsepyw.js → index-s4j7t92z.js} +90 -85
  193. package/dist/{index-9pk9exrb.js → index-stbr4ce6.js} +18 -18
  194. package/dist/{index-fzbvakh0.js → index-tqf7yg27.js} +3 -3
  195. package/dist/index-vkbqdnkj.js +2307 -0
  196. package/dist/{index-8da2zjhz.js → index-z1tjp257.js} +9 -7
  197. package/dist/index.d.ts.map +1 -1
  198. package/dist/index.js +608 -349
  199. package/dist/logger-ewak5q1s.js +20 -0
  200. package/dist/message-index-bounded-h0mrd4pr.js +124 -0
  201. package/dist/{v2/message-time-backfill-1f9tzvcs.js → message-time-backfill-8x06r9kx.js} +8 -6
  202. package/dist/migration-worker.js +25 -18
  203. package/dist/{model-resolution-xhfmyyvy.js → model-resolution-nx97z3x7.js} +1 -1
  204. package/dist/plugin/dream-timer.d.ts +1 -1
  205. package/dist/plugin/dream-timer.d.ts.map +1 -1
  206. package/dist/plugin/hooks/create-session-hooks.d.ts +3 -0
  207. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  208. package/dist/plugin/host-stall-profiler-report.d.ts +1 -66
  209. package/dist/plugin/host-stall-profiler-report.d.ts.map +1 -1
  210. package/dist/plugin/host-stall-profiler.d.ts +2 -95
  211. package/dist/plugin/host-stall-profiler.d.ts.map +1 -1
  212. package/dist/plugin/messages-transform.d.ts +0 -13
  213. package/dist/plugin/messages-transform.d.ts.map +1 -1
  214. package/dist/plugin/rpc-handlers.d.ts.map +1 -1
  215. package/dist/plugin/tool-registry.d.ts.map +1 -1
  216. package/dist/project-embedding-registry-rtt0djyb.js +88 -0
  217. package/dist/raw-ordinal-warmup-worker.js +60 -0
  218. package/dist/{read-session-chunk-4jey7hpt.js → read-session-chunk-ty89v75e.js} +17 -9
  219. package/dist/read-session-raw-8sjbc9h0.js +60 -0
  220. package/dist/recomp-orchestrator-4f1yyd1q.js +57 -0
  221. package/dist/{v2/safe-notification-target-eb1n1vfb.js → safe-notification-target-q0cyrx3x.js} +4 -2
  222. package/dist/search-pz4f4wge.js +45 -0
  223. package/dist/{v2/send-session-notification-c0wtscea.js → send-session-notification-38cd5dqt.js} +10 -7
  224. package/dist/shared/auto-search-lifecycle.d.ts +14 -0
  225. package/dist/shared/auto-search-lifecycle.d.ts.map +1 -1
  226. package/dist/shared/conflict-detector.d.ts.map +1 -1
  227. package/dist/shared/host-stall-profiler-bun.d.ts +46 -0
  228. package/dist/shared/host-stall-profiler-bun.d.ts.map +1 -0
  229. package/dist/shared/host-stall-profiler-common.d.ts +58 -0
  230. package/dist/shared/host-stall-profiler-common.d.ts.map +1 -0
  231. package/dist/shared/host-stall-profiler-node.d.ts +36 -0
  232. package/dist/shared/host-stall-profiler-node.d.ts.map +1 -0
  233. package/dist/shared/host-stall-profiler-report.d.ts +68 -0
  234. package/dist/shared/host-stall-profiler-report.d.ts.map +1 -0
  235. package/dist/shared/host-stall-profiler.d.ts +5 -0
  236. package/dist/shared/host-stall-profiler.d.ts.map +1 -0
  237. package/dist/shared/logger.d.ts.map +1 -1
  238. package/dist/shared/model-resolution.d.ts +2 -3
  239. package/dist/shared/model-resolution.d.ts.map +1 -1
  240. package/dist/shared/models-dev-temperature.d.ts +18 -0
  241. package/dist/shared/models-dev-temperature.d.ts.map +1 -0
  242. package/dist/shared/project-directory-key.d.ts +16 -0
  243. package/dist/shared/project-directory-key.d.ts.map +1 -1
  244. package/dist/shared/sqlite.d.ts +30 -0
  245. package/dist/shared/sqlite.d.ts.map +1 -1
  246. package/dist/shared/stable-json.d.ts.map +1 -1
  247. package/dist/shared/subagent-temperature.d.ts +46 -0
  248. package/dist/shared/subagent-temperature.d.ts.map +1 -0
  249. package/dist/shared/user-facing-codes.d.ts +0 -5
  250. package/dist/shared/user-facing-codes.d.ts.map +1 -1
  251. package/dist/sqlite-context-pragmas-mv9jqwjh.js +6 -0
  252. package/dist/sqlite-mhjkerzq.js +46 -0
  253. package/dist/storage-memory-07fx57k6.js +71 -0
  254. package/dist/storage-tags-k0pda32s.js +133 -0
  255. package/dist/{task-config-v81k8jvk.js → task-config-cgpg0nvh.js} +2 -2
  256. package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
  257. package/dist/tools/ctx-note/constants.d.ts +4 -0
  258. package/dist/tools/ctx-note/constants.d.ts.map +1 -1
  259. package/dist/tools/ctx-note/tools.d.ts +1 -0
  260. package/dist/tools/ctx-note/tools.d.ts.map +1 -1
  261. package/dist/tools/ctx-reduce/tools.d.ts.map +1 -1
  262. package/dist/tools/ctx-search/tools.d.ts.map +1 -1
  263. package/dist/tools/ctx-search/types.d.ts +1 -0
  264. package/dist/tools/ctx-search/types.d.ts.map +1 -1
  265. package/dist/tools/parameter-descriptions.d.ts +2 -2
  266. package/dist/tools/parameter-descriptions.d.ts.map +1 -1
  267. package/dist/{transform-postprocess-phase-z5hzpsxv.js → transform-postprocess-phase-tck4g20s.js} +35 -20
  268. package/dist/transformers-node-wasm.js +18415 -18415
  269. package/dist/v2/auto-search-worker.js +27 -30
  270. package/dist/v2/{context-14v1hr8b.js → context-crbt6p1y.js} +4708 -4218
  271. package/dist/v2/{derive-budgets-nc9avxz8.js → derive-budgets-fgej9j46.js} +4 -3
  272. package/dist/v2/embedding-activity-g1dhes6g.js +10 -0
  273. package/dist/v2/embedding-backfill-ph1qfyn3.js +21 -0
  274. package/dist/v2/embedding-cache-mgyr73ef.js +16 -0
  275. package/dist/v2/embedding-worker.js +12 -9
  276. package/dist/v2/fold/host-media.d.ts +4 -0
  277. package/dist/v2/fold/host-media.d.ts.map +1 -1
  278. package/dist/v2/fold/memory-cache.d.ts +70 -0
  279. package/dist/v2/fold/memory-cache.d.ts.map +1 -0
  280. package/dist/v2/fold/native-codec.d.ts +10 -0
  281. package/dist/v2/fold/native-codec.d.ts.map +1 -0
  282. package/dist/v2/fold/native-replay.d.ts +58 -0
  283. package/dist/v2/fold/native-replay.d.ts.map +1 -0
  284. package/dist/v2/fold/policy.d.ts +24 -0
  285. package/dist/v2/fold/policy.d.ts.map +1 -0
  286. package/dist/v2/harness-e4avh192.js +10 -0
  287. package/dist/v2/hidden-child-native.d.ts.map +1 -1
  288. package/dist/v2/hidden-completion.d.ts +7 -0
  289. package/dist/v2/hidden-completion.d.ts.map +1 -1
  290. package/dist/v2/hooks/context.d.ts +2 -2
  291. package/dist/v2/hooks/context.d.ts.map +1 -1
  292. package/dist/v2/hooks/dream-manual.d.ts +1 -1
  293. package/dist/v2/hooks/dream-manual.d.ts.map +1 -1
  294. package/dist/v2/hooks/dream-timer.d.ts.map +1 -1
  295. package/dist/v2/hooks/dream-trigger.d.ts +5 -3
  296. package/dist/v2/hooks/dream-trigger.d.ts.map +1 -1
  297. package/dist/v2/hooks/generate.d.ts +9 -2
  298. package/dist/v2/hooks/generate.d.ts.map +1 -1
  299. package/dist/v2/hooks/payload.d.ts.map +1 -1
  300. package/dist/v2/hooks/tools.d.ts.map +1 -1
  301. package/dist/v2/hooks/types.d.ts +6 -0
  302. package/dist/v2/hooks/types.d.ts.map +1 -1
  303. package/dist/v2/logger-pj02s7sr.js +19 -0
  304. package/dist/v2/message-index-bounded-xwqdywxg.js +123 -0
  305. package/dist/{message-time-backfill-r5epkzj3.js → v2/message-time-backfill-cje68egj.js} +7 -7
  306. package/dist/v2/migration-worker.js +24 -17
  307. package/dist/v2/{model-resolution-xhfmyyvy.js → model-resolution-nx97z3x7.js} +1 -1
  308. package/dist/v2/project-embedding-registry-d6m7tyxr.js +86 -0
  309. package/dist/v2/raw-ordinal-warmup-worker.js +60 -0
  310. package/dist/v2/{read-session-chunk-gyyv7w2r.js → read-session-chunk-8p5mdryx.js} +16 -8
  311. package/dist/v2/read-session-raw-j8dvp7f4.js +59 -0
  312. package/dist/v2/recomp-orchestrator-ckfgt6wq.js +57 -0
  313. package/dist/{safe-notification-target-43r8jsxw.js → v2/safe-notification-target-y3p1hce9.js} +3 -3
  314. package/dist/v2/search-ym8rehhz.js +45 -0
  315. package/dist/{send-session-notification-0m68ms3n.js → v2/send-session-notification-5m0yapqx.js} +9 -8
  316. package/dist/v2/{server-rz514f14.js → server-19zjmn02.js} +2044 -2060
  317. package/dist/v2/server-1tk82krw.js +796 -0
  318. package/dist/v2/server-2bvekkfy.js +11 -0
  319. package/dist/v2/{server-ajzeteqw.js → server-2ra6pwf3.js} +1 -18
  320. package/dist/v2/server-2s6ayq3t.js +1048 -0
  321. package/dist/v2/{server-fcdehk1s.js → server-2s9qz6n7.js} +4 -4
  322. package/dist/v2/server-3j4d00kf.js +171 -0
  323. package/dist/v2/{server-14vq4kpm.js → server-3t0q2cqx.js} +3 -3
  324. package/dist/v2/server-4dhv7mqz.js +131 -0
  325. package/dist/v2/server-4ez8mntn.js +3213 -0
  326. package/dist/v2/{server-6r257mf5.js → server-676xw7at.js} +3 -3
  327. package/dist/v2/{server-vs5gpnd4.js → server-6byqfbqf.js} +165 -145
  328. package/dist/v2/server-7ekna9zs.js +120 -0
  329. package/dist/v2/server-7h861yms.js +1272 -0
  330. package/dist/v2/server-7jzrrxap.js +931 -0
  331. package/dist/v2/server-8ajstryz.js +18 -0
  332. package/dist/v2/{server-sfpzqvdz.js → server-8cd2j99z.js} +2 -3
  333. package/dist/v2/{server-cpepxy2q.js → server-8k2agx29.js} +14 -12
  334. package/dist/v2/server-c5rrgrcd.js +3545 -0
  335. package/dist/v2/server-d9vfe7xq.js +16 -0
  336. package/dist/v2/server-fb3zxn06.js +13 -0
  337. package/dist/v2/server-fr0wbhdn.js +43 -0
  338. package/dist/v2/{server-y10vbq6y.js → server-hb6xhh9q.js} +11 -1053
  339. package/dist/v2/server-jvxzm1jy.js +3023 -0
  340. package/dist/v2/{server-wx8a6bw3.js → server-kb9nn0a0.js} +270 -53
  341. package/dist/{index-5eqk6z3s.js → v2/server-kzns2hbz.js} +301 -27
  342. package/dist/{index-rrbbspwh.js → v2/server-mfkzp7qj.js} +1 -16
  343. package/dist/v2/server-pavzsdc6.js +17 -0
  344. package/dist/v2/{server-vd4e7174.js → server-pj4pjv02.js} +21 -17
  345. package/dist/v2/{server-e0c1b7a7.js → server-q4ph9bwn.js} +1340 -148
  346. package/dist/{index-yr3zj7e7.js → v2/server-qt1qqasc.js} +6 -7
  347. package/dist/v2/{server-qdjnb2z1.js → server-r5p3b1wy.js} +11 -9
  348. package/dist/v2/{server-d0sraw7m.js → server-sa8jvrfc.js} +291 -286
  349. package/dist/v2/server-ss95ky04.js +1048 -0
  350. package/dist/v2/{server-1qbnzc80.js → server-t4k4qexw.js} +142 -150
  351. package/dist/{index-x3kwrmqk.js → v2/server-v4mewb78.js} +35 -792
  352. package/dist/v2/server-w32kmdez.js +154 -0
  353. package/dist/v2/{server-nf82q6pt.js → server-x4hscabv.js} +5547 -5449
  354. package/dist/v2/server-xwz4dqh9.js +569 -0
  355. package/dist/v2/{server-efhwzx05.js → server-ycw9qqcy.js} +23 -23
  356. package/dist/v2/{server-50hvkg3v.js → server-zm570tr2.js} +160 -158
  357. package/dist/v2/server-zp53y8js.js +1311 -0
  358. package/dist/v2/server.js +16 -14
  359. package/dist/v2/sqlite-context-pragmas-mv9jqwjh.js +6 -0
  360. package/dist/v2/sqlite-mhjkerzq.js +46 -0
  361. package/dist/v2/storage-memory-07fx57k6.js +71 -0
  362. package/dist/v2/storage-tags-8vw924zn.js +132 -0
  363. package/dist/v2/store-reader.d.ts +24 -2
  364. package/dist/v2/store-reader.d.ts.map +1 -1
  365. package/dist/v2/{task-config-tbndqyny.js → task-config-x0hq3qfd.js} +2 -2
  366. package/dist/v2/transformers-node-wasm.js +18415 -18415
  367. package/dist/v2/tui/index.d.ts.map +1 -1
  368. package/dist/v2/tui/types.d.ts +1 -10
  369. package/dist/v2/tui/types.d.ts.map +1 -1
  370. package/dist/v2/{wrapup-orchestrator-nbz854vc.js → wrapup-orchestrator-a7efxaax.js} +51 -30
  371. package/dist/wrapup-orchestrator-barbc6h9.js +44 -0
  372. package/package.json +4 -3
  373. package/src/agents/magic-context-prompt.ts +27 -2
  374. package/src/agents/smart-notes-enabled.test.ts +294 -0
  375. package/src/agents/smart-notes-on.golden.json +70 -0
  376. package/src/config/index.test.ts +67 -1
  377. package/src/config/index.ts +2 -0
  378. package/src/config/latch-permanence-guard.test.ts +4 -0
  379. package/src/config/mural-model-deprecation.ts +24 -0
  380. package/src/config/project-security.hostile-matrix.test.ts +4 -44
  381. package/src/config/project-security.test.ts +9 -14
  382. package/src/config/project-security.ts +13 -55
  383. package/src/config/schema/magic-context.test.ts +2 -2
  384. package/src/config/schema/magic-context.ts +16 -10
  385. package/src/features/magic-context/dreamer/task-registry.ts +6 -0
  386. package/src/shared/auto-search-lifecycle.ts +43 -0
  387. package/src/shared/conflict-detector.test.ts +56 -0
  388. package/src/shared/conflict-detector.ts +16 -5
  389. package/src/shared/host-stall-profiler-bun.ts +358 -0
  390. package/src/shared/host-stall-profiler-common.ts +159 -0
  391. package/src/shared/host-stall-profiler-node.test.ts +234 -0
  392. package/src/shared/host-stall-profiler-node.ts +274 -0
  393. package/src/shared/host-stall-profiler-report.ts +248 -0
  394. package/src/shared/host-stall-profiler.ts +57 -0
  395. package/src/shared/logger.test.ts +38 -0
  396. package/src/shared/logger.ts +10 -2
  397. package/src/shared/model-resolution.test.ts +54 -17
  398. package/src/shared/model-resolution.ts +6 -17
  399. package/src/shared/models-dev-temperature.ts +107 -0
  400. package/src/shared/project-directory-key.test.ts +59 -0
  401. package/src/shared/project-directory-key.ts +20 -0
  402. package/src/shared/sqlite.test.ts +52 -0
  403. package/src/shared/sqlite.ts +339 -23
  404. package/src/shared/stable-json-linear.test.ts +109 -0
  405. package/src/shared/stable-json.ts +37 -7
  406. package/src/shared/subagent-temperature.test.ts +270 -0
  407. package/src/shared/subagent-temperature.ts +110 -0
  408. package/src/shared/user-facing-codes.ts +2 -6
  409. package/src/shared/write-transaction-attribution.test.ts +2 -2
  410. package/src/v2/tui/host-contract.test.ts +41 -67
  411. package/src/v2/tui/index.ts +6 -214
  412. package/src/v2/tui/types.ts +5 -17
  413. package/dist/features/magic-context/checkout-claim-fake-subc.test-support.d.ts +0 -45
  414. package/dist/features/magic-context/checkout-claim-fake-subc.test-support.d.ts.map +0 -1
  415. package/dist/features/magic-context/checkout-claim.d.ts +0 -155
  416. package/dist/features/magic-context/checkout-claim.d.ts.map +0 -1
  417. package/dist/index-bb36vgr3.js +0 -6608
  418. package/dist/index-fnn5pjtt.js +0 -6554
  419. package/dist/recomp-orchestrator-rervg6q4.js +0 -42
  420. package/dist/v2/recomp-orchestrator-42vjba7p.js +0 -42
  421. package/dist/v2/server-3trjk1hx.js +0 -6360
  422. package/dist/v2/server-nm9n3aqq.js +0 -6461
  423. package/dist/wrapup-orchestrator-b2dztrar.js +0 -29
  424. /package/dist/{index-5prbx026.js → index-2pp04pmg.js} +0 -0
  425. /package/dist/v2/{index-5prbx026.js → index-2pp04pmg.js} +0 -0
@@ -1,25 +1,31 @@
1
1
  import {
2
- harnessOwnsOpenCodeStore,
2
+ harnessOwnsOpenCodeStore2
3
+ } from "./server-pavzsdc6.js";
4
+ import {
3
5
  getMagicContextStorageDir,
4
6
  getLegacyOpenCodeMagicContextStorageDir,
5
7
  sanitizeDiagnosticText,
6
8
  importPluginModule,
7
- writeForwardedLogLine,
8
- log
9
- } from "./server-1qbnzc80.js";
9
+ writeForwardedLogLine2,
10
+ log2
11
+ } from "./server-t4k4qexw.js";
10
12
  import {
11
- registerSlowWriteReporter,
12
- registerSqliteDiagnosticSink,
13
- detectSqliteRuntime,
14
- Database,
15
- withSqliteBackgroundWriter,
16
- withoutSqliteTransformPass,
17
- isTransientSqliteError,
18
- withPrivilegedWriter
19
- } from "./server-wx8a6bw3.js";
13
+ registerSlowWriteReporter2,
14
+ registerSqliteDiagnosticSink2,
15
+ detectSqliteRuntime2,
16
+ Database2,
17
+ withSqliteBackgroundWriter2,
18
+ withoutSqliteTransformPass2,
19
+ isTransientSqliteError2,
20
+ withPrivilegedWriter2
21
+ } from "./server-kb9nn0a0.js";
22
+ import {
23
+ configureContextDatabasePragmas2
24
+ } from "./server-fb3zxn06.js";
25
+ import {
26
+ startMessageFtsRowidMapBackfill
27
+ } from "./server-3j4d00kf.js";
20
28
  import {
21
- canonicalProjectDirectory,
22
- startMessageFtsRowidMapBackfill,
23
29
  LKG_SLOT_CHUNKS_DDL,
24
30
  SESSION_REPLAY_DECISIONS_DDL,
25
31
  LKG_SLOTS_DDL,
@@ -27,21 +33,26 @@ import {
27
33
  FORK_MIGRATION_VERSION_FLOOR,
28
34
  hasPendingMigrations,
29
35
  getMainThreadMigrationBodyCount,
30
- runMigrations,
31
- bootQuietRemainingMs,
32
- scheduleAfterBootQuiet
33
- } from "./server-njt3np1k.js";
36
+ runMigrations
37
+ } from "./server-v4mewb78.js";
34
38
  import {
35
39
  ensureColumn,
36
40
  installV95PerfSchema,
37
- setDatabase,
38
- loadToolDefinitionMeasurements
39
- } from "./server-vs5gpnd4.js";
41
+ installTagIdentityRevisionTrigger
42
+ } from "./server-6byqfbqf.js";
40
43
  import {
41
- closeQuietly,
42
44
  resolveOpenCodeDbPath,
43
45
  hasV1MessageTables
44
- } from "./server-ajzeteqw.js";
46
+ } from "./server-2ra6pwf3.js";
47
+ import {
48
+ canonicalProjectDirectory,
49
+ bootQuietRemainingMs,
50
+ scheduleAfterBootQuiet
51
+ } from "./server-xwz4dqh9.js";
52
+ import {
53
+ setDatabase,
54
+ loadToolDefinitionMeasurements
55
+ } from "./server-7ekna9zs.js";
45
56
  import {
46
57
  getErrorMessage
47
58
  } from "./server-y8v6yerm.js";
@@ -53,213 +64,12 @@ import {
53
64
  copyStorageTreeSync,
54
65
  tightenStorageTreeSync
55
66
  } from "./server-1bc61ans.js";
67
+ import {
68
+ closeQuietly
69
+ } from "./server-8ajstryz.js";
56
70
  import {
57
71
  logSlowWriteTransaction
58
- } from "./server-14vq4kpm.js";
59
-
60
- // src/features/magic-context/fail-closed-block.ts
61
- var FAIL_CLOSED_DOCTOR_COMMAND = "npx @cortexkit/magic-context@latest doctor";
62
- function attachFailClosedBlockingProcessEvidence(process2, evidence) {
63
- Object.defineProperties(process2, {
64
- startTime: { configurable: true, value: evidence.startTime },
65
- commandLine: { configurable: true, value: evidence.commandLine }
66
- });
67
- return process2;
68
- }
69
-
70
- class FailClosedBlockingError extends Error {
71
- code = "FAIL_CLOSED_BLOCKING";
72
- reason;
73
- constructor(message, reason, options) {
74
- super(message, options);
75
- this.name = "FailClosedBlockingError";
76
- this.reason = reason;
77
- }
78
- }
79
- var OPENCODE_INTERNAL_AGENT_NAMES = new Set(["title", "summary", "compaction"]);
80
- function isMagicContextHiddenAgentName(agent) {
81
- if (agent === "smart-note-compiler" || agent.startsWith("smart-note-")) {
82
- return true;
83
- }
84
- if (agent === "historian" || agent.startsWith("historian-"))
85
- return true;
86
- if (agent === "dreamer" || agent.startsWith("dreamer-"))
87
- return true;
88
- return false;
89
- }
90
- var MAX_FORMATTED_BLOCKING_PROCESSES = 8;
91
- var MAX_FORMATTED_COMMAND_LINE_LENGTH = 80;
92
- function normalizeFailClosedProcessKind(process2) {
93
- switch (process2.kind) {
94
- case "OpenCode server":
95
- case "OpenCode instance (TUI/CLI)":
96
- case "Pi":
97
- case "process":
98
- return process2.kind;
99
- }
100
- switch (process2.harness?.trim().toLowerCase()) {
101
- case "opencode server":
102
- return "OpenCode server";
103
- case "opencode instance (tui/cli)":
104
- case "opencode instance":
105
- return "OpenCode instance (TUI/CLI)";
106
- case "pi":
107
- case "pi harness":
108
- case "omp":
109
- return "Pi";
110
- default:
111
- return "process";
112
- }
113
- }
114
- function formatFailClosedProcessStartTime(startTime) {
115
- if (!Number.isFinite(startTime) || startTime <= 0)
116
- return "unverified";
117
- try {
118
- const parts = new Intl.DateTimeFormat("en-US", {
119
- day: "numeric",
120
- hour: "2-digit",
121
- minute: "2-digit",
122
- month: "short",
123
- hour12: false
124
- }).formatToParts(new Date(startTime));
125
- const values = Object.fromEntries(parts.map(({ type, value }) => [type, value]));
126
- if (!values.month || !values.day || !values.hour || !values.minute)
127
- return "unverified";
128
- return `${values.month} ${values.day} ${values.hour}:${values.minute}`;
129
- } catch {
130
- return "unverified";
131
- }
132
- }
133
- function formatFailClosedCommandLine(commandLine) {
134
- if (typeof commandLine !== "string" || commandLine.trim().length === 0)
135
- return "unverified";
136
- try {
137
- const normalized = commandLine.replaceAll("\x00", " ").replace(/\s+/g, " ").trim();
138
- if (normalized.length === 0)
139
- return "unverified";
140
- const sanitized = sanitizeDiagnosticText(normalized).trim();
141
- if (sanitized.length === 0)
142
- return "unverified";
143
- return sanitized.length > MAX_FORMATTED_COMMAND_LINE_LENGTH ? `${sanitized.slice(0, MAX_FORMATTED_COMMAND_LINE_LENGTH - 3)}...` : sanitized;
144
- } catch {
145
- return "unverified";
146
- }
147
- }
148
- function formatFailClosedBlockingProcesses(processes) {
149
- const uniqueProcesses = new Map;
150
- for (const process2 of processes) {
151
- if (!Number.isInteger(process2.pid) || process2.pid <= 0)
152
- continue;
153
- const candidate = {
154
- kind: normalizeFailClosedProcessKind(process2),
155
- pid: process2.pid,
156
- startTime: process2.startTime,
157
- commandLine: process2.commandLine
158
- };
159
- const previous = uniqueProcesses.get(process2.pid);
160
- if (!previous || previous.kind === "process" && candidate.kind !== "process") {
161
- uniqueProcesses.set(process2.pid, candidate);
162
- } else {
163
- uniqueProcesses.set(process2.pid, {
164
- ...previous,
165
- startTime: previous.startTime ?? candidate.startTime,
166
- commandLine: previous.commandLine ?? candidate.commandLine
167
- });
168
- }
169
- }
170
- const entries = [...uniqueProcesses.values()];
171
- const visible = entries.slice(0, MAX_FORMATTED_BLOCKING_PROCESSES);
172
- const rendered = visible.map(({ kind, pid }) => `${kind} (PID ${pid})`);
173
- const omitted = entries.length - visible.length;
174
- if (omitted > 0)
175
- rendered.push(`${omitted} more blocking process(es)`);
176
- if (rendered.length === 0)
177
- return "a live process";
178
- const summary = rendered.length === 1 ? rendered[0] : `${rendered.slice(0, -1).join(", ")}, and ${rendered.at(-1)}`;
179
- const evidence = entries.map(({ kind, pid, startTime, commandLine }) => `- PID ${pid}: ${kind}, started ${formatFailClosedProcessStartTime(startTime)}, cmd: ${formatFailClosedCommandLine(commandLine)}`).join(`
180
- `);
181
- return `${summary}
182
- Blocking process evidence:
183
- ${evidence}`;
184
- }
185
- function formatFailClosedBlockingMessage(reason) {
186
- if (reason.kind === "migration_guard") {
187
- if (reason.unreadableFile) {
188
- const arm = reason.unreadableArm ?? "io";
189
- const recovery = arm === "io" ? `If none of these processes are running, it is safe to delete ${reason.unreadableFile} and retry.` : `The file may be a recent incomplete write; retry after the file is older than the ten-minute grace window, or stop the relevant process before deleting it.`;
190
- return [
191
- `Magic Context cannot migrate the shared database because RPC discovery file ${reason.unreadableFile} is uncertain (${arm} arm), so the absence of a live process cannot be proven.`,
192
- recovery,
193
- `Recovery: ${FAIL_CLOSED_DOCTOR_COMMAND}`
194
- ].join(" ");
195
- }
196
- return [
197
- `Magic Context cannot migrate the shared database (one database serves every project on this machine) because ${formatFailClosedBlockingProcesses(reason.blockingProcesses)} may be running an older Magic Context build that would fail against the migrated database.`,
198
- `The database is at upstream migration v${reason.persistedVersion}; this build needs v${reason.supportedVersion}.`,
199
- "Restart the blocking process — even one from a different project — and it will pick up the new build and migrate on start; or shut it down and retry.",
200
- "If that host loads a pinned or cached older Magic Context build, a restart alone is not enough: stop it or update its Magic Context build, then start this host once so it migrates the database with nothing older attached.",
201
- `Recovery: ${FAIL_CLOSED_DOCTOR_COMMAND}`
202
- ].join(" ");
203
- }
204
- if (reason.kind === "schema_fence") {
205
- return [
206
- `Magic Context cannot operate: this Magic Context build is older than the database; upgrade/restart this harness (upstream migration lane v${reason.persistedVersion}, build supports through v${reason.supportedVersion}).`,
207
- `Recovery: ${FAIL_CLOSED_DOCTOR_COMMAND}`
208
- ].join(" ");
209
- }
210
- const cause = reason.cause.trim().length > 0 ? reason.cause.trim() : "unknown storage error";
211
- return [
212
- `Magic Context cannot operate: persistent storage failed (${cause}).`,
213
- "The plugin will not silently degrade to native compaction while enabled.",
214
- `Recovery: ${FAIL_CLOSED_DOCTOR_COMMAND}`
215
- ].join(" ");
216
- }
217
- function formatFailClosedBlockingSummary(reason) {
218
- if (reason.kind === "migration_guard") {
219
- if (reason.unreadableFile) {
220
- return `Magic Context cannot migrate the shared database from v${reason.persistedVersion} to v${reason.supportedVersion}: RPC discovery file ${reason.unreadableFile} could not be read, so an older host may still be attached.`;
221
- }
222
- const blockers = reason.blockingProcesses.filter((process2) => Number.isInteger(process2.pid) && process2.pid > 0).map((process2) => `${normalizeFailClosedProcessKind(process2)} (PID ${process2.pid})`);
223
- const named = blockers.length > 0 ? blockers.join(", ") : "a live process";
224
- return `Magic Context cannot migrate the shared database from v${reason.persistedVersion} to v${reason.supportedVersion} while ${named} may still run an older Magic Context build. Stop or update that host, then start this one once.`;
225
- }
226
- if (reason.kind === "schema_fence") {
227
- return `Magic Context cannot operate: the shared database is at v${reason.persistedVersion}, newer than this build supports (v${reason.supportedVersion}). Update and restart this host.`;
228
- }
229
- const cause = reason.cause.trim().length > 0 ? reason.cause.trim() : "unknown storage error";
230
- return `Magic Context cannot operate: persistent storage failed (${cause}).`;
231
- }
232
- function createFailClosedBlockingError(reason, options) {
233
- return new FailClosedBlockingError(formatFailClosedBlockingMessage(reason), reason, options);
234
- }
235
- function isFailClosedBlockingError(error) {
236
- return error instanceof FailClosedBlockingError || typeof error === "object" && error !== null && error.name === "FailClosedBlockingError" && error.code === "FAIL_CLOSED_BLOCKING";
237
- }
238
- function shouldBypassFailClosedBlock(input) {
239
- if (input.isPiSubagentEnv === true)
240
- return true;
241
- if (input.isInternalChildSession === true)
242
- return true;
243
- const agent = typeof input.agent === "string" ? input.agent.trim() : "";
244
- if (agent.length === 0)
245
- return false;
246
- if (OPENCODE_INTERNAL_AGENT_NAMES.has(agent))
247
- return true;
248
- if (isMagicContextHiddenAgentName(agent))
249
- return true;
250
- return false;
251
- }
252
- function resolveAgentNameFromMessages(messages) {
253
- for (let i = messages.length - 1;i >= 0; i -= 1) {
254
- const info = messages[i]?.info;
255
- if (!info || typeof info !== "object")
256
- continue;
257
- const agent = info.agent;
258
- if (typeof agent === "string" && agent.length > 0)
259
- return agent;
260
- }
261
- return;
262
- }
72
+ } from "./server-3t0q2cqx.js";
263
73
 
264
74
  // src/features/magic-context/storage-db.ts
265
75
  import {
@@ -815,7 +625,7 @@ function classifyLivePiSnapshot(snapshot, probeParents = true) {
815
625
  continue;
816
626
  if (ancestors.has(fact.pid)) {
817
627
  skippedAncestorPids.push(fact.pid);
818
- log(`[magic-context] Pi process scan: skipping ancestor PID ${fact.pid} (session launcher shim)`);
628
+ log2(`[magic-context] Pi process scan: skipping ancestor PID ${fact.pid} (session launcher shim)`);
819
629
  continue;
820
630
  }
821
631
  if (commandHasPiHarnessArc(command)) {
@@ -823,7 +633,7 @@ function classifyLivePiSnapshot(snapshot, probeParents = true) {
823
633
  continue;
824
634
  }
825
635
  inconclusivePids.add(fact.pid);
826
- log(`[magic-context] Pi process scan: PID ${fact.pid} command line is ambiguous (image-name or missing Pi/OMP arc); treating as inconclusive`);
636
+ log2(`[magic-context] Pi process scan: PID ${fact.pid} command line is ambiguous (image-name or missing Pi/OMP arc); treating as inconclusive`);
827
637
  }
828
638
  skippedAncestorPids.sort((left, right) => left - right);
829
639
  const verified = [...processIds].sort((left, right) => left - right);
@@ -997,18 +807,6 @@ function inspectWindowsProcessesSync() {
997
807
  };
998
808
  }
999
809
 
1000
- // src/shared/sqlite-context-pragmas.ts
1001
- function configureContextDatabasePragmas(db, readonly = false) {
1002
- const [row] = db.prepare(readonly ? "PRAGMA journal_mode" : "PRAGMA journal_mode=WAL").all();
1003
- const mode = row?.journal_mode?.toLowerCase();
1004
- if (mode === "memory" || readonly && mode !== "wal")
1005
- return;
1006
- if (mode !== "wal") {
1007
- throw new Error(`context.db requires WAL before synchronous=NORMAL (got ${mode ?? "unknown"})`);
1008
- }
1009
- db.exec("PRAGMA synchronous=NORMAL");
1010
- }
1011
-
1012
810
  // src/features/magic-context/context-store-uuid.ts
1013
811
  import { randomUUID } from "node:crypto";
1014
812
  function getContextStoreUuid(db) {
@@ -1020,7 +818,7 @@ function ensureContextStoreUuid(db) {
1020
818
  if (existing)
1021
819
  return existing;
1022
820
  const minted = randomUUID();
1023
- withPrivilegedWriter(db, () => {
821
+ withPrivilegedWriter2(db, () => {
1024
822
  db.transaction(() => {
1025
823
  db.prepare("INSERT INTO context_store_meta(key, value) VALUES ('store_uuid', ?) ON CONFLICT(key) DO NOTHING").run(minted);
1026
824
  }).immediate();
@@ -1028,6 +826,210 @@ function ensureContextStoreUuid(db) {
1028
826
  return getContextStoreUuid(db) ?? minted;
1029
827
  }
1030
828
 
829
+ // src/features/magic-context/fail-closed-block.ts
830
+ var FAIL_CLOSED_DOCTOR_COMMAND = "npx @cortexkit/magic-context@latest doctor";
831
+ function attachFailClosedBlockingProcessEvidence(process2, evidence) {
832
+ Object.defineProperties(process2, {
833
+ startTime: { configurable: true, value: evidence.startTime },
834
+ commandLine: { configurable: true, value: evidence.commandLine }
835
+ });
836
+ return process2;
837
+ }
838
+
839
+ class FailClosedBlockingError extends Error {
840
+ code = "FAIL_CLOSED_BLOCKING";
841
+ reason;
842
+ constructor(message, reason, options) {
843
+ super(message, options);
844
+ this.name = "FailClosedBlockingError";
845
+ this.reason = reason;
846
+ }
847
+ }
848
+ var OPENCODE_INTERNAL_AGENT_NAMES = new Set(["title", "summary", "compaction"]);
849
+ function isMagicContextHiddenAgentName(agent) {
850
+ if (agent === "smart-note-compiler" || agent.startsWith("smart-note-")) {
851
+ return true;
852
+ }
853
+ if (agent === "historian" || agent.startsWith("historian-"))
854
+ return true;
855
+ if (agent === "dreamer" || agent.startsWith("dreamer-"))
856
+ return true;
857
+ return false;
858
+ }
859
+ var MAX_FORMATTED_BLOCKING_PROCESSES = 8;
860
+ var MAX_FORMATTED_COMMAND_LINE_LENGTH = 80;
861
+ function normalizeFailClosedProcessKind(process2) {
862
+ switch (process2.kind) {
863
+ case "OpenCode server":
864
+ case "OpenCode instance (TUI/CLI)":
865
+ case "Pi":
866
+ case "process":
867
+ return process2.kind;
868
+ }
869
+ switch (process2.harness?.trim().toLowerCase()) {
870
+ case "opencode server":
871
+ return "OpenCode server";
872
+ case "opencode instance (tui/cli)":
873
+ case "opencode instance":
874
+ return "OpenCode instance (TUI/CLI)";
875
+ case "pi":
876
+ case "pi harness":
877
+ case "omp":
878
+ return "Pi";
879
+ default:
880
+ return "process";
881
+ }
882
+ }
883
+ function formatFailClosedProcessStartTime(startTime) {
884
+ if (!Number.isFinite(startTime) || startTime <= 0)
885
+ return "unverified";
886
+ try {
887
+ const parts = new Intl.DateTimeFormat("en-US", {
888
+ day: "numeric",
889
+ hour: "2-digit",
890
+ minute: "2-digit",
891
+ month: "short",
892
+ hour12: false
893
+ }).formatToParts(new Date(startTime));
894
+ const values = Object.fromEntries(parts.map(({ type, value }) => [type, value]));
895
+ if (!values.month || !values.day || !values.hour || !values.minute)
896
+ return "unverified";
897
+ return `${values.month} ${values.day} ${values.hour}:${values.minute}`;
898
+ } catch {
899
+ return "unverified";
900
+ }
901
+ }
902
+ function formatFailClosedCommandLine(commandLine) {
903
+ if (typeof commandLine !== "string" || commandLine.trim().length === 0)
904
+ return "unverified";
905
+ try {
906
+ const normalized = commandLine.replaceAll("\x00", " ").replace(/\s+/g, " ").trim();
907
+ if (normalized.length === 0)
908
+ return "unverified";
909
+ const sanitized = sanitizeDiagnosticText(normalized).trim();
910
+ if (sanitized.length === 0)
911
+ return "unverified";
912
+ return sanitized.length > MAX_FORMATTED_COMMAND_LINE_LENGTH ? `${sanitized.slice(0, MAX_FORMATTED_COMMAND_LINE_LENGTH - 3)}...` : sanitized;
913
+ } catch {
914
+ return "unverified";
915
+ }
916
+ }
917
+ function formatFailClosedBlockingProcesses(processes) {
918
+ const uniqueProcesses = new Map;
919
+ for (const process2 of processes) {
920
+ if (!Number.isInteger(process2.pid) || process2.pid <= 0)
921
+ continue;
922
+ const candidate = {
923
+ kind: normalizeFailClosedProcessKind(process2),
924
+ pid: process2.pid,
925
+ startTime: process2.startTime,
926
+ commandLine: process2.commandLine
927
+ };
928
+ const previous = uniqueProcesses.get(process2.pid);
929
+ if (!previous || previous.kind === "process" && candidate.kind !== "process") {
930
+ uniqueProcesses.set(process2.pid, candidate);
931
+ } else {
932
+ uniqueProcesses.set(process2.pid, {
933
+ ...previous,
934
+ startTime: previous.startTime ?? candidate.startTime,
935
+ commandLine: previous.commandLine ?? candidate.commandLine
936
+ });
937
+ }
938
+ }
939
+ const entries = [...uniqueProcesses.values()];
940
+ const visible = entries.slice(0, MAX_FORMATTED_BLOCKING_PROCESSES);
941
+ const rendered = visible.map(({ kind, pid }) => `${kind} (PID ${pid})`);
942
+ const omitted = entries.length - visible.length;
943
+ if (omitted > 0)
944
+ rendered.push(`${omitted} more blocking process(es)`);
945
+ if (rendered.length === 0)
946
+ return "a live process";
947
+ const summary = rendered.length === 1 ? rendered[0] : `${rendered.slice(0, -1).join(", ")}, and ${rendered.at(-1)}`;
948
+ const evidence = entries.map(({ kind, pid, startTime, commandLine }) => `- PID ${pid}: ${kind}, started ${formatFailClosedProcessStartTime(startTime)}, cmd: ${formatFailClosedCommandLine(commandLine)}`).join(`
949
+ `);
950
+ return `${summary}
951
+ Blocking process evidence:
952
+ ${evidence}`;
953
+ }
954
+ function formatFailClosedBlockingMessage(reason) {
955
+ if (reason.kind === "migration_guard") {
956
+ if (reason.unreadableFile) {
957
+ const arm = reason.unreadableArm ?? "io";
958
+ const recovery = arm === "io" ? `If none of these processes are running, it is safe to delete ${reason.unreadableFile} and retry.` : `The file may be a recent incomplete write; retry after the file is older than the ten-minute grace window, or stop the relevant process before deleting it.`;
959
+ return [
960
+ `Magic Context cannot migrate the shared database because RPC discovery file ${reason.unreadableFile} is uncertain (${arm} arm), so the absence of a live process cannot be proven.`,
961
+ recovery,
962
+ `Recovery: ${FAIL_CLOSED_DOCTOR_COMMAND}`
963
+ ].join(" ");
964
+ }
965
+ return [
966
+ `Magic Context cannot migrate the shared database (one database serves every project on this machine) because ${formatFailClosedBlockingProcesses(reason.blockingProcesses)} may be running an older Magic Context build that would fail against the migrated database.`,
967
+ `The database is at upstream migration v${reason.persistedVersion}; this build needs v${reason.supportedVersion}.`,
968
+ "Restart the blocking process — even one from a different project — and it will pick up the new build and migrate on start; or shut it down and retry.",
969
+ "If that host loads a pinned or cached older Magic Context build, a restart alone is not enough: stop it or update its Magic Context build, then start this host once so it migrates the database with nothing older attached.",
970
+ `Recovery: ${FAIL_CLOSED_DOCTOR_COMMAND}`
971
+ ].join(" ");
972
+ }
973
+ if (reason.kind === "schema_fence") {
974
+ return [
975
+ `Magic Context cannot operate: this Magic Context build is older than the database; upgrade/restart this harness (upstream migration lane v${reason.persistedVersion}, build supports through v${reason.supportedVersion}).`,
976
+ `Recovery: ${FAIL_CLOSED_DOCTOR_COMMAND}`
977
+ ].join(" ");
978
+ }
979
+ const cause = reason.cause.trim().length > 0 ? reason.cause.trim() : "unknown storage error";
980
+ return [
981
+ `Magic Context cannot operate: persistent storage failed (${cause}).`,
982
+ "The plugin will not silently degrade to native compaction while enabled.",
983
+ `Recovery: ${FAIL_CLOSED_DOCTOR_COMMAND}`
984
+ ].join(" ");
985
+ }
986
+ function formatFailClosedBlockingSummary(reason) {
987
+ if (reason.kind === "migration_guard") {
988
+ if (reason.unreadableFile) {
989
+ return `Magic Context cannot migrate the shared database from v${reason.persistedVersion} to v${reason.supportedVersion}: RPC discovery file ${reason.unreadableFile} could not be read, so an older host may still be attached.`;
990
+ }
991
+ const blockers = reason.blockingProcesses.filter((process2) => Number.isInteger(process2.pid) && process2.pid > 0).map((process2) => `${normalizeFailClosedProcessKind(process2)} (PID ${process2.pid})`);
992
+ const named = blockers.length > 0 ? blockers.join(", ") : "a live process";
993
+ return `Magic Context cannot migrate the shared database from v${reason.persistedVersion} to v${reason.supportedVersion} while ${named} may still run an older Magic Context build. Stop or update that host, then start this one once.`;
994
+ }
995
+ if (reason.kind === "schema_fence") {
996
+ return `Magic Context cannot operate: the shared database is at v${reason.persistedVersion}, newer than this build supports (v${reason.supportedVersion}). Update and restart this host.`;
997
+ }
998
+ const cause = reason.cause.trim().length > 0 ? reason.cause.trim() : "unknown storage error";
999
+ return `Magic Context cannot operate: persistent storage failed (${cause}).`;
1000
+ }
1001
+ function createFailClosedBlockingError(reason, options) {
1002
+ return new FailClosedBlockingError(formatFailClosedBlockingMessage(reason), reason, options);
1003
+ }
1004
+ function isFailClosedBlockingError(error) {
1005
+ return error instanceof FailClosedBlockingError || typeof error === "object" && error !== null && error.name === "FailClosedBlockingError" && error.code === "FAIL_CLOSED_BLOCKING";
1006
+ }
1007
+ function shouldBypassFailClosedBlock(input) {
1008
+ if (input.isPiSubagentEnv === true)
1009
+ return true;
1010
+ if (input.isInternalChildSession === true)
1011
+ return true;
1012
+ const agent = typeof input.agent === "string" ? input.agent.trim() : "";
1013
+ if (agent.length === 0)
1014
+ return false;
1015
+ if (OPENCODE_INTERNAL_AGENT_NAMES.has(agent))
1016
+ return true;
1017
+ if (isMagicContextHiddenAgentName(agent))
1018
+ return true;
1019
+ return false;
1020
+ }
1021
+ function resolveAgentNameFromMessages(messages) {
1022
+ for (let i = messages.length - 1;i >= 0; i -= 1) {
1023
+ const info = messages[i]?.info;
1024
+ if (!info || typeof info !== "object")
1025
+ continue;
1026
+ const agent = info.agent;
1027
+ if (typeof agent === "string" && agent.length > 0)
1028
+ return agent;
1029
+ }
1030
+ return;
1031
+ }
1032
+
1031
1033
  // src/features/magic-context/migration-worker-client.ts
1032
1034
  import { Worker } from "node:worker_threads";
1033
1035
 
@@ -1130,7 +1132,7 @@ function runMigrationsOffThread(data) {
1130
1132
  reject(workerStartError(error instanceof Error ? error.message : String(error)));
1131
1133
  return;
1132
1134
  }
1133
- log(`[migrations] applying pending migrations on a worker thread: ${data.dbPath}`);
1135
+ log2(`[migrations] applying pending migrations on a worker thread: ${data.dbPath}`);
1134
1136
  let ready = false;
1135
1137
  let settled = false;
1136
1138
  let endBusy = beginOffThreadMigration();
@@ -1158,10 +1160,10 @@ function runMigrationsOffThread(data) {
1158
1160
  switch (message.type) {
1159
1161
  case "ready":
1160
1162
  ready = true;
1161
- log(`[migrations] migration worker ready: ${data.dbPath}`);
1163
+ log2(`[migrations] migration worker ready: ${data.dbPath}`);
1162
1164
  return;
1163
1165
  case "log":
1164
- writeForwardedLogLine(message.line);
1166
+ writeForwardedLogLine2(message.line);
1165
1167
  return;
1166
1168
  case "lock-wait":
1167
1169
  if (!settled)
@@ -1242,7 +1244,7 @@ function runToolOwnerBackfill(db) {
1242
1244
  }
1243
1245
  const opencodeDbPath = resolveOpencodeDbPath();
1244
1246
  if (!existsSync(opencodeDbPath)) {
1245
- log(`[backfill] OpenCode DB not found at ${opencodeDbPath} — marking all unbackfilled sessions as skipped. Lazy adoption (defense-in-depth) handles legacy rows at runtime.`);
1247
+ log2(`[backfill] OpenCode DB not found at ${opencodeDbPath} — marking all unbackfilled sessions as skipped. Lazy adoption (defense-in-depth) handles legacy rows at runtime.`);
1246
1248
  markAllUnbackfilledSessionsSkipped(db);
1247
1249
  result.sessionsSkippedNoOcDb = countSessionsByStatus(db, "skipped");
1248
1250
  result.durationMs = performance.now() - startedAt;
@@ -1259,11 +1261,11 @@ function runToolOwnerBackfill(db) {
1259
1261
  try {
1260
1262
  db.exec("DETACH DATABASE oc_backfill");
1261
1263
  } catch (error) {
1262
- log(`[backfill] failed to detach oc_backfill database: ${error instanceof Error ? error.message : String(error)}`);
1264
+ log2(`[backfill] failed to detach oc_backfill database: ${error instanceof Error ? error.message : String(error)}`);
1263
1265
  }
1264
1266
  }
1265
1267
  result.durationMs = performance.now() - startedAt;
1266
- log(`[backfill] sessions=${result.sessionsProcessed} completed=${result.sessionsCompleted} skipped_no_oc=${result.sessionsSkippedNoOcDb} skipped_no_matches=${result.sessionsSkippedNoMatches} blocked_by_lease=${result.sessionsBlockedByLease} errored=${result.sessionsErrored} rows_updated=${result.rowsUpdated} rows_left_null=${result.rowsLeftNull} duration_ms=${Math.round(result.durationMs)}`);
1268
+ log2(`[backfill] sessions=${result.sessionsProcessed} completed=${result.sessionsCompleted} skipped_no_oc=${result.sessionsSkippedNoOcDb} skipped_no_matches=${result.sessionsSkippedNoMatches} blocked_by_lease=${result.sessionsBlockedByLease} errored=${result.sessionsErrored} rows_updated=${result.rowsUpdated} rows_left_null=${result.rowsLeftNull} duration_ms=${Math.round(result.durationMs)}`);
1267
1269
  return result;
1268
1270
  }
1269
1271
  function isToolOwnerBackfillNeeded(db) {
@@ -1448,7 +1450,7 @@ function backfillToolOwnersInChunks(db, result) {
1448
1450
  result.sessionsCompleted += 1;
1449
1451
  }
1450
1452
  } catch (error) {
1451
- log(`[backfill] session=${sessionId} errored: ${error instanceof Error ? error.message : String(error)}`);
1453
+ log2(`[backfill] session=${sessionId} errored: ${error instanceof Error ? error.message : String(error)}`);
1452
1454
  markSessionErrored(db, sessionId, error);
1453
1455
  result.sessionsErrored += 1;
1454
1456
  }
@@ -1461,8 +1463,8 @@ function backfillToolOwnersInChunks(db, result) {
1461
1463
  }
1462
1464
 
1463
1465
  // src/features/magic-context/storage-db.ts
1464
- registerSlowWriteReporter(logSlowWriteTransaction);
1465
- registerSqliteDiagnosticSink((message) => log(message));
1466
+ registerSlowWriteReporter2(logSlowWriteTransaction);
1467
+ registerSqliteDiagnosticSink2((message) => log2(message));
1466
1468
  var databases = new Map;
1467
1469
  var pendingAsyncOpens = new Map;
1468
1470
  var persistenceByDatabase = new WeakMap;
@@ -1487,7 +1489,7 @@ function ensureSecureStorageDir(dir) {
1487
1489
  }
1488
1490
  function tightenStorageTree(dir) {
1489
1491
  const { failures } = tightenStorageTreeSync(dir);
1490
- log(`[magic-context] storage permission tightening failures=${failures}`);
1492
+ log2(`[magic-context] storage permission tightening failures=${failures}`);
1491
1493
  }
1492
1494
  function resolveBootBusyTimeoutMs(value) {
1493
1495
  if (value === undefined)
@@ -1496,9 +1498,9 @@ function resolveBootBusyTimeoutMs(value) {
1496
1498
  return BOOT_SQLITE_BUSY_TIMEOUT_MS;
1497
1499
  return Math.max(0, Math.min(BOOT_SQLITE_BUSY_TIMEOUT_MS, Math.floor(value)));
1498
1500
  }
1499
- function installBootBusyTimeout(db, dbPath, timeoutMs, report = log) {
1501
+ function installBootBusyTimeout(db, dbPath, timeoutMs, report = log2) {
1500
1502
  db.exec(`PRAGMA busy_timeout=${timeoutMs}`);
1501
- report(`[magic-context] SQLite boot busy timeout: backend=${detectSqliteRuntime()} timeout=${timeoutMs}ms path=${dbPath}`);
1503
+ report(`[magic-context] SQLite boot busy timeout: backend=${detectSqliteRuntime2()} timeout=${timeoutMs}ms path=${dbPath}`);
1502
1504
  }
1503
1505
  function resolveDatabasePath(dbPathOverride) {
1504
1506
  if (dbPathOverride) {
@@ -1518,18 +1520,18 @@ function migrateLegacyStorageIfNeeded(targetDbPath, targetDbDir) {
1518
1520
  const legacyDbPath = join2(legacyDir, "context.db");
1519
1521
  if (!existsSync2(legacyDbPath))
1520
1522
  return;
1521
- log(`[magic-context] migrating legacy plugin storage: ${legacyDir} -> ${targetDbDir} (legacy left in place as backup)`);
1523
+ log2(`[magic-context] migrating legacy plugin storage: ${legacyDir} -> ${targetDbDir} (legacy left in place as backup)`);
1522
1524
  ensureSecureStorageDir(targetDbDir);
1523
1525
  try {
1524
- const legacyDb = new Database(legacyDbPath);
1526
+ const legacyDb = new Database2(legacyDbPath);
1525
1527
  try {
1526
- configureContextDatabasePragmas(legacyDb, true);
1528
+ configureContextDatabasePragmas2(legacyDb, true);
1527
1529
  legacyDb.exec("PRAGMA wal_checkpoint(TRUNCATE)");
1528
1530
  } finally {
1529
1531
  closeQuietly(legacyDb);
1530
1532
  }
1531
1533
  } catch (error) {
1532
- log(`[magic-context] legacy WAL checkpoint before copy failed (continuing with sidecar copy): ${getErrorMessage(error)}`);
1534
+ log2(`[magic-context] legacy WAL checkpoint before copy failed (continuing with sidecar copy): ${getErrorMessage(error)}`);
1533
1535
  }
1534
1536
  for (const suffix of ["", "-wal", "-shm"]) {
1535
1537
  const src = `${legacyDbPath}${suffix}`;
@@ -1538,7 +1540,7 @@ function migrateLegacyStorageIfNeeded(targetDbPath, targetDbDir) {
1538
1540
  try {
1539
1541
  copyStorageFileSync(src, dst);
1540
1542
  } catch (error) {
1541
- log(`[magic-context] failed to copy ${src}:`, getErrorMessage(error));
1543
+ log2(`[magic-context] failed to copy ${src}:`, getErrorMessage(error));
1542
1544
  }
1543
1545
  }
1544
1546
  }
@@ -1548,7 +1550,7 @@ function migrateLegacyStorageIfNeeded(targetDbPath, targetDbDir) {
1548
1550
  try {
1549
1551
  copyStorageTreeSync(legacyModelsDir, targetModelsDir);
1550
1552
  } catch (error) {
1551
- log("[magic-context] failed to copy embedding model cache:", getErrorMessage(error));
1553
+ log2("[magic-context] failed to copy embedding model cache:", getErrorMessage(error));
1552
1554
  }
1553
1555
  }
1554
1556
  }
@@ -1583,7 +1585,7 @@ function enforceSchemaFence(db, dbPath, latestSupportedVersion) {
1583
1585
  return true;
1584
1586
  }
1585
1587
  lastSchemaFenceRejection = { persistedVersion, supportedVersion: latestSupportedVersion };
1586
- log(`[magic-context] storage fatal: refusing to open ${dbPath}; upstream migration lane v${persistedVersion} is newer than this binary supports (max v${latestSupportedVersion}). A pinned or stale plugin is likely sharing this database with a newer instance; update or unpin Magic Context with 'npx @cortexkit/magic-context@latest doctor --force', then restart.`);
1588
+ log2(`[magic-context] storage fatal: refusing to open ${dbPath}; upstream migration lane v${persistedVersion} is newer than this binary supports (max v${latestSupportedVersion}). A pinned or stale plugin is likely sharing this database with a newer instance; update or unpin Magic Context with 'npx @cortexkit/magic-context@latest doctor --force', then restart.`);
1587
1589
  return false;
1588
1590
  }
1589
1591
  function unreadableDiscovery(path, arm) {
@@ -1655,7 +1657,7 @@ function classifyJunkDiscovery(portFile, raw, staleFiles) {
1655
1657
  }
1656
1658
  staleFiles.push(portFile);
1657
1659
  const reason = invalidDiscoveryReason(raw);
1658
- log(`[magic-context] removing stale RPC discovery file ${portFile}: ${reason} record older than 10 minutes`);
1660
+ log2(`[magic-context] removing stale RPC discovery file ${portFile}: ${reason} record older than 10 minutes`);
1659
1661
  return null;
1660
1662
  }
1661
1663
  function inspectRpcServerDiscovery(storageDir, processes, options) {
@@ -1800,12 +1802,12 @@ function formatInconclusivePiMigrationWarning(dbPath, pids) {
1800
1802
  function logInconclusiveMigrationProbes(dbPath, discovery, piDiscovery) {
1801
1803
  const uncertainPids = discovery.inconclusivePids ?? [];
1802
1804
  if (uncertainPids.length > 0) {
1803
- log(formatInconclusiveOpenCodeMigrationWarning(dbPath, uncertainPids));
1805
+ log2(formatInconclusiveOpenCodeMigrationWarning(dbPath, uncertainPids));
1804
1806
  }
1805
1807
  if (piDiscovery.state === "unreadable") {
1806
- log(`[magic-context] storage warning: continuing migration for ${dbPath}; the Pi/OMP process-list probe could not run, which commonly means an OS sandbox denied ps. No live Pi harness was confirmed.`);
1808
+ log2(`[magic-context] storage warning: continuing migration for ${dbPath}; the Pi/OMP process-list probe could not run, which commonly means an OS sandbox denied ps. No live Pi harness was confirmed.`);
1807
1809
  } else if ((piDiscovery.inconclusivePids?.length ?? 0) > 0) {
1808
- log(formatInconclusivePiMigrationWarning(dbPath, piDiscovery.inconclusivePids ?? []));
1810
+ log2(formatInconclusivePiMigrationWarning(dbPath, piDiscovery.inconclusivePids ?? []));
1809
1811
  }
1810
1812
  }
1811
1813
  function isDefaultSharedDatabasePath(dbPath) {
@@ -1867,9 +1869,9 @@ function enforceMigrationOnOpenGuard(db, dbPath, dbDir, latestSupportedVersion,
1867
1869
  const unreadableFile = discovery.unreadableFile ?? "<unknown>";
1868
1870
  const arm = discovery.unreadableArm ?? "io";
1869
1871
  const recovery = arm === "io" ? `If no OpenCode server is running, it is safe to delete ${unreadableFile} and retry.` : `Retry after the file is older than the ten-minute grace window, or stop OpenCode before deleting it.`;
1870
- log(`[magic-context] storage fatal: refusing to migrate ${dbPath} from upstream migration v${persistedVersion} to v${latestSupportedVersion} because RPC discovery file ${unreadableFile} is uncertain (${arm} arm), so the absence of a live OpenCode server cannot be proven. ${recovery}`);
1872
+ log2(`[magic-context] storage fatal: refusing to migrate ${dbPath} from upstream migration v${persistedVersion} to v${latestSupportedVersion} because RPC discovery file ${unreadableFile} is uncertain (${arm} arm), so the absence of a live OpenCode server cannot be proven. ${recovery}`);
1871
1873
  } else {
1872
- log(formatLiveProcessMigrationRefusal(dbPath, persistedVersion, latestSupportedVersion, discovery.serverPids, piPids));
1874
+ log2(formatLiveProcessMigrationRefusal(dbPath, persistedVersion, latestSupportedVersion, discovery.serverPids, piPids));
1873
1875
  }
1874
1876
  return false;
1875
1877
  }
@@ -1898,34 +1900,34 @@ function finishDatabaseOpen(db, dbPath, explicitDbPath, latestSupportedVersion)
1898
1900
  }
1899
1901
  healWedgedChannel2Claims(db);
1900
1902
  if (!explicitDbPath) {
1901
- const readsOpenCodeStore = harnessOwnsOpenCodeStore();
1903
+ const readsOpenCodeStore = harnessOwnsOpenCodeStore2();
1902
1904
  let busyRetryMs = 100;
1903
- const runBackfills = () => withoutSqliteTransformPass(() => withSqliteBackgroundWriter(() => {
1905
+ const runBackfills = () => withoutSqliteTransformPass2(() => withSqliteBackgroundWriter2(() => {
1904
1906
  if (readsOpenCodeStore) {
1905
1907
  try {
1906
1908
  runToolOwnerBackfill(db);
1907
1909
  } catch (error) {
1908
- log(`[magic-context] tool-owner backfill failed (continuing with lazy adoption fallback): ${getErrorMessage(error)}`);
1910
+ log2(`[magic-context] tool-owner backfill failed (continuing with lazy adoption fallback): ${getErrorMessage(error)}`);
1909
1911
  }
1910
1912
  }
1911
1913
  startMessageFtsRowidMapBackfill(db).then(async () => {
1912
1914
  if (!readsOpenCodeStore)
1913
1915
  return;
1914
- const { readRawSessionMessagePage, readRawSessionMessages } = await importPluginModule(() => import("./read-session-chunk-gyyv7w2r.js"));
1915
- const { startMessageTimeBackfill } = await importPluginModule(() => import("./message-time-backfill-1f9tzvcs.js"));
1916
+ const { readRawSessionMessagePage, readRawSessionMessages } = await importPluginModule(() => import("./read-session-chunk-8p5mdryx.js"));
1917
+ const { startMessageTimeBackfill } = await importPluginModule(() => import("./message-time-backfill-cje68egj.js"));
1916
1918
  await startMessageTimeBackfill(db, Object.assign(readRawSessionMessages, {
1917
1919
  readPage: readRawSessionMessagePage
1918
1920
  }));
1919
1921
  }).catch((error) => {
1920
- if (isTransientSqliteError(error)) {
1921
- withoutSqliteTransformPass(() => {
1922
+ if (isTransientSqliteError2(error)) {
1923
+ withoutSqliteTransformPass2(() => {
1922
1924
  const timer = setTimeout(runBackfills, busyRetryMs);
1923
1925
  timer.unref();
1924
1926
  });
1925
1927
  busyRetryMs = Math.min(30000, busyRetryMs * 2);
1926
1928
  return;
1927
1929
  }
1928
- log(`[magic-context] message-index backfill failed (will resume next startup): ${getErrorMessage(error)}`);
1930
+ log2(`[magic-context] message-index backfill failed (will resume next startup): ${getErrorMessage(error)}`);
1929
1931
  });
1930
1932
  }));
1931
1933
  if (bootQuietRemainingMs() > 0)
@@ -1941,14 +1943,14 @@ function finishDatabaseOpen(db, dbPath, explicitDbPath, latestSupportedVersion)
1941
1943
  persistenceByDatabase.set(db, true);
1942
1944
  persistenceErrorByDatabase.delete(db);
1943
1945
  if (!explicitDbPath) {
1944
- log(formatSchemaFenceBootLog(getPersistedSchemaVersion(db), latestSupportedVersion));
1946
+ log2(formatSchemaFenceBootLog(getPersistedSchemaVersion(db), latestSupportedVersion));
1945
1947
  }
1946
1948
  return db;
1947
1949
  }
1948
1950
  function initializeDatabase(db, busyTimeoutMs = BOOT_SQLITE_BUSY_TIMEOUT_MS) {
1949
1951
  db.exec(`PRAGMA busy_timeout=${resolveBootBusyTimeoutMs(busyTimeoutMs)}`);
1950
1952
  db.exec("PRAGMA foreign_keys=ON");
1951
- configureContextDatabasePragmas(db);
1953
+ configureContextDatabasePragmas2(db);
1952
1954
  applySqliteTuningPragmas(db);
1953
1955
  db.exec(`
1954
1956
  CREATE TABLE IF NOT EXISTS tags (
@@ -3182,6 +3184,7 @@ CREATE INDEX IF NOT EXISTS idx_dream_queue_pending ON dream_queue(started_at, en
3182
3184
  const version = getPersistedSchemaVersion(db);
3183
3185
  if (version === 0 || version >= 95)
3184
3186
  installV95PerfSchema(db, false, version === 0);
3187
+ installTagIdentityRevisionTrigger(db);
3185
3188
  }
3186
3189
  var CHANNEL2_CLAIM_TTL_MS = 10 * 60000;
3187
3190
  var channel2HealStatements = new WeakMap;
@@ -3211,7 +3214,7 @@ function openDatabase(dbPathOrOptions) {
3211
3214
  lastMigrationOnOpenRefusal = null;
3212
3215
  const existing = databases.get(dbPath);
3213
3216
  if (!existing && pendingAsyncOpens.has(dbPath)) {
3214
- log(`[magic-context] storage not ready: ${dbPath} is still being opened or migrated; refusing a second synchronous open`);
3217
+ log2(`[magic-context] storage not ready: ${dbPath} is still being opened or migrated; refusing a second synchronous open`);
3215
3218
  return null;
3216
3219
  }
3217
3220
  if (existing) {
@@ -3239,14 +3242,14 @@ function openDatabase(dbPathOrOptions) {
3239
3242
  throw error;
3240
3243
  }
3241
3244
  }
3242
- db = new Database(dbPath);
3245
+ db = new Database2(dbPath);
3243
3246
  installBootBusyTimeout(db, dbPath, busyTimeoutMs, options?.onBootBusyTimeout);
3244
3247
  if (!enforceSchemaFence(db, dbPath, latestSupportedVersion)) {
3245
3248
  closeQuietly(db);
3246
3249
  return null;
3247
3250
  }
3248
3251
  if (options?.allowMigrations === false && hasPendingMigrations(db)) {
3249
- log(`[magic-context] storage not ready: pending migrations at ${dbPath}; host callers must await the async opener`);
3252
+ log2(`[magic-context] storage not ready: pending migrations at ${dbPath}; host callers must await the async opener`);
3250
3253
  closeQuietly(db);
3251
3254
  return null;
3252
3255
  }
@@ -3263,12 +3266,13 @@ function openDatabase(dbPathOrOptions) {
3263
3266
  } else
3264
3267
  runMigrations(db);
3265
3268
  ensureContextStoreUuid(db);
3269
+ installTagIdentityRevisionTrigger(db);
3266
3270
  return finishDatabaseOpen(db, dbPath, explicitDbPath, latestSupportedVersion);
3267
3271
  } catch (error) {
3268
3272
  if (db)
3269
3273
  closeQuietly(db);
3270
3274
  const detail = getErrorMessage(error);
3271
- log(`[magic-context] storage fatal: failed to open ${dbPath}: ${detail}`);
3275
+ log2(`[magic-context] storage fatal: failed to open ${dbPath}: ${detail}`);
3272
3276
  throw new Error(`[magic-context] storage unavailable: ${detail}. Magic Context is disabled for this run; check log for details.`);
3273
3277
  }
3274
3278
  }
@@ -3327,7 +3331,7 @@ async function openDatabaseAsync(dbPathOrOptions) {
3327
3331
  throw error;
3328
3332
  }
3329
3333
  }
3330
- db = new Database(dbPath);
3334
+ db = new Database2(dbPath);
3331
3335
  installBootBusyTimeout(db, dbPath, busyTimeoutMs, options?.onBootBusyTimeout);
3332
3336
  openMs = performance.now() - openStartedAt;
3333
3337
  guardStartedAt = performance.now();
@@ -3359,6 +3363,7 @@ async function openDatabaseAsync(dbPathOrOptions) {
3359
3363
  throw new Error("storage initialization left a pending migration; reinstall or rebuild the plugin");
3360
3364
  }
3361
3365
  ensureContextStoreUuid(db);
3366
+ installTagIdentityRevisionTrigger(db);
3362
3367
  const opened = finishDatabaseOpen(db, dbPath, explicitDbPath, latestSupportedVersion);
3363
3368
  migrateMs = performance.now() - migrateStartedAt;
3364
3369
  return opened;
@@ -3366,10 +3371,10 @@ async function openDatabaseAsync(dbPathOrOptions) {
3366
3371
  if (db)
3367
3372
  closeQuietly(db);
3368
3373
  const detail = getErrorMessage(error);
3369
- log(`[magic-context] storage fatal: failed to open ${dbPath}: ${detail}`);
3374
+ log2(`[magic-context] storage fatal: failed to open ${dbPath}: ${detail}`);
3370
3375
  throw new Error(`[magic-context] storage unavailable: ${detail}. Magic Context is disabled for this run; check log for details.`);
3371
3376
  } finally {
3372
- log(`[migrations] async open main-thread migration-body count: ${getMainThreadMigrationBodyCount() - mainThreadBodiesBefore} (total=${getMainThreadMigrationBodyCount()}) path=${dbPath}`);
3377
+ log2(`[migrations] async open main-thread migration-body count: ${getMainThreadMigrationBodyCount() - mainThreadBodiesBefore} (total=${getMainThreadMigrationBodyCount()}) path=${dbPath}`);
3373
3378
  if (openMs === 0)
3374
3379
  openMs = performance.now() - openStartedAt;
3375
3380
  if (guardStartedAt !== null && guardMs === 0) {