@cortexkit/opencode-magic-context 0.42.6 → 0.43.1

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 (502) hide show
  1. package/README.md +4 -5
  2. package/dist/agents/dreamer.d.ts +7 -9
  3. package/dist/agents/dreamer.d.ts.map +1 -1
  4. package/dist/agents/hidden-agent-registrations.d.ts.map +1 -1
  5. package/dist/agents/magic-context-prompt.d.ts.map +1 -1
  6. package/dist/{announcement-8mgn61fw.js → announcement-1a8bvswd.js} +2 -1
  7. package/dist/config/index.d.ts +1 -1
  8. package/dist/config/index.d.ts.map +1 -1
  9. package/dist/config/live-run-config.d.ts +12 -0
  10. package/dist/config/live-run-config.d.ts.map +1 -0
  11. package/dist/config/live-snapshot.d.ts +32 -0
  12. package/dist/config/live-snapshot.d.ts.map +1 -0
  13. package/dist/config/schema/magic-context.d.ts +12 -2
  14. package/dist/config/schema/magic-context.d.ts.map +1 -1
  15. package/dist/{conflict-warning-hook-aktepwpz.js → conflict-warning-hook-956fkedc.js} +6 -4
  16. package/dist/{derive-budgets-v1fkhjjr.js → derive-budgets-b8ybssh9.js} +7 -3
  17. package/dist/features/builtin-commands/commands.d.ts +0 -4
  18. package/dist/features/builtin-commands/commands.d.ts.map +1 -1
  19. package/dist/features/magic-context/compaction-marker.d.ts +6 -0
  20. package/dist/features/magic-context/compaction-marker.d.ts.map +1 -1
  21. package/dist/features/magic-context/compartment-chunk-embedding.d.ts +4 -1
  22. package/dist/features/magic-context/compartment-chunk-embedding.d.ts.map +1 -1
  23. package/dist/features/magic-context/compartment-lease.d.ts +8 -0
  24. package/dist/features/magic-context/compartment-lease.d.ts.map +1 -1
  25. package/dist/features/magic-context/compartment-storage.d.ts +21 -0
  26. package/dist/features/magic-context/compartment-storage.d.ts.map +1 -1
  27. package/dist/features/magic-context/context-authority.d.ts +9 -2
  28. package/dist/features/magic-context/context-authority.d.ts.map +1 -1
  29. package/dist/features/magic-context/dreamer/classify.d.ts.map +1 -1
  30. package/dist/features/magic-context/dreamer/docs-proposals.d.ts +23 -0
  31. package/dist/features/magic-context/dreamer/docs-proposals.d.ts.map +1 -0
  32. package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts +5 -1
  33. package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts.map +1 -1
  34. package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts +51 -0
  35. package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts.map +1 -0
  36. package/dist/features/magic-context/dreamer/manual-summary.d.ts +7 -0
  37. package/dist/features/magic-context/dreamer/manual-summary.d.ts.map +1 -0
  38. package/dist/features/magic-context/dreamer/map-memories.d.ts +3 -1
  39. package/dist/features/magic-context/dreamer/map-memories.d.ts.map +1 -1
  40. package/dist/features/magic-context/dreamer/promote-primers.d.ts +8 -1
  41. package/dist/features/magic-context/dreamer/promote-primers.d.ts.map +1 -1
  42. package/dist/features/magic-context/dreamer/refresh-primers.d.ts +3 -1
  43. package/dist/features/magic-context/dreamer/refresh-primers.d.ts.map +1 -1
  44. package/dist/features/magic-context/dreamer/retrospective-orphan-sweep.d.ts +5 -2
  45. package/dist/features/magic-context/dreamer/retrospective-orphan-sweep.d.ts.map +1 -1
  46. package/dist/features/magic-context/dreamer/retrospective-raw-provider.d.ts +22 -13
  47. package/dist/features/magic-context/dreamer/retrospective-raw-provider.d.ts.map +1 -1
  48. package/dist/features/magic-context/dreamer/storage-task-schedule.d.ts +9 -0
  49. package/dist/features/magic-context/dreamer/storage-task-schedule.d.ts.map +1 -1
  50. package/dist/features/magic-context/dreamer/task-config.d.ts.map +1 -1
  51. package/dist/features/magic-context/dreamer/task-executor.d.ts +3 -0
  52. package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
  53. package/dist/features/magic-context/dreamer/task-prompts.d.ts +7 -4
  54. package/dist/features/magic-context/dreamer/task-prompts.d.ts.map +1 -1
  55. package/dist/features/magic-context/dreamer/task-registry.d.ts +53 -2
  56. package/dist/features/magic-context/dreamer/task-registry.d.ts.map +1 -1
  57. package/dist/features/magic-context/dreamer/task-scheduler.d.ts +3 -0
  58. package/dist/features/magic-context/dreamer/task-scheduler.d.ts.map +1 -1
  59. package/dist/features/magic-context/dreamer/tick-failure.d.ts +38 -0
  60. package/dist/features/magic-context/dreamer/tick-failure.d.ts.map +1 -0
  61. package/dist/features/magic-context/dreamer/verify.d.ts +4 -1
  62. package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
  63. package/dist/features/magic-context/git-commits/search-git-commits.d.ts +2 -0
  64. package/dist/features/magic-context/git-commits/search-git-commits.d.ts.map +1 -1
  65. package/dist/features/magic-context/memory/embedding-identity.d.ts +1 -0
  66. package/dist/features/magic-context/memory/embedding-identity.d.ts.map +1 -1
  67. package/dist/features/magic-context/memory/embedding-local.d.ts.map +1 -1
  68. package/dist/features/magic-context/memory/memory-diagnostics.d.ts +6 -0
  69. package/dist/features/magic-context/memory/memory-diagnostics.d.ts.map +1 -0
  70. package/dist/features/magic-context/memory/memory-selection.d.ts +12 -0
  71. package/dist/features/magic-context/memory/memory-selection.d.ts.map +1 -0
  72. package/dist/features/magic-context/memory/memory-visibility.d.ts +46 -0
  73. package/dist/features/magic-context/memory/memory-visibility.d.ts.map +1 -0
  74. package/dist/features/magic-context/memory/mirror-reembed.d.ts +22 -0
  75. package/dist/features/magic-context/memory/mirror-reembed.d.ts.map +1 -0
  76. package/dist/features/magic-context/memory/project-identity.d.ts +9 -0
  77. package/dist/features/magic-context/memory/project-identity.d.ts.map +1 -1
  78. package/dist/features/magic-context/memory/storage-memory-fts.d.ts +6 -2
  79. package/dist/features/magic-context/memory/storage-memory-fts.d.ts.map +1 -1
  80. package/dist/features/magic-context/memory/storage-memory.d.ts.map +1 -1
  81. package/dist/features/magic-context/memory/transformers-remote-host.d.ts +6 -0
  82. package/dist/features/magic-context/memory/transformers-remote-host.d.ts.map +1 -0
  83. package/dist/features/magic-context/memory/transformers-web-entry.d.ts.map +1 -1
  84. package/dist/features/magic-context/memory/verification-paths.d.ts.map +1 -1
  85. package/dist/features/magic-context/message-fts-rowid-map.d.ts +3 -1
  86. package/dist/features/magic-context/message-fts-rowid-map.d.ts.map +1 -1
  87. package/dist/features/magic-context/message-index-async.d.ts +8 -3
  88. package/dist/features/magic-context/message-index-async.d.ts.map +1 -1
  89. package/dist/features/magic-context/message-index.d.ts +7 -1
  90. package/dist/features/magic-context/message-index.d.ts.map +1 -1
  91. package/dist/features/magic-context/message-time-backfill.d.ts +19 -0
  92. package/dist/features/magic-context/message-time-backfill.d.ts.map +1 -0
  93. package/dist/features/magic-context/migrations.d.ts +10 -6
  94. package/dist/features/magic-context/migrations.d.ts.map +1 -1
  95. package/dist/features/magic-context/mural/compress-cues.d.ts.map +1 -1
  96. package/dist/features/magic-context/mural/storage-mural.d.ts +5 -0
  97. package/dist/features/magic-context/mural/storage-mural.d.ts.map +1 -1
  98. package/dist/features/magic-context/opencode2-relabel.d.ts +132 -0
  99. package/dist/features/magic-context/opencode2-relabel.d.ts.map +1 -0
  100. package/dist/features/magic-context/overflow-detection.d.ts +3 -0
  101. package/dist/features/magic-context/overflow-detection.d.ts.map +1 -1
  102. package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
  103. package/dist/features/magic-context/protection-window.d.ts +1 -1
  104. package/dist/features/magic-context/protection-window.d.ts.map +1 -1
  105. package/dist/features/magic-context/search.d.ts +6 -0
  106. package/dist/features/magic-context/search.d.ts.map +1 -1
  107. package/dist/features/magic-context/session-decision-calibration.d.ts +31 -0
  108. package/dist/features/magic-context/session-decision-calibration.d.ts.map +1 -0
  109. package/dist/features/magic-context/shadow-backfill-state.d.ts +1 -1
  110. package/dist/features/magic-context/shadow-backfill-state.d.ts.map +1 -1
  111. package/dist/features/magic-context/smart-notes/compiler.d.ts +5 -1
  112. package/dist/features/magic-context/smart-notes/compiler.d.ts.map +1 -1
  113. package/dist/features/magic-context/storage-clone.d.ts.map +1 -1
  114. package/dist/features/magic-context/storage-db.d.ts +1 -1
  115. package/dist/features/magic-context/storage-db.d.ts.map +1 -1
  116. package/dist/features/magic-context/storage-historian-runs.d.ts +4 -2
  117. package/dist/features/magic-context/storage-historian-runs.d.ts.map +1 -1
  118. package/dist/features/magic-context/storage-meta-persisted.d.ts +16 -2
  119. package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
  120. package/dist/features/magic-context/storage-meta-shared.d.ts +1 -1
  121. package/dist/features/magic-context/storage-meta-shared.d.ts.map +1 -1
  122. package/dist/features/magic-context/storage-meta.d.ts +1 -1
  123. package/dist/features/magic-context/storage-meta.d.ts.map +1 -1
  124. package/dist/features/magic-context/storage-notes.d.ts +1 -0
  125. package/dist/features/magic-context/storage-notes.d.ts.map +1 -1
  126. package/dist/features/magic-context/storage-replay-document.d.ts +2 -0
  127. package/dist/features/magic-context/storage-replay-document.d.ts.map +1 -1
  128. package/dist/features/magic-context/storage-subagent-invocations.d.ts +1 -1
  129. package/dist/features/magic-context/storage-subagent-invocations.d.ts.map +1 -1
  130. package/dist/features/magic-context/storage-tags.d.ts +42 -4
  131. package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
  132. package/dist/features/magic-context/storage.d.ts +2 -2
  133. package/dist/features/magic-context/storage.d.ts.map +1 -1
  134. package/dist/features/magic-context/store-generation-rebase.d.ts +95 -0
  135. package/dist/features/magic-context/store-generation-rebase.d.ts.map +1 -0
  136. package/dist/features/magic-context/subagent-token-capture.d.ts +1 -0
  137. package/dist/features/magic-context/subagent-token-capture.d.ts.map +1 -1
  138. package/dist/features/magic-context/tagger.d.ts +2 -0
  139. package/dist/features/magic-context/tagger.d.ts.map +1 -1
  140. package/dist/features/magic-context/tool-definition-tokens.d.ts +1 -0
  141. package/dist/features/magic-context/tool-definition-tokens.d.ts.map +1 -1
  142. package/dist/features/magic-context/tool-owner-backfill.d.ts.map +1 -1
  143. package/dist/features/magic-context/user-memory/review-user-memories.d.ts +5 -1
  144. package/dist/features/magic-context/user-memory/review-user-memories.d.ts.map +1 -1
  145. package/dist/hooks/auto-update-checker/checker.d.ts +1 -0
  146. package/dist/hooks/auto-update-checker/checker.d.ts.map +1 -1
  147. package/dist/hooks/magic-context/apply-operations.d.ts +10 -1
  148. package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
  149. package/dist/hooks/magic-context/cache-busting-signals.d.ts +19 -3
  150. package/dist/hooks/magic-context/cache-busting-signals.d.ts.map +1 -1
  151. package/dist/hooks/magic-context/command-handler.d.ts +5 -4
  152. package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
  153. package/dist/hooks/magic-context/compaction-marker-manager.d.ts.map +1 -1
  154. package/dist/hooks/magic-context/compaction-off-transition.d.ts +1 -0
  155. package/dist/hooks/magic-context/compaction-off-transition.d.ts.map +1 -1
  156. package/dist/hooks/magic-context/compartment-prompt.d.ts +1 -1
  157. package/dist/hooks/magic-context/compartment-prompt.d.ts.map +1 -1
  158. package/dist/hooks/magic-context/compartment-render-epoch.d.ts +3 -1
  159. package/dist/hooks/magic-context/compartment-render-epoch.d.ts.map +1 -1
  160. package/dist/hooks/magic-context/compartment-runner-drop-queue.d.ts +1 -1
  161. package/dist/hooks/magic-context/compartment-runner-drop-queue.d.ts.map +1 -1
  162. package/dist/hooks/magic-context/compartment-runner-historian.d.ts +1 -0
  163. package/dist/hooks/magic-context/compartment-runner-historian.d.ts.map +1 -1
  164. package/dist/hooks/magic-context/compartment-runner-incremental.d.ts +8 -1
  165. package/dist/hooks/magic-context/compartment-runner-incremental.d.ts.map +1 -1
  166. package/dist/hooks/magic-context/compartment-runner-recomp.d.ts.map +1 -1
  167. package/dist/hooks/magic-context/compartment-runner-types.d.ts +19 -11
  168. package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -1
  169. package/dist/hooks/magic-context/compartment-runner-validation.d.ts +4 -1
  170. package/dist/hooks/magic-context/compartment-runner-validation.d.ts.map +1 -1
  171. package/dist/hooks/magic-context/compartment-runner.d.ts.map +1 -1
  172. package/dist/hooks/magic-context/compartment-trigger.d.ts +2 -1
  173. package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
  174. package/dist/hooks/magic-context/decay-render.d.ts +1 -0
  175. package/dist/hooks/magic-context/decay-render.d.ts.map +1 -1
  176. package/dist/hooks/magic-context/decision-calibration.d.ts +24 -0
  177. package/dist/hooks/magic-context/decision-calibration.d.ts.map +1 -0
  178. package/dist/hooks/magic-context/derive-budgets.d.ts +2 -0
  179. package/dist/hooks/magic-context/derive-budgets.d.ts.map +1 -1
  180. package/dist/hooks/magic-context/dropped-input-guard.d.ts +50 -4
  181. package/dist/hooks/magic-context/dropped-input-guard.d.ts.map +1 -1
  182. package/dist/hooks/magic-context/embed-history-runner.d.ts +30 -0
  183. package/dist/hooks/magic-context/embed-history-runner.d.ts.map +1 -0
  184. package/dist/hooks/magic-context/emergency-drop.d.ts +13 -8
  185. package/dist/hooks/magic-context/emergency-drop.d.ts.map +1 -1
  186. package/dist/hooks/magic-context/event-handler.d.ts.map +1 -1
  187. package/dist/hooks/magic-context/event-payloads.d.ts +2 -1
  188. package/dist/hooks/magic-context/event-payloads.d.ts.map +1 -1
  189. package/dist/hooks/magic-context/execute-status.d.ts +2 -1
  190. package/dist/hooks/magic-context/execute-status.d.ts.map +1 -1
  191. package/dist/hooks/magic-context/final-wire-token-estimate.d.ts +12 -4
  192. package/dist/hooks/magic-context/final-wire-token-estimate.d.ts.map +1 -1
  193. package/dist/hooks/magic-context/heuristic-cleanup.d.ts.map +1 -1
  194. package/dist/hooks/magic-context/historian-no-fire-cause.d.ts +5 -0
  195. package/dist/hooks/magic-context/historian-no-fire-cause.d.ts.map +1 -0
  196. package/dist/hooks/magic-context/historian-publish-stage-logger.d.ts +3 -0
  197. package/dist/hooks/magic-context/historian-publish-stage-logger.d.ts.map +1 -0
  198. package/dist/hooks/magic-context/hook-handlers.d.ts +0 -3
  199. package/dist/hooks/magic-context/hook-handlers.d.ts.map +1 -1
  200. package/dist/hooks/magic-context/hook.d.ts +4 -4
  201. package/dist/hooks/magic-context/hook.d.ts.map +1 -1
  202. package/dist/hooks/magic-context/host-served-rows.d.ts +58 -0
  203. package/dist/hooks/magic-context/host-served-rows.d.ts.map +1 -0
  204. package/dist/hooks/magic-context/inject-compartments.d.ts +38 -0
  205. package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
  206. package/dist/hooks/magic-context/legacy-compartments.d.ts +20 -0
  207. package/dist/hooks/magic-context/legacy-compartments.d.ts.map +1 -0
  208. package/dist/hooks/magic-context/live-session-state.d.ts +7 -7
  209. package/dist/hooks/magic-context/lkg-slot.d.ts +1 -0
  210. package/dist/hooks/magic-context/lkg-slot.d.ts.map +1 -1
  211. package/dist/hooks/magic-context/m0-token-breakdown.d.ts +6 -0
  212. package/dist/hooks/magic-context/m0-token-breakdown.d.ts.map +1 -1
  213. package/dist/hooks/magic-context/maintenance-authority.d.ts +0 -1
  214. package/dist/hooks/magic-context/maintenance-authority.d.ts.map +1 -1
  215. package/dist/hooks/magic-context/module-state-sync.d.ts +1 -1
  216. package/dist/hooks/magic-context/module-state-sync.d.ts.map +1 -1
  217. package/dist/hooks/magic-context/module-transport.d.ts +1 -1
  218. package/dist/hooks/magic-context/module-transport.d.ts.map +1 -1
  219. package/dist/hooks/magic-context/module-wire.d.ts +42 -0
  220. package/dist/hooks/magic-context/module-wire.d.ts.map +1 -1
  221. package/dist/hooks/magic-context/note-nudger.d.ts.map +1 -1
  222. package/dist/hooks/magic-context/postprocess-read-cache.d.ts +8 -0
  223. package/dist/hooks/magic-context/postprocess-read-cache.d.ts.map +1 -0
  224. package/dist/hooks/magic-context/producer-window-guard.d.ts +16 -0
  225. package/dist/hooks/magic-context/producer-window-guard.d.ts.map +1 -1
  226. package/dist/hooks/magic-context/producer-window-test-support.d.ts +14 -0
  227. package/dist/hooks/magic-context/producer-window-test-support.d.ts.map +1 -0
  228. package/dist/hooks/magic-context/protected-tail-boundary.d.ts +2 -0
  229. package/dist/hooks/magic-context/protected-tail-boundary.d.ts.map +1 -1
  230. package/dist/hooks/magic-context/read-session-chunk.d.ts +45 -10
  231. package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
  232. package/dist/hooks/magic-context/read-session-db.d.ts.map +1 -1
  233. package/dist/hooks/magic-context/read-session-raw.d.ts +4 -0
  234. package/dist/hooks/magic-context/read-session-raw.d.ts.map +1 -1
  235. package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts +6 -0
  236. package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts.map +1 -1
  237. package/dist/hooks/magic-context/recomp-orchestrator.d.ts +17 -39
  238. package/dist/hooks/magic-context/recomp-orchestrator.d.ts.map +1 -1
  239. package/dist/hooks/magic-context/rust-mode-transform.d.ts +26 -3
  240. package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
  241. package/dist/hooks/magic-context/send-session-notification.d.ts +1 -0
  242. package/dist/hooks/magic-context/send-session-notification.d.ts.map +1 -1
  243. package/dist/hooks/magic-context/sentinel.d.ts.map +1 -1
  244. package/dist/hooks/magic-context/system-prompt-hash.d.ts +6 -7
  245. package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
  246. package/dist/hooks/magic-context/tag-messages.d.ts +21 -1
  247. package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
  248. package/dist/hooks/magic-context/tail-hygiene-walk.d.ts +63 -0
  249. package/dist/hooks/magic-context/tail-hygiene-walk.d.ts.map +1 -1
  250. package/dist/hooks/magic-context/tokenizer-calibration.d.ts +19 -12
  251. package/dist/hooks/magic-context/tokenizer-calibration.d.ts.map +1 -1
  252. package/dist/hooks/magic-context/tool-drop-target.d.ts +52 -1
  253. package/dist/hooks/magic-context/tool-drop-target.d.ts.map +1 -1
  254. package/dist/hooks/magic-context/tool-sweep-policy.d.ts +50 -0
  255. package/dist/hooks/magic-context/tool-sweep-policy.d.ts.map +1 -0
  256. package/dist/hooks/magic-context/transform-compartment-phase.d.ts +20 -1
  257. package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -1
  258. package/dist/hooks/magic-context/transform-context-state.d.ts +9 -0
  259. package/dist/hooks/magic-context/transform-context-state.d.ts.map +1 -1
  260. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +5 -3
  261. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  262. package/dist/hooks/magic-context/transform.d.ts +37 -4
  263. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  264. package/dist/hooks/magic-context/wrapup-orchestrator.d.ts.map +1 -1
  265. package/dist/{index-f9gem5cr.js → index-0ccmyzbj.js} +90 -10
  266. package/dist/index-1gtwrdc4.js +393 -0
  267. package/dist/{index-ntbmt6rq.js → index-4b30nf6z.js} +1 -1
  268. package/dist/index-6w9p73jz.js +170 -0
  269. package/dist/{index-4ftb5hcq.js → index-6z9g64js.js} +7 -1
  270. package/dist/{index-djp6rwz6.js → index-7wpwr2e2.js} +28002 -30125
  271. package/dist/index-9r1cbh9e.js +16 -0
  272. package/dist/{safe-notification-target-fepvcbsj.js → index-febg06dy.js} +6 -7
  273. package/dist/index-j7cnyvq1.js +5409 -0
  274. package/dist/{index-s61hh7gv.js → index-kpmmr8s0.js} +95 -73
  275. package/dist/{index-a9ssj59b.js → index-v8qr6tt2.js} +56 -16
  276. package/dist/{index-qp20p2py.js → index-wgzyeyf5.js} +1 -1
  277. package/dist/index-y5145x8k.js +619 -0
  278. package/dist/{index-ngjmj6xx.js → index-yc81txp4.js} +38 -4
  279. package/dist/index.d.ts.map +1 -1
  280. package/dist/index.js +6274 -3180
  281. package/dist/message-time-backfill-0ccvyk9n.js +109 -0
  282. package/dist/plugin/dream-timer.d.ts +13 -0
  283. package/dist/plugin/dream-timer.d.ts.map +1 -1
  284. package/dist/plugin/hooks/create-session-hooks.d.ts +5 -2
  285. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  286. package/dist/plugin/memory-id-translation.d.ts +86 -0
  287. package/dist/plugin/memory-id-translation.d.ts.map +1 -1
  288. package/dist/plugin/messages-transform.d.ts.map +1 -1
  289. package/dist/plugin/rpc-handlers.d.ts +10 -0
  290. package/dist/plugin/rpc-handlers.d.ts.map +1 -1
  291. package/dist/plugin/rust-note-backend.d.ts +84 -0
  292. package/dist/plugin/rust-note-backend.d.ts.map +1 -0
  293. package/dist/plugin/tool-registry.d.ts +1 -0
  294. package/dist/plugin/tool-registry.d.ts.map +1 -1
  295. package/dist/read-session-chunk-z7fv0qjv.js +62 -0
  296. package/dist/recomp-orchestrator-r00aa5t3.js +21 -0
  297. package/dist/safe-notification-target-vrkjrbgb.js +10 -0
  298. package/dist/{send-session-notification-jbxknvar.js → send-session-notification-3warjyjp.js} +7 -3
  299. package/dist/shared/assistant-message-extractor.d.ts +6 -0
  300. package/dist/shared/assistant-message-extractor.d.ts.map +1 -1
  301. package/dist/shared/conflict-detector.d.ts +9 -4
  302. package/dist/shared/conflict-detector.d.ts.map +1 -1
  303. package/dist/shared/data-path.d.ts.map +1 -1
  304. package/dist/shared/hidden-variant-warnings.d.ts +5 -0
  305. package/dist/shared/hidden-variant-warnings.d.ts.map +1 -0
  306. package/dist/shared/host-limitations.d.ts +14 -0
  307. package/dist/shared/host-limitations.d.ts.map +1 -0
  308. package/dist/shared/keep-subagents.d.ts +1 -1
  309. package/dist/shared/keep-subagents.d.ts.map +1 -1
  310. package/dist/shared/model-suggestion-retry.d.ts.map +1 -1
  311. package/dist/shared/models-dev-cache.d.ts +1 -0
  312. package/dist/shared/models-dev-cache.d.ts.map +1 -1
  313. package/dist/shared/opencode-config-dir.d.ts +52 -0
  314. package/dist/shared/opencode-config-dir.d.ts.map +1 -1
  315. package/dist/shared/opencode-db-path.d.ts +15 -0
  316. package/dist/shared/opencode-db-path.d.ts.map +1 -1
  317. package/dist/shared/prompt-surface-runtime.d.ts +5 -5
  318. package/dist/shared/rpc-server.d.ts +10 -0
  319. package/dist/shared/rpc-server.d.ts.map +1 -1
  320. package/dist/shared/rpc-types.d.ts +64 -5
  321. package/dist/shared/rpc-types.d.ts.map +1 -1
  322. package/dist/shared/status-detail-text.d.ts +1 -3
  323. package/dist/shared/status-detail-text.d.ts.map +1 -1
  324. package/dist/shared/status-summary.d.ts +7 -0
  325. package/dist/shared/status-summary.d.ts.map +1 -1
  326. package/dist/shared/status-view.d.ts +229 -0
  327. package/dist/shared/status-view.d.ts.map +1 -0
  328. package/dist/shared/tag-transcript.d.ts.map +1 -1
  329. package/dist/shared/tail-hygiene-status.d.ts +8 -0
  330. package/dist/shared/tail-hygiene-status.d.ts.map +1 -1
  331. package/dist/shared/test-temp-dir.d.ts +1 -1
  332. package/dist/shared/test-temp-dir.d.ts.map +1 -1
  333. package/dist/shared/user-facing-codes.d.ts +32 -7
  334. package/dist/shared/user-facing-codes.d.ts.map +1 -1
  335. package/dist/shared/window-geometry.d.ts +3 -0
  336. package/dist/shared/window-geometry.d.ts.map +1 -1
  337. package/dist/{task-config-cv8k9y8r.js → task-config-mgf5nsh3.js} +1 -1
  338. package/dist/tools/ctx-expand/constants.d.ts +1 -1
  339. package/dist/tools/ctx-expand/constants.d.ts.map +1 -1
  340. package/dist/tools/ctx-expand/render.d.ts.map +1 -1
  341. package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
  342. package/dist/tools/ctx-memory/constants.d.ts +3 -1
  343. package/dist/tools/ctx-memory/constants.d.ts.map +1 -1
  344. package/dist/tools/ctx-memory/tools.d.ts +1 -0
  345. package/dist/tools/ctx-memory/tools.d.ts.map +1 -1
  346. package/dist/tools/ctx-memory/types.d.ts +2 -2
  347. package/dist/tools/ctx-note/constants.d.ts +1 -1
  348. package/dist/tools/ctx-note/constants.d.ts.map +1 -1
  349. package/dist/tools/ctx-note/render.d.ts +88 -0
  350. package/dist/tools/ctx-note/render.d.ts.map +1 -0
  351. package/dist/tools/ctx-note/tools.d.ts.map +1 -1
  352. package/dist/tools/ctx-reduce/constants.d.ts +1 -1
  353. package/dist/tools/ctx-reduce/constants.d.ts.map +1 -1
  354. package/dist/tools/ctx-search/constants.d.ts +1 -1
  355. package/dist/tools/ctx-search/constants.d.ts.map +1 -1
  356. package/dist/tools/ctx-search/date-range.d.ts +9 -0
  357. package/dist/tools/ctx-search/date-range.d.ts.map +1 -0
  358. package/dist/tools/ctx-search/tools.d.ts.map +1 -1
  359. package/dist/tools/ctx-search/types.d.ts +2 -0
  360. package/dist/tools/ctx-search/types.d.ts.map +1 -1
  361. package/dist/tools/light-descriptions.d.ts +5 -5
  362. package/dist/tools/light-descriptions.d.ts.map +1 -1
  363. package/dist/tools/parameter-descriptions.d.ts +75 -0
  364. package/dist/tools/parameter-descriptions.d.ts.map +1 -0
  365. package/dist/transformers-node-wasm.js +1918 -826
  366. package/dist/transformers-web.js +1736 -636
  367. package/dist/{transformers.node-dpmf3wpx.js → transformers.node-3zqr6k1w.js} +4087 -2898
  368. package/dist/tui/data/context-db.d.ts +19 -7
  369. package/dist/tui/data/context-db.d.ts.map +1 -1
  370. package/dist/tui-compiled/data/context-db.d.ts +19 -7
  371. package/dist/tui-compiled/data/context-db.d.ts.map +1 -1
  372. package/dist/v2/fold/host-media.d.ts +36 -0
  373. package/dist/v2/fold/host-media.d.ts.map +1 -0
  374. package/dist/v2/fold/restore.d.ts +21 -1
  375. package/dist/v2/fold/restore.d.ts.map +1 -1
  376. package/dist/v2/hidden-completion.d.ts +45 -1
  377. package/dist/v2/hidden-completion.d.ts.map +1 -1
  378. package/dist/v2/hooks/commands.d.ts +29 -0
  379. package/dist/v2/hooks/commands.d.ts.map +1 -0
  380. package/dist/v2/hooks/context.d.ts +46 -2
  381. package/dist/v2/hooks/context.d.ts.map +1 -1
  382. package/dist/v2/hooks/deleted-session-tombstones.d.ts +10 -0
  383. package/dist/v2/hooks/deleted-session-tombstones.d.ts.map +1 -0
  384. package/dist/v2/hooks/dream-manual.d.ts +43 -0
  385. package/dist/v2/hooks/dream-manual.d.ts.map +1 -0
  386. package/dist/v2/hooks/dream-trigger.d.ts +7 -0
  387. package/dist/v2/hooks/dream-trigger.d.ts.map +1 -1
  388. package/dist/v2/hooks/hidden-child.d.ts +7 -0
  389. package/dist/v2/hooks/hidden-child.d.ts.map +1 -1
  390. package/dist/v2/hooks/model-limit-cache.d.ts +19 -0
  391. package/dist/v2/hooks/model-limit-cache.d.ts.map +1 -0
  392. package/dist/v2/hooks/payload.d.ts.map +1 -1
  393. package/dist/v2/hooks/provider-admission.d.ts +22 -0
  394. package/dist/v2/hooks/provider-admission.d.ts.map +1 -0
  395. package/dist/v2/hooks/rpc-live-state.d.ts +9 -0
  396. package/dist/v2/hooks/rpc-live-state.d.ts.map +1 -0
  397. package/dist/v2/hooks/store.d.ts +38 -2
  398. package/dist/v2/hooks/store.d.ts.map +1 -1
  399. package/dist/v2/hooks/tools.d.ts +8 -0
  400. package/dist/v2/hooks/tools.d.ts.map +1 -0
  401. package/dist/v2/hooks/types.d.ts +59 -0
  402. package/dist/v2/hooks/types.d.ts.map +1 -1
  403. package/dist/v2/hooks/usage-reading.d.ts +42 -0
  404. package/dist/v2/hooks/usage-reading.d.ts.map +1 -0
  405. package/dist/v2/host-service.d.ts +65 -0
  406. package/dist/v2/host-service.d.ts.map +1 -0
  407. package/dist/v2/server.js +142236 -112052
  408. package/dist/v2/store-reader.d.ts +67 -1
  409. package/dist/v2/store-reader.d.ts.map +1 -1
  410. package/dist/v2/tui/events.d.ts +7 -0
  411. package/dist/v2/tui/events.d.ts.map +1 -0
  412. package/dist/v2/tui/index.d.ts +23 -0
  413. package/dist/v2/tui/index.d.ts.map +1 -1
  414. package/dist/v2/tui/sidebar-mount.d.ts +40 -0
  415. package/dist/v2/tui/sidebar-mount.d.ts.map +1 -0
  416. package/dist/v2/tui/status-dialog-mount.d.ts +29 -0
  417. package/dist/v2/tui/status-dialog-mount.d.ts.map +1 -0
  418. package/dist/v2/tui/types.d.ts +74 -6
  419. package/dist/v2/tui/types.d.ts.map +1 -1
  420. package/dist/wrapup-orchestrator-y0bs7t5a.js +18 -0
  421. package/package.json +9 -7
  422. package/src/agents/dreamer.ts +7 -16
  423. package/src/agents/hidden-agent-registrations.ts +10 -22
  424. package/src/agents/magic-context-prompt.test.ts +29 -39
  425. package/src/agents/magic-context-prompt.ts +99 -122
  426. package/src/agents/permissions.test.ts +17 -21
  427. package/src/config/index.ts +8 -3
  428. package/src/config/live-run-config.test.ts +237 -0
  429. package/src/config/live-run-config.ts +80 -0
  430. package/src/config/live-schema-drift.test.ts +67 -0
  431. package/src/config/live-snapshot.test.ts +85 -0
  432. package/src/config/live-snapshot.ts +191 -0
  433. package/src/config/raw-loader.test.ts +1 -0
  434. package/src/config/schema/magic-context.test.ts +13 -5
  435. package/src/config/schema/magic-context.ts +101 -10
  436. package/src/features/magic-context/dreamer/task-registry.ts +137 -13
  437. package/src/shared/assistant-message-extractor.test.ts +21 -0
  438. package/src/shared/assistant-message-extractor.ts +43 -8
  439. package/src/shared/child-session-teardown.test.ts +38 -3
  440. package/src/shared/child-session-teardown.ts +3 -3
  441. package/src/shared/conflict-detector.test.ts +224 -7
  442. package/src/shared/conflict-detector.ts +161 -89
  443. package/src/shared/data-path.ts +6 -6
  444. package/src/shared/hidden-variant-warnings.ts +21 -0
  445. package/src/shared/host-limitations.ts +43 -0
  446. package/src/shared/keep-subagents.ts +6 -6
  447. package/src/shared/model-suggestion-retry.test.ts +86 -0
  448. package/src/shared/model-suggestion-retry.ts +29 -0
  449. package/src/shared/models-dev-cache.ts +5 -0
  450. package/src/shared/opencode-config-dir.ts +80 -7
  451. package/src/shared/opencode-db-path.test.ts +78 -0
  452. package/src/shared/opencode-db-path.ts +49 -2
  453. package/src/shared/opencode-host-generation.test.ts +29 -0
  454. package/src/shared/prompt-surface-a1-golden.md +142 -211
  455. package/src/shared/rpc-server.ts +18 -0
  456. package/src/shared/rpc-types.ts +63 -4
  457. package/src/shared/status-detail-text.test.ts +52 -18
  458. package/src/shared/status-detail-text.ts +1 -90
  459. package/src/shared/status-summary.ts +37 -2
  460. package/src/shared/status-view.test.ts +441 -0
  461. package/src/shared/status-view.ts +707 -0
  462. package/src/shared/tag-transcript.ts +115 -16
  463. package/src/shared/tail-hygiene-status.ts +9 -1
  464. package/src/shared/test-temp-dir.ts +3 -0
  465. package/src/shared/user-facing-codes.test.ts +3 -4
  466. package/src/shared/user-facing-codes.ts +33 -8
  467. package/src/shared/window-geometry.test.ts +23 -5
  468. package/src/shared/window-geometry.ts +13 -3
  469. package/src/tui/data/context-db.ts +50 -15
  470. package/src/tui/dialogs/status-dialog-colors.test.ts +58 -0
  471. package/src/tui/dialogs/status-dialog.tsx +288 -0
  472. package/src/tui/index.tsx +7 -464
  473. package/src/tui/slots/sidebar-content.tsx +21 -5
  474. package/src/tui-compiled/data/context-db.ts +50 -15
  475. package/src/tui-compiled/dialogs/status-dialog.tsx +552 -0
  476. package/src/tui-compiled/index.tsx +43 -1025
  477. package/src/tui-compiled/slots/sidebar-content.tsx +173 -152
  478. package/src/v2/tui/__fixtures__/ga-host-theme.json +160 -0
  479. package/src/v2/tui/events.ts +23 -0
  480. package/src/v2/tui/host-contract.test.ts +57 -8
  481. package/src/v2/tui/index.ts +315 -59
  482. package/src/v2/tui/load-compiled-sidebar.d.mts +59 -0
  483. package/src/v2/tui/load-compiled-sidebar.mjs +24 -0
  484. package/src/v2/tui/load-compiled-status-dialog.d.mts +17 -0
  485. package/src/v2/tui/load-compiled-status-dialog.mjs +16 -0
  486. package/src/v2/tui/sidebar-fallback.test.ts +100 -0
  487. package/src/v2/tui/sidebar-mount.ts +164 -0
  488. package/src/v2/tui/sidebar-text.test.ts +70 -0
  489. package/src/v2/tui/status-dialog-fallback.test.ts +97 -0
  490. package/src/v2/tui/status-dialog-mount.ts +76 -0
  491. package/src/v2/tui/theme-mapping.test.ts +57 -0
  492. package/src/v2/tui/types.ts +69 -4
  493. package/tui.js +1 -0
  494. package/dist/features/magic-context/memory/memory-migration.d.ts +0 -129
  495. package/dist/features/magic-context/memory/memory-migration.d.ts.map +0 -1
  496. package/dist/hooks/magic-context/upgrade-reminder.d.ts +0 -76
  497. package/dist/hooks/magic-context/upgrade-reminder.d.ts.map +0 -1
  498. package/dist/index-4wwr6cz0.js +0 -112
  499. package/dist/index-avwt563y.js +0 -62
  500. package/dist/index-znraa0kv.js +0 -637
  501. package/dist/recomp-orchestrator-0xx1364v.js +0 -19
  502. package/dist/storage-meta-session-z818pn1e.js +0 -20
@@ -191,12 +191,20 @@ describe("MagicContextConfigSchema", () => {
191
191
  expect(result.dreamer?.tasks.retrospective.schedule).toBe("0 5 * * *");
192
192
  });
193
193
 
194
- it("defaults classify-memories and retrospective on daily in dreamer task metadata", () => {
195
- const result = MagicContextConfigSchema.parse({
194
+ it("defaults retrospective to a 30-day source window and accepts an override", () => {
195
+ const defaults = MagicContextConfigSchema.parse({
196
196
  dreamer: { opencode: { model: "x/y" } },
197
197
  });
198
- expect(result.dreamer?.tasks["classify-memories"].schedule).toBe("0 6 * * *");
199
- expect(result.dreamer?.tasks.retrospective.schedule).toBe("0 5 * * *");
198
+ expect(defaults.dreamer?.tasks["classify-memories"].schedule).toBe("0 6 * * *");
199
+ expect(defaults.dreamer?.tasks.retrospective.schedule).toBe("0 5 * * *");
200
+ expect(defaults.dreamer?.tasks.retrospective.recency_days).toBe(30);
201
+
202
+ const overridden = MagicContextConfigSchema.parse({
203
+ dreamer: {
204
+ tasks: { retrospective: { schedule: "0 5 * * *", recency_days: 14 } },
205
+ },
206
+ });
207
+ expect(overridden.dreamer?.tasks.retrospective.recency_days).toBe(14);
200
208
  });
201
209
 
202
210
  it("parses both transform modes", () => {
@@ -449,7 +457,7 @@ describe("MagicContextConfigSchema", () => {
449
457
  migrated_execution: ["model", "fallback_models", "variant", "thinking_level"],
450
458
  },
451
459
  task: {
452
- retained: ["schedule", "promotion_threshold"],
460
+ retained: ["schedule", "promotion_threshold", "recency_days"],
453
461
  migrated_execution: [
454
462
  "model",
455
463
  "fallback_models",
@@ -156,7 +156,7 @@ export const PER_HARNESS_MIGRATION_INVENTORY = {
156
156
  migrated_execution: ["model", "fallback_models", "variant", "thinking_level"],
157
157
  },
158
158
  task: {
159
- retained: ["schedule", "promotion_threshold"],
159
+ retained: ["schedule", "promotion_threshold", "recency_days"],
160
160
  migrated_execution: [
161
161
  "model",
162
162
  "fallback_models",
@@ -512,6 +512,15 @@ const ReviewUserMemoriesTaskConfigSchema = DreamTaskBaseConfigSchema.extend({
512
512
  const PromotePrimersTaskConfigSchema = DreamTaskBaseConfigSchema.extend({
513
513
  promotion_threshold: PrimerPromotionThresholdSchema,
514
514
  });
515
+ const RetrospectiveTaskConfigSchema = DreamTaskBaseConfigSchema.extend({
516
+ recency_days: z
517
+ .number()
518
+ .int()
519
+ .min(1)
520
+ .max(3650)
521
+ .default(30)
522
+ .describe("retrospective: collect source messages from only the most recent N days"),
523
+ });
515
524
  export type DreamTaskConfig = z.infer<typeof DreamTaskConfigSchema>;
516
525
 
517
526
  /** Default schedule per task. Preserves v1 behavior: verify runs nightly;
@@ -566,12 +575,22 @@ export const DreamTasksSchema = z
566
575
  "classify-memories": DreamTaskBaseConfigSchema.default(() =>
567
576
  DreamTaskBaseConfigSchema.parse(defaultTaskConfig("classify-memories")),
568
577
  ),
569
- retrospective: DreamTaskBaseConfigSchema.default(() =>
570
- DreamTaskBaseConfigSchema.parse(defaultTaskConfig("retrospective")),
571
- ),
572
- "maintain-docs": DreamTaskBaseConfigSchema.default(() =>
573
- DreamTaskBaseConfigSchema.parse(defaultTaskConfig("maintain-docs")),
578
+ retrospective: RetrospectiveTaskConfigSchema.default(() =>
579
+ RetrospectiveTaskConfigSchema.parse(defaultTaskConfig("retrospective")),
574
580
  ),
581
+ "maintain-docs": DreamTaskBaseConfigSchema.extend({
582
+ max_tokens: z
583
+ .number()
584
+ .int()
585
+ .positive()
586
+ .default(12000)
587
+ .describe(
588
+ "Maximum combined token count of proposed ARCHITECTURE.md and STRUCTURE.md",
589
+ ),
590
+ }).default(() => ({
591
+ ...DreamTaskBaseConfigSchema.parse(defaultTaskConfig("maintain-docs")),
592
+ max_tokens: 12000,
593
+ })),
575
594
  "evaluate-smart-notes": DreamTaskBaseConfigSchema.default(() =>
576
595
  DreamTaskBaseConfigSchema.parse(defaultTaskConfig("evaluate-smart-notes")),
577
596
  ),
@@ -925,7 +944,7 @@ export interface MagicContextConfig {
925
944
  * Graduated from `experimental.temporal_awareness`; default: true. */
926
945
  temporal_awareness: boolean;
927
946
  /** Debug: when true, keep the child sessions Magic Context spawns for its
928
- * own subagents (historian, dreamer, memory-migration) instead
947
+ * own subagents (historian, dreamer) instead
929
948
  * of deleting them on success. For short-term inspection/data collection;
930
949
  * kept sessions accumulate until manually cleared. Default false. */
931
950
  keep_subagents: boolean;
@@ -1195,7 +1214,9 @@ export const MagicContextConfigSchema = z
1195
1214
  .number()
1196
1215
  .min(60_000)
1197
1216
  .default(DEFAULT_HISTORIAN_TIMEOUT_MS)
1198
- .describe("Timeout for each historian prompt call in milliseconds (default: 600000)"),
1217
+ .describe(
1218
+ "Timeout for each historian prompt call in both TypeScript and Rust transform modes, in milliseconds (default: 600000)",
1219
+ ),
1199
1220
  commit_cluster_trigger: z
1200
1221
  .object({
1201
1222
  enabled: z
@@ -1311,7 +1332,7 @@ export const MagicContextConfigSchema = z
1311
1332
  .boolean()
1312
1333
  .default(false)
1313
1334
  .describe(
1314
- "Debug: keep the child sessions Magic Context spawns for its own subagents (historian, dreamer, memory-migration) instead of deleting them on success. Useful for short-term inspection/data collection — their full transcript (prompt, tool calls, token usage, output) stays in the host session store. Kept sessions accumulate until manually cleared; leave false for normal use. Requires a restart to take effect.",
1335
+ "Debug: keep every settled Magic Context child session instead of deleting it after success: historian, all Dreamer tasks, smart-note evaluation and compilation, user-memory review, and memory migration. Kept Dreamer children can contain memory-pool text and user messages from other sessions of the same operator; their full transcript (prompt, tool calls, token usage, output) stays in the host session store. Kept sessions accumulate until manually cleared; leave false for normal use. Requires a restart to take effect. On OpenCode 2, one hidden session holds many runs; it is kept once any of its runs settled, and only a Dreamer session none of whose runs settled is still deleted.",
1315
1336
  ),
1316
1337
  debug_rpc: z
1317
1338
  .boolean()
@@ -1331,7 +1352,7 @@ export const MagicContextConfigSchema = z
1331
1352
  .boolean()
1332
1353
  .default(true)
1333
1354
  .describe(
1334
- "When false, Magic Context stops managing the context window and keeps its knowledge layer: memory and docs/user-profile/key-files injection through additive m[0]/m[1], raw-message FTS indexing, dreamer, notes, ctx_search, ctx_expand, ctx_memory, and /ctx-embed remain available. MC's historian/compartment preparation, tagging, markers, pruning, folding, drops, strips, splicing, synthetic context-management todos, temporal markers, nudges, and fail-closed blocking stop; ctx_expand remains a knowledge-surface tool. fail_closed_blocking is inert: a transform failure passes the input messages through without blocking or cancelling. This setting does not enable native compaction: OpenCode's compaction.auto / compaction.prune or Pi's equivalent owns the window, or nothing does. MC's compaction.enabled in magic-context.jsonc is distinct from OpenCode's compaction.auto / compaction.prune in opencode.jsonc; they are different files and different owners. On the first turn after disabling, a long session may trigger one native compaction cycle; MC removes only its own marker boundary, leaves native boundaries and stored compartments intact, and does no pre-trimming mitigation. Marker cleanup is lazy per session, so an unresumed session is cleaned when it is next resumed. If compaction is enabled again, run /ctx-wrapup when the historian is runnable to catch up. OpenCode peer verification against v1.18.4 confirms native compaction covers child sessions: subagents receive additive memory/docs injection and no MC reclaim in this mode, so keep subagent tasks small or leave compaction.enabled on for long subagent runs. This is boot-resolved and requires a process restart; project-tier compaction.enabled is stripped so a cloned repository cannot disable the user's setting. The sidebar reports raw usage as Context: <pct>% · native compaction or Context: <pct>% · no active compaction and does not show an MC execute-threshold fill. /ctx-wrapup, /ctx-recomp, /ctx-flush, and /ctx-session-upgrade refuse without context-management side effects; /ctx-embed remains functional. Raw content hidden by a native boundary before Magic Context's first pass is not retroactively indexed.",
1355
+ "When false, Magic Context stops managing the context window and keeps its knowledge layer: memory and docs/user-profile/key-files injection through additive m[0]/m[1], raw-message FTS indexing, dreamer, notes, ctx_search, ctx_expand, ctx_memory, and /ctx-embed remain available. MC's historian/compartment preparation, tagging, markers, pruning, folding, drops, strips, splicing, synthetic context-management todos, temporal markers, nudges, and fail-closed blocking stop; ctx_expand remains a knowledge-surface tool. fail_closed_blocking is inert: a transform failure passes the input messages through without blocking or cancelling. This setting does not enable native compaction: OpenCode's compaction.auto / compaction.prune or Pi's equivalent owns the window, or nothing does. MC's compaction.enabled in magic-context.jsonc is distinct from OpenCode's compaction.auto / compaction.prune in opencode.jsonc; they are different files and different owners. On the first turn after disabling, a long session may trigger one native compaction cycle; MC removes only its own marker boundary, leaves native boundaries and stored compartments intact, and does no pre-trimming mitigation. Marker cleanup is lazy per session, so an unresumed session is cleaned when it is next resumed. If compaction is enabled again, run /ctx-wrapup when the historian is runnable to catch up. OpenCode peer verification against v1.18.4 confirms native compaction covers child sessions: subagents receive additive memory/docs injection and no MC reclaim in this mode, so keep subagent tasks small or leave compaction.enabled on for long subagent runs. This is boot-resolved and requires a process restart; project-tier compaction.enabled is stripped so a cloned repository cannot disable the user's setting. The sidebar reports raw usage as Context: <pct>% · native compaction or Context: <pct>% · no active compaction and does not show an MC execute-threshold fill. /ctx-wrapup, /ctx-recomp, and /ctx-flush refuse without context-management side effects; /ctx-embed remains functional. Raw content hidden by a native boundary before Magic Context's first pass is not retroactively indexed.",
1335
1356
  ),
1336
1357
  })
1337
1358
  .default({ enabled: true })
@@ -1490,6 +1511,76 @@ export const MagicContextConfigSchema = z
1490
1511
  };
1491
1512
  });
1492
1513
 
1514
+ /** Settings whose fresh values can be used by later agent runs without changing rendered prompt bytes. */
1515
+ export const LIVE_RELOAD_CONFIG_PATHS = [
1516
+ "mural.model",
1517
+ "toast_duration_ms",
1518
+ "historian.opencode.model",
1519
+ "historian.opencode.fallback_models",
1520
+ "historian.opencode.variant",
1521
+ "historian.pi.model",
1522
+ "historian.pi.fallback_models",
1523
+ "historian.pi.thinking_level",
1524
+ "historian.omp.model",
1525
+ "historian.omp.fallback_models",
1526
+ "historian.omp.thinking_level",
1527
+ "historian.two_pass",
1528
+ "historian_timeout_ms",
1529
+ "commit_cluster_trigger.enabled",
1530
+ "commit_cluster_trigger.min_clusters",
1531
+ "memory.auto_promote",
1532
+ "dreamer.opencode.model",
1533
+ "dreamer.opencode.fallback_models",
1534
+ "dreamer.opencode.variant",
1535
+ "dreamer.opencode.tasks",
1536
+ "dreamer.pi.model",
1537
+ "dreamer.pi.fallback_models",
1538
+ "dreamer.pi.thinking_level",
1539
+ "dreamer.pi.tasks",
1540
+ "dreamer.omp.model",
1541
+ "dreamer.omp.fallback_models",
1542
+ "dreamer.omp.thinking_level",
1543
+ "dreamer.omp.tasks",
1544
+ "dreamer.tasks.map-memories.schedule",
1545
+ "dreamer.tasks.verify.schedule",
1546
+ "dreamer.tasks.verify-broad.schedule",
1547
+ "dreamer.tasks.curate.schedule",
1548
+ "dreamer.tasks.compress-cues.schedule",
1549
+ "dreamer.tasks.classify-memories.schedule",
1550
+ "dreamer.tasks.retrospective.schedule",
1551
+ "dreamer.tasks.retrospective.recency_days",
1552
+ "dreamer.tasks.maintain-docs.schedule",
1553
+ "dreamer.tasks.evaluate-smart-notes.schedule",
1554
+ "dreamer.tasks.review-user-memories.schedule",
1555
+ "dreamer.tasks.review-user-memories.promotion_threshold",
1556
+ "dreamer.tasks.promote-primers.schedule",
1557
+ "dreamer.tasks.promote-primers.promotion_threshold",
1558
+ "dreamer.tasks.refresh-primers.schedule",
1559
+ "memory.git_commit_indexing.enabled",
1560
+ "memory.git_commit_indexing.since_days",
1561
+ "memory.git_commit_indexing.max_commits",
1562
+ ] as const;
1563
+
1564
+ // Mark the input schema nodes, not their parsed defaults, so the JSON schema,
1565
+ // runtime projection, docs and dashboard all share one policy source.
1566
+ for (const path of LIVE_RELOAD_CONFIG_PATHS) {
1567
+ let node: z.ZodType = MagicContextConfigSchema._def.in as z.ZodType;
1568
+ for (const part of path.split(".")) {
1569
+ while (
1570
+ node instanceof z.ZodOptional ||
1571
+ node instanceof z.ZodDefault ||
1572
+ node instanceof z.ZodNullable
1573
+ ) {
1574
+ node = node.unwrap() as z.ZodType;
1575
+ }
1576
+ if (!(node instanceof z.ZodObject) || !(part in node.shape)) {
1577
+ throw new Error(`Unknown live config path: ${path}`);
1578
+ }
1579
+ node = node.shape[part] as z.ZodType;
1580
+ }
1581
+ z.globalRegistry.add(node, { ...node.meta(), "x-mc-live-reload": true });
1582
+ }
1583
+
1493
1584
  /**
1494
1585
  * Derived default protected_tokens formula:
1495
1586
  * clamp(round(0.05 × usableSoft), min(16000, round(0.08 × usableSoft)), 64000)
@@ -29,25 +29,102 @@ export const CANONICAL_DREAM_TASKS = [
29
29
 
30
30
  export type DreamTaskName = (typeof CANONICAL_DREAM_TASKS)[number];
31
31
 
32
- export const DREAM_TASK_CAPABILITIES: Record<DreamTaskName, { requiresTools: boolean }> = {
32
+ /**
33
+ * How a Dreamer task reaches its result, which is what decides whether a host
34
+ * without a tool loop can run it:
35
+ * - "tool-loop": the task drives an agent that must call tools between model
36
+ * turns (reading files, searching, writing memories through `ctx_memory`).
37
+ * - "single-shot": one or more no-tool completions whose entire answer is the
38
+ * returned text. Any transport that can deliver a prompt and return text runs
39
+ * these, including a hidden completion carrier.
40
+ * - "host-only": no model call at all. The task is database work done in this
41
+ * process, so it needs no completion transport whatsoever.
42
+ */
43
+ export type DreamTaskTransport = "tool-loop" | "single-shot" | "host-only";
44
+
45
+ export interface DreamTaskCapability {
46
+ /** True only when the task cannot finish without a tool loop. */
47
+ requiresTools: boolean;
48
+ transport: DreamTaskTransport;
49
+ /**
50
+ * What the tool loop is needed FOR, as one clause a user can read. Present
51
+ * only on tool-loop tasks, where it becomes the named per-task reason shown
52
+ * when a host refuses the task instead of a single anonymous "filtered" list.
53
+ */
54
+ toolLoopPurpose?: string;
55
+ }
56
+
57
+ export const DREAM_TASK_CAPABILITIES: Record<DreamTaskName, DreamTaskCapability> = {
33
58
  // A single manifest is not a tool-free task: mapping and verification need
34
59
  // read-only tools to inspect backing code before they can change memory state.
35
- "map-memories": { requiresTools: true },
36
- verify: { requiresTools: true },
37
- "verify-broad": { requiresTools: true },
38
- curate: { requiresTools: true },
60
+ "map-memories": {
61
+ requiresTools: true,
62
+ transport: "tool-loop",
63
+ toolLoopPurpose: "needs read-only file tools to locate the code each memory describes",
64
+ },
65
+ verify: {
66
+ requiresTools: true,
67
+ transport: "tool-loop",
68
+ toolLoopPurpose: "needs read-only file tools to re-check each memory against the code",
69
+ },
70
+ "verify-broad": {
71
+ requiresTools: true,
72
+ transport: "tool-loop",
73
+ toolLoopPurpose: "needs read-only file tools to re-check each memory against the code",
74
+ },
75
+ curate: {
76
+ requiresTools: true,
77
+ transport: "tool-loop",
78
+ toolLoopPurpose: "needs the ctx_memory tool to apply its merge and archive decisions",
79
+ },
39
80
  // mural/compress-cues.ts is a zero-tool transform; its child transport
40
81
  // still needs substitution before the generate executor can dispatch it.
41
- "compress-cues": { requiresTools: false },
42
- "classify-memories": { requiresTools: false },
43
- retrospective: { requiresTools: true },
44
- "maintain-docs": { requiresTools: true },
45
- "evaluate-smart-notes": { requiresTools: true },
46
- "review-user-memories": { requiresTools: true },
47
- "promote-primers": { requiresTools: true },
48
- "refresh-primers": { requiresTools: true },
82
+ "compress-cues": { requiresTools: false, transport: "single-shot" },
83
+ "classify-memories": { requiresTools: false, transport: "single-shot" },
84
+ retrospective: {
85
+ requiresTools: true,
86
+ transport: "tool-loop",
87
+ toolLoopPurpose: "needs search tools to investigate the friction it finds in past sessions",
88
+ },
89
+ "maintain-docs": {
90
+ requiresTools: true,
91
+ transport: "tool-loop",
92
+ toolLoopPurpose: "needs read-only file tools to investigate documentation corrections",
93
+ },
94
+ // The evaluator is a no-tool compiler plus a no-tool confirmation prompt; the
95
+ // generated check runs in the local capability sandbox, never as model tools.
96
+ "evaluate-smart-notes": { requiresTools: false, transport: "single-shot" },
97
+ // The reviewer reads candidate text and answers with JSON; the host applies it.
98
+ "review-user-memories": { requiresTools: false, transport: "single-shot" },
99
+ // Promotion clusters existing candidates and writes rows. It calls no model.
100
+ "promote-primers": { requiresTools: false, transport: "host-only" },
101
+ "refresh-primers": {
102
+ requiresTools: true,
103
+ transport: "tool-loop",
104
+ toolLoopPurpose: "needs read-only investigation tools to answer each standing question",
105
+ },
49
106
  };
50
107
 
108
+ /** Tasks a host without a tool loop cannot run, in canonical order. */
109
+ export function toolLoopDreamTasks(): DreamTaskName[] {
110
+ return CANONICAL_DREAM_TASKS.filter((task) => DREAM_TASK_CAPABILITIES[task].requiresTools);
111
+ }
112
+
113
+ /**
114
+ * One line per refused task, naming the task, the stable code and what the tool
115
+ * loop is needed for. A user reading /ctx-dream or /ctx-status output should be
116
+ * able to tell which specific task is unavailable and why, rather than seeing a
117
+ * single anonymous "unsupported" list.
118
+ */
119
+ export function formatUnsupportedDreamTasks(tasks: readonly DreamTaskName[], code: string): string {
120
+ return tasks
121
+ .map((task) => {
122
+ const purpose = DREAM_TASK_CAPABILITIES[task].toolLoopPurpose;
123
+ return `- ${task}: unavailable on this host (${code})${purpose ? ` — ${purpose}` : ""}`;
124
+ })
125
+ .join("\n");
126
+ }
127
+
51
128
  /** Cheap, read-only work counts for one Dreamer task. */
52
129
  export interface DreamTaskBacklog {
53
130
  /** Items selected by the task's current backlog predicate. */
@@ -78,6 +155,53 @@ export function formatDreamTaskBacklogs(
78
155
  .join("\n");
79
156
  }
80
157
 
158
+ /** One dreamer task whose last scheduled run failed. */
159
+ export interface DreamTaskFailureState {
160
+ task: string;
161
+ /** The scheduler's recorded failure text. */
162
+ error: string;
163
+ /** Epoch ms of the last run that SUCCEEDED, or null if none ever has. A failed run
164
+ * never advances `last_run_at`, so this says how long the task has been stuck, not
165
+ * when it last failed — the scheduler keeps no failure timestamp. */
166
+ lastSucceededAt: number | null;
167
+ /** Consecutive retries queued so far; reset once the retry cap pushes the task to
168
+ * its next cron slot, so a long-running failure oscillates rather than climbs. */
169
+ retryCount: number;
170
+ }
171
+
172
+ /** How much of a scheduler failure message a status line carries before eliding. */
173
+ const FAILURE_TEXT_BUDGET = 180;
174
+
175
+ function sinceLabel(lastSucceededAt: number | null, now: number): string {
176
+ if (lastSucceededAt === null || lastSucceededAt <= 0) return "never succeeded";
177
+ const hours = Math.max(0, Math.floor((now - lastSucceededAt) / 3_600_000));
178
+ if (hours < 1) return "last succeeded under an hour ago";
179
+ if (hours < 48) return `last succeeded ${hours}h ago`;
180
+ return `last succeeded ${Math.floor(hours / 24)}d ago`;
181
+ }
182
+
183
+ /**
184
+ * One line per failing task, shared by the status surfaces.
185
+ *
186
+ * The elapsed time is measured from the last SUCCESS, not the last failure: a failed
187
+ * run deliberately does not advance `last_run_at`, so that is the only timestamp the
188
+ * scheduler keeps and "stuck since" is what a reader needs anyway.
189
+ */
190
+ export function formatDreamTaskFailures(
191
+ failures: readonly DreamTaskFailureState[],
192
+ now: number = Date.now(),
193
+ ): string {
194
+ return failures
195
+ .map((failure) => {
196
+ const error =
197
+ failure.error.length > FAILURE_TEXT_BUDGET
198
+ ? `${failure.error.slice(0, FAILURE_TEXT_BUDGET)}…`
199
+ : failure.error;
200
+ return `- ${failure.task}: failing (${sinceLabel(failure.lastSucceededAt, now)}) — ${error}`;
201
+ })
202
+ .join("\n");
203
+ }
204
+
81
205
  /** Process-local progress for the task currently applying a run chunk. */
82
206
  export interface DreamTaskProgress {
83
207
  task: DreamTaskName;
@@ -0,0 +1,21 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import { hasLengthCappedOutput } from "./assistant-message-extractor";
3
+
4
+ describe("hasLengthCappedOutput", () => {
5
+ test("detects OpenCode assistant info.finish", () => {
6
+ expect(hasLengthCappedOutput([{ info: { role: "assistant", finish: "length" } }])).toBe(
7
+ true,
8
+ );
9
+ });
10
+
11
+ test("detects OpenCode step-finish reason", () => {
12
+ expect(
13
+ hasLengthCappedOutput([{ parts: [{ type: "step-finish", reason: "length" }] }]),
14
+ ).toBe(true);
15
+ expect(hasLengthCappedOutput({ type: "text", reason: "length" })).toBe(false);
16
+ });
17
+
18
+ test("detects Pi stopReason length", () => {
19
+ expect(hasLengthCappedOutput({ role: "assistant", stopReason: "length" })).toBe(true);
20
+ });
21
+ });
@@ -3,6 +3,8 @@ type MessageTime = { created?: number };
3
3
  type MessageInfo = {
4
4
  role?: string;
5
5
  time?: MessageTime;
6
+ error?: unknown;
7
+ finish?: string;
6
8
  };
7
9
 
8
10
  type MessagePart = {
@@ -15,6 +17,11 @@ type SessionMessage = {
15
17
  parts?: unknown;
16
18
  };
17
19
 
20
+ export interface AssistantFailure {
21
+ error: unknown;
22
+ finish: string | null;
23
+ }
24
+
18
25
  import { isRecord } from "./record-type-guard";
19
26
 
20
27
  function asSessionMessage(value: unknown): SessionMessage | null {
@@ -33,6 +40,15 @@ function asSessionMessage(value: unknown): SessionMessage | null {
33
40
  : undefined,
34
41
  }
35
42
  : undefined,
43
+ error: info.error,
44
+ finish:
45
+ typeof info.finish === "string"
46
+ ? info.finish
47
+ : typeof info.finish_reason === "string"
48
+ ? info.finish_reason
49
+ : typeof info.finishReason === "string"
50
+ ? info.finishReason
51
+ : undefined,
36
52
  }
37
53
  : undefined,
38
54
  parts,
@@ -54,16 +70,20 @@ function getTextParts(message: SessionMessage): MessagePart[] {
54
70
  .filter((part) => part.type === "text" && Boolean(part.text));
55
71
  }
56
72
 
57
- export function extractLatestAssistantText(messages: unknown): string | null {
73
+ function getLatestAssistantMessage(messages: unknown): SessionMessage | null {
58
74
  if (!Array.isArray(messages) || messages.length === 0) return null;
59
75
 
60
- const assistantMessages = messages
61
- .map(asSessionMessage)
62
- .filter((message): message is SessionMessage => message !== null)
63
- .filter((message) => message.info?.role === "assistant")
64
- .sort((a, b) => getCreatedTime(b) - getCreatedTime(a));
76
+ return (
77
+ messages
78
+ .map(asSessionMessage)
79
+ .filter((message): message is SessionMessage => message !== null)
80
+ .filter((message) => message.info?.role === "assistant")
81
+ .sort((a, b) => getCreatedTime(b) - getCreatedTime(a))[0] ?? null
82
+ );
83
+ }
65
84
 
66
- const latest = assistantMessages[0];
85
+ export function extractLatestAssistantText(messages: unknown): string | null {
86
+ const latest = getLatestAssistantMessage(messages);
67
87
  if (!latest) return null;
68
88
 
69
89
  return (
@@ -73,12 +93,27 @@ export function extractLatestAssistantText(messages: unknown): string | null {
73
93
  );
74
94
  }
75
95
 
96
+ /** Return an error persisted on the newest assistant row, including its settlement reason. */
97
+ export function extractLatestAssistantFailure(messages: unknown): AssistantFailure | null {
98
+ const latest = getLatestAssistantMessage(messages);
99
+ if (!latest || latest.info?.error === undefined || latest.info.error === null) return null;
100
+ return {
101
+ error: latest.info.error,
102
+ finish: latest.info.finish ?? null,
103
+ };
104
+ }
105
+
76
106
  export function hasLengthCappedOutput(value: unknown): boolean {
77
107
  if (Array.isArray(value)) return value.some((item) => hasLengthCappedOutput(item));
78
108
  if (!isRecord(value)) return false;
79
109
 
80
110
  if (value.length_capped === true || value.lengthCapped === true) return true;
81
- const finishReason = value.finish_reason ?? value.finishReason;
111
+ const finishReason =
112
+ value.finish_reason ??
113
+ value.finishReason ??
114
+ value.finish ??
115
+ (value.type === "step-finish" ? value.reason : undefined) ??
116
+ value.stopReason;
82
117
  if (typeof finishReason === "string") {
83
118
  const normalized = finishReason.toLowerCase();
84
119
  if (
@@ -73,7 +73,22 @@ describe("teardownChildSession", () => {
73
73
  expect(fixture.archived).toEqual([]);
74
74
  });
75
75
 
76
- test("keeps a settled ordinary child but deletes a settled privacy child under keep_subagents", async () => {
76
+ test("deletes a settled privacy child when keep_subagents is false", async () => {
77
+ const fixture = teardownFixture();
78
+ await teardownChildSession({
79
+ client: fixture.client,
80
+ sessionId: "settled-private",
81
+ promptSettled: true,
82
+ privacySensitive: true,
83
+ context: "private",
84
+ log: (message) => fixture.messages.push(message),
85
+ });
86
+
87
+ expect(fixture.deleted).toEqual(["settled-private"]);
88
+ expect(fixture.archived).toEqual([]);
89
+ });
90
+
91
+ test("keeps both settled ordinary and privacy children under keep_subagents", async () => {
77
92
  setKeepSubagents(true);
78
93
  const ordinary = teardownFixture();
79
94
  await teardownChildSession({
@@ -89,13 +104,33 @@ describe("teardownChildSession", () => {
89
104
  const privacy = teardownFixture();
90
105
  await teardownChildSession({
91
106
  client: privacy.client,
92
- sessionId: "deleted-private",
107
+ sessionId: "kept-private",
93
108
  promptSettled: true,
94
109
  privacySensitive: true,
95
110
  context: "private",
96
111
  log: (message) => privacy.messages.push(message),
97
112
  });
98
- expect(privacy.deleted).toEqual(["deleted-private"]);
113
+ expect(privacy.deleted).toEqual([]);
114
+ });
115
+
116
+ test("leaves an unsettled privacy child to the sweep regardless of keep_subagents", async () => {
117
+ for (const keepSubagents of [false, true]) {
118
+ setKeepSubagents(keepSubagents);
119
+ const fixture = teardownFixture();
120
+ const sessionId = `unsettled-private-${keepSubagents}`;
121
+ await teardownChildSession({
122
+ client: fixture.client,
123
+ sessionId,
124
+ sessionDirectory: "/repo",
125
+ promptSettled: false,
126
+ privacySensitive: true,
127
+ context: "private",
128
+ log: (message) => fixture.messages.push(message),
129
+ });
130
+
131
+ expect(fixture.deleted).toEqual([]);
132
+ expect(fixture.archived).toEqual([sessionId]);
133
+ }
99
134
  });
100
135
 
101
136
  test("archives an unsettled child before logging, leaves it intact, then the age gate reaps it", async () => {
@@ -35,8 +35,7 @@ export interface TeardownChildSessionArgs {
35
35
  * endpoint, although its generated TypeScript body type does not yet expose time.
36
36
  */
37
37
  export async function teardownChildSession(args: TeardownChildSessionArgs): Promise<void> {
38
- const { client, sessionId, sessionDirectory, promptSettled, privacySensitive, context, log } =
39
- args;
38
+ const { client, sessionId, sessionDirectory, promptSettled, context, log } = args;
40
39
  if (!sessionId) return;
41
40
 
42
41
  const request: ChildSessionRequest = {
@@ -44,7 +43,8 @@ export async function teardownChildSession(args: TeardownChildSessionArgs): Prom
44
43
  ...(sessionDirectory ? { query: { directory: sessionDirectory } } : {}),
45
44
  };
46
45
 
47
- if (promptSettled && (privacySensitive || !shouldKeepSubagents())) {
46
+ // Retention keeps every settled child; only unsettled children go to the age-gated sweep.
47
+ if (promptSettled && !shouldKeepSubagents()) {
48
48
  await client.session.delete(request).catch((error: unknown) => {
49
49
  log(`${context}: session cleanup failed: ${String(error)}`);
50
50
  });