@cortexkit/opencode-magic-context 0.42.6 → 0.43.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 (479) 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/config/index.d.ts +1 -1
  7. package/dist/config/index.d.ts.map +1 -1
  8. package/dist/config/live-run-config.d.ts +12 -0
  9. package/dist/config/live-run-config.d.ts.map +1 -0
  10. package/dist/config/live-snapshot.d.ts +32 -0
  11. package/dist/config/live-snapshot.d.ts.map +1 -0
  12. package/dist/config/schema/magic-context.d.ts +12 -2
  13. package/dist/config/schema/magic-context.d.ts.map +1 -1
  14. package/dist/{conflict-warning-hook-aktepwpz.js → conflict-warning-hook-t2vb0wnx.js} +3 -3
  15. package/dist/{derive-budgets-v1fkhjjr.js → derive-budgets-0sg5vp61.js} +5 -2
  16. package/dist/features/builtin-commands/commands.d.ts +0 -4
  17. package/dist/features/builtin-commands/commands.d.ts.map +1 -1
  18. package/dist/features/magic-context/compaction-marker.d.ts +6 -0
  19. package/dist/features/magic-context/compaction-marker.d.ts.map +1 -1
  20. package/dist/features/magic-context/compartment-chunk-embedding.d.ts +4 -1
  21. package/dist/features/magic-context/compartment-chunk-embedding.d.ts.map +1 -1
  22. package/dist/features/magic-context/compartment-lease.d.ts +8 -0
  23. package/dist/features/magic-context/compartment-lease.d.ts.map +1 -1
  24. package/dist/features/magic-context/compartment-storage.d.ts +21 -0
  25. package/dist/features/magic-context/compartment-storage.d.ts.map +1 -1
  26. package/dist/features/magic-context/context-authority.d.ts +9 -2
  27. package/dist/features/magic-context/context-authority.d.ts.map +1 -1
  28. package/dist/features/magic-context/dreamer/classify.d.ts.map +1 -1
  29. package/dist/features/magic-context/dreamer/docs-proposals.d.ts +23 -0
  30. package/dist/features/magic-context/dreamer/docs-proposals.d.ts.map +1 -0
  31. package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts +5 -1
  32. package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts.map +1 -1
  33. package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts +48 -0
  34. package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts.map +1 -0
  35. package/dist/features/magic-context/dreamer/manual-summary.d.ts +7 -0
  36. package/dist/features/magic-context/dreamer/manual-summary.d.ts.map +1 -0
  37. package/dist/features/magic-context/dreamer/map-memories.d.ts.map +1 -1
  38. package/dist/features/magic-context/dreamer/promote-primers.d.ts +8 -1
  39. package/dist/features/magic-context/dreamer/promote-primers.d.ts.map +1 -1
  40. package/dist/features/magic-context/dreamer/refresh-primers.d.ts.map +1 -1
  41. package/dist/features/magic-context/dreamer/retrospective-orphan-sweep.d.ts +5 -2
  42. package/dist/features/magic-context/dreamer/retrospective-orphan-sweep.d.ts.map +1 -1
  43. package/dist/features/magic-context/dreamer/retrospective-raw-provider.d.ts +22 -13
  44. package/dist/features/magic-context/dreamer/retrospective-raw-provider.d.ts.map +1 -1
  45. package/dist/features/magic-context/dreamer/storage-task-schedule.d.ts +9 -0
  46. package/dist/features/magic-context/dreamer/storage-task-schedule.d.ts.map +1 -1
  47. package/dist/features/magic-context/dreamer/task-config.d.ts.map +1 -1
  48. package/dist/features/magic-context/dreamer/task-executor.d.ts +3 -0
  49. package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
  50. package/dist/features/magic-context/dreamer/task-prompts.d.ts +7 -4
  51. package/dist/features/magic-context/dreamer/task-prompts.d.ts.map +1 -1
  52. package/dist/features/magic-context/dreamer/task-registry.d.ts +53 -2
  53. package/dist/features/magic-context/dreamer/task-registry.d.ts.map +1 -1
  54. package/dist/features/magic-context/dreamer/task-scheduler.d.ts +3 -0
  55. package/dist/features/magic-context/dreamer/task-scheduler.d.ts.map +1 -1
  56. package/dist/features/magic-context/dreamer/tick-failure.d.ts +38 -0
  57. package/dist/features/magic-context/dreamer/tick-failure.d.ts.map +1 -0
  58. package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
  59. package/dist/features/magic-context/git-commits/search-git-commits.d.ts +2 -0
  60. package/dist/features/magic-context/git-commits/search-git-commits.d.ts.map +1 -1
  61. package/dist/features/magic-context/memory/embedding-identity.d.ts +1 -0
  62. package/dist/features/magic-context/memory/embedding-identity.d.ts.map +1 -1
  63. package/dist/features/magic-context/memory/embedding-local.d.ts.map +1 -1
  64. package/dist/features/magic-context/memory/memory-diagnostics.d.ts +6 -0
  65. package/dist/features/magic-context/memory/memory-diagnostics.d.ts.map +1 -0
  66. package/dist/features/magic-context/memory/memory-selection.d.ts +12 -0
  67. package/dist/features/magic-context/memory/memory-selection.d.ts.map +1 -0
  68. package/dist/features/magic-context/memory/memory-visibility.d.ts +46 -0
  69. package/dist/features/magic-context/memory/memory-visibility.d.ts.map +1 -0
  70. package/dist/features/magic-context/memory/mirror-reembed.d.ts +22 -0
  71. package/dist/features/magic-context/memory/mirror-reembed.d.ts.map +1 -0
  72. package/dist/features/magic-context/memory/project-identity.d.ts +9 -0
  73. package/dist/features/magic-context/memory/project-identity.d.ts.map +1 -1
  74. package/dist/features/magic-context/memory/storage-memory-fts.d.ts +6 -2
  75. package/dist/features/magic-context/memory/storage-memory-fts.d.ts.map +1 -1
  76. package/dist/features/magic-context/memory/storage-memory.d.ts.map +1 -1
  77. package/dist/features/magic-context/memory/transformers-remote-host.d.ts +6 -0
  78. package/dist/features/magic-context/memory/transformers-remote-host.d.ts.map +1 -0
  79. package/dist/features/magic-context/memory/transformers-web-entry.d.ts.map +1 -1
  80. package/dist/features/magic-context/message-fts-rowid-map.d.ts +3 -1
  81. package/dist/features/magic-context/message-fts-rowid-map.d.ts.map +1 -1
  82. package/dist/features/magic-context/message-index-async.d.ts +8 -3
  83. package/dist/features/magic-context/message-index-async.d.ts.map +1 -1
  84. package/dist/features/magic-context/message-index.d.ts +7 -1
  85. package/dist/features/magic-context/message-index.d.ts.map +1 -1
  86. package/dist/features/magic-context/message-time-backfill.d.ts +19 -0
  87. package/dist/features/magic-context/message-time-backfill.d.ts.map +1 -0
  88. package/dist/features/magic-context/migrations.d.ts +10 -6
  89. package/dist/features/magic-context/migrations.d.ts.map +1 -1
  90. package/dist/features/magic-context/mural/compress-cues.d.ts.map +1 -1
  91. package/dist/features/magic-context/mural/storage-mural.d.ts +5 -0
  92. package/dist/features/magic-context/mural/storage-mural.d.ts.map +1 -1
  93. package/dist/features/magic-context/opencode2-relabel.d.ts +132 -0
  94. package/dist/features/magic-context/opencode2-relabel.d.ts.map +1 -0
  95. package/dist/features/magic-context/overflow-detection.d.ts +3 -0
  96. package/dist/features/magic-context/overflow-detection.d.ts.map +1 -1
  97. package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
  98. package/dist/features/magic-context/protection-window.d.ts +1 -1
  99. package/dist/features/magic-context/protection-window.d.ts.map +1 -1
  100. package/dist/features/magic-context/search.d.ts +6 -0
  101. package/dist/features/magic-context/search.d.ts.map +1 -1
  102. package/dist/features/magic-context/session-decision-calibration.d.ts +31 -0
  103. package/dist/features/magic-context/session-decision-calibration.d.ts.map +1 -0
  104. package/dist/features/magic-context/shadow-backfill-state.d.ts +1 -1
  105. package/dist/features/magic-context/shadow-backfill-state.d.ts.map +1 -1
  106. package/dist/features/magic-context/smart-notes/compiler.d.ts +5 -1
  107. package/dist/features/magic-context/smart-notes/compiler.d.ts.map +1 -1
  108. package/dist/features/magic-context/storage-clone.d.ts.map +1 -1
  109. package/dist/features/magic-context/storage-db.d.ts +1 -1
  110. package/dist/features/magic-context/storage-db.d.ts.map +1 -1
  111. package/dist/features/magic-context/storage-historian-runs.d.ts +4 -2
  112. package/dist/features/magic-context/storage-historian-runs.d.ts.map +1 -1
  113. package/dist/features/magic-context/storage-meta-persisted.d.ts +16 -2
  114. package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
  115. package/dist/features/magic-context/storage-meta-shared.d.ts +1 -1
  116. package/dist/features/magic-context/storage-meta-shared.d.ts.map +1 -1
  117. package/dist/features/magic-context/storage-meta.d.ts +1 -1
  118. package/dist/features/magic-context/storage-meta.d.ts.map +1 -1
  119. package/dist/features/magic-context/storage-notes.d.ts +1 -0
  120. package/dist/features/magic-context/storage-notes.d.ts.map +1 -1
  121. package/dist/features/magic-context/storage-replay-document.d.ts +2 -0
  122. package/dist/features/magic-context/storage-replay-document.d.ts.map +1 -1
  123. package/dist/features/magic-context/storage-subagent-invocations.d.ts +1 -1
  124. package/dist/features/magic-context/storage-subagent-invocations.d.ts.map +1 -1
  125. package/dist/features/magic-context/storage-tags.d.ts +42 -4
  126. package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
  127. package/dist/features/magic-context/storage.d.ts +2 -2
  128. package/dist/features/magic-context/storage.d.ts.map +1 -1
  129. package/dist/features/magic-context/store-generation-rebase.d.ts +95 -0
  130. package/dist/features/magic-context/store-generation-rebase.d.ts.map +1 -0
  131. package/dist/features/magic-context/subagent-token-capture.d.ts +1 -0
  132. package/dist/features/magic-context/subagent-token-capture.d.ts.map +1 -1
  133. package/dist/features/magic-context/tagger.d.ts +2 -0
  134. package/dist/features/magic-context/tagger.d.ts.map +1 -1
  135. package/dist/features/magic-context/tool-definition-tokens.d.ts +1 -0
  136. package/dist/features/magic-context/tool-definition-tokens.d.ts.map +1 -1
  137. package/dist/features/magic-context/tool-owner-backfill.d.ts.map +1 -1
  138. package/dist/features/magic-context/user-memory/review-user-memories.d.ts +5 -1
  139. package/dist/features/magic-context/user-memory/review-user-memories.d.ts.map +1 -1
  140. package/dist/hooks/magic-context/apply-operations.d.ts +10 -1
  141. package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
  142. package/dist/hooks/magic-context/cache-busting-signals.d.ts +19 -3
  143. package/dist/hooks/magic-context/cache-busting-signals.d.ts.map +1 -1
  144. package/dist/hooks/magic-context/command-handler.d.ts +5 -4
  145. package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
  146. package/dist/hooks/magic-context/compaction-marker-manager.d.ts.map +1 -1
  147. package/dist/hooks/magic-context/compaction-off-transition.d.ts +1 -0
  148. package/dist/hooks/magic-context/compaction-off-transition.d.ts.map +1 -1
  149. package/dist/hooks/magic-context/compartment-prompt.d.ts +1 -1
  150. package/dist/hooks/magic-context/compartment-prompt.d.ts.map +1 -1
  151. package/dist/hooks/magic-context/compartment-render-epoch.d.ts +3 -1
  152. package/dist/hooks/magic-context/compartment-render-epoch.d.ts.map +1 -1
  153. package/dist/hooks/magic-context/compartment-runner-drop-queue.d.ts +1 -1
  154. package/dist/hooks/magic-context/compartment-runner-drop-queue.d.ts.map +1 -1
  155. package/dist/hooks/magic-context/compartment-runner-historian.d.ts +1 -0
  156. package/dist/hooks/magic-context/compartment-runner-historian.d.ts.map +1 -1
  157. package/dist/hooks/magic-context/compartment-runner-incremental.d.ts +8 -1
  158. package/dist/hooks/magic-context/compartment-runner-incremental.d.ts.map +1 -1
  159. package/dist/hooks/magic-context/compartment-runner-recomp.d.ts.map +1 -1
  160. package/dist/hooks/magic-context/compartment-runner-types.d.ts +19 -11
  161. package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -1
  162. package/dist/hooks/magic-context/compartment-runner-validation.d.ts +4 -1
  163. package/dist/hooks/magic-context/compartment-runner-validation.d.ts.map +1 -1
  164. package/dist/hooks/magic-context/compartment-runner.d.ts.map +1 -1
  165. package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
  166. package/dist/hooks/magic-context/decay-render.d.ts +1 -0
  167. package/dist/hooks/magic-context/decay-render.d.ts.map +1 -1
  168. package/dist/hooks/magic-context/decision-calibration.d.ts +24 -0
  169. package/dist/hooks/magic-context/decision-calibration.d.ts.map +1 -0
  170. package/dist/hooks/magic-context/derive-budgets.d.ts +2 -0
  171. package/dist/hooks/magic-context/derive-budgets.d.ts.map +1 -1
  172. package/dist/hooks/magic-context/dropped-input-guard.d.ts +50 -4
  173. package/dist/hooks/magic-context/dropped-input-guard.d.ts.map +1 -1
  174. package/dist/hooks/magic-context/embed-history-runner.d.ts +30 -0
  175. package/dist/hooks/magic-context/embed-history-runner.d.ts.map +1 -0
  176. package/dist/hooks/magic-context/emergency-drop.d.ts +13 -8
  177. package/dist/hooks/magic-context/emergency-drop.d.ts.map +1 -1
  178. package/dist/hooks/magic-context/event-handler.d.ts.map +1 -1
  179. package/dist/hooks/magic-context/event-payloads.d.ts +2 -1
  180. package/dist/hooks/magic-context/event-payloads.d.ts.map +1 -1
  181. package/dist/hooks/magic-context/execute-status.d.ts +2 -1
  182. package/dist/hooks/magic-context/execute-status.d.ts.map +1 -1
  183. package/dist/hooks/magic-context/final-wire-token-estimate.d.ts +12 -4
  184. package/dist/hooks/magic-context/final-wire-token-estimate.d.ts.map +1 -1
  185. package/dist/hooks/magic-context/heuristic-cleanup.d.ts.map +1 -1
  186. package/dist/hooks/magic-context/historian-no-fire-cause.d.ts +5 -0
  187. package/dist/hooks/magic-context/historian-no-fire-cause.d.ts.map +1 -0
  188. package/dist/hooks/magic-context/historian-publish-stage-logger.d.ts +3 -0
  189. package/dist/hooks/magic-context/historian-publish-stage-logger.d.ts.map +1 -0
  190. package/dist/hooks/magic-context/hook-handlers.d.ts +0 -3
  191. package/dist/hooks/magic-context/hook-handlers.d.ts.map +1 -1
  192. package/dist/hooks/magic-context/hook.d.ts +4 -4
  193. package/dist/hooks/magic-context/hook.d.ts.map +1 -1
  194. package/dist/hooks/magic-context/host-served-rows.d.ts +58 -0
  195. package/dist/hooks/magic-context/host-served-rows.d.ts.map +1 -0
  196. package/dist/hooks/magic-context/inject-compartments.d.ts +38 -0
  197. package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
  198. package/dist/hooks/magic-context/legacy-compartments.d.ts +20 -0
  199. package/dist/hooks/magic-context/legacy-compartments.d.ts.map +1 -0
  200. package/dist/hooks/magic-context/live-session-state.d.ts +7 -7
  201. package/dist/hooks/magic-context/m0-token-breakdown.d.ts +6 -0
  202. package/dist/hooks/magic-context/m0-token-breakdown.d.ts.map +1 -1
  203. package/dist/hooks/magic-context/maintenance-authority.d.ts +0 -1
  204. package/dist/hooks/magic-context/maintenance-authority.d.ts.map +1 -1
  205. package/dist/hooks/magic-context/module-state-sync.d.ts +1 -1
  206. package/dist/hooks/magic-context/module-state-sync.d.ts.map +1 -1
  207. package/dist/hooks/magic-context/module-transport.d.ts +1 -1
  208. package/dist/hooks/magic-context/module-transport.d.ts.map +1 -1
  209. package/dist/hooks/magic-context/module-wire.d.ts +42 -0
  210. package/dist/hooks/magic-context/module-wire.d.ts.map +1 -1
  211. package/dist/hooks/magic-context/note-nudger.d.ts.map +1 -1
  212. package/dist/hooks/magic-context/postprocess-read-cache.d.ts +8 -0
  213. package/dist/hooks/magic-context/postprocess-read-cache.d.ts.map +1 -0
  214. package/dist/hooks/magic-context/producer-window-guard.d.ts +16 -0
  215. package/dist/hooks/magic-context/producer-window-guard.d.ts.map +1 -1
  216. package/dist/hooks/magic-context/producer-window-test-support.d.ts +14 -0
  217. package/dist/hooks/magic-context/producer-window-test-support.d.ts.map +1 -0
  218. package/dist/hooks/magic-context/protected-tail-boundary.d.ts +2 -0
  219. package/dist/hooks/magic-context/protected-tail-boundary.d.ts.map +1 -1
  220. package/dist/hooks/magic-context/read-session-chunk.d.ts +45 -10
  221. package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
  222. package/dist/hooks/magic-context/read-session-db.d.ts.map +1 -1
  223. package/dist/hooks/magic-context/read-session-raw.d.ts +4 -0
  224. package/dist/hooks/magic-context/read-session-raw.d.ts.map +1 -1
  225. package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts +6 -0
  226. package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts.map +1 -1
  227. package/dist/hooks/magic-context/recomp-orchestrator.d.ts +17 -39
  228. package/dist/hooks/magic-context/recomp-orchestrator.d.ts.map +1 -1
  229. package/dist/hooks/magic-context/rust-mode-transform.d.ts +24 -3
  230. package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
  231. package/dist/hooks/magic-context/sentinel.d.ts.map +1 -1
  232. package/dist/hooks/magic-context/system-prompt-hash.d.ts +6 -7
  233. package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
  234. package/dist/hooks/magic-context/tag-messages.d.ts +21 -1
  235. package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
  236. package/dist/hooks/magic-context/tail-hygiene-walk.d.ts +63 -0
  237. package/dist/hooks/magic-context/tail-hygiene-walk.d.ts.map +1 -1
  238. package/dist/hooks/magic-context/tokenizer-calibration.d.ts +19 -12
  239. package/dist/hooks/magic-context/tokenizer-calibration.d.ts.map +1 -1
  240. package/dist/hooks/magic-context/tool-drop-target.d.ts +52 -1
  241. package/dist/hooks/magic-context/tool-drop-target.d.ts.map +1 -1
  242. package/dist/hooks/magic-context/tool-sweep-policy.d.ts +50 -0
  243. package/dist/hooks/magic-context/tool-sweep-policy.d.ts.map +1 -0
  244. package/dist/hooks/magic-context/transform-compartment-phase.d.ts +20 -1
  245. package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -1
  246. package/dist/hooks/magic-context/transform-context-state.d.ts +9 -0
  247. package/dist/hooks/magic-context/transform-context-state.d.ts.map +1 -1
  248. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +5 -3
  249. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  250. package/dist/hooks/magic-context/transform.d.ts +37 -4
  251. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  252. package/dist/hooks/magic-context/wrapup-orchestrator.d.ts.map +1 -1
  253. package/dist/{index-f9gem5cr.js → index-8w1skpnm.js} +85 -5
  254. package/dist/index-99sfbrrf.js +170 -0
  255. package/dist/index-9skq8m9y.js +16 -0
  256. package/dist/{index-djp6rwz6.js → index-d0dh7v0f.js} +28130 -30282
  257. package/dist/{index-s61hh7gv.js → index-rpz2me0v.js} +94 -72
  258. package/dist/{index-ngjmj6xx.js → index-rvwvdq59.js} +1 -1
  259. package/dist/index-w2ety11c.js +393 -0
  260. package/dist/index-y5145x8k.js +619 -0
  261. package/dist/index-ygwdyntq.js +5407 -0
  262. package/dist/{index-a9ssj59b.js → index-ykg9sdzz.js} +55 -15
  263. package/dist/index.d.ts.map +1 -1
  264. package/dist/index.js +5749 -3006
  265. package/dist/message-time-backfill-gzjer78y.js +108 -0
  266. package/dist/plugin/dream-timer.d.ts +13 -0
  267. package/dist/plugin/dream-timer.d.ts.map +1 -1
  268. package/dist/plugin/hooks/create-session-hooks.d.ts +5 -2
  269. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  270. package/dist/plugin/memory-id-translation.d.ts +86 -0
  271. package/dist/plugin/memory-id-translation.d.ts.map +1 -1
  272. package/dist/plugin/messages-transform.d.ts.map +1 -1
  273. package/dist/plugin/rpc-handlers.d.ts +10 -0
  274. package/dist/plugin/rpc-handlers.d.ts.map +1 -1
  275. package/dist/plugin/rust-note-backend.d.ts +84 -0
  276. package/dist/plugin/rust-note-backend.d.ts.map +1 -0
  277. package/dist/plugin/tool-registry.d.ts +1 -0
  278. package/dist/plugin/tool-registry.d.ts.map +1 -1
  279. package/dist/read-session-chunk-ec3jkvhg.js +61 -0
  280. package/dist/{recomp-orchestrator-0xx1364v.js → recomp-orchestrator-6akjp11f.js} +8 -8
  281. package/dist/{send-session-notification-jbxknvar.js → send-session-notification-f6gwkesy.js} +2 -2
  282. package/dist/shared/assistant-message-extractor.d.ts +6 -0
  283. package/dist/shared/assistant-message-extractor.d.ts.map +1 -1
  284. package/dist/shared/conflict-detector.d.ts +9 -4
  285. package/dist/shared/conflict-detector.d.ts.map +1 -1
  286. package/dist/shared/hidden-variant-warnings.d.ts +5 -0
  287. package/dist/shared/hidden-variant-warnings.d.ts.map +1 -0
  288. package/dist/shared/host-limitations.d.ts +14 -0
  289. package/dist/shared/host-limitations.d.ts.map +1 -0
  290. package/dist/shared/keep-subagents.d.ts +1 -1
  291. package/dist/shared/keep-subagents.d.ts.map +1 -1
  292. package/dist/shared/model-suggestion-retry.d.ts.map +1 -1
  293. package/dist/shared/models-dev-cache.d.ts +1 -0
  294. package/dist/shared/models-dev-cache.d.ts.map +1 -1
  295. package/dist/shared/opencode-config-dir.d.ts +52 -0
  296. package/dist/shared/opencode-config-dir.d.ts.map +1 -1
  297. package/dist/shared/opencode-db-path.d.ts +15 -0
  298. package/dist/shared/opencode-db-path.d.ts.map +1 -1
  299. package/dist/shared/prompt-surface-runtime.d.ts +5 -5
  300. package/dist/shared/rpc-server.d.ts +10 -0
  301. package/dist/shared/rpc-server.d.ts.map +1 -1
  302. package/dist/shared/rpc-types.d.ts +64 -5
  303. package/dist/shared/rpc-types.d.ts.map +1 -1
  304. package/dist/shared/status-detail-text.d.ts +1 -3
  305. package/dist/shared/status-detail-text.d.ts.map +1 -1
  306. package/dist/shared/status-summary.d.ts +7 -0
  307. package/dist/shared/status-summary.d.ts.map +1 -1
  308. package/dist/shared/status-view.d.ts +229 -0
  309. package/dist/shared/status-view.d.ts.map +1 -0
  310. package/dist/shared/tag-transcript.d.ts.map +1 -1
  311. package/dist/shared/tail-hygiene-status.d.ts +8 -0
  312. package/dist/shared/tail-hygiene-status.d.ts.map +1 -1
  313. package/dist/shared/user-facing-codes.d.ts +32 -7
  314. package/dist/shared/user-facing-codes.d.ts.map +1 -1
  315. package/dist/shared/window-geometry.d.ts +3 -0
  316. package/dist/shared/window-geometry.d.ts.map +1 -1
  317. package/dist/{task-config-cv8k9y8r.js → task-config-ex4nt0q0.js} +1 -1
  318. package/dist/tools/ctx-expand/constants.d.ts +1 -1
  319. package/dist/tools/ctx-expand/constants.d.ts.map +1 -1
  320. package/dist/tools/ctx-expand/render.d.ts.map +1 -1
  321. package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
  322. package/dist/tools/ctx-memory/constants.d.ts +3 -1
  323. package/dist/tools/ctx-memory/constants.d.ts.map +1 -1
  324. package/dist/tools/ctx-memory/tools.d.ts +1 -0
  325. package/dist/tools/ctx-memory/tools.d.ts.map +1 -1
  326. package/dist/tools/ctx-memory/types.d.ts +2 -2
  327. package/dist/tools/ctx-note/constants.d.ts +1 -1
  328. package/dist/tools/ctx-note/constants.d.ts.map +1 -1
  329. package/dist/tools/ctx-note/render.d.ts +88 -0
  330. package/dist/tools/ctx-note/render.d.ts.map +1 -0
  331. package/dist/tools/ctx-note/tools.d.ts.map +1 -1
  332. package/dist/tools/ctx-reduce/constants.d.ts +1 -1
  333. package/dist/tools/ctx-reduce/constants.d.ts.map +1 -1
  334. package/dist/tools/ctx-search/constants.d.ts +1 -1
  335. package/dist/tools/ctx-search/constants.d.ts.map +1 -1
  336. package/dist/tools/ctx-search/date-range.d.ts +9 -0
  337. package/dist/tools/ctx-search/date-range.d.ts.map +1 -0
  338. package/dist/tools/ctx-search/tools.d.ts.map +1 -1
  339. package/dist/tools/ctx-search/types.d.ts +2 -0
  340. package/dist/tools/ctx-search/types.d.ts.map +1 -1
  341. package/dist/tools/light-descriptions.d.ts +5 -5
  342. package/dist/tools/light-descriptions.d.ts.map +1 -1
  343. package/dist/tools/parameter-descriptions.d.ts +75 -0
  344. package/dist/tools/parameter-descriptions.d.ts.map +1 -0
  345. package/dist/transformers-node-wasm.js +1918 -826
  346. package/dist/transformers-web.js +1736 -636
  347. package/dist/{transformers.node-dpmf3wpx.js → transformers.node-3zqr6k1w.js} +4087 -2898
  348. package/dist/tui/data/context-db.d.ts +19 -7
  349. package/dist/tui/data/context-db.d.ts.map +1 -1
  350. package/dist/tui-compiled/data/context-db.d.ts +19 -7
  351. package/dist/tui-compiled/data/context-db.d.ts.map +1 -1
  352. package/dist/v2/fold/host-media.d.ts +36 -0
  353. package/dist/v2/fold/host-media.d.ts.map +1 -0
  354. package/dist/v2/fold/restore.d.ts +21 -1
  355. package/dist/v2/fold/restore.d.ts.map +1 -1
  356. package/dist/v2/hidden-completion.d.ts +45 -1
  357. package/dist/v2/hidden-completion.d.ts.map +1 -1
  358. package/dist/v2/hooks/commands.d.ts +29 -0
  359. package/dist/v2/hooks/commands.d.ts.map +1 -0
  360. package/dist/v2/hooks/context.d.ts +46 -2
  361. package/dist/v2/hooks/context.d.ts.map +1 -1
  362. package/dist/v2/hooks/deleted-session-tombstones.d.ts +10 -0
  363. package/dist/v2/hooks/deleted-session-tombstones.d.ts.map +1 -0
  364. package/dist/v2/hooks/dream-manual.d.ts +43 -0
  365. package/dist/v2/hooks/dream-manual.d.ts.map +1 -0
  366. package/dist/v2/hooks/dream-trigger.d.ts +7 -0
  367. package/dist/v2/hooks/dream-trigger.d.ts.map +1 -1
  368. package/dist/v2/hooks/hidden-child.d.ts +1 -0
  369. package/dist/v2/hooks/hidden-child.d.ts.map +1 -1
  370. package/dist/v2/hooks/model-limit-cache.d.ts +19 -0
  371. package/dist/v2/hooks/model-limit-cache.d.ts.map +1 -0
  372. package/dist/v2/hooks/payload.d.ts.map +1 -1
  373. package/dist/v2/hooks/provider-admission.d.ts +22 -0
  374. package/dist/v2/hooks/provider-admission.d.ts.map +1 -0
  375. package/dist/v2/hooks/rpc-live-state.d.ts +9 -0
  376. package/dist/v2/hooks/rpc-live-state.d.ts.map +1 -0
  377. package/dist/v2/hooks/store.d.ts +38 -2
  378. package/dist/v2/hooks/store.d.ts.map +1 -1
  379. package/dist/v2/hooks/tools.d.ts +8 -0
  380. package/dist/v2/hooks/tools.d.ts.map +1 -0
  381. package/dist/v2/hooks/types.d.ts +58 -0
  382. package/dist/v2/hooks/types.d.ts.map +1 -1
  383. package/dist/v2/hooks/usage-reading.d.ts +42 -0
  384. package/dist/v2/hooks/usage-reading.d.ts.map +1 -0
  385. package/dist/v2/host-service.d.ts +65 -0
  386. package/dist/v2/host-service.d.ts.map +1 -0
  387. package/dist/v2/server.js +141678 -111890
  388. package/dist/v2/store-reader.d.ts +67 -1
  389. package/dist/v2/store-reader.d.ts.map +1 -1
  390. package/dist/v2/tui/events.d.ts +7 -0
  391. package/dist/v2/tui/events.d.ts.map +1 -0
  392. package/dist/v2/tui/index.d.ts +23 -0
  393. package/dist/v2/tui/index.d.ts.map +1 -1
  394. package/dist/v2/tui/sidebar-mount.d.ts +40 -0
  395. package/dist/v2/tui/sidebar-mount.d.ts.map +1 -0
  396. package/dist/v2/tui/status-dialog-mount.d.ts +29 -0
  397. package/dist/v2/tui/status-dialog-mount.d.ts.map +1 -0
  398. package/dist/v2/tui/types.d.ts +74 -6
  399. package/dist/v2/tui/types.d.ts.map +1 -1
  400. package/dist/wrapup-orchestrator-5akc87gr.js +16 -0
  401. package/package.json +8 -7
  402. package/src/agents/dreamer.ts +7 -16
  403. package/src/agents/hidden-agent-registrations.ts +10 -22
  404. package/src/agents/magic-context-prompt.test.ts +29 -39
  405. package/src/agents/magic-context-prompt.ts +99 -122
  406. package/src/agents/permissions.test.ts +17 -21
  407. package/src/config/index.ts +8 -3
  408. package/src/config/live-run-config.test.ts +237 -0
  409. package/src/config/live-run-config.ts +80 -0
  410. package/src/config/live-schema-drift.test.ts +67 -0
  411. package/src/config/live-snapshot.test.ts +85 -0
  412. package/src/config/live-snapshot.ts +191 -0
  413. package/src/config/raw-loader.test.ts +1 -0
  414. package/src/config/schema/magic-context.test.ts +13 -5
  415. package/src/config/schema/magic-context.ts +101 -10
  416. package/src/features/magic-context/dreamer/task-registry.ts +137 -13
  417. package/src/shared/assistant-message-extractor.test.ts +21 -0
  418. package/src/shared/assistant-message-extractor.ts +43 -8
  419. package/src/shared/child-session-teardown.test.ts +38 -3
  420. package/src/shared/child-session-teardown.ts +3 -3
  421. package/src/shared/conflict-detector.test.ts +224 -7
  422. package/src/shared/conflict-detector.ts +161 -89
  423. package/src/shared/hidden-variant-warnings.ts +21 -0
  424. package/src/shared/host-limitations.ts +43 -0
  425. package/src/shared/keep-subagents.ts +6 -6
  426. package/src/shared/model-suggestion-retry.test.ts +43 -0
  427. package/src/shared/model-suggestion-retry.ts +12 -0
  428. package/src/shared/models-dev-cache.ts +5 -0
  429. package/src/shared/opencode-config-dir.ts +80 -7
  430. package/src/shared/opencode-db-path.test.ts +78 -0
  431. package/src/shared/opencode-db-path.ts +49 -2
  432. package/src/shared/opencode-host-generation.test.ts +29 -0
  433. package/src/shared/prompt-surface-a1-golden.md +142 -211
  434. package/src/shared/rpc-server.ts +18 -0
  435. package/src/shared/rpc-types.ts +63 -4
  436. package/src/shared/status-detail-text.test.ts +52 -18
  437. package/src/shared/status-detail-text.ts +1 -90
  438. package/src/shared/status-summary.ts +37 -2
  439. package/src/shared/status-view.test.ts +441 -0
  440. package/src/shared/status-view.ts +707 -0
  441. package/src/shared/tag-transcript.ts +115 -16
  442. package/src/shared/tail-hygiene-status.ts +9 -1
  443. package/src/shared/user-facing-codes.test.ts +3 -4
  444. package/src/shared/user-facing-codes.ts +33 -8
  445. package/src/shared/window-geometry.test.ts +23 -5
  446. package/src/shared/window-geometry.ts +13 -3
  447. package/src/tui/data/context-db.ts +50 -15
  448. package/src/tui/dialogs/status-dialog-colors.test.ts +58 -0
  449. package/src/tui/dialogs/status-dialog.tsx +288 -0
  450. package/src/tui/index.tsx +7 -464
  451. package/src/tui/slots/sidebar-content.tsx +21 -5
  452. package/src/tui-compiled/data/context-db.ts +50 -15
  453. package/src/tui-compiled/dialogs/status-dialog.tsx +552 -0
  454. package/src/tui-compiled/index.tsx +43 -1025
  455. package/src/tui-compiled/slots/sidebar-content.tsx +173 -152
  456. package/src/v2/tui/__fixtures__/ga-host-theme.json +160 -0
  457. package/src/v2/tui/events.ts +23 -0
  458. package/src/v2/tui/host-contract.test.ts +57 -8
  459. package/src/v2/tui/index.ts +315 -59
  460. package/src/v2/tui/load-compiled-sidebar.d.mts +59 -0
  461. package/src/v2/tui/load-compiled-sidebar.mjs +24 -0
  462. package/src/v2/tui/load-compiled-status-dialog.d.mts +17 -0
  463. package/src/v2/tui/load-compiled-status-dialog.mjs +16 -0
  464. package/src/v2/tui/sidebar-fallback.test.ts +100 -0
  465. package/src/v2/tui/sidebar-mount.ts +164 -0
  466. package/src/v2/tui/sidebar-text.test.ts +70 -0
  467. package/src/v2/tui/status-dialog-fallback.test.ts +97 -0
  468. package/src/v2/tui/status-dialog-mount.ts +76 -0
  469. package/src/v2/tui/theme-mapping.test.ts +57 -0
  470. package/src/v2/tui/types.ts +69 -4
  471. package/tui.js +1 -0
  472. package/dist/features/magic-context/memory/memory-migration.d.ts +0 -129
  473. package/dist/features/magic-context/memory/memory-migration.d.ts.map +0 -1
  474. package/dist/hooks/magic-context/upgrade-reminder.d.ts +0 -76
  475. package/dist/hooks/magic-context/upgrade-reminder.d.ts.map +0 -1
  476. package/dist/index-4wwr6cz0.js +0 -112
  477. package/dist/index-avwt563y.js +0 -62
  478. package/dist/index-znraa0kv.js +0 -637
  479. package/dist/storage-meta-session-z818pn1e.js +0 -20
@@ -3,7 +3,7 @@ import {
3
3
  } from "./index-qp20p2py.js";
4
4
  import {
5
5
  sendStatusNotification2
6
- } from "./index-ngjmj6xx.js";
6
+ } from "./index-rvwvdq59.js";
7
7
  import {
8
8
  readJsoncFile
9
9
  } from "./index-sd3egckz.js";
@@ -20,28 +20,25 @@ import { join as join2 } from "node:path";
20
20
  // src/shared/opencode-config-dir.ts
21
21
  import { homedir } from "node:os";
22
22
  import { join, resolve } from "node:path";
23
- function getCliConfigDir() {
24
- const envConfigDir = process.env.OPENCODE_CONFIG_DIR?.trim();
25
- if (envConfigDir) {
26
- return resolve(envConfigDir);
27
- }
23
+ function resolveHomeDir() {
24
+ return process.env.HOME?.trim() || homedir();
25
+ }
26
+ function getOpenCodeGlobalConfigDir() {
28
27
  if (process.platform === "win32") {
29
- return join(homedir(), ".config", "opencode");
28
+ return join(resolveHomeDir(), ".config", "opencode");
30
29
  }
31
- return join(process.env.XDG_CONFIG_HOME || join(homedir(), ".config"), "opencode");
30
+ return join(process.env.XDG_CONFIG_HOME || join(resolveHomeDir(), ".config"), "opencode");
32
31
  }
33
- function getOpenCodeConfigDir(_options) {
34
- return getCliConfigDir();
32
+ function getEnvConfigDir() {
33
+ const envConfigDir = process.env.OPENCODE_CONFIG_DIR?.trim();
34
+ return envConfigDir ? resolve(envConfigDir) : undefined;
35
35
  }
36
- function getOpenCodeConfigPaths(options) {
37
- const configDir = getOpenCodeConfigDir(options);
38
- return {
39
- configDir,
40
- configJson: join(configDir, "opencode.json"),
41
- configJsonc: join(configDir, "opencode.jsonc"),
42
- packageJson: join(configDir, "package.json"),
43
- omoConfig: join(configDir, "magic-context.jsonc")
44
- };
36
+ function getOpenCodeConfigDirs() {
37
+ const dirs = [getOpenCodeGlobalConfigDir(), join(resolveHomeDir(), ".opencode")];
38
+ const envDir = getEnvConfigDir();
39
+ if (envDir)
40
+ dirs.push(envDir);
41
+ return [...new Set(dirs)];
45
42
  }
46
43
 
47
44
  // src/shared/conflict-detector.ts
@@ -130,11 +127,11 @@ async function resolveCompactionForBoot(client, timeoutMs = 2000, hostGeneration
130
127
  ...buffer === undefined ? {} : { buffer }
131
128
  };
132
129
  }
133
- if (typeof compaction?.auto !== "boolean" || typeof compaction?.prune !== "boolean") {
134
- log(`[magic-context] conflict-detector: resolved config carried no explicit compaction block (${JSON.stringify(compaction) ?? "absent"}); falling back to file-based detection`);
130
+ if (typeof compaction?.auto !== "boolean") {
131
+ log(`[magic-context] conflict-detector: resolved config carried no explicit compaction.auto (${JSON.stringify(compaction) ?? "absent"}); falling back to file-based detection`);
135
132
  return null;
136
133
  }
137
- return { auto: compaction.auto, prune: compaction.prune };
134
+ return { auto: compaction.auto, prune: compaction.prune === true };
138
135
  } catch {
139
136
  return null;
140
137
  } finally {
@@ -146,47 +143,69 @@ function checkCompaction(directory, hostGeneration) {
146
143
  if (process.env.OPENCODE_DISABLE_AUTOCOMPACT) {
147
144
  return { auto: false, prune: false };
148
145
  }
149
- const projectResult = readProjectCompaction(directory, hostGeneration);
150
- if (projectResult.resolved)
151
- return projectResult;
152
- const userResult = readUserCompaction(hostGeneration);
153
- if (userResult.resolved)
154
- return userResult;
155
- return { auto: true, prune: false };
156
- }
157
- function readProjectCompaction(directory, hostGeneration) {
158
- const dotOcJsonc = join2(directory, ".opencode", "opencode.jsonc");
159
- const dotOcJson = join2(directory, ".opencode", "opencode.json");
160
- const dotOcConfig = readJsoncFile(dotOcJsonc) ?? readJsoncFile(dotOcJson);
161
- if (dotOcConfig?.compaction) {
162
- const c = dotOcConfig.compaction;
163
- if (c.auto !== undefined || hostGeneration === "v1" && c.prune !== undefined || hostGeneration === "v2" && (c.keep?.tokens !== undefined || c.buffer !== undefined)) {
164
- return resolvedCompactionBlock(c, hostGeneration);
165
- }
146
+ const merged = readCompactionFromConfigFiles(directory, hostGeneration);
147
+ if (isRelevantCompactionBlock(merged, hostGeneration)) {
148
+ return resolvedCompactionBlock(merged, hostGeneration);
166
149
  }
167
- const rootJsonc = join2(directory, "opencode.jsonc");
168
- const rootJson = join2(directory, "opencode.json");
169
- const rootConfig = readJsoncFile(rootJsonc) ?? readJsoncFile(rootJson);
170
- if (rootConfig?.compaction) {
171
- const c = rootConfig.compaction;
172
- if (c.auto !== undefined || hostGeneration === "v1" && c.prune !== undefined || hostGeneration === "v2" && (c.keep?.tokens !== undefined || c.buffer !== undefined)) {
173
- return resolvedCompactionBlock(c, hostGeneration);
174
- }
175
- }
176
- return { auto: false, prune: false, resolved: false };
150
+ log("[magic-context] conflict-detector: no OpenCode config file carried an explicit compaction block; treating native compaction as inconclusive (not disabling the plugin)");
151
+ return { auto: false, prune: false };
177
152
  }
178
- function readUserCompaction(hostGeneration) {
179
- try {
180
- const paths = getOpenCodeConfigPaths({ binary: "opencode" });
181
- const config = readJsoncFile(paths.configJsonc) ?? readJsoncFile(paths.configJson);
182
- if (config?.compaction) {
183
- const c = config.compaction;
184
- if (c.auto !== undefined || hostGeneration === "v1" && c.prune !== undefined || hostGeneration === "v2" && (c.keep?.tokens !== undefined || c.buffer !== undefined)) {
185
- return resolvedCompactionBlock(c, hostGeneration);
186
- }
187
- }
188
- } catch {}
189
- return { auto: false, prune: false, resolved: false };
153
+ function openCodeConfigFileChain(directory, hostGeneration) {
154
+ const globalDir = getOpenCodeGlobalConfigDir();
155
+ const wellKnown = [
156
+ join2(globalDir, "config.json"),
157
+ join2(globalDir, "opencode.json"),
158
+ join2(globalDir, "opencode.jsonc")
159
+ ];
160
+ const globalSupplementary = getOpenCodeConfigDirs().filter((dir) => dir !== globalDir).flatMap((dir) => [join2(dir, "opencode.json"), join2(dir, "opencode.jsonc")]);
161
+ const explicitConfig = process.env.OPENCODE_CONFIG?.trim();
162
+ const explicit = explicitConfig ? [explicitConfig] : [];
163
+ const direct = [join2(directory, "opencode.json"), join2(directory, "opencode.jsonc")];
164
+ const projectSupplementary = [
165
+ join2(directory, ".opencode", "opencode.json"),
166
+ join2(directory, ".opencode", "opencode.jsonc")
167
+ ];
168
+ const files = hostGeneration === "v2" ? [
169
+ ...wellKnown,
170
+ ...globalSupplementary,
171
+ ...explicit,
172
+ ...direct,
173
+ ...projectSupplementary
174
+ ] : [
175
+ ...wellKnown,
176
+ ...explicit,
177
+ ...direct,
178
+ ...projectSupplementary,
179
+ ...globalSupplementary
180
+ ];
181
+ return [...new Set(files)];
182
+ }
183
+ function readCompactionFromConfigFiles(directory, hostGeneration) {
184
+ const merged = {};
185
+ for (const filePath of openCodeConfigFileChain(directory, hostGeneration)) {
186
+ let block;
187
+ try {
188
+ block = readJsoncFile(filePath)?.compaction;
189
+ } catch {}
190
+ if (!block || typeof block !== "object")
191
+ continue;
192
+ if (block.auto !== undefined)
193
+ merged.auto = block.auto;
194
+ if (block.prune !== undefined)
195
+ merged.prune = block.prune;
196
+ if (block.buffer !== undefined)
197
+ merged.buffer = block.buffer;
198
+ if (block.keep !== undefined)
199
+ merged.keep = { ...merged.keep, ...block.keep };
200
+ }
201
+ return merged;
202
+ }
203
+ function isRelevantCompactionBlock(block, hostGeneration) {
204
+ if (block.auto !== undefined)
205
+ return true;
206
+ if (hostGeneration === "v1")
207
+ return block.prune !== undefined;
208
+ return block.keep?.tokens !== undefined || block.buffer !== undefined;
190
209
  }
191
210
  function resolvedCompactionBlock(block, hostGeneration) {
192
211
  if (hostGeneration === "v2") {
@@ -241,10 +260,13 @@ function collectPluginEntries(directory) {
241
260
  pushFrom(config?.plugin);
242
261
  }
243
262
  try {
244
- const paths = getOpenCodeConfigPaths({ binary: "opencode" });
245
- for (const configPath of [paths.configJsonc, paths.configJson]) {
246
- const config = readJsoncFile(configPath);
247
- pushFrom(config?.plugin);
263
+ const globalDir = getOpenCodeGlobalConfigDir();
264
+ for (const dir of getOpenCodeConfigDirs()) {
265
+ const names = dir === globalDir ? ["config.json", "opencode.json", "opencode.jsonc"] : ["opencode.json", "opencode.jsonc"];
266
+ for (const name of names) {
267
+ const config = readJsoncFile(join2(dir, name));
268
+ pushFrom(config?.plugin);
269
+ }
248
270
  }
249
271
  } catch {}
250
272
  return plugins;
@@ -275,13 +297,13 @@ function readOmoDisabledHooks(directory) {
275
297
  "oh-my-openagent.json"
276
298
  ];
277
299
  try {
278
- const paths = getOpenCodeConfigPaths({ binary: "opencode" });
279
- for (const name of configNames) {
280
- const configPath = join2(paths.configDir, name);
281
- const config = readJsoncFile(configPath);
282
- if (config?.disabled_hooks) {
283
- for (const hook of config.disabled_hooks) {
284
- disabled.add(hook);
300
+ for (const dir of getOpenCodeConfigDirs()) {
301
+ for (const name of configNames) {
302
+ const config = readJsoncFile(join2(dir, name));
303
+ if (config?.disabled_hooks) {
304
+ for (const hook of config.disabled_hooks) {
305
+ disabled.add(hook);
306
+ }
285
307
  }
286
308
  }
287
309
  }
@@ -3,7 +3,7 @@ import {
3
3
  } from "./index-qp20p2py.js";
4
4
  import {
5
5
  shouldHoldIgnoredNotification
6
- } from "./index-a9ssj59b.js";
6
+ } from "./index-ykg9sdzz.js";
7
7
 
8
8
  // src/shared/error-message.ts
9
9
  function getErrorMessage(error) {
@@ -0,0 +1,393 @@
1
+ import {
2
+ sessionLog
3
+ } from "./index-qp20p2py.js";
4
+ import {
5
+ COMPARTMENT_LEASE_RENEWAL_MS,
6
+ acquireCompartmentLease,
7
+ renewCompartmentLease,
8
+ releaseCompartmentLeaseBestEffort,
9
+ getCompartments,
10
+ getLastCompartmentEndMessage,
11
+ getWrapupInProgressState,
12
+ acquireWrapupInProgress,
13
+ updateWrapupInProgress,
14
+ releaseWrapupInProgress,
15
+ getHistorianFailureState,
16
+ clearEmergencyRecovery,
17
+ describeBoundaryDiagnostics,
18
+ resolveWrapupProtectedTailBoundary,
19
+ hasRunnableCompartmentWindow,
20
+ runCompartmentAgent,
21
+ getActiveCompartmentRun,
22
+ markActiveCompartmentRunPublished,
23
+ registerActiveCompartmentRun,
24
+ setRecompStarting2,
25
+ setRecompTerminal2
26
+ } from "./index-d0dh7v0f.js";
27
+ import {
28
+ pushNotification2
29
+ } from "./index-jdxxq8cz.js";
30
+ import {
31
+ sendStatusNotification2
32
+ } from "./index-rvwvdq59.js";
33
+
34
+ // src/hooks/magic-context/wrapup-orchestrator.ts
35
+ import * as crypto from "node:crypto";
36
+ var WAIT_FOR_LEASE_MS = 1000;
37
+ var MAX_WRAPUP_LEASE_WAIT_MS = 10 * 60 * 1000;
38
+ function sleep(ms) {
39
+ return new Promise((resolve) => setTimeout(resolve, ms));
40
+ }
41
+ function plural(value, word) {
42
+ return `${value} ${word}${value === 1 ? "" : "s"}`;
43
+ }
44
+ function resolveWrapupLeaseWaitTimeout(ctx) {
45
+ const configured = ctx.wrapupLeaseWaitTimeoutMs ?? MAX_WRAPUP_LEASE_WAIT_MS;
46
+ return Number.isFinite(configured) && configured >= 0 ? configured : MAX_WRAPUP_LEASE_WAIT_MS;
47
+ }
48
+ async function waitForActiveRunWithin(promise, timeoutMs) {
49
+ if (timeoutMs <= 0)
50
+ return "timeout";
51
+ return Promise.race([
52
+ promise.then(() => "settled", () => "settled"),
53
+ sleep(timeoutMs).then(() => "timeout")
54
+ ]);
55
+ }
56
+ function formatAlreadyRunningMessage(state) {
57
+ if (!state)
58
+ return "/ctx-wrapup is already running for this session.";
59
+ const chunk = state.expectedChunks > 0 ? ` chunk ${state.chunkIndex}/${state.expectedChunks}` : "";
60
+ const through = state.lastCompartmentEnd > 0 ? ` through message ${state.lastCompartmentEnd}` : "";
61
+ return `/ctx-wrapup is already running for this session${chunk}${through}. Wait for it to finish, then run /ctx-wrapup again if more history remains.`;
62
+ }
63
+ function appendFlushHint(ctx, sessionId, message) {
64
+ if (ctx.hasPendingNaturalBust?.(sessionId))
65
+ return message;
66
+ return `${message} If you want it applied on the very next message, run /ctx-flush first.`;
67
+ }
68
+ function buildPlan(ctx, sessionId, messagesToKeep, anchorRawMessageCount) {
69
+ return resolveWrapupProtectedTailBoundary({
70
+ db: ctx.db,
71
+ sessionId,
72
+ mode: "manual-wrapup",
73
+ contextLimit: ctx.contextLimit,
74
+ executeThresholdPercentage: ctx.executeThresholdPercentage,
75
+ usage: null,
76
+ usageSource: "manual-none",
77
+ providerShapeVersion: "opencode-v1",
78
+ cacheNamespace: `opencode:${sessionId}`,
79
+ messagesToKeep,
80
+ anchorRawMessageCount
81
+ });
82
+ }
83
+ function emitWrapupProgress(ctx, sessionId, progress) {
84
+ const current = ctx.liveSessionState.recompProgressBySession.get(sessionId);
85
+ ctx.liveSessionState.recompProgressBySession.set(sessionId, {
86
+ sessionId,
87
+ kind: "wrapup",
88
+ phase: "recomp",
89
+ processedMessages: progress.processedMessages ?? current?.processedMessages ?? 0,
90
+ totalMessages: progress.totalMessages ?? current?.totalMessages ?? 0,
91
+ passCount: progress.passCount ?? current?.passCount ?? 0,
92
+ compartmentsCreated: progress.compartmentsCreated ?? current?.compartmentsCreated ?? 0,
93
+ startedAt: current?.startedAt ?? Date.now(),
94
+ updatedAt: Date.now(),
95
+ note: progress.note
96
+ });
97
+ }
98
+ async function waitForExistingIncrementalRun(sessionId, maxWaitMs) {
99
+ const active = getActiveCompartmentRun(sessionId);
100
+ if (!active)
101
+ return "ok";
102
+ if (active.kind === "recomp" || active.kind === "wrapup")
103
+ return "busy";
104
+ const outcome = await waitForActiveRunWithin(active.promise, maxWaitMs);
105
+ if (outcome === "timeout")
106
+ return "timeout";
107
+ return "ok";
108
+ }
109
+ async function acquireCompartmentLeaseForWrapup(ctx, sessionId, renewWrapupMarker) {
110
+ const holderId = crypto.randomUUID();
111
+ const waitStartedAt = Date.now();
112
+ const maxWaitMs = resolveWrapupLeaseWaitTimeout(ctx);
113
+ const remainingMs = () => Math.max(0, waitStartedAt + maxWaitMs - Date.now());
114
+ for (;; ) {
115
+ if (remainingMs() <= 0) {
116
+ sessionLog(sessionId, "wrapup: timed out waiting for the compartment-state lease");
117
+ return { ok: false, reason: "timeout" };
118
+ }
119
+ const active = getActiveCompartmentRun(sessionId);
120
+ if (active?.kind === "recomp" || active?.kind === "wrapup") {
121
+ return { ok: false, reason: "busy" };
122
+ }
123
+ if (active) {
124
+ emitWrapupProgress(ctx, sessionId, { note: "Waiting for the active historian run…" });
125
+ const outcome = await waitForActiveRunWithin(active.promise, remainingMs());
126
+ if (outcome === "timeout") {
127
+ sessionLog(sessionId, "wrapup: timed out waiting for the active historian run");
128
+ return { ok: false, reason: "timeout" };
129
+ }
130
+ continue;
131
+ }
132
+ const lease = acquireCompartmentLease(ctx.db, sessionId, holderId);
133
+ if (lease)
134
+ return { ok: true, holderId };
135
+ emitWrapupProgress(ctx, sessionId, { note: "Waiting for the compartment-state lease…" });
136
+ if (!renewWrapupMarker({}))
137
+ return { ok: false, reason: "ownership_lost" };
138
+ await sleep(Math.min(WAIT_FOR_LEASE_MS, remainingMs()));
139
+ }
140
+ }
141
+ async function runOneWrapupIteration(args) {
142
+ const { ctx, sessionId, plan, messagesToKeep, anchorRawMessageCount } = args;
143
+ const acquired = await acquireCompartmentLeaseForWrapup(ctx, sessionId, args.renewWrapupMarker);
144
+ if (!acquired.ok)
145
+ return { ran: false, reason: acquired.reason };
146
+ const leaseHolderId = acquired.holderId;
147
+ const renewal = setInterval(() => {
148
+ try {
149
+ if (!renewCompartmentLease(ctx.db, sessionId, leaseHolderId)) {
150
+ sessionLog(sessionId, "wrapup: compartment lease renewal failed");
151
+ }
152
+ } catch (err) {
153
+ sessionLog(sessionId, `wrapup: compartment lease renewal threw; continuing (${err instanceof Error ? err.message : String(err)})`);
154
+ }
155
+ }, COMPARTMENT_LEASE_RENEWAL_MS);
156
+ const runCompartmentAgentForWrapup = ctx.runCompartmentAgentForWrapup ?? runCompartmentAgent;
157
+ const runnerPromise = runCompartmentAgentForWrapup({
158
+ client: ctx.client,
159
+ hiddenCompletionExecutor: ctx.hiddenCompletionExecutor,
160
+ db: ctx.db,
161
+ sessionId,
162
+ historianChunkTokens: ctx.historianChunkTokens,
163
+ historianTimeoutMs: ctx.historianTimeoutMs,
164
+ boundarySnapshot: plan.snapshot,
165
+ currentContextLimit: ctx.contextLimit,
166
+ directory: ctx.directory,
167
+ model: ctx.historianModel,
168
+ fallbackModels: ctx.fallbackModels,
169
+ fallbackModelId: ctx.fallbackModelId,
170
+ language: ctx.language,
171
+ historianTwoPass: ctx.historianTwoPass,
172
+ memoryEnabled: ctx.memoryEnabled,
173
+ autoPromote: ctx.autoPromote,
174
+ experimentalUserMemories: ctx.userMemoriesEnabled,
175
+ ensureProjectRegistered: ctx.ensureProjectRegistered,
176
+ getNotificationParams: () => ctx.getNotificationParams(sessionId),
177
+ preserveInjectionCacheUntilConsumed: true,
178
+ compartmentLeaseHolderId: leaseHolderId,
179
+ forceDrainQuota: true,
180
+ forceKeepLastCompartment: plan.snapshot.eligibleEndOrdinal >= plan.targetEligibleEndOrdinal,
181
+ refreshBoundarySnapshot: () => buildPlan(ctx, sessionId, messagesToKeep, anchorRawMessageCount).snapshot,
182
+ onCompartmentStatePublished: (sid) => {
183
+ markActiveCompartmentRunPublished(sid);
184
+ ctx.liveSessionState.deferredHistoryRefreshSessions.add(sid);
185
+ ctx.liveSessionState.deferredMaterializationSessions.add(sid);
186
+ },
187
+ onDeferredMarkerPending: (sid) => {
188
+ ctx.liveSessionState.deferredHistoryRefreshSessions.add(sid);
189
+ }
190
+ });
191
+ registerActiveCompartmentRun(sessionId, runnerPromise, "wrapup");
192
+ try {
193
+ await runnerPromise;
194
+ return { ran: true };
195
+ } finally {
196
+ clearInterval(renewal);
197
+ releaseCompartmentLeaseBestEffort(ctx.db, sessionId, leaseHolderId, sessionLog);
198
+ }
199
+ }
200
+ async function runManagedWrapup2(ctx, sessionId, options) {
201
+ const messagesToKeep = Math.max(1, Math.floor(options.messagesToKeep));
202
+ setRecompStarting2(ctx.liveSessionState, sessionId, "Estimating wrapup…", "wrapup");
203
+ const existingWrapup = getWrapupInProgressState(ctx.db, sessionId);
204
+ if (existingWrapup) {
205
+ const message = formatAlreadyRunningMessage(existingWrapup);
206
+ setRecompTerminal2(ctx.liveSessionState, sessionId, "skipped", message);
207
+ return `## Magic Wrapup — Skipped
208
+
209
+ ${message}`;
210
+ }
211
+ const initialPlan = buildPlan(ctx, sessionId, messagesToKeep);
212
+ if (initialPlan.rawMessagesAboveLastCompartment <= messagesToKeep || !hasRunnableCompartmentWindow(initialPlan.snapshot)) {
213
+ const message = `Nothing to wrap up — only ${initialPlan.rawMessagesAboveLastCompartment} messages above the last compartment.`;
214
+ setRecompTerminal2(ctx.liveSessionState, sessionId, "done", message);
215
+ return message;
216
+ }
217
+ const expectedChunks = Math.max(1, Math.ceil(initialPlan.snapshot.trueRawEligibleTokens / Math.max(1, ctx.historianChunkTokens)));
218
+ const wrapupHolderId = crypto.randomUUID();
219
+ const acquired = acquireWrapupInProgress(ctx.db, sessionId, {
220
+ holderId: wrapupHolderId,
221
+ messagesToKeep,
222
+ anchorRawMessageCount: initialPlan.anchorRawMessageCount,
223
+ targetEligibleEndOrdinal: initialPlan.targetEligibleEndOrdinal,
224
+ lastCompartmentEnd: getLastCompartmentEndMessage(ctx.db, sessionId),
225
+ chunkIndex: 0,
226
+ expectedChunks
227
+ });
228
+ if (!acquired.ok) {
229
+ const message = formatAlreadyRunningMessage(acquired.state);
230
+ setRecompTerminal2(ctx.liveSessionState, sessionId, "skipped", message);
231
+ return `## Magic Wrapup — Skipped
232
+
233
+ ${message}`;
234
+ }
235
+ const startLastEnd = getLastCompartmentEndMessage(ctx.db, sessionId);
236
+ const startCompartmentCount = getCompartments(ctx.db, sessionId).length;
237
+ let chunkIndex = 0;
238
+ let lastEnd = startLastEnd;
239
+ let stoppedForFailure = false;
240
+ let stoppedReason = "";
241
+ let ownershipLost = false;
242
+ const ownershipLostReason = "another process took over this session's wrapup.";
243
+ const markOwnershipLost = () => {
244
+ if (ownershipLost)
245
+ return;
246
+ ownershipLost = true;
247
+ sessionLog(sessionId, "wrapup: durable marker ownership lost; aborting loop");
248
+ };
249
+ const renewWrapupMarker = (updates) => {
250
+ const updated = updateWrapupInProgress(ctx.db, sessionId, wrapupHolderId, updates);
251
+ if (!updated) {
252
+ markOwnershipLost();
253
+ return false;
254
+ }
255
+ return true;
256
+ };
257
+ const markerRenewal = setInterval(() => {
258
+ try {
259
+ renewWrapupMarker({
260
+ lastCompartmentEnd: getLastCompartmentEndMessage(ctx.db, sessionId),
261
+ chunkIndex
262
+ });
263
+ } catch (err) {
264
+ sessionLog(sessionId, `wrapup: marker renewal threw; continuing (${err instanceof Error ? err.message : String(err)})`);
265
+ }
266
+ }, 60000);
267
+ markerRenewal.unref?.();
268
+ try {
269
+ const activeAtStart = await waitForExistingIncrementalRun(sessionId, resolveWrapupLeaseWaitTimeout(ctx));
270
+ if (activeAtStart === "busy") {
271
+ const message = "Another Magic Context rebuild is already running for this session.";
272
+ setRecompTerminal2(ctx.liveSessionState, sessionId, "skipped", message);
273
+ return `## Magic Wrapup — Skipped
274
+
275
+ ${message}`;
276
+ }
277
+ if (activeAtStart === "timeout") {
278
+ stoppedForFailure = true;
279
+ stoppedReason = "Timed out waiting for the active historian run.";
280
+ }
281
+ if (!stoppedForFailure) {
282
+ try {
283
+ sendStatusNotification2(ctx.client, sessionId, `Magic Wrapup started — compacting about ${plural(expectedChunks, "chunk")} of history. This can take a few minutes; the result posts here when done.`, ctx.getNotificationParams(sessionId));
284
+ } catch {}
285
+ try {
286
+ pushNotification2("action", { action: "wrapup-progress-kick" }, sessionId);
287
+ } catch {}
288
+ }
289
+ if (!stoppedForFailure && ownershipLost) {
290
+ stoppedForFailure = true;
291
+ stoppedReason = ownershipLostReason;
292
+ } else if (!stoppedForFailure) {
293
+ emitWrapupProgress(ctx, sessionId, {
294
+ processedMessages: Math.max(0, lastEnd),
295
+ totalMessages: Math.max(0, initialPlan.targetEligibleEndOrdinal - 1),
296
+ passCount: 0,
297
+ compartmentsCreated: 0,
298
+ note: `Eligible ${plural(initialPlan.snapshot.trueRawEligibleTokens, "token")} across about ${plural(expectedChunks, "chunk")}.`
299
+ });
300
+ for (;; ) {
301
+ if (ownershipLost) {
302
+ stoppedForFailure = true;
303
+ stoppedReason = ownershipLostReason;
304
+ break;
305
+ }
306
+ if (!renewWrapupMarker({
307
+ lastCompartmentEnd: getLastCompartmentEndMessage(ctx.db, sessionId),
308
+ chunkIndex,
309
+ expectedChunks
310
+ })) {
311
+ stoppedForFailure = true;
312
+ stoppedReason = ownershipLostReason;
313
+ break;
314
+ }
315
+ const plan = buildPlan(ctx, sessionId, messagesToKeep, initialPlan.anchorRawMessageCount);
316
+ lastEnd = getLastCompartmentEndMessage(ctx.db, sessionId);
317
+ if (lastEnd + 1 >= plan.targetEligibleEndOrdinal)
318
+ break;
319
+ chunkIndex += 1;
320
+ sessionLog(sessionId, `wrapup chunk ${chunkIndex}: ${describeBoundaryDiagnostics(plan.snapshot)}`);
321
+ emitWrapupProgress(ctx, sessionId, {
322
+ processedMessages: Math.max(0, lastEnd),
323
+ totalMessages: Math.max(0, plan.targetEligibleEndOrdinal - 1),
324
+ passCount: chunkIndex - 1,
325
+ compartmentsCreated: Math.max(0, getCompartments(ctx.db, sessionId).length - startCompartmentCount),
326
+ note: `Chunk ${chunkIndex}/${expectedChunks}: messages ${plan.snapshot.offset}-${plan.snapshot.eligibleEndOrdinal - 1}…`
327
+ });
328
+ if (!renewWrapupMarker({
329
+ lastCompartmentEnd: lastEnd,
330
+ chunkIndex,
331
+ expectedChunks,
332
+ targetEligibleEndOrdinal: plan.targetEligibleEndOrdinal
333
+ })) {
334
+ stoppedForFailure = true;
335
+ stoppedReason = ownershipLostReason;
336
+ break;
337
+ }
338
+ const beforeEnd = lastEnd;
339
+ const beforeFailures = getHistorianFailureState(ctx.db, sessionId).failureCount;
340
+ const iteration = await runOneWrapupIteration({
341
+ ctx,
342
+ sessionId,
343
+ plan,
344
+ messagesToKeep,
345
+ anchorRawMessageCount: initialPlan.anchorRawMessageCount,
346
+ renewWrapupMarker
347
+ });
348
+ if (!iteration.ran) {
349
+ stoppedForFailure = true;
350
+ stoppedReason = ownershipLost || iteration.reason === "ownership_lost" ? ownershipLostReason : iteration.reason === "timeout" ? "Timed out waiting for another process to release the compartment-state lease." : "Another Magic Context rebuild started while wrapup was waiting.";
351
+ break;
352
+ }
353
+ const afterEnd = getLastCompartmentEndMessage(ctx.db, sessionId);
354
+ const afterFailures = getHistorianFailureState(ctx.db, sessionId).failureCount;
355
+ if (afterEnd <= beforeEnd) {
356
+ stoppedForFailure = true;
357
+ stoppedReason = afterFailures > beforeFailures ? "The historian failed on the current chunk." : "The historian made no forward progress on the current chunk.";
358
+ break;
359
+ }
360
+ lastEnd = afterEnd;
361
+ emitWrapupProgress(ctx, sessionId, {
362
+ processedMessages: Math.max(0, lastEnd),
363
+ totalMessages: Math.max(0, plan.targetEligibleEndOrdinal - 1),
364
+ passCount: chunkIndex,
365
+ compartmentsCreated: Math.max(0, getCompartments(ctx.db, sessionId).length - startCompartmentCount),
366
+ note: `Wrapped through message ${lastEnd}.`
367
+ });
368
+ }
369
+ }
370
+ } finally {
371
+ clearInterval(markerRenewal);
372
+ releaseWrapupInProgress(ctx.db, sessionId, wrapupHolderId);
373
+ }
374
+ const finalEnd = getLastCompartmentEndMessage(ctx.db, sessionId);
375
+ const compartmentsCreated = Math.max(0, getCompartments(ctx.db, sessionId).length - startCompartmentCount);
376
+ const messagesWrapped = Math.max(0, finalEnd - Math.max(0, startLastEnd));
377
+ if (stoppedForFailure) {
378
+ const message = `Wrapped up through message ${Math.max(0, finalEnd)} (${plural(messagesWrapped, "message")} into ${plural(compartmentsCreated, "compartment")}). ${stoppedReason} Run /ctx-wrapup again to continue.`;
379
+ setRecompTerminal2(ctx.liveSessionState, sessionId, "failed", message);
380
+ return `## Magic Wrapup — Partial
381
+
382
+ ${message}`;
383
+ }
384
+ try {
385
+ clearEmergencyRecovery(ctx.db, sessionId);
386
+ } catch {}
387
+ const base = `Wrapped up ${messagesWrapped} messages into ${compartmentsCreated} compartments. The compacted history is queued and materializes on your next message.`;
388
+ const message = appendFlushHint(ctx, sessionId, base);
389
+ setRecompTerminal2(ctx.liveSessionState, sessionId, "done", message);
390
+ return message;
391
+ }
392
+
393
+ export { runManagedWrapup2 };