@cortexkit/opencode-magic-context 0.44.3 → 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-vjmvh6pz.js → derive-budgets-a63zsm5c.js} +4 -4
- 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/map-memories.d.ts.map +1 -1
- 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 +1 -0
- 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 +5 -4
- 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 +68 -3
- 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/features/magic-context/v22-deferred-backfill.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-render-epoch.d.ts +12 -1
- package/dist/hooks/magic-context/compartment-render-epoch.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/drop-stale-reduce-calls.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/event-resolvers.d.ts +7 -0
- package/dist/hooks/magic-context/event-resolvers.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 +13 -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 +17 -4
- 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/read-session-raw.d.ts +2 -2
- package/dist/hooks/magic-context/read-session-raw.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/tokenizer-calibration.d.ts +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 +38 -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-yhm60r53.js → index-16ny736w.js} +13622 -28584
- package/dist/{index-q5p1aqvv.js → index-2aq21j41.js} +1208 -429
- 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-nf9sk8sh.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-y5145x8k.js → index-n96ag4rk.js} +15 -1
- 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-9y5p0d50.js → index-vvtfyw1z.js} +13 -76
- 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-rdsaxnf2.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 +7560 -8084
- 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-8rxs0tc9.js +84 -0
- 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 +41 -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/transcript.d.ts +2 -0
- package/dist/shared/transcript.d.ts.map +1 -1
- package/dist/shared/user-answer.d.ts +4 -0
- package/dist/shared/user-answer.d.ts.map +1 -0
- 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/store.d.ts +1 -1
- package/dist/v2/hooks/store.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/{read-session-chunk-n072mcq4.js → v2/read-session-chunk-hjza38hr.js} +24 -7
- 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-dgg5y7er.js → v2/server-hfjfbg59.js} +849 -747
- 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 +8868 -107184
- package/dist/v2/store-reader.d.ts +52 -1
- 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 +191 -12
- package/src/shared/rpc-utils.ts +184 -26
- 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 +17 -3
- 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/transcript.ts +3 -0
- package/src/shared/tui-config.test.ts +6 -5
- package/src/shared/tui-preferences.test.ts +3 -2
- package/src/shared/user-answer.test.ts +40 -0
- package/src/shared/user-answer.ts +17 -0
- 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-19tr6zya.js +0 -22
- package/dist/task-config-2bm68628.js +0 -9
- package/dist/transform-postprocess-phase-z2mfc5w1.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-sy4m56a7.js +0 -19
- /package/dist/{index-s70wtd8k.js → index-q6hef7fh.js} +0 -0
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one place a `/ctx-status` payload is checked before a status surface
|
|
3
|
+
* draws it.
|
|
4
|
+
*
|
|
5
|
+
* The OpenCode status dialog receives its data over RPC from the Magic Context
|
|
6
|
+
* server, and nothing guarantees that server is the same version as the UI or
|
|
7
|
+
* that it answered with a full status snapshot at all: it answers
|
|
8
|
+
* `{ sessionId, disabled: true }` for a directory it keeps no state for, an
|
|
9
|
+
* error envelope when it cannot read the session, and an older or newer field
|
|
10
|
+
* set when OpenCode was not restarted after an update. The shared view model
|
|
11
|
+
* used to read those fields unguarded, so a payload without `usagePercentage`
|
|
12
|
+
* threw inside the dialog's first render and took the whole TUI down.
|
|
13
|
+
*
|
|
14
|
+
* Every payload therefore passes through here first. Required fields are
|
|
15
|
+
* checked once; a payload missing any of them becomes a named "status
|
|
16
|
+
* unavailable" reason instead of a view. Optional fields with an unexpected
|
|
17
|
+
* shape are dropped (and listed) rather than passed on, so `buildStatusView`
|
|
18
|
+
* only ever sees values it can format. Pi builds its snapshot in process, but
|
|
19
|
+
* its overlay goes through the same check so both hosts draw from one contract.
|
|
20
|
+
*/
|
|
21
|
+
import type { SidebarSnapshot } from "./rpc-types";
|
|
22
|
+
import { type StatusWarningInput, statusWarningsFromDetail } from "./status-summary";
|
|
23
|
+
import type { CheckedStatusViewSource, StatusViewSource } from "./status-view";
|
|
24
|
+
import { USER_FACING_FAILURES, type UserFacingFailureKey } from "./user-facing-codes";
|
|
25
|
+
|
|
26
|
+
/** Why a status surface shows "status unavailable" instead of the status view. */
|
|
27
|
+
export type StatusUnavailableReason =
|
|
28
|
+
/** The server could not be reached, or it answered with an error. */
|
|
29
|
+
| { readonly kind: "rpc_error"; readonly message: string }
|
|
30
|
+
/**
|
|
31
|
+
* The server answered that it keeps no Magic Context state for this
|
|
32
|
+
* directory: it is the user's home directory, or no project identity could
|
|
33
|
+
* be resolved for it (memory features are paused).
|
|
34
|
+
*/
|
|
35
|
+
| { readonly kind: "not_tracked"; readonly cause: "home_directory" | "identity_paused" }
|
|
36
|
+
/** The payload lacks fields the view needs, or carries them with the wrong type. */
|
|
37
|
+
| { readonly kind: "malformed"; readonly fields: readonly string[] }
|
|
38
|
+
/**
|
|
39
|
+
* Building the view from a checked payload still threw. The check is meant
|
|
40
|
+
* to make this impossible; the reason exists so a gap in the check shows up
|
|
41
|
+
* as a named message in the dialog rather than as a crashed TUI.
|
|
42
|
+
*/
|
|
43
|
+
| { readonly kind: "view_error"; readonly message: string };
|
|
44
|
+
|
|
45
|
+
/** Plugin versions on both ends of the status RPC. */
|
|
46
|
+
export interface StatusVersions {
|
|
47
|
+
/**
|
|
48
|
+
* Version the Magic Context server reported, or null when it answered
|
|
49
|
+
* without one: servers older than the `pluginVersion` field. A request that
|
|
50
|
+
* got no answer carries no versions at all rather than a null here.
|
|
51
|
+
*/
|
|
52
|
+
readonly server: string | null;
|
|
53
|
+
/** Version of the package drawing the status view. */
|
|
54
|
+
readonly ui: string;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Result of checking one status payload. `extras` carries host-specific values
|
|
59
|
+
* the host draws outside the shared view model (OpenCode's live recomp progress,
|
|
60
|
+
* for example); a host with none uses `undefined`.
|
|
61
|
+
*/
|
|
62
|
+
export type StatusCheck<Extras = undefined> =
|
|
63
|
+
| {
|
|
64
|
+
readonly state: "ready";
|
|
65
|
+
readonly source: CheckedStatusViewSource;
|
|
66
|
+
/** Optional fields that were present with an unexpected shape and were left out. */
|
|
67
|
+
readonly ignoredFields: readonly string[];
|
|
68
|
+
/** Null on hosts where the status comes from the same process as the view. */
|
|
69
|
+
readonly versions: StatusVersions | null;
|
|
70
|
+
readonly extras: Extras;
|
|
71
|
+
}
|
|
72
|
+
| {
|
|
73
|
+
readonly state: "unavailable";
|
|
74
|
+
readonly reason: StatusUnavailableReason;
|
|
75
|
+
readonly versions: StatusVersions | null;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
/** What the OpenCode dialog draws beyond the shared view model. */
|
|
79
|
+
export interface OpenCodeStatusExtras {
|
|
80
|
+
readonly recompProgress: NonNullable<SidebarSnapshot["recompProgress"]> | null;
|
|
81
|
+
/** True when Rust authority has rerouted host tool and historian paths to the module. */
|
|
82
|
+
readonly hostBackendsModuleSide: boolean;
|
|
83
|
+
/** Read by OpenCode 2's plain-text status, drawn where no component dialog can be. */
|
|
84
|
+
readonly historianRunning: boolean;
|
|
85
|
+
readonly lastTransformError: string | null;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
type Fields = Record<string, unknown>;
|
|
89
|
+
|
|
90
|
+
function isRecord(value: unknown): value is Fields {
|
|
91
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Any number except NaN. Pi reports "never expires" as an infinite remaining time. */
|
|
95
|
+
function isNumber(value: unknown): value is number {
|
|
96
|
+
return typeof value === "number" && !Number.isNaN(value);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function isFiniteNumber(value: unknown): value is number {
|
|
100
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function isString(value: unknown): value is string {
|
|
104
|
+
return typeof value === "string";
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function isBoolean(value: unknown): value is boolean {
|
|
108
|
+
return typeof value === "boolean";
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function isUserFacingFailureKey(value: unknown): value is UserFacingFailureKey {
|
|
112
|
+
return typeof value === "string" && Object.hasOwn(USER_FACING_FAILURES, value);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Number fields every status view needs; a payload without one of them has nothing to draw. */
|
|
116
|
+
const REQUIRED_NUMBER_FIELDS = [
|
|
117
|
+
"usagePercentage",
|
|
118
|
+
"inputTokens",
|
|
119
|
+
"contextLimit",
|
|
120
|
+
"executeThreshold",
|
|
121
|
+
"systemPromptTokens",
|
|
122
|
+
"docsTokens",
|
|
123
|
+
"compartmentTokens",
|
|
124
|
+
"compartmentCount",
|
|
125
|
+
"factTokens",
|
|
126
|
+
"memoryTokens",
|
|
127
|
+
"memoryBlockCount",
|
|
128
|
+
"profileTokens",
|
|
129
|
+
"conversationTokens",
|
|
130
|
+
"toolCallTokens",
|
|
131
|
+
"toolDefinitionTokens",
|
|
132
|
+
"activeTags",
|
|
133
|
+
"droppedTags",
|
|
134
|
+
"totalTags",
|
|
135
|
+
"activeBytes",
|
|
136
|
+
"lastNudgeTokens",
|
|
137
|
+
"pendingOpsCount",
|
|
138
|
+
"protectedTagCount",
|
|
139
|
+
"lastResponseTime",
|
|
140
|
+
"cacheRemainingMs",
|
|
141
|
+
"historyBlockTokens",
|
|
142
|
+
"memoryCount",
|
|
143
|
+
] as const satisfies readonly (keyof StatusViewSource)[];
|
|
144
|
+
|
|
145
|
+
const REQUIRED_BOOLEAN_FIELDS = [
|
|
146
|
+
"isSubagent",
|
|
147
|
+
"cacheExpired",
|
|
148
|
+
] as const satisfies readonly (keyof StatusViewSource)[];
|
|
149
|
+
|
|
150
|
+
type RequiredNumberField = (typeof REQUIRED_NUMBER_FIELDS)[number];
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Reads the optional fields, keeping each only when it has the shape the view
|
|
154
|
+
* formats. A field with any other shape is recorded in `ignored` and left out,
|
|
155
|
+
* which the view treats exactly like an absent field.
|
|
156
|
+
*/
|
|
157
|
+
class OptionalFields {
|
|
158
|
+
readonly ignored: string[] = [];
|
|
159
|
+
|
|
160
|
+
constructor(private readonly raw: Fields) {}
|
|
161
|
+
|
|
162
|
+
read<T>(field: string, accept: (value: unknown) => value is T): T | undefined {
|
|
163
|
+
const value = this.raw[field];
|
|
164
|
+
if (value === undefined) return undefined;
|
|
165
|
+
if (accept(value)) return value;
|
|
166
|
+
this.ignored.push(field);
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** Arrays keep their well-formed entries; the field is listed when any entry was dropped. */
|
|
171
|
+
readArray<T>(field: string, accept: (value: unknown) => value is T): T[] | undefined {
|
|
172
|
+
const value = this.raw[field];
|
|
173
|
+
if (value === undefined) return undefined;
|
|
174
|
+
if (!Array.isArray(value)) {
|
|
175
|
+
this.ignored.push(field);
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
const kept = value.filter(accept);
|
|
179
|
+
if (kept.length !== value.length) this.ignored.push(field);
|
|
180
|
+
return kept;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function isWindowGeometry(
|
|
185
|
+
value: unknown,
|
|
186
|
+
): value is NonNullable<StatusViewSource["windowGeometry"]> {
|
|
187
|
+
if (!isRecord(value) || !isNumber(value.usableSoft) || !isRecord(value.derivation))
|
|
188
|
+
return false;
|
|
189
|
+
const derivation = value.derivation;
|
|
190
|
+
return (
|
|
191
|
+
isNumber(derivation.window) &&
|
|
192
|
+
isNumber(derivation.reserve) &&
|
|
193
|
+
isString(derivation.reserveSource)
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function isTailHygiene(value: unknown): value is NonNullable<StatusViewSource["tailHygiene"]> {
|
|
198
|
+
return (
|
|
199
|
+
isRecord(value) &&
|
|
200
|
+
isNumber(value.u) &&
|
|
201
|
+
isNumber(value.t) &&
|
|
202
|
+
isNumber(value.severity) &&
|
|
203
|
+
isBoolean(value.evaluable)
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function isCompactionMarker(
|
|
208
|
+
value: unknown,
|
|
209
|
+
): value is NonNullable<StatusViewSource["compactionMarker"]> {
|
|
210
|
+
return (
|
|
211
|
+
isRecord(value) &&
|
|
212
|
+
(value.code === null || value.code === "MC-C11") &&
|
|
213
|
+
isNumber(value.attempts) &&
|
|
214
|
+
(value.lastError === null || isString(value.lastError))
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function isTickFailure(
|
|
219
|
+
value: unknown,
|
|
220
|
+
): value is NonNullable<StatusViewSource["dreamerTickFailure"]> {
|
|
221
|
+
return isRecord(value) && isString(value.stage) && isNumber(value.at);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Any object is kept: the parse-failure line only interpolates its fields, so
|
|
226
|
+
* an entry from a server with a different failure shape still prints (with the
|
|
227
|
+
* unknown parts blank) instead of disappearing.
|
|
228
|
+
*/
|
|
229
|
+
function isConfigParseFailure(
|
|
230
|
+
value: unknown,
|
|
231
|
+
): value is NonNullable<StatusViewSource["configParseFailures"]>[number] {
|
|
232
|
+
return isRecord(value);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function isConfigReloadFailure(
|
|
236
|
+
value: unknown,
|
|
237
|
+
): value is NonNullable<StatusViewSource["configReloadFailure"]> {
|
|
238
|
+
return isRecord(value) && isString(value.path) && isString(value.message);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function isUnconfirmedMigrationHolders(
|
|
242
|
+
value: unknown,
|
|
243
|
+
): value is NonNullable<StatusViewSource["unconfirmedMigrationHolders"]> {
|
|
244
|
+
return (
|
|
245
|
+
isRecord(value) &&
|
|
246
|
+
Array.isArray(value.pids) &&
|
|
247
|
+
value.pids.every(isNumber) &&
|
|
248
|
+
isNumber(value.fromVersion) &&
|
|
249
|
+
isNumber(value.toVersion)
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
function isNullableNumber(value: unknown): value is number | null {
|
|
254
|
+
return value === null || isNumber(value);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
function isNullableString(value: unknown): value is string | null {
|
|
258
|
+
return value === null || isString(value);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
function isCacheTtlSource(
|
|
262
|
+
value: unknown,
|
|
263
|
+
): value is NonNullable<StatusViewSource["cacheTtlSource"]> {
|
|
264
|
+
return isString(value);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Checks a status snapshot against what `buildStatusView` reads and returns a
|
|
269
|
+
* copy holding only those fields. A missing or mistyped required field fails
|
|
270
|
+
* the check with its name; a malformed optional field is dropped and listed.
|
|
271
|
+
*/
|
|
272
|
+
export function checkStatusViewSource(candidate: unknown):
|
|
273
|
+
| {
|
|
274
|
+
readonly ok: true;
|
|
275
|
+
readonly source: CheckedStatusViewSource;
|
|
276
|
+
readonly ignoredFields: string[];
|
|
277
|
+
}
|
|
278
|
+
| { readonly ok: false; readonly fields: string[] } {
|
|
279
|
+
if (!isRecord(candidate)) return { ok: false, fields: ["(the payload is not an object)"] };
|
|
280
|
+
|
|
281
|
+
const missing: string[] = [];
|
|
282
|
+
const numbers = {} as Record<RequiredNumberField, number>;
|
|
283
|
+
for (const field of REQUIRED_NUMBER_FIELDS) {
|
|
284
|
+
const value = candidate[field];
|
|
285
|
+
if (isNumber(value)) numbers[field] = value;
|
|
286
|
+
else missing.push(field);
|
|
287
|
+
}
|
|
288
|
+
for (const field of REQUIRED_BOOLEAN_FIELDS) {
|
|
289
|
+
if (!isBoolean(candidate[field])) missing.push(field);
|
|
290
|
+
}
|
|
291
|
+
const cacheTtl = isString(candidate.cacheTtl) ? candidate.cacheTtl : undefined;
|
|
292
|
+
if (cacheTtl === undefined) missing.push("cacheTtl");
|
|
293
|
+
if (missing.length > 0 || cacheTtl === undefined) return { ok: false, fields: missing };
|
|
294
|
+
|
|
295
|
+
const optional = new OptionalFields(candidate);
|
|
296
|
+
const source: StatusViewSource = {
|
|
297
|
+
...numbers,
|
|
298
|
+
isSubagent: candidate.isSubagent === true,
|
|
299
|
+
cacheExpired: candidate.cacheExpired === true,
|
|
300
|
+
cacheTtl,
|
|
301
|
+
// Older servers leave these out; the view reads a missing budget as "no budget".
|
|
302
|
+
compressionBudget: optional.read("compressionBudget", isNullableNumber) ?? null,
|
|
303
|
+
compressionUsage: optional.read("compressionUsage", isNullableString) ?? null,
|
|
304
|
+
executeThresholdClamped: optional.read("executeThresholdClamped", isBoolean),
|
|
305
|
+
windowGeometry: optional.read("windowGeometry", isWindowGeometry),
|
|
306
|
+
tailHygiene: optional.read("tailHygiene", isTailHygiene),
|
|
307
|
+
tagCountsAuthoritative: optional.read("tagCountsAuthoritative", isBoolean),
|
|
308
|
+
compactionMarker: optional.read("compactionMarker", isCompactionMarker),
|
|
309
|
+
cacheTtlSource: optional.read("cacheTtlSource", isCacheTtlSource),
|
|
310
|
+
cacheTtlModelKey: optional.read("cacheTtlModelKey", isString),
|
|
311
|
+
cacheNeverExpires: optional.read("cacheNeverExpires", isBoolean),
|
|
312
|
+
lastDreamerRunAt: optional.read("lastDreamerRunAt", isNullableNumber),
|
|
313
|
+
dreamerUnsupportedTasks: optional.readArray("dreamerUnsupportedTasks", isString),
|
|
314
|
+
dreamerSkipped: optional.readArray("dreamerSkipped", isString),
|
|
315
|
+
dreamerTickFailure: optional.read(
|
|
316
|
+
"dreamerTickFailure",
|
|
317
|
+
(value): value is NonNullable<StatusViewSource["dreamerTickFailure"]> | null =>
|
|
318
|
+
value === null || isTickFailure(value),
|
|
319
|
+
),
|
|
320
|
+
sessionNoteCount: optional.read("sessionNoteCount", isNumber),
|
|
321
|
+
readySmartNoteCount: optional.read("readySmartNoteCount", isNumber),
|
|
322
|
+
archivedCompartmentCount: optional.read("archivedCompartmentCount", isNumber),
|
|
323
|
+
configParseFailures: optional.readArray("configParseFailures", isConfigParseFailure),
|
|
324
|
+
configGeneration: optional.read("configGeneration", isNumber),
|
|
325
|
+
configAdoptedAt: optional.read("configAdoptedAt", isNumber),
|
|
326
|
+
configReloadFailure: optional.read("configReloadFailure", isConfigReloadFailure),
|
|
327
|
+
compaction_enabled: optional.read("compaction_enabled", isBoolean),
|
|
328
|
+
compactionEnabled: optional.read("compactionEnabled", isBoolean),
|
|
329
|
+
// A failure code this build does not know has no text to print; it is
|
|
330
|
+
// dropped rather than rendered as a crash.
|
|
331
|
+
warnings: optional.readArray("warnings", isUserFacingFailureKey),
|
|
332
|
+
hiddenVariantWarnings: optional.readArray("hiddenVariantWarnings", isString),
|
|
333
|
+
unconfirmedMigrationHolders: optional.read(
|
|
334
|
+
"unconfirmedMigrationHolders",
|
|
335
|
+
isUnconfirmedMigrationHolders,
|
|
336
|
+
),
|
|
337
|
+
};
|
|
338
|
+
// The brand is what lets `buildStatusView` accept this object: only this
|
|
339
|
+
// function produces one, after every field above has been checked.
|
|
340
|
+
return { ok: true, source: source as CheckedStatusViewSource, ignoredFields: optional.ignored };
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/** A host that builds its status in process: no transport, no version to compare. */
|
|
344
|
+
export function checkLocalStatusSource(candidate: unknown): StatusCheck {
|
|
345
|
+
const checked = checkStatusViewSource(candidate);
|
|
346
|
+
if (!checked.ok) {
|
|
347
|
+
return {
|
|
348
|
+
state: "unavailable",
|
|
349
|
+
reason: { kind: "malformed", fields: checked.fields },
|
|
350
|
+
versions: null,
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
return {
|
|
354
|
+
state: "ready",
|
|
355
|
+
source: checked.source,
|
|
356
|
+
ignoredFields: checked.ignoredFields,
|
|
357
|
+
versions: null,
|
|
358
|
+
extras: undefined,
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* An RPC failure (transport error, timeout, or client not started) as a status
|
|
364
|
+
* result. No server answered, so there is no server version to compare.
|
|
365
|
+
*/
|
|
366
|
+
export function statusRpcFailure(message: string): StatusCheck<never> {
|
|
367
|
+
return { state: "unavailable", reason: { kind: "rpc_error", message }, versions: null };
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
function isRecompProgress(
|
|
371
|
+
value: unknown,
|
|
372
|
+
): value is NonNullable<OpenCodeStatusExtras["recompProgress"]> {
|
|
373
|
+
return (
|
|
374
|
+
isRecord(value) &&
|
|
375
|
+
isString(value.phase) &&
|
|
376
|
+
(value.kind === undefined || isString(value.kind)) &&
|
|
377
|
+
isNumber(value.processedMessages) &&
|
|
378
|
+
isNumber(value.totalMessages) &&
|
|
379
|
+
isNumber(value.passCount) &&
|
|
380
|
+
isNumber(value.compartmentsCreated) &&
|
|
381
|
+
(value.message === undefined || isString(value.message)) &&
|
|
382
|
+
(value.note === undefined || isString(value.note))
|
|
383
|
+
);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/** The fields the warning list is derived from, each kept only with a usable shape. */
|
|
387
|
+
function warningInputFrom(raw: Fields, optional: OptionalFields): StatusWarningInput {
|
|
388
|
+
return {
|
|
389
|
+
lastTransformError: optional.read("lastTransformError", isNullableString) ?? null,
|
|
390
|
+
historianFailureCount: optional.read("historianFailureCount", isNumber),
|
|
391
|
+
configParseFailures: optional.readArray("configParseFailures", isConfigParseFailure),
|
|
392
|
+
embedding:
|
|
393
|
+
isRecord(raw.embedding) && isString(raw.embedding.state)
|
|
394
|
+
? { state: raw.embedding.state }
|
|
395
|
+
: undefined,
|
|
396
|
+
loggerDiagnostics:
|
|
397
|
+
isRecord(raw.loggerDiagnostics) && isNumber(raw.loggerDiagnostics.swallowedWriteCount)
|
|
398
|
+
? { swallowedWriteCount: raw.loggerDiagnostics.swallowedWriteCount }
|
|
399
|
+
: undefined,
|
|
400
|
+
memoryMirror: isRecord(raw.memoryMirror)
|
|
401
|
+
? { stalled: raw.memoryMirror.stalled === true }
|
|
402
|
+
: undefined,
|
|
403
|
+
compactionMarker: optional.read("compactionMarker", isCompactionMarker),
|
|
404
|
+
memoryAuthorityMismatch: raw.memoryAuthorityMismatch === true,
|
|
405
|
+
dreamerFailures: Array.isArray(raw.dreamerFailures) ? raw.dreamerFailures : undefined,
|
|
406
|
+
dreamerTickFailure: isTickFailure(raw.dreamerTickFailure) ? raw.dreamerTickFailure : null,
|
|
407
|
+
hostLimitations: optional.readArray("hostLimitations", isUserFacingFailureKey),
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* Model window size the dialog shows. Prefer the RPC-provided limit (what the
|
|
413
|
+
* sidebar shows) so the two surfaces never disagree; derive it from usage only
|
|
414
|
+
* when the limit is absent (0), and leave it at 0 ("?") when usage is 0 too,
|
|
415
|
+
* because the derivation is undefined there.
|
|
416
|
+
*/
|
|
417
|
+
function dialogContextLimit(raw: Fields): unknown {
|
|
418
|
+
const { contextLimit, usagePercentage, inputTokens } = raw;
|
|
419
|
+
if (!isNumber(contextLimit)) return contextLimit;
|
|
420
|
+
if (contextLimit > 0) return contextLimit;
|
|
421
|
+
if (isFiniteNumber(usagePercentage) && usagePercentage > 0 && isFiniteNumber(inputTokens)) {
|
|
422
|
+
return Math.round(inputTokens / (usagePercentage / 100));
|
|
423
|
+
}
|
|
424
|
+
return 0;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Checks a `status-detail` RPC reply for the OpenCode dialog (both host
|
|
429
|
+
* generations). `uiVersion` is the version of the package drawing the dialog;
|
|
430
|
+
* the server reports its own in `pluginVersion`, and a server too old to send
|
|
431
|
+
* it reports `null`.
|
|
432
|
+
*/
|
|
433
|
+
export function checkStatusDetailPayload(
|
|
434
|
+
raw: unknown,
|
|
435
|
+
uiVersion: string,
|
|
436
|
+
): StatusCheck<OpenCodeStatusExtras> {
|
|
437
|
+
if (!isRecord(raw)) {
|
|
438
|
+
return {
|
|
439
|
+
state: "unavailable",
|
|
440
|
+
reason: { kind: "malformed", fields: ["(the payload is not an object)"] },
|
|
441
|
+
versions: null,
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
const versions: StatusVersions = {
|
|
445
|
+
server: isString(raw.pluginVersion) ? raw.pluginVersion : null,
|
|
446
|
+
ui: uiVersion,
|
|
447
|
+
};
|
|
448
|
+
if (isString(raw.error)) {
|
|
449
|
+
// Servers older than the version field send bare error envelopes; that
|
|
450
|
+
// absence says nothing about their age, so no version is compared.
|
|
451
|
+
return {
|
|
452
|
+
state: "unavailable",
|
|
453
|
+
reason: { kind: "rpc_error", message: raw.error },
|
|
454
|
+
versions: versions.server === null ? null : versions,
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
if (raw.disabled === true) {
|
|
458
|
+
return {
|
|
459
|
+
state: "unavailable",
|
|
460
|
+
reason: {
|
|
461
|
+
kind: "not_tracked",
|
|
462
|
+
cause: raw.paused === true ? "identity_paused" : "home_directory",
|
|
463
|
+
},
|
|
464
|
+
versions,
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
const extrasFields = new OptionalFields(raw);
|
|
469
|
+
const warnings = statusWarningsFromDetail(warningInputFrom(raw, extrasFields));
|
|
470
|
+
const checked = checkStatusViewSource({
|
|
471
|
+
...raw,
|
|
472
|
+
contextLimit: dialogContextLimit(raw),
|
|
473
|
+
warnings,
|
|
474
|
+
});
|
|
475
|
+
if (!checked.ok) {
|
|
476
|
+
return {
|
|
477
|
+
state: "unavailable",
|
|
478
|
+
reason: { kind: "malformed", fields: checked.fields },
|
|
479
|
+
versions,
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
const extras: OpenCodeStatusExtras = {
|
|
483
|
+
recompProgress:
|
|
484
|
+
extrasFields.read(
|
|
485
|
+
"recompProgress",
|
|
486
|
+
(value): value is NonNullable<OpenCodeStatusExtras["recompProgress"]> | null =>
|
|
487
|
+
value === null || isRecompProgress(value),
|
|
488
|
+
) ?? null,
|
|
489
|
+
hostBackendsModuleSide: extrasFields.read("hostBackendsModuleSide", isBoolean) ?? false,
|
|
490
|
+
historianRunning: extrasFields.read("historianRunning", isBoolean) ?? false,
|
|
491
|
+
lastTransformError: extrasFields.read("lastTransformError", isNullableString) ?? null,
|
|
492
|
+
};
|
|
493
|
+
return {
|
|
494
|
+
state: "ready",
|
|
495
|
+
source: checked.source,
|
|
496
|
+
ignoredFields: [...new Set([...checked.ignoredFields, ...extrasFields.ignored])],
|
|
497
|
+
versions,
|
|
498
|
+
extras,
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* One line naming a server/UI version difference, or null when both ends run
|
|
504
|
+
* the same version (or the status comes from the same process). A server that
|
|
505
|
+
* reports no version predates the field, so it is older than this UI.
|
|
506
|
+
*/
|
|
507
|
+
export function statusVersionNotice(versions: StatusVersions | null): string | null {
|
|
508
|
+
if (!versions) return null;
|
|
509
|
+
if (versions.server === versions.ui) return null;
|
|
510
|
+
// OpenCode keeps a server process on the build it started with, so an
|
|
511
|
+
// older server here means an OpenCode process from before the update is
|
|
512
|
+
// still running; restarting only this window does not replace it.
|
|
513
|
+
if (versions.server === null) {
|
|
514
|
+
return `An older Magic Context server (one too old to report its version) is still running, while this UI is ${versions.ui}: quit all OpenCode processes, then start OpenCode again`;
|
|
515
|
+
}
|
|
516
|
+
if (compareVersions(versions.server, versions.ui) < 0) {
|
|
517
|
+
return `An older Magic Context (${versions.server}) server is still running, while this UI is ${versions.ui}: quit all OpenCode processes, then start OpenCode again`;
|
|
518
|
+
}
|
|
519
|
+
return `Magic Context server is ${versions.server}, this UI is ${versions.ui}: restart OpenCode`;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
/** Orders dotted release versions numerically; prerelease suffixes are ignored. */
|
|
523
|
+
function compareVersions(left: string, right: string): number {
|
|
524
|
+
const parts = (version: string) =>
|
|
525
|
+
version
|
|
526
|
+
.split(/[-+]/, 1)[0]
|
|
527
|
+
?.split(".")
|
|
528
|
+
.map((part) => Number.parseInt(part, 10) || 0) ?? [];
|
|
529
|
+
const a = parts(left);
|
|
530
|
+
const b = parts(right);
|
|
531
|
+
for (let index = 0; index < Math.max(a.length, b.length); index++) {
|
|
532
|
+
const difference = (a[index] ?? 0) - (b[index] ?? 0);
|
|
533
|
+
if (difference !== 0) return difference;
|
|
534
|
+
}
|
|
535
|
+
return 0;
|
|
536
|
+
}
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
statusColumnsFor,
|
|
9
9
|
statusSectionWidth,
|
|
10
10
|
} from "./status-view";
|
|
11
|
+
import { checkStatusViewSource } from "./status-view-check";
|
|
11
12
|
|
|
12
13
|
const NOW = 1_730_000_000_000;
|
|
13
14
|
|
|
@@ -78,7 +79,11 @@ const SOURCE: StatusViewSource = {
|
|
|
78
79
|
};
|
|
79
80
|
|
|
80
81
|
function view(overrides: Partial<StatusViewSource> = {}) {
|
|
81
|
-
|
|
82
|
+
// buildStatusView only accepts a checked snapshot; a fixture the check
|
|
83
|
+
// rejects is a broken fixture, so say which fields rather than draw nothing.
|
|
84
|
+
const checked = checkStatusViewSource({ ...SOURCE, ...overrides });
|
|
85
|
+
if (!checked.ok) throw new Error(`fixture rejected: ${checked.fields.join(", ")}`);
|
|
86
|
+
return buildStatusView(checked.source, { version: "1.2.3", now: NOW });
|
|
82
87
|
}
|
|
83
88
|
|
|
84
89
|
function rowLabels(sectionTitle: string, overrides: Partial<StatusViewSource> = {}): string[] {
|