@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
@@ -1,14 +1,16 @@
1
1
  import {
2
2
  getMagicContextBuiltinCommands,
3
- isDreamerRunnable,
4
- isCompactionEnabled,
5
3
  getProtectedTokensTierOverrides,
6
4
  loadPluginConfigDetailed,
7
5
  historianRunConfig,
8
6
  dreamerRunConfig,
9
7
  pluginConfigReader,
10
8
  withLiveDreamerOutputCap,
9
+ embedPauseBySession,
10
+ autoEmbedAttemptedBySession,
11
+ autoEmbedIdentityBySession,
11
12
  invalidateAutoEmbedSession,
13
+ clearEmbedSessionState,
12
14
  acquireCompartmentLease,
13
15
  releaseCompartmentLeaseBestEffort,
14
16
  isCompartmentLeaseHeld,
@@ -59,7 +61,7 @@ import {
59
61
  rebaseSessionCoordinatesAsync,
60
62
  resolveOpenCodeProtectedTailBoundary,
61
63
  getActiveCompartmentRun
62
- } from "./index-3403gbzj.js";
64
+ } from "./index-yx5kgp2x.js";
63
65
  import"./index-sd3egckz.js";
64
66
  import {
65
67
  getHarness2
@@ -67,11 +69,11 @@ import {
67
69
  import {
68
70
  getDataDir,
69
71
  getMagicContextStorageDir
70
- } from "./index-0sahzkwr.js";
72
+ } from "./index-g2q4htwp.js";
71
73
  import {
72
74
  log2,
73
75
  sessionLog2
74
- } from "./index-mvvephtj.js";
76
+ } from "./index-j75v2476.js";
75
77
  import {
76
78
  isSaneLimit,
77
79
  setOutputReserveConfig,
@@ -81,16 +83,74 @@ import {
81
83
  deriveHistorianChunkTokens2,
82
84
  resolveKnownHistorianContextLimit2,
83
85
  resolveHistorianContextLimit2
84
- } from "./index-jw4gbfkv.js";
85
- import"./index-w28y7d0z.js";
86
+ } from "./index-8ketfacn.js";
87
+ import"./index-1sarmj9z.js";
86
88
  import {
87
89
  CANONICAL_DREAM_TASKS,
88
90
  DREAM_TASK_CAPABILITIES,
89
91
  formatUnsupportedDreamTasks,
90
92
  isCanonicalDreamTask,
91
93
  buildDreamTaskRuntimeConfigs2,
92
- userMemoryCollectionEnabled2
93
- } from "./index-ghc9f0n7.js";
94
+ userObservationCollectionEnabled2,
95
+ userObservationsRequested2
96
+ } from "./index-p5y3k4g7.js";
97
+ import {
98
+ logConfigDependencyNotesOnce,
99
+ runSessionProjectBackfill,
100
+ createLiveSessionState,
101
+ RETROSPECTIVE_MAX_USER_MESSAGE_CHARS,
102
+ RETROSPECTIVE_MESSAGE_TRUNCATION_MARKER,
103
+ createDreamTaskExecutor,
104
+ runManualDream,
105
+ runDueTasksForProject,
106
+ startDreamScheduleTimer,
107
+ createDreamTimerModuleClient,
108
+ ensureProjectRegisteredFromOpenCodeDirectory,
109
+ resolveContextLimit,
110
+ resolveModelKey,
111
+ createScheduler,
112
+ describeStorageUnavailability,
113
+ runEmbedHistoryDrain,
114
+ getSessionErrorInfo,
115
+ summarizeManualDream,
116
+ createChatMessageHook,
117
+ createToolExecuteAfterHook,
118
+ recordHiddenVariantWarning,
119
+ registerRpcHandlers,
120
+ stageOpenCodeV2TransformDecision,
121
+ bindOpenCodeV2TransformDecision,
122
+ armLatestThinkingRecoveryFromError,
123
+ createM0RenderOptions,
124
+ lkgReplayLimit,
125
+ measureLkgReplay,
126
+ STORAGE_BUSY_MESSAGE,
127
+ StorageBusyRefusalError,
128
+ bindSystemDateRequestIdentity,
129
+ bindSystemDateOutput,
130
+ registerSystemDateRefresh,
131
+ UnmanagedOverWindowError,
132
+ UnresolvedHistoryBoundaryError,
133
+ createTransform,
134
+ createSubcModuleClient,
135
+ createModuleToolBackends,
136
+ createRustRefusalRecovery,
137
+ createSystemPromptHashHandler,
138
+ tryMessagesTransformLkgReplay,
139
+ createMessagesTransformHandler,
140
+ subagentToolRefusal,
141
+ hideSubagentTools,
142
+ createCtxExpandTools,
143
+ createCtxMemoryTools,
144
+ createCtxMemoryListTools,
145
+ CTX_NOTE_DESCRIPTION,
146
+ withoutSmartNoteText,
147
+ createCtxNoteTools,
148
+ createCtxReduceTools,
149
+ createCtxSearchTools,
150
+ applyJsonSchemaParameterDescriptions,
151
+ MagicContextRpcServer,
152
+ subagentTemperature
153
+ } from "./index-1wwh38fk.js";
94
154
  import {
95
155
  resolveHistorianModel2
96
156
  } from "./index-8cd2j99z.js";
@@ -105,12 +165,12 @@ import {
105
165
  openDatabaseAsync,
106
166
  isDatabasePersisted,
107
167
  getDatabasePersistenceError
108
- } from "./index-swgpe402.js";
168
+ } from "./index-x2xjyq8f.js";
109
169
  import {
110
170
  setHomeProjectPermission,
111
171
  resolveProjectIdentityForSession,
112
172
  scheduleAfterBootQuiet
113
- } from "./index-0jz47061.js";
173
+ } from "./index-a8bvhwqs.js";
114
174
  import {
115
175
  needsBlockedRead,
116
176
  markHostUnservedRow,
@@ -142,13 +202,13 @@ import {
142
202
  cleanUserText2,
143
203
  readRawSessionMessageIdOrdinalsForRange2,
144
204
  readRawSessionMessageOrdinalById2
145
- } from "./index-wpwpn7nj.js";
205
+ } from "./index-b16gpywn.js";
146
206
  import {
147
207
  hasMeaningfulUserText2,
148
208
  preloadTokenizer,
149
209
  estimateTokens
150
- } from "./index-gjvjh960.js";
151
- import"./index-kvw6xew3.js";
210
+ } from "./index-hqkczed7.js";
211
+ import"./index-fkx2qnvw.js";
152
212
  import {
153
213
  inRootAsyncContext2,
154
214
  withSqliteTransformPass2,
@@ -156,17 +216,17 @@ import {
156
216
  isTransientSqliteError2,
157
217
  withAsyncPrivilegedWriter2
158
218
  } from "./index-wafzvyhg.js";
159
- import"./index-mp2kghkv.js";
219
+ import"./index-dyvbsvga.js";
160
220
  import {
161
221
  deleteChunkEmbedBackoffForSession
162
- } from "./index-7bjgyaj1.js";
163
- import"./index-q28hsbpg.js";
222
+ } from "./index-gf0psee3.js";
223
+ import"./index-nj7yykkx.js";
164
224
  import {
165
225
  BoundedSessionMap,
166
226
  advanceSessionActivity,
167
227
  backfillSessionActivity
168
- } from "./index-0x9cn9w1.js";
169
- import"./index-g7jkrz0x.js";
228
+ } from "./index-wqs4q74r.js";
229
+ import"./index-bp5083x2.js";
170
230
  import"./index-1zx87sdm.js";
171
231
  import {
172
232
  stripPersistedAssistantText,
@@ -174,108 +234,68 @@ import {
174
234
  isDroppedToolOutput,
175
235
  evaluateChannel2,
176
236
  buildChannel2Reminder
177
- } from "./index-f8cn4xqa.js";
237
+ } from "./index-fwefky9w.js";
178
238
  import"./index-v0p37hm2.js";
179
- import"./index-angx1s0k.js";
239
+ import"./index-mmfa86mt.js";
180
240
  import"./index-58e3y90n.js";
181
- import"./index-q76br5zn.js";
241
+ import"./index-1d289pq2.js";
182
242
  import {
183
243
  getCurrentToolSetHash,
184
244
  recordToolDefinition
185
- } from "./index-9jvab89d.js";
245
+ } from "./index-n6m03s3n.js";
186
246
  import"./index-fr0wbhdn.js";
187
- import"./index-a865mj02.js";
188
- import"./index-rg1cezmj.js";
247
+ import"./index-tdn0zkw4.js";
248
+ import {
249
+ getProjectEmbeddingSnapshot2,
250
+ getAutoEmbeddingSessionCoverage2
251
+ } from "./index-7zd5asz9.js";
189
252
  import"./index-fb3zxn06.js";
190
253
  import {
191
254
  renderUserFacingFailure,
192
255
  userFacingFailureCode
193
- } from "./index-16vwdyy5.js";
194
- import {
195
- runSessionProjectBackfill,
196
- createLiveSessionState,
197
- RETROSPECTIVE_MAX_USER_MESSAGE_CHARS,
198
- RETROSPECTIVE_MESSAGE_TRUNCATION_MARKER,
199
- createDreamTaskExecutor,
200
- runManualDream,
201
- runDueTasksForProject,
202
- startDreamScheduleTimer,
203
- ensureProjectRegisteredFromOpenCodeDirectory,
204
- resolveContextLimit,
205
- resolveModelKey,
206
- createScheduler,
207
- describeStorageUnavailability,
208
- getSessionErrorInfo,
209
- summarizeManualDream,
210
- createChatMessageHook,
211
- createToolExecuteAfterHook,
212
- recordHiddenVariantWarning,
213
- registerRpcHandlers,
214
- armLatestThinkingRecoveryFromError,
215
- lkgReplayLimit,
216
- measureLkgReplay,
217
- STORAGE_BUSY_MESSAGE,
218
- StorageBusyRefusalError,
219
- bindSystemDateRequestIdentity,
220
- bindSystemDateOutput,
221
- registerSystemDateRefresh,
222
- UnmanagedOverWindowError,
223
- UnresolvedHistoryBoundaryError,
224
- createTransform,
225
- createSubcModuleClient,
226
- createModuleToolBackends,
227
- createRustRefusalRecovery,
228
- createSystemPromptHashHandler,
229
- tryMessagesTransformLkgReplay,
230
- createMessagesTransformHandler,
231
- subagentToolRefusal,
232
- hideSubagentTools,
233
- createCtxExpandTools,
234
- createCtxMemoryTools,
235
- createCtxMemoryListTools,
236
- CTX_NOTE_DESCRIPTION,
237
- withoutSmartNoteText,
238
- createCtxNoteTools,
239
- createCtxReduceTools,
240
- createCtxSearchTools,
241
- applyJsonSchemaParameterDescriptions,
242
- MagicContextRpcServer,
243
- subagentTemperature
244
- } from "./index-x57ep4fp.js";
256
+ } from "./index-6sz25c3s.js";
245
257
  import {
246
258
  createTagger,
259
+ cavemanWordRulesForLanguage,
247
260
  setCtxReduceRegisteredGlobally,
248
261
  resolveCtxReduceAvailabilityFromMessages,
249
262
  EmergencyFailClosedError,
250
263
  DegradedPassRefusalError,
251
264
  isSyntheticHeadMessage2
252
- } from "./index-6k86es2p.js";
253
- import"./index-s178h9z8.js";
254
- import"./index-qt1qqasc.js";
265
+ } from "./index-qtbdx42g.js";
266
+ import"./index-f71thw8j.js";
267
+ import {
268
+ isEmbeddingHostBusy2
269
+ } from "./index-qt1qqasc.js";
255
270
  import"./index-4dhv7mqz.js";
256
- import"./index-bmwfzz28.js";
257
- import"./index-a43xq1pg.js";
271
+ import"./index-9vqb5p1s.js";
272
+ import"./index-fx90bvjd.js";
258
273
  import"./index-n78avt2p.js";
259
274
  import {
260
275
  pushNotification2,
261
276
  isTuiConnected2
262
277
  } from "./index-x8a7jmkh.js";
263
- import"./index-a4b0gbyg.js";
264
- import"./index-pgy3h49n.js";
265
- import"./index-ffa8x2as.js";
266
- import"./index-21919gcq.js";
267
- import"./index-mw7c950g.js";
278
+ import"./index-y9f76s3f.js";
279
+ import"./index-2pgxcncf.js";
280
+ import"./index-6sytd5w3.js";
281
+ import"./index-05n6ykca.js";
282
+ import"./index-gp3kcpc4.js";
268
283
  import {
269
284
  detectConflicts
270
- } from "./index-b64n4d0h.js";
285
+ } from "./index-kee4kn5j.js";
271
286
  import"./index-fmsr7v69.js";
287
+ import {
288
+ isDreamerRunnable,
289
+ isSmartNoteSurfaceAvailable,
290
+ isCompactionEnabled
291
+ } from "./index-ksdyrrav.js";
272
292
  import {
273
293
  sameProjectDirectory
274
294
  } from "./index-knvkbfvh.js";
275
295
  import {
276
296
  getErrorMessage
277
297
  } from "./index-y8v6yerm.js";
278
- import"./index-150zz6fh.js";
298
+ import"./index-k29z4aqh.js";
279
299
 
280
300
  // src/hooks/magic-context/history-boundary-repair.ts
281
301
  function readBaseline(db, sessionId) {
@@ -1137,7 +1157,7 @@ function rebuildFileContent(value, output, attachments) {
1137
1157
  rebuilt.unshift({ type: "text", text: output });
1138
1158
  return { type: "content", value: rebuilt };
1139
1159
  }
1140
- function adaptPayload(draft, admittedIDs = new Set) {
1160
+ function adaptPayload(draft, admittedIDs = new Set, messageTimes = new Map) {
1141
1161
  const existingHeads = new Map(draft.messages.filter((m) => HEAD_IDS.some((id) => m.id === id)).map((m) => [m.id, m]));
1142
1162
  const source = draft.messages.filter((m) => !existingHeads.has(m.id));
1143
1163
  const results = new Map;
@@ -1247,6 +1267,7 @@ function adaptPayload(draft, admittedIDs = new Set) {
1247
1267
  id: message.id,
1248
1268
  sessionID: draft.sessionID,
1249
1269
  role: message.role,
1270
+ time: message.id ? messageTimes.get(message.id) : undefined,
1250
1271
  ...{
1251
1272
  providerID: draft.model.providerID,
1252
1273
  modelID: draft.model.id,
@@ -3301,6 +3322,8 @@ async function runManualDreamNow(args) {
3301
3322
  const summary = await runManualDream({
3302
3323
  db: args.db,
3303
3324
  projectIdentity: args.projectIdentity,
3325
+ projectMemoryEnabled: args.memoryEnabled,
3326
+ smartNotesEnabled: args.smartNotesEnabled,
3304
3327
  tasks: selection.runnable,
3305
3328
  executor,
3306
3329
  ...args.task !== undefined ? { task: args.task } : {}
@@ -3340,7 +3363,11 @@ function registerV2DreamScheduleTimer(args) {
3340
3363
  dreamerConfig: dreamer,
3341
3364
  sampleDreamRun: () => {
3342
3365
  const current = dreamerRunConfig(config, args.liveConfig());
3343
- return { dreamerConfig: current.dreamer ?? dreamer, mural: current.mural };
3366
+ return {
3367
+ dreamerConfig: current.dreamer ?? dreamer,
3368
+ mural: current.mural,
3369
+ gitCommitIndexing: current.memory.git_commit_indexing
3370
+ };
3344
3371
  },
3345
3372
  validateTaskModels: (tasks) => selectRunnableDreamTasks({ tasks, toolsSupported: executor.capabilities.tools }).runnable,
3346
3373
  language: config.language,
@@ -3350,6 +3377,8 @@ function registerV2DreamScheduleTimer(args) {
3350
3377
  retinaHandoff: config.smart_notes.retina_handoff,
3351
3378
  smartNotesEnabled: config.smart_notes.enabled,
3352
3379
  embeddingConfig: config.embedding,
3380
+ transformMode: config.transform_mode,
3381
+ moduleClient: createDreamTimerModuleClient(args.rustModeModuleClient),
3353
3382
  gitCommitIndexing: gitCommitIndexing?.enabled ? {
3354
3383
  enabled: true,
3355
3384
  since_days: gitCommitIndexing.since_days,
@@ -3416,6 +3445,7 @@ function startDreamTrigger(context, args) {
3416
3445
  db,
3417
3446
  projectIdentity: args.projectIdentity(),
3418
3447
  projectMemoryEnabled: args.projectMemoryEnabled,
3448
+ smartNotesEnabled: args.smartNotesEnabled,
3419
3449
  tasks: runnable,
3420
3450
  executor: createDreamTaskExecutor({
3421
3451
  hiddenCompletionExecutor: args.executor,
@@ -3425,6 +3455,10 @@ function startDreamTrigger(context, args) {
3425
3455
  retrospectiveRawProvider: (db) => new V2RetrospectiveRawProvider(db),
3426
3456
  language: args.language,
3427
3457
  mural: sampled?.mural ?? args.mural,
3458
+ memoryInjectionBudgetTokens: args.memoryInjectionBudgetTokens,
3459
+ retinaHandoff: args.retinaHandoff,
3460
+ transformMode: args.transformMode,
3461
+ moduleClient: args.moduleClient,
3428
3462
  smartNotesEnabled: args.smartNotesEnabled
3429
3463
  })
3430
3464
  });
@@ -4152,6 +4186,113 @@ async function registerTools(context, db, config, rustToolBackends, isInternalCh
4152
4186
  return { dispose: () => controller.abort() };
4153
4187
  }
4154
4188
 
4189
+ // src/v2/hooks/transform-decision-binding.ts
4190
+ function bindV2TransformDecision(args) {
4191
+ try {
4192
+ return bindOpenCodeV2TransformDecision({
4193
+ db: args.db,
4194
+ sessionId: args.sessionId,
4195
+ passStarting: args.passStarting,
4196
+ firstAssistantAfter: (sequence) => {
4197
+ const first = args.reader.assistantSince(args.sessionId, sequence)[0];
4198
+ if (!first)
4199
+ return;
4200
+ const completion = {
4201
+ completedAt: first.data.time?.completed,
4202
+ finish: first.data.finish,
4203
+ error: first.data.error
4204
+ };
4205
+ return {
4206
+ id: first.id,
4207
+ state: providerResponseFailed(completion) ? "failed" : isSuccessfulProviderCompletion(completion) ? "succeeded" : "running",
4208
+ inputTokens: lkgProviderInputTotal(first.data.tokens)
4209
+ };
4210
+ }
4211
+ });
4212
+ } catch {
4213
+ return false;
4214
+ }
4215
+ }
4216
+
4217
+ // src/v2/hooks/transform-features.ts
4218
+ function createV2TransformFeatureDeps(config, compactionOff, directory) {
4219
+ return {
4220
+ protectedTools: config.protected_tools,
4221
+ commitClusterTrigger: config.commit_cluster_trigger,
4222
+ allowHomeProject: config.allow_home_project,
4223
+ injectDocs: config.dreamer?.inject_docs !== false,
4224
+ memoryConfig: {
4225
+ enabled: config.memory.enabled,
4226
+ injectionBudgetTokens: config.memory.injection_budget_tokens,
4227
+ autoPromote: config.memory.auto_promote
4228
+ },
4229
+ ensureProjectRegistered: ensureProjectRegisteredFromOpenCodeDirectory,
4230
+ historyBudgetPercentage: config.history_budget_percentage,
4231
+ experimentalUserMemories: userObservationCollectionEnabled2(config.dreamer),
4232
+ userObservationsRequested: userObservationsRequested2(config.dreamer),
4233
+ experimentalTemporalAwareness: config.temporal_awareness === true,
4234
+ muralEnabled: config.mural?.enabled === true,
4235
+ autoSearch: {
4236
+ enabled: config.memory.auto_search?.enabled ?? true,
4237
+ scoreThreshold: config.memory.auto_search?.score_threshold ?? 0.6,
4238
+ minPromptChars: config.memory.auto_search?.min_prompt_chars ?? 20,
4239
+ directory,
4240
+ ensureProjectRegistered: ensureProjectRegisteredFromOpenCodeDirectory,
4241
+ wordRules: cavemanWordRulesForLanguage(config.language)
4242
+ },
4243
+ cavemanTextCompression: compactionOff ? undefined : config.caveman_text_compression?.enabled === true ? {
4244
+ enabled: true,
4245
+ minChars: config.caveman_text_compression.min_chars ?? 500,
4246
+ wordRules: cavemanWordRulesForLanguage(config.language)
4247
+ } : undefined
4248
+ };
4249
+ }
4250
+ function createV2AutoEmbedSession(deps) {
4251
+ return (sessionId) => {
4252
+ if (isEmbeddingHostBusy2())
4253
+ return;
4254
+ const directory = deps.resolveDirectory(sessionId);
4255
+ const identity = resolveProjectIdentityForSession(directory, deps.allowHomeProject);
4256
+ const snapshot = identity ? getProjectEmbeddingSnapshot2(identity) : undefined;
4257
+ const embedIdentity = snapshot ? JSON.stringify([
4258
+ snapshot.providerIdentity,
4259
+ snapshot.chunkModelId,
4260
+ snapshot.runtimeFingerprint
4261
+ ]) : "off";
4262
+ if (autoEmbedIdentityBySession.get(sessionId) !== embedIdentity)
4263
+ invalidateAutoEmbedSession(sessionId);
4264
+ if (autoEmbedAttemptedBySession.has(sessionId) || embedPauseBySession.has(sessionId))
4265
+ return;
4266
+ autoEmbedAttemptedBySession.add(sessionId);
4267
+ autoEmbedIdentityBySession.set(sessionId, embedIdentity);
4268
+ (async () => {
4269
+ try {
4270
+ await new Promise((resolve) => setTimeout(resolve, 0));
4271
+ if (isEmbeddingHostBusy2()) {
4272
+ invalidateAutoEmbedSession(sessionId);
4273
+ return;
4274
+ }
4275
+ await ensureProjectRegisteredFromOpenCodeDirectory(directory, deps.db);
4276
+ const project = resolveProjectIdentityForSession(directory, deps.allowHomeProject);
4277
+ if (!project) {
4278
+ invalidateAutoEmbedSession(sessionId);
4279
+ return;
4280
+ }
4281
+ const coverage = await getAutoEmbeddingSessionCoverage2(deps.db, project, sessionId);
4282
+ if (!coverage.enabled) {
4283
+ invalidateAutoEmbedSession(sessionId);
4284
+ return;
4285
+ }
4286
+ if (coverage.total <= coverage.embedded)
4287
+ return;
4288
+ await runEmbedHistoryDrain(deps, sessionId, { silent: true });
4289
+ } catch (error) {
4290
+ log2("[magic-context] auto-embed drain failed:", error);
4291
+ }
4292
+ })();
4293
+ };
4294
+ }
4295
+
4155
4296
  // src/v2/hooks/usage-reading.ts
4156
4297
  function usageReadingMatchesDraft(reading, draftModel) {
4157
4298
  return reading.modelKey === undefined || reading.modelKey === `${draftModel.providerID}/${draftModel.id}`;
@@ -4466,6 +4607,7 @@ async function registerContext(context) {
4466
4607
  directory,
4467
4608
  warn: (message) => log2(`[magic-context] config warning: ${message}`)
4468
4609
  });
4610
+ logConfigDependencyNotesOnce(config, log2);
4469
4611
  const storage = createV2StorageGate({
4470
4612
  onUnavailable: (reason) => {
4471
4613
  const message = formatFailClosedBlockingMessage(reason);
@@ -4602,29 +4744,39 @@ async function registerContext(context) {
4602
4744
  projectIdentity: () => resolveProjectIdentityForSession(directory, config.allow_home_project) ?? "",
4603
4745
  projectMemoryEnabled: config.memory.enabled,
4604
4746
  language: config.language,
4605
- mural: config.mural
4747
+ mural: config.mural,
4748
+ memoryInjectionBudgetTokens: config.memory.injection_budget_tokens,
4749
+ retinaHandoff: config.smart_notes.retina_handoff,
4750
+ transformMode: config.transform_mode,
4751
+ moduleClient: createDreamTimerModuleClient(rustModeModuleClient)
4606
4752
  });
4607
- const timer = registerV2DreamScheduleTimer({
4753
+ return trigger;
4754
+ };
4755
+ let hiddenCompletionExecutor = db && isDatabasePersisted(db) && resolveProjectIdentityForSession(directory, config.allow_home_project) ? await createHiddenExecutor(db) : undefined;
4756
+ let dreamTrigger = hiddenCompletionExecutor ? startDreamer(hiddenCompletionExecutor) : undefined;
4757
+ const lateHiddenExecutor = createLateHiddenExecutor(() => hiddenCompletionExecutor);
4758
+ let maintenanceTimer;
4759
+ const startMaintenance = () => {
4760
+ const timerProjectIdentity = resolveProjectIdentityForSession(directory, config.allow_home_project);
4761
+ if (!timerProjectIdentity || maintenanceTimer)
4762
+ return;
4763
+ maintenanceTimer = registerV2DreamScheduleTimer({
4608
4764
  directory,
4609
- projectIdentity,
4765
+ projectIdentity: timerProjectIdentity,
4610
4766
  config,
4611
4767
  dreamer: dreamerAtBoot,
4612
4768
  liveConfig: () => liveConfigReader.poll().effective,
4613
- executor: cappedExecutor,
4614
- openReader: openStoreReader
4769
+ executor: withLiveDreamerOutputCap(lateHiddenExecutor, config, () => liveConfigReader.poll().effective),
4770
+ openReader: openStoreReader,
4771
+ rustModeModuleClient
4615
4772
  });
4616
- return {
4617
- async dispose() {
4618
- await Promise.all([trigger.dispose(), timer.dispose()]);
4619
- }
4620
- };
4621
4773
  };
4622
- let hiddenCompletionExecutor = db && isDatabasePersisted(db) && resolveProjectIdentityForSession(directory, config.allow_home_project) ? await createHiddenExecutor(db) : undefined;
4623
- let dreamTrigger = hiddenCompletionExecutor ? startDreamer(hiddenCompletionExecutor) : undefined;
4624
- const lateHiddenExecutor = createLateHiddenExecutor(() => hiddenCompletionExecutor);
4774
+ if (db && isDatabasePersisted(db))
4775
+ startMaintenance();
4625
4776
  let hiddenWorkRecovery;
4626
4777
  const recoverHiddenWork = (database) => !resolveProjectIdentityForSession(directory, config.allow_home_project) ? Promise.resolve(false) : hiddenWorkRecovery ??= (async () => {
4627
4778
  try {
4779
+ startMaintenance();
4628
4780
  hiddenCompletionExecutor ??= await createHiddenExecutor(database);
4629
4781
  dreamTrigger ??= startDreamer(hiddenCompletionExecutor);
4630
4782
  return true;
@@ -4645,7 +4797,8 @@ async function registerContext(context) {
4645
4797
  twoPass: fresh.historian?.two_pass === true,
4646
4798
  expandTools: fresh.historian?.expand_tools,
4647
4799
  autoPromote: fresh.memory?.auto_promote ?? true,
4648
- userMemoriesEnabled: userMemoryCollectionEnabled2(fresh.dreamer),
4800
+ userMemoriesEnabled: userObservationCollectionEnabled2(fresh.dreamer),
4801
+ userObservationsRequested: userObservationsRequested2(fresh.dreamer),
4649
4802
  commitClusterTrigger: fresh.commit_cluster_trigger,
4650
4803
  chunkTokens: deriveHistorianChunkTokens2(resolveHistorianContextLimit2(models.primary?.model))
4651
4804
  };
@@ -4659,6 +4812,7 @@ async function registerContext(context) {
4659
4812
  registerSystemDateRefresh(historyRefreshSessions);
4660
4813
  const pendingMaterializationSessions = new Set;
4661
4814
  const lastHeuristicsTurnId = new Map;
4815
+ const commitSeenLastPass = new Map;
4662
4816
  const restoredRows = new RestoredRowCache;
4663
4817
  const rawProviders = new Map;
4664
4818
  let passDuties;
@@ -4768,7 +4922,7 @@ async function registerContext(context) {
4768
4922
  }
4769
4923
  };
4770
4924
  const latestLkgResponseIds = new BoundedSessionMap(1000);
4771
- const recordUsage = async (draft) => {
4925
+ const recordUsage = async (draft, passStarting = false) => {
4772
4926
  let unsafe = false;
4773
4927
  try {
4774
4928
  await storage.probe();
@@ -4783,6 +4937,12 @@ async function registerContext(context) {
4783
4937
  } catch (error) {
4784
4938
  sessionLog2(draft.sessionID, "v2 response ownership unavailable; keeping system identity pending", error);
4785
4939
  }
4940
+ bindV2TransformDecision({
4941
+ db,
4942
+ sessionId: draft.sessionID,
4943
+ reader,
4944
+ passStarting
4945
+ });
4786
4946
  if (latest)
4787
4947
  noteLkgProviderResponse({
4788
4948
  sessionId: draft.sessionID,
@@ -4912,6 +5072,8 @@ async function registerContext(context) {
4912
5072
  variants.delete(sessionID);
4913
5073
  agents.delete(sessionID);
4914
5074
  channel1.delete(sessionID);
5075
+ commitSeenLastPass.delete(sessionID);
5076
+ clearEmbedSessionState(sessionID);
4915
5077
  historyRefreshSessions.delete(sessionID);
4916
5078
  clearPendingMaterialization(pendingMaterializationSessions, sessionID);
4917
5079
  lastHeuristicsTurnId.delete(sessionID);
@@ -4943,16 +5105,22 @@ async function registerContext(context) {
4943
5105
  const materialize = (draft) => {
4944
5106
  db = storage.require();
4945
5107
  const state = getOrCreateSessionMeta(db, draft.sessionID);
5108
+ const modelKey = `${draft.model.providerID}/${draft.model.id}`;
5109
+ const contextLimit = resolveContextLimit(draft.model.providerID, draft.model.id, {
5110
+ db,
5111
+ sessionID: draft.sessionID
5112
+ }) || draft.model.limit?.context || (state.lastObservedModelKey === modelKey ? state.lastUsageContextLimit : undefined);
4946
5113
  return materializeM0({
5114
+ ...createM0RenderOptions({
5115
+ ...createV2TransformFeatureDeps(config, compactionOff, directory),
5116
+ ...createV2ThresholdDeps(config)
5117
+ }, usage.get(draft.sessionID)?.usage ?? { percentage: 0, inputTokens: 0 }, modelKey, contextLimit, resolveProjectIdentityForSession(directory, config.allow_home_project)),
4947
5118
  db,
4948
5119
  sessionId: draft.sessionID,
4949
5120
  state,
4950
- projectPath: resolveProjectIdentityForSession(directory, config.allow_home_project) ?? "",
4951
5121
  projectDirectory: directory,
4952
- memoryEnabled: config.memory.enabled && !!resolveProjectIdentityForSession(directory, config.allow_home_project),
4953
- memoryInjectionBudgetTokens: config.memory.injection_budget_tokens,
4954
5122
  hardSignals: {
4955
- systemHash: foldDigest(JSON.stringify(draft.system)),
5123
+ systemHash: state.systemPromptHash ?? "",
4956
5124
  toolSetHash: getCurrentToolSetHash(draft.model.providerID, draft.model.id, draft.agent),
4957
5125
  modelKey: `${draft.model.providerID}/${draft.model.id}`,
4958
5126
  cacheExpired: false,
@@ -4972,6 +5140,7 @@ async function registerContext(context) {
4972
5140
  rememberHostMedia(draft.messages);
4973
5141
  const reader = openStoreReader();
4974
5142
  try {
5143
+ await storage.probe();
4975
5144
  const watermark = reader.latestSequenceForIds(draft.sessionID, draft.messages.flatMap((message) => message.id ? [message.id] : []));
4976
5145
  const running = reader.latestRunningCompaction(draft.sessionID);
4977
5146
  const moduleBaseline = rustModeModuleClient ? servedModuleM0Text(draft.sessionID) : undefined;
@@ -5046,7 +5215,7 @@ async function registerContext(context) {
5046
5215
  if (!modelLimitCacheWarm())
5047
5216
  withoutSqliteTransformPass2(() => warmModelLimitCacheFromCatalog(context));
5048
5217
  agents.set(draft.sessionID, draft.agent);
5049
- applyV2PromptSurfaceTools(draft, promptSurfaceRuntime, config.prompt_surface, config.smart_notes.enabled);
5218
+ applyV2PromptSurfaceTools(draft, promptSurfaceRuntime, config.prompt_surface, isSmartNoteSurfaceAvailable(config));
5050
5219
  const admissionDb = db ?? storage.current();
5051
5220
  const replayFits = (messages) => {
5052
5221
  const system = structuredClone(draft.system);
@@ -5110,7 +5279,7 @@ async function registerContext(context) {
5110
5279
  if (admissionDb)
5111
5280
  hideSubagentTools(draft, admissionDb);
5112
5281
  recordV2ToolDefinitions(draft);
5113
- if (await recordUsage(draft) && !compactionOff) {
5282
+ if (await recordUsage(draft, true) && !compactionOff) {
5114
5283
  const storageReason = storage.current() ? null : storage.reason();
5115
5284
  if (storageReason) {
5116
5285
  noticeStorageRefusal(draft.sessionID, storageReason);
@@ -5192,6 +5361,7 @@ async function registerContext(context) {
5192
5361
  await cacheV2SessionDirectory(context.session, draft.sessionID, sessionDirectories);
5193
5362
  prepareHistorySession(draft.sessionID);
5194
5363
  transform ??= createTransform({
5364
+ ...createV2TransformFeatureDeps(config, compactionOff, directory),
5195
5365
  cacheTtlConfig: config.cache_ttl,
5196
5366
  cacheTtlConfigured: config.cacheTtlConfigured,
5197
5367
  sampleCacheTtlConfig: () => liveConfigReader.poll().effective,
@@ -5221,14 +5391,27 @@ async function registerContext(context) {
5221
5391
  historyRefreshSessions,
5222
5392
  pendingMaterializationSessions,
5223
5393
  lastHeuristicsTurnId,
5394
+ commitSeenLastPass,
5224
5395
  variantBySession: variants,
5225
5396
  keepReasoningTokens: config.keep_reasoning_tokens,
5226
5397
  directory,
5227
5398
  sessionDirectoryBySession: sessionDirectories,
5228
- projectPath: directory,
5399
+ projectPath: resolveProjectIdentityForSession(directory, config.allow_home_project),
5400
+ getHistorianChunkTokens: () => sampleHistorian().chunkTokens,
5401
+ getFallbackModelId: (sessionID) => {
5402
+ const model = liveModels.get(sessionID);
5403
+ return model ? `${model.providerID}/${model.modelID}` : undefined;
5404
+ },
5405
+ maybeAutoEmbedSession: createV2AutoEmbedSession({
5406
+ db,
5407
+ resolveDirectory: (sessionID) => sessionDirectories.get(sessionID) ?? directory,
5408
+ allowHomeProject: config.allow_home_project,
5409
+ recompProgressBySession: new Map
5410
+ }),
5229
5411
  hiddenCompletionExecutor,
5230
5412
  historianRunnable: !compactionOff && hiddenCompletionExecutor !== undefined && config.historian?.disable !== true,
5231
5413
  historianModel: historianModels.primary,
5414
+ historianContextLimit: sampleHistorian().contextLimit,
5232
5415
  fallbackModels: historianModels.fallbacks,
5233
5416
  resolveHistorianRun: sampleHistorian,
5234
5417
  historianTimeoutMs: config.historian_timeout_ms,
@@ -5256,14 +5439,10 @@ async function registerContext(context) {
5256
5439
  promptSurface: config.prompt_surface,
5257
5440
  promptSurfaceRuntime,
5258
5441
  onRustEngineReconnectRefusal: (refusal) => rustRefusalRecovery?.arm(refusal),
5259
- memoryConfig: {
5260
- enabled: config.memory.enabled,
5261
- injectionBudgetTokens: config.memory.injection_budget_tokens,
5262
- autoPromote: config.memory.auto_promote
5263
- },
5264
5442
  ...createHostSeams(context, readAllForConversion, pagedRead, liveModels)
5265
5443
  });
5266
5444
  const admitted = new Set;
5445
+ let messageTimes;
5267
5446
  const reader = openStoreReader();
5268
5447
  let checkpoint;
5269
5448
  let submitted;
@@ -5334,6 +5513,8 @@ async function registerContext(context) {
5334
5513
  } : undefined));
5335
5514
  draft.messages.splice(0, draft.messages.length, ...restored, ...draft.messages.filter((message) => message !== incoming));
5336
5515
  }
5516
+ if (config.temporal_awareness === true)
5517
+ messageTimes = reader.messageTimes(draft.sessionID, draft.messages.flatMap((message) => message.id ? [message.id] : []));
5337
5518
  } finally {
5338
5519
  reader.close();
5339
5520
  }
@@ -5350,7 +5531,7 @@ async function registerContext(context) {
5350
5531
  nativeFoldReplay.invalidate(draft.sessionID, true);
5351
5532
  }
5352
5533
  }
5353
- const mapped = adaptPayload(draft, admitted);
5534
+ const mapped = adaptPayload(draft, admitted, messageTimes);
5354
5535
  bindSystemDateRequestIdentity(mapped, draft);
5355
5536
  await createMessagesTransformHandler({
5356
5537
  magicContext: { "experimental.chat.messages.transform": transform },
@@ -5360,6 +5541,10 @@ async function registerContext(context) {
5360
5541
  rustReplayParticipant: () => transform?.getRustReplayParticipant() ?? null
5361
5542
  })({}, mapped);
5362
5543
  mapped.commit();
5544
+ stageOpenCodeV2TransformDecision({
5545
+ sessionId: draft.sessionID,
5546
+ responseAfterSequence
5547
+ });
5363
5548
  if (db) {
5364
5549
  await deliverPendingChannel2(context, db, draft.sessionID, channel1.get(draft.sessionID));
5365
5550
  }
@@ -5526,6 +5711,7 @@ ${baseline}
5526
5711
  db: runDb,
5527
5712
  dreamer: manualDreamer,
5528
5713
  smartNotesEnabled: config.smart_notes.enabled,
5714
+ memoryEnabled: config.memory.enabled,
5529
5715
  projectIdentity: resolveProjectIdentityForSession(directory, config.allow_home_project) ?? "",
5530
5716
  directory,
5531
5717
  language: config.language,
@@ -5576,6 +5762,7 @@ ${baseline}
5576
5762
  await usageDone;
5577
5763
  deletedSessions.clear();
5578
5764
  await dreamTrigger?.dispose();
5765
+ await maintenanceTimer?.dispose();
5579
5766
  for (const release of rawProviders.values())
5580
5767
  release();
5581
5768
  rawProviders.clear();