@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
|
@@ -8,64 +8,62 @@ const DEFAULT_TIMEOUT_MS = 10_000;
|
|
|
8
8
|
const MAX_OUTPUT_BYTES = 64 * 1024;
|
|
9
9
|
const USE_PROCESS_GROUP = process.platform !== "win32";
|
|
10
10
|
const CLEANUP_TOKEN_ENV = "PI_MCP_REQUEST_HEADERS_CLEANUP_TOKEN";
|
|
11
|
+
// Busy hosts can exceed spawnSync's 1 MiB default when `ps axeww` dumps each
|
|
12
|
+
// process environment. Keep discovery below a bounded cap instead of letting
|
|
13
|
+
// `ps` get SIGTERM'd and reporting a false cleanup failure.
|
|
14
|
+
const PS_MAX_BUFFER_BYTES = 8 * 1024 * 1024;
|
|
11
15
|
|
|
12
16
|
function isNoSuchProcessError(error: unknown): boolean {
|
|
13
17
|
return typeof error === "object" && error !== null && "code" in error && (error as NodeJS.ErrnoException).code === "ESRCH";
|
|
14
18
|
}
|
|
15
19
|
|
|
16
|
-
function runPosixPs(args: string[]): { status: number | null; stdout: string } {
|
|
17
|
-
if (process.env.PI_MCP_ADAPTER_TEST_FAIL_PS === "1") return { status: 1, stdout: "" };
|
|
18
|
-
|
|
20
|
+
function runPosixPs(args: string[]): { status: number | null; signal: NodeJS.Signals | null; stdout: string } {
|
|
21
|
+
if (process.env.PI_MCP_ADAPTER_TEST_FAIL_PS === "1") return { status: 1, signal: null, stdout: "" };
|
|
22
|
+
const result = spawnSync("ps", args, { encoding: "utf8", maxBuffer: PS_MAX_BUFFER_BYTES });
|
|
23
|
+
return { status: result.status, signal: result.signal, stdout: result.stdout };
|
|
19
24
|
}
|
|
20
25
|
|
|
21
|
-
function
|
|
22
|
-
|
|
26
|
+
function psFailureReason(result: { status: number | null; signal: NodeJS.Signals | null }): string {
|
|
27
|
+
return result.status === null
|
|
28
|
+
? `ps was killed by signal ${result.signal ?? "unknown"}`
|
|
29
|
+
: `ps exited with code ${result.status}`;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function collectPosixProcessPids(rootPid: number, cleanupToken?: string): number[] {
|
|
33
|
+
const result = runPosixPs(["axeww", "-o", "pid=,ppid=,command="]);
|
|
23
34
|
if (result.status !== 0) {
|
|
24
|
-
throw new Error(`HTTP request headers command cleanup failed:
|
|
35
|
+
throw new Error(`HTTP request headers command cleanup failed: ${psFailureReason(result)}`);
|
|
25
36
|
}
|
|
26
37
|
|
|
27
38
|
const childrenByParent = new Map<number, number[]>();
|
|
39
|
+
const processPids = new Set<number>();
|
|
40
|
+
const needle = cleanupToken ? `${CLEANUP_TOKEN_ENV}=${cleanupToken}` : undefined;
|
|
28
41
|
for (const line of result.stdout.split("\n")) {
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
const
|
|
42
|
+
const match = /^\s*(\d+)\s+(\d+)(?:\s+(.*))?$/.exec(line);
|
|
43
|
+
if (!match) continue;
|
|
44
|
+
const pid = Number(match[1]);
|
|
45
|
+
const ppid = Number(match[2]);
|
|
32
46
|
if (!Number.isInteger(pid) || !Number.isInteger(ppid)) continue;
|
|
33
47
|
const children = childrenByParent.get(ppid);
|
|
34
48
|
if (children) children.push(pid);
|
|
35
49
|
else childrenByParent.set(ppid, [pid]);
|
|
50
|
+
if (needle && pid !== process.pid && match[3]?.includes(needle)) processPids.add(pid);
|
|
36
51
|
}
|
|
37
52
|
|
|
38
|
-
const descendants: number[] = [];
|
|
39
53
|
const stack = [...(childrenByParent.get(rootPid) ?? [])];
|
|
40
54
|
while (stack.length > 0) {
|
|
41
55
|
const pid = stack.pop()!;
|
|
42
|
-
|
|
56
|
+
processPids.add(pid);
|
|
43
57
|
stack.push(...(childrenByParent.get(pid) ?? []));
|
|
44
58
|
}
|
|
45
|
-
return
|
|
59
|
+
return [...processPids];
|
|
46
60
|
}
|
|
47
61
|
|
|
48
|
-
function
|
|
49
|
-
const result = runPosixPs(["axeww", "-o", "pid=,command="]);
|
|
62
|
+
function assertPosixProcessDiscoveryAvailable(): void {
|
|
63
|
+
const result = runPosixPs(["axeww", "-o", "pid=,ppid=,command="]);
|
|
50
64
|
if (result.status !== 0) {
|
|
51
|
-
throw new Error(`HTTP request headers command cleanup failed:
|
|
65
|
+
throw new Error(`HTTP request headers command cleanup failed: ${psFailureReason(result)}`);
|
|
52
66
|
}
|
|
53
|
-
|
|
54
|
-
const needle = `${CLEANUP_TOKEN_ENV}=${cleanupToken}`;
|
|
55
|
-
const pids: number[] = [];
|
|
56
|
-
for (const line of result.stdout.split("\n")) {
|
|
57
|
-
const trimmed = line.trim();
|
|
58
|
-
if (!trimmed.includes(needle)) continue;
|
|
59
|
-
const [pidText] = trimmed.split(/\s+/, 1);
|
|
60
|
-
const pid = Number(pidText);
|
|
61
|
-
if (Number.isInteger(pid) && pid !== process.pid) pids.push(pid);
|
|
62
|
-
}
|
|
63
|
-
return pids;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function assertPosixProcessDiscoveryAvailable(): void {
|
|
67
|
-
collectPosixDescendantPids(process.pid);
|
|
68
|
-
collectPosixCleanupTokenPids(`${process.pid}-preflight`);
|
|
69
67
|
}
|
|
70
68
|
|
|
71
69
|
function isTaskkillNoSuchProcess(result: ReturnType<typeof spawnSync>): boolean {
|
|
@@ -109,10 +107,7 @@ function killRequestHeadersCommand(child: ChildProcess, trackedPosixDescendantPi
|
|
|
109
107
|
}
|
|
110
108
|
let stablePasses = 0;
|
|
111
109
|
for (let pass = 0; pass < 16; pass++) {
|
|
112
|
-
const candidates =
|
|
113
|
-
...collectPosixDescendantPids(child.pid),
|
|
114
|
-
...(cleanupToken ? collectPosixCleanupTokenPids(cleanupToken) : []),
|
|
115
|
-
];
|
|
110
|
+
const candidates = collectPosixProcessPids(child.pid, cleanupToken);
|
|
116
111
|
const newPids = candidates.filter(pid => !frozenPids.has(pid));
|
|
117
112
|
if (newPids.length === 0) {
|
|
118
113
|
stablePasses++;
|
|
@@ -212,8 +207,7 @@ async function invokeRequestHeadersCommand(
|
|
|
212
207
|
const trackPosixDescendants = () => {
|
|
213
208
|
if (!USE_PROCESS_GROUP || child.pid === undefined || settled || trackingError) return;
|
|
214
209
|
try {
|
|
215
|
-
for (const pid of
|
|
216
|
-
for (const pid of collectPosixCleanupTokenPids(cleanupToken)) trackedPosixDescendantPids.add(pid);
|
|
210
|
+
for (const pid of collectPosixProcessPids(child.pid, cleanupToken)) trackedPosixDescendantPids.add(pid);
|
|
217
211
|
} catch (error) {
|
|
218
212
|
trackingError = error instanceof Error ? error : new Error(String(error));
|
|
219
213
|
}
|
|
@@ -23,6 +23,26 @@ export interface RankedToolMatch {
|
|
|
23
23
|
score: number;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
type SearchField = Exclude<keyof typeof FIELD_WEIGHTS, "keywords">;
|
|
27
|
+
|
|
28
|
+
interface PreparedToolSearch {
|
|
29
|
+
tool: ToolMetadata;
|
|
30
|
+
fields: Array<[SearchField, string, string[]]>;
|
|
31
|
+
nameTokens: string[];
|
|
32
|
+
keywordPhrases: string[];
|
|
33
|
+
keywordTokens: string[];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
interface CachedServerSearch {
|
|
37
|
+
metadata: ToolMetadata[];
|
|
38
|
+
searchKeywords: ServerEntry["searchKeywords"];
|
|
39
|
+
toolPrefix: ReturnType<typeof resolveToolPrefix>;
|
|
40
|
+
withKeywords?: PreparedToolSearch[];
|
|
41
|
+
withoutKeywords?: PreparedToolSearch[];
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const searchCache = new WeakMap<McpExtensionState, Map<string, CachedServerSearch>>();
|
|
45
|
+
|
|
26
46
|
/**
|
|
27
47
|
* Resolve the configured searchKeywords entries that apply to a tool.
|
|
28
48
|
* Keys match by original name, prefixed name, or glob — the same candidate
|
|
@@ -64,25 +84,37 @@ export function tokenize(value: string): string[] {
|
|
|
64
84
|
return normalizeSearchText(value).split(/[^a-z0-9]+/).filter(Boolean);
|
|
65
85
|
}
|
|
66
86
|
|
|
67
|
-
|
|
68
|
-
const normalizedQuery = normalizeSearchText(query).trim();
|
|
69
|
-
const queryTokens = tokenize(query);
|
|
70
|
-
if (queryTokens.length === 0) return null;
|
|
71
|
-
|
|
87
|
+
function prepareToolSearch(tool: ToolMetadata, server: string, keywords?: string[]): PreparedToolSearch {
|
|
72
88
|
const fields = {
|
|
73
89
|
name: normalizeSearchText(tool.name),
|
|
74
90
|
originalName: normalizeSearchText(tool.originalName),
|
|
75
91
|
server: normalizeSearchText(server),
|
|
76
92
|
description: normalizeSearchText(tool.description),
|
|
77
93
|
};
|
|
94
|
+
const preparedFields = (Object.entries(fields) as Array<[SearchField, string]>)
|
|
95
|
+
.map(([field, value]): [SearchField, string, string[]] => [field, value, tokenize(value)]);
|
|
96
|
+
const keywordPhrases = keywords?.map(keyword => normalizeSearchText(keyword).trim()).filter(Boolean) ?? [];
|
|
97
|
+
return {
|
|
98
|
+
tool,
|
|
99
|
+
fields: preparedFields,
|
|
100
|
+
nameTokens: preparedFields[0]![2],
|
|
101
|
+
keywordPhrases,
|
|
102
|
+
keywordTokens: keywordPhrases.flatMap(tokenize),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function scorePreparedToolMatch(
|
|
107
|
+
prepared: PreparedToolSearch,
|
|
108
|
+
normalizedQuery: string,
|
|
109
|
+
queryTokens: string[],
|
|
110
|
+
): number | null {
|
|
78
111
|
let score = 0;
|
|
79
112
|
let phraseMatched = false;
|
|
80
113
|
let wholeFieldExact = false;
|
|
81
114
|
const matchedTokens = new Set<string>();
|
|
82
115
|
|
|
83
|
-
for (const [field, value] of
|
|
116
|
+
for (const [field, value, fieldTokens] of prepared.fields) {
|
|
84
117
|
const weight = FIELD_WEIGHTS[field];
|
|
85
|
-
const fieldTokens = tokenize(value);
|
|
86
118
|
if (value === normalizedQuery) {
|
|
87
119
|
score += weight * 14;
|
|
88
120
|
phraseMatched = true;
|
|
@@ -112,11 +144,10 @@ export function scoreToolMatch(tool: ToolMetadata, server: string, query: string
|
|
|
112
144
|
// Configured keywords are discrete phrases, so the phrase-level bonus is
|
|
113
145
|
// computed per phrase (best match wins) rather than on a joined string,
|
|
114
146
|
// which would phrase-match queries spanning two unrelated keywords.
|
|
115
|
-
if (
|
|
147
|
+
if (prepared.keywordPhrases.length > 0) {
|
|
116
148
|
const weight = FIELD_WEIGHTS.keywords;
|
|
117
|
-
const phrases = keywords.map(keyword => normalizeSearchText(keyword).trim()).filter(Boolean);
|
|
118
149
|
let phraseScore = 0;
|
|
119
|
-
for (const phrase of
|
|
150
|
+
for (const phrase of prepared.keywordPhrases) {
|
|
120
151
|
if (phrase === normalizedQuery) {
|
|
121
152
|
phraseScore = Math.max(phraseScore, weight * 14);
|
|
122
153
|
phraseMatched = true;
|
|
@@ -131,15 +162,14 @@ export function scoreToolMatch(tool: ToolMetadata, server: string, query: string
|
|
|
131
162
|
}
|
|
132
163
|
score += phraseScore;
|
|
133
164
|
|
|
134
|
-
const keywordTokens = phrases.flatMap(tokenize);
|
|
135
165
|
for (const token of queryTokens) {
|
|
136
|
-
if (keywordTokens.includes(token)) {
|
|
166
|
+
if (prepared.keywordTokens.includes(token)) {
|
|
137
167
|
score += weight * 4;
|
|
138
168
|
matchedTokens.add(token);
|
|
139
|
-
} else if (keywordTokens.some(keywordToken => keywordToken.startsWith(token) || (keywordToken.length >= MIN_STEM_LENGTH && token.startsWith(keywordToken)))) {
|
|
169
|
+
} else if (prepared.keywordTokens.some(keywordToken => keywordToken.startsWith(token) || (keywordToken.length >= MIN_STEM_LENGTH && token.startsWith(keywordToken)))) {
|
|
140
170
|
score += weight * 2;
|
|
141
171
|
matchedTokens.add(token);
|
|
142
|
-
} else if (
|
|
172
|
+
} else if (prepared.keywordPhrases.some(phrase => phrase.includes(token))) {
|
|
143
173
|
score += weight;
|
|
144
174
|
matchedTokens.add(token);
|
|
145
175
|
}
|
|
@@ -151,11 +181,52 @@ export function scoreToolMatch(tool: ToolMetadata, server: string, query: string
|
|
|
151
181
|
|
|
152
182
|
score += coverage === 1 ? 25 : Math.round(coverage * 10);
|
|
153
183
|
const firstQueryToken = queryTokens[0];
|
|
154
|
-
if (firstQueryToken !== undefined &&
|
|
184
|
+
if (firstQueryToken !== undefined && prepared.nameTokens.includes(firstQueryToken)) score += 8;
|
|
155
185
|
if (wholeFieldExact) score += 20;
|
|
156
186
|
return score;
|
|
157
187
|
}
|
|
158
188
|
|
|
189
|
+
export function scoreToolMatch(tool: ToolMetadata, server: string, query: string, keywords?: string[]): number | null {
|
|
190
|
+
const normalizedQuery = normalizeSearchText(query).trim();
|
|
191
|
+
const queryTokens = tokenize(query);
|
|
192
|
+
if (queryTokens.length === 0) return null;
|
|
193
|
+
return scorePreparedToolMatch(prepareToolSearch(tool, server, keywords), normalizedQuery, queryTokens);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function getPreparedTools(
|
|
197
|
+
state: McpExtensionState,
|
|
198
|
+
serverName: string,
|
|
199
|
+
metadata: ToolMetadata[],
|
|
200
|
+
definition: ServerEntry | undefined,
|
|
201
|
+
globalPrefix: ToolPrefix,
|
|
202
|
+
includeKeywords: boolean,
|
|
203
|
+
): PreparedToolSearch[] {
|
|
204
|
+
let stateCache = searchCache.get(state);
|
|
205
|
+
if (!stateCache) {
|
|
206
|
+
stateCache = new Map();
|
|
207
|
+
searchCache.set(state, stateCache);
|
|
208
|
+
}
|
|
209
|
+
const toolPrefix = resolveToolPrefix(definition, globalPrefix);
|
|
210
|
+
let cached = stateCache.get(serverName);
|
|
211
|
+
if (cached?.metadata !== metadata || cached.searchKeywords !== definition?.searchKeywords || cached.toolPrefix !== toolPrefix) {
|
|
212
|
+
cached = { metadata, searchKeywords: definition?.searchKeywords, toolPrefix };
|
|
213
|
+
stateCache.set(serverName, cached);
|
|
214
|
+
}
|
|
215
|
+
const cacheKey = includeKeywords ? "withKeywords" : "withoutKeywords";
|
|
216
|
+
let prepared = cached[cacheKey];
|
|
217
|
+
if (!prepared) {
|
|
218
|
+
prepared = metadata.map(tool => prepareToolSearch(
|
|
219
|
+
tool,
|
|
220
|
+
serverName,
|
|
221
|
+
includeKeywords && definition?.searchKeywords !== undefined
|
|
222
|
+
? resolveSearchKeywords(definition, tool.originalName, serverName, globalPrefix)
|
|
223
|
+
: undefined,
|
|
224
|
+
));
|
|
225
|
+
cached[cacheKey] = prepared;
|
|
226
|
+
}
|
|
227
|
+
return prepared;
|
|
228
|
+
}
|
|
229
|
+
|
|
159
230
|
export function rankToolMatches(
|
|
160
231
|
state: McpExtensionState,
|
|
161
232
|
query: string,
|
|
@@ -163,18 +234,17 @@ export function rankToolMatches(
|
|
|
163
234
|
includeKeywords = true,
|
|
164
235
|
): RankedToolMatch[] {
|
|
165
236
|
const matches: RankedToolMatch[] = [];
|
|
237
|
+
const normalizedQuery = normalizeSearchText(query).trim();
|
|
238
|
+
const queryTokens = tokenize(query);
|
|
239
|
+
if (queryTokens.length === 0) return matches;
|
|
166
240
|
const globalPrefix = state.config.settings?.toolPrefix ?? "server";
|
|
167
241
|
for (const [serverName, metadata] of state.toolMetadata.entries()) {
|
|
168
242
|
if (server && serverName !== server) continue;
|
|
169
243
|
const definition = state.config.mcpServers[serverName];
|
|
170
244
|
if (isServerDisabled(definition)) continue;
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
? resolveSearchKeywords(definition, tool.originalName, serverName, globalPrefix)
|
|
175
|
-
: undefined;
|
|
176
|
-
const score = scoreToolMatch(tool, serverName, query, keywords);
|
|
177
|
-
if (score !== null) matches.push({ server: serverName, tool, score });
|
|
245
|
+
for (const prepared of getPreparedTools(state, serverName, metadata, definition, globalPrefix, includeKeywords)) {
|
|
246
|
+
const score = scorePreparedToolMatch(prepared, normalizedQuery, queryTokens);
|
|
247
|
+
if (score !== null) matches.push({ server: serverName, tool: prepared.tool, score });
|
|
178
248
|
}
|
|
179
249
|
}
|
|
180
250
|
return matches.sort((a, b) => b.score - a.score || a.tool.name.localeCompare(b.tool.name));
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { mkdirSync } from "node:fs";
|
|
2
|
+
import { isDeepStrictEqual } from "node:util";
|
|
2
3
|
import {
|
|
3
4
|
Client,
|
|
5
|
+
SdkError,
|
|
6
|
+
SdkErrorCode,
|
|
4
7
|
SdkHttpError,
|
|
5
8
|
SSEClientTransport,
|
|
6
9
|
StreamableHTTPClientTransport,
|
|
7
10
|
UnauthorizedError,
|
|
8
11
|
type GetPromptResult,
|
|
9
12
|
type ReadResourceResult,
|
|
13
|
+
type CacheableRequestOptions,
|
|
10
14
|
type RequestOptions,
|
|
11
15
|
type UrlElicitationRequiredError,
|
|
12
16
|
type VersionNegotiationOptions,
|
|
@@ -32,6 +36,7 @@ import { logger } from "./logger.ts";
|
|
|
32
36
|
import { McpOAuthProvider } from "./mcp-oauth-provider.ts";
|
|
33
37
|
import { extractOAuthConfig, supportsOAuth, type McpOAuthRuntime } from "./mcp-auth-flow.ts";
|
|
34
38
|
import { invalidateAuthEntryCache, type AuthStorageOptions } from "./mcp-auth.ts";
|
|
39
|
+
import { getBearerTokenForUrl } from "./mcp-bearer-store.ts";
|
|
35
40
|
import { registerSamplingHandler, type ServerSamplingConfig } from "./sampling-handler.ts";
|
|
36
41
|
import {
|
|
37
42
|
handleUrlElicitation,
|
|
@@ -123,6 +128,8 @@ export interface ServerConnection {
|
|
|
123
128
|
transport: Transport;
|
|
124
129
|
definition: ServerDefinition;
|
|
125
130
|
tools: McpTool[];
|
|
131
|
+
/** Monotonic guard against older refresh responses replacing newer notifications. */
|
|
132
|
+
toolsRevision?: number;
|
|
126
133
|
resources: McpResource[];
|
|
127
134
|
prompts: McpPrompt[];
|
|
128
135
|
/** True when prompts were advertised but prompts/list failed. */
|
|
@@ -139,6 +146,10 @@ export interface ServerConnection {
|
|
|
139
146
|
type UiStreamListener = (serverName: string, notification: ServerStreamResultPatchNotification["params"]) => void;
|
|
140
147
|
type MetadataListChangedListener = (serverName: string, reason: string) => void;
|
|
141
148
|
|
|
149
|
+
export type ToolRefreshResult = "updated" | "unchanged" | "superseded" | "refresh-timeout";
|
|
150
|
+
|
|
151
|
+
const KEEP_ALIVE_REFRESH_TIMEOUT_MS = 5_000;
|
|
152
|
+
|
|
142
153
|
export class McpServerManager {
|
|
143
154
|
private connections = new Map<string, ServerConnection>();
|
|
144
155
|
private connectPromises = new Map<string, Promise<ServerConnection>>();
|
|
@@ -146,6 +157,10 @@ export class McpServerManager {
|
|
|
146
157
|
private uiStreamListeners = new Map<string, UiStreamListener>();
|
|
147
158
|
private samplingConfig: ServerSamplingConfig | undefined;
|
|
148
159
|
private metadataListChangedListener: MetadataListChangedListener | undefined;
|
|
160
|
+
private pendingMetadataPublications = new Map<
|
|
161
|
+
string,
|
|
162
|
+
{ connection: ServerConnection; reason: string }
|
|
163
|
+
>();
|
|
149
164
|
private elicitationConfig: ServerElicitationConfig | undefined;
|
|
150
165
|
private authStorageOptions: AuthStorageOptions = {};
|
|
151
166
|
private oauthRuntime: McpOAuthRuntime | undefined;
|
|
@@ -170,6 +185,25 @@ export class McpServerManager {
|
|
|
170
185
|
this.metadataListChangedListener = listener;
|
|
171
186
|
}
|
|
172
187
|
|
|
188
|
+
publishMetadataChanged(
|
|
189
|
+
name: string,
|
|
190
|
+
expectedConnection: ServerConnection,
|
|
191
|
+
reason: string,
|
|
192
|
+
): boolean {
|
|
193
|
+
const current = this.connections.get(name);
|
|
194
|
+
if (current !== expectedConnection || current.status !== "connected") return false;
|
|
195
|
+
try {
|
|
196
|
+
this.metadataListChangedListener?.(name, reason);
|
|
197
|
+
this.pendingMetadataPublications.delete(name);
|
|
198
|
+
return true;
|
|
199
|
+
} catch (error) {
|
|
200
|
+
this.pendingMetadataPublications.set(name, { connection: expectedConnection, reason });
|
|
201
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
202
|
+
logger.debug(`MCP: metadata publication failed for ${name}; queued for retry: ${message}`);
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
173
207
|
setElicitationConfig(config: ServerElicitationConfig | undefined): void {
|
|
174
208
|
this.elicitationConfig = config;
|
|
175
209
|
}
|
|
@@ -303,6 +337,100 @@ export class McpServerManager {
|
|
|
303
337
|
return abortable(promise, ownedSignal);
|
|
304
338
|
}
|
|
305
339
|
|
|
340
|
+
/**
|
|
341
|
+
* Fetch the authoritative tool catalog for a connection that still appears
|
|
342
|
+
* connected. The SDK response cache is explicitly bypassed so this request
|
|
343
|
+
* also proves the remote Streamable HTTP session is usable. Results are
|
|
344
|
+
* identity-guarded: a late response from a replaced connection is ignored.
|
|
345
|
+
*/
|
|
346
|
+
async refreshTools(
|
|
347
|
+
name: string,
|
|
348
|
+
expectedConnection: ServerConnection,
|
|
349
|
+
signal?: AbortSignal,
|
|
350
|
+
): Promise<ToolRefreshResult> {
|
|
351
|
+
if (this.stopped) throw new Error("MCP server manager is closed");
|
|
352
|
+
const ownedSignal = combineAbortSignals(this.runtimeSignal, signal);
|
|
353
|
+
throwIfAborted(ownedSignal);
|
|
354
|
+
|
|
355
|
+
const current = this.connections.get(name);
|
|
356
|
+
if (current !== expectedConnection || current.status !== "connected") {
|
|
357
|
+
return "superseded";
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
const requestOptions = this.buildRequestOptions(expectedConnection.definition, signal);
|
|
361
|
+
const timeout = Math.min(requestOptions?.timeout ?? KEEP_ALIVE_REFRESH_TIMEOUT_MS, KEEP_ALIVE_REFRESH_TIMEOUT_MS);
|
|
362
|
+
const healthOptions = {
|
|
363
|
+
...requestOptions,
|
|
364
|
+
timeout,
|
|
365
|
+
};
|
|
366
|
+
if (!expectedConnection.client.getServerCapabilities?.()?.tools) {
|
|
367
|
+
await expectedConnection.client.ping(healthOptions);
|
|
368
|
+
throwIfAborted(ownedSignal);
|
|
369
|
+
if (this.connections.get(name) !== expectedConnection || expectedConnection.status !== "connected") {
|
|
370
|
+
return "superseded";
|
|
371
|
+
}
|
|
372
|
+
this.retryPendingMetadataPublication(name, expectedConnection);
|
|
373
|
+
return "unchanged";
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
const toolsRevision = expectedConnection.toolsRevision ?? 0;
|
|
377
|
+
const refreshSignal = combineAbortSignals(healthOptions.signal, AbortSignal.timeout(timeout));
|
|
378
|
+
let tools: McpTool[];
|
|
379
|
+
try {
|
|
380
|
+
tools = await this.fetchAllTools(expectedConnection.client, {
|
|
381
|
+
...healthOptions,
|
|
382
|
+
...(refreshSignal ? { signal: refreshSignal } : {}),
|
|
383
|
+
cacheMode: "refresh",
|
|
384
|
+
});
|
|
385
|
+
} catch (error) {
|
|
386
|
+
throwIfAborted(ownedSignal);
|
|
387
|
+
if (this.connections.get(name) !== expectedConnection || expectedConnection.status !== "connected") {
|
|
388
|
+
return "superseded";
|
|
389
|
+
}
|
|
390
|
+
if (error instanceof SdkError && error.code === SdkErrorCode.RequestTimeout) {
|
|
391
|
+
return "refresh-timeout";
|
|
392
|
+
}
|
|
393
|
+
throw error;
|
|
394
|
+
}
|
|
395
|
+
throwIfAborted(ownedSignal);
|
|
396
|
+
|
|
397
|
+
if (this.connections.get(name) !== expectedConnection || expectedConnection.status !== "connected") {
|
|
398
|
+
return "superseded";
|
|
399
|
+
}
|
|
400
|
+
if ((expectedConnection.toolsRevision ?? 0) !== toolsRevision) {
|
|
401
|
+
return "superseded";
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
if (isDeepStrictEqual(expectedConnection.tools, tools)) {
|
|
405
|
+
this.retryPendingMetadataPublication(name, expectedConnection);
|
|
406
|
+
return "unchanged";
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
const previousTools = expectedConnection.tools;
|
|
410
|
+
expectedConnection.tools = tools;
|
|
411
|
+
expectedConnection.toolsRevision = toolsRevision + 1;
|
|
412
|
+
try {
|
|
413
|
+
await this.metadataListChangedListener?.(name, "keep-alive-refresh");
|
|
414
|
+
this.pendingMetadataPublications.delete(name);
|
|
415
|
+
} catch (error) {
|
|
416
|
+
if (this.connections.get(name) === expectedConnection && expectedConnection.tools === tools) {
|
|
417
|
+
expectedConnection.tools = previousTools;
|
|
418
|
+
expectedConnection.toolsRevision = toolsRevision;
|
|
419
|
+
}
|
|
420
|
+
throw error;
|
|
421
|
+
}
|
|
422
|
+
return "updated";
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
private retryPendingMetadataPublication(name: string, connection: ServerConnection): void {
|
|
426
|
+
const pendingPublication = this.pendingMetadataPublications.get(name);
|
|
427
|
+
if (pendingPublication?.connection !== connection) return;
|
|
428
|
+
this.metadataListChangedListener?.(name, pendingPublication.reason);
|
|
429
|
+
if (this.pendingMetadataPublications.get(name) === pendingPublication) {
|
|
430
|
+
this.pendingMetadataPublications.delete(name);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
306
434
|
private async doReconnect(
|
|
307
435
|
name: string,
|
|
308
436
|
definition: ServerDefinition,
|
|
@@ -440,6 +568,7 @@ export class McpServerManager {
|
|
|
440
568
|
transport,
|
|
441
569
|
definition,
|
|
442
570
|
tools: [],
|
|
571
|
+
toolsRevision: 0,
|
|
443
572
|
resources: [],
|
|
444
573
|
prompts: [],
|
|
445
574
|
...(instructions !== undefined ? { instructions } : {}),
|
|
@@ -641,7 +770,9 @@ export class McpServerManager {
|
|
|
641
770
|
const connection = this.connections.get(serverName);
|
|
642
771
|
if (!connection || connection.client !== client || connection.status !== "connected") return;
|
|
643
772
|
connection.tools = tools;
|
|
773
|
+
connection.toolsRevision = (connection.toolsRevision ?? 0) + 1;
|
|
644
774
|
this.metadataListChangedListener?.(serverName, "tools-list-changed");
|
|
775
|
+
this.pendingMetadataPublications.delete(serverName);
|
|
645
776
|
}
|
|
646
777
|
|
|
647
778
|
private handlePromptsListChanged(
|
|
@@ -660,6 +791,7 @@ export class McpServerManager {
|
|
|
660
791
|
connection.prompts = prompts;
|
|
661
792
|
connection.promptDiscoveryFailed = false;
|
|
662
793
|
this.metadataListChangedListener?.(serverName, "prompts-list-changed");
|
|
794
|
+
this.pendingMetadataPublications.delete(serverName);
|
|
663
795
|
}
|
|
664
796
|
|
|
665
797
|
private handleResourcesListChanged(
|
|
@@ -677,6 +809,7 @@ export class McpServerManager {
|
|
|
677
809
|
if (!connection || connection.client !== client || connection.status !== "connected") return;
|
|
678
810
|
connection.resources = resources;
|
|
679
811
|
this.metadataListChangedListener?.(serverName, "resources-list-changed");
|
|
812
|
+
this.pendingMetadataPublications.delete(serverName);
|
|
680
813
|
}
|
|
681
814
|
|
|
682
815
|
async handleUrlElicitationRequired(
|
|
@@ -734,7 +867,10 @@ export class McpServerManager {
|
|
|
734
867
|
if (definition.auth === "bearer") {
|
|
735
868
|
const token = commandBearer
|
|
736
869
|
? resolveCommandSecret(commandBearer, `MCP server "${serverName}" HTTP bearer token`)
|
|
737
|
-
: resolveBearerToken(definition)
|
|
870
|
+
: resolveBearerToken(definition)
|
|
871
|
+
?? (definition.bearerToken === undefined && definition.bearerTokenEnv === undefined && definition.bearerTokenStore === true
|
|
872
|
+
? getBearerTokenForUrl(serverName, serverUrl)
|
|
873
|
+
: undefined);
|
|
738
874
|
if (token) headers["Authorization"] = `Bearer ${token}`;
|
|
739
875
|
}
|
|
740
876
|
|
|
@@ -851,7 +987,7 @@ export class McpServerManager {
|
|
|
851
987
|
}
|
|
852
988
|
}
|
|
853
989
|
|
|
854
|
-
private async fetchAllTools(client: Client, requestOptions?:
|
|
990
|
+
private async fetchAllTools(client: Client, requestOptions?: CacheableRequestOptions): Promise<McpTool[]> {
|
|
855
991
|
const allTools: McpTool[] = [];
|
|
856
992
|
let cursor: string | undefined;
|
|
857
993
|
|
|
@@ -979,6 +1115,7 @@ export class McpServerManager {
|
|
|
979
1115
|
async close(name: string): Promise<void> {
|
|
980
1116
|
this.closeGenerations.set(name, (this.closeGenerations.get(name) ?? 0) + 1);
|
|
981
1117
|
this.connectAttempts.get(name)?.abort(new Error(`MCP connection ${name} was closed`));
|
|
1118
|
+
this.pendingMetadataPublications.delete(name);
|
|
982
1119
|
|
|
983
1120
|
const connection = this.connections.get(name);
|
|
984
1121
|
if (!connection) {
|
|
@@ -1042,6 +1179,7 @@ export class McpServerManager {
|
|
|
1042
1179
|
.filter(error => this.containsCleanupFailure(error));
|
|
1043
1180
|
this.uiStreamListeners.clear();
|
|
1044
1181
|
this.acceptedUrlElicitations.clear();
|
|
1182
|
+
this.pendingMetadataPublications.clear();
|
|
1045
1183
|
this.samplingConfig = undefined;
|
|
1046
1184
|
this.elicitationConfig = undefined;
|
|
1047
1185
|
await this.traceWriter?.flush();
|
|
@@ -146,6 +146,13 @@ export async function withSessionRecovery<T>(
|
|
|
146
146
|
throw err;
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
+
try {
|
|
150
|
+
deps.manager.publishMetadataChanged(serverName, freshConnection, "session-reconnect");
|
|
151
|
+
} catch (publicationError) {
|
|
152
|
+
const message = publicationError instanceof Error ? publicationError.message : String(publicationError);
|
|
153
|
+
logger.debug(`MCP metadata publication after reconnect failed for "${serverName}": ${message}`);
|
|
154
|
+
}
|
|
155
|
+
throwIfAborted(deps.signal);
|
|
149
156
|
return fn(freshConnection);
|
|
150
157
|
}
|
|
151
158
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
2
|
import { abortable } from "./abort.ts";
|
|
3
3
|
import { combineAbortSignals } from "./runtime-owner.ts";
|
|
4
4
|
import type { McpExtensionState } from "./state.ts";
|
|
@@ -20,6 +20,18 @@ export type ToolCallApprovalResult =
|
|
|
20
20
|
| { ok: true }
|
|
21
21
|
| { ok: false; reason: "denied" | "approval_required_headless" };
|
|
22
22
|
|
|
23
|
+
function stableStringify(value: unknown): string {
|
|
24
|
+
if (value === null || value === undefined || typeof value !== "object") {
|
|
25
|
+
const serialized = JSON.stringify(value);
|
|
26
|
+
return serialized === undefined ? "undefined" : serialized;
|
|
27
|
+
}
|
|
28
|
+
if (Array.isArray(value)) {
|
|
29
|
+
return `[${value.map(item => stableStringify(item)).join(",")}]`;
|
|
30
|
+
}
|
|
31
|
+
const object = value as Record<string, unknown>;
|
|
32
|
+
return `{${Object.keys(object).sort().map(key => `${JSON.stringify(key)}:${stableStringify(object[key])}`).join(",")}}`;
|
|
33
|
+
}
|
|
34
|
+
|
|
23
35
|
export function isToolCallApprovalRequired(
|
|
24
36
|
config: McpConfig,
|
|
25
37
|
serverName: string,
|
|
@@ -136,7 +148,8 @@ export async function ensureToolCallApproved(
|
|
|
136
148
|
origin: McpToolApprovalOrigin = toolMeta.resourceUri ? "resource" : "proxy",
|
|
137
149
|
approvalMetadata?: ReadonlyMap<string, readonly ToolMetadata[]>,
|
|
138
150
|
): Promise<ToolCallApprovalResult> {
|
|
139
|
-
const
|
|
151
|
+
const argsHash = createHash("sha256").update(stableStringify(args ?? {})).digest("hex");
|
|
152
|
+
const cacheKey = `${serverName}\u0000${toolMeta.originalName}\u0000${argsHash}`;
|
|
140
153
|
const approvedToolCalls = state.approvedToolCalls ??= new Map<string, true>();
|
|
141
154
|
if (approvedToolCalls.has(cacheKey)) {
|
|
142
155
|
return { ok: true };
|