@cortexkit/opencode-magic-context 0.44.4 → 0.45.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/hidden-agent-registrations.d.ts +3 -2
- package/dist/agents/hidden-agent-registrations.d.ts.map +1 -1
- package/dist/agents/magic-context-prompt.d.ts +1 -0
- package/dist/agents/magic-context-prompt.d.ts.map +1 -1
- package/dist/agents/permissions.d.ts +8 -28
- package/dist/agents/permissions.d.ts.map +1 -1
- package/dist/{announcement-n8hs7kjw.js → announcement-f75t58v9.js} +4 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/project-security.d.ts +48 -0
- package/dist/config/project-security.d.ts.map +1 -1
- package/dist/config/raw-loader.d.ts.map +1 -1
- package/dist/config/schema/magic-context.d.ts +10 -7
- package/dist/config/schema/magic-context.d.ts.map +1 -1
- package/dist/{conflict-warning-hook-hmpzxep6.js → conflict-warning-hook-5yrz2r24.js} +10 -6
- package/dist/{derive-budgets-ncwn1jk9.js → derive-budgets-a63zsm5c.js} +3 -3
- package/dist/embedding-worker.js +49 -0
- package/dist/emscripten-module-0g8f45e6.js +602 -0
- package/dist/emscripten-module-0pekdjxz.js +1532 -0
- package/dist/emscripten-module-e67xwsp3.js +503 -0
- package/dist/emscripten-module-pj1vyb44.js +4559 -0
- package/dist/features/magic-context/compartment-chunk-embedding.d.ts +23 -3
- package/dist/features/magic-context/compartment-chunk-embedding.d.ts.map +1 -1
- package/dist/features/magic-context/compartment-embedding.d.ts.map +1 -1
- package/dist/features/magic-context/compartment-storage.d.ts +14 -3
- package/dist/features/magic-context/compartment-storage.d.ts.map +1 -1
- package/dist/features/magic-context/context-store-uuid.d.ts +7 -0
- package/dist/features/magic-context/context-store-uuid.d.ts.map +1 -0
- package/dist/features/magic-context/dreamer/classify.d.ts +1 -3
- package/dist/features/magic-context/dreamer/classify.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/cron.d.ts +5 -4
- package/dist/features/magic-context/dreamer/cron.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/docs-proposals.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/expire-memories.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/idle-schedule-prune.d.ts +24 -0
- package/dist/features/magic-context/dreamer/idle-schedule-prune.d.ts.map +1 -0
- package/dist/features/magic-context/dreamer/manual-summary.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/map-memories.d.ts +5 -5
- package/dist/features/magic-context/dreamer/module-apply.d.ts +4 -25
- package/dist/features/magic-context/dreamer/module-apply.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/retrospective-learnings.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/storage-dream-runs.d.ts +5 -1
- package/dist/features/magic-context/dreamer/storage-dream-runs.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/storage-task-schedule.d.ts +12 -5
- package/dist/features/magic-context/dreamer/storage-task-schedule.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-executor.d.ts +6 -0
- package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-gates.d.ts +34 -0
- package/dist/features/magic-context/dreamer/task-gates.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-prompts.d.ts +1 -1
- package/dist/features/magic-context/dreamer/task-prompts.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-registry.d.ts +7 -5
- package/dist/features/magic-context/dreamer/task-registry.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-scheduler.d.ts +10 -3
- package/dist/features/magic-context/dreamer/task-scheduler.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/token-budget.d.ts +3 -0
- package/dist/features/magic-context/dreamer/token-budget.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/verify.d.ts +2 -2
- package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
- package/dist/features/magic-context/git-commits/git-log-reader.d.ts +11 -2
- package/dist/features/magic-context/git-commits/git-log-reader.d.ts.map +1 -1
- package/dist/features/magic-context/git-commits/indexer.d.ts.map +1 -1
- package/dist/features/magic-context/git-commits/search-git-commits.d.ts.map +1 -1
- package/dist/features/magic-context/git-commits/storage-git-commits.d.ts +2 -0
- package/dist/features/magic-context/git-commits/storage-git-commits.d.ts.map +1 -1
- package/dist/features/magic-context/legacy-authority-fixture.test-support.d.ts +6 -0
- package/dist/features/magic-context/legacy-authority-fixture.test-support.d.ts.map +1 -0
- package/dist/features/magic-context/lkg-prefix-chunks.d.ts +53 -0
- package/dist/features/magic-context/lkg-prefix-chunks.d.ts.map +1 -0
- package/dist/features/magic-context/memory/embedding-backfill.d.ts.map +1 -1
- package/dist/features/magic-context/memory/embedding-local.d.ts +8 -0
- package/dist/features/magic-context/memory/embedding-local.d.ts.map +1 -1
- package/dist/features/magic-context/memory/embedding-openai.d.ts.map +1 -1
- package/dist/features/magic-context/memory/embedding-worker-client.d.ts +27 -0
- package/dist/features/magic-context/memory/embedding-worker-client.d.ts.map +1 -0
- package/dist/features/magic-context/memory/embedding-worker.d.ts +2 -0
- package/dist/features/magic-context/memory/embedding-worker.d.ts.map +1 -0
- package/dist/features/magic-context/memory/embedding-worker.fixture.d.ts +2 -0
- package/dist/features/magic-context/memory/embedding-worker.fixture.d.ts.map +1 -0
- package/dist/features/magic-context/memory/memory-selection.d.ts.map +1 -1
- package/dist/features/magic-context/memory/project-identity-cache.d.ts +4 -3
- package/dist/features/magic-context/memory/project-identity-cache.d.ts.map +1 -1
- package/dist/features/magic-context/memory/project-identity.d.ts.map +1 -1
- package/dist/features/magic-context/memory/storage-memory-fts.d.ts.map +1 -1
- package/dist/features/magic-context/memory/visibility.d.ts +1 -1
- package/dist/features/magic-context/memory/visibility.d.ts.map +1 -1
- package/dist/features/magic-context/message-fts-rowid-map.d.ts +14 -1
- package/dist/features/magic-context/message-fts-rowid-map.d.ts.map +1 -1
- package/dist/features/magic-context/message-fts-session-filter.d.ts +14 -0
- package/dist/features/magic-context/message-fts-session-filter.d.ts.map +1 -0
- package/dist/features/magic-context/message-index.d.ts +1 -7
- package/dist/features/magic-context/message-index.d.ts.map +1 -1
- package/dist/features/magic-context/message-time-backfill.d.ts.map +1 -1
- package/dist/features/magic-context/migration-v94-write-split.d.ts +62 -0
- package/dist/features/magic-context/migration-v94-write-split.d.ts.map +1 -0
- package/dist/features/magic-context/migration-worker-client.d.ts +23 -0
- package/dist/features/magic-context/migration-worker-client.d.ts.map +1 -0
- package/dist/features/magic-context/migration-worker-protocol.d.ts +30 -0
- package/dist/features/magic-context/migration-worker-protocol.d.ts.map +1 -0
- package/dist/features/magic-context/migration-worker.d.ts +2 -0
- package/dist/features/magic-context/migration-worker.d.ts.map +1 -0
- package/dist/features/magic-context/migrations.d.ts +7 -0
- package/dist/features/magic-context/migrations.d.ts.map +1 -1
- package/dist/features/magic-context/mural/render-mural.d.ts +24 -2
- package/dist/features/magic-context/mural/render-mural.d.ts.map +1 -1
- package/dist/features/magic-context/mural/render-trigger.d.ts +1 -1
- package/dist/features/magic-context/mural/render-trigger.d.ts.map +1 -1
- package/dist/features/magic-context/overflow-detection.d.ts +18 -7
- package/dist/features/magic-context/overflow-detection.d.ts.map +1 -1
- package/dist/features/magic-context/project-embedding-registry.d.ts +2 -0
- package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
- package/dist/features/magic-context/range-parser.d.ts +2 -3
- package/dist/features/magic-context/range-parser.d.ts.map +1 -1
- package/dist/features/magic-context/resolve-subagent-fallback.d.ts +2 -0
- package/dist/features/magic-context/resolve-subagent-fallback.d.ts.map +1 -1
- package/dist/features/magic-context/scheduler.d.ts +2 -0
- package/dist/features/magic-context/scheduler.d.ts.map +1 -1
- package/dist/features/magic-context/search.d.ts +7 -0
- package/dist/features/magic-context/search.d.ts.map +1 -1
- package/dist/features/magic-context/session-project-backfill.d.ts.map +1 -1
- package/dist/features/magic-context/session-project-storage.d.ts +10 -1
- package/dist/features/magic-context/session-project-storage.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/compiler-prompt.d.ts +1 -1
- package/dist/features/magic-context/smart-notes/compiler-prompt.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/compiler.d.ts +4 -0
- package/dist/features/magic-context/smart-notes/compiler.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/runner.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/sandbox-runner.d.ts +2 -0
- package/dist/features/magic-context/smart-notes/sandbox-runner.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/ssrf-guard.d.ts +10 -8
- package/dist/features/magic-context/smart-notes/ssrf-guard.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/storage.d.ts +2 -2
- package/dist/features/magic-context/smart-notes/storage.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/types.d.ts +7 -2
- package/dist/features/magic-context/smart-notes/types.d.ts.map +1 -1
- package/dist/features/magic-context/storage-caveman-rules.d.ts +21 -0
- package/dist/features/magic-context/storage-caveman-rules.d.ts.map +1 -0
- package/dist/features/magic-context/storage-clone.d.ts.map +1 -1
- package/dist/features/magic-context/storage-compartment-history-version.d.ts +4 -0
- package/dist/features/magic-context/storage-compartment-history-version.d.ts.map +1 -0
- package/dist/features/magic-context/storage-db.d.ts +62 -2
- package/dist/features/magic-context/storage-db.d.ts.map +1 -1
- package/dist/features/magic-context/storage-identity-merge.d.ts +6 -0
- package/dist/features/magic-context/storage-identity-merge.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-persisted.d.ts +15 -0
- package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-session.d.ts +1 -1
- package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-shared.d.ts +1 -1
- package/dist/features/magic-context/storage-meta-shared.d.ts.map +1 -1
- package/dist/features/magic-context/storage-notes.d.ts +2 -2
- package/dist/features/magic-context/storage-notes.d.ts.map +1 -1
- package/dist/features/magic-context/storage-reasoning-removal.d.ts +30 -0
- package/dist/features/magic-context/storage-reasoning-removal.d.ts.map +1 -0
- package/dist/features/magic-context/storage-replay-document.d.ts +42 -5
- package/dist/features/magic-context/storage-replay-document.d.ts.map +1 -1
- package/dist/features/magic-context/storage-session-tables.d.ts.map +1 -1
- package/dist/features/magic-context/storage-tags.d.ts +7 -1
- package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
- package/dist/features/magic-context/storage.d.ts +1 -1
- package/dist/features/magic-context/storage.d.ts.map +1 -1
- package/dist/features/magic-context/store-generation-rebase.d.ts.map +1 -1
- package/dist/features/magic-context/tag-input.d.ts +4 -0
- package/dist/features/magic-context/tag-input.d.ts.map +1 -0
- package/dist/features/magic-context/transform-decision-log.d.ts.map +1 -1
- package/dist/features/magic-context/user-memory/review-user-memories.d.ts.map +1 -1
- package/dist/features/magic-context/user-memory/storage-user-memory.d.ts.map +1 -1
- package/dist/ffi-3cx1cxpk.js +78 -0
- package/dist/ffi-7bqqe4cd.js +91 -0
- package/dist/ffi-7e6gryj5.js +91 -0
- package/dist/ffi-bpvkebwr.js +78 -0
- package/dist/hooks/magic-context/apply-operations.d.ts +9 -1
- package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
- package/dist/hooks/magic-context/auto-search-deadline.d.ts +10 -0
- package/dist/hooks/magic-context/auto-search-deadline.d.ts.map +1 -0
- package/dist/hooks/magic-context/auto-search-hint.d.ts +3 -0
- package/dist/hooks/magic-context/auto-search-hint.d.ts.map +1 -1
- package/dist/hooks/magic-context/auto-search-runner.d.ts +3 -0
- package/dist/hooks/magic-context/auto-search-runner.d.ts.map +1 -1
- package/dist/hooks/magic-context/caveman-cleanup.d.ts +8 -1
- package/dist/hooks/magic-context/caveman-cleanup.d.ts.map +1 -1
- package/dist/hooks/magic-context/caveman.d.ts +56 -1
- package/dist/hooks/magic-context/caveman.d.ts.map +1 -1
- package/dist/hooks/magic-context/child-session-spawn.d.ts +2 -0
- package/dist/hooks/magic-context/child-session-spawn.d.ts.map +1 -1
- package/dist/hooks/magic-context/command-handler.d.ts +1 -1
- package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
- package/dist/hooks/magic-context/compaction-marker-manager.d.ts +1 -1
- package/dist/hooks/magic-context/compaction-marker-manager.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-parser.d.ts +3 -3
- package/dist/hooks/magic-context/compartment-parser.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-incremental.d.ts +0 -1
- package/dist/hooks/magic-context/compartment-runner-incremental.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-partial-recomp.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 -0
- package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-validation.d.ts +6 -0
- package/dist/hooks/magic-context/compartment-runner-validation.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
- package/dist/hooks/magic-context/degraded-pass-refusal.d.ts +35 -0
- package/dist/hooks/magic-context/degraded-pass-refusal.d.ts.map +1 -0
- package/dist/hooks/magic-context/derive-budgets.d.ts.map +1 -1
- package/dist/hooks/magic-context/dropped-input-guard.d.ts.map +1 -1
- package/dist/hooks/magic-context/embed-history-runner.d.ts.map +1 -1
- package/dist/hooks/magic-context/emergency-drop.d.ts +15 -0
- package/dist/hooks/magic-context/emergency-drop.d.ts.map +1 -1
- package/dist/hooks/magic-context/event-handler.d.ts.map +1 -1
- package/dist/hooks/magic-context/execute-status.d.ts +1 -0
- package/dist/hooks/magic-context/execute-status.d.ts.map +1 -1
- package/dist/hooks/magic-context/final-wire-token-estimate.d.ts +17 -0
- package/dist/hooks/magic-context/final-wire-token-estimate.d.ts.map +1 -1
- package/dist/hooks/magic-context/heuristic-cleanup.d.ts +2 -0
- package/dist/hooks/magic-context/heuristic-cleanup.d.ts.map +1 -1
- package/dist/hooks/magic-context/historian-host-runner.d.ts +5 -0
- package/dist/hooks/magic-context/historian-host-runner.d.ts.map +1 -1
- package/dist/hooks/magic-context/historian-prompt-fit.d.ts +116 -0
- package/dist/hooks/magic-context/historian-prompt-fit.d.ts.map +1 -0
- package/dist/hooks/magic-context/historian-prompt.generated.d.ts +1 -1
- package/dist/hooks/magic-context/historian-prompt.generated.d.ts.map +1 -1
- package/dist/hooks/magic-context/history-boundary-repair.d.ts +44 -0
- package/dist/hooks/magic-context/history-boundary-repair.d.ts.map +1 -0
- package/dist/hooks/magic-context/hook.d.ts +4 -0
- package/dist/hooks/magic-context/hook.d.ts.map +1 -1
- package/dist/hooks/magic-context/inject-compartments.d.ts +8 -0
- package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-persist.d.ts +12 -0
- package/dist/hooks/magic-context/lkg-persist.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-replay-fit.d.ts +104 -0
- package/dist/hooks/magic-context/lkg-replay-fit.d.ts.map +1 -0
- package/dist/hooks/magic-context/lkg-replay.d.ts +64 -0
- package/dist/hooks/magic-context/lkg-replay.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-client.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-state-sync-timing.d.ts +1 -1
- package/dist/hooks/magic-context/module-state-sync-timing.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-state-sync.d.ts +6 -68
- package/dist/hooks/magic-context/module-state-sync.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-tool-backends.d.ts +1 -34
- package/dist/hooks/magic-context/module-tool-backends.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-transport.d.ts +1 -55
- package/dist/hooks/magic-context/module-transport.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-wire.d.ts.map +1 -1
- package/dist/hooks/magic-context/note-nudger.d.ts +2 -0
- package/dist/hooks/magic-context/note-nudger.d.ts.map +1 -1
- package/dist/hooks/magic-context/pass-outcome.d.ts +59 -2
- package/dist/hooks/magic-context/pass-outcome.d.ts.map +1 -1
- package/dist/hooks/magic-context/producer-window-guard.d.ts +6 -0
- package/dist/hooks/magic-context/producer-window-guard.d.ts.map +1 -1
- package/dist/hooks/magic-context/read-session-chunk.d.ts +13 -2
- package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
- package/dist/hooks/magic-context/read-session-formatting.d.ts +11 -0
- package/dist/hooks/magic-context/read-session-formatting.d.ts.map +1 -1
- package/dist/hooks/magic-context/reasoning-removal.d.ts +60 -0
- package/dist/hooks/magic-context/reasoning-removal.d.ts.map +1 -0
- package/dist/hooks/magic-context/recomp-orchestrator.d.ts +1 -0
- package/dist/hooks/magic-context/recomp-orchestrator.d.ts.map +1 -1
- package/dist/hooks/magic-context/reference-retrieval.d.ts +1 -1
- package/dist/hooks/magic-context/reference-retrieval.d.ts.map +1 -1
- package/dist/hooks/magic-context/reply-pages.d.ts +3 -0
- package/dist/hooks/magic-context/reply-pages.d.ts.map +1 -0
- package/dist/hooks/magic-context/rust-lkg-freeze-registry.d.ts +62 -0
- package/dist/hooks/magic-context/rust-lkg-freeze-registry.d.ts.map +1 -0
- package/dist/hooks/magic-context/rust-mode-transform.d.ts +17 -85
- package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
- package/dist/hooks/magic-context/send-session-notification.d.ts.map +1 -1
- package/dist/hooks/magic-context/sentinel.d.ts +35 -0
- package/dist/hooks/magic-context/sentinel.d.ts.map +1 -1
- package/dist/hooks/magic-context/shared-compartment-boundaries.d.ts +28 -0
- package/dist/hooks/magic-context/shared-compartment-boundaries.d.ts.map +1 -0
- package/dist/hooks/magic-context/single-store-refusal.d.ts +14 -0
- package/dist/hooks/magic-context/single-store-refusal.d.ts.map +1 -0
- package/dist/hooks/magic-context/storage-busy-refusal.d.ts +7 -0
- package/dist/hooks/magic-context/storage-busy-refusal.d.ts.map +1 -1
- package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
- package/dist/hooks/magic-context/stripped-command.d.ts +1 -1
- package/dist/hooks/magic-context/stripped-command.d.ts.map +1 -1
- package/dist/hooks/magic-context/system-injection-stripper.d.ts +7 -0
- package/dist/hooks/magic-context/system-injection-stripper.d.ts.map +1 -1
- package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
- package/dist/hooks/magic-context/tag-content-primitives.d.ts.map +1 -1
- package/dist/hooks/magic-context/tag-id-fallback.d.ts.map +1 -1
- package/dist/hooks/magic-context/tag-messages.d.ts +18 -1
- package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
- package/dist/hooks/magic-context/tail-hygiene-walk.d.ts.map +1 -1
- package/dist/hooks/magic-context/tool-drop-target.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform-compartment-phase.d.ts +1 -0
- package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +37 -4
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform.d.ts +12 -39
- package/dist/hooks/magic-context/transform.d.ts.map +1 -1
- package/dist/hooks/magic-context/unmanaged-over-window.d.ts +36 -0
- package/dist/hooks/magic-context/unmanaged-over-window.d.ts.map +1 -0
- package/dist/hooks/magic-context/unresolved-history-boundary.d.ts +15 -0
- package/dist/hooks/magic-context/unresolved-history-boundary.d.ts.map +1 -0
- package/dist/hooks/magic-context/user-profile-render.d.ts +3 -0
- package/dist/hooks/magic-context/user-profile-render.d.ts.map +1 -0
- package/dist/hooks/magic-context/wrapup-orchestrator.d.ts.map +1 -1
- package/dist/{index-sqp1hz9v.js → index-16ny736w.js} +10190 -25296
- package/dist/{index-mrc0twf3.js → index-2aq21j41.js} +1201 -428
- package/dist/{index-32b096cc.js → index-2ntg5sd4.js} +6 -2
- package/dist/index-4krbw8z9.js +6034 -0
- package/dist/{index-33q7s9y2.js → index-75zjgwga.js} +61 -85
- package/dist/{index-zx7pmr39.js → index-8fgkmxmy.js} +28 -10
- package/dist/index-a4m2b1yv.js +530 -0
- package/dist/index-anq4nn6f.js +131 -0
- package/dist/index-avwt563y.js +62 -0
- package/dist/index-bmzf7zxv.js +445 -0
- package/dist/index-e44zzy84.js +10 -0
- package/dist/index-en1k8h8m.js +244 -0
- package/dist/{index-638hf49n.js → index-f85teqck.js} +15 -6
- package/dist/index-fr2z4qy8.js +7810 -0
- package/dist/{index-kwe03yde.js → index-fzbvakh0.js} +1 -1
- package/dist/{module-asyncify-2EFITU5U-rkqjhjxd.js → index-g20jdh0p.js} +114 -105
- package/dist/index-gd5qx1j9.js +398 -0
- package/dist/{index-3bygzk2d.js → index-hybnrwq0.js} +169 -4
- package/dist/{index-jqcbs2k1.js → index-mc22ayvf.js} +24 -5
- package/dist/index-q7yesyk9.js +9118 -0
- package/dist/index-remp7e2g.js +214 -0
- package/dist/{index-7k55qm8a.js → index-sfpzqvdz.js} +8 -8
- package/dist/{index-msqr3x6m.js → index-vvtfyw1z.js} +12 -75
- package/dist/index-w9jwmntv.js +202 -0
- package/dist/{index-kr5qehbd.js → index-x23gah8c.js} +1 -1
- package/dist/{index-jdxxq8cz.js → index-x8a7jmkh.js} +6 -1
- package/dist/{index-wprsye9w.js → index-xgt9k6c6.js} +23 -12
- package/dist/index-y8v6yerm.js +77 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7519 -8096
- package/dist/message-time-backfill-an311pmk.js +124 -0
- package/dist/migration-worker.js +53 -0
- package/dist/{model-resolution-dxatzjde.js → model-resolution-xhfmyyvy.js} +5 -1
- package/dist/module-ES6BEMUI-3cet1pyp.js +12 -0
- package/dist/module-asyncify-2EFITU5U-c2razzd9.js +6 -0
- package/dist/plugin/boot-deadline.d.ts.map +1 -1
- package/dist/plugin/conflict-warning-hook.d.ts.map +1 -1
- package/dist/plugin/dream-timer-module-client.d.ts +1 -11
- package/dist/plugin/dream-timer-module-client.d.ts.map +1 -1
- package/dist/plugin/dream-timer.d.ts.map +1 -1
- package/dist/plugin/hooks/create-session-hooks.d.ts +8 -0
- package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
- package/dist/plugin/messages-transform.d.ts +20 -13
- package/dist/plugin/messages-transform.d.ts.map +1 -1
- package/dist/plugin/rpc-handlers.d.ts.map +1 -1
- package/dist/plugin/stale-build-notice.d.ts +16 -0
- package/dist/plugin/stale-build-notice.d.ts.map +1 -0
- package/dist/{read-session-chunk-339hg90t.js → read-session-chunk-8rxs0tc9.js} +24 -6
- package/dist/recomp-orchestrator-nzamtw29.js +39 -0
- package/dist/{rpc-notifications-4amf6mf4.js → rpc-notifications-3hed126v.js} +3 -1
- package/dist/{safe-notification-target-50gm9c58.js → safe-notification-target-43r8jsxw.js} +3 -3
- package/dist/send-session-notification-nqpv7cne.js +28 -0
- package/dist/shared/assistant-message-extractor.d.ts +4 -0
- package/dist/shared/assistant-message-extractor.d.ts.map +1 -1
- package/dist/shared/background-batch-drain.d.ts +8 -0
- package/dist/shared/background-batch-drain.d.ts.map +1 -0
- package/dist/{features/builtin-commands/commands.d.ts → shared/builtin-commands.d.ts} +1 -1
- package/dist/shared/builtin-commands.d.ts.map +1 -0
- package/dist/shared/embedding-activity.d.ts +13 -0
- package/dist/shared/embedding-activity.d.ts.map +1 -0
- package/dist/shared/historian-tool-expansions.d.ts +5 -0
- package/dist/shared/historian-tool-expansions.d.ts.map +1 -0
- package/dist/shared/historian-tool-template.d.ts +5 -0
- package/dist/shared/historian-tool-template.d.ts.map +1 -0
- package/dist/shared/historian-transient-error.d.ts +2 -0
- package/dist/shared/historian-transient-error.d.ts.map +1 -0
- package/dist/shared/jsonc-edit.d.ts.map +1 -1
- package/dist/shared/logger.d.ts +7 -0
- package/dist/shared/logger.d.ts.map +1 -1
- package/dist/shared/model-suggestion-retry.d.ts +2 -1
- package/dist/shared/model-suggestion-retry.d.ts.map +1 -1
- package/dist/shared/models-dev-cache.d.ts.map +1 -1
- package/dist/shared/off-thread-migration-clock.d.ts +38 -0
- package/dist/shared/off-thread-migration-clock.d.ts.map +1 -0
- package/dist/shared/plugin-package-version.d.ts +14 -0
- package/dist/shared/plugin-package-version.d.ts.map +1 -0
- package/dist/shared/project-directory-key.d.ts +26 -0
- package/dist/shared/project-directory-key.d.ts.map +1 -0
- package/dist/shared/prompt-async-transport.d.ts +4 -0
- package/dist/shared/prompt-async-transport.d.ts.map +1 -1
- package/dist/shared/prompt-surface-runtime.d.ts +3 -3
- package/dist/shared/provider-response-completion.d.ts +12 -0
- package/dist/shared/provider-response-completion.d.ts.map +1 -0
- package/dist/shared/redaction.d.ts.map +1 -1
- package/dist/shared/rpc-client.d.ts +23 -2
- package/dist/shared/rpc-client.d.ts.map +1 -1
- package/dist/shared/rpc-types.d.ts +19 -0
- package/dist/shared/rpc-types.d.ts.map +1 -1
- package/dist/shared/rpc-utils.d.ts +34 -0
- package/dist/shared/rpc-utils.d.ts.map +1 -1
- package/dist/shared/sqlite.d.ts +13 -2
- package/dist/shared/sqlite.d.ts.map +1 -1
- package/dist/shared/stale-plugin-build.d.ts +21 -0
- package/dist/shared/stale-plugin-build.d.ts.map +1 -0
- package/dist/shared/status-summary.d.ts +29 -0
- package/dist/shared/status-summary.d.ts.map +1 -1
- package/dist/shared/status-view-check.d.ts +124 -0
- package/dist/shared/status-view-check.d.ts.map +1 -0
- package/dist/shared/status-view.d.ts +38 -2
- package/dist/shared/status-view.d.ts.map +1 -1
- package/dist/shared/tag-owner-id.d.ts +19 -0
- package/dist/shared/tag-owner-id.d.ts.map +1 -0
- package/dist/shared/tag-transcript.d.ts +2 -1
- package/dist/shared/tag-transcript.d.ts.map +1 -1
- package/dist/shared/test-temp-dir.d.ts +8 -2
- package/dist/shared/test-temp-dir.d.ts.map +1 -1
- package/dist/shared/user-facing-codes.d.ts +41 -6
- package/dist/shared/user-facing-codes.d.ts.map +1 -1
- package/dist/shared/xml-unescape.d.ts +9 -0
- package/dist/shared/xml-unescape.d.ts.map +1 -0
- package/dist/task-config-v81k8jvk.js +17 -0
- package/dist/tools/ctx-expand/constants.d.ts +1 -1
- package/dist/tools/ctx-expand/constants.d.ts.map +1 -1
- package/dist/tools/ctx-expand/mode.d.ts +4 -0
- package/dist/tools/ctx-expand/mode.d.ts.map +1 -1
- package/dist/tools/ctx-expand/render.d.ts +5 -1
- package/dist/tools/ctx-expand/render.d.ts.map +1 -1
- package/dist/tools/ctx-expand/tools.d.ts +2 -0
- package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
- package/dist/tools/ctx-expand/types.d.ts +1 -0
- package/dist/tools/ctx-expand/types.d.ts.map +1 -1
- package/dist/tools/ctx-memory/tools.d.ts.map +1 -1
- package/dist/tools/ctx-note/render.d.ts +2 -0
- package/dist/tools/ctx-note/render.d.ts.map +1 -1
- package/dist/tools/ctx-note/tools.d.ts.map +1 -1
- package/dist/tools/ctx-reduce/constants.d.ts +1 -1
- package/dist/tools/ctx-reduce/constants.d.ts.map +1 -1
- package/dist/tools/ctx-search/constants.d.ts +1 -1
- package/dist/tools/ctx-search/constants.d.ts.map +1 -1
- package/dist/tools/light-descriptions.d.ts +3 -3
- package/dist/tools/light-descriptions.d.ts.map +1 -1
- package/dist/tools/parameter-descriptions.d.ts +14 -14
- package/dist/transform-postprocess-phase-414phndq.js +61 -0
- package/dist/tui/data/context-db.d.ts +34 -10
- package/dist/tui/data/context-db.d.ts.map +1 -1
- package/dist/tui/data/notification-socket.d.ts +6 -0
- package/dist/tui/data/notification-socket.d.ts.map +1 -1
- package/dist/tui/data/session-directory.d.ts +16 -0
- package/dist/tui/data/session-directory.d.ts.map +1 -0
- package/dist/tui-compiled/data/context-db.d.ts +34 -10
- package/dist/tui-compiled/data/context-db.d.ts.map +1 -1
- package/dist/tui-compiled/data/notification-socket.d.ts +6 -0
- package/dist/tui-compiled/data/notification-socket.d.ts.map +1 -1
- package/dist/tui-compiled/data/session-directory.d.ts +16 -0
- package/dist/tui-compiled/data/session-directory.d.ts.map +1 -0
- package/dist/v2/derive-budgets-v0krf3t7.js +18 -0
- package/dist/v2/embedding-worker.js +47 -0
- package/dist/v2/emscripten-module-0g8f45e6.js +602 -0
- package/dist/v2/emscripten-module-0pekdjxz.js +1532 -0
- package/dist/v2/emscripten-module-e67xwsp3.js +503 -0
- package/dist/v2/emscripten-module-pj1vyb44.js +4559 -0
- package/dist/v2/ffi-3cx1cxpk.js +78 -0
- package/dist/v2/ffi-7bqqe4cd.js +91 -0
- package/dist/v2/ffi-7e6gryj5.js +91 -0
- package/dist/v2/ffi-bpvkebwr.js +78 -0
- package/dist/v2/fold/boundary.d.ts.map +1 -1
- package/dist/v2/fork-inheritance.d.ts +101 -0
- package/dist/v2/fork-inheritance.d.ts.map +1 -0
- package/dist/v2/hidden-child-cleanup.d.ts +11 -0
- package/dist/v2/hidden-child-cleanup.d.ts.map +1 -0
- package/dist/v2/hidden-child-native.d.ts +29 -0
- package/dist/v2/hidden-child-native.d.ts.map +1 -0
- package/dist/v2/hidden-child-record.d.ts +135 -0
- package/dist/v2/hidden-child-record.d.ts.map +1 -0
- package/dist/v2/hidden-completion.d.ts +12 -97
- package/dist/v2/hidden-completion.d.ts.map +1 -1
- package/dist/v2/hooks/context.d.ts +20 -8
- package/dist/v2/hooks/context.d.ts.map +1 -1
- package/dist/v2/hooks/dream-manual.d.ts.map +1 -1
- package/dist/v2/hooks/dream-trigger.d.ts +5 -0
- package/dist/v2/hooks/dream-trigger.d.ts.map +1 -1
- package/dist/v2/hooks/generate.d.ts +10 -0
- package/dist/v2/hooks/generate.d.ts.map +1 -0
- package/dist/v2/hooks/hidden-child.d.ts +33 -2
- package/dist/v2/hooks/hidden-child.d.ts.map +1 -1
- package/dist/v2/hooks/payload.d.ts +3 -0
- package/dist/v2/hooks/payload.d.ts.map +1 -1
- package/dist/v2/hooks/session-api-gate.d.ts +4 -0
- package/dist/v2/hooks/session-api-gate.d.ts.map +1 -0
- package/dist/v2/hooks/storage-gate.d.ts +3 -1
- package/dist/v2/hooks/storage-gate.d.ts.map +1 -1
- package/dist/v2/hooks/tools.d.ts.map +1 -1
- package/dist/v2/hooks/types.d.ts +10 -0
- package/dist/v2/hooks/types.d.ts.map +1 -1
- package/dist/v2/hooks/update-check.d.ts.map +1 -1
- package/dist/v2/hooks/usage-persist.d.ts.map +1 -1
- package/dist/v2/hooks/usage-reading.d.ts +4 -0
- package/dist/v2/hooks/usage-reading.d.ts.map +1 -1
- package/dist/v2/index-6e4mwffh.js +5662 -0
- package/dist/v2/index-en1k8h8m.js +244 -0
- package/dist/{message-time-backfill-q374fxc5.js → v2/message-time-backfill-0n93vrd7.js} +19 -5
- package/dist/v2/migration-worker.js +52 -0
- package/dist/v2/model-resolution-xhfmyyvy.js +16 -0
- package/dist/v2/module-ES6BEMUI-3cet1pyp.js +12 -0
- package/dist/v2/module-asyncify-2EFITU5U-c2razzd9.js +6 -0
- package/dist/v2/prompt-context-5y5ms8f9.js +6 -0
- package/dist/v2/read-session-chunk-hjza38hr.js +83 -0
- package/dist/v2/recomp-orchestrator-1aq7h44c.js +36 -0
- package/dist/v2/retrospective-raw-provider.d.ts +21 -0
- package/dist/v2/retrospective-raw-provider.d.ts.map +1 -0
- package/dist/v2/rpc-notifications-3hed126v.js +16 -0
- package/dist/v2/safe-notification-target-wtj0bbc2.js +9 -0
- package/dist/{send-session-notification-04hvd54c.js → v2/send-session-notification-mq9frrtm.js} +10 -5
- package/dist/v2/server-0jqw05sa.js +803 -0
- package/dist/v2/server-5317ykaf.js +40 -0
- package/dist/v2/server-a4m2b1yv.js +530 -0
- package/dist/v2/server-avwt563y.js +62 -0
- package/dist/v2/server-c4g2y1z8.js +28824 -0
- package/dist/v2/server-ckpc8pxy.js +662 -0
- package/dist/v2/server-e36nf2p1.js +7702 -0
- package/dist/v2/server-e44zzy84.js +10 -0
- package/dist/v2/server-fgmxwrgy.js +16 -0
- package/dist/v2/server-fmsr7v69.js +75 -0
- package/dist/v2/server-g20jdh0p.js +1273 -0
- package/dist/{index-qm36k34q.js → v2/server-hfjfbg59.js} +796 -737
- package/dist/v2/server-n96ag4rk.js +633 -0
- package/dist/v2/server-qdjnb2z1.js +181 -0
- package/dist/v2/server-qpg6wf72.js +187 -0
- package/dist/v2/server-r7cmye3k.js +131 -0
- package/dist/v2/server-remp7e2g.js +214 -0
- package/dist/v2/server-rhdgxp1t.js +398 -0
- package/dist/v2/server-sfpzqvdz.js +137 -0
- package/dist/v2/server-syahy8j8.js +50 -0
- package/dist/v2/server-v5xgft5v.js +9116 -0
- package/dist/v2/server-w99cyt6a.js +361 -0
- package/dist/v2/server-x8a7jmkh.js +104 -0
- package/dist/v2/server-y8v6yerm.js +77 -0
- package/dist/v2/server-z19x7eqz.js +423 -0
- package/dist/v2/server.d.ts.map +1 -1
- package/dist/v2/server.js +8796 -107376
- package/dist/v2/store-reader.d.ts +50 -0
- package/dist/v2/store-reader.d.ts.map +1 -1
- package/dist/v2/task-config-tbndqyny.js +17 -0
- package/dist/v2/transformers-node-wasm.js +26768 -0
- package/dist/v2/transformers-web.js +25670 -0
- package/dist/v2/transformers.node-hj754h7s.js +29997 -0
- package/dist/v2/tui/index.d.ts +10 -1
- package/dist/v2/tui/index.d.ts.map +1 -1
- package/dist/v2/tui/sidebar-mount.d.ts +6 -0
- package/dist/v2/tui/sidebar-mount.d.ts.map +1 -1
- package/dist/v2/tui/status-dialog-mount.d.ts +7 -4
- package/dist/v2/tui/status-dialog-mount.d.ts.map +1 -1
- package/dist/v2/tui/types.d.ts +12 -0
- package/dist/v2/tui/types.d.ts.map +1 -1
- package/dist/v2/wrapup-orchestrator-tbyx78dz.js +425 -0
- package/dist/wrapup-orchestrator-h28bqsy6.js +26 -0
- package/package.json +8 -8
- package/src/agents/hidden-agent-registrations.ts +24 -16
- package/src/agents/magic-context-prompt.test.ts +41 -0
- package/src/agents/magic-context-prompt.ts +8 -5
- package/src/agents/permissions.test.ts +31 -49
- package/src/agents/permissions.ts +8 -28
- package/src/config/index.test.ts +60 -20
- package/src/config/index.ts +53 -1
- package/src/config/live-run-config.test.ts +5 -5
- package/src/config/live-snapshot.test.ts +4 -4
- package/src/config/migrate-config-location.test.ts +3 -10
- package/src/config/project-config-trust-boundary.test.ts +207 -0
- package/src/config/project-security.hostile-matrix.test.ts +4 -4
- package/src/config/project-security.ts +218 -1
- package/src/config/protected-tokens.test.ts +14 -9
- package/src/config/raw-loader.test.ts +31 -3
- package/src/config/raw-loader.ts +8 -3
- package/src/config/schema/magic-context.ts +20 -3
- package/src/config/variable.test.ts +3 -2
- package/src/features/magic-context/dreamer/cron.ts +30 -9
- package/src/features/magic-context/dreamer/task-registry.ts +7 -5
- package/src/shared/announcement.test.ts +2 -1
- package/src/shared/assistant-message-extractor.test.ts +27 -1
- package/src/shared/assistant-message-extractor.ts +27 -0
- package/src/shared/background-batch-drain.test.ts +38 -0
- package/src/shared/background-batch-drain.ts +29 -0
- package/src/shared/builtin-commands.ts +50 -0
- package/src/shared/console-diagnostics-fence.test.ts +145 -0
- package/src/shared/data-path.test.ts +6 -5
- package/src/shared/embedding-activity.test.ts +21 -0
- package/src/shared/embedding-activity.ts +36 -0
- package/src/shared/historian-tool-defaults.json +13 -0
- package/src/shared/historian-tool-expansions.ts +18 -0
- package/src/shared/historian-tool-template.ts +248 -0
- package/src/shared/historian-transient-error.test.ts +36 -0
- package/src/shared/historian-transient-error.ts +22 -0
- package/src/shared/jsonc-edit.ts +20 -1
- package/src/shared/logger.test.ts +3 -2
- package/src/shared/logger.ts +40 -1
- package/src/shared/model-suggestion-retry.test.ts +46 -0
- package/src/shared/model-suggestion-retry.ts +16 -1
- package/src/shared/models-dev-cache.test.ts +74 -2
- package/src/shared/models-dev-cache.ts +5 -1
- package/src/shared/off-thread-migration-clock.test.ts +55 -0
- package/src/shared/off-thread-migration-clock.ts +124 -0
- package/src/shared/opencode-db-path.test.ts +3 -2
- package/src/shared/plugin-package-version.ts +52 -0
- package/src/shared/project-directory-key.test.ts +111 -0
- package/src/shared/project-directory-key.ts +54 -0
- package/src/shared/prompt-async-transport.test.ts +249 -72
- package/src/shared/prompt-async-transport.ts +131 -24
- package/src/shared/prompt-surface-a1-golden.md +41 -25
- package/src/shared/prompt-surface-runtime.test.ts +3 -3
- package/src/shared/provider-response-completion.ts +23 -0
- package/src/shared/redaction.test.ts +51 -1
- package/src/shared/redaction.ts +33 -0
- package/src/shared/rpc-async-probes.test.ts +32 -2
- package/src/shared/rpc-client.test.ts +3 -2
- package/src/shared/rpc-client.ts +76 -18
- package/src/shared/rpc-types.ts +15 -0
- package/src/shared/rpc-utils.test.ts +164 -10
- package/src/shared/rpc-utils.ts +144 -15
- package/src/shared/sqlite-acquisition-routing.test.ts +46 -3
- package/src/shared/sqlite-pass-scope.test.ts +3 -2
- package/src/shared/sqlite-transaction-mode-guard.test.ts +4 -0
- package/src/shared/sqlite-writer-diagnostics.test.ts +134 -0
- package/src/shared/sqlite.ts +225 -41
- package/src/shared/stale-plugin-build.test.ts +129 -0
- package/src/shared/stale-plugin-build.ts +151 -0
- package/src/shared/status-summary.ts +40 -13
- package/src/shared/status-view-check.test.ts +253 -0
- package/src/shared/status-view-check.ts +536 -0
- package/src/shared/status-view.test.ts +6 -1
- package/src/shared/status-view.ts +176 -4
- package/src/shared/storage-busy.test.ts +3 -2
- package/src/shared/tag-owner-id.test.ts +33 -0
- package/src/shared/tag-owner-id.ts +29 -0
- package/src/shared/tag-transcript.ts +13 -2
- package/src/shared/test-temp-dir-policy.test.ts +33 -0
- package/src/shared/test-temp-dir.test.ts +27 -0
- package/src/shared/test-temp-dir.ts +36 -12
- package/src/shared/tui-config.test.ts +6 -5
- package/src/shared/tui-preferences.test.ts +3 -2
- package/src/shared/user-facing-codes.ts +52 -6
- package/src/shared/window-geometry.test.ts +3 -2
- package/src/shared/write-transaction-attribution.test.ts +11 -7
- package/src/shared/write-transaction-hold-clock.test.ts +160 -0
- package/src/shared/xml-unescape.ts +19 -0
- package/src/tui/data/context-db.test.ts +92 -4
- package/src/tui/data/context-db.ts +184 -18
- package/src/tui/data/notification-socket.test.ts +49 -2
- package/src/tui/data/notification-socket.ts +47 -9
- package/src/tui/data/session-directory.ts +19 -0
- package/src/tui/dialogs/status-dialog-render.test.ts +284 -0
- package/src/tui/dialogs/status-dialog.tsx +41 -38
- package/src/tui/index.tsx +30 -18
- package/src/tui/slots/sidebar-content.tsx +9 -2
- package/src/tui-compiled/data/context-db.ts +184 -18
- package/src/tui-compiled/data/notification-socket.ts +47 -9
- package/src/tui-compiled/data/session-directory.ts +19 -0
- package/src/tui-compiled/dialogs/status-dialog.tsx +38 -29
- package/src/tui-compiled/index.tsx +29 -16
- package/src/tui-compiled/slots/sidebar-content.tsx +3 -2
- package/src/v2/tui/host-contract.test.ts +9 -10
- package/src/v2/tui/index.ts +78 -23
- package/src/v2/tui/load-compiled-sidebar.d.mts +5 -1
- package/src/v2/tui/load-compiled-status-dialog.d.mts +3 -2
- package/src/v2/tui/session-directory.test.ts +53 -0
- package/src/v2/tui/sidebar-mount.ts +19 -1
- package/src/v2/tui/status-dialog-mount.ts +10 -7
- package/src/v2/tui/types.ts +10 -0
- package/dist/features/builtin-commands/commands.d.ts.map +0 -1
- package/dist/features/builtin-commands/types.d.ts +0 -3
- package/dist/features/builtin-commands/types.d.ts.map +0 -1
- package/dist/features/magic-context/context-authority.d.ts +0 -272
- package/dist/features/magic-context/context-authority.d.ts.map +0 -1
- package/dist/features/magic-context/memory/mirror-reembed.d.ts +0 -22
- package/dist/features/magic-context/memory/mirror-reembed.d.ts.map +0 -1
- package/dist/hooks/magic-context/historian-state-file.d.ts +0 -43
- package/dist/hooks/magic-context/historian-state-file.d.ts.map +0 -1
- package/dist/index-4an2p8qa.js +0 -1056
- package/dist/index-rn7gafjr.js +0 -8
- package/dist/index-v6t0tg85.js +0 -13
- package/dist/plugin/memory-id-translation.d.ts +0 -109
- package/dist/plugin/memory-id-translation.d.ts.map +0 -1
- package/dist/plugin/rust-note-backend.d.ts +0 -84
- package/dist/plugin/rust-note-backend.d.ts.map +0 -1
- package/dist/recomp-orchestrator-0ers6smx.js +0 -22
- package/dist/task-config-2bm68628.js +0 -9
- package/dist/transform-postprocess-phase-ttdkrm6r.js +0 -36
- package/dist/v2/host-service.d.ts +0 -66
- package/dist/v2/host-service.d.ts.map +0 -1
- package/dist/wrapup-orchestrator-x0jvvrqn.js +0 -19
- /package/dist/{index-s70wtd8k.js → index-q6hef7fh.js} +0 -0
package/src/config/raw-loader.ts
CHANGED
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
linkSync,
|
|
5
5
|
openSync,
|
|
6
6
|
readFileSync,
|
|
7
|
+
realpathSync,
|
|
7
8
|
renameSync,
|
|
8
9
|
statSync,
|
|
9
10
|
unlinkSync,
|
|
@@ -434,9 +435,13 @@ export function loadRawConfigFile(options: RawConfigLoadOptions): RawConfigLoadR
|
|
|
434
435
|
|
|
435
436
|
let temporaryPath: string | undefined;
|
|
436
437
|
try {
|
|
437
|
-
|
|
438
|
+
// Write through a symlinked config (stow, chezmoi, home-manager keep
|
|
439
|
+
// it in a dotfiles repo): the temporary file is created next to the
|
|
440
|
+
// real file and renamed onto it, so the link itself stays a link.
|
|
441
|
+
const writePath = realpathSync(options.configPath);
|
|
442
|
+
const mode = statSync(writePath).mode & 0o777;
|
|
438
443
|
writeExclusiveBackup(backupPath, observedBytes, mode);
|
|
439
|
-
temporaryPath = writeTemporaryCandidate(
|
|
444
|
+
temporaryPath = writeTemporaryCandidate(writePath, migration.bytes, mode);
|
|
440
445
|
options.afterTemporaryWrite?.();
|
|
441
446
|
|
|
442
447
|
const currentBytes = readFileSync(options.configPath);
|
|
@@ -456,7 +461,7 @@ export function loadRawConfigFile(options: RawConfigLoadOptions): RawConfigLoadR
|
|
|
456
461
|
continue;
|
|
457
462
|
}
|
|
458
463
|
|
|
459
|
-
renameSync(temporaryPath,
|
|
464
|
+
renameSync(temporaryPath, writePath);
|
|
460
465
|
return {
|
|
461
466
|
configPath: options.configPath,
|
|
462
467
|
bytes: migration.bytes,
|
|
@@ -6,6 +6,7 @@ import type {
|
|
|
6
6
|
AGENTIC_DREAM_TASKS,
|
|
7
7
|
DreamTaskName,
|
|
8
8
|
} from "../../features/magic-context/dreamer/task-registry";
|
|
9
|
+
import { toolTemplateError } from "../../shared/historian-tool-template";
|
|
9
10
|
import { isValidPromptSurfaceModelKey } from "../../shared/prompt-surface";
|
|
10
11
|
import { AgentOverrideConfigSchema } from "./agent-overrides";
|
|
11
12
|
|
|
@@ -490,7 +491,7 @@ const DreamTaskBaseConfigSchema = z
|
|
|
490
491
|
.positive()
|
|
491
492
|
.optional()
|
|
492
493
|
.describe(
|
|
493
|
-
"
|
|
494
|
+
"Cumulative prompt-token investigation budget (input + cache read + cache write) for one tool-loop child. Defaults: 2,500,000 for map-memories and verify; 3,000,000 for verify-broad; other tool-loop tasks vary. Completed answers are retained even if their usage crosses the budget.",
|
|
494
495
|
),
|
|
495
496
|
})
|
|
496
497
|
.strict();
|
|
@@ -663,6 +664,21 @@ export type DreamerConfig = z.infer<typeof DreamerConfigSchema>;
|
|
|
663
664
|
* the strict opencode, pi, and omp blocks; two_pass and disallowed_tools stay here.
|
|
664
665
|
*/
|
|
665
666
|
export const HistorianConfigSchema = AgentMetadataSchema.extend({
|
|
667
|
+
expand_tools: z
|
|
668
|
+
.record(
|
|
669
|
+
z.string(),
|
|
670
|
+
z.union([
|
|
671
|
+
z.string().superRefine((value, ctx) => {
|
|
672
|
+
const error = toolTemplateError(value);
|
|
673
|
+
if (error) ctx.addIssue({ code: "custom", message: error });
|
|
674
|
+
}),
|
|
675
|
+
z.literal(false),
|
|
676
|
+
]),
|
|
677
|
+
)
|
|
678
|
+
.optional()
|
|
679
|
+
.describe(
|
|
680
|
+
'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; placeholders default to 300 characters, lists to 10 elements, expansions to 1000 characters. Valid in user and project config; affects historian/recomp and verbose ctx_expand only, never the wire or default ctx_expand transcript.',
|
|
681
|
+
),
|
|
666
682
|
opencode: OpenCodeHarnessBlockSchema.optional(),
|
|
667
683
|
pi: PiHarnessBlockSchema.optional(),
|
|
668
684
|
omp: OmpHarnessBlockSchema.optional(),
|
|
@@ -695,7 +711,7 @@ export const HistorianConfigSchema = AgentMetadataSchema.extend({
|
|
|
695
711
|
.array(z.enum(["*", "read", "aft_outline", "aft_zoom", "aft_search"]))
|
|
696
712
|
.default([])
|
|
697
713
|
.describe(
|
|
698
|
-
|
|
714
|
+
"Legacy compatibility setting. Historians, recomp and editor passes always run with zero tools and locked permissions; this list no longer changes their tool surface. (default: [])",
|
|
699
715
|
),
|
|
700
716
|
}).optional();
|
|
701
717
|
export type HistorianConfig = NonNullable<z.infer<typeof HistorianConfigSchema>>;
|
|
@@ -771,7 +787,7 @@ const BaseEmbeddingConfigSchema = z
|
|
|
771
787
|
.enum(["auto", "native", "wasm"])
|
|
772
788
|
.default("auto")
|
|
773
789
|
.describe(
|
|
774
|
-
"Local provider only: ONNX runtime selection. 'auto' uses native under Node and uses WASM under Bun versions before 1.4.0, where Bun's NAPI teardown race can panic on quit; native is restored automatically on Bun 1.4.0+.
|
|
790
|
+
"Local provider only: ONNX runtime selection. 'auto' uses native under Node and uses WASM under Bun versions before 1.4.0, where Bun's NAPI teardown race can panic on quit; native is restored automatically on Bun 1.4.0+. Inference runs in a dedicated worker. On Bun before 1.4.0, even explicit 'native' uses WASM because native worker teardown can crash the process. Set 'wasm' to avoid loading the native addon on newer hosts too.",
|
|
775
791
|
),
|
|
776
792
|
local_dtype: z
|
|
777
793
|
.enum([
|
|
@@ -1567,6 +1583,7 @@ export const LIVE_RELOAD_CONFIG_PATHS = [
|
|
|
1567
1583
|
"historian.omp.fallback_models",
|
|
1568
1584
|
"historian.omp.thinking_level",
|
|
1569
1585
|
"historian.two_pass",
|
|
1586
|
+
"historian.expand_tools",
|
|
1570
1587
|
"historian.maxTokens",
|
|
1571
1588
|
"historian_timeout_ms",
|
|
1572
1589
|
"commit_cluster_trigger.enabled",
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { afterEach, beforeEach, describe, expect, it } from "bun:test";
|
|
2
|
-
import {
|
|
2
|
+
import { rmSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { homedir, tmpdir } from "node:os";
|
|
4
4
|
import { join, sep } from "node:path";
|
|
5
|
+
import { createTestTempDirFromPath } from "../shared/test-temp-dir";
|
|
5
6
|
|
|
6
7
|
import { substituteConfigVariables } from "./variable";
|
|
7
8
|
|
|
@@ -10,7 +11,7 @@ describe("substituteConfigVariables", () => {
|
|
|
10
11
|
let tmpDir: string;
|
|
11
12
|
|
|
12
13
|
beforeEach(() => {
|
|
13
|
-
tmpDir =
|
|
14
|
+
tmpDir = createTestTempDirFromPath(join(tmpdir(), "mc-variable-test-"));
|
|
14
15
|
});
|
|
15
16
|
|
|
16
17
|
afterEach(() => {
|
|
@@ -13,9 +13,10 @@
|
|
|
13
13
|
* NAMES are intentionally unsupported (smaller surface; add later if asked).
|
|
14
14
|
* Empty string `""` means "never" and is handled by the caller, not here.
|
|
15
15
|
*
|
|
16
|
-
* Day matching
|
|
17
|
-
* (
|
|
18
|
-
*
|
|
16
|
+
* Day matching follows Vixie cron: a dom or dow field that starts with `*`
|
|
17
|
+
* (`*` itself or a star-step such as `*\/2`) counts as unrestricted. When BOTH
|
|
18
|
+
* fields are restricted a day matches if EITHER matches; otherwise a day must
|
|
19
|
+
* match both sets, which for a plain `*` field means only the other one counts.
|
|
19
20
|
*
|
|
20
21
|
* Timezone: all matching is in the machine's LOCAL time — the dreamer's whole
|
|
21
22
|
* purpose is "run while the user is asleep", which is a wall-clock concept.
|
|
@@ -30,7 +31,7 @@ export interface ParsedCron {
|
|
|
30
31
|
dom: Set<number>;
|
|
31
32
|
month: Set<number>;
|
|
32
33
|
dow: Set<number>;
|
|
33
|
-
/**
|
|
34
|
+
/** Field token does not start with `*` — drives Vixie dom/dow OR-semantics. */
|
|
34
35
|
domRestricted: boolean;
|
|
35
36
|
dowRestricted: boolean;
|
|
36
37
|
}
|
|
@@ -145,8 +146,10 @@ export function parseCron(expression: string): ParseCronResult {
|
|
|
145
146
|
dom: sets[2],
|
|
146
147
|
month: sets[3],
|
|
147
148
|
dow: sets[4],
|
|
148
|
-
|
|
149
|
-
|
|
149
|
+
// Vixie cron treats any star-prefixed field (`*`, `*/2`) as
|
|
150
|
+
// unrestricted when choosing between OR and AND day matching.
|
|
151
|
+
domRestricted: !tokens[2].startsWith("*"),
|
|
152
|
+
dowRestricted: !tokens[4].startsWith("*"),
|
|
150
153
|
},
|
|
151
154
|
};
|
|
152
155
|
}
|
|
@@ -160,9 +163,26 @@ function matchesDay(cron: ParsedCron, date: Date): boolean {
|
|
|
160
163
|
const dom = cron.dom.has(date.getDate());
|
|
161
164
|
const dow = cron.dow.has(date.getDay());
|
|
162
165
|
if (cron.domRestricted && cron.dowRestricted) return dom || dow;
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
+
return dom && dow;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/** Longest each month can be, counting Feb 29. */
|
|
170
|
+
const MAX_DAYS_IN_MONTH = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* False when the day-of-month set fits in none of the cron's months (e.g.
|
|
174
|
+
* `0 0 31 2 *`, Feb 31), so the schedule can never fire. Lets nextOccurrence
|
|
175
|
+
* answer "never" at once instead of scanning ~2 million minutes on every
|
|
176
|
+
* evaluation. A restricted weekday under OR-matching always fires eventually.
|
|
177
|
+
*/
|
|
178
|
+
function dayOfMonthCanOccur(cron: ParsedCron): boolean {
|
|
179
|
+
if (cron.domRestricted && cron.dowRestricted) return true;
|
|
180
|
+
for (const month of cron.month) {
|
|
181
|
+
for (const day of cron.dom) {
|
|
182
|
+
if (day <= MAX_DAYS_IN_MONTH[month - 1]) return true;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return false;
|
|
166
186
|
}
|
|
167
187
|
|
|
168
188
|
/** True if `date`'s local civil fields match the cron. */
|
|
@@ -199,6 +219,7 @@ export function nextOccurrence(
|
|
|
199
219
|
excludeCivilMinute?: string,
|
|
200
220
|
maxSearchMs = MAX_SEARCH_MS,
|
|
201
221
|
): Date | null {
|
|
222
|
+
if (!dayOfMonthCanOccur(cron)) return null;
|
|
202
223
|
const afterMs = after.getTime();
|
|
203
224
|
// Align to the next whole minute strictly after `after` (never returns `after`).
|
|
204
225
|
let cursorMs = Math.floor(afterMs / MINUTE_MS) * MINUTE_MS + MINUTE_MS;
|
|
@@ -30,12 +30,14 @@ export const CANONICAL_DREAM_TASKS = [
|
|
|
30
30
|
export type DreamTaskName = (typeof CANONICAL_DREAM_TASKS)[number];
|
|
31
31
|
|
|
32
32
|
/** Prompt-token ceilings informed by docs/reports/dreamer-token-usage.md.
|
|
33
|
-
*
|
|
34
|
-
*
|
|
33
|
+
* Completed Gemini run usage predicts 20-memory mapping/verification batches
|
|
34
|
+
* at about 70% of their allowance
|
|
35
|
+
* (docs/reports/verify-token-budget-2026-09-30.md); curate and other tasks retain
|
|
36
|
+
* their separate allowances. */
|
|
35
37
|
export const DREAM_TOOL_LOOP_TOKEN_BUDGETS = {
|
|
36
|
-
"map-memories":
|
|
37
|
-
verify:
|
|
38
|
-
"verify-broad":
|
|
38
|
+
"map-memories": 2_500_000,
|
|
39
|
+
verify: 2_500_000,
|
|
40
|
+
"verify-broad": 3_000_000,
|
|
39
41
|
curate: 1_500_000,
|
|
40
42
|
retrospective: 300_000,
|
|
41
43
|
"maintain-docs": 1_600_000,
|
|
@@ -2,6 +2,7 @@ import { afterEach, beforeEach, describe, expect, test } from "bun:test";
|
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
3
|
import * as os from "node:os";
|
|
4
4
|
import * as path from "node:path";
|
|
5
|
+
import { createTestTempDirFromPath } from "./test-temp-dir";
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* `announcement.ts` reads/writes a single `last_announced_version` file under
|
|
@@ -23,7 +24,7 @@ let tmpRoot = "";
|
|
|
23
24
|
let originalXdg: string | undefined;
|
|
24
25
|
|
|
25
26
|
beforeEach(() => {
|
|
26
|
-
tmpRoot =
|
|
27
|
+
tmpRoot = createTestTempDirFromPath(path.join(os.tmpdir(), "mc-announcement-test-"));
|
|
27
28
|
originalXdg = process.env.XDG_DATA_HOME;
|
|
28
29
|
process.env.XDG_DATA_HOME = tmpRoot;
|
|
29
30
|
});
|
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
import { describe, expect, test } from "bun:test";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
describeAssistantSettlement,
|
|
4
|
+
extractLatestAssistantText,
|
|
5
|
+
hasLengthCappedOutput,
|
|
6
|
+
} from "./assistant-message-extractor";
|
|
7
|
+
|
|
8
|
+
test("reasoning-only and tool-only turns stay out of manifest text and retain finish diagnostics", () => {
|
|
9
|
+
for (const [type, finish] of [
|
|
10
|
+
["reasoning", "stop"],
|
|
11
|
+
["tool", "tool-calls"],
|
|
12
|
+
]) {
|
|
13
|
+
const messages = [
|
|
14
|
+
{
|
|
15
|
+
info: { role: "assistant", finish },
|
|
16
|
+
parts: [{ type, text: "private or tool data" }],
|
|
17
|
+
},
|
|
18
|
+
];
|
|
19
|
+
expect(extractLatestAssistantText(messages)).toBeNull();
|
|
20
|
+
expect(describeAssistantSettlement(messages)).toContain(`finish=${finish}`);
|
|
21
|
+
}
|
|
22
|
+
expect(
|
|
23
|
+
describeAssistantSettlement({
|
|
24
|
+
tokenLog: { finish_reason: "length" },
|
|
25
|
+
reasoning: "private",
|
|
26
|
+
}),
|
|
27
|
+
).toBe("finish=length, reasoning=true");
|
|
28
|
+
});
|
|
3
29
|
|
|
4
30
|
describe("hasLengthCappedOutput", () => {
|
|
5
31
|
test("detects OpenCode assistant info.finish", () => {
|
|
@@ -127,3 +127,30 @@ export function hasLengthCappedOutput(value: unknown): boolean {
|
|
|
127
127
|
|
|
128
128
|
return Object.values(value).some((item) => hasLengthCappedOutput(item));
|
|
129
129
|
}
|
|
130
|
+
|
|
131
|
+
/** Settlement metadata for diagnostics, never private reasoning as task output. */
|
|
132
|
+
export function describeAssistantSettlement(output: unknown): string {
|
|
133
|
+
if (isRecord(output) && isRecord(output.tokenLog)) {
|
|
134
|
+
return `finish=${String(output.tokenLog.finish_reason ?? "unknown")}, reasoning=${typeof output.reasoning === "string" && output.reasoning.length > 0}`;
|
|
135
|
+
}
|
|
136
|
+
const latest = getLatestAssistantMessage(output);
|
|
137
|
+
const parts = Array.isArray(latest?.parts) ? latest.parts.filter(isRecord) : [];
|
|
138
|
+
return `finish=${latest?.info?.finish ?? "unknown"}, reasoning=${parts.some((part) => part.type === "reasoning")}, tools=${parts.filter((part) => part.type === "tool").length}`;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/** Describe persisted host/provider errors without losing structured status or message fields. */
|
|
142
|
+
export function describeAssistantError(error: unknown): string {
|
|
143
|
+
if (error instanceof Error) return error.message;
|
|
144
|
+
if (!isRecord(error)) return String(error);
|
|
145
|
+
const data = isRecord(error.data) ? error.data : error;
|
|
146
|
+
const message = typeof data.message === "string" ? data.message : undefined;
|
|
147
|
+
const status = data.statusCode ?? data.status;
|
|
148
|
+
const name =
|
|
149
|
+
typeof error.name === "string"
|
|
150
|
+
? error.name
|
|
151
|
+
: typeof error.type === "string"
|
|
152
|
+
? error.type
|
|
153
|
+
: undefined;
|
|
154
|
+
const description = [name, message].filter(Boolean).join(": ") || JSON.stringify(error);
|
|
155
|
+
return status === undefined ? description : `${description} (status=${String(status)})`;
|
|
156
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { expect, test } from "bun:test";
|
|
2
|
+
import { drainBackgroundBatches } from "./background-batch-drain";
|
|
3
|
+
|
|
4
|
+
test("background drain yields after each committed slice and resumes after its tick budget", async () => {
|
|
5
|
+
let clock = 0;
|
|
6
|
+
let remaining = 10;
|
|
7
|
+
let yields = 0;
|
|
8
|
+
const options = {
|
|
9
|
+
budgetMs: 3,
|
|
10
|
+
now: () => clock,
|
|
11
|
+
yieldFn: async () => {
|
|
12
|
+
yields++;
|
|
13
|
+
clock++;
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
const step = () => {
|
|
17
|
+
if (remaining === 0) return false;
|
|
18
|
+
remaining--;
|
|
19
|
+
return true;
|
|
20
|
+
};
|
|
21
|
+
expect(await drainBackgroundBatches(step, options)).toBe(3);
|
|
22
|
+
expect(yields).toBe(3);
|
|
23
|
+
expect(remaining).toBe(7);
|
|
24
|
+
expect(await drainBackgroundBatches(step, { ...options, budgetMs: 20 })).toBe(7);
|
|
25
|
+
expect(yields).toBe(10);
|
|
26
|
+
expect(remaining).toBe(0);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test("a busy background slice defers without rerunning a partially executed callback", async () => {
|
|
30
|
+
let attempts = 0;
|
|
31
|
+
expect(
|
|
32
|
+
await drainBackgroundBatches(() => {
|
|
33
|
+
attempts++;
|
|
34
|
+
throw Object.assign(new Error("busy"), { code: "SQLITE_BUSY" });
|
|
35
|
+
}),
|
|
36
|
+
).toBe(0);
|
|
37
|
+
expect(attempts).toBe(1);
|
|
38
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isTransientSqliteError,
|
|
3
|
+
withoutSqliteTransformPass,
|
|
4
|
+
withSqliteBackgroundWriter,
|
|
5
|
+
} from "./sqlite";
|
|
6
|
+
|
|
7
|
+
/** Drain committed slices without monopolizing the event loop or borrowing a
|
|
8
|
+
* foreground turn's lock-wait budget. A busy slice defers to the next timer tick. */
|
|
9
|
+
export async function drainBackgroundBatches(
|
|
10
|
+
step: () => boolean,
|
|
11
|
+
options: { budgetMs?: number; now?: () => number; yieldFn?: () => Promise<void> } = {},
|
|
12
|
+
): Promise<number> {
|
|
13
|
+
const now = options.now ?? (() => performance.now());
|
|
14
|
+
const deadline = now() + (options.budgetMs ?? 2000);
|
|
15
|
+
const yieldFn =
|
|
16
|
+
options.yieldFn ?? (() => new Promise<void>((resolve) => setTimeout(resolve, 0)));
|
|
17
|
+
let batches = 0;
|
|
18
|
+
while (now() < deadline) {
|
|
19
|
+
try {
|
|
20
|
+
if (!withoutSqliteTransformPass(() => withSqliteBackgroundWriter(step))) break;
|
|
21
|
+
} catch (error) {
|
|
22
|
+
if (isTransientSqliteError(error)) break;
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
batches++;
|
|
26
|
+
await yieldFn();
|
|
27
|
+
}
|
|
28
|
+
return batches;
|
|
29
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { Config } from "@opencode-ai/sdk";
|
|
2
|
+
|
|
3
|
+
// Keep command metadata independent of server features: config validation and
|
|
4
|
+
// the separately shipped TUI need the same reserved command names.
|
|
5
|
+
type BuiltinCommandConfig = NonNullable<Config["command"]>;
|
|
6
|
+
|
|
7
|
+
const COMPACTION_ENABLED_PATH = `compaction${".enabled"}`;
|
|
8
|
+
|
|
9
|
+
export function getMagicContextBuiltinCommands(compactionEnabled = true) {
|
|
10
|
+
const unavailableInCompactionOff = (command: string) =>
|
|
11
|
+
`Unavailable when ${COMPACTION_ENABLED_PATH} is false: /${command} manages compacted history.`;
|
|
12
|
+
|
|
13
|
+
return {
|
|
14
|
+
"ctx-status": {
|
|
15
|
+
template: "ctx-status",
|
|
16
|
+
description: "Show magic context status, pending queue, cache TTL, and debug info",
|
|
17
|
+
},
|
|
18
|
+
"ctx-recomp": {
|
|
19
|
+
template: "ctx-recomp",
|
|
20
|
+
description: compactionEnabled
|
|
21
|
+
? "Rebuild compressed history from raw history (full or <start>-<end> range); memories are not changed"
|
|
22
|
+
: unavailableInCompactionOff("ctx-recomp"),
|
|
23
|
+
},
|
|
24
|
+
"ctx-wrapup": {
|
|
25
|
+
template: "ctx-wrapup",
|
|
26
|
+
description: compactionEnabled
|
|
27
|
+
? "Compact older live history while keeping the newest messages raw"
|
|
28
|
+
: unavailableInCompactionOff("ctx-wrapup"),
|
|
29
|
+
},
|
|
30
|
+
"ctx-flush": {
|
|
31
|
+
template: "ctx-flush",
|
|
32
|
+
description: compactionEnabled
|
|
33
|
+
? "Force-process all pending magic context operations immediately"
|
|
34
|
+
: unavailableInCompactionOff("ctx-flush"),
|
|
35
|
+
},
|
|
36
|
+
"ctx-dream": {
|
|
37
|
+
template: "ctx-dream",
|
|
38
|
+
description: "Run the hidden dreamer maintenance pass for this project now",
|
|
39
|
+
},
|
|
40
|
+
"ctx-embed": {
|
|
41
|
+
template: "ctx-embed",
|
|
42
|
+
description:
|
|
43
|
+
"Embedding status, or start/pause history compartment embedding (start | pause)",
|
|
44
|
+
},
|
|
45
|
+
} satisfies BuiltinCommandConfig;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export type MagicContextBuiltinCommandName = keyof ReturnType<
|
|
49
|
+
typeof getMagicContextBuiltinCommands
|
|
50
|
+
>;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import { readdirSync, readFileSync } from "node:fs";
|
|
3
|
+
import { join, relative, resolve } from "node:path";
|
|
4
|
+
|
|
5
|
+
// OpenCode and Pi pass plugin stdout/stderr straight through to the operator's
|
|
6
|
+
// terminal, so a `[magic-context]` line written with console.* lands in the
|
|
7
|
+
// middle of someone else's UI. Diagnostics belong in the Magic Context log file
|
|
8
|
+
// (shared/logger.ts). This fence scans production sources for console calls
|
|
9
|
+
// whose arguments carry the `[magic-context]` tag.
|
|
10
|
+
const repoRoot = resolve(import.meta.dir, "../../../../");
|
|
11
|
+
const scannedRoots = ["packages/plugin/src", "packages/pi-plugin/src"];
|
|
12
|
+
|
|
13
|
+
// Messages the operator is meant to read on the terminal. Each entry is a
|
|
14
|
+
// repo-relative path plus a substring of the call's text, so a new console
|
|
15
|
+
// call in an allow-listed file still trips the fence.
|
|
16
|
+
const userFacingAllowList: Array<{ path: string; contains: string; why: string }> = [
|
|
17
|
+
{
|
|
18
|
+
path: "packages/plugin/src/v2/hooks/context.ts",
|
|
19
|
+
contains: "v2 host API unavailable",
|
|
20
|
+
why: "startup error: the host lacks the required session API; shown once with the minimum version",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
path: "packages/plugin/src/plugin/tool-registry.ts",
|
|
24
|
+
contains: "persistent storage unavailable; disabling magic-context tools",
|
|
25
|
+
why: "startup error: storage failed to open, so no ctx_* tool is registered",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
path: "packages/plugin/src/v2/hooks/context.ts",
|
|
29
|
+
contains: "v2 setup disabled by conflicting context hooks",
|
|
30
|
+
why: "startup error: another plugin's context hook disables Magic Context",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
path: "packages/plugin/src/v2/hooks/context.ts",
|
|
34
|
+
contains: "v2 storage unavailable",
|
|
35
|
+
why: "startup error: storage failed to open; reported once per distinct failure",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
path: "packages/plugin/src/shared/data-path.ts",
|
|
39
|
+
contains: "TEST BACKSTOP",
|
|
40
|
+
why: "fires only under NODE_ENV=test, where the logger is silent and imports this module",
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
// `[magic-context]` and `[magic-context][pi]`; the TUI's own `[magic-context-tui]`
|
|
45
|
+
// debug lines run in the host's TUI process and are not covered here.
|
|
46
|
+
const diagnosticTag = /\[magic-context\]/;
|
|
47
|
+
|
|
48
|
+
const consoleCall = /\bconsole\.(?:warn|log|error|info|debug)\(/g;
|
|
49
|
+
|
|
50
|
+
function isTestSource(relativePath: string): boolean {
|
|
51
|
+
return (
|
|
52
|
+
/\.test\.[cm]?[jt]sx?$/.test(relativePath) ||
|
|
53
|
+
relativePath.split("/").includes("__tests__") ||
|
|
54
|
+
relativePath.split("/").includes("test-support")
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function listSources(dir: string): string[] {
|
|
59
|
+
const files: string[] = [];
|
|
60
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
61
|
+
const full = join(dir, entry.name);
|
|
62
|
+
if (entry.isDirectory()) {
|
|
63
|
+
if (entry.name === "node_modules") continue;
|
|
64
|
+
files.push(...listSources(full));
|
|
65
|
+
} else if (/\.[cm]?[jt]sx?$/.test(entry.name)) {
|
|
66
|
+
files.push(full);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return files;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Return the text of a call's argument list, starting just after its opening
|
|
74
|
+
* parenthesis. Quotes and template literals are skipped so a parenthesis in a
|
|
75
|
+
* message does not end the call early; `${...}` holes are scanned as code.
|
|
76
|
+
*/
|
|
77
|
+
function callArguments(source: string, openParen: number): string {
|
|
78
|
+
let depth = 1;
|
|
79
|
+
const stack: string[] = [];
|
|
80
|
+
let index = openParen + 1;
|
|
81
|
+
while (index < source.length && depth > 0) {
|
|
82
|
+
const char = source[index];
|
|
83
|
+
const quote = stack.at(-1);
|
|
84
|
+
if (quote === "'" || quote === '"') {
|
|
85
|
+
if (char === "\\") index++;
|
|
86
|
+
else if (char === quote) stack.pop();
|
|
87
|
+
} else if (quote === "`") {
|
|
88
|
+
if (char === "\\") index++;
|
|
89
|
+
else if (char === "`") stack.pop();
|
|
90
|
+
else if (char === "$" && source[index + 1] === "{") {
|
|
91
|
+
stack.push("{");
|
|
92
|
+
index++;
|
|
93
|
+
}
|
|
94
|
+
} else if (char === "'" || char === '"' || char === "`") {
|
|
95
|
+
stack.push(char);
|
|
96
|
+
} else if (char === "{" && stack.length > 0) {
|
|
97
|
+
stack.push("{");
|
|
98
|
+
} else if (char === "}" && quote === "{") {
|
|
99
|
+
stack.pop();
|
|
100
|
+
} else if (char === "(") {
|
|
101
|
+
depth++;
|
|
102
|
+
} else if (char === ")") {
|
|
103
|
+
depth--;
|
|
104
|
+
}
|
|
105
|
+
index++;
|
|
106
|
+
}
|
|
107
|
+
return source.slice(openParen + 1, index - 1);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function findTaggedConsoleCalls(): string[] {
|
|
111
|
+
const findings: string[] = [];
|
|
112
|
+
for (const root of scannedRoots) {
|
|
113
|
+
for (const file of listSources(resolve(repoRoot, root))) {
|
|
114
|
+
const relativePath = relative(repoRoot, file).split("\\").join("/");
|
|
115
|
+
if (isTestSource(relativePath)) continue;
|
|
116
|
+
const source = readFileSync(file, "utf8");
|
|
117
|
+
for (const match of source.matchAll(consoleCall)) {
|
|
118
|
+
const args = callArguments(source, match.index + match[0].length - 1);
|
|
119
|
+
if (!diagnosticTag.test(args)) continue;
|
|
120
|
+
const allowed = userFacingAllowList.some(
|
|
121
|
+
(entry) => entry.path === relativePath && args.includes(entry.contains),
|
|
122
|
+
);
|
|
123
|
+
if (allowed) continue;
|
|
124
|
+
const line = source.slice(0, match.index).split("\n").length;
|
|
125
|
+
findings.push(`${relativePath}:${line}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return findings;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
describe("console diagnostics fence", () => {
|
|
133
|
+
test("no production source writes [magic-context] diagnostics to the host console", () => {
|
|
134
|
+
expect(findTaggedConsoleCalls()).toEqual([]);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
test("the scanner sees a tagged call nested in a template literal", () => {
|
|
138
|
+
const sample =
|
|
139
|
+
"console.warn(\n `[${new Date().toISOString()}] [magic-context] x=${Math.round(1)}ms`,\n);";
|
|
140
|
+
const open = sample.indexOf("(");
|
|
141
|
+
expect(callArguments(sample, open)).toContain("[magic-context]");
|
|
142
|
+
const untagged = 'console.warn("plain (paren"); const s = "[magic-context]";';
|
|
143
|
+
expect(callArguments(untagged, untagged.indexOf("("))).not.toContain("[magic-context]");
|
|
144
|
+
});
|
|
145
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { afterEach, beforeEach, describe, expect, test } from "bun:test";
|
|
2
|
-
import { mkdirSync,
|
|
2
|
+
import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
3
3
|
import * as os from "node:os";
|
|
4
4
|
import * as path from "node:path";
|
|
5
5
|
import {
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
getProjectMagicContextDir,
|
|
16
16
|
getProjectMagicContextHistorianDir,
|
|
17
17
|
} from "./data-path";
|
|
18
|
+
import { createTestTempDirFromPath } from "./test-temp-dir";
|
|
18
19
|
|
|
19
20
|
const savedEnv = {
|
|
20
21
|
XDG_CACHE_HOME: process.env.XDG_CACHE_HOME,
|
|
@@ -286,7 +287,7 @@ describe("data-path", () => {
|
|
|
286
287
|
|
|
287
288
|
describe("ensureCortexKitArtifactGitignore", () => {
|
|
288
289
|
test("creates .cortexkit/.gitignore with a fenced magic-context block", () => {
|
|
289
|
-
const dir =
|
|
290
|
+
const dir = createTestTempDirFromPath(path.join(os.tmpdir(), "mc-gi-"));
|
|
290
291
|
try {
|
|
291
292
|
ensureCortexKitArtifactGitignore(dir);
|
|
292
293
|
const gi = readFileSync(path.join(dir, ".cortexkit", ".gitignore"), "utf8");
|
|
@@ -299,7 +300,7 @@ describe("ensureCortexKitArtifactGitignore", () => {
|
|
|
299
300
|
});
|
|
300
301
|
|
|
301
302
|
test("is idempotent — a second call does not duplicate the block", () => {
|
|
302
|
-
const dir =
|
|
303
|
+
const dir = createTestTempDirFromPath(path.join(os.tmpdir(), "mc-gi-"));
|
|
303
304
|
try {
|
|
304
305
|
ensureCortexKitArtifactGitignore(dir);
|
|
305
306
|
ensureCortexKitArtifactGitignore(dir);
|
|
@@ -312,7 +313,7 @@ describe("ensureCortexKitArtifactGitignore", () => {
|
|
|
312
313
|
});
|
|
313
314
|
|
|
314
315
|
test("preserves a sibling module's existing entries (appends, never clobbers)", () => {
|
|
315
|
-
const dir =
|
|
316
|
+
const dir = createTestTempDirFromPath(path.join(os.tmpdir(), "mc-gi-"));
|
|
316
317
|
try {
|
|
317
318
|
const ckDir = path.join(dir, ".cortexkit");
|
|
318
319
|
mkdirSync(ckDir, { recursive: true });
|
|
@@ -333,7 +334,7 @@ describe("ensureCortexKitArtifactGitignore", () => {
|
|
|
333
334
|
});
|
|
334
335
|
|
|
335
336
|
test("does not ignore the project config — only the artifact dir", () => {
|
|
336
|
-
const dir =
|
|
337
|
+
const dir = createTestTempDirFromPath(path.join(os.tmpdir(), "mc-gi-"));
|
|
337
338
|
try {
|
|
338
339
|
ensureCortexKitArtifactGitignore(dir);
|
|
339
340
|
const gi = readFileSync(path.join(dir, ".cortexkit", ".gitignore"), "utf8");
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { expect, test } from "bun:test";
|
|
2
|
+
import { isEmbeddingHostBusy, observeEmbeddingActivity } from "./embedding-activity";
|
|
3
|
+
|
|
4
|
+
test("background embedding gate tracks all active sessions and releases on idle or deletion", () => {
|
|
5
|
+
const status = (sessionID: string, type: string) =>
|
|
6
|
+
observeEmbeddingActivity({
|
|
7
|
+
type: "session.status",
|
|
8
|
+
properties: { sessionID, status: { type } },
|
|
9
|
+
});
|
|
10
|
+
expect(isEmbeddingHostBusy()).toBe(false);
|
|
11
|
+
status("embedding-gate-a", "busy");
|
|
12
|
+
status("embedding-gate-b", "retry");
|
|
13
|
+
expect(isEmbeddingHostBusy()).toBe(true);
|
|
14
|
+
status("embedding-gate-a", "idle");
|
|
15
|
+
expect(isEmbeddingHostBusy()).toBe(true);
|
|
16
|
+
observeEmbeddingActivity({
|
|
17
|
+
type: "session.deleted",
|
|
18
|
+
properties: { sessionID: "embedding-gate-b" },
|
|
19
|
+
});
|
|
20
|
+
expect(isEmbeddingHostBusy()).toBe(false);
|
|
21
|
+
});
|