@cortexkit/opencode-magic-context 0.44.4 → 0.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/hidden-agent-registrations.d.ts +3 -2
- package/dist/agents/hidden-agent-registrations.d.ts.map +1 -1
- package/dist/agents/magic-context-prompt.d.ts +1 -0
- package/dist/agents/magic-context-prompt.d.ts.map +1 -1
- package/dist/agents/permissions.d.ts +8 -28
- package/dist/agents/permissions.d.ts.map +1 -1
- package/dist/{announcement-n8hs7kjw.js → announcement-f75t58v9.js} +4 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/project-security.d.ts +48 -0
- package/dist/config/project-security.d.ts.map +1 -1
- package/dist/config/raw-loader.d.ts.map +1 -1
- package/dist/config/schema/magic-context.d.ts +10 -7
- package/dist/config/schema/magic-context.d.ts.map +1 -1
- package/dist/{conflict-warning-hook-hmpzxep6.js → conflict-warning-hook-5yrz2r24.js} +10 -6
- package/dist/{derive-budgets-ncwn1jk9.js → derive-budgets-a63zsm5c.js} +3 -3
- package/dist/embedding-worker.js +49 -0
- package/dist/emscripten-module-0g8f45e6.js +602 -0
- package/dist/emscripten-module-0pekdjxz.js +1532 -0
- package/dist/emscripten-module-e67xwsp3.js +503 -0
- package/dist/emscripten-module-pj1vyb44.js +4559 -0
- package/dist/features/magic-context/compartment-chunk-embedding.d.ts +23 -3
- package/dist/features/magic-context/compartment-chunk-embedding.d.ts.map +1 -1
- package/dist/features/magic-context/compartment-embedding.d.ts.map +1 -1
- package/dist/features/magic-context/compartment-storage.d.ts +14 -3
- package/dist/features/magic-context/compartment-storage.d.ts.map +1 -1
- package/dist/features/magic-context/context-store-uuid.d.ts +7 -0
- package/dist/features/magic-context/context-store-uuid.d.ts.map +1 -0
- package/dist/features/magic-context/dreamer/classify.d.ts +1 -3
- package/dist/features/magic-context/dreamer/classify.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/cron.d.ts +5 -4
- package/dist/features/magic-context/dreamer/cron.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/docs-proposals.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/expire-memories.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/idle-schedule-prune.d.ts +24 -0
- package/dist/features/magic-context/dreamer/idle-schedule-prune.d.ts.map +1 -0
- package/dist/features/magic-context/dreamer/manual-summary.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/map-memories.d.ts +5 -5
- package/dist/features/magic-context/dreamer/module-apply.d.ts +4 -25
- package/dist/features/magic-context/dreamer/module-apply.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/retrospective-learnings.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/storage-dream-runs.d.ts +5 -1
- package/dist/features/magic-context/dreamer/storage-dream-runs.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/storage-task-schedule.d.ts +12 -5
- package/dist/features/magic-context/dreamer/storage-task-schedule.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-executor.d.ts +6 -0
- package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-gates.d.ts +34 -0
- package/dist/features/magic-context/dreamer/task-gates.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-prompts.d.ts +1 -1
- package/dist/features/magic-context/dreamer/task-prompts.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-registry.d.ts +7 -5
- package/dist/features/magic-context/dreamer/task-registry.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-scheduler.d.ts +10 -3
- package/dist/features/magic-context/dreamer/task-scheduler.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/token-budget.d.ts +3 -0
- package/dist/features/magic-context/dreamer/token-budget.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/verify.d.ts +2 -2
- package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
- package/dist/features/magic-context/git-commits/git-log-reader.d.ts +11 -2
- package/dist/features/magic-context/git-commits/git-log-reader.d.ts.map +1 -1
- package/dist/features/magic-context/git-commits/indexer.d.ts.map +1 -1
- package/dist/features/magic-context/git-commits/search-git-commits.d.ts.map +1 -1
- package/dist/features/magic-context/git-commits/storage-git-commits.d.ts +2 -0
- package/dist/features/magic-context/git-commits/storage-git-commits.d.ts.map +1 -1
- package/dist/features/magic-context/legacy-authority-fixture.test-support.d.ts +6 -0
- package/dist/features/magic-context/legacy-authority-fixture.test-support.d.ts.map +1 -0
- package/dist/features/magic-context/lkg-prefix-chunks.d.ts +53 -0
- package/dist/features/magic-context/lkg-prefix-chunks.d.ts.map +1 -0
- package/dist/features/magic-context/memory/embedding-backfill.d.ts.map +1 -1
- package/dist/features/magic-context/memory/embedding-local.d.ts +8 -0
- package/dist/features/magic-context/memory/embedding-local.d.ts.map +1 -1
- package/dist/features/magic-context/memory/embedding-openai.d.ts.map +1 -1
- package/dist/features/magic-context/memory/embedding-worker-client.d.ts +27 -0
- package/dist/features/magic-context/memory/embedding-worker-client.d.ts.map +1 -0
- package/dist/features/magic-context/memory/embedding-worker.d.ts +2 -0
- package/dist/features/magic-context/memory/embedding-worker.d.ts.map +1 -0
- package/dist/features/magic-context/memory/embedding-worker.fixture.d.ts +2 -0
- package/dist/features/magic-context/memory/embedding-worker.fixture.d.ts.map +1 -0
- package/dist/features/magic-context/memory/memory-selection.d.ts.map +1 -1
- package/dist/features/magic-context/memory/project-identity-cache.d.ts +4 -3
- package/dist/features/magic-context/memory/project-identity-cache.d.ts.map +1 -1
- package/dist/features/magic-context/memory/project-identity.d.ts.map +1 -1
- package/dist/features/magic-context/memory/storage-memory-fts.d.ts.map +1 -1
- package/dist/features/magic-context/memory/visibility.d.ts +1 -1
- package/dist/features/magic-context/memory/visibility.d.ts.map +1 -1
- package/dist/features/magic-context/message-fts-rowid-map.d.ts +14 -1
- package/dist/features/magic-context/message-fts-rowid-map.d.ts.map +1 -1
- package/dist/features/magic-context/message-fts-session-filter.d.ts +14 -0
- package/dist/features/magic-context/message-fts-session-filter.d.ts.map +1 -0
- package/dist/features/magic-context/message-index.d.ts +1 -7
- package/dist/features/magic-context/message-index.d.ts.map +1 -1
- package/dist/features/magic-context/message-time-backfill.d.ts.map +1 -1
- package/dist/features/magic-context/migration-v94-write-split.d.ts +62 -0
- package/dist/features/magic-context/migration-v94-write-split.d.ts.map +1 -0
- package/dist/features/magic-context/migration-worker-client.d.ts +23 -0
- package/dist/features/magic-context/migration-worker-client.d.ts.map +1 -0
- package/dist/features/magic-context/migration-worker-protocol.d.ts +30 -0
- package/dist/features/magic-context/migration-worker-protocol.d.ts.map +1 -0
- package/dist/features/magic-context/migration-worker.d.ts +2 -0
- package/dist/features/magic-context/migration-worker.d.ts.map +1 -0
- package/dist/features/magic-context/migrations.d.ts +7 -0
- package/dist/features/magic-context/migrations.d.ts.map +1 -1
- package/dist/features/magic-context/mural/render-mural.d.ts +24 -2
- package/dist/features/magic-context/mural/render-mural.d.ts.map +1 -1
- package/dist/features/magic-context/mural/render-trigger.d.ts +1 -1
- package/dist/features/magic-context/mural/render-trigger.d.ts.map +1 -1
- package/dist/features/magic-context/overflow-detection.d.ts +18 -7
- package/dist/features/magic-context/overflow-detection.d.ts.map +1 -1
- package/dist/features/magic-context/project-embedding-registry.d.ts +2 -0
- package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
- package/dist/features/magic-context/range-parser.d.ts +2 -3
- package/dist/features/magic-context/range-parser.d.ts.map +1 -1
- package/dist/features/magic-context/resolve-subagent-fallback.d.ts +2 -0
- package/dist/features/magic-context/resolve-subagent-fallback.d.ts.map +1 -1
- package/dist/features/magic-context/scheduler.d.ts +2 -0
- package/dist/features/magic-context/scheduler.d.ts.map +1 -1
- package/dist/features/magic-context/search.d.ts +7 -0
- package/dist/features/magic-context/search.d.ts.map +1 -1
- package/dist/features/magic-context/session-project-backfill.d.ts.map +1 -1
- package/dist/features/magic-context/session-project-storage.d.ts +10 -1
- package/dist/features/magic-context/session-project-storage.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/compiler-prompt.d.ts +1 -1
- package/dist/features/magic-context/smart-notes/compiler-prompt.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/compiler.d.ts +4 -0
- package/dist/features/magic-context/smart-notes/compiler.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/runner.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/sandbox-runner.d.ts +2 -0
- package/dist/features/magic-context/smart-notes/sandbox-runner.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/ssrf-guard.d.ts +10 -8
- package/dist/features/magic-context/smart-notes/ssrf-guard.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/storage.d.ts +2 -2
- package/dist/features/magic-context/smart-notes/storage.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/types.d.ts +7 -2
- package/dist/features/magic-context/smart-notes/types.d.ts.map +1 -1
- package/dist/features/magic-context/storage-caveman-rules.d.ts +21 -0
- package/dist/features/magic-context/storage-caveman-rules.d.ts.map +1 -0
- package/dist/features/magic-context/storage-clone.d.ts.map +1 -1
- package/dist/features/magic-context/storage-compartment-history-version.d.ts +4 -0
- package/dist/features/magic-context/storage-compartment-history-version.d.ts.map +1 -0
- package/dist/features/magic-context/storage-db.d.ts +62 -2
- package/dist/features/magic-context/storage-db.d.ts.map +1 -1
- package/dist/features/magic-context/storage-identity-merge.d.ts +6 -0
- package/dist/features/magic-context/storage-identity-merge.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-persisted.d.ts +15 -0
- package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-session.d.ts +1 -1
- package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-shared.d.ts +1 -1
- package/dist/features/magic-context/storage-meta-shared.d.ts.map +1 -1
- package/dist/features/magic-context/storage-notes.d.ts +2 -2
- package/dist/features/magic-context/storage-notes.d.ts.map +1 -1
- package/dist/features/magic-context/storage-reasoning-removal.d.ts +30 -0
- package/dist/features/magic-context/storage-reasoning-removal.d.ts.map +1 -0
- package/dist/features/magic-context/storage-replay-document.d.ts +42 -5
- package/dist/features/magic-context/storage-replay-document.d.ts.map +1 -1
- package/dist/features/magic-context/storage-session-tables.d.ts.map +1 -1
- package/dist/features/magic-context/storage-tags.d.ts +7 -1
- package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
- package/dist/features/magic-context/storage.d.ts +1 -1
- package/dist/features/magic-context/storage.d.ts.map +1 -1
- package/dist/features/magic-context/store-generation-rebase.d.ts.map +1 -1
- package/dist/features/magic-context/tag-input.d.ts +4 -0
- package/dist/features/magic-context/tag-input.d.ts.map +1 -0
- package/dist/features/magic-context/transform-decision-log.d.ts.map +1 -1
- package/dist/features/magic-context/user-memory/review-user-memories.d.ts.map +1 -1
- package/dist/features/magic-context/user-memory/storage-user-memory.d.ts.map +1 -1
- package/dist/ffi-3cx1cxpk.js +78 -0
- package/dist/ffi-7bqqe4cd.js +91 -0
- package/dist/ffi-7e6gryj5.js +91 -0
- package/dist/ffi-bpvkebwr.js +78 -0
- package/dist/hooks/magic-context/apply-operations.d.ts +9 -1
- package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
- package/dist/hooks/magic-context/auto-search-deadline.d.ts +10 -0
- package/dist/hooks/magic-context/auto-search-deadline.d.ts.map +1 -0
- package/dist/hooks/magic-context/auto-search-hint.d.ts +3 -0
- package/dist/hooks/magic-context/auto-search-hint.d.ts.map +1 -1
- package/dist/hooks/magic-context/auto-search-runner.d.ts +3 -0
- package/dist/hooks/magic-context/auto-search-runner.d.ts.map +1 -1
- package/dist/hooks/magic-context/caveman-cleanup.d.ts +8 -1
- package/dist/hooks/magic-context/caveman-cleanup.d.ts.map +1 -1
- package/dist/hooks/magic-context/caveman.d.ts +56 -1
- package/dist/hooks/magic-context/caveman.d.ts.map +1 -1
- package/dist/hooks/magic-context/child-session-spawn.d.ts +2 -0
- package/dist/hooks/magic-context/child-session-spawn.d.ts.map +1 -1
- package/dist/hooks/magic-context/command-handler.d.ts +1 -1
- package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
- package/dist/hooks/magic-context/compaction-marker-manager.d.ts +1 -1
- package/dist/hooks/magic-context/compaction-marker-manager.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-parser.d.ts +3 -3
- package/dist/hooks/magic-context/compartment-parser.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-historian.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-incremental.d.ts +0 -1
- package/dist/hooks/magic-context/compartment-runner-incremental.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-partial-recomp.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-recomp.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-types.d.ts +3 -0
- package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-validation.d.ts +6 -0
- package/dist/hooks/magic-context/compartment-runner-validation.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
- package/dist/hooks/magic-context/degraded-pass-refusal.d.ts +35 -0
- package/dist/hooks/magic-context/degraded-pass-refusal.d.ts.map +1 -0
- package/dist/hooks/magic-context/derive-budgets.d.ts.map +1 -1
- package/dist/hooks/magic-context/dropped-input-guard.d.ts.map +1 -1
- package/dist/hooks/magic-context/embed-history-runner.d.ts.map +1 -1
- package/dist/hooks/magic-context/emergency-drop.d.ts +15 -0
- package/dist/hooks/magic-context/emergency-drop.d.ts.map +1 -1
- package/dist/hooks/magic-context/event-handler.d.ts.map +1 -1
- package/dist/hooks/magic-context/execute-status.d.ts +1 -0
- package/dist/hooks/magic-context/execute-status.d.ts.map +1 -1
- package/dist/hooks/magic-context/final-wire-token-estimate.d.ts +17 -0
- package/dist/hooks/magic-context/final-wire-token-estimate.d.ts.map +1 -1
- package/dist/hooks/magic-context/heuristic-cleanup.d.ts +2 -0
- package/dist/hooks/magic-context/heuristic-cleanup.d.ts.map +1 -1
- package/dist/hooks/magic-context/historian-host-runner.d.ts +5 -0
- package/dist/hooks/magic-context/historian-host-runner.d.ts.map +1 -1
- package/dist/hooks/magic-context/historian-prompt-fit.d.ts +116 -0
- package/dist/hooks/magic-context/historian-prompt-fit.d.ts.map +1 -0
- package/dist/hooks/magic-context/historian-prompt.generated.d.ts +1 -1
- package/dist/hooks/magic-context/historian-prompt.generated.d.ts.map +1 -1
- package/dist/hooks/magic-context/history-boundary-repair.d.ts +44 -0
- package/dist/hooks/magic-context/history-boundary-repair.d.ts.map +1 -0
- package/dist/hooks/magic-context/hook.d.ts +4 -0
- package/dist/hooks/magic-context/hook.d.ts.map +1 -1
- package/dist/hooks/magic-context/inject-compartments.d.ts +8 -0
- package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-persist.d.ts +12 -0
- package/dist/hooks/magic-context/lkg-persist.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-replay-fit.d.ts +104 -0
- package/dist/hooks/magic-context/lkg-replay-fit.d.ts.map +1 -0
- package/dist/hooks/magic-context/lkg-replay.d.ts +64 -0
- package/dist/hooks/magic-context/lkg-replay.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-client.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-state-sync-timing.d.ts +1 -1
- package/dist/hooks/magic-context/module-state-sync-timing.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-state-sync.d.ts +6 -68
- package/dist/hooks/magic-context/module-state-sync.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-tool-backends.d.ts +1 -34
- package/dist/hooks/magic-context/module-tool-backends.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-transport.d.ts +1 -55
- package/dist/hooks/magic-context/module-transport.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-wire.d.ts.map +1 -1
- package/dist/hooks/magic-context/note-nudger.d.ts +2 -0
- package/dist/hooks/magic-context/note-nudger.d.ts.map +1 -1
- package/dist/hooks/magic-context/pass-outcome.d.ts +59 -2
- package/dist/hooks/magic-context/pass-outcome.d.ts.map +1 -1
- package/dist/hooks/magic-context/producer-window-guard.d.ts +6 -0
- package/dist/hooks/magic-context/producer-window-guard.d.ts.map +1 -1
- package/dist/hooks/magic-context/read-session-chunk.d.ts +13 -2
- package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
- package/dist/hooks/magic-context/read-session-formatting.d.ts +11 -0
- package/dist/hooks/magic-context/read-session-formatting.d.ts.map +1 -1
- package/dist/hooks/magic-context/reasoning-removal.d.ts +60 -0
- package/dist/hooks/magic-context/reasoning-removal.d.ts.map +1 -0
- package/dist/hooks/magic-context/recomp-orchestrator.d.ts +1 -0
- package/dist/hooks/magic-context/recomp-orchestrator.d.ts.map +1 -1
- package/dist/hooks/magic-context/reference-retrieval.d.ts +1 -1
- package/dist/hooks/magic-context/reference-retrieval.d.ts.map +1 -1
- package/dist/hooks/magic-context/reply-pages.d.ts +3 -0
- package/dist/hooks/magic-context/reply-pages.d.ts.map +1 -0
- package/dist/hooks/magic-context/rust-lkg-freeze-registry.d.ts +62 -0
- package/dist/hooks/magic-context/rust-lkg-freeze-registry.d.ts.map +1 -0
- package/dist/hooks/magic-context/rust-mode-transform.d.ts +17 -85
- package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
- package/dist/hooks/magic-context/send-session-notification.d.ts.map +1 -1
- package/dist/hooks/magic-context/sentinel.d.ts +35 -0
- package/dist/hooks/magic-context/sentinel.d.ts.map +1 -1
- package/dist/hooks/magic-context/shared-compartment-boundaries.d.ts +28 -0
- package/dist/hooks/magic-context/shared-compartment-boundaries.d.ts.map +1 -0
- package/dist/hooks/magic-context/single-store-refusal.d.ts +14 -0
- package/dist/hooks/magic-context/single-store-refusal.d.ts.map +1 -0
- package/dist/hooks/magic-context/storage-busy-refusal.d.ts +7 -0
- package/dist/hooks/magic-context/storage-busy-refusal.d.ts.map +1 -1
- package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
- package/dist/hooks/magic-context/stripped-command.d.ts +1 -1
- package/dist/hooks/magic-context/stripped-command.d.ts.map +1 -1
- package/dist/hooks/magic-context/system-injection-stripper.d.ts +7 -0
- package/dist/hooks/magic-context/system-injection-stripper.d.ts.map +1 -1
- package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
- package/dist/hooks/magic-context/tag-content-primitives.d.ts.map +1 -1
- package/dist/hooks/magic-context/tag-id-fallback.d.ts.map +1 -1
- package/dist/hooks/magic-context/tag-messages.d.ts +18 -1
- package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
- package/dist/hooks/magic-context/tail-hygiene-walk.d.ts.map +1 -1
- package/dist/hooks/magic-context/tool-drop-target.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform-compartment-phase.d.ts +1 -0
- package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +37 -4
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform.d.ts +12 -39
- package/dist/hooks/magic-context/transform.d.ts.map +1 -1
- package/dist/hooks/magic-context/unmanaged-over-window.d.ts +36 -0
- package/dist/hooks/magic-context/unmanaged-over-window.d.ts.map +1 -0
- package/dist/hooks/magic-context/unresolved-history-boundary.d.ts +15 -0
- package/dist/hooks/magic-context/unresolved-history-boundary.d.ts.map +1 -0
- package/dist/hooks/magic-context/user-profile-render.d.ts +3 -0
- package/dist/hooks/magic-context/user-profile-render.d.ts.map +1 -0
- package/dist/hooks/magic-context/wrapup-orchestrator.d.ts.map +1 -1
- package/dist/{index-sqp1hz9v.js → index-16ny736w.js} +10190 -25296
- package/dist/{index-mrc0twf3.js → index-2aq21j41.js} +1201 -428
- package/dist/{index-32b096cc.js → index-2ntg5sd4.js} +6 -2
- package/dist/index-4krbw8z9.js +6034 -0
- package/dist/{index-33q7s9y2.js → index-75zjgwga.js} +61 -85
- package/dist/{index-zx7pmr39.js → index-8fgkmxmy.js} +28 -10
- package/dist/index-a4m2b1yv.js +530 -0
- package/dist/index-anq4nn6f.js +131 -0
- package/dist/index-avwt563y.js +62 -0
- package/dist/index-bmzf7zxv.js +445 -0
- package/dist/index-e44zzy84.js +10 -0
- package/dist/index-en1k8h8m.js +244 -0
- package/dist/{index-638hf49n.js → index-f85teqck.js} +15 -6
- package/dist/index-fr2z4qy8.js +7810 -0
- package/dist/{index-kwe03yde.js → index-fzbvakh0.js} +1 -1
- package/dist/{module-asyncify-2EFITU5U-rkqjhjxd.js → index-g20jdh0p.js} +114 -105
- package/dist/index-gd5qx1j9.js +398 -0
- package/dist/{index-3bygzk2d.js → index-hybnrwq0.js} +169 -4
- package/dist/{index-jqcbs2k1.js → index-mc22ayvf.js} +24 -5
- package/dist/index-q7yesyk9.js +9118 -0
- package/dist/index-remp7e2g.js +214 -0
- package/dist/{index-7k55qm8a.js → index-sfpzqvdz.js} +8 -8
- package/dist/{index-msqr3x6m.js → index-vvtfyw1z.js} +12 -75
- package/dist/index-w9jwmntv.js +202 -0
- package/dist/{index-kr5qehbd.js → index-x23gah8c.js} +1 -1
- package/dist/{index-jdxxq8cz.js → index-x8a7jmkh.js} +6 -1
- package/dist/{index-wprsye9w.js → index-xgt9k6c6.js} +23 -12
- package/dist/index-y8v6yerm.js +77 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7519 -8096
- package/dist/message-time-backfill-an311pmk.js +124 -0
- package/dist/migration-worker.js +53 -0
- package/dist/{model-resolution-dxatzjde.js → model-resolution-xhfmyyvy.js} +5 -1
- package/dist/module-ES6BEMUI-3cet1pyp.js +12 -0
- package/dist/module-asyncify-2EFITU5U-c2razzd9.js +6 -0
- package/dist/plugin/boot-deadline.d.ts.map +1 -1
- package/dist/plugin/conflict-warning-hook.d.ts.map +1 -1
- package/dist/plugin/dream-timer-module-client.d.ts +1 -11
- package/dist/plugin/dream-timer-module-client.d.ts.map +1 -1
- package/dist/plugin/dream-timer.d.ts.map +1 -1
- package/dist/plugin/hooks/create-session-hooks.d.ts +8 -0
- package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
- package/dist/plugin/messages-transform.d.ts +20 -13
- package/dist/plugin/messages-transform.d.ts.map +1 -1
- package/dist/plugin/rpc-handlers.d.ts.map +1 -1
- package/dist/plugin/stale-build-notice.d.ts +16 -0
- package/dist/plugin/stale-build-notice.d.ts.map +1 -0
- package/dist/{read-session-chunk-339hg90t.js → read-session-chunk-8rxs0tc9.js} +24 -6
- package/dist/recomp-orchestrator-nzamtw29.js +39 -0
- package/dist/{rpc-notifications-4amf6mf4.js → rpc-notifications-3hed126v.js} +3 -1
- package/dist/{safe-notification-target-50gm9c58.js → safe-notification-target-43r8jsxw.js} +3 -3
- package/dist/send-session-notification-nqpv7cne.js +28 -0
- package/dist/shared/assistant-message-extractor.d.ts +4 -0
- package/dist/shared/assistant-message-extractor.d.ts.map +1 -1
- package/dist/shared/background-batch-drain.d.ts +8 -0
- package/dist/shared/background-batch-drain.d.ts.map +1 -0
- package/dist/{features/builtin-commands/commands.d.ts → shared/builtin-commands.d.ts} +1 -1
- package/dist/shared/builtin-commands.d.ts.map +1 -0
- package/dist/shared/embedding-activity.d.ts +13 -0
- package/dist/shared/embedding-activity.d.ts.map +1 -0
- package/dist/shared/historian-tool-expansions.d.ts +5 -0
- package/dist/shared/historian-tool-expansions.d.ts.map +1 -0
- package/dist/shared/historian-tool-template.d.ts +5 -0
- package/dist/shared/historian-tool-template.d.ts.map +1 -0
- package/dist/shared/historian-transient-error.d.ts +2 -0
- package/dist/shared/historian-transient-error.d.ts.map +1 -0
- package/dist/shared/jsonc-edit.d.ts.map +1 -1
- package/dist/shared/logger.d.ts +7 -0
- package/dist/shared/logger.d.ts.map +1 -1
- package/dist/shared/model-suggestion-retry.d.ts +2 -1
- package/dist/shared/model-suggestion-retry.d.ts.map +1 -1
- package/dist/shared/models-dev-cache.d.ts.map +1 -1
- package/dist/shared/off-thread-migration-clock.d.ts +38 -0
- package/dist/shared/off-thread-migration-clock.d.ts.map +1 -0
- package/dist/shared/plugin-package-version.d.ts +14 -0
- package/dist/shared/plugin-package-version.d.ts.map +1 -0
- package/dist/shared/project-directory-key.d.ts +26 -0
- package/dist/shared/project-directory-key.d.ts.map +1 -0
- package/dist/shared/prompt-async-transport.d.ts +4 -0
- package/dist/shared/prompt-async-transport.d.ts.map +1 -1
- package/dist/shared/prompt-surface-runtime.d.ts +3 -3
- package/dist/shared/provider-response-completion.d.ts +12 -0
- package/dist/shared/provider-response-completion.d.ts.map +1 -0
- package/dist/shared/redaction.d.ts.map +1 -1
- package/dist/shared/rpc-client.d.ts +23 -2
- package/dist/shared/rpc-client.d.ts.map +1 -1
- package/dist/shared/rpc-types.d.ts +19 -0
- package/dist/shared/rpc-types.d.ts.map +1 -1
- package/dist/shared/rpc-utils.d.ts +34 -0
- package/dist/shared/rpc-utils.d.ts.map +1 -1
- package/dist/shared/sqlite.d.ts +13 -2
- package/dist/shared/sqlite.d.ts.map +1 -1
- package/dist/shared/stale-plugin-build.d.ts +21 -0
- package/dist/shared/stale-plugin-build.d.ts.map +1 -0
- package/dist/shared/status-summary.d.ts +29 -0
- package/dist/shared/status-summary.d.ts.map +1 -1
- package/dist/shared/status-view-check.d.ts +124 -0
- package/dist/shared/status-view-check.d.ts.map +1 -0
- package/dist/shared/status-view.d.ts +38 -2
- package/dist/shared/status-view.d.ts.map +1 -1
- package/dist/shared/tag-owner-id.d.ts +19 -0
- package/dist/shared/tag-owner-id.d.ts.map +1 -0
- package/dist/shared/tag-transcript.d.ts +2 -1
- package/dist/shared/tag-transcript.d.ts.map +1 -1
- package/dist/shared/test-temp-dir.d.ts +8 -2
- package/dist/shared/test-temp-dir.d.ts.map +1 -1
- package/dist/shared/user-facing-codes.d.ts +41 -6
- package/dist/shared/user-facing-codes.d.ts.map +1 -1
- package/dist/shared/xml-unescape.d.ts +9 -0
- package/dist/shared/xml-unescape.d.ts.map +1 -0
- package/dist/task-config-v81k8jvk.js +17 -0
- package/dist/tools/ctx-expand/constants.d.ts +1 -1
- package/dist/tools/ctx-expand/constants.d.ts.map +1 -1
- package/dist/tools/ctx-expand/mode.d.ts +4 -0
- package/dist/tools/ctx-expand/mode.d.ts.map +1 -1
- package/dist/tools/ctx-expand/render.d.ts +5 -1
- package/dist/tools/ctx-expand/render.d.ts.map +1 -1
- package/dist/tools/ctx-expand/tools.d.ts +2 -0
- package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
- package/dist/tools/ctx-expand/types.d.ts +1 -0
- package/dist/tools/ctx-expand/types.d.ts.map +1 -1
- package/dist/tools/ctx-memory/tools.d.ts.map +1 -1
- package/dist/tools/ctx-note/render.d.ts +2 -0
- package/dist/tools/ctx-note/render.d.ts.map +1 -1
- package/dist/tools/ctx-note/tools.d.ts.map +1 -1
- package/dist/tools/ctx-reduce/constants.d.ts +1 -1
- package/dist/tools/ctx-reduce/constants.d.ts.map +1 -1
- package/dist/tools/ctx-search/constants.d.ts +1 -1
- package/dist/tools/ctx-search/constants.d.ts.map +1 -1
- package/dist/tools/light-descriptions.d.ts +3 -3
- package/dist/tools/light-descriptions.d.ts.map +1 -1
- package/dist/tools/parameter-descriptions.d.ts +14 -14
- package/dist/transform-postprocess-phase-414phndq.js +61 -0
- package/dist/tui/data/context-db.d.ts +34 -10
- package/dist/tui/data/context-db.d.ts.map +1 -1
- package/dist/tui/data/notification-socket.d.ts +6 -0
- package/dist/tui/data/notification-socket.d.ts.map +1 -1
- package/dist/tui/data/session-directory.d.ts +16 -0
- package/dist/tui/data/session-directory.d.ts.map +1 -0
- package/dist/tui-compiled/data/context-db.d.ts +34 -10
- package/dist/tui-compiled/data/context-db.d.ts.map +1 -1
- package/dist/tui-compiled/data/notification-socket.d.ts +6 -0
- package/dist/tui-compiled/data/notification-socket.d.ts.map +1 -1
- package/dist/tui-compiled/data/session-directory.d.ts +16 -0
- package/dist/tui-compiled/data/session-directory.d.ts.map +1 -0
- package/dist/v2/derive-budgets-v0krf3t7.js +18 -0
- package/dist/v2/embedding-worker.js +47 -0
- package/dist/v2/emscripten-module-0g8f45e6.js +602 -0
- package/dist/v2/emscripten-module-0pekdjxz.js +1532 -0
- package/dist/v2/emscripten-module-e67xwsp3.js +503 -0
- package/dist/v2/emscripten-module-pj1vyb44.js +4559 -0
- package/dist/v2/ffi-3cx1cxpk.js +78 -0
- package/dist/v2/ffi-7bqqe4cd.js +91 -0
- package/dist/v2/ffi-7e6gryj5.js +91 -0
- package/dist/v2/ffi-bpvkebwr.js +78 -0
- package/dist/v2/fold/boundary.d.ts.map +1 -1
- package/dist/v2/fork-inheritance.d.ts +101 -0
- package/dist/v2/fork-inheritance.d.ts.map +1 -0
- package/dist/v2/hidden-child-cleanup.d.ts +11 -0
- package/dist/v2/hidden-child-cleanup.d.ts.map +1 -0
- package/dist/v2/hidden-child-native.d.ts +29 -0
- package/dist/v2/hidden-child-native.d.ts.map +1 -0
- package/dist/v2/hidden-child-record.d.ts +135 -0
- package/dist/v2/hidden-child-record.d.ts.map +1 -0
- package/dist/v2/hidden-completion.d.ts +12 -97
- package/dist/v2/hidden-completion.d.ts.map +1 -1
- package/dist/v2/hooks/context.d.ts +20 -8
- package/dist/v2/hooks/context.d.ts.map +1 -1
- package/dist/v2/hooks/dream-manual.d.ts.map +1 -1
- package/dist/v2/hooks/dream-trigger.d.ts +5 -0
- package/dist/v2/hooks/dream-trigger.d.ts.map +1 -1
- package/dist/v2/hooks/generate.d.ts +10 -0
- package/dist/v2/hooks/generate.d.ts.map +1 -0
- package/dist/v2/hooks/hidden-child.d.ts +33 -2
- package/dist/v2/hooks/hidden-child.d.ts.map +1 -1
- package/dist/v2/hooks/payload.d.ts +3 -0
- package/dist/v2/hooks/payload.d.ts.map +1 -1
- package/dist/v2/hooks/session-api-gate.d.ts +4 -0
- package/dist/v2/hooks/session-api-gate.d.ts.map +1 -0
- package/dist/v2/hooks/storage-gate.d.ts +3 -1
- package/dist/v2/hooks/storage-gate.d.ts.map +1 -1
- package/dist/v2/hooks/tools.d.ts.map +1 -1
- package/dist/v2/hooks/types.d.ts +10 -0
- package/dist/v2/hooks/types.d.ts.map +1 -1
- package/dist/v2/hooks/update-check.d.ts.map +1 -1
- package/dist/v2/hooks/usage-persist.d.ts.map +1 -1
- package/dist/v2/hooks/usage-reading.d.ts +4 -0
- package/dist/v2/hooks/usage-reading.d.ts.map +1 -1
- package/dist/v2/index-6e4mwffh.js +5662 -0
- package/dist/v2/index-en1k8h8m.js +244 -0
- package/dist/{message-time-backfill-q374fxc5.js → v2/message-time-backfill-0n93vrd7.js} +19 -5
- package/dist/v2/migration-worker.js +52 -0
- package/dist/v2/model-resolution-xhfmyyvy.js +16 -0
- package/dist/v2/module-ES6BEMUI-3cet1pyp.js +12 -0
- package/dist/v2/module-asyncify-2EFITU5U-c2razzd9.js +6 -0
- package/dist/v2/prompt-context-5y5ms8f9.js +6 -0
- package/dist/v2/read-session-chunk-hjza38hr.js +83 -0
- package/dist/v2/recomp-orchestrator-1aq7h44c.js +36 -0
- package/dist/v2/retrospective-raw-provider.d.ts +21 -0
- package/dist/v2/retrospective-raw-provider.d.ts.map +1 -0
- package/dist/v2/rpc-notifications-3hed126v.js +16 -0
- package/dist/v2/safe-notification-target-wtj0bbc2.js +9 -0
- package/dist/{send-session-notification-04hvd54c.js → v2/send-session-notification-mq9frrtm.js} +10 -5
- package/dist/v2/server-0jqw05sa.js +803 -0
- package/dist/v2/server-5317ykaf.js +40 -0
- package/dist/v2/server-a4m2b1yv.js +530 -0
- package/dist/v2/server-avwt563y.js +62 -0
- package/dist/v2/server-c4g2y1z8.js +28824 -0
- package/dist/v2/server-ckpc8pxy.js +662 -0
- package/dist/v2/server-e36nf2p1.js +7702 -0
- package/dist/v2/server-e44zzy84.js +10 -0
- package/dist/v2/server-fgmxwrgy.js +16 -0
- package/dist/v2/server-fmsr7v69.js +75 -0
- package/dist/v2/server-g20jdh0p.js +1273 -0
- package/dist/{index-qm36k34q.js → v2/server-hfjfbg59.js} +796 -737
- package/dist/v2/server-n96ag4rk.js +633 -0
- package/dist/v2/server-qdjnb2z1.js +181 -0
- package/dist/v2/server-qpg6wf72.js +187 -0
- package/dist/v2/server-r7cmye3k.js +131 -0
- package/dist/v2/server-remp7e2g.js +214 -0
- package/dist/v2/server-rhdgxp1t.js +398 -0
- package/dist/v2/server-sfpzqvdz.js +137 -0
- package/dist/v2/server-syahy8j8.js +50 -0
- package/dist/v2/server-v5xgft5v.js +9116 -0
- package/dist/v2/server-w99cyt6a.js +361 -0
- package/dist/v2/server-x8a7jmkh.js +104 -0
- package/dist/v2/server-y8v6yerm.js +77 -0
- package/dist/v2/server-z19x7eqz.js +423 -0
- package/dist/v2/server.d.ts.map +1 -1
- package/dist/v2/server.js +8796 -107376
- package/dist/v2/store-reader.d.ts +50 -0
- package/dist/v2/store-reader.d.ts.map +1 -1
- package/dist/v2/task-config-tbndqyny.js +17 -0
- package/dist/v2/transformers-node-wasm.js +26768 -0
- package/dist/v2/transformers-web.js +25670 -0
- package/dist/v2/transformers.node-hj754h7s.js +29997 -0
- package/dist/v2/tui/index.d.ts +10 -1
- package/dist/v2/tui/index.d.ts.map +1 -1
- package/dist/v2/tui/sidebar-mount.d.ts +6 -0
- package/dist/v2/tui/sidebar-mount.d.ts.map +1 -1
- package/dist/v2/tui/status-dialog-mount.d.ts +7 -4
- package/dist/v2/tui/status-dialog-mount.d.ts.map +1 -1
- package/dist/v2/tui/types.d.ts +12 -0
- package/dist/v2/tui/types.d.ts.map +1 -1
- package/dist/v2/wrapup-orchestrator-tbyx78dz.js +425 -0
- package/dist/wrapup-orchestrator-h28bqsy6.js +26 -0
- package/package.json +8 -8
- package/src/agents/hidden-agent-registrations.ts +24 -16
- package/src/agents/magic-context-prompt.test.ts +41 -0
- package/src/agents/magic-context-prompt.ts +8 -5
- package/src/agents/permissions.test.ts +31 -49
- package/src/agents/permissions.ts +8 -28
- package/src/config/index.test.ts +60 -20
- package/src/config/index.ts +53 -1
- package/src/config/live-run-config.test.ts +5 -5
- package/src/config/live-snapshot.test.ts +4 -4
- package/src/config/migrate-config-location.test.ts +3 -10
- package/src/config/project-config-trust-boundary.test.ts +207 -0
- package/src/config/project-security.hostile-matrix.test.ts +4 -4
- package/src/config/project-security.ts +218 -1
- package/src/config/protected-tokens.test.ts +14 -9
- package/src/config/raw-loader.test.ts +31 -3
- package/src/config/raw-loader.ts +8 -3
- package/src/config/schema/magic-context.ts +20 -3
- package/src/config/variable.test.ts +3 -2
- package/src/features/magic-context/dreamer/cron.ts +30 -9
- package/src/features/magic-context/dreamer/task-registry.ts +7 -5
- package/src/shared/announcement.test.ts +2 -1
- package/src/shared/assistant-message-extractor.test.ts +27 -1
- package/src/shared/assistant-message-extractor.ts +27 -0
- package/src/shared/background-batch-drain.test.ts +38 -0
- package/src/shared/background-batch-drain.ts +29 -0
- package/src/shared/builtin-commands.ts +50 -0
- package/src/shared/console-diagnostics-fence.test.ts +145 -0
- package/src/shared/data-path.test.ts +6 -5
- package/src/shared/embedding-activity.test.ts +21 -0
- package/src/shared/embedding-activity.ts +36 -0
- package/src/shared/historian-tool-defaults.json +13 -0
- package/src/shared/historian-tool-expansions.ts +18 -0
- package/src/shared/historian-tool-template.ts +248 -0
- package/src/shared/historian-transient-error.test.ts +36 -0
- package/src/shared/historian-transient-error.ts +22 -0
- package/src/shared/jsonc-edit.ts +20 -1
- package/src/shared/logger.test.ts +3 -2
- package/src/shared/logger.ts +40 -1
- package/src/shared/model-suggestion-retry.test.ts +46 -0
- package/src/shared/model-suggestion-retry.ts +16 -1
- package/src/shared/models-dev-cache.test.ts +74 -2
- package/src/shared/models-dev-cache.ts +5 -1
- package/src/shared/off-thread-migration-clock.test.ts +55 -0
- package/src/shared/off-thread-migration-clock.ts +124 -0
- package/src/shared/opencode-db-path.test.ts +3 -2
- package/src/shared/plugin-package-version.ts +52 -0
- package/src/shared/project-directory-key.test.ts +111 -0
- package/src/shared/project-directory-key.ts +54 -0
- package/src/shared/prompt-async-transport.test.ts +249 -72
- package/src/shared/prompt-async-transport.ts +131 -24
- package/src/shared/prompt-surface-a1-golden.md +41 -25
- package/src/shared/prompt-surface-runtime.test.ts +3 -3
- package/src/shared/provider-response-completion.ts +23 -0
- package/src/shared/redaction.test.ts +51 -1
- package/src/shared/redaction.ts +33 -0
- package/src/shared/rpc-async-probes.test.ts +32 -2
- package/src/shared/rpc-client.test.ts +3 -2
- package/src/shared/rpc-client.ts +76 -18
- package/src/shared/rpc-types.ts +15 -0
- package/src/shared/rpc-utils.test.ts +164 -10
- package/src/shared/rpc-utils.ts +144 -15
- package/src/shared/sqlite-acquisition-routing.test.ts +46 -3
- package/src/shared/sqlite-pass-scope.test.ts +3 -2
- package/src/shared/sqlite-transaction-mode-guard.test.ts +4 -0
- package/src/shared/sqlite-writer-diagnostics.test.ts +134 -0
- package/src/shared/sqlite.ts +225 -41
- package/src/shared/stale-plugin-build.test.ts +129 -0
- package/src/shared/stale-plugin-build.ts +151 -0
- package/src/shared/status-summary.ts +40 -13
- package/src/shared/status-view-check.test.ts +253 -0
- package/src/shared/status-view-check.ts +536 -0
- package/src/shared/status-view.test.ts +6 -1
- package/src/shared/status-view.ts +176 -4
- package/src/shared/storage-busy.test.ts +3 -2
- package/src/shared/tag-owner-id.test.ts +33 -0
- package/src/shared/tag-owner-id.ts +29 -0
- package/src/shared/tag-transcript.ts +13 -2
- package/src/shared/test-temp-dir-policy.test.ts +33 -0
- package/src/shared/test-temp-dir.test.ts +27 -0
- package/src/shared/test-temp-dir.ts +36 -12
- package/src/shared/tui-config.test.ts +6 -5
- package/src/shared/tui-preferences.test.ts +3 -2
- package/src/shared/user-facing-codes.ts +52 -6
- package/src/shared/window-geometry.test.ts +3 -2
- package/src/shared/write-transaction-attribution.test.ts +11 -7
- package/src/shared/write-transaction-hold-clock.test.ts +160 -0
- package/src/shared/xml-unescape.ts +19 -0
- package/src/tui/data/context-db.test.ts +92 -4
- package/src/tui/data/context-db.ts +184 -18
- package/src/tui/data/notification-socket.test.ts +49 -2
- package/src/tui/data/notification-socket.ts +47 -9
- package/src/tui/data/session-directory.ts +19 -0
- package/src/tui/dialogs/status-dialog-render.test.ts +284 -0
- package/src/tui/dialogs/status-dialog.tsx +41 -38
- package/src/tui/index.tsx +30 -18
- package/src/tui/slots/sidebar-content.tsx +9 -2
- package/src/tui-compiled/data/context-db.ts +184 -18
- package/src/tui-compiled/data/notification-socket.ts +47 -9
- package/src/tui-compiled/data/session-directory.ts +19 -0
- package/src/tui-compiled/dialogs/status-dialog.tsx +38 -29
- package/src/tui-compiled/index.tsx +29 -16
- package/src/tui-compiled/slots/sidebar-content.tsx +3 -2
- package/src/v2/tui/host-contract.test.ts +9 -10
- package/src/v2/tui/index.ts +78 -23
- package/src/v2/tui/load-compiled-sidebar.d.mts +5 -1
- package/src/v2/tui/load-compiled-status-dialog.d.mts +3 -2
- package/src/v2/tui/session-directory.test.ts +53 -0
- package/src/v2/tui/sidebar-mount.ts +19 -1
- package/src/v2/tui/status-dialog-mount.ts +10 -7
- package/src/v2/tui/types.ts +10 -0
- package/dist/features/builtin-commands/commands.d.ts.map +0 -1
- package/dist/features/builtin-commands/types.d.ts +0 -3
- package/dist/features/builtin-commands/types.d.ts.map +0 -1
- package/dist/features/magic-context/context-authority.d.ts +0 -272
- package/dist/features/magic-context/context-authority.d.ts.map +0 -1
- package/dist/features/magic-context/memory/mirror-reembed.d.ts +0 -22
- package/dist/features/magic-context/memory/mirror-reembed.d.ts.map +0 -1
- package/dist/hooks/magic-context/historian-state-file.d.ts +0 -43
- package/dist/hooks/magic-context/historian-state-file.d.ts.map +0 -1
- package/dist/index-4an2p8qa.js +0 -1056
- package/dist/index-rn7gafjr.js +0 -8
- package/dist/index-v6t0tg85.js +0 -13
- package/dist/plugin/memory-id-translation.d.ts +0 -109
- package/dist/plugin/memory-id-translation.d.ts.map +0 -1
- package/dist/plugin/rust-note-backend.d.ts +0 -84
- package/dist/plugin/rust-note-backend.d.ts.map +0 -1
- package/dist/recomp-orchestrator-0ers6smx.js +0 -22
- package/dist/task-config-2bm68628.js +0 -9
- package/dist/transform-postprocess-phase-ttdkrm6r.js +0 -36
- package/dist/v2/host-service.d.ts +0 -66
- package/dist/v2/host-service.d.ts.map +0 -1
- package/dist/wrapup-orchestrator-x0jvvrqn.js +0 -19
- /package/dist/{index-s70wtd8k.js → index-q6hef7fh.js} +0 -0
|
@@ -3,14 +3,38 @@
|
|
|
3
3
|
* All data is fetched from the server plugin via HTTP RPC.
|
|
4
4
|
*/
|
|
5
5
|
import { getMagicContextStorageDir } from "../../shared/data-path";
|
|
6
|
-
import {
|
|
6
|
+
import { pluginPackageVersion } from "../../shared/plugin-package-version";
|
|
7
|
+
import { MagicContextRpcClient, RpcServerNotFoundError } from "../../shared/rpc-client";
|
|
7
8
|
import type { EmbedDetail, SidebarSnapshot, StatusDetail } from "../../shared/rpc-types";
|
|
9
|
+
import {
|
|
10
|
+
checkStatusDetailPayload,
|
|
11
|
+
type OpenCodeStatusExtras,
|
|
12
|
+
type StatusCheck,
|
|
13
|
+
statusRpcFailure,
|
|
14
|
+
} from "../../shared/status-view-check";
|
|
8
15
|
|
|
9
16
|
export type { EmbedDetail, SidebarSnapshot, StatusDetail };
|
|
10
17
|
|
|
11
18
|
let rpcClient: MagicContextRpcClient | null = null;
|
|
19
|
+
let rpcClientDirectory: string | null = null;
|
|
12
20
|
let rpcGeneration = 0;
|
|
13
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Clients for session directories other than the one the TUI started in.
|
|
24
|
+
*
|
|
25
|
+
* OpenCode runs one Magic Context server instance per directory, and each one
|
|
26
|
+
* writes its RPC discovery file under that directory's hash. A TUI started in
|
|
27
|
+
* one directory (commonly the home directory) can show a session whose
|
|
28
|
+
* directory is another project; asking the startup directory's server about
|
|
29
|
+
* that session returns the startup directory's answer (for the home directory:
|
|
30
|
+
* no project state at all), so the sidebar and `/ctx-status` showed nothing.
|
|
31
|
+
* Session-scoped calls therefore go to the client for the session's own
|
|
32
|
+
* directory. The startup client stays as it is for the notification socket and
|
|
33
|
+
* the process-wide calls.
|
|
34
|
+
*/
|
|
35
|
+
const sessionDirectoryClients = new Map<string, MagicContextRpcClient>();
|
|
36
|
+
const MAX_SESSION_DIRECTORY_CLIENTS = 16;
|
|
37
|
+
|
|
14
38
|
/** Initialize the RPC client. Call once on TUI startup. */
|
|
15
39
|
export function initRpcClient(directory: string): void {
|
|
16
40
|
const storageDir = getMagicContextStorageDir();
|
|
@@ -19,6 +43,127 @@ export function initRpcClient(directory: string): void {
|
|
|
19
43
|
// new generation and abandons its in-flight connect).
|
|
20
44
|
rpcGeneration += 1;
|
|
21
45
|
rpcClient = new MagicContextRpcClient(storageDir, directory);
|
|
46
|
+
rpcClientDirectory = directory;
|
|
47
|
+
resetSessionDirectoryClients();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function resetSessionDirectoryClients(): void {
|
|
51
|
+
for (const client of sessionDirectoryClients.values()) client.reset();
|
|
52
|
+
sessionDirectoryClients.clear();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The client for the server instance that owns `directory`: the startup client
|
|
57
|
+
* when the directory is the one the TUI started in (or unknown), otherwise a
|
|
58
|
+
* client discovering that directory's own server. Null before init.
|
|
59
|
+
*/
|
|
60
|
+
function clientForDirectory(directory: string): MagicContextRpcClient | null {
|
|
61
|
+
if (!rpcClient) return null;
|
|
62
|
+
if (!directory || directory === rpcClientDirectory) return rpcClient;
|
|
63
|
+
const existing = sessionDirectoryClients.get(directory);
|
|
64
|
+
if (existing) return existing;
|
|
65
|
+
if (sessionDirectoryClients.size >= MAX_SESSION_DIRECTORY_CLIENTS) {
|
|
66
|
+
const oldest = sessionDirectoryClients.keys().next().value;
|
|
67
|
+
if (oldest !== undefined) {
|
|
68
|
+
sessionDirectoryClients.get(oldest)?.reset();
|
|
69
|
+
sessionDirectoryClients.delete(oldest);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Short resolution: when this directory has no discovery file the caller
|
|
73
|
+
// falls back to asking every local server (see `callSessionRpc`) instead of
|
|
74
|
+
// retrying the miss for fifteen seconds.
|
|
75
|
+
const client = new MagicContextRpcClient(getMagicContextStorageDir(), directory, {
|
|
76
|
+
resolveAttempts: 2,
|
|
77
|
+
reresolveAttempts: 1,
|
|
78
|
+
});
|
|
79
|
+
sessionDirectoryClients.set(directory, client);
|
|
80
|
+
return client;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* The server the notification socket should subscribe to: the one that owns
|
|
85
|
+
* the shown session's directory, so a push from the command that session runs
|
|
86
|
+
* (for example `/ctx-status` asking to open its dialog) reaches this TUI. That
|
|
87
|
+
* is the startup directory's server when no session is shown or the session is
|
|
88
|
+
* in the startup directory. A session directory with no discovery file falls
|
|
89
|
+
* back to the server that claims the session, then to the startup server so
|
|
90
|
+
* session-less notifications still arrive.
|
|
91
|
+
*/
|
|
92
|
+
export async function resolveNotificationTarget(
|
|
93
|
+
sessionDirectory: string | null,
|
|
94
|
+
sessionId: string | null,
|
|
95
|
+
): Promise<{
|
|
96
|
+
client: MagicContextRpcClient;
|
|
97
|
+
directory: string;
|
|
98
|
+
endpoint: { port: number; token: string | null; instanceId: string | null };
|
|
99
|
+
} | null> {
|
|
100
|
+
const startup = rpcClient;
|
|
101
|
+
if (!startup) return null;
|
|
102
|
+
const directory = sessionDirectory ?? "";
|
|
103
|
+
let client = clientForDirectory(directory) ?? startup;
|
|
104
|
+
let endpoint = await client.resolveEndpoint();
|
|
105
|
+
if (!endpoint && client !== startup && sessionId) {
|
|
106
|
+
const owner = await MagicContextRpcClient.findSessionOwner(
|
|
107
|
+
getMagicContextStorageDir(),
|
|
108
|
+
sessionId,
|
|
109
|
+
);
|
|
110
|
+
if (owner) {
|
|
111
|
+
sessionDirectoryClients.get(directory)?.reset();
|
|
112
|
+
sessionDirectoryClients.set(directory, owner);
|
|
113
|
+
client = owner;
|
|
114
|
+
endpoint = await owner.resolveEndpoint();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (endpoint) {
|
|
118
|
+
return {
|
|
119
|
+
client,
|
|
120
|
+
directory: client === startup ? (rpcClientDirectory ?? "") : directory,
|
|
121
|
+
endpoint,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
if (client === startup) return null;
|
|
125
|
+
const startupEndpoint = await startup.resolveEndpoint();
|
|
126
|
+
return startupEndpoint
|
|
127
|
+
? { client: startup, directory: rpcClientDirectory ?? "", endpoint: startupEndpoint }
|
|
128
|
+
: null;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** The directory whose server a notification subscription for `sessionDirectory` targets first. */
|
|
132
|
+
export function notificationDirectoryFor(sessionDirectory: string | null): string {
|
|
133
|
+
const directory = sessionDirectory ?? "";
|
|
134
|
+
if (!directory || directory === rpcClientDirectory) return rpcClientDirectory ?? "";
|
|
135
|
+
return directory;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Call a session-scoped RPC on the server that owns the session's directory.
|
|
140
|
+
* When no server is filed under that directory (the host spelled it in a way
|
|
141
|
+
* the canonical form still does not match), every live local server is asked
|
|
142
|
+
* whether it owns the session, and the owner, if any, answers this call and
|
|
143
|
+
* later ones for the directory. Only when no server claims the session does
|
|
144
|
+
* the call fail as before.
|
|
145
|
+
*/
|
|
146
|
+
async function callSessionRpc<T>(
|
|
147
|
+
directory: string,
|
|
148
|
+
sessionId: string,
|
|
149
|
+
method: string,
|
|
150
|
+
params: Record<string, unknown>,
|
|
151
|
+
): Promise<T> {
|
|
152
|
+
const client = clientForDirectory(directory);
|
|
153
|
+
if (!client) throw new Error("RPC client is not initialized");
|
|
154
|
+
try {
|
|
155
|
+
return await client.call<T>(method, params);
|
|
156
|
+
} catch (error) {
|
|
157
|
+
if (!(error instanceof RpcServerNotFoundError) || client === rpcClient) throw error;
|
|
158
|
+
const owner = await MagicContextRpcClient.findSessionOwner(
|
|
159
|
+
getMagicContextStorageDir(),
|
|
160
|
+
sessionId,
|
|
161
|
+
);
|
|
162
|
+
if (!owner) throw error;
|
|
163
|
+
sessionDirectoryClients.get(directory)?.reset();
|
|
164
|
+
sessionDirectoryClients.set(directory, owner);
|
|
165
|
+
return owner.call<T>(method, params);
|
|
166
|
+
}
|
|
22
167
|
}
|
|
23
168
|
|
|
24
169
|
export function getRpcGeneration(): number {
|
|
@@ -38,6 +183,8 @@ export function closeRpc(): void {
|
|
|
38
183
|
rpcGeneration += 1;
|
|
39
184
|
rpcClient?.reset();
|
|
40
185
|
rpcClient = null;
|
|
186
|
+
rpcClientDirectory = null;
|
|
187
|
+
resetSessionDirectoryClients();
|
|
41
188
|
}
|
|
42
189
|
|
|
43
190
|
const EMPTY_SNAPSHOT: SidebarSnapshot = {
|
|
@@ -134,10 +281,15 @@ export async function loadSidebarSnapshot(
|
|
|
134
281
|
const empty: SidebarSnapshot = { ...EMPTY_SNAPSHOT, sessionId };
|
|
135
282
|
if (!rpcClient) return recallSidebarSnapshot(sessionId, empty);
|
|
136
283
|
try {
|
|
137
|
-
const result = await
|
|
138
|
-
sessionId,
|
|
284
|
+
const result = await callSessionRpc<SidebarSnapshot>(
|
|
139
285
|
directory,
|
|
140
|
-
|
|
286
|
+
sessionId,
|
|
287
|
+
"sidebar-snapshot",
|
|
288
|
+
{
|
|
289
|
+
sessionId,
|
|
290
|
+
directory,
|
|
291
|
+
},
|
|
292
|
+
);
|
|
141
293
|
if ((result as unknown as Record<string, unknown>).error) {
|
|
142
294
|
// Snapshot-build errors are explicit failure envelopes, equivalent to
|
|
143
295
|
// a transport failure: retain the last known-good client snapshot.
|
|
@@ -162,26 +314,29 @@ export async function loadSidebarSnapshot(
|
|
|
162
314
|
}
|
|
163
315
|
}
|
|
164
316
|
|
|
165
|
-
export type StatusDetailResult =
|
|
317
|
+
export type StatusDetailResult = StatusCheck<OpenCodeStatusExtras>;
|
|
166
318
|
|
|
167
|
-
/**
|
|
319
|
+
/**
|
|
320
|
+
* Fetch the status for the `/ctx-status` dialog. Every reply, including a
|
|
321
|
+
* transport failure, comes back as a checked result: either a snapshot the
|
|
322
|
+
* view model can draw, or the reason there is none. The dialog never receives
|
|
323
|
+
* an unchecked payload.
|
|
324
|
+
*/
|
|
168
325
|
export async function loadStatusDetail(
|
|
169
326
|
sessionId: string,
|
|
170
327
|
directory: string,
|
|
171
328
|
modelKey?: string,
|
|
172
329
|
): Promise<StatusDetailResult> {
|
|
173
|
-
if (!rpcClient) return
|
|
330
|
+
if (!rpcClient) return statusRpcFailure("RPC client is not initialized");
|
|
174
331
|
try {
|
|
175
|
-
const
|
|
332
|
+
const reply = await callSessionRpc<unknown>(directory, sessionId, "status-detail", {
|
|
176
333
|
sessionId,
|
|
177
334
|
directory,
|
|
178
335
|
modelKey,
|
|
179
336
|
});
|
|
180
|
-
|
|
181
|
-
if (typeof error === "string") return { ok: false, error };
|
|
182
|
-
return { ok: true, detail: result };
|
|
337
|
+
return checkStatusDetailPayload(reply, pluginPackageVersion() ?? "unknown");
|
|
183
338
|
} catch (error) {
|
|
184
|
-
return
|
|
339
|
+
return statusRpcFailure(error instanceof Error ? error.message : String(error));
|
|
185
340
|
}
|
|
186
341
|
}
|
|
187
342
|
|
|
@@ -199,7 +354,7 @@ const EMPTY_EMBED_DETAIL: EmbedDetail = {
|
|
|
199
354
|
export async function loadEmbedDetail(sessionId: string, directory: string): Promise<EmbedDetail> {
|
|
200
355
|
if (!rpcClient) return EMPTY_EMBED_DETAIL;
|
|
201
356
|
try {
|
|
202
|
-
const result = await
|
|
357
|
+
const result = await callSessionRpc<EmbedDetail>(directory, sessionId, "embed-detail", {
|
|
203
358
|
sessionId,
|
|
204
359
|
directory,
|
|
205
360
|
});
|
|
@@ -221,9 +376,14 @@ export async function getCompartmentCount(
|
|
|
221
376
|
): Promise<CompartmentCountResult> {
|
|
222
377
|
if (!rpcClient) return { ok: false, error: "RPC client is not initialized" };
|
|
223
378
|
try {
|
|
224
|
-
const result = await
|
|
379
|
+
const result = await callSessionRpc<{ count?: number; error?: string }>(
|
|
380
|
+
directory ?? "",
|
|
381
|
+
sessionId,
|
|
225
382
|
"compartment-count",
|
|
226
|
-
{
|
|
383
|
+
{
|
|
384
|
+
sessionId,
|
|
385
|
+
directory,
|
|
386
|
+
},
|
|
227
387
|
);
|
|
228
388
|
if (typeof result.error === "string") return { ok: false, error: result.error };
|
|
229
389
|
if (typeof result.count !== "number" || !Number.isFinite(result.count)) {
|
|
@@ -235,11 +395,17 @@ export async function getCompartmentCount(
|
|
|
235
395
|
}
|
|
236
396
|
}
|
|
237
397
|
|
|
238
|
-
/**
|
|
239
|
-
|
|
398
|
+
/**
|
|
399
|
+
* Send recomp request to server via RPC. `directory` is the session's
|
|
400
|
+
* directory, so the request reaches the server instance that owns the session
|
|
401
|
+
* (the same one the recomp dialog read its compartment count from).
|
|
402
|
+
*/
|
|
403
|
+
export async function requestRecomp(sessionId: string, directory?: string): Promise<boolean> {
|
|
240
404
|
if (!rpcClient) return false;
|
|
241
405
|
try {
|
|
242
|
-
const result = await
|
|
406
|
+
const result = await callSessionRpc<{ ok: boolean }>(directory ?? "", sessionId, "recomp", {
|
|
407
|
+
sessionId,
|
|
408
|
+
});
|
|
243
409
|
return result.ok ?? false;
|
|
244
410
|
} catch {
|
|
245
411
|
return false;
|
|
@@ -18,7 +18,11 @@
|
|
|
18
18
|
* unlike the old poll it does no network work at idle.
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
import {
|
|
21
|
+
import {
|
|
22
|
+
getRpcGeneration,
|
|
23
|
+
notificationDirectoryFor,
|
|
24
|
+
resolveNotificationTarget,
|
|
25
|
+
} from "./context-db";
|
|
22
26
|
|
|
23
27
|
export interface SocketNotification {
|
|
24
28
|
id: number;
|
|
@@ -30,6 +34,12 @@ export interface SocketNotification {
|
|
|
30
34
|
interface NotificationSocketOptions {
|
|
31
35
|
/** Current active session id (re-read cheaply to follow session switches). */
|
|
32
36
|
getSessionId: () => string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Directory of the active session, when the host reports it. The socket
|
|
39
|
+
* subscribes to that directory's server, because that is the server whose
|
|
40
|
+
* commands push this session's notifications; null means the startup one.
|
|
41
|
+
*/
|
|
42
|
+
getSessionDirectory?: () => string | null;
|
|
33
43
|
/** Handle one delivered notification. Returns true only after it is fully
|
|
34
44
|
* consumed and can be acknowledged. Async because dialog handlers await. */
|
|
35
45
|
onNotification: (notification: SocketNotification) => boolean | Promise<boolean>;
|
|
@@ -47,6 +57,13 @@ let sessionWatchTimer: ReturnType<typeof setInterval> | undefined;
|
|
|
47
57
|
let reconnectAttempt = 0;
|
|
48
58
|
let closed = false;
|
|
49
59
|
let helloedSession: string | null = null;
|
|
60
|
+
/** Directory whose server the open socket is subscribed to. */
|
|
61
|
+
let connectedDirectory: string | null = null;
|
|
62
|
+
/** Last time the socket was moved to follow a session's directory. */
|
|
63
|
+
let lastRetargetAt = 0;
|
|
64
|
+
/** Minimum spacing between moves, so a session whose server is not up yet does
|
|
65
|
+
* not reconnect the socket every watcher tick. */
|
|
66
|
+
const RETARGET_MIN_INTERVAL_MS = 10_000;
|
|
50
67
|
let opts: NotificationSocketOptions | null = null;
|
|
51
68
|
let activeToken: string | null = null;
|
|
52
69
|
/** Generation of the rpc client used by the active socket. */
|
|
@@ -110,6 +127,8 @@ export function stopNotificationSocket(): void {
|
|
|
110
127
|
opts = null;
|
|
111
128
|
activeToken = null;
|
|
112
129
|
helloedSession = null;
|
|
130
|
+
connectedDirectory = null;
|
|
131
|
+
lastRetargetAt = 0;
|
|
113
132
|
reconnectAttempt = 0;
|
|
114
133
|
activeInstanceId = null;
|
|
115
134
|
notificationProtocolMode = null;
|
|
@@ -136,24 +155,22 @@ function scheduleReconnect(): void {
|
|
|
136
155
|
async function connect(): Promise<void> {
|
|
137
156
|
if (closed || socket || inFlightAttemptId !== null) return;
|
|
138
157
|
|
|
139
|
-
const client = getRpcClient();
|
|
140
|
-
if (!client) {
|
|
141
|
-
scheduleReconnect();
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
158
|
const attemptId = ++nextAttemptId;
|
|
146
159
|
const rpcGeneration = getRpcGeneration();
|
|
147
160
|
inFlightAttemptId = attemptId;
|
|
148
|
-
const
|
|
161
|
+
const target = await resolveNotificationTarget(
|
|
162
|
+
opts?.getSessionDirectory?.() ?? null,
|
|
163
|
+
opts?.getSessionId() ?? null,
|
|
164
|
+
);
|
|
149
165
|
if (closed || inFlightAttemptId !== attemptId || getRpcGeneration() !== rpcGeneration) {
|
|
150
166
|
return;
|
|
151
167
|
}
|
|
152
168
|
inFlightAttemptId = null;
|
|
153
|
-
if (!
|
|
169
|
+
if (!target) {
|
|
154
170
|
scheduleReconnect();
|
|
155
171
|
return;
|
|
156
172
|
}
|
|
173
|
+
const { client, endpoint } = target;
|
|
157
174
|
|
|
158
175
|
let ws: WebSocket;
|
|
159
176
|
try {
|
|
@@ -171,6 +188,7 @@ async function connect(): Promise<void> {
|
|
|
171
188
|
return;
|
|
172
189
|
}
|
|
173
190
|
connectGeneration = rpcGeneration;
|
|
191
|
+
connectedDirectory = target.directory;
|
|
174
192
|
activeToken = endpoint.token;
|
|
175
193
|
notificationProtocolMode = null;
|
|
176
194
|
bufferedNotifications.length = 0;
|
|
@@ -457,6 +475,26 @@ export function _resetNotificationSocketStateForTesting(): void {
|
|
|
457
475
|
* actually changes. Reads a property; no network at idle. */
|
|
458
476
|
function watchSession(): void {
|
|
459
477
|
if (closed || !socket || socket.readyState !== WebSocket.OPEN) return;
|
|
478
|
+
// The shown session belongs to another directory's server: move the socket
|
|
479
|
+
// there, or that server's pushes for this session never reach this TUI.
|
|
480
|
+
const wanted = notificationDirectoryFor(opts?.getSessionDirectory?.() ?? null);
|
|
481
|
+
if (wanted !== connectedDirectory && Date.now() - lastRetargetAt >= RETARGET_MIN_INTERVAL_MS) {
|
|
482
|
+
lastRetargetAt = Date.now();
|
|
483
|
+
const previous = socket;
|
|
484
|
+
socket = null;
|
|
485
|
+
activeToken = null;
|
|
486
|
+
helloedSession = null;
|
|
487
|
+
connectedDirectory = null;
|
|
488
|
+
notificationProtocolMode = null;
|
|
489
|
+
bufferedNotifications.length = 0;
|
|
490
|
+
try {
|
|
491
|
+
previous.close();
|
|
492
|
+
} catch {
|
|
493
|
+
// best-effort
|
|
494
|
+
}
|
|
495
|
+
void connect();
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
460
498
|
const current = opts?.getSessionId() ?? null;
|
|
461
499
|
if (current === helloedSession) return;
|
|
462
500
|
// Re-hello with the token authenticated by this socket; no rediscovery or
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The directory whose Magic Context server owns a session.
|
|
3
|
+
*
|
|
4
|
+
* OpenCode starts one Magic Context server instance per directory. The TUI
|
|
5
|
+
* starts in one directory but can show a session from another one (non-git
|
|
6
|
+
* directories share OpenCode's global project, so a TUI started in the home
|
|
7
|
+
* directory lists sessions from any of them). The sidebar and `/ctx-status`
|
|
8
|
+
* must ask the server for the session's directory, not the startup one.
|
|
9
|
+
*
|
|
10
|
+
* `sessionDirectory` is what the host reports for the session (OpenCode 1:
|
|
11
|
+
* `api.state.session.get(id).directory`; OpenCode 2:
|
|
12
|
+
* `context.data.session.get(id).location.directory`). The startup directory is
|
|
13
|
+
* the fallback while the host has not loaded the session yet.
|
|
14
|
+
*/
|
|
15
|
+
export function directoryForSession(sessionDirectory: unknown, startupDirectory: string): string {
|
|
16
|
+
return typeof sessionDirectory === "string" && sessionDirectory.length > 0
|
|
17
|
+
? sessionDirectory
|
|
18
|
+
: startupDirectory;
|
|
19
|
+
}
|
|
@@ -22,8 +22,7 @@ import { createElement as _$createElement } from "opentui:runtime-module:%40open
|
|
|
22
22
|
*/
|
|
23
23
|
import { createMemo, createSignal, onCleanup } from "opentui:runtime-module:solid-js";
|
|
24
24
|
import packageJson from "../../../package.json";
|
|
25
|
-
import {
|
|
26
|
-
import { buildStatusView, distributeBarWidths, statusColumnsFor } from "../../shared/status-view";
|
|
25
|
+
import { buildStatusViewFor, distributeBarWidths, statusColumnsFor } from "../../shared/status-view";
|
|
27
26
|
import { RUST_MODE_HOST_PATHS_LINE } from "../../shared/rust-mode-status";
|
|
28
27
|
const R = props => (() => {
|
|
29
28
|
var _el$ = _$createElement("box"),
|
|
@@ -65,10 +64,13 @@ function toneColor(theme, tone) {
|
|
|
65
64
|
|
|
66
65
|
/**
|
|
67
66
|
* Width the dialog is actually laid out at, which is NOT the terminal width:
|
|
68
|
-
* each host sizes its own dialog surface (OpenCode
|
|
69
|
-
* a 200-column terminal), and that is the
|
|
70
|
-
* Renderables carry their laid-out width
|
|
71
|
-
*
|
|
67
|
+
* each host sizes its own dialog surface (OpenCode 1's default is 60 columns,
|
|
68
|
+
* OpenCode 2's widest is 88 columns on a 200-column terminal), and that is the
|
|
69
|
+
* width the sections have to fit into. Renderables carry their laid-out width
|
|
70
|
+
* and emit "resize" when a layout pass changes it, so the component reads it
|
|
71
|
+
* from its own root box. ("resized", with a d, is emitted only by the
|
|
72
|
+
* renderer's root; a box never sends it, and listening for it left the dialog
|
|
73
|
+
* sizing its sections from the terminal width forever.)
|
|
72
74
|
*
|
|
73
75
|
* Until the first layout there is no width to read; the terminal width is the
|
|
74
76
|
* fallback, and an unknown terminal keeps the wide layout the dialog has always
|
|
@@ -132,26 +134,27 @@ const StatusSectionView = props => (() => {
|
|
|
132
134
|
_$effect(_$p => _$setProp(_el$9, "fg", props.t.text, _$p));
|
|
133
135
|
return _el$8;
|
|
134
136
|
})();
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* `status` is the checked result of the status RPC (`loadStatusDetail`), never
|
|
140
|
+
* the raw reply: a reply the view cannot draw arrives as the reason it cannot,
|
|
141
|
+
* and the shared model turns that into a "status unavailable" view. An
|
|
142
|
+
* unchecked reply used to reach the view model directly, where a missing field
|
|
143
|
+
* threw inside this component's first render and crashed the whole TUI.
|
|
144
|
+
*/
|
|
135
145
|
export const StatusDialog = props => {
|
|
136
146
|
const theme = createMemo(() => props.api.theme.current);
|
|
137
147
|
const t = () => theme();
|
|
138
|
-
const
|
|
139
|
-
const compactionOff = () =>
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
// two surfaces never disagree. Fall back to deriving from usage% only when the
|
|
143
|
-
// RPC limit is absent (0) — and that derivation is itself undefined at 0%, so
|
|
144
|
-
// it stays "?" rather than showing a number inconsistent with the sidebar.
|
|
145
|
-
const contextLimit = () => s().contextLimit > 0 ? s().contextLimit : s().usagePercentage > 0 ? Math.round(s().inputTokens / (s().usagePercentage / 100)) : 0;
|
|
148
|
+
const ready = () => props.status.state === "ready" ? props.status : null;
|
|
149
|
+
const compactionOff = () => ready()?.source.compaction_enabled === false;
|
|
150
|
+
const recompProgress = () => ready()?.extras.recompProgress ?? null;
|
|
151
|
+
const hostBackendsModuleSide = () => ready()?.extras.hostBackendsModuleSide === true;
|
|
146
152
|
|
|
147
153
|
// Which rows exist, what they are called and which colour they carry is
|
|
148
154
|
// decided by the shared model, so this dialog and Pi's overlay cannot drift
|
|
149
|
-
// apart. This component only draws what the model returns
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
contextLimit: contextLimit(),
|
|
153
|
-
warnings: statusSummaryFromDetail(s()).warnings
|
|
154
|
-
}, {
|
|
155
|
+
// apart. This component only draws what the model returns, and the model
|
|
156
|
+
// never throws: a result it cannot draw becomes the unavailable view.
|
|
157
|
+
const view = createMemo(() => buildStatusViewFor(props.status, {
|
|
155
158
|
version: packageJson.version
|
|
156
159
|
}));
|
|
157
160
|
// The dialog's own laid-out width, which is what the sections have to fit
|
|
@@ -163,8 +166,8 @@ export const StatusDialog = props => {
|
|
|
163
166
|
if (Number.isFinite(width) && width > 0) setDialogWidth(width);
|
|
164
167
|
};
|
|
165
168
|
read();
|
|
166
|
-
element?.on?.("
|
|
167
|
-
onCleanup(() => element?.off?.("
|
|
169
|
+
element?.on?.("resize", read);
|
|
170
|
+
onCleanup(() => element?.off?.("resize", read));
|
|
168
171
|
};
|
|
169
172
|
// paddingLeft + paddingRight below; what the sections get is what is left.
|
|
170
173
|
const contentWidth = () => dialogWidth() > 0 ? dialogWidth() - 4 : terminalColumns();
|
|
@@ -307,9 +310,9 @@ export const StatusDialog = props => {
|
|
|
307
310
|
});
|
|
308
311
|
})(), null);
|
|
309
312
|
_$insert(_el$1, (() => {
|
|
310
|
-
var _c$3 = _$memo(() => !!(!compactionOff() &&
|
|
313
|
+
var _c$3 = _$memo(() => !!(!compactionOff() && recompProgress()));
|
|
311
314
|
return () => _c$3() && (() => {
|
|
312
|
-
const p =
|
|
315
|
+
const p = recompProgress();
|
|
313
316
|
// Label follows the flow that started the run, so a plain
|
|
314
317
|
// /ctx-recomp never reads as an "Upgrade" (dogfood 2026-06-04).
|
|
315
318
|
const verb = p.kind === "upgrade" ? "Upgrade" : p.kind === "embed" ? "Embed" : "Recomp";
|
|
@@ -429,7 +432,7 @@ export const StatusDialog = props => {
|
|
|
429
432
|
})();
|
|
430
433
|
})(), _el$20);
|
|
431
434
|
_$insert(_el$1, (() => {
|
|
432
|
-
var _c$4 = _$memo(() => !!
|
|
435
|
+
var _c$4 = _$memo(() => !!hostBackendsModuleSide());
|
|
433
436
|
return () => _c$4() && (() => {
|
|
434
437
|
var _el$30 = _$createElement("box"),
|
|
435
438
|
_el$31 = _$createElement("text"),
|
|
@@ -468,7 +471,10 @@ export const StatusDialog = props => {
|
|
|
468
471
|
_$setProp(_el$35, "width", "100%");
|
|
469
472
|
_$setProp(_el$35, "gap", 4);
|
|
470
473
|
_$setProp(_el$36, "flexDirection", "column");
|
|
471
|
-
_$setProp(_el$36, "
|
|
474
|
+
_$setProp(_el$36, "flexGrow", 0);
|
|
475
|
+
_$setProp(_el$36, "flexShrink", 1);
|
|
476
|
+
_$setProp(_el$36, "minWidth", 0);
|
|
477
|
+
_$setProp(_el$36, "overflow", "hidden");
|
|
472
478
|
_$insert(_el$36, () => columnSections(0).map(section => _$createComponent(StatusSectionView, {
|
|
473
479
|
get t() {
|
|
474
480
|
return t();
|
|
@@ -476,7 +482,10 @@ export const StatusDialog = props => {
|
|
|
476
482
|
section: section
|
|
477
483
|
})));
|
|
478
484
|
_$setProp(_el$37, "flexDirection", "column");
|
|
479
|
-
_$setProp(_el$37, "
|
|
485
|
+
_$setProp(_el$37, "flexGrow", 0);
|
|
486
|
+
_$setProp(_el$37, "flexShrink", 1);
|
|
487
|
+
_$setProp(_el$37, "minWidth", 0);
|
|
488
|
+
_$setProp(_el$37, "overflow", "hidden");
|
|
480
489
|
_$insert(_el$37, () => columnSections(1).map(section => _$createComponent(StatusSectionView, {
|
|
481
490
|
get t() {
|
|
482
491
|
return t();
|
|
@@ -486,8 +495,8 @@ export const StatusDialog = props => {
|
|
|
486
495
|
_$effect(_p$ => {
|
|
487
496
|
var _v$14 = columns().leftWidth,
|
|
488
497
|
_v$15 = columns().rightWidth;
|
|
489
|
-
_v$14 !== _p$.e && (_p$.e = _$setProp(_el$36, "
|
|
490
|
-
_v$15 !== _p$.t && (_p$.t = _$setProp(_el$37, "
|
|
498
|
+
_v$14 !== _p$.e && (_p$.e = _$setProp(_el$36, "flexBasis", _v$14, _p$.e));
|
|
499
|
+
_v$15 !== _p$.t && (_p$.t = _$setProp(_el$37, "flexBasis", _v$15, _p$.t));
|
|
491
500
|
return _p$;
|
|
492
501
|
}, {
|
|
493
502
|
e: undefined,
|
|
@@ -9,9 +9,9 @@ import { createComponent as _$createComponent } from "opentui:runtime-module:%40
|
|
|
9
9
|
// @ts-nocheck
|
|
10
10
|
import { createMemo } from "opentui:runtime-module:solid-js";
|
|
11
11
|
import { StatusDialog } from "./dialogs/status-dialog";
|
|
12
|
-
import { renderUserFacingFailure, userFacingFailureCode } from "../shared/user-facing-codes";
|
|
13
12
|
import { createSidebarContentSlot, kickRecompProgressRefresh, refreshSidebarSnapshot } from "./slots/sidebar-content";
|
|
14
13
|
import { closeRpc, getAnnouncement, getCompartmentCount, getRpcGeneration, initRpcClient, loadEmbedDetail, loadStatusDetail, loadToastDurationMs, markAnnounced, requestRecomp } from "./data/context-db";
|
|
14
|
+
import { directoryForSession } from "./data/session-directory";
|
|
15
15
|
import { startNotificationSocket, stopNotificationSocket } from "./data/notification-socket";
|
|
16
16
|
import { isCompactionEnabled } from "../config/agent-disable";
|
|
17
17
|
import { loadPluginConfig } from "../config";
|
|
@@ -106,6 +106,20 @@ function getSessionId(api) {
|
|
|
106
106
|
}
|
|
107
107
|
return null;
|
|
108
108
|
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* The directory whose Magic Context server owns this session, which is not
|
|
112
|
+
* necessarily the directory the TUI started in (see `directoryForSession`).
|
|
113
|
+
*/
|
|
114
|
+
function sessionDirectory(api, sessionId) {
|
|
115
|
+
let reported;
|
|
116
|
+
try {
|
|
117
|
+
reported = api.state.session.get(sessionId)?.directory;
|
|
118
|
+
} catch {
|
|
119
|
+
// Session state not available yet: fall back to the startup directory.
|
|
120
|
+
}
|
|
121
|
+
return directoryForSession(reported, api.state.path.directory ?? "");
|
|
122
|
+
}
|
|
109
123
|
function getModelKeyFromMessages(api, sessionId) {
|
|
110
124
|
try {
|
|
111
125
|
const msgs = api.state.session.messages(sessionId);
|
|
@@ -138,7 +152,7 @@ async function showRecompDialog(api, targetSessionId = getSessionId(api)) {
|
|
|
138
152
|
});
|
|
139
153
|
return false;
|
|
140
154
|
}
|
|
141
|
-
const countResult = await getCompartmentCount(sessionId, api
|
|
155
|
+
const countResult = await getCompartmentCount(sessionId, sessionDirectory(api, sessionId));
|
|
142
156
|
// Ack only after the dialog is actually shown for the same active session;
|
|
143
157
|
// route switches while the RPC detail load is in flight must leave it pending.
|
|
144
158
|
if (getSessionId(api) !== sessionId) return false;
|
|
@@ -156,7 +170,7 @@ async function showRecompDialog(api, targetSessionId = getSessionId(api)) {
|
|
|
156
170
|
return [count === 0 ? "This session has no compartments yet — recomp will build them from raw history." : `You have ${count} compartments.`, "", "Recomp will rebuild the compressed history from raw history. Saved memories are not changed.", "This may take a long time and consume significant tokens.", "", "Proceed?"].join("\n");
|
|
157
171
|
},
|
|
158
172
|
onConfirm: async () => {
|
|
159
|
-
const requested = await requestRecomp(sessionId);
|
|
173
|
+
const requested = await requestRecomp(sessionId, sessionDirectory(api, sessionId));
|
|
160
174
|
if (!requested) {
|
|
161
175
|
showToast(api, {
|
|
162
176
|
message: "Recomp request failed",
|
|
@@ -189,23 +203,17 @@ async function showStatusDialog(api, targetSessionId = getSessionId(api)) {
|
|
|
189
203
|
});
|
|
190
204
|
return false;
|
|
191
205
|
}
|
|
192
|
-
const directory = api
|
|
206
|
+
const directory = sessionDirectory(api, sessionId);
|
|
193
207
|
const modelKey = getModelKeyFromMessages(api, sessionId);
|
|
194
208
|
const result = await loadStatusDetail(sessionId, directory, modelKey);
|
|
195
209
|
if (getSessionId(api) !== sessionId) return false;
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
variant: "warning"
|
|
201
|
-
});
|
|
202
|
-
return false;
|
|
203
|
-
}
|
|
210
|
+
// A result without a usable snapshot still opens the dialog: it shows the
|
|
211
|
+
// "status unavailable" view naming the reason (RPC error, a directory the
|
|
212
|
+
// server keeps no state for, missing fields, a server/UI version
|
|
213
|
+
// difference) instead of a toast that disappears.
|
|
204
214
|
api.ui.dialog.replace(() => _$createComponent(StatusDialog, {
|
|
205
215
|
api: api,
|
|
206
|
-
|
|
207
|
-
return result.detail;
|
|
208
|
-
}
|
|
216
|
+
status: result
|
|
209
217
|
}));
|
|
210
218
|
return true;
|
|
211
219
|
}
|
|
@@ -250,7 +258,7 @@ async function showEmbedDialog(api, targetSessionId = getSessionId(api)) {
|
|
|
250
258
|
});
|
|
251
259
|
return false;
|
|
252
260
|
}
|
|
253
|
-
const directory = api
|
|
261
|
+
const directory = sessionDirectory(api, sessionId);
|
|
254
262
|
const detail = await loadEmbedDetail(sessionId, directory);
|
|
255
263
|
if (getSessionId(api) !== sessionId) return false;
|
|
256
264
|
api.ui.dialog.replace(() => _$createComponent(EmbedDialog, {
|
|
@@ -673,6 +681,11 @@ const tui = async (api, _options, meta) => {
|
|
|
673
681
|
};
|
|
674
682
|
startNotificationSocket({
|
|
675
683
|
getSessionId: () => getSessionId(api),
|
|
684
|
+
// Follow the shown session's own server, whose commands push its dialogs.
|
|
685
|
+
getSessionDirectory: () => {
|
|
686
|
+
const sessionId = getSessionId(api);
|
|
687
|
+
return sessionId ? sessionDirectory(api, sessionId) : null;
|
|
688
|
+
},
|
|
676
689
|
onNotification: handleNotification
|
|
677
690
|
});
|
|
678
691
|
|