@cortexkit/opencode-magic-context 0.46.1 → 0.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/dist/agents/magic-context-prompt.d.ts +1 -1
  2. package/dist/agents/magic-context-prompt.d.ts.map +1 -1
  3. package/dist/{announcement-y35wzg2r.js → announcement-fp14dw0n.js} +3 -2
  4. package/dist/auto-search-worker.js +112 -0
  5. package/dist/config/index.d.ts.map +1 -1
  6. package/dist/config/live-run-config.d.ts.map +1 -1
  7. package/dist/config/migrate-config-location.d.ts.map +1 -1
  8. package/dist/config/mural-model-deprecation.d.ts +15 -0
  9. package/dist/config/mural-model-deprecation.d.ts.map +1 -0
  10. package/dist/config/project-security.d.ts +0 -3
  11. package/dist/config/project-security.d.ts.map +1 -1
  12. package/dist/config/schema/magic-context.d.ts +21 -9
  13. package/dist/config/schema/magic-context.d.ts.map +1 -1
  14. package/dist/{conflict-warning-hook-7fj2b9jw.js → conflict-warning-hook-w8cykrnf.js} +12 -9
  15. package/dist/{context-sh2m2vde.js → context-m0cy262m.js} +1785 -913
  16. package/dist/{derive-budgets-7nj7r1rv.js → derive-budgets-sg0xsq7s.js} +4 -3
  17. package/dist/embedding-activity-g1dhes6g.js +10 -0
  18. package/dist/embedding-backfill-9rcm1mfy.js +21 -0
  19. package/dist/embedding-cache-mgyr73ef.js +16 -0
  20. package/dist/embedding-worker.js +11 -9
  21. package/dist/features/magic-context/compaction-marker.d.ts.map +1 -1
  22. package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts +1 -0
  23. package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts.map +1 -1
  24. package/dist/features/magic-context/dreamer/task-config.d.ts +3 -3
  25. package/dist/features/magic-context/dreamer/task-config.d.ts.map +1 -1
  26. package/dist/features/magic-context/dreamer/task-executor.d.ts +1 -1
  27. package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
  28. package/dist/features/magic-context/dreamer/task-gates.d.ts.map +1 -1
  29. package/dist/features/magic-context/dreamer/task-registry.d.ts +1 -0
  30. package/dist/features/magic-context/dreamer/task-registry.d.ts.map +1 -1
  31. package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
  32. package/dist/features/magic-context/message-index-async.d.ts +16 -3
  33. package/dist/features/magic-context/message-index-async.d.ts.map +1 -1
  34. package/dist/features/magic-context/message-index-bounded.d.ts +17 -0
  35. package/dist/features/magic-context/message-index-bounded.d.ts.map +1 -0
  36. package/dist/features/magic-context/message-index.d.ts +7 -1
  37. package/dist/features/magic-context/message-index.d.ts.map +1 -1
  38. package/dist/features/magic-context/mural/render-trigger.d.ts +7 -4
  39. package/dist/features/magic-context/mural/render-trigger.d.ts.map +1 -1
  40. package/dist/features/magic-context/overflow-detection.d.ts +2 -0
  41. package/dist/features/magic-context/overflow-detection.d.ts.map +1 -1
  42. package/dist/features/magic-context/pi-content-decisions.d.ts +7 -1
  43. package/dist/features/magic-context/pi-content-decisions.d.ts.map +1 -1
  44. package/dist/features/magic-context/project-embedding-registry.d.ts +7 -0
  45. package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
  46. package/dist/features/magic-context/search.d.ts +31 -0
  47. package/dist/features/magic-context/search.d.ts.map +1 -1
  48. package/dist/features/magic-context/session-activity.d.ts.map +1 -1
  49. package/dist/features/magic-context/session-project-storage.d.ts +8 -2
  50. package/dist/features/magic-context/session-project-storage.d.ts.map +1 -1
  51. package/dist/features/magic-context/smart-notes/runner.d.ts +1 -0
  52. package/dist/features/magic-context/smart-notes/runner.d.ts.map +1 -1
  53. package/dist/features/magic-context/storage-db.d.ts.map +1 -1
  54. package/dist/features/magic-context/storage-historian-runs.d.ts +2 -5
  55. package/dist/features/magic-context/storage-historian-runs.d.ts.map +1 -1
  56. package/dist/features/magic-context/storage-meta-persisted.d.ts +12 -0
  57. package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
  58. package/dist/features/magic-context/storage-meta-session.d.ts +6 -0
  59. package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
  60. package/dist/features/magic-context/storage-tag-identity-revision.d.ts +30 -0
  61. package/dist/features/magic-context/storage-tag-identity-revision.d.ts.map +1 -0
  62. package/dist/features/magic-context/storage-tags.d.ts +148 -3
  63. package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
  64. package/dist/features/magic-context/storage.d.ts +1 -0
  65. package/dist/features/magic-context/storage.d.ts.map +1 -1
  66. package/dist/features/magic-context/subagent-token-capture.d.ts.map +1 -1
  67. package/dist/features/magic-context/transform-decision-log.d.ts +4 -2
  68. package/dist/features/magic-context/transform-decision-log.d.ts.map +1 -1
  69. package/dist/harness-e4avh192.js +10 -0
  70. package/dist/hooks/magic-context/active-anthropic-turn.d.ts +10 -0
  71. package/dist/hooks/magic-context/active-anthropic-turn.d.ts.map +1 -0
  72. package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
  73. package/dist/hooks/magic-context/auto-search-blocking.fixture.d.ts +2 -0
  74. package/dist/hooks/magic-context/auto-search-blocking.fixture.d.ts.map +1 -0
  75. package/dist/hooks/magic-context/auto-search-deadline.d.ts +7 -0
  76. package/dist/hooks/magic-context/auto-search-deadline.d.ts.map +1 -1
  77. package/dist/hooks/magic-context/auto-search-host-review.fixture.d.ts +3 -0
  78. package/dist/hooks/magic-context/auto-search-host-review.fixture.d.ts.map +1 -0
  79. package/dist/hooks/magic-context/auto-search-lock-review.fixture.d.ts +2 -0
  80. package/dist/hooks/magic-context/auto-search-lock-review.fixture.d.ts.map +1 -0
  81. package/dist/hooks/magic-context/auto-search-long-lock-review.fixture.d.ts +2 -0
  82. package/dist/hooks/magic-context/auto-search-long-lock-review.fixture.d.ts.map +1 -0
  83. package/dist/hooks/magic-context/auto-search-omp-host-review.fixture.d.ts +4 -0
  84. package/dist/hooks/magic-context/auto-search-omp-host-review.fixture.d.ts.map +1 -0
  85. package/dist/hooks/magic-context/auto-search-omp-loader.fixture.d.ts +3 -0
  86. package/dist/hooks/magic-context/auto-search-omp-loader.fixture.d.ts.map +1 -0
  87. package/dist/hooks/magic-context/auto-search-runner.d.ts +1 -1
  88. package/dist/hooks/magic-context/auto-search-runner.d.ts.map +1 -1
  89. package/dist/hooks/magic-context/auto-search-snapshot.fixture.d.ts +4 -0
  90. package/dist/hooks/magic-context/auto-search-snapshot.fixture.d.ts.map +1 -0
  91. package/dist/hooks/magic-context/auto-search-worker-client.d.ts +98 -0
  92. package/dist/hooks/magic-context/auto-search-worker-client.d.ts.map +1 -0
  93. package/dist/hooks/magic-context/auto-search-worker.d.ts +2 -0
  94. package/dist/hooks/magic-context/auto-search-worker.d.ts.map +1 -0
  95. package/dist/hooks/magic-context/caveman-cleanup.d.ts.map +1 -1
  96. package/dist/hooks/magic-context/command-handler.d.ts +1 -0
  97. package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
  98. package/dist/hooks/magic-context/compartment-runner-incremental.d.ts.map +1 -1
  99. package/dist/hooks/magic-context/compartment-runner-recomp.d.ts.map +1 -1
  100. package/dist/hooks/magic-context/compartment-runner-types.d.ts +3 -5
  101. package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -1
  102. package/dist/hooks/magic-context/compartment-runner.d.ts +2 -1
  103. package/dist/hooks/magic-context/compartment-runner.d.ts.map +1 -1
  104. package/dist/hooks/magic-context/compartment-trigger.d.ts +3 -1
  105. package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
  106. package/dist/hooks/magic-context/event-handler.d.ts +1 -1
  107. package/dist/hooks/magic-context/event-handler.d.ts.map +1 -1
  108. package/dist/hooks/magic-context/event-resolvers.d.ts.map +1 -1
  109. package/dist/hooks/magic-context/execute-status.d.ts.map +1 -1
  110. package/dist/hooks/magic-context/final-wire-token-estimate.d.ts +2 -0
  111. package/dist/hooks/magic-context/final-wire-token-estimate.d.ts.map +1 -1
  112. package/dist/hooks/magic-context/heuristic-cleanup.d.ts.map +1 -1
  113. package/dist/hooks/magic-context/historian-drain-gate.d.ts +11 -0
  114. package/dist/hooks/magic-context/historian-drain-gate.d.ts.map +1 -0
  115. package/dist/hooks/magic-context/hook.d.ts +3 -2
  116. package/dist/hooks/magic-context/hook.d.ts.map +1 -1
  117. package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
  118. package/dist/hooks/magic-context/latest-assistant-turn.d.ts +25 -0
  119. package/dist/hooks/magic-context/latest-assistant-turn.d.ts.map +1 -0
  120. package/dist/hooks/magic-context/latest-thinking-recovery.d.ts +61 -0
  121. package/dist/hooks/magic-context/latest-thinking-recovery.d.ts.map +1 -0
  122. package/dist/hooks/magic-context/lkg-persist.d.ts +4 -3
  123. package/dist/hooks/magic-context/lkg-persist.d.ts.map +1 -1
  124. package/dist/hooks/magic-context/lkg-replay.d.ts +13 -8
  125. package/dist/hooks/magic-context/lkg-replay.d.ts.map +1 -1
  126. package/dist/hooks/magic-context/lkg-slot.d.ts +139 -2
  127. package/dist/hooks/magic-context/lkg-slot.d.ts.map +1 -1
  128. package/dist/hooks/magic-context/message-search-accepting-silent-worker.fixture.d.ts +2 -0
  129. package/dist/hooks/magic-context/message-search-accepting-silent-worker.fixture.d.ts.map +1 -0
  130. package/dist/hooks/magic-context/module-wire.d.ts.map +1 -1
  131. package/dist/hooks/magic-context/oc-stall-r2-warmup-worker.fixture.d.ts +2 -0
  132. package/dist/hooks/magic-context/oc-stall-r2-warmup-worker.fixture.d.ts.map +1 -0
  133. package/dist/hooks/magic-context/oc-stall-search-review.fixture.d.ts +2 -0
  134. package/dist/hooks/magic-context/oc-stall-search-review.fixture.d.ts.map +1 -0
  135. package/dist/hooks/magic-context/opencode-proven-floor.d.ts +6 -0
  136. package/dist/hooks/magic-context/opencode-proven-floor.d.ts.map +1 -0
  137. package/dist/hooks/magic-context/opencode1-to-model-messages.fixture.d.ts +63 -0
  138. package/dist/hooks/magic-context/opencode1-to-model-messages.fixture.d.ts.map +1 -0
  139. package/dist/hooks/magic-context/pass-outcome.d.ts.map +1 -1
  140. package/dist/hooks/magic-context/protected-tail-boundary.d.ts.map +1 -1
  141. package/dist/hooks/magic-context/provider-visible-parts.d.ts +45 -0
  142. package/dist/hooks/magic-context/provider-visible-parts.d.ts.map +1 -0
  143. package/dist/hooks/magic-context/raw-ordinal-warmup-silent-worker.fixture.d.ts +2 -0
  144. package/dist/hooks/magic-context/raw-ordinal-warmup-silent-worker.fixture.d.ts.map +1 -0
  145. package/dist/hooks/magic-context/raw-ordinal-warmup-worker.d.ts +2 -0
  146. package/dist/hooks/magic-context/raw-ordinal-warmup-worker.d.ts.map +1 -0
  147. package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts +87 -0
  148. package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts.map +1 -0
  149. package/dist/hooks/magic-context/read-session-chunk.d.ts +12 -0
  150. package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
  151. package/dist/hooks/magic-context/read-session-db.d.ts.map +1 -1
  152. package/dist/hooks/magic-context/read-session-formatting.d.ts +5 -0
  153. package/dist/hooks/magic-context/read-session-formatting.d.ts.map +1 -1
  154. package/dist/hooks/magic-context/read-session-raw.d.ts +83 -1
  155. package/dist/hooks/magic-context/read-session-raw.d.ts.map +1 -1
  156. package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts.map +1 -1
  157. package/dist/hooks/magic-context/reasoning-budget-status.d.ts +15 -0
  158. package/dist/hooks/magic-context/reasoning-budget-status.d.ts.map +1 -0
  159. package/dist/hooks/magic-context/reasoning-budget.d.ts +40 -0
  160. package/dist/hooks/magic-context/reasoning-budget.d.ts.map +1 -0
  161. package/dist/hooks/magic-context/reasoning-removal.d.ts +6 -6
  162. package/dist/hooks/magic-context/reasoning-removal.d.ts.map +1 -1
  163. package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
  164. package/dist/hooks/magic-context/sentinel.d.ts +45 -1
  165. package/dist/hooks/magic-context/sentinel.d.ts.map +1 -1
  166. package/dist/hooks/magic-context/strip-content.d.ts +21 -5
  167. package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
  168. package/dist/hooks/magic-context/system-prompt-hash.d.ts +1 -0
  169. package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
  170. package/dist/hooks/magic-context/tag-messages.d.ts +21 -0
  171. package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
  172. package/dist/hooks/magic-context/tag-owner-warmup.d.ts +6 -0
  173. package/dist/hooks/magic-context/tag-owner-warmup.d.ts.map +1 -0
  174. package/dist/hooks/magic-context/tail-hygiene-walk.d.ts.map +1 -1
  175. package/dist/hooks/magic-context/token-count-exact.d.ts +35 -0
  176. package/dist/hooks/magic-context/token-count-exact.d.ts.map +1 -0
  177. package/dist/hooks/magic-context/tool-drop-target.d.ts +5 -0
  178. package/dist/hooks/magic-context/tool-drop-target.d.ts.map +1 -1
  179. package/dist/hooks/magic-context/transform-compartment-phase.d.ts +3 -28
  180. package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -1
  181. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +28 -6
  182. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  183. package/dist/hooks/magic-context/transform.d.ts +11 -3
  184. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  185. package/dist/hooks/magic-context/wrapup-orchestrator.d.ts.map +1 -1
  186. package/dist/{index-hpecdzec.js → index-0an7742d.js} +6820 -6587
  187. package/dist/index-0qhce371.js +120 -0
  188. package/dist/{index-q6hef7fh.js → index-0sahzkwr.js} +6 -19
  189. package/dist/{index-k5bdx1bx.js → index-0w56v4fm.js} +3 -5
  190. package/dist/index-14cjxt20.js +819 -0
  191. package/dist/{v2/server-51dv1pr5.js → index-1qb0z7wa.js} +301 -27
  192. package/dist/index-2bvekkfy.js +11 -0
  193. package/dist/{index-sj29b3z2.js → index-2y0s2hep.js} +3 -3
  194. package/dist/index-4dhv7mqz.js +131 -0
  195. package/dist/{index-b35pxds2.js → index-58e3y90n.js} +1 -18
  196. package/dist/index-5zygecde.js +152 -0
  197. package/dist/{index-sjthx78w.js → index-692jzy0p.js} +16879 -22907
  198. package/dist/index-72nhv486.js +2307 -0
  199. package/dist/index-7jzrrxap.js +931 -0
  200. package/dist/index-7mx8v0pw.js +3591 -0
  201. package/dist/index-8ajstryz.js +18 -0
  202. package/dist/{index-sfpzqvdz.js → index-8cd2j99z.js} +2 -3
  203. package/dist/{index-hybnrwq0.js → index-8j7gqj40.js} +131 -128
  204. package/dist/index-bdckkfw6.js +3261 -0
  205. package/dist/{index-8x2v7gg9.js → index-bhvjj0ys.js} +158 -2455
  206. package/dist/index-c43kr12f.js +3030 -0
  207. package/dist/index-cb7emxgj.js +984 -0
  208. package/dist/index-d9vfe7xq.js +16 -0
  209. package/dist/{index-5gq3b2ya.js → index-db7zwa3v.js} +147 -209
  210. package/dist/index-dhwzyd54.js +1142 -0
  211. package/dist/{index-8da2zjhz.js → index-eeezr5zz.js} +9 -7
  212. package/dist/{index-pkbcrdqs.js → index-f0h6xwqm.js} +3412 -4552
  213. package/dist/index-fb3zxn06.js +13 -0
  214. package/dist/index-fbv1dn35.js +171 -0
  215. package/dist/index-fr0wbhdn.js +43 -0
  216. package/dist/{index-mc22ayvf.js → index-ghc9f0n7.js} +11 -9
  217. package/dist/{index-fzbvakh0.js → index-jcbd3znx.js} +3 -3
  218. package/dist/{index-5p8jdswx.js → index-k1xb52kd.js} +20 -13
  219. package/dist/index-k9nnwad5.js +3532 -0
  220. package/dist/{v2/server-fg34g6a5.js → index-kb9nn0a0.js} +309 -52
  221. package/dist/index-knh4y330.js +566 -0
  222. package/dist/{index-q4yp4b52.js → index-mfkzp7qj.js} +28 -28
  223. package/dist/{index-sgthv3f7.js → index-mmyh6d8f.js} +4 -4
  224. package/dist/index-pavzsdc6.js +17 -0
  225. package/dist/{index-0d3g3461.js → index-pdecwzrd.js} +19 -16
  226. package/dist/index-pg50n748.js +1060 -0
  227. package/dist/index-q2tqeqde.js +2106 -0
  228. package/dist/index-q7h7csab.js +3469 -0
  229. package/dist/index-qt1qqasc.js +22 -0
  230. package/dist/{index-majxda46.js → index-ty64eqcn.js} +28 -18
  231. package/dist/{index-7qw742ev.js → index-yq8n9qcb.js} +25 -44
  232. package/dist/{index-sfnj6h8h.js → index-z8e0psj8.js} +20 -20
  233. package/dist/index.d.ts.map +1 -1
  234. package/dist/index.js +1061 -260
  235. package/dist/logger-d3wex3dz.js +20 -0
  236. package/dist/message-index-bounded-7ezbgddp.js +124 -0
  237. package/dist/{v2/message-time-backfill-r6qkem1x.js → message-time-backfill-brbd63hv.js} +8 -6
  238. package/dist/migration-worker.js +25 -16
  239. package/dist/{model-resolution-xhfmyyvy.js → model-resolution-nx97z3x7.js} +1 -1
  240. package/dist/plugin/dream-timer.d.ts +1 -1
  241. package/dist/plugin/dream-timer.d.ts.map +1 -1
  242. package/dist/plugin/hooks/create-session-hooks.d.ts +3 -1
  243. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  244. package/dist/plugin/host-stall-profiler-report.d.ts +2 -0
  245. package/dist/plugin/host-stall-profiler-report.d.ts.map +1 -0
  246. package/dist/plugin/host-stall-profiler.d.ts +3 -0
  247. package/dist/plugin/host-stall-profiler.d.ts.map +1 -0
  248. package/dist/plugin/messages-transform.d.ts +21 -19
  249. package/dist/plugin/messages-transform.d.ts.map +1 -1
  250. package/dist/plugin/rpc-handlers.d.ts.map +1 -1
  251. package/dist/plugin/tool-registry.d.ts.map +1 -1
  252. package/dist/project-embedding-registry-7qzptcw7.js +88 -0
  253. package/dist/raw-ordinal-warmup-worker.js +60 -0
  254. package/dist/{read-session-chunk-egz7r68d.js → read-session-chunk-6k83m4fj.js} +15 -9
  255. package/dist/read-session-raw-3g9qy1xa.js +58 -0
  256. package/dist/recomp-orchestrator-d3fp1cy0.js +57 -0
  257. package/dist/{v2/safe-notification-target-eb1n1vfb.js → safe-notification-target-5ffqq32m.js} +4 -2
  258. package/dist/search-epax1ecv.js +45 -0
  259. package/dist/{v2/send-session-notification-qs0j78v6.js → send-session-notification-erecz4y4.js} +10 -6
  260. package/dist/shared/auto-search-lifecycle.d.ts +7 -0
  261. package/dist/shared/auto-search-lifecycle.d.ts.map +1 -0
  262. package/dist/shared/conflict-detector.d.ts.map +1 -1
  263. package/dist/shared/historian-tool-expansions.d.ts +1 -1
  264. package/dist/shared/historian-tool-expansions.d.ts.map +1 -1
  265. package/dist/shared/historian-tool-template.d.ts +2 -2
  266. package/dist/shared/historian-tool-template.d.ts.map +1 -1
  267. package/dist/shared/host-stall-profiler-bun.d.ts +46 -0
  268. package/dist/shared/host-stall-profiler-bun.d.ts.map +1 -0
  269. package/dist/shared/host-stall-profiler-common.d.ts +58 -0
  270. package/dist/shared/host-stall-profiler-common.d.ts.map +1 -0
  271. package/dist/shared/host-stall-profiler-node.d.ts +36 -0
  272. package/dist/shared/host-stall-profiler-node.d.ts.map +1 -0
  273. package/dist/shared/host-stall-profiler-report.d.ts +68 -0
  274. package/dist/shared/host-stall-profiler-report.d.ts.map +1 -0
  275. package/dist/shared/host-stall-profiler.d.ts +5 -0
  276. package/dist/shared/host-stall-profiler.d.ts.map +1 -0
  277. package/dist/shared/model-resolution.d.ts +2 -3
  278. package/dist/shared/model-resolution.d.ts.map +1 -1
  279. package/dist/shared/sqlite.d.ts +46 -1
  280. package/dist/shared/sqlite.d.ts.map +1 -1
  281. package/dist/shared/stable-json.d.ts.map +1 -1
  282. package/dist/shared/status-view.d.ts.map +1 -1
  283. package/dist/shared/user-facing-codes.d.ts +0 -5
  284. package/dist/shared/user-facing-codes.d.ts.map +1 -1
  285. package/dist/shared/window-geometry.d.ts +4 -0
  286. package/dist/shared/window-geometry.d.ts.map +1 -1
  287. package/dist/sqlite-context-pragmas-mv9jqwjh.js +6 -0
  288. package/dist/sqlite-mhjkerzq.js +46 -0
  289. package/dist/storage-memory-07fx57k6.js +71 -0
  290. package/dist/storage-tags-d3b0v2ss.js +131 -0
  291. package/dist/{task-config-v81k8jvk.js → task-config-cgpg0nvh.js} +2 -2
  292. package/dist/tools/ctx-expand/render.d.ts.map +1 -1
  293. package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
  294. package/dist/tools/ctx-note/constants.d.ts +4 -0
  295. package/dist/tools/ctx-note/constants.d.ts.map +1 -1
  296. package/dist/tools/ctx-note/tools.d.ts +1 -0
  297. package/dist/tools/ctx-note/tools.d.ts.map +1 -1
  298. package/dist/tools/ctx-search/tools.d.ts.map +1 -1
  299. package/dist/tools/parameter-descriptions.d.ts +2 -2
  300. package/dist/tools/parameter-descriptions.d.ts.map +1 -1
  301. package/dist/{transform-postprocess-phase-bqhz6vdr.js → transform-postprocess-phase-spcy2qre.js} +35 -17
  302. package/dist/transformers-node-wasm.js +18415 -18415
  303. package/dist/v2/auto-search-worker.js +112 -0
  304. package/dist/v2/{context-zecmzk5s.js → context-sf98kstd.js} +8378 -8530
  305. package/dist/v2/{derive-budgets-kdgp4s3r.js → derive-budgets-3vc0y84t.js} +4 -3
  306. package/dist/v2/embedding-activity-g1dhes6g.js +10 -0
  307. package/dist/v2/embedding-backfill-vn8g1nh1.js +21 -0
  308. package/dist/v2/embedding-cache-mgyr73ef.js +16 -0
  309. package/dist/v2/embedding-worker.js +12 -9
  310. package/dist/v2/fold/host-media.d.ts +4 -0
  311. package/dist/v2/fold/host-media.d.ts.map +1 -1
  312. package/dist/v2/fold/memory-cache.d.ts +70 -0
  313. package/dist/v2/fold/memory-cache.d.ts.map +1 -0
  314. package/dist/v2/fold/native-codec.d.ts +10 -0
  315. package/dist/v2/fold/native-codec.d.ts.map +1 -0
  316. package/dist/v2/fold/native-replay.d.ts +58 -0
  317. package/dist/v2/fold/native-replay.d.ts.map +1 -0
  318. package/dist/v2/fold/policy.d.ts +24 -0
  319. package/dist/v2/fold/policy.d.ts.map +1 -0
  320. package/dist/v2/harness-e4avh192.js +10 -0
  321. package/dist/v2/hidden-completion.d.ts.map +1 -1
  322. package/dist/v2/hooks/context.d.ts +2 -2
  323. package/dist/v2/hooks/context.d.ts.map +1 -1
  324. package/dist/v2/hooks/dream-manual.d.ts +1 -1
  325. package/dist/v2/hooks/dream-manual.d.ts.map +1 -1
  326. package/dist/v2/hooks/dream-timer.d.ts.map +1 -1
  327. package/dist/v2/hooks/dream-trigger.d.ts +1 -2
  328. package/dist/v2/hooks/dream-trigger.d.ts.map +1 -1
  329. package/dist/v2/hooks/payload.d.ts.map +1 -1
  330. package/dist/v2/hooks/tools.d.ts.map +1 -1
  331. package/dist/v2/hooks/types.d.ts +6 -0
  332. package/dist/v2/hooks/types.d.ts.map +1 -1
  333. package/dist/v2/logger-mxd0ym09.js +19 -0
  334. package/dist/v2/message-index-bounded-dy3s2k1e.js +123 -0
  335. package/dist/{message-time-backfill-68gj6t3e.js → v2/message-time-backfill-gtx1pwk1.js} +7 -7
  336. package/dist/v2/migration-worker.js +24 -15
  337. package/dist/v2/{model-resolution-xhfmyyvy.js → model-resolution-nx97z3x7.js} +1 -1
  338. package/dist/v2/project-embedding-registry-1tgba5dv.js +86 -0
  339. package/dist/v2/raw-ordinal-warmup-worker.js +60 -0
  340. package/dist/v2/{read-session-chunk-8vjp6581.js → read-session-chunk-rh4khdkv.js} +14 -8
  341. package/dist/v2/read-session-raw-bsbmf0vj.js +57 -0
  342. package/dist/v2/recomp-orchestrator-az61rfcg.js +57 -0
  343. package/dist/{safe-notification-target-43r8jsxw.js → v2/safe-notification-target-73ax1p5v.js} +3 -3
  344. package/dist/v2/search-nzkwrc6n.js +45 -0
  345. package/dist/{send-session-notification-dyw42dtr.js → v2/send-session-notification-6km439kn.js} +9 -7
  346. package/dist/{index-5eqk6z3s.js → v2/server-1r6pmz4f.js} +301 -27
  347. package/dist/v2/server-2bvekkfy.js +11 -0
  348. package/dist/v2/server-2fbhp79z.js +3205 -0
  349. package/dist/v2/{server-ajzeteqw.js → server-2ra6pwf3.js} +1 -18
  350. package/dist/v2/server-4dhv7mqz.js +131 -0
  351. package/dist/v2/{server-xa4xe3rv.js → server-4k748ke6.js} +11 -1053
  352. package/dist/v2/{server-vs5gpnd4.js → server-52awr2mw.js} +81 -145
  353. package/dist/v2/{server-1qbnzc80.js → server-5m3dt5r1.js} +136 -148
  354. package/dist/v2/server-686jg6eb.js +3508 -0
  355. package/dist/v2/server-7jzrrxap.js +931 -0
  356. package/dist/v2/server-7wwc2nga.js +3023 -0
  357. package/dist/v2/server-8ajstryz.js +18 -0
  358. package/dist/v2/{server-sfpzqvdz.js → server-8cd2j99z.js} +2 -3
  359. package/dist/v2/server-8pyt7hev.js +3408 -0
  360. package/dist/v2/server-8tqanswc.js +984 -0
  361. package/dist/v2/{server-14vq4kpm.js → server-aan4q8mx.js} +3 -3
  362. package/dist/v2/server-d9vfe7xq.js +16 -0
  363. package/dist/v2/server-e0vdaae2.js +3591 -0
  364. package/dist/v2/server-ezhze64f.js +1048 -0
  365. package/dist/v2/server-fb3zxn06.js +13 -0
  366. package/dist/v2/server-fr0wbhdn.js +43 -0
  367. package/dist/v2/server-g5r0n3b6.js +1137 -0
  368. package/dist/v2/server-gjcr4w98.js +154 -0
  369. package/dist/v2/server-k228xhjg.js +171 -0
  370. package/dist/v2/{server-jc7y02q0.js → server-k8x2rbxc.js} +5119 -10948
  371. package/dist/{index-fg34g6a5.js → v2/server-kb9nn0a0.js} +309 -52
  372. package/dist/v2/{server-g0fjrkta.js → server-mfkzp7qj.js} +28 -28
  373. package/dist/v2/server-pavzsdc6.js +17 -0
  374. package/dist/v2/server-psqc7e9n.js +2106 -0
  375. package/dist/v2/server-qt1qqasc.js +22 -0
  376. package/dist/v2/server-qye6ykf7.js +120 -0
  377. package/dist/v2/{server-qdjnb2z1.js → server-r5p3b1wy.js} +11 -9
  378. package/dist/v2/server-sggvvzhb.js +759 -0
  379. package/dist/v2/{server-y8maxeft.js → server-v06jcv0w.js} +16 -13
  380. package/dist/v2/server-vqpf3167.js +1048 -0
  381. package/dist/v2/{server-c5gz8wph.js → server-x2g40a71.js} +2048 -2059
  382. package/dist/v2/{server-wvjvfhck.js → server-xdfwt6kh.js} +20 -16
  383. package/dist/v2/{server-mcfawjgc.js → server-xxm59eww.js} +25 -44
  384. package/dist/v2/server-yczc713m.js +564 -0
  385. package/dist/v2/{server-3n4q9xme.js → server-z2037m6z.js} +4 -4
  386. package/dist/v2/{server-e29d7p7c.js → server-zm570tr2.js} +166 -160
  387. package/dist/v2/{server-6r257mf5.js → server-zxhgvsf9.js} +3 -3
  388. package/dist/v2/server.js +16 -14
  389. package/dist/v2/sqlite-context-pragmas-mv9jqwjh.js +6 -0
  390. package/dist/v2/sqlite-mhjkerzq.js +46 -0
  391. package/dist/v2/storage-memory-07fx57k6.js +71 -0
  392. package/dist/v2/storage-tags-w4tv77sn.js +130 -0
  393. package/dist/v2/store-reader.d.ts +16 -0
  394. package/dist/v2/store-reader.d.ts.map +1 -1
  395. package/dist/v2/{task-config-tbndqyny.js → task-config-x0hq3qfd.js} +2 -2
  396. package/dist/v2/transformers-node-wasm.js +18415 -18415
  397. package/dist/v2/tui/index.d.ts.map +1 -1
  398. package/dist/v2/tui/types.d.ts +1 -10
  399. package/dist/v2/tui/types.d.ts.map +1 -1
  400. package/dist/v2/{wrapup-orchestrator-0snhvwcv.js → wrapup-orchestrator-mz7efs7w.js} +51 -27
  401. package/dist/wrapup-orchestrator-amzta1t4.js +44 -0
  402. package/package.json +4 -3
  403. package/src/agents/magic-context-prompt.ts +27 -2
  404. package/src/agents/smart-notes-enabled.test.ts +294 -0
  405. package/src/agents/smart-notes-on.golden.json +70 -0
  406. package/src/config/index.test.ts +67 -1
  407. package/src/config/index.ts +8 -0
  408. package/src/config/latch-permanence-guard.test.ts +4 -0
  409. package/src/config/live-run-config.test.ts +37 -1
  410. package/src/config/live-run-config.ts +28 -0
  411. package/src/config/migrate-config-location.ts +10 -3
  412. package/src/config/mural-model-deprecation.ts +24 -0
  413. package/src/config/project-security.hostile-matrix.test.ts +4 -44
  414. package/src/config/project-security.test.ts +9 -14
  415. package/src/config/project-security.ts +13 -55
  416. package/src/config/schema/magic-context.test.ts +6 -5
  417. package/src/config/schema/magic-context.ts +34 -16
  418. package/src/features/magic-context/dreamer/task-registry.ts +6 -0
  419. package/src/shared/auto-search-lifecycle.ts +27 -0
  420. package/src/shared/conflict-detector.test.ts +56 -0
  421. package/src/shared/conflict-detector.ts +16 -5
  422. package/src/shared/historian-tool-defaults.json +6 -6
  423. package/src/shared/historian-tool-expansions.ts +65 -8
  424. package/src/shared/historian-tool-preview-defaults.json +13 -0
  425. package/src/shared/historian-tool-template.ts +48 -14
  426. package/src/shared/host-stall-profiler-bun.ts +358 -0
  427. package/src/shared/host-stall-profiler-common.ts +159 -0
  428. package/src/shared/host-stall-profiler-node.test.ts +234 -0
  429. package/src/shared/host-stall-profiler-node.ts +274 -0
  430. package/src/shared/host-stall-profiler-report.ts +248 -0
  431. package/src/shared/host-stall-profiler.ts +57 -0
  432. package/src/shared/model-resolution.test.ts +54 -17
  433. package/src/shared/model-resolution.ts +6 -17
  434. package/src/shared/sqlite-640-review-r2.test.ts +136 -0
  435. package/src/shared/sqlite-640-review.test.ts +183 -0
  436. package/src/shared/sqlite-acquisition-routing.test.ts +18 -0
  437. package/src/shared/sqlite.test.ts +52 -0
  438. package/src/shared/sqlite.ts +423 -37
  439. package/src/shared/stable-json-linear.test.ts +109 -0
  440. package/src/shared/stable-json.ts +37 -7
  441. package/src/shared/status-view.test.ts +6 -1
  442. package/src/shared/status-view.ts +15 -1
  443. package/src/shared/tag-transcript.ts +6 -0
  444. package/src/shared/user-facing-codes.ts +2 -6
  445. package/src/shared/window-geometry.ts +10 -0
  446. package/src/shared/write-transaction-attribution.test.ts +2 -2
  447. package/src/v2/tui/host-contract.test.ts +41 -67
  448. package/src/v2/tui/index.ts +6 -214
  449. package/src/v2/tui/types.ts +5 -17
  450. package/dist/features/magic-context/checkout-claim-fake-subc.test-support.d.ts +0 -45
  451. package/dist/features/magic-context/checkout-claim-fake-subc.test-support.d.ts.map +0 -1
  452. package/dist/features/magic-context/checkout-claim.d.ts +0 -155
  453. package/dist/features/magic-context/checkout-claim.d.ts.map +0 -1
  454. package/dist/index-3h0ybwah.js +0 -6540
  455. package/dist/index-r5hmbx3t.js +0 -7773
  456. package/dist/recomp-orchestrator-y15j0rb9.js +0 -39
  457. package/dist/v2/recomp-orchestrator-8ejxvrzz.js +0 -39
  458. package/dist/v2/server-frbm99q5.js +0 -7698
  459. package/dist/v2/server-qp5hx1ad.js +0 -6366
  460. package/dist/wrapup-orchestrator-39amhv9s.js +0 -26
  461. /package/dist/{index-en1k8h8m.js → index-2pp04pmg.js} +0 -0
  462. /package/dist/v2/{index-en1k8h8m.js → index-2pp04pmg.js} +0 -0
@@ -0,0 +1,566 @@
1
+ import {
2
+ getMagicContextStorageDir
3
+ } from "./index-0sahzkwr.js";
4
+ import {
5
+ log2
6
+ } from "./index-8j7gqj40.js";
7
+ import {
8
+ writeStorageFileAtomicSync
9
+ } from "./index-1bc61ans.js";
10
+
11
+ // src/features/magic-context/memory/project-identity.ts
12
+ import { execFileSync } from "node:child_process";
13
+ import { createHash as createHash2 } from "node:crypto";
14
+ import { existsSync, realpathSync as realpathSync2, statSync } from "node:fs";
15
+ import { homedir } from "node:os";
16
+ import path3 from "node:path";
17
+
18
+ // src/features/magic-context/memory/project-identity-cache.ts
19
+ import { createHash } from "node:crypto";
20
+ import { readFileSync } from "node:fs";
21
+ import path2 from "node:path";
22
+
23
+ // src/shared/project-directory-key.ts
24
+ import { realpathSync } from "node:fs";
25
+ import path from "node:path";
26
+ function projectDirectoryKey(directory) {
27
+ const slashed = directory.replaceAll("\\", "/").replace(/^\/\/\?\/UNC\//i, "//").replace(/^\/\/\?\//, "");
28
+ if (/^[a-z]:\//i.test(slashed) || slashed.startsWith("//")) {
29
+ return path.win32.normalize(slashed).replaceAll("\\", "/").replace(/\/$/, "").toLowerCase();
30
+ }
31
+ return path.resolve(directory);
32
+ }
33
+ var realpathForCanonicalDirectory = (directory) => realpathSync.native(directory);
34
+ function canonicalProjectDirectory(directory) {
35
+ let resolved = directory;
36
+ try {
37
+ resolved = realpathForCanonicalDirectory(directory);
38
+ } catch {}
39
+ return projectDirectoryKey(resolved);
40
+ }
41
+
42
+ // src/features/magic-context/memory/project-identity-cache.ts
43
+ function cachePath(directory, storageDir = getMagicContextStorageDir()) {
44
+ const hash = createHash("sha256").update(projectDirectoryKey(directory)).digest("hex");
45
+ return path2.join(storageDir, "project-identities", `${hash}.json`);
46
+ }
47
+ function rememberGitIdentity(directory, identity) {
48
+ try {
49
+ const destination = cachePath(directory);
50
+ writeStorageFileAtomicSync(destination, JSON.stringify({ directory: projectDirectoryKey(directory), identity }));
51
+ } catch {}
52
+ }
53
+ function readRememberedGitIdentity(directory, storageDir) {
54
+ try {
55
+ const record = JSON.parse(readFileSync(cachePath(directory, storageDir), "utf8"));
56
+ if (record.directory === projectDirectoryKey(directory) && /^git:[0-9a-f]{7,64}$/.test(record.identity))
57
+ return record.identity;
58
+ } catch {}
59
+ return;
60
+ }
61
+
62
+ // src/features/magic-context/memory/project-identity.ts
63
+ var GIT_TIMEOUT_MS = 5000;
64
+ var TRANSIENT_FAILURE_COOLDOWN_MS = 5 * 60 * 1000;
65
+ var identityCache = new Map;
66
+ var linkedGitWorktreeCache = new Map;
67
+ var lastKnownGitIdentityCache = new Map;
68
+ var directoryFallbackCache = new Map;
69
+ var transientFailureCooldown = new Map;
70
+ var dubiousOwnershipFallbackDirectories = new Set;
71
+ var dubiousOwnershipLoggedDirectories = new Set;
72
+ var dubiousOwnershipWarnedDirectories = new Set;
73
+ var transientGitIdentityReuseLoggedDirectories = new Set;
74
+ var sessionIdentityCache = new Map;
75
+ var homeProjectPermission = false;
76
+ var homeProjectSkipLogged = false;
77
+ var pausedIdentityReasons = new Map;
78
+ var pausedIdentityLogged = new Set;
79
+ function setHomeProjectPermission(allowed) {
80
+ homeProjectPermission = allowed;
81
+ }
82
+ function shouldSkipHomeProjectMemory(directory) {
83
+ try {
84
+ assertProjectAllowed(directory, homeProjectPermission);
85
+ return false;
86
+ } catch (error) {
87
+ if (!(error instanceof ProjectIdentityError) || error.errorClass !== "home_project_disabled")
88
+ throw error;
89
+ if (!homeProjectSkipLogged) {
90
+ homeProjectSkipLogged = true;
91
+ log2("[magic-context] home project memory disabled; skipping memory features");
92
+ }
93
+ return true;
94
+ }
95
+ }
96
+ var execFileSyncForIdentity = execFileSync;
97
+ var userHomeDirectoryForIdentity = () => homedir();
98
+ var nowMs = () => Date.now();
99
+ var filesystemProbeObserverForTests;
100
+
101
+ class ProjectIdentityError extends Error {
102
+ errorClass;
103
+ rawDirectory;
104
+ constructor(errorClass, rawDirectory, message, cause) {
105
+ super(message);
106
+ this.name = "ProjectIdentityError";
107
+ this.errorClass = errorClass;
108
+ this.rawDirectory = rawDirectory;
109
+ if (cause) {
110
+ this.cause = cause;
111
+ }
112
+ }
113
+ }
114
+ function asError(error) {
115
+ return error instanceof Error ? error : undefined;
116
+ }
117
+ function getErrorCode(error) {
118
+ if (error === null || typeof error !== "object" || !("code" in error)) {
119
+ return;
120
+ }
121
+ const code = error.code;
122
+ return typeof code === "string" ? code : undefined;
123
+ }
124
+ function getErrorSignal(error) {
125
+ if (error === null || typeof error !== "object" || !("signal" in error)) {
126
+ return;
127
+ }
128
+ const signal = error.signal;
129
+ return typeof signal === "string" ? signal : undefined;
130
+ }
131
+ function getErrorKilled(error) {
132
+ if (error === null || typeof error !== "object" || !("killed" in error)) {
133
+ return false;
134
+ }
135
+ return error.killed === true;
136
+ }
137
+ function getErrorStderr(error) {
138
+ if (error === null || typeof error !== "object" || !("stderr" in error)) {
139
+ return "";
140
+ }
141
+ const stderr = error.stderr;
142
+ if (typeof stderr === "string") {
143
+ return stderr;
144
+ }
145
+ if (Buffer.isBuffer(stderr)) {
146
+ return stderr.toString("utf8");
147
+ }
148
+ return "";
149
+ }
150
+ function directoryFallback(directory) {
151
+ const canonical = path3.resolve(directory);
152
+ const hash = createHash2("md5").update(canonical, "utf8").digest("hex").slice(0, 12);
153
+ return `dir:${hash}`;
154
+ }
155
+ function rememberedIdentityOrDirectoryFallback(canonical) {
156
+ return readRememberedGitIdentity(canonical) ?? directoryFallback(canonical);
157
+ }
158
+ function assertDirectoryUsable(canonicalDirectory, rawDirectory) {
159
+ try {
160
+ const stat = statSync(canonicalDirectory);
161
+ if (!stat.isDirectory()) {
162
+ throw new ProjectIdentityError("unknown", rawDirectory, `Project path is not a directory: ${canonicalDirectory}`);
163
+ }
164
+ } catch (error) {
165
+ if (error instanceof ProjectIdentityError) {
166
+ throw error;
167
+ }
168
+ const code = getErrorCode(error);
169
+ if (code === "EACCES" || code === "EPERM") {
170
+ throw new ProjectIdentityError("permission_denied", rawDirectory, `Permission denied while accessing project directory: ${canonicalDirectory}`, asError(error));
171
+ }
172
+ throw new ProjectIdentityError("unknown", rawDirectory, `Unable to access project directory: ${canonicalDirectory}`, asError(error));
173
+ }
174
+ }
175
+ function isGitTimeoutError(error) {
176
+ const code = getErrorCode(error);
177
+ const signal = getErrorSignal(error);
178
+ return code === "ETIMEDOUT" || signal === "SIGTERM" || signal === "SIGKILL" || getErrorKilled(error);
179
+ }
180
+ function hasUnbornHead(directory) {
181
+ const options = {
182
+ cwd: directory,
183
+ encoding: "utf8",
184
+ env: { ...process.env, LC_ALL: "C", LANG: "C" },
185
+ stdio: ["ignore", "pipe", "pipe"],
186
+ timeout: GIT_TIMEOUT_MS,
187
+ windowsHide: true
188
+ };
189
+ try {
190
+ execFileSyncForIdentity("git", ["rev-parse", "--git-dir"], options);
191
+ try {
192
+ execFileSyncForIdentity("git", ["rev-parse", "--verify", "--quiet", "HEAD"], options);
193
+ return false;
194
+ } catch (error) {
195
+ return !isGitTimeoutError(error) && typeof error === "object" && error !== null && "status" in error && error.status === 1 && getErrorStderr(error) === "";
196
+ }
197
+ } catch {
198
+ return false;
199
+ }
200
+ }
201
+ function classifyGitError(error, rawDirectory) {
202
+ if (isGitTimeoutError(error)) {
203
+ return new ProjectIdentityError("git_timeout", rawDirectory, `git rev-list timed out after ${GIT_TIMEOUT_MS}ms`, asError(error));
204
+ }
205
+ const code = getErrorCode(error);
206
+ if (code === "ENOENT") {
207
+ return new ProjectIdentityError("git_missing", rawDirectory, "git binary is not available in PATH", asError(error));
208
+ }
209
+ if (code === "EACCES" || code === "EPERM") {
210
+ return new ProjectIdentityError("permission_denied", rawDirectory, "Permission denied while spawning git", asError(error));
211
+ }
212
+ const stderr = getErrorStderr(error).toLowerCase();
213
+ if (stderr.includes("detected dubious ownership")) {
214
+ return new ProjectIdentityError("dubious_ownership", rawDirectory, "git refused to read the repository because it detected dubious ownership", asError(error));
215
+ }
216
+ if (stderr.includes("not a git repository") || stderr.includes("does not have any commits yet") || stderr.includes("ambiguous argument 'head'") || stderr.includes("unknown revision or path")) {
217
+ return new ProjectIdentityError("not_git_repo", rawDirectory, "Directory has no git root commit; caller may use directory fallback", asError(error));
218
+ }
219
+ return new ProjectIdentityError("unknown", rawDirectory, "git rev-list failed while resolving project identity", asError(error));
220
+ }
221
+ function resolveProjectIdentityStrict(directory, allowHomeProject = homeProjectPermission) {
222
+ assertProjectAllowed(directory, allowHomeProject);
223
+ const canonical = path3.resolve(directory);
224
+ const cached = identityCache.get(canonical);
225
+ if (cached !== undefined) {
226
+ return cached;
227
+ }
228
+ assertDirectoryUsable(canonical, directory);
229
+ if (!hasGitDir(canonical)) {
230
+ throw new ProjectIdentityError("not_git_repo", directory, "Directory has no git metadata; caller may use directory fallback");
231
+ }
232
+ let output;
233
+ try {
234
+ output = execFileSyncForIdentity("git", ["rev-list", "--max-parents=0", "HEAD"], {
235
+ cwd: canonical,
236
+ encoding: "utf8",
237
+ env: { ...process.env, LC_ALL: "C", LANG: "C" },
238
+ stdio: ["ignore", "pipe", "pipe"],
239
+ timeout: GIT_TIMEOUT_MS,
240
+ windowsHide: true
241
+ });
242
+ } catch (error) {
243
+ const classified = classifyGitError(error, directory);
244
+ if (classified.errorClass === "not_git_repo" && hasUnbornHead(canonical)) {
245
+ throw new ProjectIdentityError("no_commits", directory, "Git repository has no commits yet");
246
+ }
247
+ throw classified;
248
+ }
249
+ const rootCommit = output.split(`
250
+ `).map((line) => line.trim().slice(0, 64)).filter((line) => /^[0-9a-f]{7,64}$/.test(line)).sort()[0];
251
+ if (!rootCommit) {
252
+ throw new ProjectIdentityError("unknown", directory, "git rev-list returned no valid root commit hash");
253
+ }
254
+ const identity = `git:${rootCommit}`;
255
+ identityCache.set(canonical, identity);
256
+ lastKnownGitIdentityCache.set(canonical, identity);
257
+ rememberGitIdentity(canonical, identity);
258
+ const root = gitRootDirectory(canonical);
259
+ if (root && root !== canonical)
260
+ rememberGitIdentity(root, identity);
261
+ transientFailureCooldown.delete(canonical);
262
+ dubiousOwnershipFallbackDirectories.delete(canonical);
263
+ transientGitIdentityReuseLoggedDirectories.delete(canonical);
264
+ return identity;
265
+ }
266
+ function shouldUseDirectoryFallback(error) {
267
+ return error.errorClass !== "home_project_disabled";
268
+ }
269
+ function getActiveCooldown(canonical) {
270
+ const until = transientFailureCooldown.get(canonical);
271
+ if (until === undefined)
272
+ return;
273
+ if (nowMs() < until)
274
+ return until;
275
+ transientFailureCooldown.delete(canonical);
276
+ return;
277
+ }
278
+ function lastKnownGitIdentity(canonical) {
279
+ return lastKnownGitIdentityCache.get(canonical) ?? identityCache.get(canonical) ?? readRememberedGitIdentity(canonical);
280
+ }
281
+ function nearestLastKnownGitIdentity(canonical) {
282
+ const visited = new Set;
283
+ const walk = (start) => {
284
+ let current = start;
285
+ while (!visited.has(current)) {
286
+ visited.add(current);
287
+ const cached = lastKnownGitIdentity(current);
288
+ if (cached !== undefined)
289
+ return { identity: cached, source: current };
290
+ if (existsSync(path3.join(current, ".git")))
291
+ break;
292
+ const parent = path3.dirname(current);
293
+ if (parent === current)
294
+ break;
295
+ current = parent;
296
+ }
297
+ return;
298
+ };
299
+ const exactOrAncestor = walk(canonical);
300
+ if (exactOrAncestor)
301
+ return exactOrAncestor;
302
+ try {
303
+ const realCanonical = realpathSync2.native(canonical);
304
+ if (realCanonical !== canonical)
305
+ return walk(realCanonical);
306
+ } catch {}
307
+ return;
308
+ }
309
+ function reuseLastKnownGitIdentity(canonical) {
310
+ const cached = nearestLastKnownGitIdentity(canonical);
311
+ if (cached === undefined)
312
+ return;
313
+ if (!transientGitIdentityReuseLoggedDirectories.has(canonical)) {
314
+ transientGitIdentityReuseLoggedDirectories.add(canonical);
315
+ const sourceNote = cached.source === canonical ? "" : ` from ancestor ${cached.source}`;
316
+ log2(`[magic-context] git identity resolution is temporarily unavailable for ${canonical}; reusing the last successful project identity${sourceNote} to avoid splitting project-scoped memory`);
317
+ }
318
+ return cached.identity;
319
+ }
320
+ function formatDubiousOwnershipWarning(canonical) {
321
+ return `Magic Context: git refused to read ${canonical} (dubious ownership — the repo is owned by a different user). Memory features are paused unless a previous git identity is available. Fix: git config --global --add safe.directory ${canonical}`;
322
+ }
323
+ function recordDubiousOwnershipFallback(canonical) {
324
+ dubiousOwnershipFallbackDirectories.add(canonical);
325
+ if (dubiousOwnershipLoggedDirectories.has(canonical))
326
+ return;
327
+ dubiousOwnershipLoggedDirectories.add(canonical);
328
+ log2(`[magic-context] ${formatDubiousOwnershipWarning(canonical)}`);
329
+ }
330
+ function takeDubiousOwnershipProjectIdentityWarning(directory) {
331
+ const canonical = path3.resolve(directory);
332
+ if (!dubiousOwnershipFallbackDirectories.has(canonical))
333
+ return null;
334
+ if (dubiousOwnershipWarnedDirectories.has(canonical))
335
+ return null;
336
+ dubiousOwnershipWarnedDirectories.add(canonical);
337
+ return formatDubiousOwnershipWarning(canonical);
338
+ }
339
+ function canonicalUserHomeDirectory() {
340
+ const homeDirectory = userHomeDirectoryForIdentity();
341
+ try {
342
+ return realpathSync2.native(homeDirectory);
343
+ } catch {
344
+ return homeDirectory;
345
+ }
346
+ }
347
+ function isUserHomeDirectory(directory) {
348
+ if (projectDirectoryKey(directory) === projectDirectoryKey(userHomeDirectoryForIdentity()))
349
+ return true;
350
+ try {
351
+ return projectDirectoryKey(realpathSync2.native(path3.resolve(directory))) === projectDirectoryKey(canonicalUserHomeDirectory());
352
+ } catch {
353
+ return false;
354
+ }
355
+ }
356
+ function assertProjectAllowed(directory, allowHomeProject) {
357
+ const canonical = path3.resolve(directory);
358
+ if (!allowHomeProject && (isUserHomeDirectory(directory) || isUserHomeDirectory(gitRootDirectory(canonical) ?? canonical))) {
359
+ throw new ProjectIdentityError("home_project_disabled", directory, "Home project memory is disabled; set allow_home_project to opt in");
360
+ }
361
+ }
362
+ function resolveProjectIdentity(directory, allowHomeProject = homeProjectPermission) {
363
+ assertProjectAllowed(directory, allowHomeProject);
364
+ const canonical = path3.resolve(directory);
365
+ const cachedFallback = directoryFallbackCache.get(canonical);
366
+ if (cachedFallback !== undefined) {
367
+ if (!hasGitDir(canonical)) {
368
+ return cachedFallback;
369
+ }
370
+ directoryFallbackCache.delete(canonical);
371
+ }
372
+ if (getActiveCooldown(canonical) !== undefined) {
373
+ if (hasGitDir(canonical)) {
374
+ const cachedGitIdentity = reuseLastKnownGitIdentity(canonical);
375
+ if (cachedGitIdentity !== undefined) {
376
+ return cachedGitIdentity;
377
+ }
378
+ throw new ProjectIdentityError("git_identity_unavailable", directory, "Git identity unavailable; memory features paused until the retry cooldown expires");
379
+ }
380
+ return rememberedIdentityOrDirectoryFallback(canonical);
381
+ }
382
+ try {
383
+ return resolveProjectIdentityStrict(directory, allowHomeProject);
384
+ } catch (error) {
385
+ if (error instanceof ProjectIdentityError && shouldUseDirectoryFallback(error)) {
386
+ if (error.errorClass === "no_commits")
387
+ return directoryFallback(canonical);
388
+ if (!hasGitDir(canonical)) {
389
+ if (error.errorClass === "permission_denied")
390
+ throw error;
391
+ const resolved = rememberedIdentityOrDirectoryFallback(canonical);
392
+ directoryFallbackCache.set(canonical, resolved);
393
+ transientFailureCooldown.delete(canonical);
394
+ return resolved;
395
+ }
396
+ transientFailureCooldown.set(canonical, nowMs() + TRANSIENT_FAILURE_COOLDOWN_MS);
397
+ const cachedGitIdentity = reuseLastKnownGitIdentity(canonical);
398
+ if (error.errorClass === "dubious_ownership")
399
+ recordDubiousOwnershipFallback(canonical);
400
+ if (cachedGitIdentity !== undefined) {
401
+ return cachedGitIdentity;
402
+ }
403
+ throw error;
404
+ }
405
+ throw error;
406
+ }
407
+ }
408
+ function resolveProjectIdentityOrFallback(directory, allowHomeProject = homeProjectPermission) {
409
+ try {
410
+ return resolveProjectIdentity(directory, allowHomeProject);
411
+ } catch (error) {
412
+ const canonical = path3.resolve(directory);
413
+ if (hasGitDir(canonical) || error instanceof ProjectIdentityError && error.errorClass === "home_project_disabled")
414
+ throw error;
415
+ const fallback = rememberedIdentityOrDirectoryFallback(canonical);
416
+ const message = error instanceof Error ? error.message : String(error);
417
+ log2(`[magic-context] project identity resolution failed for ${canonical}; using directory fallback ${fallback}: ${message}`);
418
+ return fallback;
419
+ }
420
+ }
421
+ function hasGitDir(canonical) {
422
+ if (hasGitDirInAncestorChain(canonical)) {
423
+ return true;
424
+ }
425
+ try {
426
+ const realCanonical = realpathSync2.native(canonical);
427
+ return realCanonical !== canonical && hasGitDirInAncestorChain(realCanonical);
428
+ } catch {
429
+ return false;
430
+ }
431
+ }
432
+ function gitRootInAncestorChain(startDirectory) {
433
+ let current = startDirectory;
434
+ while (true) {
435
+ if (existsSync(path3.join(current, ".git"))) {
436
+ try {
437
+ return realpathSync2.native(current);
438
+ } catch {
439
+ return path3.resolve(current);
440
+ }
441
+ }
442
+ const parent = path3.dirname(current);
443
+ if (parent === current) {
444
+ return null;
445
+ }
446
+ current = parent;
447
+ }
448
+ }
449
+ function hasGitDirInAncestorChain(startDirectory) {
450
+ return gitRootInAncestorChain(startDirectory) !== null;
451
+ }
452
+ function gitRootDirectory(canonical) {
453
+ const direct = gitRootInAncestorChain(canonical);
454
+ if (direct)
455
+ return direct;
456
+ try {
457
+ const realCanonical = realpathSync2.native(canonical);
458
+ return realCanonical === canonical ? null : gitRootInAncestorChain(realCanonical);
459
+ } catch {
460
+ return null;
461
+ }
462
+ }
463
+ function directoryHasGitMetadata(directory) {
464
+ return gitRootDirectory(path3.resolve(directory)) !== null;
465
+ }
466
+ function describeUnresolvedProjectIdentity(directory) {
467
+ const resolvedDirectory = path3.resolve(directory);
468
+ const canonicalHome = canonicalUserHomeDirectory();
469
+ const canonicalDirectory = (() => {
470
+ try {
471
+ return realpathSync2.native(resolvedDirectory);
472
+ } catch {
473
+ return resolvedDirectory;
474
+ }
475
+ })();
476
+ if (isUserHomeDirectory(directory) || gitRootDirectory(canonicalDirectory) === canonicalHome) {
477
+ return `this session runs in your home directory (${canonicalHome}), which Magic Context does not treat as a project. ` + "Start OpenCode inside a project folder, or set `allow_home_project: true` in the user-level " + "magic-context.jsonc (~/.config/cortexkit/) to give home sessions their own memory.";
478
+ }
479
+ if (hasGitDir(resolvedDirectory))
480
+ return `git identity resolution for ${resolvedDirectory} is temporarily unavailable. Memory features are paused; retry after git access recovers.`;
481
+ return `the session directory ${resolvedDirectory} could not be read as a project.`;
482
+ }
483
+ function isUsableProjectIdentity(identity) {
484
+ return typeof identity === "string" && identity.trim().length > 0;
485
+ }
486
+ function resolveProjectIdentityForSession(directory, allowHomeProject = homeProjectPermission) {
487
+ const resolvedDirectory = path3.resolve(directory);
488
+ const cacheKey = `${allowHomeProject ? "1" : "0"}\x00${resolvedDirectory}`;
489
+ const cached = sessionIdentityCache.get(cacheKey);
490
+ if (cached && (cached.revalidateAt === null || nowMs() < cached.revalidateAt) && !(cached.identity?.startsWith("dir:") && hasGitDir(resolvedDirectory))) {
491
+ return cached.identity;
492
+ }
493
+ sessionIdentityCache.delete(cacheKey);
494
+ filesystemProbeObserverForTests?.();
495
+ const canonicalDirectory = (() => {
496
+ try {
497
+ filesystemProbeObserverForTests?.();
498
+ return realpathSync2.native(resolvedDirectory);
499
+ } catch {
500
+ return resolvedDirectory;
501
+ }
502
+ })();
503
+ filesystemProbeObserverForTests?.();
504
+ const homeRoot = gitRootDirectory(canonicalDirectory);
505
+ const inheritsHomeRepository = homeRoot !== null && isUserHomeDirectory(homeRoot);
506
+ let identity;
507
+ if (!allowHomeProject && (isUserHomeDirectory(directory) || inheritsHomeRepository)) {
508
+ identity = undefined;
509
+ } else {
510
+ try {
511
+ identity = resolveProjectIdentityOrFallback(isUserHomeDirectory(directory) ? canonicalUserHomeDirectory() : directory, allowHomeProject);
512
+ } catch (error) {
513
+ if (!(error instanceof ProjectIdentityError))
514
+ throw error;
515
+ const reason = error.errorClass === "git_identity_unavailable" ? pausedIdentityReasons.get(resolvedDirectory) ?? error.errorClass : error.errorClass;
516
+ pausedIdentityReasons.set(resolvedDirectory, reason);
517
+ const logKey = `${resolvedDirectory}\x00${reason}`;
518
+ if (!pausedIdentityLogged.has(logKey)) {
519
+ pausedIdentityLogged.add(logKey);
520
+ log2(`[magic-context] memory features paused for ${resolvedDirectory}: ${reason}`);
521
+ }
522
+ identity = undefined;
523
+ }
524
+ }
525
+ if (identity !== undefined)
526
+ pausedIdentityReasons.delete(resolvedDirectory);
527
+ sessionIdentityCache.set(cacheKey, {
528
+ identity,
529
+ revalidateAt: identity?.startsWith("git:") === true ? null : nowMs() + TRANSIENT_FAILURE_COOLDOWN_MS
530
+ });
531
+ return identity;
532
+ }
533
+ function normalizeStoredProjectPath(rawOrStored) {
534
+ if (rawOrStored.startsWith("git:") || rawOrStored.startsWith("dir:")) {
535
+ return rawOrStored;
536
+ }
537
+ try {
538
+ return resolveProjectIdentity(rawOrStored);
539
+ } catch {
540
+ return rawOrStored;
541
+ }
542
+ }
543
+ function storedPathBelongsToIdentity(storedProjectPath, projectIdentity) {
544
+ return storedProjectPath === projectIdentity || normalizeStoredProjectPath(storedProjectPath) === projectIdentity;
545
+ }
546
+
547
+ // src/plugin/boot-quiet.ts
548
+ var BOOT_QUIET_MS = 120000;
549
+ var bootQuietUntilMs = 0;
550
+ function beginBootQuietPeriod(now = Date.now()) {
551
+ if (bootQuietUntilMs === 0)
552
+ bootQuietUntilMs = now + BOOT_QUIET_MS;
553
+ }
554
+ function bootQuietRemainingMs(now = Date.now()) {
555
+ return Math.max(0, bootQuietUntilMs - now);
556
+ }
557
+ function scheduleAfterBootQuiet(task, additionalDelayMs = 0) {
558
+ const timer = setTimeout(task, bootQuietRemainingMs() + Math.max(0, additionalDelayMs));
559
+ timer.unref?.();
560
+ return timer;
561
+ }
562
+ function setBootQuietPeriodForTests(startAtMs) {
563
+ bootQuietUntilMs = startAtMs === null ? 0 : startAtMs + BOOT_QUIET_MS;
564
+ }
565
+
566
+ export { canonicalProjectDirectory, setHomeProjectPermission, shouldSkipHomeProjectMemory, ProjectIdentityError, resolveProjectIdentityStrict, takeDubiousOwnershipProjectIdentityWarning, isUserHomeDirectory, resolveProjectIdentity, directoryHasGitMetadata, describeUnresolvedProjectIdentity, isUsableProjectIdentity, resolveProjectIdentityForSession, normalizeStoredProjectPath, storedPathBelongsToIdentity, beginBootQuietPeriod, bootQuietRemainingMs, scheduleAfterBootQuiet, setBootQuietPeriodForTests };
@@ -1,18 +1,3 @@
1
- // src/shared/protected-tools-policy.ts
2
- var DEFAULT_PROTECTED_TOOLS = {
3
- todowrite: 1,
4
- ctx_reduce: 3
5
- };
6
- function normalizeProtectedToolName(name) {
7
- return (name ?? "").toLowerCase().replace(/^mcp_/, "");
8
- }
9
- function mergeProtectedTools(...maps) {
10
- return Object.fromEntries([DEFAULT_PROTECTED_TOOLS, ...maps].flatMap((map) => Object.entries(map ?? {}).map(([name, count]) => [
11
- normalizeProtectedToolName(name),
12
- count
13
- ])));
14
- }
15
-
16
1
  // src/shared/historian-tool-template.ts
17
2
  class Parser {
18
3
  source;
@@ -92,7 +77,7 @@ class Parser {
92
77
  } else
93
78
  break;
94
79
  }
95
- const expression = { steps, cap: 300 };
80
+ const expression = { steps };
96
81
  if (this.take(".each(")) {
97
82
  if (relative)
98
83
  return this.error();
@@ -159,9 +144,23 @@ function compiled(source) {
159
144
  function oneLine(value) {
160
145
  return value.replace(/[\r\n\u2028\u2029]+/g, " ");
161
146
  }
162
- function truncate(value, cap) {
147
+ function truncate(value, cap, legacyPreview = false) {
163
148
  const chars = Array.from(oneLine(value));
164
- return chars.length > cap ? `${chars.slice(0, cap).join("")}…` : chars.join("");
149
+ if (cap === undefined || chars.length <= cap)
150
+ return chars.join("");
151
+ if (legacyPreview)
152
+ return `${chars.slice(0, cap).join("")}…`;
153
+ let end = 0;
154
+ for (let i = 0;i < Math.min(cap, chars.length); i++) {
155
+ if (!".!?。!?".includes(chars[i]))
156
+ continue;
157
+ let next = i + 1;
158
+ while (next < chars.length && `"'”’)]`.includes(chars[next]))
159
+ next++;
160
+ if (next <= cap && ("。!?".includes(chars[i]) || next === chars.length || /[ \t]/.test(chars[next])))
161
+ end = next;
162
+ }
163
+ return `${end ? `${chars.slice(0, end).join("")} ` : ""}[… ${chars.length - end} more characters]`;
165
164
  }
166
165
  function scalar(value) {
167
166
  if (value === undefined)
@@ -178,10 +177,11 @@ function compactJson(value) {
178
177
  function field(value, key) {
179
178
  return value !== null && typeof value === "object" && !Array.isArray(value) && Object.hasOwn(value, key) ? value[key] : undefined;
180
179
  }
181
- function render(nodes, root) {
180
+ function render(nodes, root, legacyPreview) {
182
181
  return nodes.map((node) => {
183
182
  if (typeof node === "string")
184
183
  return node;
184
+ const cap = node.cap ?? (legacyPreview ? 300 : undefined);
185
185
  let value = root;
186
186
  let list = false;
187
187
  for (const step of node.steps) {
@@ -195,19 +195,19 @@ function render(nodes, root) {
195
195
  }
196
196
  }
197
197
  if (node.count)
198
- return truncate(Array.isArray(value) ? String(value.length) : "", node.cap);
198
+ return truncate(Array.isArray(value) ? String(value.length) : "", cap, legacyPreview);
199
199
  if (node.each || list || node.join !== undefined) {
200
200
  if (!Array.isArray(value))
201
201
  return "";
202
- const elements = value.slice(0, 10).map((item) => truncate(node.each ? render(node.each, item) : scalar(item), 300));
203
- if (value.length > 10)
202
+ const elements = value.slice(0, legacyPreview ? 10 : undefined).map((item) => truncate(node.each ? render(node.each, item, legacyPreview) : scalar(item), legacyPreview ? 300 : undefined, legacyPreview));
203
+ if (legacyPreview && value.length > 10)
204
204
  elements.push(`… +${value.length - 10} more`);
205
- return truncate(elements.join(node.join ?? (node.each ? "; " : ", ")), node.cap);
205
+ return truncate(elements.join(node.join ?? (node.each ? "; " : ", ")), cap, legacyPreview);
206
206
  }
207
- return truncate(scalar(value), node.cap);
207
+ return truncate(scalar(value), cap, legacyPreview);
208
208
  }).join("");
209
209
  }
210
- function renderToolTemplate(source, input, output) {
210
+ function renderToolTemplate(source, input, output, legacyPreview = false) {
211
211
  const nodes = compiled(source);
212
212
  if (!nodes)
213
213
  return null;
@@ -222,8 +222,8 @@ function renderToolTemplate(source, input, output) {
222
222
  }
223
223
  }
224
224
  const root = { input, output: structured };
225
- const bareOutputNodes = nodes.map((node) => typeof node !== "string" && node.steps.length === 1 && ("field" in node.steps[0]) && node.steps[0].field === "output" && !node.each && !node.count && node.join === undefined ? truncate(text ?? "", node.cap) : node);
226
- return truncate(render(bareOutputNodes, root), 1000);
225
+ const bareOutputNodes = nodes.map((node) => typeof node !== "string" && node.steps.length === 1 && ("field" in node.steps[0]) && node.steps[0].field === "output" && !node.each && !node.count && node.join === undefined ? truncate(text ?? "", node.cap ?? (legacyPreview ? 300 : undefined), legacyPreview) : node);
226
+ return truncate(render(bareOutputNodes, root, legacyPreview), legacyPreview ? 1000 : undefined, legacyPreview);
227
227
  }
228
228
 
229
- export { toolTemplateError, renderToolTemplate, DEFAULT_PROTECTED_TOOLS, normalizeProtectedToolName, mergeProtectedTools };
229
+ export { toolTemplateError, renderToolTemplate };
@@ -1,13 +1,13 @@
1
1
  import {
2
- sessionLog
3
- } from "./index-hybnrwq0.js";
2
+ sessionLog2
3
+ } from "./index-8j7gqj40.js";
4
4
  import {
5
5
  renderUserFacingFailure,
6
6
  userFacingFailureCode,
7
7
  clearEmergencyRecovery,
8
8
  dropSlot,
9
9
  executeContextRecomp
10
- } from "./index-sjthx78w.js";
10
+ } from "./index-692jzy0p.js";
11
11
 
12
12
  // src/hooks/magic-context/recomp-orchestrator.ts
13
13
  function resolveLiveModelKey(liveSessionState, sessionId) {
@@ -126,7 +126,7 @@ async function runManagedRecomp2(ctx, sessionId, options) {
126
126
  return message;
127
127
  } catch (error) {
128
128
  const failure = renderUserFacingFailure("recomp_unavailable");
129
- sessionLog(sessionId, `recomp failed code=${userFacingFailureCode("recomp_unavailable")}`, error);
129
+ sessionLog2(sessionId, `recomp failed code=${userFacingFailureCode("recomp_unavailable")}`, error);
130
130
  setRecompTerminal2(ctx.liveSessionState, sessionId, "failed", failure);
131
131
  return `## Magic Recomp — Failed
132
132