@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":"commands-auth-dispatch.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/commands-auth-dispatch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"commands-auth-dispatch.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/commands-auth-dispatch.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionAPI, ExtensionCommandContext } from \"../../../types.ts\";\nimport { createMcpLogger } from \"../log.ts\";\nimport type { McpService } from \"../service.ts\";\nimport { type AuthCommandDeps, runAuth, runAuthComplete, runAuthStart, runLogout } from \"./commands-auth.ts\";\n\n// Bridges the /mcp slash command to the pure auth flow runners in\n// commands-auth.ts, sourcing config/agentDir/env from the running service.\nexport async function handleMcpAuthCommand(\n\tsubcommand: string,\n\targs: readonly string[],\n\tctx: ExtensionCommandContext,\n\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n\tservice: McpService,\n): Promise<void> {\n\tconst name = args[0] ?? \"\";\n\tconst target = service.getAuthTarget(name);\n\tif (name.length === 0 || target === undefined) {\n\t\tctx.ui.notify(`Unknown MCP server: ${name || \"<missing>\"}`, \"error\");\n\t\treturn;\n\t}\n\tconst deps: AuthCommandDeps = {\n\t\tagentDir: target.agentDir,\n\t\tcallbackUrl: target.callbackUrl,\n\t\tconfig: target.config,\n\t\tenv: target.env,\n\t\thasUI: ctx.hasUI,\n\t\tlogger: createMcpLogger(name),\n\t\tnotify: (message, type) => ctx.ui.notify(message, type),\n\t\tonReconnect: async () => {\n\t\t\ttry {\n\t\t\t\tawait service.reconnectServer(name);\n\t\t\t} catch {\n\t\t\t\t// A needs_auth/degraded state after logout is expected; status shows it.\n\t\t\t}\n\t\t\tawait service.attachSession({ type: \"session_start\", reason: \"reload\" }, ctx, pi).catch(() => undefined);\n\t\t},\n\t\topenBrowser: (url) => ctx.ui.notify(`Open this URL to authorize ${name}:\\n${url.toString()}`),\n\t\tpending: service.getPendingAuth(),\n\t\tinteractiveGuard: {\n\t\t\tbegin: (serverName) => service.beginInteractiveAuth(serverName),\n\t\t\tend: (serverName) => service.endInteractiveAuth(serverName),\n\t\t},\n\t\tserverName: name,\n\t};\n\tif (subcommand === \"auth\") return runAuth(deps);\n\tif (subcommand === \"auth-start\") {\n\t\tawait runAuthStart(deps);\n\t\treturn;\n\t}\n\tif (subcommand === \"auth-complete\") {\n\t\tconst redirect = args[1] ?? \"\";\n\t\tif (redirect.length === 0) {\n\t\t\tctx.ui.notify(`Usage: /mcp auth-complete ${name} <redirect-url>`, \"error\");\n\t\t\treturn;\n\t\t}\n\t\treturn runAuthComplete(deps, redirect);\n\t}\n\tif (subcommand === \"logout\") return runLogout(deps);\n\tctx.ui.notify(`Unknown MCP auth subcommand: ${subcommand}`, \"error\");\n}\n"]}
|
|
@@ -15,6 +15,11 @@ export interface AuthCommandDeps {
|
|
|
15
15
|
openBrowser?: (url: URL) => void | Promise<void>;
|
|
16
16
|
onReconnect: () => Promise<void>;
|
|
17
17
|
pending: Map<string, McpOAuthProvider>;
|
|
18
|
+
/** Per-service guard: the same server may authenticate in another session. */
|
|
19
|
+
interactiveGuard?: {
|
|
20
|
+
begin(serverName: string): boolean;
|
|
21
|
+
end(serverName: string): void;
|
|
22
|
+
};
|
|
18
23
|
flow?: OAuthFlowOptions;
|
|
19
24
|
}
|
|
20
25
|
export declare function runAuth(deps: AuthCommandDeps): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands-auth.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/commands-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,KAAK,IAAI,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IAEf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACxB;AAqCD,wBAAsB,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBlE;
|
|
1
|
+
{"version":3,"file":"commands-auth.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/commands-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,KAAK,IAAI,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IAEf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACvC,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE;QAAE,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACzF,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACxB;AAqCD,wBAAsB,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBlE;AA+DD,wBAAsB,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAezE;AAGD,wBAAsB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ/F;AAGD,wBAAsB,SAAS,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpE"}
|
|
@@ -46,10 +46,12 @@ export async function runAuth(deps) {
|
|
|
46
46
|
await runInteractive(deps);
|
|
47
47
|
}
|
|
48
48
|
async function runInteractive(deps) {
|
|
49
|
-
|
|
49
|
+
const beginInteractiveAuth = deps.interactiveGuard?.begin(deps.serverName) ?? !activeInteractiveAuthServers.has(deps.serverName);
|
|
50
|
+
if (!beginInteractiveAuth) {
|
|
50
51
|
throw new OAuthFlowError("needs_auth", `MCP server ${deps.serverName} authorization is already in progress; complete the existing browser flow or retry after it finishes.`, { serverName: deps.serverName });
|
|
51
52
|
}
|
|
52
|
-
|
|
53
|
+
if (deps.interactiveGuard === undefined)
|
|
54
|
+
activeInteractiveAuthServers.add(deps.serverName);
|
|
53
55
|
let provider;
|
|
54
56
|
let channel;
|
|
55
57
|
const oauth = deps.config.oauth;
|
|
@@ -87,7 +89,10 @@ async function runInteractive(deps) {
|
|
|
87
89
|
deps.notify(`MCP server ${deps.serverName} authorized`);
|
|
88
90
|
}
|
|
89
91
|
finally {
|
|
90
|
-
|
|
92
|
+
if (deps.interactiveGuard)
|
|
93
|
+
deps.interactiveGuard.end(deps.serverName);
|
|
94
|
+
else
|
|
95
|
+
activeInteractiveAuthServers.delete(deps.serverName);
|
|
91
96
|
await channel?.close();
|
|
92
97
|
}
|
|
93
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands-auth.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/commands-auth.ts"],"names":[],"mappings":"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","sourcesContent":["import type { McpServerConfig } from \"../config-schema.ts\";\nimport type { McpLogger } from \"../log.ts\";\nimport { openCallbackChannel } from \"./callback.ts\";\nimport { resolveServerAuth } from \"./context.ts\";\nimport type { OAuthFlowOptions } from \"./oauth.ts\";\nimport {\n\tbeginAuthorization,\n\tclientCredentialsGrant,\n\tcompleteAuthorization,\n\tfinishAuthorization,\n\tlogout,\n} from \"./oauth.ts\";\nimport { OAuthFlowError } from \"./oauth-errors.ts\";\nimport type { McpOAuthProvider } from \"./oauth-provider.ts\";\n\ntype Notify = (message: string, type?: \"info\" | \"warning\" | \"error\") => void;\n\nexport interface AuthCommandDeps {\n\tserverName: string;\n\tconfig: McpServerConfig;\n\tagentDir?: string;\n\tenv?: Record<string, string | undefined>;\n\tlogger?: McpLogger;\n\thasUI: boolean;\n\tnotify: Notify;\n\t// settings.oauthCallbackUrl override: when set, no local listener is opened.\n\tcallbackUrl?: string;\n\topenBrowser?: (url: URL) => void | Promise<void>;\n\tonReconnect: () => Promise<void>;\n\t// Persists the provider between auth-start and auth-complete so the in-memory\n\t// CSRF state survives across two command invocations in one session.\n\tpending: Map<string, McpOAuthProvider>;\n\tflow?: OAuthFlowOptions;\n}\n\nconst PASTE_REDIRECT = \"http://127.0.0.1:0/callback\";\nconst activeInteractiveAuthServers = new Set<string>();\n\nfunction ensureOAuth(deps: AuthCommandDeps): void {\n\tif (deps.config.auth === false || deps.config.type !== \"http\" || deps.config.url === undefined) {\n\t\tthrow new OAuthFlowError(\"headless\", `MCP server ${deps.serverName} is not an OAuth HTTP server.`, {\n\t\t\tserverName: deps.serverName,\n\t\t});\n\t}\n}\n\nfunction buildProvider(\n\tdeps: AuthCommandDeps,\n\tredirectUrl: string,\n\tonRedirect?: (url: URL) => void | Promise<void>,\n): McpOAuthProvider {\n\tconst plan = resolveServerAuth({\n\t\tagentDir: deps.agentDir,\n\t\tconfig: { ...deps.config, auth: \"oauth\" },\n\t\tenv: deps.env,\n\t\tlogger: deps.logger,\n\t\tonRedirect,\n\t\tredirectUrl,\n\t\tserverName: deps.serverName,\n\t});\n\tif (plan.provider === undefined) {\n\t\tthrow new OAuthFlowError(\"headless\", `MCP server ${deps.serverName} could not build an OAuth provider.`, {\n\t\t\tserverName: deps.serverName,\n\t\t});\n\t}\n\treturn plan.provider;\n}\n\n// `/mcp auth <server>`: client_credentials M2M, or interactive loopback flow.\n// Non-UI callers fail fast with an actionable headless hint (no browser).\nexport async function runAuth(deps: AuthCommandDeps): Promise<void> {\n\tensureOAuth(deps);\n\tif (deps.config.oauth?.flow === \"client_credentials\") {\n\t\tconst provider = buildProvider(deps, deps.callbackUrl ?? PASTE_REDIRECT);\n\t\tawait clientCredentialsGrant(provider, deps.flow);\n\t\tawait deps.onReconnect();\n\t\tdeps.notify(`MCP server ${deps.serverName} authenticated (client_credentials)`);\n\t\treturn;\n\t}\n\tif (!deps.hasUI) {\n\t\tdeps.notify(\n\t\t\t`MCP server ${deps.serverName} needs interactive OAuth. Run senpi in a terminal, then: /mcp auth-start ${deps.serverName} and /mcp auth-complete ${deps.serverName} <redirect-url>`,\n\t\t\t\"error\",\n\t\t);\n\t\treturn;\n\t}\n\tawait runInteractive(deps);\n}\n\nasync function runInteractive(deps: AuthCommandDeps): Promise<void> {\n\tif (activeInteractiveAuthServers.has(deps.serverName)) {\n\t\tthrow new OAuthFlowError(\n\t\t\t\"needs_auth\",\n\t\t\t`MCP server ${deps.serverName} authorization is already in progress; complete the existing browser flow or retry after it finishes.`,\n\t\t\t{ serverName: deps.serverName },\n\t\t);\n\t}\n\tactiveInteractiveAuthServers.add(deps.serverName);\n\tlet provider: McpOAuthProvider | undefined;\n\tlet channel: Awaited<ReturnType<typeof openCallbackChannel>> | undefined;\n\tconst oauth = deps.config.oauth;\n\tlet callbackPort: number | undefined;\n\tif (\n\t\t(deps.callbackUrl === undefined || deps.callbackUrl.length === 0) &&\n\t\toauth?.clientId !== undefined &&\n\t\toauth.clientMetadataUrl === undefined\n\t) {\n\t\tcallbackPort = oauth.callbackPort;\n\t}\n\ttry {\n\t\tchannel = await openCallbackChannel({\n\t\t\toverrideUrl: deps.callbackUrl,\n\t\t\tport: callbackPort,\n\t\t\tserverName: deps.serverName,\n\t\t\tvalidateState: (state) => provider?.consumeState(state) ?? false,\n\t\t});\n\t\tconst loopbackResult = channel.usesLoopback ? channel.waitForCode() : undefined;\n\t\tprovider = buildProvider(deps, channel.redirectUrl, (url) => deps.openBrowser?.(url));\n\t\tconst begin = await beginAuthorization(provider, deps.flow);\n\t\tif (begin.authorizationUrl !== undefined) deps.notify(`Opening browser to authorize ${deps.serverName}...`);\n\t\tif (!channel.usesLoopback) {\n\t\t\tdeps.pending.set(deps.serverName, provider);\n\t\t\tif (begin.authorizationUrl === undefined) {\n\t\t\t\tthrow new OAuthFlowError(\n\t\t\t\t\t\"needs_auth\",\n\t\t\t\t\t`MCP server ${deps.serverName} did not produce an authorization URL.`,\n\t\t\t\t\t{\n\t\t\t\t\t\tserverName: deps.serverName,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tdeps.notify(\n\t\t\t\t`Complete the browser flow, then run /mcp auth-complete ${deps.serverName} <redirect-url> with the final redirect URL.`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst { code } = await (loopbackResult ?? channel.waitForCode());\n\t\tawait finishAuthorization(provider, code, deps.flow);\n\t\tawait deps.onReconnect();\n\t\tdeps.notify(`MCP server ${deps.serverName} authorized`);\n\t} finally {\n\t\tactiveInteractiveAuthServers.delete(deps.serverName);\n\t\tawait channel?.close();\n\t}\n}\n\n// `/mcp auth-start <server>`: print the authorize URL for a browser-less paste.\nexport async function runAuthStart(deps: AuthCommandDeps): Promise<string> {\n\tensureOAuth(deps);\n\tconst provider = buildProvider(deps, deps.callbackUrl ?? PASTE_REDIRECT);\n\tconst begin = await beginAuthorization(provider, deps.flow);\n\tconst url = begin.authorizationUrl;\n\tif (url === undefined) {\n\t\tthrow new OAuthFlowError(\"needs_auth\", `MCP server ${deps.serverName} did not produce an authorization URL.`, {\n\t\t\tserverName: deps.serverName,\n\t\t});\n\t}\n\tdeps.pending.set(deps.serverName, provider);\n\tdeps.notify(\n\t\t`Open this URL, approve, then run /mcp auth-complete ${deps.serverName} <redirect-url>:\\n${url.toString()}`,\n\t);\n\treturn url.toString();\n}\n\n// `/mcp auth-complete <server> <redirect-url>`: finish the paste flow.\nexport async function runAuthComplete(deps: AuthCommandDeps, redirectUrl: string): Promise<void> {\n\tensureOAuth(deps);\n\tconst pending = deps.pending.get(deps.serverName);\n\tconst provider = pending ?? buildProvider(deps, deps.callbackUrl ?? PASTE_REDIRECT);\n\tawait completeAuthorization(provider, redirectUrl, deps.flow);\n\tdeps.pending.delete(deps.serverName);\n\tawait deps.onReconnect();\n\tdeps.notify(`MCP server ${deps.serverName} authorized`);\n}\n\n// `/mcp logout <server>`: clear stored credentials.\nexport async function runLogout(deps: AuthCommandDeps): Promise<void> {\n\tconst provider = buildProvider(deps, PASTE_REDIRECT);\n\tawait logout(provider);\n\tdeps.pending.delete(deps.serverName);\n\tawait deps.onReconnect();\n\tdeps.notify(`MCP server ${deps.serverName} logged out`);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"commands-auth.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/commands-auth.ts"],"names":[],"mappings":"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","sourcesContent":["import type { McpServerConfig } from \"../config-schema.ts\";\nimport type { McpLogger } from \"../log.ts\";\nimport { openCallbackChannel } from \"./callback.ts\";\nimport { resolveServerAuth } from \"./context.ts\";\nimport type { OAuthFlowOptions } from \"./oauth.ts\";\nimport {\n\tbeginAuthorization,\n\tclientCredentialsGrant,\n\tcompleteAuthorization,\n\tfinishAuthorization,\n\tlogout,\n} from \"./oauth.ts\";\nimport { OAuthFlowError } from \"./oauth-errors.ts\";\nimport type { McpOAuthProvider } from \"./oauth-provider.ts\";\n\ntype Notify = (message: string, type?: \"info\" | \"warning\" | \"error\") => void;\n\nexport interface AuthCommandDeps {\n\tserverName: string;\n\tconfig: McpServerConfig;\n\tagentDir?: string;\n\tenv?: Record<string, string | undefined>;\n\tlogger?: McpLogger;\n\thasUI: boolean;\n\tnotify: Notify;\n\t// settings.oauthCallbackUrl override: when set, no local listener is opened.\n\tcallbackUrl?: string;\n\topenBrowser?: (url: URL) => void | Promise<void>;\n\tonReconnect: () => Promise<void>;\n\t// Persists the provider between auth-start and auth-complete so the in-memory\n\t// CSRF state survives across two command invocations in one session.\n\tpending: Map<string, McpOAuthProvider>;\n\t/** Per-service guard: the same server may authenticate in another session. */\n\tinteractiveGuard?: { begin(serverName: string): boolean; end(serverName: string): void };\n\tflow?: OAuthFlowOptions;\n}\n\nconst PASTE_REDIRECT = \"http://127.0.0.1:0/callback\";\nconst activeInteractiveAuthServers = new Set<string>();\n\nfunction ensureOAuth(deps: AuthCommandDeps): void {\n\tif (deps.config.auth === false || deps.config.type !== \"http\" || deps.config.url === undefined) {\n\t\tthrow new OAuthFlowError(\"headless\", `MCP server ${deps.serverName} is not an OAuth HTTP server.`, {\n\t\t\tserverName: deps.serverName,\n\t\t});\n\t}\n}\n\nfunction buildProvider(\n\tdeps: AuthCommandDeps,\n\tredirectUrl: string,\n\tonRedirect?: (url: URL) => void | Promise<void>,\n): McpOAuthProvider {\n\tconst plan = resolveServerAuth({\n\t\tagentDir: deps.agentDir,\n\t\tconfig: { ...deps.config, auth: \"oauth\" },\n\t\tenv: deps.env,\n\t\tlogger: deps.logger,\n\t\tonRedirect,\n\t\tredirectUrl,\n\t\tserverName: deps.serverName,\n\t});\n\tif (plan.provider === undefined) {\n\t\tthrow new OAuthFlowError(\"headless\", `MCP server ${deps.serverName} could not build an OAuth provider.`, {\n\t\t\tserverName: deps.serverName,\n\t\t});\n\t}\n\treturn plan.provider;\n}\n\n// `/mcp auth <server>`: client_credentials M2M, or interactive loopback flow.\n// Non-UI callers fail fast with an actionable headless hint (no browser).\nexport async function runAuth(deps: AuthCommandDeps): Promise<void> {\n\tensureOAuth(deps);\n\tif (deps.config.oauth?.flow === \"client_credentials\") {\n\t\tconst provider = buildProvider(deps, deps.callbackUrl ?? PASTE_REDIRECT);\n\t\tawait clientCredentialsGrant(provider, deps.flow);\n\t\tawait deps.onReconnect();\n\t\tdeps.notify(`MCP server ${deps.serverName} authenticated (client_credentials)`);\n\t\treturn;\n\t}\n\tif (!deps.hasUI) {\n\t\tdeps.notify(\n\t\t\t`MCP server ${deps.serverName} needs interactive OAuth. Run senpi in a terminal, then: /mcp auth-start ${deps.serverName} and /mcp auth-complete ${deps.serverName} <redirect-url>`,\n\t\t\t\"error\",\n\t\t);\n\t\treturn;\n\t}\n\tawait runInteractive(deps);\n}\n\nasync function runInteractive(deps: AuthCommandDeps): Promise<void> {\n\tconst beginInteractiveAuth =\n\t\tdeps.interactiveGuard?.begin(deps.serverName) ?? !activeInteractiveAuthServers.has(deps.serverName);\n\tif (!beginInteractiveAuth) {\n\t\tthrow new OAuthFlowError(\n\t\t\t\"needs_auth\",\n\t\t\t`MCP server ${deps.serverName} authorization is already in progress; complete the existing browser flow or retry after it finishes.`,\n\t\t\t{ serverName: deps.serverName },\n\t\t);\n\t}\n\tif (deps.interactiveGuard === undefined) activeInteractiveAuthServers.add(deps.serverName);\n\tlet provider: McpOAuthProvider | undefined;\n\tlet channel: Awaited<ReturnType<typeof openCallbackChannel>> | undefined;\n\tconst oauth = deps.config.oauth;\n\tlet callbackPort: number | undefined;\n\tif (\n\t\t(deps.callbackUrl === undefined || deps.callbackUrl.length === 0) &&\n\t\toauth?.clientId !== undefined &&\n\t\toauth.clientMetadataUrl === undefined\n\t) {\n\t\tcallbackPort = oauth.callbackPort;\n\t}\n\ttry {\n\t\tchannel = await openCallbackChannel({\n\t\t\toverrideUrl: deps.callbackUrl,\n\t\t\tport: callbackPort,\n\t\t\tserverName: deps.serverName,\n\t\t\tvalidateState: (state) => provider?.consumeState(state) ?? false,\n\t\t});\n\t\tconst loopbackResult = channel.usesLoopback ? channel.waitForCode() : undefined;\n\t\tprovider = buildProvider(deps, channel.redirectUrl, (url) => deps.openBrowser?.(url));\n\t\tconst begin = await beginAuthorization(provider, deps.flow);\n\t\tif (begin.authorizationUrl !== undefined) deps.notify(`Opening browser to authorize ${deps.serverName}...`);\n\t\tif (!channel.usesLoopback) {\n\t\t\tdeps.pending.set(deps.serverName, provider);\n\t\t\tif (begin.authorizationUrl === undefined) {\n\t\t\t\tthrow new OAuthFlowError(\n\t\t\t\t\t\"needs_auth\",\n\t\t\t\t\t`MCP server ${deps.serverName} did not produce an authorization URL.`,\n\t\t\t\t\t{\n\t\t\t\t\t\tserverName: deps.serverName,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tdeps.notify(\n\t\t\t\t`Complete the browser flow, then run /mcp auth-complete ${deps.serverName} <redirect-url> with the final redirect URL.`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst { code } = await (loopbackResult ?? channel.waitForCode());\n\t\tawait finishAuthorization(provider, code, deps.flow);\n\t\tawait deps.onReconnect();\n\t\tdeps.notify(`MCP server ${deps.serverName} authorized`);\n\t} finally {\n\t\tif (deps.interactiveGuard) deps.interactiveGuard.end(deps.serverName);\n\t\telse activeInteractiveAuthServers.delete(deps.serverName);\n\t\tawait channel?.close();\n\t}\n}\n\n// `/mcp auth-start <server>`: print the authorize URL for a browser-less paste.\nexport async function runAuthStart(deps: AuthCommandDeps): Promise<string> {\n\tensureOAuth(deps);\n\tconst provider = buildProvider(deps, deps.callbackUrl ?? PASTE_REDIRECT);\n\tconst begin = await beginAuthorization(provider, deps.flow);\n\tconst url = begin.authorizationUrl;\n\tif (url === undefined) {\n\t\tthrow new OAuthFlowError(\"needs_auth\", `MCP server ${deps.serverName} did not produce an authorization URL.`, {\n\t\t\tserverName: deps.serverName,\n\t\t});\n\t}\n\tdeps.pending.set(deps.serverName, provider);\n\tdeps.notify(\n\t\t`Open this URL, approve, then run /mcp auth-complete ${deps.serverName} <redirect-url>:\\n${url.toString()}`,\n\t);\n\treturn url.toString();\n}\n\n// `/mcp auth-complete <server> <redirect-url>`: finish the paste flow.\nexport async function runAuthComplete(deps: AuthCommandDeps, redirectUrl: string): Promise<void> {\n\tensureOAuth(deps);\n\tconst pending = deps.pending.get(deps.serverName);\n\tconst provider = pending ?? buildProvider(deps, deps.callbackUrl ?? PASTE_REDIRECT);\n\tawait completeAuthorization(provider, redirectUrl, deps.flow);\n\tdeps.pending.delete(deps.serverName);\n\tawait deps.onReconnect();\n\tdeps.notify(`MCP server ${deps.serverName} authorized`);\n}\n\n// `/mcp logout <server>`: clear stored credentials.\nexport async function runLogout(deps: AuthCommandDeps): Promise<void> {\n\tconst provider = buildProvider(deps, PASTE_REDIRECT);\n\tawait logout(provider);\n\tdeps.pending.delete(deps.serverName);\n\tawait deps.onReconnect();\n\tdeps.notify(`MCP server ${deps.serverName} logged out`);\n}\n"]}
|
|
@@ -2,6 +2,7 @@ import type { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
|
2
2
|
import type { McpCachedServerCatalog } from "./catalog-cache.ts";
|
|
3
3
|
import type { McpServerConfig, McpSettings } from "./config-schema.ts";
|
|
4
4
|
import type { ServerConnection } from "./connection.ts";
|
|
5
|
+
import type { McpOutputArtifacts } from "./guard/output-guard.ts";
|
|
5
6
|
import type { McpEnsureFreshAuth } from "./health.ts";
|
|
6
7
|
type ListedTool = Awaited<ReturnType<Client["listTools"]>>["tools"][number];
|
|
7
8
|
export interface McpToolCatalogEntry {
|
|
@@ -15,9 +16,10 @@ export interface McpToolCatalogEntry {
|
|
|
15
16
|
ensureConnected?: () => Promise<void>;
|
|
16
17
|
ensureFresh?: McpEnsureFreshAuth;
|
|
17
18
|
agentDir?: string;
|
|
19
|
+
artifacts?: McpOutputArtifacts;
|
|
18
20
|
outputGuard?: McpSettings["outputGuard"];
|
|
19
21
|
}
|
|
20
|
-
type McpToolCatalogOptions = Pick<McpToolCatalogEntry, "agentDir" | "ensureFresh" | "outputGuard">;
|
|
22
|
+
type McpToolCatalogOptions = Pick<McpToolCatalogEntry, "agentDir" | "artifacts" | "ensureFresh" | "outputGuard">;
|
|
21
23
|
export declare function collectToolCatalog(server: string, connection: ServerConnection, config: McpServerConfig, options?: McpToolCatalogOptions): Promise<McpToolCatalogEntry[]>;
|
|
22
24
|
export declare function cachedToolsToCatalogEntries(server: string, catalog: McpCachedServerCatalog, connection: ServerConnection, requestTimeoutMs: number, ensureConnected: () => Promise<void>, options?: McpToolCatalogOptions): McpToolCatalogEntry[];
|
|
23
25
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;CACzC;AAED,KAAK,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,WAAW,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;CACzC;AAED,KAAK,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC,CAAC;AAEjH,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,eAAe,EACvB,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAiBhC;AAED,wBAAgB,2BAA2B,CAC1C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,sBAAsB,EAC/B,UAAU,EAAE,gBAAgB,EAC5B,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACpC,OAAO,GAAE,qBAA0B,GACjC,mBAAmB,EAAE,CAevB"}
|
|
@@ -4,6 +4,7 @@ export async function collectToolCatalog(server, connection, config, options = {
|
|
|
4
4
|
return result.items.map((tool) => ({
|
|
5
5
|
annotations: tool.annotations,
|
|
6
6
|
agentDir: options.agentDir,
|
|
7
|
+
artifacts: options.artifacts,
|
|
7
8
|
connection,
|
|
8
9
|
description: tool.description,
|
|
9
10
|
ensureFresh: options.ensureFresh,
|
|
@@ -18,6 +19,7 @@ export function cachedToolsToCatalogEntries(server, catalog, connection, request
|
|
|
18
19
|
return catalog.tools.map((tool) => ({
|
|
19
20
|
annotations: tool.annotations,
|
|
20
21
|
agentDir: options.agentDir,
|
|
22
|
+
artifacts: options.artifacts,
|
|
21
23
|
connection,
|
|
22
24
|
description: tool.description,
|
|
23
25
|
ensureConnected,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/catalog.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/catalog.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAuBzD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,MAAc,EACd,UAA4B,EAC5B,MAAuB,EACvB,OAAO,GAA0B,EAAE;IAEnC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAa,CAAC,MAAM,EAAE,EAAE,CAC3D,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CACzG,CAAC;IACF,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU;QACV,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,MAAM,EAAE,IAAI,CAAC,WAAW;QACxB,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,IAAI;KACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CAC1C,MAAc,EACd,OAA+B,EAC/B,UAA4B,EAC5B,gBAAwB,EACxB,eAAoC,EACpC,OAAO,GAA0B,EAAE;IAEnC,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU;QACV,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,eAAe;QACf,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,gBAAgB;QAChB,MAAM,EAAE,IAAI,CAAC,WAAW;QACxB,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,IAAI;KACf,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport type { McpCachedServerCatalog } from \"./catalog-cache.ts\";\nimport type { McpServerConfig, McpSettings } from \"./config-schema.ts\";\nimport type { ServerConnection } from \"./connection.ts\";\nimport { collectAllPages } from \"./expose/pagination.ts\";\nimport type { McpOutputArtifacts } from \"./guard/output-guard.ts\";\nimport type { McpEnsureFreshAuth } from \"./health.ts\";\n\ntype ListedTool = Awaited<ReturnType<Client[\"listTools\"]>>[\"tools\"][number];\n\nexport interface McpToolCatalogEntry {\n\tserver: string;\n\ttool: string;\n\tschema: ListedTool[\"inputSchema\"];\n\tdescription?: string;\n\tannotations?: ListedTool[\"annotations\"];\n\trequestTimeoutMs: number;\n\tconnection: ServerConnection;\n\tensureConnected?: () => Promise<void>;\n\tensureFresh?: McpEnsureFreshAuth;\n\tagentDir?: string;\n\tartifacts?: McpOutputArtifacts;\n\toutputGuard?: McpSettings[\"outputGuard\"];\n}\n\ntype McpToolCatalogOptions = Pick<McpToolCatalogEntry, \"agentDir\" | \"artifacts\" | \"ensureFresh\" | \"outputGuard\">;\n\nexport async function collectToolCatalog(\n\tserver: string,\n\tconnection: ServerConnection,\n\tconfig: McpServerConfig,\n\toptions: McpToolCatalogOptions = {},\n): Promise<McpToolCatalogEntry[]> {\n\tconst result = await collectAllPages<ListedTool>((cursor) =>\n\t\tconnection.client.listTools(cursor === undefined ? {} : { cursor }, { timeout: config.requestTimeoutMs }),\n\t);\n\treturn result.items.map((tool) => ({\n\t\tannotations: tool.annotations,\n\t\tagentDir: options.agentDir,\n\t\tartifacts: options.artifacts,\n\t\tconnection,\n\t\tdescription: tool.description,\n\t\tensureFresh: options.ensureFresh,\n\t\toutputGuard: options.outputGuard,\n\t\trequestTimeoutMs: config.requestTimeoutMs,\n\t\tschema: tool.inputSchema,\n\t\tserver,\n\t\ttool: tool.name,\n\t}));\n}\n\nexport function cachedToolsToCatalogEntries(\n\tserver: string,\n\tcatalog: McpCachedServerCatalog,\n\tconnection: ServerConnection,\n\trequestTimeoutMs: number,\n\tensureConnected: () => Promise<void>,\n\toptions: McpToolCatalogOptions = {},\n): McpToolCatalogEntry[] {\n\treturn catalog.tools.map((tool) => ({\n\t\tannotations: tool.annotations,\n\t\tagentDir: options.agentDir,\n\t\tartifacts: options.artifacts,\n\t\tconnection,\n\t\tdescription: tool.description,\n\t\tensureConnected,\n\t\tensureFresh: options.ensureFresh,\n\t\toutputGuard: options.outputGuard,\n\t\trequestTimeoutMs,\n\t\tschema: tool.inputSchema,\n\t\tserver,\n\t\ttool: tool.name,\n\t}));\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ExtensionAPI } from "../../types.ts";
|
|
2
|
-
export declare function registerMcpCommands(pi: ExtensionAPI): void;
|
|
2
|
+
export declare function registerMcpCommands(pi: ExtensionAPI, service?: import("./service.ts").McpService): void;
|
|
3
3
|
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AAwB5E,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AAwB5E,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,oCAAkB,GAAG,IAAI,CAarF"}
|
|
@@ -17,13 +17,13 @@ const SUBCOMMANDS = [
|
|
|
17
17
|
"logout",
|
|
18
18
|
];
|
|
19
19
|
const AUTH_SUBCOMMANDS = new Set(["auth", "auth-start", "auth-complete", "logout"]);
|
|
20
|
-
export function registerMcpCommands(pi) {
|
|
20
|
+
export function registerMcpCommands(pi, service = getMcpService()) {
|
|
21
21
|
pi.registerCommand("mcp", {
|
|
22
22
|
description: "Inspect and manage MCP servers.",
|
|
23
23
|
getArgumentCompletions: (prefix) => SUBCOMMANDS.filter((item) => item.startsWith(prefix)).map((value) => ({ value, label: value })),
|
|
24
24
|
handler: async (rawArgs, ctx) => {
|
|
25
25
|
try {
|
|
26
|
-
await handleMcpCommand(rawArgs, ctx, pi);
|
|
26
|
+
await handleMcpCommand(rawArgs, ctx, pi, service);
|
|
27
27
|
}
|
|
28
28
|
catch (error) {
|
|
29
29
|
ctx.ui.notify(error instanceof Error ? error.message : String(error), "error");
|
|
@@ -31,45 +31,45 @@ export function registerMcpCommands(pi) {
|
|
|
31
31
|
},
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
|
-
async function handleMcpCommand(rawArgs, ctx, pi) {
|
|
34
|
+
async function handleMcpCommand(rawArgs, ctx, pi, service) {
|
|
35
35
|
const args = splitCommandArgs(rawArgs);
|
|
36
36
|
const subcommand = args[0] ?? "";
|
|
37
37
|
if (subcommand === "") {
|
|
38
|
-
await showPanel(ctx);
|
|
38
|
+
await showPanel(ctx, service);
|
|
39
39
|
return;
|
|
40
40
|
}
|
|
41
41
|
if (AUTH_SUBCOMMANDS.has(subcommand)) {
|
|
42
|
-
await handleMcpAuthCommand(subcommand, args.slice(1), ctx, pi);
|
|
42
|
+
await handleMcpAuthCommand(subcommand, args.slice(1), ctx, pi, service);
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
45
45
|
if (subcommand === "status") {
|
|
46
|
-
await notifyStatus(ctx);
|
|
46
|
+
await notifyStatus(ctx, service);
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
49
|
if (subcommand === "add") {
|
|
50
|
-
await addServer(args.slice(1), ctx, pi);
|
|
50
|
+
await addServer(args.slice(1), ctx, pi, service);
|
|
51
51
|
return;
|
|
52
52
|
}
|
|
53
53
|
if (subcommand === "enable" || subcommand === "disable") {
|
|
54
|
-
await setServerEnabled(ctx, pi, args[1] ?? "", subcommand === "enable");
|
|
54
|
+
await setServerEnabled(ctx, pi, service, args[1] ?? "", subcommand === "enable");
|
|
55
55
|
return;
|
|
56
56
|
}
|
|
57
57
|
if (subcommand === "test") {
|
|
58
|
-
await testServer(args[1] ?? "", ctx);
|
|
58
|
+
await testServer(args[1] ?? "", ctx, service);
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
61
|
if (subcommand === "logs") {
|
|
62
|
-
showLogs(args[1] ?? "", ctx);
|
|
62
|
+
showLogs(args[1] ?? "", ctx, service);
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
65
65
|
if (subcommand === "reconnect") {
|
|
66
|
-
await reconnectServer(args[1] ?? "", ctx, pi);
|
|
66
|
+
await reconnectServer(args[1] ?? "", ctx, pi, service);
|
|
67
67
|
return;
|
|
68
68
|
}
|
|
69
69
|
ctx.ui.notify(`Unknown /mcp subcommand: ${subcommand}`, "error");
|
|
70
70
|
}
|
|
71
|
-
async function showPanel(ctx) {
|
|
72
|
-
const text = await renderStatus("MCP servers");
|
|
71
|
+
async function showPanel(ctx, service) {
|
|
72
|
+
const text = await renderStatus("MCP servers", service);
|
|
73
73
|
if (!ctx.hasUI) {
|
|
74
74
|
ctx.ui.notify(text);
|
|
75
75
|
return;
|
|
@@ -78,15 +78,14 @@ async function showPanel(ctx) {
|
|
|
78
78
|
if (choice === undefined)
|
|
79
79
|
ctx.ui.notify(text);
|
|
80
80
|
}
|
|
81
|
-
async function notifyStatus(ctx) {
|
|
82
|
-
ctx.ui.notify(await renderStatus("MCP status"));
|
|
81
|
+
async function notifyStatus(ctx, service) {
|
|
82
|
+
ctx.ui.notify(await renderStatus("MCP status", service));
|
|
83
83
|
}
|
|
84
|
-
async function renderStatus(title) {
|
|
85
|
-
const service = getMcpService();
|
|
84
|
+
async function renderStatus(title, service) {
|
|
86
85
|
const rows = await buildMcpStatusRows(service.getServerSnapshots(), (name) => service.getServerExposureStatus(name));
|
|
87
86
|
return formatMcpStatus(title, rows);
|
|
88
87
|
}
|
|
89
|
-
async function addServer(args, ctx, pi) {
|
|
88
|
+
async function addServer(args, ctx, pi, service) {
|
|
90
89
|
const [name, ...endpoint] = args;
|
|
91
90
|
if (!name || endpoint.length === 0) {
|
|
92
91
|
ctx.ui.notify("Usage: /mcp add <name> <command...|url>", "error");
|
|
@@ -103,24 +102,24 @@ async function addServer(args, ctx, pi) {
|
|
|
103
102
|
return;
|
|
104
103
|
}
|
|
105
104
|
addGlobalMcpServer(name, server);
|
|
106
|
-
await
|
|
105
|
+
await service.attachSession({ type: "session_start", reason: "reload" }, ctx, pi);
|
|
107
106
|
ctx.ui.notify(`Added MCP server ${name}`);
|
|
108
107
|
}
|
|
109
|
-
async function setServerEnabled(ctx, pi, name, enabled) {
|
|
110
|
-
if (!ensureKnown(name, ctx))
|
|
108
|
+
async function setServerEnabled(ctx, pi, service, name, enabled) {
|
|
109
|
+
if (!ensureKnown(name, ctx, service))
|
|
111
110
|
return;
|
|
112
111
|
if (!setGlobalMcpServerEnabled(name, enabled)) {
|
|
113
112
|
ctx.ui.notify(`MCP server ${name} is not in the global config file`, "error");
|
|
114
113
|
return;
|
|
115
114
|
}
|
|
116
115
|
ctx.ui.notify(`MCP server ${name} connecting`);
|
|
117
|
-
await
|
|
116
|
+
await service.attachSession({ type: "session_start", reason: "reload" }, ctx, pi);
|
|
118
117
|
ctx.ui.notify(`${enabled ? "Enabled" : "Disabled"} MCP server ${name}`);
|
|
119
118
|
}
|
|
120
|
-
async function testServer(name, ctx) {
|
|
121
|
-
if (!ensureKnown(name, ctx))
|
|
119
|
+
async function testServer(name, ctx, service) {
|
|
120
|
+
if (!ensureKnown(name, ctx, service))
|
|
122
121
|
return;
|
|
123
|
-
const connection =
|
|
122
|
+
const connection = service.getConnection(name);
|
|
124
123
|
if (connection === undefined)
|
|
125
124
|
return;
|
|
126
125
|
const started = Date.now();
|
|
@@ -128,27 +127,26 @@ async function testServer(name, ctx) {
|
|
|
128
127
|
await connection.connect();
|
|
129
128
|
const result = await connection.client.listTools({}, { timeout: 2000 });
|
|
130
129
|
const elapsedMs = Date.now() - started;
|
|
131
|
-
|
|
130
|
+
service.recordCall(name, elapsedMs, false);
|
|
132
131
|
ctx.ui.notify(`MCP test ${name} ok (${elapsedMs}ms): ${result.tools.length} tools`);
|
|
133
132
|
}
|
|
134
133
|
catch (error) {
|
|
135
134
|
const elapsedMs = Date.now() - started;
|
|
136
|
-
|
|
135
|
+
service.recordCall(name, elapsedMs, true);
|
|
137
136
|
const message = error instanceof Error ? error.message : String(error);
|
|
138
137
|
ctx.ui.notify(`MCP test ${name} failed (${elapsedMs}ms): ${message}`, "error");
|
|
139
138
|
}
|
|
140
139
|
}
|
|
141
|
-
function showLogs(name, ctx) {
|
|
142
|
-
if (!ensureKnown(name, ctx))
|
|
140
|
+
function showLogs(name, ctx, service) {
|
|
141
|
+
if (!ensureKnown(name, ctx, service))
|
|
143
142
|
return;
|
|
144
|
-
const lines =
|
|
143
|
+
const lines = service.getLogLines(name, 20);
|
|
145
144
|
ctx.ui.notify(lines.length === 0 ? `MCP logs for ${name}: (empty)` : lines.join("\n"));
|
|
146
145
|
}
|
|
147
|
-
async function reconnectServer(name, ctx, pi) {
|
|
148
|
-
if (!ensureKnown(name, ctx))
|
|
146
|
+
async function reconnectServer(name, ctx, pi, service) {
|
|
147
|
+
if (!ensureKnown(name, ctx, service))
|
|
149
148
|
return;
|
|
150
149
|
try {
|
|
151
|
-
const service = getMcpService();
|
|
152
150
|
await service.reconnectServer(name);
|
|
153
151
|
await service.attachSession({ type: "session_start", reason: "reload" }, ctx, pi);
|
|
154
152
|
ctx.ui.notify(`MCP reconnect ${name} connected`);
|
|
@@ -158,13 +156,10 @@ async function reconnectServer(name, ctx, pi) {
|
|
|
158
156
|
ctx.ui.notify(`MCP reconnect ${name} failed: ${message}`, "error");
|
|
159
157
|
}
|
|
160
158
|
}
|
|
161
|
-
function ensureKnown(name, ctx) {
|
|
162
|
-
if (name.length > 0 &&
|
|
163
|
-
getMcpService()
|
|
164
|
-
.getServerSnapshots()
|
|
165
|
-
.some((snapshot) => snapshot.name === name))
|
|
159
|
+
function ensureKnown(name, ctx, service) {
|
|
160
|
+
if (name.length > 0 && service.getServerSnapshots().some((snapshot) => snapshot.name === name))
|
|
166
161
|
return true;
|
|
167
|
-
const known =
|
|
162
|
+
const known = service
|
|
168
163
|
.getServerSnapshots()
|
|
169
164
|
.map((snapshot) => snapshot.name)
|
|
170
165
|
.join(", ");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/commands.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionAPI, ExtensionCommandContext } from \"../../types.ts\";\nimport { handleMcpAuthCommand } from \"./auth/commands-auth-dispatch.ts\";\nimport { addGlobalMcpServer, setGlobalMcpServerEnabled } from \"./config-edit.ts\";\nimport type { McpServerConfig } from \"./config-schema.ts\";\nimport { getMcpService } from \"./service.ts\";\nimport { MCP_STARTUP_RACE_MS } from \"./startup-race.ts\";\nimport { buildMcpStatusRows, formatMcpStatus } from \"./status.ts\";\n\nconst SUBCOMMANDS = [\n\t\"status\",\n\t\"add\",\n\t\"enable\",\n\t\"disable\",\n\t\"test\",\n\t\"logs\",\n\t\"reconnect\",\n\t\"auth\",\n\t\"auth-start\",\n\t\"auth-complete\",\n\t\"logout\",\n] as const;\n\nconst AUTH_SUBCOMMANDS = new Set([\"auth\", \"auth-start\", \"auth-complete\", \"logout\"]);\n\nexport function registerMcpCommands(pi: ExtensionAPI): void {\n\tpi.registerCommand(\"mcp\", {\n\t\tdescription: \"Inspect and manage MCP servers.\",\n\t\tgetArgumentCompletions: (prefix) =>\n\t\t\tSUBCOMMANDS.filter((item) => item.startsWith(prefix)).map((value) => ({ value, label: value })),\n\t\thandler: async (rawArgs, ctx) => {\n\t\t\ttry {\n\t\t\t\tawait handleMcpCommand(rawArgs, ctx, pi);\n\t\t\t} catch (error) {\n\t\t\t\tctx.ui.notify(error instanceof Error ? error.message : String(error), \"error\");\n\t\t\t}\n\t\t},\n\t});\n}\n\nasync function handleMcpCommand(rawArgs: string, ctx: ExtensionCommandContext, pi: ExtensionAPI): Promise<void> {\n\tconst args = splitCommandArgs(rawArgs);\n\tconst subcommand = args[0] ?? \"\";\n\tif (subcommand === \"\") {\n\t\tawait showPanel(ctx);\n\t\treturn;\n\t}\n\tif (AUTH_SUBCOMMANDS.has(subcommand)) {\n\t\tawait handleMcpAuthCommand(subcommand, args.slice(1), ctx, pi);\n\t\treturn;\n\t}\n\tif (subcommand === \"status\") {\n\t\tawait notifyStatus(ctx);\n\t\treturn;\n\t}\n\tif (subcommand === \"add\") {\n\t\tawait addServer(args.slice(1), ctx, pi);\n\t\treturn;\n\t}\n\tif (subcommand === \"enable\" || subcommand === \"disable\") {\n\t\tawait setServerEnabled(ctx, pi, args[1] ?? \"\", subcommand === \"enable\");\n\t\treturn;\n\t}\n\tif (subcommand === \"test\") {\n\t\tawait testServer(args[1] ?? \"\", ctx);\n\t\treturn;\n\t}\n\tif (subcommand === \"logs\") {\n\t\tshowLogs(args[1] ?? \"\", ctx);\n\t\treturn;\n\t}\n\tif (subcommand === \"reconnect\") {\n\t\tawait reconnectServer(args[1] ?? \"\", ctx, pi);\n\t\treturn;\n\t}\n\tctx.ui.notify(`Unknown /mcp subcommand: ${subcommand}`, \"error\");\n}\n\nasync function showPanel(ctx: ExtensionCommandContext): Promise<void> {\n\tconst text = await renderStatus(\"MCP servers\");\n\tif (!ctx.hasUI) {\n\t\tctx.ui.notify(text);\n\t\treturn;\n\t}\n\tconst choice = await ctx.ui.select(text, [\"status\", \"logs <server>\", \"test <server>\"]);\n\tif (choice === undefined) ctx.ui.notify(text);\n}\n\nasync function notifyStatus(ctx: ExtensionCommandContext): Promise<void> {\n\tctx.ui.notify(await renderStatus(\"MCP status\"));\n}\n\nasync function renderStatus(title: string): Promise<string> {\n\tconst service = getMcpService();\n\tconst rows = await buildMcpStatusRows(service.getServerSnapshots(), (name) => service.getServerExposureStatus(name));\n\treturn formatMcpStatus(title, rows);\n}\n\nasync function addServer(\n\targs: readonly string[],\n\tctx: ExtensionCommandContext,\n\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n): Promise<void> {\n\tconst [name, ...endpoint] = args;\n\tif (!name || endpoint.length === 0) {\n\t\tctx.ui.notify(\"Usage: /mcp add <name> <command...|url>\", \"error\");\n\t\treturn;\n\t}\n\tif (!ctx.hasUI) {\n\t\tctx.ui.notify(\"Cannot add MCP server without UI confirmation.\", \"error\");\n\t\treturn;\n\t}\n\tconst server = parseServerConfig(endpoint);\n\tconst confirmed = await ctx.ui.confirm(\"Add MCP server?\", `${name}: ${endpoint.join(\" \")}`);\n\tif (!confirmed) {\n\t\tctx.ui.notify(\"MCP add cancelled\", \"warning\");\n\t\treturn;\n\t}\n\taddGlobalMcpServer(name, server);\n\tawait getMcpService().attachSession({ type: \"session_start\", reason: \"reload\" }, ctx, pi);\n\tctx.ui.notify(`Added MCP server ${name}`);\n}\n\nasync function setServerEnabled(\n\tctx: ExtensionCommandContext,\n\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n\tname: string,\n\tenabled: boolean,\n): Promise<void> {\n\tif (!ensureKnown(name, ctx)) return;\n\tif (!setGlobalMcpServerEnabled(name, enabled)) {\n\t\tctx.ui.notify(`MCP server ${name} is not in the global config file`, \"error\");\n\t\treturn;\n\t}\n\tctx.ui.notify(`MCP server ${name} connecting`);\n\tawait getMcpService().attachSession({ type: \"session_start\", reason: \"reload\" }, ctx, pi);\n\tctx.ui.notify(`${enabled ? \"Enabled\" : \"Disabled\"} MCP server ${name}`);\n}\n\nasync function testServer(name: string, ctx: ExtensionCommandContext): Promise<void> {\n\tif (!ensureKnown(name, ctx)) return;\n\tconst connection = getMcpService().getConnection(name);\n\tif (connection === undefined) return;\n\tconst started = Date.now();\n\ttry {\n\t\tawait connection.connect();\n\t\tconst result = await connection.client.listTools({}, { timeout: 2000 });\n\t\tconst elapsedMs = Date.now() - started;\n\t\tgetMcpService().recordCall(name, elapsedMs, false);\n\t\tctx.ui.notify(`MCP test ${name} ok (${elapsedMs}ms): ${result.tools.length} tools`);\n\t} catch (error) {\n\t\tconst elapsedMs = Date.now() - started;\n\t\tgetMcpService().recordCall(name, elapsedMs, true);\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tctx.ui.notify(`MCP test ${name} failed (${elapsedMs}ms): ${message}`, \"error\");\n\t}\n}\n\nfunction showLogs(name: string, ctx: ExtensionCommandContext): void {\n\tif (!ensureKnown(name, ctx)) return;\n\tconst lines = getMcpService().getLogLines(name, 20);\n\tctx.ui.notify(lines.length === 0 ? `MCP logs for ${name}: (empty)` : lines.join(\"\\n\"));\n}\n\nasync function reconnectServer(\n\tname: string,\n\tctx: ExtensionCommandContext,\n\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n): Promise<void> {\n\tif (!ensureKnown(name, ctx)) return;\n\ttry {\n\t\tconst service = getMcpService();\n\t\tawait service.reconnectServer(name);\n\t\tawait service.attachSession({ type: \"session_start\", reason: \"reload\" }, ctx, pi);\n\t\tctx.ui.notify(`MCP reconnect ${name} connected`);\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tctx.ui.notify(`MCP reconnect ${name} failed: ${message}`, \"error\");\n\t}\n}\n\nfunction ensureKnown(name: string, ctx: ExtensionCommandContext): boolean {\n\tif (\n\t\tname.length > 0 &&\n\t\tgetMcpService()\n\t\t\t.getServerSnapshots()\n\t\t\t.some((snapshot) => snapshot.name === name)\n\t)\n\t\treturn true;\n\tconst known = getMcpService()\n\t\t.getServerSnapshots()\n\t\t.map((snapshot) => snapshot.name)\n\t\t.join(\", \");\n\tctx.ui.notify(`Unknown MCP server: ${name || \"<missing>\"}\\nKnown MCP servers: ${known || \"(none)\"}`, \"error\");\n\treturn false;\n}\n\nfunction parseServerConfig(endpoint: readonly string[]): McpServerConfig {\n\tconst first = endpoint[0] ?? \"\";\n\tif (/^https?:\\/\\//.test(first)) {\n\t\treturn baseServer({ type: \"http\", url: first });\n\t}\n\treturn baseServer({ type: \"stdio\", command: first, args: endpoint.slice(1) });\n}\n\nfunction baseServer(endpoint: Pick<McpServerConfig, \"type\"> & Partial<McpServerConfig>): McpServerConfig {\n\treturn {\n\t\targs: [],\n\t\tconnectTimeoutMs: 15_000,\n\t\tenabled: true,\n\t\texposure: \"auto\",\n\t\tidleTimeoutMin: 10,\n\t\tlifecycle: \"lazy\",\n\t\tlogLevel: \"info\",\n\t\trequestTimeoutMs: 30_000,\n\t\tstartupTimeoutMs: MCP_STARTUP_RACE_MS,\n\t\t...endpoint,\n\t};\n}\n\nfunction splitCommandArgs(raw: string): string[] {\n\tconst matches = raw.match(/\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"|'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)'|[^\\s]+/g) ?? [];\n\treturn matches.map((part) => part.replace(/^[\"']|[\"']$/g, \"\").replace(/\\\\([\"'])/g, \"$1\"));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/commands.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionAPI, ExtensionCommandContext } from \"../../types.ts\";\nimport { handleMcpAuthCommand } from \"./auth/commands-auth-dispatch.ts\";\nimport { addGlobalMcpServer, setGlobalMcpServerEnabled } from \"./config-edit.ts\";\nimport type { McpServerConfig } from \"./config-schema.ts\";\nimport { getMcpService } from \"./service.ts\";\nimport { MCP_STARTUP_RACE_MS } from \"./startup-race.ts\";\nimport { buildMcpStatusRows, formatMcpStatus } from \"./status.ts\";\n\nconst SUBCOMMANDS = [\n\t\"status\",\n\t\"add\",\n\t\"enable\",\n\t\"disable\",\n\t\"test\",\n\t\"logs\",\n\t\"reconnect\",\n\t\"auth\",\n\t\"auth-start\",\n\t\"auth-complete\",\n\t\"logout\",\n] as const;\n\nconst AUTH_SUBCOMMANDS = new Set([\"auth\", \"auth-start\", \"auth-complete\", \"logout\"]);\n\nexport function registerMcpCommands(pi: ExtensionAPI, service = getMcpService()): void {\n\tpi.registerCommand(\"mcp\", {\n\t\tdescription: \"Inspect and manage MCP servers.\",\n\t\tgetArgumentCompletions: (prefix) =>\n\t\t\tSUBCOMMANDS.filter((item) => item.startsWith(prefix)).map((value) => ({ value, label: value })),\n\t\thandler: async (rawArgs, ctx) => {\n\t\t\ttry {\n\t\t\t\tawait handleMcpCommand(rawArgs, ctx, pi, service);\n\t\t\t} catch (error) {\n\t\t\t\tctx.ui.notify(error instanceof Error ? error.message : String(error), \"error\");\n\t\t\t}\n\t\t},\n\t});\n}\n\nasync function handleMcpCommand(\n\trawArgs: string,\n\tctx: ExtensionCommandContext,\n\tpi: ExtensionAPI,\n\tservice: ReturnType<typeof getMcpService>,\n): Promise<void> {\n\tconst args = splitCommandArgs(rawArgs);\n\tconst subcommand = args[0] ?? \"\";\n\tif (subcommand === \"\") {\n\t\tawait showPanel(ctx, service);\n\t\treturn;\n\t}\n\tif (AUTH_SUBCOMMANDS.has(subcommand)) {\n\t\tawait handleMcpAuthCommand(subcommand, args.slice(1), ctx, pi, service);\n\t\treturn;\n\t}\n\tif (subcommand === \"status\") {\n\t\tawait notifyStatus(ctx, service);\n\t\treturn;\n\t}\n\tif (subcommand === \"add\") {\n\t\tawait addServer(args.slice(1), ctx, pi, service);\n\t\treturn;\n\t}\n\tif (subcommand === \"enable\" || subcommand === \"disable\") {\n\t\tawait setServerEnabled(ctx, pi, service, args[1] ?? \"\", subcommand === \"enable\");\n\t\treturn;\n\t}\n\tif (subcommand === \"test\") {\n\t\tawait testServer(args[1] ?? \"\", ctx, service);\n\t\treturn;\n\t}\n\tif (subcommand === \"logs\") {\n\t\tshowLogs(args[1] ?? \"\", ctx, service);\n\t\treturn;\n\t}\n\tif (subcommand === \"reconnect\") {\n\t\tawait reconnectServer(args[1] ?? \"\", ctx, pi, service);\n\t\treturn;\n\t}\n\tctx.ui.notify(`Unknown /mcp subcommand: ${subcommand}`, \"error\");\n}\n\ntype McpCommandService = ReturnType<typeof getMcpService>;\n\nasync function showPanel(ctx: ExtensionCommandContext, service: McpCommandService): Promise<void> {\n\tconst text = await renderStatus(\"MCP servers\", service);\n\tif (!ctx.hasUI) {\n\t\tctx.ui.notify(text);\n\t\treturn;\n\t}\n\tconst choice = await ctx.ui.select(text, [\"status\", \"logs <server>\", \"test <server>\"]);\n\tif (choice === undefined) ctx.ui.notify(text);\n}\n\nasync function notifyStatus(ctx: ExtensionCommandContext, service: McpCommandService): Promise<void> {\n\tctx.ui.notify(await renderStatus(\"MCP status\", service));\n}\n\nasync function renderStatus(title: string, service: McpCommandService): Promise<string> {\n\tconst rows = await buildMcpStatusRows(service.getServerSnapshots(), (name) => service.getServerExposureStatus(name));\n\treturn formatMcpStatus(title, rows);\n}\n\nasync function addServer(\n\targs: readonly string[],\n\tctx: ExtensionCommandContext,\n\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n\tservice: McpCommandService,\n): Promise<void> {\n\tconst [name, ...endpoint] = args;\n\tif (!name || endpoint.length === 0) {\n\t\tctx.ui.notify(\"Usage: /mcp add <name> <command...|url>\", \"error\");\n\t\treturn;\n\t}\n\tif (!ctx.hasUI) {\n\t\tctx.ui.notify(\"Cannot add MCP server without UI confirmation.\", \"error\");\n\t\treturn;\n\t}\n\tconst server = parseServerConfig(endpoint);\n\tconst confirmed = await ctx.ui.confirm(\"Add MCP server?\", `${name}: ${endpoint.join(\" \")}`);\n\tif (!confirmed) {\n\t\tctx.ui.notify(\"MCP add cancelled\", \"warning\");\n\t\treturn;\n\t}\n\taddGlobalMcpServer(name, server);\n\tawait service.attachSession({ type: \"session_start\", reason: \"reload\" }, ctx, pi);\n\tctx.ui.notify(`Added MCP server ${name}`);\n}\n\nasync function setServerEnabled(\n\tctx: ExtensionCommandContext,\n\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n\tservice: McpCommandService,\n\tname: string,\n\tenabled: boolean,\n): Promise<void> {\n\tif (!ensureKnown(name, ctx, service)) return;\n\tif (!setGlobalMcpServerEnabled(name, enabled)) {\n\t\tctx.ui.notify(`MCP server ${name} is not in the global config file`, \"error\");\n\t\treturn;\n\t}\n\tctx.ui.notify(`MCP server ${name} connecting`);\n\tawait service.attachSession({ type: \"session_start\", reason: \"reload\" }, ctx, pi);\n\tctx.ui.notify(`${enabled ? \"Enabled\" : \"Disabled\"} MCP server ${name}`);\n}\n\nasync function testServer(name: string, ctx: ExtensionCommandContext, service: McpCommandService): Promise<void> {\n\tif (!ensureKnown(name, ctx, service)) return;\n\tconst connection = service.getConnection(name);\n\tif (connection === undefined) return;\n\tconst started = Date.now();\n\ttry {\n\t\tawait connection.connect();\n\t\tconst result = await connection.client.listTools({}, { timeout: 2000 });\n\t\tconst elapsedMs = Date.now() - started;\n\t\tservice.recordCall(name, elapsedMs, false);\n\t\tctx.ui.notify(`MCP test ${name} ok (${elapsedMs}ms): ${result.tools.length} tools`);\n\t} catch (error) {\n\t\tconst elapsedMs = Date.now() - started;\n\t\tservice.recordCall(name, elapsedMs, true);\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tctx.ui.notify(`MCP test ${name} failed (${elapsedMs}ms): ${message}`, \"error\");\n\t}\n}\n\nfunction showLogs(name: string, ctx: ExtensionCommandContext, service: McpCommandService): void {\n\tif (!ensureKnown(name, ctx, service)) return;\n\tconst lines = service.getLogLines(name, 20);\n\tctx.ui.notify(lines.length === 0 ? `MCP logs for ${name}: (empty)` : lines.join(\"\\n\"));\n}\n\nasync function reconnectServer(\n\tname: string,\n\tctx: ExtensionCommandContext,\n\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n\tservice: McpCommandService,\n): Promise<void> {\n\tif (!ensureKnown(name, ctx, service)) return;\n\ttry {\n\t\tawait service.reconnectServer(name);\n\t\tawait service.attachSession({ type: \"session_start\", reason: \"reload\" }, ctx, pi);\n\t\tctx.ui.notify(`MCP reconnect ${name} connected`);\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tctx.ui.notify(`MCP reconnect ${name} failed: ${message}`, \"error\");\n\t}\n}\n\nfunction ensureKnown(name: string, ctx: ExtensionCommandContext, service: McpCommandService): boolean {\n\tif (name.length > 0 && service.getServerSnapshots().some((snapshot) => snapshot.name === name)) return true;\n\tconst known = service\n\t\t.getServerSnapshots()\n\t\t.map((snapshot) => snapshot.name)\n\t\t.join(\", \");\n\tctx.ui.notify(`Unknown MCP server: ${name || \"<missing>\"}\\nKnown MCP servers: ${known || \"(none)\"}`, \"error\");\n\treturn false;\n}\n\nfunction parseServerConfig(endpoint: readonly string[]): McpServerConfig {\n\tconst first = endpoint[0] ?? \"\";\n\tif (/^https?:\\/\\//.test(first)) {\n\t\treturn baseServer({ type: \"http\", url: first });\n\t}\n\treturn baseServer({ type: \"stdio\", command: first, args: endpoint.slice(1) });\n}\n\nfunction baseServer(endpoint: Pick<McpServerConfig, \"type\"> & Partial<McpServerConfig>): McpServerConfig {\n\treturn {\n\t\targs: [],\n\t\tconnectTimeoutMs: 15_000,\n\t\tenabled: true,\n\t\texposure: \"auto\",\n\t\tidleTimeoutMin: 10,\n\t\tlifecycle: \"lazy\",\n\t\tlogLevel: \"info\",\n\t\trequestTimeoutMs: 30_000,\n\t\tstartupTimeoutMs: MCP_STARTUP_RACE_MS,\n\t\t...endpoint,\n\t};\n}\n\nfunction splitCommandArgs(raw: string): string[] {\n\tconst matches = raw.match(/\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"|'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)'|[^\\s]+/g) ?? [];\n\treturn matches.map((part) => part.replace(/^[\"']|[\"']$/g, \"\").replace(/\\\\([\"'])/g, \"$1\"));\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { McpOAuthProvider } from "./auth/oauth-provider.ts";
|
|
2
2
|
import type { McpServerConfig } from "./config-schema.ts";
|
|
3
|
+
import type { McpElicitationUiProvider } from "./elicitation.ts";
|
|
3
4
|
import type { McpLogger } from "./log.ts";
|
|
4
5
|
export type ServerConnectionState = "disabled" | "idle" | "connecting" | "connected" | "degraded" | "suspended" | "needs_auth" | "needs_client_registration";
|
|
5
6
|
export type ServerConnectionStateChangedEvent = {
|
|
@@ -21,6 +22,7 @@ export interface ServerConnectionOptions {
|
|
|
21
22
|
readonly logger: McpLogger;
|
|
22
23
|
readonly env?: Record<string, string | undefined>;
|
|
23
24
|
readonly authProvider?: McpOAuthProvider;
|
|
25
|
+
readonly elicitationUiProvider?: McpElicitationUiProvider;
|
|
24
26
|
}
|
|
25
27
|
export type ServerConnectionListener<TEvent> = (event: TEvent) => void | Promise<void>;
|
|
26
28
|
//# sourceMappingURL=connection-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-types.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/connection-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,MAAM,qBAAqB,GAC9B,UAAU,GACV,MAAM,GACN,YAAY,GACZ,WAAW,GACX,UAAU,GACV,WAAW,GACX,YAAY,GACZ,2BAA2B,CAAC;AAE/B,MAAM,MAAM,iCAAiC,GAAG;IAC/C,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC;IAC9C,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC/C,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAClD,QAAQ,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"connection-types.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/connection-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,MAAM,qBAAqB,GAC9B,UAAU,GACV,MAAM,GACN,YAAY,GACZ,WAAW,GACX,UAAU,GACV,WAAW,GACX,YAAY,GACZ,2BAA2B,CAAC;AAE/B,MAAM,MAAM,iCAAiC,GAAG;IAC/C,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC;IAC9C,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC/C,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAClD,QAAQ,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,wBAAwB,CAAC;CAC1D;AAED,MAAM,MAAM,wBAAwB,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-types.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/connection-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { McpOAuthProvider } from \"./auth/oauth-provider.ts\";\nimport type { McpServerConfig } from \"./config-schema.ts\";\nimport type { McpLogger } from \"./log.ts\";\n\nexport type ServerConnectionState =\n\t| \"disabled\"\n\t| \"idle\"\n\t| \"connecting\"\n\t| \"connected\"\n\t| \"degraded\"\n\t| \"suspended\"\n\t| \"needs_auth\"\n\t| \"needs_client_registration\";\n\nexport type ServerConnectionStateChangedEvent = {\n\treadonly type: \"state_changed\";\n\treadonly serverName: string;\n\treadonly generation: number;\n\treadonly state: ServerConnectionState;\n\treadonly previousState: ServerConnectionState;\n\treadonly error?: Error;\n};\n\nexport type ServerConnectionToolsChangedEvent = {\n\treadonly type: \"tools_changed\";\n\treadonly serverName: string;\n\treadonly generation: number;\n};\n\nexport interface ServerConnectionOptions {\n\treadonly serverName: string;\n\treadonly config: McpServerConfig;\n\treadonly logger: McpLogger;\n\treadonly env?: Record<string, string | undefined>;\n\treadonly authProvider?: McpOAuthProvider;\n}\n\nexport type ServerConnectionListener<TEvent> = (event: TEvent) => void | Promise<void>;\n"]}
|
|
1
|
+
{"version":3,"file":"connection-types.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/connection-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { McpOAuthProvider } from \"./auth/oauth-provider.ts\";\nimport type { McpServerConfig } from \"./config-schema.ts\";\nimport type { McpElicitationUiProvider } from \"./elicitation.ts\";\nimport type { McpLogger } from \"./log.ts\";\n\nexport type ServerConnectionState =\n\t| \"disabled\"\n\t| \"idle\"\n\t| \"connecting\"\n\t| \"connected\"\n\t| \"degraded\"\n\t| \"suspended\"\n\t| \"needs_auth\"\n\t| \"needs_client_registration\";\n\nexport type ServerConnectionStateChangedEvent = {\n\treadonly type: \"state_changed\";\n\treadonly serverName: string;\n\treadonly generation: number;\n\treadonly state: ServerConnectionState;\n\treadonly previousState: ServerConnectionState;\n\treadonly error?: Error;\n};\n\nexport type ServerConnectionToolsChangedEvent = {\n\treadonly type: \"tools_changed\";\n\treadonly serverName: string;\n\treadonly generation: number;\n};\n\nexport interface ServerConnectionOptions {\n\treadonly serverName: string;\n\treadonly config: McpServerConfig;\n\treadonly logger: McpLogger;\n\treadonly env?: Record<string, string | undefined>;\n\treadonly authProvider?: McpOAuthProvider;\n\treadonly elicitationUiProvider?: McpElicitationUiProvider;\n}\n\nexport type ServerConnectionListener<TEvent> = (event: TEvent) => void | Promise<void>;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/connection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGxE,OAAO,KAAK,EACX,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACrB,iCAAiC,EACjC,iCAAiC,EACjC,MAAM,uBAAuB,CAAC;AAe/B,YAAY,EACX,uBAAuB,EACvB,qBAAqB,EACrB,iCAAiC,EACjC,iCAAiC,GACjC,MAAM,uBAAuB,CAAC;AAE/B,qBAAa,gBAAgB;;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/connection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGxE,OAAO,KAAK,EACX,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACrB,iCAAiC,EACjC,iCAAiC,EACjC,MAAM,uBAAuB,CAAC;AAe/B,YAAY,EACX,uBAAuB,EACvB,qBAAqB,EACrB,iCAAiC,EACjC,iCAAiC,GACjC,MAAM,uBAAuB,CAAC;AAE/B,qBAAa,gBAAgB;;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAgB5B,YAAY,OAAO,EAAE,uBAAuB,EAQ3C;IAED,IAAI,KAAK,IAAI,qBAAqB,CAEjC;IACD,IAAI,SAAS,IAAI,KAAK,GAAG,SAAS,CAEjC;IACD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,0BAA0B,IAAI,IAAI,CAajC;IAED,IAAI,MAAM,IAAI,MAAM,CAQnB;IAED,UAAU,IAAI,MAAM,GAAG,IAAI,CAE1B;IACD,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAgBzB;IAEK,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAS7B;IAED,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAM9B;IAED,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAMvB;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7B;IAED,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAE/B;IACD,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAEjC;IACD,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAEjC;IACD,2BAA2B,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAE/C;IAED,gBAAgB,IAAI,IAAI,CAMvB;IAED,aAAa,CAAC,QAAQ,EAAE,wBAAwB,CAAC,iCAAiC,CAAC,GAAG,MAAM,IAAI,CAG/F;IAED,cAAc,CAAC,QAAQ,EAAE,wBAAwB,CAAC,iCAAiC,CAAC,GAAG,MAAM,IAAI,CAGhG;CA8ID"}
|
|
@@ -12,6 +12,7 @@ export class ServerConnection {
|
|
|
12
12
|
#env;
|
|
13
13
|
#config;
|
|
14
14
|
#authProvider;
|
|
15
|
+
#elicitationUiProvider;
|
|
15
16
|
#state;
|
|
16
17
|
#generation = 0;
|
|
17
18
|
#connection;
|
|
@@ -27,6 +28,7 @@ export class ServerConnection {
|
|
|
27
28
|
this.#logger = options.logger;
|
|
28
29
|
this.#env = options.env;
|
|
29
30
|
this.#authProvider = options.authProvider;
|
|
31
|
+
this.#elicitationUiProvider = options.elicitationUiProvider;
|
|
30
32
|
this.#state = options.config.enabled ? "idle" : "disabled";
|
|
31
33
|
}
|
|
32
34
|
get state() {
|
|
@@ -148,6 +150,7 @@ export class ServerConnection {
|
|
|
148
150
|
authProvider: this.#authProvider,
|
|
149
151
|
config: this.#config,
|
|
150
152
|
env: this.#env,
|
|
153
|
+
elicitationUiProvider: this.#elicitationUiProvider,
|
|
151
154
|
logger: this.#logger,
|
|
152
155
|
serverName: this.serverName,
|
|
153
156
|
});
|