@cortexkit/opencode-magic-context 0.49.10 → 0.49.12

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 (237) hide show
  1. package/README.md +1 -1
  2. package/dist/agents/smart-notes-dreamer-gate.fixture.d.ts +28 -0
  3. package/dist/agents/smart-notes-dreamer-gate.fixture.d.ts.map +1 -0
  4. package/dist/{announcement-hdbkt8v5.js → announcement-g789dmt6.js} +2 -2
  5. package/dist/auto-search-worker.js +4 -4
  6. package/dist/{compaction-marker-candidates-xxz35vwp.js → compaction-marker-candidates-v5c6997n.js} +3 -3
  7. package/dist/compaction-marker-candidates-worker.js +1 -1
  8. package/dist/config/agent-disable.d.ts +14 -0
  9. package/dist/config/agent-disable.d.ts.map +1 -1
  10. package/dist/config/dependency-notes.d.ts +34 -0
  11. package/dist/config/dependency-notes.d.ts.map +1 -0
  12. package/dist/config/schema/magic-context.d.ts.map +1 -1
  13. package/dist/{conflict-warning-hook-w3crzrar.js → conflict-warning-hook-f4x5wed7.js} +8 -8
  14. package/dist/{context-ey3ap3cc.js → context-dam8p201.js} +306 -119
  15. package/dist/{derive-budgets-3nbxsyss.js → derive-budgets-5306b1jt.js} +3 -3
  16. package/dist/embedding-backfill-qbfcbp87.js +21 -0
  17. package/dist/embedding-worker-process.js +2 -2
  18. package/dist/embedding-worker.js +6 -6
  19. package/dist/features/magic-context/compartment-chunk-embedding.d.ts +12 -1
  20. package/dist/features/magic-context/compartment-chunk-embedding.d.ts.map +1 -1
  21. package/dist/features/magic-context/dreamer/task-config.d.ts +22 -4
  22. package/dist/features/magic-context/dreamer/task-config.d.ts.map +1 -1
  23. package/dist/features/magic-context/dreamer/task-registry.d.ts +22 -0
  24. package/dist/features/magic-context/dreamer/task-registry.d.ts.map +1 -1
  25. package/dist/features/magic-context/dreamer/task-scheduler.d.ts +4 -1
  26. package/dist/features/magic-context/dreamer/task-scheduler.d.ts.map +1 -1
  27. package/dist/features/magic-context/memory/embedding-openai.d.ts +32 -0
  28. package/dist/features/magic-context/memory/embedding-openai.d.ts.map +1 -1
  29. package/dist/features/magic-context/memory/project-identity.d.ts +1 -0
  30. package/dist/features/magic-context/memory/project-identity.d.ts.map +1 -1
  31. package/dist/features/magic-context/memory/unborn-head.d.ts +34 -0
  32. package/dist/features/magic-context/memory/unborn-head.d.ts.map +1 -0
  33. package/dist/features/magic-context/memory-enabled.d.ts +5 -0
  34. package/dist/features/magic-context/memory-enabled.d.ts.map +1 -0
  35. package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
  36. package/dist/features/magic-context/search-pool-fixture.d.ts +39 -0
  37. package/dist/features/magic-context/search-pool-fixture.d.ts.map +1 -0
  38. package/dist/features/magic-context/search.d.ts.map +1 -1
  39. package/dist/features/magic-context/storage-tags.d.ts +2 -0
  40. package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
  41. package/dist/features/magic-context/transform-decision-log.d.ts +57 -2
  42. package/dist/features/magic-context/transform-decision-log.d.ts.map +1 -1
  43. package/dist/{history-owner-ty29fz0f.js → history-owner-xp3pngv7.js} +3 -3
  44. package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
  45. package/dist/hooks/magic-context/compartment-prompt.d.ts +6 -0
  46. package/dist/hooks/magic-context/compartment-prompt.d.ts.map +1 -1
  47. package/dist/hooks/magic-context/compartment-runner-incremental.d.ts.map +1 -1
  48. package/dist/hooks/magic-context/compartment-runner-types.d.ts +3 -0
  49. package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -1
  50. package/dist/hooks/magic-context/compartment-trigger-error.d.ts +12 -0
  51. package/dist/hooks/magic-context/compartment-trigger-error.d.ts.map +1 -0
  52. package/dist/hooks/magic-context/historian-prompt-fit.d.ts +14 -2
  53. package/dist/hooks/magic-context/historian-prompt-fit.d.ts.map +1 -1
  54. package/dist/hooks/magic-context/hook.d.ts.map +1 -1
  55. package/dist/hooks/magic-context/pending-materialization.d.ts +2 -0
  56. package/dist/hooks/magic-context/pending-materialization.d.ts.map +1 -1
  57. package/dist/hooks/magic-context/producer-window-guard.d.ts.map +1 -1
  58. package/dist/hooks/magic-context/protected-tail-boundary.d.ts +12 -0
  59. package/dist/hooks/magic-context/protected-tail-boundary.d.ts.map +1 -1
  60. package/dist/hooks/magic-context/raw-exact-ordinal-read.d.ts +58 -0
  61. package/dist/hooks/magic-context/raw-exact-ordinal-read.d.ts.map +1 -0
  62. package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts +7 -0
  63. package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts.map +1 -1
  64. package/dist/hooks/magic-context/read-session-db.d.ts +5 -0
  65. package/dist/hooks/magic-context/read-session-db.d.ts.map +1 -1
  66. package/dist/hooks/magic-context/read-session-raw.d.ts +19 -0
  67. package/dist/hooks/magic-context/read-session-raw.d.ts.map +1 -1
  68. package/dist/hooks/magic-context/recomp-orchestrator.d.ts +2 -0
  69. package/dist/hooks/magic-context/recomp-orchestrator.d.ts.map +1 -1
  70. package/dist/hooks/magic-context/render-options.d.ts +21 -0
  71. package/dist/hooks/magic-context/render-options.d.ts.map +1 -0
  72. package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
  73. package/dist/hooks/magic-context/tag-messages.d.ts +4 -0
  74. package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
  75. package/dist/hooks/magic-context/transform-compartment-phase.d.ts +2 -0
  76. package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -1
  77. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  78. package/dist/hooks/magic-context/transform.d.ts +5 -7
  79. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  80. package/dist/hooks/magic-context/wrapup-orchestrator.d.ts.map +1 -1
  81. package/dist/{index-21919gcq.js → index-05n6ykca.js} +4 -4
  82. package/dist/{index-q76br5zn.js → index-1d289pq2.js} +26 -21
  83. package/dist/{index-w28y7d0z.js → index-1sarmj9z.js} +15 -15
  84. package/dist/{index-x57ep4fp.js → index-1wwh38fk.js} +323 -121
  85. package/dist/{index-pgy3h49n.js → index-2pgxcncf.js} +4 -4
  86. package/dist/{index-ffa8x2as.js → index-6sytd5w3.js} +18 -13
  87. package/dist/{index-16vwdyy5.js → index-6sz25c3s.js} +3 -3
  88. package/dist/{index-4hb8nt93.js → index-7h8a1xpc.js} +3 -3
  89. package/dist/{index-rg1cezmj.js → index-7zd5asz9.js} +140 -17
  90. package/dist/{index-jw4gbfkv.js → index-8ketfacn.js} +2 -2
  91. package/dist/{index-nenz4gpb.js → index-95s8xaj1.js} +6 -5
  92. package/dist/{index-bmwfzz28.js → index-9vqb5p1s.js} +4 -4
  93. package/dist/{index-0jz47061.js → index-a8bvhwqs.js} +190 -30
  94. package/dist/{index-wpwpn7nj.js → index-b16gpywn.js} +9 -9
  95. package/dist/{index-g7jkrz0x.js → index-bp5083x2.js} +1 -1
  96. package/dist/{index-mp2kghkv.js → index-dyvbsvga.js} +1 -1
  97. package/dist/{index-s178h9z8.js → index-f71thw8j.js} +1 -1
  98. package/dist/{index-kvw6xew3.js → index-fkx2qnvw.js} +2 -2
  99. package/dist/{index-f8cn4xqa.js → index-fwefky9w.js} +18 -5
  100. package/dist/{index-a43xq1pg.js → index-fx90bvjd.js} +5 -5
  101. package/dist/{index-0sahzkwr.js → index-g2q4htwp.js} +46 -2
  102. package/dist/{index-7bjgyaj1.js → index-gf0psee3.js} +243 -135
  103. package/dist/{index-mw7c950g.js → index-gp3kcpc4.js} +1 -1
  104. package/dist/{index-gjvjh960.js → index-hqkczed7.js} +1 -1
  105. package/dist/{index-mvvephtj.js → index-j75v2476.js} +1 -1
  106. package/dist/{index-150zz6fh.js → index-k29z4aqh.js} +1 -1
  107. package/dist/{index-b64n4d0h.js → index-kee4kn5j.js} +1 -1
  108. package/dist/index-ksdyrrav.js +52 -0
  109. package/dist/{index-angx1s0k.js → index-mmfa86mt.js} +16 -6
  110. package/dist/{index-9jvab89d.js → index-n6m03s3n.js} +2 -2
  111. package/dist/{index-q28hsbpg.js → index-nj7yykkx.js} +1 -1
  112. package/dist/{index-ghc9f0n7.js → index-p5y3k4g7.js} +29 -1
  113. package/dist/{index-6k86es2p.js → index-qtbdx42g.js} +54 -25
  114. package/dist/{index-a865mj02.js → index-tdn0zkw4.js} +4 -4
  115. package/dist/{index-0x9cn9w1.js → index-wqs4q74r.js} +8 -8
  116. package/dist/{index-swgpe402.js → index-x2xjyq8f.js} +11 -11
  117. package/dist/{index-a4b0gbyg.js → index-y9f76s3f.js} +1 -1
  118. package/dist/{index-3403gbzj.js → index-yx5kgp2x.js} +288 -127
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.js +97 -76
  121. package/dist/{logger-wn328tfg.js → logger-jm3sqqzr.js} +2 -2
  122. package/dist/{message-index-bounded-fskdyc81.js → message-index-bounded-nq6rp8xa.js} +16 -16
  123. package/dist/{message-index-6r1x9cqh.js → message-index-df7swgy1.js} +16 -16
  124. package/dist/{message-time-backfill-nb5hhnrt.js → message-time-backfill-qjge9044.js} +3 -3
  125. package/dist/migration-worker.js +11 -11
  126. package/dist/plugin/dream-timer.d.ts.map +1 -1
  127. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  128. package/dist/plugin/tool-registry.d.ts.map +1 -1
  129. package/dist/{project-embedding-registry-vy7sv9jt.js → project-embedding-registry-q0ysjyzc.js} +11 -11
  130. package/dist/raw-ordinal-warmup-worker.js +12 -7
  131. package/dist/{read-session-chunk-zgpvs423.js → read-session-chunk-ax05f7gr.js} +11 -11
  132. package/dist/{read-session-raw-gm6xj30v.js → read-session-raw-m56hc7v2.js} +7 -3
  133. package/dist/{recomp-orchestrator-77xc8wpe.js → recomp-orchestrator-a0mvby4e.js} +29 -29
  134. package/dist/{safe-notification-target-jdynm677.js → safe-notification-target-1szv1k5k.js} +3 -3
  135. package/dist/{search-72fkjwk2.js → search-fm002702.js} +23 -23
  136. package/dist/{send-session-notification-q8ngbap3.js → send-session-notification-y2wg3fkh.js} +6 -6
  137. package/dist/shared/data-path.d.ts +4 -0
  138. package/dist/shared/data-path.d.ts.map +1 -1
  139. package/dist/shared/prompt-surface-runtime.d.ts +5 -0
  140. package/dist/shared/prompt-surface-runtime.d.ts.map +1 -1
  141. package/dist/{storage-tags-35m4gms2.js → storage-tags-yygfb9c8.js} +7 -5
  142. package/dist/{task-config-cgpg0nvh.js → task-config-x3qmayd2.js} +6 -2
  143. package/dist/tools/ctx-note/tools.d.ts.map +1 -1
  144. package/dist/{transform-postprocess-phase-r8d406j0.js → transform-postprocess-phase-s84rdf32.js} +29 -29
  145. package/dist/v2/auto-search-worker.js +4 -4
  146. package/dist/v2/{compaction-marker-candidates-a15w3mqh.js → compaction-marker-candidates-1vqwr3s5.js} +2 -2
  147. package/dist/v2/compaction-marker-candidates-worker.js +1 -1
  148. package/dist/v2/{context-z2yagwy4.js → context-x60fa16g.js} +758 -286
  149. package/dist/v2/{derive-budgets-0rmpmxjw.js → derive-budgets-z25jw3py.js} +3 -3
  150. package/dist/v2/embedding-backfill-mbjyza2a.js +20 -0
  151. package/dist/v2/embedding-worker-process.js +1 -1
  152. package/dist/v2/embedding-worker.js +5 -5
  153. package/dist/v2/{history-owner-2cr9py37.js → history-owner-42e16w0n.js} +2 -2
  154. package/dist/v2/hooks/context.d.ts.map +1 -1
  155. package/dist/v2/hooks/dream-manual.d.ts +1 -0
  156. package/dist/v2/hooks/dream-manual.d.ts.map +1 -1
  157. package/dist/v2/hooks/dream-timer.d.ts +3 -1
  158. package/dist/v2/hooks/dream-timer.d.ts.map +1 -1
  159. package/dist/v2/hooks/dream-trigger.d.ts +6 -1
  160. package/dist/v2/hooks/dream-trigger.d.ts.map +1 -1
  161. package/dist/v2/hooks/payload.d.ts +1 -1
  162. package/dist/v2/hooks/payload.d.ts.map +1 -1
  163. package/dist/v2/hooks/transform-decision-binding.d.ts +15 -0
  164. package/dist/v2/hooks/transform-decision-binding.d.ts.map +1 -0
  165. package/dist/v2/hooks/transform-features.d.ts +40 -0
  166. package/dist/v2/hooks/transform-features.d.ts.map +1 -0
  167. package/dist/v2/{logger-te6e1j72.js → logger-7qt02bnb.js} +1 -1
  168. package/dist/v2/{message-index-9ezq6wze.js → message-index-5nayhm1r.js} +15 -15
  169. package/dist/v2/{message-index-bounded-rqc603f2.js → message-index-bounded-pgv1ndpb.js} +15 -15
  170. package/dist/v2/{message-time-backfill-rz1pnpaj.js → message-time-backfill-bsteyc4d.js} +2 -2
  171. package/dist/v2/migration-worker.js +10 -10
  172. package/dist/v2/{project-embedding-registry-ja23aygk.js → project-embedding-registry-jbmjc0p4.js} +12 -10
  173. package/dist/v2/raw-ordinal-warmup-worker.js +12 -7
  174. package/dist/v2/{read-session-chunk-7f87tg2q.js → read-session-chunk-hr3w5bjk.js} +10 -10
  175. package/dist/v2/{read-session-raw-h4azh85b.js → read-session-raw-b3tf6ra1.js} +6 -2
  176. package/dist/v2/recomp-orchestrator-8w3449eb.js +59 -0
  177. package/dist/v2/{safe-notification-target-936374xx.js → safe-notification-target-qg7n2s77.js} +2 -2
  178. package/dist/v2/{search-2td1b1wy.js → search-mhmxgq0e.js} +22 -22
  179. package/dist/v2/{send-session-notification-6n7chhyp.js → send-session-notification-jevgj9fe.js} +5 -5
  180. package/dist/v2/{server-npm52h2q.js → server-05xjtq6c.js} +1 -1
  181. package/dist/v2/{server-s6jqh8bj.js → server-0ppsweh6.js} +1 -1
  182. package/dist/v2/server-0s95v3en.js +49 -0
  183. package/dist/v2/{server-2hxypdx5.js → server-25tg45b4.js} +17 -12
  184. package/dist/v2/{server-44ryn9rb.js → server-2x42esxd.js} +3 -3
  185. package/dist/v2/{server-4qr18rfg.js → server-37ngj8qw.js} +10 -51
  186. package/dist/v2/{server-4zwx20yg.js → server-4c10404h.js} +3 -3
  187. package/dist/v2/{server-23znwjqk.js → server-50mkkhy1.js} +14 -11
  188. package/dist/v2/{server-c9w52qss.js → server-5gvkzzrf.js} +290 -76
  189. package/dist/v2/{server-7dv9wt9r.js → server-6pmqg9m4.js} +1 -1
  190. package/dist/v2/{server-ak7w74j9.js → server-83ygfha2.js} +4 -4
  191. package/dist/v2/{server-4rs8sm06.js → server-9ewkzqgd.js} +5 -5
  192. package/dist/v2/{server-kmapq3v0.js → server-bxpwy6fy.js} +18 -5
  193. package/dist/v2/{server-zrwaj29a.js → server-d8tj10db.js} +25 -20
  194. package/dist/v2/{server-cxsr0ng6.js → server-da07v4xp.js} +1 -1
  195. package/dist/v2/{server-9e5r8y60.js → server-f2xf5gcb.js} +46 -2
  196. package/dist/v2/{server-hn9fb3v0.js → server-f7jfmrrz.js} +2 -2
  197. package/dist/v2/{server-f27he3j1.js → server-fa75w6gp.js} +4 -4
  198. package/dist/v2/{server-njnx39q2.js → server-gvkm8xaj.js} +189 -29
  199. package/dist/v2/{server-ckrb5rm8.js → server-h0410h0v.js} +1 -1
  200. package/dist/v2/{server-nveratm5.js → server-kn9n2qgd.js} +1 -1
  201. package/dist/v2/{server-gc8x2xdb.js → server-m97brnat.js} +9 -9
  202. package/dist/v2/{server-z0rjemg1.js → server-nmrm2rjy.js} +8 -8
  203. package/dist/v2/{server-bx59ezg6.js → server-prg55b7k.js} +16 -6
  204. package/dist/v2/{server-89fcbe37.js → server-pwv4ezb0.js} +1 -1
  205. package/dist/v2/{server-r5p3b1wy.js → server-qd11g795.js} +29 -1
  206. package/dist/v2/{server-988cqjme.js → server-rrqpvwqd.js} +2 -2
  207. package/dist/v2/{server-4easnf78.js → server-sz8jj92q.js} +150 -18
  208. package/dist/v2/{server-7e087rvk.js → server-th4y11y7.js} +16 -16
  209. package/dist/v2/{server-9a6bwc12.js → server-vknbt0gq.js} +255 -135
  210. package/dist/v2/{server-63ha7f0f.js → server-yrvqaswb.js} +1 -1
  211. package/dist/v2/{server-xqf2d2mg.js → server-zs8d0s3b.js} +2 -2
  212. package/dist/v2/server.d.ts.map +1 -1
  213. package/dist/v2/server.js +13 -6
  214. package/dist/v2/{storage-tags-c4zfcxv4.js → storage-tags-a2gq6dw7.js} +6 -4
  215. package/dist/v2/store-reader.d.ts +4 -0
  216. package/dist/v2/store-reader.d.ts.map +1 -1
  217. package/dist/v2/{task-config-x0hq3qfd.js → task-config-nvz8mapa.js} +6 -2
  218. package/dist/v2/{wrapup-orchestrator-wg8dmmm9.js → wrapup-orchestrator-r82y780v.js} +30 -29
  219. package/dist/wrapup-orchestrator-vmt6z3q5.js +47 -0
  220. package/package.json +1 -1
  221. package/src/agents/smart-notes-dreamer-gate.fixture.ts +171 -0
  222. package/src/agents/smart-notes-dreamer-gate.golden.json +245 -0
  223. package/src/agents/smart-notes-dreamer-gate.test.ts +161 -0
  224. package/src/config/agent-disable.ts +13 -0
  225. package/src/config/dependency-notes.test.ts +114 -0
  226. package/src/config/dependency-notes.ts +80 -0
  227. package/src/config/schema/magic-context.ts +23 -14
  228. package/src/features/magic-context/dreamer/task-registry.ts +40 -0
  229. package/src/shared/chunk-vector-writer-guard.test.ts +72 -0
  230. package/src/shared/data-path.test.ts +35 -1
  231. package/src/shared/data-path.ts +57 -1
  232. package/src/shared/prompt-surface-runtime.test.ts +15 -0
  233. package/src/shared/prompt-surface-runtime.ts +12 -0
  234. package/dist/embedding-backfill-3h2m5n0q.js +0 -21
  235. package/dist/v2/embedding-backfill-vr7wdtrf.js +0 -20
  236. package/dist/v2/recomp-orchestrator-s5tdpsbs.js +0 -59
  237. package/dist/wrapup-orchestrator-b1z99yg5.js +0 -47
@@ -0,0 +1,245 @@
1
+ {
2
+ "note": "Per seeded case of smart-notes-dreamer-gate.fixture.ts: digests (first 16 hex of SHA-256) of ctx_note and of every other ctx_* tool, rendered by the code from before ctx_note followed the dreamer gate. Regenerate only from that earlier code.",
3
+ "cases": [
4
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
5
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
6
+ {"oc1":{"note":"203313946dd10c99","other":"6bb6d0403c9bdf5a"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
7
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"14c2726b01a927b0"}},
8
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
9
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
10
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
11
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
12
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
13
+ {"oc1":{"note":"5e328e39778cb567","other":"4fd4397501ea6f9b"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
14
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"54dbfd87d2797687"},"oc2":{"note":"77ba47811631afc8","other":"14c2726b01a927b0"}},
15
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"14c2726b01a927b0"}},
16
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"14c2726b01a927b0"}},
17
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"844d6d24749bf667","other":"aaeea4da23ab4c69"}},
18
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
19
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
20
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
21
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
22
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
23
+ {"oc1":{"note":"203313946dd10c99","other":"a03294137096fb5a"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"14c2726b01a927b0"}},
24
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
25
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"14c2726b01a927b0"}},
26
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
27
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
28
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
29
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
30
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"bd5eca31e5312ff6","other":"aaeea4da23ab4c69"}},
31
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
32
+ {"oc1":{"note":"ee8313665a36e94b","other":"3e5523e090d8d67e"},"oc2":{"note":"844d6d24749bf667","other":"e95d30c58af0084f"}},
33
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
34
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
35
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
36
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
37
+ {"oc1":{"note":"ee8313665a36e94b","other":"3e5523e090d8d67e"},"oc2":{"note":"844d6d24749bf667","other":"e95d30c58af0084f"}},
38
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"844d6d24749bf667","other":"aaeea4da23ab4c69"}},
39
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"77ba47811631afc8","other":"82adb7331bdbbbe0"}},
40
+ {"oc1":{"note":"5e328e39778cb567","other":"6bb6d0403c9bdf5a"},"oc2":{"note":"77ba47811631afc8","other":"82adb7331bdbbbe0"}},
41
+ {"oc1":{"note":"203313946dd10c99","other":"6bb6d0403c9bdf5a"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
42
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
43
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
44
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
45
+ {"oc1":{"note":"ee8313665a36e94b","other":"3e5523e090d8d67e"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"e475a147d5c29f4d"}},
46
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
47
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"844d6d24749bf667","other":"aaeea4da23ab4c69"}},
48
+ {"oc1":{"note":"ee8313665a36e94b","other":"3e5523e090d8d67e"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"e475a147d5c29f4d"}},
49
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
50
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
51
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"54dbfd87d2797687"},"oc2":{"note":"77ba47811631afc8","other":"14c2726b01a927b0"}},
52
+ {"oc1":{"note":"203313946dd10c99","other":"a03294137096fb5a"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"14c2726b01a927b0"}},
53
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
54
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
55
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"bd5eca31e5312ff6","other":"aaeea4da23ab4c69"}},
56
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
57
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
58
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
59
+ {"oc1":{"note":"203313946dd10c99","other":"a03294137096fb5a"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"14c2726b01a927b0"}},
60
+ {"oc1":{"note":"5e328e39778cb567","other":"6bb6d0403c9bdf5a"},"oc2":{"note":"77ba47811631afc8","other":"82adb7331bdbbbe0"}},
61
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
62
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
63
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
64
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"bd5eca31e5312ff6","other":"aaeea4da23ab4c69"}},
65
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"3e5523e090d8d67e"},"oc2":{"note":"bd5eca31e5312ff6","other":"e95d30c58af0084f"}},
66
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
67
+ {"oc1":{"note":"203313946dd10c99","other":"a03294137096fb5a"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"14c2726b01a927b0"}},
68
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
69
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"bd5eca31e5312ff6","other":"aaeea4da23ab4c69"}},
70
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"54dbfd87d2797687"},"oc2":{"note":"bd5eca31e5312ff6","other":"b60b476d6098598b"}},
71
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
72
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
73
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
74
+ {"oc1":{"note":"5e328e39778cb567","other":"6bb6d0403c9bdf5a"},"oc2":{"note":"77ba47811631afc8","other":"82adb7331bdbbbe0"}},
75
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
76
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
77
+ {"oc1":{"note":"5e328e39778cb567","other":"a03294137096fb5a"},"oc2":{"note":"77ba47811631afc8","other":"14c2726b01a927b0"}},
78
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
79
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"54dbfd87d2797687"},"oc2":{"note":"bd5eca31e5312ff6","other":"b60b476d6098598b"}},
80
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
81
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
82
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
83
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"54dbfd87d2797687"},"oc2":{"note":"77ba47811631afc8","other":"14c2726b01a927b0"}},
84
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
85
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"844d6d24749bf667","other":"aaeea4da23ab4c69"}},
86
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
87
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
88
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
89
+ {"oc1":{"note":"5e328e39778cb567","other":"6bb6d0403c9bdf5a"},"oc2":{"note":"77ba47811631afc8","other":"82adb7331bdbbbe0"}},
90
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
91
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
92
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
93
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
94
+ {"oc1":{"note":"5e328e39778cb567","other":"6bb6d0403c9bdf5a"},"oc2":{"note":"77ba47811631afc8","other":"82adb7331bdbbbe0"}},
95
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
96
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"bd5eca31e5312ff6","other":"aaeea4da23ab4c69"}},
97
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
98
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"844d6d24749bf667","other":"aaeea4da23ab4c69"}},
99
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"77ba47811631afc8","other":"82adb7331bdbbbe0"}},
100
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
101
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
102
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"3e5523e090d8d67e"},"oc2":{"note":"bd5eca31e5312ff6","other":"e95d30c58af0084f"}},
103
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
104
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"14c2726b01a927b0"}},
105
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
106
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
107
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
108
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"77ba47811631afc8","other":"82adb7331bdbbbe0"}},
109
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
110
+ {"oc1":{"note":"5e328e39778cb567","other":"4fd4397501ea6f9b"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
111
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
112
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
113
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
114
+ {"oc1":{"note":"203313946dd10c99","other":"a03294137096fb5a"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"14c2726b01a927b0"}},
115
+ {"oc1":{"note":"ee8313665a36e94b","other":"3e5523e090d8d67e"},"oc2":{"note":"844d6d24749bf667","other":"e95d30c58af0084f"}},
116
+ {"oc1":{"note":"203313946dd10c99","other":"5634c05b91b62b5f"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"e475a147d5c29f4d"}},
117
+ {"oc1":{"note":"5e328e39778cb567","other":"4fd4397501ea6f9b"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
118
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
119
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
120
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
121
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
122
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"54dbfd87d2797687"},"oc2":{"note":"bd5eca31e5312ff6","other":"b60b476d6098598b"}},
123
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
124
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"844d6d24749bf667","other":"aaeea4da23ab4c69"}},
125
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
126
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"54dbfd87d2797687"},"oc2":{"note":"77ba47811631afc8","other":"14c2726b01a927b0"}},
127
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
128
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
129
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
130
+ {"oc1":{"note":"ee8313665a36e94b","other":"3e5523e090d8d67e"},"oc2":{"note":"844d6d24749bf667","other":"e95d30c58af0084f"}},
131
+ {"oc1":{"note":"ee8313665a36e94b","other":"3e5523e090d8d67e"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"e475a147d5c29f4d"}},
132
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
133
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
134
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
135
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
136
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
137
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
138
+ {"oc1":{"note":"203313946dd10c99","other":"5634c05b91b62b5f"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"e475a147d5c29f4d"}},
139
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
140
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
141
+ {"oc1":{"note":"203313946dd10c99","other":"5634c05b91b62b5f"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"e475a147d5c29f4d"}},
142
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
143
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
144
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
145
+ {"oc1":{"note":"ee8313665a36e94b","other":"3e5523e090d8d67e"},"oc2":{"note":"844d6d24749bf667","other":"e95d30c58af0084f"}},
146
+ {"oc1":{"note":"203313946dd10c99","other":"6bb6d0403c9bdf5a"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
147
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
148
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
149
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
150
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"14c2726b01a927b0"}},
151
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
152
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
153
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
154
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"3e5523e090d8d67e"},"oc2":{"note":"bd5eca31e5312ff6","other":"e95d30c58af0084f"}},
155
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
156
+ {"oc1":{"note":"ee8313665a36e94b","other":"3e5523e090d8d67e"},"oc2":{"note":"844d6d24749bf667","other":"e95d30c58af0084f"}},
157
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
158
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
159
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"844d6d24749bf667","other":"aaeea4da23ab4c69"}},
160
+ {"oc1":{"note":"203313946dd10c99","other":"5634c05b91b62b5f"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"e475a147d5c29f4d"}},
161
+ {"oc1":{"note":"5e328e39778cb567","other":"4fd4397501ea6f9b"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
162
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"bd5eca31e5312ff6","other":"aaeea4da23ab4c69"}},
163
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
164
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
165
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
166
+ {"oc1":{"note":"5e328e39778cb567","other":"6bb6d0403c9bdf5a"},"oc2":{"note":"77ba47811631afc8","other":"82adb7331bdbbbe0"}},
167
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
168
+ {"oc1":{"note":"ee8313665a36e94b","other":"3e5523e090d8d67e"},"oc2":{"note":"844d6d24749bf667","other":"e95d30c58af0084f"}},
169
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
170
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
171
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
172
+ {"oc1":{"note":"5e328e39778cb567","other":"a03294137096fb5a"},"oc2":{"note":"77ba47811631afc8","other":"14c2726b01a927b0"}},
173
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
174
+ {"oc1":{"note":"5e328e39778cb567","other":"4fd4397501ea6f9b"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
175
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"54dbfd87d2797687"},"oc2":{"note":"bd5eca31e5312ff6","other":"b60b476d6098598b"}},
176
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"77ba47811631afc8","other":"82adb7331bdbbbe0"}},
177
+ {"oc1":{"note":"5e328e39778cb567","other":"4fd4397501ea6f9b"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
178
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
179
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"3e5523e090d8d67e"},"oc2":{"note":"77ba47811631afc8","other":"e475a147d5c29f4d"}},
180
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"54dbfd87d2797687"},"oc2":{"note":"bd5eca31e5312ff6","other":"b60b476d6098598b"}},
181
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"54dbfd87d2797687"},"oc2":{"note":"bd5eca31e5312ff6","other":"b60b476d6098598b"}},
182
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
183
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
184
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
185
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
186
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
187
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
188
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"bd5eca31e5312ff6","other":"aaeea4da23ab4c69"}},
189
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
190
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
191
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
192
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"bd5eca31e5312ff6","other":"aaeea4da23ab4c69"}},
193
+ {"oc1":{"note":"ee8313665a36e94b","other":"3e5523e090d8d67e"},"oc2":{"note":"844d6d24749bf667","other":"e95d30c58af0084f"}},
194
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
195
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"14c2726b01a927b0"}},
196
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
197
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
198
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"844d6d24749bf667","other":"aaeea4da23ab4c69"}},
199
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"844d6d24749bf667","other":"aaeea4da23ab4c69"}},
200
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
201
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"bd5eca31e5312ff6","other":"aaeea4da23ab4c69"}},
202
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
203
+ {"oc1":{"note":"ee8313665a36e94b","other":"3e5523e090d8d67e"},"oc2":{"note":"844d6d24749bf667","other":"e95d30c58af0084f"}},
204
+ {"oc1":{"note":"5e328e39778cb567","other":"4fd4397501ea6f9b"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
205
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"54dbfd87d2797687"},"oc2":{"note":"77ba47811631afc8","other":"14c2726b01a927b0"}},
206
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
207
+ {"oc1":{"note":"5e328e39778cb567","other":"5634c05b91b62b5f"},"oc2":{"note":"77ba47811631afc8","other":"e475a147d5c29f4d"}},
208
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
209
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"844d6d24749bf667","other":"aaeea4da23ab4c69"}},
210
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"3e5523e090d8d67e"},"oc2":{"note":"bd5eca31e5312ff6","other":"e95d30c58af0084f"}},
211
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
212
+ {"oc1":{"note":"ee8313665a36e94b","other":"3e5523e090d8d67e"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"e475a147d5c29f4d"}},
213
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
214
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"3e5523e090d8d67e"},"oc2":{"note":"bd5eca31e5312ff6","other":"e95d30c58af0084f"}},
215
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"bd5eca31e5312ff6","other":"aaeea4da23ab4c69"}},
216
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"bd5eca31e5312ff6","other":"aaeea4da23ab4c69"}},
217
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
218
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"54dbfd87d2797687"},"oc2":{"note":"77ba47811631afc8","other":"14c2726b01a927b0"}},
219
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"3e5523e090d8d67e"},"oc2":{"note":"bd5eca31e5312ff6","other":"e95d30c58af0084f"}},
220
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"54dbfd87d2797687"},"oc2":{"note":"bd5eca31e5312ff6","other":"b60b476d6098598b"}},
221
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
222
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"14c2726b01a927b0"}},
223
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"77ba47811631afc8","other":"82adb7331bdbbbe0"}},
224
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
225
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
226
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"844d6d24749bf667","other":"aaeea4da23ab4c69"}},
227
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"fd65e917c148392b"},"oc2":{"note":"bd5eca31e5312ff6","other":"aaeea4da23ab4c69"}},
228
+ {"oc1":{"note":"5e328e39778cb567","other":"6bb6d0403c9bdf5a"},"oc2":{"note":"77ba47811631afc8","other":"82adb7331bdbbbe0"}},
229
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
230
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"844d6d24749bf667","other":"7cd7d7dbc3b3292d"}},
231
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"844d6d24749bf667","other":"aaeea4da23ab4c69"}},
232
+ {"oc1":{"note":"5e328e39778cb567","other":"a03294137096fb5a"},"oc2":{"note":"77ba47811631afc8","other":"14c2726b01a927b0"}},
233
+ {"oc1":{"note":"ee8313665a36e94b","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
234
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"77ba47811631afc8","other":"d4d4a55dab6eab78"}},
235
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
236
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"14c2726b01a927b0"}},
237
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
238
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
239
+ {"oc1":{"note":"ee8313665a36e94b","other":"54dbfd87d2797687"},"oc2":{"note":"844d6d24749bf667","other":"b60b476d6098598b"}},
240
+ {"oc1":{"note":"ee8313665a36e94b","other":"fd65e917c148392b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"82adb7331bdbbbe0"}},
241
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"c7a7ada4a5a7bc10"},"oc2":{"note":"bd5eca31e5312ff6","other":"7cd7d7dbc3b3292d"}},
242
+ {"oc1":{"note":"203313946dd10c99","other":"4fd4397501ea6f9b"},"oc2":{"note":"7a2fdfdf6129e4fb","other":"d4d4a55dab6eab78"}},
243
+ {"oc1":{"note":"bcd91a4a67d0c462","other":"54dbfd87d2797687"},"oc2":{"note":"bd5eca31e5312ff6","other":"b60b476d6098598b"}}
244
+ ]
245
+ }
@@ -0,0 +1,161 @@
1
+ import { afterAll, beforeAll, expect, test } from "bun:test";
2
+ import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { loadPluginConfigDetailed, parsePluginConfig } from "../config";
6
+ import { isDreamerRunnable, isSmartNoteSurfaceAvailable } from "../config/agent-disable";
7
+ import { pluginConfigReader } from "../config/live-run-config";
8
+ import { closeDatabase, openDatabase } from "../features/magic-context/storage";
9
+ import type { Database } from "../shared/sqlite";
10
+ import { createTestTempDirFromPath } from "../shared/test-temp-dir";
11
+ import {
12
+ GATE_CASE_COUNT,
13
+ gateCases,
14
+ renderToolSurfaces,
15
+ type ToolSurfaceDigests,
16
+ } from "./smart-notes-dreamer-gate.fixture";
17
+ import golden from "./smart-notes-dreamer-gate.golden.json";
18
+
19
+ // Smart notes are evaluated by the dreamer, so ctx_note drops its smart-note
20
+ // argument and text when the dreamer is not runnable, as it already did for
21
+ // smart_notes.enabled=false. The golden holds the tool bytes from before that
22
+ // gate; every config with a runnable dreamer must still render them exactly.
23
+
24
+ const SMART_NOTE_TEXT = /surface_condition|smart.note|outside checker/i;
25
+ const oldXdg = process.env.XDG_DATA_HOME;
26
+ let dir: string;
27
+ let db: Database;
28
+
29
+ beforeAll(() => {
30
+ dir = createTestTempDirFromPath(join(tmpdir(), "smart-notes-dreamer-gate-"));
31
+ process.env.XDG_DATA_HOME = dir;
32
+ db = openDatabase();
33
+ });
34
+ afterAll(() => {
35
+ closeDatabase();
36
+ if (oldXdg === undefined) delete process.env.XDG_DATA_HOME;
37
+ else process.env.XDG_DATA_HOME = oldXdg;
38
+ rmSync(dir, { recursive: true, force: true });
39
+ });
40
+
41
+ const render = (raw: Record<string, unknown>): Promise<ToolSurfaceDigests> => {
42
+ const config = parsePluginConfig(raw);
43
+ // The value context.ts passes to the OpenCode 2 per-request rewrite.
44
+ return renderToolSurfaces({
45
+ config,
46
+ directory: dir,
47
+ db,
48
+ oc2SmartNotes: isSmartNoteSurfaceAvailable(config),
49
+ });
50
+ };
51
+
52
+ test("ctx_* tool bytes match the pre-gate golden for every config with a runnable dreamer, and only ctx_note changes when the dreamer is off", async () => {
53
+ const cases = gateCases();
54
+ const expected = (golden as { cases: Array<Omit<ToolSurfaceDigests, "text">> }).cases;
55
+ expect(cases).toHaveLength(GATE_CASE_COUNT);
56
+ expect(expected).toHaveLength(GATE_CASE_COUNT);
57
+
58
+ let runnable = 0;
59
+ let gatedChanged = 0;
60
+ let gatedAlreadyOff = 0;
61
+ for (const [index, raw] of cases.entries()) {
62
+ const config = parsePluginConfig(raw);
63
+ const got = await render(raw);
64
+ const before = expected[index];
65
+ if (!before) throw new Error(`golden has no case ${index}`);
66
+ const label = `case ${index} ${JSON.stringify(raw)}`;
67
+ if (isDreamerRunnable(config)) {
68
+ runnable++;
69
+ expect({ label, oc1: got.oc1, oc2: got.oc2 }).toEqual({
70
+ label,
71
+ oc1: before.oc1,
72
+ oc2: before.oc2,
73
+ });
74
+ continue;
75
+ }
76
+ // Dreamer off: every other tool is untouched...
77
+ expect({ label, oc1: got.oc1.other, oc2: got.oc2.other }).toEqual({
78
+ label,
79
+ oc1: before.oc1.other,
80
+ oc2: before.oc2.other,
81
+ });
82
+ // ...and ctx_note is exactly the smart-notes-off surface of the same config.
83
+ const off = await render({ ...raw, smart_notes: { enabled: false } });
84
+ expect({ label, oc1: got.oc1.note, oc2: got.oc2.note }).toEqual({
85
+ label,
86
+ oc1: off.oc1.note,
87
+ oc2: off.oc2.note,
88
+ });
89
+ const ctxNote = (text: string) =>
90
+ JSON.stringify((JSON.parse(text) as Record<string, unknown>).ctx_note);
91
+ expect(ctxNote(got.text.oc1)).not.toMatch(SMART_NOTE_TEXT);
92
+ expect(ctxNote(got.text.oc2)).not.toMatch(SMART_NOTE_TEXT);
93
+ if (config.smart_notes.enabled === false) {
94
+ gatedAlreadyOff++;
95
+ expect(got.oc1.note).toBe(before.oc1.note);
96
+ expect(got.oc2.note).toBe(before.oc2.note);
97
+ } else {
98
+ gatedChanged++;
99
+ expect(got.oc1.note).not.toBe(before.oc1.note);
100
+ expect(got.oc2.note).not.toBe(before.oc2.note);
101
+ }
102
+ }
103
+ // Keep the differential meaningful: both sides must be well populated.
104
+ expect(runnable).toBeGreaterThanOrEqual(100);
105
+ expect(gatedChanged).toBeGreaterThanOrEqual(40);
106
+ expect(gatedAlreadyOff).toBeGreaterThanOrEqual(20);
107
+ });
108
+
109
+ test("the OpenCode 2 per-request rewrite receives the dreamer-aware smart-note flag", () => {
110
+ // The differential above passes this flag itself, so pin the production call.
111
+ const source = readFileSync(join(import.meta.dir, "../v2/hooks/context.ts"), "utf8");
112
+ expect(source).toMatch(
113
+ /applyV2PromptSurfaceTools\(\s*draft,\s*promptSurfaceRuntime,\s*config\.prompt_surface,[^)]*isSmartNoteSurfaceAvailable\(config\),\s*\)/,
114
+ );
115
+ });
116
+
117
+ test("a live dreamer toggle never changes the tool bytes registered for this process", async () => {
118
+ const previousHome = process.env.HOME;
119
+ const previousConfigHome = process.env.XDG_CONFIG_HOME;
120
+ try {
121
+ for (const [bootDreamer, liveDreamer] of [
122
+ [{}, { disable: true }],
123
+ [{ disable: true }, { disable: false }],
124
+ ] as const) {
125
+ const root = createTestTempDirFromPath(join(dir, "live-"));
126
+ process.env.HOME = root;
127
+ process.env.XDG_CONFIG_HOME = join(root, "config");
128
+ const directory = join(root, "project");
129
+ const configPath = join(root, "config", "cortexkit", "magic-context.jsonc");
130
+ mkdirSync(directory, { recursive: true });
131
+ mkdirSync(join(root, "config", "cortexkit"), { recursive: true });
132
+ writeFileSync(configPath, JSON.stringify({ dreamer: bootDreamer }));
133
+ const boot = loadPluginConfigDetailed(directory, false).config;
134
+ const bootAvailable = isSmartNoteSurfaceAvailable(boot);
135
+ // Registration reads the boot config once, as the hosts do.
136
+ const registered = () =>
137
+ renderToolSurfaces({
138
+ config: boot,
139
+ directory,
140
+ db,
141
+ oc2SmartNotes: isSmartNoteSurfaceAvailable(boot),
142
+ });
143
+ const before = await registered();
144
+
145
+ const reader = pluginConfigReader(directory, boot);
146
+ writeFileSync(configPath, JSON.stringify({ dreamer: liveDreamer }));
147
+ const effective = reader.poll().effective;
148
+ // The live view did flip, so the comparison below is not vacuous...
149
+ expect(isSmartNoteSurfaceAvailable(effective)).toBe(!bootAvailable);
150
+ // ...while the boot config the tools were built from is untouched.
151
+ expect(isSmartNoteSurfaceAvailable(boot)).toBe(bootAvailable);
152
+ const after = await registered();
153
+ expect(after.text).toEqual(before.text);
154
+ }
155
+ } finally {
156
+ if (previousHome === undefined) delete process.env.HOME;
157
+ else process.env.HOME = previousHome;
158
+ if (previousConfigHome === undefined) delete process.env.XDG_CONFIG_HOME;
159
+ else process.env.XDG_CONFIG_HOME = previousConfigHome;
160
+ }
161
+ });
@@ -12,6 +12,19 @@ export function isDreamerRunnable(config: { dreamer?: { disable?: boolean } | nu
12
12
  return !!config.dreamer && config.dreamer.disable !== true;
13
13
  }
14
14
 
15
+ /**
16
+ * Whether smart notes can work at all: `smart_notes.enabled` is not false AND
17
+ * the dreamer, which evaluates every smart-note condition, is runnable. A smart
18
+ * note written without a runnable dreamer would stay parked forever, so the
19
+ * ctx_note tool definition advertises `surface_condition` only when this holds.
20
+ */
21
+ export function isSmartNoteSurfaceAvailable(config: {
22
+ dreamer?: { disable?: boolean } | null;
23
+ smart_notes?: { enabled?: boolean } | null;
24
+ }): boolean {
25
+ return config.smart_notes?.enabled !== false && isDreamerRunnable(config);
26
+ }
27
+
15
28
  export function isHistorianRunnable(config: { historian?: { disable?: boolean } | null }): boolean {
16
29
  return config.historian?.disable !== true;
17
30
  }
@@ -0,0 +1,114 @@
1
+ import { afterEach, expect, test } from "bun:test";
2
+ import { readFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { parsePluginConfig } from ".";
5
+ import {
6
+ configDependencyNotes,
7
+ logConfigDependencyNotesOnce,
8
+ resetConfigDependencyNotesForTest,
9
+ } from "./dependency-notes";
10
+
11
+ afterEach(() => resetConfigDependencyNotesForTest());
12
+
13
+ const notesFor = (raw: Record<string, unknown>) => configDependencyNotes(parsePluginConfig(raw));
14
+
15
+ test("a default or fully enabled config produces no dependency notes", () => {
16
+ expect(notesFor({})).toEqual([]);
17
+ expect(notesFor({ dreamer: {} })).toEqual([]);
18
+ expect(notesFor({ dreamer: {}, memory: { enabled: true } })).toEqual([]);
19
+ // Memory off without a runnable dreamer has no dreamer schedule to lose.
20
+ expect(notesFor({ memory: { enabled: false } })).toEqual([]);
21
+ expect(
22
+ notesFor({
23
+ dreamer: { disable: true },
24
+ smart_notes: { enabled: false },
25
+ memory: { enabled: false },
26
+ }),
27
+ ).toHaveLength(1);
28
+ });
29
+
30
+ test("memory off with a runnable dreamer names the dreamer schedule it stops", () => {
31
+ const notes = notesFor({ dreamer: {}, memory: { enabled: false } });
32
+ expect(notes).toHaveLength(1);
33
+ expect(notes[0]).toBe(
34
+ "memory.enabled is false, so these scheduled dreamer tasks do not run for this project, on schedule or through /ctx-dream: map-memories, verify, verify-broad, curate, compress-cues, classify-memories, retrospective, promote-primers, refresh-primers. maintain-docs, evaluate-smart-notes and review-user-memories still run.",
35
+ );
36
+ // Every task unscheduled: nothing is lost, so nothing is reported.
37
+ const tasks = Object.fromEntries(
38
+ [
39
+ "map-memories",
40
+ "verify",
41
+ "verify-broad",
42
+ "curate",
43
+ "compress-cues",
44
+ "classify-memories",
45
+ "retrospective",
46
+ "maintain-docs",
47
+ "evaluate-smart-notes",
48
+ "review-user-memories",
49
+ "promote-primers",
50
+ "refresh-primers",
51
+ ].map((task) => [task, { schedule: "" }]),
52
+ );
53
+ expect(notesFor({ dreamer: { tasks }, memory: { enabled: false } })).toEqual([]);
54
+ // Only tasks that do not need project memory scheduled: nothing is lost either.
55
+ const nonMemory = {
56
+ ...tasks,
57
+ "maintain-docs": { schedule: "0 1 * * *" },
58
+ "evaluate-smart-notes": { schedule: "0 3 * * *" },
59
+ "review-user-memories": { schedule: "0 3 * * *" },
60
+ };
61
+ expect(notesFor({ dreamer: { tasks: nonMemory }, memory: { enabled: false } })).toEqual([]);
62
+ // One memory task scheduled: the note names just that one.
63
+ expect(
64
+ notesFor({
65
+ dreamer: { tasks: { ...tasks, curate: { schedule: "0 4 * * 0" } } },
66
+ memory: { enabled: false },
67
+ }),
68
+ ).toEqual([
69
+ "memory.enabled is false, so these scheduled dreamer tasks do not run for this project, on schedule or through /ctx-dream: curate. maintain-docs, evaluate-smart-notes and review-user-memories still run.",
70
+ ]);
71
+ });
72
+
73
+ test("a disabled dreamer reports smart notes and the user-memory review schedule", () => {
74
+ const notes = notesFor({ dreamer: { disable: true } });
75
+ expect(notes).toEqual([
76
+ expect.stringContaining("smart_notes.enabled has no effect") as unknown as string,
77
+ expect.stringContaining(
78
+ "dreamer.tasks.review-user-memories.schedule has no effect",
79
+ ) as unknown as string,
80
+ ]);
81
+ expect(notesFor({ dreamer: { disable: true }, smart_notes: { enabled: false } })).toHaveLength(
82
+ 1,
83
+ );
84
+ expect(
85
+ notesFor({
86
+ dreamer: { disable: true, tasks: { "review-user-memories": { schedule: "" } } },
87
+ smart_notes: { enabled: false },
88
+ }),
89
+ ).toEqual([]);
90
+ });
91
+
92
+ test("each note is logged once per process", () => {
93
+ const lines: string[] = [];
94
+ const config = parsePluginConfig({ dreamer: { disable: true } });
95
+ expect(logConfigDependencyNotesOnce(config, (line) => lines.push(line))).toHaveLength(2);
96
+ expect(logConfigDependencyNotesOnce(config, (line) => lines.push(line))).toEqual([]);
97
+ expect(lines).toHaveLength(2);
98
+ expect(lines.every((line) => line.startsWith("[magic-context] config note: "))).toBe(true);
99
+ // A second plugin instance with a different config still reports its own notes.
100
+ const memoryOff = parsePluginConfig({ dreamer: {}, memory: { enabled: false } });
101
+ expect(logConfigDependencyNotesOnce(memoryOff, (line) => lines.push(line))).toHaveLength(1);
102
+ expect(lines).toHaveLength(3);
103
+ });
104
+
105
+ test("every host logs the dependency notes at startup", () => {
106
+ const src = join(import.meta.dir, "..");
107
+ for (const [file, call] of [
108
+ ["index.ts", "logConfigDependencyNotesOnce(pluginConfig, log);"],
109
+ ["v2/hooks/context.ts", "logConfigDependencyNotesOnce(config, log);"],
110
+ ["../../pi-plugin/src/index.ts", "logConfigDependencyNotesOnce(config, log);"],
111
+ ] as const) {
112
+ expect(readFileSync(join(src, file), "utf8")).toContain(call);
113
+ }
114
+ });