@cortexkit/opencode-magic-context 0.49.19 → 0.49.20
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-b2q30cft.js} +3 -3
- package/dist/compaction-marker-candidates-worker.js +2 -2
- package/dist/compartment-chunk-embedding-va090as0.js +65 -0
- package/dist/config/schema/magic-context.d.ts +6 -6
- package/dist/{conflict-warning-hook-4pmz879v.js → conflict-warning-hook-frp3z2wk.js} +9 -8
- package/dist/{context-j31m2dv7.js → context-mkece1db.js} +455 -134
- package/dist/{derive-budgets-zn7yzd2d.js → derive-budgets-pqybnx09.js} +2 -2
- package/dist/embedding-backfill-gy3p78py.js +25 -0
- package/dist/embedding-worker-process.js +2 -2
- package/dist/embedding-worker.js +5 -5
- 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/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-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/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.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.map +1 -1
- package/dist/features/magic-context/search.d.ts +27 -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-meta-persisted.d.ts +1 -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 +5 -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/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-messages.d.ts +2 -0
- package/dist/hooks/magic-context/tag-messages.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.map +1 -1
- package/dist/{index-bjcnntmz.js → index-0wthn7fp.js} +468 -18
- package/dist/{index-kq82mtg0.js → index-11zf2wwc.js} +3 -3
- package/dist/{index-b5vqckbw.js → index-153r2q6z.js} +314 -127
- package/dist/{index-3h4dp9wb.js → index-1pefp8ar.js} +5 -5
- package/dist/{index-beht37jy.js → index-1zx2pa5d.js} +1 -1
- package/dist/{index-ze7mvk54.js → index-2yhtnfcf.js} +75 -57
- package/dist/{index-cf74k5ak.js → index-305y133n.js} +4 -4
- package/dist/{index-s734jcsr.js → index-35qc6606.js} +9 -3
- package/dist/{index-se4m2g6w.js → index-48stjd56.js} +105 -19
- package/dist/{index-4911rn0b.js → index-4n7w9rad.js} +6 -6
- package/dist/{index-kee4kn5j.js → index-4pnsgvfk.js} +1 -1
- package/dist/{v2/server-8cd2j99z.js → index-5kym00ag.js} +32 -13
- package/dist/{index-4s3t0nd0.js → index-616rsjrv.js} +2 -2
- package/dist/{index-jhghdnsm.js → index-67nyj0gy.js} +485 -202
- package/dist/{index-6x57ar45.js → index-adk2z5d8.js} +3 -3
- package/dist/{index-c5pytzne.js → index-b88dwwrh.js} +1 -1
- package/dist/{index-rr2bb45z.js → index-c4b76d4t.js} +2 -2
- package/dist/{index-nj7yykkx.js → index-c7phnbvk.js} +1 -1
- package/dist/index-cpjk5jd2.js +82 -0
- package/dist/{index-edmpdxcw.js → index-d6rp4dxh.js} +5 -5
- package/dist/{index-dxmq29t1.js → index-dc8hy95c.js} +69 -17
- package/dist/{index-j75v2476.js → index-h7tgn49j.js} +12 -15
- package/dist/{index-ke416mdc.js → index-j76ah6d7.js} +2 -2
- package/dist/{index-c1p88z1y.js → index-jfh3cktr.js} +4 -4
- package/dist/{index-a6mc0v4d.js → index-jmycsey7.js} +3 -3
- package/dist/{index-24fezq97.js → index-jr5na10t.js} +4 -4
- package/dist/{index-s74zqahq.js → index-kc9pn495.js} +4 -4
- package/dist/{index-p5y3k4g7.js → index-nda0zgna.js} +2 -1
- package/dist/{index-jn12fvvh.js → index-neb2jaed.js} +3 -3
- package/dist/{index-63k48rv9.js → index-pnjwa6qa.js} +5 -5
- package/dist/{index-jrr131e0.js → index-rmd0069m.js} +11 -11
- package/dist/{index-y9f76s3f.js → index-rrv26qjz.js} +1 -1
- package/dist/{index-v10f1rjv.js → index-spwjbkc7.js} +1 -1
- package/dist/{index-k29z4aqh.js → index-t5pck3ss.js} +1 -1
- package/dist/{index-3esx8tkf.js → index-t7hx3qcb.js} +318 -104
- package/dist/{index-rpxdjkm0.js → index-v7r4td4c.js} +306 -59
- package/dist/{index-2vxtcb95.js → index-vkc1ca9p.js} +2 -2
- package/dist/{index-9zcsy3hh.js → index-x4k3f4mf.js} +17 -9
- package/dist/{index-bp5083x2.js → index-x9k3mqrf.js} +1 -1
- package/dist/{index-n37sebck.js → index-y4a3nhtk.js} +1 -1
- package/dist/index.js +52 -49
- package/dist/{logger-jm3sqqzr.js → logger-94kew5wm.js} +1 -1
- package/dist/{message-fts-rowid-map-17s0dfn4.js → message-fts-rowid-map-22tevnnj.js} +6 -5
- package/dist/{message-index-gtpqnj8w.js → message-index-5qxcz6h7.js} +16 -15
- package/dist/{message-index-bounded-zyc8h32y.js → message-index-bounded-n0m0t7tv.js} +16 -15
- package/dist/{message-time-backfill-73mmm76q.js → message-time-backfill-0myx7fz3.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 +3 -1
- package/dist/plugin/embedding-bootstrap.d.ts.map +1 -1
- 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/{project-embedding-registry-z74mhqkf.js → project-embedding-registry-s2pqgec9.js} +13 -12
- package/dist/raw-ordinal-warmup-worker.js +136 -101
- package/dist/{read-session-chunk-jjb48bt9.js → read-session-chunk-0a8vdyqp.js} +11 -10
- package/dist/{read-session-raw-rsc8c7qy.js → read-session-raw-y5cszf0b.js} +4 -3
- package/dist/recomp-orchestrator-61vyha9j.js +62 -0
- package/dist/{safe-notification-target-1szv1k5k.js → safe-notification-target-mkr9yzvr.js} +2 -2
- package/dist/{search-archive-6vm0e2f5.js → search-archive-8q9s49p5.js} +12 -11
- package/dist/{search-xsqk1bj4.js → search-v1y9ejws.js} +25 -24
- package/dist/{send-session-notification-6ve0e8p4.js → send-session-notification-0k6qzydk.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 +1 -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/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-1rpvw2rj.js} +1 -1
- package/dist/{storage-memory-y3qmy00r.js → storage-memory-nm7v82mj.js} +2 -2
- package/dist/{storage-tags-r7k9tjcv.js → storage-tags-r6nk29n4.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/{transform-postprocess-phase-jj99r7z2.js → transform-postprocess-phase-vtrgb7m6.js} +34 -31
- 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-cfab70cs.js} +3 -3
- package/dist/v2/compaction-marker-candidates-worker.js +2 -2
- package/dist/v2/compartment-chunk-embedding-nbdqx1td.js +64 -0
- package/dist/v2/{context-y5yamxak.js → context-cc33tv2z.js} +1189 -386
- package/dist/v2/{derive-budgets-2zh4gm2c.js → derive-budgets-knf763tt.js} +3 -3
- package/dist/v2/embedding-backfill-yxv2h5mc.js +24 -0
- package/dist/v2/embedding-worker-process.js +2 -2
- package/dist/v2/embedding-worker.js +5 -5
- 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/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/{logger-7qt02bnb.js → logger-p34mjtja.js} +1 -1
- package/dist/v2/{message-fts-rowid-map-wfx67gfd.js → message-fts-rowid-map-dg12wymk.js} +6 -5
- package/dist/v2/{message-index-bounded-spd8r7pj.js → message-index-bounded-f4e01xk0.js} +16 -15
- package/dist/v2/{message-index-8vz2pq76.js → message-index-ydzrp6y6.js} +16 -15
- package/dist/v2/{message-time-backfill-04t0km1z.js → message-time-backfill-ddh8n9gy.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-deza9ksw.js} +13 -12
- package/dist/v2/raw-ordinal-warmup-worker.js +136 -101
- package/dist/v2/{read-session-chunk-cwkxrmns.js → read-session-chunk-8cxfagky.js} +11 -10
- package/dist/v2/{read-session-raw-yaegtjzh.js → read-session-raw-1nrrecvx.js} +4 -3
- package/dist/v2/recomp-orchestrator-47m4hv5g.js +61 -0
- package/dist/v2/{safe-notification-target-qg7n2s77.js → safe-notification-target-khnzg57c.js} +2 -2
- package/dist/v2/{search-archive-wve3tq1k.js → search-archive-e80cvc09.js} +12 -11
- package/dist/v2/{search-hwg7jfbj.js → search-fjz746zr.js} +25 -24
- package/dist/v2/{send-session-notification-3pxn658x.js → send-session-notification-nwvrv34d.js} +7 -6
- package/dist/v2/{server-8by8qfec.js → server-0epqaxhd.js} +75 -57
- package/dist/v2/{server-pwv4ezb0.js → server-168pb207.js} +1 -1
- package/dist/v2/{server-h0410h0v.js → server-1bw1wcbp.js} +1 -1
- package/dist/v2/{server-beht37jy.js → server-1zx2pa5d.js} +1 -1
- package/dist/v2/{server-a9xqj88f.js → server-230fnbws.js} +4 -4
- package/dist/v2/{server-tbe1femw.js → server-29qp8nz4.js} +1 -1
- package/dist/v2/{server-tgnbmwah.js → server-3mz2qh5a.js} +1 -1
- package/dist/v2/{server-hy3d3vsx.js → server-4nw4fqhr.js} +2 -2
- package/dist/v2/{server-45q69hkq.js → server-4sxjs6hn.js} +5 -5
- package/dist/v2/{server-34kwfsr4.js → server-53eh1r8r.js} +2 -2
- package/dist/v2/{server-xj136kt8.js → server-55rgxfrw.js} +9 -3
- package/dist/v2/{server-nj659894.js → server-5arr9ecn.js} +2 -2
- package/dist/{index-8cd2j99z.js → v2/server-5kym00ag.js} +32 -13
- package/dist/v2/{server-2ar62dyx.js → server-63fqdghs.js} +106 -20
- package/dist/v2/{server-f2xf5gcb.js → server-6495nmn9.js} +12 -15
- package/dist/v2/{server-qd11g795.js → server-92g7d776.js} +2 -1
- package/dist/v2/{server-xq7dfjke.js → server-9x0kmta4.js} +5 -5
- package/dist/v2/{server-27gq4mfz.js → server-a3dwxfgd.js} +4 -4
- package/dist/v2/{server-6tmj0s7j.js → server-af2pght7.js} +3 -3
- package/dist/v2/{server-1wy7b9de.js → server-br1x0tev.js} +3 -3
- package/dist/v2/{server-n1prf1g6.js → server-brj8j2gk.js} +2 -2
- package/dist/v2/{server-6vdzn1td.js → server-c7dxxsj7.js} +308 -61
- package/dist/v2/server-cpjk5jd2.js +82 -0
- package/dist/v2/{server-g3qma5c0.js → server-dj7tz4ph.js} +2 -2
- package/dist/v2/{server-9hx7g5jp.js → server-ej96a39v.js} +17 -9
- package/dist/v2/{server-6pmqg9m4.js → server-gyy4k6mf.js} +1 -1
- package/dist/v2/{server-bmymkx73.js → server-hqzyq8n4.js} +11 -11
- package/dist/v2/{server-h1v0pyxb.js → server-j4jnp9b5.js} +468 -18
- package/dist/v2/{server-da07v4xp.js → server-k3t06fxr.js} +1 -1
- package/dist/v2/{server-gsxjv2q2.js → server-m91f9m5s.js} +69 -17
- package/dist/v2/{server-rmygf5pn.js → server-ne8arh8t.js} +2 -2
- package/dist/v2/{server-hm38q7r0.js → server-vn2nwcv6.js} +5 -5
- package/dist/v2/{server-46neh5fa.js → server-wyawsa88.js} +314 -127
- package/dist/v2/{server-zzkj2fch.js → server-xsryvyf6.js} +4 -4
- package/dist/v2/{server-n37sebck.js → server-y4a3nhtk.js} +1 -1
- package/dist/v2/{server-d04vrx0j.js → server-ygtykank.js} +2 -2
- package/dist/v2/server.js +6 -6
- package/dist/v2/{sqlite-zf72c52d.js → sqlite-1rpvw2rj.js} +1 -1
- package/dist/v2/{storage-memory-y3qmy00r.js → storage-memory-nm7v82mj.js} +2 -2
- package/dist/v2/{storage-tags-3wdb8zph.js → storage-tags-ss08kj5r.js} +5 -5
- package/dist/v2/store-reader.d.ts +8 -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-639whfhq.js} +32 -31
- package/dist/wrapup-orchestrator-mnvt2g8m.js +49 -0
- package/package.json +1 -1
- package/src/config/index.test.ts +28 -6
- 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 +1 -1
- 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.ts +4 -2
- package/src/shared/subagent-runner.ts +2 -0
- 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/v2/embedding-backfill-7c7yr69y.js +0 -23
- package/dist/v2/recomp-orchestrator-f6m9jr7p.js +0 -60
- package/dist/wrapup-orchestrator-whhbjmaz.js +0 -48
|
@@ -7,7 +7,7 @@ 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
13
|
byteSize,
|
|
@@ -73,31 +73,37 @@ import {
|
|
|
73
73
|
adoptNullOwnerToolTag2,
|
|
74
74
|
getCandidateToolOwners2,
|
|
75
75
|
pickNearestPriorOwner2
|
|
76
|
-
} from "./index-
|
|
76
|
+
} from "./index-305y133n.js";
|
|
77
77
|
import {
|
|
78
78
|
textMentionsRecentCommit,
|
|
79
79
|
hasMeaningfulUserText2,
|
|
80
80
|
estimateTokens
|
|
81
|
-
} from "./index-
|
|
81
|
+
} from "./index-b88dwwrh.js";
|
|
82
|
+
import {
|
|
83
|
+
getMagicContextStorageDir
|
|
84
|
+
} from "./index-g2q4htwp.js";
|
|
82
85
|
import {
|
|
83
86
|
log2,
|
|
84
87
|
sessionLog2
|
|
85
|
-
} from "./index-
|
|
88
|
+
} from "./index-h7tgn49j.js";
|
|
86
89
|
import {
|
|
87
90
|
inRootAsyncContext2,
|
|
88
91
|
getTagIdentityWriteGeneration2,
|
|
89
92
|
getSqliteDatabasePath2,
|
|
90
93
|
assertTransformWrite2,
|
|
91
94
|
isTransientSqliteError2
|
|
92
|
-
} from "./index-
|
|
95
|
+
} from "./index-1zx2pa5d.js";
|
|
93
96
|
import {
|
|
94
97
|
getProjectEmbeddingSnapshot2,
|
|
95
98
|
embedTextForProject2,
|
|
96
99
|
embedBatchForProject2
|
|
97
|
-
} from "./index-
|
|
100
|
+
} from "./index-2yhtnfcf.js";
|
|
101
|
+
import {
|
|
102
|
+
createWorkerShutdown
|
|
103
|
+
} from "./index-cpjk5jd2.js";
|
|
98
104
|
import {
|
|
99
105
|
runSessionWarmupWorker
|
|
100
|
-
} from "./index-
|
|
106
|
+
} from "./index-35qc6606.js";
|
|
101
107
|
import {
|
|
102
108
|
getMaxM0MutationId,
|
|
103
109
|
getLastCompartmentEndMessage,
|
|
@@ -133,12 +139,12 @@ import {
|
|
|
133
139
|
peekNoteNudgeText,
|
|
134
140
|
markNoteNudgeDelivered,
|
|
135
141
|
getActiveCompartmentRun
|
|
136
|
-
} from "./index-
|
|
142
|
+
} from "./index-v7r4td4c.js";
|
|
137
143
|
import {
|
|
138
144
|
BoundedSessionMap,
|
|
139
145
|
cleanSearchText,
|
|
140
146
|
matchedSearchSnippet
|
|
141
|
-
} from "./index-
|
|
147
|
+
} from "./index-48stjd56.js";
|
|
142
148
|
import {
|
|
143
149
|
stripSystemInjection,
|
|
144
150
|
isTextPart,
|
|
@@ -234,7 +240,7 @@ import {
|
|
|
234
240
|
extractToolCallObservation,
|
|
235
241
|
ToolMutationBatch,
|
|
236
242
|
createToolDropTarget
|
|
237
|
-
} from "./index-
|
|
243
|
+
} from "./index-x4k3f4mf.js";
|
|
238
244
|
import {
|
|
239
245
|
isValidLanguageCode
|
|
240
246
|
} from "./index-wgypt3cs.js";
|
|
@@ -245,10 +251,10 @@ import {
|
|
|
245
251
|
openCodeDbExists,
|
|
246
252
|
withReadOnlySessionDb,
|
|
247
253
|
getMessageTimesFromOpenCodeDb
|
|
248
|
-
} from "./index-
|
|
254
|
+
} from "./index-11zf2wwc.js";
|
|
249
255
|
import {
|
|
250
256
|
userFacingFailureCode
|
|
251
|
-
} from "./index-
|
|
257
|
+
} from "./index-1pefp8ar.js";
|
|
252
258
|
import {
|
|
253
259
|
normalizeProtectedToolName,
|
|
254
260
|
mergeProtectedTools
|
|
@@ -258,7 +264,7 @@ import {
|
|
|
258
264
|
} from "./index-y8v6yerm.js";
|
|
259
265
|
import {
|
|
260
266
|
logSlowWriteTransaction
|
|
261
|
-
} from "./index-
|
|
267
|
+
} from "./index-t5pck3ss.js";
|
|
262
268
|
|
|
263
269
|
// src/features/magic-context/tagger.ts
|
|
264
270
|
var TOOL_COMPOSITE_KEY_SEP = "\x00";
|
|
@@ -1243,7 +1249,8 @@ ${trimmedBody}…
|
|
|
1243
1249
|
return wrapped;
|
|
1244
1250
|
}
|
|
1245
1251
|
function selectAutoSearchResults(results, threshold) {
|
|
1246
|
-
|
|
1252
|
+
const relevance = (result) => result.relevanceScore ?? result.score;
|
|
1253
|
+
return results.filter((result) => relevance(result) >= threshold).sort((left, right) => relevance(right) - relevance(left));
|
|
1247
1254
|
}
|
|
1248
1255
|
|
|
1249
1256
|
// src/hooks/magic-context/auto-search-worker-client.ts
|
|
@@ -1336,6 +1343,13 @@ function retryUnpublishedAutoSearchNoHint(db, sessionId, messageId, startedAt) {
|
|
|
1336
1343
|
}
|
|
1337
1344
|
return true;
|
|
1338
1345
|
}
|
|
1346
|
+
|
|
1347
|
+
class AutoSearchBusyError extends Error {
|
|
1348
|
+
constructor() {
|
|
1349
|
+
super("an earlier auto-search of this session is still running");
|
|
1350
|
+
this.name = "AutoSearchBusyError";
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1339
1353
|
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
1354
|
return executeAutoSearchWorker(db, sessionId, projectPath, query, options, entry, "search");
|
|
1341
1355
|
}
|
|
@@ -1344,14 +1358,19 @@ var searchWorkers = new WeakMap;
|
|
|
1344
1358
|
var liveSearchWorkers = new Set;
|
|
1345
1359
|
var MAX_IDLE_SEARCH_WORKERS = 4;
|
|
1346
1360
|
var SEARCH_WORKER_IDLE_MS = 5 * 60000;
|
|
1361
|
+
var DETACHED_SEARCH_LIMIT_MS = 30000;
|
|
1362
|
+
var AUTO_SEARCH_WORKER_CLOSE_DEADLINE_MS = 2000;
|
|
1347
1363
|
var workersCreated = 0;
|
|
1348
1364
|
var workersReused = 0;
|
|
1365
|
+
var searchesSkippedBusy = 0;
|
|
1349
1366
|
async function acquireSearchWorker(db, key, entry, input, signal) {
|
|
1350
1367
|
const pool = searchWorkers.get(db) ?? new Map;
|
|
1351
1368
|
searchWorkers.set(db, pool);
|
|
1352
1369
|
while (!signal.aborted) {
|
|
1353
1370
|
let slot = pool.get(key);
|
|
1354
1371
|
if (slot?.busy) {
|
|
1372
|
+
if (input.job === "search" && (slot.detached || slot.busySessionId === input.sessionId))
|
|
1373
|
+
return "busy";
|
|
1355
1374
|
const current = slot;
|
|
1356
1375
|
await new Promise((resolve) => {
|
|
1357
1376
|
const done = () => {
|
|
@@ -1360,6 +1379,8 @@ async function acquireSearchWorker(db, key, entry, input, signal) {
|
|
|
1360
1379
|
};
|
|
1361
1380
|
signal.addEventListener("abort", done, { once: true });
|
|
1362
1381
|
current.busy?.then(done);
|
|
1382
|
+
if (!current.detached)
|
|
1383
|
+
current.detachedSignal?.then(done);
|
|
1363
1384
|
if (signal.aborted)
|
|
1364
1385
|
done();
|
|
1365
1386
|
});
|
|
@@ -1368,14 +1389,16 @@ async function acquireSearchWorker(db, key, entry, input, signal) {
|
|
|
1368
1389
|
const fresh = !slot;
|
|
1369
1390
|
if (!slot) {
|
|
1370
1391
|
const worker = inRootAsyncContext2(() => new Worker(entry, { workerData: { ...input, persistent: true } }));
|
|
1392
|
+
const shutdown = createWorkerShutdown(worker, "auto-search", AUTO_SEARCH_WORKER_CLOSE_DEADLINE_MS);
|
|
1371
1393
|
slot = {
|
|
1372
1394
|
worker,
|
|
1373
1395
|
dispose() {
|
|
1396
|
+
this.disposed = true;
|
|
1374
1397
|
clearTimeout(this.idleTimer);
|
|
1375
1398
|
if (pool.get(key) === this)
|
|
1376
1399
|
pool.delete(key);
|
|
1377
1400
|
liveSearchWorkers.delete(this);
|
|
1378
|
-
|
|
1401
|
+
shutdown.close();
|
|
1379
1402
|
worker.unref();
|
|
1380
1403
|
}
|
|
1381
1404
|
};
|
|
@@ -1389,9 +1412,14 @@ async function acquireSearchWorker(db, key, entry, input, signal) {
|
|
|
1389
1412
|
workersReused++;
|
|
1390
1413
|
clearTimeout(slot.idleTimer);
|
|
1391
1414
|
const current = slot;
|
|
1415
|
+
current.busySessionId = input.sessionId;
|
|
1416
|
+
current.detached = false;
|
|
1392
1417
|
current.busy = new Promise((resolve) => {
|
|
1393
1418
|
current.release = resolve;
|
|
1394
1419
|
});
|
|
1420
|
+
current.detachedSignal = new Promise((resolve) => {
|
|
1421
|
+
current.markDetached = resolve;
|
|
1422
|
+
});
|
|
1395
1423
|
current.worker.ref();
|
|
1396
1424
|
return { slot: current, fresh };
|
|
1397
1425
|
}
|
|
@@ -1400,6 +1428,9 @@ async function acquireSearchWorker(db, key, entry, input, signal) {
|
|
|
1400
1428
|
function queueAutoSearchBackfill(db, sessionId, projectPath, query) {
|
|
1401
1429
|
if (isEmbeddingHostBusy2())
|
|
1402
1430
|
return Promise.resolve();
|
|
1431
|
+
const snapshot = getProjectEmbeddingSnapshot2(projectPath);
|
|
1432
|
+
if (!snapshot?.enabled || !snapshot.features.memoryEnabled)
|
|
1433
|
+
return Promise.resolve();
|
|
1403
1434
|
const key = `${sessionId}\x00${projectPath}`;
|
|
1404
1435
|
const pending = pendingBackfills.get(db) ?? new Map;
|
|
1405
1436
|
pendingBackfills.set(db, pending);
|
|
@@ -1447,6 +1478,7 @@ async function executeAutoSearchWorker(db, sessionId, projectPath, query, option
|
|
|
1447
1478
|
signal: deadlineSignal,
|
|
1448
1479
|
readMessages: _readMessages,
|
|
1449
1480
|
searchMessageHistory: _searchMessageHistory,
|
|
1481
|
+
stepTimings: _stepTimings,
|
|
1450
1482
|
...serializable
|
|
1451
1483
|
} = options;
|
|
1452
1484
|
const lifecycle = registerAutoSearchWork(sessionId);
|
|
@@ -1482,30 +1514,55 @@ async function executeAutoSearchWorker(db, sessionId, projectPath, query, option
|
|
|
1482
1514
|
lifecycle.done();
|
|
1483
1515
|
return [];
|
|
1484
1516
|
}
|
|
1517
|
+
if (lease === "busy") {
|
|
1518
|
+
lifecycle.done();
|
|
1519
|
+
searchesSkippedBusy++;
|
|
1520
|
+
throw new AutoSearchBusyError;
|
|
1521
|
+
}
|
|
1485
1522
|
const { slot, fresh } = lease;
|
|
1486
1523
|
const worker = slot.worker;
|
|
1524
|
+
const detachable = job === "search" && entry.href === defaultAutoSearchWorkerEntry().href;
|
|
1525
|
+
const startedAt = performance.now();
|
|
1526
|
+
let detachedAt;
|
|
1527
|
+
let ownerVectorMs;
|
|
1528
|
+
let abandonTimer;
|
|
1487
1529
|
return new Promise((resolve, reject) => {
|
|
1488
1530
|
let settled = false;
|
|
1489
|
-
|
|
1531
|
+
let released = false;
|
|
1532
|
+
const settle = (results, error) => {
|
|
1490
1533
|
if (settled)
|
|
1491
1534
|
return;
|
|
1492
1535
|
settled = true;
|
|
1536
|
+
if (error)
|
|
1537
|
+
reject(error);
|
|
1538
|
+
else
|
|
1539
|
+
resolve(results);
|
|
1540
|
+
};
|
|
1541
|
+
const release = (dispose) => {
|
|
1542
|
+
if (released)
|
|
1543
|
+
return;
|
|
1544
|
+
released = true;
|
|
1545
|
+
clearTimeout(abandonTimer);
|
|
1493
1546
|
signal?.removeEventListener("abort", abort);
|
|
1494
1547
|
lifecycle.signal.removeEventListener("abort", abort);
|
|
1495
1548
|
lifecycle.done();
|
|
1496
1549
|
worker.off("message", onMessage);
|
|
1497
1550
|
worker.off("error", onError);
|
|
1498
1551
|
worker.off("exit", onExit);
|
|
1499
|
-
if (
|
|
1552
|
+
if (dispose || !detachable)
|
|
1500
1553
|
slot.dispose();
|
|
1501
|
-
else {
|
|
1554
|
+
else if (!slot.disposed) {
|
|
1502
1555
|
slot.idleTimer = setTimeout(() => slot.dispose(), SEARCH_WORKER_IDLE_MS);
|
|
1503
1556
|
slot.idleTimer.unref?.();
|
|
1504
1557
|
}
|
|
1505
|
-
const
|
|
1558
|
+
const free = slot.release;
|
|
1506
1559
|
slot.busy = undefined;
|
|
1507
1560
|
slot.release = undefined;
|
|
1508
|
-
|
|
1561
|
+
slot.busySessionId = undefined;
|
|
1562
|
+
slot.detached = false;
|
|
1563
|
+
slot.detachedSignal = undefined;
|
|
1564
|
+
slot.markDetached = undefined;
|
|
1565
|
+
free?.();
|
|
1509
1566
|
const reusable = liveSearchWorkers.delete(slot);
|
|
1510
1567
|
if (reusable)
|
|
1511
1568
|
liveSearchWorkers.add(slot);
|
|
@@ -1513,51 +1570,82 @@ async function executeAutoSearchWorker(db, sessionId, projectPath, query, option
|
|
|
1513
1570
|
for (const prior of idle.slice(0, Math.max(0, idle.length - MAX_IDLE_SEARCH_WORKERS)))
|
|
1514
1571
|
prior.dispose();
|
|
1515
1572
|
worker.unref();
|
|
1516
|
-
if (error)
|
|
1517
|
-
reject(error);
|
|
1518
|
-
else
|
|
1519
|
-
resolve(results);
|
|
1520
1573
|
};
|
|
1521
|
-
const
|
|
1574
|
+
const finish = (results, error) => {
|
|
1575
|
+
settle(results, error);
|
|
1576
|
+
release(Boolean(error) || signal.aborted);
|
|
1577
|
+
};
|
|
1578
|
+
const abort = () => {
|
|
1579
|
+
if (lifecycle.signal.aborted || !detachable) {
|
|
1580
|
+
finish([]);
|
|
1581
|
+
return;
|
|
1582
|
+
}
|
|
1583
|
+
if (settled)
|
|
1584
|
+
return;
|
|
1585
|
+
detachedAt = performance.now();
|
|
1586
|
+
slot.detached = true;
|
|
1587
|
+
slot.markDetached?.();
|
|
1588
|
+
settle([]);
|
|
1589
|
+
abandonTimer = setTimeout(() => {
|
|
1590
|
+
log2(`[auto-search] session ${sessionId}: search still running ${DETACHED_SEARCH_LIMIT_MS} ms after its deadline; disposing its worker (owner vector wait ${formatMs(ownerVectorMs)})`);
|
|
1591
|
+
release(true);
|
|
1592
|
+
}, DETACHED_SEARCH_LIMIT_MS);
|
|
1593
|
+
abandonTimer.unref?.();
|
|
1594
|
+
};
|
|
1522
1595
|
signal?.addEventListener("abort", abort, { once: true });
|
|
1523
1596
|
lifecycle.signal.addEventListener("abort", abort, { once: true });
|
|
1524
1597
|
const onError = (error) => finish([], error);
|
|
1525
1598
|
const onExit = (code) => finish([], new Error(`auto-search worker exited (${code})`));
|
|
1526
1599
|
const onMessage = async (reply) => {
|
|
1527
|
-
if (
|
|
1600
|
+
if (released)
|
|
1528
1601
|
return;
|
|
1529
|
-
if (reply.kind === "result") {
|
|
1602
|
+
if (reply.kind === "result" || reply.kind === "error") {
|
|
1603
|
+
if (detachedAt !== undefined) {
|
|
1604
|
+
logLateSearch(sessionId, performance.now() - detachedAt, detachedAt - startedAt, ownerVectorMs, reply.kind === "result" ? reply.timings : undefined, reply.kind === "error");
|
|
1605
|
+
release(reply.kind === "error");
|
|
1606
|
+
return;
|
|
1607
|
+
}
|
|
1608
|
+
if (reply.kind === "error") {
|
|
1609
|
+
finish([], new Error(reply.error));
|
|
1610
|
+
return;
|
|
1611
|
+
}
|
|
1530
1612
|
if (snapshot && getProjectEmbeddingSnapshot2(projectPath)?.generation !== snapshot.generation)
|
|
1531
1613
|
finish([]);
|
|
1532
1614
|
else
|
|
1533
1615
|
finish(reply.results);
|
|
1534
1616
|
return;
|
|
1535
1617
|
}
|
|
1536
|
-
if (reply.kind === "error") {
|
|
1537
|
-
finish([], new Error(reply.error));
|
|
1538
|
-
return;
|
|
1539
|
-
}
|
|
1540
1618
|
if (reply.kind === "messages" || reply.kind === "accepted")
|
|
1541
1619
|
return;
|
|
1542
1620
|
const response = { id: reply.id };
|
|
1543
|
-
|
|
1621
|
+
if (!signal.aborted) {
|
|
1622
|
+
const requestedAt = performance.now();
|
|
1623
|
+
try {
|
|
1624
|
+
if (reply.kind === "query")
|
|
1625
|
+
response.result = await (job === "backfill" ? embedTextForProject2(projectPath, reply.text, signal, "query") : boundedHintEmbedding(embedQuery, reply.text, signal)) ?? null;
|
|
1626
|
+
else {
|
|
1627
|
+
const passage = await embedBatchForProject2(projectPath, reply.texts, signal, reply.purpose);
|
|
1628
|
+
const current = getProjectEmbeddingSnapshot2(projectPath);
|
|
1629
|
+
response.passage = passage && current ? {
|
|
1630
|
+
...passage,
|
|
1631
|
+
providerIdentity: current.providerIdentity,
|
|
1632
|
+
runtimeFingerprint: current.runtimeFingerprint,
|
|
1633
|
+
dimensions: passage.vectors.find((vector) => vector !== null)?.length ?? null
|
|
1634
|
+
} : null;
|
|
1635
|
+
}
|
|
1636
|
+
} catch (error) {
|
|
1637
|
+
response.error = error instanceof Error ? error.message : String(error);
|
|
1638
|
+
}
|
|
1544
1639
|
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;
|
|
1640
|
+
ownerVectorMs = performance.now() - requestedAt;
|
|
1641
|
+
if (signal.aborted) {
|
|
1642
|
+
response.result = undefined;
|
|
1643
|
+
response.passage = undefined;
|
|
1644
|
+
response.error = undefined;
|
|
1555
1645
|
}
|
|
1556
|
-
} catch (error) {
|
|
1557
|
-
response.error = error instanceof Error ? error.message : String(error);
|
|
1558
1646
|
}
|
|
1559
1647
|
response.embeddingHostBusy = isEmbeddingHostBusy2();
|
|
1560
|
-
if (!
|
|
1648
|
+
if (!released) {
|
|
1561
1649
|
try {
|
|
1562
1650
|
worker.postMessage(response);
|
|
1563
1651
|
} catch (error) {
|
|
@@ -1579,6 +1667,15 @@ async function executeAutoSearchWorker(db, sessionId, projectPath, query, option
|
|
|
1579
1667
|
}
|
|
1580
1668
|
});
|
|
1581
1669
|
}
|
|
1670
|
+
function formatMs(value) {
|
|
1671
|
+
return value === undefined ? "n/a" : `${Math.round(value)} ms`;
|
|
1672
|
+
}
|
|
1673
|
+
function logLateSearch(sessionId, lateMs, waitedMs, ownerVectorMs, timings, failed) {
|
|
1674
|
+
const steps = timings?.steps;
|
|
1675
|
+
const warm = timings?.lastPoolWarm;
|
|
1676
|
+
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";
|
|
1677
|
+
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}`);
|
|
1678
|
+
}
|
|
1582
1679
|
async function boundedHintEmbedding(embed, text, signal) {
|
|
1583
1680
|
const controller = new AbortController;
|
|
1584
1681
|
const combined = AbortSignal.any([signal, controller.signal]);
|
|
@@ -1602,6 +1699,7 @@ function defaultAutoSearchWorkerEntry() {
|
|
|
1602
1699
|
}
|
|
1603
1700
|
var MESSAGE_WORKER_ACCEPT_TIMEOUT_MS = 400;
|
|
1604
1701
|
var MESSAGE_WORKER_RESULT_TIMEOUT_MS = 30000;
|
|
1702
|
+
var MESSAGE_SEARCH_WORKER_CLOSE_DEADLINE_MS = 2000;
|
|
1605
1703
|
var messageSearchWorkerFallbacks = new Map;
|
|
1606
1704
|
function searchMessageHistoryOffThread(db, request, entry = defaultAutoSearchWorkerEntry(), deadlines = {}) {
|
|
1607
1705
|
const fallback = (reason, detail) => {
|
|
@@ -1629,6 +1727,7 @@ function searchMessageHistoryOffThread(db, request, entry = defaultAutoSearchWor
|
|
|
1629
1727
|
return new Promise((resolve) => {
|
|
1630
1728
|
let settled = false;
|
|
1631
1729
|
let worker;
|
|
1730
|
+
let shutdown;
|
|
1632
1731
|
let deadline;
|
|
1633
1732
|
const finish = (outcome, reason, detail) => {
|
|
1634
1733
|
if (settled)
|
|
@@ -1637,7 +1736,7 @@ function searchMessageHistoryOffThread(db, request, entry = defaultAutoSearchWor
|
|
|
1637
1736
|
clearTimeout(deadline);
|
|
1638
1737
|
if (reason)
|
|
1639
1738
|
fallback(reason, detail);
|
|
1640
|
-
|
|
1739
|
+
shutdown?.close();
|
|
1641
1740
|
worker?.unref();
|
|
1642
1741
|
resolve(outcome);
|
|
1643
1742
|
};
|
|
@@ -1648,6 +1747,7 @@ function searchMessageHistoryOffThread(db, request, entry = defaultAutoSearchWor
|
|
|
1648
1747
|
};
|
|
1649
1748
|
try {
|
|
1650
1749
|
worker = inRootAsyncContext2(() => new Worker(entry, { workerData: input }));
|
|
1750
|
+
shutdown = createWorkerShutdown(worker, "message-search", MESSAGE_SEARCH_WORKER_CLOSE_DEADLINE_MS);
|
|
1651
1751
|
} catch (error) {
|
|
1652
1752
|
finish(null, "start-failed", error);
|
|
1653
1753
|
return;
|
|
@@ -1916,7 +2016,8 @@ async function runAutoSearchHint(args) {
|
|
|
1916
2016
|
},
|
|
1917
2017
|
isEmbeddingRuntimeEnabled: () => embeddingEnabled === true,
|
|
1918
2018
|
visibleMemoryIds: options.visibleMemoryIds ?? null,
|
|
1919
|
-
sources: ["memory", "message", "git_commit"]
|
|
2019
|
+
sources: ["memory", "message", "git_commit"],
|
|
2020
|
+
chunkPoolWarmOnly: true
|
|
1920
2021
|
};
|
|
1921
2022
|
return searchAutoHint(db, sessionId, options.projectPath, rawPrompt, {
|
|
1922
2023
|
...searchOptions,
|
|
@@ -1927,6 +2028,11 @@ async function runAutoSearchHint(args) {
|
|
|
1927
2028
|
} catch (error) {
|
|
1928
2029
|
if (lifecycleSignal.aborted)
|
|
1929
2030
|
return AUTO_SEARCH_OK;
|
|
2031
|
+
if (error instanceof AutoSearchBusyError) {
|
|
2032
|
+
sessionLog2(sessionId, "auto-search: an earlier search of this session is still running, skipping hint for this turn");
|
|
2033
|
+
persistAutoSearchSkip(db, sessionId, userMsgId);
|
|
2034
|
+
return { ok: false, kind: "timeout" };
|
|
2035
|
+
}
|
|
1930
2036
|
log2(`[auto-search] unified search failed for session ${sessionId} (no-hint frozen for this turn): ${error instanceof Error ? error.message : String(error)}`);
|
|
1931
2037
|
const outcome = await writeNoHintAndReconcile("error");
|
|
1932
2038
|
return outcome.ok ? { ok: false, kind: "search-failure" } : outcome;
|
|
@@ -1976,7 +2082,7 @@ ${hintText}`;
|
|
|
1976
2082
|
if (outcome.decision.decision === "hint") {
|
|
1977
2083
|
appendReminderToUserMessageById(messages, userMsgId, outcome.decision.text);
|
|
1978
2084
|
}
|
|
1979
|
-
sessionLog2(sessionId, `auto-search: attached hint to ${userMsgId} (${results.length} fragments, top
|
|
2085
|
+
sessionLog2(sessionId, `auto-search: attached hint to ${userMsgId} (${results.length} fragments, top relevance ${(results[0].relevanceScore ?? results[0].score).toFixed(3)})`);
|
|
1980
2086
|
return AUTO_SEARCH_OK;
|
|
1981
2087
|
} finally {
|
|
1982
2088
|
if (!lifecycleSignal.aborted && results !== null)
|
|
@@ -2285,6 +2391,22 @@ function resolveTodowriteAvailability(sessionId) {
|
|
|
2285
2391
|
return resolveToolAvailability(sessionId, TODOWRITE_TOOL);
|
|
2286
2392
|
}
|
|
2287
2393
|
|
|
2394
|
+
// src/hooks/magic-context/diagnostic-log-state.ts
|
|
2395
|
+
var states = new BoundedSessionMap(1000);
|
|
2396
|
+
var scope = (sessionId) => `${getMagicContextStorageDir()}\x00${getHarness2()}\x00${sessionId}`;
|
|
2397
|
+
function diagnosticStateChanged(sessionId, category, state) {
|
|
2398
|
+
const key = scope(sessionId);
|
|
2399
|
+
const previous = states.get(key) ?? new Map;
|
|
2400
|
+
if (previous.get(category) === state)
|
|
2401
|
+
return false;
|
|
2402
|
+
previous.set(category, state);
|
|
2403
|
+
states.set(key, previous);
|
|
2404
|
+
return true;
|
|
2405
|
+
}
|
|
2406
|
+
function clearDiagnosticLogState(sessionId) {
|
|
2407
|
+
states.delete(scope(sessionId));
|
|
2408
|
+
}
|
|
2409
|
+
|
|
2288
2410
|
// src/hooks/magic-context/cache-busting-signals.ts
|
|
2289
2411
|
function canConsumeDeferredOnThisPass(args) {
|
|
2290
2412
|
if (args.justAwaitedPublication)
|
|
@@ -2292,7 +2414,7 @@ function canConsumeDeferredOnThisPass(args) {
|
|
|
2292
2414
|
return args.schedulerDecision === "execute" || args.contextPercentage >= (args.forceMaterializationPercentage ?? escalationBands(65).forceMaterializationPercentage);
|
|
2293
2415
|
}
|
|
2294
2416
|
function hasReclaimRide(signals) {
|
|
2295
|
-
return signals.hardFold || signals.force || signals.explicitFlush || signals.publishedHistory || signals.subagentExecute === true;
|
|
2417
|
+
return signals.hardFold || signals.force || signals.explicitFlush || signals.publishedHistory || signals.subagentExecute === true || signals.executeReclaim === true;
|
|
2296
2418
|
}
|
|
2297
2419
|
function prefixMutationPermitted(gate) {
|
|
2298
2420
|
return !gate.signedThinkingHold || gate.firstRender || gate.idleExpiry || gate.emergency;
|
|
@@ -2305,13 +2427,233 @@ var RECLAIM_RIDE_NAMES = [
|
|
|
2305
2427
|
"force",
|
|
2306
2428
|
"explicitFlush",
|
|
2307
2429
|
"publishedHistory",
|
|
2308
|
-
"subagentExecute"
|
|
2430
|
+
"subagentExecute",
|
|
2431
|
+
"executeReclaim"
|
|
2309
2432
|
];
|
|
2310
2433
|
function reclaimRideLabel(signals) {
|
|
2311
2434
|
const active = RECLAIM_RIDE_NAMES.filter((name) => signals[name]);
|
|
2312
2435
|
return `ride=${active.length > 0 ? active.join("+") : "none"}`;
|
|
2313
2436
|
}
|
|
2314
2437
|
|
|
2438
|
+
// src/hooks/magic-context/pending-drop-eligibility.ts
|
|
2439
|
+
function pendingDropVeto(tagNumber, target, protectedTagIds) {
|
|
2440
|
+
if (protectedTagIds.has(tagNumber))
|
|
2441
|
+
return "protected";
|
|
2442
|
+
if (target?.thinkingDropProtected)
|
|
2443
|
+
return "active_thinking";
|
|
2444
|
+
return null;
|
|
2445
|
+
}
|
|
2446
|
+
function capturePendingDropEligibility(targets, protectedTagIds) {
|
|
2447
|
+
const eligible = new Set;
|
|
2448
|
+
for (const [number, target] of targets) {
|
|
2449
|
+
if (pendingDropVeto(number, target, protectedTagIds))
|
|
2450
|
+
continue;
|
|
2451
|
+
if (target.drop) {
|
|
2452
|
+
if (target.canDrop?.() === true)
|
|
2453
|
+
eligible.add(number);
|
|
2454
|
+
} else {
|
|
2455
|
+
const content = target.getContent?.();
|
|
2456
|
+
const replacement = `[dropped §${number}§]`;
|
|
2457
|
+
if (typeof content === "string" && content.length > replacement.length && target.canSetContent?.(replacement) !== false)
|
|
2458
|
+
eligible.add(number);
|
|
2459
|
+
}
|
|
2460
|
+
}
|
|
2461
|
+
return eligible;
|
|
2462
|
+
}
|
|
2463
|
+
function pendingDropEligibilityKey(db, sessionId, input, protectionInputs) {
|
|
2464
|
+
const digests = input.map((message) => message.contentDigest?.() ?? null);
|
|
2465
|
+
if (digests.some((digest) => digest === null))
|
|
2466
|
+
return null;
|
|
2467
|
+
const revision = db.prepare("SELECT value FROM schema_migrations_meta WHERE key = ?").get(tagRevisionKey(sessionId));
|
|
2468
|
+
if (!revision?.value)
|
|
2469
|
+
return null;
|
|
2470
|
+
return JSON.stringify([
|
|
2471
|
+
input.map((message, index) => [
|
|
2472
|
+
message.id,
|
|
2473
|
+
message.role,
|
|
2474
|
+
message.synthetic,
|
|
2475
|
+
digests[index]
|
|
2476
|
+
]),
|
|
2477
|
+
revision.value,
|
|
2478
|
+
readEpochFloorSnapshot(db, sessionId),
|
|
2479
|
+
sessionDecisionCalibration(db, sessionId).toolsRatio,
|
|
2480
|
+
loadProtectedTailMeta(db, sessionId),
|
|
2481
|
+
[...getMergedReasoningStrippedIds(db, sessionId)].sort(),
|
|
2482
|
+
[...getReasoningRemovalState(db, sessionId).messageIds].sort(),
|
|
2483
|
+
protectionInputs
|
|
2484
|
+
]);
|
|
2485
|
+
}
|
|
2486
|
+
function createPendingDropEligibilityCache() {
|
|
2487
|
+
const sessions = new Map;
|
|
2488
|
+
return {
|
|
2489
|
+
read(sessionId, key) {
|
|
2490
|
+
const previous = sessions.get(sessionId);
|
|
2491
|
+
if (key === null || previous?.key !== key) {
|
|
2492
|
+
sessions.delete(sessionId);
|
|
2493
|
+
return;
|
|
2494
|
+
}
|
|
2495
|
+
return previous.eligible;
|
|
2496
|
+
},
|
|
2497
|
+
record(sessionId, key, eligible) {
|
|
2498
|
+
sessions.delete(sessionId);
|
|
2499
|
+
if (key === null)
|
|
2500
|
+
return;
|
|
2501
|
+
const oldest = sessions.keys().next().value;
|
|
2502
|
+
if (sessions.size >= 64 && oldest !== undefined)
|
|
2503
|
+
sessions.delete(oldest);
|
|
2504
|
+
sessions.set(sessionId, { key, eligible: new Set(eligible) });
|
|
2505
|
+
}
|
|
2506
|
+
};
|
|
2507
|
+
}
|
|
2508
|
+
|
|
2509
|
+
// src/hooks/magic-context/postprocess-read-cache.ts
|
|
2510
|
+
var connections = new WeakMap;
|
|
2511
|
+
function snapshot(db, sessionId) {
|
|
2512
|
+
const transaction = db;
|
|
2513
|
+
try {
|
|
2514
|
+
if (transaction.inTransaction || transaction.isTransaction) {
|
|
2515
|
+
connections.delete(db);
|
|
2516
|
+
return { version: -1, changes: -1 };
|
|
2517
|
+
}
|
|
2518
|
+
} catch {
|
|
2519
|
+
connections.delete(db);
|
|
2520
|
+
return { version: -1, changes: -1 };
|
|
2521
|
+
}
|
|
2522
|
+
let connection = connections.get(db);
|
|
2523
|
+
if (!connection) {
|
|
2524
|
+
connection = {
|
|
2525
|
+
stamp: db.prepare("SELECT total_changes() AS changes, data_version AS version FROM pragma_data_version"),
|
|
2526
|
+
sessions: new BoundedSessionMap(100)
|
|
2527
|
+
};
|
|
2528
|
+
connections.set(db, connection);
|
|
2529
|
+
}
|
|
2530
|
+
const stamp = connection.stamp.get();
|
|
2531
|
+
const previous = connection.sessions.get(sessionId);
|
|
2532
|
+
if (previous?.version === stamp.version && previous.changes === stamp.changes) {
|
|
2533
|
+
return previous;
|
|
2534
|
+
}
|
|
2535
|
+
const value = { ...stamp };
|
|
2536
|
+
connection.sessions.set(sessionId, value);
|
|
2537
|
+
return value;
|
|
2538
|
+
}
|
|
2539
|
+
function postprocessTailTags(db, sessionId) {
|
|
2540
|
+
const state = snapshot(db, sessionId);
|
|
2541
|
+
return state.tags ??= getTailHygieneTags2(db, sessionId);
|
|
2542
|
+
}
|
|
2543
|
+
function postprocessOldestTags(db, sessionId, protectedNumbers) {
|
|
2544
|
+
const state = snapshot(db, sessionId);
|
|
2545
|
+
const hints = state.hints;
|
|
2546
|
+
if (hints && hints.protectedNumbers.size === protectedNumbers.size && [...protectedNumbers].every((number) => hints.protectedNumbers.has(number))) {
|
|
2547
|
+
return hints.value;
|
|
2548
|
+
}
|
|
2549
|
+
const value = getOldestActiveUnprotectedToolTags2(db, sessionId, protectedNumbers);
|
|
2550
|
+
state.hints = { protectedNumbers: new Set(protectedNumbers), value };
|
|
2551
|
+
return value;
|
|
2552
|
+
}
|
|
2553
|
+
function postprocessReplaySnapshot(db, sessionId) {
|
|
2554
|
+
const state = snapshot(db, sessionId);
|
|
2555
|
+
const replay = state.replay ??= loadPostprocessReplaySnapshot(db, sessionId);
|
|
2556
|
+
return {
|
|
2557
|
+
...replay,
|
|
2558
|
+
staleReduceStrippedIds: new Set(replay.staleReduceStrippedIds),
|
|
2559
|
+
processedImageStrippedIds: new Set(replay.processedImageStrippedIds),
|
|
2560
|
+
processedImageMarkers: new Map(replay.processedImageMarkers),
|
|
2561
|
+
strippedPlaceholderIds: new Set(replay.strippedPlaceholderIds),
|
|
2562
|
+
hiddenSeamPlaceholderIds: new Set(replay.hiddenSeamPlaceholderIds),
|
|
2563
|
+
mergedReasoningStrippedIds: new Set(replay.mergedReasoningStrippedIds),
|
|
2564
|
+
trailingBlankDecisions: new Map(replay.trailingBlankDecisions),
|
|
2565
|
+
noteNudgeAnchors: structuredClone(replay.noteNudgeAnchors),
|
|
2566
|
+
autoSearchHintDecisions: structuredClone(replay.autoSearchHintDecisions),
|
|
2567
|
+
todoSyntheticAnchor: structuredClone(replay.todoSyntheticAnchor),
|
|
2568
|
+
pendingCompactionMarker: structuredClone(replay.pendingCompactionMarker),
|
|
2569
|
+
compactionMarker: structuredClone(replay.compactionMarker)
|
|
2570
|
+
};
|
|
2571
|
+
}
|
|
2572
|
+
|
|
2573
|
+
// src/hooks/magic-context/execute-reclaim.ts
|
|
2574
|
+
var NAMESPACE = "executeReclaim";
|
|
2575
|
+
var failedWrites = new WeakMap;
|
|
2576
|
+
function readExecuteReclaimState(db, sessionId) {
|
|
2577
|
+
return parseState(postprocessReplaySnapshot(db, sessionId).executeReclaim);
|
|
2578
|
+
}
|
|
2579
|
+
function parseState(lane) {
|
|
2580
|
+
const value = lane;
|
|
2581
|
+
return {
|
|
2582
|
+
heldPasses: typeof value?.heldPasses === "number" ? Math.max(0, value.heldPasses) : 0,
|
|
2583
|
+
floorOrdinal: typeof value?.floorOrdinal === "number" ? value.floorOrdinal : null,
|
|
2584
|
+
floorPromptId: typeof value?.floorPromptId === "string" ? value.floorPromptId : null
|
|
2585
|
+
};
|
|
2586
|
+
}
|
|
2587
|
+
function writeExecuteReclaimState(db, sessionId, patch) {
|
|
2588
|
+
if (failedWrites.get(db)?.has(sessionId))
|
|
2589
|
+
return false;
|
|
2590
|
+
try {
|
|
2591
|
+
const current = readExecuteReclaimState(db, sessionId);
|
|
2592
|
+
if (JSON.stringify(current) === JSON.stringify({ ...current, ...patch }))
|
|
2593
|
+
return true;
|
|
2594
|
+
if (!updateReplayDocument(db, sessionId, (doc) => {
|
|
2595
|
+
const previous = parseState(doc[NAMESPACE]);
|
|
2596
|
+
const state = { ...previous, ...patch };
|
|
2597
|
+
if (JSON.stringify(previous) === JSON.stringify(state))
|
|
2598
|
+
return false;
|
|
2599
|
+
doc.version = 2;
|
|
2600
|
+
doc[NAMESPACE] = state;
|
|
2601
|
+
return true;
|
|
2602
|
+
}))
|
|
2603
|
+
throw new Error("Could not persist execute reclaim state");
|
|
2604
|
+
return true;
|
|
2605
|
+
} catch (error) {
|
|
2606
|
+
let failed = failedWrites.get(db);
|
|
2607
|
+
if (!failed)
|
|
2608
|
+
failedWrites.set(db, failed = new Set);
|
|
2609
|
+
failed.add(sessionId);
|
|
2610
|
+
sessionLog2(sessionId, `execute reclaim state persistence failed; retaining existing policy: ${String(error)}`);
|
|
2611
|
+
return false;
|
|
2612
|
+
}
|
|
2613
|
+
}
|
|
2614
|
+
function clearExecuteReclaimState(db, sessionId) {
|
|
2615
|
+
writeExecuteReclaimState(db, sessionId, {
|
|
2616
|
+
heldPasses: 0,
|
|
2617
|
+
floorOrdinal: null,
|
|
2618
|
+
floorPromptId: null
|
|
2619
|
+
});
|
|
2620
|
+
}
|
|
2621
|
+
function maintainExecuteFloorMark(db, sessionId, promptId, belowExecute) {
|
|
2622
|
+
failedWrites.get(db)?.delete(sessionId);
|
|
2623
|
+
const state = readExecuteReclaimState(db, sessionId);
|
|
2624
|
+
if (state.floorOrdinal !== null && (belowExecute || promptId !== null && promptId !== state.floorPromptId)) {
|
|
2625
|
+
writeExecuteReclaimState(db, sessionId, { floorOrdinal: null, floorPromptId: null });
|
|
2626
|
+
}
|
|
2627
|
+
}
|
|
2628
|
+
function estimateExecuteReclaimTokens(args) {
|
|
2629
|
+
const eligible = capturePendingDropEligibility(args.targets, args.protectedTagIds);
|
|
2630
|
+
const queued = new Set(args.pendingOps.filter((op) => op.operation === "drop").map((op) => op.tagId));
|
|
2631
|
+
const candidates = args.tags.filter((tag) => tag.status === "active" && queued.has(tag.tagNumber) && eligible.has(tag.tagNumber));
|
|
2632
|
+
const preparationTargets = new Map;
|
|
2633
|
+
for (const tag of candidates) {
|
|
2634
|
+
const target = args.targets.get(tag.tagNumber);
|
|
2635
|
+
if (target?.prepareDrop)
|
|
2636
|
+
preparationTargets.set(tag.tagNumber, target);
|
|
2637
|
+
}
|
|
2638
|
+
const prepared = preparationTargets.size === 0 ? new Set : args.probePreparation?.(preparationTargets) ?? new Set([...preparationTargets].filter(([, target]) => target.prepareDrop?.() !== false).map(([number]) => number));
|
|
2639
|
+
const seed = sessionDecisionCalibration(args.db, args.sessionId);
|
|
2640
|
+
return candidates.reduce((total, tag) => {
|
|
2641
|
+
if (preparationTargets.has(tag.tagNumber) && !prepared.has(tag.tagNumber))
|
|
2642
|
+
return total;
|
|
2643
|
+
const ratio = tag.type === "tool" ? seed.toolsRatio : seed.proseRatio;
|
|
2644
|
+
return total + Math.max(0, (tag.tokenCount ?? Math.ceil(tag.byteSize / 4)) * ratio);
|
|
2645
|
+
}, 0);
|
|
2646
|
+
}
|
|
2647
|
+
function originateExecuteReclaim(args) {
|
|
2648
|
+
if (failedWrites.get(args.db)?.has(args.sessionId))
|
|
2649
|
+
return false;
|
|
2650
|
+
const state = readExecuteReclaimState(args.db, args.sessionId);
|
|
2651
|
+
const heldPasses = args.primaryExecute && args.reclaimableTokens > 0 && !args.alreadyBusting ? state.heldPasses + 1 : 0;
|
|
2652
|
+
if (!writeExecuteReclaimState(args.db, args.sessionId, { heldPasses }))
|
|
2653
|
+
return false;
|
|
2654
|
+
return args.primaryExecute && !args.alreadyBusting && !args.summaryCanCome && args.reclaimableTokens > 0 && (args.usableWindow > 0 && args.reclaimableTokens >= args.usableWindow * 0.02 || heldPasses >= 3);
|
|
2655
|
+
}
|
|
2656
|
+
|
|
2315
2657
|
// src/hooks/magic-context/reasoning-budget-status.ts
|
|
2316
2658
|
var sources = new Map;
|
|
2317
2659
|
function captureOpencodeReasoningBudgetStatus(sessionId, messages, budget, prefixBound, proseRatio = 1) {
|
|
@@ -2594,6 +2936,9 @@ function latestAssistantTurnStart(messages) {
|
|
|
2594
2936
|
function latestAssistantTurnMessages(messages) {
|
|
2595
2937
|
return new Set(messages.slice(latestAssistantTurnStart(messages)));
|
|
2596
2938
|
}
|
|
2939
|
+
function isAnthropicThinkingPart(part, familyRoute) {
|
|
2940
|
+
return isRecord(part) && THINKING_TYPES.has(String(part.type ?? part.kind)) && (familyRoute || isRecord(part.metadata) && isRecord(part.metadata.anthropic));
|
|
2941
|
+
}
|
|
2597
2942
|
function hasActiveAnthropicThinkingTurn(messages, provider, model) {
|
|
2598
2943
|
const familyRoute = isAnthropicFamilyRoute(provider, model);
|
|
2599
2944
|
for (const message of messages.slice(latestAssistantTurnStart(messages))) {
|
|
@@ -2602,7 +2947,7 @@ function hasActiveAnthropicThinkingTurn(messages, provider, model) {
|
|
|
2602
2947
|
const parts = content(message);
|
|
2603
2948
|
if (!Array.isArray(parts))
|
|
2604
2949
|
continue;
|
|
2605
|
-
if (parts.some((part) =>
|
|
2950
|
+
if (parts.some((part) => isAnthropicThinkingPart(part, familyRoute)))
|
|
2606
2951
|
return true;
|
|
2607
2952
|
}
|
|
2608
2953
|
return false;
|
|
@@ -2678,14 +3023,14 @@ function retainedActiveThinkingParts(args) {
|
|
|
2678
3023
|
}
|
|
2679
3024
|
|
|
2680
3025
|
// src/features/magic-context/storage-caveman-rules.ts
|
|
2681
|
-
var
|
|
3026
|
+
var NAMESPACE2 = "caveman";
|
|
2682
3027
|
var CURRENT_RULES_VERSION = 2;
|
|
2683
3028
|
var ORIGINAL_RULES = {
|
|
2684
3029
|
currentRules: false,
|
|
2685
3030
|
englishWordRules: true,
|
|
2686
3031
|
legacyReasoningTags: new Set
|
|
2687
3032
|
};
|
|
2688
|
-
function
|
|
3033
|
+
function parseState2(lane) {
|
|
2689
3034
|
if (!isRecord(lane) || lane.rules !== CURRENT_RULES_VERSION)
|
|
2690
3035
|
return ORIGINAL_RULES;
|
|
2691
3036
|
const tags = Array.isArray(lane.legacyReasoningTags) ? lane.legacyReasoningTags : [];
|
|
@@ -2697,7 +3042,7 @@ function parseState(lane) {
|
|
|
2697
3042
|
}
|
|
2698
3043
|
function getCavemanReplayState(db, sessionId) {
|
|
2699
3044
|
try {
|
|
2700
|
-
return
|
|
3045
|
+
return parseState2(readReplayEnvelope(db, sessionId)[NAMESPACE2]);
|
|
2701
3046
|
} catch (error) {
|
|
2702
3047
|
if (error instanceof ReplayDocumentError)
|
|
2703
3048
|
return ORIGINAL_RULES;
|
|
@@ -2707,11 +3052,11 @@ function getCavemanReplayState(db, sessionId) {
|
|
|
2707
3052
|
function recordCavemanCurrentRules(db, sessionId, englishWordRules, legacyReasoningTags) {
|
|
2708
3053
|
const tags = [...new Set(legacyReasoningTags)].sort((a, b) => a - b);
|
|
2709
3054
|
const persisted = updateReplayDocument(db, sessionId, (doc) => {
|
|
2710
|
-
const current =
|
|
3055
|
+
const current = parseState2(doc[NAMESPACE2]);
|
|
2711
3056
|
if (current.currentRules && current.englishWordRules === englishWordRules)
|
|
2712
3057
|
return false;
|
|
2713
3058
|
doc.version = 2;
|
|
2714
|
-
doc[
|
|
3059
|
+
doc[NAMESPACE2] = {
|
|
2715
3060
|
rules: CURRENT_RULES_VERSION,
|
|
2716
3061
|
legacyReasoningTags: current.currentRules ? [...current.legacyReasoningTags].sort((a, b) => a - b) : tags,
|
|
2717
3062
|
...englishWordRules ? {} : { englishWordRules: false }
|
|
@@ -2925,93 +3270,23 @@ function degradedPassError(site, error) {
|
|
|
2925
3270
|
return new DegradedPassRefusalError(site, { cause: error });
|
|
2926
3271
|
}
|
|
2927
3272
|
|
|
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
3273
|
// src/features/magic-context/storage-host-instruction-retention.ts
|
|
2999
|
-
var
|
|
3274
|
+
var NAMESPACE3 = "hostInstructionRetention";
|
|
3000
3275
|
var enabled = true;
|
|
3001
3276
|
function hostInstructionRetentionEnabled() {
|
|
3002
3277
|
return enabled;
|
|
3003
3278
|
}
|
|
3004
3279
|
function isHostInstructionRetentionOn(db, sessionId) {
|
|
3005
|
-
const lane = readReplayEnvelope(db, sessionId)[
|
|
3280
|
+
const lane = readReplayEnvelope(db, sessionId)[NAMESPACE3];
|
|
3006
3281
|
return typeof lane === "object" && lane !== null && lane.on === true;
|
|
3007
3282
|
}
|
|
3008
3283
|
function markHostInstructionRetention(db, sessionId) {
|
|
3009
3284
|
return updateReplayDocument(db, sessionId, (doc) => {
|
|
3010
|
-
const lane = doc[
|
|
3285
|
+
const lane = doc[NAMESPACE3];
|
|
3011
3286
|
if (typeof lane === "object" && lane !== null && lane.on === true)
|
|
3012
3287
|
return false;
|
|
3013
3288
|
doc.version = 2;
|
|
3014
|
-
doc[
|
|
3289
|
+
doc[NAMESPACE3] = { on: true };
|
|
3015
3290
|
return true;
|
|
3016
3291
|
});
|
|
3017
3292
|
}
|
|
@@ -3301,12 +3576,16 @@ function applyPendingOperations(sessionId, db, targets, protectedTagIds, preload
|
|
|
3301
3576
|
}
|
|
3302
3577
|
} else if (target) {
|
|
3303
3578
|
const replacement = buildReplacementContent(pendingOp.tagId);
|
|
3579
|
+
if (target.canSetContent?.(replacement) === false) {
|
|
3580
|
+
reject("content_unchanged");
|
|
3581
|
+
continue;
|
|
3582
|
+
}
|
|
3304
3583
|
persistDrop();
|
|
3305
3584
|
mutations.push(() => {
|
|
3306
3585
|
const priorContent = target.getContent?.();
|
|
3307
3586
|
const changed = target.setContent(replacement);
|
|
3308
|
-
record(changed);
|
|
3309
3587
|
if (changed) {
|
|
3588
|
+
record(true);
|
|
3310
3589
|
const originalCharacters = typeof priorContent === "string" ? priorContent.length : tagById.get(pendingOp.tagId)?.byteSize ?? replacement.length;
|
|
3311
3590
|
onTagReduced?.({
|
|
3312
3591
|
tagNumber: pendingOp.tagId,
|
|
@@ -3877,70 +4156,6 @@ function isVisibleNoteReadPart(part) {
|
|
|
3877
4156
|
return false;
|
|
3878
4157
|
}
|
|
3879
4158
|
|
|
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
4159
|
// src/hooks/magic-context/strict-thinking-prefix.ts
|
|
3945
4160
|
function servedPrefixMatches(args) {
|
|
3946
4161
|
const heads = args.messages?.slice(0, 2);
|
|
@@ -4812,6 +5027,10 @@ function tagMessages(sessionId, messages, tagger, db, options = {}) {
|
|
|
4812
5027
|
dropReasoningParts: thinkingParts,
|
|
4813
5028
|
mutationParts: [{ message, part: textPart }],
|
|
4814
5029
|
textPrefix: skipPrefixInjection ? "" : prependTag(tagId, ""),
|
|
5030
|
+
canSetContent: (content) => {
|
|
5031
|
+
const partialEnd = messageId ? getPartialEnds().get(messageId) : undefined;
|
|
5032
|
+
return textPart.text !== content && (partialEnd === undefined || partIndex <= partialEnd);
|
|
5033
|
+
},
|
|
4815
5034
|
setContent: (content, options) => {
|
|
4816
5035
|
if (textPart.text === content)
|
|
4817
5036
|
return false;
|
|
@@ -5118,6 +5337,25 @@ function proactiveStripStartIndex(args) {
|
|
|
5118
5337
|
return divergence;
|
|
5119
5338
|
return divergence ?? lastServed.messages.length;
|
|
5120
5339
|
}
|
|
5340
|
+
function servesThinkingBlock2(messages, providerID, modelID) {
|
|
5341
|
+
const familyRoute = isAnthropicFamilyRoute(providerID, modelID);
|
|
5342
|
+
for (const message of messages) {
|
|
5343
|
+
if (message.info.role !== "assistant")
|
|
5344
|
+
continue;
|
|
5345
|
+
for (const part of message.parts) {
|
|
5346
|
+
if (!isAnthropicThinkingPart(part, familyRoute) || part.ignored === true)
|
|
5347
|
+
continue;
|
|
5348
|
+
if (part.type === "redacted_thinking")
|
|
5349
|
+
return true;
|
|
5350
|
+
if (typeof part.text === "string" && part.text !== "")
|
|
5351
|
+
return true;
|
|
5352
|
+
const records = isRecord(part.metadata) ? Object.values(part.metadata) : [];
|
|
5353
|
+
if (records.some((record) => isRecord(record) && record.redactedData !== undefined))
|
|
5354
|
+
return true;
|
|
5355
|
+
}
|
|
5356
|
+
}
|
|
5357
|
+
return false;
|
|
5358
|
+
}
|
|
5121
5359
|
function isPartDroppedBeforeWire(part, providerID) {
|
|
5122
5360
|
if (!modelAcceptsEmptyContent(providerID) || !isRecord(part))
|
|
5123
5361
|
return false;
|
|
@@ -5720,6 +5958,8 @@ async function runPostTransformPhase2(args) {
|
|
|
5720
5958
|
if (stripOffWire)
|
|
5721
5959
|
for (const id of stripped.strip?.messageIds ?? [])
|
|
5722
5960
|
compactionOffFrozenThinking.add(id);
|
|
5961
|
+
for (const id of stripped.strip?.messageIds ?? [])
|
|
5962
|
+
bindingThinking.add(id);
|
|
5723
5963
|
retainedThinking.clear();
|
|
5724
5964
|
protectedThinkingMessages.clear();
|
|
5725
5965
|
activeThinkingTurn = false;
|
|
@@ -5732,6 +5972,10 @@ async function runPostTransformPhase2(args) {
|
|
|
5732
5972
|
if (args.forceSignedRebuildForFit && (activeThinkingPrefixHold || activeThinkingTurn && args.thinkingBindingRecoveryEnabledForModel === true)) {
|
|
5733
5973
|
releaseThinkingForRewrite(true);
|
|
5734
5974
|
}
|
|
5975
|
+
if (args.compactionModeTransition === true && args.thinkingBindingRecoveryEnabledForModel === true) {
|
|
5976
|
+
sessionLog2(args.sessionId, "compaction mode switch: stripping signed thinking");
|
|
5977
|
+
releaseThinkingForRewrite(false, true);
|
|
5978
|
+
}
|
|
5735
5979
|
const foldDueDecision = m0M1EnabledForFold && args.m0M1 && !freezeM0M1 ? mustMaterialize({
|
|
5736
5980
|
db: args.db,
|
|
5737
5981
|
sessionId: args.sessionId,
|
|
@@ -5771,6 +6015,7 @@ async function runPostTransformPhase2(args) {
|
|
|
5771
6015
|
};
|
|
5772
6016
|
if ((foldDueDecision.value || softRefreshOpportunity || firstRenderBust && activeThinkingPrefixHold) && m0M1EnabledForFold && args.m0M1) {
|
|
5773
6017
|
let committedFoldBustsServedPrefix;
|
|
6018
|
+
let committedFoldChangesHead;
|
|
5774
6019
|
try {
|
|
5775
6020
|
const previousM1 = args.sessionMeta.cachedM1Bytes?.toString("utf8");
|
|
5776
6021
|
const foldResult = injectM0M1({
|
|
@@ -5800,6 +6045,12 @@ async function runPostTransformPhase2(args) {
|
|
|
5800
6045
|
m1Text: rendered.m1Bytes.toString(),
|
|
5801
6046
|
muralDataUrl: rendered.muralDataUrl
|
|
5802
6047
|
}) : foldBustsServedPrefix(foldDueDecision.reason, servedPrefixBeforeFold, rendered);
|
|
6048
|
+
committedFoldChangesHead = firstRenderBust ? !servedPrefixMatches({
|
|
6049
|
+
messages: servedBeforeFirstRender,
|
|
6050
|
+
m0Text: rendered.m0Bytes.toString(),
|
|
6051
|
+
m1Text: rendered.m1Bytes.toString(),
|
|
6052
|
+
muralDataUrl: rendered.muralDataUrl
|
|
6053
|
+
}) : foldChangesServedPrefix(servedPrefixBeforeFold, rendered);
|
|
5803
6054
|
if (bustsPrefix) {
|
|
5804
6055
|
if (!conversions.isCurrent(db)) {
|
|
5805
6056
|
throw new MaterializeContentionError({
|
|
@@ -5818,6 +6069,9 @@ async function runPostTransformPhase2(args) {
|
|
|
5818
6069
|
preparedPrefix = foldResult;
|
|
5819
6070
|
if (activeThinkingPrefixHold && firstRenderBust && committedFoldBustsServedPrefix) {
|
|
5820
6071
|
releaseThinkingForRewrite(false, true);
|
|
6072
|
+
} else if (compactionOff && !activeThinkingPrefixHold && args.thinkingBindingRecoveryEnabledForModel === true && committedFoldChangesHead) {
|
|
6073
|
+
sessionLog2(args.sessionId, "compaction-off fold changed the head: stripping signed thinking");
|
|
6074
|
+
releaseThinkingForRewrite(false, true);
|
|
5821
6075
|
}
|
|
5822
6076
|
prefixPreflightFailed = foldResult.materializationContentionRetryExhausted === true;
|
|
5823
6077
|
foldExecutedThisPass = foldExecutesThisPass(foldDueDecision.value || softRefreshOpportunity, foldResult.m0RematerializedThisPass);
|
|
@@ -5875,12 +6129,30 @@ async function runPostTransformPhase2(args) {
|
|
|
5875
6129
|
const heldIdleExpiryRebuild = activeThinkingPrefixHold && args.m0M1?.hardSignals?.cacheExpired === true;
|
|
5876
6130
|
const idleExpiryRebuild = (!freezeM0M1 || activeThinkingPrefixHold) && args.m0M1?.hardSignals?.cacheExpired === true;
|
|
5877
6131
|
const rideSignals = {
|
|
6132
|
+
executeReclaim: false,
|
|
5878
6133
|
subagentExecute: !args.fullFeatureMode && args.schedulerDecision === "execute",
|
|
5879
6134
|
hardFold: rewritingSignedPrefix || foldBustsServedPrefixThisPass || firstRenderBust || idleExpiryRebuild,
|
|
5880
6135
|
force: emergencyDropEligible && (args.contextUsage.percentage >= 95 || args.contextUsageFromEstimate !== true && getEmergencyInputSample(args.db, args.sessionId) === 0),
|
|
5881
6136
|
explicitFlush: isExplicitFlush && hasPendingMaterializationOrigin(args.pendingMaterializationSessions, args.sessionId, "user_flush"),
|
|
5882
6137
|
publishedHistory: !prefixPreflightFailed && (publishedM1RefreshedThisPass || !m0M1EnabledForFold && (args.pendingCompartmentInjection?.compartmentCount ?? 0) > 0 && legacyPublishedHeadChanged(args))
|
|
5883
6138
|
};
|
|
6139
|
+
const protectedToolTags = protectedToolTagNumbers(args.tags, args.protectedTools);
|
|
6140
|
+
rideSignals.executeReclaim = !compactionOff && originateExecuteReclaim({
|
|
6141
|
+
db: args.db,
|
|
6142
|
+
sessionId: args.sessionId,
|
|
6143
|
+
primaryExecute: args.fullFeatureMode && args.schedulerDecision === "execute" && args.contextUsage.percentage < args.forceMaterializationPercentage,
|
|
6144
|
+
alreadyBusting: Object.values(rideSignals).some(Boolean) || args.historyRebuiltThisPass,
|
|
6145
|
+
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,
|
|
6146
|
+
reclaimableTokens: estimateExecuteReclaimTokens({
|
|
6147
|
+
db: args.db,
|
|
6148
|
+
sessionId: args.sessionId,
|
|
6149
|
+
pendingOps,
|
|
6150
|
+
tags: args.tags,
|
|
6151
|
+
targets: newTargets,
|
|
6152
|
+
protectedTagIds: new Set([...args.protectedTagIds, ...protectedToolTags])
|
|
6153
|
+
}),
|
|
6154
|
+
usableWindow: args.usableWindow
|
|
6155
|
+
});
|
|
5884
6156
|
const publishedWorkDrainAllowed = !compactionOff && reclaimRidePermitted(rideSignals, {
|
|
5885
6157
|
signedThinkingHold: activeThinkingPrefixHold,
|
|
5886
6158
|
firstRender: firstRenderBust,
|
|
@@ -5888,7 +6160,7 @@ async function runPostTransformPhase2(args) {
|
|
|
5888
6160
|
emergency: emergencyDropEligible
|
|
5889
6161
|
});
|
|
5890
6162
|
const shouldApplyPendingOps = publishedWorkDrainAllowed;
|
|
5891
|
-
const shouldRunHeuristics = publishedWorkDrainAllowed && (rideSignals.publishedHistory || materializationRequested || forceMaterialization || foldBustsServedPrefixThisPass || firstRenderBust || heldIdleExpiryRebuild || emergencyDropEligible || args.schedulerDecision === "execute" && (!alreadyRanThisTurn || !args.fullFeatureMode));
|
|
6163
|
+
const shouldRunHeuristics = publishedWorkDrainAllowed && (rideSignals.publishedHistory || rideSignals.executeReclaim || materializationRequested || forceMaterialization || foldBustsServedPrefixThisPass || firstRenderBust || heldIdleExpiryRebuild || emergencyDropEligible || args.schedulerDecision === "execute" && (!alreadyRanThisTurn || !args.fullFeatureMode));
|
|
5892
6164
|
const isCacheBustingPass = publishedWorkDrainAllowed;
|
|
5893
6165
|
let unheldSignedTurnBust = false;
|
|
5894
6166
|
if (isCacheBustingPass && !activeThinkingPrefixHold && activeThinkingTurn && args.thinkingBindingRecoveryEnabledForModel === true) {
|
|
@@ -5980,17 +6252,28 @@ async function runPostTransformPhase2(args) {
|
|
|
5980
6252
|
throw new EmergencyFailClosedError("Magic Context could not read its saved reasoning-removal state for this session", { cause: error });
|
|
5981
6253
|
}
|
|
5982
6254
|
}
|
|
6255
|
+
const heuristicsLogChanged = diagnosticStateChanged(args.sessionId, "heuristics", JSON.stringify([
|
|
6256
|
+
args.currentTurnId,
|
|
6257
|
+
shouldRunHeuristics,
|
|
6258
|
+
shouldRunHeuristics ? null : args.schedulerDeferReason
|
|
6259
|
+
]));
|
|
6260
|
+
const pendingLogChanged = diagnosticStateChanged(args.sessionId, "pending-ops", JSON.stringify([
|
|
6261
|
+
args.currentTurnId,
|
|
6262
|
+
shouldApplyPendingOps,
|
|
6263
|
+
shouldApplyPendingOps ? null : args.schedulerDeferReason,
|
|
6264
|
+
shouldApplyPendingOps ? null : (getPendingOpsCount(args.db, args.sessionId) ?? 0) > 0
|
|
6265
|
+
]));
|
|
5983
6266
|
if (shouldRunHeuristics) {
|
|
5984
6267
|
const subagentRerun = !args.fullFeatureMode && alreadyRanThisTurn && args.schedulerDecision === "execute" && !isExplicitFlush && !forceMaterialization;
|
|
5985
6268
|
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
6269
|
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) {
|
|
6270
|
+
} else if (heuristicsLogChanged && args.schedulerDeferReason !== undefined && args.schedulerDeferReason !== null) {
|
|
5988
6271
|
sessionLog2(args.sessionId, `heuristics WILL NOT RUN — reason=${args.schedulerDeferReason}`);
|
|
5989
6272
|
}
|
|
5990
6273
|
if (alreadyRanThisTurn && args.schedulerDecision === "execute" && !materializationRequested && args.fullFeatureMode) {
|
|
5991
6274
|
sessionLog2(args.sessionId, `transform: skipping heuristics (already ran for turn ${args.currentTurnId})`);
|
|
5992
6275
|
}
|
|
5993
|
-
if (!shouldApplyPendingOps && args.schedulerDeferReason !== undefined && args.schedulerDeferReason !== null) {
|
|
6276
|
+
if (!shouldApplyPendingOps && pendingLogChanged && args.schedulerDeferReason !== undefined && args.schedulerDeferReason !== null) {
|
|
5994
6277
|
sessionLog2(args.sessionId, `pending ops WILL NOT APPLY — reason=${args.schedulerDeferReason} pendingOps=${formatPendingOpsDepth()} context=${args.contextUsage.percentage.toFixed(1)}%`);
|
|
5995
6278
|
}
|
|
5996
6279
|
if (hasPendingUserOps && !shouldApplyPendingOps) {
|
|
@@ -5999,7 +6282,6 @@ async function runPostTransformPhase2(args) {
|
|
|
5999
6282
|
let explicitMaterializedSuccessfully = false;
|
|
6000
6283
|
let deferredMaterializedSuccessfully = false;
|
|
6001
6284
|
let pendingOpsDidMutate = false;
|
|
6002
|
-
const protectedToolTags = protectedToolTagNumbers(args.tags, args.protectedTools);
|
|
6003
6285
|
const firstApplicationEdits = { any: false, beforeNewerThinking: false };
|
|
6004
6286
|
const recordFirstApplicationWireEdit = (beforeNewerThinking) => {
|
|
6005
6287
|
firstApplicationEdits.any = true;
|
|
@@ -7080,6 +7362,8 @@ async function runPostTransformPhase2(args) {
|
|
|
7080
7362
|
});
|
|
7081
7363
|
}
|
|
7082
7364
|
logTransformTiming(args.sessionId, "pp.tailGuard", tTailGuard);
|
|
7365
|
+
if (bustedThisPass)
|
|
7366
|
+
clearExecuteReclaimState(args.db, args.sessionId);
|
|
7083
7367
|
return {
|
|
7084
7368
|
explicitMaterializedSuccessfully,
|
|
7085
7369
|
deferredMaterializedSuccessfully,
|
|
@@ -7100,8 +7384,7 @@ async function runPostTransformPhase2(args) {
|
|
|
7100
7384
|
prefixTrimStatus: deliveredPrefix?.prefixTrimStatus ?? null,
|
|
7101
7385
|
thinkingBindingRecovery,
|
|
7102
7386
|
proactiveThinkingStrip,
|
|
7103
|
-
thinkingReleasedForFit
|
|
7104
|
-
openTurnSignedThinkingKept: args.thinkingBindingRecoveryEnabledForModel === true && activeThinkingTurn && !rewritingSignedPrefix
|
|
7387
|
+
thinkingReleasedForFit
|
|
7105
7388
|
};
|
|
7106
7389
|
}
|
|
7107
7390
|
function checkM0MutationDriftAndSignal2(args) {
|
|
@@ -7116,4 +7399,4 @@ function checkM0MutationDriftAndSignal2(args) {
|
|
|
7116
7399
|
return false;
|
|
7117
7400
|
}
|
|
7118
7401
|
|
|
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,
|
|
7402
|
+
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 };
|