@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
@@ -0,0 +1,70 @@
1
+ {
2
+ "opencode/full": "ee8313665a36e94be315b564c3959c21644c6b13a6e80de86aff8492a7948248",
3
+ "pi/full": "06d5cdfa5922dc889f8924e40ed60a76055b6f008614f552c11249dbba7ccf32",
4
+ "guidance/full/false/false/false/false": "5fd6f9d5ceadc9afb6c2e5f6f1359ee0fb51d03afa17d002a503a9958941fa84",
5
+ "pi-guidance/full/false/false/false/false": "5fd6f9d5ceadc9afb6c2e5f6f1359ee0fb51d03afa17d002a503a9958941fa84",
6
+ "guidance/full/false/false/false/true": "c07904e2985b91a3bfec547cbd3e6aa3b6eee9e2d0fed49df2aa701bbc927998",
7
+ "pi-guidance/full/false/false/false/true": "c07904e2985b91a3bfec547cbd3e6aa3b6eee9e2d0fed49df2aa701bbc927998",
8
+ "guidance/full/false/false/true/false": "5d2a13e49719520f4282b4cba6c234eed5882eae7d656e5f7fb98e7d3905ebb5",
9
+ "pi-guidance/full/false/false/true/false": "5d2a13e49719520f4282b4cba6c234eed5882eae7d656e5f7fb98e7d3905ebb5",
10
+ "guidance/full/false/false/true/true": "5ba23e90d969f1a25f51e7de836601156be6353ec8d7a1361f34a5961436146a",
11
+ "pi-guidance/full/false/false/true/true": "5ba23e90d969f1a25f51e7de836601156be6353ec8d7a1361f34a5961436146a",
12
+ "guidance/full/false/true/false/false": "3a398d32bc9eea87978aca46679149ff2d7f37ee42e3bdedad3c500505cbf400",
13
+ "pi-guidance/full/false/true/false/false": "3a398d32bc9eea87978aca46679149ff2d7f37ee42e3bdedad3c500505cbf400",
14
+ "guidance/full/false/true/false/true": "eec86c8a69bff34341b30398dc526945ad20648e3b1cb4b67c058dc1dbf98ef8",
15
+ "pi-guidance/full/false/true/false/true": "eec86c8a69bff34341b30398dc526945ad20648e3b1cb4b67c058dc1dbf98ef8",
16
+ "guidance/full/false/true/true/false": "ad7927d9deb91b2ca5c357ff6bd8d932619f90cb8cdf39e27ec6bc6742ed7763",
17
+ "pi-guidance/full/false/true/true/false": "ad7927d9deb91b2ca5c357ff6bd8d932619f90cb8cdf39e27ec6bc6742ed7763",
18
+ "guidance/full/false/true/true/true": "569aeb5e7a7132c89e4b0b78e7ecc1791b14d530a659d7334eff67e54ad14ae8",
19
+ "pi-guidance/full/false/true/true/true": "569aeb5e7a7132c89e4b0b78e7ecc1791b14d530a659d7334eff67e54ad14ae8",
20
+ "guidance/full/true/false/false/false": "f1f0a1c4df72890afdefcb08db70ecdb3cdba8c61b0a9c56b3e1370cca598d26",
21
+ "pi-guidance/full/true/false/false/false": "f1f0a1c4df72890afdefcb08db70ecdb3cdba8c61b0a9c56b3e1370cca598d26",
22
+ "guidance/full/true/false/false/true": "b53542325bb0e5d69adf12e098d8e45e6f73990770a06536545bb13b56872444",
23
+ "pi-guidance/full/true/false/false/true": "b53542325bb0e5d69adf12e098d8e45e6f73990770a06536545bb13b56872444",
24
+ "guidance/full/true/false/true/false": "c6081025c0af192d6f63d6d6f1ebeee1f1e134f8174d90de643d3b156c84b5e9",
25
+ "pi-guidance/full/true/false/true/false": "c6081025c0af192d6f63d6d6f1ebeee1f1e134f8174d90de643d3b156c84b5e9",
26
+ "guidance/full/true/false/true/true": "c8ee6b3237719e4c908241e651f36aa90562ee54a4854b5f5d3ec87e99605db5",
27
+ "pi-guidance/full/true/false/true/true": "c8ee6b3237719e4c908241e651f36aa90562ee54a4854b5f5d3ec87e99605db5",
28
+ "guidance/full/true/true/false/false": "e46393931592b92a96d887a634f11c8970239e753f245c777ff43583356dc73a",
29
+ "pi-guidance/full/true/true/false/false": "e46393931592b92a96d887a634f11c8970239e753f245c777ff43583356dc73a",
30
+ "guidance/full/true/true/false/true": "34e98b5c45d9dfc97ce50bb08d62a5064dc628dd371e4289b5f3c0b9a108b335",
31
+ "pi-guidance/full/true/true/false/true": "34e98b5c45d9dfc97ce50bb08d62a5064dc628dd371e4289b5f3c0b9a108b335",
32
+ "guidance/full/true/true/true/false": "77aaa97847d1cf96b947664a48656cb32ae9c0354882746c2e9961785acc5ce3",
33
+ "pi-guidance/full/true/true/true/false": "77aaa97847d1cf96b947664a48656cb32ae9c0354882746c2e9961785acc5ce3",
34
+ "guidance/full/true/true/true/true": "224fe7ba3904c53b0fa22d079ec7cb7c4a132d8092dade80a86c44d56f588831",
35
+ "pi-guidance/full/true/true/true/true": "224fe7ba3904c53b0fa22d079ec7cb7c4a132d8092dade80a86c44d56f588831",
36
+ "opencode/light": "203313946dd10c99b0e8ae9ddd47bd3f5d7568d6571eb189babb7cb59ef6a2f0",
37
+ "pi/light": "2ab9c355546c723f51df122a04d325ab7e0c700078c30e44452a5eee3d7e37ee",
38
+ "guidance/light/false/false/false/false": "a8713eda6b4d8888f584a9740b69b72c57f1cdff04bc675844c1caa0c95557d7",
39
+ "pi-guidance/light/false/false/false/false": "a8713eda6b4d8888f584a9740b69b72c57f1cdff04bc675844c1caa0c95557d7",
40
+ "guidance/light/false/false/false/true": "7a99730b51c8dd094d052288bb54f9d1b2563ade3cbfafa190496b6fe18e461c",
41
+ "pi-guidance/light/false/false/false/true": "7a99730b51c8dd094d052288bb54f9d1b2563ade3cbfafa190496b6fe18e461c",
42
+ "guidance/light/false/false/true/false": "1a866792b99c84f884941c6a5b269c5df9af394f1bbcba8893a7ea7a60ccd6e0",
43
+ "pi-guidance/light/false/false/true/false": "1a866792b99c84f884941c6a5b269c5df9af394f1bbcba8893a7ea7a60ccd6e0",
44
+ "guidance/light/false/false/true/true": "468fa55f0a35d503787bce7829352e522ef577cd9869b6c14eeb8c8c810c18e5",
45
+ "pi-guidance/light/false/false/true/true": "468fa55f0a35d503787bce7829352e522ef577cd9869b6c14eeb8c8c810c18e5",
46
+ "guidance/light/false/true/false/false": "e57d504f74b82f22ae334424accfee415638e266e14f960f1fabd30d5729aca9",
47
+ "pi-guidance/light/false/true/false/false": "e57d504f74b82f22ae334424accfee415638e266e14f960f1fabd30d5729aca9",
48
+ "guidance/light/false/true/false/true": "c8ed1794cf9ad0d3b3f0bf8e1372e5993f83d860c3459f05727c241444101ad4",
49
+ "pi-guidance/light/false/true/false/true": "c8ed1794cf9ad0d3b3f0bf8e1372e5993f83d860c3459f05727c241444101ad4",
50
+ "guidance/light/false/true/true/false": "bab2bf005b8faa918f91cb280678e571329095ba3d02212fd5360eea3aeb06d5",
51
+ "pi-guidance/light/false/true/true/false": "bab2bf005b8faa918f91cb280678e571329095ba3d02212fd5360eea3aeb06d5",
52
+ "guidance/light/false/true/true/true": "985cc5f091691be624e9e493268cafbf543b39e4eccb67f9cdfb12be75d5543a",
53
+ "pi-guidance/light/false/true/true/true": "985cc5f091691be624e9e493268cafbf543b39e4eccb67f9cdfb12be75d5543a",
54
+ "guidance/light/true/false/false/false": "6fd77355947d510c275f593b87fc013c2ccac439bd3db6ac2f5c1160cb755626",
55
+ "pi-guidance/light/true/false/false/false": "6fd77355947d510c275f593b87fc013c2ccac439bd3db6ac2f5c1160cb755626",
56
+ "guidance/light/true/false/false/true": "8ea26079e952c2cf10730070d46ee072ed0c1346fd41cf4bbfd3cd222dfc4b3b",
57
+ "pi-guidance/light/true/false/false/true": "8ea26079e952c2cf10730070d46ee072ed0c1346fd41cf4bbfd3cd222dfc4b3b",
58
+ "guidance/light/true/false/true/false": "0c18e3350478eac6f4f412def32bb0373bf4e34e028c22db0aa764afbab8d9b5",
59
+ "pi-guidance/light/true/false/true/false": "0c18e3350478eac6f4f412def32bb0373bf4e34e028c22db0aa764afbab8d9b5",
60
+ "guidance/light/true/false/true/true": "b6c622ace8b3a722750f13930ef27bf849ee2b06fa49a4d70095b7d98a08da8b",
61
+ "pi-guidance/light/true/false/true/true": "b6c622ace8b3a722750f13930ef27bf849ee2b06fa49a4d70095b7d98a08da8b",
62
+ "guidance/light/true/true/false/false": "d4da84246319941f74b26e7fbf569d875fe66f3b336b3e43c1dbca1906c895e0",
63
+ "pi-guidance/light/true/true/false/false": "d4da84246319941f74b26e7fbf569d875fe66f3b336b3e43c1dbca1906c895e0",
64
+ "guidance/light/true/true/false/true": "155ced931db6255047bc9122452f6eb0dbd83d3bc6160d6295ca26a3f5baac15",
65
+ "pi-guidance/light/true/true/false/true": "155ced931db6255047bc9122452f6eb0dbd83d3bc6160d6295ca26a3f5baac15",
66
+ "guidance/light/true/true/true/false": "bf0bd6e2b793b580560ce9bb18d039ac375abec3a09a986dc406b081b5ad9079",
67
+ "pi-guidance/light/true/true/true/false": "bf0bd6e2b793b580560ce9bb18d039ac375abec3a09a986dc406b081b5ad9079",
68
+ "guidance/light/true/true/true/true": "6e94bb838eba4d1ebe6ae6205f90fb45589dcce3af6352baa1466eeca437f652",
69
+ "pi-guidance/light/true/true/true/true": "6e94bb838eba4d1ebe6ae6205f90fb45589dcce3af6352baa1466eeca437f652"
70
+ }
@@ -4,7 +4,7 @@ import { tmpdir } from "node:os";
4
4
  import { join } from "node:path";
5
5
  import { resolveEpochFloorForPass } from "../features/magic-context/storage-meta-persisted";
6
6
  import { buildOpenCodeConfigWarningBanner } from "../shared/config-warning-surface";
7
- import { resolveHistorianModel } from "../shared/model-resolution";
7
+ import { resolveDreamerTaskModel, resolveHistorianModel } from "../shared/model-resolution";
8
8
  import { Database } from "../shared/sqlite";
9
9
  import { createTestTempDir, createTestTempDirFromPath } from "../shared/test-temp-dir";
10
10
  import {
@@ -13,6 +13,7 @@ import {
13
13
  setWindowOverlayPath,
14
14
  } from "../shared/window-geometry";
15
15
  import { loadPluginConfig, loadPluginConfigDetailed } from "./index";
16
+ import { MURAL_MODEL_DEPRECATION_WARNING } from "./mural-model-deprecation";
16
17
  import { resolveConfigProfile } from "./profiles";
17
18
  import { getProtectedTokensTierOverrides } from "./project-security";
18
19
  import { REMOVED_AGENT_CONFIG_WARNING } from "./removed-agent-config";
@@ -269,6 +270,71 @@ describe("loadPluginConfig — graduated mural config", () => {
269
270
  expect.stringContaining('Deprecated "experimental.mural"'),
270
271
  );
271
272
  });
273
+
274
+ it("loads a config with the retired mural.model, warns once, and leaves compress-cues on the dreamer model", () => {
275
+ const result = loadWithUserConfig(
276
+ JSON.stringify({
277
+ mural: { enabled: true, model: "google/antigravity-gemini-3.8-flash" },
278
+ dreamer: {
279
+ opencode: { model: "open/dreamer-default" },
280
+ pi: { model: "pi/dreamer-default" },
281
+ },
282
+ }),
283
+ );
284
+
285
+ expect(result.mural.enabled).toBe(true);
286
+ expect(
287
+ (result.configWarnings ?? []).filter((w) =>
288
+ w.endsWith(MURAL_MODEL_DEPRECATION_WARNING),
289
+ ),
290
+ ).toHaveLength(1);
291
+ expect(MURAL_MODEL_DEPRECATION_WARNING).toContain("mural.model");
292
+ expect(
293
+ resolveDreamerTaskModel({ config: result, harness: "opencode", task: "compress-cues" })
294
+ .primary,
295
+ ).toEqual({ model: "open/dreamer-default" });
296
+ expect(
297
+ resolveDreamerTaskModel({ config: result, harness: "pi", task: "compress-cues" })
298
+ .primary,
299
+ ).toEqual({ model: "pi/dreamer-default" });
300
+ });
301
+
302
+ it("emits no mural.model warning when the key is absent", () => {
303
+ const result = loadWithUserConfig(JSON.stringify({ mural: { enabled: true } }));
304
+
305
+ expect((result.configWarnings ?? []).some((w) => w.includes("mural.model"))).toBe(false);
306
+ });
307
+
308
+ it("lets a project choose the compress-cues task model like any other dreamer task model", () => {
309
+ const result = loadWithUserAndProjectConfig(
310
+ JSON.stringify({ dreamer: { opencode: { model: "open/user-default" } } }),
311
+ JSON.stringify({
312
+ mural: { model: "repo/ignored" },
313
+ dreamer: {
314
+ opencode: {
315
+ tasks: {
316
+ "compress-cues": { model: "open/project-cues" },
317
+ curate: { model: "open/project-curate" },
318
+ },
319
+ },
320
+ },
321
+ }),
322
+ );
323
+
324
+ expect(
325
+ resolveDreamerTaskModel({ config: result, harness: "opencode", task: "compress-cues" })
326
+ .primary,
327
+ ).toEqual({ model: "open/project-cues" });
328
+ expect(
329
+ resolveDreamerTaskModel({ config: result, harness: "opencode", task: "curate" })
330
+ .primary,
331
+ ).toEqual({ model: "open/project-curate" });
332
+ expect(
333
+ (result.configWarnings ?? []).filter((w) =>
334
+ w.endsWith(MURAL_MODEL_DEPRECATION_WARNING),
335
+ ),
336
+ ).toHaveLength(1);
337
+ });
272
338
  });
273
339
 
274
340
  describe("loadPluginConfig — transform mode resolution", () => {
@@ -25,6 +25,7 @@ import {
25
25
  } from "./migrate-config-location";
26
26
  import { migrateDreamerV2 } from "./migrate-dreamer-v2";
27
27
  import { migrateLegacyExperimental } from "./migrate-experimental";
28
+ import { warnDeprecatedMuralModel } from "./mural-model-deprecation";
28
29
  import { resolveConfigProfile } from "./profiles";
29
30
  import {
30
31
  attachProtectedTokensTierOverrides,
@@ -437,6 +438,7 @@ export function parsePluginConfig(
437
438
  configWithoutRemovedAgent,
438
439
  preMigrationWarnings,
439
440
  );
441
+ warnDeprecatedMuralModel(migratedExperimental, preMigrationWarnings);
440
442
  // Dreamer v2: convert the legacy v1 dreamer shape (window schedule, tasks
441
443
  // array, user_memories/pin_key_files blocks) into the per-task `tasks` record.
442
444
  // Runs AFTER migrate-experimental so experimental.user_memories (already
@@ -53,6 +53,10 @@ const KNOWN_SLOTS: Record<string, KnownSlot> = {
53
53
  classification: "VERDICT",
54
54
  reason: "Correct: circuit state expires and a half-open probe re-evaluates the endpoint.",
55
55
  },
56
+ "packages/plugin/src/hooks/magic-context/raw-ordinal-warmup.ts:exitHookRegistered": {
57
+ classification: "PUBLICATION",
58
+ reason: "Correct: records that the one process-exit handler stopping canonical-ordinal warm-up workers is installed; it holds no failure or absence verdict.",
59
+ },
56
60
  "packages/plugin/src/features/magic-context/memory/project-identity.ts:homeProjectPermission": {
57
61
  classification: "VERDICT",
58
62
  reason: "Boot config publishes the home-project permission; the setter replaces it on another host initialization, while explicit resolution arguments override it.",
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `mural.model` used to name one cue-compressor model shared by every harness.
3
+ * Model ids differ per harness (OpenCode and Pi spell the same model with
4
+ * different provider prefixes), so a single string could not name a working
5
+ * model on every host. compress-cues now resolves through each harness's
6
+ * dreamer settings like every other dreamer task, and the key is ignored.
7
+ */
8
+ export const MURAL_MODEL_DEPRECATION_WARNING =
9
+ "mural.model is deprecated and ignored; compress-cues now uses the dreamer model for each harness, like every other dreamer task. To override it, set dreamer.opencode.tasks.compress-cues.model (or the pi/omp equivalent). This key no longer does anything; remove it.";
10
+
11
+ /**
12
+ * Pushes the deprecation warning when the config still sets `mural.model`.
13
+ * Call it after the legacy experimental migration so the pre-graduation
14
+ * `experimental.mural.model` spelling is reported the same way.
15
+ */
16
+ export function warnDeprecatedMuralModel(
17
+ config: Record<string, unknown>,
18
+ warnings: string[],
19
+ ): void {
20
+ const mural = config.mural;
21
+ if (typeof mural === "object" && mural !== null && Object.hasOwn(mural, "model")) {
22
+ warnings.push(MURAL_MODEL_DEPRECATION_WARNING);
23
+ }
24
+ }
@@ -112,7 +112,6 @@ function ocTaskBlock(): Record<string, unknown> {
112
112
  fallback_models: [ocEntry()],
113
113
  variant: "task-variant",
114
114
  timeout_minutes: 45,
115
- mural: { model: "hostile/task-mural" },
116
115
  ...ESCALATION_VALUE,
117
116
  };
118
117
  }
@@ -123,14 +122,13 @@ function piTaskBlock(): Record<string, unknown> {
123
122
  fallback_models: [piEntry()],
124
123
  thinking_level: "high",
125
124
  timeout_minutes: 45,
126
- mural: { model: "hostile/task-mural" },
127
125
  ...ESCALATION_VALUE,
128
126
  };
129
127
  }
130
128
 
131
129
  /**
132
130
  * One project-tier config that plants a value at every executable nested path
133
- * the per-harness schema admits, plus smuggled escalation / mural / extra
131
+ * the per-harness schema admits, plus smuggled escalation / extra
134
132
  * fields at those same depths.
135
133
  */
136
134
  function buildHostileProjectConfig(): Record<string, unknown> {
@@ -156,8 +154,7 @@ function buildHostileProjectConfig(): Record<string, unknown> {
156
154
  historian: { opencode: { model: "hostile/profile-historian" } },
157
155
  },
158
156
  },
159
- mural: { enabled: true, model: "hostile/top-mural" },
160
- experimental: { mural: { enabled: true, model: "hostile/experimental-mural" } },
157
+ mural: { enabled: true },
161
158
  historian: {
162
159
  model: "hostile/flat-historian",
163
160
  fallback_models: ["hostile/flat-fallback"],
@@ -170,21 +167,18 @@ function buildHostileProjectConfig(): Record<string, unknown> {
170
167
  model: ocEntry(),
171
168
  fallback_models: [ocEntry()],
172
169
  variant: "hostile-historian-variant",
173
- mural: { model: "hostile/historian-oc-mural" },
174
170
  ...ESCALATION_VALUE,
175
171
  },
176
172
  pi: {
177
173
  model: piEntry(),
178
174
  fallback_models: [piEntry()],
179
175
  thinking_level: "max",
180
- mural: { model: "hostile/historian-pi-mural" },
181
176
  ...ESCALATION_VALUE,
182
177
  },
183
178
  omp: {
184
179
  model: piEntry(),
185
180
  fallback_models: [piEntry()],
186
181
  thinking_level: "auto",
187
- mural: { model: "hostile/historian-omp-mural" },
188
182
  ...ESCALATION_VALUE,
189
183
  },
190
184
  },
@@ -197,7 +191,6 @@ function buildHostileProjectConfig(): Record<string, unknown> {
197
191
  model: ocEntry(),
198
192
  fallback_models: [ocEntry()],
199
193
  variant: "hostile-dreamer-variant",
200
- mural: { model: "hostile/dreamer-oc-mural" },
201
194
  tasks: ocTasks,
202
195
  ...ESCALATION_VALUE,
203
196
  },
@@ -205,7 +198,6 @@ function buildHostileProjectConfig(): Record<string, unknown> {
205
198
  model: piEntry(),
206
199
  fallback_models: [piEntry()],
207
200
  thinking_level: "medium",
208
- mural: { model: "hostile/dreamer-pi-mural" },
209
201
  tasks: piTasks,
210
202
  ...ESCALATION_VALUE,
211
203
  },
@@ -213,7 +205,6 @@ function buildHostileProjectConfig(): Record<string, unknown> {
213
205
  model: piEntry(),
214
206
  fallback_models: [piEntry()],
215
207
  thinking_level: "auto",
216
- mural: { model: "hostile/dreamer-omp-mural" },
217
208
  tasks: ompTasks,
218
209
  ...ESCALATION_VALUE,
219
210
  },
@@ -319,25 +310,6 @@ function nestedEscalationPaths(): string[] {
319
310
  return paths;
320
311
  }
321
312
 
322
- function nestedMuralModelPaths(): string[] {
323
- const paths = [
324
- "mural.model",
325
- "experimental.mural.model",
326
- "historian.opencode.mural.model",
327
- "historian.pi.mural.model",
328
- "historian.omp.mural.model",
329
- "dreamer.opencode.mural.model",
330
- "dreamer.pi.mural.model",
331
- "dreamer.omp.mural.model",
332
- ];
333
- for (const task of CANONICAL_DREAM_TASKS) {
334
- paths.push(`dreamer.opencode.tasks.${task}.mural.model`);
335
- paths.push(`dreamer.pi.tasks.${task}.mural.model`);
336
- paths.push(`dreamer.omp.tasks.${task}.mural.model`);
337
- }
338
- return paths;
339
- }
340
-
341
313
  function loadWithUserAndProjectConfig(userConfigText: string, projectConfigText: string) {
342
314
  const xdg = createTestTempDirFromPath(join(tmpdir(), "mc-hostile-user-"));
343
315
  const projectDir = createTestTempDirFromPath(join(tmpdir(), "mc-hostile-proj-"));
@@ -422,21 +394,13 @@ describe("hostile-config stripping matrix", () => {
422
394
  if (hasOwnPath(raw, path)) survived.push(`escalation:${path}`);
423
395
  else removed.push(path);
424
396
  }
425
- for (const path of nestedMuralModelPaths()) {
426
- if (hasOwnPath(raw, path)) survived.push(`mural:${path}`);
427
- else removed.push(path);
428
- }
429
397
 
430
398
  expect(survived).toEqual([]);
431
399
  expect(hasOwnPath(raw, "profiles")).toBe(false);
432
400
  expect(readPath(raw, "profile")).toBe("work");
433
401
  expect(warningText).toContain("Ignoring profiles from project config");
434
402
  expect(removed.sort()).toEqual(
435
- [
436
- ...historianUserOnlyPaths(),
437
- ...nestedEscalationPaths(),
438
- ...nestedMuralModelPaths(),
439
- ].sort(),
403
+ [...historianUserOnlyPaths(), ...nestedEscalationPaths()].sort(),
440
404
  );
441
405
 
442
406
  for (const path of dreamerKeepPaths()) {
@@ -467,11 +431,7 @@ describe("hostile-config stripping matrix", () => {
467
431
  expect(readPath(raw, "dreamer.omp.tasks.verify.thinking_level")).toBe("high");
468
432
  expect(readPath(raw, "dreamer.omp.tasks.verify.timeout_minutes")).toBe(45);
469
433
 
470
- for (const path of [
471
- ...historianUserOnlyPaths(),
472
- ...nestedEscalationPaths(),
473
- ...nestedMuralModelPaths(),
474
- ]) {
434
+ for (const path of [...historianUserOnlyPaths(), ...nestedEscalationPaths()]) {
475
435
  expect(warningText).toContain(path);
476
436
  }
477
437
  });
@@ -242,26 +242,21 @@ describe("stripUnsafeProjectConfigFields", () => {
242
242
  expect(warning).toContain("historian.opencode.runner");
243
243
  });
244
244
 
245
- it("strips mural.model from project config but keeps the feature switch", () => {
245
+ it("leaves the ignored mural.model to the deprecation warning instead of a security strip", () => {
246
+ // mural.model no longer selects any model, so it is not a trust boundary;
247
+ // the compress-cues model is a dreamer task model like any other.
246
248
  const raw: Record<string, unknown> = {
247
249
  mural: { enabled: true, model: "repo-controlled-model" },
250
+ dreamer: { opencode: { tasks: { "compress-cues": { model: "repo/cue-model" } } } },
248
251
  };
249
252
 
250
253
  const warnings = stripUnsafeProjectConfigFields(raw);
251
254
 
252
- expect(raw.mural).toEqual({ enabled: true });
253
- expect(warnings.some((w) => w.includes("mural.model"))).toBe(true);
254
- });
255
-
256
- it("strips the legacy experimental mural model before migration", () => {
257
- const raw: Record<string, unknown> = {
258
- experimental: { mural: { enabled: true, model: "repo-controlled-model" } },
259
- };
260
-
261
- const warnings = stripUnsafeProjectConfigFields(raw);
262
-
263
- expect(raw.experimental).toEqual({ mural: { enabled: true } });
264
- expect(warnings.some((w) => w.includes("experimental.mural.model"))).toBe(true);
255
+ expect(raw.mural).toEqual({ enabled: true, model: "repo-controlled-model" });
256
+ expect(raw.dreamer).toEqual({
257
+ opencode: { tasks: { "compress-cues": { model: "repo/cue-model" } } },
258
+ });
259
+ expect(warnings).toEqual([]);
265
260
  });
266
261
 
267
262
  it("strips hidden-agent prompt/permission/tools but keeps benign fields", () => {
@@ -48,6 +48,11 @@ const PROMPT_SURFACE_USER_ONLY_FIELDS = ["guidance_override_path", "tool_descrip
48
48
  * on for an agent whose allow-list intentionally excludes it.
49
49
  * Dreamer model/cadence fields are deliberately NOT stripped: a repo may tune
50
50
  * its own dreamer overlays and schedules through the user's provider auth.
51
+ * Every dreamer task sends project memory to its model, so a repository that
52
+ * sets a dreamer model chooses where that memory goes; the project-tier allowance
53
+ * above accepts that. compress-cues follows the same rule: its model comes from
54
+ * dreamer.<harness>.tasks.compress-cues or the harness default, so a project
55
+ * can choose it exactly as it can for any other task.
51
56
  * Historian model selection stays USER-tier only, and compaction thresholds are
52
57
  * project raise-only, so a cloned repo cannot force earlier compaction or extra
53
58
  * historian spend on the user's dime.
@@ -184,25 +189,6 @@ function stripEscalationAtExecutableSite(
184
189
  }
185
190
  }
186
191
 
187
- /** Remove `mural.model` smuggled under hidden-agent trees. Top-level and
188
- * experimental mural blocks are handled separately so their warnings stay
189
- * specific; this walk covers harness and task nesting the schema does not
190
- * admit but a hostile file can still write. */
191
- function stripNestedMuralModels(
192
- node: Record<string, unknown>,
193
- path: string,
194
- removed: string[],
195
- ): void {
196
- for (const [key, value] of Object.entries(node)) {
197
- if (key === "mural" && isPlainObject(value) && "model" in value) {
198
- delete value.model;
199
- removed.push(`${path}.${key}.model`);
200
- } else if (isPlainObject(value)) {
201
- stripNestedMuralModels(value, `${path}.${key}`, removed);
202
- }
203
- }
204
- }
205
-
206
192
  // Must match the schema's execute_threshold_percentage range (20-90). A narrower
207
193
  // range here let a valid project value of 81-90 skip the raise-only clamp and
208
194
  // reach the merged config as-is, lowering a higher user threshold.
@@ -368,9 +354,6 @@ function makeProjectThresholdWarning(field: string, reason: string): string {
368
354
  * provider account. `host_runner` is stripped for the same reason in the other
369
355
  * direction: a repo must not switch this machine's pull loop on and start
370
356
  * spending the user's provider account on folds.
371
- * - `mural.model` at the top-level block, the legacy experimental spelling,
372
- * and any nested `mural.model` under hidden agents — a cloned repo cannot
373
- * choose where project memory is sent.
374
357
  * - `pi.subagent_extensions` — a cloned repo must not choose which extensions
375
358
  * the user's Pi child processes load.
376
359
  * - `prompt_surface.guidance_override_path` / `tool_descriptions` — a repository
@@ -472,6 +455,14 @@ export function stripUnsafeProjectConfigFields(projectRaw: Record<string, unknow
472
455
  );
473
456
  }
474
457
 
458
+ const smartNotes = projectRaw.smart_notes;
459
+ if (isPlainObject(smartNotes) && "enabled" in smartNotes) {
460
+ delete smartNotes.enabled;
461
+ warnings.push(
462
+ "Ignoring smart_notes.enabled from project config (only user-level config may change process-wide tool definitions; restart required).",
463
+ );
464
+ }
465
+
475
466
  // Repositories may select preset routing, but project settings cannot add
476
467
  // guidance or tool-description text to the provider-visible prompt; those
477
468
  // user-only fields are removed before project settings are merged.
@@ -606,39 +597,6 @@ export function stripUnsafeProjectConfigFields(projectRaw: Record<string, unknow
606
597
  );
607
598
  }
608
599
 
609
- const mural = projectRaw.mural;
610
- if (isPlainObject(mural) && "model" in mural) {
611
- delete mural.model;
612
- warnings.push(
613
- "Ignoring mural.model from project config (security: the mural cue-compressor model is a user-level setting; a repository cannot choose where project memory is sent).",
614
- );
615
- }
616
-
617
- // Keep the same trust boundary while accepting the pre-graduation spelling.
618
- // This must run before the in-memory migration moves experimental.mural.model
619
- // to mural.model, otherwise an untrusted project could bypass the user-only
620
- // model check.
621
- const experimental = projectRaw.experimental;
622
- const legacyMural = isPlainObject(experimental) ? experimental.mural : undefined;
623
- if (isPlainObject(legacyMural) && "model" in legacyMural) {
624
- delete legacyMural.model;
625
- warnings.push(
626
- "Ignoring experimental.mural.model from project config (security: the mural cue-compressor model is a user-level setting; use user-level mural.model).",
627
- );
628
- }
629
-
630
- const nestedMuralRemoved: string[] = [];
631
- for (const agentKey of HIDDEN_AGENT_KEYS) {
632
- const block = projectRaw[agentKey];
633
- if (!isPlainObject(block)) continue;
634
- stripNestedMuralModels(block, agentKey, nestedMuralRemoved);
635
- }
636
- if (nestedMuralRemoved.length > 0) {
637
- warnings.push(
638
- `Ignoring ${nestedMuralRemoved.join(", ")} from project config (security: the mural cue-compressor model is a user-level setting; a repository cannot choose where project memory is sent).`,
639
- );
640
- }
641
-
642
600
  return warnings;
643
601
  }
644
602
 
@@ -38,7 +38,7 @@ describe("MagicContextConfigSchema", () => {
38
38
  fail_closed_blocking: true,
39
39
  transform_mode: "ts",
40
40
  storage: { enforce_private_permissions: true },
41
- smart_notes: { retina_handoff: false },
41
+ smart_notes: { enabled: true, retina_handoff: false },
42
42
  cache_ttl: "5m",
43
43
  prompt_surface: { default: "full" },
44
44
  execute_threshold_percentage: 65,
@@ -144,7 +144,7 @@ describe("MagicContextConfigSchema", () => {
144
144
  overlay: false,
145
145
  },
146
146
  smart_drops: false,
147
- smart_notes: { retina_handoff: false },
147
+ smart_notes: { enabled: true, retina_handoff: false },
148
148
  shadow_embedding: {
149
149
  enabled: false,
150
150
  },
@@ -917,9 +917,9 @@ export interface ShadowEmbeddingConfig {
917
917
 
918
918
  export interface MuralConfig {
919
919
  enabled: boolean;
920
- /** The CUE COMPRESSOR model for the compress-cues dreamer task (the mural is
921
- * now rendered deterministically, so this no longer names an author model). */
922
- model?: string;
920
+ /** Deprecated and ignored: compress-cues takes its model from each
921
+ * harness's dreamer settings, like every other dreamer task. */
922
+ model?: unknown;
923
923
  }
924
924
 
925
925
  export interface MagicContextConfig {
@@ -943,6 +943,8 @@ export interface MagicContextConfig {
943
943
  historian?: HistorianConfig;
944
944
  dreamer?: DreamerConfig;
945
945
  smart_notes: {
946
+ /** Enable smart-note authoring and checks for the user; read at process startup. */
947
+ enabled: boolean;
946
948
  /** Flip ownership of authoring-compiled conditions from dreamer to retina. */
947
949
  retina_handoff: boolean;
948
950
  };
@@ -1121,13 +1123,12 @@ export const MagicContextConfigSchema = z
1121
1123
  .object({
1122
1124
  enabled: z.boolean().default(false),
1123
1125
  model: z
1124
- .string()
1125
- .trim()
1126
- .min(1)
1126
+ .unknown()
1127
1127
  .optional()
1128
1128
  .describe(
1129
- "Model for the compress-cues task that compresses each memory into a mural cue. The mural image itself is rendered deterministically (no author model).",
1130
- ),
1129
+ "Deprecated: ignored. compress-cues now uses the dreamer model for each harness, like every other dreamer task; override it with dreamer.opencode.tasks.compress-cues.model (or the pi/omp equivalent). Remove this key; it no longer does anything.",
1130
+ )
1131
+ .meta({ deprecated: true }),
1131
1132
  })
1132
1133
  .default({ enabled: false })
1133
1134
  .describe(
@@ -1184,6 +1185,12 @@ export const MagicContextConfigSchema = z
1184
1185
  ),
1185
1186
  smart_notes: z
1186
1187
  .object({
1188
+ enabled: z
1189
+ .boolean()
1190
+ .default(true)
1191
+ .describe(
1192
+ "Enable smart-note authoring and condition evaluation. User-level only: tool definitions are process-wide. Changes require a host restart and rebuild each session's cached prompt once. Pending notes remain stored and unchecked; already-ready notes still surface.",
1193
+ ),
1187
1194
  retina_handoff: z
1188
1195
  .boolean()
1189
1196
  .default(false)
@@ -1191,7 +1198,7 @@ export const MagicContextConfigSchema = z
1191
1198
  "When true, dreamer skips smart notes whose surface conditions compiled to retina provider configs at authoring time. Default false keeps both paths active until the retina consumer is deployed.",
1192
1199
  ),
1193
1200
  })
1194
- .default({ retina_handoff: false })
1201
+ .default({ enabled: true, retina_handoff: false })
1195
1202
  .describe("Smart-note ownership transition controls."),
1196
1203
  cache_ttl: z
1197
1204
  .union([z.string(), z.object({ default: z.string() }).catchall(z.string())])
@@ -1601,7 +1608,6 @@ export const MagicContextConfigSchema = z
1601
1608
  /** Settings whose fresh values can be used by later agent runs without changing rendered prompt bytes. */
1602
1609
  export const LIVE_RELOAD_CONFIG_PATHS = [
1603
1610
  "cache_ttl",
1604
- "mural.model",
1605
1611
  "toast_duration_ms",
1606
1612
  "historian.opencode.model",
1607
1613
  "historian.opencode.fallback_models",
@@ -29,6 +29,12 @@ export const CANONICAL_DREAM_TASKS = [
29
29
 
30
30
  export type DreamTaskName = (typeof CANONICAL_DREAM_TASKS)[number];
31
31
 
32
+ export function availableDreamTasks(smartNotesEnabled = true): DreamTaskName[] {
33
+ return CANONICAL_DREAM_TASKS.filter(
34
+ (task) => smartNotesEnabled || task !== "evaluate-smart-notes",
35
+ );
36
+ }
37
+
32
38
  /** Prompt-token ceilings informed by docs/reports/dreamer-token-usage.md.
33
39
  * Completed Gemini run usage predicts 20-memory mapping/verification batches
34
40
  * at about 70% of their allowance
@@ -1,4 +1,47 @@
1
+ import type { AutoSearchHintNoHintReason } from "../features/magic-context/storage-meta-persisted";
2
+
1
3
  const pending = new Map<string, Set<AbortController>>();
4
+ const unpublishedNoHints = new Map<string, Map<string, AutoSearchHintNoHintReason>>();
5
+
6
+ /**
7
+ * A failed save can still send the user message without a search hint. Remember
8
+ * that no-hint decision until a later pass saves it to SQLite, including across
9
+ * closing and reopening the database handle. Switching or shutting down a session
10
+ * does not prove deletion and must not discard it. If all compare-and-swap (CAS)
11
+ * save retries fail and the process restarts before repair, this unsaved record
12
+ * is lost: that compound failure is the remaining durability gap.
13
+ */
14
+ export function rememberUnpublishedAutoSearchNoHint(
15
+ sessionId: string,
16
+ messageId: string,
17
+ reason: AutoSearchHintNoHintReason,
18
+ ): void {
19
+ let messages = unpublishedNoHints.get(sessionId);
20
+ if (!messages) {
21
+ messages = new Map();
22
+ unpublishedNoHints.set(sessionId, messages);
23
+ }
24
+ if (!messages.has(messageId)) messages.set(messageId, reason);
25
+ }
26
+
27
+ export function getUnpublishedAutoSearchNoHint(
28
+ sessionId: string,
29
+ messageId: string,
30
+ ): AutoSearchHintNoHintReason | undefined {
31
+ return unpublishedNoHints.get(sessionId)?.get(messageId);
32
+ }
33
+
34
+ export function forgetUnpublishedAutoSearchNoHint(sessionId: string, messageId: string): void {
35
+ const messages = unpublishedNoHints.get(sessionId);
36
+ messages?.delete(messageId);
37
+ if (messages?.size === 0) unpublishedNoHints.delete(sessionId);
38
+ }
39
+
40
+ /** Deleting a session releases its unsaved no-hint records; switching away does not. */
41
+ export function clearUnpublishedAutoSearchNoHints(sessionId?: string): void {
42
+ if (sessionId === undefined) unpublishedNoHints.clear();
43
+ else unpublishedNoHints.delete(sessionId);
44
+ }
2
45
 
3
46
  /** Cleanup cancels optional searches and backfill, not durable served decisions. */
4
47
  export function registerAutoSearchWork(sessionId: string): {