@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
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Track busy status only for sessions observed by this process; untracked sessions are not assumed busy. */
|
|
2
|
+
const busySessions = new Set<string>();
|
|
3
|
+
|
|
4
|
+
export function setEmbeddingSessionBusy(sessionId: string, busy: boolean): void {
|
|
5
|
+
if (busy) busySessions.add(sessionId);
|
|
6
|
+
else busySessions.delete(sessionId);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function observeEmbeddingActivity(event: { type: string; properties?: unknown }): void {
|
|
10
|
+
const props = event.properties as
|
|
11
|
+
| { sessionID?: string; status?: { type?: string } }
|
|
12
|
+
| undefined;
|
|
13
|
+
if (!props || typeof props.sessionID !== "string") return;
|
|
14
|
+
if (
|
|
15
|
+
event.type === "session.idle" ||
|
|
16
|
+
event.type === "session.deleted" ||
|
|
17
|
+
(event.type === "session.status" && props.status?.type === "idle")
|
|
18
|
+
) {
|
|
19
|
+
setEmbeddingSessionBusy(props.sessionID, false);
|
|
20
|
+
} else if (event.type === "session.status" && props.status?.type) {
|
|
21
|
+
setEmbeddingSessionBusy(props.sessionID, true);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function isEmbeddingHostBusy(): boolean {
|
|
26
|
+
return busySessions.size > 0;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Forget every busy session (tests only). A test that starts an agent turn and
|
|
31
|
+
* never ends it would otherwise leave the whole process busy, and background
|
|
32
|
+
* embedding in later tests of the same process would stop at once.
|
|
33
|
+
*/
|
|
34
|
+
export function resetEmbeddingActivityForTests(): void {
|
|
35
|
+
busySessions.clear();
|
|
36
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import defaults from "./historian-tool-defaults.json";
|
|
2
|
+
import { renderToolTemplate, type ToolExpansionMap } from "./historian-tool-template";
|
|
3
|
+
|
|
4
|
+
export { defaults as DEFAULT_TOOL_EXPANSIONS };
|
|
5
|
+
export function expandToolPart(part: unknown, overrides?: ToolExpansionMap): string | null {
|
|
6
|
+
if (!part || typeof part !== "object") return null;
|
|
7
|
+
const p = part as Record<string, unknown>;
|
|
8
|
+
if (p.type !== "tool" || typeof p.tool !== "string") return null;
|
|
9
|
+
const template =
|
|
10
|
+
overrides && Object.hasOwn(overrides, p.tool)
|
|
11
|
+
? overrides[p.tool]
|
|
12
|
+
: Object.hasOwn(defaults, p.tool)
|
|
13
|
+
? defaults[p.tool as keyof typeof defaults]
|
|
14
|
+
: undefined;
|
|
15
|
+
if (typeof template !== "string") return null;
|
|
16
|
+
const state = p.state as Record<string, unknown> | undefined;
|
|
17
|
+
return renderToolTemplate(template, state?.input, state?.output ?? state?.error);
|
|
18
|
+
}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/** A deliberately non-executable language for readable, bounded historian tool lines. */
|
|
2
|
+
export type ToolExpansionMap = Record<string, string | false>;
|
|
3
|
+
type Step = { field: string } | { index: number } | { project: string };
|
|
4
|
+
type Expression = {
|
|
5
|
+
steps: Step[];
|
|
6
|
+
each?: Template;
|
|
7
|
+
join?: string;
|
|
8
|
+
count?: boolean;
|
|
9
|
+
cap: number;
|
|
10
|
+
};
|
|
11
|
+
type Template = Array<string | Expression>;
|
|
12
|
+
|
|
13
|
+
class Parser {
|
|
14
|
+
pos = 0;
|
|
15
|
+
constructor(private source: string) {}
|
|
16
|
+
error(): never {
|
|
17
|
+
throw new Error(`Invalid tool expansion template at character ${this.pos + 1}`);
|
|
18
|
+
}
|
|
19
|
+
take(value: string): boolean {
|
|
20
|
+
if (!this.source.startsWith(value, this.pos)) return false;
|
|
21
|
+
this.pos += value.length;
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
field(): string {
|
|
25
|
+
const match = /^[A-Za-z_][A-Za-z0-9_-]*/.exec(this.source.slice(this.pos));
|
|
26
|
+
if (!match) return this.error();
|
|
27
|
+
this.pos += match[0].length;
|
|
28
|
+
return match[0];
|
|
29
|
+
}
|
|
30
|
+
quoted(): string {
|
|
31
|
+
const start = this.pos;
|
|
32
|
+
if (!this.take('"')) return this.error();
|
|
33
|
+
while (this.pos < this.source.length) {
|
|
34
|
+
if (this.take("\\")) {
|
|
35
|
+
this.pos++;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (this.take('"')) {
|
|
39
|
+
try {
|
|
40
|
+
return JSON.parse(this.source.slice(start, this.pos));
|
|
41
|
+
} catch {
|
|
42
|
+
return this.error();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
this.pos++;
|
|
46
|
+
}
|
|
47
|
+
return this.error();
|
|
48
|
+
}
|
|
49
|
+
integer(): number {
|
|
50
|
+
const match = /^\d+/.exec(this.source.slice(this.pos));
|
|
51
|
+
if (!match) return this.error();
|
|
52
|
+
this.pos += match[0].length;
|
|
53
|
+
const n = Number(match[0]);
|
|
54
|
+
if (!Number.isSafeInteger(n)) return this.error();
|
|
55
|
+
return n;
|
|
56
|
+
}
|
|
57
|
+
expression(relative: boolean): Expression {
|
|
58
|
+
const steps: Step[] = [];
|
|
59
|
+
if (!(relative && this.take("."))) {
|
|
60
|
+
const root = this.field();
|
|
61
|
+
if (!relative && root !== "input" && root !== "output") return this.error();
|
|
62
|
+
steps.push({ field: root });
|
|
63
|
+
}
|
|
64
|
+
while (true) {
|
|
65
|
+
if (this.take("[")) {
|
|
66
|
+
if (this.take("*].")) steps.push({ project: this.field() });
|
|
67
|
+
else {
|
|
68
|
+
const index = this.integer();
|
|
69
|
+
if (!this.take("]")) return this.error();
|
|
70
|
+
steps.push({ index });
|
|
71
|
+
}
|
|
72
|
+
} else if (
|
|
73
|
+
this.source[this.pos] === "." &&
|
|
74
|
+
!/^\.(each\(|join\(|count(?:\.|\})|truncate\()/.test(this.source.slice(this.pos))
|
|
75
|
+
) {
|
|
76
|
+
this.pos++;
|
|
77
|
+
steps.push({ field: this.field() });
|
|
78
|
+
if (this.source[this.pos] === "(") return this.error();
|
|
79
|
+
} else break;
|
|
80
|
+
}
|
|
81
|
+
const expression: Expression = { steps, cap: 300 };
|
|
82
|
+
if (this.take(".each(")) {
|
|
83
|
+
if (relative) return this.error();
|
|
84
|
+
expression.each = parseTemplate(this.quoted(), true);
|
|
85
|
+
if (!this.take(")")) return this.error();
|
|
86
|
+
}
|
|
87
|
+
if (this.take(".join(")) {
|
|
88
|
+
expression.join = this.quoted();
|
|
89
|
+
if (!this.take(")")) return this.error();
|
|
90
|
+
}
|
|
91
|
+
if (this.take(".count")) {
|
|
92
|
+
if (expression.each || expression.join !== undefined) return this.error();
|
|
93
|
+
expression.count = true;
|
|
94
|
+
}
|
|
95
|
+
if (this.take(".truncate(")) {
|
|
96
|
+
expression.cap = this.integer();
|
|
97
|
+
if (!this.take(")")) return this.error();
|
|
98
|
+
}
|
|
99
|
+
if (!this.take("}")) return this.error();
|
|
100
|
+
return expression;
|
|
101
|
+
}
|
|
102
|
+
template(relative: boolean): Template {
|
|
103
|
+
const nodes: Template = [];
|
|
104
|
+
while (this.pos < this.source.length) {
|
|
105
|
+
const next = this.source.indexOf("${", this.pos);
|
|
106
|
+
if (next < 0) {
|
|
107
|
+
nodes.push(this.source.slice(this.pos));
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
nodes.push(this.source.slice(this.pos, next));
|
|
111
|
+
this.pos = next + 2;
|
|
112
|
+
nodes.push(this.expression(relative));
|
|
113
|
+
}
|
|
114
|
+
return nodes;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function parseTemplate(source: string, relative = false): Template {
|
|
119
|
+
return new Parser(source).template(relative);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export function toolTemplateError(source: string): string | undefined {
|
|
123
|
+
try {
|
|
124
|
+
parseTemplate(source);
|
|
125
|
+
return undefined;
|
|
126
|
+
} catch (error) {
|
|
127
|
+
return (error as Error).message;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const templates = new Map<string, Template | null>();
|
|
132
|
+
function compiled(source: string): Template | null {
|
|
133
|
+
if (!templates.has(source)) {
|
|
134
|
+
// Validation belongs to config loading. Malformed data from an older host
|
|
135
|
+
// must never interrupt a historian run.
|
|
136
|
+
try {
|
|
137
|
+
templates.set(source, parseTemplate(source));
|
|
138
|
+
} catch {
|
|
139
|
+
templates.set(source, null);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return templates.get(source) ?? null;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function oneLine(value: string): string {
|
|
146
|
+
return value.replace(/[\r\n\u2028\u2029]+/g, " ");
|
|
147
|
+
}
|
|
148
|
+
function truncate(value: string, cap: number): string {
|
|
149
|
+
const chars = Array.from(oneLine(value));
|
|
150
|
+
return chars.length > cap ? `${chars.slice(0, cap).join("")}…` : chars.join("");
|
|
151
|
+
}
|
|
152
|
+
function scalar(value: unknown): string {
|
|
153
|
+
if (value === undefined) return "";
|
|
154
|
+
return typeof value === "string" ? value : compactJson(value);
|
|
155
|
+
}
|
|
156
|
+
// Sort object keys so the two engines do not depend on their JSON map insertion order.
|
|
157
|
+
function compactJson(value: unknown): string {
|
|
158
|
+
if (Array.isArray(value)) return `[${value.map((v) => compactJson(v)).join(",")}]`;
|
|
159
|
+
if (value !== null && typeof value === "object")
|
|
160
|
+
return `{${Object.keys(value)
|
|
161
|
+
.sort()
|
|
162
|
+
.map(
|
|
163
|
+
(key) =>
|
|
164
|
+
`${JSON.stringify(key)}:${compactJson((value as Record<string, unknown>)[key])}`,
|
|
165
|
+
)
|
|
166
|
+
.join(",")}}`;
|
|
167
|
+
return JSON.stringify(value) ?? "null";
|
|
168
|
+
}
|
|
169
|
+
function field(value: unknown, key: string): unknown {
|
|
170
|
+
return value !== null &&
|
|
171
|
+
typeof value === "object" &&
|
|
172
|
+
!Array.isArray(value) &&
|
|
173
|
+
Object.hasOwn(value, key)
|
|
174
|
+
? (value as Record<string, unknown>)[key]
|
|
175
|
+
: undefined;
|
|
176
|
+
}
|
|
177
|
+
function render(nodes: Template, root: unknown): string {
|
|
178
|
+
return nodes
|
|
179
|
+
.map((node) => {
|
|
180
|
+
if (typeof node === "string") return node;
|
|
181
|
+
let value = root;
|
|
182
|
+
let list = false;
|
|
183
|
+
for (const step of node.steps) {
|
|
184
|
+
if ("field" in step)
|
|
185
|
+
value =
|
|
186
|
+
list && Array.isArray(value)
|
|
187
|
+
? value.map((item) => field(item, step.field))
|
|
188
|
+
: field(value, step.field);
|
|
189
|
+
else if ("index" in step)
|
|
190
|
+
value = Array.isArray(value) ? value[step.index] : undefined;
|
|
191
|
+
else {
|
|
192
|
+
value = Array.isArray(value)
|
|
193
|
+
? value.map((item) => field(item, step.project))
|
|
194
|
+
: undefined;
|
|
195
|
+
list = true;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (node.count)
|
|
199
|
+
return truncate(Array.isArray(value) ? String(value.length) : "", node.cap);
|
|
200
|
+
if (node.each || list || node.join !== undefined) {
|
|
201
|
+
if (!Array.isArray(value)) return "";
|
|
202
|
+
const elements = value
|
|
203
|
+
.slice(0, 10)
|
|
204
|
+
.map((item) =>
|
|
205
|
+
truncate(node.each ? render(node.each, item) : scalar(item), 300),
|
|
206
|
+
);
|
|
207
|
+
if (value.length > 10) elements.push(`… +${value.length - 10} more`);
|
|
208
|
+
return truncate(elements.join(node.join ?? (node.each ? "; " : ", ")), node.cap);
|
|
209
|
+
}
|
|
210
|
+
return truncate(scalar(value), node.cap);
|
|
211
|
+
})
|
|
212
|
+
.join("");
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export function renderToolTemplate(
|
|
216
|
+
source: string,
|
|
217
|
+
input: unknown,
|
|
218
|
+
output?: unknown,
|
|
219
|
+
): string | null {
|
|
220
|
+
const nodes = compiled(source);
|
|
221
|
+
if (!nodes) return null;
|
|
222
|
+
const text =
|
|
223
|
+
typeof output === "string" ? output : output === undefined ? "" : compactJson(output);
|
|
224
|
+
let structured: unknown = output;
|
|
225
|
+
if (typeof output === "string") {
|
|
226
|
+
try {
|
|
227
|
+
const parsed = JSON.parse(output);
|
|
228
|
+
structured =
|
|
229
|
+
parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : undefined;
|
|
230
|
+
} catch {
|
|
231
|
+
structured = undefined;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// The bare output placeholder is the original result text, not reserialized JSON.
|
|
235
|
+
const root = { input, output: structured };
|
|
236
|
+
const bareOutputNodes = nodes.map((node) =>
|
|
237
|
+
typeof node !== "string" &&
|
|
238
|
+
node.steps.length === 1 &&
|
|
239
|
+
"field" in node.steps[0] &&
|
|
240
|
+
node.steps[0].field === "output" &&
|
|
241
|
+
!node.each &&
|
|
242
|
+
!node.count &&
|
|
243
|
+
node.join === undefined
|
|
244
|
+
? truncate(text ?? "", node.cap)
|
|
245
|
+
: node,
|
|
246
|
+
);
|
|
247
|
+
return truncate(render(bareOutputNodes, root), 1000);
|
|
248
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { describe, expect, it } from "bun:test";
|
|
2
|
+
|
|
3
|
+
import { isTransientHistorianPromptError } from "./historian-transient-error";
|
|
4
|
+
|
|
5
|
+
describe("isTransientHistorianPromptError", () => {
|
|
6
|
+
it.each([
|
|
7
|
+
"429 rate limit from provider",
|
|
8
|
+
"rate_limit_error: slow down",
|
|
9
|
+
"503 Service Unavailable",
|
|
10
|
+
"502 Bad Gateway from upstream", // "bad gateway" is not "bad request"
|
|
11
|
+
"500 Internal Server Error",
|
|
12
|
+
"Overloaded",
|
|
13
|
+
"request timeout",
|
|
14
|
+
"read ECONNRESET",
|
|
15
|
+
"connect ETIMEDOUT",
|
|
16
|
+
"503 upstream author-profile service unavailable",
|
|
17
|
+
])("retries %p", (message) => {
|
|
18
|
+
expect(isTransientHistorianPromptError(message)).toBe(true);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it.each([
|
|
22
|
+
"401 unauthorized",
|
|
23
|
+
"403 Forbidden",
|
|
24
|
+
"authentication_error: invalid x-api-key",
|
|
25
|
+
"OAuth token expired; 503",
|
|
26
|
+
"Authorization header missing (429)",
|
|
27
|
+
"400 Bad Request",
|
|
28
|
+
"status 400: malformed",
|
|
29
|
+
"invalid_request_error: prompt is too long: 250000 tokens > 200000 maximum",
|
|
30
|
+
"prompt is too long: 250000 tokens",
|
|
31
|
+
"request id 15003 failed",
|
|
32
|
+
"model not found",
|
|
33
|
+
])("does not retry %p", (message) => {
|
|
34
|
+
expect(isTransientHistorianPromptError(message)).toBe(false);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decide whether a failed historian prompt is worth retrying on the same model.
|
|
3
|
+
*
|
|
4
|
+
* Provider errors arrive as free text, so this is a keyword test, but every
|
|
5
|
+
* keyword must stand alone: "auth" must not match "author", and status 500
|
|
6
|
+
* must not match "250000" inside "prompt is too long: 250000 tokens". A
|
|
7
|
+
* misread here either retries a request that can never succeed (twice more,
|
|
8
|
+
* at full cost) or gives up on a provider blip.
|
|
9
|
+
*
|
|
10
|
+
* Shared by the OpenCode and Pi historian runners so both classify alike.
|
|
11
|
+
*/
|
|
12
|
+
const NON_TRANSIENT_PATTERN =
|
|
13
|
+
/(?<![a-z])(?:invalid[ _]request|bad[ _]request|unauthori[sz]ed|forbidden|authentication|authenticate|authorization|o?auth)(?![a-z])|(?:^| )400(?!\d)/;
|
|
14
|
+
|
|
15
|
+
const TRANSIENT_PATTERN =
|
|
16
|
+
/(?<!\d)(?:429|500|502|503)(?!\d)|rate[ _]limit|timeout|econnreset|etimedout|overloaded/;
|
|
17
|
+
|
|
18
|
+
export function isTransientHistorianPromptError(message: string): boolean {
|
|
19
|
+
const normalized = message.toLowerCase();
|
|
20
|
+
if (NON_TRANSIENT_PATTERN.test(normalized)) return false;
|
|
21
|
+
return TRANSIENT_PATTERN.test(normalized);
|
|
22
|
+
}
|
package/src/shared/jsonc-edit.ts
CHANGED
|
@@ -256,7 +256,26 @@ export function setJsoncValue(text: string, path: JSONPath, value: unknown): str
|
|
|
256
256
|
return text.slice(0, node.offset) + serialized + text.slice(node.offset + node.length);
|
|
257
257
|
}
|
|
258
258
|
|
|
259
|
-
return applyEdits(
|
|
259
|
+
return applyEdits(
|
|
260
|
+
text,
|
|
261
|
+
modify(text, path, value, { formattingOptions: documentFormatting(text) }),
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* The line ending and indentation a document already uses, so an inserted
|
|
267
|
+
* property is laid out like its siblings instead of being written compactly
|
|
268
|
+
* onto the previous line.
|
|
269
|
+
*/
|
|
270
|
+
function documentFormatting(text: string): {
|
|
271
|
+
eol: string;
|
|
272
|
+
insertSpaces: boolean;
|
|
273
|
+
tabSize: number;
|
|
274
|
+
} {
|
|
275
|
+
const eol = text.includes("\r\n") ? "\r\n" : "\n";
|
|
276
|
+
const indent = /\n([ \t]+)\S/.exec(text)?.[1];
|
|
277
|
+
if (indent?.startsWith("\t")) return { eol, insertSpaces: false, tabSize: 1 };
|
|
278
|
+
return { eol, insertSpaces: true, tabSize: indent ? indent.length : 2 };
|
|
260
279
|
}
|
|
261
280
|
|
|
262
281
|
function removeObjectProperty(text: string, object: Node, key: string): string {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { afterEach, describe, expect, test } from "bun:test";
|
|
2
|
-
import {
|
|
2
|
+
import { rmSync } 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
|
type LoggerScenarioResult = {
|
|
7
8
|
exists: boolean;
|
|
@@ -186,7 +187,7 @@ async function runLoggerScenario<T>(
|
|
|
186
187
|
| "bounded"
|
|
187
188
|
| "oversized",
|
|
188
189
|
): Promise<T> {
|
|
189
|
-
const root =
|
|
190
|
+
const root = createTestTempDirFromPath(path.join(os.tmpdir(), "magic-context-logger-test-"));
|
|
190
191
|
scenarioRoots.push(root);
|
|
191
192
|
const child = Bun.spawn({
|
|
192
193
|
windowsHide: true,
|
package/src/shared/logger.ts
CHANGED
|
@@ -2,6 +2,7 @@ import * as fs from "node:fs";
|
|
|
2
2
|
import * as path from "node:path";
|
|
3
3
|
import { getMagicContextLogPath } from "./data-path";
|
|
4
4
|
import { sanitizeConfigValue, sanitizeDiagnosticText } from "./redaction";
|
|
5
|
+
import { stalePluginBuildDiagnostic } from "./stale-plugin-build";
|
|
5
6
|
|
|
6
7
|
const isTestEnv = process.env.NODE_ENV === "test";
|
|
7
8
|
|
|
@@ -189,9 +190,43 @@ function scheduleFlush(): void {
|
|
|
189
190
|
}, FLUSH_INTERVAL_MS);
|
|
190
191
|
}
|
|
191
192
|
|
|
192
|
-
|
|
193
|
+
// Set inside a worker thread so its lines reach the main thread's log file. The
|
|
194
|
+
// log path depends on which host (OpenCode or Pi) the main thread registered,
|
|
195
|
+
// and only the main thread's buffer and flush timer write that file.
|
|
196
|
+
let lineForwarder: ((line: string) => void) | null = null;
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Hand every formatted log line to `forward` instead of this thread's buffer.
|
|
200
|
+
* Pass null to log locally again.
|
|
201
|
+
*/
|
|
202
|
+
export function setLogLineForwarder(forward: ((line: string) => void) | null): void {
|
|
203
|
+
lineForwarder = forward;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** Append a line formatted by `log` on another thread, keeping its timestamp. */
|
|
207
|
+
export function writeForwardedLogLine(line: string): void {
|
|
193
208
|
if (isTestEnv) return;
|
|
194
209
|
try {
|
|
210
|
+
buffer.push(line);
|
|
211
|
+
bufferedBytes += Buffer.byteLength(line);
|
|
212
|
+
boundBuffer();
|
|
213
|
+
if (buffer.length >= BUFFER_SIZE_LIMIT) flush();
|
|
214
|
+
else scheduleFlush();
|
|
215
|
+
} catch {
|
|
216
|
+
// Intentional: logging must never throw
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export function log(message: string, data?: unknown): void {
|
|
221
|
+
try {
|
|
222
|
+
let diagnostic = stalePluginBuildDiagnostic(data);
|
|
223
|
+
if (diagnostic === undefined) diagnostic = stalePluginBuildDiagnostic(message);
|
|
224
|
+
if (diagnostic === null) return;
|
|
225
|
+
if (diagnostic !== undefined) {
|
|
226
|
+
message = diagnostic;
|
|
227
|
+
data = undefined;
|
|
228
|
+
}
|
|
229
|
+
if (isTestEnv) return;
|
|
195
230
|
const timestamp = new Date().toISOString();
|
|
196
231
|
const serialized =
|
|
197
232
|
data === undefined
|
|
@@ -202,6 +237,10 @@ export function log(message: string, data?: unknown): void {
|
|
|
202
237
|
)}`
|
|
203
238
|
: ` ${JSON.stringify(sanitizeConfigValue(data))}`;
|
|
204
239
|
const line = `[${timestamp}] ${sanitizeDiagnosticText(message)}${serialized}\n`;
|
|
240
|
+
if (lineForwarder) {
|
|
241
|
+
lineForwarder(line);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
205
244
|
buffer.push(line);
|
|
206
245
|
bufferedBytes += Buffer.byteLength(line);
|
|
207
246
|
boundBuffer();
|
|
@@ -650,3 +650,49 @@ describe("host fetch TimeoutError is a timeout", () => {
|
|
|
650
650
|
expect(abort).not.toHaveBeenCalled();
|
|
651
651
|
});
|
|
652
652
|
});
|
|
653
|
+
|
|
654
|
+
test("empty v1 and v2 replies report the provider finish reason", async () => {
|
|
655
|
+
for (const output of [
|
|
656
|
+
[{ info: { role: "assistant", finish: "stop" }, parts: [] }],
|
|
657
|
+
{ text: null, tokenLog: { finish_reason: "stop" } },
|
|
658
|
+
]) {
|
|
659
|
+
const client = createClient(mock(async () => ({})));
|
|
660
|
+
await expect(
|
|
661
|
+
promptSyncWithValidatedOutputRetry(client, createArgs(), {
|
|
662
|
+
fetchOutput: async () => output,
|
|
663
|
+
validateOutput: () => {
|
|
664
|
+
throw new Error("map-memories returned no output");
|
|
665
|
+
},
|
|
666
|
+
}),
|
|
667
|
+
).rejects.toThrow("no output (finish=stop");
|
|
668
|
+
}
|
|
669
|
+
});
|
|
670
|
+
|
|
671
|
+
test("DeepSeek unsupported-model 400 preserves provider status and message rather than no output", async () => {
|
|
672
|
+
const message =
|
|
673
|
+
"The supported API model names are deepseek-flash, deepseek-v4-pro, but you passed deepseek-v4-flash";
|
|
674
|
+
const client = createClient(mock(async () => ({})));
|
|
675
|
+
let caught: unknown;
|
|
676
|
+
try {
|
|
677
|
+
await promptSyncWithValidatedOutputRetry(client, createArgs(), {
|
|
678
|
+
fetchOutput: async () => [
|
|
679
|
+
{
|
|
680
|
+
info: {
|
|
681
|
+
role: "assistant",
|
|
682
|
+
error: { name: "APIError", data: { statusCode: 400, message } },
|
|
683
|
+
},
|
|
684
|
+
parts: [],
|
|
685
|
+
},
|
|
686
|
+
],
|
|
687
|
+
validateOutput: () => {
|
|
688
|
+
throw new Error("map-memories returned no output");
|
|
689
|
+
},
|
|
690
|
+
});
|
|
691
|
+
} catch (error) {
|
|
692
|
+
caught = error;
|
|
693
|
+
}
|
|
694
|
+
expect((caught as Error).message).toContain(message);
|
|
695
|
+
expect((caught as Error).message).toContain("status=400");
|
|
696
|
+
expect((caught as Error).message).not.toContain("no output");
|
|
697
|
+
expect(getPromptFailureDetail(caught)).toMatchObject({ failureClass: "provider_error" });
|
|
698
|
+
});
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { createOpencodeClient } from "@opencode-ai/sdk";
|
|
2
2
|
import { DreamTokenBudgetExceeded } from "../features/magic-context/dreamer/token-budget";
|
|
3
3
|
import { detectOverflow } from "../features/magic-context/overflow-detection";
|
|
4
|
+
import { HiddenCompletionRefusal } from "../hooks/magic-context/compartment-runner-types";
|
|
4
5
|
import { HiddenAgentStepLimit } from "../v2/hooks/hidden-child";
|
|
5
6
|
import {
|
|
7
|
+
describeAssistantError,
|
|
8
|
+
describeAssistantSettlement,
|
|
6
9
|
extractLatestAssistantFailure,
|
|
7
10
|
extractLatestAssistantText,
|
|
8
11
|
} from "./assistant-message-extractor";
|
|
@@ -114,6 +117,7 @@ export interface ValidatedPromptRetryResult<TOutput, TValidated> {
|
|
|
114
117
|
export type PromptFailureClass =
|
|
115
118
|
| "provider_timeout"
|
|
116
119
|
| "provider_error"
|
|
120
|
+
| "local_refusal"
|
|
117
121
|
| "step_limit"
|
|
118
122
|
| "token_budget"
|
|
119
123
|
| "empty_completion"
|
|
@@ -130,6 +134,7 @@ export interface PromptFailureDetail {
|
|
|
130
134
|
providerError: string | null;
|
|
131
135
|
timeoutMs: number | null;
|
|
132
136
|
childSessionId: string | null;
|
|
137
|
+
refusalReason?: string | null;
|
|
133
138
|
}
|
|
134
139
|
|
|
135
140
|
const promptFailureDetails = new WeakMap<object, PromptFailureDetail>();
|
|
@@ -354,6 +359,7 @@ async function abortChildRun(client: Client, sessionId: string): Promise<void> {
|
|
|
354
359
|
function isNonRetryable(error: unknown, externalSignal?: AbortSignal): boolean {
|
|
355
360
|
if (
|
|
356
361
|
externalSignal?.aborted ||
|
|
362
|
+
(error instanceof HiddenCompletionRefusal && error.terminal) ||
|
|
357
363
|
error instanceof HiddenAgentStepLimit ||
|
|
358
364
|
error instanceof DreamTokenBudgetExceeded
|
|
359
365
|
)
|
|
@@ -398,6 +404,7 @@ function classifyPromptFailure(
|
|
|
398
404
|
externalSignal?: AbortSignal,
|
|
399
405
|
): PromptFailureClass {
|
|
400
406
|
const message = extractMessage(error);
|
|
407
|
+
if (error instanceof HiddenCompletionRefusal) return "local_refusal";
|
|
401
408
|
if (error instanceof HiddenAgentStepLimit) return "step_limit";
|
|
402
409
|
if (error instanceof DreamTokenBudgetExceeded) return "token_budget";
|
|
403
410
|
if (externalSignal?.aborted || message === "prompt aborted by external signal") {
|
|
@@ -440,6 +447,11 @@ function throwWithPromptFailure(
|
|
|
440
447
|
providerError,
|
|
441
448
|
timeoutMs: failureClass === "provider_timeout" ? timeoutMs : null,
|
|
442
449
|
childSessionId: transport ? (transport.childSessionId ?? null) : args.path.id || null,
|
|
450
|
+
...(last?.error instanceof HiddenCompletionRefusal
|
|
451
|
+
? {
|
|
452
|
+
refusalReason: sanitizeDiagnosticText(last.error.message).slice(0, 500),
|
|
453
|
+
}
|
|
454
|
+
: {}),
|
|
443
455
|
});
|
|
444
456
|
throw error;
|
|
445
457
|
}
|
|
@@ -659,7 +671,7 @@ async function attemptAndValidate<TOutput, TValidated>(
|
|
|
659
671
|
const assistantFailure = extractLatestAssistantFailure(output);
|
|
660
672
|
if (assistantFailure) {
|
|
661
673
|
const error = new Error(
|
|
662
|
-
`Host recorded assistant error: ${
|
|
674
|
+
`Host recorded assistant error: ${describeAssistantError(assistantFailure.error)}`,
|
|
663
675
|
);
|
|
664
676
|
Object.assign(error, {
|
|
665
677
|
name: "DreamerProviderOutputFailureError",
|
|
@@ -671,6 +683,9 @@ async function attemptAndValidate<TOutput, TValidated>(
|
|
|
671
683
|
const validated = await options.validateOutput(output, attempt);
|
|
672
684
|
return { output, validated, attempt };
|
|
673
685
|
} catch (error) {
|
|
686
|
+
if (error instanceof Error && /no (?:assistant )?output/i.test(error.message)) {
|
|
687
|
+
error.message += ` (${describeAssistantSettlement(output)})`;
|
|
688
|
+
}
|
|
674
689
|
throw {
|
|
675
690
|
error,
|
|
676
691
|
failureClass: classifyPromptFailure(error, "validation", signal),
|