@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,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders the shipped, compiled `/ctx-status` dialog for every status payload
|
|
3
|
+
* the dialog can receive, and checks that each one draws and none throws.
|
|
4
|
+
*
|
|
5
|
+
* Previously the dialog read the RPC reply unchecked: a reply without
|
|
6
|
+
* `usagePercentage` (the server's `{ disabled: true }` answer for a home
|
|
7
|
+
* directory or a paused project identity) threw inside the view memo, and
|
|
8
|
+
* OpenCode's crash screen then reported the follow-on
|
|
9
|
+
* "undefined is not an object (evaluating 'view().headline')".
|
|
10
|
+
*
|
|
11
|
+
* It also checks that the dialog stays inside the surface the host gives it.
|
|
12
|
+
* The dialog sized its section grid from the terminal width instead of its own
|
|
13
|
+
* laid-out width (it listened for an event plain boxes never emit), so inside
|
|
14
|
+
* OpenCode's 60-column dialog the two fixed-width section columns ran past the
|
|
15
|
+
* dialog's right edge (issue 605).
|
|
16
|
+
*
|
|
17
|
+
* The rendering happens in `scripts/render-compiled-status-dialog.ts`, a child
|
|
18
|
+
* process, because it has to register OpenCode's runtime module registry and
|
|
19
|
+
* that registration cannot be undone inside this test process. The child runs
|
|
20
|
+
* with the `browser` condition so `solid-js` is the reactive build OpenCode
|
|
21
|
+
* runs; the server build Bun picks by default never re-renders after layout.
|
|
22
|
+
*/
|
|
23
|
+
import { beforeAll, describe, expect, test } from "bun:test";
|
|
24
|
+
import { join } from "node:path";
|
|
25
|
+
import { checkStatusDetailPayload, statusRpcFailure } from "../../shared/status-view-check";
|
|
26
|
+
import type { StatusDetailResult } from "../data/context-db";
|
|
27
|
+
|
|
28
|
+
const UI = "0.44.5";
|
|
29
|
+
|
|
30
|
+
const COMPLETE = {
|
|
31
|
+
sessionId: "ses_complete",
|
|
32
|
+
pluginVersion: UI,
|
|
33
|
+
usagePercentage: 12.5,
|
|
34
|
+
inputTokens: 25_000,
|
|
35
|
+
contextLimit: 200_000,
|
|
36
|
+
executeThreshold: 65,
|
|
37
|
+
systemPromptTokens: 5_000,
|
|
38
|
+
docsTokens: 0,
|
|
39
|
+
compartmentTokens: 0,
|
|
40
|
+
compartmentCount: 0,
|
|
41
|
+
factTokens: 0,
|
|
42
|
+
memoryTokens: 0,
|
|
43
|
+
memoryBlockCount: 0,
|
|
44
|
+
profileTokens: 0,
|
|
45
|
+
conversationTokens: 20_000,
|
|
46
|
+
toolCallTokens: 0,
|
|
47
|
+
toolDefinitionTokens: 0,
|
|
48
|
+
activeTags: 0,
|
|
49
|
+
droppedTags: 0,
|
|
50
|
+
totalTags: 0,
|
|
51
|
+
activeBytes: 0,
|
|
52
|
+
lastNudgeTokens: 0,
|
|
53
|
+
pendingOpsCount: 0,
|
|
54
|
+
protectedTagCount: 0,
|
|
55
|
+
isSubagent: false,
|
|
56
|
+
cacheTtl: "5m",
|
|
57
|
+
lastResponseTime: 0,
|
|
58
|
+
cacheRemainingMs: 0,
|
|
59
|
+
cacheExpired: false,
|
|
60
|
+
historyBlockTokens: 0,
|
|
61
|
+
compressionBudget: null,
|
|
62
|
+
compressionUsage: null,
|
|
63
|
+
memoryCount: 0,
|
|
64
|
+
};
|
|
65
|
+
const { pluginVersion: _omitted, ...OLDER_SERVER } = COMPLETE;
|
|
66
|
+
|
|
67
|
+
const CASES: Array<{ name: string; status: StatusDetailResult; expected: string[] }> = [
|
|
68
|
+
{
|
|
69
|
+
name: "a complete snapshot",
|
|
70
|
+
status: checkStatusDetailPayload(COMPLETE, UI),
|
|
71
|
+
expected: ["Magic Context Status", "12.5% / 65%"],
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: "an RPC transport failure",
|
|
75
|
+
status: statusRpcFailure("connect ECONNREFUSED"),
|
|
76
|
+
expected: ["Status unavailable", "server did not answer"],
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: "an error envelope",
|
|
80
|
+
status: checkStatusDetailPayload({ error: "unavailable" }, UI),
|
|
81
|
+
expected: ["Status unavailable", "server did not answer"],
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: "the home-directory reply",
|
|
85
|
+
status: checkStatusDetailPayload({ sessionId: "s", disabled: true }, UI),
|
|
86
|
+
expected: ["Status unavailable", "home directory"],
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: "the paused-identity reply",
|
|
90
|
+
status: checkStatusDetailPayload({ sessionId: "s", disabled: true, paused: true }, UI),
|
|
91
|
+
expected: ["Status unavailable", "memory paused"],
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: "an empty reply",
|
|
95
|
+
status: checkStatusDetailPayload({}, UI),
|
|
96
|
+
expected: ["Status unavailable", "incomplete status data"],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: "an older server's snapshot",
|
|
100
|
+
status: checkStatusDetailPayload(OLDER_SERVER, UI),
|
|
101
|
+
expected: ["12.5% / 65%", "An older Magic Context server"],
|
|
102
|
+
},
|
|
103
|
+
];
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Layout cases: the dialog inside a host surface of `dialogWidth` columns on a
|
|
107
|
+
* terminal of `terminalWidth` columns. OpenCode's dialog is 60 columns unless a
|
|
108
|
+
* dialog asks to be wider, and never wider than the terminal minus 2; 88 is its
|
|
109
|
+
* "large" size. The child process's stdout is a pipe, so the dialog sees no
|
|
110
|
+
* terminal width at all, the same fallback it takes on a very wide terminal.
|
|
111
|
+
*/
|
|
112
|
+
type LayoutCase = {
|
|
113
|
+
name: string;
|
|
114
|
+
status: StatusDetailResult;
|
|
115
|
+
terminalWidth: number;
|
|
116
|
+
dialogWidth: number;
|
|
117
|
+
expected: string[];
|
|
118
|
+
/**
|
|
119
|
+
* Label/value pairs that must each be drawn whole on one line, the label
|
|
120
|
+
* followed by its complete value. A value cut off at a column edge fails.
|
|
121
|
+
*/
|
|
122
|
+
rows?: Array<[label: string, value: string]>;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
/** Rows of the complete snapshot drawn from both section columns. */
|
|
126
|
+
const COMPLETE_ROWS: Array<[string, string]> = [
|
|
127
|
+
["Active", "0 (~0 B)"],
|
|
128
|
+
["Execute threshold", "65%"],
|
|
129
|
+
["Last reduce anchor", "0 tok"],
|
|
130
|
+
["Subagent", "no"],
|
|
131
|
+
["History block", "~0 tok"],
|
|
132
|
+
["Auto-execute", "at TTL or ≥65%"],
|
|
133
|
+
];
|
|
134
|
+
|
|
135
|
+
const LONG_MODEL_KEY =
|
|
136
|
+
"openrouter/anthropic/claude-sonnet-4.5-20250929-thinking-extended-context-preview";
|
|
137
|
+
const LONG_VALUE_STATUS = checkStatusDetailPayload(
|
|
138
|
+
{ ...COMPLETE, cacheTtlSource: "config", cacheTtlModelKey: LONG_MODEL_KEY },
|
|
139
|
+
UI,
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
const LAYOUT_CASES: LayoutCase[] = [
|
|
143
|
+
...[80, 100, 120].map((terminalWidth) => ({
|
|
144
|
+
name: `a complete snapshot in the default 60-column dialog, terminal ${terminalWidth} columns wide`,
|
|
145
|
+
status: checkStatusDetailPayload(COMPLETE, UI),
|
|
146
|
+
terminalWidth,
|
|
147
|
+
dialogWidth: 60,
|
|
148
|
+
expected: ["Magic Context Status", "Execute threshold", "History block", "Esc to close"],
|
|
149
|
+
rows: COMPLETE_ROWS,
|
|
150
|
+
})),
|
|
151
|
+
...[100, 120].map((terminalWidth) => ({
|
|
152
|
+
name: `a complete snapshot in an 88-column dialog, terminal ${terminalWidth} columns wide`,
|
|
153
|
+
status: checkStatusDetailPayload(COMPLETE, UI),
|
|
154
|
+
terminalWidth,
|
|
155
|
+
dialogWidth: 88,
|
|
156
|
+
expected: ["Magic Context Status", "Execute threshold", "History block", "Esc to close"],
|
|
157
|
+
rows: COMPLETE_ROWS,
|
|
158
|
+
})),
|
|
159
|
+
{
|
|
160
|
+
// The value is longer than the dialog: it has to wrap inside the value
|
|
161
|
+
// column, and its end still has to be drawn.
|
|
162
|
+
name: "a long cache TTL model key in the default 60-column dialog, terminal 80 columns wide",
|
|
163
|
+
status: LONG_VALUE_STATUS,
|
|
164
|
+
terminalWidth: 80,
|
|
165
|
+
dialogWidth: 60,
|
|
166
|
+
expected: ["Configured", "context-preview)", "Execute threshold", "Esc to close"],
|
|
167
|
+
rows: COMPLETE_ROWS,
|
|
168
|
+
},
|
|
169
|
+
];
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* The same dialog when its width update never lands: the first frame, drawn
|
|
173
|
+
* before the dialog has measured itself, or a render (like a bare component
|
|
174
|
+
* render on Bun's non-reactive `solid-js` build) where nothing re-runs after
|
|
175
|
+
* layout. The section grid is then chosen against the terminal-width fallback,
|
|
176
|
+
* and the columns still have to stay inside the dialog.
|
|
177
|
+
*/
|
|
178
|
+
const STALE_WIDTH_CASES: LayoutCase[] = [
|
|
179
|
+
{
|
|
180
|
+
name: "a complete snapshot laid out before the dialog measured itself",
|
|
181
|
+
status: checkStatusDetailPayload(COMPLETE, UI),
|
|
182
|
+
terminalWidth: 80,
|
|
183
|
+
dialogWidth: 60,
|
|
184
|
+
expected: ["Magic Context Status", "Tags", "Esc to close"],
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: "a long cache TTL model key laid out before the dialog measured itself",
|
|
188
|
+
status: LONG_VALUE_STATUS,
|
|
189
|
+
terminalWidth: 80,
|
|
190
|
+
dialogWidth: 60,
|
|
191
|
+
expected: ["Magic Context Status", "Configured", "Esc to close"],
|
|
192
|
+
},
|
|
193
|
+
];
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Lines of `frame` that draw anything at or past `rightEdge`, the first column
|
|
197
|
+
* of the dialog's right padding. The dialog surface starts at column 0, so a
|
|
198
|
+
* line that stays inside the dialog is blank from that column on.
|
|
199
|
+
*/
|
|
200
|
+
function linesPastEdge(frame: string, rightEdge: number): string[] {
|
|
201
|
+
return frame.split("\n").filter((line) => line.slice(rightEdge).trim() !== "");
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
function escapeRegExp(text: string): string {
|
|
205
|
+
return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** Pairs from `rows` that no line of `frame` draws as `label value` whole. */
|
|
209
|
+
function rowsNotDrawnWhole(frame: string, rows: Array<[string, string]>): string[] {
|
|
210
|
+
const lines = frame.split("\n");
|
|
211
|
+
return rows
|
|
212
|
+
.filter(([label, value]) => {
|
|
213
|
+
const pattern = new RegExp(`${escapeRegExp(label)} +${escapeRegExp(value)}(\\s|$)`);
|
|
214
|
+
return !lines.some((line) => pattern.test(line));
|
|
215
|
+
})
|
|
216
|
+
.map(([label, value]) => `${label}: ${value}`);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
type RenderResult = { frame?: string; error?: string };
|
|
220
|
+
|
|
221
|
+
/** Runs the render script on `input`, with extra Bun flags before the script. */
|
|
222
|
+
function renderInChild(input: unknown[], bunFlags: string[]): RenderResult[] {
|
|
223
|
+
const script = join(import.meta.dir, "../../../scripts/render-compiled-status-dialog.ts");
|
|
224
|
+
const child = Bun.spawnSync(["bun", ...bunFlags, script], {
|
|
225
|
+
stdin: new TextEncoder().encode(JSON.stringify(input)),
|
|
226
|
+
stdout: "pipe",
|
|
227
|
+
stderr: "pipe",
|
|
228
|
+
windowsHide: true,
|
|
229
|
+
});
|
|
230
|
+
if (child.exitCode !== 0) {
|
|
231
|
+
throw new Error(`render script failed: ${child.stderr.toString()}`);
|
|
232
|
+
}
|
|
233
|
+
return JSON.parse(child.stdout.toString());
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const layoutInput = (cases: LayoutCase[]) =>
|
|
237
|
+
cases.map(({ status, terminalWidth, dialogWidth }) => ({ status, terminalWidth, dialogWidth }));
|
|
238
|
+
|
|
239
|
+
let results: RenderResult[] = [];
|
|
240
|
+
let staleResults: RenderResult[] = [];
|
|
241
|
+
|
|
242
|
+
beforeAll(() => {
|
|
243
|
+
results = renderInChild(
|
|
244
|
+
[...CASES.map((entry) => ({ status: entry.status })), ...layoutInput(LAYOUT_CASES)],
|
|
245
|
+
["--conditions=browser"],
|
|
246
|
+
);
|
|
247
|
+
// No `browser` condition: Bun's server build of solid-js, where the dialog
|
|
248
|
+
// keeps the layout it chose before it knew its own width.
|
|
249
|
+
staleResults = renderInChild(layoutInput(STALE_WIDTH_CASES), []);
|
|
250
|
+
}, 60_000);
|
|
251
|
+
|
|
252
|
+
describe("compiled /ctx-status dialog", () => {
|
|
253
|
+
for (const [index, entry] of CASES.entries()) {
|
|
254
|
+
test(`draws ${entry.name} without throwing`, () => {
|
|
255
|
+
const result = results[index];
|
|
256
|
+
expect(result?.error).toBeUndefined();
|
|
257
|
+
for (const text of entry.expected) expect(result?.frame).toContain(text);
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
function expectInsideDialog(entry: LayoutCase, result: RenderResult | undefined): void {
|
|
263
|
+
expect(result?.error).toBeUndefined();
|
|
264
|
+
const frame = result?.frame ?? "";
|
|
265
|
+
for (const text of entry.expected) expect(frame).toContain(text);
|
|
266
|
+
// The dialog's own right padding is 2 columns, so its content ends 2
|
|
267
|
+
// columns before the surface's edge.
|
|
268
|
+
const surfaceWidth = Math.min(entry.dialogWidth, entry.terminalWidth - 2);
|
|
269
|
+
expect(linesPastEdge(frame, surfaceWidth - 2)).toEqual([]);
|
|
270
|
+
if (entry.rows) expect(rowsNotDrawnWhole(frame, entry.rows)).toEqual([]);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
describe("compiled /ctx-status dialog layout", () => {
|
|
274
|
+
for (const [index, entry] of LAYOUT_CASES.entries()) {
|
|
275
|
+
test(`keeps ${entry.name} inside the dialog`, () => {
|
|
276
|
+
expectInsideDialog(entry, results[CASES.length + index]);
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
for (const [index, entry] of STALE_WIDTH_CASES.entries()) {
|
|
280
|
+
test(`keeps ${entry.name} inside the dialog`, () => {
|
|
281
|
+
expectInsideDialog(entry, staleResults[index]);
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
});
|
|
@@ -12,18 +12,16 @@
|
|
|
12
12
|
import { createMemo, createSignal, onCleanup } from "solid-js"
|
|
13
13
|
import type { TuiPluginApi, TuiThemeCurrent } from "@opencode-ai/plugin/tui"
|
|
14
14
|
import packageJson from "../../../package.json"
|
|
15
|
-
import { statusSummaryFromDetail } from "../../shared/status-summary"
|
|
16
15
|
import {
|
|
17
|
-
|
|
16
|
+
buildStatusViewFor,
|
|
18
17
|
distributeBarWidths,
|
|
19
18
|
statusColumnsFor,
|
|
20
19
|
type StatusRow,
|
|
21
20
|
type StatusSection,
|
|
22
21
|
type StatusTone,
|
|
23
|
-
type StatusViewSource,
|
|
24
22
|
} from "../../shared/status-view"
|
|
25
23
|
import { RUST_MODE_HOST_PATHS_LINE } from "../../shared/rust-mode-status"
|
|
26
|
-
import type {
|
|
24
|
+
import type { StatusDetailResult } from "../data/context-db"
|
|
27
25
|
|
|
28
26
|
const R = (props: { t: TuiThemeCurrent; l: string; v: string; fg?: string }) => (
|
|
29
27
|
<box width="100%" flexDirection="row" justifyContent="space-between">
|
|
@@ -48,10 +46,13 @@ function toneColor(theme: TuiThemeCurrent, tone: StatusTone): string {
|
|
|
48
46
|
|
|
49
47
|
/**
|
|
50
48
|
* Width the dialog is actually laid out at, which is NOT the terminal width:
|
|
51
|
-
* each host sizes its own dialog surface (OpenCode
|
|
52
|
-
* a 200-column terminal), and that is the
|
|
53
|
-
* Renderables carry their laid-out width
|
|
54
|
-
*
|
|
49
|
+
* each host sizes its own dialog surface (OpenCode 1's default is 60 columns,
|
|
50
|
+
* OpenCode 2's widest is 88 columns on a 200-column terminal), and that is the
|
|
51
|
+
* width the sections have to fit into. Renderables carry their laid-out width
|
|
52
|
+
* and emit "resize" when a layout pass changes it, so the component reads it
|
|
53
|
+
* from its own root box. ("resized", with a d, is emitted only by the
|
|
54
|
+
* renderer's root; a box never sends it, and listening for it left the dialog
|
|
55
|
+
* sizing its sections from the terminal width forever.)
|
|
55
56
|
*
|
|
56
57
|
* Until the first layout there is no width to read; the terminal width is the
|
|
57
58
|
* fallback, and an unknown terminal keeps the wide layout the dialog has always
|
|
@@ -83,35 +84,27 @@ const StatusSectionView = (props: { t: TuiThemeCurrent; section: StatusSection }
|
|
|
83
84
|
</box>
|
|
84
85
|
)
|
|
85
86
|
|
|
86
|
-
|
|
87
|
+
/**
|
|
88
|
+
* `status` is the checked result of the status RPC (`loadStatusDetail`), never
|
|
89
|
+
* the raw reply: a reply the view cannot draw arrives as the reason it cannot,
|
|
90
|
+
* and the shared model turns that into a "status unavailable" view. An
|
|
91
|
+
* unchecked reply used to reach the view model directly, where a missing field
|
|
92
|
+
* threw inside this component's first render and crashed the whole TUI.
|
|
93
|
+
*/
|
|
94
|
+
export const StatusDialog = (props: { api: TuiPluginApi; status: StatusDetailResult }) => {
|
|
87
95
|
const theme = createMemo(() => (props.api as any).theme.current)
|
|
88
96
|
const t = () => theme()
|
|
89
|
-
const
|
|
90
|
-
const compactionOff = () =>
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
// two surfaces never disagree. Fall back to deriving from usage% only when the
|
|
94
|
-
// RPC limit is absent (0) — and that derivation is itself undefined at 0%, so
|
|
95
|
-
// it stays "?" rather than showing a number inconsistent with the sidebar.
|
|
96
|
-
const contextLimit = () =>
|
|
97
|
-
s().contextLimit > 0
|
|
98
|
-
? s().contextLimit
|
|
99
|
-
: s().usagePercentage > 0
|
|
100
|
-
? Math.round(s().inputTokens / (s().usagePercentage / 100))
|
|
101
|
-
: 0
|
|
97
|
+
const ready = () => (props.status.state === "ready" ? props.status : null)
|
|
98
|
+
const compactionOff = () => ready()?.source.compaction_enabled === false
|
|
99
|
+
const recompProgress = () => ready()?.extras.recompProgress ?? null
|
|
100
|
+
const hostBackendsModuleSide = () => ready()?.extras.hostBackendsModuleSide === true
|
|
102
101
|
|
|
103
102
|
// Which rows exist, what they are called and which colour they carry is
|
|
104
103
|
// decided by the shared model, so this dialog and Pi's overlay cannot drift
|
|
105
|
-
// apart. This component only draws what the model returns
|
|
104
|
+
// apart. This component only draws what the model returns, and the model
|
|
105
|
+
// never throws: a result it cannot draw becomes the unavailable view.
|
|
106
106
|
const view = createMemo(() =>
|
|
107
|
-
|
|
108
|
-
{
|
|
109
|
-
...(s() as unknown as StatusViewSource),
|
|
110
|
-
contextLimit: contextLimit(),
|
|
111
|
-
warnings: statusSummaryFromDetail(s()).warnings,
|
|
112
|
-
},
|
|
113
|
-
{ version: packageJson.version },
|
|
114
|
-
),
|
|
107
|
+
buildStatusViewFor(props.status, { version: packageJson.version }),
|
|
115
108
|
)
|
|
116
109
|
// The dialog's own laid-out width, which is what the sections have to fit
|
|
117
110
|
// into; the terminal width is only the pre-layout fallback.
|
|
@@ -122,8 +115,8 @@ export const StatusDialog = (props: { api: TuiPluginApi; s: StatusDetail }) => {
|
|
|
122
115
|
if (Number.isFinite(width) && width > 0) setDialogWidth(width)
|
|
123
116
|
}
|
|
124
117
|
read()
|
|
125
|
-
element?.on?.("
|
|
126
|
-
onCleanup(() => element?.off?.("
|
|
118
|
+
element?.on?.("resize", read)
|
|
119
|
+
onCleanup(() => element?.off?.("resize", read))
|
|
127
120
|
}
|
|
128
121
|
// paddingLeft + paddingRight below; what the sections get is what is left.
|
|
129
122
|
const contentWidth = () => (dialogWidth() > 0 ? dialogWidth() - 4 : terminalColumns())
|
|
@@ -206,8 +199,8 @@ export const StatusDialog = (props: { api: TuiPluginApi; s: StatusDetail }) => {
|
|
|
206
199
|
running or just finished — dogfood 2026-05-30). This is live run
|
|
207
200
|
state rather than status content, so it stays out of the shared
|
|
208
201
|
section model. */}
|
|
209
|
-
{!compactionOff() &&
|
|
210
|
-
const p =
|
|
202
|
+
{!compactionOff() && recompProgress() && (() => {
|
|
203
|
+
const p = recompProgress()!
|
|
211
204
|
// Label follows the flow that started the run, so a plain
|
|
212
205
|
// /ctx-recomp never reads as an "Upgrade" (dogfood 2026-06-04).
|
|
213
206
|
const verb = p.kind === "upgrade" ? "Upgrade" : p.kind === "embed" ? "Embed" : "Recomp"
|
|
@@ -242,21 +235,31 @@ export const StatusDialog = (props: { api: TuiPluginApi; s: StatusDetail }) => {
|
|
|
242
235
|
)
|
|
243
236
|
})()}
|
|
244
237
|
|
|
245
|
-
{
|
|
238
|
+
{hostBackendsModuleSide() && (
|
|
246
239
|
<box marginTop={1} width="100%" flexDirection="column">
|
|
247
240
|
<text fg={t().text}><b>Rust Mode</b></text>
|
|
248
241
|
<text fg={t().textMuted}>{RUST_MODE_HOST_PATHS_LINE}</text>
|
|
249
242
|
</box>
|
|
250
243
|
)}
|
|
251
244
|
|
|
245
|
+
{/* Each column asks for the width its sections need, but may
|
|
246
|
+
shrink: until the dialog has measured itself the grid is chosen
|
|
247
|
+
against the terminal width, and a column that could not shrink
|
|
248
|
+
would then run past the dialog's right edge. Shrinking wraps a
|
|
249
|
+
value inside its column instead, and anything still wider
|
|
250
|
+
than a squeezed column (a fixed-width label) is clipped at the
|
|
251
|
+
column's edge rather than drawn past the dialog. The request is
|
|
252
|
+
a flexBasis, not a width: OpenTUI turns flexShrink back to 0
|
|
253
|
+
whenever a box gets a numeric width, so a fixed-width column
|
|
254
|
+
never shrinks. */}
|
|
252
255
|
{columns().twoColumn ? (
|
|
253
256
|
<box flexDirection="row" width="100%" gap={4}>
|
|
254
|
-
<box flexDirection="column"
|
|
257
|
+
<box flexDirection="column" flexBasis={columns().leftWidth} flexGrow={0} flexShrink={1} minWidth={0} overflow="hidden">
|
|
255
258
|
{columnSections(0).map((section) => (
|
|
256
259
|
<StatusSectionView t={t()} section={section} />
|
|
257
260
|
))}
|
|
258
261
|
</box>
|
|
259
|
-
<box flexDirection="column"
|
|
262
|
+
<box flexDirection="column" flexBasis={columns().rightWidth} flexGrow={0} flexShrink={1} minWidth={0} overflow="hidden">
|
|
260
263
|
{columnSections(1).map((section) => (
|
|
261
264
|
<StatusSectionView t={t()} section={section} />
|
|
262
265
|
))}
|
package/src/tui/index.tsx
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
import { createMemo } from "solid-js"
|
|
4
4
|
import type { TuiPlugin, TuiPluginApi } from "@opencode-ai/plugin/tui"
|
|
5
5
|
import { StatusDialog } from "./dialogs/status-dialog"
|
|
6
|
-
import { renderUserFacingFailure, userFacingFailureCode } from '../shared/user-facing-codes';
|
|
7
6
|
import {
|
|
8
7
|
createSidebarContentSlot,
|
|
9
8
|
kickRecompProgressRefresh,
|
|
10
9
|
refreshSidebarSnapshot,
|
|
11
10
|
} from "./slots/sidebar-content"
|
|
12
|
-
import { closeRpc, getAnnouncement, getCompartmentCount, getRpcGeneration, initRpcClient, loadEmbedDetail, loadStatusDetail, loadToastDurationMs, markAnnounced, requestRecomp, type EmbedDetail
|
|
11
|
+
import { closeRpc, getAnnouncement, getCompartmentCount, getRpcGeneration, initRpcClient, loadEmbedDetail, loadStatusDetail, loadToastDurationMs, markAnnounced, requestRecomp, type EmbedDetail } from "./data/context-db"
|
|
12
|
+
import { directoryForSession } from "./data/session-directory"
|
|
13
13
|
import { startNotificationSocket, stopNotificationSocket, type SocketNotification } from "./data/notification-socket"
|
|
14
14
|
import { isCompactionEnabled } from "../config/agent-disable"
|
|
15
15
|
import { loadPluginConfig } from "../config"
|
|
@@ -125,6 +125,20 @@ function getSessionId(api: TuiPluginApi): string | null {
|
|
|
125
125
|
return null
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
+
/**
|
|
129
|
+
* The directory whose Magic Context server owns this session, which is not
|
|
130
|
+
* necessarily the directory the TUI started in (see `directoryForSession`).
|
|
131
|
+
*/
|
|
132
|
+
function sessionDirectory(api: TuiPluginApi, sessionId: string): string {
|
|
133
|
+
let reported: unknown
|
|
134
|
+
try {
|
|
135
|
+
reported = api.state.session.get(sessionId)?.directory
|
|
136
|
+
} catch {
|
|
137
|
+
// Session state not available yet: fall back to the startup directory.
|
|
138
|
+
}
|
|
139
|
+
return directoryForSession(reported, api.state.path.directory ?? "")
|
|
140
|
+
}
|
|
141
|
+
|
|
128
142
|
function getModelKeyFromMessages(api: TuiPluginApi, sessionId: string): string | undefined {
|
|
129
143
|
try {
|
|
130
144
|
const msgs = api.state.session.messages(sessionId)
|
|
@@ -156,7 +170,7 @@ async function showRecompDialog(api: TuiPluginApi, targetSessionId = getSessionI
|
|
|
156
170
|
return false
|
|
157
171
|
}
|
|
158
172
|
|
|
159
|
-
const countResult = await getCompartmentCount(sessionId, api
|
|
173
|
+
const countResult = await getCompartmentCount(sessionId, sessionDirectory(api, sessionId))
|
|
160
174
|
// Ack only after the dialog is actually shown for the same active session;
|
|
161
175
|
// route switches while the RPC detail load is in flight must leave it pending.
|
|
162
176
|
if (getSessionId(api) !== sessionId) return false
|
|
@@ -180,7 +194,7 @@ async function showRecompDialog(api: TuiPluginApi, targetSessionId = getSessionI
|
|
|
180
194
|
"Proceed?",
|
|
181
195
|
].join("\n")}
|
|
182
196
|
onConfirm={async () => {
|
|
183
|
-
const requested = await requestRecomp(sessionId)
|
|
197
|
+
const requested = await requestRecomp(sessionId, sessionDirectory(api, sessionId))
|
|
184
198
|
if (!requested) {
|
|
185
199
|
showToast(api, { message: "Recomp request failed", variant: "error" })
|
|
186
200
|
return
|
|
@@ -206,22 +220,15 @@ async function showStatusDialog(
|
|
|
206
220
|
return false
|
|
207
221
|
}
|
|
208
222
|
|
|
209
|
-
const directory = api
|
|
223
|
+
const directory = sessionDirectory(api, sessionId)
|
|
210
224
|
const modelKey = getModelKeyFromMessages(api, sessionId)
|
|
211
225
|
const result = await loadStatusDetail(sessionId, directory, modelKey)
|
|
212
226
|
if (getSessionId(api) !== sessionId) return false
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
message: renderUserFacingFailure("status_unavailable"),
|
|
219
|
-
variant: "warning",
|
|
220
|
-
})
|
|
221
|
-
return false
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
api.ui.dialog.replace(() => <StatusDialog api={api} s={result.detail} />)
|
|
227
|
+
// A result without a usable snapshot still opens the dialog: it shows the
|
|
228
|
+
// "status unavailable" view naming the reason (RPC error, a directory the
|
|
229
|
+
// server keeps no state for, missing fields, a server/UI version
|
|
230
|
+
// difference) instead of a toast that disappears.
|
|
231
|
+
api.ui.dialog.replace(() => <StatusDialog api={api} status={result} />)
|
|
225
232
|
return true
|
|
226
233
|
}
|
|
227
234
|
|
|
@@ -247,7 +254,7 @@ async function showEmbedDialog(api: TuiPluginApi, targetSessionId = getSessionId
|
|
|
247
254
|
api.ui.toast({ message: "No active session", variant: "warning" })
|
|
248
255
|
return false
|
|
249
256
|
}
|
|
250
|
-
const directory = api
|
|
257
|
+
const directory = sessionDirectory(api, sessionId)
|
|
251
258
|
const detail = await loadEmbedDetail(sessionId, directory)
|
|
252
259
|
if (getSessionId(api) !== sessionId) return false
|
|
253
260
|
api.ui.dialog.replace(() => <EmbedDialog api={api} detail={detail} />)
|
|
@@ -747,6 +754,11 @@ const tui: TuiPlugin = async (api, _options, meta) => {
|
|
|
747
754
|
|
|
748
755
|
startNotificationSocket({
|
|
749
756
|
getSessionId: () => getSessionId(api),
|
|
757
|
+
// Follow the shown session's own server, whose commands push its dialogs.
|
|
758
|
+
getSessionDirectory: () => {
|
|
759
|
+
const sessionId = getSessionId(api)
|
|
760
|
+
return sessionId ? sessionDirectory(api, sessionId) : null
|
|
761
|
+
},
|
|
750
762
|
onNotification: handleNotification,
|
|
751
763
|
})
|
|
752
764
|
|
|
@@ -4,6 +4,7 @@ import type { TuiSlotPlugin, TuiPluginApi, TuiThemeCurrent } from "@opencode-ai/
|
|
|
4
4
|
import packageJson from "../../../package.json"
|
|
5
5
|
import { badgeTextColor } from '../badge-contrast';
|
|
6
6
|
import { loadSidebarSnapshot, type SidebarSnapshot } from "../data/context-db"
|
|
7
|
+
import { directoryForSession } from "../data/session-directory"
|
|
7
8
|
import { formatThresholdPercent } from "../../shared/format-threshold"
|
|
8
9
|
import { renderUserFacingFailure } from "../../shared/user-facing-codes"
|
|
9
10
|
import { compactionOffSidebarRows, nativeCompactionContextLabel } from "../compaction-off"
|
|
@@ -534,7 +535,10 @@ const SidebarContent = (props: {
|
|
|
534
535
|
const sid = props.sessionID()
|
|
535
536
|
if (!sid) return
|
|
536
537
|
const sequence = ++snapshotRequestSequence
|
|
537
|
-
const directory =
|
|
538
|
+
const directory = directoryForSession(
|
|
539
|
+
props.api.state.session?.get?.(sid)?.directory,
|
|
540
|
+
props.api.state.path.directory ?? "",
|
|
541
|
+
)
|
|
538
542
|
void loadSidebarSnapshot(sid, directory)
|
|
539
543
|
.then((data) => {
|
|
540
544
|
// Guard against a session switch while this load was in flight:
|
|
@@ -600,7 +604,10 @@ const SidebarContent = (props: {
|
|
|
600
604
|
return
|
|
601
605
|
}
|
|
602
606
|
const sequence = ++snapshotRequestSequence
|
|
603
|
-
const directory =
|
|
607
|
+
const directory = directoryForSession(
|
|
608
|
+
props.api.state.session?.get?.(sid)?.directory,
|
|
609
|
+
props.api.state.path.directory ?? "",
|
|
610
|
+
)
|
|
604
611
|
void loadSidebarSnapshot(sid, directory)
|
|
605
612
|
.then((data) => {
|
|
606
613
|
if (
|