@code-yeongyu/senpi 2026.9.9 → 2026.9.10
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/CHANGELOG.md +82 -1
- package/README.md +2 -0
- package/dist/beta/omo-local-update-worker.js.map +1 -1
- package/dist/beta/omo-local-update.d.ts.map +1 -1
- package/dist/brand-dir-migration.js.map +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +1 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth-check.js.map +1 -1
- package/dist/cli/experimental/command.d.ts.map +1 -1
- package/dist/cli/grok-neo-gate.js.map +1 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/client/remote-session.d.ts.map +1 -1
- package/dist/client/remote-session.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +43 -19
- package/dist/config.js.map +1 -1
- package/dist/core/agent-abort-provenance.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts +46 -7
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +109 -6
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agent-settled-delivery.d.ts.map +1 -1
- package/dist/core/auth-providers.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/brand.js.map +1 -1
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/lifecycle.d.ts.map +1 -1
- package/dist/core/compaction/stream-watchdog.d.ts.map +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/credential-accounts.js.map +1 -1
- package/dist/core/credential-pool/classify.js.map +1 -1
- package/dist/core/credential-pool/failover.d.ts.map +1 -1
- package/dist/core/credential-pool/rotation-stream.js.map +1 -1
- package/dist/core/credential-pool/state-store.d.ts +2 -2
- package/dist/core/credential-pool/state-store.d.ts.map +1 -1
- package/dist/core/credential-pool/state-store.js.map +1 -1
- package/dist/core/dynamic-prompt/verification.d.ts.map +1 -1
- package/dist/core/edited-assistant-message.d.ts +24 -0
- package/dist/core/edited-assistant-message.d.ts.map +1 -0
- package/dist/core/edited-assistant-message.js +57 -0
- package/dist/core/edited-assistant-message.js.map +1 -0
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/extensions/builtin/ask-user/extension.d.ts +3 -0
- package/dist/core/extensions/builtin/ask-user/extension.d.ts.map +1 -0
- package/dist/core/extensions/builtin/ask-user/extension.js +47 -0
- package/dist/core/extensions/builtin/ask-user/extension.js.map +1 -0
- package/dist/core/extensions/builtin/ask-user/family.d.ts +8 -0
- package/dist/core/extensions/builtin/ask-user/family.d.ts.map +1 -0
- package/dist/core/extensions/builtin/ask-user/family.js +6 -0
- package/dist/core/extensions/builtin/ask-user/family.js.map +1 -0
- package/dist/core/extensions/builtin/ask-user/format.d.ts +22 -0
- package/dist/core/extensions/builtin/ask-user/format.d.ts.map +1 -0
- package/dist/core/extensions/builtin/ask-user/format.js +109 -0
- package/dist/core/extensions/builtin/ask-user/format.js.map +1 -0
- package/dist/core/extensions/builtin/ask-user/index.d.ts +4 -0
- package/dist/core/extensions/builtin/ask-user/index.d.ts.map +1 -0
- package/dist/core/extensions/builtin/ask-user/index.js +4 -0
- package/dist/core/extensions/builtin/ask-user/index.js.map +1 -0
- package/dist/core/extensions/builtin/ask-user/params.d.ts +27 -0
- package/dist/core/extensions/builtin/ask-user/params.d.ts.map +1 -0
- package/dist/core/extensions/builtin/ask-user/params.js +78 -0
- package/dist/core/extensions/builtin/ask-user/params.js.map +1 -0
- package/dist/core/extensions/builtin/ask-user/pending.d.ts +58 -0
- package/dist/core/extensions/builtin/ask-user/pending.d.ts.map +1 -0
- package/dist/core/extensions/builtin/ask-user/pending.js +130 -0
- package/dist/core/extensions/builtin/ask-user/pending.js.map +1 -0
- package/dist/core/extensions/builtin/ask-user/registry.d.ts +21 -0
- package/dist/core/extensions/builtin/ask-user/registry.d.ts.map +1 -0
- package/dist/core/extensions/builtin/ask-user/registry.js +20 -0
- package/dist/core/extensions/builtin/ask-user/registry.js.map +1 -0
- package/dist/core/extensions/builtin/ask-user/render.d.ts +4 -0
- package/dist/core/extensions/builtin/ask-user/render.d.ts.map +1 -0
- package/dist/core/extensions/builtin/ask-user/render.js +25 -0
- package/dist/core/extensions/builtin/ask-user/render.js.map +1 -0
- package/dist/core/extensions/builtin/ask-user/resume.d.ts +4 -0
- package/dist/core/extensions/builtin/ask-user/resume.d.ts.map +1 -0
- package/dist/core/extensions/builtin/ask-user/resume.js +85 -0
- package/dist/core/extensions/builtin/ask-user/resume.js.map +1 -0
- package/dist/core/extensions/builtin/ask-user/schema.d.ts +40 -0
- package/dist/core/extensions/builtin/ask-user/schema.d.ts.map +1 -0
- package/dist/core/extensions/builtin/ask-user/schema.js +102 -0
- package/dist/core/extensions/builtin/ask-user/schema.js.map +1 -0
- package/dist/core/extensions/builtin/ask-user/tool.d.ts +8 -0
- package/dist/core/extensions/builtin/ask-user/tool.d.ts.map +1 -0
- package/dist/core/extensions/builtin/ask-user/tool.js +195 -0
- package/dist/core/extensions/builtin/ask-user/tool.js.map +1 -0
- package/dist/core/extensions/builtin/bash-timeout/timeout.js.map +1 -1
- package/dist/core/extensions/builtin/btw/panel.d.ts.map +1 -1
- package/dist/core/extensions/builtin/btw/side-query.js.map +1 -1
- package/dist/core/extensions/builtin/cache-keepalive/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cache-keepalive/index.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/account-management.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/accounts.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/accounts.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/affinity.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/affinity.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/availability.d.ts +11 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/availability.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/availability.js +12 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/availability.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/bounded-queue.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/errors.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.d.ts +14 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.d.ts.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.js +42 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/executable.d.ts +18 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/executable.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/executable.js +105 -36
- package/dist/core/extensions/builtin/claude-sdk-oauth/executable.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/failover.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/index.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/refusal.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-reaper.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js +4 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/settings.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream-protocol.d.ts +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/tool-watch.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/tools.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/context-reduction.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/lane-policy.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/model-usability-budget.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-convert.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/overflow-retry.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/resume-admission.d.ts +7 -0
- package/dist/core/extensions/builtin/compaction/resume-admission.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/resume-admission.js +7 -0
- package/dist/core/extensions/builtin/compaction/resume-admission.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/resume-slice.d.ts +23 -0
- package/dist/core/extensions/builtin/compaction/resume-slice.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/resume-slice.js +99 -0
- package/dist/core/extensions/builtin/compaction/resume-slice.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/summarization-retry.js.map +1 -1
- package/dist/core/extensions/builtin/config-reload/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
- package/dist/core/extensions/builtin/config-reload/log.js.map +1 -1
- package/dist/core/extensions/builtin/config-reload/protocol.d.ts.map +1 -1
- package/dist/core/extensions/builtin/config-reload/reload-deferral.d.ts.map +1 -1
- package/dist/core/extensions/builtin/config-reload/watch-engine.d.ts.map +1 -1
- package/dist/core/extensions/builtin/config-reload/watch-event-source.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/accounts.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/executable.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/executable.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/failover.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/index.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/stream.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/transport.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/cache-warm-renderer.js.map +1 -1
- package/dist/core/extensions/builtin/goal/command-registration.js.map +1 -1
- package/dist/core/extensions/builtin/goal/direct-input-lifecycle.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/elapsed-ticker.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/errors.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.js +57 -4
- package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
- package/dist/core/extensions/builtin/goal/persistence.js.map +1 -1
- package/dist/core/extensions/builtin/goal/prompt.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/prompt.js +9 -6
- package/dist/core/extensions/builtin/goal/prompt.js.map +1 -1
- package/dist/core/extensions/builtin/goal/store.js.map +1 -1
- package/dist/core/extensions/builtin/goal/tool-registration.js +1 -1
- package/dist/core/extensions/builtin/goal/tool-registration.js.map +1 -1
- package/dist/core/extensions/builtin/goal/turn-usage.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/ui.js.map +1 -1
- package/dist/core/extensions/builtin/goal/wait-progress.js.map +1 -1
- package/dist/core/extensions/builtin/goal/wait-ticker.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-account.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-account.js +1 -0
- package/dist/core/extensions/builtin/gpt-account.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/apply.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/errors.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/preview.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/tool.js.map +1 -1
- package/dist/core/extensions/builtin/help/panel.d.ts.map +1 -1
- package/dist/core/extensions/builtin/history-search/index.js.map +1 -1
- package/dist/core/extensions/builtin/history-search/overlay.d.ts.map +1 -1
- package/dist/core/extensions/builtin/hooks/command-runner.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/dispatcher.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/plugin-loader.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/tool-adapter.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/trust-storage.d.ts.map +1 -1
- package/dist/core/extensions/builtin/hooks/trust.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/imagegen/index.js.map +1 -1
- package/dist/core/extensions/builtin/imagegen/params.d.ts +45 -0
- package/dist/core/extensions/builtin/imagegen/params.d.ts.map +1 -0
- package/dist/core/extensions/builtin/imagegen/params.js +81 -0
- package/dist/core/extensions/builtin/imagegen/params.js.map +1 -0
- package/dist/core/extensions/builtin/imagegen/paths.d.ts +10 -4
- package/dist/core/extensions/builtin/imagegen/paths.d.ts.map +1 -1
- package/dist/core/extensions/builtin/imagegen/paths.js +43 -10
- package/dist/core/extensions/builtin/imagegen/paths.js.map +1 -1
- package/dist/core/extensions/builtin/imagegen/reference-images.d.ts +20 -0
- package/dist/core/extensions/builtin/imagegen/reference-images.d.ts.map +1 -0
- package/dist/core/extensions/builtin/imagegen/reference-images.js +70 -0
- package/dist/core/extensions/builtin/imagegen/reference-images.js.map +1 -0
- package/dist/core/extensions/builtin/imagegen/skill/SKILL.md +58 -33
- package/dist/core/extensions/builtin/imagegen/tool.d.ts +15 -19
- package/dist/core/extensions/builtin/imagegen/tool.d.ts.map +1 -1
- package/dist/core/extensions/builtin/imagegen/tool.js +74 -52
- package/dist/core/extensions/builtin/imagegen/tool.js.map +1 -1
- package/dist/core/extensions/builtin/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/index.js +2 -0
- package/dist/core/extensions/builtin/index.js.map +1 -1
- package/dist/core/extensions/builtin/look-at/model-selector.d.ts.map +1 -1
- package/dist/core/extensions/builtin/look-at/runner.js.map +1 -1
- package/dist/core/extensions/builtin/loop/command.js.map +1 -1
- package/dist/core/extensions/builtin/loop/cron-planner.js.map +1 -1
- package/dist/core/extensions/builtin/loop/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/loop/index.js.map +1 -1
- package/dist/core/extensions/builtin/loop/loopfile.d.ts.map +1 -1
- package/dist/core/extensions/builtin/loop/scheduler.js.map +1 -1
- package/dist/core/extensions/builtin/loop/status.d.ts.map +1 -1
- package/dist/core/extensions/builtin/loop/store.d.ts.map +1 -1
- package/dist/core/extensions/builtin/loop/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/loop-guard/detectors.d.ts.map +1 -1
- package/dist/core/extensions/builtin/loop-guard/escalation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/loop-guard/escalation.js.map +1 -1
- package/dist/core/extensions/builtin/loop-guard/index.js.map +1 -1
- package/dist/core/extensions/builtin/loop-guard/notice.js.map +1 -1
- package/dist/core/extensions/builtin/loop-guard/renderer.js.map +1 -1
- package/dist/core/extensions/builtin/loop-guard/tracker.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/active-set.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/callback.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/oauth-errors.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/oauth-errors.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/oauth-provider.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/oauth-refresh.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/oauth-refresh.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/oauth.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/token-store.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/catalog.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/config-schema.d.ts +28 -28
- package/dist/core/extensions/builtin/mcp/config.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/connection.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/elicitation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/elicitation.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/errors.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/errors.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/expose/register.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/expose/session.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/guard/output-guard.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/guard/output-guard.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/log.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/reconnect.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/service-register.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/service.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/service.js.map +1 -1
- package/dist/core/extensions/builtin/nested-agents-md/core/errors.d.ts.map +1 -1
- package/dist/core/extensions/builtin/nested-agents-md/core/injection-cache.d.ts.map +1 -1
- package/dist/core/extensions/builtin/nested-agents-md/core/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/oauth-login-interaction.d.ts +13 -6
- package/dist/core/extensions/builtin/oauth-login-interaction.d.ts.map +1 -1
- package/dist/core/extensions/builtin/oauth-login-interaction.js +43 -19
- package/dist/core/extensions/builtin/oauth-login-interaction.js.map +1 -1
- package/dist/core/extensions/builtin/openai-image-gen/inject.d.ts +5 -3
- package/dist/core/extensions/builtin/openai-image-gen/inject.d.ts.map +1 -1
- package/dist/core/extensions/builtin/openai-image-gen/inject.js +7 -4
- package/dist/core/extensions/builtin/openai-image-gen/inject.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/arity.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/prompt.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/service.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/service.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/wildcard.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/execution-tooling.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/glm-5.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/glm-5.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/glm-5.js +1 -1
- package/dist/core/extensions/builtin/prompt-preset/glm-5.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts +4 -4
- package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js +4 -4
- package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js +1 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
- package/dist/core/extensions/builtin/rule-activation/renderer.js.map +1 -1
- package/dist/core/extensions/builtin/rules/commands.js.map +1 -1
- package/dist/core/extensions/builtin/rules/config.js.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/errors.d.ts.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/project-root.js.map +1 -1
- package/dist/core/extensions/builtin/rules/ui/dynamic-border.d.ts.map +1 -1
- package/dist/core/extensions/builtin/rules/ui/rules-banner.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/manager.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/manager.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-notify.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-status-ticker.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/notify.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/restore.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/runtime-session.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/session-bundle.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/terminal-manifest.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/render.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/normalize.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/todo-operations.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/todo-widget-component.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/todo-widget-component.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todo.js.map +1 -1
- package/dist/core/extensions/builtin/tool-search/native-search.d.ts.map +1 -1
- package/dist/core/extensions/builtin/tool-search/service.d.ts.map +1 -1
- package/dist/core/extensions/builtin/tool-search/service.js.map +1 -1
- package/dist/core/extensions/builtin/ttsr/detectors/leak-context.d.ts.map +1 -1
- package/dist/core/extensions/builtin/ttsr/detectors/token-grammar.d.ts.map +1 -1
- package/dist/core/extensions/builtin/ttsr/manager.d.ts.map +1 -1
- package/dist/core/extensions/builtin/ttsr/message-update.js.map +1 -1
- package/dist/core/extensions/builtin/ttsr/repetitive-turns-lane.d.ts.map +1 -1
- package/dist/core/extensions/builtin/ttsr/stream-utils.d.ts.map +1 -1
- package/dist/core/extensions/builtin/ttsr/watch.d.ts.map +1 -1
- package/dist/core/extensions/builtin/webfetch/webfetch/errors.d.ts.map +1 -1
- package/dist/core/extensions/builtin/webfetch/webfetch/tool.d.ts +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/native.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +2 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +17 -8
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/notice/box.d.ts.map +1 -1
- package/dist/core/extensions/notice/box.js +13 -5
- package/dist/core/extensions/notice/box.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +11 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +23 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +76 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/keybindings.d.ts +182 -177
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +5 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/lockfile-policy.d.ts.map +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-config-schema.d.ts +150 -150
- package/dist/core/model-config-schema.d.ts.map +1 -1
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -0
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +1 -0
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resource-loader.d.ts +2 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +11 -7
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/retry-fallback/controller.d.ts.map +1 -1
- package/dist/core/retry-fallback/cooldown.d.ts.map +1 -1
- package/dist/core/retry-fallback/cooldown.js.map +1 -1
- package/dist/core/retry-fallback/expansion.js.map +1 -1
- package/dist/core/retry-fallback/log.js.map +1 -1
- package/dist/core/retry-fallback/probe-scheduler.d.ts.map +1 -1
- package/dist/core/runtime-credentials.d.ts.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +24 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-activity.d.ts.map +1 -1
- package/dist/core/session-cwd.d.ts.map +1 -1
- package/dist/core/session-log.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-resident-store.d.ts.map +1 -1
- package/dist/core/session-sidecar-store.d.ts.map +1 -1
- package/dist/core/session-summary-lru.d.ts.map +1 -1
- package/dist/core/session-work-barrier.d.ts.map +1 -1
- package/dist/core/settings-manager.d.ts +6 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +14 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-shapes.d.ts +7 -0
- package/dist/core/settings-shapes.d.ts.map +1 -1
- package/dist/core/settings-shapes.js +3 -1
- package/dist/core/settings-shapes.js.map +1 -1
- package/dist/core/telemetry.js.map +1 -1
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bounded-realpath.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/powershell.d.ts.map +1 -1
- package/dist/core/tools/read-classifiers.d.ts +17 -0
- package/dist/core/tools/read-classifiers.d.ts.map +1 -0
- package/dist/core/tools/read-classifiers.js +26 -0
- package/dist/core/tools/read-classifiers.js.map +1 -0
- package/dist/core/tools/read.d.ts +5 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +21 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/tail-window.d.ts.map +1 -1
- package/dist/core/tools/truncate.js.map +1 -1
- package/dist/core/tools/write-result.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/extensions/llama/client.d.ts.map +1 -1
- package/dist/extensions/llama/client.js.map +1 -1
- package/dist/extensions/llama/huggingface.d.ts.map +1 -1
- package/dist/extensions/llama/huggingface.js.map +1 -1
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/from-source-config-guard.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +4 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/app-server/daemon/occupancy.d.ts.map +1 -1
- package/dist/modes/app-server/daemon/process.d.ts.map +1 -1
- package/dist/modes/app-server/daemon/process.js.map +1 -1
- package/dist/modes/app-server/daemon.js.map +1 -1
- package/dist/modes/app-server/protocol/collaboration-mode.d.ts.map +1 -1
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.d.ts +7 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.d.ts.map +1 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.js +4 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.js.map +1 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.d.ts +8 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.d.ts.map +1 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.js +4 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.js.map +1 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.d.ts +12 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.d.ts.map +1 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.js +4 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.js.map +1 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.d.ts +13 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.d.ts.map +1 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.js +4 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.js.map +1 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.d.ts +10 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.d.ts.map +1 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.js +4 -0
- package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.js.map +1 -0
- package/dist/modes/app-server/protocol/index.d.ts +2 -0
- package/dist/modes/app-server/protocol/index.d.ts.map +1 -1
- package/dist/modes/app-server/protocol/index.js.map +1 -1
- package/dist/modes/app-server/protocol/methods.d.ts +1 -0
- package/dist/modes/app-server/protocol/methods.d.ts.map +1 -1
- package/dist/modes/app-server/protocol/methods.js +1 -0
- package/dist/modes/app-server/protocol/methods.js.map +1 -1
- package/dist/modes/app-server/rpc/errors.d.ts.map +1 -1
- package/dist/modes/app-server/runtime.d.ts.map +1 -1
- package/dist/modes/app-server/runtime.js +22 -6
- package/dist/modes/app-server/runtime.js.map +1 -1
- package/dist/modes/app-server/search/fuzzy-files.js.map +1 -1
- package/dist/modes/app-server/search/fuzzy-search-service.d.ts.map +1 -1
- package/dist/modes/app-server/server/account.js.map +1 -1
- package/dist/modes/app-server/server/approval-bridge.d.ts.map +1 -1
- package/dist/modes/app-server/server/approval-types.d.ts.map +1 -1
- package/dist/modes/app-server/server/approval-ui-context.d.ts +2 -1
- package/dist/modes/app-server/server/approval-ui-context.d.ts.map +1 -1
- package/dist/modes/app-server/server/approval-ui-context.js +9 -1
- package/dist/modes/app-server/server/approval-ui-context.js.map +1 -1
- package/dist/modes/app-server/server/catalogs.js.map +1 -1
- package/dist/modes/app-server/server/config.js.map +1 -1
- package/dist/modes/app-server/server/connection.d.ts.map +1 -1
- package/dist/modes/app-server/server/models.js.map +1 -1
- package/dist/modes/app-server/server/notifications.d.ts.map +1 -1
- package/dist/modes/app-server/server/notifications.js.map +1 -1
- package/dist/modes/app-server/server/server-core.d.ts.map +1 -1
- package/dist/modes/app-server/server/server-core.js.map +1 -1
- package/dist/modes/app-server/server/skills.js.map +1 -1
- package/dist/modes/app-server/server/user-input-bridge.d.ts +16 -0
- package/dist/modes/app-server/server/user-input-bridge.d.ts.map +1 -0
- package/dist/modes/app-server/server/user-input-bridge.js +142 -0
- package/dist/modes/app-server/server/user-input-bridge.js.map +1 -0
- package/dist/modes/app-server/server/user-input-types.d.ts +43 -0
- package/dist/modes/app-server/server/user-input-types.d.ts.map +1 -0
- package/dist/modes/app-server/server/user-input-types.js +51 -0
- package/dist/modes/app-server/server/user-input-types.js.map +1 -0
- package/dist/modes/app-server/threads/archive-state.d.ts.map +1 -1
- package/dist/modes/app-server/threads/handlers.js.map +1 -1
- package/dist/modes/app-server/threads/mcp-wire-status.d.ts.map +1 -1
- package/dist/modes/app-server/threads/metadata-state.d.ts.map +1 -1
- package/dist/modes/app-server/threads/projection-file-changes.js.map +1 -1
- package/dist/modes/app-server/threads/projection-message-items.d.ts.map +1 -1
- package/dist/modes/app-server/threads/projection-turn-diff.d.ts.map +1 -1
- package/dist/modes/app-server/threads/projection-web-search.js.map +1 -1
- package/dist/modes/app-server/threads/projection.d.ts.map +1 -1
- package/dist/modes/app-server/threads/registry.d.ts.map +1 -1
- package/dist/modes/app-server/threads/registry.js.map +1 -1
- package/dist/modes/app-server/threads/search-cache.d.ts.map +1 -1
- package/dist/modes/app-server/threads/turn-log.d.ts.map +1 -1
- package/dist/modes/app-server/threads/turn-runtime.d.ts.map +1 -1
- package/dist/modes/app-server/threads/turn-runtime.js.map +1 -1
- package/dist/modes/app-server/threads/turns.js.map +1 -1
- package/dist/modes/app-server/threads/wire-thread.js.map +1 -1
- package/dist/modes/app-server/transports/unix-socket.d.ts.map +1 -1
- package/dist/modes/app-server/transports/unix-socket.js.map +1 -1
- package/dist/modes/app-server/transports/websocket.d.ts.map +1 -1
- package/dist/modes/app-server/turn-adapter.d.ts +3 -3
- package/dist/modes/app-server/turn-adapter.d.ts.map +1 -1
- package/dist/modes/app-server/turn-adapter.js +36 -5
- package/dist/modes/app-server/turn-adapter.js.map +1 -1
- package/dist/modes/interactive/compaction-queue-transfer.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/ask-user-async-widget.d.ts +39 -0
- package/dist/modes/interactive/components/ask-user-async-widget.d.ts.map +1 -0
- package/dist/modes/interactive/components/ask-user-async-widget.js +82 -0
- package/dist/modes/interactive/components/ask-user-async-widget.js.map +1 -0
- package/dist/modes/interactive/components/ask-user-question-keys.d.ts +21 -0
- package/dist/modes/interactive/components/ask-user-question-keys.d.ts.map +1 -0
- package/dist/modes/interactive/components/ask-user-question-keys.js +115 -0
- package/dist/modes/interactive/components/ask-user-question-keys.js.map +1 -0
- package/dist/modes/interactive/components/ask-user-question-render.d.ts +17 -0
- package/dist/modes/interactive/components/ask-user-question-render.d.ts.map +1 -0
- package/dist/modes/interactive/components/ask-user-question-render.js +75 -0
- package/dist/modes/interactive/components/ask-user-question-render.js.map +1 -0
- package/dist/modes/interactive/components/ask-user-question-state.d.ts +52 -0
- package/dist/modes/interactive/components/ask-user-question-state.d.ts.map +1 -0
- package/dist/modes/interactive/components/ask-user-question-state.js +134 -0
- package/dist/modes/interactive/components/ask-user-question-state.js.map +1 -0
- package/dist/modes/interactive/components/ask-user-question.d.ts +50 -0
- package/dist/modes/interactive/components/ask-user-question.d.ts.map +1 -0
- package/dist/modes/interactive/components/ask-user-question.js +148 -0
- package/dist/modes/interactive/components/ask-user-question.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/assistant-render-descriptors.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/continuity-notice.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/favorite-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/progressive-transcript-container.d.ts.map +1 -1
- package/dist/modes/interactive/components/render-signature.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/shortcut-overlay.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution-images.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tool-renderer-boundary.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts +4 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +17 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/grok/chrome.d.ts.map +1 -1
- package/dist/modes/interactive/grok/footer.d.ts.map +1 -1
- package/dist/modes/interactive/grok/input-card.d.ts.map +1 -1
- package/dist/modes/interactive/grok/palette.d.ts.map +1 -1
- package/dist/modes/interactive/grok/tool-row.d.ts.map +1 -1
- package/dist/modes/interactive/grok/welcome-card.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-host-runtime.d.ts +6 -0
- package/dist/modes/interactive/interactive-host-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-host-runtime.js +32 -3
- package/dist/modes/interactive/interactive-host-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +35 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +413 -100
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/login-outcome.d.ts +20 -0
- package/dist/modes/interactive/login-outcome.d.ts.map +1 -0
- package/dist/modes/interactive/login-outcome.js +35 -0
- package/dist/modes/interactive/login-outcome.js.map +1 -0
- package/dist/modes/interactive/startup-tools.js.map +1 -1
- package/dist/modes/interactive/streaming-reveal-content.d.ts.map +1 -1
- package/dist/modes/interactive/streaming-reveal-content.js.map +1 -1
- package/dist/modes/interactive/streaming-reveal.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/interactive/tips/catalog/input-tips.d.ts +7 -7
- package/dist/modes/interactive/tips/catalog/input-tips.d.ts.map +1 -1
- package/dist/modes/interactive/tips/catalog/input-tips.js +5 -0
- package/dist/modes/interactive/tips/catalog/input-tips.js.map +1 -1
- package/dist/modes/interactive/tips/catalog/model-tips.d.ts +1 -1
- package/dist/modes/interactive/tips/catalog/workspace-tips.d.ts +1 -1
- package/dist/modes/interactive/tips/scheduler.js.map +1 -1
- package/dist/modes/interactive/tips/working-tip.d.ts.map +1 -1
- package/dist/modes/interactive/tool-args-reveal.d.ts.map +1 -1
- package/dist/modes/interactive/tool-result-reveal.d.ts.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +8 -0
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/provider-native-rendering.d.ts.map +1 -1
- package/dist/modes/provider-native-rendering.js +35 -0
- package/dist/modes/provider-native-rendering.js.map +1 -1
- package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
- package/dist/modes/rpc/connection-handler.js +72 -1
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/dist/modes/rpc/connection-question-bridge.d.ts +18 -0
- package/dist/modes/rpc/connection-question-bridge.d.ts.map +1 -0
- package/dist/modes/rpc/connection-question-bridge.js +156 -0
- package/dist/modes/rpc/connection-question-bridge.js.map +1 -0
- package/dist/modes/rpc/custom-capability.d.ts +2 -0
- package/dist/modes/rpc/custom-capability.d.ts.map +1 -1
- package/dist/modes/rpc/custom-capability.js +2 -0
- package/dist/modes/rpc/custom-capability.js.map +1 -1
- package/dist/modes/rpc/event-output-buffer.js.map +1 -1
- package/dist/modes/rpc/host-ensure.js.map +1 -1
- package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
- package/dist/modes/rpc/host-lifecycle.js.map +1 -1
- package/dist/modes/rpc/host-watchdog.js.map +1 -1
- package/dist/modes/rpc/jsonl.js.map +1 -1
- package/dist/modes/rpc/multi-session-host.js.map +1 -1
- package/dist/modes/rpc/ownership-safe-lock.d.ts.map +1 -1
- package/dist/modes/rpc/ownership-safe-lock.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +20 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +35 -3
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-input-validation.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +103 -3
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js +6 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/rpc/session-binding.js.map +1 -1
- package/dist/modes/rpc/session-command-router.d.ts +4 -4
- package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
- package/dist/modes/rpc/session-command-router.js +14 -8
- package/dist/modes/rpc/session-command-router.js.map +1 -1
- package/dist/modes/rpc/session-event-fanout.d.ts +2 -0
- package/dist/modes/rpc/session-event-fanout.d.ts.map +1 -1
- package/dist/modes/rpc/session-event-fanout.js +25 -1
- package/dist/modes/rpc/session-event-fanout.js.map +1 -1
- package/dist/modes/rpc/session-event-writer.d.ts +7 -1
- package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
- package/dist/modes/rpc/session-event-writer.js +17 -4
- package/dist/modes/rpc/session-event-writer.js.map +1 -1
- package/dist/modes/rpc/session-extension-ui-requests.d.ts.map +1 -1
- package/dist/modes/rpc/session-registry.d.ts.map +1 -1
- package/dist/modes/rpc/session-registry.js +11 -1
- package/dist/modes/rpc/session-registry.js.map +1 -1
- package/dist/modes/rpc/session-worker-client.d.ts.map +1 -1
- package/dist/modes/rpc/session-worker-client.js.map +1 -1
- package/dist/modes/rpc/session-worker-protocol.d.ts.map +1 -1
- package/dist/modes/rpc/session-worker-requests.d.ts.map +1 -1
- package/dist/modes/rpc/session-worker-requests.js +1 -1
- package/dist/modes/rpc/session-worker-requests.js.map +1 -1
- package/dist/modes/rpc/session-worker.js +10 -2
- package/dist/modes/rpc/session-worker.js.map +1 -1
- package/dist/modes/rpc/socket-event-fanout.d.ts +14 -1
- package/dist/modes/rpc/socket-event-fanout.d.ts.map +1 -1
- package/dist/modes/rpc/socket-event-fanout.js +48 -2
- package/dist/modes/rpc/socket-event-fanout.js.map +1 -1
- package/dist/modes/rpc/socket-ownership.js.map +1 -1
- package/dist/modes/rpc/worker-session-registry.d.ts.map +1 -1
- package/dist/modes/rpc/worker-session-registry.js +2 -1
- package/dist/modes/rpc/worker-session-registry.js.map +1 -1
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/self-update-bootstrap.js.map +1 -1
- package/dist/utils/ansi.js.map +1 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard-native.js.map +1 -1
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/exif-orientation.js.map +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/image-resize.js.map +1 -1
- package/dist/utils/management-http.js.map +1 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/photon.js.map +1 -1
- package/dist/utils/pi-user-agent.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/app-server.md +14 -0
- package/docs/extensions.md +28 -1
- package/docs/keybindings.md +1 -0
- package/docs/providers.md +1 -0
- package/docs/rpc.md +95 -3
- package/docs/settings.md +18 -0
- package/docs/skills.md +1 -1
- package/docs/tui.md +6 -0
- package/docs/usage.md +2 -1
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +30 -0
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +17 -2
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/config/settings.ts +35 -15
- package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +13 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt-template.ts +76 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +6 -77
- package/node_modules/@code-yeongyu/senpi-codemode/src/timeouts/run-budget.ts +107 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-deadlines.ts +76 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-execution.ts +25 -14
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-contract.ts +4 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-manager.ts +47 -40
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-notification.ts +2 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-snapshot.ts +5 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool-options.ts +8 -3
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +17 -187
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/run-eval-cell.ts +189 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +66 -56
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/events.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/reducer.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/reducer.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/result.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/context.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/errors.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/state.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/state.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/telemetry.d.ts +36 -36
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/telemetry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/search/scanning.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +5 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +4 -4
- package/node_modules/@earendil-works/pi-ai/README.md +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts +3 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +6 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.lazy.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/context-room.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/stream-retry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +5 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.d.ts +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.js +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.d.ts +60 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.js +93 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.d.ts +12 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.js +96 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.d.ts +3 -6
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.js +26 -119
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/warm-prompt-cache.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/credential-store.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.d.ts +47 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.js +126 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/failover.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/select.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.d.ts +12 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.js +44 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js +26 -35
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/compat.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/cursor/model-capabilities.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/cursor/selection-descriptor.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +99 -66
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +34 -1
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/images.d.ts +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/images.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/images.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/images.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models-store.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.js +3 -28
- package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/node/provider-scope.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/venice.json +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/ollama.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/radius.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/venice.d.ts +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/venice.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/venice.js +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/venice.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.d.ts +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.js +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/recovery-wrapper-state.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/parse.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-content-lifecycle.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-event-stream.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-native-projection.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-native-projection.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-stream-terminal.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-stream-wrapper.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-text-projection.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-text-projection.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-thinking-projection.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper-shared.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper-shared.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +20 -3
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/deferred-tools.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts +3 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/validation.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +3 -3
- package/node_modules/@earendil-works/pi-pty/dist/loader.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-pty/dist/loader.js.map +1 -1
- package/node_modules/@earendil-works/pi-pty/dist/pipe-fallback.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-pty/dist/pipe-fallback.js.map +1 -1
- package/node_modules/@earendil-works/pi-pty/dist/quarantine.js.map +1 -1
- package/node_modules/@earendil-works/pi-pty/dist/registry-types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-pty/dist/registry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-pty/dist/registry.js.map +1 -1
- package/node_modules/@earendil-works/pi-pty/dist/screen.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-pty/dist/screen.js.map +1 -1
- package/node_modules/@earendil-works/pi-pty/dist/session-bun.js.map +1 -1
- package/node_modules/@earendil-works/pi-pty/dist/session.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-pty/dist/session.js.map +1 -1
- package/node_modules/@earendil-works/pi-pty/package.json +2 -2
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/alt-screen-search.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/alt-screen-flash.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/box.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/h-stack.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/h-stack.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/image.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/image.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/latex.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/loader.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/select-list.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/spacer.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/spacer.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/stack.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/stack.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/text.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/text.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/v-stack.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/v-stack.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/image-markers.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/keybindings.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/keybindings.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/keys.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/keys.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/kill-ring.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/mux.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/native-module-path.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/paste-markers.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-capabilities.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tmux-image-probe.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui-main-screen.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/undo-stack.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +2 -2
- package/node_modules/css-tree/cjs/data-patch.cjs +853 -5
- package/node_modules/css-tree/cjs/data.cjs +13598 -3
- package/node_modules/css-tree/cjs/version.cjs +1 -3
- package/node_modules/css-tree/lib/data-patch.js +853 -4
- package/node_modules/css-tree/lib/data.js +13598 -5
- package/node_modules/css-tree/lib/version.js +1 -5
- package/package.json +8 -8
- package/vendor/pi-client/client.d.ts.map +1 -1
- package/vendor/pi-client/client.js.map +1 -1
- package/vendor/pi-client/connection.d.ts.map +1 -1
- package/vendor/pi-client/connection.js.map +1 -1
- package/vendor/pi-client/errors.d.ts.map +1 -1
- package/vendor/pi-client/session-handle.d.ts.map +1 -1
- package/vendor/pi-client/state.d.ts.map +1 -1
- package/vendor/pi-protocol/cbor/decoder.js.map +1 -1
- package/vendor/pi-protocol/cbor/options.d.ts.map +1 -1
- package/vendor/pi-protocol/codec.d.ts.map +1 -1
- package/vendor/pi-protocol/codec.js.map +1 -1
- package/vendor/pi-protocol/framing.d.ts.map +1 -1
- package/vendor/pi-protocol/schemas.d.ts +678 -678
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output-guard.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/guard/output-guard.ts"],"names":[],"mappings":"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","sourcesContent":["import { chmod, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { getAgentDir } from \"../../../../../config.ts\";\nimport type { McpSettings } from \"../config-schema.ts\";\nimport type { McpMappedContentBlock } from \"../expose/schema-compat.ts\";\n\nexport interface McpOutputGuardOptions {\n\treadonly agentDir?: string;\n\t/** Owner of spill files for one MCP service/session. */\n\treadonly artifacts?: McpOutputArtifacts;\n\treadonly server: string;\n\treadonly outputGuard?: McpSettings[\"outputGuard\"];\n}\n\ninterface Payload {\n\treadonly bytes: Buffer;\n\treadonly extension: string;\n\treadonly lineCount: number;\n\treadonly previewSource: string;\n\treadonly summary: string;\n}\n\nconst DEFAULT_MAX_BYTES = 50 * 1024;\nconst DEFAULT_MAX_LINES = 2000;\nconst PREVIEW_BYTE_BUDGET = 8192;\nlet spillCounter = 0;\n\n/** Tracks the output artifacts owned by one MCP service. */\nexport class McpOutputArtifacts {\n\treadonly #files = new Set<string>();\n\n\ttrack(path: string): void {\n\t\tthis.#files.add(path);\n\t}\n\n\tasync cleanup(): Promise<void> {\n\t\tconst files = [...this.#files];\n\t\tthis.#files.clear();\n\t\tawait Promise.all(files.map((file) => rm(file, { force: true })));\n\t}\n}\n\n// Legacy direct callers retain the historic process-wide owner. MCP services\n// pass their own owner so one session cannot remove another's spill files.\nconst legacyArtifacts = new McpOutputArtifacts();\n\nexport async function applyMcpOutputGuard(\n\tcontent: readonly McpMappedContentBlock[],\n\toptions: McpOutputGuardOptions,\n): Promise<readonly McpMappedContentBlock[]> {\n\tconst limits = outputGuardLimits(options.outputGuard);\n\tconst payload = contentToPayload(content);\n\tif (payload.bytes.byteLength <= limits.maxBytes && payload.lineCount <= limits.maxLines) return content;\n\tconst preview = buildPreview(payload, limits);\n\ttry {\n\t\tconst path = await writePayload(payload, options);\n\t\treturn [{ type: \"text\", text: spillMessage(payload, preview, path) }];\n\t} catch (error) {\n\t\treturn [{ type: \"text\", text: fallbackMessage(payload, preview, error) }];\n\t}\n}\n\nfunction outputGuardLimits(outputGuard: McpSettings[\"outputGuard\"]): { maxBytes: number; maxLines: number } {\n\treturn {\n\t\tmaxBytes: positiveInteger(outputGuard?.maxBytes) ?? DEFAULT_MAX_BYTES,\n\t\tmaxLines: positiveInteger(outputGuard?.maxLines) ?? DEFAULT_MAX_LINES,\n\t};\n}\n\nfunction positiveInteger(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value > 0 ? Math.floor(value) : undefined;\n}\n\nfunction contentToPayload(content: readonly McpMappedContentBlock[]): Payload {\n\tif (content.length === 1) {\n\t\tconst binary = binaryPayload(content[0]);\n\t\tif (binary !== undefined) return binary;\n\t}\n\tconst text = content.map(textForBlock).join(\"\\n\");\n\tconst bytes = Buffer.from(text, \"utf8\");\n\treturn {\n\t\tbytes,\n\t\textension: \"txt\",\n\t\tlineCount: countLines(text),\n\t\tpreviewSource: text,\n\t\tsummary: `text output (${bytes.byteLength} bytes, ${countLines(text)} lines)`,\n\t};\n}\n\nfunction binaryPayload(block: McpMappedContentBlock): Payload | undefined {\n\tif ((block.type === \"image\" || block.type === \"audio\") && block.data.length > 0) {\n\t\tconst bytes = Buffer.from(block.data, \"base64\");\n\t\treturn {\n\t\t\tbytes,\n\t\t\textension: extensionForMime(block.mimeType),\n\t\t\tlineCount: 1,\n\t\t\tpreviewSource: `[${block.mimeType} binary output, ${bytes.byteLength} bytes]`,\n\t\t\tsummary: `${block.mimeType} binary output (${bytes.byteLength} bytes)`,\n\t\t};\n\t}\n\tif (block.type !== \"resource\" || !isRecord(block.resource)) return undefined;\n\tconst mimeType = typeof block.resource.mimeType === \"string\" ? block.resource.mimeType : \"application/octet-stream\";\n\tif (typeof block.resource.blob === \"string\") {\n\t\tconst bytes = Buffer.from(block.resource.blob, \"base64\");\n\t\treturn {\n\t\t\tbytes,\n\t\t\textension: extensionForMime(mimeType),\n\t\t\tlineCount: 1,\n\t\t\tpreviewSource: `[${mimeType} binary resource, ${bytes.byteLength} bytes]`,\n\t\t\tsummary: `${mimeType} binary resource (${bytes.byteLength} bytes)`,\n\t\t};\n\t}\n\tif (typeof block.resource.text === \"string\") {\n\t\tconst bytes = Buffer.from(block.resource.text, \"utf8\");\n\t\treturn {\n\t\t\tbytes,\n\t\t\textension: extensionForMime(mimeType),\n\t\t\tlineCount: countLines(block.resource.text),\n\t\t\tpreviewSource: block.resource.text,\n\t\t\tsummary: `${mimeType} resource (${bytes.byteLength} bytes, ${countLines(block.resource.text)} lines)`,\n\t\t};\n\t}\n\treturn undefined;\n}\n\nasync function writePayload(payload: Payload, options: McpOutputGuardOptions): Promise<string> {\n\tconst dir = join(options.agentDir ?? getAgentDir(), \"tmp\", \"mcp-out\");\n\tawait mkdir(dir, { recursive: true });\n\tconst path = join(\n\t\tdir,\n\t\t`${safePathPart(options.server)}-${Date.now()}-${process.hrtime.bigint()}-${spillCounter++}.${payload.extension}`,\n\t);\n\tawait writeFile(path, payload.bytes, { mode: 0o600 });\n\tawait chmod(path, 0o600);\n\t(options.artifacts ?? legacyArtifacts).track(path);\n\treturn path;\n}\n\nexport async function cleanupMcpOutputArtifacts(artifacts: McpOutputArtifacts = legacyArtifacts): Promise<void> {\n\tawait artifacts.cleanup();\n}\n\nfunction buildPreview(payload: Payload, limits: { maxBytes: number; maxLines: number }): string {\n\tconst maxBytes = Math.min(PREVIEW_BYTE_BUDGET, Math.max(1024, Math.floor(limits.maxBytes / 2)));\n\tconst maxLines = Math.min(80, Math.max(2, Math.floor(limits.maxLines / 2)));\n\treturn trimBytes(headTailLines(payload.previewSource, maxLines), maxBytes);\n}\n\nfunction spillMessage(payload: Payload, preview: string, path: string): string {\n\treturn [\n\t\t`MCP tool output exceeded outputGuard; ${payload.summary}.`,\n\t\t`Full output saved to: ${path}`,\n\t\t\"Read the file in chunks instead of loading the entire file at once.\",\n\t\t\"Preview:\",\n\t\tpreview,\n\t].join(\"\\n\");\n}\n\nfunction fallbackMessage(payload: Payload, preview: string, error: unknown): string {\n\treturn [\n\t\t`Warning: failed to write MCP output spill file: ${errorLabel(error)}`,\n\t\t`MCP output truncated inline; ${payload.summary}.`,\n\t\t\"Preview:\",\n\t\tpreview,\n\t].join(\"\\n\");\n}\n\nfunction headTailLines(text: string, maxLines: number): string {\n\tconst lines = text.split(\"\\n\");\n\tif (lines.length <= maxLines) return text;\n\tconst headCount = Math.max(1, Math.floor(maxLines / 2));\n\tconst tailCount = Math.max(1, maxLines - headCount);\n\treturn [...lines.slice(0, headCount), \"[... truncated ...]\", ...lines.slice(-tailCount)].join(\"\\n\");\n}\n\nfunction trimBytes(text: string, maxBytes: number): string {\n\tif (Buffer.byteLength(text, \"utf8\") <= maxBytes) return text;\n\tlet result = text;\n\twhile (result.length > 0 && Buffer.byteLength(`${result}\\n[... truncated ...]`, \"utf8\") > maxBytes) {\n\t\tresult = result.slice(0, Math.max(0, result.length - 256));\n\t}\n\treturn `${result}\\n[... truncated ...]`;\n}\n\nfunction textForBlock(block: McpMappedContentBlock): string {\n\tif (block.type === \"text\") return block.text;\n\tif (block.type === \"image\" || block.type === \"audio\") {\n\t\treturn `[${block.mimeType} binary output, ${Buffer.byteLength(block.data, \"base64\")} bytes]`;\n\t}\n\treturn JSON.stringify(block);\n}\n\nfunction countLines(text: string): number {\n\treturn text.length === 0 ? 0 : text.split(\"\\n\").length;\n}\n\nfunction extensionForMime(mimeType: string): string {\n\tif (mimeType === \"image/png\") return \"png\";\n\tif (mimeType === \"image/jpeg\") return \"jpg\";\n\tif (mimeType === \"image/webp\") return \"webp\";\n\tif (mimeType === \"image/gif\") return \"gif\";\n\tif (mimeType === \"audio/mpeg\") return \"mp3\";\n\tif (mimeType === \"audio/wav\") return \"wav\";\n\tif (mimeType === \"application/json\") return \"json\";\n\tif (mimeType === \"application/pdf\") return \"pdf\";\n\tif (mimeType.startsWith(\"text/\")) return \"txt\";\n\treturn \"bin\";\n}\n\nfunction safePathPart(value: string): string {\n\treturn value.replace(/[^a-zA-Z0-9_-]/g, \"_\") || \"server\";\n}\n\nfunction errorLabel(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"output-guard.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/guard/output-guard.ts"],"names":[],"mappings":"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","sourcesContent":["import { chmod, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { getAgentDir } from \"../../../../../config.ts\";\nimport type { McpSettings } from \"../config-schema.ts\";\nimport type { McpMappedContentBlock } from \"../expose/schema-compat.ts\";\n\nexport interface McpOutputGuardOptions {\n\treadonly agentDir?: string;\n\t/** Owner of spill files for one MCP service/session. */\n\treadonly artifacts?: McpOutputArtifacts;\n\treadonly server: string;\n\treadonly outputGuard?: McpSettings[\"outputGuard\"];\n}\n\ninterface Payload {\n\treadonly bytes: Buffer;\n\treadonly extension: string;\n\treadonly lineCount: number;\n\treadonly previewSource: string;\n\treadonly summary: string;\n}\n\nconst DEFAULT_MAX_BYTES = 50 * 1024;\nconst DEFAULT_MAX_LINES = 2000;\nconst PREVIEW_BYTE_BUDGET = 8192;\nlet spillCounter = 0;\n\n/** Tracks the output artifacts owned by one MCP service. */\nexport class McpOutputArtifacts {\n\treadonly #files = new Set<string>();\n\n\ttrack(path: string): void {\n\t\tthis.#files.add(path);\n\t}\n\n\tasync cleanup(): Promise<void> {\n\t\tconst files = [...this.#files];\n\t\tthis.#files.clear();\n\t\tawait Promise.all(files.map((file) => rm(file, { force: true })));\n\t}\n}\n\n// Legacy direct callers retain the historic process-wide owner. MCP services\n// pass their own owner so one session cannot remove another's spill files.\nconst legacyArtifacts = new McpOutputArtifacts();\n\nexport async function applyMcpOutputGuard(\n\tcontent: readonly McpMappedContentBlock[],\n\toptions: McpOutputGuardOptions,\n): Promise<readonly McpMappedContentBlock[]> {\n\tconst limits = outputGuardLimits(options.outputGuard);\n\tconst payload = contentToPayload(content);\n\tif (payload.bytes.byteLength <= limits.maxBytes && payload.lineCount <= limits.maxLines) return content;\n\tconst preview = buildPreview(payload, limits);\n\ttry {\n\t\tconst path = await writePayload(payload, options);\n\t\treturn [{ type: \"text\", text: spillMessage(payload, preview, path) }];\n\t} catch (error) {\n\t\treturn [{ type: \"text\", text: fallbackMessage(payload, preview, error) }];\n\t}\n}\n\nfunction outputGuardLimits(outputGuard: McpSettings[\"outputGuard\"]): { maxBytes: number; maxLines: number } {\n\treturn {\n\t\tmaxBytes: positiveInteger(outputGuard?.maxBytes) ?? DEFAULT_MAX_BYTES,\n\t\tmaxLines: positiveInteger(outputGuard?.maxLines) ?? DEFAULT_MAX_LINES,\n\t};\n}\n\nfunction positiveInteger(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value > 0 ? Math.floor(value) : undefined;\n}\n\nfunction contentToPayload(content: readonly McpMappedContentBlock[]): Payload {\n\tif (content.length === 1) {\n\t\tconst binary = binaryPayload(content[0]);\n\t\tif (binary !== undefined) return binary;\n\t}\n\tconst text = content.map(textForBlock).join(\"\\n\");\n\tconst bytes = Buffer.from(text, \"utf8\");\n\treturn {\n\t\tbytes,\n\t\textension: \"txt\",\n\t\tlineCount: countLines(text),\n\t\tpreviewSource: text,\n\t\tsummary: `text output (${bytes.byteLength} bytes, ${countLines(text)} lines)`,\n\t};\n}\n\nfunction binaryPayload(block: McpMappedContentBlock): Payload | undefined {\n\tif ((block.type === \"image\" || block.type === \"audio\") && block.data.length > 0) {\n\t\tconst bytes = Buffer.from(block.data, \"base64\");\n\t\treturn {\n\t\t\tbytes,\n\t\t\textension: extensionForMime(block.mimeType),\n\t\t\tlineCount: 1,\n\t\t\tpreviewSource: `[${block.mimeType} binary output, ${bytes.byteLength} bytes]`,\n\t\t\tsummary: `${block.mimeType} binary output (${bytes.byteLength} bytes)`,\n\t\t};\n\t}\n\tif (block.type !== \"resource\" || !isRecord(block.resource)) return undefined;\n\tconst mimeType = typeof block.resource.mimeType === \"string\" ? block.resource.mimeType : \"application/octet-stream\";\n\tif (typeof block.resource.blob === \"string\") {\n\t\tconst bytes = Buffer.from(block.resource.blob, \"base64\");\n\t\treturn {\n\t\t\tbytes,\n\t\t\textension: extensionForMime(mimeType),\n\t\t\tlineCount: 1,\n\t\t\tpreviewSource: `[${mimeType} binary resource, ${bytes.byteLength} bytes]`,\n\t\t\tsummary: `${mimeType} binary resource (${bytes.byteLength} bytes)`,\n\t\t};\n\t}\n\tif (typeof block.resource.text === \"string\") {\n\t\tconst bytes = Buffer.from(block.resource.text, \"utf8\");\n\t\treturn {\n\t\t\tbytes,\n\t\t\textension: extensionForMime(mimeType),\n\t\t\tlineCount: countLines(block.resource.text),\n\t\t\tpreviewSource: block.resource.text,\n\t\t\tsummary: `${mimeType} resource (${bytes.byteLength} bytes, ${countLines(block.resource.text)} lines)`,\n\t\t};\n\t}\n\treturn undefined;\n}\n\nasync function writePayload(payload: Payload, options: McpOutputGuardOptions): Promise<string> {\n\tconst dir = join(options.agentDir ?? getAgentDir(), \"tmp\", \"mcp-out\");\n\tawait mkdir(dir, { recursive: true });\n\tconst path = join(\n\t\tdir,\n\t\t`${safePathPart(options.server)}-${Date.now()}-${process.hrtime.bigint()}-${spillCounter++}.${payload.extension}`,\n\t);\n\tawait writeFile(path, payload.bytes, { mode: 0o600 });\n\tawait chmod(path, 0o600);\n\t(options.artifacts ?? legacyArtifacts).track(path);\n\treturn path;\n}\n\nexport async function cleanupMcpOutputArtifacts(artifacts: McpOutputArtifacts = legacyArtifacts): Promise<void> {\n\tawait artifacts.cleanup();\n}\n\nfunction buildPreview(payload: Payload, limits: { maxBytes: number; maxLines: number }): string {\n\tconst maxBytes = Math.min(PREVIEW_BYTE_BUDGET, Math.max(1024, Math.floor(limits.maxBytes / 2)));\n\tconst maxLines = Math.min(80, Math.max(2, Math.floor(limits.maxLines / 2)));\n\treturn trimBytes(headTailLines(payload.previewSource, maxLines), maxBytes);\n}\n\nfunction spillMessage(payload: Payload, preview: string, path: string): string {\n\treturn [\n\t\t`MCP tool output exceeded outputGuard; ${payload.summary}.`,\n\t\t`Full output saved to: ${path}`,\n\t\t\"Read the file in chunks instead of loading the entire file at once.\",\n\t\t\"Preview:\",\n\t\tpreview,\n\t].join(\"\\n\");\n}\n\nfunction fallbackMessage(payload: Payload, preview: string, error: unknown): string {\n\treturn [\n\t\t`Warning: failed to write MCP output spill file: ${errorLabel(error)}`,\n\t\t`MCP output truncated inline; ${payload.summary}.`,\n\t\t\"Preview:\",\n\t\tpreview,\n\t].join(\"\\n\");\n}\n\nfunction headTailLines(text: string, maxLines: number): string {\n\tconst lines = text.split(\"\\n\");\n\tif (lines.length <= maxLines) return text;\n\tconst headCount = Math.max(1, Math.floor(maxLines / 2));\n\tconst tailCount = Math.max(1, maxLines - headCount);\n\treturn [...lines.slice(0, headCount), \"[... truncated ...]\", ...lines.slice(-tailCount)].join(\"\\n\");\n}\n\nfunction trimBytes(text: string, maxBytes: number): string {\n\tif (Buffer.byteLength(text, \"utf8\") <= maxBytes) return text;\n\tlet result = text;\n\twhile (result.length > 0 && Buffer.byteLength(`${result}\\n[... truncated ...]`, \"utf8\") > maxBytes) {\n\t\tresult = result.slice(0, Math.max(0, result.length - 256));\n\t}\n\treturn `${result}\\n[... truncated ...]`;\n}\n\nfunction textForBlock(block: McpMappedContentBlock): string {\n\tif (block.type === \"text\") return block.text;\n\tif (block.type === \"image\" || block.type === \"audio\") {\n\t\treturn `[${block.mimeType} binary output, ${Buffer.byteLength(block.data, \"base64\")} bytes]`;\n\t}\n\treturn JSON.stringify(block);\n}\n\nfunction countLines(text: string): number {\n\treturn text.length === 0 ? 0 : text.split(\"\\n\").length;\n}\n\nfunction extensionForMime(mimeType: string): string {\n\tif (mimeType === \"image/png\") return \"png\";\n\tif (mimeType === \"image/jpeg\") return \"jpg\";\n\tif (mimeType === \"image/webp\") return \"webp\";\n\tif (mimeType === \"image/gif\") return \"gif\";\n\tif (mimeType === \"audio/mpeg\") return \"mp3\";\n\tif (mimeType === \"audio/wav\") return \"wav\";\n\tif (mimeType === \"application/json\") return \"json\";\n\tif (mimeType === \"application/pdf\") return \"pdf\";\n\tif (mimeType.startsWith(\"text/\")) return \"txt\";\n\treturn \"bin\";\n}\n\nfunction safePathPart(value: string): string {\n\treturn value.replace(/[^a-zA-Z0-9_-]/g, \"_\") || \"server\";\n}\n\nfunction errorLabel(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/log.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport {\n\tchmodSync,\n\tcloseSync,\n\texistsSync,\n\tmkdirSync,\n\topenSync,\n\trenameSync,\n\trmSync,\n\tstatSync,\n\twriteSync,\n} from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { getAgentDir } from \"../../../../config.ts\";\n\nexport type McpLogLevel = \"debug\" | \"info\" | \"notice\" | \"warning\" | \"error\" | \"critical\" | \"alert\" | \"emergency\";\nexport type McpLogChannel = \"client\" | \"server\" | \"stderr\" | \"file\";\n\nexport interface McpLogLevelMapping {\n\tlevel: McpLogLevel;\n\tseverity: number;\n}\n\nexport interface McpLogger {\n\treadonly filePath: string;\n\tdebug(message: string, data?: unknown): void;\n\tinfo(message: string, data?: unknown): void;\n\twarn(message: string, data?: unknown): void;\n\terror(message: string, data?: unknown): void;\n\tstderr(message: string, data?: unknown): void;\n\tlog(level: string, message: string, data?: unknown, channel?: McpLogChannel): void;\n\tgetRingBuffer(): string[];\n}\n\nexport interface McpLoggerOptions {\n\tlogDir?: string;\n\tmaxFileBytes?: number;\n}\n\ninterface RedactionContext {\n\treadonly seen: WeakSet<object>;\n\treadonly secrets: Set<string>;\n}\n\nconst DEFAULT_MAX_FILE_BYTES = 1024 * 1024;\nconst MAX_RING_LINES = 200;\nconst SENSITIVE_KEY_PATTERN =\n\t/(?:^|[_-])(?:api[_-]?key|key|token|secret|password|client_secret|auth|authorization)(?:$|[_-])/i;\nconst QUERY_SECRET_PATTERN =\n\t/([?&][^=\\s&\"'<>]*(?:key|token|secret|password|client_secret|auth)[^=\\s&\"'<>]*=)([^&\\s\"'<>]+)/gi;\nconst AUTHORIZATION_VALUE_PATTERN =\n\t/((?:\"|')?\\bAuthorization(?:\"|')?\\s*[:=]\\s*(?:\"|')?(?:[A-Za-z][A-Za-z0-9+.-]*\\s+)?)(?!<redacted:)([^\"',\\s}\\]&]+)/gi;\nconst BEARER_VALUE_PATTERN = /(\\bBearer\\s+)(?!<redacted:)([A-Za-z0-9._~+/=-]+)/gi;\nconst KEY_VALUE_PATTERN =\n\t/((?:\"|')?[^\"'\\s:=,{}]*(?:api[_-]?key|key|token|secret|password|client_secret|auth)[^\"'\\s:=,{}]*(?:\"|')?\\s*[:=]\\s*(?:\"|')?)([^\"',\\s}\\]&]+)/gi;\nconst MCP_LOG_LEVELS: Record<string, McpLogLevelMapping> = {\n\temergency: { level: \"emergency\", severity: 0 },\n\talert: { level: \"alert\", severity: 1 },\n\tcritical: { level: \"critical\", severity: 2 },\n\tcrit: { level: \"critical\", severity: 2 },\n\terror: { level: \"error\", severity: 3 },\n\terr: { level: \"error\", severity: 3 },\n\twarning: { level: \"warning\", severity: 4 },\n\twarn: { level: \"warning\", severity: 4 },\n\tnotice: { level: \"notice\", severity: 5 },\n\tinformational: { level: \"info\", severity: 6 },\n\tinfo: { level: \"info\", severity: 6 },\n\tdebug: { level: \"debug\", severity: 7 },\n};\n\nexport function createMcpLogger(server: string, options: McpLoggerOptions = {}): McpLogger {\n\treturn new FileMcpLogger(server, options);\n}\n\nexport function getMcpLogDir(): string {\n\treturn join(getAgentDir(), \"logs\", \"mcp\");\n}\n\nexport function fingerprintSecret(secret: string): string {\n\treturn createHash(\"sha256\").update(secret).digest(\"hex\").slice(0, 8);\n}\n\nexport function redactMcpLogText(text: string): string {\n\treturn redactMcpLogTextWithContext(text, { seen: new WeakSet<object>(), secrets: new Set<string>() });\n}\n\nfunction redactMcpLogTextWithContext(text: string, context: RedactionContext): string {\n\treturn text\n\t\t.replace(\n\t\t\tAUTHORIZATION_VALUE_PATTERN,\n\t\t\t(_match, prefix: string, secret: string) => `${prefix}${redactionForSecret(secret, context)}`,\n\t\t)\n\t\t.replace(\n\t\t\tBEARER_VALUE_PATTERN,\n\t\t\t(_match, prefix: string, secret: string) => `${prefix}${redactionForSecret(secret, context)}`,\n\t\t)\n\t\t.replace(\n\t\t\tQUERY_SECRET_PATTERN,\n\t\t\t(_match, prefix: string, secret: string) => `${prefix}${redactionForSecret(secret, context)}`,\n\t\t)\n\t\t.replace(KEY_VALUE_PATTERN, (match: string, prefix: string, secret: string) =>\n\t\t\tsecret.startsWith(\"<redacted:\") || /\\bAuthorization\\b/i.test(prefix)\n\t\t\t\t? match\n\t\t\t\t: `${prefix}${redactionForSecret(secret, context)}`,\n\t\t);\n}\n\nexport function mapMcpLogLevel(level: string): McpLogLevelMapping {\n\treturn { ...(MCP_LOG_LEVELS[level] ?? MCP_LOG_LEVELS.info) };\n}\n\nclass FileMcpLogger implements McpLogger {\n\treadonly filePath: string;\n\treadonly #server: string;\n\treadonly #maxFileBytes: number;\n\treadonly #ring: string[] = [];\n\t#fileSinkDisabled = false;\n\n\tconstructor(server: string, options: McpLoggerOptions) {\n\t\tthis.#server = server;\n\t\tthis.#maxFileBytes = options.maxFileBytes ?? DEFAULT_MAX_FILE_BYTES;\n\t\tthis.filePath = join(options.logDir ?? getMcpLogDir(), `${sanitizeServerName(server)}.log`);\n\t}\n\n\tdebug(message: string, data?: unknown): void {\n\t\tthis.log(\"debug\", message, data);\n\t}\n\n\tinfo(message: string, data?: unknown): void {\n\t\tthis.log(\"info\", message, data);\n\t}\n\n\twarn(message: string, data?: unknown): void {\n\t\tthis.log(\"warning\", message, data);\n\t}\n\n\terror(message: string, data?: unknown): void {\n\t\tthis.log(\"error\", message, data);\n\t}\n\n\tstderr(message: string, data?: unknown): void {\n\t\tthis.log(\"info\", message, data, \"stderr\");\n\t}\n\n\tlog(level: string, message: string, data?: unknown, channel: McpLogChannel = \"server\"): void {\n\t\tconst line = this.#formatLine(level, message, data, channel);\n\t\tthis.#pushRing(line);\n\t\tthis.#writeFile(line);\n\t}\n\n\tgetRingBuffer(): string[] {\n\t\treturn [...this.#ring];\n\t}\n\n\t#formatLine(level: string, message: string, data: unknown, channel: McpLogChannel): string {\n\t\tconst context: RedactionContext = { seen: new WeakSet<object>(), secrets: new Set<string>() };\n\t\tconst mapped = mapMcpLogLevel(level);\n\t\tconst redactedData = data === undefined ? undefined : redactMcpLogData(data, context);\n\t\tconst entry = {\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tserver: this.#server,\n\t\t\tlevel: mapped.level,\n\t\t\tseverity: mapped.severity,\n\t\t\tchannel,\n\t\t\tmessage: redactMcpLogTextWithContext(message, context),\n\t\t\tdata: redactedData,\n\t\t};\n\t\treturn redactKnownSecrets(JSON.stringify(entry), context);\n\t}\n\n\t#pushRing(line: string): void {\n\t\tthis.#ring.push(line);\n\t\tif (this.#ring.length > MAX_RING_LINES) {\n\t\t\tthis.#ring.splice(0, this.#ring.length - MAX_RING_LINES);\n\t\t}\n\t}\n\n\t#writeFile(line: string): void {\n\t\tif (this.#fileSinkDisabled) return;\n\t\ttry {\n\t\t\tmkdirSync(dirname(this.filePath), { recursive: true, mode: 0o700 });\n\t\t\tconst bytes = Buffer.byteLength(`${line}\\n`);\n\t\t\tthis.#rotateIfNeeded(bytes);\n\t\t\tconst fd = openSync(this.filePath, \"a\", 0o600);\n\t\t\ttry {\n\t\t\t\twriteSync(fd, `${line}\\n`);\n\t\t\t} finally {\n\t\t\t\tcloseSync(fd);\n\t\t\t}\n\t\t\tchmodSync(this.filePath, 0o600);\n\t\t} catch {\n\t\t\tthis.#fileSinkDisabled = true;\n\t\t\tthis.#pushRing(this.#formatLine(\"warning\", \"file sink disabled after write failure\", undefined, \"file\"));\n\t\t}\n\t}\n\n\t#rotateIfNeeded(incomingBytes: number): void {\n\t\tif (this.#maxFileBytes <= 0 || !existsSync(this.filePath)) return;\n\t\tif (statSync(this.filePath).size + incomingBytes <= this.#maxFileBytes) return;\n\t\ttry {\n\t\t\trmSync(`${this.filePath}.1`, { force: true });\n\t\t\trenameSync(this.filePath, `${this.filePath}.1`);\n\t\t\tchmodSync(`${this.filePath}.1`, 0o600);\n\t\t} catch {\n\t\t\tthrow new Error(\"log rotation failed\");\n\t\t}\n\t}\n}\n\nfunction redactMcpLogData(value: unknown, context: RedactionContext): unknown {\n\tif (typeof value === \"string\") return redactMcpLogTextWithContext(value, context);\n\tif (typeof value === \"bigint\") return value.toString();\n\tif (typeof value !== \"object\" || value === null) return value;\n\tif (context.seen.has(value)) return \"[Circular]\";\n\tcontext.seen.add(value);\n\tif (value instanceof Error) return redactMcpLogError(value, context);\n\tif (Array.isArray(value)) return value.map((item) => redactMcpLogData(item, context));\n\treturn redactMcpLogEntries(value, context);\n}\n\nfunction redactMcpLogError(error: Error, context: RedactionContext): Record<string, unknown> {\n\tconst redacted = redactMcpLogEntries(error, context);\n\tredacted.name = redactMcpLogTextWithContext(error.name, context);\n\tredacted.message = redactKnownSecrets(redactMcpLogTextWithContext(error.message, context), context);\n\tif (error.stack !== undefined) {\n\t\tredacted.stack = redactKnownSecrets(redactMcpLogTextWithContext(error.stack, context), context);\n\t}\n\treturn redacted;\n}\n\nfunction redactMcpLogEntries(value: object, context: RedactionContext): Record<string, unknown> {\n\tconst redacted: Record<string, unknown> = {};\n\tfor (const [key, item] of Object.entries(value)) {\n\t\tif (SENSITIVE_KEY_PATTERN.test(key)) {\n\t\t\tredacted[key] = redactionForSecret(stringifySecretValue(item), context);\n\t\t} else {\n\t\t\tredacted[key] = redactMcpLogData(item, context);\n\t\t}\n\t}\n\treturn redacted;\n}\n\nfunction stringifySecretValue(value: unknown): string {\n\tif (typeof value === \"string\") return value;\n\tif (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") return String(value);\n\tconst seen = new WeakSet<object>();\n\tconst json = JSON.stringify(value, (_key: string, item: unknown) => {\n\t\tif (typeof item === \"bigint\") return item.toString();\n\t\tif (typeof item !== \"object\" || item === null) return item;\n\t\tif (seen.has(item)) return \"[Circular]\";\n\t\tseen.add(item);\n\t\treturn item;\n\t});\n\treturn json ?? String(value);\n}\n\nfunction redactionForSecret(secret: string, context: RedactionContext): string {\n\tif (secret.length > 0 && !secret.startsWith(\"<redacted:\")) {\n\t\tcontext.secrets.add(secret);\n\t}\n\treturn redactionFor(secret);\n}\n\nfunction redactKnownSecrets(text: string, context: RedactionContext): string {\n\tfor (const secret of [...context.secrets].sort((left, right) => right.length - left.length)) {\n\t\ttext = text.split(secret).join(redactionFor(secret));\n\t}\n\treturn text;\n}\n\nfunction redactionFor(secret: string): string {\n\treturn `<redacted:${fingerprintSecret(secret)}>`;\n}\n\nfunction sanitizeServerName(server: string): string {\n\treturn server.replace(/[^A-Za-z0-9._-]+/g, \"_\") || \"server\";\n}\n"]}
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/log.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport {\n\tchmodSync,\n\tcloseSync,\n\texistsSync,\n\tmkdirSync,\n\topenSync,\n\trenameSync,\n\trmSync,\n\tstatSync,\n\twriteSync,\n} from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { getAgentDir } from \"../../../../config.ts\";\n\nexport type McpLogLevel = \"debug\" | \"info\" | \"notice\" | \"warning\" | \"error\" | \"critical\" | \"alert\" | \"emergency\";\nexport type McpLogChannel = \"client\" | \"server\" | \"stderr\" | \"file\";\n\nexport interface McpLogLevelMapping {\n\tlevel: McpLogLevel;\n\tseverity: number;\n}\n\nexport interface McpLogger {\n\treadonly filePath: string;\n\tdebug(message: string, data?: unknown): void;\n\tinfo(message: string, data?: unknown): void;\n\twarn(message: string, data?: unknown): void;\n\terror(message: string, data?: unknown): void;\n\tstderr(message: string, data?: unknown): void;\n\tlog(level: string, message: string, data?: unknown, channel?: McpLogChannel): void;\n\tgetRingBuffer(): string[];\n}\n\nexport interface McpLoggerOptions {\n\tlogDir?: string;\n\tmaxFileBytes?: number;\n}\n\ninterface RedactionContext {\n\treadonly seen: WeakSet<object>;\n\treadonly secrets: Set<string>;\n}\n\nconst DEFAULT_MAX_FILE_BYTES = 1024 * 1024;\nconst MAX_RING_LINES = 200;\nconst SENSITIVE_KEY_PATTERN =\n\t/(?:^|[_-])(?:api[_-]?key|key|token|secret|password|client_secret|auth|authorization)(?:$|[_-])/i;\nconst QUERY_SECRET_PATTERN =\n\t/([?&][^=\\s&\"'<>]*(?:key|token|secret|password|client_secret|auth)[^=\\s&\"'<>]*=)([^&\\s\"'<>]+)/gi;\nconst AUTHORIZATION_VALUE_PATTERN =\n\t/((?:\"|')?\\bAuthorization(?:\"|')?\\s*[:=]\\s*(?:\"|')?(?:[A-Za-z][A-Za-z0-9+.-]*\\s+)?)(?!<redacted:)([^\"',\\s}\\]&]+)/gi;\nconst BEARER_VALUE_PATTERN = /(\\bBearer\\s+)(?!<redacted:)([A-Za-z0-9._~+/=-]+)/gi;\nconst KEY_VALUE_PATTERN =\n\t/((?:\"|')?[^\"'\\s:=,{}]*(?:api[_-]?key|key|token|secret|password|client_secret|auth)[^\"'\\s:=,{}]*(?:\"|')?\\s*[:=]\\s*(?:\"|')?)([^\"',\\s}\\]&]+)/gi;\nconst MCP_LOG_LEVELS: Record<string, McpLogLevelMapping> = {\n\temergency: { level: \"emergency\", severity: 0 },\n\talert: { level: \"alert\", severity: 1 },\n\tcritical: { level: \"critical\", severity: 2 },\n\tcrit: { level: \"critical\", severity: 2 },\n\terror: { level: \"error\", severity: 3 },\n\terr: { level: \"error\", severity: 3 },\n\twarning: { level: \"warning\", severity: 4 },\n\twarn: { level: \"warning\", severity: 4 },\n\tnotice: { level: \"notice\", severity: 5 },\n\tinformational: { level: \"info\", severity: 6 },\n\tinfo: { level: \"info\", severity: 6 },\n\tdebug: { level: \"debug\", severity: 7 },\n};\n\nexport function createMcpLogger(server: string, options: McpLoggerOptions = {}): McpLogger {\n\treturn new FileMcpLogger(server, options);\n}\n\nexport function getMcpLogDir(): string {\n\treturn join(getAgentDir(), \"logs\", \"mcp\");\n}\n\nexport function fingerprintSecret(secret: string): string {\n\treturn createHash(\"sha256\").update(secret).digest(\"hex\").slice(0, 8);\n}\n\nexport function redactMcpLogText(text: string): string {\n\treturn redactMcpLogTextWithContext(text, { seen: new WeakSet<object>(), secrets: new Set<string>() });\n}\n\nfunction redactMcpLogTextWithContext(text: string, context: RedactionContext): string {\n\treturn text\n\t\t.replace(\n\t\t\tAUTHORIZATION_VALUE_PATTERN,\n\t\t\t(_match, prefix: string, secret: string) => `${prefix}${redactionForSecret(secret, context)}`,\n\t\t)\n\t\t.replace(\n\t\t\tBEARER_VALUE_PATTERN,\n\t\t\t(_match, prefix: string, secret: string) => `${prefix}${redactionForSecret(secret, context)}`,\n\t\t)\n\t\t.replace(\n\t\t\tQUERY_SECRET_PATTERN,\n\t\t\t(_match, prefix: string, secret: string) => `${prefix}${redactionForSecret(secret, context)}`,\n\t\t)\n\t\t.replace(KEY_VALUE_PATTERN, (match: string, prefix: string, secret: string) =>\n\t\t\tsecret.startsWith(\"<redacted:\") || /\\bAuthorization\\b/i.test(prefix)\n\t\t\t\t? match\n\t\t\t\t: `${prefix}${redactionForSecret(secret, context)}`,\n\t\t);\n}\n\nexport function mapMcpLogLevel(level: string): McpLogLevelMapping {\n\treturn { ...(MCP_LOG_LEVELS[level] ?? MCP_LOG_LEVELS.info) };\n}\n\nclass FileMcpLogger implements McpLogger {\n\treadonly filePath: string;\n\treadonly #server: string;\n\treadonly #maxFileBytes: number;\n\treadonly #ring: string[] = [];\n\t#fileSinkDisabled = false;\n\n\tconstructor(server: string, options: McpLoggerOptions) {\n\t\tthis.#server = server;\n\t\tthis.#maxFileBytes = options.maxFileBytes ?? DEFAULT_MAX_FILE_BYTES;\n\t\tthis.filePath = join(options.logDir ?? getMcpLogDir(), `${sanitizeServerName(server)}.log`);\n\t}\n\n\tdebug(message: string, data?: unknown): void {\n\t\tthis.log(\"debug\", message, data);\n\t}\n\n\tinfo(message: string, data?: unknown): void {\n\t\tthis.log(\"info\", message, data);\n\t}\n\n\twarn(message: string, data?: unknown): void {\n\t\tthis.log(\"warning\", message, data);\n\t}\n\n\terror(message: string, data?: unknown): void {\n\t\tthis.log(\"error\", message, data);\n\t}\n\n\tstderr(message: string, data?: unknown): void {\n\t\tthis.log(\"info\", message, data, \"stderr\");\n\t}\n\n\tlog(level: string, message: string, data?: unknown, channel: McpLogChannel = \"server\"): void {\n\t\tconst line = this.#formatLine(level, message, data, channel);\n\t\tthis.#pushRing(line);\n\t\tthis.#writeFile(line);\n\t}\n\n\tgetRingBuffer(): string[] {\n\t\treturn [...this.#ring];\n\t}\n\n\t#formatLine(level: string, message: string, data: unknown, channel: McpLogChannel): string {\n\t\tconst context: RedactionContext = { seen: new WeakSet<object>(), secrets: new Set<string>() };\n\t\tconst mapped = mapMcpLogLevel(level);\n\t\tconst redactedData = data === undefined ? undefined : redactMcpLogData(data, context);\n\t\tconst entry = {\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tserver: this.#server,\n\t\t\tlevel: mapped.level,\n\t\t\tseverity: mapped.severity,\n\t\t\tchannel,\n\t\t\tmessage: redactMcpLogTextWithContext(message, context),\n\t\t\tdata: redactedData,\n\t\t};\n\t\treturn redactKnownSecrets(JSON.stringify(entry), context);\n\t}\n\n\t#pushRing(line: string): void {\n\t\tthis.#ring.push(line);\n\t\tif (this.#ring.length > MAX_RING_LINES) {\n\t\t\tthis.#ring.splice(0, this.#ring.length - MAX_RING_LINES);\n\t\t}\n\t}\n\n\t#writeFile(line: string): void {\n\t\tif (this.#fileSinkDisabled) return;\n\t\ttry {\n\t\t\tmkdirSync(dirname(this.filePath), { recursive: true, mode: 0o700 });\n\t\t\tconst bytes = Buffer.byteLength(`${line}\\n`);\n\t\t\tthis.#rotateIfNeeded(bytes);\n\t\t\tconst fd = openSync(this.filePath, \"a\", 0o600);\n\t\t\ttry {\n\t\t\t\twriteSync(fd, `${line}\\n`);\n\t\t\t} finally {\n\t\t\t\tcloseSync(fd);\n\t\t\t}\n\t\t\tchmodSync(this.filePath, 0o600);\n\t\t} catch {\n\t\t\tthis.#fileSinkDisabled = true;\n\t\t\tthis.#pushRing(this.#formatLine(\"warning\", \"file sink disabled after write failure\", undefined, \"file\"));\n\t\t}\n\t}\n\n\t#rotateIfNeeded(incomingBytes: number): void {\n\t\tif (this.#maxFileBytes <= 0 || !existsSync(this.filePath)) return;\n\t\tif (statSync(this.filePath).size + incomingBytes <= this.#maxFileBytes) return;\n\t\ttry {\n\t\t\trmSync(`${this.filePath}.1`, { force: true });\n\t\t\trenameSync(this.filePath, `${this.filePath}.1`);\n\t\t\tchmodSync(`${this.filePath}.1`, 0o600);\n\t\t} catch {\n\t\t\tthrow new Error(\"log rotation failed\");\n\t\t}\n\t}\n}\n\nfunction redactMcpLogData(value: unknown, context: RedactionContext): unknown {\n\tif (typeof value === \"string\") return redactMcpLogTextWithContext(value, context);\n\tif (typeof value === \"bigint\") return value.toString();\n\tif (typeof value !== \"object\" || value === null) return value;\n\tif (context.seen.has(value)) return \"[Circular]\";\n\tcontext.seen.add(value);\n\tif (value instanceof Error) return redactMcpLogError(value, context);\n\tif (Array.isArray(value)) return value.map((item) => redactMcpLogData(item, context));\n\treturn redactMcpLogEntries(value, context);\n}\n\nfunction redactMcpLogError(error: Error, context: RedactionContext): Record<string, unknown> {\n\tconst redacted = redactMcpLogEntries(error, context);\n\tredacted.name = redactMcpLogTextWithContext(error.name, context);\n\tredacted.message = redactKnownSecrets(redactMcpLogTextWithContext(error.message, context), context);\n\tif (error.stack !== undefined) {\n\t\tredacted.stack = redactKnownSecrets(redactMcpLogTextWithContext(error.stack, context), context);\n\t}\n\treturn redacted;\n}\n\nfunction redactMcpLogEntries(value: object, context: RedactionContext): Record<string, unknown> {\n\tconst redacted: Record<string, unknown> = {};\n\tfor (const [key, item] of Object.entries(value)) {\n\t\tif (SENSITIVE_KEY_PATTERN.test(key)) {\n\t\t\tredacted[key] = redactionForSecret(stringifySecretValue(item), context);\n\t\t} else {\n\t\t\tredacted[key] = redactMcpLogData(item, context);\n\t\t}\n\t}\n\treturn redacted;\n}\n\nfunction stringifySecretValue(value: unknown): string {\n\tif (typeof value === \"string\") return value;\n\tif (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") return String(value);\n\tconst seen = new WeakSet<object>();\n\tconst json = JSON.stringify(value, (_key: string, item: unknown) => {\n\t\tif (typeof item === \"bigint\") return item.toString();\n\t\tif (typeof item !== \"object\" || item === null) return item;\n\t\tif (seen.has(item)) return \"[Circular]\";\n\t\tseen.add(item);\n\t\treturn item;\n\t});\n\treturn json ?? String(value);\n}\n\nfunction redactionForSecret(secret: string, context: RedactionContext): string {\n\tif (secret.length > 0 && !secret.startsWith(\"<redacted:\")) {\n\t\tcontext.secrets.add(secret);\n\t}\n\treturn redactionFor(secret);\n}\n\nfunction redactKnownSecrets(text: string, context: RedactionContext): string {\n\tfor (const secret of [...context.secrets].sort((left, right) => right.length - left.length)) {\n\t\ttext = text.split(secret).join(redactionFor(secret));\n\t}\n\treturn text;\n}\n\nfunction redactionFor(secret: string): string {\n\treturn `<redacted:${fingerprintSecret(secret)}>`;\n}\n\nfunction sanitizeServerName(server: string): string {\n\treturn server.replace(/[^A-Za-z0-9._-]+/g, \"_\") || \"server\";\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconnect.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/reconnect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG1C,eAAO,MAAM,wBAAwB,
|
|
1
|
+
{"version":3,"file":"reconnect.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/reconnect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG1C,eAAO,MAAM,wBAAwB,YAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAC/E,eAAO,MAAM,+BAA+B,QAAS,CAAC;AACtD,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,UAAU,mBAAmB;IAC5B,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CAC/B;AAkBD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAmBxE;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAOtE;AAED,wBAAsB,eAAe,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAUjF;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,gBAAgB,GAAG;IAC3E,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B,CAOA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-register.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/service-register.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAQhE,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAClD,EAAoB,EACpB,MAAyB,EACzB,OAAqC,EACrC,iBAAoC,EACpC,
|
|
1
|
+
{"version":3,"file":"service-register.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/service-register.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAQhE,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAClD,EAAoB,EACpB,MAAyB,EACzB,OAAqC,EACrC,iBAAoC,EACpC,OAAO,GAA4C,EAAE;IAErD,OAAO,MAAM,sBAAsB,CAClC,EAAE,EACF,MAAM,EACN,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACxD,OAAO;YACN,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE;YACpG,yBAAyB,EAAE,GAAG,EAAE,CAAC,2BAA2B,CAAC,KAAK,EAAE,YAAY,CAAC;YACjF,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI;SAChB,CAAC;IACH,CAAC,CAAC,EACF,iBAAiB,EACjB,OAAO,CACP,CAAC;AACH,CAAC","sourcesContent":["import type { ExtensionAPI } from \"../../types.ts\";\nimport type { ToolSearchService } from \"../tool-search/service.ts\";\nimport type { ResolvedMcpConfig } from \"./config-schema.ts\";\nimport type { McpSessionRegistration } from \"./expose/session.ts\";\nimport { registerDirectMcpTools } from \"./expose/session.ts\";\nimport type { McpConnectionEntry } from \"./service-types.ts\";\nimport { connectAndRefreshMcpCatalog } from \"./startup-race.ts\";\n\ntype McpToolRegistrar = Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">;\n\nexport interface McpServiceDirectToolRegistrationOptions {\n\treadonly refreshActiveSetWhenEmpty?: boolean;\n}\n\nexport async function registerMcpServiceDirectTools(\n\tpi: McpToolRegistrar,\n\tconfig: ResolvedMcpConfig,\n\tentries: Iterable<McpConnectionEntry>,\n\ttoolSearchService: ToolSearchService,\n\toptions: McpServiceDirectToolRegistrationOptions = {},\n): Promise<McpSessionRegistration | undefined> {\n\treturn await registerDirectMcpTools(\n\t\tpi,\n\t\tconfig,\n\t\t[...entries].map((entry) => {\n\t\t\tconst serverConfig = config.servers[entry.name]?.config;\n\t\t\treturn {\n\t\t\t\tagentDir: entry.agentDir,\n\t\t\t\tartifacts: entry.artifacts,\n\t\t\t\tcachedCatalog: entry.cachedCatalog,\n\t\t\t\tconnection: entry.connection,\n\t\t\t\tensureFresh: () => entry.authPlan?.refresh?.ensureFresh().then(() => undefined) ?? Promise.resolve(),\n\t\t\t\tensureCachedToolConnected: () => connectAndRefreshMcpCatalog(entry, serverConfig),\n\t\t\t\tlogger: entry.logger,\n\t\t\t\tname: entry.name,\n\t\t\t};\n\t\t}),\n\t\ttoolSearchService,\n\t\toptions,\n\t);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAShH,OAAO,EAA2C,qBAAqB,EAA4B,MAAM,aAAa,CAAC;AACvH,OAAO,KAAK,EAAE,eAAe,EAAwC,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAInD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAA6B,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAYxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAIxD,OAAO,KAAK,EAEX,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EAOjB,qBAAqB,EAErB,MAAM,oBAAoB,CAAC;AAW5B,KAAK,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC;AAEjF,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AAEnE,qBAAa,UAAU;;IA+BhB,aAAa,CAClB,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,iBAAiB,EACtB,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,cAAc,CAAC,EAC9E,OAAO,GAAE,iBAAsB,GAC7B,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport type { ExtensionAPI, ExtensionUIContext, SessionShutdownEvent, SessionStartEvent } from \"../../types.ts\";\nimport {\n\tgetToolSearchService,\n\tresetToolSearchServiceForTests,\n\ttype ToolSearchService,\n} from \"../tool-search/service.ts\";\nimport { detectLiteralBearerWarnings, resolveAuthMode, resolveServerAuth } from \"./auth/context.ts\";\nimport { collectToolCatalog } from \"./catalog.ts\";\nimport { getValidCachedServer, readMcpCatalogCache } from \"./catalog-cache.ts\";\nimport { loadMcpConfig, mergeExtensionMcpServers, resolveSkillMcpServer, visitSpawnableMcpServers } from \"./config.ts\";\nimport type { McpServerConfig, ResolvedMcpConfig, ResolvedMcpServer } from \"./config-schema.ts\";\nimport { ServerConnection } from \"./connection.ts\";\nimport { collectAllPages } from \"./expose/pagination.ts\";\nimport { mapMcpCatalogNames } from \"./expose/register.ts\";\nimport type { McpSessionRegistration } from \"./expose/session.ts\";\nimport type { McpServerExposureStatus } from \"./expose/status.ts\";\nimport { cleanupMcpOutputArtifacts, McpOutputArtifacts } from \"./guard/output-guard.ts\";\nimport { markMcpConnectionNeedsAuth } from \"./health.ts\";\nimport { configureMcpConnectionLifecycle, disposeMcpConnectionLifecycle } from \"./idle.ts\";\nimport { refreshMcpInstructionsForSession } from \"./instructions.ts\";\nimport { createMcpLogger } from \"./log.ts\";\nimport {\n\tbuildMcpTombstoneDefinition,\n\tcreateMcpListChangeCoalescer,\n\tdiffMcpToolNames,\n\tformatMcpListChangedDelta,\n} from \"./notifications.ts\";\nimport { configureMcpReconnect, disposeMcpReconnect, reconnectMcpNow } from \"./reconnect.ts\";\nimport type { McpResourceServer } from \"./resources.ts\";\nimport { getMcpServiceExposureStatus } from \"./service-exposure.ts\";\nimport { registerMcpServiceDirectTools } from \"./service-register.ts\";\nimport { buildMcpServerSnapshot } from \"./service-snapshot.ts\";\nimport type {\n\tMcpConnectionEntry,\n\tMcpDisposeReason,\n\tMcpServerSnapshot,\n\tMcpServiceSnapshot,\n\tMcpSessionContext,\n\tMcpSessionOptions,\n\tMcpWireAuthStatus,\n\tMcpWireJsonValue,\n\tMcpWireResource,\n\tMcpWireResourceTemplate,\n\tMcpWireServerInfo,\n\tMcpWireStatusServer,\n\tMcpWireStatusSnapshot,\n\tMcpWireTool,\n} from \"./service-types.ts\";\nimport {\n\tconnectAndRefreshMcpCatalog,\n\traceMcpStartupConnect,\n\tresolveMcpStartupTimeoutMs,\n\tshouldRaceMcpStartup,\n} from \"./startup-race.ts\";\n\ntype ListedTool = Awaited<ReturnType<Client[\"listTools\"]>>[\"tools\"][number];\ntype ListedResource = Awaited<ReturnType<Client[\"listResources\"]>>[\"resources\"][number];\ntype ListedResourceTemplate = Awaited<ReturnType<Client[\"listResourceTemplates\"]>>[\"resourceTemplates\"][number];\ntype McpElicitationUi = Pick<ExtensionUIContext, \"input\" | \"select\" | \"confirm\">;\n\nexport { registerToolsPreservingActiveSet } from \"./active-set.ts\";\n\nexport class McpService {\n\t#disposed = false;\n\t#disposeCount = 0;\n\t#lastDisposeReason: McpDisposeReason | null = null;\n\t#sessionContext: McpSessionContext | null = null;\n\t#sessionStartCount = 0;\n\t#lastSessionStartReason: SessionStartEvent[\"reason\"] | null = null;\n\t#toolRefreshGeneration = 0;\n\t#config: ResolvedMcpConfig | null = null;\n\t#authAgentDir: string | undefined;\n\t#authEnv: Record<string, string | undefined> | undefined;\n\t#elicitationUiProvider: (() => McpElicitationUi | undefined) | undefined;\n\t#mcpInstructions = \"\";\n\treadonly #pendingAuth = new Map<string, import(\"./auth/oauth-provider.ts\").McpOAuthProvider>();\n\treadonly #interactiveAuthServers = new Set<string>();\n\treadonly #promptCommandNames = new Set<string>();\n\treadonly #registrationListeners = new Set<() => void>();\n\treadonly #wireStatusListeners = new Set<(sessionId: string | undefined, snapshot: McpWireStatusSnapshot) => void>();\n\t#wireStatusRefreshQueue: Promise<void> = Promise.resolve();\n\t#refreshActiveSetWhenNoTools = false;\n\t#tierBRegistration: McpSessionRegistration | undefined;\n\t#toolSearchService: ToolSearchService | undefined;\n\t#sessionOptions: McpSessionOptions = {};\n\t#pi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\"> | undefined;\n\t#attachQueue: Promise<void> = Promise.resolve();\n\t#latestWireStatus: McpWireStatusSnapshot = { servers: [] };\n\treadonly #wireStatusBySession = new Map<string, McpWireStatusSnapshot>();\n\treadonly #connections = new Map<string, McpConnectionEntry>();\n\treadonly #connectionKeysByName = new Map<string, string>();\n\treadonly #outputArtifacts = new McpOutputArtifacts();\n\n\tasync attachSession(\n\t\tevent: SessionStartEvent,\n\t\tctx: McpSessionContext,\n\t\t_pi?: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n\t\toptions: McpSessionOptions = {},\n\t): Promise<void> {\n\t\tconst attach = this.#attachQueue.then(async () => {\n\t\t\tthis.#sessionContext = ctx;\n\t\t\tthis.#sessionStartCount += 1;\n\t\t\tthis.#lastSessionStartReason = event.reason;\n\t\t\tconst config = loadMcpConfig({\n\t\t\t\tagentDir: options.agentDir,\n\t\t\t\tcwd: ctx.cwd,\n\t\t\t\tenv: options.env,\n\t\t\t\tprojectTrusted: options.projectTrusted ?? ctx.isProjectTrusted(),\n\t\t\t});\n\t\t\tmergeExtensionMcpServers(config, ctx.getRegisteredMcpServers?.() ?? []);\n\t\t\tthis.#config = config;\n\t\t\tthis.#pi = _pi;\n\t\t\tif (_pi !== undefined) {\n\t\t\t\tconst activationRuntime = {\n\t\t\t\t\tgetActiveTools: () => _pi.getActiveTools(),\n\t\t\t\t\tsetActiveTools: (names: readonly string[]) => _pi.setActiveTools([...names]),\n\t\t\t\t};\n\t\t\t\ttry {\n\t\t\t\t\tthis.#toolSearchService = getToolSearchService();\n\t\t\t\t\tthis.#toolSearchService.bindActivationRuntime(activationRuntime);\n\t\t\t\t} catch {\n\t\t\t\t\tthis.#toolSearchService = getToolSearchService({ getAllTools: () => [], ...activationRuntime });\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.#authAgentDir = options.agentDir;\n\t\t\tthis.#authEnv = options.env;\n\t\t\tthis.#sessionOptions = options;\n\t\t\tconst toolRefreshGeneration = this.#toolRefreshGeneration + 1;\n\t\t\tthis.#toolRefreshGeneration = toolRefreshGeneration;\n\t\t\tawait this.#syncFromConfig(config, options, event.reason !== \"reload\", _pi, toolRefreshGeneration);\n\t\t\tif (_pi !== undefined) await this.#registerDirectTools(_pi);\n\t\t\t// Replay promotion markers from the (possibly resumed) session history\n\t\t\t// BEFORE the first turn: the request tool snapshot is taken before the\n\t\t\t// per-turn context event fires, so the context-event replay alone lands\n\t\t\t// one turn late. Doing it here puts restored tools on the very first\n\t\t\t// wire payload after a --continue/resume.\n\t\t\tif (_pi !== undefined) this.#rehydrateFromSessionHistory(ctx);\n\t\t\tif (shouldCaptureWireStatus(ctx)) await this.refreshWireStatusSnapshot(ctx.sessionManager?.getSessionId?.());\n\t\t});\n\t\tthis.#attachQueue = attach.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\tawait attach;\n\t}\n\n\t/**\n\t * Register skill-declared MCP servers (todo 37). Skill servers are forced\n\t * into search mode with no directTools, so their catalogs register with\n\t * ZERO active tools until activateSkillMcpTools reveals them. A name\n\t * collision with a system-configured server keeps the system config and\n\t * returns a warning (system wins).\n\t */\n\tasync attachSkillMcpServers(\n\t\tdeclared: ReadonlyMap<string, { raw: Parameters<typeof resolveSkillMcpServer>[1]; sourcePath: string }>,\n\t): Promise<string[]> {\n\t\tconst config = this.#config;\n\t\tconst pi = this.#pi;\n\t\tif (config === null || pi === undefined) return [];\n\t\tconst warnings: string[] = [];\n\t\tlet added = 0;\n\t\tfor (const [name, decl] of declared) {\n\t\t\tconst existing = config.servers[name];\n\t\t\tif (existing !== undefined && existing.source !== \"skill\") {\n\t\t\t\twarnings.push(\n\t\t\t\t\t`MCP server '${name}' from skill ${decl.sourcePath} collides with the ${existing.source} config; system config wins.`,\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst resolved = resolveSkillMcpServer(name, decl.raw, decl.sourcePath);\n\t\t\tif (existing !== undefined && existing.configHash === resolved.configHash) continue;\n\t\t\tconfig.servers[name] = resolved;\n\t\t\tadded += 1;\n\t\t}\n\t\tif (added > 0) {\n\t\t\tconst toolRefreshGeneration = this.#toolRefreshGeneration + 1;\n\t\t\tthis.#toolRefreshGeneration = toolRefreshGeneration;\n\t\t\tawait this.#syncFromConfig(config, this.#sessionOptions, false, pi, toolRefreshGeneration);\n\t\t\tawait this.#registerDirectTools(pi);\n\t\t\tif (this.#sessionContext !== null && shouldCaptureWireStatus(this.#sessionContext)) {\n\t\t\t\tawait this.refreshWireStatusSnapshot(this.#sessionContext.sessionManager?.getSessionId?.());\n\t\t\t}\n\t\t}\n\t\treturn warnings;\n\t}\n\n\t/** Registered searchable catalog (mapped name + server-side tool name),\n\t * used by the skills loader to compute activation targets. */\n\tgetTierBSearchable(): ReadonlyArray<{ name: string; toolName: string; server: string }> {\n\t\treturn this.#tierBRegistration?.searchable ?? [];\n\t}\n\n\t/** Connected servers that list prompts (todo 40), for slash registration. */\n\tgetMcpPromptServers(): readonly import(\"./prompts.ts\").McpPromptServer[] {\n\t\treturn this.#tierBRegistration?.promptServers ?? [];\n\t}\n\n\t/** Connected servers that list resources (todo 39), for mention expansion. */\n\tgetMcpResourceServers(): readonly McpResourceServer[] {\n\t\treturn this.#tierBRegistration?.resourceServers ?? [];\n\t}\n\n\t/** Subscribe to completed catalog registrations. Consumers must inspect the\n\t * resulting snapshot because tool, resource, and prompt catalogs can become\n\t * available in different startup-race generations. */\n\tonMcpRegistrationChanged(listener: () => void): () => void {\n\t\tthis.#registrationListeners.add(listener);\n\t\treturn () => this.#registrationListeners.delete(listener);\n\t}\n\n\t/** Subscribe to live MCP inventory transitions for session-scoped hosts. */\n\tonWireStatusChanged(listener: (sessionId: string | undefined, snapshot: McpWireStatusSnapshot) => void): () => void {\n\t\tthis.#wireStatusListeners.add(listener);\n\t\treturn () => this.#wireStatusListeners.delete(listener);\n\t}\n\n\t/** Refresh and return the current session-owned MCP wire inventory. */\n\tasync refreshWireStatusSnapshot(sessionId?: string): Promise<McpWireStatusSnapshot> {\n\t\tconst refresh = this.#wireStatusRefreshQueue.then(() => this.#captureWireStatus(sessionId));\n\t\tthis.#wireStatusRefreshQueue = refresh.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\tawait refresh;\n\t\treturn this.getWireStatusSnapshot(sessionId);\n\t}\n\n\t/** Reveal skill-owned tools (todo 37): activation is effective the next\n\t * turn, exactly like an tool_search promotion. Unknown names are ignored. */\n\tactivateSkillMcpTools(names: readonly string[]): void {\n\t\tthis.#tierBRegistration?.activate(names);\n\t}\n\n\t#rehydrateFromSessionHistory(ctx: McpSessionContext): void {\n\t\tconst entries = ctx.sessionManager?.getEntries() ?? [];\n\t\tif (entries.length === 0) return;\n\t\tthis.rehydrateActiveToolsFromHistory(entries);\n\t}\n\n\tasync handleSessionShutdown(event: SessionShutdownEvent): Promise<void> {\n\t\tif (shouldDisposeMcpService(event.reason)) await this.dispose(event.reason);\n\t}\n\n\tasync dispose(reason: McpDisposeReason): Promise<void> {\n\t\tif (this.#disposed) return;\n\t\tthis.#disposed = true;\n\t\tthis.#disposeCount += 1;\n\t\tthis.#lastDisposeReason = reason;\n\t\tthis.#sessionContext = null;\n\t\tthis.#config = null;\n\t\tthis.#elicitationUiProvider = undefined;\n\t\tthis.#mcpInstructions = \"\";\n\t\tthis.#pendingAuth.clear();\n\t\tthis.#interactiveAuthServers.clear();\n\t\tthis.#promptCommandNames.clear();\n\t\tthis.#registrationListeners.clear();\n\t\tthis.#wireStatusListeners.clear();\n\t\tthis.#wireStatusBySession.clear();\n\t\tthis.#latestWireStatus = { servers: [] };\n\t\tconst entries = [...this.#connections.values()];\n\t\tthis.#connections.clear();\n\t\tthis.#connectionKeysByName.clear();\n\t\tawait Promise.all(entries.map((entry) => disposeEntryConnection(entry)));\n\t\tawait cleanupMcpOutputArtifacts(this.#outputArtifacts);\n\t}\n\n\tgetMcpOutputArtifacts(): McpOutputArtifacts {\n\t\treturn this.#outputArtifacts;\n\t}\n\n\tisDisposed(): boolean {\n\t\treturn this.#disposed;\n\t}\n\n\tgetConnection(name: string): ServerConnection | undefined {\n\t\tconst key = this.#connectionKeysByName.get(name);\n\t\treturn key === undefined ? undefined : this.#connections.get(key)?.connection;\n\t}\n\n\tasync reconnectServer(name: string): Promise<void> {\n\t\tconst entry = this.#entryForName(name);\n\t\tif (entry === undefined) throw new Error(`Unknown MCP server: ${name || \"<missing>\"}`);\n\t\tawait reconnectMcpNow(entry.connection);\n\t}\n\n\tgetServerSnapshots(): McpServerSnapshot[] {\n\t\tconst names = new Set<string>(Object.keys(this.#config?.servers ?? {}));\n\t\tfor (const entry of this.#connections.values()) names.add(entry.name);\n\t\treturn [...names].sort().map((name) => this.#serverSnapshot(name));\n\t}\n\n\tgetLogLines(name: string, maxLines: number): string[] {\n\t\tconst key = this.#connectionKeysByName.get(name);\n\t\tconst lines = key === undefined ? [] : (this.#connections.get(key)?.logger.getRingBuffer() ?? []);\n\t\treturn lines.slice(Math.max(0, lines.length - maxLines));\n\t}\n\n\tasync getServerExposureStatus(name: string): Promise<McpServerExposureStatus> {\n\t\treturn await getMcpServiceExposureStatus(name, this.#config, this.#entryForName(name));\n\t}\n\n\trecordCall(name: string, elapsedMs: number, failed: boolean): void {\n\t\tconst key = this.#connectionKeysByName.get(name);\n\t\tconst entry = key === undefined ? undefined : this.#connections.get(key);\n\t\tif (entry === undefined) return;\n\t\tentry.counters.callCount += 1;\n\t\tentry.counters.totalLatencyMs += elapsedMs;\n\t\tif (failed) entry.counters.errorCount += 1;\n\t}\n\n\tgetSnapshot(): McpServiceSnapshot {\n\t\treturn {\n\t\t\tdisposed: this.#disposed,\n\t\t\tdisposeCount: this.#disposeCount,\n\t\t\tlastDisposeReason: this.#lastDisposeReason,\n\t\t\tsessionStartCount: this.#sessionStartCount,\n\t\t\tlastSessionStartReason: this.#lastSessionStartReason,\n\t\t\thasSessionContext: this.#sessionContext !== null,\n\t\t\tconnectionCount: this.#connections.size,\n\t\t};\n\t}\n\n\t/**\n\t * Return the attach-time inventory captured for one session. This is the\n\t * handoff consumed by the app-server's session-owned adapter; it deliberately\n\t * does not expose or derive from the lifecycle-only server snapshots.\n\t */\n\tgetWireStatusSnapshot(sessionId?: string): McpWireStatusSnapshot {\n\t\treturn sessionId === undefined\n\t\t\t? this.#latestWireStatus\n\t\t\t: (this.#wireStatusBySession.get(sessionId) ?? { servers: [] });\n\t}\n\n\tasync #syncFromConfig(\n\t\tconfig: ResolvedMcpConfig,\n\t\toptions: McpSessionOptions,\n\t\tuseCache: boolean,\n\t\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\"> | undefined,\n\t\ttoolRefreshGeneration: number,\n\t): Promise<void> {\n\t\tconst cache = await readMcpCatalogCache(options.agentDir);\n\t\tconst hadConnectionsBeforeSync = this.#connections.size > 0;\n\t\tthis.#refreshActiveSetWhenNoTools = Object.keys(config.servers).length > 0 || hadConnectionsBeforeSync;\n\t\tconst wanted = new Map<string, ResolvedMcpServer>();\n\t\tvisitSpawnableMcpServers(config, (name, server) => {\n\t\t\twanted.set(name, server);\n\t\t});\n\t\tconst disposals: Promise<void>[] = [];\n\t\tfor (const entry of this.#connections.values()) {\n\t\t\tconst server = wanted.get(entry.name);\n\t\t\tconst key = server?.configHash === undefined ? undefined : `${entry.name}\\0${server.configHash}`;\n\t\t\tif (key === entry.key) continue;\n\t\t\tthis.#connections.delete(entry.key);\n\t\t\tthis.#connectionKeysByName.delete(entry.name);\n\t\t\tdisposals.push(disposeEntryConnection(entry));\n\t\t}\n\t\tawait Promise.all(disposals);\n\n\t\tconst connects: Promise<void>[] = [];\n\t\tfor (const [name, server] of wanted) {\n\t\t\tif (server.config === undefined || server.configHash === undefined) continue;\n\t\t\tconst key = `${name}\\0${server.configHash}`;\n\t\t\tif (this.#connections.has(key)) continue;\n\t\t\tconst logger = createMcpLogger(name, { logDir: options.logDir });\n\t\t\tconst authPlan = resolveServerAuth({\n\t\t\t\tagentDir: options.agentDir,\n\t\t\t\tconfig: server.config,\n\t\t\t\tenv: options.env,\n\t\t\t\tlogger,\n\t\t\t\tserverName: name,\n\t\t\t});\n\t\t\tfor (const warning of detectLiteralBearerWarnings(name, server.config)) logger.warn(warning);\n\t\t\tconst connection = new ServerConnection({\n\t\t\t\tauthProvider: authPlan.provider,\n\t\t\t\tconfig: server.config,\n\t\t\t\tenv: options.env,\n\t\t\t\telicitationUiProvider: () => this.getMcpElicitationUi(),\n\t\t\t\tlogger,\n\t\t\t\tserverName: name,\n\t\t\t});\n\t\t\tconst cachedCatalog = useCache ? getValidCachedServer(cache, name, server.configHash) : undefined;\n\t\t\tconst entry: McpConnectionEntry = {\n\t\t\t\tagentDir: options.agentDir,\n\t\t\t\tartifacts: this.#outputArtifacts,\n\t\t\t\tauthPlan,\n\t\t\t\tcacheRefreshedAfterConnect: false,\n\t\t\t\tcachedCatalog,\n\t\t\t\tkey,\n\t\t\t\tname,\n\t\t\t\tconfigHash: server.configHash,\n\t\t\t\tconnection,\n\t\t\t\tlogger,\n\t\t\t\tcreatedAtMs: Date.now(),\n\t\t\t\tcounters: { callCount: 0, errorCount: 0, totalLatencyMs: 0, reconnectCount: 0 },\n\t\t\t};\n\t\t\tconfigureMcpConnectionLifecycle(connection, server.config, logger);\n\t\t\tconfigureMcpReconnect({\n\t\t\t\tconnection,\n\t\t\t\tlogger,\n\t\t\t\treconnect: async () => {\n\t\t\t\t\tentry.counters.reconnectCount += 1;\n\t\t\t\t\tentry.cacheRefreshedAfterConnect = false;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait entry.authPlan?.refresh?.ensureFresh();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst authError = markMcpConnectionNeedsAuth(entry.connection, error);\n\t\t\t\t\t\tif (authError !== undefined) {\n\t\t\t\t\t\t\tentry.logger.warn(authError.message);\n\t\t\t\t\t\t\tthrow authError;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tawait entry.connection.renew();\n\t\t\t\t\tawait connectAndRefreshMcpCatalog(entry, server.config);\n\t\t\t\t},\n\t\t\t\tshouldReconnect: () => !this.#disposed && this.#entryForName(name) === entry,\n\t\t\t});\n\t\t\tthis.#connections.set(key, entry);\n\t\t\tthis.#connectionKeysByName.set(name, key);\n\t\t\tthis.#wireListChanged(entry);\n\t\t\t// Every startup connect is bounded by the startup race and continues in\n\t\t\t// the background past the deadline (eager/keep-alive always; a cold lazy\n\t\t\t// server that has no cached catalog also races so a slow/wedged server\n\t\t\t// never gates attachSession -> before_agent_start -> the first turn).\n\t\t\t// A cached lazy server needs no startup connect: its tools come from the\n\t\t\t// cache and it connects on demand at tool-call time.\n\t\t\tif (shouldRaceMcpStartup(server.config.lifecycle) || cachedCatalog === undefined) {\n\t\t\t\tconnects.push(\n\t\t\t\t\traceMcpStartupConnect({\n\t\t\t\t\t\tentry,\n\t\t\t\t\t\tpi,\n\t\t\t\t\t\tregisterDirectTools: async (targetPi) => {\n\t\t\t\t\t\t\tawait this.#registerDirectTools(targetPi);\n\t\t\t\t\t\t\t// A raced attach ran its history replay before this catalog\n\t\t\t\t\t\t\t// existed; replay now so restored tools still land on the\n\t\t\t\t\t\t\t// first turn's payload (idempotent: already-active names skip).\n\t\t\t\t\t\t\tif (this.#sessionContext !== null) this.#rehydrateFromSessionHistory(this.#sessionContext);\n\t\t\t\t\t\t\t// The session instructions block was likewise captured at attach\n\t\t\t\t\t\t\t// time, before this server connected; rebuild it so the first\n\t\t\t\t\t\t\t// turn carries this server's instructions after a raced connect.\n\t\t\t\t\t\t\trefreshMcpInstructionsForSession(this);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tserverConfig: server.config,\n\t\t\t\t\t\tshouldRefreshTools: () => !this.#disposed && this.#toolRefreshGeneration === toolRefreshGeneration,\n\t\t\t\t\t\tdeadlineMs: resolveMcpStartupTimeoutMs(server.config.startupTimeoutMs),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tawait Promise.all(connects);\n\t}\n\n\t#wireListChanged(entry: McpConnectionEntry): void {\n\t\tconst sink = { logger: { error: (message: string, data?: unknown) => entry.logger.error(message, data) } };\n\t\tconst coalescer = createMcpListChangeCoalescer({\n\t\t\tonRefresh: () => this.#handleServerToolsChanged(entry),\n\t\t\tscope: `mcp.list_changed.${entry.name}`,\n\t\t\tsink,\n\t\t});\n\t\tconst unsubscribe = entry.connection.onToolsChanged(() => coalescer.notify());\n\t\tconst unsubscribeState = entry.connection.onStateChange(() => {\n\t\t\tconst ctx = this.#sessionContext;\n\t\t\tif (ctx?.mode !== \"rpc\") return;\n\t\t\tvoid this.refreshWireStatusSnapshot(ctx.sessionManager?.getSessionId?.()).catch((error: unknown) => {\n\t\t\t\tentry.logger.error(\"Failed to refresh MCP control inventory\", error);\n\t\t\t});\n\t\t});\n\t\tentry.disposeListChanged = () => {\n\t\t\tunsubscribe();\n\t\t\tcoalescer.dispose();\n\t\t};\n\t\tentry.disposeWireStatus = unsubscribeState;\n\t}\n\n\t// Re-list a server on a coalesced list_changed and re-register: added tools\n\t// enter INACTIVE (registerToolsPreservingActiveSet keeps the active set), and\n\t// removed tools are tombstoned so a stale call fails cleanly.\n\tasync #handleServerToolsChanged(entry: McpConnectionEntry): Promise<void> {\n\t\tconst pi = this.#pi;\n\t\tconst config = this.#config;\n\t\tif (pi === undefined || config === null) return;\n\t\tconst server = config.servers[entry.name];\n\t\tif (server?.config === undefined || entry.connection.state !== \"connected\") return;\n\t\tconst catalog = await collectToolCatalog(entry.name, entry.connection, server.config, {\n\t\t\tagentDir: entry.agentDir,\n\t\t\toutputGuard: config.settings.outputGuard,\n\t\t});\n\t\tconst newNames = mapMcpCatalogNames(catalog).map(({ name }) => name);\n\t\tconst diff = diffMcpToolNames(entry.knownToolNames ?? newNames, newNames);\n\t\t// Tombstone removed tools BEFORE re-registration so the subsequent\n\t\t// setActiveTools (which excludes them) leaves the tombstones inactive.\n\t\tfor (const removed of diff.removed) pi.registerTool(buildMcpTombstoneDefinition(removed, entry.name));\n\t\tawait this.#registerDirectTools(pi);\n\t\tentry.knownToolNames = newNames;\n\t\tentry.lastListChangedDelta = formatMcpListChangedDelta(diff);\n\t}\n\n\tasync #registerDirectTools(\n\t\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n\t): Promise<void> {\n\t\tconst config = this.#config;\n\t\tif (config === null) return;\n\t\tconst toolSearchService = this.#toolSearchService;\n\t\tif (toolSearchService === undefined) return;\n\t\tthis.#tierBRegistration = await registerMcpServiceDirectTools(\n\t\t\tpi,\n\t\t\tconfig,\n\t\t\tthis.#connections.values(),\n\t\t\ttoolSearchService,\n\t\t\t{\n\t\t\t\trefreshActiveSetWhenEmpty: this.#refreshActiveSetWhenNoTools,\n\t\t\t},\n\t\t);\n\t\tconst ctx = this.#sessionContext;\n\t\tif (ctx?.mode === \"rpc\") {\n\t\t\tawait this.refreshWireStatusSnapshot(ctx.sessionManager?.getSessionId?.());\n\t\t}\n\t\tfor (const listener of this.#registrationListeners) listener();\n\t}\n\n\t/** Route compatibility callers through the shared ownership-aware scanner. */\n\trehydrateActiveToolsFromHistory(messages: readonly unknown[]): string[] {\n\t\treturn this.#toolSearchService?.maybeRehydrateFromHistory(messages) ?? [];\n\t}\n\n\t/** Shared service memoization keeps this scan once-per-catalog-generation. */\n\tmaybeRehydrateFromHistory(messages: readonly unknown[]): string[] {\n\t\treturn this.#toolSearchService?.maybeRehydrateFromHistory(messages) ?? [];\n\t}\n\n\t#serverSnapshot(name: string): McpServerSnapshot {\n\t\tconst connection = this.getConnection(name);\n\t\tconnection?.refreshCapturedDiagnostics();\n\t\treturn buildMcpServerSnapshot(name, this.#config?.servers[name], connection, this.#entryForName(name));\n\t}\n\n\tasync #captureWireStatus(sessionId: string | undefined): Promise<void> {\n\t\tconst config = this.#config;\n\t\tif (config === null) return;\n\t\tconst servers = await Promise.all(\n\t\t\tObject.keys(config.servers)\n\t\t\t\t.sort()\n\t\t\t\t.map((name) => this.#captureWireStatusServer(name, config.servers[name])),\n\t\t);\n\t\tconst snapshot: McpWireStatusSnapshot = { servers };\n\t\tconst previous = this.getWireStatusSnapshot(sessionId);\n\t\tthis.#latestWireStatus = snapshot;\n\t\tif (sessionId !== undefined) this.#wireStatusBySession.set(sessionId, snapshot);\n\t\tif (JSON.stringify(previous) === JSON.stringify(snapshot)) return;\n\t\tfor (const listener of this.#wireStatusListeners) listener(sessionId, snapshot);\n\t}\n\n\tasync #captureWireStatusServer(name: string, server: ResolvedMcpServer | undefined): Promise<McpWireStatusServer> {\n\t\tconst entry = this.#entryForName(name);\n\t\tconst connection = entry?.connection;\n\t\tconst connected = connection?.state === \"connected\";\n\t\tconst cached = entry?.cachedCatalog;\n\t\tlet tools = cached?.tools ?? [];\n\t\tlet resources = cached?.resources ?? [];\n\t\tlet resourceTemplates: ListedResourceTemplate[] = [];\n\t\tlet serverInfo: McpWireServerInfo | null = null;\n\n\t\tif (connected && connection !== undefined) {\n\t\t\tconst client = connection.client;\n\t\t\tconst version = client.getServerVersion();\n\t\t\tif (version !== undefined) serverInfo = mapWireServerInfo(version);\n\t\t\ttry {\n\t\t\t\ttools = (\n\t\t\t\t\tawait collectAllPages<ListedTool>((cursor) => client.listTools(cursor === undefined ? {} : { cursor }))\n\t\t\t\t).items;\n\t\t\t} catch (error: unknown) {\n\t\t\t\tif (!(error instanceof Error)) throw error;\n\t\t\t\ttools = cached?.tools ?? [];\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tresources = (\n\t\t\t\t\tawait collectAllPages<ListedResource>((cursor) =>\n\t\t\t\t\t\tclient.listResources(cursor === undefined ? {} : { cursor }),\n\t\t\t\t\t)\n\t\t\t\t).items;\n\t\t\t} catch (error: unknown) {\n\t\t\t\tif (!(error instanceof Error)) throw error;\n\t\t\t\tresources = cached?.resources ?? [];\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tresourceTemplates = (\n\t\t\t\t\tawait collectAllPages<ListedResourceTemplate>((cursor) =>\n\t\t\t\t\t\tclient.listResourceTemplates(cursor === undefined ? {} : { cursor }),\n\t\t\t\t\t)\n\t\t\t\t).items;\n\t\t\t} catch (error: unknown) {\n\t\t\t\tif (!(error instanceof Error)) throw error;\n\t\t\t\tresourceTemplates = [];\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tname,\n\t\t\tserverInfo,\n\t\t\ttools: tools.map(mapWireTool),\n\t\t\tresources: resources.map(mapWireResource),\n\t\t\tresourceTemplates: resourceTemplates.map(mapWireResourceTemplate),\n\t\t\tauthStatus: wireAuthStatus(entry, server),\n\t\t\t...(connection?.state === undefined && server?.state === undefined\n\t\t\t\t? {}\n\t\t\t\t: { status: connection?.state ?? server?.state }),\n\t\t};\n\t}\n\n\t#entryForName(name: string): McpConnectionEntry | undefined {\n\t\tconst key = this.#connectionKeysByName.get(name);\n\t\treturn key === undefined ? undefined : this.#connections.get(key);\n\t}\n\n\tsetMcpInstructions(instructions: string): void {\n\t\tthis.#mcpInstructions = instructions;\n\t}\n\n\tgetMcpInstructions(): string {\n\t\treturn this.#mcpInstructions;\n\t}\n\n\tsetMcpElicitationUiProvider(provider: (() => McpElicitationUi | undefined) | undefined): void {\n\t\tthis.#elicitationUiProvider = provider;\n\t}\n\n\tgetMcpElicitationUi(): McpElicitationUi | undefined {\n\t\treturn this.#elicitationUiProvider?.();\n\t}\n\n\tisMcpPromptCommandRegistered(name: string): boolean {\n\t\treturn this.#promptCommandNames.has(name);\n\t}\n\n\tmarkMcpPromptCommandRegistered(name: string): void {\n\t\tthis.#promptCommandNames.add(name);\n\t}\n\n\tbeginInteractiveAuth(serverName: string): boolean {\n\t\tif (this.#interactiveAuthServers.has(serverName)) return false;\n\t\tthis.#interactiveAuthServers.add(serverName);\n\t\treturn true;\n\t}\n\n\tendInteractiveAuth(serverName: string): void {\n\t\tthis.#interactiveAuthServers.delete(serverName);\n\t}\n\n\tgetPendingAuth(): Map<string, import(\"./auth/oauth-provider.ts\").McpOAuthProvider> {\n\t\treturn this.#pendingAuth;\n\t}\n\n\tgetAuthTarget(\n\t\tname: string,\n\t):\n\t\t| { config: McpServerConfig; agentDir?: string; env?: Record<string, string | undefined>; callbackUrl?: string }\n\t\t| undefined {\n\t\tconst server = this.#config?.servers[name];\n\t\tif (server?.config === undefined) return undefined;\n\t\treturn {\n\t\t\tconfig: server.config,\n\t\t\tagentDir: this.#authAgentDir,\n\t\t\tenv: this.#authEnv,\n\t\t\tcallbackUrl: this.#config?.settings.oauthCallbackUrl,\n\t\t};\n\t}\n\n\tgetCachedInstructions(name: string): string | undefined {\n\t\treturn this.#entryForName(name)?.cachedCatalog?.instructions;\n\t}\n\n\t/** Resolved `settings.nativeToolSearch` (auto | true | false | undefined).\n\t * Drives the native provider tool-search adapter gate. */\n\tgetNativeToolSearchSetting(): \"auto\" | boolean | undefined {\n\t\treturn this.#config?.settings.nativeToolSearch;\n\t}\n}\n\nfunction wireAuthStatus(\n\tentry: McpConnectionEntry | undefined,\n\tserver: ResolvedMcpServer | undefined,\n): McpWireAuthStatus {\n\tconst mode = entry?.authPlan?.mode ?? (server?.config === undefined ? \"none\" : resolveAuthMode(server.config));\n\tswitch (mode) {\n\t\tcase \"none\":\n\t\t\treturn \"unsupported\";\n\t\tcase \"bearer\":\n\t\t\treturn entry?.connection.state === \"needs_auth\" ? \"notLoggedIn\" : \"bearerToken\";\n\t\tcase \"oauth\":\n\t\t\treturn entry?.authPlan?.provider?.tokens() === undefined ? \"notLoggedIn\" : \"oAuth\";\n\t\tdefault:\n\t\t\treturn assertNever(mode);\n\t}\n}\n\nfunction shouldCaptureWireStatus(ctx: McpSessionContext): boolean {\n\treturn ctx.mode === \"app-server\" || ctx.mode === \"rpc\";\n}\n\nfunction mapWireServerInfo(info: NonNullable<ReturnType<Client[\"getServerVersion\"]>>): McpWireServerInfo {\n\treturn {\n\t\tname: info.name,\n\t\ttitle: info.title ?? null,\n\t\tversion: info.version,\n\t\tdescription: info.description ?? null,\n\t\ticons: info.icons?.map(toWireJsonValue) ?? null,\n\t\twebsiteUrl: info.websiteUrl ?? null,\n\t};\n}\n\nfunction mapWireTool(tool: ListedTool): McpWireTool {\n\treturn {\n\t\tname: tool.name,\n\t\t...(tool.title === undefined ? {} : { title: tool.title }),\n\t\t...(tool.description === undefined ? {} : { description: tool.description }),\n\t\tinputSchema: toWireJsonValue(tool.inputSchema),\n\t\t...(tool.outputSchema === undefined ? {} : { outputSchema: toWireJsonValue(tool.outputSchema) }),\n\t\t...(tool.annotations === undefined ? {} : { annotations: toWireJsonValue(tool.annotations) }),\n\t\t...(tool.icons === undefined ? {} : { icons: tool.icons.map(toWireJsonValue) }),\n\t\t...(tool._meta === undefined ? {} : { _meta: toWireJsonValue(tool._meta) }),\n\t};\n}\n\nfunction mapWireResource(resource: ListedResource): McpWireResource {\n\treturn {\n\t\turi: resource.uri,\n\t\tname: resource.name,\n\t\t...(resource.title === undefined ? {} : { title: resource.title }),\n\t\t...(resource.description === undefined ? {} : { description: resource.description }),\n\t\t...(resource.mimeType === undefined ? {} : { mimeType: resource.mimeType }),\n\t\t...(resource.size === undefined ? {} : { size: resource.size }),\n\t\t...(resource.annotations === undefined ? {} : { annotations: toWireJsonValue(resource.annotations) }),\n\t\t...(resource.icons === undefined ? {} : { icons: resource.icons.map(toWireJsonValue) }),\n\t\t...(resource._meta === undefined ? {} : { _meta: toWireJsonValue(resource._meta) }),\n\t};\n}\n\nfunction mapWireResourceTemplate(template: ListedResourceTemplate): McpWireResourceTemplate {\n\treturn {\n\t\turiTemplate: template.uriTemplate,\n\t\tname: template.name,\n\t\t...(template.title === undefined ? {} : { title: template.title }),\n\t\t...(template.description === undefined ? {} : { description: template.description }),\n\t\t...(template.mimeType === undefined ? {} : { mimeType: template.mimeType }),\n\t\t...(template.annotations === undefined ? {} : { annotations: toWireJsonValue(template.annotations) }),\n\t\t...(template.icons === undefined ? {} : { icons: template.icons.map(toWireJsonValue) }),\n\t\t...(template._meta === undefined ? {} : { _meta: toWireJsonValue(template._meta) }),\n\t};\n}\n\nfunction toWireJsonValue(value: unknown): McpWireJsonValue {\n\tif (value === null || typeof value === \"boolean\" || typeof value === \"number\" || typeof value === \"string\") {\n\t\treturn value;\n\t}\n\tif (Array.isArray(value)) return value.map(toWireJsonValue);\n\tif (isRecord(value)) {\n\t\tconst object: Record<string, McpWireJsonValue | undefined> = {};\n\t\tfor (const [key, child] of Object.entries(value)) object[key] = toWireJsonValue(child);\n\t\treturn object;\n\t}\n\treturn null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction assertNever(value: never): never {\n\tthrow new Error(`Unhandled MCP auth mode: ${JSON.stringify(value)}`);\n}\n\nlet service: McpService | null = null;\n\nexport function getMcpService(): McpService {\n\tif (service === null || service.isDisposed()) {\n\t\tservice = new McpService();\n\t}\n\treturn service;\n}\n\nexport function shouldDisposeMcpService(reason: SessionShutdownEvent[\"reason\"]): reason is McpDisposeReason {\n\treturn reason === \"quit\" || reason === \"reload\";\n}\n\nasync function disposeEntryConnection(entry: McpConnectionEntry): Promise<void> {\n\tentry.disposeListChanged?.();\n\tentry.disposeWireStatus?.();\n\tdisposeMcpReconnect(entry.connection);\n\tdisposeMcpConnectionLifecycle(entry.connection);\n\tawait entry.connection.dispose();\n}\n\nexport function resetMcpServiceForTests(): void {\n\tservice = null;\n\tresetToolSearchServiceForTests();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport type { ExtensionAPI, ExtensionUIContext, SessionShutdownEvent, SessionStartEvent } from \"../../types.ts\";\nimport {\n\tgetToolSearchService,\n\tresetToolSearchServiceForTests,\n\ttype ToolSearchService,\n} from \"../tool-search/service.ts\";\nimport { detectLiteralBearerWarnings, resolveAuthMode, resolveServerAuth } from \"./auth/context.ts\";\nimport { collectToolCatalog } from \"./catalog.ts\";\nimport { getValidCachedServer, readMcpCatalogCache } from \"./catalog-cache.ts\";\nimport { loadMcpConfig, mergeExtensionMcpServers, resolveSkillMcpServer, visitSpawnableMcpServers } from \"./config.ts\";\nimport type { McpServerConfig, ResolvedMcpConfig, ResolvedMcpServer } from \"./config-schema.ts\";\nimport { ServerConnection } from \"./connection.ts\";\nimport { collectAllPages } from \"./expose/pagination.ts\";\nimport { mapMcpCatalogNames } from \"./expose/register.ts\";\nimport type { McpSessionRegistration } from \"./expose/session.ts\";\nimport type { McpServerExposureStatus } from \"./expose/status.ts\";\nimport { cleanupMcpOutputArtifacts, McpOutputArtifacts } from \"./guard/output-guard.ts\";\nimport { markMcpConnectionNeedsAuth } from \"./health.ts\";\nimport { configureMcpConnectionLifecycle, disposeMcpConnectionLifecycle } from \"./idle.ts\";\nimport { refreshMcpInstructionsForSession } from \"./instructions.ts\";\nimport { createMcpLogger } from \"./log.ts\";\nimport {\n\tbuildMcpTombstoneDefinition,\n\tcreateMcpListChangeCoalescer,\n\tdiffMcpToolNames,\n\tformatMcpListChangedDelta,\n} from \"./notifications.ts\";\nimport { configureMcpReconnect, disposeMcpReconnect, reconnectMcpNow } from \"./reconnect.ts\";\nimport type { McpResourceServer } from \"./resources.ts\";\nimport { getMcpServiceExposureStatus } from \"./service-exposure.ts\";\nimport { registerMcpServiceDirectTools } from \"./service-register.ts\";\nimport { buildMcpServerSnapshot } from \"./service-snapshot.ts\";\nimport type {\n\tMcpConnectionEntry,\n\tMcpDisposeReason,\n\tMcpServerSnapshot,\n\tMcpServiceSnapshot,\n\tMcpSessionContext,\n\tMcpSessionOptions,\n\tMcpWireAuthStatus,\n\tMcpWireJsonValue,\n\tMcpWireResource,\n\tMcpWireResourceTemplate,\n\tMcpWireServerInfo,\n\tMcpWireStatusServer,\n\tMcpWireStatusSnapshot,\n\tMcpWireTool,\n} from \"./service-types.ts\";\nimport {\n\tconnectAndRefreshMcpCatalog,\n\traceMcpStartupConnect,\n\tresolveMcpStartupTimeoutMs,\n\tshouldRaceMcpStartup,\n} from \"./startup-race.ts\";\n\ntype ListedTool = Awaited<ReturnType<Client[\"listTools\"]>>[\"tools\"][number];\ntype ListedResource = Awaited<ReturnType<Client[\"listResources\"]>>[\"resources\"][number];\ntype ListedResourceTemplate = Awaited<ReturnType<Client[\"listResourceTemplates\"]>>[\"resourceTemplates\"][number];\ntype McpElicitationUi = Pick<ExtensionUIContext, \"input\" | \"select\" | \"confirm\">;\n\nexport { registerToolsPreservingActiveSet } from \"./active-set.ts\";\n\nexport class McpService {\n\t#disposed = false;\n\t#disposeCount = 0;\n\t#lastDisposeReason: McpDisposeReason | null = null;\n\t#sessionContext: McpSessionContext | null = null;\n\t#sessionStartCount = 0;\n\t#lastSessionStartReason: SessionStartEvent[\"reason\"] | null = null;\n\t#toolRefreshGeneration = 0;\n\t#config: ResolvedMcpConfig | null = null;\n\t#authAgentDir: string | undefined;\n\t#authEnv: Record<string, string | undefined> | undefined;\n\t#elicitationUiProvider: (() => McpElicitationUi | undefined) | undefined;\n\t#mcpInstructions = \"\";\n\treadonly #pendingAuth = new Map<string, import(\"./auth/oauth-provider.ts\").McpOAuthProvider>();\n\treadonly #interactiveAuthServers = new Set<string>();\n\treadonly #promptCommandNames = new Set<string>();\n\treadonly #registrationListeners = new Set<() => void>();\n\treadonly #wireStatusListeners = new Set<(sessionId: string | undefined, snapshot: McpWireStatusSnapshot) => void>();\n\t#wireStatusRefreshQueue: Promise<void> = Promise.resolve();\n\t#refreshActiveSetWhenNoTools = false;\n\t#tierBRegistration: McpSessionRegistration | undefined;\n\t#toolSearchService: ToolSearchService | undefined;\n\t#sessionOptions: McpSessionOptions = {};\n\t#pi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\"> | undefined;\n\t#attachQueue: Promise<void> = Promise.resolve();\n\t#latestWireStatus: McpWireStatusSnapshot = { servers: [] };\n\treadonly #wireStatusBySession = new Map<string, McpWireStatusSnapshot>();\n\treadonly #connections = new Map<string, McpConnectionEntry>();\n\treadonly #connectionKeysByName = new Map<string, string>();\n\treadonly #outputArtifacts = new McpOutputArtifacts();\n\n\tasync attachSession(\n\t\tevent: SessionStartEvent,\n\t\tctx: McpSessionContext,\n\t\t_pi?: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n\t\toptions: McpSessionOptions = {},\n\t): Promise<void> {\n\t\tconst attach = this.#attachQueue.then(async () => {\n\t\t\tthis.#sessionContext = ctx;\n\t\t\tthis.#sessionStartCount += 1;\n\t\t\tthis.#lastSessionStartReason = event.reason;\n\t\t\tconst config = loadMcpConfig({\n\t\t\t\tagentDir: options.agentDir,\n\t\t\t\tcwd: ctx.cwd,\n\t\t\t\tenv: options.env,\n\t\t\t\tprojectTrusted: options.projectTrusted ?? ctx.isProjectTrusted(),\n\t\t\t});\n\t\t\tmergeExtensionMcpServers(config, ctx.getRegisteredMcpServers?.() ?? []);\n\t\t\tthis.#config = config;\n\t\t\tthis.#pi = _pi;\n\t\t\tif (_pi !== undefined) {\n\t\t\t\tconst activationRuntime = {\n\t\t\t\t\tgetActiveTools: () => _pi.getActiveTools(),\n\t\t\t\t\tsetActiveTools: (names: readonly string[]) => _pi.setActiveTools([...names]),\n\t\t\t\t};\n\t\t\t\ttry {\n\t\t\t\t\tthis.#toolSearchService = getToolSearchService();\n\t\t\t\t\tthis.#toolSearchService.bindActivationRuntime(activationRuntime);\n\t\t\t\t} catch {\n\t\t\t\t\tthis.#toolSearchService = getToolSearchService({ getAllTools: () => [], ...activationRuntime });\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.#authAgentDir = options.agentDir;\n\t\t\tthis.#authEnv = options.env;\n\t\t\tthis.#sessionOptions = options;\n\t\t\tconst toolRefreshGeneration = this.#toolRefreshGeneration + 1;\n\t\t\tthis.#toolRefreshGeneration = toolRefreshGeneration;\n\t\t\tawait this.#syncFromConfig(config, options, event.reason !== \"reload\", _pi, toolRefreshGeneration);\n\t\t\tif (_pi !== undefined) await this.#registerDirectTools(_pi);\n\t\t\t// Replay promotion markers from the (possibly resumed) session history\n\t\t\t// BEFORE the first turn: the request tool snapshot is taken before the\n\t\t\t// per-turn context event fires, so the context-event replay alone lands\n\t\t\t// one turn late. Doing it here puts restored tools on the very first\n\t\t\t// wire payload after a --continue/resume.\n\t\t\tif (_pi !== undefined) this.#rehydrateFromSessionHistory(ctx);\n\t\t\tif (shouldCaptureWireStatus(ctx)) await this.refreshWireStatusSnapshot(ctx.sessionManager?.getSessionId?.());\n\t\t});\n\t\tthis.#attachQueue = attach.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\tawait attach;\n\t}\n\n\t/**\n\t * Register skill-declared MCP servers (todo 37). Skill servers are forced\n\t * into search mode with no directTools, so their catalogs register with\n\t * ZERO active tools until activateSkillMcpTools reveals them. A name\n\t * collision with a system-configured server keeps the system config and\n\t * returns a warning (system wins).\n\t */\n\tasync attachSkillMcpServers(\n\t\tdeclared: ReadonlyMap<string, { raw: Parameters<typeof resolveSkillMcpServer>[1]; sourcePath: string }>,\n\t): Promise<string[]> {\n\t\tconst config = this.#config;\n\t\tconst pi = this.#pi;\n\t\tif (config === null || pi === undefined) return [];\n\t\tconst warnings: string[] = [];\n\t\tlet added = 0;\n\t\tfor (const [name, decl] of declared) {\n\t\t\tconst existing = config.servers[name];\n\t\t\tif (existing !== undefined && existing.source !== \"skill\") {\n\t\t\t\twarnings.push(\n\t\t\t\t\t`MCP server '${name}' from skill ${decl.sourcePath} collides with the ${existing.source} config; system config wins.`,\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst resolved = resolveSkillMcpServer(name, decl.raw, decl.sourcePath);\n\t\t\tif (existing !== undefined && existing.configHash === resolved.configHash) continue;\n\t\t\tconfig.servers[name] = resolved;\n\t\t\tadded += 1;\n\t\t}\n\t\tif (added > 0) {\n\t\t\tconst toolRefreshGeneration = this.#toolRefreshGeneration + 1;\n\t\t\tthis.#toolRefreshGeneration = toolRefreshGeneration;\n\t\t\tawait this.#syncFromConfig(config, this.#sessionOptions, false, pi, toolRefreshGeneration);\n\t\t\tawait this.#registerDirectTools(pi);\n\t\t\tif (this.#sessionContext !== null && shouldCaptureWireStatus(this.#sessionContext)) {\n\t\t\t\tawait this.refreshWireStatusSnapshot(this.#sessionContext.sessionManager?.getSessionId?.());\n\t\t\t}\n\t\t}\n\t\treturn warnings;\n\t}\n\n\t/** Registered searchable catalog (mapped name + server-side tool name),\n\t * used by the skills loader to compute activation targets. */\n\tgetTierBSearchable(): ReadonlyArray<{ name: string; toolName: string; server: string }> {\n\t\treturn this.#tierBRegistration?.searchable ?? [];\n\t}\n\n\t/** Connected servers that list prompts (todo 40), for slash registration. */\n\tgetMcpPromptServers(): readonly import(\"./prompts.ts\").McpPromptServer[] {\n\t\treturn this.#tierBRegistration?.promptServers ?? [];\n\t}\n\n\t/** Connected servers that list resources (todo 39), for mention expansion. */\n\tgetMcpResourceServers(): readonly McpResourceServer[] {\n\t\treturn this.#tierBRegistration?.resourceServers ?? [];\n\t}\n\n\t/** Subscribe to completed catalog registrations. Consumers must inspect the\n\t * resulting snapshot because tool, resource, and prompt catalogs can become\n\t * available in different startup-race generations. */\n\tonMcpRegistrationChanged(listener: () => void): () => void {\n\t\tthis.#registrationListeners.add(listener);\n\t\treturn () => this.#registrationListeners.delete(listener);\n\t}\n\n\t/** Subscribe to live MCP inventory transitions for session-scoped hosts. */\n\tonWireStatusChanged(listener: (sessionId: string | undefined, snapshot: McpWireStatusSnapshot) => void): () => void {\n\t\tthis.#wireStatusListeners.add(listener);\n\t\treturn () => this.#wireStatusListeners.delete(listener);\n\t}\n\n\t/** Refresh and return the current session-owned MCP wire inventory. */\n\tasync refreshWireStatusSnapshot(sessionId?: string): Promise<McpWireStatusSnapshot> {\n\t\tconst refresh = this.#wireStatusRefreshQueue.then(() => this.#captureWireStatus(sessionId));\n\t\tthis.#wireStatusRefreshQueue = refresh.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\tawait refresh;\n\t\treturn this.getWireStatusSnapshot(sessionId);\n\t}\n\n\t/** Reveal skill-owned tools (todo 37): activation is effective the next\n\t * turn, exactly like an tool_search promotion. Unknown names are ignored. */\n\tactivateSkillMcpTools(names: readonly string[]): void {\n\t\tthis.#tierBRegistration?.activate(names);\n\t}\n\n\t#rehydrateFromSessionHistory(ctx: McpSessionContext): void {\n\t\tconst entries = ctx.sessionManager?.getEntries() ?? [];\n\t\tif (entries.length === 0) return;\n\t\tthis.rehydrateActiveToolsFromHistory(entries);\n\t}\n\n\tasync handleSessionShutdown(event: SessionShutdownEvent): Promise<void> {\n\t\tif (shouldDisposeMcpService(event.reason)) await this.dispose(event.reason);\n\t}\n\n\tasync dispose(reason: McpDisposeReason): Promise<void> {\n\t\tif (this.#disposed) return;\n\t\tthis.#disposed = true;\n\t\tthis.#disposeCount += 1;\n\t\tthis.#lastDisposeReason = reason;\n\t\tthis.#sessionContext = null;\n\t\tthis.#config = null;\n\t\tthis.#elicitationUiProvider = undefined;\n\t\tthis.#mcpInstructions = \"\";\n\t\tthis.#pendingAuth.clear();\n\t\tthis.#interactiveAuthServers.clear();\n\t\tthis.#promptCommandNames.clear();\n\t\tthis.#registrationListeners.clear();\n\t\tthis.#wireStatusListeners.clear();\n\t\tthis.#wireStatusBySession.clear();\n\t\tthis.#latestWireStatus = { servers: [] };\n\t\tconst entries = [...this.#connections.values()];\n\t\tthis.#connections.clear();\n\t\tthis.#connectionKeysByName.clear();\n\t\tawait Promise.all(entries.map((entry) => disposeEntryConnection(entry)));\n\t\tawait cleanupMcpOutputArtifacts(this.#outputArtifacts);\n\t}\n\n\tgetMcpOutputArtifacts(): McpOutputArtifacts {\n\t\treturn this.#outputArtifacts;\n\t}\n\n\tisDisposed(): boolean {\n\t\treturn this.#disposed;\n\t}\n\n\tgetConnection(name: string): ServerConnection | undefined {\n\t\tconst key = this.#connectionKeysByName.get(name);\n\t\treturn key === undefined ? undefined : this.#connections.get(key)?.connection;\n\t}\n\n\tasync reconnectServer(name: string): Promise<void> {\n\t\tconst entry = this.#entryForName(name);\n\t\tif (entry === undefined) throw new Error(`Unknown MCP server: ${name || \"<missing>\"}`);\n\t\tawait reconnectMcpNow(entry.connection);\n\t}\n\n\tgetServerSnapshots(): McpServerSnapshot[] {\n\t\tconst names = new Set<string>(Object.keys(this.#config?.servers ?? {}));\n\t\tfor (const entry of this.#connections.values()) names.add(entry.name);\n\t\treturn [...names].sort().map((name) => this.#serverSnapshot(name));\n\t}\n\n\tgetLogLines(name: string, maxLines: number): string[] {\n\t\tconst key = this.#connectionKeysByName.get(name);\n\t\tconst lines = key === undefined ? [] : (this.#connections.get(key)?.logger.getRingBuffer() ?? []);\n\t\treturn lines.slice(Math.max(0, lines.length - maxLines));\n\t}\n\n\tasync getServerExposureStatus(name: string): Promise<McpServerExposureStatus> {\n\t\treturn await getMcpServiceExposureStatus(name, this.#config, this.#entryForName(name));\n\t}\n\n\trecordCall(name: string, elapsedMs: number, failed: boolean): void {\n\t\tconst key = this.#connectionKeysByName.get(name);\n\t\tconst entry = key === undefined ? undefined : this.#connections.get(key);\n\t\tif (entry === undefined) return;\n\t\tentry.counters.callCount += 1;\n\t\tentry.counters.totalLatencyMs += elapsedMs;\n\t\tif (failed) entry.counters.errorCount += 1;\n\t}\n\n\tgetSnapshot(): McpServiceSnapshot {\n\t\treturn {\n\t\t\tdisposed: this.#disposed,\n\t\t\tdisposeCount: this.#disposeCount,\n\t\t\tlastDisposeReason: this.#lastDisposeReason,\n\t\t\tsessionStartCount: this.#sessionStartCount,\n\t\t\tlastSessionStartReason: this.#lastSessionStartReason,\n\t\t\thasSessionContext: this.#sessionContext !== null,\n\t\t\tconnectionCount: this.#connections.size,\n\t\t};\n\t}\n\n\t/**\n\t * Return the attach-time inventory captured for one session. This is the\n\t * handoff consumed by the app-server's session-owned adapter; it deliberately\n\t * does not expose or derive from the lifecycle-only server snapshots.\n\t */\n\tgetWireStatusSnapshot(sessionId?: string): McpWireStatusSnapshot {\n\t\treturn sessionId === undefined\n\t\t\t? this.#latestWireStatus\n\t\t\t: (this.#wireStatusBySession.get(sessionId) ?? { servers: [] });\n\t}\n\n\tasync #syncFromConfig(\n\t\tconfig: ResolvedMcpConfig,\n\t\toptions: McpSessionOptions,\n\t\tuseCache: boolean,\n\t\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\"> | undefined,\n\t\ttoolRefreshGeneration: number,\n\t): Promise<void> {\n\t\tconst cache = await readMcpCatalogCache(options.agentDir);\n\t\tconst hadConnectionsBeforeSync = this.#connections.size > 0;\n\t\tthis.#refreshActiveSetWhenNoTools = Object.keys(config.servers).length > 0 || hadConnectionsBeforeSync;\n\t\tconst wanted = new Map<string, ResolvedMcpServer>();\n\t\tvisitSpawnableMcpServers(config, (name, server) => {\n\t\t\twanted.set(name, server);\n\t\t});\n\t\tconst disposals: Promise<void>[] = [];\n\t\tfor (const entry of this.#connections.values()) {\n\t\t\tconst server = wanted.get(entry.name);\n\t\t\tconst key = server?.configHash === undefined ? undefined : `${entry.name}\\0${server.configHash}`;\n\t\t\tif (key === entry.key) continue;\n\t\t\tthis.#connections.delete(entry.key);\n\t\t\tthis.#connectionKeysByName.delete(entry.name);\n\t\t\tdisposals.push(disposeEntryConnection(entry));\n\t\t}\n\t\tawait Promise.all(disposals);\n\n\t\tconst connects: Promise<void>[] = [];\n\t\tfor (const [name, server] of wanted) {\n\t\t\tif (server.config === undefined || server.configHash === undefined) continue;\n\t\t\tconst key = `${name}\\0${server.configHash}`;\n\t\t\tif (this.#connections.has(key)) continue;\n\t\t\tconst logger = createMcpLogger(name, { logDir: options.logDir });\n\t\t\tconst authPlan = resolveServerAuth({\n\t\t\t\tagentDir: options.agentDir,\n\t\t\t\tconfig: server.config,\n\t\t\t\tenv: options.env,\n\t\t\t\tlogger,\n\t\t\t\tserverName: name,\n\t\t\t});\n\t\t\tfor (const warning of detectLiteralBearerWarnings(name, server.config)) logger.warn(warning);\n\t\t\tconst connection = new ServerConnection({\n\t\t\t\tauthProvider: authPlan.provider,\n\t\t\t\tconfig: server.config,\n\t\t\t\tenv: options.env,\n\t\t\t\telicitationUiProvider: () => this.getMcpElicitationUi(),\n\t\t\t\tlogger,\n\t\t\t\tserverName: name,\n\t\t\t});\n\t\t\tconst cachedCatalog = useCache ? getValidCachedServer(cache, name, server.configHash) : undefined;\n\t\t\tconst entry: McpConnectionEntry = {\n\t\t\t\tagentDir: options.agentDir,\n\t\t\t\tartifacts: this.#outputArtifacts,\n\t\t\t\tauthPlan,\n\t\t\t\tcacheRefreshedAfterConnect: false,\n\t\t\t\tcachedCatalog,\n\t\t\t\tkey,\n\t\t\t\tname,\n\t\t\t\tconfigHash: server.configHash,\n\t\t\t\tconnection,\n\t\t\t\tlogger,\n\t\t\t\tcreatedAtMs: Date.now(),\n\t\t\t\tcounters: { callCount: 0, errorCount: 0, totalLatencyMs: 0, reconnectCount: 0 },\n\t\t\t};\n\t\t\tconfigureMcpConnectionLifecycle(connection, server.config, logger);\n\t\t\tconfigureMcpReconnect({\n\t\t\t\tconnection,\n\t\t\t\tlogger,\n\t\t\t\treconnect: async () => {\n\t\t\t\t\tentry.counters.reconnectCount += 1;\n\t\t\t\t\tentry.cacheRefreshedAfterConnect = false;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait entry.authPlan?.refresh?.ensureFresh();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst authError = markMcpConnectionNeedsAuth(entry.connection, error);\n\t\t\t\t\t\tif (authError !== undefined) {\n\t\t\t\t\t\t\tentry.logger.warn(authError.message);\n\t\t\t\t\t\t\tthrow authError;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tawait entry.connection.renew();\n\t\t\t\t\tawait connectAndRefreshMcpCatalog(entry, server.config);\n\t\t\t\t},\n\t\t\t\tshouldReconnect: () => !this.#disposed && this.#entryForName(name) === entry,\n\t\t\t});\n\t\t\tthis.#connections.set(key, entry);\n\t\t\tthis.#connectionKeysByName.set(name, key);\n\t\t\tthis.#wireListChanged(entry);\n\t\t\t// Every startup connect is bounded by the startup race and continues in\n\t\t\t// the background past the deadline (eager/keep-alive always; a cold lazy\n\t\t\t// server that has no cached catalog also races so a slow/wedged server\n\t\t\t// never gates attachSession -> before_agent_start -> the first turn).\n\t\t\t// A cached lazy server needs no startup connect: its tools come from the\n\t\t\t// cache and it connects on demand at tool-call time.\n\t\t\tif (shouldRaceMcpStartup(server.config.lifecycle) || cachedCatalog === undefined) {\n\t\t\t\tconnects.push(\n\t\t\t\t\traceMcpStartupConnect({\n\t\t\t\t\t\tentry,\n\t\t\t\t\t\tpi,\n\t\t\t\t\t\tregisterDirectTools: async (targetPi) => {\n\t\t\t\t\t\t\tawait this.#registerDirectTools(targetPi);\n\t\t\t\t\t\t\t// A raced attach ran its history replay before this catalog\n\t\t\t\t\t\t\t// existed; replay now so restored tools still land on the\n\t\t\t\t\t\t\t// first turn's payload (idempotent: already-active names skip).\n\t\t\t\t\t\t\tif (this.#sessionContext !== null) this.#rehydrateFromSessionHistory(this.#sessionContext);\n\t\t\t\t\t\t\t// The session instructions block was likewise captured at attach\n\t\t\t\t\t\t\t// time, before this server connected; rebuild it so the first\n\t\t\t\t\t\t\t// turn carries this server's instructions after a raced connect.\n\t\t\t\t\t\t\trefreshMcpInstructionsForSession(this);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tserverConfig: server.config,\n\t\t\t\t\t\tshouldRefreshTools: () => !this.#disposed && this.#toolRefreshGeneration === toolRefreshGeneration,\n\t\t\t\t\t\tdeadlineMs: resolveMcpStartupTimeoutMs(server.config.startupTimeoutMs),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tawait Promise.all(connects);\n\t}\n\n\t#wireListChanged(entry: McpConnectionEntry): void {\n\t\tconst sink = { logger: { error: (message: string, data?: unknown) => entry.logger.error(message, data) } };\n\t\tconst coalescer = createMcpListChangeCoalescer({\n\t\t\tonRefresh: () => this.#handleServerToolsChanged(entry),\n\t\t\tscope: `mcp.list_changed.${entry.name}`,\n\t\t\tsink,\n\t\t});\n\t\tconst unsubscribe = entry.connection.onToolsChanged(() => coalescer.notify());\n\t\tconst unsubscribeState = entry.connection.onStateChange(() => {\n\t\t\tconst ctx = this.#sessionContext;\n\t\t\tif (ctx?.mode !== \"rpc\") return;\n\t\t\tvoid this.refreshWireStatusSnapshot(ctx.sessionManager?.getSessionId?.()).catch((error: unknown) => {\n\t\t\t\tentry.logger.error(\"Failed to refresh MCP control inventory\", error);\n\t\t\t});\n\t\t});\n\t\tentry.disposeListChanged = () => {\n\t\t\tunsubscribe();\n\t\t\tcoalescer.dispose();\n\t\t};\n\t\tentry.disposeWireStatus = unsubscribeState;\n\t}\n\n\t// Re-list a server on a coalesced list_changed and re-register: added tools\n\t// enter INACTIVE (registerToolsPreservingActiveSet keeps the active set), and\n\t// removed tools are tombstoned so a stale call fails cleanly.\n\tasync #handleServerToolsChanged(entry: McpConnectionEntry): Promise<void> {\n\t\tconst pi = this.#pi;\n\t\tconst config = this.#config;\n\t\tif (pi === undefined || config === null) return;\n\t\tconst server = config.servers[entry.name];\n\t\tif (server?.config === undefined || entry.connection.state !== \"connected\") return;\n\t\tconst catalog = await collectToolCatalog(entry.name, entry.connection, server.config, {\n\t\t\tagentDir: entry.agentDir,\n\t\t\toutputGuard: config.settings.outputGuard,\n\t\t});\n\t\tconst newNames = mapMcpCatalogNames(catalog).map(({ name }) => name);\n\t\tconst diff = diffMcpToolNames(entry.knownToolNames ?? newNames, newNames);\n\t\t// Tombstone removed tools BEFORE re-registration so the subsequent\n\t\t// setActiveTools (which excludes them) leaves the tombstones inactive.\n\t\tfor (const removed of diff.removed) pi.registerTool(buildMcpTombstoneDefinition(removed, entry.name));\n\t\tawait this.#registerDirectTools(pi);\n\t\tentry.knownToolNames = newNames;\n\t\tentry.lastListChangedDelta = formatMcpListChangedDelta(diff);\n\t}\n\n\tasync #registerDirectTools(\n\t\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n\t): Promise<void> {\n\t\tconst config = this.#config;\n\t\tif (config === null) return;\n\t\tconst toolSearchService = this.#toolSearchService;\n\t\tif (toolSearchService === undefined) return;\n\t\tthis.#tierBRegistration = await registerMcpServiceDirectTools(\n\t\t\tpi,\n\t\t\tconfig,\n\t\t\tthis.#connections.values(),\n\t\t\ttoolSearchService,\n\t\t\t{\n\t\t\t\trefreshActiveSetWhenEmpty: this.#refreshActiveSetWhenNoTools,\n\t\t\t},\n\t\t);\n\t\tconst ctx = this.#sessionContext;\n\t\tif (ctx?.mode === \"rpc\") {\n\t\t\tawait this.refreshWireStatusSnapshot(ctx.sessionManager?.getSessionId?.());\n\t\t}\n\t\tfor (const listener of this.#registrationListeners) listener();\n\t}\n\n\t/** Route compatibility callers through the shared ownership-aware scanner. */\n\trehydrateActiveToolsFromHistory(messages: readonly unknown[]): string[] {\n\t\treturn this.#toolSearchService?.maybeRehydrateFromHistory(messages) ?? [];\n\t}\n\n\t/** Shared service memoization keeps this scan once-per-catalog-generation. */\n\tmaybeRehydrateFromHistory(messages: readonly unknown[]): string[] {\n\t\treturn this.#toolSearchService?.maybeRehydrateFromHistory(messages) ?? [];\n\t}\n\n\t#serverSnapshot(name: string): McpServerSnapshot {\n\t\tconst connection = this.getConnection(name);\n\t\tconnection?.refreshCapturedDiagnostics();\n\t\treturn buildMcpServerSnapshot(name, this.#config?.servers[name], connection, this.#entryForName(name));\n\t}\n\n\tasync #captureWireStatus(sessionId: string | undefined): Promise<void> {\n\t\tconst config = this.#config;\n\t\tif (config === null) return;\n\t\tconst servers = await Promise.all(\n\t\t\tObject.keys(config.servers)\n\t\t\t\t.sort()\n\t\t\t\t.map((name) => this.#captureWireStatusServer(name, config.servers[name])),\n\t\t);\n\t\tconst snapshot: McpWireStatusSnapshot = { servers };\n\t\tconst previous = this.getWireStatusSnapshot(sessionId);\n\t\tthis.#latestWireStatus = snapshot;\n\t\tif (sessionId !== undefined) this.#wireStatusBySession.set(sessionId, snapshot);\n\t\tif (JSON.stringify(previous) === JSON.stringify(snapshot)) return;\n\t\tfor (const listener of this.#wireStatusListeners) listener(sessionId, snapshot);\n\t}\n\n\tasync #captureWireStatusServer(name: string, server: ResolvedMcpServer | undefined): Promise<McpWireStatusServer> {\n\t\tconst entry = this.#entryForName(name);\n\t\tconst connection = entry?.connection;\n\t\tconst connected = connection?.state === \"connected\";\n\t\tconst cached = entry?.cachedCatalog;\n\t\tlet tools = cached?.tools ?? [];\n\t\tlet resources = cached?.resources ?? [];\n\t\tlet resourceTemplates: ListedResourceTemplate[] = [];\n\t\tlet serverInfo: McpWireServerInfo | null = null;\n\n\t\tif (connected && connection !== undefined) {\n\t\t\tconst client = connection.client;\n\t\t\tconst version = client.getServerVersion();\n\t\t\tif (version !== undefined) serverInfo = mapWireServerInfo(version);\n\t\t\ttry {\n\t\t\t\ttools = (\n\t\t\t\t\tawait collectAllPages<ListedTool>((cursor) => client.listTools(cursor === undefined ? {} : { cursor }))\n\t\t\t\t).items;\n\t\t\t} catch (error: unknown) {\n\t\t\t\tif (!(error instanceof Error)) throw error;\n\t\t\t\ttools = cached?.tools ?? [];\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tresources = (\n\t\t\t\t\tawait collectAllPages<ListedResource>((cursor) =>\n\t\t\t\t\t\tclient.listResources(cursor === undefined ? {} : { cursor }),\n\t\t\t\t\t)\n\t\t\t\t).items;\n\t\t\t} catch (error: unknown) {\n\t\t\t\tif (!(error instanceof Error)) throw error;\n\t\t\t\tresources = cached?.resources ?? [];\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tresourceTemplates = (\n\t\t\t\t\tawait collectAllPages<ListedResourceTemplate>((cursor) =>\n\t\t\t\t\t\tclient.listResourceTemplates(cursor === undefined ? {} : { cursor }),\n\t\t\t\t\t)\n\t\t\t\t).items;\n\t\t\t} catch (error: unknown) {\n\t\t\t\tif (!(error instanceof Error)) throw error;\n\t\t\t\tresourceTemplates = [];\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tname,\n\t\t\tserverInfo,\n\t\t\ttools: tools.map(mapWireTool),\n\t\t\tresources: resources.map(mapWireResource),\n\t\t\tresourceTemplates: resourceTemplates.map(mapWireResourceTemplate),\n\t\t\tauthStatus: wireAuthStatus(entry, server),\n\t\t\t...(connection?.state === undefined && server?.state === undefined\n\t\t\t\t? {}\n\t\t\t\t: { status: connection?.state ?? server?.state }),\n\t\t};\n\t}\n\n\t#entryForName(name: string): McpConnectionEntry | undefined {\n\t\tconst key = this.#connectionKeysByName.get(name);\n\t\treturn key === undefined ? undefined : this.#connections.get(key);\n\t}\n\n\tsetMcpInstructions(instructions: string): void {\n\t\tthis.#mcpInstructions = instructions;\n\t}\n\n\tgetMcpInstructions(): string {\n\t\treturn this.#mcpInstructions;\n\t}\n\n\tsetMcpElicitationUiProvider(provider: (() => McpElicitationUi | undefined) | undefined): void {\n\t\tthis.#elicitationUiProvider = provider;\n\t}\n\n\tgetMcpElicitationUi(): McpElicitationUi | undefined {\n\t\treturn this.#elicitationUiProvider?.();\n\t}\n\n\tisMcpPromptCommandRegistered(name: string): boolean {\n\t\treturn this.#promptCommandNames.has(name);\n\t}\n\n\tmarkMcpPromptCommandRegistered(name: string): void {\n\t\tthis.#promptCommandNames.add(name);\n\t}\n\n\tbeginInteractiveAuth(serverName: string): boolean {\n\t\tif (this.#interactiveAuthServers.has(serverName)) return false;\n\t\tthis.#interactiveAuthServers.add(serverName);\n\t\treturn true;\n\t}\n\n\tendInteractiveAuth(serverName: string): void {\n\t\tthis.#interactiveAuthServers.delete(serverName);\n\t}\n\n\tgetPendingAuth(): Map<string, import(\"./auth/oauth-provider.ts\").McpOAuthProvider> {\n\t\treturn this.#pendingAuth;\n\t}\n\n\tgetAuthTarget(\n\t\tname: string,\n\t):\n\t\t| { config: McpServerConfig; agentDir?: string; env?: Record<string, string | undefined>; callbackUrl?: string }\n\t\t| undefined {\n\t\tconst server = this.#config?.servers[name];\n\t\tif (server?.config === undefined) return undefined;\n\t\treturn {\n\t\t\tconfig: server.config,\n\t\t\tagentDir: this.#authAgentDir,\n\t\t\tenv: this.#authEnv,\n\t\t\tcallbackUrl: this.#config?.settings.oauthCallbackUrl,\n\t\t};\n\t}\n\n\tgetCachedInstructions(name: string): string | undefined {\n\t\treturn this.#entryForName(name)?.cachedCatalog?.instructions;\n\t}\n\n\t/** Resolved `settings.nativeToolSearch` (auto | true | false | undefined).\n\t * Drives the native provider tool-search adapter gate. */\n\tgetNativeToolSearchSetting(): \"auto\" | boolean | undefined {\n\t\treturn this.#config?.settings.nativeToolSearch;\n\t}\n}\n\nfunction wireAuthStatus(\n\tentry: McpConnectionEntry | undefined,\n\tserver: ResolvedMcpServer | undefined,\n): McpWireAuthStatus {\n\tconst mode = entry?.authPlan?.mode ?? (server?.config === undefined ? \"none\" : resolveAuthMode(server.config));\n\tswitch (mode) {\n\t\tcase \"none\":\n\t\t\treturn \"unsupported\";\n\t\tcase \"bearer\":\n\t\t\treturn entry?.connection.state === \"needs_auth\" ? \"notLoggedIn\" : \"bearerToken\";\n\t\tcase \"oauth\":\n\t\t\treturn entry?.authPlan?.provider?.tokens() === undefined ? \"notLoggedIn\" : \"oAuth\";\n\t\tdefault:\n\t\t\treturn assertNever(mode);\n\t}\n}\n\nfunction shouldCaptureWireStatus(ctx: McpSessionContext): boolean {\n\treturn ctx.mode === \"app-server\" || ctx.mode === \"rpc\";\n}\n\nfunction mapWireServerInfo(info: NonNullable<ReturnType<Client[\"getServerVersion\"]>>): McpWireServerInfo {\n\treturn {\n\t\tname: info.name,\n\t\ttitle: info.title ?? null,\n\t\tversion: info.version,\n\t\tdescription: info.description ?? null,\n\t\ticons: info.icons?.map(toWireJsonValue) ?? null,\n\t\twebsiteUrl: info.websiteUrl ?? null,\n\t};\n}\n\nfunction mapWireTool(tool: ListedTool): McpWireTool {\n\treturn {\n\t\tname: tool.name,\n\t\t...(tool.title === undefined ? {} : { title: tool.title }),\n\t\t...(tool.description === undefined ? {} : { description: tool.description }),\n\t\tinputSchema: toWireJsonValue(tool.inputSchema),\n\t\t...(tool.outputSchema === undefined ? {} : { outputSchema: toWireJsonValue(tool.outputSchema) }),\n\t\t...(tool.annotations === undefined ? {} : { annotations: toWireJsonValue(tool.annotations) }),\n\t\t...(tool.icons === undefined ? {} : { icons: tool.icons.map(toWireJsonValue) }),\n\t\t...(tool._meta === undefined ? {} : { _meta: toWireJsonValue(tool._meta) }),\n\t};\n}\n\nfunction mapWireResource(resource: ListedResource): McpWireResource {\n\treturn {\n\t\turi: resource.uri,\n\t\tname: resource.name,\n\t\t...(resource.title === undefined ? {} : { title: resource.title }),\n\t\t...(resource.description === undefined ? {} : { description: resource.description }),\n\t\t...(resource.mimeType === undefined ? {} : { mimeType: resource.mimeType }),\n\t\t...(resource.size === undefined ? {} : { size: resource.size }),\n\t\t...(resource.annotations === undefined ? {} : { annotations: toWireJsonValue(resource.annotations) }),\n\t\t...(resource.icons === undefined ? {} : { icons: resource.icons.map(toWireJsonValue) }),\n\t\t...(resource._meta === undefined ? {} : { _meta: toWireJsonValue(resource._meta) }),\n\t};\n}\n\nfunction mapWireResourceTemplate(template: ListedResourceTemplate): McpWireResourceTemplate {\n\treturn {\n\t\turiTemplate: template.uriTemplate,\n\t\tname: template.name,\n\t\t...(template.title === undefined ? {} : { title: template.title }),\n\t\t...(template.description === undefined ? {} : { description: template.description }),\n\t\t...(template.mimeType === undefined ? {} : { mimeType: template.mimeType }),\n\t\t...(template.annotations === undefined ? {} : { annotations: toWireJsonValue(template.annotations) }),\n\t\t...(template.icons === undefined ? {} : { icons: template.icons.map(toWireJsonValue) }),\n\t\t...(template._meta === undefined ? {} : { _meta: toWireJsonValue(template._meta) }),\n\t};\n}\n\nfunction toWireJsonValue(value: unknown): McpWireJsonValue {\n\tif (value === null || typeof value === \"boolean\" || typeof value === \"number\" || typeof value === \"string\") {\n\t\treturn value;\n\t}\n\tif (Array.isArray(value)) return value.map(toWireJsonValue);\n\tif (isRecord(value)) {\n\t\tconst object: Record<string, McpWireJsonValue | undefined> = {};\n\t\tfor (const [key, child] of Object.entries(value)) object[key] = toWireJsonValue(child);\n\t\treturn object;\n\t}\n\treturn null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction assertNever(value: never): never {\n\tthrow new Error(`Unhandled MCP auth mode: ${JSON.stringify(value)}`);\n}\n\nlet service: McpService | null = null;\n\nexport function getMcpService(): McpService {\n\tif (service === null || service.isDisposed()) {\n\t\tservice = new McpService();\n\t}\n\treturn service;\n}\n\nexport function shouldDisposeMcpService(reason: SessionShutdownEvent[\"reason\"]): reason is McpDisposeReason {\n\treturn reason === \"quit\" || reason === \"reload\";\n}\n\nasync function disposeEntryConnection(entry: McpConnectionEntry): Promise<void> {\n\tentry.disposeListChanged?.();\n\tentry.disposeWireStatus?.();\n\tdisposeMcpReconnect(entry.connection);\n\tdisposeMcpConnectionLifecycle(entry.connection);\n\tawait entry.connection.dispose();\n}\n\nexport function resetMcpServiceForTests(): void {\n\tservice = null;\n\tresetToolSearchServiceForTests();\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/nested-agents-md/core/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,sBAAuB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/nested-agents-md/core/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,sBAAuB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAY,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAKvC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injection-cache.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/nested-agents-md/core/injection-cache.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAE3D,OAAO,CAAC,WAAW;IASnB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"injection-cache.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/nested-agents-md/core/injection-cache.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAE3D,OAAO,CAAC,WAAW;IASnB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAE7D;IAED,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAE3D;IAED,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvC;IAED,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAGzC;IAED,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAErC;IAED,QAAQ,IAAI,IAAI,CAEf;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/nested-agents-md/core/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/nested-agents-md/core/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,YAAI,WAAW,CAAU,CAAC;AACzD,eAAO,MAAM,0BAA0B,QAAY,CAAC;AACpD,eAAO,MAAM,0BAA0B,QAAa,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -3,11 +3,16 @@
|
|
|
3
3
|
* a slash command such as `/gpt-account add`, mirroring what the `/login`
|
|
4
4
|
* dialog and `modes/rpc/login-prompts.ts` do for their surfaces.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* Three decisions are not visible from the code alone. The login owns its own
|
|
7
|
+
* `AbortController` rather than borrowing `ctx.signal`: that signal belongs to
|
|
8
|
+
* the active run, so binding a login to it made Esc/steer/timeout on the
|
|
9
|
+
* response kill a browser login the user never acted on (#1542). The login is
|
|
10
|
+
* cancelled only by dismissing one of its own dialogs or by re-issuing the
|
|
11
|
+
* command for the same provider. Every dialog is also bound to the per-prompt
|
|
12
|
+
* `AuthPrompt.signal`, so a manual-code dialog is released without cancelling
|
|
13
|
+
* the login when the provider's local callback server wins the race
|
|
14
|
+
* (`loginOpenAICodex`). `auth_url` opens the browser only in the TUI, because
|
|
15
|
+
* an RPC client renders the notice on its own machine.
|
|
11
16
|
*/
|
|
12
17
|
import type { AuthInteraction } from "@earendil-works/pi-ai";
|
|
13
18
|
import type { ExtensionCommandContext } from "../types.ts";
|
|
@@ -15,10 +20,12 @@ export declare const LOGIN_CANCELLED_MESSAGE = "Login cancelled";
|
|
|
15
20
|
export interface ExtensionLoginInteractionOptions {
|
|
16
21
|
/** Provider name rendered in notices, e.g. "OpenAI Codex OAuth". */
|
|
17
22
|
readonly providerLabel: string;
|
|
23
|
+
/** Provider id; a later login for the same id cancels this one. */
|
|
24
|
+
readonly providerId?: string | undefined;
|
|
18
25
|
/** Browser launcher for `auth_url` events in the TUI; tests inject a recorder. */
|
|
19
26
|
readonly openBrowser?: ((url: string) => void) | undefined;
|
|
20
27
|
}
|
|
21
|
-
type LoginCommandContext = Pick<ExtensionCommandContext, "mode" | "
|
|
28
|
+
type LoginCommandContext = Pick<ExtensionCommandContext, "mode" | "ui">;
|
|
22
29
|
export declare function createExtensionLoginInteraction(ctx: LoginCommandContext, options: ExtensionLoginInteractionOptions): AuthInteraction;
|
|
23
30
|
export {};
|
|
24
31
|
//# sourceMappingURL=oauth-login-interaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-login-interaction.d.ts","sourceRoot":"","sources":["../../../../src/core/extensions/builtin/oauth-login-interaction.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"oauth-login-interaction.d.ts","sourceRoot":"","sources":["../../../../src/core/extensions/builtin/oauth-login-interaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAa,eAAe,EAAc,MAAM,uBAAuB,CAAC;AAEpF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3D,eAAO,MAAM,uBAAuB,oBAAoB,CAAC;AAEzD,MAAM,WAAW,gCAAgC;IAChD,oEAAoE;IACpE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,mEAAmE;IACnE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,kFAAkF;IAClF,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC3D;AAED,KAAK,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AAuBxE,wBAAgB,+BAA+B,CAC9C,GAAG,EAAE,mBAAmB,EACxB,OAAO,EAAE,gCAAgC,GACvC,eAAe,CAQjB"}
|