@cortexkit/opencode-magic-context 0.49.7 → 0.49.9

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 (252) hide show
  1. package/dist/agents/hidden-agent-registrations.d.ts +5 -3
  2. package/dist/agents/hidden-agent-registrations.d.ts.map +1 -1
  3. package/dist/auto-search-worker.js +6 -6
  4. package/dist/compaction-marker-candidates-worker.js +2 -2
  5. package/dist/{compaction-marker-candidates-a0edbqrr.js → compaction-marker-candidates-xxz35vwp.js} +3 -3
  6. package/dist/config/schema/agent-overrides.d.ts +13 -13
  7. package/dist/config/schema/magic-context.d.ts +500 -500
  8. package/dist/{conflict-warning-hook-myk5hbt9.js → conflict-warning-hook-w3crzrar.js} +8 -8
  9. package/dist/{context-ffr7e0g7.js → context-ey3ap3cc.js} +81 -53
  10. package/dist/{derive-budgets-j4ry8j8n.js → derive-budgets-3nbxsyss.js} +2 -2
  11. package/dist/embedding-backfill-3h2m5n0q.js +21 -0
  12. package/dist/embedding-worker-process.js +6 -2
  13. package/dist/embedding-worker.js +6 -5
  14. package/dist/features/magic-context/compaction-marker-candidates.d.ts.map +1 -1
  15. package/dist/features/magic-context/dreamer/cron.d.ts +2 -0
  16. package/dist/features/magic-context/dreamer/cron.d.ts.map +1 -1
  17. package/dist/features/magic-context/dreamer/provider-output-failure.d.ts +1 -0
  18. package/dist/features/magic-context/dreamer/provider-output-failure.d.ts.map +1 -1
  19. package/dist/features/magic-context/memory/embedding-local.d.ts.map +1 -1
  20. package/dist/features/magic-context/memory/embedding-worker-client.d.ts.map +1 -1
  21. package/dist/features/magic-context/message-index-async.d.ts.map +1 -1
  22. package/dist/features/magic-context/migration-worker-client.d.ts.map +1 -1
  23. package/dist/features/magic-context/primer-clustering.d.ts.map +1 -1
  24. package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
  25. package/dist/features/magic-context/smart-notes/compiler-prompt.d.ts +1 -1
  26. package/dist/features/magic-context/smart-notes/compiler-prompt.d.ts.map +1 -1
  27. package/dist/features/magic-context/smart-notes/compiler.d.ts.map +1 -1
  28. package/dist/features/magic-context/smart-notes/wake-plane.d.ts.map +1 -1
  29. package/dist/features/magic-context/transform-decision-log.d.ts.map +1 -1
  30. package/dist/history-owner-ty29fz0f.js +244 -0
  31. package/dist/hooks/auto-update-checker/checker.d.ts.map +1 -1
  32. package/dist/hooks/magic-context/__fixtures__/tail-hygiene-refresh.d.ts +34 -0
  33. package/dist/hooks/magic-context/__fixtures__/tail-hygiene-refresh.d.ts.map +1 -0
  34. package/dist/hooks/magic-context/auto-search-worker-client.d.ts.map +1 -1
  35. package/dist/hooks/magic-context/compartment-runner-historian.d.ts.map +1 -1
  36. package/dist/hooks/magic-context/compartment-runner-recomp.d.ts.map +1 -1
  37. package/dist/hooks/magic-context/compartment-runner.d.ts.map +1 -1
  38. package/dist/hooks/magic-context/ctx-reduce-nudge.d.ts +1 -0
  39. package/dist/hooks/magic-context/ctx-reduce-nudge.d.ts.map +1 -1
  40. package/dist/hooks/magic-context/dropped-input-guard.d.ts.map +1 -1
  41. package/dist/hooks/magic-context/edit-marker.d.ts +2 -0
  42. package/dist/hooks/magic-context/edit-marker.d.ts.map +1 -1
  43. package/dist/hooks/magic-context/final-wire-token-estimate.d.ts +2 -0
  44. package/dist/hooks/magic-context/final-wire-token-estimate.d.ts.map +1 -1
  45. package/dist/hooks/magic-context/hook.d.ts.map +1 -1
  46. package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
  47. package/dist/hooks/magic-context/module-transport.d.ts +1 -0
  48. package/dist/hooks/magic-context/module-transport.d.ts.map +1 -1
  49. package/dist/hooks/magic-context/provider-visible-parts.d.ts +10 -4
  50. package/dist/hooks/magic-context/provider-visible-parts.d.ts.map +1 -1
  51. package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts.map +1 -1
  52. package/dist/hooks/magic-context/read-session-chunk.d.ts +8 -4
  53. package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
  54. package/dist/hooks/magic-context/rust-mode-transform.d.ts +1 -0
  55. package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
  56. package/dist/hooks/magic-context/rust-refusal-recovery.d.ts.map +1 -1
  57. package/dist/hooks/magic-context/supersession-reclaim.d.ts +5 -3
  58. package/dist/hooks/magic-context/supersession-reclaim.d.ts.map +1 -1
  59. package/dist/hooks/magic-context/tail-hygiene-output-count.d.ts +18 -0
  60. package/dist/hooks/magic-context/tail-hygiene-output-count.d.ts.map +1 -0
  61. package/dist/hooks/magic-context/tail-hygiene-walk.d.ts +5 -1
  62. package/dist/hooks/magic-context/tail-hygiene-walk.d.ts.map +1 -1
  63. package/dist/hooks/magic-context/tool-drop-target.d.ts.map +1 -1
  64. package/dist/hooks/magic-context/tool-reclaim.d.ts +5 -2
  65. package/dist/hooks/magic-context/tool-reclaim.d.ts.map +1 -1
  66. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +1 -0
  67. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  68. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  69. package/dist/hooks/magic-context/unresolved-history-boundary.d.ts +5 -1
  70. package/dist/hooks/magic-context/unresolved-history-boundary.d.ts.map +1 -1
  71. package/dist/hooks/magic-context/wrapup-orchestrator.d.ts.map +1 -1
  72. package/dist/{index-g8qbdb03.js → index-0jz47061.js} +6 -3
  73. package/dist/{index-wq16ahsn.js → index-0x9cn9w1.js} +8 -8
  74. package/dist/{index-4mjhqadz.js → index-150zz6fh.js} +1 -1
  75. package/dist/{index-n7kwfw2r.js → index-16vwdyy5.js} +7 -7
  76. package/dist/{index-rwmpkss5.js → index-21919gcq.js} +4 -4
  77. package/dist/{index-5tbvdff4.js → index-3403gbzj.js} +200 -135
  78. package/dist/{index-0gyq3djm.js → index-4hb8nt93.js} +3 -3
  79. package/dist/{index-ebnngykq.js → index-6k86es2p.js} +142 -27
  80. package/dist/{index-ax2jhztn.js → index-7bjgyaj1.js} +4 -4
  81. package/dist/{index-h2wc01qk.js → index-9jvab89d.js} +2 -2
  82. package/dist/{index-w6bd03dc.js → index-a43xq1pg.js} +5 -5
  83. package/dist/{index-tqf7yg27.js → index-a4b0gbyg.js} +1 -1
  84. package/dist/{index-j5hce1ab.js → index-a865mj02.js} +5 -5
  85. package/dist/{index-37q80veb.js → index-angx1s0k.js} +4 -3
  86. package/dist/{index-z1tjp257.js → index-b64n4d0h.js} +1 -1
  87. package/dist/{index-gbmqa9x9.js → index-bmwfzz28.js} +9 -6
  88. package/dist/{index-tmtty2x5.js → index-f8cn4xqa.js} +290 -61
  89. package/dist/{index-j58gqrn2.js → index-ffa8x2as.js} +31 -24
  90. package/dist/{index-1bt88epp.js → index-g7jkrz0x.js} +36 -16
  91. package/dist/{index-qx53vezw.js → index-gjvjh960.js} +1 -1
  92. package/dist/{index-w23dh319.js → index-jw4gbfkv.js} +1 -1
  93. package/dist/index-knvkbfvh.js +25 -0
  94. package/dist/{index-vkbqdnkj.js → index-kvw6xew3.js} +6 -3
  95. package/dist/{index-rzmjkdd6.js → index-mp2kghkv.js} +3 -27
  96. package/dist/{index-nsjyysj0.js → index-mvvephtj.js} +5 -1
  97. package/dist/{index-9yyqq3mm.js → index-n78avt2p.js} +1 -1
  98. package/dist/{index-w6vr754t.js → index-nenz4gpb.js} +13 -9
  99. package/dist/{index-vt4sf4ep.js → index-pgy3h49n.js} +4 -4
  100. package/dist/{v2/server-1rfgbjfn.js → index-q28hsbpg.js} +15 -3
  101. package/dist/{index-a8acx4gc.js → index-q76br5zn.js} +3 -3
  102. package/dist/{index-sf94at64.js → index-rg1cezmj.js} +22 -22
  103. package/dist/{index-sh91t19a.js → index-s178h9z8.js} +4 -3
  104. package/dist/{index-4btknbqh.js → index-swgpe402.js} +48 -38
  105. package/dist/{index-k6xvbj2e.js → index-w28y7d0z.js} +2 -0
  106. package/dist/{index-j8epsc0g.js → index-wafzvyhg.js} +33 -10
  107. package/dist/{index-n5a170gs.js → index-wpwpn7nj.js} +166 -63
  108. package/dist/{index-tagss15p.js → index-x57ep4fp.js} +124 -63
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +84 -79
  111. package/dist/{logger-ewak5q1s.js → logger-wn328tfg.js} +1 -1
  112. package/dist/{message-index-rqtse28y.js → message-index-6r1x9cqh.js} +16 -16
  113. package/dist/{message-index-bounded-04rycpx4.js → message-index-bounded-fskdyc81.js} +16 -16
  114. package/dist/{message-time-backfill-a5ytnp53.js → message-time-backfill-nb5hhnrt.js} +3 -3
  115. package/dist/migration-worker.js +11 -11
  116. package/dist/plugin/boot-quiet.d.ts.map +1 -1
  117. package/dist/plugin/dream-timer.d.ts.map +1 -1
  118. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  119. package/dist/plugin/rpc-handlers.d.ts +2 -0
  120. package/dist/plugin/rpc-handlers.d.ts.map +1 -1
  121. package/dist/{project-embedding-registry-k0sd9k7v.js → project-embedding-registry-vy7sv9jt.js} +11 -11
  122. package/dist/raw-ordinal-warmup-worker.js +6 -6
  123. package/dist/{read-session-chunk-h1btx938.js → read-session-chunk-zgpvs423.js} +11 -11
  124. package/dist/{read-session-raw-vdf4wh78.js → read-session-raw-gm6xj30v.js} +3 -3
  125. package/dist/recomp-orchestrator-77xc8wpe.js +60 -0
  126. package/dist/{safe-notification-target-q0cyrx3x.js → safe-notification-target-jdynm677.js} +2 -2
  127. package/dist/{search-3rbdx6hw.js → search-72fkjwk2.js} +24 -24
  128. package/dist/{send-session-notification-2tp44tfa.js → send-session-notification-q8ngbap3.js} +6 -6
  129. package/dist/shared/hidden-zen-read.d.ts +24 -0
  130. package/dist/shared/hidden-zen-read.d.ts.map +1 -0
  131. package/dist/shared/history-owner.d.ts +12 -0
  132. package/dist/shared/history-owner.d.ts.map +1 -0
  133. package/dist/shared/off-thread-migration-clock.d.ts +8 -1
  134. package/dist/shared/off-thread-migration-clock.d.ts.map +1 -1
  135. package/dist/shared/reclaim-distance.d.ts +33 -0
  136. package/dist/shared/reclaim-distance.d.ts.map +1 -0
  137. package/dist/shared/redaction.d.ts.map +1 -1
  138. package/dist/shared/rpc-server.d.ts.map +1 -1
  139. package/dist/shared/sqlite.d.ts +2 -0
  140. package/dist/shared/sqlite.d.ts.map +1 -1
  141. package/dist/shared/stable-json.d.ts +7 -0
  142. package/dist/shared/stable-json.d.ts.map +1 -1
  143. package/dist/shared/tail-hygiene-json.d.ts +22 -0
  144. package/dist/shared/tail-hygiene-json.d.ts.map +1 -0
  145. package/dist/shared/transcript.d.ts +5 -0
  146. package/dist/shared/transcript.d.ts.map +1 -1
  147. package/dist/shared/user-facing-codes.d.ts +2 -2
  148. package/dist/{sqlite-j3tvg8r0.js → sqlite-4pqyynrs.js} +3 -1
  149. package/dist/{storage-memory-8168bgef.js → storage-memory-j3v3hc83.js} +2 -2
  150. package/dist/{storage-tags-61z5j2f9.js → storage-tags-35m4gms2.js} +5 -5
  151. package/dist/{transform-postprocess-phase-7qts7h54.js → transform-postprocess-phase-r8d406j0.js} +30 -30
  152. package/dist/v2/auto-search-worker.js +6 -6
  153. package/dist/v2/{compaction-marker-candidates-6nypjkpf.js → compaction-marker-candidates-a15w3mqh.js} +3 -3
  154. package/dist/v2/compaction-marker-candidates-worker.js +2 -2
  155. package/dist/v2/{context-xq4rtywr.js → context-z2yagwy4.js} +293 -91
  156. package/dist/v2/{derive-budgets-enckmg7y.js → derive-budgets-0rmpmxjw.js} +3 -3
  157. package/dist/v2/embedding-backfill-vr7wdtrf.js +20 -0
  158. package/dist/v2/embedding-worker-process.js +6 -2
  159. package/dist/v2/embedding-worker.js +6 -5
  160. package/dist/v2/hidden-completion.d.ts.map +1 -1
  161. package/dist/v2/history-owner-2cr9py37.js +243 -0
  162. package/dist/v2/hooks/context.d.ts.map +1 -1
  163. package/dist/v2/hooks/hidden-child.d.ts +2 -2
  164. package/dist/v2/hooks/hidden-child.d.ts.map +1 -1
  165. package/dist/v2/hooks/store.d.ts +1 -0
  166. package/dist/v2/hooks/store.d.ts.map +1 -1
  167. package/dist/v2/{logger-pj02s7sr.js → logger-te6e1j72.js} +1 -1
  168. package/dist/v2/{message-index-8e5z2xx8.js → message-index-9ezq6wze.js} +16 -16
  169. package/dist/v2/{message-index-bounded-5vh1h2g7.js → message-index-bounded-rqc603f2.js} +16 -16
  170. package/dist/v2/{message-time-backfill-2z365239.js → message-time-backfill-rz1pnpaj.js} +3 -3
  171. package/dist/v2/migration-worker.js +11 -11
  172. package/dist/v2/{project-embedding-registry-b77awytr.js → project-embedding-registry-ja23aygk.js} +11 -11
  173. package/dist/v2/raw-ordinal-warmup-worker.js +6 -6
  174. package/dist/v2/{read-session-chunk-4sat83cx.js → read-session-chunk-7f87tg2q.js} +11 -11
  175. package/dist/v2/{read-session-raw-a3hw9jsp.js → read-session-raw-h4azh85b.js} +3 -3
  176. package/dist/v2/recomp-orchestrator-s5tdpsbs.js +59 -0
  177. package/dist/v2/{safe-notification-target-y3p1hce9.js → safe-notification-target-936374xx.js} +2 -2
  178. package/dist/v2/search-2td1b1wy.js +46 -0
  179. package/dist/v2/{send-session-notification-ppgc8qdz.js → send-session-notification-6n7chhyp.js} +6 -6
  180. package/dist/v2/{server-v4fwha43.js → server-23znwjqk.js} +48 -38
  181. package/dist/v2/{server-nfan6zb6.js → server-2hxypdx5.js} +31 -24
  182. package/dist/v2/{server-ras2sxnc.js → server-44ryn9rb.js} +9 -6
  183. package/dist/v2/{server-fw31krgq.js → server-4easnf78.js} +19 -19
  184. package/dist/v2/{server-d6g4whc2.js → server-4qr18rfg.js} +3 -3
  185. package/dist/v2/{server-sy4b1sra.js → server-4rs8sm06.js} +5 -5
  186. package/dist/v2/{server-jdwd03ep.js → server-4zwx20yg.js} +7 -7
  187. package/dist/v2/{server-brhj8qtd.js → server-63ha7f0f.js} +3 -27
  188. package/dist/v2/{server-3t0q2cqx.js → server-7dv9wt9r.js} +1 -1
  189. package/dist/v2/{server-cw6521wn.js → server-7e087rvk.js} +2 -0
  190. package/dist/v2/{server-6byqfbqf.js → server-89fcbe37.js} +36 -16
  191. package/dist/v2/{server-hb6xhh9q.js → server-988cqjme.js} +6 -3
  192. package/dist/v2/{server-fpqe39as.js → server-9a6bwc12.js} +4 -4
  193. package/dist/v2/{server-t4k4qexw.js → server-9e5r8y60.js} +5 -1
  194. package/dist/v2/{server-qcw43339.js → server-ak7w74j9.js} +4 -4
  195. package/dist/v2/{server-dd0nja67.js → server-bx59ezg6.js} +4 -3
  196. package/dist/v2/{server-mv1w7t6z.js → server-c9w52qss.js} +99 -43
  197. package/dist/v2/{server-676xw7at.js → server-ckrb5rm8.js} +1 -1
  198. package/dist/{index-w4mw92w3.js → v2/server-cxsr0ng6.js} +15 -3
  199. package/dist/v2/{server-hcvcxzx7.js → server-f27he3j1.js} +5 -5
  200. package/dist/v2/{server-gtv9wbhq.js → server-gc8x2xdb.js} +144 -63
  201. package/dist/v2/{server-t528t8qm.js → server-hn9fb3v0.js} +2 -2
  202. package/dist/v2/{server-w3zeywp1.js → server-kmapq3v0.js} +289 -60
  203. package/dist/v2/server-knvkbfvh.js +25 -0
  204. package/dist/v2/{server-9yyqq3mm.js → server-n78avt2p.js} +1 -1
  205. package/dist/v2/{server-kdrezdy0.js → server-njnx39q2.js} +6 -3
  206. package/dist/v2/{server-x08d1xf3.js → server-npm52h2q.js} +4 -3
  207. package/dist/v2/{server-vb7pbd9p.js → server-nveratm5.js} +1 -1
  208. package/dist/v2/{server-kzns2hbz.js → server-s6jqh8bj.js} +1 -1
  209. package/dist/v2/{server-j8epsc0g.js → server-wafzvyhg.js} +33 -10
  210. package/dist/v2/{server-7ekna9zs.js → server-xqf2d2mg.js} +2 -2
  211. package/dist/v2/{server-7srtwsa4.js → server-z0rjemg1.js} +9 -9
  212. package/dist/v2/{server-wkdgjjch.js → server-zrwaj29a.js} +2 -2
  213. package/dist/v2/server.js +7 -6
  214. package/dist/v2/{sqlite-j3tvg8r0.js → sqlite-4pqyynrs.js} +3 -1
  215. package/dist/v2/{storage-memory-8168bgef.js → storage-memory-j3v3hc83.js} +2 -2
  216. package/dist/v2/{storage-tags-j2fzq3sw.js → storage-tags-c4zfcxv4.js} +5 -5
  217. package/dist/v2/store-reader.d.ts.map +1 -1
  218. package/dist/v2/{wrapup-orchestrator-s92ebfzv.js → wrapup-orchestrator-wg8dmmm9.js} +38 -35
  219. package/dist/wrapup-orchestrator-b1z99yg5.js +47 -0
  220. package/package.json +1 -1
  221. package/src/agents/hidden-agent-registrations.ts +22 -4
  222. package/src/config/compaction-accessor-guard.test.ts +3 -0
  223. package/src/features/magic-context/dreamer/cron.ts +8 -0
  224. package/src/shared/hidden-zen-read.test.ts +99 -0
  225. package/src/shared/hidden-zen-read.ts +88 -0
  226. package/src/shared/history-owner.test.ts +60 -0
  227. package/src/shared/history-owner.ts +43 -0
  228. package/src/shared/host-stall-profiler-node.ts +3 -1
  229. package/src/shared/host-stall-profiler.ts +3 -1
  230. package/src/shared/off-thread-migration-clock.test.ts +80 -10
  231. package/src/shared/off-thread-migration-clock.ts +37 -13
  232. package/src/shared/reclaim-distance.test.ts +111 -0
  233. package/src/shared/reclaim-distance.ts +91 -0
  234. package/src/shared/redaction.test.ts +16 -0
  235. package/src/shared/redaction.ts +8 -1
  236. package/src/shared/root-async-context.probe.mjs +36 -0
  237. package/src/shared/root-async-context.test.ts +49 -0
  238. package/src/shared/rpc-server.ts +27 -23
  239. package/src/shared/sqlite-busy-budget-review.test.ts +291 -0
  240. package/src/shared/sqlite-foreground-wait.test.ts +253 -1
  241. package/src/shared/sqlite.ts +55 -14
  242. package/src/shared/stable-json.ts +56 -14
  243. package/src/shared/tail-hygiene-json.test.ts +117 -0
  244. package/src/shared/tail-hygiene-json.ts +217 -0
  245. package/src/shared/transcript.ts +7 -0
  246. package/src/shared/user-facing-codes.ts +2 -2
  247. package/dist/embedding-backfill-re16xncd.js +0 -21
  248. package/dist/recomp-orchestrator-trcgmm23.js +0 -60
  249. package/dist/v2/embedding-backfill-xd9ygzgd.js +0 -20
  250. package/dist/v2/recomp-orchestrator-n11zv1f1.js +0 -59
  251. package/dist/v2/search-mvgqtkkz.js +0 -46
  252. package/dist/wrapup-orchestrator-df61jmz9.js +0 -47
@@ -0,0 +1,217 @@
1
+ import { jsonHashSink } from "./stable-json";
2
+
3
+ const MAX_MEMO_BYTES = 64 * 1024 * 1024;
4
+ const MAX_MEMO_ENTRIES = 10_000;
5
+
6
+ /**
7
+ * A bounded, process-local memo for individual parts and selected tool fields.
8
+ * Detached snapshots catch in-place host edits; reference equality alone cannot.
9
+ * Key collisions between sessions only evict entries, never imply equality.
10
+ */
11
+ export class TailHygieneJsonMemo {
12
+ private entries = new Map<string, { snapshot: unknown; result: string; bytes: number }>();
13
+ private bytes = 0;
14
+ private passText = new WeakMap<object, string>();
15
+ private passHash = new WeakMap<object, string>();
16
+
17
+ beginPass(): void {
18
+ this.passText = new WeakMap();
19
+ this.passHash = new WeakMap();
20
+ }
21
+
22
+ get(key: string, value: unknown, compute: () => string, fingerprint = false): string {
23
+ const pass = fingerprint ? this.passHash : this.passText;
24
+ const object = value !== null && typeof value === "object" ? value : undefined;
25
+ const local = object ? pass.get(object) : undefined;
26
+ if (local !== undefined) return local;
27
+ const previous = this.entries.get(key);
28
+ if (previous && sameJson(previous.snapshot, value)) {
29
+ if (object) pass.set(object, previous.result);
30
+ return previous.result;
31
+ }
32
+ const result = compute();
33
+ if (previous) {
34
+ this.bytes -= previous.bytes;
35
+ this.entries.delete(key);
36
+ }
37
+ try {
38
+ const copy = copyJson(value);
39
+ const bytes = copy.bytes + (key.length + result.length) * 2;
40
+ if (bytes <= MAX_MEMO_BYTES) {
41
+ this.entries.set(key, { snapshot: copy.value, result, bytes });
42
+ this.bytes += bytes;
43
+ if (object) pass.set(object, result);
44
+ }
45
+ } catch {
46
+ // Accessors and exotic objects retain their original serialization behavior.
47
+ }
48
+ while (this.bytes > MAX_MEMO_BYTES || this.entries.size > MAX_MEMO_ENTRIES) {
49
+ const oldest = this.entries.entries().next().value;
50
+ if (!oldest) break;
51
+ this.bytes -= oldest[1].bytes;
52
+ this.entries.delete(oldest[0]);
53
+ }
54
+ return result;
55
+ }
56
+ }
57
+
58
+ function copyJson(value: unknown): { value: unknown; bytes: number } {
59
+ const seen = new Map<object, unknown>();
60
+ let bytes = 0;
61
+ const copy = (current: unknown): unknown => {
62
+ bytes += 16;
63
+ if (typeof current === "string") bytes += current.length * 2;
64
+ if (bytes > MAX_MEMO_BYTES) throw new Error("memo capacity");
65
+ if (current === null || typeof current !== "object") {
66
+ if (["function", "symbol", "bigint"].includes(typeof current))
67
+ throw new Error("exotic");
68
+ return current;
69
+ }
70
+ if (seen.has(current)) return seen.get(current);
71
+ const prototype = Object.getPrototypeOf(current);
72
+ if (!Array.isArray(current) && prototype !== Object.prototype && prototype !== null)
73
+ throw new Error("exotic");
74
+ const result = Array.isArray(current)
75
+ ? new Array(current.length)
76
+ : Object.create(prototype);
77
+ seen.set(current, result);
78
+ for (const key of Object.keys(current)) {
79
+ const descriptor = Object.getOwnPropertyDescriptor(current, key);
80
+ if (!descriptor || !("value" in descriptor)) throw new Error("accessor");
81
+ bytes += key.length * 2 + 16;
82
+ if (key === "__proto__") {
83
+ Object.defineProperty(result, key, {
84
+ value: copy(descriptor.value),
85
+ enumerable: true,
86
+ writable: true,
87
+ configurable: true,
88
+ });
89
+ } else result[key] = copy(descriptor.value);
90
+ }
91
+ return result;
92
+ };
93
+ return { value: copy(value), bytes };
94
+ }
95
+
96
+ function sameJson(before: unknown, after: unknown): boolean {
97
+ const forward = new Map<object, object>();
98
+ const reverse = new Set<object>();
99
+ const same = (left: unknown, right: unknown): boolean => {
100
+ if (
101
+ left === null ||
102
+ right === null ||
103
+ typeof left !== "object" ||
104
+ typeof right !== "object"
105
+ )
106
+ return Object.is(left, right);
107
+ if (forward.has(left)) return forward.get(left) === right;
108
+ if (reverse.has(right) || Object.getPrototypeOf(left) !== Object.getPrototypeOf(right))
109
+ return false;
110
+ forward.set(left, right);
111
+ reverse.add(right);
112
+ if (Array.isArray(left) && (!Array.isArray(right) || left.length !== right.length))
113
+ return false;
114
+ const keys = Object.keys(left);
115
+ const otherKeys = Object.keys(right);
116
+ if (keys.length !== otherKeys.length) return false;
117
+ for (let index = 0; index < keys.length; index++) {
118
+ const key = keys[index];
119
+ // Pi sorts with localeCompare, which can tie distinct Unicode spellings.
120
+ // Preserve insertion order too, because a tied sort keeps that order.
121
+ if (key !== otherKeys[index]) return false;
122
+ const descriptor = Object.getOwnPropertyDescriptor(right, key);
123
+ if (
124
+ !descriptor ||
125
+ !("value" in descriptor) ||
126
+ !same((left as Record<string, unknown>)[key], descriptor.value)
127
+ )
128
+ return false;
129
+ }
130
+ return true;
131
+ };
132
+ return same(before, after);
133
+ }
134
+
135
+ /**
136
+ * Fingerprint excluded Pi content without retaining its whole JSON string.
137
+ * Match Pi's native JSON replacer: localeCompare key order, omitted undefined
138
+ * object fields, null array holes, and a marker for repeated non-array objects.
139
+ * Unsupported objects and array cycles use the original serializer; serialization
140
+ * errors produce the fingerprint of an empty string, as they did before.
141
+ */
142
+ export function piJsonHash(value: unknown, fallback: () => string): string {
143
+ const sink = jsonHashSink("excluded\0");
144
+ try {
145
+ const seen = new Set<object>();
146
+ const arrays = new Set<object>();
147
+ const write = (current: unknown): void => {
148
+ if (current === null || typeof current !== "object") {
149
+ if (["function", "symbol", "bigint"].includes(typeof current))
150
+ throw new Error("exotic");
151
+ sink.write(JSON.stringify(current) ?? "");
152
+ } else if (Array.isArray(current)) {
153
+ if (
154
+ Object.getPrototypeOf(current) !== Array.prototype ||
155
+ Object.hasOwn(current, "toJSON")
156
+ )
157
+ throw new Error("exotic array");
158
+ if (arrays.has(current)) throw new Error("array cycle");
159
+ arrays.add(current);
160
+ sink.write("[");
161
+ for (let index = 0; index < current.length; index++) {
162
+ if (index) sink.write(",");
163
+ const descriptor = Object.getOwnPropertyDescriptor(current, index);
164
+ if (descriptor && !("value" in descriptor)) throw new Error("accessor");
165
+ if (!descriptor && index in current) throw new Error("inherited array element");
166
+ write(descriptor?.value === undefined ? null : descriptor.value);
167
+ }
168
+ sink.write("]");
169
+ arrays.delete(current);
170
+ } else if (seen.has(current)) {
171
+ sink.write('"[Circular]"');
172
+ } else {
173
+ const prototype = Object.getPrototypeOf(current);
174
+ if (prototype !== Object.prototype && prototype !== null) throw new Error("exotic");
175
+ seen.add(current);
176
+ const entries = Object.keys(current).map((key): [string, unknown] => {
177
+ const descriptor = Object.getOwnPropertyDescriptor(current, key);
178
+ if (!descriptor || !("value" in descriptor)) throw new Error("accessor");
179
+ return [key, descriptor.value];
180
+ });
181
+ const sorted = Object.fromEntries(entries.sort(([a], [b]) => a.localeCompare(b)));
182
+ if (
183
+ entries.length <= 16 &&
184
+ entries.every(
185
+ ([key, child]) =>
186
+ key.length <= 4096 &&
187
+ (child === null ||
188
+ child === undefined ||
189
+ typeof child === "number" ||
190
+ typeof child === "boolean" ||
191
+ (typeof child === "string" && child.length <= 4096)),
192
+ )
193
+ ) {
194
+ sink.write(JSON.stringify(sorted));
195
+ return;
196
+ }
197
+ sink.write("{");
198
+ let first = true;
199
+ for (const [key, child] of Object.entries(sorted)) {
200
+ if (child === undefined) continue;
201
+ if (!first) sink.write(",");
202
+ first = false;
203
+ sink.write(JSON.stringify(key));
204
+ sink.write(":");
205
+ write(child);
206
+ }
207
+ sink.write("}");
208
+ }
209
+ };
210
+ write(value);
211
+ return sink.digest();
212
+ } catch {
213
+ const failed = jsonHashSink("excluded\0");
214
+ failed.write(fallback());
215
+ return failed.digest();
216
+ }
217
+ }
@@ -78,6 +78,13 @@ export interface TranscriptPart {
78
78
  /** Discriminator for filter logic. Stable across mutations. */
79
79
  readonly kind: TranscriptPartKind;
80
80
 
81
+ /** Host provenance, retained so control notices cannot masquerade as user turns. */
82
+ readonly synthetic?: boolean;
83
+ readonly ignored?: boolean;
84
+
85
+ /** Visual token mass using the host's normal request estimator. */
86
+ imageTokens?(): number;
87
+
81
88
  /** True when the host marks this tool result as carrying a user's answer. */
82
89
  hasUserAnswer?(): boolean;
83
90
 
@@ -17,8 +17,8 @@ export const USER_FACING_FAILURES = {
17
17
  history_boundary_unresolved: {
18
18
  code: "MC-H04",
19
19
  sentence:
20
- "This request was not sent: the message that marks where this session's history summary ends is missing from the OpenCode store, and without it the request is larger than the model's context window.",
21
- action: "Run /ctx-recomp to rebuild the history summary.",
20
+ "This request was not sent: Magic Context could not safely place the history summary boundary in the loaded conversation, and the untrimmed request is larger than the model's context window.",
21
+ action: "Reopen this session in its current project directory, then run /ctx-recomp to rebuild the history summary. A model with a larger context window can also help.",
22
22
  },
23
23
  history_over_window_unmanaged: {
24
24
  code: "MC-H06",
@@ -1,21 +0,0 @@
1
- import {
2
- ensureMemoryEmbeddings2
3
- } from "./index-w6bd03dc.js";
4
- import"./index-sf94at64.js";
5
- import"./index-ax2jhztn.js";
6
- import"./index-4dhv7mqz.js";
7
- import"./index-qt1qqasc.js";
8
- import"./index-gbmqa9x9.js";
9
- import"./index-vkbqdnkj.js";
10
- import"./index-g8qbdb03.js";
11
- import"./index-rzmjkdd6.js";
12
- import"./index-k6xvbj2e.js";
13
- import"./index-4mjhqadz.js";
14
- import"./index-j8epsc0g.js";
15
- import"./index-qx53vezw.js";
16
- import"./index-nsjyysj0.js";
17
- import"./index-0sahzkwr.js";
18
- import"./index-pavzsdc6.js";
19
- export {
20
- ensureMemoryEmbeddings2 as ensureMemoryEmbeddings
21
- };
@@ -1,60 +0,0 @@
1
- import {
2
- isRecompFailure2,
3
- isRecompSkip2,
4
- extractRecompReason2,
5
- setRecompStarting2,
6
- setRecompNote2,
7
- setRecompTerminal2,
8
- buildRecompDeps2,
9
- runManagedRecomp2
10
- } from "./index-rwmpkss5.js";
11
- import"./index-5tbvdff4.js";
12
- import"./index-sh91t19a.js";
13
- import"./index-sd3egckz.js";
14
- import"./index-n7kwfw2r.js";
15
- import"./index-wq16ahsn.js";
16
- import"./index-w6bd03dc.js";
17
- import"./index-9yyqq3mm.js";
18
- import"./index-sf94at64.js";
19
- import"./index-ax2jhztn.js";
20
- import"./index-4dhv7mqz.js";
21
- import"./index-w23dh319.js";
22
- import"./index-vt4sf4ep.js";
23
- import"./index-qt1qqasc.js";
24
- import"./index-x8a7jmkh.js";
25
- import"./index-tqf7yg27.js";
26
- import"./index-gbmqa9x9.js";
27
- import"./index-vkbqdnkj.js";
28
- import"./index-4btknbqh.js";
29
- import"./index-fb3zxn06.js";
30
- import"./index-j5hce1ab.js";
31
- import"./index-w4mw92w3.js";
32
- import"./index-fr0wbhdn.js";
33
- import"./index-g8qbdb03.js";
34
- import"./index-rzmjkdd6.js";
35
- import"./index-n5a170gs.js";
36
- import"./index-tmtty2x5.js";
37
- import"./index-1zx87sdm.js";
38
- import"./index-a8acx4gc.js";
39
- import"./index-37q80veb.js";
40
- import"./index-v0p37hm2.js";
41
- import"./index-k6xvbj2e.js";
42
- import"./index-h2wc01qk.js";
43
- import"./index-1bt88epp.js";
44
- import"./index-58e3y90n.js";
45
- import"./index-4mjhqadz.js";
46
- import"./index-j8epsc0g.js";
47
- import"./index-qx53vezw.js";
48
- import"./index-nsjyysj0.js";
49
- import"./index-0sahzkwr.js";
50
- import"./index-pavzsdc6.js";
51
- export {
52
- buildRecompDeps2 as buildRecompDeps,
53
- extractRecompReason2 as extractRecompReason,
54
- isRecompFailure2 as isRecompFailure,
55
- isRecompSkip2 as isRecompSkip,
56
- runManagedRecomp2 as runManagedRecomp,
57
- setRecompNote2 as setRecompNote,
58
- setRecompStarting2 as setRecompStarting,
59
- setRecompTerminal2 as setRecompTerminal
60
- };
@@ -1,20 +0,0 @@
1
- import {
2
- ensureMemoryEmbeddings2
3
- } from "./server-sy4b1sra.js";
4
- import"./server-fw31krgq.js";
5
- import"./server-fpqe39as.js";
6
- import"./server-4dhv7mqz.js";
7
- import"./server-qt1qqasc.js";
8
- import"./server-ras2sxnc.js";
9
- import"./server-hb6xhh9q.js";
10
- import"./server-kdrezdy0.js";
11
- import"./server-brhj8qtd.js";
12
- import"./server-cw6521wn.js";
13
- import"./server-3t0q2cqx.js";
14
- import"./server-j8epsc0g.js";
15
- import"./server-kzns2hbz.js";
16
- import"./server-t4k4qexw.js";
17
- import"./server-pavzsdc6.js";
18
- export {
19
- ensureMemoryEmbeddings2 as ensureMemoryEmbeddings
20
- };
@@ -1,59 +0,0 @@
1
- import {
2
- isRecompFailure2,
3
- isRecompSkip2,
4
- extractRecompReason2,
5
- setRecompStarting2,
6
- setRecompNote2,
7
- setRecompTerminal2,
8
- buildRecompDeps2,
9
- runManagedRecomp2
10
- } from "./server-mv1w7t6z.js";
11
- import"./server-x08d1xf3.js";
12
- import"./server-jdwd03ep.js";
13
- import"./server-7srtwsa4.js";
14
- import"./server-sy4b1sra.js";
15
- import"./server-9yyqq3mm.js";
16
- import"./server-fw31krgq.js";
17
- import"./server-fpqe39as.js";
18
- import"./server-4dhv7mqz.js";
19
- import"./server-t528t8qm.js";
20
- import"./server-qcw43339.js";
21
- import"./server-qt1qqasc.js";
22
- import"./server-676xw7at.js";
23
- import"./server-d6g4whc2.js";
24
- import"./server-vb7pbd9p.js";
25
- import"./server-x8a7jmkh.js";
26
- import"./server-ras2sxnc.js";
27
- import"./server-hb6xhh9q.js";
28
- import"./server-v4fwha43.js";
29
- import"./server-fb3zxn06.js";
30
- import"./server-hcvcxzx7.js";
31
- import"./server-1rfgbjfn.js";
32
- import"./server-fr0wbhdn.js";
33
- import"./server-kdrezdy0.js";
34
- import"./server-brhj8qtd.js";
35
- import"./server-gtv9wbhq.js";
36
- import"./server-w3zeywp1.js";
37
- import"./server-1zx87sdm.js";
38
- import"./server-wkdgjjch.js";
39
- import"./server-dd0nja67.js";
40
- import"./server-51779zs2.js";
41
- import"./server-cw6521wn.js";
42
- import"./server-7ekna9zs.js";
43
- import"./server-6byqfbqf.js";
44
- import"./server-2ra6pwf3.js";
45
- import"./server-3t0q2cqx.js";
46
- import"./server-j8epsc0g.js";
47
- import"./server-kzns2hbz.js";
48
- import"./server-t4k4qexw.js";
49
- import"./server-pavzsdc6.js";
50
- export {
51
- buildRecompDeps2 as buildRecompDeps,
52
- extractRecompReason2 as extractRecompReason,
53
- isRecompFailure2 as isRecompFailure,
54
- isRecompSkip2 as isRecompSkip,
55
- runManagedRecomp2 as runManagedRecomp,
56
- setRecompNote2 as setRecompNote,
57
- setRecompStarting2 as setRecompStarting,
58
- setRecompTerminal2 as setRecompTerminal
59
- };
@@ -1,46 +0,0 @@
1
- import {
2
- createUnifiedSearchDiagnostics2,
3
- searchMessageHistory2,
4
- parseIdShapedQuery2,
5
- resolveMemoriesByIdsForSearch2,
6
- unifiedSearch2,
7
- formatSearchResults2
8
- } from "./server-nfan6zb6.js";
9
- import"./server-jdwd03ep.js";
10
- import"./server-7srtwsa4.js";
11
- import"./server-sy4b1sra.js";
12
- import"./server-9yyqq3mm.js";
13
- import"./server-fw31krgq.js";
14
- import"./server-fpqe39as.js";
15
- import"./server-4dhv7mqz.js";
16
- import"./server-qt1qqasc.js";
17
- import"./server-ras2sxnc.js";
18
- import"./server-hb6xhh9q.js";
19
- import"./server-hcvcxzx7.js";
20
- import"./server-1rfgbjfn.js";
21
- import"./server-fr0wbhdn.js";
22
- import"./server-kdrezdy0.js";
23
- import"./server-brhj8qtd.js";
24
- import"./server-gtv9wbhq.js";
25
- import"./server-w3zeywp1.js";
26
- import"./server-1zx87sdm.js";
27
- import"./server-wkdgjjch.js";
28
- import"./server-dd0nja67.js";
29
- import"./server-51779zs2.js";
30
- import"./server-cw6521wn.js";
31
- import"./server-7ekna9zs.js";
32
- import"./server-6byqfbqf.js";
33
- import"./server-2ra6pwf3.js";
34
- import"./server-3t0q2cqx.js";
35
- import"./server-j8epsc0g.js";
36
- import"./server-kzns2hbz.js";
37
- import"./server-t4k4qexw.js";
38
- import"./server-pavzsdc6.js";
39
- export {
40
- createUnifiedSearchDiagnostics2 as createUnifiedSearchDiagnostics,
41
- formatSearchResults2 as formatSearchResults,
42
- parseIdShapedQuery2 as parseIdShapedQuery,
43
- resolveMemoriesByIdsForSearch2 as resolveMemoriesByIdsForSearch,
44
- searchMessageHistory2 as searchMessageHistory,
45
- unifiedSearch2 as unifiedSearch
46
- };
@@ -1,47 +0,0 @@
1
- import {
2
- runManagedWrapup2
3
- } from "./index-w6vr754t.js";
4
- import"./index-rwmpkss5.js";
5
- import"./index-5tbvdff4.js";
6
- import"./index-sh91t19a.js";
7
- import"./index-sd3egckz.js";
8
- import"./index-n7kwfw2r.js";
9
- import"./index-wq16ahsn.js";
10
- import"./index-w6bd03dc.js";
11
- import"./index-9yyqq3mm.js";
12
- import"./index-sf94at64.js";
13
- import"./index-ax2jhztn.js";
14
- import"./index-4dhv7mqz.js";
15
- import"./index-w23dh319.js";
16
- import"./index-vt4sf4ep.js";
17
- import"./index-qt1qqasc.js";
18
- import"./index-x8a7jmkh.js";
19
- import"./index-tqf7yg27.js";
20
- import"./index-gbmqa9x9.js";
21
- import"./index-vkbqdnkj.js";
22
- import"./index-4btknbqh.js";
23
- import"./index-fb3zxn06.js";
24
- import"./index-j5hce1ab.js";
25
- import"./index-w4mw92w3.js";
26
- import"./index-fr0wbhdn.js";
27
- import"./index-g8qbdb03.js";
28
- import"./index-rzmjkdd6.js";
29
- import"./index-n5a170gs.js";
30
- import"./index-tmtty2x5.js";
31
- import"./index-1zx87sdm.js";
32
- import"./index-a8acx4gc.js";
33
- import"./index-37q80veb.js";
34
- import"./index-v0p37hm2.js";
35
- import"./index-k6xvbj2e.js";
36
- import"./index-h2wc01qk.js";
37
- import"./index-1bt88epp.js";
38
- import"./index-58e3y90n.js";
39
- import"./index-4mjhqadz.js";
40
- import"./index-j8epsc0g.js";
41
- import"./index-qx53vezw.js";
42
- import"./index-nsjyysj0.js";
43
- import"./index-0sahzkwr.js";
44
- import"./index-pavzsdc6.js";
45
- export {
46
- runManagedWrapup2 as runManagedWrapup
47
- };