@cortexkit/opencode-magic-context 0.49.19 → 0.49.21
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.
- package/dist/auto-search-worker.js +48 -9
- package/dist/chunk-embedding-write-worker.js +30 -23
- package/dist/{compaction-marker-candidates-n4krhat4.js → compaction-marker-candidates-31h86ph0.js} +3 -3
- package/dist/compaction-marker-candidates-worker.js +2 -2
- package/dist/compartment-chunk-embedding-he60aaa2.js +65 -0
- package/dist/config/project-security.d.ts.map +1 -1
- package/dist/config/schema/magic-context.d.ts +43 -9
- package/dist/config/schema/magic-context.d.ts.map +1 -1
- package/dist/{conflict-warning-hook-4pmz879v.js → conflict-warning-hook-2r32hyx6.js} +9 -8
- package/dist/{context-j31m2dv7.js → context-j7hp43a0.js} +576 -185
- package/dist/{derive-budgets-zn7yzd2d.js → derive-budgets-pqybnx09.js} +2 -2
- package/dist/embedding-backfill-dtke6tck.js +25 -0
- package/dist/embedding-worker-process.js +2 -2
- package/dist/embedding-worker.js +6 -6
- package/dist/features/magic-context/chunk-embedding-writer.d.ts.map +1 -1
- package/dist/features/magic-context/compartment-chunk-embedding.d.ts +44 -1
- package/dist/features/magic-context/compartment-chunk-embedding.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/docs-proposals.d.ts +1 -0
- package/dist/features/magic-context/dreamer/docs-proposals.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-config.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-scheduler.d.ts +2 -0
- package/dist/features/magic-context/dreamer/task-scheduler.d.ts.map +1 -1
- package/dist/features/magic-context/memory/embedding-identity.d.ts.map +1 -1
- package/dist/features/magic-context/memory/embedding-local.d.ts +1 -0
- package/dist/features/magic-context/memory/embedding-local.d.ts.map +1 -1
- package/dist/features/magic-context/memory/embedding-synapse.d.ts.map +1 -1
- package/dist/features/magic-context/memory/embedding-worker-client.d.ts +7 -1
- package/dist/features/magic-context/memory/embedding-worker-client.d.ts.map +1 -1
- package/dist/features/magic-context/memory/local-embedding-pooling.d.ts +22 -0
- package/dist/features/magic-context/memory/local-embedding-pooling.d.ts.map +1 -0
- package/dist/features/magic-context/message-index-async.d.ts +7 -2
- package/dist/features/magic-context/message-index-async.d.ts.map +1 -1
- package/dist/features/magic-context/message-index.d.ts +2 -0
- package/dist/features/magic-context/message-index.d.ts.map +1 -1
- package/dist/features/magic-context/mural/compress-cues.d.ts.map +1 -1
- package/dist/features/magic-context/project-embedding-registry.d.ts +2 -0
- package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
- package/dist/features/magic-context/search-rerank.d.ts +9 -2
- package/dist/features/magic-context/search-rerank.d.ts.map +1 -1
- package/dist/features/magic-context/search.d.ts +29 -0
- package/dist/features/magic-context/search.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/compiler.d.ts.map +1 -1
- package/dist/features/magic-context/storage-db.d.ts +2 -0
- package/dist/features/magic-context/storage-db.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-persisted.d.ts +2 -0
- package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
- package/dist/features/magic-context/subagent-token-capture.d.ts +20 -0
- package/dist/features/magic-context/subagent-token-capture.d.ts.map +1 -1
- package/dist/features/magic-context/user-memory/review-user-memories.d.ts.map +1 -1
- package/dist/{history-owner-xp3pngv7.js → history-owner-36wp3mkb.js} +2 -2
- package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
- package/dist/hooks/magic-context/auto-embed-session.d.ts.map +1 -1
- package/dist/hooks/magic-context/auto-search-hint.d.ts +7 -1
- package/dist/hooks/magic-context/auto-search-hint.d.ts.map +1 -1
- package/dist/hooks/magic-context/auto-search-runner.d.ts.map +1 -1
- package/dist/hooks/magic-context/auto-search-worker-client.d.ts +33 -6
- package/dist/hooks/magic-context/auto-search-worker-client.d.ts.map +1 -1
- package/dist/hooks/magic-context/cache-busting-signals.d.ts +6 -2
- package/dist/hooks/magic-context/cache-busting-signals.d.ts.map +1 -1
- package/dist/hooks/magic-context/channel2-delivery.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-historian.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-types.d.ts +5 -0
- package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-trigger.d.ts +1 -1
- package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
- package/dist/hooks/magic-context/diagnostic-log-state.d.ts +4 -0
- package/dist/hooks/magic-context/diagnostic-log-state.d.ts.map +1 -0
- package/dist/hooks/magic-context/execute-reclaim.d.ts +35 -0
- package/dist/hooks/magic-context/execute-reclaim.d.ts.map +1 -0
- package/dist/hooks/magic-context/hook-handlers.d.ts.map +1 -1
- package/dist/hooks/magic-context/hook.d.ts +1 -3
- package/dist/hooks/magic-context/hook.d.ts.map +1 -1
- package/dist/hooks/magic-context/latest-assistant-turn.d.ts +8 -0
- package/dist/hooks/magic-context/latest-assistant-turn.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-recovery-fence.d.ts +5 -0
- package/dist/hooks/magic-context/lkg-recovery-fence.d.ts.map +1 -1
- package/dist/hooks/magic-context/nudge-evaluation-log.d.ts +3 -0
- package/dist/hooks/magic-context/nudge-evaluation-log.d.ts.map +1 -0
- package/dist/hooks/magic-context/pending-drop-eligibility.d.ts.map +1 -1
- package/dist/hooks/magic-context/protected-tail-boundary.d.ts +4 -0
- package/dist/hooks/magic-context/protected-tail-boundary.d.ts.map +1 -1
- package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts.map +1 -1
- package/dist/hooks/magic-context/served-shape-repair.d.ts +19 -0
- package/dist/hooks/magic-context/served-shape-repair.d.ts.map +1 -0
- package/dist/hooks/magic-context/strip-content.d.ts +4 -2
- package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
- package/dist/hooks/magic-context/system-date-refresh.d.ts +5 -5
- package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
- package/dist/hooks/magic-context/system-prompt-sticky-date.d.ts +10 -0
- package/dist/hooks/magic-context/system-prompt-sticky-date.d.ts.map +1 -0
- package/dist/hooks/magic-context/tag-content-primitives.d.ts +1 -1
- package/dist/hooks/magic-context/tag-content-primitives.d.ts.map +1 -1
- package/dist/hooks/magic-context/tag-messages.d.ts +4 -1
- package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
- package/dist/hooks/magic-context/text-complete.d.ts +1 -1
- package/dist/hooks/magic-context/text-complete.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +21 -6
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform.d.ts +2 -2
- package/dist/hooks/magic-context/transform.d.ts.map +1 -1
- package/dist/{index-3esx8tkf.js → index-11gzxvf4.js} +394 -125
- package/dist/{index-jn12fvvh.js → index-1gtfne2c.js} +3 -3
- package/dist/{index-jhghdnsm.js → index-1kbznkft.js} +521 -214
- package/dist/{index-3h4dp9wb.js → index-3svaejkh.js} +5 -5
- package/dist/{index-kee4kn5j.js → index-4pnsgvfk.js} +1 -1
- package/dist/{index-bjcnntmz.js → index-51rdvtkz.js} +501 -20
- package/dist/{v2/server-8cd2j99z.js → index-5kym00ag.js} +32 -13
- package/dist/{index-s74zqahq.js → index-66eby7hx.js} +4 -4
- package/dist/{index-63k48rv9.js → index-9q1g3c5q.js} +5 -5
- package/dist/{index-jrr131e0.js → index-a9zvn5fe.js} +29 -15
- package/dist/{index-c5pytzne.js → index-b88dwwrh.js} +1 -1
- package/dist/{index-nj7yykkx.js → index-c7phnbvk.js} +1 -1
- package/dist/index-cpjk5jd2.js +82 -0
- package/dist/{index-c1p88z1y.js → index-ffzhwfzy.js} +4 -4
- package/dist/{v2/server-beht37jy.js → index-gzy5w8ya.js} +194 -5
- package/dist/{index-j75v2476.js → index-h7tgn49j.js} +12 -15
- package/dist/{index-edmpdxcw.js → index-j32jj2t8.js} +5 -5
- package/dist/{index-ke416mdc.js → index-j76ah6d7.js} +2 -2
- package/dist/{index-s734jcsr.js → index-jfem3dgz.js} +9 -3
- package/dist/{index-n37sebck.js → index-jjvbk92s.js} +1 -1
- package/dist/{index-4911rn0b.js → index-jmq8kfe7.js} +6 -6
- package/dist/{index-rr2bb45z.js → index-kfyb3k6n.js} +2 -2
- package/dist/{index-2vxtcb95.js → index-kq5w68dp.js} +2 -2
- package/dist/{index-kq82mtg0.js → index-ksq50rg0.js} +3 -3
- package/dist/{index-b5vqckbw.js → index-m32esgmj.js} +314 -127
- package/dist/{index-9zcsy3hh.js → index-mnhcdfxg.js} +161 -13
- package/dist/{index-se4m2g6w.js → index-mnnkgq0q.js} +111 -19
- package/dist/{index-p5y3k4g7.js → index-nda0zgna.js} +2 -1
- package/dist/{index-wgypt3cs.js → index-nxrsns5x.js} +2466 -1290
- package/dist/{index-4s3t0nd0.js → index-qgh1qwjj.js} +2 -2
- package/dist/{index-y9f76s3f.js → index-rrv26qjz.js} +1 -1
- package/dist/{index-24fezq97.js → index-rxqr723x.js} +5 -5
- package/dist/{index-v10f1rjv.js → index-spwjbkc7.js} +1 -1
- package/dist/{index-dxmq29t1.js → index-syaazvy2.js} +182 -47
- package/dist/{index-k29z4aqh.js → index-t5pck3ss.js} +1 -1
- package/dist/{index-6x57ar45.js → index-wfybj1dw.js} +4 -6
- package/dist/{index-cf74k5ak.js → index-whcgcfrv.js} +9 -6
- package/dist/{index-a6mc0v4d.js → index-x6cbrv9h.js} +3 -3
- package/dist/{index-bp5083x2.js → index-x9k3mqrf.js} +1 -1
- package/dist/{index-rpxdjkm0.js → index-y76rhsnr.js} +319 -61
- package/dist/{index-ze7mvk54.js → index-zy67whjr.js} +95 -59
- package/dist/index.js +58 -54
- package/dist/{logger-jm3sqqzr.js → logger-94kew5wm.js} +1 -1
- package/dist/{message-fts-rowid-map-17s0dfn4.js → message-fts-rowid-map-e79b7b6x.js} +6 -5
- package/dist/{message-index-gtpqnj8w.js → message-index-4q8ek2fc.js} +17 -16
- package/dist/{message-index-bounded-zyc8h32y.js → message-index-bounded-rydsg9r5.js} +17 -16
- package/dist/{message-time-backfill-73mmm76q.js → message-time-backfill-4qva0b4f.js} +3 -3
- package/dist/migration-worker.js +13 -12
- package/dist/{model-resolution-nx97z3x7.js → model-resolution-280gmqvd.js} +1 -1
- package/dist/plugin/embedding-bootstrap.d.ts +4 -1
- package/dist/plugin/embedding-bootstrap.d.ts.map +1 -1
- package/dist/plugin/hooks/create-session-hooks.d.ts +1 -0
- package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
- package/dist/plugin/rpc-handlers.d.ts +8 -0
- package/dist/plugin/rpc-handlers.d.ts.map +1 -1
- package/dist/plugin/subagent-tool-policy.d.ts +9 -0
- package/dist/plugin/subagent-tool-policy.d.ts.map +1 -1
- package/dist/plugin/tool-registry.d.ts.map +1 -1
- package/dist/{project-embedding-registry-z74mhqkf.js → project-embedding-registry-hn529988.js} +16 -13
- package/dist/raw-ordinal-warmup-worker.js +136 -101
- package/dist/{read-session-chunk-jjb48bt9.js → read-session-chunk-t039f0m5.js} +12 -11
- package/dist/{read-session-raw-rsc8c7qy.js → read-session-raw-aw6jgvwg.js} +4 -3
- package/dist/recomp-orchestrator-hbm53jj5.js +62 -0
- package/dist/{safe-notification-target-1szv1k5k.js → safe-notification-target-mkr9yzvr.js} +2 -2
- package/dist/search-archive-weh164mh.js +26 -0
- package/dist/search-hea079d7.js +50 -0
- package/dist/{send-session-notification-6ve0e8p4.js → send-session-notification-gqzkz7da.js} +7 -6
- package/dist/shared/logger.d.ts.map +1 -1
- package/dist/shared/model-resolution.d.ts +2 -0
- package/dist/shared/model-resolution.d.ts.map +1 -1
- package/dist/shared/prompt-async-transport.d.ts +3 -0
- package/dist/shared/prompt-async-transport.d.ts.map +1 -1
- package/dist/shared/rpc-types.d.ts +7 -0
- package/dist/shared/rpc-types.d.ts.map +1 -1
- package/dist/shared/sqlite.d.ts +6 -1
- package/dist/shared/sqlite.d.ts.map +1 -1
- package/dist/shared/subagent-runner.d.ts +2 -0
- package/dist/shared/subagent-runner.d.ts.map +1 -1
- package/dist/shared/tag-transcript.d.ts +2 -0
- package/dist/shared/tag-transcript.d.ts.map +1 -1
- package/dist/shared/worker-shutdown.d.ts +68 -0
- package/dist/shared/worker-shutdown.d.ts.map +1 -0
- package/dist/shared/worker-shutdown.fixture.d.ts +2 -0
- package/dist/shared/worker-shutdown.fixture.d.ts.map +1 -0
- package/dist/{sqlite-zf72c52d.js → sqlite-zdgm52sv.js} +5 -1
- package/dist/{storage-memory-y3qmy00r.js → storage-memory-e6a7mb0k.js} +2 -2
- package/dist/{storage-tags-r7k9tjcv.js → storage-tags-a77q4v77.js} +5 -5
- package/dist/{task-config-x3qmayd2.js → task-config-t6bpyka7.js} +2 -2
- package/dist/tools/ctx-search/tools.d.ts.map +1 -1
- package/dist/tools/ctx-search/types.d.ts +1 -0
- package/dist/tools/ctx-search/types.d.ts.map +1 -1
- package/dist/{transform-postprocess-phase-jj99r7z2.js → transform-postprocess-phase-0b04tm1p.js} +35 -32
- package/dist/v2/auto-search-worker.js +48 -9
- package/dist/v2/chunk-embedding-write-worker.js +30 -23
- package/dist/v2/{compaction-marker-candidates-ebx3388k.js → compaction-marker-candidates-m4vmye3w.js} +3 -3
- package/dist/v2/compaction-marker-candidates-worker.js +2 -2
- package/dist/v2/compartment-chunk-embedding-8jjmcgeg.js +64 -0
- package/dist/v2/{context-y5yamxak.js → context-ea3x7smm.js} +1797 -810
- package/dist/v2/{derive-budgets-2zh4gm2c.js → derive-budgets-knf763tt.js} +3 -3
- package/dist/v2/embedding-backfill-5e74ae0m.js +24 -0
- package/dist/v2/embedding-worker-process.js +2 -2
- package/dist/v2/embedding-worker.js +6 -6
- package/dist/v2/hidden-child-record.d.ts +2 -0
- package/dist/v2/hidden-child-record.d.ts.map +1 -1
- package/dist/v2/hidden-completion.d.ts +2 -0
- package/dist/v2/hidden-completion.d.ts.map +1 -1
- package/dist/v2/hidden-model-activity.d.ts +7 -0
- package/dist/v2/hidden-model-activity.d.ts.map +1 -0
- package/dist/v2/{history-owner-42e16w0n.js → history-owner-ad0crnrn.js} +2 -2
- package/dist/v2/hooks/context.d.ts.map +1 -1
- package/dist/v2/hooks/copied-tag-notation.d.ts +1 -1
- package/dist/v2/hooks/copied-tag-notation.d.ts.map +1 -1
- package/dist/v2/hooks/dream-timer.d.ts +2 -0
- package/dist/v2/hooks/dream-timer.d.ts.map +1 -1
- package/dist/v2/hooks/embedding-lifecycle.d.ts +7 -0
- package/dist/v2/hooks/embedding-lifecycle.d.ts.map +1 -0
- package/dist/v2/hooks/generate.d.ts +36 -1
- package/dist/v2/hooks/generate.d.ts.map +1 -1
- package/dist/v2/hooks/lkg-system.d.ts +35 -4
- package/dist/v2/hooks/lkg-system.d.ts.map +1 -1
- package/dist/v2/hooks/payload.d.ts +16 -1
- package/dist/v2/hooks/payload.d.ts.map +1 -1
- package/dist/v2/hooks/store.d.ts +2 -0
- package/dist/v2/hooks/store.d.ts.map +1 -1
- package/dist/v2/hooks/tools.d.ts +2 -1
- package/dist/v2/hooks/tools.d.ts.map +1 -1
- package/dist/v2/hooks/transform-features.d.ts +2 -2
- package/dist/v2/hooks/transform-features.d.ts.map +1 -1
- package/dist/v2/{logger-7qt02bnb.js → logger-p34mjtja.js} +1 -1
- package/dist/v2/{message-fts-rowid-map-wfx67gfd.js → message-fts-rowid-map-n8fdg2ja.js} +6 -5
- package/dist/v2/{message-index-bounded-spd8r7pj.js → message-index-bounded-8rcd7qq9.js} +17 -16
- package/dist/v2/{message-index-8vz2pq76.js → message-index-qz9wdp82.js} +17 -16
- package/dist/v2/{message-time-backfill-04t0km1z.js → message-time-backfill-zvthw6xb.js} +3 -3
- package/dist/v2/migration-worker.js +13 -12
- package/dist/v2/{model-resolution-nx97z3x7.js → model-resolution-280gmqvd.js} +1 -1
- package/dist/v2/{project-embedding-registry-gnkj56xp.js → project-embedding-registry-v38q4xd5.js} +16 -13
- package/dist/v2/raw-ordinal-warmup-worker.js +136 -101
- package/dist/v2/{read-session-chunk-cwkxrmns.js → read-session-chunk-wazfyxcg.js} +12 -11
- package/dist/v2/{read-session-raw-yaegtjzh.js → read-session-raw-b70cpwzj.js} +4 -3
- package/dist/v2/recomp-orchestrator-b12zaptj.js +61 -0
- package/dist/v2/{safe-notification-target-qg7n2s77.js → safe-notification-target-khnzg57c.js} +2 -2
- package/dist/v2/search-archive-x64rtz1z.js +25 -0
- package/dist/v2/search-hza9x72a.js +49 -0
- package/dist/v2/{send-session-notification-3pxn658x.js → send-session-notification-8eqe259v.js} +7 -6
- package/dist/v2/{server-45q69hkq.js → server-132h8twc.js} +5 -5
- package/dist/v2/{server-h0410h0v.js → server-1bw1wcbp.js} +1 -1
- package/dist/v2/{server-271qxsf5.js → server-24g8r2d0.js} +2466 -1290
- package/dist/v2/{server-tbe1femw.js → server-29qp8nz4.js} +1 -1
- package/dist/v2/{server-gsxjv2q2.js → server-33nqbqkw.js} +182 -47
- package/dist/v2/{server-tgnbmwah.js → server-3mz2qh5a.js} +1 -1
- package/dist/v2/{server-n1prf1g6.js → server-3vhxy2k5.js} +2 -2
- package/dist/v2/{server-xj136kt8.js → server-4kjmrjn4.js} +9 -3
- package/dist/v2/{server-34kwfsr4.js → server-53eh1r8r.js} +2 -2
- package/dist/{index-8cd2j99z.js → v2/server-5kym00ag.js} +32 -13
- package/dist/v2/{server-46neh5fa.js → server-62g58aaz.js} +314 -127
- package/dist/v2/{server-f2xf5gcb.js → server-6495nmn9.js} +12 -15
- package/dist/v2/{server-a9xqj88f.js → server-6v3cdzsx.js} +4 -4
- package/dist/v2/{server-d04vrx0j.js → server-806rzhs6.js} +2 -2
- package/dist/v2/{server-qd11g795.js → server-92g7d776.js} +2 -1
- package/dist/v2/{server-nj659894.js → server-94wk1ey3.js} +14 -3
- package/dist/v2/{server-6tmj0s7j.js → server-ab1g0wn9.js} +4 -6
- package/dist/v2/{server-8by8qfec.js → server-ad18djzs.js} +95 -59
- package/dist/v2/{server-hy3d3vsx.js → server-bsgd4dk1.js} +2 -2
- package/dist/v2/server-cpjk5jd2.js +82 -0
- package/dist/v2/{server-g3qma5c0.js → server-d1dzgvwd.js} +2 -2
- package/dist/v2/{server-hm38q7r0.js → server-d48x3m4x.js} +5 -5
- package/dist/v2/{server-1wy7b9de.js → server-dtp8hcjh.js} +3 -3
- package/dist/v2/{server-27gq4mfz.js → server-fa7vtp40.js} +9 -6
- package/dist/v2/{server-6pmqg9m4.js → server-gyy4k6mf.js} +1 -1
- package/dist/{index-beht37jy.js → v2/server-gzy5w8ya.js} +194 -5
- package/dist/v2/{server-bmymkx73.js → server-j8h7bsca.js} +29 -15
- package/dist/v2/{server-n37sebck.js → server-jjvbk92s.js} +1 -1
- package/dist/v2/{server-da07v4xp.js → server-k3t06fxr.js} +1 -1
- package/dist/v2/{server-9hx7g5jp.js → server-m4bfaevz.js} +1197 -1049
- package/dist/v2/{server-2ar62dyx.js → server-ppcd1qxh.js} +191 -99
- package/dist/v2/{server-rmygf5pn.js → server-qjvk4a9t.js} +2 -2
- package/dist/v2/{server-zzkj2fch.js → server-qteg2kt9.js} +5 -5
- package/dist/v2/{server-pwv4ezb0.js → server-rqebawx1.js} +2 -2
- package/dist/v2/{server-h1v0pyxb.js → server-vr4szghm.js} +501 -20
- package/dist/v2/{server-xq7dfjke.js → server-wwaw5npa.js} +5 -5
- package/dist/v2/{server-6vdzn1td.js → server-zg5y109h.js} +323 -76
- package/dist/v2/server.js +8 -8
- package/dist/v2/{sqlite-zf72c52d.js → sqlite-zdgm52sv.js} +5 -1
- package/dist/v2/{storage-memory-y3qmy00r.js → storage-memory-e6a7mb0k.js} +2 -2
- package/dist/v2/{storage-tags-3wdb8zph.js → storage-tags-q71rnr9f.js} +5 -5
- package/dist/v2/store-reader.d.ts +10 -0
- package/dist/v2/store-reader.d.ts.map +1 -1
- package/dist/v2/{task-config-nvz8mapa.js → task-config-7md27rx8.js} +2 -2
- package/dist/v2/{wrapup-orchestrator-embdz8gj.js → wrapup-orchestrator-3ssd5yy1.js} +33 -32
- package/dist/wrapup-orchestrator-5vpcd1zx.js +49 -0
- package/package.json +2 -2
- package/src/config/index.test.ts +72 -6
- package/src/config/project-security.ts +15 -0
- package/src/config/rerank.test.ts +60 -0
- package/src/config/schema/magic-context.ts +57 -0
- package/src/shared/logger.test.ts +42 -1
- package/src/shared/logger.ts +11 -13
- package/src/shared/model-resolution.test.ts +67 -12
- package/src/shared/model-resolution.ts +43 -16
- package/src/shared/model-suggestion-retry.ts +2 -2
- package/src/shared/prompt-async-transport.ts +47 -3
- package/src/shared/rpc-types.ts +7 -0
- package/src/shared/sqlite-busy-budget-review.test.ts +6 -1
- package/src/shared/sqlite-turn-deadline.test.ts +270 -0
- package/src/shared/sqlite.ts +239 -9
- package/src/shared/subagent-runner.ts +2 -0
- package/src/shared/tag-transcript.ts +9 -1
- package/src/shared/worker-shutdown-fence.test.ts +87 -0
- package/src/shared/worker-shutdown.fixture.ts +25 -0
- package/src/shared/worker-shutdown.test.ts +127 -0
- package/src/shared/worker-shutdown.ts +160 -0
- package/dist/embedding-backfill-fmz50tsy.js +0 -24
- package/dist/recomp-orchestrator-999jj4bc.js +0 -61
- package/dist/search-archive-6vm0e2f5.js +0 -25
- package/dist/search-xsqk1bj4.js +0 -49
- package/dist/v2/embedding-backfill-7c7yr69y.js +0 -23
- package/dist/v2/recomp-orchestrator-f6m9jr7p.js +0 -60
- package/dist/v2/search-archive-wve3tq1k.js +0 -24
- package/dist/v2/search-hwg7jfbj.js +0 -48
- package/dist/wrapup-orchestrator-whhbjmaz.js +0 -48
|
@@ -7,9 +7,10 @@ import {
|
|
|
7
7
|
getTemporalDecisions,
|
|
8
8
|
freezeTemporalDecisions,
|
|
9
9
|
stableStringify
|
|
10
|
-
} from "./index-
|
|
10
|
+
} from "./index-x9k3mqrf.js";
|
|
11
11
|
import {
|
|
12
12
|
protectedToolTagNumbers,
|
|
13
|
+
stripPersistedAssistantText,
|
|
13
14
|
byteSize,
|
|
14
15
|
stripTagPrefix,
|
|
15
16
|
prependTag,
|
|
@@ -73,31 +74,37 @@ import {
|
|
|
73
74
|
adoptNullOwnerToolTag2,
|
|
74
75
|
getCandidateToolOwners2,
|
|
75
76
|
pickNearestPriorOwner2
|
|
76
|
-
} from "./index-
|
|
77
|
+
} from "./index-whcgcfrv.js";
|
|
77
78
|
import {
|
|
78
79
|
textMentionsRecentCommit,
|
|
79
80
|
hasMeaningfulUserText2,
|
|
80
81
|
estimateTokens
|
|
81
|
-
} from "./index-
|
|
82
|
+
} from "./index-b88dwwrh.js";
|
|
83
|
+
import {
|
|
84
|
+
getMagicContextStorageDir
|
|
85
|
+
} from "./index-g2q4htwp.js";
|
|
82
86
|
import {
|
|
83
87
|
log2,
|
|
84
88
|
sessionLog2
|
|
85
|
-
} from "./index-
|
|
89
|
+
} from "./index-h7tgn49j.js";
|
|
86
90
|
import {
|
|
87
91
|
inRootAsyncContext2,
|
|
88
92
|
getTagIdentityWriteGeneration2,
|
|
89
93
|
getSqliteDatabasePath2,
|
|
90
94
|
assertTransformWrite2,
|
|
91
95
|
isTransientSqliteError2
|
|
92
|
-
} from "./index-
|
|
96
|
+
} from "./index-gzy5w8ya.js";
|
|
93
97
|
import {
|
|
94
98
|
getProjectEmbeddingSnapshot2,
|
|
95
99
|
embedTextForProject2,
|
|
96
100
|
embedBatchForProject2
|
|
97
|
-
} from "./index-
|
|
101
|
+
} from "./index-zy67whjr.js";
|
|
102
|
+
import {
|
|
103
|
+
createWorkerShutdown
|
|
104
|
+
} from "./index-cpjk5jd2.js";
|
|
98
105
|
import {
|
|
99
106
|
runSessionWarmupWorker
|
|
100
|
-
} from "./index-
|
|
107
|
+
} from "./index-jfem3dgz.js";
|
|
101
108
|
import {
|
|
102
109
|
getMaxM0MutationId,
|
|
103
110
|
getLastCompartmentEndMessage,
|
|
@@ -133,12 +140,12 @@ import {
|
|
|
133
140
|
peekNoteNudgeText,
|
|
134
141
|
markNoteNudgeDelivered,
|
|
135
142
|
getActiveCompartmentRun
|
|
136
|
-
} from "./index-
|
|
143
|
+
} from "./index-y76rhsnr.js";
|
|
137
144
|
import {
|
|
138
145
|
BoundedSessionMap,
|
|
139
146
|
cleanSearchText,
|
|
140
147
|
matchedSearchSnippet
|
|
141
|
-
} from "./index-
|
|
148
|
+
} from "./index-mnnkgq0q.js";
|
|
142
149
|
import {
|
|
143
150
|
stripSystemInjection,
|
|
144
151
|
isTextPart,
|
|
@@ -208,12 +215,14 @@ import {
|
|
|
208
215
|
replaySentinelByMessageIds,
|
|
209
216
|
isInActiveAnthropicTurn,
|
|
210
217
|
hasAnthropicReasoning,
|
|
218
|
+
prepareServedShapeRepair,
|
|
211
219
|
stripSystemInjectedMessages,
|
|
212
220
|
stripDroppedPlaceholderMessages,
|
|
213
221
|
replayClearedReasoning,
|
|
214
222
|
replayStrippedInlineThinking,
|
|
215
223
|
clearOldReasoning,
|
|
216
224
|
stripClearedReasoning,
|
|
225
|
+
captureInlineThinkingRepairs,
|
|
217
226
|
stripInlineThinking,
|
|
218
227
|
findReasoningBearingAssistantIds,
|
|
219
228
|
findLatestAssistantReasoningMutationExemptMessage,
|
|
@@ -234,10 +243,10 @@ import {
|
|
|
234
243
|
extractToolCallObservation,
|
|
235
244
|
ToolMutationBatch,
|
|
236
245
|
createToolDropTarget
|
|
237
|
-
} from "./index-
|
|
246
|
+
} from "./index-mnhcdfxg.js";
|
|
238
247
|
import {
|
|
239
248
|
isValidLanguageCode
|
|
240
|
-
} from "./index-
|
|
249
|
+
} from "./index-nxrsns5x.js";
|
|
241
250
|
import {
|
|
242
251
|
isEmbeddingHostBusy2
|
|
243
252
|
} from "./index-qt1qqasc.js";
|
|
@@ -245,10 +254,10 @@ import {
|
|
|
245
254
|
openCodeDbExists,
|
|
246
255
|
withReadOnlySessionDb,
|
|
247
256
|
getMessageTimesFromOpenCodeDb
|
|
248
|
-
} from "./index-
|
|
257
|
+
} from "./index-ksq50rg0.js";
|
|
249
258
|
import {
|
|
250
259
|
userFacingFailureCode
|
|
251
|
-
} from "./index-
|
|
260
|
+
} from "./index-3svaejkh.js";
|
|
252
261
|
import {
|
|
253
262
|
normalizeProtectedToolName,
|
|
254
263
|
mergeProtectedTools
|
|
@@ -258,7 +267,7 @@ import {
|
|
|
258
267
|
} from "./index-y8v6yerm.js";
|
|
259
268
|
import {
|
|
260
269
|
logSlowWriteTransaction
|
|
261
|
-
} from "./index-
|
|
270
|
+
} from "./index-t5pck3ss.js";
|
|
262
271
|
|
|
263
272
|
// src/features/magic-context/tagger.ts
|
|
264
273
|
var TOOL_COMPOSITE_KEY_SEP = "\x00";
|
|
@@ -1243,7 +1252,8 @@ ${trimmedBody}…
|
|
|
1243
1252
|
return wrapped;
|
|
1244
1253
|
}
|
|
1245
1254
|
function selectAutoSearchResults(results, threshold) {
|
|
1246
|
-
|
|
1255
|
+
const relevance = (result) => result.relevanceScore ?? result.score;
|
|
1256
|
+
return results.filter((result) => relevance(result) >= threshold).sort((left, right) => relevance(right) - relevance(left));
|
|
1247
1257
|
}
|
|
1248
1258
|
|
|
1249
1259
|
// src/hooks/magic-context/auto-search-worker-client.ts
|
|
@@ -1336,22 +1346,42 @@ function retryUnpublishedAutoSearchNoHint(db, sessionId, messageId, startedAt) {
|
|
|
1336
1346
|
}
|
|
1337
1347
|
return true;
|
|
1338
1348
|
}
|
|
1349
|
+
|
|
1350
|
+
class AutoSearchBusyError extends Error {
|
|
1351
|
+
constructor() {
|
|
1352
|
+
super("an earlier auto-search of this session is still running");
|
|
1353
|
+
this.name = "AutoSearchBusyError";
|
|
1354
|
+
}
|
|
1355
|
+
}
|
|
1339
1356
|
async function searchAutoHint(db, sessionId, projectPath, query, options, entry = new URL(new URL(import.meta.url).pathname.endsWith(".ts") ? "./auto-search-worker.ts" : "./auto-search-worker.js", import.meta.url)) {
|
|
1340
|
-
|
|
1357
|
+
const {
|
|
1358
|
+
rerankConfig: _rerankConfig,
|
|
1359
|
+
rerankClient: _rerankClient,
|
|
1360
|
+
rerankConnectionFile: _rerankConnectionFile,
|
|
1361
|
+
onRerankSkipped: _onRerankSkipped,
|
|
1362
|
+
captureRerankLanes: _captureRerankLanes,
|
|
1363
|
+
...hintOptions
|
|
1364
|
+
} = options;
|
|
1365
|
+
return executeAutoSearchWorker(db, sessionId, projectPath, query, { ...hintOptions, explicitSearch: false, rerank: false }, entry, "search");
|
|
1341
1366
|
}
|
|
1342
1367
|
var pendingBackfills = new WeakMap;
|
|
1343
1368
|
var searchWorkers = new WeakMap;
|
|
1344
1369
|
var liveSearchWorkers = new Set;
|
|
1345
1370
|
var MAX_IDLE_SEARCH_WORKERS = 4;
|
|
1346
1371
|
var SEARCH_WORKER_IDLE_MS = 5 * 60000;
|
|
1372
|
+
var DETACHED_SEARCH_LIMIT_MS = 30000;
|
|
1373
|
+
var AUTO_SEARCH_WORKER_CLOSE_DEADLINE_MS = 2000;
|
|
1347
1374
|
var workersCreated = 0;
|
|
1348
1375
|
var workersReused = 0;
|
|
1376
|
+
var searchesSkippedBusy = 0;
|
|
1349
1377
|
async function acquireSearchWorker(db, key, entry, input, signal) {
|
|
1350
1378
|
const pool = searchWorkers.get(db) ?? new Map;
|
|
1351
1379
|
searchWorkers.set(db, pool);
|
|
1352
1380
|
while (!signal.aborted) {
|
|
1353
1381
|
let slot = pool.get(key);
|
|
1354
1382
|
if (slot?.busy) {
|
|
1383
|
+
if (input.job === "search" && (slot.detached || slot.busySessionId === input.sessionId))
|
|
1384
|
+
return "busy";
|
|
1355
1385
|
const current = slot;
|
|
1356
1386
|
await new Promise((resolve) => {
|
|
1357
1387
|
const done = () => {
|
|
@@ -1360,6 +1390,8 @@ async function acquireSearchWorker(db, key, entry, input, signal) {
|
|
|
1360
1390
|
};
|
|
1361
1391
|
signal.addEventListener("abort", done, { once: true });
|
|
1362
1392
|
current.busy?.then(done);
|
|
1393
|
+
if (!current.detached)
|
|
1394
|
+
current.detachedSignal?.then(done);
|
|
1363
1395
|
if (signal.aborted)
|
|
1364
1396
|
done();
|
|
1365
1397
|
});
|
|
@@ -1368,14 +1400,16 @@ async function acquireSearchWorker(db, key, entry, input, signal) {
|
|
|
1368
1400
|
const fresh = !slot;
|
|
1369
1401
|
if (!slot) {
|
|
1370
1402
|
const worker = inRootAsyncContext2(() => new Worker(entry, { workerData: { ...input, persistent: true } }));
|
|
1403
|
+
const shutdown = createWorkerShutdown(worker, "auto-search", AUTO_SEARCH_WORKER_CLOSE_DEADLINE_MS);
|
|
1371
1404
|
slot = {
|
|
1372
1405
|
worker,
|
|
1373
1406
|
dispose() {
|
|
1407
|
+
this.disposed = true;
|
|
1374
1408
|
clearTimeout(this.idleTimer);
|
|
1375
1409
|
if (pool.get(key) === this)
|
|
1376
1410
|
pool.delete(key);
|
|
1377
1411
|
liveSearchWorkers.delete(this);
|
|
1378
|
-
|
|
1412
|
+
shutdown.close();
|
|
1379
1413
|
worker.unref();
|
|
1380
1414
|
}
|
|
1381
1415
|
};
|
|
@@ -1389,9 +1423,14 @@ async function acquireSearchWorker(db, key, entry, input, signal) {
|
|
|
1389
1423
|
workersReused++;
|
|
1390
1424
|
clearTimeout(slot.idleTimer);
|
|
1391
1425
|
const current = slot;
|
|
1426
|
+
current.busySessionId = input.sessionId;
|
|
1427
|
+
current.detached = false;
|
|
1392
1428
|
current.busy = new Promise((resolve) => {
|
|
1393
1429
|
current.release = resolve;
|
|
1394
1430
|
});
|
|
1431
|
+
current.detachedSignal = new Promise((resolve) => {
|
|
1432
|
+
current.markDetached = resolve;
|
|
1433
|
+
});
|
|
1395
1434
|
current.worker.ref();
|
|
1396
1435
|
return { slot: current, fresh };
|
|
1397
1436
|
}
|
|
@@ -1400,6 +1439,9 @@ async function acquireSearchWorker(db, key, entry, input, signal) {
|
|
|
1400
1439
|
function queueAutoSearchBackfill(db, sessionId, projectPath, query) {
|
|
1401
1440
|
if (isEmbeddingHostBusy2())
|
|
1402
1441
|
return Promise.resolve();
|
|
1442
|
+
const snapshot = getProjectEmbeddingSnapshot2(projectPath);
|
|
1443
|
+
if (!snapshot?.enabled || !snapshot.features.memoryEnabled)
|
|
1444
|
+
return Promise.resolve();
|
|
1403
1445
|
const key = `${sessionId}\x00${projectPath}`;
|
|
1404
1446
|
const pending = pendingBackfills.get(db) ?? new Map;
|
|
1405
1447
|
pendingBackfills.set(db, pending);
|
|
@@ -1447,6 +1489,7 @@ async function executeAutoSearchWorker(db, sessionId, projectPath, query, option
|
|
|
1447
1489
|
signal: deadlineSignal,
|
|
1448
1490
|
readMessages: _readMessages,
|
|
1449
1491
|
searchMessageHistory: _searchMessageHistory,
|
|
1492
|
+
stepTimings: _stepTimings,
|
|
1450
1493
|
...serializable
|
|
1451
1494
|
} = options;
|
|
1452
1495
|
const lifecycle = registerAutoSearchWork(sessionId);
|
|
@@ -1482,30 +1525,55 @@ async function executeAutoSearchWorker(db, sessionId, projectPath, query, option
|
|
|
1482
1525
|
lifecycle.done();
|
|
1483
1526
|
return [];
|
|
1484
1527
|
}
|
|
1528
|
+
if (lease === "busy") {
|
|
1529
|
+
lifecycle.done();
|
|
1530
|
+
searchesSkippedBusy++;
|
|
1531
|
+
throw new AutoSearchBusyError;
|
|
1532
|
+
}
|
|
1485
1533
|
const { slot, fresh } = lease;
|
|
1486
1534
|
const worker = slot.worker;
|
|
1535
|
+
const detachable = job === "search" && entry.href === defaultAutoSearchWorkerEntry().href;
|
|
1536
|
+
const startedAt = performance.now();
|
|
1537
|
+
let detachedAt;
|
|
1538
|
+
let ownerVectorMs;
|
|
1539
|
+
let abandonTimer;
|
|
1487
1540
|
return new Promise((resolve, reject) => {
|
|
1488
1541
|
let settled = false;
|
|
1489
|
-
|
|
1542
|
+
let released = false;
|
|
1543
|
+
const settle = (results, error) => {
|
|
1490
1544
|
if (settled)
|
|
1491
1545
|
return;
|
|
1492
1546
|
settled = true;
|
|
1547
|
+
if (error)
|
|
1548
|
+
reject(error);
|
|
1549
|
+
else
|
|
1550
|
+
resolve(results);
|
|
1551
|
+
};
|
|
1552
|
+
const release = (dispose) => {
|
|
1553
|
+
if (released)
|
|
1554
|
+
return;
|
|
1555
|
+
released = true;
|
|
1556
|
+
clearTimeout(abandonTimer);
|
|
1493
1557
|
signal?.removeEventListener("abort", abort);
|
|
1494
1558
|
lifecycle.signal.removeEventListener("abort", abort);
|
|
1495
1559
|
lifecycle.done();
|
|
1496
1560
|
worker.off("message", onMessage);
|
|
1497
1561
|
worker.off("error", onError);
|
|
1498
1562
|
worker.off("exit", onExit);
|
|
1499
|
-
if (
|
|
1563
|
+
if (dispose || !detachable)
|
|
1500
1564
|
slot.dispose();
|
|
1501
|
-
else {
|
|
1565
|
+
else if (!slot.disposed) {
|
|
1502
1566
|
slot.idleTimer = setTimeout(() => slot.dispose(), SEARCH_WORKER_IDLE_MS);
|
|
1503
1567
|
slot.idleTimer.unref?.();
|
|
1504
1568
|
}
|
|
1505
|
-
const
|
|
1569
|
+
const free = slot.release;
|
|
1506
1570
|
slot.busy = undefined;
|
|
1507
1571
|
slot.release = undefined;
|
|
1508
|
-
|
|
1572
|
+
slot.busySessionId = undefined;
|
|
1573
|
+
slot.detached = false;
|
|
1574
|
+
slot.detachedSignal = undefined;
|
|
1575
|
+
slot.markDetached = undefined;
|
|
1576
|
+
free?.();
|
|
1509
1577
|
const reusable = liveSearchWorkers.delete(slot);
|
|
1510
1578
|
if (reusable)
|
|
1511
1579
|
liveSearchWorkers.add(slot);
|
|
@@ -1513,51 +1581,82 @@ async function executeAutoSearchWorker(db, sessionId, projectPath, query, option
|
|
|
1513
1581
|
for (const prior of idle.slice(0, Math.max(0, idle.length - MAX_IDLE_SEARCH_WORKERS)))
|
|
1514
1582
|
prior.dispose();
|
|
1515
1583
|
worker.unref();
|
|
1516
|
-
if (error)
|
|
1517
|
-
reject(error);
|
|
1518
|
-
else
|
|
1519
|
-
resolve(results);
|
|
1520
1584
|
};
|
|
1521
|
-
const
|
|
1585
|
+
const finish = (results, error) => {
|
|
1586
|
+
settle(results, error);
|
|
1587
|
+
release(Boolean(error) || signal.aborted);
|
|
1588
|
+
};
|
|
1589
|
+
const abort = () => {
|
|
1590
|
+
if (lifecycle.signal.aborted || !detachable) {
|
|
1591
|
+
finish([]);
|
|
1592
|
+
return;
|
|
1593
|
+
}
|
|
1594
|
+
if (settled)
|
|
1595
|
+
return;
|
|
1596
|
+
detachedAt = performance.now();
|
|
1597
|
+
slot.detached = true;
|
|
1598
|
+
slot.markDetached?.();
|
|
1599
|
+
settle([]);
|
|
1600
|
+
abandonTimer = setTimeout(() => {
|
|
1601
|
+
log2(`[auto-search] session ${sessionId}: search still running ${DETACHED_SEARCH_LIMIT_MS} ms after its deadline; disposing its worker (owner vector wait ${formatMs(ownerVectorMs)})`);
|
|
1602
|
+
release(true);
|
|
1603
|
+
}, DETACHED_SEARCH_LIMIT_MS);
|
|
1604
|
+
abandonTimer.unref?.();
|
|
1605
|
+
};
|
|
1522
1606
|
signal?.addEventListener("abort", abort, { once: true });
|
|
1523
1607
|
lifecycle.signal.addEventListener("abort", abort, { once: true });
|
|
1524
1608
|
const onError = (error) => finish([], error);
|
|
1525
1609
|
const onExit = (code) => finish([], new Error(`auto-search worker exited (${code})`));
|
|
1526
1610
|
const onMessage = async (reply) => {
|
|
1527
|
-
if (
|
|
1611
|
+
if (released)
|
|
1528
1612
|
return;
|
|
1529
|
-
if (reply.kind === "result") {
|
|
1613
|
+
if (reply.kind === "result" || reply.kind === "error") {
|
|
1614
|
+
if (detachedAt !== undefined) {
|
|
1615
|
+
logLateSearch(sessionId, performance.now() - detachedAt, detachedAt - startedAt, ownerVectorMs, reply.kind === "result" ? reply.timings : undefined, reply.kind === "error");
|
|
1616
|
+
release(reply.kind === "error");
|
|
1617
|
+
return;
|
|
1618
|
+
}
|
|
1619
|
+
if (reply.kind === "error") {
|
|
1620
|
+
finish([], new Error(reply.error));
|
|
1621
|
+
return;
|
|
1622
|
+
}
|
|
1530
1623
|
if (snapshot && getProjectEmbeddingSnapshot2(projectPath)?.generation !== snapshot.generation)
|
|
1531
1624
|
finish([]);
|
|
1532
1625
|
else
|
|
1533
1626
|
finish(reply.results);
|
|
1534
1627
|
return;
|
|
1535
1628
|
}
|
|
1536
|
-
if (reply.kind === "error") {
|
|
1537
|
-
finish([], new Error(reply.error));
|
|
1538
|
-
return;
|
|
1539
|
-
}
|
|
1540
1629
|
if (reply.kind === "messages" || reply.kind === "accepted")
|
|
1541
1630
|
return;
|
|
1542
1631
|
const response = { id: reply.id };
|
|
1543
|
-
|
|
1632
|
+
if (!signal.aborted) {
|
|
1633
|
+
const requestedAt = performance.now();
|
|
1634
|
+
try {
|
|
1635
|
+
if (reply.kind === "query")
|
|
1636
|
+
response.result = await (job === "backfill" ? embedTextForProject2(projectPath, reply.text, signal, "query") : boundedHintEmbedding(embedQuery, reply.text, signal)) ?? null;
|
|
1637
|
+
else {
|
|
1638
|
+
const passage = await embedBatchForProject2(projectPath, reply.texts, signal, reply.purpose);
|
|
1639
|
+
const current = getProjectEmbeddingSnapshot2(projectPath);
|
|
1640
|
+
response.passage = passage && current ? {
|
|
1641
|
+
...passage,
|
|
1642
|
+
providerIdentity: current.providerIdentity,
|
|
1643
|
+
runtimeFingerprint: current.runtimeFingerprint,
|
|
1644
|
+
dimensions: passage.vectors.find((vector) => vector !== null)?.length ?? null
|
|
1645
|
+
} : null;
|
|
1646
|
+
}
|
|
1647
|
+
} catch (error) {
|
|
1648
|
+
response.error = error instanceof Error ? error.message : String(error);
|
|
1649
|
+
}
|
|
1544
1650
|
if (reply.kind === "query")
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
response.
|
|
1550
|
-
...passage,
|
|
1551
|
-
providerIdentity: current.providerIdentity,
|
|
1552
|
-
runtimeFingerprint: current.runtimeFingerprint,
|
|
1553
|
-
dimensions: passage.vectors.find((vector) => vector !== null)?.length ?? null
|
|
1554
|
-
} : null;
|
|
1651
|
+
ownerVectorMs = performance.now() - requestedAt;
|
|
1652
|
+
if (signal.aborted) {
|
|
1653
|
+
response.result = undefined;
|
|
1654
|
+
response.passage = undefined;
|
|
1655
|
+
response.error = undefined;
|
|
1555
1656
|
}
|
|
1556
|
-
} catch (error) {
|
|
1557
|
-
response.error = error instanceof Error ? error.message : String(error);
|
|
1558
1657
|
}
|
|
1559
1658
|
response.embeddingHostBusy = isEmbeddingHostBusy2();
|
|
1560
|
-
if (!
|
|
1659
|
+
if (!released) {
|
|
1561
1660
|
try {
|
|
1562
1661
|
worker.postMessage(response);
|
|
1563
1662
|
} catch (error) {
|
|
@@ -1579,6 +1678,15 @@ async function executeAutoSearchWorker(db, sessionId, projectPath, query, option
|
|
|
1579
1678
|
}
|
|
1580
1679
|
});
|
|
1581
1680
|
}
|
|
1681
|
+
function formatMs(value) {
|
|
1682
|
+
return value === undefined ? "n/a" : `${Math.round(value)} ms`;
|
|
1683
|
+
}
|
|
1684
|
+
function logLateSearch(sessionId, lateMs, waitedMs, ownerVectorMs, timings, failed) {
|
|
1685
|
+
const steps = timings?.steps;
|
|
1686
|
+
const warm = timings?.lastPoolWarm;
|
|
1687
|
+
const pool = warm ? `last pool refresh ${warm.outcome} in ${formatMs(warm.totalMs)} (probe ${formatMs(warm.probeMs)}, read ${formatMs(warm.readMs)}, decode ${formatMs(warm.decodeMs)}, ${warm.probedRows} rows probed, ${warm.decodedRows} decoded)` : "no pool refresh yet";
|
|
1688
|
+
log2(`[auto-search] session ${sessionId}: deadline passed after ${formatMs(waitedMs)}; the search ${failed ? "failed" : "finished"} ${formatMs(lateMs)} later. Steps: message FTS ${formatMs(steps?.messageMs)}, vector wait ${formatMs(steps?.vectorWaitMs)} (owner embedding ${formatMs(ownerVectorMs)}), chunk lane ${formatMs(steps?.chunkMs)} (pool ${steps?.chunkPool ?? "n/a"}), other lanes ${formatMs(steps?.otherLanesMs)}, job ${formatMs(timings?.jobMs)}; ${pool}`);
|
|
1689
|
+
}
|
|
1582
1690
|
async function boundedHintEmbedding(embed, text, signal) {
|
|
1583
1691
|
const controller = new AbortController;
|
|
1584
1692
|
const combined = AbortSignal.any([signal, controller.signal]);
|
|
@@ -1602,6 +1710,7 @@ function defaultAutoSearchWorkerEntry() {
|
|
|
1602
1710
|
}
|
|
1603
1711
|
var MESSAGE_WORKER_ACCEPT_TIMEOUT_MS = 400;
|
|
1604
1712
|
var MESSAGE_WORKER_RESULT_TIMEOUT_MS = 30000;
|
|
1713
|
+
var MESSAGE_SEARCH_WORKER_CLOSE_DEADLINE_MS = 2000;
|
|
1605
1714
|
var messageSearchWorkerFallbacks = new Map;
|
|
1606
1715
|
function searchMessageHistoryOffThread(db, request, entry = defaultAutoSearchWorkerEntry(), deadlines = {}) {
|
|
1607
1716
|
const fallback = (reason, detail) => {
|
|
@@ -1629,6 +1738,7 @@ function searchMessageHistoryOffThread(db, request, entry = defaultAutoSearchWor
|
|
|
1629
1738
|
return new Promise((resolve) => {
|
|
1630
1739
|
let settled = false;
|
|
1631
1740
|
let worker;
|
|
1741
|
+
let shutdown;
|
|
1632
1742
|
let deadline;
|
|
1633
1743
|
const finish = (outcome, reason, detail) => {
|
|
1634
1744
|
if (settled)
|
|
@@ -1637,7 +1747,7 @@ function searchMessageHistoryOffThread(db, request, entry = defaultAutoSearchWor
|
|
|
1637
1747
|
clearTimeout(deadline);
|
|
1638
1748
|
if (reason)
|
|
1639
1749
|
fallback(reason, detail);
|
|
1640
|
-
|
|
1750
|
+
shutdown?.close();
|
|
1641
1751
|
worker?.unref();
|
|
1642
1752
|
resolve(outcome);
|
|
1643
1753
|
};
|
|
@@ -1648,6 +1758,7 @@ function searchMessageHistoryOffThread(db, request, entry = defaultAutoSearchWor
|
|
|
1648
1758
|
};
|
|
1649
1759
|
try {
|
|
1650
1760
|
worker = inRootAsyncContext2(() => new Worker(entry, { workerData: input }));
|
|
1761
|
+
shutdown = createWorkerShutdown(worker, "message-search", MESSAGE_SEARCH_WORKER_CLOSE_DEADLINE_MS);
|
|
1651
1762
|
} catch (error) {
|
|
1652
1763
|
finish(null, "start-failed", error);
|
|
1653
1764
|
return;
|
|
@@ -1916,7 +2027,8 @@ async function runAutoSearchHint(args) {
|
|
|
1916
2027
|
},
|
|
1917
2028
|
isEmbeddingRuntimeEnabled: () => embeddingEnabled === true,
|
|
1918
2029
|
visibleMemoryIds: options.visibleMemoryIds ?? null,
|
|
1919
|
-
sources: ["memory", "message", "git_commit"]
|
|
2030
|
+
sources: ["memory", "message", "git_commit"],
|
|
2031
|
+
chunkPoolWarmOnly: true
|
|
1920
2032
|
};
|
|
1921
2033
|
return searchAutoHint(db, sessionId, options.projectPath, rawPrompt, {
|
|
1922
2034
|
...searchOptions,
|
|
@@ -1927,6 +2039,11 @@ async function runAutoSearchHint(args) {
|
|
|
1927
2039
|
} catch (error) {
|
|
1928
2040
|
if (lifecycleSignal.aborted)
|
|
1929
2041
|
return AUTO_SEARCH_OK;
|
|
2042
|
+
if (error instanceof AutoSearchBusyError) {
|
|
2043
|
+
sessionLog2(sessionId, "auto-search: an earlier search of this session is still running, skipping hint for this turn");
|
|
2044
|
+
persistAutoSearchSkip(db, sessionId, userMsgId);
|
|
2045
|
+
return { ok: false, kind: "timeout" };
|
|
2046
|
+
}
|
|
1930
2047
|
log2(`[auto-search] unified search failed for session ${sessionId} (no-hint frozen for this turn): ${error instanceof Error ? error.message : String(error)}`);
|
|
1931
2048
|
const outcome = await writeNoHintAndReconcile("error");
|
|
1932
2049
|
return outcome.ok ? { ok: false, kind: "search-failure" } : outcome;
|
|
@@ -1976,7 +2093,7 @@ ${hintText}`;
|
|
|
1976
2093
|
if (outcome.decision.decision === "hint") {
|
|
1977
2094
|
appendReminderToUserMessageById(messages, userMsgId, outcome.decision.text);
|
|
1978
2095
|
}
|
|
1979
|
-
sessionLog2(sessionId, `auto-search: attached hint to ${userMsgId} (${results.length} fragments, top
|
|
2096
|
+
sessionLog2(sessionId, `auto-search: attached hint to ${userMsgId} (${results.length} fragments, top relevance ${(results[0].relevanceScore ?? results[0].score).toFixed(3)})`);
|
|
1980
2097
|
return AUTO_SEARCH_OK;
|
|
1981
2098
|
} finally {
|
|
1982
2099
|
if (!lifecycleSignal.aborted && results !== null)
|
|
@@ -2285,6 +2402,22 @@ function resolveTodowriteAvailability(sessionId) {
|
|
|
2285
2402
|
return resolveToolAvailability(sessionId, TODOWRITE_TOOL);
|
|
2286
2403
|
}
|
|
2287
2404
|
|
|
2405
|
+
// src/hooks/magic-context/diagnostic-log-state.ts
|
|
2406
|
+
var states = new BoundedSessionMap(1000);
|
|
2407
|
+
var scope = (sessionId) => `${getMagicContextStorageDir()}\x00${getHarness2()}\x00${sessionId}`;
|
|
2408
|
+
function diagnosticStateChanged(sessionId, category, state) {
|
|
2409
|
+
const key = scope(sessionId);
|
|
2410
|
+
const previous = states.get(key) ?? new Map;
|
|
2411
|
+
if (previous.get(category) === state)
|
|
2412
|
+
return false;
|
|
2413
|
+
previous.set(category, state);
|
|
2414
|
+
states.set(key, previous);
|
|
2415
|
+
return true;
|
|
2416
|
+
}
|
|
2417
|
+
function clearDiagnosticLogState(sessionId) {
|
|
2418
|
+
states.delete(scope(sessionId));
|
|
2419
|
+
}
|
|
2420
|
+
|
|
2288
2421
|
// src/hooks/magic-context/cache-busting-signals.ts
|
|
2289
2422
|
function canConsumeDeferredOnThisPass(args) {
|
|
2290
2423
|
if (args.justAwaitedPublication)
|
|
@@ -2292,7 +2425,7 @@ function canConsumeDeferredOnThisPass(args) {
|
|
|
2292
2425
|
return args.schedulerDecision === "execute" || args.contextPercentage >= (args.forceMaterializationPercentage ?? escalationBands(65).forceMaterializationPercentage);
|
|
2293
2426
|
}
|
|
2294
2427
|
function hasReclaimRide(signals) {
|
|
2295
|
-
return signals.hardFold || signals.force || signals.explicitFlush || signals.publishedHistory || signals.subagentExecute === true;
|
|
2428
|
+
return signals.hardFold || signals.force || signals.explicitFlush || signals.publishedHistory || signals.subagentExecute === true || signals.executeReclaim === true || signals.servedShapeRepair === true;
|
|
2296
2429
|
}
|
|
2297
2430
|
function prefixMutationPermitted(gate) {
|
|
2298
2431
|
return !gate.signedThinkingHold || gate.firstRender || gate.idleExpiry || gate.emergency;
|
|
@@ -2305,13 +2438,234 @@ var RECLAIM_RIDE_NAMES = [
|
|
|
2305
2438
|
"force",
|
|
2306
2439
|
"explicitFlush",
|
|
2307
2440
|
"publishedHistory",
|
|
2308
|
-
"subagentExecute"
|
|
2441
|
+
"subagentExecute",
|
|
2442
|
+
"executeReclaim",
|
|
2443
|
+
"servedShapeRepair"
|
|
2309
2444
|
];
|
|
2310
2445
|
function reclaimRideLabel(signals) {
|
|
2311
2446
|
const active = RECLAIM_RIDE_NAMES.filter((name) => signals[name]);
|
|
2312
2447
|
return `ride=${active.length > 0 ? active.join("+") : "none"}`;
|
|
2313
2448
|
}
|
|
2314
2449
|
|
|
2450
|
+
// src/hooks/magic-context/pending-drop-eligibility.ts
|
|
2451
|
+
function pendingDropVeto(tagNumber, target, protectedTagIds) {
|
|
2452
|
+
if (protectedTagIds.has(tagNumber))
|
|
2453
|
+
return "protected";
|
|
2454
|
+
if (target?.thinkingDropProtected)
|
|
2455
|
+
return "active_thinking";
|
|
2456
|
+
return null;
|
|
2457
|
+
}
|
|
2458
|
+
function capturePendingDropEligibility(targets, protectedTagIds) {
|
|
2459
|
+
const eligible = new Set;
|
|
2460
|
+
for (const [number, target] of targets) {
|
|
2461
|
+
if (pendingDropVeto(number, target, protectedTagIds))
|
|
2462
|
+
continue;
|
|
2463
|
+
if (target.drop) {
|
|
2464
|
+
if (target.canDrop?.() === true)
|
|
2465
|
+
eligible.add(number);
|
|
2466
|
+
} else {
|
|
2467
|
+
const content = target.getContent?.();
|
|
2468
|
+
const replacement = `[dropped §${number}§]`;
|
|
2469
|
+
if (typeof content === "string" && content.length > replacement.length && target.canSetContent?.(replacement) !== false)
|
|
2470
|
+
eligible.add(number);
|
|
2471
|
+
}
|
|
2472
|
+
}
|
|
2473
|
+
return eligible;
|
|
2474
|
+
}
|
|
2475
|
+
function pendingDropEligibilityKey(db, sessionId, input, protectionInputs) {
|
|
2476
|
+
const digests = input.map((message) => message.contentDigest?.() ?? null);
|
|
2477
|
+
if (digests.some((digest) => digest === null))
|
|
2478
|
+
return null;
|
|
2479
|
+
const revision = db.prepare("SELECT value FROM schema_migrations_meta WHERE key = ?").get(tagRevisionKey(sessionId));
|
|
2480
|
+
if (!revision?.value)
|
|
2481
|
+
return null;
|
|
2482
|
+
return JSON.stringify([
|
|
2483
|
+
input.map((message, index) => [
|
|
2484
|
+
message.id,
|
|
2485
|
+
message.role,
|
|
2486
|
+
message.synthetic,
|
|
2487
|
+
digests[index]
|
|
2488
|
+
]),
|
|
2489
|
+
revision.value,
|
|
2490
|
+
readEpochFloorSnapshot(db, sessionId),
|
|
2491
|
+
sessionDecisionCalibration(db, sessionId).toolsRatio,
|
|
2492
|
+
loadProtectedTailMeta(db, sessionId),
|
|
2493
|
+
[...getMergedReasoningStrippedIds(db, sessionId)].sort(),
|
|
2494
|
+
[...getReasoningRemovalState(db, sessionId).messageIds].sort(),
|
|
2495
|
+
protectionInputs
|
|
2496
|
+
]);
|
|
2497
|
+
}
|
|
2498
|
+
function createPendingDropEligibilityCache() {
|
|
2499
|
+
const sessions = new Map;
|
|
2500
|
+
return {
|
|
2501
|
+
read(sessionId, key) {
|
|
2502
|
+
const previous = sessions.get(sessionId);
|
|
2503
|
+
if (key === null || previous?.key !== key) {
|
|
2504
|
+
sessions.delete(sessionId);
|
|
2505
|
+
return;
|
|
2506
|
+
}
|
|
2507
|
+
return previous.eligible;
|
|
2508
|
+
},
|
|
2509
|
+
record(sessionId, key, eligible) {
|
|
2510
|
+
sessions.delete(sessionId);
|
|
2511
|
+
if (key === null)
|
|
2512
|
+
return;
|
|
2513
|
+
const oldest = sessions.keys().next().value;
|
|
2514
|
+
if (sessions.size >= 64 && oldest !== undefined)
|
|
2515
|
+
sessions.delete(oldest);
|
|
2516
|
+
sessions.set(sessionId, { key, eligible: new Set(eligible) });
|
|
2517
|
+
}
|
|
2518
|
+
};
|
|
2519
|
+
}
|
|
2520
|
+
|
|
2521
|
+
// src/hooks/magic-context/postprocess-read-cache.ts
|
|
2522
|
+
var connections = new WeakMap;
|
|
2523
|
+
function snapshot(db, sessionId) {
|
|
2524
|
+
const transaction = db;
|
|
2525
|
+
try {
|
|
2526
|
+
if (transaction.inTransaction || transaction.isTransaction) {
|
|
2527
|
+
connections.delete(db);
|
|
2528
|
+
return { version: -1, changes: -1 };
|
|
2529
|
+
}
|
|
2530
|
+
} catch {
|
|
2531
|
+
connections.delete(db);
|
|
2532
|
+
return { version: -1, changes: -1 };
|
|
2533
|
+
}
|
|
2534
|
+
let connection = connections.get(db);
|
|
2535
|
+
if (!connection) {
|
|
2536
|
+
connection = {
|
|
2537
|
+
stamp: db.prepare("SELECT total_changes() AS changes, data_version AS version FROM pragma_data_version"),
|
|
2538
|
+
sessions: new BoundedSessionMap(100)
|
|
2539
|
+
};
|
|
2540
|
+
connections.set(db, connection);
|
|
2541
|
+
}
|
|
2542
|
+
const stamp = connection.stamp.get();
|
|
2543
|
+
const previous = connection.sessions.get(sessionId);
|
|
2544
|
+
if (previous?.version === stamp.version && previous.changes === stamp.changes) {
|
|
2545
|
+
return previous;
|
|
2546
|
+
}
|
|
2547
|
+
const value = { ...stamp };
|
|
2548
|
+
connection.sessions.set(sessionId, value);
|
|
2549
|
+
return value;
|
|
2550
|
+
}
|
|
2551
|
+
function postprocessTailTags(db, sessionId) {
|
|
2552
|
+
const state = snapshot(db, sessionId);
|
|
2553
|
+
return state.tags ??= getTailHygieneTags2(db, sessionId);
|
|
2554
|
+
}
|
|
2555
|
+
function postprocessOldestTags(db, sessionId, protectedNumbers) {
|
|
2556
|
+
const state = snapshot(db, sessionId);
|
|
2557
|
+
const hints = state.hints;
|
|
2558
|
+
if (hints && hints.protectedNumbers.size === protectedNumbers.size && [...protectedNumbers].every((number) => hints.protectedNumbers.has(number))) {
|
|
2559
|
+
return hints.value;
|
|
2560
|
+
}
|
|
2561
|
+
const value = getOldestActiveUnprotectedToolTags2(db, sessionId, protectedNumbers);
|
|
2562
|
+
state.hints = { protectedNumbers: new Set(protectedNumbers), value };
|
|
2563
|
+
return value;
|
|
2564
|
+
}
|
|
2565
|
+
function postprocessReplaySnapshot(db, sessionId) {
|
|
2566
|
+
const state = snapshot(db, sessionId);
|
|
2567
|
+
const replay = state.replay ??= loadPostprocessReplaySnapshot(db, sessionId);
|
|
2568
|
+
return {
|
|
2569
|
+
...replay,
|
|
2570
|
+
staleReduceStrippedIds: new Set(replay.staleReduceStrippedIds),
|
|
2571
|
+
processedImageStrippedIds: new Set(replay.processedImageStrippedIds),
|
|
2572
|
+
processedImageMarkers: new Map(replay.processedImageMarkers),
|
|
2573
|
+
strippedPlaceholderIds: new Set(replay.strippedPlaceholderIds),
|
|
2574
|
+
hiddenSeamPlaceholderIds: new Set(replay.hiddenSeamPlaceholderIds),
|
|
2575
|
+
mergedReasoningStrippedIds: new Set(replay.mergedReasoningStrippedIds),
|
|
2576
|
+
trailingBlankDecisions: new Map(replay.trailingBlankDecisions),
|
|
2577
|
+
noteNudgeAnchors: structuredClone(replay.noteNudgeAnchors),
|
|
2578
|
+
autoSearchHintDecisions: structuredClone(replay.autoSearchHintDecisions),
|
|
2579
|
+
todoSyntheticAnchor: structuredClone(replay.todoSyntheticAnchor),
|
|
2580
|
+
pendingCompactionMarker: structuredClone(replay.pendingCompactionMarker),
|
|
2581
|
+
compactionMarker: structuredClone(replay.compactionMarker)
|
|
2582
|
+
};
|
|
2583
|
+
}
|
|
2584
|
+
|
|
2585
|
+
// src/hooks/magic-context/execute-reclaim.ts
|
|
2586
|
+
var NAMESPACE = "executeReclaim";
|
|
2587
|
+
var failedWrites = new WeakMap;
|
|
2588
|
+
function readExecuteReclaimState(db, sessionId) {
|
|
2589
|
+
return parseState(postprocessReplaySnapshot(db, sessionId).executeReclaim);
|
|
2590
|
+
}
|
|
2591
|
+
function parseState(lane) {
|
|
2592
|
+
const value = lane;
|
|
2593
|
+
return {
|
|
2594
|
+
heldPasses: typeof value?.heldPasses === "number" ? Math.max(0, value.heldPasses) : 0,
|
|
2595
|
+
floorOrdinal: typeof value?.floorOrdinal === "number" ? value.floorOrdinal : null,
|
|
2596
|
+
floorPromptId: typeof value?.floorPromptId === "string" ? value.floorPromptId : null
|
|
2597
|
+
};
|
|
2598
|
+
}
|
|
2599
|
+
function writeExecuteReclaimState(db, sessionId, patch) {
|
|
2600
|
+
if (failedWrites.get(db)?.has(sessionId))
|
|
2601
|
+
return false;
|
|
2602
|
+
try {
|
|
2603
|
+
const current = readExecuteReclaimState(db, sessionId);
|
|
2604
|
+
if (JSON.stringify(current) === JSON.stringify({ ...current, ...patch }))
|
|
2605
|
+
return true;
|
|
2606
|
+
if (!updateReplayDocument(db, sessionId, (doc) => {
|
|
2607
|
+
const previous = parseState(doc[NAMESPACE]);
|
|
2608
|
+
const state = { ...previous, ...patch };
|
|
2609
|
+
if (JSON.stringify(previous) === JSON.stringify(state))
|
|
2610
|
+
return false;
|
|
2611
|
+
doc.version = 2;
|
|
2612
|
+
doc[NAMESPACE] = state;
|
|
2613
|
+
return true;
|
|
2614
|
+
}))
|
|
2615
|
+
throw new Error("Could not persist execute reclaim state");
|
|
2616
|
+
return true;
|
|
2617
|
+
} catch (error) {
|
|
2618
|
+
let failed = failedWrites.get(db);
|
|
2619
|
+
if (!failed)
|
|
2620
|
+
failedWrites.set(db, failed = new Set);
|
|
2621
|
+
failed.add(sessionId);
|
|
2622
|
+
sessionLog2(sessionId, `execute reclaim state persistence failed; retaining existing policy: ${String(error)}`);
|
|
2623
|
+
return false;
|
|
2624
|
+
}
|
|
2625
|
+
}
|
|
2626
|
+
function clearExecuteReclaimState(db, sessionId) {
|
|
2627
|
+
writeExecuteReclaimState(db, sessionId, {
|
|
2628
|
+
heldPasses: 0,
|
|
2629
|
+
floorOrdinal: null,
|
|
2630
|
+
floorPromptId: null
|
|
2631
|
+
});
|
|
2632
|
+
}
|
|
2633
|
+
function maintainExecuteFloorMark(db, sessionId, promptId, belowExecute) {
|
|
2634
|
+
failedWrites.get(db)?.delete(sessionId);
|
|
2635
|
+
const state = readExecuteReclaimState(db, sessionId);
|
|
2636
|
+
if (state.floorOrdinal !== null && (belowExecute || promptId !== null && promptId !== state.floorPromptId)) {
|
|
2637
|
+
writeExecuteReclaimState(db, sessionId, { floorOrdinal: null, floorPromptId: null });
|
|
2638
|
+
}
|
|
2639
|
+
}
|
|
2640
|
+
function estimateExecuteReclaimTokens(args) {
|
|
2641
|
+
const eligible = capturePendingDropEligibility(args.targets, args.protectedTagIds);
|
|
2642
|
+
const queued = new Set(args.pendingOps.filter((op) => op.operation === "drop").map((op) => op.tagId));
|
|
2643
|
+
const candidates = args.tags.filter((tag) => tag.status === "active" && queued.has(tag.tagNumber) && eligible.has(tag.tagNumber));
|
|
2644
|
+
const preparationTargets = new Map;
|
|
2645
|
+
for (const tag of candidates) {
|
|
2646
|
+
const target = args.targets.get(tag.tagNumber);
|
|
2647
|
+
if (target?.prepareDrop)
|
|
2648
|
+
preparationTargets.set(tag.tagNumber, target);
|
|
2649
|
+
}
|
|
2650
|
+
const prepared = preparationTargets.size === 0 ? new Set : args.probePreparation?.(preparationTargets) ?? new Set([...preparationTargets].filter(([, target]) => target.prepareDrop?.() !== false).map(([number]) => number));
|
|
2651
|
+
const seed = sessionDecisionCalibration(args.db, args.sessionId);
|
|
2652
|
+
return candidates.reduce((total, tag) => {
|
|
2653
|
+
if (preparationTargets.has(tag.tagNumber) && !prepared.has(tag.tagNumber))
|
|
2654
|
+
return total;
|
|
2655
|
+
const ratio = tag.type === "tool" ? seed.toolsRatio : seed.proseRatio;
|
|
2656
|
+
return total + Math.max(0, (tag.tokenCount ?? Math.ceil(tag.byteSize / 4)) * ratio);
|
|
2657
|
+
}, 0);
|
|
2658
|
+
}
|
|
2659
|
+
function originateExecuteReclaim(args) {
|
|
2660
|
+
if (failedWrites.get(args.db)?.has(args.sessionId))
|
|
2661
|
+
return false;
|
|
2662
|
+
const state = readExecuteReclaimState(args.db, args.sessionId);
|
|
2663
|
+
const heldPasses = args.primaryExecute && args.reclaimableTokens > 0 && !args.alreadyBusting ? state.heldPasses + 1 : 0;
|
|
2664
|
+
if (!writeExecuteReclaimState(args.db, args.sessionId, { heldPasses }))
|
|
2665
|
+
return false;
|
|
2666
|
+
return args.primaryExecute && !args.alreadyBusting && !args.summaryCanCome && args.reclaimableTokens > 0 && (args.usableWindow > 0 && args.reclaimableTokens >= args.usableWindow * 0.02 || heldPasses >= 3);
|
|
2667
|
+
}
|
|
2668
|
+
|
|
2315
2669
|
// src/hooks/magic-context/reasoning-budget-status.ts
|
|
2316
2670
|
var sources = new Map;
|
|
2317
2671
|
function captureOpencodeReasoningBudgetStatus(sessionId, messages, budget, prefixBound, proseRatio = 1) {
|
|
@@ -2594,6 +2948,9 @@ function latestAssistantTurnStart(messages) {
|
|
|
2594
2948
|
function latestAssistantTurnMessages(messages) {
|
|
2595
2949
|
return new Set(messages.slice(latestAssistantTurnStart(messages)));
|
|
2596
2950
|
}
|
|
2951
|
+
function isAnthropicThinkingPart(part, familyRoute) {
|
|
2952
|
+
return isRecord(part) && THINKING_TYPES.has(String(part.type ?? part.kind)) && (familyRoute || isRecord(part.metadata) && isRecord(part.metadata.anthropic));
|
|
2953
|
+
}
|
|
2597
2954
|
function hasActiveAnthropicThinkingTurn(messages, provider, model) {
|
|
2598
2955
|
const familyRoute = isAnthropicFamilyRoute(provider, model);
|
|
2599
2956
|
for (const message of messages.slice(latestAssistantTurnStart(messages))) {
|
|
@@ -2602,7 +2959,7 @@ function hasActiveAnthropicThinkingTurn(messages, provider, model) {
|
|
|
2602
2959
|
const parts = content(message);
|
|
2603
2960
|
if (!Array.isArray(parts))
|
|
2604
2961
|
continue;
|
|
2605
|
-
if (parts.some((part) =>
|
|
2962
|
+
if (parts.some((part) => isAnthropicThinkingPart(part, familyRoute)))
|
|
2606
2963
|
return true;
|
|
2607
2964
|
}
|
|
2608
2965
|
return false;
|
|
@@ -2678,14 +3035,14 @@ function retainedActiveThinkingParts(args) {
|
|
|
2678
3035
|
}
|
|
2679
3036
|
|
|
2680
3037
|
// src/features/magic-context/storage-caveman-rules.ts
|
|
2681
|
-
var
|
|
3038
|
+
var NAMESPACE2 = "caveman";
|
|
2682
3039
|
var CURRENT_RULES_VERSION = 2;
|
|
2683
3040
|
var ORIGINAL_RULES = {
|
|
2684
3041
|
currentRules: false,
|
|
2685
3042
|
englishWordRules: true,
|
|
2686
3043
|
legacyReasoningTags: new Set
|
|
2687
3044
|
};
|
|
2688
|
-
function
|
|
3045
|
+
function parseState2(lane) {
|
|
2689
3046
|
if (!isRecord(lane) || lane.rules !== CURRENT_RULES_VERSION)
|
|
2690
3047
|
return ORIGINAL_RULES;
|
|
2691
3048
|
const tags = Array.isArray(lane.legacyReasoningTags) ? lane.legacyReasoningTags : [];
|
|
@@ -2697,7 +3054,7 @@ function parseState(lane) {
|
|
|
2697
3054
|
}
|
|
2698
3055
|
function getCavemanReplayState(db, sessionId) {
|
|
2699
3056
|
try {
|
|
2700
|
-
return
|
|
3057
|
+
return parseState2(readReplayEnvelope(db, sessionId)[NAMESPACE2]);
|
|
2701
3058
|
} catch (error) {
|
|
2702
3059
|
if (error instanceof ReplayDocumentError)
|
|
2703
3060
|
return ORIGINAL_RULES;
|
|
@@ -2707,11 +3064,11 @@ function getCavemanReplayState(db, sessionId) {
|
|
|
2707
3064
|
function recordCavemanCurrentRules(db, sessionId, englishWordRules, legacyReasoningTags) {
|
|
2708
3065
|
const tags = [...new Set(legacyReasoningTags)].sort((a, b) => a - b);
|
|
2709
3066
|
const persisted = updateReplayDocument(db, sessionId, (doc) => {
|
|
2710
|
-
const current =
|
|
3067
|
+
const current = parseState2(doc[NAMESPACE2]);
|
|
2711
3068
|
if (current.currentRules && current.englishWordRules === englishWordRules)
|
|
2712
3069
|
return false;
|
|
2713
3070
|
doc.version = 2;
|
|
2714
|
-
doc[
|
|
3071
|
+
doc[NAMESPACE2] = {
|
|
2715
3072
|
rules: CURRENT_RULES_VERSION,
|
|
2716
3073
|
legacyReasoningTags: current.currentRules ? [...current.legacyReasoningTags].sort((a, b) => a - b) : tags,
|
|
2717
3074
|
...englishWordRules ? {} : { englishWordRules: false }
|
|
@@ -2925,93 +3282,23 @@ function degradedPassError(site, error) {
|
|
|
2925
3282
|
return new DegradedPassRefusalError(site, { cause: error });
|
|
2926
3283
|
}
|
|
2927
3284
|
|
|
2928
|
-
// src/hooks/magic-context/pending-drop-eligibility.ts
|
|
2929
|
-
function pendingDropVeto(tagNumber, target, protectedTagIds) {
|
|
2930
|
-
if (protectedTagIds.has(tagNumber))
|
|
2931
|
-
return "protected";
|
|
2932
|
-
if (target?.thinkingDropProtected)
|
|
2933
|
-
return "active_thinking";
|
|
2934
|
-
return null;
|
|
2935
|
-
}
|
|
2936
|
-
function capturePendingDropEligibility(targets, protectedTagIds) {
|
|
2937
|
-
const eligible = new Set;
|
|
2938
|
-
for (const [number, target] of targets) {
|
|
2939
|
-
if (pendingDropVeto(number, target, protectedTagIds))
|
|
2940
|
-
continue;
|
|
2941
|
-
if (target.drop) {
|
|
2942
|
-
if (target.canDrop?.() === true)
|
|
2943
|
-
eligible.add(number);
|
|
2944
|
-
} else {
|
|
2945
|
-
const content = target.getContent?.();
|
|
2946
|
-
if (typeof content === "string" && content.length > `[dropped §${number}§]`.length)
|
|
2947
|
-
eligible.add(number);
|
|
2948
|
-
}
|
|
2949
|
-
}
|
|
2950
|
-
return eligible;
|
|
2951
|
-
}
|
|
2952
|
-
function pendingDropEligibilityKey(db, sessionId, input, protectionInputs) {
|
|
2953
|
-
const digests = input.map((message) => message.contentDigest?.() ?? null);
|
|
2954
|
-
if (digests.some((digest) => digest === null))
|
|
2955
|
-
return null;
|
|
2956
|
-
const revision = db.prepare("SELECT value FROM schema_migrations_meta WHERE key = ?").get(tagRevisionKey(sessionId));
|
|
2957
|
-
if (!revision?.value)
|
|
2958
|
-
return null;
|
|
2959
|
-
return JSON.stringify([
|
|
2960
|
-
input.map((message, index) => [
|
|
2961
|
-
message.id,
|
|
2962
|
-
message.role,
|
|
2963
|
-
message.synthetic,
|
|
2964
|
-
digests[index]
|
|
2965
|
-
]),
|
|
2966
|
-
revision.value,
|
|
2967
|
-
readEpochFloorSnapshot(db, sessionId),
|
|
2968
|
-
sessionDecisionCalibration(db, sessionId).toolsRatio,
|
|
2969
|
-
loadProtectedTailMeta(db, sessionId),
|
|
2970
|
-
[...getMergedReasoningStrippedIds(db, sessionId)].sort(),
|
|
2971
|
-
[...getReasoningRemovalState(db, sessionId).messageIds].sort(),
|
|
2972
|
-
protectionInputs
|
|
2973
|
-
]);
|
|
2974
|
-
}
|
|
2975
|
-
function createPendingDropEligibilityCache() {
|
|
2976
|
-
const sessions = new Map;
|
|
2977
|
-
return {
|
|
2978
|
-
read(sessionId, key) {
|
|
2979
|
-
const previous = sessions.get(sessionId);
|
|
2980
|
-
if (key === null || previous?.key !== key) {
|
|
2981
|
-
sessions.delete(sessionId);
|
|
2982
|
-
return;
|
|
2983
|
-
}
|
|
2984
|
-
return previous.eligible;
|
|
2985
|
-
},
|
|
2986
|
-
record(sessionId, key, eligible) {
|
|
2987
|
-
sessions.delete(sessionId);
|
|
2988
|
-
if (key === null)
|
|
2989
|
-
return;
|
|
2990
|
-
const oldest = sessions.keys().next().value;
|
|
2991
|
-
if (sessions.size >= 64 && oldest !== undefined)
|
|
2992
|
-
sessions.delete(oldest);
|
|
2993
|
-
sessions.set(sessionId, { key, eligible: new Set(eligible) });
|
|
2994
|
-
}
|
|
2995
|
-
};
|
|
2996
|
-
}
|
|
2997
|
-
|
|
2998
3285
|
// src/features/magic-context/storage-host-instruction-retention.ts
|
|
2999
|
-
var
|
|
3286
|
+
var NAMESPACE3 = "hostInstructionRetention";
|
|
3000
3287
|
var enabled = true;
|
|
3001
3288
|
function hostInstructionRetentionEnabled() {
|
|
3002
3289
|
return enabled;
|
|
3003
3290
|
}
|
|
3004
3291
|
function isHostInstructionRetentionOn(db, sessionId) {
|
|
3005
|
-
const lane = readReplayEnvelope(db, sessionId)[
|
|
3292
|
+
const lane = readReplayEnvelope(db, sessionId)[NAMESPACE3];
|
|
3006
3293
|
return typeof lane === "object" && lane !== null && lane.on === true;
|
|
3007
3294
|
}
|
|
3008
3295
|
function markHostInstructionRetention(db, sessionId) {
|
|
3009
3296
|
return updateReplayDocument(db, sessionId, (doc) => {
|
|
3010
|
-
const lane = doc[
|
|
3297
|
+
const lane = doc[NAMESPACE3];
|
|
3011
3298
|
if (typeof lane === "object" && lane !== null && lane.on === true)
|
|
3012
3299
|
return false;
|
|
3013
3300
|
doc.version = 2;
|
|
3014
|
-
doc[
|
|
3301
|
+
doc[NAMESPACE3] = { on: true };
|
|
3015
3302
|
return true;
|
|
3016
3303
|
});
|
|
3017
3304
|
}
|
|
@@ -3301,12 +3588,16 @@ function applyPendingOperations(sessionId, db, targets, protectedTagIds, preload
|
|
|
3301
3588
|
}
|
|
3302
3589
|
} else if (target) {
|
|
3303
3590
|
const replacement = buildReplacementContent(pendingOp.tagId);
|
|
3591
|
+
if (target.canSetContent?.(replacement) === false) {
|
|
3592
|
+
reject("content_unchanged");
|
|
3593
|
+
continue;
|
|
3594
|
+
}
|
|
3304
3595
|
persistDrop();
|
|
3305
3596
|
mutations.push(() => {
|
|
3306
3597
|
const priorContent = target.getContent?.();
|
|
3307
3598
|
const changed = target.setContent(replacement);
|
|
3308
|
-
record(changed);
|
|
3309
3599
|
if (changed) {
|
|
3600
|
+
record(true);
|
|
3310
3601
|
const originalCharacters = typeof priorContent === "string" ? priorContent.length : tagById.get(pendingOp.tagId)?.byteSize ?? replacement.length;
|
|
3311
3602
|
onTagReduced?.({
|
|
3312
3603
|
tagNumber: pendingOp.tagId,
|
|
@@ -3877,70 +4168,6 @@ function isVisibleNoteReadPart(part) {
|
|
|
3877
4168
|
return false;
|
|
3878
4169
|
}
|
|
3879
4170
|
|
|
3880
|
-
// src/hooks/magic-context/postprocess-read-cache.ts
|
|
3881
|
-
var connections = new WeakMap;
|
|
3882
|
-
function snapshot(db, sessionId) {
|
|
3883
|
-
const transaction = db;
|
|
3884
|
-
try {
|
|
3885
|
-
if (transaction.inTransaction || transaction.isTransaction) {
|
|
3886
|
-
connections.delete(db);
|
|
3887
|
-
return { version: -1, changes: -1 };
|
|
3888
|
-
}
|
|
3889
|
-
} catch {
|
|
3890
|
-
connections.delete(db);
|
|
3891
|
-
return { version: -1, changes: -1 };
|
|
3892
|
-
}
|
|
3893
|
-
let connection = connections.get(db);
|
|
3894
|
-
if (!connection) {
|
|
3895
|
-
connection = {
|
|
3896
|
-
stamp: db.prepare("SELECT total_changes() AS changes, data_version AS version FROM pragma_data_version"),
|
|
3897
|
-
sessions: new BoundedSessionMap(100)
|
|
3898
|
-
};
|
|
3899
|
-
connections.set(db, connection);
|
|
3900
|
-
}
|
|
3901
|
-
const stamp = connection.stamp.get();
|
|
3902
|
-
const previous = connection.sessions.get(sessionId);
|
|
3903
|
-
if (previous?.version === stamp.version && previous.changes === stamp.changes) {
|
|
3904
|
-
return previous;
|
|
3905
|
-
}
|
|
3906
|
-
const value = { ...stamp };
|
|
3907
|
-
connection.sessions.set(sessionId, value);
|
|
3908
|
-
return value;
|
|
3909
|
-
}
|
|
3910
|
-
function postprocessTailTags(db, sessionId) {
|
|
3911
|
-
const state = snapshot(db, sessionId);
|
|
3912
|
-
return state.tags ??= getTailHygieneTags2(db, sessionId);
|
|
3913
|
-
}
|
|
3914
|
-
function postprocessOldestTags(db, sessionId, protectedNumbers) {
|
|
3915
|
-
const state = snapshot(db, sessionId);
|
|
3916
|
-
const hints = state.hints;
|
|
3917
|
-
if (hints && hints.protectedNumbers.size === protectedNumbers.size && [...protectedNumbers].every((number) => hints.protectedNumbers.has(number))) {
|
|
3918
|
-
return hints.value;
|
|
3919
|
-
}
|
|
3920
|
-
const value = getOldestActiveUnprotectedToolTags2(db, sessionId, protectedNumbers);
|
|
3921
|
-
state.hints = { protectedNumbers: new Set(protectedNumbers), value };
|
|
3922
|
-
return value;
|
|
3923
|
-
}
|
|
3924
|
-
function postprocessReplaySnapshot(db, sessionId) {
|
|
3925
|
-
const state = snapshot(db, sessionId);
|
|
3926
|
-
const replay = state.replay ??= loadPostprocessReplaySnapshot(db, sessionId);
|
|
3927
|
-
return {
|
|
3928
|
-
...replay,
|
|
3929
|
-
staleReduceStrippedIds: new Set(replay.staleReduceStrippedIds),
|
|
3930
|
-
processedImageStrippedIds: new Set(replay.processedImageStrippedIds),
|
|
3931
|
-
processedImageMarkers: new Map(replay.processedImageMarkers),
|
|
3932
|
-
strippedPlaceholderIds: new Set(replay.strippedPlaceholderIds),
|
|
3933
|
-
hiddenSeamPlaceholderIds: new Set(replay.hiddenSeamPlaceholderIds),
|
|
3934
|
-
mergedReasoningStrippedIds: new Set(replay.mergedReasoningStrippedIds),
|
|
3935
|
-
trailingBlankDecisions: new Map(replay.trailingBlankDecisions),
|
|
3936
|
-
noteNudgeAnchors: structuredClone(replay.noteNudgeAnchors),
|
|
3937
|
-
autoSearchHintDecisions: structuredClone(replay.autoSearchHintDecisions),
|
|
3938
|
-
todoSyntheticAnchor: structuredClone(replay.todoSyntheticAnchor),
|
|
3939
|
-
pendingCompactionMarker: structuredClone(replay.pendingCompactionMarker),
|
|
3940
|
-
compactionMarker: structuredClone(replay.compactionMarker)
|
|
3941
|
-
};
|
|
3942
|
-
}
|
|
3943
|
-
|
|
3944
4171
|
// src/hooks/magic-context/strict-thinking-prefix.ts
|
|
3945
4172
|
function servedPrefixMatches(args) {
|
|
3946
4173
|
const heads = args.messages?.slice(0, 2);
|
|
@@ -4731,7 +4958,7 @@ function tagMessages(sessionId, messages, tagger, db, options = {}) {
|
|
|
4731
4958
|
const textPart = part;
|
|
4732
4959
|
const thinkingParts = messageThinkingParts;
|
|
4733
4960
|
const contentId = `${messageId}:p${partIndex}`;
|
|
4734
|
-
const whitespaceOnlyAssistant = message.info.role === "assistant" && stripTagPrefix(textPart.text).trim().length === 0;
|
|
4961
|
+
const whitespaceOnlyAssistant = message.info.role === "assistant" && (stripTagPrefix(textPart.text).trim().length === 0 || textPart.text.includes("§") && stripPersistedAssistantText(textPart.text).length === 0);
|
|
4735
4962
|
let existingTagId;
|
|
4736
4963
|
if (whitespaceOnlyAssistant) {
|
|
4737
4964
|
const persistedWhitespaceTag = getTagNumberByMessageId2(db, sessionId, contentId);
|
|
@@ -4783,7 +5010,7 @@ function tagMessages(sessionId, messages, tagger, db, options = {}) {
|
|
|
4783
5010
|
accAssignTag += performance.now() - _tAssignText;
|
|
4784
5011
|
const persistedSource = sourceContents.get(tagId);
|
|
4785
5012
|
if (persistedSource !== undefined && !options.refreshSourceContents) {
|
|
4786
|
-
textPart.text = options.normalizeRestoredAssistantText && message.info.role === "assistant" ? options.normalizeRestoredAssistantText(persistedSource) : persistedSource;
|
|
5013
|
+
textPart.text = options.normalizeRestoredAssistantText && message.info.role === "assistant" ? options.normalizeRestoredAssistantText(persistedSource, message.info.providerID) : persistedSource;
|
|
4787
5014
|
} else {
|
|
4788
5015
|
const sourceContent = stripTagPrefix(textPart.text);
|
|
4789
5016
|
if (sourceContent.trim().length > 0 || options.refreshSourceContents) {
|
|
@@ -4812,6 +5039,10 @@ function tagMessages(sessionId, messages, tagger, db, options = {}) {
|
|
|
4812
5039
|
dropReasoningParts: thinkingParts,
|
|
4813
5040
|
mutationParts: [{ message, part: textPart }],
|
|
4814
5041
|
textPrefix: skipPrefixInjection ? "" : prependTag(tagId, ""),
|
|
5042
|
+
canSetContent: (content) => {
|
|
5043
|
+
const partialEnd = messageId ? getPartialEnds().get(messageId) : undefined;
|
|
5044
|
+
return textPart.text !== content && (partialEnd === undefined || partIndex <= partialEnd);
|
|
5045
|
+
},
|
|
4815
5046
|
setContent: (content, options) => {
|
|
4816
5047
|
if (textPart.text === content)
|
|
4817
5048
|
return false;
|
|
@@ -5118,6 +5349,25 @@ function proactiveStripStartIndex(args) {
|
|
|
5118
5349
|
return divergence;
|
|
5119
5350
|
return divergence ?? lastServed.messages.length;
|
|
5120
5351
|
}
|
|
5352
|
+
function servesThinkingBlock2(messages, providerID, modelID) {
|
|
5353
|
+
const familyRoute = isAnthropicFamilyRoute(providerID, modelID);
|
|
5354
|
+
for (const message of messages) {
|
|
5355
|
+
if (message.info.role !== "assistant")
|
|
5356
|
+
continue;
|
|
5357
|
+
for (const part of message.parts) {
|
|
5358
|
+
if (!isAnthropicThinkingPart(part, familyRoute) || part.ignored === true)
|
|
5359
|
+
continue;
|
|
5360
|
+
if (part.type === "redacted_thinking")
|
|
5361
|
+
return true;
|
|
5362
|
+
if (typeof part.text === "string" && part.text !== "")
|
|
5363
|
+
return true;
|
|
5364
|
+
const records = isRecord(part.metadata) ? Object.values(part.metadata) : [];
|
|
5365
|
+
if (records.some((record) => isRecord(record) && record.redactedData !== undefined))
|
|
5366
|
+
return true;
|
|
5367
|
+
}
|
|
5368
|
+
}
|
|
5369
|
+
return false;
|
|
5370
|
+
}
|
|
5121
5371
|
function isPartDroppedBeforeWire(part, providerID) {
|
|
5122
5372
|
if (!modelAcceptsEmptyContent(providerID) || !isRecord(part))
|
|
5123
5373
|
return false;
|
|
@@ -5647,6 +5897,9 @@ async function runPostTransformPhase2(args) {
|
|
|
5647
5897
|
}
|
|
5648
5898
|
};
|
|
5649
5899
|
const trailingBlankSourceDecisions = args.trailingBlankSourceDecisions ?? snapshotTrailingBlankSourceDecisions(args.messages);
|
|
5900
|
+
if (!modelAcceptsEmptyContent(args.resolvedProviderID) && !compactionOff)
|
|
5901
|
+
captureInlineThinkingRepairs(args.messages, args.messageTagNumbers, args.sessionMeta?.clearedReasoningThroughTag ?? 0);
|
|
5902
|
+
const servedShapeRepair = prepareServedShapeRepair(args.db, args.sessionId, args.messages, args.readLastServedMessages, compactionOff ? undefined : postprocessReplaySnapshot(args.db, args.sessionId));
|
|
5650
5903
|
let trailingBlankNewestAssistant;
|
|
5651
5904
|
for (let index = args.messages.length - 1;index >= 0; index -= 1) {
|
|
5652
5905
|
const message = args.messages[index];
|
|
@@ -5676,8 +5929,8 @@ async function runPostTransformPhase2(args) {
|
|
|
5676
5929
|
}
|
|
5677
5930
|
const activeCompartmentRun = args.canRunCompartments ? getActiveCompartmentRun(args.sessionId) : undefined;
|
|
5678
5931
|
const compartmentRunning = args.canRunCompartments && !args.awaitedCompartmentRun && activeCompartmentRun !== undefined;
|
|
5679
|
-
let deferredMaterialize = args.canConsumeDeferredLate && deferredMaterializationWasPending;
|
|
5680
|
-
let materializationRequested = isExplicitFlush || deferredMaterialize;
|
|
5932
|
+
let deferredMaterialize = (args.canConsumeDeferredLate || servedShapeRepair.needsRebuild) && deferredMaterializationWasPending;
|
|
5933
|
+
let materializationRequested = isExplicitFlush || deferredMaterialize || servedShapeRepair.needsRebuild;
|
|
5681
5934
|
const m0M1EnabledForFold = args.m0M1 !== undefined && (!!args.m0M1.projectPath || !!args.m0M1.projectDirectory) && (args.fullFeatureMode || compactionOff);
|
|
5682
5935
|
const frozenThinking = new Set(args.activeThinkingTurn || compactionOff ? getMergedReasoningStrippedIds(args.db, args.sessionId) : []);
|
|
5683
5936
|
const compactionOffFrozenThinking = compactionOff ? compactionOffFrozenThinkingIds(frozenThinking) : new Set;
|
|
@@ -5720,6 +5973,8 @@ async function runPostTransformPhase2(args) {
|
|
|
5720
5973
|
if (stripOffWire)
|
|
5721
5974
|
for (const id of stripped.strip?.messageIds ?? [])
|
|
5722
5975
|
compactionOffFrozenThinking.add(id);
|
|
5976
|
+
for (const id of stripped.strip?.messageIds ?? [])
|
|
5977
|
+
bindingThinking.add(id);
|
|
5723
5978
|
retainedThinking.clear();
|
|
5724
5979
|
protectedThinkingMessages.clear();
|
|
5725
5980
|
activeThinkingTurn = false;
|
|
@@ -5729,9 +5984,15 @@ async function runPostTransformPhase2(args) {
|
|
|
5729
5984
|
rewritingSignedPrefix = true;
|
|
5730
5985
|
thinkingReleasedForFit ||= forFit;
|
|
5731
5986
|
};
|
|
5987
|
+
if (servedShapeRepair.needsRebuild && activeThinkingTurn)
|
|
5988
|
+
releaseThinkingForRewrite(false, true);
|
|
5732
5989
|
if (args.forceSignedRebuildForFit && (activeThinkingPrefixHold || activeThinkingTurn && args.thinkingBindingRecoveryEnabledForModel === true)) {
|
|
5733
5990
|
releaseThinkingForRewrite(true);
|
|
5734
5991
|
}
|
|
5992
|
+
if (args.compactionModeTransition === true && args.thinkingBindingRecoveryEnabledForModel === true) {
|
|
5993
|
+
sessionLog2(args.sessionId, "compaction mode switch: stripping signed thinking");
|
|
5994
|
+
releaseThinkingForRewrite(false, true);
|
|
5995
|
+
}
|
|
5735
5996
|
const foldDueDecision = m0M1EnabledForFold && args.m0M1 && !freezeM0M1 ? mustMaterialize({
|
|
5736
5997
|
db: args.db,
|
|
5737
5998
|
sessionId: args.sessionId,
|
|
@@ -5756,7 +6017,7 @@ async function runPostTransformPhase2(args) {
|
|
|
5756
6017
|
let foldBustsServedPrefixThisPass = false;
|
|
5757
6018
|
let publishedM1RefreshedThisPass = false;
|
|
5758
6019
|
let prefixPreflightFailed = false;
|
|
5759
|
-
const softRefreshOpportunity = !freezeM0M1 && (args.schedulerDecision === "execute" || deferredMaterialize);
|
|
6020
|
+
const softRefreshOpportunity = !freezeM0M1 && (args.schedulerDecision === "execute" || deferredMaterialize || servedShapeRepair.needsRebuild);
|
|
5760
6021
|
let m0RematerializedThisPass = false;
|
|
5761
6022
|
const m0CoverageBeforeFold = args.sessionMeta.cachedM0Bytes === null ? -1 : args.sessionMeta.cachedM0MaxCompartmentSeq;
|
|
5762
6023
|
let m0MaterializeReason = null;
|
|
@@ -5771,6 +6032,7 @@ async function runPostTransformPhase2(args) {
|
|
|
5771
6032
|
};
|
|
5772
6033
|
if ((foldDueDecision.value || softRefreshOpportunity || firstRenderBust && activeThinkingPrefixHold) && m0M1EnabledForFold && args.m0M1) {
|
|
5773
6034
|
let committedFoldBustsServedPrefix;
|
|
6035
|
+
let committedFoldChangesHead;
|
|
5774
6036
|
try {
|
|
5775
6037
|
const previousM1 = args.sessionMeta.cachedM1Bytes?.toString("utf8");
|
|
5776
6038
|
const foldResult = injectM0M1({
|
|
@@ -5800,6 +6062,12 @@ async function runPostTransformPhase2(args) {
|
|
|
5800
6062
|
m1Text: rendered.m1Bytes.toString(),
|
|
5801
6063
|
muralDataUrl: rendered.muralDataUrl
|
|
5802
6064
|
}) : foldBustsServedPrefix(foldDueDecision.reason, servedPrefixBeforeFold, rendered);
|
|
6065
|
+
committedFoldChangesHead = firstRenderBust ? !servedPrefixMatches({
|
|
6066
|
+
messages: servedBeforeFirstRender,
|
|
6067
|
+
m0Text: rendered.m0Bytes.toString(),
|
|
6068
|
+
m1Text: rendered.m1Bytes.toString(),
|
|
6069
|
+
muralDataUrl: rendered.muralDataUrl
|
|
6070
|
+
}) : foldChangesServedPrefix(servedPrefixBeforeFold, rendered);
|
|
5803
6071
|
if (bustsPrefix) {
|
|
5804
6072
|
if (!conversions.isCurrent(db)) {
|
|
5805
6073
|
throw new MaterializeContentionError({
|
|
@@ -5818,6 +6086,9 @@ async function runPostTransformPhase2(args) {
|
|
|
5818
6086
|
preparedPrefix = foldResult;
|
|
5819
6087
|
if (activeThinkingPrefixHold && firstRenderBust && committedFoldBustsServedPrefix) {
|
|
5820
6088
|
releaseThinkingForRewrite(false, true);
|
|
6089
|
+
} else if (compactionOff && !activeThinkingPrefixHold && args.thinkingBindingRecoveryEnabledForModel === true && committedFoldChangesHead) {
|
|
6090
|
+
sessionLog2(args.sessionId, "compaction-off fold changed the head: stripping signed thinking");
|
|
6091
|
+
releaseThinkingForRewrite(false, true);
|
|
5821
6092
|
}
|
|
5822
6093
|
prefixPreflightFailed = foldResult.materializationContentionRetryExhausted === true;
|
|
5823
6094
|
foldExecutedThisPass = foldExecutesThisPass(foldDueDecision.value || softRefreshOpportunity, foldResult.m0RematerializedThisPass);
|
|
@@ -5875,21 +6146,43 @@ async function runPostTransformPhase2(args) {
|
|
|
5875
6146
|
const heldIdleExpiryRebuild = activeThinkingPrefixHold && args.m0M1?.hardSignals?.cacheExpired === true;
|
|
5876
6147
|
const idleExpiryRebuild = (!freezeM0M1 || activeThinkingPrefixHold) && args.m0M1?.hardSignals?.cacheExpired === true;
|
|
5877
6148
|
const rideSignals = {
|
|
6149
|
+
servedShapeRepair: servedShapeRepair.needsRebuild,
|
|
6150
|
+
executeReclaim: false,
|
|
5878
6151
|
subagentExecute: !args.fullFeatureMode && args.schedulerDecision === "execute",
|
|
5879
6152
|
hardFold: rewritingSignedPrefix || foldBustsServedPrefixThisPass || firstRenderBust || idleExpiryRebuild,
|
|
5880
6153
|
force: emergencyDropEligible && (args.contextUsage.percentage >= 95 || args.contextUsageFromEstimate !== true && getEmergencyInputSample(args.db, args.sessionId) === 0),
|
|
5881
6154
|
explicitFlush: isExplicitFlush && hasPendingMaterializationOrigin(args.pendingMaterializationSessions, args.sessionId, "user_flush"),
|
|
5882
6155
|
publishedHistory: !prefixPreflightFailed && (publishedM1RefreshedThisPass || !m0M1EnabledForFold && (args.pendingCompartmentInjection?.compartmentCount ?? 0) > 0 && legacyPublishedHeadChanged(args))
|
|
5883
6156
|
};
|
|
5884
|
-
const
|
|
6157
|
+
const protectedToolTags = protectedToolTagNumbers(args.tags, args.protectedTools);
|
|
6158
|
+
rideSignals.executeReclaim = !compactionOff && originateExecuteReclaim({
|
|
6159
|
+
db: args.db,
|
|
6160
|
+
sessionId: args.sessionId,
|
|
6161
|
+
primaryExecute: args.fullFeatureMode && args.schedulerDecision === "execute" && args.contextUsage.percentage < args.forceMaterializationPercentage,
|
|
6162
|
+
alreadyBusting: Object.values(rideSignals).some(Boolean) || args.historyRebuiltThisPass,
|
|
6163
|
+
summaryCanCome: compartmentRunning || args.sessionMeta.compartmentInProgress || (prefixPreflightFailed || freezeM0M1 || activeThinkingPrefixHold) && (args.deferredHistoryRefreshSessions.has(args.sessionId) || args.deferredMaterializationSessions.has(args.sessionId) || args.historyRefreshSessions?.has(args.sessionId) === true) || readExecuteReclaimState(args.db, args.sessionId).floorOrdinal !== null,
|
|
6164
|
+
reclaimableTokens: estimateExecuteReclaimTokens({
|
|
6165
|
+
db: args.db,
|
|
6166
|
+
sessionId: args.sessionId,
|
|
6167
|
+
pendingOps,
|
|
6168
|
+
tags: args.tags,
|
|
6169
|
+
targets: newTargets,
|
|
6170
|
+
protectedTagIds: new Set([...args.protectedTagIds, ...protectedToolTags])
|
|
6171
|
+
}),
|
|
6172
|
+
usableWindow: args.usableWindow
|
|
6173
|
+
});
|
|
6174
|
+
const publishedWorkDrainAllowed = (!compactionOff || servedShapeRepair.needsRebuild) && reclaimRidePermitted(rideSignals, {
|
|
5885
6175
|
signedThinkingHold: activeThinkingPrefixHold,
|
|
5886
6176
|
firstRender: firstRenderBust,
|
|
5887
6177
|
idleExpiry: idleExpiryRebuild,
|
|
5888
6178
|
emergency: emergencyDropEligible
|
|
5889
6179
|
});
|
|
5890
|
-
const shouldApplyPendingOps = publishedWorkDrainAllowed;
|
|
5891
|
-
const shouldRunHeuristics = publishedWorkDrainAllowed && (rideSignals.publishedHistory || materializationRequested || forceMaterialization || foldBustsServedPrefixThisPass || firstRenderBust || heldIdleExpiryRebuild || emergencyDropEligible || args.schedulerDecision === "execute" && (!alreadyRanThisTurn || !args.fullFeatureMode));
|
|
6180
|
+
const shouldApplyPendingOps = !compactionOff && publishedWorkDrainAllowed;
|
|
6181
|
+
const shouldRunHeuristics = !compactionOff && publishedWorkDrainAllowed && (rideSignals.publishedHistory || rideSignals.executeReclaim || rideSignals.servedShapeRepair || materializationRequested || forceMaterialization || foldBustsServedPrefixThisPass || firstRenderBust || heldIdleExpiryRebuild || emergencyDropEligible || args.schedulerDecision === "execute" && (!alreadyRanThisTurn || !args.fullFeatureMode));
|
|
5892
6182
|
const isCacheBustingPass = publishedWorkDrainAllowed;
|
|
6183
|
+
if (servedShapeRepair.needsRebuild && !isCacheBustingPass)
|
|
6184
|
+
throw new Error("Served-shape repair requires a rebuilding pass");
|
|
6185
|
+
servedShapeRepair.apply(isCacheBustingPass);
|
|
5893
6186
|
let unheldSignedTurnBust = false;
|
|
5894
6187
|
if (isCacheBustingPass && !activeThinkingPrefixHold && activeThinkingTurn && args.thinkingBindingRecoveryEnabledForModel === true) {
|
|
5895
6188
|
if (foldBustsServedPrefixThisPass || firstRenderBust || publishedM1RefreshedThisPass)
|
|
@@ -5980,17 +6273,28 @@ async function runPostTransformPhase2(args) {
|
|
|
5980
6273
|
throw new EmergencyFailClosedError("Magic Context could not read its saved reasoning-removal state for this session", { cause: error });
|
|
5981
6274
|
}
|
|
5982
6275
|
}
|
|
6276
|
+
const heuristicsLogChanged = diagnosticStateChanged(args.sessionId, "heuristics", JSON.stringify([
|
|
6277
|
+
args.currentTurnId,
|
|
6278
|
+
shouldRunHeuristics,
|
|
6279
|
+
shouldRunHeuristics ? null : args.schedulerDeferReason
|
|
6280
|
+
]));
|
|
6281
|
+
const pendingLogChanged = diagnosticStateChanged(args.sessionId, "pending-ops", JSON.stringify([
|
|
6282
|
+
args.currentTurnId,
|
|
6283
|
+
shouldApplyPendingOps,
|
|
6284
|
+
shouldApplyPendingOps ? null : args.schedulerDeferReason,
|
|
6285
|
+
shouldApplyPendingOps ? null : (getPendingOpsCount(args.db, args.sessionId) ?? 0) > 0
|
|
6286
|
+
]));
|
|
5983
6287
|
if (shouldRunHeuristics) {
|
|
5984
6288
|
const subagentRerun = !args.fullFeatureMode && alreadyRanThisTurn && args.schedulerDecision === "execute" && !isExplicitFlush && !forceMaterialization;
|
|
5985
6289
|
const reason = isExplicitFlush ? `pending_materialization origin=${pendingOrigin}` : deferredMaterialize ? "deferred_materialization" : forceMaterialization ? `force_materialization (${args.contextUsage.percentage.toFixed(1)}% >= ${args.forceMaterializationPercentage}%)` : foldBustsServedPrefixThisPass && args.schedulerDecision !== "execute" ? `m0_hard_fold (drain folded into executed m[0] bust, scheduler=${args.schedulerDecision})` : subagentRerun ? `${reclaimRideLabel(rideSignals)} subagent_rerun (pendingOps=${pendingOps.length}, scheduler=${args.schedulerDecision})` : `${reclaimRideLabel(rideSignals)} (pendingOps=${pendingOps.length}, scheduler=${args.schedulerDecision})`;
|
|
5986
6290
|
sessionLog2(args.sessionId, `heuristics WILL RUN — reason=${reason}, context=${args.contextUsage.percentage.toFixed(1)}%, turn=${args.currentTurnId}`);
|
|
5987
|
-
} else if (args.schedulerDeferReason !== undefined && args.schedulerDeferReason !== null) {
|
|
6291
|
+
} else if (heuristicsLogChanged && args.schedulerDeferReason !== undefined && args.schedulerDeferReason !== null) {
|
|
5988
6292
|
sessionLog2(args.sessionId, `heuristics WILL NOT RUN — reason=${args.schedulerDeferReason}`);
|
|
5989
6293
|
}
|
|
5990
6294
|
if (alreadyRanThisTurn && args.schedulerDecision === "execute" && !materializationRequested && args.fullFeatureMode) {
|
|
5991
6295
|
sessionLog2(args.sessionId, `transform: skipping heuristics (already ran for turn ${args.currentTurnId})`);
|
|
5992
6296
|
}
|
|
5993
|
-
if (!shouldApplyPendingOps && args.schedulerDeferReason !== undefined && args.schedulerDeferReason !== null) {
|
|
6297
|
+
if (!shouldApplyPendingOps && pendingLogChanged && args.schedulerDeferReason !== undefined && args.schedulerDeferReason !== null) {
|
|
5994
6298
|
sessionLog2(args.sessionId, `pending ops WILL NOT APPLY — reason=${args.schedulerDeferReason} pendingOps=${formatPendingOpsDepth()} context=${args.contextUsage.percentage.toFixed(1)}%`);
|
|
5995
6299
|
}
|
|
5996
6300
|
if (hasPendingUserOps && !shouldApplyPendingOps) {
|
|
@@ -5999,7 +6303,6 @@ async function runPostTransformPhase2(args) {
|
|
|
5999
6303
|
let explicitMaterializedSuccessfully = false;
|
|
6000
6304
|
let deferredMaterializedSuccessfully = false;
|
|
6001
6305
|
let pendingOpsDidMutate = false;
|
|
6002
|
-
const protectedToolTags = protectedToolTagNumbers(args.tags, args.protectedTools);
|
|
6003
6306
|
const firstApplicationEdits = { any: false, beforeNewerThinking: false };
|
|
6004
6307
|
const recordFirstApplicationWireEdit = (beforeNewerThinking) => {
|
|
6005
6308
|
firstApplicationEdits.any = true;
|
|
@@ -6007,6 +6310,8 @@ async function runPostTransformPhase2(args) {
|
|
|
6007
6310
|
};
|
|
6008
6311
|
if (temporalFirstApplication)
|
|
6009
6312
|
recordFirstApplicationWireEdit(true);
|
|
6313
|
+
if (servedShapeRepair.needsRebuild)
|
|
6314
|
+
recordFirstApplicationWireEdit(true);
|
|
6010
6315
|
const firstApplicationLocations = new Map;
|
|
6011
6316
|
const recordFirstApplicationAt = (message, partIndex) => {
|
|
6012
6317
|
recordFirstApplicationWireEdit(false);
|
|
@@ -6149,11 +6454,12 @@ async function runPostTransformPhase2(args) {
|
|
|
6149
6454
|
if (routineCleanupApplied && canUseEmptySentinels) {
|
|
6150
6455
|
stripClearedReasoning(args.messages);
|
|
6151
6456
|
}
|
|
6152
|
-
const strippedInline = routineCleanupApplied && ageLaneAllowed ? stripInlineThinking(args.messages, args.messageTagNumbers, budgetCutoff) : 0;
|
|
6457
|
+
const strippedInline = routineCleanupApplied && ageLaneAllowed ? stripInlineThinking(args.messages, args.messageTagNumbers, budgetCutoff, !canUseEmptySentinels) : 0;
|
|
6153
6458
|
const persistedInlineWatermark = args.sessionMeta?.clearedReasoningThroughTag ?? 0;
|
|
6154
6459
|
if (routineCleanupApplied && persistedInlineWatermark > 0 && !compactionOff) {
|
|
6155
|
-
replayStrippedInlineThinking(args.messages, args.messageTagNumbers, persistedInlineWatermark);
|
|
6460
|
+
replayStrippedInlineThinking(args.messages, args.messageTagNumbers, persistedInlineWatermark, !canUseEmptySentinels);
|
|
6156
6461
|
}
|
|
6462
|
+
servedShapeRepair.apply(isCacheBustingPass);
|
|
6157
6463
|
let removedReasoningMessages = 0;
|
|
6158
6464
|
if (routineCleanupApplied && !prefixBoundModel && reasoningRemovalSelectable && reasoningRemovalReadable) {
|
|
6159
6465
|
const newIds = selectReasoningRemovals({
|
|
@@ -6480,7 +6786,7 @@ async function runPostTransformPhase2(args) {
|
|
|
6480
6786
|
}
|
|
6481
6787
|
}
|
|
6482
6788
|
if (isCacheBustingPass) {
|
|
6483
|
-
const droppedResult = stripDroppedPlaceholderMessages(args.messages, args.resolvedProviderID, recordFirstApplicationAt);
|
|
6789
|
+
const droppedResult = stripDroppedPlaceholderMessages(args.messages.filter((message) => !servedShapeRepair.messageIDs.has(message.info.id ?? "")), args.resolvedProviderID, recordFirstApplicationAt);
|
|
6484
6790
|
const protectedTailStart = Math.max(0, args.messages.length - SYSTEM_INJECTION_ACTIONABLE_TAIL_MESSAGES);
|
|
6485
6791
|
const systemInjectedResult = stripSystemInjectedMessages(args.messages, protectedTailStart, args.resolvedProviderID, recordFirstApplicationAt);
|
|
6486
6792
|
const hiddenMessages = args.hiddenMessagesAtCompactionSeam ?? [];
|
|
@@ -7080,6 +7386,8 @@ async function runPostTransformPhase2(args) {
|
|
|
7080
7386
|
});
|
|
7081
7387
|
}
|
|
7082
7388
|
logTransformTiming(args.sessionId, "pp.tailGuard", tTailGuard);
|
|
7389
|
+
if (bustedThisPass)
|
|
7390
|
+
clearExecuteReclaimState(args.db, args.sessionId);
|
|
7083
7391
|
return {
|
|
7084
7392
|
explicitMaterializedSuccessfully,
|
|
7085
7393
|
deferredMaterializedSuccessfully,
|
|
@@ -7100,8 +7408,7 @@ async function runPostTransformPhase2(args) {
|
|
|
7100
7408
|
prefixTrimStatus: deliveredPrefix?.prefixTrimStatus ?? null,
|
|
7101
7409
|
thinkingBindingRecovery,
|
|
7102
7410
|
proactiveThinkingStrip,
|
|
7103
|
-
thinkingReleasedForFit
|
|
7104
|
-
openTurnSignedThinkingKept: args.thinkingBindingRecoveryEnabledForModel === true && activeThinkingTurn && !rewritingSignedPrefix
|
|
7411
|
+
thinkingReleasedForFit
|
|
7105
7412
|
};
|
|
7106
7413
|
}
|
|
7107
7414
|
function checkM0MutationDriftAndSignal2(args) {
|
|
@@ -7116,4 +7423,4 @@ function checkM0MutationDriftAndSignal2(args) {
|
|
|
7116
7423
|
return false;
|
|
7117
7424
|
}
|
|
7118
7425
|
|
|
7119
|
-
export { makeToolCompositeKey, createTagger, cavemanWordRulesForLanguage, searchMessageHistoryOffThread, findSessionId, findLastUserMessageId, clearAutoSearchForSession, setCtxReduceRegisteredGlobally, resolveCtxReduceAvailabilityFromMessages, resolveCtxReduceAvailability, primeCtxReduceSpawnPermission, ctxReduceSpawnPermissionReadNeeded, spawnAgentFromMessages, spawnAgentFromOpenCodeDb, todowritePermissionDenied, cachedToolPermissionDenied, clearToolPermissionDenied, resolveTodowriteAvailabilityFromMessages, resolveTodowriteAvailability, canConsumeDeferredOnThisPass, hasReclaimRide, reclaimRidePermitted, reclaimRideLabel, captureOpencodeReasoningBudgetStatus, reasoningBudgetStatusLine, ENGINE_RECONNECTING_USER_MESSAGE, ENGINE_BUSY_USER_MESSAGE, SIGNED_THINKING_RESET_FENCE_FAILED, contextRefusalError, protectedToolRefusal, outgoingContextRefusal, signedTurnContextRefusal, EmergencyFailClosedError, latestAssistantTurnStart, latestAssistantTurnMessages, hasActiveAnthropicThinkingTurn, replayCavemanCompression, DegradedPassRefusalError, degradedPassError,
|
|
7426
|
+
export { makeToolCompositeKey, createTagger, cavemanWordRulesForLanguage, searchMessageHistoryOffThread, findSessionId, findLastUserMessageId, clearAutoSearchForSession, setCtxReduceRegisteredGlobally, resolveCtxReduceAvailabilityFromMessages, resolveCtxReduceAvailability, primeCtxReduceSpawnPermission, ctxReduceSpawnPermissionReadNeeded, spawnAgentFromMessages, spawnAgentFromOpenCodeDb, todowritePermissionDenied, cachedToolPermissionDenied, clearToolPermissionDenied, resolveTodowriteAvailabilityFromMessages, resolveTodowriteAvailability, diagnosticStateChanged, clearDiagnosticLogState, canConsumeDeferredOnThisPass, hasReclaimRide, reclaimRidePermitted, reclaimRideLabel, pendingDropEligibilityKey, createPendingDropEligibilityCache, readExecuteReclaimState, writeExecuteReclaimState, maintainExecuteFloorMark, captureOpencodeReasoningBudgetStatus, reasoningBudgetStatusLine, ENGINE_RECONNECTING_USER_MESSAGE, ENGINE_BUSY_USER_MESSAGE, SIGNED_THINKING_RESET_FENCE_FAILED, contextRefusalError, protectedToolRefusal, outgoingContextRefusal, signedTurnContextRefusal, EmergencyFailClosedError, latestAssistantTurnStart, latestAssistantTurnMessages, hasActiveAnthropicThinkingTurn, replayCavemanCompression, DegradedPassRefusalError, degradedPassError, applyFlushedStatuses, prewarmTagOwners, waitForTagOwners, stripStructuralNoise, withTransformTimingSummary, logTransformTiming, hasRecentAssistantCommit, tagMessages, resetDegradedCacheCount2, isSyntheticHeadMessage2, applyTodoSynthesis2, freezeReasoningOnBustingPass2, servesThinkingBlock2, firstServedDivergenceIndex2, rustModeServedKeyAfterPersistedStrips2, replayRustModeBindingMismatchStrips2, RUST_MARKER_LOCK_SKIP_LOG2, applyRustModeDeferredCompactionMarker2, clearRustModeBoundaryRecord2, runRustModePostprocess2, reconcileMarkerRepresentation2, clearPendingCompactionMarkerAfterSuccessfulDrain2, defaultCompactionMarkerStrategy2, abortSessionFailClosed2, evaluateEmergencyFailClosed2, finalizeMessageRepresentation2, runPostTransformPhase2, checkM0MutationDriftAndSignal2 };
|