@humain/terminal 0.0.3-beta.3 → 0.0.4-beta.2
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 +30 -0
- package/README.md +1 -0
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
- package/dist/bun/restore-sandbox-env.js.map +1 -1
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +11 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth-check.d.ts.map +1 -1
- package/dist/cli/auth-check.js.map +1 -1
- package/dist/cli/auth-command.d.ts.map +1 -1
- package/dist/cli/auth-command.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/credential-print.d.ts.map +1 -1
- package/dist/cli/credential-print.js.map +1 -1
- package/dist/cli/experimental/auth.d.ts.map +1 -1
- package/dist/cli/experimental/auth.js.map +1 -1
- package/dist/cli/experimental/cli.d.ts.map +1 -1
- package/dist/cli/experimental/command-options.d.ts.map +1 -1
- package/dist/cli/experimental/command-options.js.map +1 -1
- package/dist/cli/experimental/command.d.ts.map +1 -1
- package/dist/cli/experimental/command.js +2 -5
- package/dist/cli/experimental/command.js.map +1 -1
- package/dist/cli/experimental/commands/client.d.ts.map +1 -1
- package/dist/cli/experimental/commands/client.js.map +1 -1
- package/dist/cli/experimental/commands/pi.d.ts.map +1 -1
- package/dist/cli/experimental/commands/pi.js.map +1 -1
- package/dist/cli/experimental/commands/server.d.ts.map +1 -1
- package/dist/cli/experimental/commands/server.js.map +1 -1
- package/dist/cli/experimental/transport-address.d.ts.map +1 -1
- package/dist/cli/experimental/transport-address.js.map +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/project-trust.d.ts.map +1 -1
- package/dist/cli/project-trust.js.map +1 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/remote-session.d.ts.map +1 -1
- package/dist/client/remote-session.js.map +1 -1
- package/dist/client/transcript.d.ts.map +1 -1
- package/dist/client/transcript.js +1 -1
- package/dist/client/transcript.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +0 -8
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +36 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +107 -129
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-guidance.d.ts.map +1 -1
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +3 -8
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/cache-stats.d.ts.map +1 -1
- package/dist/core/cache-stats.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/index.d.ts.map +1 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js.map +1 -1
- package/dist/core/experimental.d.ts +4 -0
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js +4 -0
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +22 -30
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +4 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +17 -18
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/keybindings.d.ts +24 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +0 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-config.d.ts +5 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +1 -2
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +0 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +15 -25
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js +3 -4
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/output-guard.d.ts.map +1 -1
- package/dist/core/output-guard.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +0 -7
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/pi-manifest.d.ts.map +1 -1
- package/dist/core/pi-manifest.js.map +1 -1
- package/dist/core/project-trust.d.ts.map +1 -1
- package/dist/core/project-trust.js.map +1 -1
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/radius.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +0 -44
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/runtime-credentials.d.ts.map +1 -1
- package/dist/core/runtime-credentials.js +1 -2
- package/dist/core/runtime-credentials.js.map +1 -1
- package/dist/core/sdk.d.ts +5 -3
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +3 -2
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-cwd.d.ts.map +1 -1
- package/dist/core/session-cwd.js +0 -1
- package/dist/core/session-cwd.js.map +1 -1
- package/dist/core/session-manager.d.ts +4 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +55 -35
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +6 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +19 -17
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/source-info.d.ts.map +1 -1
- package/dist/core/source-info.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/telemetry.d.ts.map +1 -1
- package/dist/core/telemetry.js.map +1 -1
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +10 -5
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +2 -0
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/find.d.ts +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +2 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +9 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +12 -18
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/path-utils.d.ts.map +1 -1
- package/dist/core/tools/path-utils.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +2 -0
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/subagent.d.ts +82 -0
- package/dist/core/tools/subagent.d.ts.map +1 -0
- package/dist/core/tools/subagent.js +980 -0
- package/dist/core/tools/subagent.js.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/truncate.d.ts.map +1 -1
- package/dist/core/tools/truncate.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +2 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +0 -1
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/core/usage-totals.d.ts.map +1 -1
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/llama/client.d.ts.map +1 -1
- package/dist/extensions/llama/client.js +0 -2
- package/dist/extensions/llama/client.js.map +1 -1
- package/dist/extensions/llama/huggingface.d.ts.map +1 -1
- package/dist/extensions/llama/huggingface.js +0 -2
- package/dist/extensions/llama/huggingface.js.map +1 -1
- package/dist/extensions/llama/index.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/extensions/llama/ui.d.ts.map +1 -1
- package/dist/extensions/llama/ui.js +12 -28
- package/dist/extensions/llama/ui.js.map +1 -1
- package/dist/humain/agent-execution-protocol.d.ts.map +1 -1
- package/dist/humain/agent-execution-protocol.js.map +1 -1
- package/dist/humain/agent-execution-runtime.d.ts.map +1 -1
- package/dist/humain/agent-execution-runtime.js.map +1 -1
- package/dist/humain/bedrock-provider/vendor/index.bundle.mjs +127 -7
- package/dist/humain/brand-logo.d.ts.map +1 -1
- package/dist/humain/index.d.ts.map +1 -1
- package/dist/humain/index.js.map +1 -1
- package/dist/humain/legacy-workflow-tiers.d.ts.map +1 -1
- package/dist/humain/legacy-workflow-tiers.js.map +1 -1
- package/dist/humain/mcp-adapter/vendor/CHANGELOG.md +36 -0
- package/dist/humain/mcp-adapter/vendor/README.md +47 -5
- package/dist/humain/mcp-adapter/vendor/cli.js +163 -1
- package/dist/humain/mcp-adapter/vendor/commands.ts +128 -22
- package/dist/humain/mcp-adapter/vendor/config.ts +25 -7
- package/dist/humain/mcp-adapter/vendor/direct-tools.ts +5 -4
- package/dist/humain/mcp-adapter/vendor/index.bundle.mjs +1663 -458
- package/dist/humain/mcp-adapter/vendor/index.ts +219 -32
- package/dist/humain/mcp-adapter/vendor/init.ts +36 -4
- package/dist/humain/mcp-adapter/vendor/lifecycle.ts +315 -24
- package/dist/humain/mcp-adapter/vendor/mcp-auth-flow.ts +39 -6
- package/dist/humain/mcp-adapter/vendor/mcp-bearer-store.ts +387 -0
- package/dist/humain/mcp-adapter/vendor/mcp-callback-server.ts +27 -3
- package/dist/humain/mcp-adapter/vendor/mcp-code.ts +4 -0
- package/dist/humain/mcp-adapter/vendor/mcp-panel.ts +42 -13
- package/dist/humain/mcp-adapter/vendor/metadata-cache.ts +32 -21
- package/dist/humain/mcp-adapter/vendor/package-mcp-loader.ts +168 -0
- package/dist/humain/mcp-adapter/vendor/package.json +179 -177
- package/dist/humain/mcp-adapter/vendor/proxy-modes.ts +5 -4
- package/dist/humain/mcp-adapter/vendor/request-headers-command.ts +31 -37
- package/dist/humain/mcp-adapter/vendor/search-ranking.ts +92 -22
- package/dist/humain/mcp-adapter/vendor/server-manager.ts +140 -2
- package/dist/humain/mcp-adapter/vendor/session-recovery.ts +7 -0
- package/dist/humain/mcp-adapter/vendor/tool-approval.ts +15 -2
- package/dist/humain/mcp-adapter/vendor/tool-result-renderer.ts +44 -4
- package/dist/humain/mcp-adapter/vendor/types.ts +2 -0
- package/dist/humain/mcp-adapter/vendor/ui-server.ts +18 -16
- package/dist/humain/mcp-adapter/vendor/utils.ts +70 -0
- package/dist/humain/mcp-adapter.d.ts.map +1 -1
- package/dist/humain/mcp-adapter.js.map +1 -1
- package/dist/humain/pi-agent-execution-host.d.ts.map +1 -1
- package/dist/humain/pi-agent-execution-host.js.map +1 -1
- package/dist/humain/web-access/host.d.ts.map +1 -1
- package/dist/humain/web-access/index.d.ts.map +1 -1
- package/dist/humain/web-access/index.js.map +1 -1
- package/dist/humain/web-access/vendor/activity.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/activity.js +7 -5
- package/dist/humain/web-access/vendor/activity.js.map +1 -1
- package/dist/humain/web-access/vendor/anysearch.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/anysearch.js +3 -2
- package/dist/humain/web-access/vendor/anysearch.js.map +1 -1
- package/dist/humain/web-access/vendor/auth-fetch.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/auth-fetch.js.map +1 -1
- package/dist/humain/web-access/vendor/bocha.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/bocha.js.map +1 -1
- package/dist/humain/web-access/vendor/brave.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/brave.js +14 -4
- package/dist/humain/web-access/vendor/brave.js.map +1 -1
- package/dist/humain/web-access/vendor/brightdata-unlocker.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/brightdata-unlocker.js.map +1 -1
- package/dist/humain/web-access/vendor/brightdata.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/brightdata.js.map +1 -1
- package/dist/humain/web-access/vendor/chrome-cookies.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/chrome-cookies.js +92 -14
- package/dist/humain/web-access/vendor/chrome-cookies.js.map +1 -1
- package/dist/humain/web-access/vendor/content-find.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/content-find.js.map +1 -1
- package/dist/humain/web-access/vendor/credential-source.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/credential-source.js +0 -2
- package/dist/humain/web-access/vendor/credential-source.js.map +1 -1
- package/dist/humain/web-access/vendor/curator-page.d.ts +3 -0
- package/dist/humain/web-access/vendor/curator-page.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/curator-page.js +4 -1
- package/dist/humain/web-access/vendor/curator-page.js.map +1 -1
- package/dist/humain/web-access/vendor/curator-server.d.ts +3 -0
- package/dist/humain/web-access/vendor/curator-server.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/curator-server.js +6 -0
- package/dist/humain/web-access/vendor/curator-server.js.map +1 -1
- package/dist/humain/web-access/vendor/data-uri-sanitize.d.ts +21 -0
- package/dist/humain/web-access/vendor/data-uri-sanitize.d.ts.map +1 -0
- package/dist/humain/web-access/vendor/data-uri-sanitize.js +373 -0
- package/dist/humain/web-access/vendor/data-uri-sanitize.js.map +1 -0
- package/dist/humain/web-access/vendor/datalab-pdf-extract.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/datalab-pdf-extract.js.map +1 -1
- package/dist/humain/web-access/vendor/declared-web-links.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/declared-web-links.js.map +1 -1
- package/dist/humain/web-access/vendor/duckduckgo.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/duckduckgo.js.map +1 -1
- package/dist/humain/web-access/vendor/exa.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/exa.js +16 -7
- package/dist/humain/web-access/vendor/exa.js.map +1 -1
- package/dist/humain/web-access/vendor/extract.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/extract.js +45 -5
- package/dist/humain/web-access/vendor/extract.js.map +1 -1
- package/dist/humain/web-access/vendor/feature-config.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/feature-config.js.map +1 -1
- package/dist/humain/web-access/vendor/fetch-params.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/fetch-params.js.map +1 -1
- package/dist/humain/web-access/vendor/firecrawl.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/firecrawl.js +15 -2
- package/dist/humain/web-access/vendor/firecrawl.js.map +1 -1
- package/dist/humain/web-access/vendor/gemini-api.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/gemini-api.js.map +1 -1
- package/dist/humain/web-access/vendor/gemini-pdf-extract.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/gemini-pdf-extract.js.map +1 -1
- package/dist/humain/web-access/vendor/gemini-search.d.ts +2 -2
- package/dist/humain/web-access/vendor/gemini-search.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/gemini-search.js +25 -8
- package/dist/humain/web-access/vendor/gemini-search.js.map +1 -1
- package/dist/humain/web-access/vendor/gemini-url-context.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/gemini-url-context.js.map +1 -1
- package/dist/humain/web-access/vendor/gemini-web-config.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/gemini-web-config.js.map +1 -1
- package/dist/humain/web-access/vendor/gemini-web.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/gemini-web.js.map +1 -1
- package/dist/humain/web-access/vendor/github-api.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/github-api.js.map +1 -1
- package/dist/humain/web-access/vendor/github-extract.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/github-extract.js +69 -35
- package/dist/humain/web-access/vendor/github-extract.js.map +1 -1
- package/dist/humain/web-access/vendor/index.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/index.js +58 -54
- package/dist/humain/web-access/vendor/index.js.map +1 -1
- package/dist/humain/web-access/vendor/jina-search.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/jina-search.js.map +1 -1
- package/dist/humain/web-access/vendor/kagi.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/kagi.js.map +1 -1
- package/dist/humain/web-access/vendor/ollama.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/ollama.js.map +1 -1
- package/dist/humain/web-access/vendor/openai-search.d.ts +1 -1
- package/dist/humain/web-access/vendor/openai-search.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/openai-search.js +15 -5
- package/dist/humain/web-access/vendor/openai-search.js.map +1 -1
- package/dist/humain/web-access/vendor/page-query.d.ts +1 -2
- package/dist/humain/web-access/vendor/page-query.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/page-query.js +5 -2
- package/dist/humain/web-access/vendor/page-query.js.map +1 -1
- package/dist/humain/web-access/vendor/parallel-mcp.d.ts +10 -0
- package/dist/humain/web-access/vendor/parallel-mcp.d.ts.map +1 -0
- package/dist/humain/web-access/vendor/parallel-mcp.js +224 -0
- package/dist/humain/web-access/vendor/parallel-mcp.js.map +1 -0
- package/dist/humain/web-access/vendor/parallel.d.ts +1 -0
- package/dist/humain/web-access/vendor/parallel.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/parallel.js +2 -2
- package/dist/humain/web-access/vendor/parallel.js.map +1 -1
- package/dist/humain/web-access/vendor/pdf-extract.d.ts +1 -0
- package/dist/humain/web-access/vendor/pdf-extract.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/pdf-extract.js +15 -5
- package/dist/humain/web-access/vendor/pdf-extract.js.map +1 -1
- package/dist/humain/web-access/vendor/perplexity.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/perplexity.js.map +1 -1
- package/dist/humain/web-access/vendor/querit.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/querit.js.map +1 -1
- package/dist/humain/web-access/vendor/query-rewrite.d.ts +3 -0
- package/dist/humain/web-access/vendor/query-rewrite.d.ts.map +1 -0
- package/dist/humain/web-access/vendor/query-rewrite.js +42 -0
- package/dist/humain/web-access/vendor/query-rewrite.js.map +1 -0
- package/dist/humain/web-access/vendor/render-search-error.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/render-search-error.js.map +1 -1
- package/dist/humain/web-access/vendor/rsc-extract.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/rsc-extract.js.map +1 -1
- package/dist/humain/web-access/vendor/search1api.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/search1api.js.map +1 -1
- package/dist/humain/web-access/vendor/searchinfinity.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/searchinfinity.js.map +1 -1
- package/dist/humain/web-access/vendor/searxng.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/searxng.js.map +1 -1
- package/dist/humain/web-access/vendor/serpbase.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/serpbase.js.map +1 -1
- package/dist/humain/web-access/vendor/serpdive.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/serpdive.js.map +1 -1
- package/dist/humain/web-access/vendor/serper.d.ts +4 -0
- package/dist/humain/web-access/vendor/serper.d.ts.map +1 -0
- package/dist/humain/web-access/vendor/serper.js +206 -0
- package/dist/humain/web-access/vendor/serper.js.map +1 -0
- package/dist/humain/web-access/vendor/source-check.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/source-check.js.map +1 -1
- package/dist/humain/web-access/vendor/ssrf-protection.d.ts +2 -0
- package/dist/humain/web-access/vendor/ssrf-protection.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/ssrf-protection.js +11 -2
- package/dist/humain/web-access/vendor/ssrf-protection.js.map +1 -1
- package/dist/humain/web-access/vendor/storage.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/storage.js.map +1 -1
- package/dist/humain/web-access/vendor/summary-model-scope.d.ts +5 -0
- package/dist/humain/web-access/vendor/summary-model-scope.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/summary-model-scope.js +10 -5
- package/dist/humain/web-access/vendor/summary-model-scope.js.map +1 -1
- package/dist/humain/web-access/vendor/summary-review.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/summary-review.js +40 -14
- package/dist/humain/web-access/vendor/summary-review.js.map +1 -1
- package/dist/humain/web-access/vendor/tavily.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/tavily.js +14 -4
- package/dist/humain/web-access/vendor/tavily.js.map +1 -1
- package/dist/humain/web-access/vendor/tinyfish.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/tinyfish.js.map +1 -1
- package/dist/humain/web-access/vendor/utils.d.ts +10 -0
- package/dist/humain/web-access/vendor/utils.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/utils.js +70 -0
- package/dist/humain/web-access/vendor/utils.js.map +1 -1
- package/dist/humain/web-access/vendor/valyu.d.ts +6 -0
- package/dist/humain/web-access/vendor/valyu.d.ts.map +1 -0
- package/dist/humain/web-access/vendor/valyu.js +194 -0
- package/dist/humain/web-access/vendor/valyu.js.map +1 -0
- package/dist/humain/web-access/vendor/video-extract.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/video-extract.js.map +1 -1
- package/dist/humain/web-access/vendor/xai-search.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/xai-search.js.map +1 -1
- package/dist/humain/web-access/vendor/youtube-extract.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/youtube-extract.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +4 -0
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js.map +1 -1
- package/dist/modes/agent-exec-mode.d.ts.map +1 -1
- package/dist/modes/agent-exec-mode.js.map +1 -1
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js +6 -10
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +2 -9
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +4 -9
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +0 -3
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +1 -3
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +1 -3
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +5 -22
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js +0 -5
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +1 -8
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js +1 -4
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +1 -7
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js +6 -8
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/dist/modes/interactive/components/diff.js +2 -2
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js +0 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +1 -7
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +2 -8
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +1 -9
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js +2 -4
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -3
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +3 -9
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
- package/dist/modes/interactive/components/mermaid.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +14 -26
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +3 -11
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +9 -14
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +33 -57
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +10 -14
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +0 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +1 -3
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-indicator.js +0 -2
- package/dist/modes/interactive/components/status-indicator.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +0 -2
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +0 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +19 -25
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +18 -34
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/trust-selector.js +0 -6
- package/dist/modes/interactive/components/trust-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +3 -6
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +0 -4
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +18 -2
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +147 -137
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/model-catalog-refresh.d.ts +7 -0
- package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
- package/dist/modes/interactive/model-catalog-refresh.js +36 -0
- package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
- package/dist/modes/interactive/model-search.d.ts.map +1 -1
- package/dist/modes/interactive/model-search.js.map +1 -1
- package/dist/modes/interactive/theme/dark.json +2 -0
- package/dist/modes/interactive/theme/light.json +2 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts +10 -2
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js +25 -18
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.json +9 -1
- package/dist/modes/interactive/theme/theme.d.ts +7 -5
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +12 -8
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts +4 -1
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js +5 -2
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/jsonl.d.ts.map +1 -1
- package/dist/modes/rpc/jsonl.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +9 -10
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/rpc-entry.d.ts.map +1 -1
- package/dist/rpc-entry.js.map +1 -1
- package/dist/server/create-harness.d.ts.map +1 -1
- package/dist/server/create-harness.js +2 -0
- package/dist/server/create-harness.js.map +1 -1
- package/dist/utils/abort.d.ts.map +1 -1
- package/dist/utils/abort.js.map +1 -1
- package/dist/utils/ansi.d.ts.map +1 -1
- package/dist/utils/ansi.js.map +1 -1
- package/dist/utils/changelog.d.ts.map +1 -1
- package/dist/utils/changelog.js.map +1 -1
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +1 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard-native.d.ts.map +1 -1
- package/dist/utils/clipboard-native.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/deprecation.d.ts.map +1 -1
- package/dist/utils/deprecation.js.map +1 -1
- package/dist/utils/exif-orientation.d.ts.map +1 -1
- package/dist/utils/exif-orientation.js.map +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/fs-watch.d.ts.map +1 -1
- package/dist/utils/fs-watch.js.map +1 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/html.d.ts.map +1 -1
- package/dist/utils/html.js.map +1 -1
- package/dist/utils/image-convert.d.ts.map +1 -1
- package/dist/utils/image-convert.js.map +1 -1
- package/dist/utils/image-process.d.ts.map +1 -1
- package/dist/utils/image-process.js.map +1 -1
- package/dist/utils/image-resize-core.d.ts.map +1 -1
- package/dist/utils/image-resize-core.js.map +1 -1
- package/dist/utils/image-resize-worker.d.ts.map +1 -1
- package/dist/utils/image-resize-worker.js.map +1 -1
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js.map +1 -1
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/management-http.d.ts.map +1 -1
- package/dist/utils/management-http.js.map +1 -1
- package/dist/utils/mime.d.ts.map +1 -1
- package/dist/utils/mime.js.map +1 -1
- package/dist/utils/open-browser.d.ts.map +1 -1
- package/dist/utils/open-browser.js.map +1 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/photon.d.ts.map +1 -1
- package/dist/utils/photon.js.map +1 -1
- package/dist/utils/pi-user-agent.d.ts.map +1 -1
- package/dist/utils/pi-user-agent.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/sleep.d.ts.map +1 -1
- package/dist/utils/sleep.js.map +1 -1
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js +1 -1
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/dist/utils/tool-result-images.d.ts.map +1 -1
- package/dist/utils/tool-result-images.js.map +1 -1
- package/dist/utils/tools-manager.d.ts +10 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +14 -19
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js.map +1 -1
- package/dist/utils/windows-self-update.d.ts.map +1 -1
- package/dist/utils/windows-self-update.js.map +1 -1
- package/docs/compaction.md +3 -3
- package/docs/custom-provider.md +1 -1
- package/docs/environment-variables.md +1 -0
- package/docs/extensions.md +5 -1
- package/docs/json.md +6 -4
- package/docs/keybindings.md +8 -2
- package/docs/rpc.md +15 -4
- package/docs/sdk.md +9 -0
- package/docs/settings.md +31 -0
- package/docs/terminal-setup.md +23 -2
- package/docs/themes.md +23 -3
- package/docs/tui.md +2 -2
- package/docs/usage.md +3 -2
- package/examples/extensions/README.md +1 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +2 -2
- 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/minimal-mode.ts +6 -6
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +2 -2
- package/examples/extensions/subagent/README.md +24 -147
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +853 -661
- package/package.json +33 -33
- package/src/humain/mcp-adapter/UPSTREAM.md +1 -1
- package/src/humain/mcp-adapter/upstream.json +3 -3
- package/src/humain/mcp-adapter/vendor/CHANGELOG.md +36 -0
- package/src/humain/web-access/UPSTREAM.md +1 -1
- package/src/humain/web-access/upstream.json +4 -4
- package/examples/extensions/subagent/agents.ts +0 -126
- package/examples/extensions/subagent/index.ts +0 -1015
|
@@ -73,6 +73,11 @@ function printHelp(log = console.log) {
|
|
|
73
73
|
log(" pi-mcp-adapter init Detect host configs and scaffold Pi imports");
|
|
74
74
|
log(" pi-mcp-adapter init --dry-run");
|
|
75
75
|
log(" pi-mcp-adapter init --discover-host-configs Opt in to host config fallback discovery");
|
|
76
|
+
log("");
|
|
77
|
+
log("Bearer token storage (servers configured with auth: \"bearer\" and bearerTokenStore: true):");
|
|
78
|
+
log(" pi-mcp-adapter token set <server> Store a token read from stdin (masked prompt or pipe; never argv)");
|
|
79
|
+
log(" pi-mcp-adapter token status <server> Report whether a stored token matches the configured URL");
|
|
80
|
+
log(" pi-mcp-adapter token remove <server> Remove the stored token");
|
|
76
81
|
}
|
|
77
82
|
|
|
78
83
|
function readJsonFile(filePath) {
|
|
@@ -194,7 +199,160 @@ async function runInit(argv, log = console.log) {
|
|
|
194
199
|
return 0;
|
|
195
200
|
}
|
|
196
201
|
|
|
197
|
-
|
|
202
|
+
async function importTokenModules(error) {
|
|
203
|
+
try {
|
|
204
|
+
const [store, config, utils] = await Promise.all([
|
|
205
|
+
import("./mcp-bearer-store.ts"),
|
|
206
|
+
import("./config.ts"),
|
|
207
|
+
import("./utils.ts"),
|
|
208
|
+
]);
|
|
209
|
+
return { store, config, utils };
|
|
210
|
+
} catch (err) {
|
|
211
|
+
error("Token commands need a Node.js version that can load TypeScript modules (Node 22.18+ or 23+).");
|
|
212
|
+
error(`Import failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function readTokenFromStdin(stdin) {
|
|
218
|
+
if (stdin.isTTY) return readTokenMasked(stdin);
|
|
219
|
+
return new Promise((resolve, reject) => {
|
|
220
|
+
let data = "";
|
|
221
|
+
stdin.setEncoding("utf8");
|
|
222
|
+
stdin.on("data", (chunk) => {
|
|
223
|
+
data += chunk;
|
|
224
|
+
});
|
|
225
|
+
stdin.on("end", () => resolve(data.replace(/[\r\n]+$/, "")));
|
|
226
|
+
stdin.on("error", reject);
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Raw-mode masked prompt: the token never echoes to the terminal.
|
|
231
|
+
function readTokenMasked(stdin) {
|
|
232
|
+
return new Promise((resolve, reject) => {
|
|
233
|
+
process.stderr.write("Enter bearer token (input hidden): ");
|
|
234
|
+
stdin.setRawMode(true);
|
|
235
|
+
stdin.resume();
|
|
236
|
+
stdin.setEncoding("utf8");
|
|
237
|
+
let token = "";
|
|
238
|
+
const onData = (chunk) => {
|
|
239
|
+
for (const char of chunk) {
|
|
240
|
+
if (char === "\u0003") {
|
|
241
|
+
cleanup();
|
|
242
|
+
reject(new Error("Token entry cancelled"));
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
if (char === "\r" || char === "\n") {
|
|
246
|
+
cleanup();
|
|
247
|
+
resolve(token);
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
if (char === "\u007f" || char === "\b") {
|
|
251
|
+
token = token.slice(0, -1);
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
token += char;
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
const cleanup = () => {
|
|
258
|
+
stdin.setRawMode(false);
|
|
259
|
+
stdin.pause();
|
|
260
|
+
stdin.off("data", onData);
|
|
261
|
+
process.stderr.write("\n");
|
|
262
|
+
};
|
|
263
|
+
stdin.on("data", onData);
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
async function runToken(argv, log, error, stdin) {
|
|
268
|
+
const [action, serverName, ...extra] = argv;
|
|
269
|
+
if (!["set", "status", "remove"].includes(action) || !serverName) {
|
|
270
|
+
error("Usage: pi-mcp-adapter token <set|status|remove> <server>");
|
|
271
|
+
error("`token set` reads the token from stdin only. Never pass the token as an argument.");
|
|
272
|
+
return 1;
|
|
273
|
+
}
|
|
274
|
+
if (extra.length > 0) {
|
|
275
|
+
error("Unexpected extra arguments. The token must not be passed on the command line; pipe it on stdin or use the interactive prompt.");
|
|
276
|
+
return 1;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
const modules = await importTokenModules(error);
|
|
280
|
+
if (!modules) return 1;
|
|
281
|
+
|
|
282
|
+
// Argv-derived text is sanitized before terminal output, and the resolved
|
|
283
|
+
// URL is never printed: it can embed userinfo or interpolated secrets.
|
|
284
|
+
const safeName = modules.utils.sanitizeTerminalText(serverName);
|
|
285
|
+
const definition = modules.config.loadMcpConfig(undefined, process.cwd()).mcpServers[serverName];
|
|
286
|
+
if (!definition) {
|
|
287
|
+
error(`Server "${safeName}" not found in the effective MCP config.`);
|
|
288
|
+
return 1;
|
|
289
|
+
}
|
|
290
|
+
if (definition.auth !== "bearer" || definition.bearerTokenStore !== true) {
|
|
291
|
+
error(`Server "${safeName}" is not configured for bearerTokenStore. Set "auth": "bearer" and "bearerTokenStore": true.`);
|
|
292
|
+
return 1;
|
|
293
|
+
}
|
|
294
|
+
// resolveServerUrl embeds the interpolated URL in its exceptions, so catch
|
|
295
|
+
// and redact: the URL can carry userinfo or interpolated secrets.
|
|
296
|
+
let serverUrl;
|
|
297
|
+
try {
|
|
298
|
+
serverUrl = modules.utils.resolveServerUrl(definition);
|
|
299
|
+
} catch {
|
|
300
|
+
error(`Server "${safeName}" has an invalid or unresolvable URL. Fix the server's url in the MCP config and retry.`);
|
|
301
|
+
return 1;
|
|
302
|
+
}
|
|
303
|
+
if (!serverUrl) {
|
|
304
|
+
error(`Server "${safeName}" has no URL configured.`);
|
|
305
|
+
return 1;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
if (action === "set") {
|
|
309
|
+
const token = await readTokenFromStdin(stdin);
|
|
310
|
+
if (!token) {
|
|
311
|
+
error("No token provided on stdin.");
|
|
312
|
+
return 1;
|
|
313
|
+
}
|
|
314
|
+
try {
|
|
315
|
+
modules.store.saveBearerTokenForUrl(serverName, token, serverUrl);
|
|
316
|
+
} catch (err) {
|
|
317
|
+
error(modules.utils.sanitizeTerminalText(err instanceof Error ? err.message : String(err)));
|
|
318
|
+
return 1;
|
|
319
|
+
}
|
|
320
|
+
log(`Bearer token stored for "${safeName}" and bound to the configured server URL.`);
|
|
321
|
+
if (definition.bearerToken !== undefined || definition.bearerTokenEnv !== undefined) {
|
|
322
|
+
log("Note: this server also configures bearerToken or bearerTokenEnv, which take precedence over the stored token.");
|
|
323
|
+
}
|
|
324
|
+
return 0;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
if (action === "status") {
|
|
328
|
+
const status = modules.store.inspectBearerTokenForUrl(serverName, serverUrl);
|
|
329
|
+
if (status.status === "present") {
|
|
330
|
+
log(`Bearer token is stored for "${safeName}".`);
|
|
331
|
+
return 0;
|
|
332
|
+
}
|
|
333
|
+
if (status.status === "url-mismatch") {
|
|
334
|
+
log(`Bearer token is stored for "${safeName}", but its URL does not match the current server URL. Run \`pi-mcp-adapter token set ${safeName}\` to rebind it.`);
|
|
335
|
+
return 1;
|
|
336
|
+
}
|
|
337
|
+
if (status.status === "unavailable") {
|
|
338
|
+
error(status.message);
|
|
339
|
+
return 1;
|
|
340
|
+
}
|
|
341
|
+
log(`No bearer token is stored for "${safeName}".`);
|
|
342
|
+
return 1;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
try {
|
|
346
|
+
modules.store.removeBearerToken(serverName);
|
|
347
|
+
} catch (err) {
|
|
348
|
+
error(modules.utils.sanitizeTerminalText(err instanceof Error ? err.message : String(err)));
|
|
349
|
+
return 1;
|
|
350
|
+
}
|
|
351
|
+
log(`Bearer token removed for "${safeName}".`);
|
|
352
|
+
return 0;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
export async function main(argv = process.argv.slice(2), log = console.log, error = console.error, stdin = process.stdin) {
|
|
198
356
|
const [command, ...rest] = argv;
|
|
199
357
|
|
|
200
358
|
if (!command || command === "help" || command === "--help" || command === "-h") {
|
|
@@ -202,6 +360,10 @@ export async function main(argv = process.argv.slice(2), log = console.log, erro
|
|
|
202
360
|
return 0;
|
|
203
361
|
}
|
|
204
362
|
|
|
363
|
+
if (command === "token") {
|
|
364
|
+
return runToken(rest, log, error, stdin);
|
|
365
|
+
}
|
|
366
|
+
|
|
205
367
|
if (command === "install") {
|
|
206
368
|
error("The custom downloader has been retired.");
|
|
207
369
|
error("Use `pi install npm:pi-mcp-adapter` instead, then optionally run `pi-mcp-adapter init`.");
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import type { OverlayHandle } from "@earendil-works/pi-tui";
|
|
2
3
|
import type { McpExtensionState } from "./state.ts";
|
|
3
4
|
import { isServerDisabled, type McpAuthResult, type McpConfig, type McpPanelCallbacks, type McpPanelResult, type ImportKind } from "./types.ts";
|
|
4
5
|
import {
|
|
@@ -20,6 +21,7 @@ import { loadMetadataCache, reconstructPromptMetadata } from "./metadata-cache.t
|
|
|
20
21
|
import { buildToolMetadata } from "./tool-metadata.ts";
|
|
21
22
|
import { supportsOAuth, authenticate, removeAuth, type McpOAuthRuntime } from "./mcp-auth-flow.ts";
|
|
22
23
|
import { getAuthStorageOptions, inspectAuthForUrl } from "./mcp-auth.ts";
|
|
24
|
+
import { inspectBearerTokenForUrl, removeBearerToken } from "./mcp-bearer-store.ts";
|
|
23
25
|
import { loadOnboardingState, markSetupCompleted as persistSetupCompleted, markSharedConfigHintShown } from "./onboarding-state.ts";
|
|
24
26
|
import { openPath, resolveServerUrl, sanitizeTerminalText } from "./utils.ts";
|
|
25
27
|
import { isAbortError } from "./runtime-owner.ts";
|
|
@@ -28,6 +30,19 @@ function terminalHyperlink(label: string, url: string): string {
|
|
|
28
30
|
return `\u001B]8;;${sanitizeTerminalText(url)}\u001B\\${sanitizeTerminalText(label)}\u001B]8;;\u001B\\`;
|
|
29
31
|
}
|
|
30
32
|
|
|
33
|
+
/**
|
|
34
|
+
* True when this run mode can display a `ctx.ui.custom()` overlay.
|
|
35
|
+
*
|
|
36
|
+
* `ctx.hasUI` only reports that *some* UI context is bound. In rpc/print mode
|
|
37
|
+
* that context is a headless stub whose `custom()` returns immediately without
|
|
38
|
+
* ever invoking the factory or the `done` callback, so a panel awaited through
|
|
39
|
+
* `new Promise(resolve => ctx.ui.custom(...))` never settles and the command
|
|
40
|
+
* hangs. Overlay panels therefore additionally require `ctx.mode === "tui"`.
|
|
41
|
+
*/
|
|
42
|
+
function canRenderPanel(ctx: ExtensionContext): boolean {
|
|
43
|
+
return ctx.hasUI && ctx.mode === "tui";
|
|
44
|
+
}
|
|
45
|
+
|
|
31
46
|
export async function showStatus(state: McpExtensionState, ctx: ExtensionContext): Promise<void> {
|
|
32
47
|
if (!ctx.hasUI) return;
|
|
33
48
|
|
|
@@ -274,25 +289,14 @@ export async function authenticateServer(
|
|
|
274
289
|
const authStorageOptions = getAuthStorageOptions(config.settings?.oauthDir, cwd);
|
|
275
290
|
const status = await authenticate(serverName, serverUrl, definition, {
|
|
276
291
|
...(authStorageOptions.baseDir ? { authStorageOptions } : {}),
|
|
277
|
-
onAuthorizationUrl: (
|
|
278
|
-
ui.notify(
|
|
279
|
-
`Open this URL to authenticate ${serverName}:\n\n${terminalHyperlink(authorizationUrl, authorizationUrl)}\n\n` +
|
|
280
|
-
"After approving, Pi will complete automatically if the browser can reach its localhost callback. " +
|
|
281
|
-
"On a remote machine, copy the full localhost URL from the browser address bar and paste it into Pi.",
|
|
282
|
-
"info"
|
|
283
|
-
);
|
|
284
|
-
},
|
|
292
|
+
onAuthorizationUrl: () => {},
|
|
285
293
|
onAuthorizationInput: async (authorizationUrl, inputSignal) => {
|
|
286
|
-
|
|
287
|
-
`Authorize ${serverName}`,
|
|
288
|
-
`Open this link in your browser:\n${terminalHyperlink(authorizationUrl, authorizationUrl)}\n\n` +
|
|
289
|
-
"After approving access, select Yes to paste the callback URL.",
|
|
290
|
-
{ signal: inputSignal },
|
|
291
|
-
);
|
|
292
|
-
if (!readyToPaste || inputSignal.aborted) return undefined;
|
|
294
|
+
if (inputSignal.aborted) return undefined;
|
|
293
295
|
return ui.input(
|
|
294
|
-
`Complete ${serverName} OAuth
|
|
295
|
-
|
|
296
|
+
`Complete ${serverName} OAuth\n\n` +
|
|
297
|
+
`${terminalHyperlink("Open authorization page", authorizationUrl)}\n${authorizationUrl}\n\n` +
|
|
298
|
+
"Approve access, then paste the full localhost callback URL below.",
|
|
299
|
+
undefined,
|
|
296
300
|
{ signal: inputSignal },
|
|
297
301
|
);
|
|
298
302
|
},
|
|
@@ -368,6 +372,75 @@ export async function logoutServer(
|
|
|
368
372
|
return { ok: true, message };
|
|
369
373
|
}
|
|
370
374
|
|
|
375
|
+
function validateBearerTokenStoreServer(
|
|
376
|
+
serverName: string,
|
|
377
|
+
state: McpExtensionState,
|
|
378
|
+
): { ok: true; serverUrl: string } | { ok: false; message: string; type: "error" | "warning" } {
|
|
379
|
+
const safeName = sanitizeTerminalText(serverName);
|
|
380
|
+
const definition = state.config.mcpServers[serverName];
|
|
381
|
+
if (!definition) return { ok: false, message: `Server "${safeName}" not found in config`, type: "error" };
|
|
382
|
+
if (isServerDisabled(definition)) return { ok: false, message: `Server "${safeName}" is disabled. Run /mcp enable ${safeName}, then /reload.`, type: "warning" };
|
|
383
|
+
if (definition.auth !== "bearer" || definition.bearerTokenStore !== true) {
|
|
384
|
+
return { ok: false, message: `Server "${safeName}" is not configured for bearerTokenStore.`, type: "error" };
|
|
385
|
+
}
|
|
386
|
+
// resolveServerUrl embeds the interpolated URL in its exceptions; redact it
|
|
387
|
+
// because the URL can carry userinfo or interpolated secrets.
|
|
388
|
+
let serverUrl: string | undefined;
|
|
389
|
+
try {
|
|
390
|
+
serverUrl = resolveServerUrl(definition);
|
|
391
|
+
} catch {
|
|
392
|
+
return { ok: false, message: `Server "${safeName}" has an invalid or unresolvable URL.`, type: "error" };
|
|
393
|
+
}
|
|
394
|
+
if (!serverUrl) return { ok: false, message: `Server "${safeName}" has no URL configured.`, type: "error" };
|
|
395
|
+
return { ok: true, serverUrl };
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
export async function manageBearerToken(
|
|
399
|
+
action: "set" | "remove" | "status",
|
|
400
|
+
serverName: string,
|
|
401
|
+
state: McpExtensionState,
|
|
402
|
+
ctx: ExtensionContext,
|
|
403
|
+
): Promise<{ ok: boolean; message: string }> {
|
|
404
|
+
const ui = ctx.hasUI ? ctx.ui : undefined;
|
|
405
|
+
const safeName = sanitizeTerminalText(serverName);
|
|
406
|
+
const validation = validateBearerTokenStoreServer(serverName, state);
|
|
407
|
+
if (!validation.ok) {
|
|
408
|
+
if (ui) ui.notify(validation.message, validation.type);
|
|
409
|
+
return { ok: false, message: validation.message };
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
if (action === "set") {
|
|
413
|
+
const message = `Cannot store bearer token here: Pi extension UI has no masked secret input primitive. Run \`pi-mcp-adapter token set ${safeName}\` in a terminal; it reads the token from stdin only.`;
|
|
414
|
+
if (ui) ui.notify(message, "error");
|
|
415
|
+
return { ok: false, message };
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
if (action === "status") {
|
|
419
|
+
const status = inspectBearerTokenForUrl(serverName, validation.serverUrl);
|
|
420
|
+
const message = status.status === "present"
|
|
421
|
+
? `Bearer token is stored for "${safeName}".`
|
|
422
|
+
: status.status === "url-mismatch"
|
|
423
|
+
? `Bearer token is stored for "${safeName}", but its URL does not match the current server URL.`
|
|
424
|
+
: status.status === "unavailable"
|
|
425
|
+
? status.message
|
|
426
|
+
: `No bearer token is stored for "${safeName}".`;
|
|
427
|
+
if (ui) ui.notify(message, status.status === "unavailable" ? "error" : "info");
|
|
428
|
+
return { ok: status.status !== "unavailable", message };
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
try {
|
|
432
|
+
removeBearerToken(serverName);
|
|
433
|
+
} catch (error) {
|
|
434
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
435
|
+
if (ui) ui.notify(`Failed to remove bearer token for "${safeName}": ${sanitizeTerminalText(message)}`, "error");
|
|
436
|
+
return { ok: false, message };
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
const message = `Bearer token removed for "${safeName}".`;
|
|
440
|
+
if (ui) ui.notify(message, "info");
|
|
441
|
+
return { ok: true, message };
|
|
442
|
+
}
|
|
443
|
+
|
|
371
444
|
export interface PanelFlowResult {
|
|
372
445
|
configChanged: boolean;
|
|
373
446
|
}
|
|
@@ -399,6 +472,10 @@ export async function openMcpSetup(
|
|
|
399
472
|
options: { includeHostConfigs?: boolean } = {},
|
|
400
473
|
): Promise<PanelFlowResult> {
|
|
401
474
|
if (!ctx.hasUI) return { configChanged: false };
|
|
475
|
+
if (!canRenderPanel(ctx)) {
|
|
476
|
+
ctx.ui.notify(`The interactive MCP setup panel is only available in the terminal UI (current mode: ${ctx.mode}). Edit .mcp.json directly, or run /mcp status to review servers.`, "info");
|
|
477
|
+
return { configChanged: false };
|
|
478
|
+
}
|
|
402
479
|
if (state.programmaticConfig) {
|
|
403
480
|
ctx.ui.notify("MCP setup is unavailable when config is supplied by createMcpAdapter().", "info");
|
|
404
481
|
return { configChanged: false };
|
|
@@ -467,6 +544,7 @@ function buildMcpPanelCallbacks(
|
|
|
467
544
|
state: McpExtensionState,
|
|
468
545
|
config: McpConfig,
|
|
469
546
|
ctx: ExtensionContext,
|
|
547
|
+
getOverlayHandle?: () => OverlayHandle | undefined,
|
|
470
548
|
): McpPanelCallbacks {
|
|
471
549
|
// Panel-only diagnostics keep status inspection from mutating connection
|
|
472
550
|
// failure state while allowing the existing panel failure UI to show why the
|
|
@@ -479,7 +557,16 @@ function buildMcpPanelCallbacks(
|
|
|
479
557
|
const definition = config.mcpServers[serverName];
|
|
480
558
|
return definition ? !isServerDisabled(definition) && supportsOAuth(definition) : false;
|
|
481
559
|
},
|
|
482
|
-
authenticate: (serverName: string) =>
|
|
560
|
+
authenticate: async (serverName: string) => {
|
|
561
|
+
const overlay = getOverlayHandle?.();
|
|
562
|
+
overlay?.setHidden(true);
|
|
563
|
+
try {
|
|
564
|
+
return await authenticateServer(serverName, config, ctx, state.owner?.signal, state.oauthRuntime);
|
|
565
|
+
} finally {
|
|
566
|
+
overlay?.setHidden(false);
|
|
567
|
+
overlay?.focus();
|
|
568
|
+
}
|
|
569
|
+
},
|
|
483
570
|
getConnectionStatus: (serverName: string) => {
|
|
484
571
|
authStatusFailures.delete(serverName);
|
|
485
572
|
const definition = config.mcpServers[serverName];
|
|
@@ -533,6 +620,11 @@ export async function openMcpPanel(
|
|
|
533
620
|
}
|
|
534
621
|
return { configChanged: false };
|
|
535
622
|
}
|
|
623
|
+
if (!canRenderPanel(ctx)) {
|
|
624
|
+
// No overlay here, but the same information is available as text.
|
|
625
|
+
await showStatus(state, ctx);
|
|
626
|
+
return { configChanged: false };
|
|
627
|
+
}
|
|
536
628
|
if (Object.keys(state.config.mcpServers).length === 0) {
|
|
537
629
|
return openMcpSetup(state, pi, ctx, configOverridePath, "empty", { includeHostConfigs: false });
|
|
538
630
|
}
|
|
@@ -543,7 +635,8 @@ export async function openMcpPanel(
|
|
|
543
635
|
const provenanceMap = getServerProvenance(configPath, ctx.cwd);
|
|
544
636
|
const { lines: noticeLines, fingerprint } = buildSharedConfigNoticeLines(configPath, ctx.cwd);
|
|
545
637
|
|
|
546
|
-
|
|
638
|
+
let overlayHandle: OverlayHandle | undefined;
|
|
639
|
+
const callbacks = buildMcpPanelCallbacks(state, config, ctx, () => overlayHandle);
|
|
547
640
|
|
|
548
641
|
const { createMcpPanel } = await import("./mcp-panel.ts");
|
|
549
642
|
let configChanged = false;
|
|
@@ -569,7 +662,11 @@ export async function openMcpPanel(
|
|
|
569
662
|
});
|
|
570
663
|
}, { noticeLines, keybindings });
|
|
571
664
|
},
|
|
572
|
-
{
|
|
665
|
+
{
|
|
666
|
+
overlay: true,
|
|
667
|
+
overlayOptions: { anchor: "center", width: 82 },
|
|
668
|
+
onHandle: (handle) => { overlayHandle = handle; },
|
|
669
|
+
},
|
|
573
670
|
);
|
|
574
671
|
});
|
|
575
672
|
|
|
@@ -587,6 +684,10 @@ export async function openMcpAuthPanel(
|
|
|
587
684
|
configOverridePath?: string,
|
|
588
685
|
): Promise<PanelFlowResult> {
|
|
589
686
|
if (!ctx.hasUI) return { configChanged: false };
|
|
687
|
+
if (!canRenderPanel(ctx)) {
|
|
688
|
+
ctx.ui.notify(`The interactive MCP auth panel is only available in the terminal UI (current mode: ${ctx.mode}). Use /mcp-auth <server> to authenticate a specific server.`, "info");
|
|
689
|
+
return { configChanged: false };
|
|
690
|
+
}
|
|
590
691
|
if (state.programmaticConfig) {
|
|
591
692
|
ctx.ui.notify("Use /mcp-auth <server> to authenticate a server from the in-memory SDK config.", "info");
|
|
592
693
|
return { configChanged: false };
|
|
@@ -604,7 +705,8 @@ export async function openMcpAuthPanel(
|
|
|
604
705
|
const cache = loadMetadataCache();
|
|
605
706
|
const configPath = pi.getFlag("mcp-config") as string | undefined ?? configOverridePath;
|
|
606
707
|
const provenanceMap = getServerProvenance(configPath, ctx.cwd);
|
|
607
|
-
|
|
708
|
+
let overlayHandle: OverlayHandle | undefined;
|
|
709
|
+
const callbacks = buildMcpPanelCallbacks(state, config, ctx, () => overlayHandle);
|
|
608
710
|
const { createMcpPanel } = await import("./mcp-panel.ts");
|
|
609
711
|
|
|
610
712
|
await new Promise<void>((resolve) => {
|
|
@@ -619,7 +721,11 @@ export async function openMcpAuthPanel(
|
|
|
619
721
|
noticeLines: ["Select an OAuth MCP server and press Enter or ctrl+a to authenticate."],
|
|
620
722
|
});
|
|
621
723
|
},
|
|
622
|
-
{
|
|
724
|
+
{
|
|
725
|
+
overlay: true,
|
|
726
|
+
overlayOptions: { anchor: "center", width: 82 },
|
|
727
|
+
onHandle: (handle) => { overlayHandle = handle; },
|
|
728
|
+
},
|
|
623
729
|
);
|
|
624
730
|
});
|
|
625
731
|
|
|
@@ -6,6 +6,7 @@ import { parse as parseToml } from "smol-toml";
|
|
|
6
6
|
import stripJsonComments from "strip-json-comments";
|
|
7
7
|
import { getAgentPath, getConfigDirName } from "./agent-dir.ts";
|
|
8
8
|
import { getAgentPluginSummaries, loadAgentPluginConfigs, type AgentPluginSummary } from "./agent-plugin-loader.ts";
|
|
9
|
+
import { loadPackageMcpConfigs } from "./package-mcp-loader.ts";
|
|
9
10
|
import { isServerDisabled, type HostConfigDiscovery, type McpConfig, type ServerEntry, type McpSettings, type ImportKind, type ServerProvenance } from "./types.ts";
|
|
10
11
|
import { toStringRecord } from "./utils.ts";
|
|
11
12
|
|
|
@@ -306,8 +307,12 @@ export function loadMcpConfig(overridePath?: string, cwd = process.cwd()): McpCo
|
|
|
306
307
|
config = mergeConfigs(config, expandImports(loaded, cwd));
|
|
307
308
|
}
|
|
308
309
|
|
|
310
|
+
const packageConfig = loadPackageMcpConfigs(cwd);
|
|
309
311
|
const pluginConfig = loadAgentPluginConfigs(config.settings?.agentPluginPaths, cwd);
|
|
310
|
-
|
|
312
|
+
const packageServers = Object.fromEntries(
|
|
313
|
+
Object.entries(packageConfig.mcpServers).filter(([name]) => !Object.hasOwn(pluginConfig.mcpServers, name)),
|
|
314
|
+
);
|
|
315
|
+
return mergeConfigs({ mcpServers: packageServers }, mergeConfigs(pluginConfig, config));
|
|
311
316
|
}
|
|
312
317
|
|
|
313
318
|
function getMergedSettings(overridePath?: string, cwd = process.cwd()): McpSettings | undefined {
|
|
@@ -471,7 +476,7 @@ function mergeConfigs(base: McpConfig, next: McpConfig): McpConfig {
|
|
|
471
476
|
// different url, these MUST NOT be inherited from the lower-precedence entry —
|
|
472
477
|
// otherwise the original endpoint's credentials would be shipped to the new
|
|
473
478
|
// url. See the SECURITY note in mergeServerMaps.
|
|
474
|
-
const URL_BOUND_AUTH_FIELDS = ["headers", "bearerToken", "bearerTokenEnv", "requestHeadersCommand"] as const;
|
|
479
|
+
const URL_BOUND_AUTH_FIELDS = ["headers", "bearerToken", "bearerTokenEnv", "bearerTokenStore", "requestHeadersCommand"] as const;
|
|
475
480
|
|
|
476
481
|
function mergeServerMaps(
|
|
477
482
|
base: Record<string, ServerEntry>,
|
|
@@ -491,17 +496,30 @@ function mergeServerMaps(
|
|
|
491
496
|
// applies (it is spread last). Behaviour is unchanged when the url is
|
|
492
497
|
// identical or the override omits `url` (partial overrides still inherit).
|
|
493
498
|
let baseEntry: ServerEntry = existing ?? {};
|
|
494
|
-
if (existing && typeof definition.
|
|
499
|
+
if (existing && typeof definition.command === "string") {
|
|
495
500
|
baseEntry = { ...existing };
|
|
496
501
|
for (const field of [
|
|
497
|
-
"
|
|
498
|
-
"
|
|
502
|
+
"url", "headers", "requestHeadersCommand", "auth", "bearerToken",
|
|
503
|
+
"bearerTokenEnv", "oauth", "httpTransport", "socket",
|
|
499
504
|
] as const) {
|
|
500
505
|
delete baseEntry[field];
|
|
501
506
|
}
|
|
502
|
-
} else if (existing
|
|
507
|
+
} else if (existing && typeof definition.url === "string") {
|
|
503
508
|
baseEntry = { ...existing };
|
|
504
|
-
|
|
509
|
+
for (const field of [
|
|
510
|
+
"command", "args", "env", "cwd", "pluginDataDir", "literalEnv", "socket",
|
|
511
|
+
] as const) {
|
|
512
|
+
delete baseEntry[field];
|
|
513
|
+
}
|
|
514
|
+
} else if (existing && typeof definition.socket === "string") {
|
|
515
|
+
baseEntry = { ...existing };
|
|
516
|
+
for (const field of [
|
|
517
|
+
"command", "args", "env", "cwd", "pluginDataDir", "literalEnv", "url",
|
|
518
|
+
"headers", "requestHeadersCommand", "auth", "bearerToken", "bearerTokenEnv",
|
|
519
|
+
"oauth", "httpTransport",
|
|
520
|
+
] as const) {
|
|
521
|
+
delete baseEntry[field];
|
|
522
|
+
}
|
|
505
523
|
}
|
|
506
524
|
if (existing && typeof definition.url === "string" && definition.url !== existing.url) {
|
|
507
525
|
if (baseEntry === existing) baseEntry = { ...existing };
|
|
@@ -15,7 +15,7 @@ import { createToolSelectorCandidateIndex, formatToolName, getToolNameCandidates
|
|
|
15
15
|
import { isUiToolVisibleToModel } from "./ui-tool-visibility.ts";
|
|
16
16
|
import { resourceNameToToolName } from "./resource-tools.ts";
|
|
17
17
|
import { authenticate, supportsOAuth } from "./mcp-auth-flow.ts";
|
|
18
|
-
import { formatAuthRequiredMessage, resolveServerUrl, truncateAtWord } from "./utils.ts";
|
|
18
|
+
import { formatAuthRequiredMessage, normalizeToolArguments, resolveServerUrl, truncateAtWord } from "./utils.ts";
|
|
19
19
|
import { SessionRecoveryAuthRequiredError, withSessionRecovery } from "./session-recovery.ts";
|
|
20
20
|
import { combineAbortSignals, isAbortError } from "./runtime-owner.ts";
|
|
21
21
|
import { ensureToolCallApproved } from "./tool-approval.ts";
|
|
@@ -429,6 +429,7 @@ export function createDirectToolExecutor(
|
|
|
429
429
|
};
|
|
430
430
|
}
|
|
431
431
|
|
|
432
|
+
const normalizedParams = spec.resourceUri ? params : normalizeToolArguments(params);
|
|
432
433
|
const approval = await ensureToolCallApproved(state, spec.serverName, {
|
|
433
434
|
name: spec.prefixedName,
|
|
434
435
|
originalName: spec.originalName,
|
|
@@ -437,7 +438,7 @@ export function createDirectToolExecutor(
|
|
|
437
438
|
...(spec.resourceUri !== undefined ? { resourceUri: spec.resourceUri } : {}),
|
|
438
439
|
...(spec.uiResourceUri !== undefined ? { uiResourceUri: spec.uiResourceUri } : {}),
|
|
439
440
|
...(spec.uiStreamMode !== undefined ? { uiStreamMode: spec.uiStreamMode } : {}),
|
|
440
|
-
},
|
|
441
|
+
}, normalizedParams, ownedSignal, spec.resourceUri ? "resource" : "direct");
|
|
441
442
|
if (approval.ok === false) {
|
|
442
443
|
const denied = approval.reason === "denied";
|
|
443
444
|
const message = denied
|
|
@@ -509,7 +510,7 @@ export function createDirectToolExecutor(
|
|
|
509
510
|
? await maybeStartUiSession(state, {
|
|
510
511
|
serverName: spec.serverName,
|
|
511
512
|
toolName: spec.originalName,
|
|
512
|
-
toolArgs:
|
|
513
|
+
toolArgs: normalizedParams,
|
|
513
514
|
uiResourceUri: spec.uiResourceUri!,
|
|
514
515
|
...(spec.uiStreamMode !== undefined ? { streamMode: spec.uiStreamMode } : {}),
|
|
515
516
|
...(signal ? { signal } : {}),
|
|
@@ -527,7 +528,7 @@ export function createDirectToolExecutor(
|
|
|
527
528
|
spec.serverName,
|
|
528
529
|
(conn) => abortable(conn.client.callTool({
|
|
529
530
|
name: spec.originalName,
|
|
530
|
-
arguments:
|
|
531
|
+
arguments: normalizedParams,
|
|
531
532
|
_meta: uiSession?.requestMeta,
|
|
532
533
|
}, requestOptions), ownedSignal),
|
|
533
534
|
);
|