@cortexkit/opencode-magic-context 0.47.0 → 0.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/dist/agents/magic-context-prompt.d.ts +1 -1
  2. package/dist/agents/magic-context-prompt.d.ts.map +1 -1
  3. package/dist/{announcement-y35wzg2r.js → announcement-fp14dw0n.js} +3 -2
  4. package/dist/auto-search-worker.js +27 -30
  5. package/dist/config/index.d.ts.map +1 -1
  6. package/dist/config/mural-model-deprecation.d.ts +15 -0
  7. package/dist/config/mural-model-deprecation.d.ts.map +1 -0
  8. package/dist/config/project-security.d.ts +0 -3
  9. package/dist/config/project-security.d.ts.map +1 -1
  10. package/dist/config/schema/magic-context.d.ts +10 -6
  11. package/dist/config/schema/magic-context.d.ts.map +1 -1
  12. package/dist/{conflict-warning-hook-z44ynfz7.js → conflict-warning-hook-kzx4dmk1.js} +12 -10
  13. package/dist/{context-wq4ffwyb.js → context-nj5f293n.js} +2765 -1925
  14. package/dist/{derive-budgets-ke12jnnh.js → derive-budgets-qz5rrr08.js} +4 -3
  15. package/dist/embedding-activity-g1dhes6g.js +10 -0
  16. package/dist/embedding-backfill-aetxv1vt.js +21 -0
  17. package/dist/embedding-cache-mgyr73ef.js +16 -0
  18. package/dist/embedding-worker.js +11 -9
  19. package/dist/features/magic-context/compaction-marker.d.ts.map +1 -1
  20. package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts +1 -0
  21. package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts.map +1 -1
  22. package/dist/features/magic-context/dreamer/task-config.d.ts +3 -3
  23. package/dist/features/magic-context/dreamer/task-config.d.ts.map +1 -1
  24. package/dist/features/magic-context/dreamer/task-executor.d.ts +1 -1
  25. package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
  26. package/dist/features/magic-context/dreamer/task-registry.d.ts +1 -0
  27. package/dist/features/magic-context/dreamer/task-registry.d.ts.map +1 -1
  28. package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
  29. package/dist/features/magic-context/git-commits/search-git-commits.d.ts +2 -0
  30. package/dist/features/magic-context/git-commits/search-git-commits.d.ts.map +1 -1
  31. package/dist/features/magic-context/message-index-async.d.ts +16 -3
  32. package/dist/features/magic-context/message-index-async.d.ts.map +1 -1
  33. package/dist/features/magic-context/message-index-bounded.d.ts +17 -0
  34. package/dist/features/magic-context/message-index-bounded.d.ts.map +1 -0
  35. package/dist/features/magic-context/message-index.d.ts +7 -1
  36. package/dist/features/magic-context/message-index.d.ts.map +1 -1
  37. package/dist/features/magic-context/mural/render-trigger.d.ts +7 -4
  38. package/dist/features/magic-context/mural/render-trigger.d.ts.map +1 -1
  39. package/dist/features/magic-context/pi-content-decisions.d.ts +7 -1
  40. package/dist/features/magic-context/pi-content-decisions.d.ts.map +1 -1
  41. package/dist/features/magic-context/search-rerank.d.ts +35 -0
  42. package/dist/features/magic-context/search-rerank.d.ts.map +1 -0
  43. package/dist/features/magic-context/search.d.ts +40 -0
  44. package/dist/features/magic-context/search.d.ts.map +1 -1
  45. package/dist/features/magic-context/session-activity.d.ts.map +1 -1
  46. package/dist/features/magic-context/smart-notes/runner.d.ts +1 -0
  47. package/dist/features/magic-context/smart-notes/runner.d.ts.map +1 -1
  48. package/dist/features/magic-context/storage-db.d.ts.map +1 -1
  49. package/dist/features/magic-context/storage-meta-persisted.d.ts +13 -2
  50. package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
  51. package/dist/features/magic-context/storage-meta-session.d.ts +7 -1
  52. package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
  53. package/dist/features/magic-context/storage-meta.d.ts +1 -1
  54. package/dist/features/magic-context/storage-meta.d.ts.map +1 -1
  55. package/dist/features/magic-context/storage-session-tables.d.ts +2 -0
  56. package/dist/features/magic-context/storage-session-tables.d.ts.map +1 -1
  57. package/dist/features/magic-context/storage-tag-identity-revision.d.ts +50 -0
  58. package/dist/features/magic-context/storage-tag-identity-revision.d.ts.map +1 -0
  59. package/dist/features/magic-context/storage-tags.d.ts +153 -4
  60. package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
  61. package/dist/features/magic-context/storage.d.ts +1 -1
  62. package/dist/features/magic-context/storage.d.ts.map +1 -1
  63. package/dist/features/magic-context/subagent-token-capture.d.ts.map +1 -1
  64. package/dist/features/magic-context/tagger.d.ts +2 -0
  65. package/dist/features/magic-context/tagger.d.ts.map +1 -1
  66. package/dist/features/magic-context/transform-decision-log.d.ts +4 -1
  67. package/dist/features/magic-context/transform-decision-log.d.ts.map +1 -1
  68. package/dist/harness-e4avh192.js +10 -0
  69. package/dist/hooks/magic-context/active-anthropic-turn.d.ts +2 -0
  70. package/dist/hooks/magic-context/active-anthropic-turn.d.ts.map +1 -1
  71. package/dist/hooks/magic-context/auto-search-deadline.d.ts.map +1 -1
  72. package/dist/hooks/magic-context/auto-search-replay.fixture.d.ts +24 -0
  73. package/dist/hooks/magic-context/auto-search-replay.fixture.d.ts.map +1 -0
  74. package/dist/hooks/magic-context/auto-search-runner.d.ts +1 -1
  75. package/dist/hooks/magic-context/auto-search-runner.d.ts.map +1 -1
  76. package/dist/hooks/magic-context/auto-search-worker-client.d.ts +34 -3
  77. package/dist/hooks/magic-context/auto-search-worker-client.d.ts.map +1 -1
  78. package/dist/hooks/magic-context/command-handler.d.ts +3 -0
  79. package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
  80. package/dist/hooks/magic-context/compartment-runner-incremental.d.ts.map +1 -1
  81. package/dist/hooks/magic-context/compartment-runner-recomp.d.ts.map +1 -1
  82. package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
  83. package/dist/hooks/magic-context/emergency-fail-closed.d.ts +28 -0
  84. package/dist/hooks/magic-context/emergency-fail-closed.d.ts.map +1 -1
  85. package/dist/hooks/magic-context/event-handler.d.ts.map +1 -1
  86. package/dist/hooks/magic-context/historian-host-runner.d.ts +8 -0
  87. package/dist/hooks/magic-context/historian-host-runner.d.ts.map +1 -1
  88. package/dist/hooks/magic-context/hook.d.ts +3 -2
  89. package/dist/hooks/magic-context/hook.d.ts.map +1 -1
  90. package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
  91. package/dist/hooks/magic-context/latest-thinking-recovery.d.ts +7 -0
  92. package/dist/hooks/magic-context/latest-thinking-recovery.d.ts.map +1 -1
  93. package/dist/hooks/magic-context/lkg-persist.d.ts +4 -3
  94. package/dist/hooks/magic-context/lkg-persist.d.ts.map +1 -1
  95. package/dist/hooks/magic-context/lkg-replay.d.ts +13 -8
  96. package/dist/hooks/magic-context/lkg-replay.d.ts.map +1 -1
  97. package/dist/hooks/magic-context/lkg-slot.d.ts +139 -2
  98. package/dist/hooks/magic-context/lkg-slot.d.ts.map +1 -1
  99. package/dist/hooks/magic-context/message-search-accepting-silent-worker.fixture.d.ts +2 -0
  100. package/dist/hooks/magic-context/message-search-accepting-silent-worker.fixture.d.ts.map +1 -0
  101. package/dist/hooks/magic-context/oc-stall-r2-warmup-worker.fixture.d.ts +2 -0
  102. package/dist/hooks/magic-context/oc-stall-r2-warmup-worker.fixture.d.ts.map +1 -0
  103. package/dist/hooks/magic-context/oc-stall-search-review.fixture.d.ts +2 -0
  104. package/dist/hooks/magic-context/oc-stall-search-review.fixture.d.ts.map +1 -0
  105. package/dist/hooks/magic-context/opencode1-to-model-messages.fixture.d.ts +63 -0
  106. package/dist/hooks/magic-context/opencode1-to-model-messages.fixture.d.ts.map +1 -0
  107. package/dist/hooks/magic-context/pass-outcome.d.ts +1 -0
  108. package/dist/hooks/magic-context/pass-outcome.d.ts.map +1 -1
  109. package/dist/hooks/magic-context/provider-visible-parts.d.ts +45 -0
  110. package/dist/hooks/magic-context/provider-visible-parts.d.ts.map +1 -0
  111. package/dist/hooks/magic-context/raw-ordinal-warmup-silent-worker.fixture.d.ts +2 -0
  112. package/dist/hooks/magic-context/raw-ordinal-warmup-silent-worker.fixture.d.ts.map +1 -0
  113. package/dist/hooks/magic-context/raw-ordinal-warmup-worker.d.ts +2 -0
  114. package/dist/hooks/magic-context/raw-ordinal-warmup-worker.d.ts.map +1 -0
  115. package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts +87 -0
  116. package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts.map +1 -0
  117. package/dist/hooks/magic-context/read-session-chunk.d.ts +19 -1
  118. package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
  119. package/dist/hooks/magic-context/read-session-db.d.ts.map +1 -1
  120. package/dist/hooks/magic-context/read-session-formatting.d.ts +5 -0
  121. package/dist/hooks/magic-context/read-session-formatting.d.ts.map +1 -1
  122. package/dist/hooks/magic-context/read-session-raw.d.ts +118 -1
  123. package/dist/hooks/magic-context/read-session-raw.d.ts.map +1 -1
  124. package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts.map +1 -1
  125. package/dist/hooks/magic-context/reasoning-budget.d.ts.map +1 -1
  126. package/dist/hooks/magic-context/rust-mode-transform.d.ts +36 -0
  127. package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
  128. package/dist/hooks/magic-context/sentinel.d.ts +41 -1
  129. package/dist/hooks/magic-context/sentinel.d.ts.map +1 -1
  130. package/dist/hooks/magic-context/shared-compartment-boundaries.d.ts +8 -1
  131. package/dist/hooks/magic-context/shared-compartment-boundaries.d.ts.map +1 -1
  132. package/dist/hooks/magic-context/strict-thinking-prefix.d.ts +8 -0
  133. package/dist/hooks/magic-context/strict-thinking-prefix.d.ts.map +1 -0
  134. package/dist/hooks/magic-context/strip-content.d.ts +14 -2
  135. package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
  136. package/dist/hooks/magic-context/system-prompt-hash.d.ts +1 -0
  137. package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
  138. package/dist/hooks/magic-context/tag-messages.d.ts +8 -0
  139. package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
  140. package/dist/hooks/magic-context/tag-owner-warmup.d.ts +6 -0
  141. package/dist/hooks/magic-context/tag-owner-warmup.d.ts.map +1 -0
  142. package/dist/hooks/magic-context/tail-hygiene-walk.d.ts.map +1 -1
  143. package/dist/hooks/magic-context/token-count-exact.d.ts +35 -0
  144. package/dist/hooks/magic-context/token-count-exact.d.ts.map +1 -0
  145. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +13 -0
  146. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  147. package/dist/hooks/magic-context/transform.d.ts +9 -2
  148. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  149. package/dist/hooks/magic-context/wrapup-orchestrator.d.ts.map +1 -1
  150. package/dist/{index-q6hef7fh.js → index-0sahzkwr.js} +6 -19
  151. package/dist/{index-k5bdx1bx.js → index-0w56v4fm.js} +3 -5
  152. package/dist/{index-5gq3b2ya.js → index-1bt88epp.js} +227 -205
  153. package/dist/{index-cwf6s3ay.js → index-1g30axtz.js} +3279 -2907
  154. package/dist/{index-5a2r0p9f.js → index-1r0k9js3.js} +20 -13
  155. package/dist/index-2bvekkfy.js +11 -0
  156. package/dist/{index-6d9e1m08.js → index-2jcbj7r1.js} +13301 -13225
  157. package/dist/index-2jgwttpt.js +3269 -0
  158. package/dist/index-4dhv7mqz.js +131 -0
  159. package/dist/{index-sj29b3z2.js → index-4mjhqadz.js} +3 -3
  160. package/dist/{index-0c82743p.js → index-57mrqed8.js} +17 -15
  161. package/dist/{index-b35pxds2.js → index-58e3y90n.js} +1 -18
  162. package/dist/index-7jzrrxap.js +931 -0
  163. package/dist/index-8ajstryz.js +18 -0
  164. package/dist/{index-sfpzqvdz.js → index-8cd2j99z.js} +2 -3
  165. package/dist/{index-6wkcswft.js → index-9qjqq45k.js} +29 -19
  166. package/dist/{index-adwfkpex.js → index-9rt53q79.js} +23 -23
  167. package/dist/index-b7mv1jx3.js +1060 -0
  168. package/dist/index-d9vfe7xq.js +16 -0
  169. package/dist/{index-gg8j07zz.js → index-ezmszwbd.js} +8 -6
  170. package/dist/index-fb3zxn06.js +13 -0
  171. package/dist/index-fr0wbhdn.js +43 -0
  172. package/dist/{index-mc22ayvf.js → index-ghc9f0n7.js} +11 -9
  173. package/dist/index-gzcmtmar.js +171 -0
  174. package/dist/{index-w2t4ah5j.js → index-h2py7207.js} +6762 -7400
  175. package/dist/index-h2wc01qk.js +120 -0
  176. package/dist/index-h5zfkjyk.js +1277 -0
  177. package/dist/{index-92bp57hg.js → index-ha87j7a8.js} +1343 -149
  178. package/dist/index-hj2q50k0.js +856 -0
  179. package/dist/{index-wx8a6bw3.js → index-kb9nn0a0.js} +270 -53
  180. package/dist/index-kmpvemph.js +1314 -0
  181. package/dist/index-kp5qe690.js +3030 -0
  182. package/dist/{index-m5fe6jch.js → index-kq57tdf0.js} +152 -2453
  183. package/dist/{v2/server-fq7kq32k.js → index-mfkzp7qj.js} +1 -16
  184. package/dist/{v2/server-njt3np1k.js → index-nm6a8xpd.js} +220 -961
  185. package/dist/{index-hybnrwq0.js → index-nsjyysj0.js} +137 -130
  186. package/dist/index-nydv6g8r.js +3569 -0
  187. package/dist/index-pavzsdc6.js +17 -0
  188. package/dist/index-peshmj6h.js +152 -0
  189. package/dist/index-pxwp2hjk.js +571 -0
  190. package/dist/{v2/server-yr3zj7e7.js → index-qt1qqasc.js} +6 -7
  191. package/dist/{v2/server-51dv1pr5.js → index-qx53vezw.js} +301 -27
  192. package/dist/{index-rrrsepyw.js → index-s4j7t92z.js} +90 -85
  193. package/dist/{index-9pk9exrb.js → index-stbr4ce6.js} +18 -18
  194. package/dist/{index-fzbvakh0.js → index-tqf7yg27.js} +3 -3
  195. package/dist/index-vkbqdnkj.js +2307 -0
  196. package/dist/{index-8da2zjhz.js → index-z1tjp257.js} +9 -7
  197. package/dist/index.d.ts.map +1 -1
  198. package/dist/index.js +608 -349
  199. package/dist/logger-ewak5q1s.js +20 -0
  200. package/dist/message-index-bounded-h0mrd4pr.js +124 -0
  201. package/dist/{v2/message-time-backfill-1f9tzvcs.js → message-time-backfill-8x06r9kx.js} +8 -6
  202. package/dist/migration-worker.js +25 -18
  203. package/dist/{model-resolution-xhfmyyvy.js → model-resolution-nx97z3x7.js} +1 -1
  204. package/dist/plugin/dream-timer.d.ts +1 -1
  205. package/dist/plugin/dream-timer.d.ts.map +1 -1
  206. package/dist/plugin/hooks/create-session-hooks.d.ts +3 -0
  207. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  208. package/dist/plugin/host-stall-profiler-report.d.ts +1 -66
  209. package/dist/plugin/host-stall-profiler-report.d.ts.map +1 -1
  210. package/dist/plugin/host-stall-profiler.d.ts +2 -95
  211. package/dist/plugin/host-stall-profiler.d.ts.map +1 -1
  212. package/dist/plugin/messages-transform.d.ts +0 -13
  213. package/dist/plugin/messages-transform.d.ts.map +1 -1
  214. package/dist/plugin/rpc-handlers.d.ts.map +1 -1
  215. package/dist/plugin/tool-registry.d.ts.map +1 -1
  216. package/dist/project-embedding-registry-rtt0djyb.js +88 -0
  217. package/dist/raw-ordinal-warmup-worker.js +60 -0
  218. package/dist/{read-session-chunk-4jey7hpt.js → read-session-chunk-ty89v75e.js} +17 -9
  219. package/dist/read-session-raw-8sjbc9h0.js +60 -0
  220. package/dist/recomp-orchestrator-4f1yyd1q.js +57 -0
  221. package/dist/{v2/safe-notification-target-eb1n1vfb.js → safe-notification-target-q0cyrx3x.js} +4 -2
  222. package/dist/search-pz4f4wge.js +45 -0
  223. package/dist/{v2/send-session-notification-c0wtscea.js → send-session-notification-38cd5dqt.js} +10 -7
  224. package/dist/shared/auto-search-lifecycle.d.ts +14 -0
  225. package/dist/shared/auto-search-lifecycle.d.ts.map +1 -1
  226. package/dist/shared/conflict-detector.d.ts.map +1 -1
  227. package/dist/shared/host-stall-profiler-bun.d.ts +46 -0
  228. package/dist/shared/host-stall-profiler-bun.d.ts.map +1 -0
  229. package/dist/shared/host-stall-profiler-common.d.ts +58 -0
  230. package/dist/shared/host-stall-profiler-common.d.ts.map +1 -0
  231. package/dist/shared/host-stall-profiler-node.d.ts +36 -0
  232. package/dist/shared/host-stall-profiler-node.d.ts.map +1 -0
  233. package/dist/shared/host-stall-profiler-report.d.ts +68 -0
  234. package/dist/shared/host-stall-profiler-report.d.ts.map +1 -0
  235. package/dist/shared/host-stall-profiler.d.ts +5 -0
  236. package/dist/shared/host-stall-profiler.d.ts.map +1 -0
  237. package/dist/shared/logger.d.ts.map +1 -1
  238. package/dist/shared/model-resolution.d.ts +2 -3
  239. package/dist/shared/model-resolution.d.ts.map +1 -1
  240. package/dist/shared/models-dev-temperature.d.ts +18 -0
  241. package/dist/shared/models-dev-temperature.d.ts.map +1 -0
  242. package/dist/shared/project-directory-key.d.ts +16 -0
  243. package/dist/shared/project-directory-key.d.ts.map +1 -1
  244. package/dist/shared/sqlite.d.ts +30 -0
  245. package/dist/shared/sqlite.d.ts.map +1 -1
  246. package/dist/shared/stable-json.d.ts.map +1 -1
  247. package/dist/shared/subagent-temperature.d.ts +46 -0
  248. package/dist/shared/subagent-temperature.d.ts.map +1 -0
  249. package/dist/shared/user-facing-codes.d.ts +0 -5
  250. package/dist/shared/user-facing-codes.d.ts.map +1 -1
  251. package/dist/sqlite-context-pragmas-mv9jqwjh.js +6 -0
  252. package/dist/sqlite-mhjkerzq.js +46 -0
  253. package/dist/storage-memory-07fx57k6.js +71 -0
  254. package/dist/storage-tags-k0pda32s.js +133 -0
  255. package/dist/{task-config-v81k8jvk.js → task-config-cgpg0nvh.js} +2 -2
  256. package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
  257. package/dist/tools/ctx-note/constants.d.ts +4 -0
  258. package/dist/tools/ctx-note/constants.d.ts.map +1 -1
  259. package/dist/tools/ctx-note/tools.d.ts +1 -0
  260. package/dist/tools/ctx-note/tools.d.ts.map +1 -1
  261. package/dist/tools/ctx-reduce/tools.d.ts.map +1 -1
  262. package/dist/tools/ctx-search/tools.d.ts.map +1 -1
  263. package/dist/tools/ctx-search/types.d.ts +1 -0
  264. package/dist/tools/ctx-search/types.d.ts.map +1 -1
  265. package/dist/tools/parameter-descriptions.d.ts +2 -2
  266. package/dist/tools/parameter-descriptions.d.ts.map +1 -1
  267. package/dist/{transform-postprocess-phase-z5hzpsxv.js → transform-postprocess-phase-tck4g20s.js} +35 -20
  268. package/dist/transformers-node-wasm.js +18415 -18415
  269. package/dist/v2/auto-search-worker.js +27 -30
  270. package/dist/v2/{context-14v1hr8b.js → context-crbt6p1y.js} +4708 -4218
  271. package/dist/v2/{derive-budgets-nc9avxz8.js → derive-budgets-fgej9j46.js} +4 -3
  272. package/dist/v2/embedding-activity-g1dhes6g.js +10 -0
  273. package/dist/v2/embedding-backfill-ph1qfyn3.js +21 -0
  274. package/dist/v2/embedding-cache-mgyr73ef.js +16 -0
  275. package/dist/v2/embedding-worker.js +12 -9
  276. package/dist/v2/fold/host-media.d.ts +4 -0
  277. package/dist/v2/fold/host-media.d.ts.map +1 -1
  278. package/dist/v2/fold/memory-cache.d.ts +70 -0
  279. package/dist/v2/fold/memory-cache.d.ts.map +1 -0
  280. package/dist/v2/fold/native-codec.d.ts +10 -0
  281. package/dist/v2/fold/native-codec.d.ts.map +1 -0
  282. package/dist/v2/fold/native-replay.d.ts +58 -0
  283. package/dist/v2/fold/native-replay.d.ts.map +1 -0
  284. package/dist/v2/fold/policy.d.ts +24 -0
  285. package/dist/v2/fold/policy.d.ts.map +1 -0
  286. package/dist/v2/harness-e4avh192.js +10 -0
  287. package/dist/v2/hidden-child-native.d.ts.map +1 -1
  288. package/dist/v2/hidden-completion.d.ts +7 -0
  289. package/dist/v2/hidden-completion.d.ts.map +1 -1
  290. package/dist/v2/hooks/context.d.ts +2 -2
  291. package/dist/v2/hooks/context.d.ts.map +1 -1
  292. package/dist/v2/hooks/dream-manual.d.ts +1 -1
  293. package/dist/v2/hooks/dream-manual.d.ts.map +1 -1
  294. package/dist/v2/hooks/dream-timer.d.ts.map +1 -1
  295. package/dist/v2/hooks/dream-trigger.d.ts +5 -3
  296. package/dist/v2/hooks/dream-trigger.d.ts.map +1 -1
  297. package/dist/v2/hooks/generate.d.ts +9 -2
  298. package/dist/v2/hooks/generate.d.ts.map +1 -1
  299. package/dist/v2/hooks/payload.d.ts.map +1 -1
  300. package/dist/v2/hooks/tools.d.ts.map +1 -1
  301. package/dist/v2/hooks/types.d.ts +6 -0
  302. package/dist/v2/hooks/types.d.ts.map +1 -1
  303. package/dist/v2/logger-pj02s7sr.js +19 -0
  304. package/dist/v2/message-index-bounded-xwqdywxg.js +123 -0
  305. package/dist/{message-time-backfill-r5epkzj3.js → v2/message-time-backfill-cje68egj.js} +7 -7
  306. package/dist/v2/migration-worker.js +24 -17
  307. package/dist/v2/{model-resolution-xhfmyyvy.js → model-resolution-nx97z3x7.js} +1 -1
  308. package/dist/v2/project-embedding-registry-d6m7tyxr.js +86 -0
  309. package/dist/v2/raw-ordinal-warmup-worker.js +60 -0
  310. package/dist/v2/{read-session-chunk-gyyv7w2r.js → read-session-chunk-8p5mdryx.js} +16 -8
  311. package/dist/v2/read-session-raw-j8dvp7f4.js +59 -0
  312. package/dist/v2/recomp-orchestrator-ckfgt6wq.js +57 -0
  313. package/dist/{safe-notification-target-43r8jsxw.js → v2/safe-notification-target-y3p1hce9.js} +3 -3
  314. package/dist/v2/search-ym8rehhz.js +45 -0
  315. package/dist/{send-session-notification-0m68ms3n.js → v2/send-session-notification-5m0yapqx.js} +9 -8
  316. package/dist/v2/{server-rz514f14.js → server-19zjmn02.js} +2044 -2060
  317. package/dist/v2/server-1tk82krw.js +796 -0
  318. package/dist/v2/server-2bvekkfy.js +11 -0
  319. package/dist/v2/{server-ajzeteqw.js → server-2ra6pwf3.js} +1 -18
  320. package/dist/v2/server-2s6ayq3t.js +1048 -0
  321. package/dist/v2/{server-fcdehk1s.js → server-2s9qz6n7.js} +4 -4
  322. package/dist/v2/server-3j4d00kf.js +171 -0
  323. package/dist/v2/{server-14vq4kpm.js → server-3t0q2cqx.js} +3 -3
  324. package/dist/v2/server-4dhv7mqz.js +131 -0
  325. package/dist/v2/server-4ez8mntn.js +3213 -0
  326. package/dist/v2/{server-6r257mf5.js → server-676xw7at.js} +3 -3
  327. package/dist/v2/{server-vs5gpnd4.js → server-6byqfbqf.js} +165 -145
  328. package/dist/v2/server-7ekna9zs.js +120 -0
  329. package/dist/v2/server-7h861yms.js +1272 -0
  330. package/dist/v2/server-7jzrrxap.js +931 -0
  331. package/dist/v2/server-8ajstryz.js +18 -0
  332. package/dist/v2/{server-sfpzqvdz.js → server-8cd2j99z.js} +2 -3
  333. package/dist/v2/{server-cpepxy2q.js → server-8k2agx29.js} +14 -12
  334. package/dist/v2/server-c5rrgrcd.js +3545 -0
  335. package/dist/v2/server-d9vfe7xq.js +16 -0
  336. package/dist/v2/server-fb3zxn06.js +13 -0
  337. package/dist/v2/server-fr0wbhdn.js +43 -0
  338. package/dist/v2/{server-y10vbq6y.js → server-hb6xhh9q.js} +11 -1053
  339. package/dist/v2/server-jvxzm1jy.js +3023 -0
  340. package/dist/v2/{server-wx8a6bw3.js → server-kb9nn0a0.js} +270 -53
  341. package/dist/{index-5eqk6z3s.js → v2/server-kzns2hbz.js} +301 -27
  342. package/dist/{index-rrbbspwh.js → v2/server-mfkzp7qj.js} +1 -16
  343. package/dist/v2/server-pavzsdc6.js +17 -0
  344. package/dist/v2/{server-vd4e7174.js → server-pj4pjv02.js} +21 -17
  345. package/dist/v2/{server-e0c1b7a7.js → server-q4ph9bwn.js} +1340 -148
  346. package/dist/{index-yr3zj7e7.js → v2/server-qt1qqasc.js} +6 -7
  347. package/dist/v2/{server-qdjnb2z1.js → server-r5p3b1wy.js} +11 -9
  348. package/dist/v2/{server-d0sraw7m.js → server-sa8jvrfc.js} +291 -286
  349. package/dist/v2/server-ss95ky04.js +1048 -0
  350. package/dist/v2/{server-1qbnzc80.js → server-t4k4qexw.js} +142 -150
  351. package/dist/{index-x3kwrmqk.js → v2/server-v4mewb78.js} +35 -792
  352. package/dist/v2/server-w32kmdez.js +154 -0
  353. package/dist/v2/{server-nf82q6pt.js → server-x4hscabv.js} +5547 -5449
  354. package/dist/v2/server-xwz4dqh9.js +569 -0
  355. package/dist/v2/{server-efhwzx05.js → server-ycw9qqcy.js} +23 -23
  356. package/dist/v2/{server-50hvkg3v.js → server-zm570tr2.js} +160 -158
  357. package/dist/v2/server-zp53y8js.js +1311 -0
  358. package/dist/v2/server.js +16 -14
  359. package/dist/v2/sqlite-context-pragmas-mv9jqwjh.js +6 -0
  360. package/dist/v2/sqlite-mhjkerzq.js +46 -0
  361. package/dist/v2/storage-memory-07fx57k6.js +71 -0
  362. package/dist/v2/storage-tags-8vw924zn.js +132 -0
  363. package/dist/v2/store-reader.d.ts +24 -2
  364. package/dist/v2/store-reader.d.ts.map +1 -1
  365. package/dist/v2/{task-config-tbndqyny.js → task-config-x0hq3qfd.js} +2 -2
  366. package/dist/v2/transformers-node-wasm.js +18415 -18415
  367. package/dist/v2/tui/index.d.ts.map +1 -1
  368. package/dist/v2/tui/types.d.ts +1 -10
  369. package/dist/v2/tui/types.d.ts.map +1 -1
  370. package/dist/v2/{wrapup-orchestrator-nbz854vc.js → wrapup-orchestrator-a7efxaax.js} +51 -30
  371. package/dist/wrapup-orchestrator-barbc6h9.js +44 -0
  372. package/package.json +4 -3
  373. package/src/agents/magic-context-prompt.ts +27 -2
  374. package/src/agents/smart-notes-enabled.test.ts +294 -0
  375. package/src/agents/smart-notes-on.golden.json +70 -0
  376. package/src/config/index.test.ts +67 -1
  377. package/src/config/index.ts +2 -0
  378. package/src/config/latch-permanence-guard.test.ts +4 -0
  379. package/src/config/mural-model-deprecation.ts +24 -0
  380. package/src/config/project-security.hostile-matrix.test.ts +4 -44
  381. package/src/config/project-security.test.ts +9 -14
  382. package/src/config/project-security.ts +13 -55
  383. package/src/config/schema/magic-context.test.ts +2 -2
  384. package/src/config/schema/magic-context.ts +16 -10
  385. package/src/features/magic-context/dreamer/task-registry.ts +6 -0
  386. package/src/shared/auto-search-lifecycle.ts +43 -0
  387. package/src/shared/conflict-detector.test.ts +56 -0
  388. package/src/shared/conflict-detector.ts +16 -5
  389. package/src/shared/host-stall-profiler-bun.ts +358 -0
  390. package/src/shared/host-stall-profiler-common.ts +159 -0
  391. package/src/shared/host-stall-profiler-node.test.ts +234 -0
  392. package/src/shared/host-stall-profiler-node.ts +274 -0
  393. package/src/shared/host-stall-profiler-report.ts +248 -0
  394. package/src/shared/host-stall-profiler.ts +57 -0
  395. package/src/shared/logger.test.ts +38 -0
  396. package/src/shared/logger.ts +10 -2
  397. package/src/shared/model-resolution.test.ts +54 -17
  398. package/src/shared/model-resolution.ts +6 -17
  399. package/src/shared/models-dev-temperature.ts +107 -0
  400. package/src/shared/project-directory-key.test.ts +59 -0
  401. package/src/shared/project-directory-key.ts +20 -0
  402. package/src/shared/sqlite.test.ts +52 -0
  403. package/src/shared/sqlite.ts +339 -23
  404. package/src/shared/stable-json-linear.test.ts +109 -0
  405. package/src/shared/stable-json.ts +37 -7
  406. package/src/shared/subagent-temperature.test.ts +270 -0
  407. package/src/shared/subagent-temperature.ts +110 -0
  408. package/src/shared/user-facing-codes.ts +2 -6
  409. package/src/shared/write-transaction-attribution.test.ts +2 -2
  410. package/src/v2/tui/host-contract.test.ts +41 -67
  411. package/src/v2/tui/index.ts +6 -214
  412. package/src/v2/tui/types.ts +5 -17
  413. package/dist/features/magic-context/checkout-claim-fake-subc.test-support.d.ts +0 -45
  414. package/dist/features/magic-context/checkout-claim-fake-subc.test-support.d.ts.map +0 -1
  415. package/dist/features/magic-context/checkout-claim.d.ts +0 -155
  416. package/dist/features/magic-context/checkout-claim.d.ts.map +0 -1
  417. package/dist/index-bb36vgr3.js +0 -6608
  418. package/dist/index-fnn5pjtt.js +0 -6554
  419. package/dist/recomp-orchestrator-rervg6q4.js +0 -42
  420. package/dist/v2/recomp-orchestrator-42vjba7p.js +0 -42
  421. package/dist/v2/server-3trjk1hx.js +0 -6360
  422. package/dist/v2/server-nm9n3aqq.js +0 -6461
  423. package/dist/wrapup-orchestrator-b2dztrar.js +0 -29
  424. /package/dist/{index-5prbx026.js → index-2pp04pmg.js} +0 -0
  425. /package/dist/v2/{index-5prbx026.js → index-2pp04pmg.js} +0 -0
@@ -1,215 +1,119 @@
1
1
  import {
2
- estimateTokens
3
- } from "./index-5eqk6z3s.js";
4
- import {
5
- sessionLog
6
- } from "./index-hybnrwq0.js";
2
+ sessionLog2
3
+ } from "./index-nsjyysj0.js";
7
4
  import {
8
5
  isKnownAutocommit
9
- } from "./index-b35pxds2.js";
6
+ } from "./index-8ajstryz.js";
10
7
 
11
- // src/features/magic-context/temporal-decisions.ts
12
- var PREFIX = "temporal-message-v1:";
13
- function decodeTemporalDecision(entry) {
14
- if (!entry.startsWith(PREFIX))
15
- return null;
16
- try {
17
- const pair = JSON.parse(entry.slice(PREFIX.length));
18
- if (Array.isArray(pair) && pair.length === 2 && typeof pair[0] === "string" && pair[0] && typeof pair[1] === "string")
19
- return [pair[0], pair[1]];
20
- } catch {}
21
- return null;
8
+ // src/features/magic-context/storage-tag-identity-revision.ts
9
+ var TAG_IDENTITY_REVISION_PREFIX = "tag_identity_revision:";
10
+ var TAG_REVISION_PREFIX = "tag_revision:";
11
+ var TAG_TOMBSTONE_OWNER_PREFIX = "tag_revision_owner:";
12
+ var TAG_REVISION_INCARNATION_KEY = "tag_revision_incarnation";
13
+ var tagRevisionIncarnationSql = (value) => `CASE WHEN INSTR(${value}, ':') > 0 THEN SUBSTR(${value}, 1, INSTR(${value}, ':') - 1) ELSE '0' END`;
14
+ var tagRevisionCountSql = (value) => `CAST(CASE WHEN INSTR(${value}, ':') > 0 THEN SUBSTR(${value}, INSTR(${value}, ':') + 1) ELSE ${value} END AS INTEGER)`;
15
+ var ADVANCE = (delta = "1") => `CASE
16
+ WHEN ${tagRevisionCountSql("value")} <= 9223372036854775807 - ${delta}
17
+ THEN (${tagRevisionIncarnationSql("value")}) || ':' || CAST(${tagRevisionCountSql("value")} + ${delta} AS TEXT)
18
+ ELSE NULL END`;
19
+ function tagTombstoneOwnerRange(sessionId) {
20
+ const stem = `${TAG_TOMBSTONE_OWNER_PREFIX}${JSON.stringify(sessionId)}`;
21
+ return [`${stem}:`, `${stem};`];
22
22
  }
23
- function readRows(db, sessionId, messageIds) {
24
- if (!messageIds)
25
- return db.prepare("SELECT message_id,marker FROM temporal_decisions WHERE session_id=?").all(sessionId);
26
- const ids = [...messageIds];
27
- const result = [];
28
- for (let offset = 0;offset < ids.length; offset += 400) {
29
- const chunk = ids.slice(offset, offset + 400);
30
- result.push(...db.prepare(`SELECT message_id,marker FROM temporal_decisions WHERE session_id=? AND message_id IN (${chunk.map(() => "?").join(",")})`).all(sessionId, ...chunk));
31
- }
32
- return result;
33
- }
34
- function getTemporalDecisions(db, sessionId, messageIds) {
35
- return new Map(readRows(db, sessionId, messageIds).flatMap((row) => row.marker === null ? [] : [[row.message_id, row.marker]]));
23
+ function tagTombstoneOwnerKey(sessionId, harness) {
24
+ return `${tagTombstoneOwnerRange(sessionId)[0]}${harness}`;
36
25
  }
37
- function observeTemporalDecisions(db, sessionId, candidates, previouslyServed, messageIds) {
38
- const ids = new Set([...candidates.keys(), ...messageIds ?? []]);
39
- const rows = readRows(db, sessionId, ids);
40
- const known = new Set(rows.map((row) => row.message_id));
41
- const missing = [...candidates].filter(([id]) => !known.has(id));
42
- if (!missing.length)
43
- return new Map(rows.flatMap((row) => row.marker === null ? [] : [[row.message_id, row.marker]]));
44
- const transient = new Map;
45
- db.transaction(() => {
46
- const insert = db.prepare("INSERT OR IGNORE INTO temporal_decisions(session_id,message_id,marker) VALUES (?,?,?)");
47
- const servedTag = db.prepare("SELECT 1 FROM tags WHERE session_id=? AND message_id=? UNION ALL SELECT 1 FROM tags WHERE session_id=? AND message_id>=? AND message_id<? LIMIT 1");
48
- let served;
49
- for (const [id, candidate] of missing) {
50
- const historical = servedTag.get(sessionId, id, sessionId, `${id}:p`, `${id}:q`);
51
- if (historical) {
52
- served ??= previouslyServed?.(missing.map(([missingId]) => missingId)) ?? new Map;
53
- const previous = served.get(id);
54
- if (previous === undefined) {
55
- transient.set(id, candidate);
56
- continue;
57
- }
58
- insert.run(sessionId, id, previous === "" && candidate !== "" ? null : previous);
59
- } else {
60
- insert.run(sessionId, id, null);
61
- }
62
- }
63
- }).immediate();
64
- return new Map([...transient, ...getTemporalDecisions(db, sessionId, ids)]);
26
+ function tagRevisionKey(sessionId) {
27
+ return `${TAG_REVISION_PREFIX}${sessionId}`;
65
28
  }
66
- function freezeTemporalDecisions(db, sessionId, candidates) {
67
- if (candidates.size === 0)
68
- return new Map;
69
- return db.transaction(() => {
70
- const insert = db.prepare("INSERT INTO temporal_decisions(session_id,message_id,marker) VALUES (?,?,?) ON CONFLICT(session_id,message_id) DO UPDATE SET marker=excluded.marker WHERE temporal_decisions.marker IS NULL");
71
- for (const [id, marker] of candidates) {
72
- insert.run(sessionId, id, marker);
73
- }
74
- return getTemporalDecisions(db, sessionId, candidates.keys());
75
- }).immediate();
29
+ function tagIdentityRevisionKey(sessionId) {
30
+ return `${TAG_IDENTITY_REVISION_PREFIX}${sessionId}`;
76
31
  }
77
- function deleteTemporalDecision(db, sessionId, messageId) {
78
- db.prepare("DELETE FROM temporal_decisions WHERE session_id=? AND message_id=?").run(sessionId, messageId);
32
+ var BUMP = (session, prefix = TAG_IDENTITY_REVISION_PREFIX) => `INSERT INTO schema_migrations_meta (key, value)
33
+ VALUES ('${prefix}' || ${session}, '1')
34
+ ON CONFLICT(key) DO UPDATE SET value = ${ADVANCE()}`;
35
+ var TAG_INSERT_CONFLICT_ROWS = `SELECT id, session_id, tag_number FROM tags WHERE id = NEW.id
36
+ UNION SELECT id, session_id, tag_number FROM tags WHERE session_id = NEW.session_id AND tag_number = NEW.tag_number
37
+ UNION SELECT id, session_id, tag_number FROM tags
38
+ WHERE NEW.type = 'tool' AND NEW.tool_owner_message_id IS NOT NULL
39
+ AND type = 'tool' AND tool_owner_message_id IS NOT NULL
40
+ AND session_id = NEW.session_id AND message_id = NEW.message_id
41
+ AND tool_owner_message_id = NEW.tool_owner_message_id`;
42
+ var BUMP_INSERT_CONFLICTS = (prefix) => `INSERT INTO schema_migrations_meta (key, value)
43
+ SELECT '${prefix}' || session_id, CAST(COUNT(*) AS TEXT)
44
+ FROM (${TAG_INSERT_CONFLICT_ROWS}) GROUP BY session_id
45
+ ON CONFLICT(key) DO UPDATE SET value = ${ADVANCE("CAST(excluded.value AS INTEGER)")}`;
46
+ var TRIGGER_SQL = `CREATE TEMP TRIGGER IF NOT EXISTS mc_tag_identity_revision_au
47
+ AFTER UPDATE OF id, session_id, message_id, tag_number, type, tool_owner_message_id, reasoning_token_count
48
+ ON main.tags
49
+ BEGIN
50
+ ${BUMP("OLD.session_id")};
51
+ INSERT INTO schema_migrations_meta (key, value)
52
+ SELECT '${TAG_IDENTITY_REVISION_PREFIX}' || NEW.session_id, '1'
53
+ WHERE NEW.session_id IS NOT OLD.session_id
54
+ ON CONFLICT(key) DO UPDATE SET value = ${ADVANCE()};
55
+ END`;
56
+ function installTagIdentityRevisionTrigger(db) {
57
+ db.exec(`DROP TRIGGER IF EXISTS temp.mc_tag_identity_revision_au;
58
+ DROP TRIGGER IF EXISTS temp.mc_tag_revision_bi;
59
+ DROP TRIGGER IF EXISTS temp.mc_tag_revision_ai;
60
+ DROP TRIGGER IF EXISTS temp.mc_tag_revision_au;
61
+ DROP TRIGGER IF EXISTS temp.mc_tag_revision_ad;
62
+ DROP TRIGGER IF EXISTS temp.mc_tag_revision_seed_ai;`);
63
+ db.exec(`CREATE TEMP TRIGGER mc_tag_revision_seed_ai AFTER INSERT ON main.schema_migrations_meta
64
+ WHEN INSTR(NEW.value, ':') = 0 AND (
65
+ SUBSTR(NEW.key, 1, ${TAG_REVISION_PREFIX.length}) = '${TAG_REVISION_PREFIX}'
66
+ OR SUBSTR(NEW.key, 1, ${TAG_IDENTITY_REVISION_PREFIX.length}) = '${TAG_IDENTITY_REVISION_PREFIX}')
67
+ BEGIN
68
+ INSERT INTO schema_migrations_meta (key, value) VALUES ('${TAG_REVISION_INCARNATION_KEY}', '1')
69
+ ON CONFLICT(key) DO UPDATE SET value = CAST(CASE
70
+ WHEN CAST(value AS INTEGER) < 9223372036854775807 THEN CAST(value AS INTEGER) + 1
71
+ ELSE NULL END AS TEXT);
72
+ UPDATE schema_migrations_meta SET value =
73
+ (SELECT value FROM schema_migrations_meta WHERE key = '${TAG_REVISION_INCARNATION_KEY}')
74
+ || ':' || CAST(NEW.value AS TEXT) WHERE key = NEW.key;
75
+ INSERT INTO schema_migrations_meta (key, value)
76
+ SELECT '${TAG_REVISION_INCARNATION_KEY}', '1'
77
+ WHERE SUBSTR(NEW.key, 1, ${TAG_REVISION_PREFIX.length}) = '${TAG_REVISION_PREFIX}'
78
+ AND NOT EXISTS (SELECT 1 FROM schema_migrations_meta
79
+ WHERE key = '${TAG_IDENTITY_REVISION_PREFIX}' || SUBSTR(NEW.key, ${TAG_REVISION_PREFIX.length + 1}))
80
+ ON CONFLICT(key) DO UPDATE SET value = CAST(CASE
81
+ WHEN CAST(value AS INTEGER) < 9223372036854775807 THEN CAST(value AS INTEGER) + 1
82
+ ELSE NULL END AS TEXT);
83
+ INSERT INTO schema_migrations_meta (key, value)
84
+ SELECT '${TAG_IDENTITY_REVISION_PREFIX}' || SUBSTR(NEW.key, ${TAG_REVISION_PREFIX.length + 1}),
85
+ (SELECT value FROM schema_migrations_meta WHERE key = '${TAG_REVISION_INCARNATION_KEY}') || ':0'
86
+ WHERE SUBSTR(NEW.key, 1, ${TAG_REVISION_PREFIX.length}) = '${TAG_REVISION_PREFIX}'
87
+ AND NOT EXISTS (SELECT 1 FROM schema_migrations_meta
88
+ WHERE key = '${TAG_IDENTITY_REVISION_PREFIX}' || SUBSTR(NEW.key, ${TAG_REVISION_PREFIX.length + 1}));
89
+ END;`);
90
+ db.exec(TRIGGER_SQL);
91
+ db.exec(`CREATE TEMP TRIGGER IF NOT EXISTS mc_tag_revision_bi BEFORE INSERT ON main.tags BEGIN
92
+ ${BUMP_INSERT_CONFLICTS(TAG_REVISION_PREFIX)};
93
+ ${BUMP_INSERT_CONFLICTS(TAG_IDENTITY_REVISION_PREFIX)};
94
+ UPDATE session_meta SET tags_version = tags_version + 1
95
+ WHERE session_id IN (SELECT session_id FROM (${TAG_INSERT_CONFLICT_ROWS}));
96
+ END;`);
97
+ db.exec(`CREATE TEMP TRIGGER IF NOT EXISTS mc_tag_revision_ai AFTER INSERT ON main.tags BEGIN
98
+ ${BUMP("NEW.session_id", TAG_REVISION_PREFIX)};
99
+ END;
100
+ CREATE TEMP TRIGGER IF NOT EXISTS mc_tag_revision_au AFTER UPDATE ON main.tags BEGIN
101
+ ${BUMP("OLD.session_id", TAG_REVISION_PREFIX)};
102
+ INSERT INTO schema_migrations_meta (key, value)
103
+ SELECT '${TAG_REVISION_PREFIX}' || NEW.session_id, '1'
104
+ WHERE NEW.session_id IS NOT OLD.session_id
105
+ ON CONFLICT(key) DO UPDATE SET value = ${ADVANCE()};
106
+ END;
107
+ CREATE TEMP TRIGGER IF NOT EXISTS mc_tag_revision_ad AFTER DELETE ON main.tags BEGIN
108
+ ${BUMP("OLD.session_id", TAG_REVISION_PREFIX)};
109
+ END;`);
79
110
  }
80
-
81
- // src/shared/stable-json.ts
82
- function stableStringify(value, seen = new WeakSet) {
83
- if (value === undefined)
84
- return "undefined";
85
- if (value === null || typeof value !== "object")
86
- return JSON.stringify(value) ?? String(value);
87
- if (seen.has(value))
88
- return '"[Circular]"';
89
- seen.add(value);
90
- if (Array.isArray(value)) {
91
- return `[${value.map((item) => stableStringify(item, seen)).join(",")}]`;
111
+ function deleteTagIdentityRevisions(db, sessionIds) {
112
+ const statement = db.prepare(`INSERT INTO schema_migrations_meta (key, value) VALUES (?, '1')
113
+ ON CONFLICT(key) DO UPDATE SET value = ${ADVANCE()}`);
114
+ for (const sessionId of sessionIds) {
115
+ statement.run(tagIdentityRevisionKey(sessionId));
92
116
  }
93
- const entries = Object.entries(value).sort(([a], [b]) => {
94
- if (a < b)
95
- return -1;
96
- if (a > b)
97
- return 1;
98
- return 0;
99
- });
100
- return `{${entries.map(([key, child]) => `${JSON.stringify(key)}:${stableStringify(child, seen)}`).join(",")}}`;
101
- }
102
-
103
- // src/features/magic-context/tool-definition-tokens.ts
104
- import { createHash } from "node:crypto";
105
- var measurements = new Map;
106
- var fingerprints = new Map;
107
- var persistenceDb = null;
108
- var cachedInsertStmt = null;
109
- function keyFor(providerID, modelID, agentName) {
110
- const agent = agentName && agentName.length > 0 ? agentName : "default";
111
- return `${providerID}/${modelID}/${agent}`;
112
- }
113
- function fingerprintFor(description, parameters) {
114
- return createHash("sha256").update(description).update("\x00").update(stableStringify(parameters)).digest("hex");
115
- }
116
- function getCurrentToolSetHash(providerID, modelID, agentName) {
117
- if (!providerID || !modelID)
118
- return "";
119
- const toolIds = measurements.get(keyFor(providerID, modelID, agentName));
120
- if (!toolIds || toolIds.size === 0)
121
- return "";
122
- return createHash("sha256").update(Array.from(toolIds.keys()).sort().join("\x00")).digest("hex");
123
- }
124
- function getToolDefinitionMeasurementSignature(providerID, modelID, agentName) {
125
- const key = keyFor(providerID, modelID, agentName);
126
- const measured = measurements.get(key);
127
- const observed = fingerprints.get(key);
128
- if (!measured || !observed || [...measured.keys()].some((id) => !observed.has(id)))
129
- return;
130
- return createHash("sha256").update(JSON.stringify([...measured.keys()].sort().map((id) => [id, observed.get(id)]))).digest("hex");
131
- }
132
- function setDatabase(db) {
133
- persistenceDb = db;
134
- cachedInsertStmt = null;
135
- }
136
- function loadToolDefinitionMeasurements(db) {
137
- let rows = [];
138
- try {
139
- rows = db.prepare("SELECT provider_id, model_id, agent_name, tool_id, token_count FROM tool_definition_measurements").all();
140
- } catch {
141
- return;
142
- }
143
- for (const row of rows) {
144
- const key = keyFor(row.provider_id, row.model_id, row.agent_name);
145
- let inner = measurements.get(key);
146
- if (!inner) {
147
- inner = new Map;
148
- measurements.set(key, inner);
149
- }
150
- inner.set(row.tool_id, row.token_count);
151
- }
152
- }
153
- function recordToolDefinition(providerID, modelID, agentName, toolID, description, parameters) {
154
- if (!providerID || !modelID || !toolID)
155
- return;
156
- const key = keyFor(providerID, modelID, agentName);
157
- const fp = fingerprintFor(description ?? "", parameters);
158
- let innerFp = fingerprints.get(key);
159
- if (innerFp && innerFp.get(toolID) === fp)
160
- return;
161
- let paramsText = "";
162
- try {
163
- paramsText = parameters === undefined ? "" : JSON.stringify(parameters);
164
- } catch {
165
- paramsText = "";
166
- }
167
- const tokens = estimateTokens(description ?? "") + estimateTokens(paramsText);
168
- let inner = measurements.get(key);
169
- if (!inner) {
170
- inner = new Map;
171
- measurements.set(key, inner);
172
- }
173
- inner.set(toolID, tokens);
174
- if (!innerFp) {
175
- innerFp = new Map;
176
- fingerprints.set(key, innerFp);
177
- }
178
- innerFp.set(toolID, fp);
179
- if (persistenceDb) {
180
- try {
181
- const agent = agentName && agentName.length > 0 ? agentName : "default";
182
- if (!cachedInsertStmt) {
183
- cachedInsertStmt = persistenceDb.prepare(`INSERT OR REPLACE INTO tool_definition_measurements
184
- (provider_id, model_id, agent_name, tool_id, token_count, recorded_at)
185
- VALUES (?, ?, ?, ?, ?, ?)`);
186
- }
187
- cachedInsertStmt.run(providerID, modelID, agent, toolID, tokens, Date.now());
188
- } catch {
189
- cachedInsertStmt = null;
190
- }
191
- }
192
- }
193
- function getLargestMeasuredToolDefinitionTokens() {
194
- let largest = 0;
195
- for (const tools of measurements.values()) {
196
- let total = 0;
197
- for (const tokens of tools.values())
198
- total += tokens;
199
- largest = Math.max(largest, total);
200
- }
201
- return largest > 0 ? largest : undefined;
202
- }
203
- function getMeasuredToolDefinitionTokens(providerID, modelID, agentName) {
204
- if (!providerID || !modelID)
205
- return;
206
- const inner = measurements.get(keyFor(providerID, modelID, agentName));
207
- if (!inner || inner.size === 0)
208
- return;
209
- let total = 0;
210
- for (const tokens of inner.values())
211
- total += tokens;
212
- return total;
213
117
  }
214
118
 
215
119
  // src/features/magic-context/storage-schema-helpers.ts
@@ -338,6 +242,76 @@ function healMissingMemoryBlockIds(db, columns) {
338
242
  db.prepare("UPDATE session_meta SET memory_block_cache = '' WHERE memory_block_cache != '' AND (memory_block_ids IS NULL OR memory_block_ids = '') AND memory_block_count > 0").run();
339
243
  }
340
244
 
245
+ // src/features/magic-context/temporal-decisions.ts
246
+ var PREFIX = "temporal-message-v1:";
247
+ function decodeTemporalDecision(entry) {
248
+ if (!entry.startsWith(PREFIX))
249
+ return null;
250
+ try {
251
+ const pair = JSON.parse(entry.slice(PREFIX.length));
252
+ if (Array.isArray(pair) && pair.length === 2 && typeof pair[0] === "string" && pair[0] && typeof pair[1] === "string")
253
+ return [pair[0], pair[1]];
254
+ } catch {}
255
+ return null;
256
+ }
257
+ function readRows(db, sessionId, messageIds) {
258
+ if (!messageIds)
259
+ return db.prepare("SELECT message_id,marker FROM temporal_decisions WHERE session_id=?").all(sessionId);
260
+ const ids = [...messageIds];
261
+ const result = [];
262
+ for (let offset = 0;offset < ids.length; offset += 400) {
263
+ const chunk = ids.slice(offset, offset + 400);
264
+ result.push(...db.prepare(`SELECT message_id,marker FROM temporal_decisions WHERE session_id=? AND message_id IN (${chunk.map(() => "?").join(",")})`).all(sessionId, ...chunk));
265
+ }
266
+ return result;
267
+ }
268
+ function getTemporalDecisions(db, sessionId, messageIds) {
269
+ return new Map(readRows(db, sessionId, messageIds).flatMap((row) => row.marker === null ? [] : [[row.message_id, row.marker]]));
270
+ }
271
+ function observeTemporalDecisions(db, sessionId, candidates, previouslyServed, messageIds) {
272
+ const ids = new Set([...candidates.keys(), ...messageIds ?? []]);
273
+ const rows = readRows(db, sessionId, ids);
274
+ const known = new Set(rows.map((row) => row.message_id));
275
+ const missing = [...candidates].filter(([id]) => !known.has(id));
276
+ if (!missing.length)
277
+ return new Map(rows.flatMap((row) => row.marker === null ? [] : [[row.message_id, row.marker]]));
278
+ const transient = new Map;
279
+ db.transaction(() => {
280
+ const insert = db.prepare("INSERT OR IGNORE INTO temporal_decisions(session_id,message_id,marker) VALUES (?,?,?)");
281
+ const servedTag = db.prepare("SELECT 1 FROM tags WHERE session_id=? AND message_id=? UNION ALL SELECT 1 FROM tags WHERE session_id=? AND message_id>=? AND message_id<? LIMIT 1");
282
+ let served;
283
+ for (const [id, candidate] of missing) {
284
+ const historical = servedTag.get(sessionId, id, sessionId, `${id}:p`, `${id}:q`);
285
+ if (historical) {
286
+ served ??= previouslyServed?.(missing.map(([missingId]) => missingId)) ?? new Map;
287
+ const previous = served.get(id);
288
+ if (previous === undefined) {
289
+ transient.set(id, candidate);
290
+ continue;
291
+ }
292
+ insert.run(sessionId, id, previous === "" && candidate !== "" ? null : previous);
293
+ } else {
294
+ insert.run(sessionId, id, null);
295
+ }
296
+ }
297
+ }).immediate();
298
+ return new Map([...transient, ...getTemporalDecisions(db, sessionId, ids)]);
299
+ }
300
+ function freezeTemporalDecisions(db, sessionId, candidates) {
301
+ if (candidates.size === 0)
302
+ return new Map;
303
+ return db.transaction(() => {
304
+ const insert = db.prepare("INSERT INTO temporal_decisions(session_id,message_id,marker) VALUES (?,?,?) ON CONFLICT(session_id,message_id) DO UPDATE SET marker=excluded.marker WHERE temporal_decisions.marker IS NULL");
305
+ for (const [id, marker] of candidates) {
306
+ insert.run(sessionId, id, marker);
307
+ }
308
+ return getTemporalDecisions(db, sessionId, candidates.keys());
309
+ }).immediate();
310
+ }
311
+ function deleteTemporalDecision(db, sessionId, messageId) {
312
+ db.prepare("DELETE FROM temporal_decisions WHERE session_id=? AND message_id=?").run(sessionId, messageId);
313
+ }
314
+
341
315
  // src/features/magic-context/migration-v95-perf-indexes.ts
342
316
  var TEMPORAL_DECISIONS_DDL = `CREATE TABLE temporal_decisions (
343
317
  session_id TEXT NOT NULL,
@@ -417,11 +391,11 @@ function installV95PerfSchema(db, verifyExistingMap = false, allowCreateMap = tr
417
391
  try {
418
392
  entries = JSON.parse(row.entries);
419
393
  } catch {
420
- sessionLog(row.session_id, "v95 temporal metadata: malformed JSON skipped; original blob retained");
394
+ sessionLog2(row.session_id, "v95 temporal metadata: malformed JSON skipped; original blob retained");
421
395
  continue;
422
396
  }
423
397
  if (!Array.isArray(entries)) {
424
- sessionLog(row.session_id, "v95 temporal metadata: non-array JSON skipped; original blob retained");
398
+ sessionLog2(row.session_id, "v95 temporal metadata: non-array JSON skipped; original blob retained");
425
399
  continue;
426
400
  }
427
401
  const kept = [];
@@ -491,4 +465,52 @@ function tagOrderConstraintIndex(db) {
491
465
  throw new Error("tags lacks its UNIQUE(session_id, tag_number) ordering constraint");
492
466
  }
493
467
 
494
- export { getTableColumnNames, ensureColumn, healAllNullColumns, getTemporalDecisions, observeTemporalDecisions, freezeTemporalDecisions, deleteTemporalDecision, installV95PerfSchema, tagOrderConstraintIndex, stableStringify, getCurrentToolSetHash, getToolDefinitionMeasurementSignature, setDatabase, loadToolDefinitionMeasurements, recordToolDefinition, getLargestMeasuredToolDefinitionTokens, getMeasuredToolDefinitionTokens };
468
+ // src/shared/stable-json.ts
469
+ function stableStringify(value, seen = new WeakSet) {
470
+ const pieces = [];
471
+ writeStable(value, seen, pieces);
472
+ return pieces.join("");
473
+ }
474
+ function writeStable(value, seen, pieces) {
475
+ if (value === undefined) {
476
+ pieces.push("undefined");
477
+ return;
478
+ }
479
+ if (value === null || typeof value !== "object") {
480
+ pieces.push(JSON.stringify(value) ?? String(value));
481
+ return;
482
+ }
483
+ if (seen.has(value)) {
484
+ pieces.push('"[Circular]"');
485
+ return;
486
+ }
487
+ seen.add(value);
488
+ if (Array.isArray(value)) {
489
+ pieces.push("[");
490
+ for (let index = 0;index < value.length; index += 1) {
491
+ if (index > 0)
492
+ pieces.push(",");
493
+ if (index in value)
494
+ writeStable(value[index], seen, pieces);
495
+ }
496
+ pieces.push("]");
497
+ return;
498
+ }
499
+ const entries = Object.entries(value).sort(([a], [b]) => {
500
+ if (a < b)
501
+ return -1;
502
+ if (a > b)
503
+ return 1;
504
+ return 0;
505
+ });
506
+ pieces.push("{");
507
+ entries.forEach(([key, child], index) => {
508
+ if (index > 0)
509
+ pieces.push(",");
510
+ pieces.push(JSON.stringify(key), ":");
511
+ writeStable(child, seen, pieces);
512
+ });
513
+ pieces.push("}");
514
+ }
515
+
516
+ export { TAG_TOMBSTONE_OWNER_PREFIX, tagTombstoneOwnerRange, tagTombstoneOwnerKey, tagRevisionKey, tagIdentityRevisionKey, installTagIdentityRevisionTrigger, deleteTagIdentityRevisions, getTableColumnNames, ensureColumn, healAllNullColumns, getTemporalDecisions, observeTemporalDecisions, freezeTemporalDecisions, deleteTemporalDecision, installV95PerfSchema, tagOrderConstraintIndex, stableStringify };