@code-yeongyu/senpi 2026.7.23 → 2026.7.24
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 +131 -6
- package/README.md +14 -1
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +6 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.js +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +15 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +12 -2
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts +102 -4
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +1295 -320
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +7 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +8 -12
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +22 -4
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +114 -51
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/lifecycle.d.ts +69 -0
- package/dist/core/compaction/lifecycle.d.ts.map +1 -0
- package/dist/core/compaction/lifecycle.js +104 -0
- package/dist/core/compaction/lifecycle.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +12 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js +22 -17
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js +11 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.d.ts +2 -1
- package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js +42 -30
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-model.d.ts +9 -2
- package/dist/core/extensions/builtin/compaction/openai-remote-model.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-model.js +78 -28
- package/dist/core/extensions/builtin/compaction/openai-remote-model.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-schema.d.ts +3 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-schema.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-schema.js +19 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-schema.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote.d.ts +20 -6
- package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote.js +207 -22
- package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.d.ts +4 -2
- package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.js +25 -13
- package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
- package/dist/core/extensions/builtin/config-reload/index.d.ts +7 -0
- package/dist/core/extensions/builtin/config-reload/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/config-reload/index.js +49 -17
- package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/index.js +1 -1
- package/dist/core/extensions/builtin/hooks/index.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/lifecycle-adapter.d.ts +3 -1
- package/dist/core/extensions/builtin/hooks/lifecycle-adapter.d.ts.map +1 -1
- package/dist/core/extensions/builtin/hooks/lifecycle-adapter.js +2 -1
- package/dist/core/extensions/builtin/hooks/lifecycle-adapter.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.d.ts +2 -1
- package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.js +5 -3
- package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/commands-auth.d.ts +5 -0
- package/dist/core/extensions/builtin/mcp/auth/commands-auth.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/commands-auth.js +8 -3
- package/dist/core/extensions/builtin/mcp/auth/commands-auth.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/catalog.d.ts +3 -1
- package/dist/core/extensions/builtin/mcp/catalog.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/catalog.js +2 -0
- package/dist/core/extensions/builtin/mcp/catalog.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/commands.d.ts +1 -1
- package/dist/core/extensions/builtin/mcp/commands.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/commands.js +34 -39
- package/dist/core/extensions/builtin/mcp/commands.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/connection-types.d.ts +2 -0
- package/dist/core/extensions/builtin/mcp/connection-types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/connection-types.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/connection.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/connection.js +3 -0
- package/dist/core/extensions/builtin/mcp/connection.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/elicitation.d.ts +7 -3
- package/dist/core/extensions/builtin/mcp/elicitation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/elicitation.js +5 -5
- package/dist/core/extensions/builtin/mcp/elicitation.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/expose/register.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/expose/register.js +1 -0
- package/dist/core/extensions/builtin/mcp/expose/register.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/expose/session.d.ts +2 -0
- package/dist/core/extensions/builtin/mcp/expose/session.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/expose/session.js +3 -0
- package/dist/core/extensions/builtin/mcp/expose/session.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/guard/output-guard.d.ts +9 -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 +18 -6
- package/dist/core/extensions/builtin/mcp/guard/output-guard.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/index.d.ts +4 -2
- package/dist/core/extensions/builtin/mcp/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/index.js +150 -127
- package/dist/core/extensions/builtin/mcp/index.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/instructions.d.ts +1 -1
- package/dist/core/extensions/builtin/mcp/instructions.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/instructions.js +6 -6
- package/dist/core/extensions/builtin/mcp/instructions.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/prompts.d.ts +2 -0
- package/dist/core/extensions/builtin/mcp/prompts.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/prompts.js +9 -3
- package/dist/core/extensions/builtin/mcp/prompts.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/resources.d.ts +2 -0
- package/dist/core/extensions/builtin/mcp/resources.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/resources.js +1 -0
- package/dist/core/extensions/builtin/mcp/resources.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/service-register.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/service-register.js +1 -0
- package/dist/core/extensions/builtin/mcp/service-register.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/service-types.d.ts +2 -0
- package/dist/core/extensions/builtin/mcp/service-types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/service-types.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/service.d.ts +12 -1
- package/dist/core/extensions/builtin/mcp/service.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/service.js +44 -2
- package/dist/core/extensions/builtin/mcp/service.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/transport.d.ts +2 -0
- package/dist/core/extensions/builtin/mcp/transport.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/transport.js +7 -7
- package/dist/core/extensions/builtin/mcp/transport.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js +86 -7
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.d.ts +3 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js +102 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/kimi-k3.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js +96 -6
- package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.js +9 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.js +1 -0
- package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.js +1 -0
- package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/bash.d.ts +15 -3
- package/dist/core/extensions/builtin/terminal/tools/bash.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/bash.js +30 -6
- package/dist/core/extensions/builtin/terminal/tools/bash.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/context.d.ts +5 -0
- package/dist/core/extensions/builtin/terminal/tools/context.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/context.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +14 -7
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +64 -37
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +30 -3
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +16 -0
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/messages.d.ts +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +10 -8
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +3 -2
- 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 +9 -0
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +4 -2
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +34 -18
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +21 -7
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js +12 -8
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/sdk.d.ts +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +8 -3
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +22 -3
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +155 -58
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts +2 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +34 -5
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +3 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/usage-totals.d.ts +19 -0
- package/dist/core/usage-totals.d.ts.map +1 -0
- package/dist/core/usage-totals.js +52 -0
- package/dist/core/usage-totals.js.map +1 -0
- package/dist/extensions/llama/client.d.ts.map +1 -1
- package/dist/extensions/llama/client.js +3 -1
- package/dist/extensions/llama/client.js.map +1 -1
- package/dist/extensions/llama/index.js +3 -3
- package/dist/extensions/llama/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +1 -2
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +37 -5
- package/dist/main.js.map +1 -1
- package/dist/modes/app-server/daemon/occupancy.d.ts +22 -0
- package/dist/modes/app-server/daemon/occupancy.d.ts.map +1 -0
- package/dist/modes/app-server/daemon/occupancy.js +67 -0
- package/dist/modes/app-server/daemon/occupancy.js.map +1 -0
- package/dist/modes/app-server/daemon/probe.d.ts +3 -3
- package/dist/modes/app-server/daemon/probe.d.ts.map +1 -1
- package/dist/modes/app-server/daemon/probe.js +33 -10
- package/dist/modes/app-server/daemon/probe.js.map +1 -1
- package/dist/modes/app-server/daemon.d.ts.map +1 -1
- package/dist/modes/app-server/daemon.js +58 -18
- package/dist/modes/app-server/daemon.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 +8 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +1 -2
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +16 -46
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts +4 -0
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-indicator.js +13 -0
- package/dist/modes/interactive/components/status-indicator.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts +12 -0
- package/dist/modes/interactive/external-editor.d.ts.map +1 -0
- package/dist/modes/interactive/external-editor.js +37 -0
- package/dist/modes/interactive/external-editor.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +3 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +96 -78
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/rpc/connection-handler.d.ts +6 -0
- package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
- package/dist/modes/rpc/connection-handler.js +34 -9
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/dist/modes/rpc/multi-session-host.d.ts +15 -0
- package/dist/modes/rpc/multi-session-host.d.ts.map +1 -0
- package/dist/modes/rpc/multi-session-host.js +60 -0
- package/dist/modes/rpc/multi-session-host.js.map +1 -0
- package/dist/modes/rpc/neo-runtime-options.d.ts.map +1 -1
- package/dist/modes/rpc/neo-runtime-options.js +1 -0
- package/dist/modes/rpc/neo-runtime-options.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +4 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +7 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +49 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +49 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +85 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js +8 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/rpc/session-binding.d.ts +13 -0
- package/dist/modes/rpc/session-binding.d.ts.map +1 -0
- package/dist/modes/rpc/session-binding.js +33 -0
- package/dist/modes/rpc/session-binding.js.map +1 -0
- package/dist/modes/rpc/session-command-router.d.ts +19 -0
- package/dist/modes/rpc/session-command-router.d.ts.map +1 -0
- package/dist/modes/rpc/session-command-router.js +159 -0
- package/dist/modes/rpc/session-command-router.js.map +1 -0
- package/dist/modes/rpc/session-event-writer.d.ts +34 -0
- package/dist/modes/rpc/session-event-writer.d.ts.map +1 -0
- package/dist/modes/rpc/session-event-writer.js +92 -0
- package/dist/modes/rpc/session-event-writer.js.map +1 -0
- package/dist/modes/rpc/session-extension-ui-requests.d.ts +15 -0
- package/dist/modes/rpc/session-extension-ui-requests.d.ts.map +1 -0
- package/dist/modes/rpc/session-extension-ui-requests.js +27 -0
- package/dist/modes/rpc/session-extension-ui-requests.js.map +1 -0
- package/dist/modes/rpc/session-registry.d.ts +58 -0
- package/dist/modes/rpc/session-registry.d.ts.map +1 -0
- package/dist/modes/rpc/session-registry.js +162 -0
- package/dist/modes/rpc/session-registry.js.map +1 -0
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +19 -8
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +3 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/app-server-daemon.md +3 -2
- package/docs/compaction.md +9 -4
- package/docs/custom-provider.md +5 -2
- package/docs/environment-variables.md +88 -0
- package/docs/extensions.md +25 -7
- package/docs/index.md +1 -0
- package/docs/json.md +5 -1
- package/docs/models.md +6 -2
- package/docs/providers.md +12 -1
- package/docs/rpc.md +154 -8
- package/docs/sdk.md +3 -0
- package/docs/session-format.md +17 -3
- package/docs/settings.md +2 -2
- package/docs/usage.md +1 -14
- package/examples/extensions/custom-compaction.ts +4 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/handoff.ts +9 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/summarize.ts +3 -0
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +24 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +3 -3
- package/node_modules/@earendil-works/pi-agent-core/README.md +31 -12
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts +4 -4
- 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 +8 -7
- 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 +10 -3
- 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 +61 -27
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts +11 -12
- 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/agent-harness.js +47 -22
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts +5 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js +6 -8
- 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.d.ts +17 -5
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +82 -27
- 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/compaction/utils.d.ts +12 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.js +22 -17
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts +3 -9
- 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 +118 -11
- 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/session/jsonl-storage.d.ts +11 -3
- 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 +56 -4
- 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-storage.d.ts +11 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js +56 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.js +2 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts +6 -4
- 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 +30 -14
- 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/tools/bash.d.ts +27 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.js +132 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.d.ts +89 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.js +386 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.d.ts +19 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js +95 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.d.ts +4 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.js +46 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.d.ts +3 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.js +106 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.d.ts +6 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.js +5 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.d.ts +4 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.js +26 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.d.ts +34 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js +110 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.d.ts +6 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.js +2 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.d.ts +11 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js +31 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +80 -18
- 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/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts +12 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js +90 -35
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js +10 -4
- 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/index.d.ts +4 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/index.js +5 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.d.ts +10 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.js +17 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +8 -2
- 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 -3
- package/node_modules/@earendil-works/pi-ai/README.md +44 -4
- 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 +45 -27
- 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.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js +21 -8
- 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.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js +17 -10
- 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/constrained-sampling.d.ts +17 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js +104 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js +7 -11
- 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.d.ts +4 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js +17 -3
- 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.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js +7 -11
- package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js +13 -9
- package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +73 -47
- 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 +7 -9
- 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 +142 -33
- 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-responses-shared.d.ts +7 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +180 -80
- 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.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +37 -15
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.js +8 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.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 +2 -4
- package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api-registry.d.ts +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/api-registry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api-registry.js +52 -6
- package/node_modules/@earendil-works/pi-ai/dist/api-registry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/helpers.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/helpers.js +3 -2
- package/node_modules/@earendil-works/pi-ai/dist/auth/helpers.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.d.ts +10 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.js +249 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.d.ts +4 -0
- 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 +10 -0
- 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.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.js +2 -18
- 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/openrouter.d.ts +13 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openrouter.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openrouter.js +222 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openrouter.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/compat.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/compat.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/compat.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/context-provenance.d.ts +16 -0
- package/node_modules/@earendil-works/pi-ai/dist/context-provenance.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/context-provenance.js +32 -0
- package/node_modules/@earendil-works/pi-ai/dist/context-provenance.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts +3 -0
- 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 +11 -3
- 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 +15 -0
- 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 +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.d.ts +19 -2
- package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.js +68 -3
- package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +5 -0
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.js +5 -0
- package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/model-catalog.d.ts +17 -0
- package/node_modules/@earendil-works/pi-ai/dist/model-catalog.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/model-catalog.js +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/model-catalog.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/model.d.ts +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/model.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/model.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models-store.d.ts +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/models-store.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models-store.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.d.ts +0 -6
- 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 +76 -4448
- 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 +4 -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 +0 -53
- 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 +12 -0
- package/node_modules/@earendil-works/pi-ai/dist/node/provider-scope.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/node/provider-scope.js +34 -0
- package/node_modules/@earendil-works/pi-ai/dist/node/provider-scope.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/alibaba-token-plan.models.d.ts +3 -63
- package/node_modules/@earendil-works/pi-ai/dist/providers/alibaba-token-plan.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/alibaba-token-plan.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/alibaba-token-plan.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.d.ts +2 -0
- 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 +10 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +3 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.d.ts +3 -439
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +30 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.d.ts +3 -59
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.d.ts +3 -187
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.d.ts +3 -171
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.d.ts +3 -55
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/alibaba-token-plan.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/ant-ling.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cerebras.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/deepseek.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/google-vertex.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/kimi-coding.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/mistral.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai.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/openai-codex.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.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/opencode.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/qwen-token-plan-cn.json +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
- 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/data/xai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-ams.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-sgp.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.d.ts +3 -11
- package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.d.ts +3 -67
- package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.d.ts +3 -115
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.d.ts +3 -51
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.d.ts +3 -75
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.d.ts +3 -31
- package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.d.ts +3 -203
- package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.js +10 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.d.ts +3 -19
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.d.ts +3 -123
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.d.ts +3 -43
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.d.ts +3 -43
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.d.ts +3 -79
- package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts +3 -31
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.d.ts +3 -187
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.d.ts +3 -67
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.d.ts +3 -227
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter-images.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter-images.js +10 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter-images.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.js +10 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts +3 -1095
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.d.ts +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.js +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.d.ts +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.js +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.d.ts +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.js +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.d.ts +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.js +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/radius-config.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/radius-config.js +18 -14
- package/node_modules/@earendil-works/pi-ai/dist/providers/radius-config.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.d.ts +3 -67
- package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.d.ts +3 -775
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.d.ts +3 -27
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.d.ts +3 -27
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.d.ts +3 -27
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +43 -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/openai-codex-auth.d.ts +11 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/openai-codex-auth.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/openai-codex-auth.js +30 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/openai-codex-auth.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.d.ts +16 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js +94 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts +41 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +82 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/text.d.ts +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/text.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/text.js +10 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/text.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/uuid.d.ts +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/uuid.d.ts.map +1 -0
- package/node_modules/@earendil-works/{pi-agent-core/dist/harness/session → pi-ai/dist/utils}/uuid.js +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/utils/uuid.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/package.json +11 -4
- package/node_modules/@earendil-works/pi-pty/package.json +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 +31 -22
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.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 +2 -0
- package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -6
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.d.ts +0 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/resources.ts"],"names":[],"mappings":"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","sourcesContent":["// MCP resources (todo 39): list/read/subscribe + @mcp: input-mention expansion.\n//\n// Model-facing access is two utility tools — mcp_list_resources and\n// mcp_read_resource — registered ONLY when at least one connected server\n// actually lists resources (no dead tools). User-facing convenience is the\n// `@mcp:<server>/<uri>` mention, expanded through the sanctioned `input` event\n// transform: recognized mentions are replaced inline with the fetched resource\n// body (output-guarded); unrecognized or failing mentions pass through\n// UNCHANGED with a one-line notice, never blocking the submission. Servers\n// declaring the resources.subscribe capability get per-resource subscriptions;\n// updated/list_changed notifications flow into the existing tools-changed\n// refresh path, so the catalog cache stays current.\n\nimport { Text } from \"@earendil-works/pi-tui\";\nimport type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { ResourceUpdatedNotificationSchema } from \"@modelcontextprotocol/sdk/types.js\";\nimport { type Static, Type } from \"typebox\";\nimport type { ToolDefinition } from \"../../types.ts\";\nimport type { McpCachedServerCatalog } from \"./catalog-cache.ts\";\nimport type { ServerConnection } from \"./connection.ts\";\nimport { ToolExecError } from \"./errors.ts\";\nimport type { McpToolDetails } from \"./expose/register.ts\";\nimport { applyMcpOutputGuard } from \"./guard/output-guard.ts\";\n\nexport interface McpResourceServer {\n\treadonly server: string;\n\treadonly connection: ServerConnection;\n\treadonly agentDir?: string;\n\treadonly outputGuard?: Parameters<typeof applyMcpOutputGuard>[1][\"outputGuard\"];\n\treadonly requestTimeoutMs?: number;\n\treadonly resources: NonNullable<McpCachedServerCatalog[\"resources\"]>;\n}\n\n/** Route resource updated notifications into the shared refresh path. */\nexport function subscribeMcpResourceUpdated(client: Client, onChange: () => void): void {\n\tclient.setNotificationHandler(ResourceUpdatedNotificationSchema, () => {\n\t\tonChange();\n\t});\n}\n\n/** Best-effort per-resource subscriptions when the server declares support. */\nexport async function ensureMcpResourceSubscriptions(\n\tclient: Client,\n\tresources: ReadonlyArray<{ uri: string }>,\n): Promise<void> {\n\tif (client.getServerCapabilities()?.resources?.subscribe !== true) return;\n\tawait Promise.all(\n\t\tresources.map((resource) => client.subscribeResource({ uri: resource.uri }).catch(() => undefined)),\n\t);\n}\n\n/** Read one resource and flatten its contents to guarded text. */\nexport async function readMcpResourceAsText(server: McpResourceServer, uri: string): Promise<string> {\n\tlet contents: Awaited<ReturnType<Client[\"readResource\"]>>[\"contents\"];\n\ttry {\n\t\tconst result = await server.connection.client.readResource({ uri }, { timeout: server.requestTimeoutMs });\n\t\tcontents = result.contents;\n\t} catch (error) {\n\t\tthrow new ToolExecError(\n\t\t\t`Failed to read MCP resource ${uri}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t{\n\t\t\t\tphase: \"call\",\n\t\t\t\tserverName: server.server,\n\t\t\t},\n\t\t);\n\t}\n\tconst parts = contents.map((content) => {\n\t\tif (\"text\" in content && typeof content.text === \"string\") return content.text;\n\t\tconst blob = \"blob\" in content && typeof content.blob === \"string\" ? content.blob : \"\";\n\t\treturn `[binary resource ${content.uri} (${content.mimeType ?? \"unknown\"}), ~${Math.round((blob.length * 3) / 4)} bytes]`;\n\t});\n\tconst guarded = await applyMcpOutputGuard([{ type: \"text\", text: parts.join(\"\\n\") }], {\n\t\tagentDir: server.agentDir,\n\t\toutputGuard: server.outputGuard,\n\t\tserver: server.server,\n\t});\n\treturn guarded.map((block) => (\"text\" in block && typeof block.text === \"string\" ? block.text : \"\")).join(\"\\n\");\n}\n\nconst ListParams = Type.Object({\n\tserver: Type.Optional(Type.String({ description: \"Restrict to one MCP server name.\" })),\n});\nconst ReadParams = Type.Object({\n\tserver: Type.String({ description: \"MCP server name (from mcp_list_resources).\" }),\n\turi: Type.String({ description: \"Resource URI to read.\" }),\n});\n\ntype McpUtilityTool = ToolDefinition<typeof ListParams | typeof ReadParams, McpToolDetails | undefined, unknown>;\n\n/** The two model-facing utility tools. Register only when servers() is non-empty. */\nexport function createMcpResourceTools(servers: () => readonly McpResourceServer[]): McpUtilityTool[] {\n\tconst list: ToolDefinition<typeof ListParams, McpToolDetails | undefined, unknown> = {\n\t\tname: \"mcp_list_resources\",\n\t\tlabel: \"List MCP resources\",\n\t\tdescription: \"List resources exposed by connected MCP servers (URI, name, mime type).\",\n\t\tparameters: ListParams,\n\t\texecutionMode: \"parallel\",\n\t\tasync execute(_id, params: Static<typeof ListParams>) {\n\t\t\tconst scoped = servers().filter((entry) => params.server === undefined || entry.server === params.server);\n\t\t\tconst lines = scoped.flatMap((entry) =>\n\t\t\t\tentry.resources.map(\n\t\t\t\t\t(resource) =>\n\t\t\t\t\t\t`- @mcp:${entry.server}/${resource.uri} — ${resource.name ?? resource.uri}${resource.mimeType ? ` (${resource.mimeType})` : \"\"}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\tconst text = lines.length === 0 ? \"No MCP resources available.\" : lines.join(\"\\n\");\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text }],\n\t\t\t\tdetails: {\n\t\t\t\t\tpreview: `${lines.length} resource(s)`,\n\t\t\t\t\tserver: params.server ?? \"*\",\n\t\t\t\t\ttool: \"mcp_list_resources\",\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\trenderCall(args, theme) {\n\t\t\treturn new Text(theme.fg(\"toolTitle\", theme.bold(`mcp_list_resources ${args.server ?? \"\"}`.trim())), 0, 0);\n\t\t},\n\t};\n\tconst read: ToolDefinition<typeof ReadParams, McpToolDetails | undefined, unknown> = {\n\t\tname: \"mcp_read_resource\",\n\t\tlabel: \"Read MCP resource\",\n\t\tdescription: \"Read one MCP resource by server name and URI; returns its (guarded) content.\",\n\t\tparameters: ReadParams,\n\t\texecutionMode: \"parallel\",\n\t\tasync execute(_id, params: Static<typeof ReadParams>) {\n\t\t\tconst entry = servers().find((candidate) => candidate.server === params.server);\n\t\t\tif (entry === undefined) {\n\t\t\t\tthrow new ToolExecError(`Unknown MCP server '${params.server}' for resource ${params.uri}.`, {\n\t\t\t\t\tphase: \"call\",\n\t\t\t\t\tserverName: params.server,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst text = await readMcpResourceAsText(entry, params.uri);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text }],\n\t\t\t\tdetails: { preview: params.uri, server: params.server, tool: \"mcp_read_resource\" },\n\t\t\t};\n\t\t},\n\t\trenderCall(args, theme) {\n\t\t\treturn new Text(theme.fg(\"toolTitle\", theme.bold(`mcp_read_resource ${args.server}/${args.uri}`)), 0, 0);\n\t\t},\n\t};\n\treturn [list as McpUtilityTool, read as McpUtilityTool];\n}\n\nconst MENTION_PATTERN = /@mcp:([A-Za-z0-9._-]+)\\/(\\S+)/g;\n\nexport interface McpMentionExpansion {\n\treadonly text: string;\n\treadonly changed: boolean;\n\treadonly notices: string[];\n}\n\n/** Expand `@mcp:<server>/<uri>` mentions; failures leave the mention intact. */\nexport async function expandMcpResourceMentions(\n\ttext: string,\n\tservers: () => readonly McpResourceServer[],\n): Promise<McpMentionExpansion> {\n\tconst matches = [...text.matchAll(MENTION_PATTERN)];\n\tif (matches.length === 0) return { changed: false, notices: [], text };\n\tconst notices: string[] = [];\n\tlet expanded = text;\n\tfor (const match of matches) {\n\t\tconst [mention, serverName, uri] = match;\n\t\tconst entry = servers().find((candidate) => candidate.server === serverName);\n\t\tif (entry === undefined) {\n\t\t\tnotices.push(`@mcp mention left as-is: unknown server '${serverName}'.`);\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tconst body = await readMcpResourceAsText(entry, uri);\n\t\t\texpanded = expanded.replace(\n\t\t\t\tmention,\n\t\t\t\t`<mcp-resource server=\"${serverName}\" uri=\"${uri}\">\\n${body}\\n</mcp-resource>`,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tnotices.push(`@mcp mention left as-is: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\treturn { changed: expanded !== text, notices, text: expanded };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/resources.ts"],"names":[],"mappings":"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","sourcesContent":["// MCP resources (todo 39): list/read/subscribe + @mcp: input-mention expansion.\n//\n// Model-facing access is two utility tools — mcp_list_resources and\n// mcp_read_resource — registered ONLY when at least one connected server\n// actually lists resources (no dead tools). User-facing convenience is the\n// `@mcp:<server>/<uri>` mention, expanded through the sanctioned `input` event\n// transform: recognized mentions are replaced inline with the fetched resource\n// body (output-guarded); unrecognized or failing mentions pass through\n// UNCHANGED with a one-line notice, never blocking the submission. Servers\n// declaring the resources.subscribe capability get per-resource subscriptions;\n// updated/list_changed notifications flow into the existing tools-changed\n// refresh path, so the catalog cache stays current.\n\nimport { Text } from \"@earendil-works/pi-tui\";\nimport type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { ResourceUpdatedNotificationSchema } from \"@modelcontextprotocol/sdk/types.js\";\nimport { type Static, Type } from \"typebox\";\nimport type { ToolDefinition } from \"../../types.ts\";\nimport type { McpCachedServerCatalog } from \"./catalog-cache.ts\";\nimport type { ServerConnection } from \"./connection.ts\";\nimport { ToolExecError } from \"./errors.ts\";\nimport type { McpToolDetails } from \"./expose/register.ts\";\nimport type { McpOutputArtifacts } from \"./guard/output-guard.ts\";\nimport { applyMcpOutputGuard } from \"./guard/output-guard.ts\";\n\nexport interface McpResourceServer {\n\treadonly server: string;\n\treadonly connection: ServerConnection;\n\treadonly agentDir?: string;\n\treadonly artifacts?: McpOutputArtifacts;\n\treadonly outputGuard?: Parameters<typeof applyMcpOutputGuard>[1][\"outputGuard\"];\n\treadonly requestTimeoutMs?: number;\n\treadonly resources: NonNullable<McpCachedServerCatalog[\"resources\"]>;\n}\n\n/** Route resource updated notifications into the shared refresh path. */\nexport function subscribeMcpResourceUpdated(client: Client, onChange: () => void): void {\n\tclient.setNotificationHandler(ResourceUpdatedNotificationSchema, () => {\n\t\tonChange();\n\t});\n}\n\n/** Best-effort per-resource subscriptions when the server declares support. */\nexport async function ensureMcpResourceSubscriptions(\n\tclient: Client,\n\tresources: ReadonlyArray<{ uri: string }>,\n): Promise<void> {\n\tif (client.getServerCapabilities()?.resources?.subscribe !== true) return;\n\tawait Promise.all(\n\t\tresources.map((resource) => client.subscribeResource({ uri: resource.uri }).catch(() => undefined)),\n\t);\n}\n\n/** Read one resource and flatten its contents to guarded text. */\nexport async function readMcpResourceAsText(server: McpResourceServer, uri: string): Promise<string> {\n\tlet contents: Awaited<ReturnType<Client[\"readResource\"]>>[\"contents\"];\n\ttry {\n\t\tconst result = await server.connection.client.readResource({ uri }, { timeout: server.requestTimeoutMs });\n\t\tcontents = result.contents;\n\t} catch (error) {\n\t\tthrow new ToolExecError(\n\t\t\t`Failed to read MCP resource ${uri}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t{\n\t\t\t\tphase: \"call\",\n\t\t\t\tserverName: server.server,\n\t\t\t},\n\t\t);\n\t}\n\tconst parts = contents.map((content) => {\n\t\tif (\"text\" in content && typeof content.text === \"string\") return content.text;\n\t\tconst blob = \"blob\" in content && typeof content.blob === \"string\" ? content.blob : \"\";\n\t\treturn `[binary resource ${content.uri} (${content.mimeType ?? \"unknown\"}), ~${Math.round((blob.length * 3) / 4)} bytes]`;\n\t});\n\tconst guarded = await applyMcpOutputGuard([{ type: \"text\", text: parts.join(\"\\n\") }], {\n\t\tagentDir: server.agentDir,\n\t\tartifacts: server.artifacts,\n\t\toutputGuard: server.outputGuard,\n\t\tserver: server.server,\n\t});\n\treturn guarded.map((block) => (\"text\" in block && typeof block.text === \"string\" ? block.text : \"\")).join(\"\\n\");\n}\n\nconst ListParams = Type.Object({\n\tserver: Type.Optional(Type.String({ description: \"Restrict to one MCP server name.\" })),\n});\nconst ReadParams = Type.Object({\n\tserver: Type.String({ description: \"MCP server name (from mcp_list_resources).\" }),\n\turi: Type.String({ description: \"Resource URI to read.\" }),\n});\n\ntype McpUtilityTool = ToolDefinition<typeof ListParams | typeof ReadParams, McpToolDetails | undefined, unknown>;\n\n/** The two model-facing utility tools. Register only when servers() is non-empty. */\nexport function createMcpResourceTools(servers: () => readonly McpResourceServer[]): McpUtilityTool[] {\n\tconst list: ToolDefinition<typeof ListParams, McpToolDetails | undefined, unknown> = {\n\t\tname: \"mcp_list_resources\",\n\t\tlabel: \"List MCP resources\",\n\t\tdescription: \"List resources exposed by connected MCP servers (URI, name, mime type).\",\n\t\tparameters: ListParams,\n\t\texecutionMode: \"parallel\",\n\t\tasync execute(_id, params: Static<typeof ListParams>) {\n\t\t\tconst scoped = servers().filter((entry) => params.server === undefined || entry.server === params.server);\n\t\t\tconst lines = scoped.flatMap((entry) =>\n\t\t\t\tentry.resources.map(\n\t\t\t\t\t(resource) =>\n\t\t\t\t\t\t`- @mcp:${entry.server}/${resource.uri} — ${resource.name ?? resource.uri}${resource.mimeType ? ` (${resource.mimeType})` : \"\"}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\tconst text = lines.length === 0 ? \"No MCP resources available.\" : lines.join(\"\\n\");\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text }],\n\t\t\t\tdetails: {\n\t\t\t\t\tpreview: `${lines.length} resource(s)`,\n\t\t\t\t\tserver: params.server ?? \"*\",\n\t\t\t\t\ttool: \"mcp_list_resources\",\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\trenderCall(args, theme) {\n\t\t\treturn new Text(theme.fg(\"toolTitle\", theme.bold(`mcp_list_resources ${args.server ?? \"\"}`.trim())), 0, 0);\n\t\t},\n\t};\n\tconst read: ToolDefinition<typeof ReadParams, McpToolDetails | undefined, unknown> = {\n\t\tname: \"mcp_read_resource\",\n\t\tlabel: \"Read MCP resource\",\n\t\tdescription: \"Read one MCP resource by server name and URI; returns its (guarded) content.\",\n\t\tparameters: ReadParams,\n\t\texecutionMode: \"parallel\",\n\t\tasync execute(_id, params: Static<typeof ReadParams>) {\n\t\t\tconst entry = servers().find((candidate) => candidate.server === params.server);\n\t\t\tif (entry === undefined) {\n\t\t\t\tthrow new ToolExecError(`Unknown MCP server '${params.server}' for resource ${params.uri}.`, {\n\t\t\t\t\tphase: \"call\",\n\t\t\t\t\tserverName: params.server,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst text = await readMcpResourceAsText(entry, params.uri);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text }],\n\t\t\t\tdetails: { preview: params.uri, server: params.server, tool: \"mcp_read_resource\" },\n\t\t\t};\n\t\t},\n\t\trenderCall(args, theme) {\n\t\t\treturn new Text(theme.fg(\"toolTitle\", theme.bold(`mcp_read_resource ${args.server}/${args.uri}`)), 0, 0);\n\t\t},\n\t};\n\treturn [list as McpUtilityTool, read as McpUtilityTool];\n}\n\nconst MENTION_PATTERN = /@mcp:([A-Za-z0-9._-]+)\\/(\\S+)/g;\n\nexport interface McpMentionExpansion {\n\treadonly text: string;\n\treadonly changed: boolean;\n\treadonly notices: string[];\n}\n\n/** Expand `@mcp:<server>/<uri>` mentions; failures leave the mention intact. */\nexport async function expandMcpResourceMentions(\n\ttext: string,\n\tservers: () => readonly McpResourceServer[],\n): Promise<McpMentionExpansion> {\n\tconst matches = [...text.matchAll(MENTION_PATTERN)];\n\tif (matches.length === 0) return { changed: false, notices: [], text };\n\tconst notices: string[] = [];\n\tlet expanded = text;\n\tfor (const match of matches) {\n\t\tconst [mention, serverName, uri] = match;\n\t\tconst entry = servers().find((candidate) => candidate.server === serverName);\n\t\tif (entry === undefined) {\n\t\t\tnotices.push(`@mcp mention left as-is: unknown server '${serverName}'.`);\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tconst body = await readMcpResourceAsText(entry, uri);\n\t\t\texpanded = expanded.replace(\n\t\t\t\tmention,\n\t\t\t\t`<mcp-resource server=\"${serverName}\" uri=\"${uri}\">\\n${body}\\n</mcp-resource>`,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tnotices.push(`@mcp mention left as-is: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\treturn { changed: expanded !== text, notices, text: expanded };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-register.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/service-register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,KAAK,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,cAAc,CAAC,CAAC;AAEjG,MAAM,WAAW,uCAAuC;IACvD,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;CAC7C;AAED,wBAAsB,6BAA6B,CAClD,EAAE,EAAE,gBAAgB,EACpB,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACrC,OAAO,GAAE,uCAA4C,GACnD,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"service-register.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/service-register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,KAAK,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,cAAc,CAAC,CAAC;AAEjG,MAAM,WAAW,uCAAuC;IACvD,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;CAC7C;AAED,wBAAsB,6BAA6B,CAClD,EAAE,EAAE,gBAAgB,EACpB,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACrC,OAAO,GAAE,uCAA4C,GACnD,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAmB7C"}
|
|
@@ -5,6 +5,7 @@ export async function registerMcpServiceDirectTools(pi, config, entries, options
|
|
|
5
5
|
const serverConfig = config.servers[entry.name]?.config;
|
|
6
6
|
return {
|
|
7
7
|
agentDir: entry.agentDir,
|
|
8
|
+
artifacts: entry.artifacts,
|
|
8
9
|
cachedCatalog: entry.cachedCatalog,
|
|
9
10
|
connection: entry.connection,
|
|
10
11
|
ensureFresh: () => entry.authPlan?.refresh?.ensureFresh().then(() => undefined) ?? Promise.resolve(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-register.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/service-register.ts"],"names":[],"mappings":"AAGA,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,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,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,OAAO,CACP,CAAC;AACH,CAAC","sourcesContent":["import type { ExtensionAPI } from \"../../types.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\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\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\toptions,\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"service-register.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/service-register.ts"],"names":[],"mappings":"AAGA,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,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,OAAO,CACP,CAAC;AACH,CAAC","sourcesContent":["import type { ExtensionAPI } from \"../../types.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\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\toptions,\n\t);\n}\n"]}
|
|
@@ -3,6 +3,7 @@ import type { ServerAuthPlan } from "./auth/context.ts";
|
|
|
3
3
|
import type { McpCachedServerCatalog } from "./catalog-cache.ts";
|
|
4
4
|
import type { ResolvedMcpServer } from "./config-schema.ts";
|
|
5
5
|
import type { ServerConnection, ServerConnectionState } from "./connection.ts";
|
|
6
|
+
import type { McpOutputArtifacts } from "./guard/output-guard.ts";
|
|
6
7
|
import type { McpLogger } from "./log.ts";
|
|
7
8
|
export type McpDisposeReason = Extract<SessionShutdownEvent["reason"], "quit" | "reload">;
|
|
8
9
|
export type McpWireJsonValue = null | boolean | number | string | readonly McpWireJsonValue[] | {
|
|
@@ -122,6 +123,7 @@ export interface McpConnectionEntry {
|
|
|
122
123
|
readonly createdAtMs: number;
|
|
123
124
|
readonly counters: McpServerCounters;
|
|
124
125
|
readonly agentDir?: string;
|
|
126
|
+
readonly artifacts?: McpOutputArtifacts;
|
|
125
127
|
readonly authPlan?: ServerAuthPlan;
|
|
126
128
|
cachedCatalog?: McpCachedServerCatalog;
|
|
127
129
|
cacheRefreshedAfterConnect: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-types.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/service-types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service-types.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/service-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-types.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/service-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ExtensionContext, SessionShutdownEvent, SessionStartEvent } from \"../../types.ts\";\nimport type { ServerAuthPlan } from \"./auth/context.ts\";\nimport type { McpCachedServerCatalog } from \"./catalog-cache.ts\";\nimport type { ResolvedMcpServer } from \"./config-schema.ts\";\nimport type { ServerConnection, ServerConnectionState } from \"./connection.ts\";\nimport type { McpLogger } from \"./log.ts\";\n\nexport type McpDisposeReason = Extract<SessionShutdownEvent[\"reason\"], \"quit\" | \"reload\">;\n\nexport type McpWireJsonValue =\n\t| null\n\t| boolean\n\t| number\n\t| string\n\t| readonly McpWireJsonValue[]\n\t| { readonly [key: string]: McpWireJsonValue | undefined };\n\nexport type McpWireAuthStatus = \"unsupported\" | \"notLoggedIn\" | \"bearerToken\" | \"oAuth\";\n\nexport type McpWireServerInfo = {\n\treadonly name: string;\n\treadonly title: string | null;\n\treadonly version: string;\n\treadonly description: string | null;\n\treadonly icons: readonly McpWireJsonValue[] | null;\n\treadonly websiteUrl: string | null;\n};\n\nexport type McpWireTool = {\n\treadonly name: string;\n\treadonly title?: string;\n\treadonly description?: string;\n\treadonly inputSchema: McpWireJsonValue;\n\treadonly outputSchema?: McpWireJsonValue;\n\treadonly annotations?: McpWireJsonValue;\n\treadonly icons?: readonly McpWireJsonValue[];\n\treadonly _meta?: McpWireJsonValue;\n};\n\nexport type McpWireResource = {\n\treadonly annotations?: McpWireJsonValue;\n\treadonly description?: string;\n\treadonly mimeType?: string;\n\treadonly name: string;\n\treadonly size?: number;\n\treadonly title?: string;\n\treadonly uri: string;\n\treadonly icons?: readonly McpWireJsonValue[];\n\treadonly _meta?: McpWireJsonValue;\n};\n\nexport type McpWireResourceTemplate = {\n\treadonly annotations?: McpWireJsonValue;\n\treadonly uriTemplate: string;\n\treadonly name: string;\n\treadonly title?: string;\n\treadonly description?: string;\n\treadonly mimeType?: string;\n\treadonly icons?: readonly McpWireJsonValue[];\n\treadonly _meta?: McpWireJsonValue;\n};\n\nexport type McpWireStatusServer = {\n\treadonly name: string;\n\treadonly serverInfo: McpWireServerInfo | null;\n\treadonly tools: readonly McpWireTool[];\n\treadonly resources: readonly McpWireResource[];\n\treadonly resourceTemplates: readonly McpWireResourceTemplate[];\n\treadonly authStatus: McpWireAuthStatus;\n};\n\nexport type McpWireStatusSnapshot = {\n\treadonly servers: readonly McpWireStatusServer[];\n};\n\nexport type McpSessionContext = Pick<ExtensionContext, \"cwd\" | \"isProjectTrusted\"> & {\n\tmode?: ExtensionContext[\"mode\"];\n\t/**\n\t * Session history access, present on the real ExtensionContext. Only\n\t * getEntries is needed (attach-time promotion rehydration); keeping the\n\t * requirement narrow lets tests pass a two-line fake.\n\t */\n\tsessionManager?: Pick<ExtensionContext[\"sessionManager\"], \"getEntries\"> &\n\t\tPartial<Pick<ExtensionContext[\"sessionManager\"], \"getSessionId\">>;\n\t/**\n\t * Extension-declared MCP servers. Read on every attach so reattach/reload\n\t * paths pick up the current declarations without caching them in the MCP\n\t * builtin.\n\t */\n\tgetRegisteredMcpServers?: () => readonly {\n\t\tname: string;\n\t\tconfig: Record<string, unknown>;\n\t\textensionPath: string;\n\t\tregistrationCwd: string;\n\t}[];\n};\n\nexport interface McpSessionOptions {\n\treadonly agentDir?: string;\n\treadonly env?: Record<string, string | undefined>;\n\treadonly logDir?: string;\n\treadonly projectTrusted?: boolean;\n}\n\nexport interface McpServiceSnapshot {\n\tdisposed: boolean;\n\tdisposeCount: number;\n\tlastDisposeReason: McpDisposeReason | null;\n\tsessionStartCount: number;\n\tlastSessionStartReason: SessionStartEvent[\"reason\"] | null;\n\thasSessionContext: boolean;\n\tconnectionCount: number;\n}\n\nexport interface McpServerSnapshot {\n\tname: string;\n\tconfigState: ResolvedMcpServer[\"state\"] | \"removed\";\n\tconfigHash: string | null;\n\tsource: ResolvedMcpServer[\"source\"] | null;\n\tsourcePath: string | null;\n\tlifecycleState: ServerConnectionState | \"cached\" | \"not_spawned\";\n\tgeneration: number | null;\n\tpid: number | null;\n\tlastError: string | null;\n\tuptimeMs: number | null;\n\tcounters: McpServerCounters;\n}\n\nexport interface McpServerCounters {\n\tcallCount: number;\n\terrorCount: number;\n\ttotalLatencyMs: number;\n\treconnectCount: number;\n}\n\nexport interface McpConnectionEntry {\n\treadonly key: string;\n\treadonly name: string;\n\treadonly configHash: string;\n\treadonly connection: ServerConnection;\n\treadonly logger: McpLogger;\n\treadonly createdAtMs: number;\n\treadonly counters: McpServerCounters;\n\treadonly agentDir?: string;\n\treadonly authPlan?: ServerAuthPlan;\n\tcachedCatalog?: McpCachedServerCatalog;\n\tcacheRefreshedAfterConnect: boolean;\n\t/** Full mcp tool names last registered for this server (list_changed diffing). */\n\tknownToolNames?: string[];\n\t/** Latest `/mcp status` list_changed delta line, e.g. \"2 added (inactive), 1 removed\". */\n\tlastListChangedDelta?: string;\n\t/** Teardown for the list_changed coalescer + subscription. */\n\tdisposeListChanged?: () => void;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"service-types.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/service-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ExtensionContext, SessionShutdownEvent, SessionStartEvent } from \"../../types.ts\";\nimport type { ServerAuthPlan } from \"./auth/context.ts\";\nimport type { McpCachedServerCatalog } from \"./catalog-cache.ts\";\nimport type { ResolvedMcpServer } from \"./config-schema.ts\";\nimport type { ServerConnection, ServerConnectionState } from \"./connection.ts\";\nimport type { McpOutputArtifacts } from \"./guard/output-guard.ts\";\nimport type { McpLogger } from \"./log.ts\";\n\nexport type McpDisposeReason = Extract<SessionShutdownEvent[\"reason\"], \"quit\" | \"reload\">;\n\nexport type McpWireJsonValue =\n\t| null\n\t| boolean\n\t| number\n\t| string\n\t| readonly McpWireJsonValue[]\n\t| { readonly [key: string]: McpWireJsonValue | undefined };\n\nexport type McpWireAuthStatus = \"unsupported\" | \"notLoggedIn\" | \"bearerToken\" | \"oAuth\";\n\nexport type McpWireServerInfo = {\n\treadonly name: string;\n\treadonly title: string | null;\n\treadonly version: string;\n\treadonly description: string | null;\n\treadonly icons: readonly McpWireJsonValue[] | null;\n\treadonly websiteUrl: string | null;\n};\n\nexport type McpWireTool = {\n\treadonly name: string;\n\treadonly title?: string;\n\treadonly description?: string;\n\treadonly inputSchema: McpWireJsonValue;\n\treadonly outputSchema?: McpWireJsonValue;\n\treadonly annotations?: McpWireJsonValue;\n\treadonly icons?: readonly McpWireJsonValue[];\n\treadonly _meta?: McpWireJsonValue;\n};\n\nexport type McpWireResource = {\n\treadonly annotations?: McpWireJsonValue;\n\treadonly description?: string;\n\treadonly mimeType?: string;\n\treadonly name: string;\n\treadonly size?: number;\n\treadonly title?: string;\n\treadonly uri: string;\n\treadonly icons?: readonly McpWireJsonValue[];\n\treadonly _meta?: McpWireJsonValue;\n};\n\nexport type McpWireResourceTemplate = {\n\treadonly annotations?: McpWireJsonValue;\n\treadonly uriTemplate: string;\n\treadonly name: string;\n\treadonly title?: string;\n\treadonly description?: string;\n\treadonly mimeType?: string;\n\treadonly icons?: readonly McpWireJsonValue[];\n\treadonly _meta?: McpWireJsonValue;\n};\n\nexport type McpWireStatusServer = {\n\treadonly name: string;\n\treadonly serverInfo: McpWireServerInfo | null;\n\treadonly tools: readonly McpWireTool[];\n\treadonly resources: readonly McpWireResource[];\n\treadonly resourceTemplates: readonly McpWireResourceTemplate[];\n\treadonly authStatus: McpWireAuthStatus;\n};\n\nexport type McpWireStatusSnapshot = {\n\treadonly servers: readonly McpWireStatusServer[];\n};\n\nexport type McpSessionContext = Pick<ExtensionContext, \"cwd\" | \"isProjectTrusted\"> & {\n\tmode?: ExtensionContext[\"mode\"];\n\t/**\n\t * Session history access, present on the real ExtensionContext. Only\n\t * getEntries is needed (attach-time promotion rehydration); keeping the\n\t * requirement narrow lets tests pass a two-line fake.\n\t */\n\tsessionManager?: Pick<ExtensionContext[\"sessionManager\"], \"getEntries\"> &\n\t\tPartial<Pick<ExtensionContext[\"sessionManager\"], \"getSessionId\">>;\n\t/**\n\t * Extension-declared MCP servers. Read on every attach so reattach/reload\n\t * paths pick up the current declarations without caching them in the MCP\n\t * builtin.\n\t */\n\tgetRegisteredMcpServers?: () => readonly {\n\t\tname: string;\n\t\tconfig: Record<string, unknown>;\n\t\textensionPath: string;\n\t\tregistrationCwd: string;\n\t}[];\n};\n\nexport interface McpSessionOptions {\n\treadonly agentDir?: string;\n\treadonly env?: Record<string, string | undefined>;\n\treadonly logDir?: string;\n\treadonly projectTrusted?: boolean;\n}\n\nexport interface McpServiceSnapshot {\n\tdisposed: boolean;\n\tdisposeCount: number;\n\tlastDisposeReason: McpDisposeReason | null;\n\tsessionStartCount: number;\n\tlastSessionStartReason: SessionStartEvent[\"reason\"] | null;\n\thasSessionContext: boolean;\n\tconnectionCount: number;\n}\n\nexport interface McpServerSnapshot {\n\tname: string;\n\tconfigState: ResolvedMcpServer[\"state\"] | \"removed\";\n\tconfigHash: string | null;\n\tsource: ResolvedMcpServer[\"source\"] | null;\n\tsourcePath: string | null;\n\tlifecycleState: ServerConnectionState | \"cached\" | \"not_spawned\";\n\tgeneration: number | null;\n\tpid: number | null;\n\tlastError: string | null;\n\tuptimeMs: number | null;\n\tcounters: McpServerCounters;\n}\n\nexport interface McpServerCounters {\n\tcallCount: number;\n\terrorCount: number;\n\ttotalLatencyMs: number;\n\treconnectCount: number;\n}\n\nexport interface McpConnectionEntry {\n\treadonly key: string;\n\treadonly name: string;\n\treadonly configHash: string;\n\treadonly connection: ServerConnection;\n\treadonly logger: McpLogger;\n\treadonly createdAtMs: number;\n\treadonly counters: McpServerCounters;\n\treadonly agentDir?: string;\n\treadonly artifacts?: McpOutputArtifacts;\n\treadonly authPlan?: ServerAuthPlan;\n\tcachedCatalog?: McpCachedServerCatalog;\n\tcacheRefreshedAfterConnect: boolean;\n\t/** Full mcp tool names last registered for this server (list_changed diffing). */\n\tknownToolNames?: string[];\n\t/** Latest `/mcp status` list_changed delta line, e.g. \"2 added (inactive), 1 removed\". */\n\tlastListChangedDelta?: string;\n\t/** Teardown for the list_changed coalescer + subscription. */\n\tdisposeListChanged?: () => void;\n}\n"]}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import type { ExtensionAPI, SessionShutdownEvent, SessionStartEvent } from "../../types.ts";
|
|
1
|
+
import type { ExtensionAPI, ExtensionUIContext, SessionShutdownEvent, SessionStartEvent } from "../../types.ts";
|
|
2
2
|
import { resolveSkillMcpServer } from "./config.ts";
|
|
3
3
|
import type { McpServerConfig } from "./config-schema.ts";
|
|
4
4
|
import { ServerConnection } from "./connection.ts";
|
|
5
5
|
import type { McpServerExposureStatus } from "./expose/status.ts";
|
|
6
|
+
import { McpOutputArtifacts } from "./guard/output-guard.ts";
|
|
6
7
|
import type { McpResourceServer } from "./resources.ts";
|
|
7
8
|
import type { McpDisposeReason, McpServerSnapshot, McpServiceSnapshot, McpSessionContext, McpSessionOptions, McpWireStatusSnapshot } from "./service-types.ts";
|
|
9
|
+
type McpElicitationUi = Pick<ExtensionUIContext, "input" | "select" | "confirm">;
|
|
8
10
|
export { registerToolsPreservingActiveSet } from "./active-set.ts";
|
|
9
11
|
export declare class McpService {
|
|
10
12
|
#private;
|
|
@@ -36,6 +38,7 @@ export declare class McpService {
|
|
|
36
38
|
activateSkillMcpTools(names: readonly string[]): void;
|
|
37
39
|
handleSessionShutdown(event: SessionShutdownEvent): Promise<void>;
|
|
38
40
|
dispose(reason: McpDisposeReason): Promise<void>;
|
|
41
|
+
getMcpOutputArtifacts(): McpOutputArtifacts;
|
|
39
42
|
isDisposed(): boolean;
|
|
40
43
|
getConnection(name: string): ServerConnection | undefined;
|
|
41
44
|
reconnectServer(name: string): Promise<void>;
|
|
@@ -63,6 +66,14 @@ export declare class McpService {
|
|
|
63
66
|
* rebuilt it — so scan once after each registration and skip otherwise.
|
|
64
67
|
*/
|
|
65
68
|
maybeRehydrateFromHistory(messages: readonly unknown[]): string[];
|
|
69
|
+
setMcpInstructions(instructions: string): void;
|
|
70
|
+
getMcpInstructions(): string;
|
|
71
|
+
setMcpElicitationUiProvider(provider: (() => McpElicitationUi | undefined) | undefined): void;
|
|
72
|
+
getMcpElicitationUi(): McpElicitationUi | undefined;
|
|
73
|
+
isMcpPromptCommandRegistered(name: string): boolean;
|
|
74
|
+
markMcpPromptCommandRegistered(name: string): void;
|
|
75
|
+
beginInteractiveAuth(serverName: string): boolean;
|
|
76
|
+
endInteractiveAuth(serverName: string): void;
|
|
66
77
|
getPendingAuth(): Map<string, import("./auth/oauth-provider.ts").McpOAuthProvider>;
|
|
67
78
|
getAuthTarget(name: string): {
|
|
68
79
|
config: McpServerConfig;
|
|
@@ -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,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { loadMcpConfig, mergeExtensionMcpServers, resolveSkillMcpServer, visitSp
|
|
|
5
5
|
import { ServerConnection } from "./connection.js";
|
|
6
6
|
import { collectAllPages } from "./expose/pagination.js";
|
|
7
7
|
import { mapMcpCatalogNames } from "./expose/register.js";
|
|
8
|
-
import { cleanupMcpOutputArtifacts } from "./guard/output-guard.js";
|
|
8
|
+
import { cleanupMcpOutputArtifacts, McpOutputArtifacts } from "./guard/output-guard.js";
|
|
9
9
|
import { markMcpConnectionNeedsAuth } from "./health.js";
|
|
10
10
|
import { configureMcpConnectionLifecycle, disposeMcpConnectionLifecycle } from "./idle.js";
|
|
11
11
|
import { refreshMcpInstructionsForSession } from "./instructions.js";
|
|
@@ -28,7 +28,11 @@ export class McpService {
|
|
|
28
28
|
#config = null;
|
|
29
29
|
#authAgentDir;
|
|
30
30
|
#authEnv;
|
|
31
|
+
#elicitationUiProvider;
|
|
32
|
+
#mcpInstructions = "";
|
|
31
33
|
#pendingAuth = new Map();
|
|
34
|
+
#interactiveAuthServers = new Set();
|
|
35
|
+
#promptCommandNames = new Set();
|
|
32
36
|
#refreshActiveSetWhenNoTools = false;
|
|
33
37
|
#tierBRegistration;
|
|
34
38
|
#historyScanned = false;
|
|
@@ -39,6 +43,7 @@ export class McpService {
|
|
|
39
43
|
#wireStatusBySession = new Map();
|
|
40
44
|
#connections = new Map();
|
|
41
45
|
#connectionKeysByName = new Map();
|
|
46
|
+
#outputArtifacts = new McpOutputArtifacts();
|
|
42
47
|
async attachSession(event, ctx, _pi, options = {}) {
|
|
43
48
|
const attach = this.#attachQueue.then(async () => {
|
|
44
49
|
this.#sessionContext = ctx;
|
|
@@ -147,13 +152,21 @@ export class McpService {
|
|
|
147
152
|
this.#lastDisposeReason = reason;
|
|
148
153
|
this.#sessionContext = null;
|
|
149
154
|
this.#config = null;
|
|
155
|
+
this.#elicitationUiProvider = undefined;
|
|
156
|
+
this.#mcpInstructions = "";
|
|
157
|
+
this.#pendingAuth.clear();
|
|
158
|
+
this.#interactiveAuthServers.clear();
|
|
159
|
+
this.#promptCommandNames.clear();
|
|
150
160
|
this.#wireStatusBySession.clear();
|
|
151
161
|
this.#latestWireStatus = { servers: [] };
|
|
152
162
|
const entries = [...this.#connections.values()];
|
|
153
163
|
this.#connections.clear();
|
|
154
164
|
this.#connectionKeysByName.clear();
|
|
155
165
|
await Promise.all(entries.map((entry) => disposeEntryConnection(entry)));
|
|
156
|
-
await cleanupMcpOutputArtifacts();
|
|
166
|
+
await cleanupMcpOutputArtifacts(this.#outputArtifacts);
|
|
167
|
+
}
|
|
168
|
+
getMcpOutputArtifacts() {
|
|
169
|
+
return this.#outputArtifacts;
|
|
157
170
|
}
|
|
158
171
|
isDisposed() {
|
|
159
172
|
return this.#disposed;
|
|
@@ -253,12 +266,14 @@ export class McpService {
|
|
|
253
266
|
authProvider: authPlan.provider,
|
|
254
267
|
config: server.config,
|
|
255
268
|
env: options.env,
|
|
269
|
+
elicitationUiProvider: () => this.getMcpElicitationUi(),
|
|
256
270
|
logger,
|
|
257
271
|
serverName: name,
|
|
258
272
|
});
|
|
259
273
|
const cachedCatalog = useCache ? getValidCachedServer(cache, name, server.configHash) : undefined;
|
|
260
274
|
const entry = {
|
|
261
275
|
agentDir: options.agentDir,
|
|
276
|
+
artifacts: this.#outputArtifacts,
|
|
262
277
|
authPlan,
|
|
263
278
|
cacheRefreshedAfterConnect: false,
|
|
264
279
|
cachedCatalog,
|
|
@@ -466,6 +481,33 @@ export class McpService {
|
|
|
466
481
|
const key = this.#connectionKeysByName.get(name);
|
|
467
482
|
return key === undefined ? undefined : this.#connections.get(key);
|
|
468
483
|
}
|
|
484
|
+
setMcpInstructions(instructions) {
|
|
485
|
+
this.#mcpInstructions = instructions;
|
|
486
|
+
}
|
|
487
|
+
getMcpInstructions() {
|
|
488
|
+
return this.#mcpInstructions;
|
|
489
|
+
}
|
|
490
|
+
setMcpElicitationUiProvider(provider) {
|
|
491
|
+
this.#elicitationUiProvider = provider;
|
|
492
|
+
}
|
|
493
|
+
getMcpElicitationUi() {
|
|
494
|
+
return this.#elicitationUiProvider?.();
|
|
495
|
+
}
|
|
496
|
+
isMcpPromptCommandRegistered(name) {
|
|
497
|
+
return this.#promptCommandNames.has(name);
|
|
498
|
+
}
|
|
499
|
+
markMcpPromptCommandRegistered(name) {
|
|
500
|
+
this.#promptCommandNames.add(name);
|
|
501
|
+
}
|
|
502
|
+
beginInteractiveAuth(serverName) {
|
|
503
|
+
if (this.#interactiveAuthServers.has(serverName))
|
|
504
|
+
return false;
|
|
505
|
+
this.#interactiveAuthServers.add(serverName);
|
|
506
|
+
return true;
|
|
507
|
+
}
|
|
508
|
+
endInteractiveAuth(serverName) {
|
|
509
|
+
this.#interactiveAuthServers.delete(serverName);
|
|
510
|
+
}
|
|
469
511
|
getPendingAuth() {
|
|
470
512
|
return this.#pendingAuth;
|
|
471
513
|
}
|
|
@@ -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, SessionShutdownEvent, SessionStartEvent } from \"../../types.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 } 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];\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\treadonly #pendingAuth = new Map<string, import(\"./auth/oauth-provider.ts\").McpOAuthProvider>();\n\t#refreshActiveSetWhenNoTools = false;\n\t#tierBRegistration: McpSessionRegistration | undefined;\n\t#historyScanned = false;\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\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\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.#captureWireStatus(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.#captureWireStatus(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/** 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.#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();\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\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\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\tentry.disposeListChanged = () => {\n\t\t\tunsubscribe();\n\t\t\tcoalescer.dispose();\n\t\t};\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\tthis.#tierBRegistration = await registerMcpServiceDirectTools(pi, config, this.#connections.values(), {\n\t\t\trefreshActiveSetWhenEmpty: this.#refreshActiveSetWhenNoTools,\n\t\t});\n\t\t// A (re-)registration recomputes the active set from config alone, so any\n\t\t// promotions recorded in history are worth replaying on the next scan.\n\t\tthis.#historyScanned = false;\n\t}\n\n\t/**\n\t * Replay tool_search activation markers from session history through the\n\t * live tier-B activation path (see tool-search.ts). Returns newly activated\n\t * names; safe to call repeatedly (already-active names are skipped).\n\t */\n\trehydrateActiveToolsFromHistory(messages: readonly unknown[]): string[] {\n\t\tthis.#historyScanned = true;\n\t\treturn this.#tierBRegistration?.rehydrateFromHistory(messages) ?? [];\n\t}\n\n\t/**\n\t * Once-per-registration variant for per-turn context events: scanning the\n\t * full history each turn would cost O(history) JSON serialization, and a\n\t * live session's active set only drifts from history when a (re-)registration\n\t * rebuilt it — so scan once after each registration and skip otherwise.\n\t */\n\tmaybeRehydrateFromHistory(messages: readonly unknown[]): string[] {\n\t\tif (this.#historyScanned) return [];\n\t\treturn this.rehydrateActiveToolsFromHistory(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\tthis.#latestWireStatus = snapshot;\n\t\tif (sessionId !== undefined) this.#wireStatusBySession.set(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\tif (cached === undefined) {\n\t\t\t\ttry {\n\t\t\t\t\ttools = (\n\t\t\t\t\t\tawait collectAllPages<ListedTool>((cursor) =>\n\t\t\t\t\t\t\tclient.listTools(cursor === undefined ? {} : { cursor }),\n\t\t\t\t\t\t)\n\t\t\t\t\t).items;\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tif (!(error instanceof Error)) throw error;\n\t\t\t\t\ttools = [];\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tresources = (\n\t\t\t\t\t\tawait collectAllPages<ListedResource>((cursor) =>\n\t\t\t\t\t\t\tclient.listResources(cursor === undefined ? {} : { cursor }),\n\t\t\t\t\t\t)\n\t\t\t\t\t).items;\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tif (!(error instanceof Error)) throw error;\n\t\t\t\t\tresources = [];\n\t\t\t\t}\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};\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\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\";\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\tdisposeMcpReconnect(entry.connection);\n\tdisposeMcpConnectionLifecycle(entry.connection);\n\tawait entry.connection.dispose();\n}\n\nexport function resetMcpServiceForTests(): void {\n\tservice = null;\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 { 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\t#refreshActiveSetWhenNoTools = false;\n\t#tierBRegistration: McpSessionRegistration | undefined;\n\t#historyScanned = false;\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\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.#captureWireStatus(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.#captureWireStatus(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/** 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.#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\tentry.disposeListChanged = () => {\n\t\t\tunsubscribe();\n\t\t\tcoalescer.dispose();\n\t\t};\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\tthis.#tierBRegistration = await registerMcpServiceDirectTools(pi, config, this.#connections.values(), {\n\t\t\trefreshActiveSetWhenEmpty: this.#refreshActiveSetWhenNoTools,\n\t\t});\n\t\t// A (re-)registration recomputes the active set from config alone, so any\n\t\t// promotions recorded in history are worth replaying on the next scan.\n\t\tthis.#historyScanned = false;\n\t}\n\n\t/**\n\t * Replay tool_search activation markers from session history through the\n\t * live tier-B activation path (see tool-search.ts). Returns newly activated\n\t * names; safe to call repeatedly (already-active names are skipped).\n\t */\n\trehydrateActiveToolsFromHistory(messages: readonly unknown[]): string[] {\n\t\tthis.#historyScanned = true;\n\t\treturn this.#tierBRegistration?.rehydrateFromHistory(messages) ?? [];\n\t}\n\n\t/**\n\t * Once-per-registration variant for per-turn context events: scanning the\n\t * full history each turn would cost O(history) JSON serialization, and a\n\t * live session's active set only drifts from history when a (re-)registration\n\t * rebuilt it — so scan once after each registration and skip otherwise.\n\t */\n\tmaybeRehydrateFromHistory(messages: readonly unknown[]): string[] {\n\t\tif (this.#historyScanned) return [];\n\t\treturn this.rehydrateActiveToolsFromHistory(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\tthis.#latestWireStatus = snapshot;\n\t\tif (sessionId !== undefined) this.#wireStatusBySession.set(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\tif (cached === undefined) {\n\t\t\t\ttry {\n\t\t\t\t\ttools = (\n\t\t\t\t\t\tawait collectAllPages<ListedTool>((cursor) =>\n\t\t\t\t\t\t\tclient.listTools(cursor === undefined ? {} : { cursor }),\n\t\t\t\t\t\t)\n\t\t\t\t\t).items;\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tif (!(error instanceof Error)) throw error;\n\t\t\t\t\ttools = [];\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tresources = (\n\t\t\t\t\t\tawait collectAllPages<ListedResource>((cursor) =>\n\t\t\t\t\t\t\tclient.listResources(cursor === undefined ? {} : { cursor }),\n\t\t\t\t\t\t)\n\t\t\t\t\t).items;\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tif (!(error instanceof Error)) throw error;\n\t\t\t\t\tresources = [];\n\t\t\t\t}\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};\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\";\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\tdisposeMcpReconnect(entry.connection);\n\tdisposeMcpConnectionLifecycle(entry.connection);\n\tawait entry.connection.dispose();\n}\n\nexport function resetMcpServiceForTests(): void {\n\tservice = null;\n}\n"]}
|