@cortexkit/opencode-magic-context 0.46.1 → 0.48.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 (462) 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 +112 -0
  5. package/dist/config/index.d.ts.map +1 -1
  6. package/dist/config/live-run-config.d.ts.map +1 -1
  7. package/dist/config/migrate-config-location.d.ts.map +1 -1
  8. package/dist/config/mural-model-deprecation.d.ts +15 -0
  9. package/dist/config/mural-model-deprecation.d.ts.map +1 -0
  10. package/dist/config/project-security.d.ts +0 -3
  11. package/dist/config/project-security.d.ts.map +1 -1
  12. package/dist/config/schema/magic-context.d.ts +21 -9
  13. package/dist/config/schema/magic-context.d.ts.map +1 -1
  14. package/dist/{conflict-warning-hook-7fj2b9jw.js → conflict-warning-hook-w8cykrnf.js} +12 -9
  15. package/dist/{context-sh2m2vde.js → context-m0cy262m.js} +1785 -913
  16. package/dist/{derive-budgets-7nj7r1rv.js → derive-budgets-sg0xsq7s.js} +4 -3
  17. package/dist/embedding-activity-g1dhes6g.js +10 -0
  18. package/dist/embedding-backfill-9rcm1mfy.js +21 -0
  19. package/dist/embedding-cache-mgyr73ef.js +16 -0
  20. package/dist/embedding-worker.js +11 -9
  21. package/dist/features/magic-context/compaction-marker.d.ts.map +1 -1
  22. package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts +1 -0
  23. package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts.map +1 -1
  24. package/dist/features/magic-context/dreamer/task-config.d.ts +3 -3
  25. package/dist/features/magic-context/dreamer/task-config.d.ts.map +1 -1
  26. package/dist/features/magic-context/dreamer/task-executor.d.ts +1 -1
  27. package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
  28. package/dist/features/magic-context/dreamer/task-gates.d.ts.map +1 -1
  29. package/dist/features/magic-context/dreamer/task-registry.d.ts +1 -0
  30. package/dist/features/magic-context/dreamer/task-registry.d.ts.map +1 -1
  31. package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
  32. package/dist/features/magic-context/message-index-async.d.ts +16 -3
  33. package/dist/features/magic-context/message-index-async.d.ts.map +1 -1
  34. package/dist/features/magic-context/message-index-bounded.d.ts +17 -0
  35. package/dist/features/magic-context/message-index-bounded.d.ts.map +1 -0
  36. package/dist/features/magic-context/message-index.d.ts +7 -1
  37. package/dist/features/magic-context/message-index.d.ts.map +1 -1
  38. package/dist/features/magic-context/mural/render-trigger.d.ts +7 -4
  39. package/dist/features/magic-context/mural/render-trigger.d.ts.map +1 -1
  40. package/dist/features/magic-context/overflow-detection.d.ts +2 -0
  41. package/dist/features/magic-context/overflow-detection.d.ts.map +1 -1
  42. package/dist/features/magic-context/pi-content-decisions.d.ts +7 -1
  43. package/dist/features/magic-context/pi-content-decisions.d.ts.map +1 -1
  44. package/dist/features/magic-context/project-embedding-registry.d.ts +7 -0
  45. package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
  46. package/dist/features/magic-context/search.d.ts +31 -0
  47. package/dist/features/magic-context/search.d.ts.map +1 -1
  48. package/dist/features/magic-context/session-activity.d.ts.map +1 -1
  49. package/dist/features/magic-context/session-project-storage.d.ts +8 -2
  50. package/dist/features/magic-context/session-project-storage.d.ts.map +1 -1
  51. package/dist/features/magic-context/smart-notes/runner.d.ts +1 -0
  52. package/dist/features/magic-context/smart-notes/runner.d.ts.map +1 -1
  53. package/dist/features/magic-context/storage-db.d.ts.map +1 -1
  54. package/dist/features/magic-context/storage-historian-runs.d.ts +2 -5
  55. package/dist/features/magic-context/storage-historian-runs.d.ts.map +1 -1
  56. package/dist/features/magic-context/storage-meta-persisted.d.ts +12 -0
  57. package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
  58. package/dist/features/magic-context/storage-meta-session.d.ts +6 -0
  59. package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
  60. package/dist/features/magic-context/storage-tag-identity-revision.d.ts +30 -0
  61. package/dist/features/magic-context/storage-tag-identity-revision.d.ts.map +1 -0
  62. package/dist/features/magic-context/storage-tags.d.ts +148 -3
  63. package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
  64. package/dist/features/magic-context/storage.d.ts +1 -0
  65. package/dist/features/magic-context/storage.d.ts.map +1 -1
  66. package/dist/features/magic-context/subagent-token-capture.d.ts.map +1 -1
  67. package/dist/features/magic-context/transform-decision-log.d.ts +4 -2
  68. package/dist/features/magic-context/transform-decision-log.d.ts.map +1 -1
  69. package/dist/harness-e4avh192.js +10 -0
  70. package/dist/hooks/magic-context/active-anthropic-turn.d.ts +10 -0
  71. package/dist/hooks/magic-context/active-anthropic-turn.d.ts.map +1 -0
  72. package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
  73. package/dist/hooks/magic-context/auto-search-blocking.fixture.d.ts +2 -0
  74. package/dist/hooks/magic-context/auto-search-blocking.fixture.d.ts.map +1 -0
  75. package/dist/hooks/magic-context/auto-search-deadline.d.ts +7 -0
  76. package/dist/hooks/magic-context/auto-search-deadline.d.ts.map +1 -1
  77. package/dist/hooks/magic-context/auto-search-host-review.fixture.d.ts +3 -0
  78. package/dist/hooks/magic-context/auto-search-host-review.fixture.d.ts.map +1 -0
  79. package/dist/hooks/magic-context/auto-search-lock-review.fixture.d.ts +2 -0
  80. package/dist/hooks/magic-context/auto-search-lock-review.fixture.d.ts.map +1 -0
  81. package/dist/hooks/magic-context/auto-search-long-lock-review.fixture.d.ts +2 -0
  82. package/dist/hooks/magic-context/auto-search-long-lock-review.fixture.d.ts.map +1 -0
  83. package/dist/hooks/magic-context/auto-search-omp-host-review.fixture.d.ts +4 -0
  84. package/dist/hooks/magic-context/auto-search-omp-host-review.fixture.d.ts.map +1 -0
  85. package/dist/hooks/magic-context/auto-search-omp-loader.fixture.d.ts +3 -0
  86. package/dist/hooks/magic-context/auto-search-omp-loader.fixture.d.ts.map +1 -0
  87. package/dist/hooks/magic-context/auto-search-runner.d.ts +1 -1
  88. package/dist/hooks/magic-context/auto-search-runner.d.ts.map +1 -1
  89. package/dist/hooks/magic-context/auto-search-snapshot.fixture.d.ts +4 -0
  90. package/dist/hooks/magic-context/auto-search-snapshot.fixture.d.ts.map +1 -0
  91. package/dist/hooks/magic-context/auto-search-worker-client.d.ts +98 -0
  92. package/dist/hooks/magic-context/auto-search-worker-client.d.ts.map +1 -0
  93. package/dist/hooks/magic-context/auto-search-worker.d.ts +2 -0
  94. package/dist/hooks/magic-context/auto-search-worker.d.ts.map +1 -0
  95. package/dist/hooks/magic-context/caveman-cleanup.d.ts.map +1 -1
  96. package/dist/hooks/magic-context/command-handler.d.ts +1 -0
  97. package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
  98. package/dist/hooks/magic-context/compartment-runner-incremental.d.ts.map +1 -1
  99. package/dist/hooks/magic-context/compartment-runner-recomp.d.ts.map +1 -1
  100. package/dist/hooks/magic-context/compartment-runner-types.d.ts +3 -5
  101. package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -1
  102. package/dist/hooks/magic-context/compartment-runner.d.ts +2 -1
  103. package/dist/hooks/magic-context/compartment-runner.d.ts.map +1 -1
  104. package/dist/hooks/magic-context/compartment-trigger.d.ts +3 -1
  105. package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
  106. package/dist/hooks/magic-context/event-handler.d.ts +1 -1
  107. package/dist/hooks/magic-context/event-handler.d.ts.map +1 -1
  108. package/dist/hooks/magic-context/event-resolvers.d.ts.map +1 -1
  109. package/dist/hooks/magic-context/execute-status.d.ts.map +1 -1
  110. package/dist/hooks/magic-context/final-wire-token-estimate.d.ts +2 -0
  111. package/dist/hooks/magic-context/final-wire-token-estimate.d.ts.map +1 -1
  112. package/dist/hooks/magic-context/heuristic-cleanup.d.ts.map +1 -1
  113. package/dist/hooks/magic-context/historian-drain-gate.d.ts +11 -0
  114. package/dist/hooks/magic-context/historian-drain-gate.d.ts.map +1 -0
  115. package/dist/hooks/magic-context/hook.d.ts +3 -2
  116. package/dist/hooks/magic-context/hook.d.ts.map +1 -1
  117. package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
  118. package/dist/hooks/magic-context/latest-assistant-turn.d.ts +25 -0
  119. package/dist/hooks/magic-context/latest-assistant-turn.d.ts.map +1 -0
  120. package/dist/hooks/magic-context/latest-thinking-recovery.d.ts +61 -0
  121. package/dist/hooks/magic-context/latest-thinking-recovery.d.ts.map +1 -0
  122. package/dist/hooks/magic-context/lkg-persist.d.ts +4 -3
  123. package/dist/hooks/magic-context/lkg-persist.d.ts.map +1 -1
  124. package/dist/hooks/magic-context/lkg-replay.d.ts +13 -8
  125. package/dist/hooks/magic-context/lkg-replay.d.ts.map +1 -1
  126. package/dist/hooks/magic-context/lkg-slot.d.ts +139 -2
  127. package/dist/hooks/magic-context/lkg-slot.d.ts.map +1 -1
  128. package/dist/hooks/magic-context/message-search-accepting-silent-worker.fixture.d.ts +2 -0
  129. package/dist/hooks/magic-context/message-search-accepting-silent-worker.fixture.d.ts.map +1 -0
  130. package/dist/hooks/magic-context/module-wire.d.ts.map +1 -1
  131. package/dist/hooks/magic-context/oc-stall-r2-warmup-worker.fixture.d.ts +2 -0
  132. package/dist/hooks/magic-context/oc-stall-r2-warmup-worker.fixture.d.ts.map +1 -0
  133. package/dist/hooks/magic-context/oc-stall-search-review.fixture.d.ts +2 -0
  134. package/dist/hooks/magic-context/oc-stall-search-review.fixture.d.ts.map +1 -0
  135. package/dist/hooks/magic-context/opencode-proven-floor.d.ts +6 -0
  136. package/dist/hooks/magic-context/opencode-proven-floor.d.ts.map +1 -0
  137. package/dist/hooks/magic-context/opencode1-to-model-messages.fixture.d.ts +63 -0
  138. package/dist/hooks/magic-context/opencode1-to-model-messages.fixture.d.ts.map +1 -0
  139. package/dist/hooks/magic-context/pass-outcome.d.ts.map +1 -1
  140. package/dist/hooks/magic-context/protected-tail-boundary.d.ts.map +1 -1
  141. package/dist/hooks/magic-context/provider-visible-parts.d.ts +45 -0
  142. package/dist/hooks/magic-context/provider-visible-parts.d.ts.map +1 -0
  143. package/dist/hooks/magic-context/raw-ordinal-warmup-silent-worker.fixture.d.ts +2 -0
  144. package/dist/hooks/magic-context/raw-ordinal-warmup-silent-worker.fixture.d.ts.map +1 -0
  145. package/dist/hooks/magic-context/raw-ordinal-warmup-worker.d.ts +2 -0
  146. package/dist/hooks/magic-context/raw-ordinal-warmup-worker.d.ts.map +1 -0
  147. package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts +87 -0
  148. package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts.map +1 -0
  149. package/dist/hooks/magic-context/read-session-chunk.d.ts +12 -0
  150. package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
  151. package/dist/hooks/magic-context/read-session-db.d.ts.map +1 -1
  152. package/dist/hooks/magic-context/read-session-formatting.d.ts +5 -0
  153. package/dist/hooks/magic-context/read-session-formatting.d.ts.map +1 -1
  154. package/dist/hooks/magic-context/read-session-raw.d.ts +83 -1
  155. package/dist/hooks/magic-context/read-session-raw.d.ts.map +1 -1
  156. package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts.map +1 -1
  157. package/dist/hooks/magic-context/reasoning-budget-status.d.ts +15 -0
  158. package/dist/hooks/magic-context/reasoning-budget-status.d.ts.map +1 -0
  159. package/dist/hooks/magic-context/reasoning-budget.d.ts +40 -0
  160. package/dist/hooks/magic-context/reasoning-budget.d.ts.map +1 -0
  161. package/dist/hooks/magic-context/reasoning-removal.d.ts +6 -6
  162. package/dist/hooks/magic-context/reasoning-removal.d.ts.map +1 -1
  163. package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
  164. package/dist/hooks/magic-context/sentinel.d.ts +45 -1
  165. package/dist/hooks/magic-context/sentinel.d.ts.map +1 -1
  166. package/dist/hooks/magic-context/strip-content.d.ts +21 -5
  167. package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
  168. package/dist/hooks/magic-context/system-prompt-hash.d.ts +1 -0
  169. package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
  170. package/dist/hooks/magic-context/tag-messages.d.ts +21 -0
  171. package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
  172. package/dist/hooks/magic-context/tag-owner-warmup.d.ts +6 -0
  173. package/dist/hooks/magic-context/tag-owner-warmup.d.ts.map +1 -0
  174. package/dist/hooks/magic-context/tail-hygiene-walk.d.ts.map +1 -1
  175. package/dist/hooks/magic-context/token-count-exact.d.ts +35 -0
  176. package/dist/hooks/magic-context/token-count-exact.d.ts.map +1 -0
  177. package/dist/hooks/magic-context/tool-drop-target.d.ts +5 -0
  178. package/dist/hooks/magic-context/tool-drop-target.d.ts.map +1 -1
  179. package/dist/hooks/magic-context/transform-compartment-phase.d.ts +3 -28
  180. package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -1
  181. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +28 -6
  182. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  183. package/dist/hooks/magic-context/transform.d.ts +11 -3
  184. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  185. package/dist/hooks/magic-context/wrapup-orchestrator.d.ts.map +1 -1
  186. package/dist/{index-hpecdzec.js → index-0an7742d.js} +6820 -6587
  187. package/dist/index-0qhce371.js +120 -0
  188. package/dist/{index-q6hef7fh.js → index-0sahzkwr.js} +6 -19
  189. package/dist/{index-k5bdx1bx.js → index-0w56v4fm.js} +3 -5
  190. package/dist/index-14cjxt20.js +819 -0
  191. package/dist/{v2/server-51dv1pr5.js → index-1qb0z7wa.js} +301 -27
  192. package/dist/index-2bvekkfy.js +11 -0
  193. package/dist/{index-sj29b3z2.js → index-2y0s2hep.js} +3 -3
  194. package/dist/index-4dhv7mqz.js +131 -0
  195. package/dist/{index-b35pxds2.js → index-58e3y90n.js} +1 -18
  196. package/dist/index-5zygecde.js +152 -0
  197. package/dist/{index-sjthx78w.js → index-692jzy0p.js} +16879 -22907
  198. package/dist/index-72nhv486.js +2307 -0
  199. package/dist/index-7jzrrxap.js +931 -0
  200. package/dist/index-7mx8v0pw.js +3591 -0
  201. package/dist/index-8ajstryz.js +18 -0
  202. package/dist/{index-sfpzqvdz.js → index-8cd2j99z.js} +2 -3
  203. package/dist/{index-hybnrwq0.js → index-8j7gqj40.js} +131 -128
  204. package/dist/index-bdckkfw6.js +3261 -0
  205. package/dist/{index-8x2v7gg9.js → index-bhvjj0ys.js} +158 -2455
  206. package/dist/index-c43kr12f.js +3030 -0
  207. package/dist/index-cb7emxgj.js +984 -0
  208. package/dist/index-d9vfe7xq.js +16 -0
  209. package/dist/{index-5gq3b2ya.js → index-db7zwa3v.js} +147 -209
  210. package/dist/index-dhwzyd54.js +1142 -0
  211. package/dist/{index-8da2zjhz.js → index-eeezr5zz.js} +9 -7
  212. package/dist/{index-pkbcrdqs.js → index-f0h6xwqm.js} +3412 -4552
  213. package/dist/index-fb3zxn06.js +13 -0
  214. package/dist/index-fbv1dn35.js +171 -0
  215. package/dist/index-fr0wbhdn.js +43 -0
  216. package/dist/{index-mc22ayvf.js → index-ghc9f0n7.js} +11 -9
  217. package/dist/{index-fzbvakh0.js → index-jcbd3znx.js} +3 -3
  218. package/dist/{index-5p8jdswx.js → index-k1xb52kd.js} +20 -13
  219. package/dist/index-k9nnwad5.js +3532 -0
  220. package/dist/{v2/server-fg34g6a5.js → index-kb9nn0a0.js} +309 -52
  221. package/dist/index-knh4y330.js +566 -0
  222. package/dist/{index-q4yp4b52.js → index-mfkzp7qj.js} +28 -28
  223. package/dist/{index-sgthv3f7.js → index-mmyh6d8f.js} +4 -4
  224. package/dist/index-pavzsdc6.js +17 -0
  225. package/dist/{index-0d3g3461.js → index-pdecwzrd.js} +19 -16
  226. package/dist/index-pg50n748.js +1060 -0
  227. package/dist/index-q2tqeqde.js +2106 -0
  228. package/dist/index-q7h7csab.js +3469 -0
  229. package/dist/index-qt1qqasc.js +22 -0
  230. package/dist/{index-majxda46.js → index-ty64eqcn.js} +28 -18
  231. package/dist/{index-7qw742ev.js → index-yq8n9qcb.js} +25 -44
  232. package/dist/{index-sfnj6h8h.js → index-z8e0psj8.js} +20 -20
  233. package/dist/index.d.ts.map +1 -1
  234. package/dist/index.js +1061 -260
  235. package/dist/logger-d3wex3dz.js +20 -0
  236. package/dist/message-index-bounded-7ezbgddp.js +124 -0
  237. package/dist/{v2/message-time-backfill-r6qkem1x.js → message-time-backfill-brbd63hv.js} +8 -6
  238. package/dist/migration-worker.js +25 -16
  239. package/dist/{model-resolution-xhfmyyvy.js → model-resolution-nx97z3x7.js} +1 -1
  240. package/dist/plugin/dream-timer.d.ts +1 -1
  241. package/dist/plugin/dream-timer.d.ts.map +1 -1
  242. package/dist/plugin/hooks/create-session-hooks.d.ts +3 -1
  243. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  244. package/dist/plugin/host-stall-profiler-report.d.ts +2 -0
  245. package/dist/plugin/host-stall-profiler-report.d.ts.map +1 -0
  246. package/dist/plugin/host-stall-profiler.d.ts +3 -0
  247. package/dist/plugin/host-stall-profiler.d.ts.map +1 -0
  248. package/dist/plugin/messages-transform.d.ts +21 -19
  249. package/dist/plugin/messages-transform.d.ts.map +1 -1
  250. package/dist/plugin/rpc-handlers.d.ts.map +1 -1
  251. package/dist/plugin/tool-registry.d.ts.map +1 -1
  252. package/dist/project-embedding-registry-7qzptcw7.js +88 -0
  253. package/dist/raw-ordinal-warmup-worker.js +60 -0
  254. package/dist/{read-session-chunk-egz7r68d.js → read-session-chunk-6k83m4fj.js} +15 -9
  255. package/dist/read-session-raw-3g9qy1xa.js +58 -0
  256. package/dist/recomp-orchestrator-d3fp1cy0.js +57 -0
  257. package/dist/{v2/safe-notification-target-eb1n1vfb.js → safe-notification-target-5ffqq32m.js} +4 -2
  258. package/dist/search-epax1ecv.js +45 -0
  259. package/dist/{v2/send-session-notification-qs0j78v6.js → send-session-notification-erecz4y4.js} +10 -6
  260. package/dist/shared/auto-search-lifecycle.d.ts +7 -0
  261. package/dist/shared/auto-search-lifecycle.d.ts.map +1 -0
  262. package/dist/shared/conflict-detector.d.ts.map +1 -1
  263. package/dist/shared/historian-tool-expansions.d.ts +1 -1
  264. package/dist/shared/historian-tool-expansions.d.ts.map +1 -1
  265. package/dist/shared/historian-tool-template.d.ts +2 -2
  266. package/dist/shared/historian-tool-template.d.ts.map +1 -1
  267. package/dist/shared/host-stall-profiler-bun.d.ts +46 -0
  268. package/dist/shared/host-stall-profiler-bun.d.ts.map +1 -0
  269. package/dist/shared/host-stall-profiler-common.d.ts +58 -0
  270. package/dist/shared/host-stall-profiler-common.d.ts.map +1 -0
  271. package/dist/shared/host-stall-profiler-node.d.ts +36 -0
  272. package/dist/shared/host-stall-profiler-node.d.ts.map +1 -0
  273. package/dist/shared/host-stall-profiler-report.d.ts +68 -0
  274. package/dist/shared/host-stall-profiler-report.d.ts.map +1 -0
  275. package/dist/shared/host-stall-profiler.d.ts +5 -0
  276. package/dist/shared/host-stall-profiler.d.ts.map +1 -0
  277. package/dist/shared/model-resolution.d.ts +2 -3
  278. package/dist/shared/model-resolution.d.ts.map +1 -1
  279. package/dist/shared/sqlite.d.ts +46 -1
  280. package/dist/shared/sqlite.d.ts.map +1 -1
  281. package/dist/shared/stable-json.d.ts.map +1 -1
  282. package/dist/shared/status-view.d.ts.map +1 -1
  283. package/dist/shared/user-facing-codes.d.ts +0 -5
  284. package/dist/shared/user-facing-codes.d.ts.map +1 -1
  285. package/dist/shared/window-geometry.d.ts +4 -0
  286. package/dist/shared/window-geometry.d.ts.map +1 -1
  287. package/dist/sqlite-context-pragmas-mv9jqwjh.js +6 -0
  288. package/dist/sqlite-mhjkerzq.js +46 -0
  289. package/dist/storage-memory-07fx57k6.js +71 -0
  290. package/dist/storage-tags-d3b0v2ss.js +131 -0
  291. package/dist/{task-config-v81k8jvk.js → task-config-cgpg0nvh.js} +2 -2
  292. package/dist/tools/ctx-expand/render.d.ts.map +1 -1
  293. package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
  294. package/dist/tools/ctx-note/constants.d.ts +4 -0
  295. package/dist/tools/ctx-note/constants.d.ts.map +1 -1
  296. package/dist/tools/ctx-note/tools.d.ts +1 -0
  297. package/dist/tools/ctx-note/tools.d.ts.map +1 -1
  298. package/dist/tools/ctx-search/tools.d.ts.map +1 -1
  299. package/dist/tools/parameter-descriptions.d.ts +2 -2
  300. package/dist/tools/parameter-descriptions.d.ts.map +1 -1
  301. package/dist/{transform-postprocess-phase-bqhz6vdr.js → transform-postprocess-phase-spcy2qre.js} +35 -17
  302. package/dist/transformers-node-wasm.js +18415 -18415
  303. package/dist/v2/auto-search-worker.js +112 -0
  304. package/dist/v2/{context-zecmzk5s.js → context-sf98kstd.js} +8378 -8530
  305. package/dist/v2/{derive-budgets-kdgp4s3r.js → derive-budgets-3vc0y84t.js} +4 -3
  306. package/dist/v2/embedding-activity-g1dhes6g.js +10 -0
  307. package/dist/v2/embedding-backfill-vn8g1nh1.js +21 -0
  308. package/dist/v2/embedding-cache-mgyr73ef.js +16 -0
  309. package/dist/v2/embedding-worker.js +12 -9
  310. package/dist/v2/fold/host-media.d.ts +4 -0
  311. package/dist/v2/fold/host-media.d.ts.map +1 -1
  312. package/dist/v2/fold/memory-cache.d.ts +70 -0
  313. package/dist/v2/fold/memory-cache.d.ts.map +1 -0
  314. package/dist/v2/fold/native-codec.d.ts +10 -0
  315. package/dist/v2/fold/native-codec.d.ts.map +1 -0
  316. package/dist/v2/fold/native-replay.d.ts +58 -0
  317. package/dist/v2/fold/native-replay.d.ts.map +1 -0
  318. package/dist/v2/fold/policy.d.ts +24 -0
  319. package/dist/v2/fold/policy.d.ts.map +1 -0
  320. package/dist/v2/harness-e4avh192.js +10 -0
  321. package/dist/v2/hidden-completion.d.ts.map +1 -1
  322. package/dist/v2/hooks/context.d.ts +2 -2
  323. package/dist/v2/hooks/context.d.ts.map +1 -1
  324. package/dist/v2/hooks/dream-manual.d.ts +1 -1
  325. package/dist/v2/hooks/dream-manual.d.ts.map +1 -1
  326. package/dist/v2/hooks/dream-timer.d.ts.map +1 -1
  327. package/dist/v2/hooks/dream-trigger.d.ts +1 -2
  328. package/dist/v2/hooks/dream-trigger.d.ts.map +1 -1
  329. package/dist/v2/hooks/payload.d.ts.map +1 -1
  330. package/dist/v2/hooks/tools.d.ts.map +1 -1
  331. package/dist/v2/hooks/types.d.ts +6 -0
  332. package/dist/v2/hooks/types.d.ts.map +1 -1
  333. package/dist/v2/logger-mxd0ym09.js +19 -0
  334. package/dist/v2/message-index-bounded-dy3s2k1e.js +123 -0
  335. package/dist/{message-time-backfill-68gj6t3e.js → v2/message-time-backfill-gtx1pwk1.js} +7 -7
  336. package/dist/v2/migration-worker.js +24 -15
  337. package/dist/v2/{model-resolution-xhfmyyvy.js → model-resolution-nx97z3x7.js} +1 -1
  338. package/dist/v2/project-embedding-registry-1tgba5dv.js +86 -0
  339. package/dist/v2/raw-ordinal-warmup-worker.js +60 -0
  340. package/dist/v2/{read-session-chunk-8vjp6581.js → read-session-chunk-rh4khdkv.js} +14 -8
  341. package/dist/v2/read-session-raw-bsbmf0vj.js +57 -0
  342. package/dist/v2/recomp-orchestrator-az61rfcg.js +57 -0
  343. package/dist/{safe-notification-target-43r8jsxw.js → v2/safe-notification-target-73ax1p5v.js} +3 -3
  344. package/dist/v2/search-nzkwrc6n.js +45 -0
  345. package/dist/{send-session-notification-dyw42dtr.js → v2/send-session-notification-6km439kn.js} +9 -7
  346. package/dist/{index-5eqk6z3s.js → v2/server-1r6pmz4f.js} +301 -27
  347. package/dist/v2/server-2bvekkfy.js +11 -0
  348. package/dist/v2/server-2fbhp79z.js +3205 -0
  349. package/dist/v2/{server-ajzeteqw.js → server-2ra6pwf3.js} +1 -18
  350. package/dist/v2/server-4dhv7mqz.js +131 -0
  351. package/dist/v2/{server-xa4xe3rv.js → server-4k748ke6.js} +11 -1053
  352. package/dist/v2/{server-vs5gpnd4.js → server-52awr2mw.js} +81 -145
  353. package/dist/v2/{server-1qbnzc80.js → server-5m3dt5r1.js} +136 -148
  354. package/dist/v2/server-686jg6eb.js +3508 -0
  355. package/dist/v2/server-7jzrrxap.js +931 -0
  356. package/dist/v2/server-7wwc2nga.js +3023 -0
  357. package/dist/v2/server-8ajstryz.js +18 -0
  358. package/dist/v2/{server-sfpzqvdz.js → server-8cd2j99z.js} +2 -3
  359. package/dist/v2/server-8pyt7hev.js +3408 -0
  360. package/dist/v2/server-8tqanswc.js +984 -0
  361. package/dist/v2/{server-14vq4kpm.js → server-aan4q8mx.js} +3 -3
  362. package/dist/v2/server-d9vfe7xq.js +16 -0
  363. package/dist/v2/server-e0vdaae2.js +3591 -0
  364. package/dist/v2/server-ezhze64f.js +1048 -0
  365. package/dist/v2/server-fb3zxn06.js +13 -0
  366. package/dist/v2/server-fr0wbhdn.js +43 -0
  367. package/dist/v2/server-g5r0n3b6.js +1137 -0
  368. package/dist/v2/server-gjcr4w98.js +154 -0
  369. package/dist/v2/server-k228xhjg.js +171 -0
  370. package/dist/v2/{server-jc7y02q0.js → server-k8x2rbxc.js} +5119 -10948
  371. package/dist/{index-fg34g6a5.js → v2/server-kb9nn0a0.js} +309 -52
  372. package/dist/v2/{server-g0fjrkta.js → server-mfkzp7qj.js} +28 -28
  373. package/dist/v2/server-pavzsdc6.js +17 -0
  374. package/dist/v2/server-psqc7e9n.js +2106 -0
  375. package/dist/v2/server-qt1qqasc.js +22 -0
  376. package/dist/v2/server-qye6ykf7.js +120 -0
  377. package/dist/v2/{server-qdjnb2z1.js → server-r5p3b1wy.js} +11 -9
  378. package/dist/v2/server-sggvvzhb.js +759 -0
  379. package/dist/v2/{server-y8maxeft.js → server-v06jcv0w.js} +16 -13
  380. package/dist/v2/server-vqpf3167.js +1048 -0
  381. package/dist/v2/{server-c5gz8wph.js → server-x2g40a71.js} +2048 -2059
  382. package/dist/v2/{server-wvjvfhck.js → server-xdfwt6kh.js} +20 -16
  383. package/dist/v2/{server-mcfawjgc.js → server-xxm59eww.js} +25 -44
  384. package/dist/v2/server-yczc713m.js +564 -0
  385. package/dist/v2/{server-3n4q9xme.js → server-z2037m6z.js} +4 -4
  386. package/dist/v2/{server-e29d7p7c.js → server-zm570tr2.js} +166 -160
  387. package/dist/v2/{server-6r257mf5.js → server-zxhgvsf9.js} +3 -3
  388. package/dist/v2/server.js +16 -14
  389. package/dist/v2/sqlite-context-pragmas-mv9jqwjh.js +6 -0
  390. package/dist/v2/sqlite-mhjkerzq.js +46 -0
  391. package/dist/v2/storage-memory-07fx57k6.js +71 -0
  392. package/dist/v2/storage-tags-w4tv77sn.js +130 -0
  393. package/dist/v2/store-reader.d.ts +16 -0
  394. package/dist/v2/store-reader.d.ts.map +1 -1
  395. package/dist/v2/{task-config-tbndqyny.js → task-config-x0hq3qfd.js} +2 -2
  396. package/dist/v2/transformers-node-wasm.js +18415 -18415
  397. package/dist/v2/tui/index.d.ts.map +1 -1
  398. package/dist/v2/tui/types.d.ts +1 -10
  399. package/dist/v2/tui/types.d.ts.map +1 -1
  400. package/dist/v2/{wrapup-orchestrator-0snhvwcv.js → wrapup-orchestrator-mz7efs7w.js} +51 -27
  401. package/dist/wrapup-orchestrator-amzta1t4.js +44 -0
  402. package/package.json +4 -3
  403. package/src/agents/magic-context-prompt.ts +27 -2
  404. package/src/agents/smart-notes-enabled.test.ts +294 -0
  405. package/src/agents/smart-notes-on.golden.json +70 -0
  406. package/src/config/index.test.ts +67 -1
  407. package/src/config/index.ts +8 -0
  408. package/src/config/latch-permanence-guard.test.ts +4 -0
  409. package/src/config/live-run-config.test.ts +37 -1
  410. package/src/config/live-run-config.ts +28 -0
  411. package/src/config/migrate-config-location.ts +10 -3
  412. package/src/config/mural-model-deprecation.ts +24 -0
  413. package/src/config/project-security.hostile-matrix.test.ts +4 -44
  414. package/src/config/project-security.test.ts +9 -14
  415. package/src/config/project-security.ts +13 -55
  416. package/src/config/schema/magic-context.test.ts +6 -5
  417. package/src/config/schema/magic-context.ts +34 -16
  418. package/src/features/magic-context/dreamer/task-registry.ts +6 -0
  419. package/src/shared/auto-search-lifecycle.ts +27 -0
  420. package/src/shared/conflict-detector.test.ts +56 -0
  421. package/src/shared/conflict-detector.ts +16 -5
  422. package/src/shared/historian-tool-defaults.json +6 -6
  423. package/src/shared/historian-tool-expansions.ts +65 -8
  424. package/src/shared/historian-tool-preview-defaults.json +13 -0
  425. package/src/shared/historian-tool-template.ts +48 -14
  426. package/src/shared/host-stall-profiler-bun.ts +358 -0
  427. package/src/shared/host-stall-profiler-common.ts +159 -0
  428. package/src/shared/host-stall-profiler-node.test.ts +234 -0
  429. package/src/shared/host-stall-profiler-node.ts +274 -0
  430. package/src/shared/host-stall-profiler-report.ts +248 -0
  431. package/src/shared/host-stall-profiler.ts +57 -0
  432. package/src/shared/model-resolution.test.ts +54 -17
  433. package/src/shared/model-resolution.ts +6 -17
  434. package/src/shared/sqlite-640-review-r2.test.ts +136 -0
  435. package/src/shared/sqlite-640-review.test.ts +183 -0
  436. package/src/shared/sqlite-acquisition-routing.test.ts +18 -0
  437. package/src/shared/sqlite.test.ts +52 -0
  438. package/src/shared/sqlite.ts +423 -37
  439. package/src/shared/stable-json-linear.test.ts +109 -0
  440. package/src/shared/stable-json.ts +37 -7
  441. package/src/shared/status-view.test.ts +6 -1
  442. package/src/shared/status-view.ts +15 -1
  443. package/src/shared/tag-transcript.ts +6 -0
  444. package/src/shared/user-facing-codes.ts +2 -6
  445. package/src/shared/window-geometry.ts +10 -0
  446. package/src/shared/write-transaction-attribution.test.ts +2 -2
  447. package/src/v2/tui/host-contract.test.ts +41 -67
  448. package/src/v2/tui/index.ts +6 -214
  449. package/src/v2/tui/types.ts +5 -17
  450. package/dist/features/magic-context/checkout-claim-fake-subc.test-support.d.ts +0 -45
  451. package/dist/features/magic-context/checkout-claim-fake-subc.test-support.d.ts.map +0 -1
  452. package/dist/features/magic-context/checkout-claim.d.ts +0 -155
  453. package/dist/features/magic-context/checkout-claim.d.ts.map +0 -1
  454. package/dist/index-3h0ybwah.js +0 -6540
  455. package/dist/index-r5hmbx3t.js +0 -7773
  456. package/dist/recomp-orchestrator-y15j0rb9.js +0 -39
  457. package/dist/v2/recomp-orchestrator-8ejxvrzz.js +0 -39
  458. package/dist/v2/server-frbm99q5.js +0 -7698
  459. package/dist/v2/server-qp5hx1ad.js +0 -6366
  460. package/dist/wrapup-orchestrator-39amhv9s.js +0 -26
  461. /package/dist/{index-en1k8h8m.js → index-2pp04pmg.js} +0 -0
  462. /package/dist/v2/{index-en1k8h8m.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,
@@ -415,6 +416,12 @@ export function parsePluginConfig(
415
416
  // opt-in/out state survives upgrades even when they never run `doctor`.
416
417
  const preMigrationWarnings: string[] = [];
417
418
  const configWithoutRemovedAgent = stripRemovedAgentConfig(rawConfig, preMigrationWarnings);
419
+ if (Object.hasOwn(rawConfig, "clear_reasoning_age")) {
420
+ const warning =
421
+ "clear_reasoning_age is deprecated and ignored. Magic Context now keeps reasoning up to a token budget, keep_reasoning_tokens (default 10,000). Remove the key, or set keep_reasoning_tokens to a token count.";
422
+ preMigrationWarnings.push(warning);
423
+ log(`[magic-context] ${warning}`);
424
+ }
418
425
  if (Object.hasOwn(rawConfig, "protected_tags")) {
419
426
  warnProtectedTagsDeprecationOnce();
420
427
  preMigrationWarnings.push(
@@ -431,6 +438,7 @@ export function parsePluginConfig(
431
438
  configWithoutRemovedAgent,
432
439
  preMigrationWarnings,
433
440
  );
441
+ warnDeprecatedMuralModel(migratedExperimental, preMigrationWarnings);
434
442
  // Dreamer v2: convert the legacy v1 dreamer shape (window schedule, tasks
435
443
  // array, user_memories/pin_key_files blocks) into the per-task `tasks` record.
436
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.",
@@ -7,7 +7,7 @@ import {
7
7
  userMemoryCollectionEnabled,
8
8
  } from "../features/magic-context/dreamer/task-config";
9
9
  import { producerInputTokenLimit } from "../hooks/magic-context/producer-window-guard";
10
- import { resolveHistorianModel } from "../shared/model-resolution";
10
+ import { resolveDreamerTaskModel, resolveHistorianModel } from "../shared/model-resolution";
11
11
  import { createTestTempDirFromPath } from "../shared/test-temp-dir";
12
12
  import { loadPluginConfigDetailed } from "./index";
13
13
  import { dreamerRunConfig, historianRunConfig } from "./live-run-config";
@@ -248,3 +248,39 @@ test("malformed project config retains last good values and deduplicates the war
248
248
  rmSync(root, { recursive: true, force: true });
249
249
  }
250
250
  });
251
+
252
+ test("OMP keeps the pi historian and dreamer models when the config has no omp block", () => {
253
+ // Live sampling used to create empty parent objects for every live path. An empty
254
+ // `omp` block then shadowed the `pi` block OMP falls back to, and OMP ran the
255
+ // historian and dreamer on its own default model.
256
+ const config = {
257
+ historian: { pi: { model: "anthropic/claude-sonnet-5-5" } },
258
+ dreamer: {
259
+ pi: {
260
+ model: "anthropic/claude-sonnet-5-5",
261
+ tasks: { curate: { model: "openai/gpt-6-luna" } },
262
+ },
263
+ },
264
+ } as unknown as Parameters<typeof historianRunConfig>[0];
265
+ for (const sampled of [historianRunConfig(config, config), dreamerRunConfig(config, config)]) {
266
+ expect((sampled as { historian?: Record<string, unknown> }).historian?.omp).toBeUndefined();
267
+ expect((sampled as { dreamer?: Record<string, unknown> }).dreamer?.omp).toBeUndefined();
268
+ expect(resolveHistorianModel(sampled, "omp").primary?.model).toBe(
269
+ "anthropic/claude-sonnet-5-5",
270
+ );
271
+ expect(
272
+ resolveDreamerTaskModel({ config: sampled, harness: "omp", task: "curate" }).primary
273
+ ?.model,
274
+ ).toBe("openai/gpt-6-luna");
275
+ }
276
+ });
277
+
278
+ test("live sampling clears a key removed from the fresh config without touching the boot object", () => {
279
+ const boot = {
280
+ historian: { pi: { model: "anthropic/claude-sonnet-5-5" } },
281
+ } as unknown as Parameters<typeof historianRunConfig>[0];
282
+ const fresh = { historian: { pi: {} } } as unknown as Parameters<typeof historianRunConfig>[0];
283
+ const sampled = historianRunConfig(boot, fresh);
284
+ expect(resolveHistorianModel(sampled, "pi").primary).toBeUndefined();
285
+ expect(resolveHistorianModel(boot, "pi").primary?.model).toBe("anthropic/claude-sonnet-5-5");
286
+ });
@@ -11,6 +11,14 @@ export function sampleLiveConfig<T extends MagicContextConfig>(boot: T, fresh: T
11
11
  const parts = path.split(".");
12
12
  let value: unknown = fresh;
13
13
  for (const part of parts) value = (value as Record<string, unknown> | undefined)?.[part];
14
+ if (value === undefined) {
15
+ // An unset live path must not create its parent objects. An empty `omp`
16
+ // block, for example, shadows the `pi` block it would otherwise fall back
17
+ // to, and the historian and dreamer lose their configured model. Only
18
+ // clear a leaf the boot config actually has, so removing a key live works.
19
+ removeLeaf(result, parts);
20
+ continue;
21
+ }
14
22
  let target = result;
15
23
  for (const part of parts.slice(0, -1)) {
16
24
  const child = target[part];
@@ -27,6 +35,26 @@ export function sampleLiveConfig<T extends MagicContextConfig>(boot: T, fresh: T
27
35
  return result as T;
28
36
  }
29
37
 
38
+ function removeLeaf(root: Record<string, unknown>, parts: string[]): void {
39
+ const parents = parts.slice(0, -1);
40
+ let node: Record<string, unknown> = root;
41
+ for (const part of parents) {
42
+ const child = node[part];
43
+ if (!child || typeof child !== "object" || Array.isArray(child)) return;
44
+ node = child as Record<string, unknown>;
45
+ }
46
+ const leaf = parts.at(-1);
47
+ if (leaf === undefined || !Object.hasOwn(node, leaf)) return;
48
+ // Copy the parent chain before deleting so the boot config object is never mutated.
49
+ let target = root;
50
+ for (const part of parents) {
51
+ const copy = { ...(target[part] as Record<string, unknown>) };
52
+ target[part] = copy;
53
+ target = copy;
54
+ }
55
+ delete target[leaf];
56
+ }
57
+
30
58
  export function changedLiveKeys(previous: MagicContextConfig, next: MagicContextConfig): string[] {
31
59
  const at = (config: MagicContextConfig, path: string): unknown =>
32
60
  path
@@ -278,7 +278,7 @@ function sortJson(value: unknown): unknown {
278
278
  if (value && typeof value === "object") {
279
279
  const sorted: Record<string, unknown> = {};
280
280
  for (const key of Object.keys(value as Record<string, unknown>).sort()) {
281
- if (key === "protected_tags") continue;
281
+ if (key === "protected_tags" || key === "clear_reasoning_age") continue;
282
282
  sorted[key] = sortJson((value as Record<string, unknown>)[key]);
283
283
  }
284
284
  return sorted;
@@ -509,7 +509,9 @@ export function migrateConfigFile(opts: ConfigFileMigrationOptions): ConfigFileM
509
509
  let migratedContent = first.content;
510
510
  let strippedProtectedTags = false;
511
511
  try {
512
- const stripped = removeJsoncValue(first.content, ["protected_tags"]);
512
+ const stripped = removeJsoncValue(removeJsoncValue(first.content, ["protected_tags"]), [
513
+ "clear_reasoning_age",
514
+ ]);
513
515
  if (stripped !== first.content) {
514
516
  migratedContent = stripped;
515
517
  strippedProtectedTags = true;
@@ -520,7 +522,12 @@ export function migrateConfigFile(opts: ConfigFileMigrationOptions): ConfigFileM
520
522
 
521
523
  atomicWriteConfigFile(opts.targetPath, migratedContent);
522
524
  if (strippedProtectedTags) {
523
- info?.(`Stripped deprecated "protected_tags" key during config location migration`);
525
+ if (first.content.includes('"protected_tags"'))
526
+ info?.(`Stripped deprecated "protected_tags" key during config location migration`);
527
+ if (first.content.includes('"clear_reasoning_age"'))
528
+ info?.(
529
+ `Stripped deprecated "clear_reasoning_age" key during config location migration`,
530
+ );
524
531
  }
525
532
  info?.(
526
533
  `Migrated Magic Context ${opts.scope} config from ${first.path} to ${opts.targetPath}`,
@@ -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