@cortexkit/opencode-magic-context 0.46.1 → 0.48.0
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/agents/magic-context-prompt.d.ts +1 -1
- package/dist/agents/magic-context-prompt.d.ts.map +1 -1
- package/dist/{announcement-y35wzg2r.js → announcement-fp14dw0n.js} +3 -2
- package/dist/auto-search-worker.js +112 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/live-run-config.d.ts.map +1 -1
- package/dist/config/migrate-config-location.d.ts.map +1 -1
- package/dist/config/mural-model-deprecation.d.ts +15 -0
- package/dist/config/mural-model-deprecation.d.ts.map +1 -0
- package/dist/config/project-security.d.ts +0 -3
- package/dist/config/project-security.d.ts.map +1 -1
- package/dist/config/schema/magic-context.d.ts +21 -9
- package/dist/config/schema/magic-context.d.ts.map +1 -1
- package/dist/{conflict-warning-hook-7fj2b9jw.js → conflict-warning-hook-w8cykrnf.js} +12 -9
- package/dist/{context-sh2m2vde.js → context-m0cy262m.js} +1785 -913
- package/dist/{derive-budgets-7nj7r1rv.js → derive-budgets-sg0xsq7s.js} +4 -3
- package/dist/embedding-activity-g1dhes6g.js +10 -0
- package/dist/embedding-backfill-9rcm1mfy.js +21 -0
- package/dist/embedding-cache-mgyr73ef.js +16 -0
- package/dist/embedding-worker.js +11 -9
- package/dist/features/magic-context/compaction-marker.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts +1 -0
- package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-config.d.ts +3 -3
- package/dist/features/magic-context/dreamer/task-config.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-executor.d.ts +1 -1
- package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-gates.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-registry.d.ts +1 -0
- package/dist/features/magic-context/dreamer/task-registry.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
- package/dist/features/magic-context/message-index-async.d.ts +16 -3
- package/dist/features/magic-context/message-index-async.d.ts.map +1 -1
- package/dist/features/magic-context/message-index-bounded.d.ts +17 -0
- package/dist/features/magic-context/message-index-bounded.d.ts.map +1 -0
- package/dist/features/magic-context/message-index.d.ts +7 -1
- package/dist/features/magic-context/message-index.d.ts.map +1 -1
- package/dist/features/magic-context/mural/render-trigger.d.ts +7 -4
- package/dist/features/magic-context/mural/render-trigger.d.ts.map +1 -1
- package/dist/features/magic-context/overflow-detection.d.ts +2 -0
- package/dist/features/magic-context/overflow-detection.d.ts.map +1 -1
- package/dist/features/magic-context/pi-content-decisions.d.ts +7 -1
- package/dist/features/magic-context/pi-content-decisions.d.ts.map +1 -1
- package/dist/features/magic-context/project-embedding-registry.d.ts +7 -0
- package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
- package/dist/features/magic-context/search.d.ts +31 -0
- package/dist/features/magic-context/search.d.ts.map +1 -1
- package/dist/features/magic-context/session-activity.d.ts.map +1 -1
- package/dist/features/magic-context/session-project-storage.d.ts +8 -2
- package/dist/features/magic-context/session-project-storage.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/runner.d.ts +1 -0
- package/dist/features/magic-context/smart-notes/runner.d.ts.map +1 -1
- package/dist/features/magic-context/storage-db.d.ts.map +1 -1
- package/dist/features/magic-context/storage-historian-runs.d.ts +2 -5
- package/dist/features/magic-context/storage-historian-runs.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-persisted.d.ts +12 -0
- package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-session.d.ts +6 -0
- package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
- package/dist/features/magic-context/storage-tag-identity-revision.d.ts +30 -0
- package/dist/features/magic-context/storage-tag-identity-revision.d.ts.map +1 -0
- package/dist/features/magic-context/storage-tags.d.ts +148 -3
- package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
- package/dist/features/magic-context/storage.d.ts +1 -0
- package/dist/features/magic-context/storage.d.ts.map +1 -1
- package/dist/features/magic-context/subagent-token-capture.d.ts.map +1 -1
- package/dist/features/magic-context/transform-decision-log.d.ts +4 -2
- package/dist/features/magic-context/transform-decision-log.d.ts.map +1 -1
- package/dist/harness-e4avh192.js +10 -0
- package/dist/hooks/magic-context/active-anthropic-turn.d.ts +10 -0
- package/dist/hooks/magic-context/active-anthropic-turn.d.ts.map +1 -0
- package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
- package/dist/hooks/magic-context/auto-search-blocking.fixture.d.ts +2 -0
- package/dist/hooks/magic-context/auto-search-blocking.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/auto-search-deadline.d.ts +7 -0
- package/dist/hooks/magic-context/auto-search-deadline.d.ts.map +1 -1
- package/dist/hooks/magic-context/auto-search-host-review.fixture.d.ts +3 -0
- package/dist/hooks/magic-context/auto-search-host-review.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/auto-search-lock-review.fixture.d.ts +2 -0
- package/dist/hooks/magic-context/auto-search-lock-review.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/auto-search-long-lock-review.fixture.d.ts +2 -0
- package/dist/hooks/magic-context/auto-search-long-lock-review.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/auto-search-omp-host-review.fixture.d.ts +4 -0
- package/dist/hooks/magic-context/auto-search-omp-host-review.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/auto-search-omp-loader.fixture.d.ts +3 -0
- package/dist/hooks/magic-context/auto-search-omp-loader.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/auto-search-runner.d.ts +1 -1
- package/dist/hooks/magic-context/auto-search-runner.d.ts.map +1 -1
- package/dist/hooks/magic-context/auto-search-snapshot.fixture.d.ts +4 -0
- package/dist/hooks/magic-context/auto-search-snapshot.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/auto-search-worker-client.d.ts +98 -0
- package/dist/hooks/magic-context/auto-search-worker-client.d.ts.map +1 -0
- package/dist/hooks/magic-context/auto-search-worker.d.ts +2 -0
- package/dist/hooks/magic-context/auto-search-worker.d.ts.map +1 -0
- package/dist/hooks/magic-context/caveman-cleanup.d.ts.map +1 -1
- package/dist/hooks/magic-context/command-handler.d.ts +1 -0
- package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-incremental.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-recomp.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-types.d.ts +3 -5
- package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner.d.ts +2 -1
- package/dist/hooks/magic-context/compartment-runner.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-trigger.d.ts +3 -1
- package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
- package/dist/hooks/magic-context/event-handler.d.ts +1 -1
- package/dist/hooks/magic-context/event-handler.d.ts.map +1 -1
- package/dist/hooks/magic-context/event-resolvers.d.ts.map +1 -1
- package/dist/hooks/magic-context/execute-status.d.ts.map +1 -1
- package/dist/hooks/magic-context/final-wire-token-estimate.d.ts +2 -0
- package/dist/hooks/magic-context/final-wire-token-estimate.d.ts.map +1 -1
- package/dist/hooks/magic-context/heuristic-cleanup.d.ts.map +1 -1
- package/dist/hooks/magic-context/historian-drain-gate.d.ts +11 -0
- package/dist/hooks/magic-context/historian-drain-gate.d.ts.map +1 -0
- package/dist/hooks/magic-context/hook.d.ts +3 -2
- package/dist/hooks/magic-context/hook.d.ts.map +1 -1
- package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
- package/dist/hooks/magic-context/latest-assistant-turn.d.ts +25 -0
- package/dist/hooks/magic-context/latest-assistant-turn.d.ts.map +1 -0
- package/dist/hooks/magic-context/latest-thinking-recovery.d.ts +61 -0
- package/dist/hooks/magic-context/latest-thinking-recovery.d.ts.map +1 -0
- package/dist/hooks/magic-context/lkg-persist.d.ts +4 -3
- package/dist/hooks/magic-context/lkg-persist.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-replay.d.ts +13 -8
- package/dist/hooks/magic-context/lkg-replay.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-slot.d.ts +139 -2
- package/dist/hooks/magic-context/lkg-slot.d.ts.map +1 -1
- package/dist/hooks/magic-context/message-search-accepting-silent-worker.fixture.d.ts +2 -0
- package/dist/hooks/magic-context/message-search-accepting-silent-worker.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/module-wire.d.ts.map +1 -1
- package/dist/hooks/magic-context/oc-stall-r2-warmup-worker.fixture.d.ts +2 -0
- package/dist/hooks/magic-context/oc-stall-r2-warmup-worker.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/oc-stall-search-review.fixture.d.ts +2 -0
- package/dist/hooks/magic-context/oc-stall-search-review.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/opencode-proven-floor.d.ts +6 -0
- package/dist/hooks/magic-context/opencode-proven-floor.d.ts.map +1 -0
- package/dist/hooks/magic-context/opencode1-to-model-messages.fixture.d.ts +63 -0
- package/dist/hooks/magic-context/opencode1-to-model-messages.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/pass-outcome.d.ts.map +1 -1
- package/dist/hooks/magic-context/protected-tail-boundary.d.ts.map +1 -1
- package/dist/hooks/magic-context/provider-visible-parts.d.ts +45 -0
- package/dist/hooks/magic-context/provider-visible-parts.d.ts.map +1 -0
- package/dist/hooks/magic-context/raw-ordinal-warmup-silent-worker.fixture.d.ts +2 -0
- package/dist/hooks/magic-context/raw-ordinal-warmup-silent-worker.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/raw-ordinal-warmup-worker.d.ts +2 -0
- package/dist/hooks/magic-context/raw-ordinal-warmup-worker.d.ts.map +1 -0
- package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts +87 -0
- package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts.map +1 -0
- package/dist/hooks/magic-context/read-session-chunk.d.ts +12 -0
- package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
- package/dist/hooks/magic-context/read-session-db.d.ts.map +1 -1
- package/dist/hooks/magic-context/read-session-formatting.d.ts +5 -0
- package/dist/hooks/magic-context/read-session-formatting.d.ts.map +1 -1
- package/dist/hooks/magic-context/read-session-raw.d.ts +83 -1
- package/dist/hooks/magic-context/read-session-raw.d.ts.map +1 -1
- package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts.map +1 -1
- package/dist/hooks/magic-context/reasoning-budget-status.d.ts +15 -0
- package/dist/hooks/magic-context/reasoning-budget-status.d.ts.map +1 -0
- package/dist/hooks/magic-context/reasoning-budget.d.ts +40 -0
- package/dist/hooks/magic-context/reasoning-budget.d.ts.map +1 -0
- package/dist/hooks/magic-context/reasoning-removal.d.ts +6 -6
- package/dist/hooks/magic-context/reasoning-removal.d.ts.map +1 -1
- package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
- package/dist/hooks/magic-context/sentinel.d.ts +45 -1
- package/dist/hooks/magic-context/sentinel.d.ts.map +1 -1
- package/dist/hooks/magic-context/strip-content.d.ts +21 -5
- package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
- package/dist/hooks/magic-context/system-prompt-hash.d.ts +1 -0
- package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
- package/dist/hooks/magic-context/tag-messages.d.ts +21 -0
- package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
- package/dist/hooks/magic-context/tag-owner-warmup.d.ts +6 -0
- package/dist/hooks/magic-context/tag-owner-warmup.d.ts.map +1 -0
- package/dist/hooks/magic-context/tail-hygiene-walk.d.ts.map +1 -1
- package/dist/hooks/magic-context/token-count-exact.d.ts +35 -0
- package/dist/hooks/magic-context/token-count-exact.d.ts.map +1 -0
- package/dist/hooks/magic-context/tool-drop-target.d.ts +5 -0
- package/dist/hooks/magic-context/tool-drop-target.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform-compartment-phase.d.ts +3 -28
- package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +28 -6
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform.d.ts +11 -3
- package/dist/hooks/magic-context/transform.d.ts.map +1 -1
- package/dist/hooks/magic-context/wrapup-orchestrator.d.ts.map +1 -1
- package/dist/{index-hpecdzec.js → index-0an7742d.js} +6820 -6587
- package/dist/index-0qhce371.js +120 -0
- package/dist/{index-q6hef7fh.js → index-0sahzkwr.js} +6 -19
- package/dist/{index-k5bdx1bx.js → index-0w56v4fm.js} +3 -5
- package/dist/index-14cjxt20.js +819 -0
- package/dist/{v2/server-51dv1pr5.js → index-1qb0z7wa.js} +301 -27
- package/dist/index-2bvekkfy.js +11 -0
- package/dist/{index-sj29b3z2.js → index-2y0s2hep.js} +3 -3
- package/dist/index-4dhv7mqz.js +131 -0
- package/dist/{index-b35pxds2.js → index-58e3y90n.js} +1 -18
- package/dist/index-5zygecde.js +152 -0
- package/dist/{index-sjthx78w.js → index-692jzy0p.js} +16879 -22907
- package/dist/index-72nhv486.js +2307 -0
- package/dist/index-7jzrrxap.js +931 -0
- package/dist/index-7mx8v0pw.js +3591 -0
- package/dist/index-8ajstryz.js +18 -0
- package/dist/{index-sfpzqvdz.js → index-8cd2j99z.js} +2 -3
- package/dist/{index-hybnrwq0.js → index-8j7gqj40.js} +131 -128
- package/dist/index-bdckkfw6.js +3261 -0
- package/dist/{index-8x2v7gg9.js → index-bhvjj0ys.js} +158 -2455
- package/dist/index-c43kr12f.js +3030 -0
- package/dist/index-cb7emxgj.js +984 -0
- package/dist/index-d9vfe7xq.js +16 -0
- package/dist/{index-5gq3b2ya.js → index-db7zwa3v.js} +147 -209
- package/dist/index-dhwzyd54.js +1142 -0
- package/dist/{index-8da2zjhz.js → index-eeezr5zz.js} +9 -7
- package/dist/{index-pkbcrdqs.js → index-f0h6xwqm.js} +3412 -4552
- package/dist/index-fb3zxn06.js +13 -0
- package/dist/index-fbv1dn35.js +171 -0
- package/dist/index-fr0wbhdn.js +43 -0
- package/dist/{index-mc22ayvf.js → index-ghc9f0n7.js} +11 -9
- package/dist/{index-fzbvakh0.js → index-jcbd3znx.js} +3 -3
- package/dist/{index-5p8jdswx.js → index-k1xb52kd.js} +20 -13
- package/dist/index-k9nnwad5.js +3532 -0
- package/dist/{v2/server-fg34g6a5.js → index-kb9nn0a0.js} +309 -52
- package/dist/index-knh4y330.js +566 -0
- package/dist/{index-q4yp4b52.js → index-mfkzp7qj.js} +28 -28
- package/dist/{index-sgthv3f7.js → index-mmyh6d8f.js} +4 -4
- package/dist/index-pavzsdc6.js +17 -0
- package/dist/{index-0d3g3461.js → index-pdecwzrd.js} +19 -16
- package/dist/index-pg50n748.js +1060 -0
- package/dist/index-q2tqeqde.js +2106 -0
- package/dist/index-q7h7csab.js +3469 -0
- package/dist/index-qt1qqasc.js +22 -0
- package/dist/{index-majxda46.js → index-ty64eqcn.js} +28 -18
- package/dist/{index-7qw742ev.js → index-yq8n9qcb.js} +25 -44
- package/dist/{index-sfnj6h8h.js → index-z8e0psj8.js} +20 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1061 -260
- package/dist/logger-d3wex3dz.js +20 -0
- package/dist/message-index-bounded-7ezbgddp.js +124 -0
- package/dist/{v2/message-time-backfill-r6qkem1x.js → message-time-backfill-brbd63hv.js} +8 -6
- package/dist/migration-worker.js +25 -16
- package/dist/{model-resolution-xhfmyyvy.js → model-resolution-nx97z3x7.js} +1 -1
- package/dist/plugin/dream-timer.d.ts +1 -1
- package/dist/plugin/dream-timer.d.ts.map +1 -1
- package/dist/plugin/hooks/create-session-hooks.d.ts +3 -1
- package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
- package/dist/plugin/host-stall-profiler-report.d.ts +2 -0
- package/dist/plugin/host-stall-profiler-report.d.ts.map +1 -0
- package/dist/plugin/host-stall-profiler.d.ts +3 -0
- package/dist/plugin/host-stall-profiler.d.ts.map +1 -0
- package/dist/plugin/messages-transform.d.ts +21 -19
- package/dist/plugin/messages-transform.d.ts.map +1 -1
- package/dist/plugin/rpc-handlers.d.ts.map +1 -1
- package/dist/plugin/tool-registry.d.ts.map +1 -1
- package/dist/project-embedding-registry-7qzptcw7.js +88 -0
- package/dist/raw-ordinal-warmup-worker.js +60 -0
- package/dist/{read-session-chunk-egz7r68d.js → read-session-chunk-6k83m4fj.js} +15 -9
- package/dist/read-session-raw-3g9qy1xa.js +58 -0
- package/dist/recomp-orchestrator-d3fp1cy0.js +57 -0
- package/dist/{v2/safe-notification-target-eb1n1vfb.js → safe-notification-target-5ffqq32m.js} +4 -2
- package/dist/search-epax1ecv.js +45 -0
- package/dist/{v2/send-session-notification-qs0j78v6.js → send-session-notification-erecz4y4.js} +10 -6
- package/dist/shared/auto-search-lifecycle.d.ts +7 -0
- package/dist/shared/auto-search-lifecycle.d.ts.map +1 -0
- package/dist/shared/conflict-detector.d.ts.map +1 -1
- package/dist/shared/historian-tool-expansions.d.ts +1 -1
- package/dist/shared/historian-tool-expansions.d.ts.map +1 -1
- package/dist/shared/historian-tool-template.d.ts +2 -2
- package/dist/shared/historian-tool-template.d.ts.map +1 -1
- package/dist/shared/host-stall-profiler-bun.d.ts +46 -0
- package/dist/shared/host-stall-profiler-bun.d.ts.map +1 -0
- package/dist/shared/host-stall-profiler-common.d.ts +58 -0
- package/dist/shared/host-stall-profiler-common.d.ts.map +1 -0
- package/dist/shared/host-stall-profiler-node.d.ts +36 -0
- package/dist/shared/host-stall-profiler-node.d.ts.map +1 -0
- package/dist/shared/host-stall-profiler-report.d.ts +68 -0
- package/dist/shared/host-stall-profiler-report.d.ts.map +1 -0
- package/dist/shared/host-stall-profiler.d.ts +5 -0
- package/dist/shared/host-stall-profiler.d.ts.map +1 -0
- package/dist/shared/model-resolution.d.ts +2 -3
- package/dist/shared/model-resolution.d.ts.map +1 -1
- package/dist/shared/sqlite.d.ts +46 -1
- package/dist/shared/sqlite.d.ts.map +1 -1
- package/dist/shared/stable-json.d.ts.map +1 -1
- package/dist/shared/status-view.d.ts.map +1 -1
- package/dist/shared/user-facing-codes.d.ts +0 -5
- package/dist/shared/user-facing-codes.d.ts.map +1 -1
- package/dist/shared/window-geometry.d.ts +4 -0
- package/dist/shared/window-geometry.d.ts.map +1 -1
- package/dist/sqlite-context-pragmas-mv9jqwjh.js +6 -0
- package/dist/sqlite-mhjkerzq.js +46 -0
- package/dist/storage-memory-07fx57k6.js +71 -0
- package/dist/storage-tags-d3b0v2ss.js +131 -0
- package/dist/{task-config-v81k8jvk.js → task-config-cgpg0nvh.js} +2 -2
- package/dist/tools/ctx-expand/render.d.ts.map +1 -1
- package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
- package/dist/tools/ctx-note/constants.d.ts +4 -0
- package/dist/tools/ctx-note/constants.d.ts.map +1 -1
- package/dist/tools/ctx-note/tools.d.ts +1 -0
- package/dist/tools/ctx-note/tools.d.ts.map +1 -1
- package/dist/tools/ctx-search/tools.d.ts.map +1 -1
- package/dist/tools/parameter-descriptions.d.ts +2 -2
- package/dist/tools/parameter-descriptions.d.ts.map +1 -1
- package/dist/{transform-postprocess-phase-bqhz6vdr.js → transform-postprocess-phase-spcy2qre.js} +35 -17
- package/dist/transformers-node-wasm.js +18415 -18415
- package/dist/v2/auto-search-worker.js +112 -0
- package/dist/v2/{context-zecmzk5s.js → context-sf98kstd.js} +8378 -8530
- package/dist/v2/{derive-budgets-kdgp4s3r.js → derive-budgets-3vc0y84t.js} +4 -3
- package/dist/v2/embedding-activity-g1dhes6g.js +10 -0
- package/dist/v2/embedding-backfill-vn8g1nh1.js +21 -0
- package/dist/v2/embedding-cache-mgyr73ef.js +16 -0
- package/dist/v2/embedding-worker.js +12 -9
- package/dist/v2/fold/host-media.d.ts +4 -0
- package/dist/v2/fold/host-media.d.ts.map +1 -1
- package/dist/v2/fold/memory-cache.d.ts +70 -0
- package/dist/v2/fold/memory-cache.d.ts.map +1 -0
- package/dist/v2/fold/native-codec.d.ts +10 -0
- package/dist/v2/fold/native-codec.d.ts.map +1 -0
- package/dist/v2/fold/native-replay.d.ts +58 -0
- package/dist/v2/fold/native-replay.d.ts.map +1 -0
- package/dist/v2/fold/policy.d.ts +24 -0
- package/dist/v2/fold/policy.d.ts.map +1 -0
- package/dist/v2/harness-e4avh192.js +10 -0
- package/dist/v2/hidden-completion.d.ts.map +1 -1
- package/dist/v2/hooks/context.d.ts +2 -2
- package/dist/v2/hooks/context.d.ts.map +1 -1
- package/dist/v2/hooks/dream-manual.d.ts +1 -1
- package/dist/v2/hooks/dream-manual.d.ts.map +1 -1
- package/dist/v2/hooks/dream-timer.d.ts.map +1 -1
- package/dist/v2/hooks/dream-trigger.d.ts +1 -2
- package/dist/v2/hooks/dream-trigger.d.ts.map +1 -1
- package/dist/v2/hooks/payload.d.ts.map +1 -1
- package/dist/v2/hooks/tools.d.ts.map +1 -1
- package/dist/v2/hooks/types.d.ts +6 -0
- package/dist/v2/hooks/types.d.ts.map +1 -1
- package/dist/v2/logger-mxd0ym09.js +19 -0
- package/dist/v2/message-index-bounded-dy3s2k1e.js +123 -0
- package/dist/{message-time-backfill-68gj6t3e.js → v2/message-time-backfill-gtx1pwk1.js} +7 -7
- package/dist/v2/migration-worker.js +24 -15
- package/dist/v2/{model-resolution-xhfmyyvy.js → model-resolution-nx97z3x7.js} +1 -1
- package/dist/v2/project-embedding-registry-1tgba5dv.js +86 -0
- package/dist/v2/raw-ordinal-warmup-worker.js +60 -0
- package/dist/v2/{read-session-chunk-8vjp6581.js → read-session-chunk-rh4khdkv.js} +14 -8
- package/dist/v2/read-session-raw-bsbmf0vj.js +57 -0
- package/dist/v2/recomp-orchestrator-az61rfcg.js +57 -0
- package/dist/{safe-notification-target-43r8jsxw.js → v2/safe-notification-target-73ax1p5v.js} +3 -3
- package/dist/v2/search-nzkwrc6n.js +45 -0
- package/dist/{send-session-notification-dyw42dtr.js → v2/send-session-notification-6km439kn.js} +9 -7
- package/dist/{index-5eqk6z3s.js → v2/server-1r6pmz4f.js} +301 -27
- package/dist/v2/server-2bvekkfy.js +11 -0
- package/dist/v2/server-2fbhp79z.js +3205 -0
- package/dist/v2/{server-ajzeteqw.js → server-2ra6pwf3.js} +1 -18
- package/dist/v2/server-4dhv7mqz.js +131 -0
- package/dist/v2/{server-xa4xe3rv.js → server-4k748ke6.js} +11 -1053
- package/dist/v2/{server-vs5gpnd4.js → server-52awr2mw.js} +81 -145
- package/dist/v2/{server-1qbnzc80.js → server-5m3dt5r1.js} +136 -148
- package/dist/v2/server-686jg6eb.js +3508 -0
- package/dist/v2/server-7jzrrxap.js +931 -0
- package/dist/v2/server-7wwc2nga.js +3023 -0
- package/dist/v2/server-8ajstryz.js +18 -0
- package/dist/v2/{server-sfpzqvdz.js → server-8cd2j99z.js} +2 -3
- package/dist/v2/server-8pyt7hev.js +3408 -0
- package/dist/v2/server-8tqanswc.js +984 -0
- package/dist/v2/{server-14vq4kpm.js → server-aan4q8mx.js} +3 -3
- package/dist/v2/server-d9vfe7xq.js +16 -0
- package/dist/v2/server-e0vdaae2.js +3591 -0
- package/dist/v2/server-ezhze64f.js +1048 -0
- package/dist/v2/server-fb3zxn06.js +13 -0
- package/dist/v2/server-fr0wbhdn.js +43 -0
- package/dist/v2/server-g5r0n3b6.js +1137 -0
- package/dist/v2/server-gjcr4w98.js +154 -0
- package/dist/v2/server-k228xhjg.js +171 -0
- package/dist/v2/{server-jc7y02q0.js → server-k8x2rbxc.js} +5119 -10948
- package/dist/{index-fg34g6a5.js → v2/server-kb9nn0a0.js} +309 -52
- package/dist/v2/{server-g0fjrkta.js → server-mfkzp7qj.js} +28 -28
- package/dist/v2/server-pavzsdc6.js +17 -0
- package/dist/v2/server-psqc7e9n.js +2106 -0
- package/dist/v2/server-qt1qqasc.js +22 -0
- package/dist/v2/server-qye6ykf7.js +120 -0
- package/dist/v2/{server-qdjnb2z1.js → server-r5p3b1wy.js} +11 -9
- package/dist/v2/server-sggvvzhb.js +759 -0
- package/dist/v2/{server-y8maxeft.js → server-v06jcv0w.js} +16 -13
- package/dist/v2/server-vqpf3167.js +1048 -0
- package/dist/v2/{server-c5gz8wph.js → server-x2g40a71.js} +2048 -2059
- package/dist/v2/{server-wvjvfhck.js → server-xdfwt6kh.js} +20 -16
- package/dist/v2/{server-mcfawjgc.js → server-xxm59eww.js} +25 -44
- package/dist/v2/server-yczc713m.js +564 -0
- package/dist/v2/{server-3n4q9xme.js → server-z2037m6z.js} +4 -4
- package/dist/v2/{server-e29d7p7c.js → server-zm570tr2.js} +166 -160
- package/dist/v2/{server-6r257mf5.js → server-zxhgvsf9.js} +3 -3
- package/dist/v2/server.js +16 -14
- package/dist/v2/sqlite-context-pragmas-mv9jqwjh.js +6 -0
- package/dist/v2/sqlite-mhjkerzq.js +46 -0
- package/dist/v2/storage-memory-07fx57k6.js +71 -0
- package/dist/v2/storage-tags-w4tv77sn.js +130 -0
- package/dist/v2/store-reader.d.ts +16 -0
- package/dist/v2/store-reader.d.ts.map +1 -1
- package/dist/v2/{task-config-tbndqyny.js → task-config-x0hq3qfd.js} +2 -2
- package/dist/v2/transformers-node-wasm.js +18415 -18415
- package/dist/v2/tui/index.d.ts.map +1 -1
- package/dist/v2/tui/types.d.ts +1 -10
- package/dist/v2/tui/types.d.ts.map +1 -1
- package/dist/v2/{wrapup-orchestrator-0snhvwcv.js → wrapup-orchestrator-mz7efs7w.js} +51 -27
- package/dist/wrapup-orchestrator-amzta1t4.js +44 -0
- package/package.json +4 -3
- package/src/agents/magic-context-prompt.ts +27 -2
- package/src/agents/smart-notes-enabled.test.ts +294 -0
- package/src/agents/smart-notes-on.golden.json +70 -0
- package/src/config/index.test.ts +67 -1
- package/src/config/index.ts +8 -0
- package/src/config/latch-permanence-guard.test.ts +4 -0
- package/src/config/live-run-config.test.ts +37 -1
- package/src/config/live-run-config.ts +28 -0
- package/src/config/migrate-config-location.ts +10 -3
- package/src/config/mural-model-deprecation.ts +24 -0
- package/src/config/project-security.hostile-matrix.test.ts +4 -44
- package/src/config/project-security.test.ts +9 -14
- package/src/config/project-security.ts +13 -55
- package/src/config/schema/magic-context.test.ts +6 -5
- package/src/config/schema/magic-context.ts +34 -16
- package/src/features/magic-context/dreamer/task-registry.ts +6 -0
- package/src/shared/auto-search-lifecycle.ts +27 -0
- package/src/shared/conflict-detector.test.ts +56 -0
- package/src/shared/conflict-detector.ts +16 -5
- package/src/shared/historian-tool-defaults.json +6 -6
- package/src/shared/historian-tool-expansions.ts +65 -8
- package/src/shared/historian-tool-preview-defaults.json +13 -0
- package/src/shared/historian-tool-template.ts +48 -14
- package/src/shared/host-stall-profiler-bun.ts +358 -0
- package/src/shared/host-stall-profiler-common.ts +159 -0
- package/src/shared/host-stall-profiler-node.test.ts +234 -0
- package/src/shared/host-stall-profiler-node.ts +274 -0
- package/src/shared/host-stall-profiler-report.ts +248 -0
- package/src/shared/host-stall-profiler.ts +57 -0
- package/src/shared/model-resolution.test.ts +54 -17
- package/src/shared/model-resolution.ts +6 -17
- package/src/shared/sqlite-640-review-r2.test.ts +136 -0
- package/src/shared/sqlite-640-review.test.ts +183 -0
- package/src/shared/sqlite-acquisition-routing.test.ts +18 -0
- package/src/shared/sqlite.test.ts +52 -0
- package/src/shared/sqlite.ts +423 -37
- package/src/shared/stable-json-linear.test.ts +109 -0
- package/src/shared/stable-json.ts +37 -7
- package/src/shared/status-view.test.ts +6 -1
- package/src/shared/status-view.ts +15 -1
- package/src/shared/tag-transcript.ts +6 -0
- package/src/shared/user-facing-codes.ts +2 -6
- package/src/shared/window-geometry.ts +10 -0
- package/src/shared/write-transaction-attribution.test.ts +2 -2
- package/src/v2/tui/host-contract.test.ts +41 -67
- package/src/v2/tui/index.ts +6 -214
- package/src/v2/tui/types.ts +5 -17
- package/dist/features/magic-context/checkout-claim-fake-subc.test-support.d.ts +0 -45
- package/dist/features/magic-context/checkout-claim-fake-subc.test-support.d.ts.map +0 -1
- package/dist/features/magic-context/checkout-claim.d.ts +0 -155
- package/dist/features/magic-context/checkout-claim.d.ts.map +0 -1
- package/dist/index-3h0ybwah.js +0 -6540
- package/dist/index-r5hmbx3t.js +0 -7773
- package/dist/recomp-orchestrator-y15j0rb9.js +0 -39
- package/dist/v2/recomp-orchestrator-8ejxvrzz.js +0 -39
- package/dist/v2/server-frbm99q5.js +0 -7698
- package/dist/v2/server-qp5hx1ad.js +0 -6366
- package/dist/wrapup-orchestrator-39amhv9s.js +0 -26
- /package/dist/{index-en1k8h8m.js → index-2pp04pmg.js} +0 -0
- /package/dist/v2/{index-en1k8h8m.js → index-2pp04pmg.js} +0 -0
|
@@ -38,11 +38,10 @@ describe("MagicContextConfigSchema", () => {
|
|
|
38
38
|
fail_closed_blocking: true,
|
|
39
39
|
transform_mode: "ts",
|
|
40
40
|
storage: { enforce_private_permissions: true },
|
|
41
|
-
smart_notes: { retina_handoff: false },
|
|
41
|
+
smart_notes: { enabled: true, retina_handoff: false },
|
|
42
42
|
cache_ttl: "5m",
|
|
43
43
|
prompt_surface: { default: "full" },
|
|
44
44
|
execute_threshold_percentage: 65,
|
|
45
|
-
clear_reasoning_age: 50,
|
|
46
45
|
history_budget_percentage: DEFAULT_HISTORY_BUDGET_PERCENTAGE,
|
|
47
46
|
historian_timeout_ms: DEFAULT_HISTORIAN_TIMEOUT_MS,
|
|
48
47
|
embedding: {
|
|
@@ -145,7 +144,7 @@ describe("MagicContextConfigSchema", () => {
|
|
|
145
144
|
overlay: false,
|
|
146
145
|
},
|
|
147
146
|
smart_drops: false,
|
|
148
|
-
smart_notes: { retina_handoff: false },
|
|
147
|
+
smart_notes: { enabled: true, retina_handoff: false },
|
|
149
148
|
shadow_embedding: {
|
|
150
149
|
enabled: false,
|
|
151
150
|
},
|
|
@@ -701,8 +700,10 @@ describe("MagicContextConfigSchema", () => {
|
|
|
701
700
|
).toBe(30000);
|
|
702
701
|
});
|
|
703
702
|
|
|
704
|
-
it("
|
|
705
|
-
expect(
|
|
703
|
+
it("accepts deprecated clear_reasoning_age without applying its old validation", () => {
|
|
704
|
+
expect(
|
|
705
|
+
MagicContextConfigSchema.parse({ clear_reasoning_age: 9 }).keep_reasoning_tokens,
|
|
706
|
+
).toBeUndefined();
|
|
706
707
|
});
|
|
707
708
|
|
|
708
709
|
it("rejects historian_timeout_ms below minimum", () => {
|
|
@@ -682,7 +682,7 @@ export const HistorianConfigSchema = AgentMetadataSchema.extend({
|
|
|
682
682
|
)
|
|
683
683
|
.optional()
|
|
684
684
|
.describe(
|
|
685
|
-
'Readable historian tool expansions, keyed by exact host tool name. Templates override built-in defaults; false disables an expansion. Supports ${input.path}, ${output.path}, bare ${output}, array [N], [*].field, .each("${field}"), .join("separator"), .count and final .truncate(N). Missing fields are empty;
|
|
685
|
+
'Readable historian tool expansions, keyed by exact host tool name. Templates override built-in defaults; false disables an expansion. Supports ${input.path}, ${output.path}, bare ${output}, array [N], [*].field, .each("${field}"), .join("separator"), .count and final .truncate(N). Missing fields are empty. Historian text and lists have no implicit caps; explicit .truncate(N) keeps complete sentences and marks omitted characters, or emits only the marker if no sentence fits. When the ctx_expand history-recovery tool is called in verbose mode, its tool-call previews retain their original built-in templates and limits (300 characters per placeholder, 10 list elements, 1000 characters per expansion). Valid in user and project config; never changes the wire or default ctx_expand transcript.',
|
|
686
686
|
),
|
|
687
687
|
opencode: OpenCodeHarnessBlockSchema.optional(),
|
|
688
688
|
pi: PiHarnessBlockSchema.optional(),
|
|
@@ -917,9 +917,9 @@ export interface ShadowEmbeddingConfig {
|
|
|
917
917
|
|
|
918
918
|
export interface MuralConfig {
|
|
919
919
|
enabled: boolean;
|
|
920
|
-
/**
|
|
921
|
-
*
|
|
922
|
-
model?:
|
|
920
|
+
/** Deprecated and ignored: compress-cues takes its model from each
|
|
921
|
+
* harness's dreamer settings, like every other dreamer task. */
|
|
922
|
+
model?: unknown;
|
|
923
923
|
}
|
|
924
924
|
|
|
925
925
|
export interface MagicContextConfig {
|
|
@@ -943,6 +943,8 @@ export interface MagicContextConfig {
|
|
|
943
943
|
historian?: HistorianConfig;
|
|
944
944
|
dreamer?: DreamerConfig;
|
|
945
945
|
smart_notes: {
|
|
946
|
+
/** Enable smart-note authoring and checks for the user; read at process startup. */
|
|
947
|
+
enabled: boolean;
|
|
946
948
|
/** Flip ownership of authoring-compiled conditions from dreamer to retina. */
|
|
947
949
|
retina_handoff: boolean;
|
|
948
950
|
};
|
|
@@ -963,7 +965,8 @@ export interface MagicContextConfig {
|
|
|
963
965
|
protected_tokens?: number;
|
|
964
966
|
protected_tags?: number;
|
|
965
967
|
protected_tools: Record<string, number>;
|
|
966
|
-
clear_reasoning_age
|
|
968
|
+
clear_reasoning_age?: unknown;
|
|
969
|
+
keep_reasoning_tokens?: number | Record<string, number>;
|
|
967
970
|
history_budget_percentage: number;
|
|
968
971
|
historian_timeout_ms: number;
|
|
969
972
|
commit_cluster_trigger: {
|
|
@@ -1120,13 +1123,12 @@ export const MagicContextConfigSchema = z
|
|
|
1120
1123
|
.object({
|
|
1121
1124
|
enabled: z.boolean().default(false),
|
|
1122
1125
|
model: z
|
|
1123
|
-
.
|
|
1124
|
-
.trim()
|
|
1125
|
-
.min(1)
|
|
1126
|
+
.unknown()
|
|
1126
1127
|
.optional()
|
|
1127
1128
|
.describe(
|
|
1128
|
-
"
|
|
1129
|
-
)
|
|
1129
|
+
"Deprecated: ignored. compress-cues now uses the dreamer model for each harness, like every other dreamer task; override it with dreamer.opencode.tasks.compress-cues.model (or the pi/omp equivalent). Remove this key; it no longer does anything.",
|
|
1130
|
+
)
|
|
1131
|
+
.meta({ deprecated: true }),
|
|
1130
1132
|
})
|
|
1131
1133
|
.default({ enabled: false })
|
|
1132
1134
|
.describe(
|
|
@@ -1183,6 +1185,12 @@ export const MagicContextConfigSchema = z
|
|
|
1183
1185
|
),
|
|
1184
1186
|
smart_notes: z
|
|
1185
1187
|
.object({
|
|
1188
|
+
enabled: z
|
|
1189
|
+
.boolean()
|
|
1190
|
+
.default(true)
|
|
1191
|
+
.describe(
|
|
1192
|
+
"Enable smart-note authoring and condition evaluation. User-level only: tool definitions are process-wide. Changes require a host restart and rebuild each session's cached prompt once. Pending notes remain stored and unchecked; already-ready notes still surface.",
|
|
1193
|
+
),
|
|
1186
1194
|
retina_handoff: z
|
|
1187
1195
|
.boolean()
|
|
1188
1196
|
.default(false)
|
|
@@ -1190,7 +1198,7 @@ export const MagicContextConfigSchema = z
|
|
|
1190
1198
|
"When true, dreamer skips smart notes whose surface conditions compiled to retina provider configs at authoring time. Default false keeps both paths active until the retina consumer is deployed.",
|
|
1191
1199
|
),
|
|
1192
1200
|
})
|
|
1193
|
-
.default({ retina_handoff: false })
|
|
1201
|
+
.default({ enabled: true, retina_handoff: false })
|
|
1194
1202
|
.describe("Smart-note ownership transition controls."),
|
|
1195
1203
|
cache_ttl: z
|
|
1196
1204
|
.union([z.string(), z.object({ default: z.string() }).catchall(z.string())])
|
|
@@ -1263,10 +1271,21 @@ export const MagicContextConfigSchema = z
|
|
|
1263
1271
|
)
|
|
1264
1272
|
.meta({ deprecated: true }),
|
|
1265
1273
|
clear_reasoning_age: z
|
|
1266
|
-
.
|
|
1267
|
-
.
|
|
1268
|
-
.
|
|
1269
|
-
.
|
|
1274
|
+
.unknown()
|
|
1275
|
+
.optional()
|
|
1276
|
+
.describe("Deprecated and ignored. Use keep_reasoning_tokens instead.")
|
|
1277
|
+
.meta({ deprecated: true }),
|
|
1278
|
+
keep_reasoning_tokens: z
|
|
1279
|
+
.union([
|
|
1280
|
+
z.number().int().min(0).max(1_000_000),
|
|
1281
|
+
z
|
|
1282
|
+
.object({ default: z.number().int().min(0).max(1_000_000).optional() })
|
|
1283
|
+
.catchall(z.number().int().min(0).max(1_000_000)),
|
|
1284
|
+
])
|
|
1285
|
+
.optional()
|
|
1286
|
+
.describe(
|
|
1287
|
+
"Reasoning tokens to keep on rebuilding passes. Number or per-model object; exact, shorter model keys, provider/*, then default. Omitted: fixed 10,000. 0 removes all eligible historical reasoning; newest and exempt steps always stay.",
|
|
1288
|
+
),
|
|
1270
1289
|
history_budget_percentage: z
|
|
1271
1290
|
.number()
|
|
1272
1291
|
.min(0.05)
|
|
@@ -1589,7 +1608,6 @@ export const MagicContextConfigSchema = z
|
|
|
1589
1608
|
/** Settings whose fresh values can be used by later agent runs without changing rendered prompt bytes. */
|
|
1590
1609
|
export const LIVE_RELOAD_CONFIG_PATHS = [
|
|
1591
1610
|
"cache_ttl",
|
|
1592
|
-
"mural.model",
|
|
1593
1611
|
"toast_duration_ms",
|
|
1594
1612
|
"historian.opencode.model",
|
|
1595
1613
|
"historian.opencode.fallback_models",
|
|
@@ -29,6 +29,12 @@ export const CANONICAL_DREAM_TASKS = [
|
|
|
29
29
|
|
|
30
30
|
export type DreamTaskName = (typeof CANONICAL_DREAM_TASKS)[number];
|
|
31
31
|
|
|
32
|
+
export function availableDreamTasks(smartNotesEnabled = true): DreamTaskName[] {
|
|
33
|
+
return CANONICAL_DREAM_TASKS.filter(
|
|
34
|
+
(task) => smartNotesEnabled || task !== "evaluate-smart-notes",
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
32
38
|
/** Prompt-token ceilings informed by docs/reports/dreamer-token-usage.md.
|
|
33
39
|
* Completed Gemini run usage predicts 20-memory mapping/verification batches
|
|
34
40
|
* at about 70% of their allowance
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const pending = new Map<string, Set<AbortController>>();
|
|
2
|
+
|
|
3
|
+
/** Cleanup cancels optional searches and backfill, not durable served decisions. */
|
|
4
|
+
export function registerAutoSearchWork(sessionId: string): {
|
|
5
|
+
signal: AbortSignal;
|
|
6
|
+
done: () => void;
|
|
7
|
+
} {
|
|
8
|
+
const controller = new AbortController();
|
|
9
|
+
const work = pending.get(sessionId) ?? new Set<AbortController>();
|
|
10
|
+
pending.set(sessionId, work);
|
|
11
|
+
work.add(controller);
|
|
12
|
+
return {
|
|
13
|
+
signal: controller.signal,
|
|
14
|
+
done: () => {
|
|
15
|
+
work.delete(controller);
|
|
16
|
+
if (pending.get(sessionId) === work && work.size === 0) pending.delete(sessionId);
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function cancelAutoSearchWork(sessionId?: string): void {
|
|
22
|
+
for (const [id, work] of pending) {
|
|
23
|
+
if (sessionId !== undefined && id !== sessionId) continue;
|
|
24
|
+
pending.delete(id);
|
|
25
|
+
for (const controller of work) controller.abort();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -37,11 +37,13 @@ describe("detectConflicts", () => {
|
|
|
37
37
|
OPENCODE_CONFIG_DIR: process.env.OPENCODE_CONFIG_DIR,
|
|
38
38
|
XDG_CONFIG_HOME: process.env.XDG_CONFIG_HOME,
|
|
39
39
|
OPENCODE_DISABLE_AUTOCOMPACT: process.env.OPENCODE_DISABLE_AUTOCOMPACT,
|
|
40
|
+
OPENCODE_DISABLE_PROJECT_CONFIG: process.env.OPENCODE_DISABLE_PROJECT_CONFIG,
|
|
40
41
|
HOME: process.env.HOME,
|
|
41
42
|
};
|
|
42
43
|
process.env.OPENCODE_CONFIG_DIR = userConfigDir;
|
|
43
44
|
process.env.HOME = homeDir;
|
|
44
45
|
delete process.env.XDG_CONFIG_HOME;
|
|
46
|
+
delete process.env.OPENCODE_DISABLE_PROJECT_CONFIG;
|
|
45
47
|
// Disable auto-compaction default during tests so we isolate plugin
|
|
46
48
|
// detection from compaction detection.
|
|
47
49
|
process.env.OPENCODE_DISABLE_AUTOCOMPACT = "1";
|
|
@@ -734,6 +736,60 @@ describe("detectConflicts", () => {
|
|
|
734
736
|
expect(result.conflicts.compactionAuto).toBe(false);
|
|
735
737
|
});
|
|
736
738
|
|
|
739
|
+
it("v1 boot fallback ignores project compaction when project config is disabled", async () => {
|
|
740
|
+
writeCompaction(globalDir, "opencode.json", { auto: false, prune: false });
|
|
741
|
+
writeCompaction(projectDir, "opencode.json", { auto: true, prune: true });
|
|
742
|
+
writeCompaction(join(projectDir, ".opencode"), "opencode.jsonc", {
|
|
743
|
+
auto: true,
|
|
744
|
+
prune: true,
|
|
745
|
+
});
|
|
746
|
+
const resolvedCompaction = await resolveCompactionForBoot(
|
|
747
|
+
{
|
|
748
|
+
config: { get: () => new Promise<never>(() => {}) },
|
|
749
|
+
},
|
|
750
|
+
20,
|
|
751
|
+
);
|
|
752
|
+
expect(resolvedCompaction).toBeNull();
|
|
753
|
+
|
|
754
|
+
for (const value of ["true", "1", "TRUE"]) {
|
|
755
|
+
process.env.OPENCODE_DISABLE_PROJECT_CONFIG = value;
|
|
756
|
+
const result = detectConflicts(projectDir, {
|
|
757
|
+
compactionEnabled: true,
|
|
758
|
+
hostGeneration: "v1",
|
|
759
|
+
resolvedCompaction,
|
|
760
|
+
});
|
|
761
|
+
expect(result.nativeCompaction).toEqual({ auto: false, prune: false });
|
|
762
|
+
expect(result.hasConflict).toBe(false);
|
|
763
|
+
}
|
|
764
|
+
});
|
|
765
|
+
|
|
766
|
+
it("v1 still reads project compaction when the project-disable flag is false", () => {
|
|
767
|
+
writeCompaction(globalDir, "opencode.json", { auto: false });
|
|
768
|
+
writeCompaction(projectDir, "opencode.jsonc", { auto: true });
|
|
769
|
+
for (const value of ["false", "0", ""]) {
|
|
770
|
+
process.env.OPENCODE_DISABLE_PROJECT_CONFIG = value;
|
|
771
|
+
const result = detectConflicts(projectDir, { compactionEnabled: true });
|
|
772
|
+
expect(result.nativeCompaction.auto).toBe(true);
|
|
773
|
+
expect(result.conflicts.compactionAuto).toBe(true);
|
|
774
|
+
}
|
|
775
|
+
});
|
|
776
|
+
|
|
777
|
+
it("v1 project-disable flag preserves explicit and user compaction layers", () => {
|
|
778
|
+
process.env.OPENCODE_DISABLE_PROJECT_CONFIG = "true";
|
|
779
|
+
writeCompaction(globalDir, "opencode.json", { auto: false });
|
|
780
|
+
const explicit = join(root, "explicit-opencode.json");
|
|
781
|
+
writeFileSync(explicit, JSON.stringify({ compaction: { auto: true } }));
|
|
782
|
+
process.env.OPENCODE_CONFIG = explicit;
|
|
783
|
+
expect(detectConflicts(projectDir).conflicts.compactionAuto).toBe(true);
|
|
784
|
+
|
|
785
|
+
delete process.env.OPENCODE_CONFIG;
|
|
786
|
+
writeCompaction(join(homeDir, ".opencode"), "opencode.json", { auto: true });
|
|
787
|
+
expect(detectConflicts(projectDir).conflicts.compactionAuto).toBe(true);
|
|
788
|
+
|
|
789
|
+
writeCompaction(launcherDir, "opencode.json", { auto: false });
|
|
790
|
+
expect(detectConflicts(projectDir).conflicts.compactionAuto).toBe(false);
|
|
791
|
+
});
|
|
792
|
+
|
|
737
793
|
it("v2 ranks the project .opencode overlay above global supplementary config", () => {
|
|
738
794
|
writeCompaction(launcherDir, "opencode.json", { auto: false });
|
|
739
795
|
writeCompaction(join(projectDir, ".opencode"), "opencode.json", { auto: true });
|
|
@@ -414,11 +414,22 @@ function openCodeConfigFileChain(
|
|
|
414
414
|
.flatMap((dir) => [join(dir, "opencode.json"), join(dir, "opencode.jsonc")]);
|
|
415
415
|
const explicitConfig = process.env.OPENCODE_CONFIG?.trim();
|
|
416
416
|
const explicit = explicitConfig ? [explicitConfig] : [];
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
417
|
+
// OpenCode 1 can ignore project opencode.json/jsonc and .opencode configs.
|
|
418
|
+
// If config.get() times out during bootstrap, compaction detection falls
|
|
419
|
+
// back here and must not read settings from those host-disabled files.
|
|
420
|
+
const disableProjectConfig = process.env.OPENCODE_DISABLE_PROJECT_CONFIG?.toLowerCase();
|
|
421
|
+
const skipProject =
|
|
422
|
+
hostGeneration === "v1" &&
|
|
423
|
+
(disableProjectConfig === "true" || disableProjectConfig === "1");
|
|
424
|
+
const direct = skipProject
|
|
425
|
+
? []
|
|
426
|
+
: [join(directory, "opencode.json"), join(directory, "opencode.jsonc")];
|
|
427
|
+
const projectSupplementary = skipProject
|
|
428
|
+
? []
|
|
429
|
+
: [
|
|
430
|
+
join(directory, ".opencode", "opencode.json"),
|
|
431
|
+
join(directory, ".opencode", "opencode.jsonc"),
|
|
432
|
+
];
|
|
422
433
|
|
|
423
434
|
const files =
|
|
424
435
|
hostGeneration === "v2"
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
"ctx_memory": "Memory ${input.action} ${input.category} ${input.ids}: ${input.content} → ${output.truncate(160)}",
|
|
4
4
|
"todowrite": "Todos (${input.todos.count}): ${input.todos.each(\"${status}: ${content}\")}",
|
|
5
5
|
"question": "Asked user: ${input.questions[*].question.join(\" / \")} → ${output}",
|
|
6
|
-
"task": "Task ${input.subagent_type}: ${input.prompt} → ${output.truncate(200)}",
|
|
7
|
-
"ask": "Asked: ${input.question
|
|
8
|
-
"peer_send": "PM
|
|
9
|
-
"board": "Board ${input.verb}: ${input.ops.each(\"${op} ${item}${lane.
|
|
10
|
-
"room": "Room ${input.action} ${input.
|
|
11
|
-
"work": "Work ${input.action} ${input.
|
|
6
|
+
"task": "Task ${input.subagent_type}: ${input.prompt.truncate(600)} → ${output.truncate(200)}",
|
|
7
|
+
"ask": "Asked: ${input.question} [options: ${input.options.join(\" / \")}] ${input.text}${input.resolution} → ${output.truncate(300)}",
|
|
8
|
+
"peer_send": "PM ${input.recipient}: ${input.message}",
|
|
9
|
+
"board": "Board ${input.verb}${input.board_lane}: ${input.ops.each(\"${op} ${lane_label} ${item}${props.text}${lane.items} ${state}${props.state}${lane.status}${id}${title}\")}",
|
|
10
|
+
"room": "Room ${input.action} ${input.room_label}: ${input.room_detail}",
|
|
11
|
+
"work": "Work ${input.action} ${input.title}${input.id}: ${input.prompt.truncate(600)}${input.notes.truncate(600)} → ${output.truncate(160)}",
|
|
12
12
|
"knowhow": "Looked up how-to: ${input.query}${input.id}"
|
|
13
13
|
}
|
|
@@ -1,18 +1,75 @@
|
|
|
1
1
|
import defaults from "./historian-tool-defaults.json";
|
|
2
|
+
import previewDefaults from "./historian-tool-preview-defaults.json";
|
|
2
3
|
import { renderToolTemplate, type ToolExpansionMap } from "./historian-tool-template";
|
|
3
4
|
|
|
4
5
|
export { defaults as DEFAULT_TOOL_EXPANSIONS };
|
|
5
|
-
|
|
6
|
+
|
|
7
|
+
// Room actions, private-message addresses and board lanes have multiple input
|
|
8
|
+
// shapes. Derive readable labels only for built-ins; configured template overrides
|
|
9
|
+
// keep the unmodified tool input.
|
|
10
|
+
function builtinInput(tool: string, input: unknown): unknown {
|
|
11
|
+
if (!input || typeof input !== "object") return input;
|
|
12
|
+
const i = input as Record<string, unknown>;
|
|
13
|
+
if (tool === "peer_send") {
|
|
14
|
+
const external = i.external as Record<string, unknown> | undefined;
|
|
15
|
+
const recipient = i.reply_to_pmid
|
|
16
|
+
? `reply to ${i.reply_to_pmid}`
|
|
17
|
+
: i.agent || i.agent_id
|
|
18
|
+
? `to ${i.agent || i.agent_id}`
|
|
19
|
+
: external?.session_id || i.session_id
|
|
20
|
+
? `to session ${external?.session_id || i.session_id}`
|
|
21
|
+
: "to unknown recipient";
|
|
22
|
+
return { ...i, recipient };
|
|
23
|
+
}
|
|
24
|
+
if (tool === "room") {
|
|
25
|
+
return {
|
|
26
|
+
...i,
|
|
27
|
+
room_label: i.room_id || i.title,
|
|
28
|
+
room_detail:
|
|
29
|
+
i.action === "create" || i.action === "invite"
|
|
30
|
+
? `invitees: ${renderToolTemplate("${input.invitees}", i)}`
|
|
31
|
+
: i.text,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (tool === "board") {
|
|
35
|
+
return {
|
|
36
|
+
...i,
|
|
37
|
+
board_lane: i.lane ? ` ${i.lane}` : "",
|
|
38
|
+
ops: Array.isArray(i.ops)
|
|
39
|
+
? i.ops.map((op) =>
|
|
40
|
+
op && typeof op === "object"
|
|
41
|
+
? {
|
|
42
|
+
...op,
|
|
43
|
+
lane_label:
|
|
44
|
+
typeof op.lane === "string"
|
|
45
|
+
? op.lane
|
|
46
|
+
: op.lane?.title || op.lane?.id,
|
|
47
|
+
}
|
|
48
|
+
: op,
|
|
49
|
+
)
|
|
50
|
+
: i.ops,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return input;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function expandToolPart(
|
|
57
|
+
part: unknown,
|
|
58
|
+
overrides?: ToolExpansionMap,
|
|
59
|
+
legacyPreview = false,
|
|
60
|
+
): string | null {
|
|
6
61
|
if (!part || typeof part !== "object") return null;
|
|
7
62
|
const p = part as Record<string, unknown>;
|
|
8
63
|
if (p.type !== "tool" || typeof p.tool !== "string") return null;
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
64
|
+
const builtinDefaults = legacyPreview ? previewDefaults : defaults;
|
|
65
|
+
const overridden = overrides && Object.hasOwn(overrides, p.tool);
|
|
66
|
+
const template = overridden
|
|
67
|
+
? overrides[p.tool]
|
|
68
|
+
: Object.hasOwn(builtinDefaults, p.tool)
|
|
69
|
+
? builtinDefaults[p.tool as keyof typeof defaults]
|
|
70
|
+
: undefined;
|
|
15
71
|
if (typeof template !== "string") return null;
|
|
16
72
|
const state = p.state as Record<string, unknown> | undefined;
|
|
17
|
-
|
|
73
|
+
const input = overridden || legacyPreview ? state?.input : builtinInput(p.tool, state?.input);
|
|
74
|
+
return renderToolTemplate(template, input, state?.output ?? state?.error, legacyPreview);
|
|
18
75
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"ctx_note": "Note ${input.action} ${input.note_ids}: ${input.content} → ${output.truncate(160)}",
|
|
3
|
+
"ctx_memory": "Memory ${input.action} ${input.category} ${input.ids}: ${input.content} → ${output.truncate(160)}",
|
|
4
|
+
"todowrite": "Todos (${input.todos.count}): ${input.todos.each(\"${status}: ${content}\")}",
|
|
5
|
+
"question": "Asked user: ${input.questions[*].question.join(\" / \")} → ${output}",
|
|
6
|
+
"task": "Task ${input.subagent_type}: ${input.prompt} → ${output.truncate(200)}",
|
|
7
|
+
"ask": "Asked: ${input.question.truncate(250)} [options: ${input.options.join(\" / \")}] ${input.resolution} → ${output.truncate(300)}",
|
|
8
|
+
"peer_send": "PM to ${input.agent}${input.agent_id}: ${input.message.truncate(400)}",
|
|
9
|
+
"board": "Board ${input.verb}: ${input.ops.each(\"${op} ${item}${lane.title} ${state}${lane.status}${props.text} ${lane.items[*].text}\")}",
|
|
10
|
+
"room": "Room ${input.action} ${input.room_id}: ${input.text.truncate(400)}",
|
|
11
|
+
"work": "Work ${input.action} ${input.id}: ${input.prompt_file}${input.prompt.truncate(200)}${input.notes.truncate(200)} → ${output.truncate(160)}",
|
|
12
|
+
"knowhow": "Looked up how-to: ${input.query}${input.id}"
|
|
13
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** A deliberately non-executable language for readable
|
|
1
|
+
/** A deliberately non-executable language for readable historian tool lines. */
|
|
2
2
|
export type ToolExpansionMap = Record<string, string | false>;
|
|
3
3
|
type Step = { field: string } | { index: number } | { project: string };
|
|
4
4
|
type Expression = {
|
|
@@ -6,7 +6,7 @@ type Expression = {
|
|
|
6
6
|
each?: Template;
|
|
7
7
|
join?: string;
|
|
8
8
|
count?: boolean;
|
|
9
|
-
cap
|
|
9
|
+
cap?: number;
|
|
10
10
|
};
|
|
11
11
|
type Template = Array<string | Expression>;
|
|
12
12
|
|
|
@@ -78,7 +78,7 @@ class Parser {
|
|
|
78
78
|
if (this.source[this.pos] === "(") return this.error();
|
|
79
79
|
} else break;
|
|
80
80
|
}
|
|
81
|
-
const expression: Expression = { steps
|
|
81
|
+
const expression: Expression = { steps };
|
|
82
82
|
if (this.take(".each(")) {
|
|
83
83
|
if (relative) return this.error();
|
|
84
84
|
expression.each = parseTemplate(this.quoted(), true);
|
|
@@ -145,9 +145,24 @@ function compiled(source: string): Template | null {
|
|
|
145
145
|
function oneLine(value: string): string {
|
|
146
146
|
return value.replace(/[\r\n\u2028\u2029]+/g, " ");
|
|
147
147
|
}
|
|
148
|
-
function truncate(value: string, cap
|
|
148
|
+
function truncate(value: string, cap?: number, legacyPreview = false): string {
|
|
149
149
|
const chars = Array.from(oneLine(value));
|
|
150
|
-
|
|
150
|
+
if (cap === undefined || chars.length <= cap) return chars.join("");
|
|
151
|
+
if (legacyPreview) return `${chars.slice(0, cap).join("")}…`;
|
|
152
|
+
// Explicit caps stop after sentence-ending punctuation so a cut is not
|
|
153
|
+
// mistaken for an intact tool message. If no sentence fits, show only the marker.
|
|
154
|
+
let end = 0;
|
|
155
|
+
for (let i = 0; i < Math.min(cap, chars.length); i++) {
|
|
156
|
+
if (!".!?。!?".includes(chars[i])) continue;
|
|
157
|
+
let next = i + 1;
|
|
158
|
+
while (next < chars.length && "\"'”’)]".includes(chars[next])) next++;
|
|
159
|
+
if (
|
|
160
|
+
next <= cap &&
|
|
161
|
+
("。!?".includes(chars[i]) || next === chars.length || /[ \t]/.test(chars[next]))
|
|
162
|
+
)
|
|
163
|
+
end = next;
|
|
164
|
+
}
|
|
165
|
+
return `${end ? `${chars.slice(0, end).join("")} ` : ""}[… ${chars.length - end} more characters]`;
|
|
151
166
|
}
|
|
152
167
|
function scalar(value: unknown): string {
|
|
153
168
|
if (value === undefined) return "";
|
|
@@ -174,10 +189,11 @@ function field(value: unknown, key: string): unknown {
|
|
|
174
189
|
? (value as Record<string, unknown>)[key]
|
|
175
190
|
: undefined;
|
|
176
191
|
}
|
|
177
|
-
function render(nodes: Template, root: unknown): string {
|
|
192
|
+
function render(nodes: Template, root: unknown, legacyPreview: boolean): string {
|
|
178
193
|
return nodes
|
|
179
194
|
.map((node) => {
|
|
180
195
|
if (typeof node === "string") return node;
|
|
196
|
+
const cap = node.cap ?? (legacyPreview ? 300 : undefined);
|
|
181
197
|
let value = root;
|
|
182
198
|
let list = false;
|
|
183
199
|
for (const step of node.steps) {
|
|
@@ -196,18 +212,31 @@ function render(nodes: Template, root: unknown): string {
|
|
|
196
212
|
}
|
|
197
213
|
}
|
|
198
214
|
if (node.count)
|
|
199
|
-
return truncate(
|
|
215
|
+
return truncate(
|
|
216
|
+
Array.isArray(value) ? String(value.length) : "",
|
|
217
|
+
cap,
|
|
218
|
+
legacyPreview,
|
|
219
|
+
);
|
|
200
220
|
if (node.each || list || node.join !== undefined) {
|
|
201
221
|
if (!Array.isArray(value)) return "";
|
|
202
222
|
const elements = value
|
|
203
|
-
.slice(0, 10)
|
|
223
|
+
.slice(0, legacyPreview ? 10 : undefined)
|
|
204
224
|
.map((item) =>
|
|
205
|
-
truncate(
|
|
225
|
+
truncate(
|
|
226
|
+
node.each ? render(node.each, item, legacyPreview) : scalar(item),
|
|
227
|
+
legacyPreview ? 300 : undefined,
|
|
228
|
+
legacyPreview,
|
|
229
|
+
),
|
|
206
230
|
);
|
|
207
|
-
if (
|
|
208
|
-
|
|
231
|
+
if (legacyPreview && value.length > 10)
|
|
232
|
+
elements.push(`… +${value.length - 10} more`);
|
|
233
|
+
return truncate(
|
|
234
|
+
elements.join(node.join ?? (node.each ? "; " : ", ")),
|
|
235
|
+
cap,
|
|
236
|
+
legacyPreview,
|
|
237
|
+
);
|
|
209
238
|
}
|
|
210
|
-
return truncate(scalar(value),
|
|
239
|
+
return truncate(scalar(value), cap, legacyPreview);
|
|
211
240
|
})
|
|
212
241
|
.join("");
|
|
213
242
|
}
|
|
@@ -216,6 +245,7 @@ export function renderToolTemplate(
|
|
|
216
245
|
source: string,
|
|
217
246
|
input: unknown,
|
|
218
247
|
output?: unknown,
|
|
248
|
+
legacyPreview = false,
|
|
219
249
|
): string | null {
|
|
220
250
|
const nodes = compiled(source);
|
|
221
251
|
if (!nodes) return null;
|
|
@@ -241,8 +271,12 @@ export function renderToolTemplate(
|
|
|
241
271
|
!node.each &&
|
|
242
272
|
!node.count &&
|
|
243
273
|
node.join === undefined
|
|
244
|
-
? truncate(text ?? "", node.cap)
|
|
274
|
+
? truncate(text ?? "", node.cap ?? (legacyPreview ? 300 : undefined), legacyPreview)
|
|
245
275
|
: node,
|
|
246
276
|
);
|
|
247
|
-
return truncate(
|
|
277
|
+
return truncate(
|
|
278
|
+
render(bareOutputNodes, root, legacyPreview),
|
|
279
|
+
legacyPreview ? 1000 : undefined,
|
|
280
|
+
legacyPreview,
|
|
281
|
+
);
|
|
248
282
|
}
|