@code-yeongyu/senpi 2026.7.23 → 2026.7.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +131 -6
- package/README.md +14 -1
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +6 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.js +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +15 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +12 -2
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts +102 -4
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +1295 -320
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +7 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +8 -12
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +22 -4
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +114 -51
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/lifecycle.d.ts +69 -0
- package/dist/core/compaction/lifecycle.d.ts.map +1 -0
- package/dist/core/compaction/lifecycle.js +104 -0
- package/dist/core/compaction/lifecycle.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +12 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js +22 -17
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js +11 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.d.ts +2 -1
- package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js +42 -30
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-model.d.ts +9 -2
- package/dist/core/extensions/builtin/compaction/openai-remote-model.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-model.js +78 -28
- package/dist/core/extensions/builtin/compaction/openai-remote-model.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-schema.d.ts +3 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-schema.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-schema.js +19 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-schema.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote.d.ts +20 -6
- package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote.js +207 -22
- package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.d.ts +4 -2
- package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.js +25 -13
- package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
- package/dist/core/extensions/builtin/config-reload/index.d.ts +7 -0
- package/dist/core/extensions/builtin/config-reload/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/config-reload/index.js +49 -17
- package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/index.js +1 -1
- package/dist/core/extensions/builtin/hooks/index.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/lifecycle-adapter.d.ts +3 -1
- package/dist/core/extensions/builtin/hooks/lifecycle-adapter.d.ts.map +1 -1
- package/dist/core/extensions/builtin/hooks/lifecycle-adapter.js +2 -1
- package/dist/core/extensions/builtin/hooks/lifecycle-adapter.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.d.ts +2 -1
- package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.js +5 -3
- package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/commands-auth.d.ts +5 -0
- package/dist/core/extensions/builtin/mcp/auth/commands-auth.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/auth/commands-auth.js +8 -3
- package/dist/core/extensions/builtin/mcp/auth/commands-auth.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/catalog.d.ts +3 -1
- package/dist/core/extensions/builtin/mcp/catalog.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/catalog.js +2 -0
- package/dist/core/extensions/builtin/mcp/catalog.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/commands.d.ts +1 -1
- package/dist/core/extensions/builtin/mcp/commands.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/commands.js +34 -39
- package/dist/core/extensions/builtin/mcp/commands.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/connection-types.d.ts +2 -0
- package/dist/core/extensions/builtin/mcp/connection-types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/connection-types.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/connection.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/connection.js +3 -0
- package/dist/core/extensions/builtin/mcp/connection.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/elicitation.d.ts +7 -3
- package/dist/core/extensions/builtin/mcp/elicitation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/elicitation.js +5 -5
- package/dist/core/extensions/builtin/mcp/elicitation.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/expose/register.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/expose/register.js +1 -0
- package/dist/core/extensions/builtin/mcp/expose/register.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/expose/session.d.ts +2 -0
- package/dist/core/extensions/builtin/mcp/expose/session.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/expose/session.js +3 -0
- package/dist/core/extensions/builtin/mcp/expose/session.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/guard/output-guard.d.ts +9 -1
- package/dist/core/extensions/builtin/mcp/guard/output-guard.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/guard/output-guard.js +18 -6
- package/dist/core/extensions/builtin/mcp/guard/output-guard.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/index.d.ts +4 -2
- package/dist/core/extensions/builtin/mcp/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/index.js +150 -127
- package/dist/core/extensions/builtin/mcp/index.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/instructions.d.ts +1 -1
- package/dist/core/extensions/builtin/mcp/instructions.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/instructions.js +6 -6
- package/dist/core/extensions/builtin/mcp/instructions.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/prompts.d.ts +2 -0
- package/dist/core/extensions/builtin/mcp/prompts.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/prompts.js +9 -3
- package/dist/core/extensions/builtin/mcp/prompts.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/resources.d.ts +2 -0
- package/dist/core/extensions/builtin/mcp/resources.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/resources.js +1 -0
- package/dist/core/extensions/builtin/mcp/resources.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/service-register.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/service-register.js +1 -0
- package/dist/core/extensions/builtin/mcp/service-register.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/service-types.d.ts +2 -0
- package/dist/core/extensions/builtin/mcp/service-types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/service-types.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/service.d.ts +12 -1
- package/dist/core/extensions/builtin/mcp/service.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/service.js +44 -2
- package/dist/core/extensions/builtin/mcp/service.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/transport.d.ts +2 -0
- package/dist/core/extensions/builtin/mcp/transport.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/transport.js +7 -7
- package/dist/core/extensions/builtin/mcp/transport.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js +86 -7
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.d.ts +3 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js +102 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/kimi-k3.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js +96 -6
- package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.js +9 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.js +1 -0
- package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.js +1 -0
- package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/bash.d.ts +15 -3
- package/dist/core/extensions/builtin/terminal/tools/bash.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/bash.js +30 -6
- package/dist/core/extensions/builtin/terminal/tools/bash.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/context.d.ts +5 -0
- package/dist/core/extensions/builtin/terminal/tools/context.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/context.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +14 -7
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +64 -37
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +30 -3
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +16 -0
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/messages.d.ts +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +10 -8
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +3 -2
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +9 -0
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +4 -2
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +34 -18
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +21 -7
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js +12 -8
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/sdk.d.ts +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +8 -3
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +22 -3
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +155 -58
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts +2 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +34 -5
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +3 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/usage-totals.d.ts +19 -0
- package/dist/core/usage-totals.d.ts.map +1 -0
- package/dist/core/usage-totals.js +52 -0
- package/dist/core/usage-totals.js.map +1 -0
- package/dist/extensions/llama/client.d.ts.map +1 -1
- package/dist/extensions/llama/client.js +3 -1
- package/dist/extensions/llama/client.js.map +1 -1
- package/dist/extensions/llama/index.js +3 -3
- package/dist/extensions/llama/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +1 -2
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +37 -5
- package/dist/main.js.map +1 -1
- package/dist/modes/app-server/daemon/occupancy.d.ts +22 -0
- package/dist/modes/app-server/daemon/occupancy.d.ts.map +1 -0
- package/dist/modes/app-server/daemon/occupancy.js +67 -0
- package/dist/modes/app-server/daemon/occupancy.js.map +1 -0
- package/dist/modes/app-server/daemon/probe.d.ts +3 -3
- package/dist/modes/app-server/daemon/probe.d.ts.map +1 -1
- package/dist/modes/app-server/daemon/probe.js +33 -10
- package/dist/modes/app-server/daemon/probe.js.map +1 -1
- package/dist/modes/app-server/daemon.d.ts.map +1 -1
- package/dist/modes/app-server/daemon.js +58 -18
- package/dist/modes/app-server/daemon.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +8 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +1 -2
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +16 -46
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts +4 -0
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-indicator.js +13 -0
- package/dist/modes/interactive/components/status-indicator.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts +12 -0
- package/dist/modes/interactive/external-editor.d.ts.map +1 -0
- package/dist/modes/interactive/external-editor.js +37 -0
- package/dist/modes/interactive/external-editor.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +3 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +96 -78
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/rpc/connection-handler.d.ts +6 -0
- package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
- package/dist/modes/rpc/connection-handler.js +34 -9
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/dist/modes/rpc/multi-session-host.d.ts +15 -0
- package/dist/modes/rpc/multi-session-host.d.ts.map +1 -0
- package/dist/modes/rpc/multi-session-host.js +60 -0
- package/dist/modes/rpc/multi-session-host.js.map +1 -0
- package/dist/modes/rpc/neo-runtime-options.d.ts.map +1 -1
- package/dist/modes/rpc/neo-runtime-options.js +1 -0
- package/dist/modes/rpc/neo-runtime-options.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +4 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +7 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +49 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +49 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +85 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js +8 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/rpc/session-binding.d.ts +13 -0
- package/dist/modes/rpc/session-binding.d.ts.map +1 -0
- package/dist/modes/rpc/session-binding.js +33 -0
- package/dist/modes/rpc/session-binding.js.map +1 -0
- package/dist/modes/rpc/session-command-router.d.ts +19 -0
- package/dist/modes/rpc/session-command-router.d.ts.map +1 -0
- package/dist/modes/rpc/session-command-router.js +159 -0
- package/dist/modes/rpc/session-command-router.js.map +1 -0
- package/dist/modes/rpc/session-event-writer.d.ts +34 -0
- package/dist/modes/rpc/session-event-writer.d.ts.map +1 -0
- package/dist/modes/rpc/session-event-writer.js +92 -0
- package/dist/modes/rpc/session-event-writer.js.map +1 -0
- package/dist/modes/rpc/session-extension-ui-requests.d.ts +15 -0
- package/dist/modes/rpc/session-extension-ui-requests.d.ts.map +1 -0
- package/dist/modes/rpc/session-extension-ui-requests.js +27 -0
- package/dist/modes/rpc/session-extension-ui-requests.js.map +1 -0
- package/dist/modes/rpc/session-registry.d.ts +58 -0
- package/dist/modes/rpc/session-registry.d.ts.map +1 -0
- package/dist/modes/rpc/session-registry.js +162 -0
- package/dist/modes/rpc/session-registry.js.map +1 -0
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +19 -8
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +3 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/app-server-daemon.md +3 -2
- package/docs/compaction.md +9 -4
- package/docs/custom-provider.md +5 -2
- package/docs/environment-variables.md +88 -0
- package/docs/extensions.md +25 -7
- package/docs/index.md +1 -0
- package/docs/json.md +5 -1
- package/docs/models.md +6 -2
- package/docs/providers.md +12 -1
- package/docs/rpc.md +154 -8
- package/docs/sdk.md +3 -0
- package/docs/session-format.md +17 -3
- package/docs/settings.md +2 -2
- package/docs/usage.md +1 -14
- package/examples/extensions/custom-compaction.ts +4 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/handoff.ts +9 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/summarize.ts +3 -0
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +24 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +3 -3
- package/node_modules/@earendil-works/pi-agent-core/README.md +31 -12
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts +4 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +8 -7
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +10 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +61 -27
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts +11 -12
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +47 -22
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts +5 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js +6 -8
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts +17 -5
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +82 -27
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.d.ts +12 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.js +22 -17
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts +3 -9
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +118 -11
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.d.ts +11 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js +56 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.d.ts +11 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js +56 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.js +2 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts +6 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +30 -14
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.d.ts +27 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.js +132 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.d.ts +89 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.js +386 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.d.ts +19 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js +95 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.d.ts +4 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.js +46 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.d.ts +3 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.js +106 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.d.ts +6 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.js +5 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.d.ts +4 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.js +26 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.d.ts +34 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js +110 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.d.ts +6 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.js +2 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.d.ts +11 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js +31 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +80 -18
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts +12 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js +90 -35
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js +10 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts +4 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/index.js +5 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.d.ts +10 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.js +17 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +8 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +4 -3
- package/node_modules/@earendil-works/pi-ai/README.md +44 -4
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +45 -27
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js +21 -8
- package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js +17 -10
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.d.ts +17 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js +104 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js +7 -11
- package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.d.ts +4 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js +17 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js +7 -11
- package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js +13 -9
- package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +73 -47
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts +7 -9
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +142 -33
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.d.ts +7 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +180 -80
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +37 -15
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.js +8 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js +2 -4
- package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api-registry.d.ts +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/api-registry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api-registry.js +52 -6
- package/node_modules/@earendil-works/pi-ai/dist/api-registry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/helpers.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/helpers.js +3 -2
- package/node_modules/@earendil-works/pi-ai/dist/auth/helpers.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.d.ts +10 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.js +249 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.d.ts +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js +10 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.js +2 -18
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openrouter.d.ts +13 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openrouter.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openrouter.js +222 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openrouter.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/compat.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/compat.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/compat.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/context-provenance.d.ts +16 -0
- package/node_modules/@earendil-works/pi-ai/dist/context-provenance.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/context-provenance.js +32 -0
- package/node_modules/@earendil-works/pi-ai/dist/context-provenance.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +11 -3
- package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.d.ts +19 -2
- package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.js +68 -3
- package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +5 -0
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.js +5 -0
- package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/model-catalog.d.ts +17 -0
- package/node_modules/@earendil-works/pi-ai/dist/model-catalog.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/model-catalog.js +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/model-catalog.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/model.d.ts +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/model.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/model.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models-store.d.ts +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/models-store.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models-store.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.d.ts +0 -6
- package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +76 -4448
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.js +0 -53
- package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/node/provider-scope.d.ts +12 -0
- package/node_modules/@earendil-works/pi-ai/dist/node/provider-scope.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/node/provider-scope.js +34 -0
- package/node_modules/@earendil-works/pi-ai/dist/node/provider-scope.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/alibaba-token-plan.models.d.ts +3 -63
- package/node_modules/@earendil-works/pi-ai/dist/providers/alibaba-token-plan.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/alibaba-token-plan.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/alibaba-token-plan.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.d.ts +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +10 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +3 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.d.ts +3 -439
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +30 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.d.ts +3 -59
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.d.ts +3 -187
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.d.ts +3 -171
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.d.ts +3 -55
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/alibaba-token-plan.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/ant-ling.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cerebras.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/deepseek.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/google-vertex.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/kimi-coding.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/mistral.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-ams.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-sgp.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.d.ts +3 -11
- package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.d.ts +3 -67
- package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.d.ts +3 -115
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.d.ts +3 -51
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.d.ts +3 -75
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.d.ts +3 -31
- package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.d.ts +3 -203
- package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.js +10 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.d.ts +3 -19
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.d.ts +3 -123
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.d.ts +3 -43
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.d.ts +3 -43
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.d.ts +3 -79
- package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts +3 -31
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.d.ts +3 -187
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.d.ts +3 -67
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.d.ts +3 -227
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter-images.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter-images.js +10 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter-images.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.js +10 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts +3 -1095
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.d.ts +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.js +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.d.ts +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.js +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.d.ts +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.js +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.d.ts +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.js +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/radius-config.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/radius-config.js +18 -14
- package/node_modules/@earendil-works/pi-ai/dist/providers/radius-config.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.d.ts +3 -67
- package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.d.ts +3 -775
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.d.ts +3 -15
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.d.ts +3 -27
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.d.ts +3 -27
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.d.ts +3 -27
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +43 -3
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/openai-codex-auth.d.ts +11 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/openai-codex-auth.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/openai-codex-auth.js +30 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/openai-codex-auth.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.d.ts +16 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js +94 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts +41 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +82 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/text.d.ts +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/text.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/text.js +10 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/text.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/uuid.d.ts +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/uuid.d.ts.map +1 -0
- package/node_modules/@earendil-works/{pi-agent-core/dist/harness/session → pi-ai/dist/utils}/uuid.js +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/utils/uuid.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/package.json +11 -4
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +31 -22
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.js +2 -0
- package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -6
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.d.ts +0 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.js.map +0 -1
|
@@ -1,143 +1,166 @@
|
|
|
1
|
+
import { bindToProviderScope } from "@earendil-works/pi-ai/node/provider-scope";
|
|
1
2
|
import { registerMcpCommands } from "./commands.js";
|
|
2
|
-
import { setMcpElicitationUiProvider } from "./elicitation.js";
|
|
3
3
|
import { AnthropicNativeToolSearchAdapter } from "./expose/native-search.js";
|
|
4
4
|
import { TOOL_SEARCH_TOOL_NAME } from "./expose/tool-search.js";
|
|
5
5
|
import { injectMcpInstructions, refreshMcpInstructionsForSession } from "./instructions.js";
|
|
6
6
|
import { createMcpLogger } from "./log.js";
|
|
7
7
|
import { registerMcpPromptCommands } from "./prompts.js";
|
|
8
8
|
import { expandMcpResourceMentions } from "./resources.js";
|
|
9
|
-
import { getMcpService } from "./service.js";
|
|
9
|
+
import { getMcpService, McpService } from "./service.js";
|
|
10
10
|
import { parseSkillMcpDeclarations, skillActivationTargets, } from "./skills.js";
|
|
11
11
|
import { reportMcpAsyncError, wrapAsync } from "./wrap.js";
|
|
12
|
-
export
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
export function createMcpExtension(service, sessionOwned = true) {
|
|
13
|
+
return (pi) => {
|
|
14
|
+
let attachPromise;
|
|
15
|
+
const sink = {
|
|
16
|
+
logger: {
|
|
17
|
+
error(message, data) {
|
|
18
|
+
createMcpLogger("service").error(message, data);
|
|
19
|
+
},
|
|
18
20
|
},
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
21
|
+
};
|
|
22
|
+
registerMcpCommands(pi, service);
|
|
23
|
+
// Native provider tool-search adapter (todo 33 — Anthropic, spike = GO).
|
|
24
|
+
// Runs on every request but is a no-op unless settings.nativeToolSearch is
|
|
25
|
+
// auto|true and the model is anthropic-messages; a 400 disables it for the
|
|
26
|
+
// session and falls back to the always-registered local tool_search.
|
|
27
|
+
const nativeAdapter = new AnthropicNativeToolSearchAdapter({
|
|
28
|
+
enabled: () => {
|
|
29
|
+
const setting = service.getNativeToolSearchSetting();
|
|
30
|
+
return setting === true || setting === "auto";
|
|
31
|
+
},
|
|
32
|
+
isDeferrable: (name) => name.startsWith("mcp_") && name !== TOOL_SEARCH_TOOL_NAME,
|
|
33
|
+
onFallback: (reason) => createMcpLogger("service").warn(reason),
|
|
34
|
+
searchToolName: TOOL_SEARCH_TOOL_NAME,
|
|
35
|
+
});
|
|
36
|
+
pi.on("before_provider_request", (event, ctx) => nativeAdapter.applyBeforeRequest(ctx.model?.api, event.payload));
|
|
37
|
+
pi.on("after_provider_response", (event) => nativeAdapter.noteResponseStatus(event.status));
|
|
38
|
+
// Resumed/compacted sessions carry tool_search activation markers in their
|
|
39
|
+
// history but re-enter search mode with only directTools active. The context
|
|
40
|
+
// event (fired before each LLM call, with the full message history) replays
|
|
41
|
+
// the markers as a safety net; the primary replay happens at attach time so
|
|
42
|
+
// the FIRST turn's payload already carries previously promoted tools. Scans
|
|
43
|
+
// once per registration (see McpService.maybeRehydrateFromHistory).
|
|
44
|
+
pi.on("context", (event) => {
|
|
45
|
+
service.maybeRehydrateFromHistory(event.messages);
|
|
46
|
+
});
|
|
47
|
+
// skills-carry-MCP (todo 37): skills declaring MCP servers (mcp.json
|
|
48
|
+
// sidecar or SKILL.md frontmatter) register lazily with tools hidden;
|
|
49
|
+
// loading a skill — /skill:<name> input or the model reading its SKILL.md —
|
|
50
|
+
// reveals that skill's includeTools matches for the rest of the session.
|
|
51
|
+
let skillDecls = { servers: new Map(), warnings: [] };
|
|
52
|
+
let skillsByName = new Map();
|
|
53
|
+
const loadedSkills = new Set();
|
|
54
|
+
const revealSkill = (skillName) => {
|
|
55
|
+
if (loadedSkills.has(skillName) || !skillsByName.has(skillName))
|
|
56
|
+
return;
|
|
57
|
+
loadedSkills.add(skillName);
|
|
58
|
+
const registered = service.getTierBSearchable();
|
|
59
|
+
const targets = skillActivationTargets(skillDecls, skillName, registered);
|
|
60
|
+
if (targets.length > 0)
|
|
61
|
+
service.activateSkillMcpTools(targets);
|
|
62
|
+
};
|
|
63
|
+
pi.on("input", async (event, ctx) => {
|
|
64
|
+
const match = /^\s*\/skill:([A-Za-z0-9._-]+)/.exec(event.text);
|
|
65
|
+
if (match)
|
|
66
|
+
revealSkill(match[1]);
|
|
67
|
+
// @mcp:<server>/<uri> mention expansion (todo 39): recognized mentions are
|
|
68
|
+
// inlined via the sanctioned input transform; failures pass through
|
|
69
|
+
// untouched with a one-line notice so submission is never blocked.
|
|
70
|
+
if (event.text.includes("@mcp:")) {
|
|
71
|
+
const expansion = await expandMcpResourceMentions(event.text, () => service.getMcpResourceServers());
|
|
72
|
+
for (const notice of expansion.notices) {
|
|
73
|
+
createMcpLogger("resources").warn(notice);
|
|
74
|
+
void ctx.ui?.notify?.(notice, "warning");
|
|
75
|
+
}
|
|
76
|
+
if (expansion.changed)
|
|
77
|
+
return { action: "transform", text: expansion.text };
|
|
75
78
|
}
|
|
76
|
-
if (expansion.changed)
|
|
77
|
-
return { action: "transform", text: expansion.text };
|
|
78
|
-
}
|
|
79
|
-
return undefined;
|
|
80
|
-
});
|
|
81
|
-
pi.on("tool_call", (event) => {
|
|
82
|
-
if (event.toolName !== "read")
|
|
83
|
-
return undefined;
|
|
84
|
-
const path = event.input.path;
|
|
85
|
-
if (path === undefined)
|
|
86
79
|
return undefined;
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
// completion, so before_agent_start would start a SECOND concurrent attach —
|
|
98
|
-
// which found the connection entries already created (still "connecting"),
|
|
99
|
-
// collected an empty catalog, and registered no MCP tools for turn 1; the
|
|
100
|
-
// first attach then landed the real registration turns later. Memoizing the
|
|
101
|
-
// in-flight promise makes before_agent_start await the ORIGINAL attach, so
|
|
102
|
-
// the first turn's payload deterministically carries the MCP tool set.
|
|
103
|
-
// session_start always starts a fresh attach (reloads must re-sync config).
|
|
104
|
-
const attach = (event, ctx) => {
|
|
105
|
-
attachPromise = (async () => {
|
|
106
|
-
const service = getMcpService();
|
|
107
|
-
await service.attachSession(event, ctx, pi);
|
|
108
|
-
refreshMcpInstructionsForSession(service);
|
|
109
|
-
registerMcpPromptCommands(pi, service.getMcpPromptServers());
|
|
110
|
-
})();
|
|
111
|
-
return attachPromise;
|
|
112
|
-
};
|
|
113
|
-
pi.on("session_start", wrapAsync("mcp.session_start", (event, ctx) => attach(event, ctx), sink));
|
|
114
|
-
pi.on("before_agent_start", async (event, ctx) => {
|
|
115
|
-
try {
|
|
116
|
-
// Elicitation (todo 41): point mid-call forms at the live session UI.
|
|
117
|
-
setMcpElicitationUiProvider(() => ctx.ui);
|
|
118
|
-
await (attachPromise ?? attach({ type: "session_start", reason: "startup" }, ctx));
|
|
119
|
-
const skills = (event.systemPromptOptions.skills ?? []);
|
|
120
|
-
if (skills.length > 0) {
|
|
121
|
-
skillsByName = new Map(skills.map((skill) => [skill.name, skill]));
|
|
122
|
-
skillDecls = parseSkillMcpDeclarations(skills);
|
|
123
|
-
const declared = new Map([...skillDecls.servers].map(([name, decl]) => [name, { raw: decl.raw, sourcePath: decl.sourcePath }]));
|
|
124
|
-
const warnings = [
|
|
125
|
-
...skillDecls.warnings,
|
|
126
|
-
...(declared.size > 0 ? await getMcpService().attachSkillMcpServers(declared) : []),
|
|
127
|
-
];
|
|
128
|
-
for (const warning of warnings)
|
|
129
|
-
createMcpLogger("skills").warn(warning);
|
|
80
|
+
});
|
|
81
|
+
pi.on("tool_call", (event) => {
|
|
82
|
+
if (event.toolName !== "read")
|
|
83
|
+
return undefined;
|
|
84
|
+
const path = event.input.path;
|
|
85
|
+
if (path === undefined)
|
|
86
|
+
return undefined;
|
|
87
|
+
for (const [name, skill] of skillsByName) {
|
|
88
|
+
if (path === skill.filePath || path.endsWith(skill.filePath))
|
|
89
|
+
revealSkill(name);
|
|
130
90
|
}
|
|
131
|
-
const systemPrompt = injectMcpInstructions(event.systemPrompt);
|
|
132
|
-
return systemPrompt === undefined ? undefined : { systemPrompt };
|
|
133
|
-
}
|
|
134
|
-
catch (error) {
|
|
135
|
-
if (!(error instanceof Error))
|
|
136
|
-
throw error;
|
|
137
|
-
await reportMcpAsyncError("mcp.before_agent_start", error, sink);
|
|
138
91
|
return undefined;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
|
|
92
|
+
});
|
|
93
|
+
// Attach is SINGLE-FLIGHT. session_start handlers are dispatched
|
|
94
|
+
// fire-and-forget, so a slow attach (a cold MCP server's boot + catalog
|
|
95
|
+
// collection is awaited inside attachSession) can still be in flight when
|
|
96
|
+
// before_agent_start fires. The old `attached` boolean was only set on
|
|
97
|
+
// completion, so before_agent_start would start a SECOND concurrent attach —
|
|
98
|
+
// which found the connection entries already created (still "connecting"),
|
|
99
|
+
// collected an empty catalog, and registered no MCP tools for turn 1; the
|
|
100
|
+
// first attach then landed the real registration turns later. Memoizing the
|
|
101
|
+
// in-flight promise makes before_agent_start await the ORIGINAL attach, so
|
|
102
|
+
// the first turn's payload deterministically carries the MCP tool set.
|
|
103
|
+
// session_start always starts a fresh attach (reloads must re-sync config).
|
|
104
|
+
const attach = (event, ctx) => {
|
|
105
|
+
attachPromise = (async () => {
|
|
106
|
+
await service.attachSession(event, ctx, pi);
|
|
107
|
+
refreshMcpInstructionsForSession(service);
|
|
108
|
+
if (sessionOwned)
|
|
109
|
+
registerMcpPromptCommands(service, pi, service.getMcpPromptServers());
|
|
110
|
+
else
|
|
111
|
+
registerMcpPromptCommands(pi, service.getMcpPromptServers());
|
|
112
|
+
})();
|
|
113
|
+
return attachPromise;
|
|
114
|
+
};
|
|
115
|
+
pi.on("session_start", wrapAsync("mcp.session_start", (event, ctx) => attach(event, ctx), sink));
|
|
116
|
+
pi.on("before_agent_start", async (event, ctx) => {
|
|
117
|
+
try {
|
|
118
|
+
// Elicitation (todo 41): point mid-call forms at this session's UI.
|
|
119
|
+
service.setMcpElicitationUiProvider(() => ctx.ui);
|
|
120
|
+
await (attachPromise ?? attach({ type: "session_start", reason: "startup" }, ctx));
|
|
121
|
+
const skills = (event.systemPromptOptions.skills ?? []);
|
|
122
|
+
if (skills.length > 0) {
|
|
123
|
+
skillsByName = new Map(skills.map((skill) => [skill.name, skill]));
|
|
124
|
+
skillDecls = parseSkillMcpDeclarations(skills);
|
|
125
|
+
const declared = new Map([...skillDecls.servers].map(([name, decl]) => [name, { raw: decl.raw, sourcePath: decl.sourcePath }]));
|
|
126
|
+
const warnings = [
|
|
127
|
+
...skillDecls.warnings,
|
|
128
|
+
...(declared.size > 0 ? await service.attachSkillMcpServers(declared) : []),
|
|
129
|
+
];
|
|
130
|
+
for (const warning of warnings)
|
|
131
|
+
createMcpLogger("skills").warn(warning);
|
|
132
|
+
}
|
|
133
|
+
const systemPrompt = injectMcpInstructions(service, event.systemPrompt);
|
|
134
|
+
return systemPrompt === undefined ? undefined : { systemPrompt };
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
if (!(error instanceof Error))
|
|
138
|
+
throw error;
|
|
139
|
+
await reportMcpAsyncError("mcp.before_agent_start", error, sink);
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
pi.on("session_shutdown", wrapAsync("mcp.session_shutdown", async (event) => {
|
|
144
|
+
await service.handleSessionShutdown(event);
|
|
145
|
+
// A classic extension instance can be reused by the test/legacy host
|
|
146
|
+
// after reload. Its singleton is intentionally refreshed for that next
|
|
147
|
+
// session; scoped factories keep their closed instance.
|
|
148
|
+
if (!sessionOwned && event.reason === "reload" && service.isDisposed())
|
|
149
|
+
service = getMcpService();
|
|
150
|
+
}, sink));
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
function hasProviderScope() {
|
|
154
|
+
try {
|
|
155
|
+
bindToProviderScope(() => undefined);
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
export default function mcpExtension(pi) {
|
|
163
|
+
const sessionOwned = hasProviderScope();
|
|
164
|
+
return createMcpExtension(sessionOwned ? new McpService() : getMcpService(), sessionOwned)(pi);
|
|
142
165
|
}
|
|
143
166
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionAPI, ExtensionContext, SessionStartEvent } from \"../../types.ts\";\nimport { registerMcpCommands } from \"./commands.ts\";\nimport { setMcpElicitationUiProvider } from \"./elicitation.ts\";\nimport { AnthropicNativeToolSearchAdapter } from \"./expose/native-search.ts\";\nimport { TOOL_SEARCH_TOOL_NAME } from \"./expose/tool-search.ts\";\nimport { injectMcpInstructions, refreshMcpInstructionsForSession } from \"./instructions.ts\";\nimport { createMcpLogger } from \"./log.ts\";\nimport { registerMcpPromptCommands } from \"./prompts.ts\";\nimport { expandMcpResourceMentions } from \"./resources.ts\";\nimport { getMcpService } from \"./service.ts\";\nimport {\n\tparseSkillMcpDeclarations,\n\ttype SkillLike,\n\ttype SkillMcpDeclarations,\n\tskillActivationTargets,\n} from \"./skills.ts\";\nimport { reportMcpAsyncError, wrapAsync } from \"./wrap.ts\";\n\nexport default function mcpExtension(pi: ExtensionAPI): void {\n\tlet attachPromise: Promise<void> | undefined;\n\tconst sink = {\n\t\tlogger: {\n\t\t\terror(message: string, data?: unknown): void {\n\t\t\t\tcreateMcpLogger(\"service\").error(message, data);\n\t\t\t},\n\t\t},\n\t};\n\n\tregisterMcpCommands(pi);\n\n\t// Native provider tool-search adapter (todo 33 — Anthropic, spike = GO).\n\t// Runs on every request but is a no-op unless settings.nativeToolSearch is\n\t// auto|true and the model is anthropic-messages; a 400 disables it for the\n\t// session and falls back to the always-registered local tool_search.\n\tconst nativeAdapter = new AnthropicNativeToolSearchAdapter({\n\t\tenabled: () => {\n\t\t\tconst setting = getMcpService().getNativeToolSearchSetting();\n\t\t\treturn setting === true || setting === \"auto\";\n\t\t},\n\t\tisDeferrable: (name) => name.startsWith(\"mcp_\") && name !== TOOL_SEARCH_TOOL_NAME,\n\t\tonFallback: (reason) => createMcpLogger(\"service\").warn(reason),\n\t\tsearchToolName: TOOL_SEARCH_TOOL_NAME,\n\t});\n\tpi.on(\"before_provider_request\", (event, ctx) => nativeAdapter.applyBeforeRequest(ctx.model?.api, event.payload));\n\tpi.on(\"after_provider_response\", (event) => nativeAdapter.noteResponseStatus(event.status));\n\t// Resumed/compacted sessions carry tool_search activation markers in their\n\t// history but re-enter search mode with only directTools active. The context\n\t// event (fired before each LLM call, with the full message history) replays\n\t// the markers as a safety net; the primary replay happens at attach time so\n\t// the FIRST turn's payload already carries previously promoted tools. Scans\n\t// once per registration (see McpService.maybeRehydrateFromHistory).\n\tpi.on(\"context\", (event) => {\n\t\tgetMcpService().maybeRehydrateFromHistory(event.messages);\n\t});\n\n\t// skills-carry-MCP (todo 37): skills declaring MCP servers (mcp.json\n\t// sidecar or SKILL.md frontmatter) register lazily with tools hidden;\n\t// loading a skill — /skill:<name> input or the model reading its SKILL.md —\n\t// reveals that skill's includeTools matches for the rest of the session.\n\tlet skillDecls: SkillMcpDeclarations = { servers: new Map(), warnings: [] };\n\tlet skillsByName = new Map<string, SkillLike>();\n\tconst loadedSkills = new Set<string>();\n\tconst revealSkill = (skillName: string): void => {\n\t\tif (loadedSkills.has(skillName) || !skillsByName.has(skillName)) return;\n\t\tloadedSkills.add(skillName);\n\t\tconst service = getMcpService();\n\t\tconst registered = service.getTierBSearchable();\n\t\tconst targets = skillActivationTargets(skillDecls, skillName, registered);\n\t\tif (targets.length > 0) service.activateSkillMcpTools(targets);\n\t};\n\tpi.on(\"input\", async (event, ctx) => {\n\t\tconst match = /^\\s*\\/skill:([A-Za-z0-9._-]+)/.exec(event.text);\n\t\tif (match) revealSkill(match[1]);\n\t\t// @mcp:<server>/<uri> mention expansion (todo 39): recognized mentions are\n\t\t// inlined via the sanctioned input transform; failures pass through\n\t\t// untouched with a one-line notice so submission is never blocked.\n\t\tif (event.text.includes(\"@mcp:\")) {\n\t\t\tconst expansion = await expandMcpResourceMentions(event.text, () => getMcpService().getMcpResourceServers());\n\t\t\tfor (const notice of expansion.notices) {\n\t\t\t\tcreateMcpLogger(\"resources\").warn(notice);\n\t\t\t\tvoid ctx.ui?.notify?.(notice, \"warning\");\n\t\t\t}\n\t\t\tif (expansion.changed) return { action: \"transform\", text: expansion.text };\n\t\t}\n\t\treturn undefined;\n\t});\n\tpi.on(\"tool_call\", (event) => {\n\t\tif (event.toolName !== \"read\") return undefined;\n\t\tconst path = (event.input as { path?: string }).path;\n\t\tif (path === undefined) return undefined;\n\t\tfor (const [name, skill] of skillsByName) {\n\t\t\tif (path === skill.filePath || path.endsWith(skill.filePath)) revealSkill(name);\n\t\t}\n\t\treturn undefined;\n\t});\n\n\t// Attach is SINGLE-FLIGHT. session_start handlers are dispatched\n\t// fire-and-forget, so a slow attach (a cold MCP server's boot + catalog\n\t// collection is awaited inside attachSession) can still be in flight when\n\t// before_agent_start fires. The old `attached` boolean was only set on\n\t// completion, so before_agent_start would start a SECOND concurrent attach —\n\t// which found the connection entries already created (still \"connecting\"),\n\t// collected an empty catalog, and registered no MCP tools for turn 1; the\n\t// first attach then landed the real registration turns later. Memoizing the\n\t// in-flight promise makes before_agent_start await the ORIGINAL attach, so\n\t// the first turn's payload deterministically carries the MCP tool set.\n\t// session_start always starts a fresh attach (reloads must re-sync config).\n\tconst attach = (event: SessionStartEvent, ctx: ExtensionContext): Promise<void> => {\n\t\tattachPromise = (async () => {\n\t\t\tconst service = getMcpService();\n\t\t\tawait service.attachSession(event, ctx, pi);\n\t\t\trefreshMcpInstructionsForSession(service);\n\t\t\tregisterMcpPromptCommands(pi, service.getMcpPromptServers());\n\t\t})();\n\t\treturn attachPromise;\n\t};\n\tpi.on(\n\t\t\"session_start\",\n\t\twrapAsync(\"mcp.session_start\", (event, ctx) => attach(event, ctx), sink),\n\t);\n\tpi.on(\"before_agent_start\", async (event, ctx) => {\n\t\ttry {\n\t\t\t// Elicitation (todo 41): point mid-call forms at the live session UI.\n\t\t\tsetMcpElicitationUiProvider(() => ctx.ui);\n\t\t\tawait (attachPromise ?? attach({ type: \"session_start\", reason: \"startup\" }, ctx));\n\t\t\tconst skills = (event.systemPromptOptions.skills ?? []) as readonly SkillLike[];\n\t\t\tif (skills.length > 0) {\n\t\t\t\tskillsByName = new Map(skills.map((skill) => [skill.name, skill]));\n\t\t\t\tskillDecls = parseSkillMcpDeclarations(skills);\n\t\t\t\tconst declared = new Map(\n\t\t\t\t\t[...skillDecls.servers].map(([name, decl]) => [name, { raw: decl.raw, sourcePath: decl.sourcePath }]),\n\t\t\t\t);\n\t\t\t\tconst warnings = [\n\t\t\t\t\t...skillDecls.warnings,\n\t\t\t\t\t...(declared.size > 0 ? await getMcpService().attachSkillMcpServers(declared) : []),\n\t\t\t\t];\n\t\t\t\tfor (const warning of warnings) createMcpLogger(\"skills\").warn(warning);\n\t\t\t}\n\t\t\tconst systemPrompt = injectMcpInstructions(event.systemPrompt);\n\t\t\treturn systemPrompt === undefined ? undefined : { systemPrompt };\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof Error)) throw error;\n\t\t\tawait reportMcpAsyncError(\"mcp.before_agent_start\", error, sink);\n\t\t\treturn undefined;\n\t\t}\n\t});\n\tpi.on(\n\t\t\"session_shutdown\",\n\t\twrapAsync(\"mcp.session_shutdown\", (event) => getMcpService().handleSessionShutdown(event), sink),\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { bindToProviderScope } from \"@earendil-works/pi-ai/node/provider-scope\";\nimport type { ExtensionAPI, ExtensionContext, ExtensionFactory, SessionStartEvent } from \"../../types.ts\";\nimport { registerMcpCommands } from \"./commands.ts\";\nimport { AnthropicNativeToolSearchAdapter } from \"./expose/native-search.ts\";\nimport { TOOL_SEARCH_TOOL_NAME } from \"./expose/tool-search.ts\";\nimport { injectMcpInstructions, refreshMcpInstructionsForSession } from \"./instructions.ts\";\nimport { createMcpLogger } from \"./log.ts\";\nimport { registerMcpPromptCommands } from \"./prompts.ts\";\nimport { expandMcpResourceMentions } from \"./resources.ts\";\nimport { getMcpService, McpService } from \"./service.ts\";\nimport {\n\tparseSkillMcpDeclarations,\n\ttype SkillLike,\n\ttype SkillMcpDeclarations,\n\tskillActivationTargets,\n} from \"./skills.ts\";\nimport { reportMcpAsyncError, wrapAsync } from \"./wrap.ts\";\n\nexport function createMcpExtension(service: McpService, sessionOwned = true): ExtensionFactory {\n\treturn (pi: ExtensionAPI): void => {\n\t\tlet attachPromise: Promise<void> | undefined;\n\t\tconst sink = {\n\t\t\tlogger: {\n\t\t\t\terror(message: string, data?: unknown): void {\n\t\t\t\t\tcreateMcpLogger(\"service\").error(message, data);\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tregisterMcpCommands(pi, service);\n\n\t\t// Native provider tool-search adapter (todo 33 — Anthropic, spike = GO).\n\t\t// Runs on every request but is a no-op unless settings.nativeToolSearch is\n\t\t// auto|true and the model is anthropic-messages; a 400 disables it for the\n\t\t// session and falls back to the always-registered local tool_search.\n\t\tconst nativeAdapter = new AnthropicNativeToolSearchAdapter({\n\t\t\tenabled: () => {\n\t\t\t\tconst setting = service.getNativeToolSearchSetting();\n\t\t\t\treturn setting === true || setting === \"auto\";\n\t\t\t},\n\t\t\tisDeferrable: (name) => name.startsWith(\"mcp_\") && name !== TOOL_SEARCH_TOOL_NAME,\n\t\t\tonFallback: (reason) => createMcpLogger(\"service\").warn(reason),\n\t\t\tsearchToolName: TOOL_SEARCH_TOOL_NAME,\n\t\t});\n\t\tpi.on(\"before_provider_request\", (event, ctx) => nativeAdapter.applyBeforeRequest(ctx.model?.api, event.payload));\n\t\tpi.on(\"after_provider_response\", (event) => nativeAdapter.noteResponseStatus(event.status));\n\t\t// Resumed/compacted sessions carry tool_search activation markers in their\n\t\t// history but re-enter search mode with only directTools active. The context\n\t\t// event (fired before each LLM call, with the full message history) replays\n\t\t// the markers as a safety net; the primary replay happens at attach time so\n\t\t// the FIRST turn's payload already carries previously promoted tools. Scans\n\t\t// once per registration (see McpService.maybeRehydrateFromHistory).\n\t\tpi.on(\"context\", (event) => {\n\t\t\tservice.maybeRehydrateFromHistory(event.messages);\n\t\t});\n\n\t\t// skills-carry-MCP (todo 37): skills declaring MCP servers (mcp.json\n\t\t// sidecar or SKILL.md frontmatter) register lazily with tools hidden;\n\t\t// loading a skill — /skill:<name> input or the model reading its SKILL.md —\n\t\t// reveals that skill's includeTools matches for the rest of the session.\n\t\tlet skillDecls: SkillMcpDeclarations = { servers: new Map(), warnings: [] };\n\t\tlet skillsByName = new Map<string, SkillLike>();\n\t\tconst loadedSkills = new Set<string>();\n\t\tconst revealSkill = (skillName: string): void => {\n\t\t\tif (loadedSkills.has(skillName) || !skillsByName.has(skillName)) return;\n\t\t\tloadedSkills.add(skillName);\n\t\t\tconst registered = service.getTierBSearchable();\n\t\t\tconst targets = skillActivationTargets(skillDecls, skillName, registered);\n\t\t\tif (targets.length > 0) service.activateSkillMcpTools(targets);\n\t\t};\n\t\tpi.on(\"input\", async (event, ctx) => {\n\t\t\tconst match = /^\\s*\\/skill:([A-Za-z0-9._-]+)/.exec(event.text);\n\t\t\tif (match) revealSkill(match[1]);\n\t\t\t// @mcp:<server>/<uri> mention expansion (todo 39): recognized mentions are\n\t\t\t// inlined via the sanctioned input transform; failures pass through\n\t\t\t// untouched with a one-line notice so submission is never blocked.\n\t\t\tif (event.text.includes(\"@mcp:\")) {\n\t\t\t\tconst expansion = await expandMcpResourceMentions(event.text, () => service.getMcpResourceServers());\n\t\t\t\tfor (const notice of expansion.notices) {\n\t\t\t\t\tcreateMcpLogger(\"resources\").warn(notice);\n\t\t\t\t\tvoid ctx.ui?.notify?.(notice, \"warning\");\n\t\t\t\t}\n\t\t\t\tif (expansion.changed) return { action: \"transform\", text: expansion.text };\n\t\t\t}\n\t\t\treturn undefined;\n\t\t});\n\t\tpi.on(\"tool_call\", (event) => {\n\t\t\tif (event.toolName !== \"read\") return undefined;\n\t\t\tconst path = (event.input as { path?: string }).path;\n\t\t\tif (path === undefined) return undefined;\n\t\t\tfor (const [name, skill] of skillsByName) {\n\t\t\t\tif (path === skill.filePath || path.endsWith(skill.filePath)) revealSkill(name);\n\t\t\t}\n\t\t\treturn undefined;\n\t\t});\n\n\t\t// Attach is SINGLE-FLIGHT. session_start handlers are dispatched\n\t\t// fire-and-forget, so a slow attach (a cold MCP server's boot + catalog\n\t\t// collection is awaited inside attachSession) can still be in flight when\n\t\t// before_agent_start fires. The old `attached` boolean was only set on\n\t\t// completion, so before_agent_start would start a SECOND concurrent attach —\n\t\t// which found the connection entries already created (still \"connecting\"),\n\t\t// collected an empty catalog, and registered no MCP tools for turn 1; the\n\t\t// first attach then landed the real registration turns later. Memoizing the\n\t\t// in-flight promise makes before_agent_start await the ORIGINAL attach, so\n\t\t// the first turn's payload deterministically carries the MCP tool set.\n\t\t// session_start always starts a fresh attach (reloads must re-sync config).\n\t\tconst attach = (event: SessionStartEvent, ctx: ExtensionContext): Promise<void> => {\n\t\t\tattachPromise = (async () => {\n\t\t\t\tawait service.attachSession(event, ctx, pi);\n\t\t\t\trefreshMcpInstructionsForSession(service);\n\t\t\t\tif (sessionOwned) registerMcpPromptCommands(service, pi, service.getMcpPromptServers());\n\t\t\t\telse registerMcpPromptCommands(pi, service.getMcpPromptServers());\n\t\t\t})();\n\t\t\treturn attachPromise;\n\t\t};\n\t\tpi.on(\n\t\t\t\"session_start\",\n\t\t\twrapAsync(\"mcp.session_start\", (event, ctx) => attach(event, ctx), sink),\n\t\t);\n\t\tpi.on(\"before_agent_start\", async (event, ctx) => {\n\t\t\ttry {\n\t\t\t\t// Elicitation (todo 41): point mid-call forms at this session's UI.\n\t\t\t\tservice.setMcpElicitationUiProvider(() => ctx.ui);\n\t\t\t\tawait (attachPromise ?? attach({ type: \"session_start\", reason: \"startup\" }, ctx));\n\t\t\t\tconst skills = (event.systemPromptOptions.skills ?? []) as readonly SkillLike[];\n\t\t\t\tif (skills.length > 0) {\n\t\t\t\t\tskillsByName = new Map(skills.map((skill) => [skill.name, skill]));\n\t\t\t\t\tskillDecls = parseSkillMcpDeclarations(skills);\n\t\t\t\t\tconst declared = new Map(\n\t\t\t\t\t\t[...skillDecls.servers].map(([name, decl]) => [name, { raw: decl.raw, sourcePath: decl.sourcePath }]),\n\t\t\t\t\t);\n\t\t\t\t\tconst warnings = [\n\t\t\t\t\t\t...skillDecls.warnings,\n\t\t\t\t\t\t...(declared.size > 0 ? await service.attachSkillMcpServers(declared) : []),\n\t\t\t\t\t];\n\t\t\t\t\tfor (const warning of warnings) createMcpLogger(\"skills\").warn(warning);\n\t\t\t\t}\n\t\t\t\tconst systemPrompt = injectMcpInstructions(service, event.systemPrompt);\n\t\t\t\treturn systemPrompt === undefined ? undefined : { systemPrompt };\n\t\t\t} catch (error) {\n\t\t\t\tif (!(error instanceof Error)) throw error;\n\t\t\t\tawait reportMcpAsyncError(\"mcp.before_agent_start\", error, sink);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t});\n\t\tpi.on(\n\t\t\t\"session_shutdown\",\n\t\t\twrapAsync(\n\t\t\t\t\"mcp.session_shutdown\",\n\t\t\t\tasync (event) => {\n\t\t\t\t\tawait service.handleSessionShutdown(event);\n\t\t\t\t\t// A classic extension instance can be reused by the test/legacy host\n\t\t\t\t\t// after reload. Its singleton is intentionally refreshed for that next\n\t\t\t\t\t// session; scoped factories keep their closed instance.\n\t\t\t\t\tif (!sessionOwned && event.reason === \"reload\" && service.isDisposed()) service = getMcpService();\n\t\t\t\t},\n\t\t\t\tsink,\n\t\t\t),\n\t\t);\n\t};\n}\n\nfunction hasProviderScope(): boolean {\n\ttry {\n\t\tbindToProviderScope(() => undefined);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport default function mcpExtension(pi: ExtensionAPI): void | Promise<void> {\n\tconst sessionOwned = hasProviderScope();\n\treturn createMcpExtension(sessionOwned ? new McpService() : getMcpService(), sessionOwned)(pi);\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { McpService } from "./service.ts";
|
|
2
2
|
export declare function refreshMcpInstructionsForSession(service: McpService): void;
|
|
3
|
-
export declare function injectMcpInstructions(systemPrompt: string): string | undefined;
|
|
3
|
+
export declare function injectMcpInstructions(service: McpService, systemPrompt: string): string | undefined;
|
|
4
4
|
//# sourceMappingURL=instructions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/C,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAE1E;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKnG"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
const MAX_INSTRUCTIONS_CHARS = 4000;
|
|
2
|
-
let sessionInstructionsBlock = "";
|
|
3
2
|
export function refreshMcpInstructionsForSession(service) {
|
|
4
|
-
|
|
3
|
+
service.setMcpInstructions(buildMcpInstructionsBlock(service));
|
|
5
4
|
}
|
|
6
|
-
export function injectMcpInstructions(systemPrompt) {
|
|
7
|
-
|
|
5
|
+
export function injectMcpInstructions(service, systemPrompt) {
|
|
6
|
+
const instructions = service.getMcpInstructions();
|
|
7
|
+
if (instructions.length === 0)
|
|
8
8
|
return undefined;
|
|
9
|
-
if (systemPrompt.includes(
|
|
9
|
+
if (systemPrompt.includes(instructions))
|
|
10
10
|
return undefined;
|
|
11
|
-
return `${systemPrompt}\n\n${
|
|
11
|
+
return `${systemPrompt}\n\n${instructions}`;
|
|
12
12
|
}
|
|
13
13
|
function buildMcpInstructionsBlock(service) {
|
|
14
14
|
const blocks = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/instructions.ts"],"names":[],"mappings":"AAEA,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAEpC,
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/instructions.ts"],"names":[],"mappings":"AAEA,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAEpC,MAAM,UAAU,gCAAgC,CAAC,OAAmB;IACnE,OAAO,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAmB,EAAE,YAAoB;IAC9E,MAAM,YAAY,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAClD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1D,OAAO,GAAG,YAAY,OAAO,YAAY,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAmB;IACrD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;QACrD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,YAAY,GACjB,UAAU,EAAE,KAAK,KAAK,WAAW;YAChC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,EAAE;YACrC,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACtE,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,uBAAuB,CAAC,UAAkB,EAAE,YAAoB;IACxE,MAAM,iBAAiB,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,kBAAkB,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;IACzE,MAAM,mBAAmB,GAAG,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC1D,OAAO,6BAA6B,iBAAiB,OAAO,mBAAmB,uBAAuB,CAAC;AACxG,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC/B,OAAO,KAAK;SACV,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC3B,CAAC","sourcesContent":["import type { McpService } from \"./service.ts\";\n\nconst MAX_INSTRUCTIONS_CHARS = 4000;\n\nexport function refreshMcpInstructionsForSession(service: McpService): void {\n\tservice.setMcpInstructions(buildMcpInstructionsBlock(service));\n}\n\nexport function injectMcpInstructions(service: McpService, systemPrompt: string): string | undefined {\n\tconst instructions = service.getMcpInstructions();\n\tif (instructions.length === 0) return undefined;\n\tif (systemPrompt.includes(instructions)) return undefined;\n\treturn `${systemPrompt}\\n\\n${instructions}`;\n}\n\nfunction buildMcpInstructionsBlock(service: McpService): string {\n\tconst blocks: string[] = [];\n\tfor (const snapshot of service.getServerSnapshots()) {\n\t\tconst connection = service.getConnection(snapshot.name);\n\t\tconst instructions =\n\t\t\tconnection?.state === \"connected\"\n\t\t\t\t? connection.client.getInstructions()\n\t\t\t\t: service.getCachedInstructions(snapshot.name);\n\t\tif (instructions === undefined || instructions.length === 0) continue;\n\t\tblocks.push(formatInstructionsBlock(snapshot.name, instructions));\n\t}\n\treturn blocks.join(\"\\n\\n\");\n}\n\nfunction formatInstructionsBlock(serverName: string, instructions: string): string {\n\tconst escapedServerName = escapeXml(serverName);\n\tconst cappedInstructions = instructions.slice(0, MAX_INSTRUCTIONS_CHARS);\n\tconst escapedInstructions = escapeXml(cappedInstructions);\n\treturn `<mcp_instructions server=\"${escapedServerName}\">\\n${escapedInstructions}\\n</mcp_instructions>`;\n}\n\nfunction escapeXml(value: string): string {\n\treturn value\n\t\t.replace(/&/g, \"&\")\n\t\t.replace(/</g, \"<\")\n\t\t.replace(/>/g, \">\")\n\t\t.replace(/\"/g, \""\")\n\t\t.replace(/'/g, \"'\");\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ExtensionAPI } from "../../types.ts";
|
|
2
2
|
import type { McpCachedServerCatalog } from "./catalog-cache.ts";
|
|
3
3
|
import type { ServerConnection } from "./connection.ts";
|
|
4
|
+
import type { McpService } from "./service.ts";
|
|
4
5
|
export interface McpPromptServer {
|
|
5
6
|
readonly server: string;
|
|
6
7
|
readonly connection: ServerConnection;
|
|
@@ -11,5 +12,6 @@ type CommandRegistrar = Pick<ExtensionAPI, "registerCommand">;
|
|
|
11
12
|
/** Test seam: forget which commands were registered (module-level last-wins). */
|
|
12
13
|
export declare function resetMcpPromptCommandsForTests(): void;
|
|
13
14
|
export declare function registerMcpPromptCommands(pi: CommandRegistrar, servers: readonly McpPromptServer[]): string[];
|
|
15
|
+
export declare function registerMcpPromptCommands(service: McpService, pi: CommandRegistrar, servers: readonly McpPromptServer[]): string[];
|
|
14
16
|
export {};
|
|
15
17
|
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/prompts.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AAC5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/prompts.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AAC5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC;CACjE;AAED,KAAK,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAI9D,iFAAiF;AACjF,wBAAgB,8BAA8B,IAAI,IAAI,CAErD;AAED,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,EAAE,CAAC;AAC/G,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,UAAU,EACnB,EAAE,EAAE,gBAAgB,EACpB,OAAO,EAAE,SAAS,eAAe,EAAE,GACjC,MAAM,EAAE,CAAC"}
|
|
@@ -15,14 +15,20 @@ const registeredCommandNames = new Set();
|
|
|
15
15
|
export function resetMcpPromptCommandsForTests() {
|
|
16
16
|
registeredCommandNames.clear();
|
|
17
17
|
}
|
|
18
|
-
export function registerMcpPromptCommands(
|
|
18
|
+
export function registerMcpPromptCommands(serviceOrPi, piOrServers, serversArg) {
|
|
19
|
+
const service = serversArg === undefined ? undefined : serviceOrPi;
|
|
20
|
+
const pi = (serversArg === undefined ? serviceOrPi : piOrServers);
|
|
21
|
+
const servers = (serversArg === undefined ? piOrServers : serversArg);
|
|
19
22
|
const added = [];
|
|
20
23
|
for (const server of servers) {
|
|
21
24
|
for (const prompt of server.prompts) {
|
|
22
25
|
const commandName = `mcp:${server.server}:${prompt.name}`;
|
|
23
|
-
if (registeredCommandNames.has(commandName))
|
|
26
|
+
if (service?.isMcpPromptCommandRegistered(commandName) ?? registeredCommandNames.has(commandName))
|
|
24
27
|
continue;
|
|
25
|
-
|
|
28
|
+
if (service)
|
|
29
|
+
service.markMcpPromptCommandRegistered(commandName);
|
|
30
|
+
else
|
|
31
|
+
registeredCommandNames.add(commandName);
|
|
26
32
|
added.push(commandName);
|
|
27
33
|
pi.registerCommand(commandName, {
|
|
28
34
|
description: prompt.description ?? `MCP prompt ${prompt.name} from ${server.server}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/prompts.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,2EAA2E;AAC3E,8EAA8E;AAC9E,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,yEAAyE;AACzE,6EAA6E;AAC7E,4EAA4E;AAC5E,qEAAqE;AAKrE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/prompts.ts"],"names":[],"mappings":"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","sourcesContent":["// MCP prompts → slash commands (todo 40).\n//\n// Every prompt a connected server lists becomes a `/mcp:<server>:<prompt>`\n// senpi command. Invoking it collects the prompt's declared arguments through\n// ctx.ui.input (required arguments re-prompt once, then abort with a notice;\n// optional arguments may be left empty), calls prompts/get, and injects the\n// flattened returned messages into the input editor (senpi command semantics:\n// the user reviews and submits). prompts_list_changed rides the existing\n// tools-changed refresh, which re-runs registration; command registration is\n// last-wins, and prompts removed server-side keep a stale command until the\n// next session — invoking one surfaces the server error as a notice.\n\nimport type { ExtensionAPI, ExtensionCommandContext } from \"../../types.ts\";\nimport type { McpCachedServerCatalog } from \"./catalog-cache.ts\";\nimport type { ServerConnection } from \"./connection.ts\";\nimport { createMcpLogger } from \"./log.ts\";\nimport type { McpService } from \"./service.ts\";\n\nexport interface McpPromptServer {\n\treadonly server: string;\n\treadonly connection: ServerConnection;\n\treadonly requestTimeoutMs?: number;\n\treadonly prompts: NonNullable<McpCachedServerCatalog[\"prompts\"]>;\n}\n\ntype CommandRegistrar = Pick<ExtensionAPI, \"registerCommand\">;\n\nconst registeredCommandNames = new Set<string>();\n\n/** Test seam: forget which commands were registered (module-level last-wins). */\nexport function resetMcpPromptCommandsForTests(): void {\n\tregisteredCommandNames.clear();\n}\n\nexport function registerMcpPromptCommands(pi: CommandRegistrar, servers: readonly McpPromptServer[]): string[];\nexport function registerMcpPromptCommands(\n\tservice: McpService,\n\tpi: CommandRegistrar,\n\tservers: readonly McpPromptServer[],\n): string[];\nexport function registerMcpPromptCommands(\n\tserviceOrPi: McpService | CommandRegistrar,\n\tpiOrServers: CommandRegistrar | readonly McpPromptServer[],\n\tserversArg?: readonly McpPromptServer[],\n): string[] {\n\tconst service = serversArg === undefined ? undefined : (serviceOrPi as McpService);\n\tconst pi = (serversArg === undefined ? serviceOrPi : piOrServers) as CommandRegistrar;\n\tconst servers = (serversArg === undefined ? piOrServers : serversArg) as readonly McpPromptServer[];\n\tconst added: string[] = [];\n\tfor (const server of servers) {\n\t\tfor (const prompt of server.prompts) {\n\t\t\tconst commandName = `mcp:${server.server}:${prompt.name}`;\n\t\t\tif (service?.isMcpPromptCommandRegistered(commandName) ?? registeredCommandNames.has(commandName)) continue;\n\t\t\tif (service) service.markMcpPromptCommandRegistered(commandName);\n\t\t\telse registeredCommandNames.add(commandName);\n\t\t\tadded.push(commandName);\n\t\t\tpi.registerCommand(commandName, {\n\t\t\t\tdescription: prompt.description ?? `MCP prompt ${prompt.name} from ${server.server}`,\n\t\t\t\thandler: async (_args, ctx) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst collected = await collectPromptArguments(prompt.arguments ?? [], ctx);\n\t\t\t\t\t\tif (collected === undefined) return;\n\t\t\t\t\t\tconst result = await server.connection.client.getPrompt(\n\t\t\t\t\t\t\t{ arguments: collected, name: prompt.name },\n\t\t\t\t\t\t\t{ timeout: server.requestTimeoutMs },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tctx.ui.setEditorText(flattenPromptMessages(result.messages));\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\tcreateMcpLogger(server.server).warn(`prompt ${prompt.name} failed: ${message}`);\n\t\t\t\t\t\tctx.ui.notify(`MCP prompt ${prompt.name} failed: ${message}`, \"error\");\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\treturn added;\n}\n\nasync function collectPromptArguments(\n\tdeclared: ReadonlyArray<{ name: string; description?: string; required?: boolean }>,\n\tctx: ExtensionCommandContext,\n): Promise<Record<string, string> | undefined> {\n\tconst collected: Record<string, string> = {};\n\tfor (const argument of declared) {\n\t\tconst title = `${argument.name}${argument.required ? \"\" : \" (optional)\"}`;\n\t\tconst value = await ctx.ui.input(title, argument.description);\n\t\tif (value !== undefined && value.length > 0) {\n\t\t\tcollected[argument.name] = value;\n\t\t\tcontinue;\n\t\t}\n\t\tif (argument.required) {\n\t\t\tctx.ui.notify(`MCP prompt cancelled: required argument '${argument.name}' not provided.`, \"warning\");\n\t\t\treturn undefined;\n\t\t}\n\t}\n\treturn collected;\n}\n\nfunction flattenPromptMessages(messages: ReadonlyArray<{ role: string; content: unknown }>): string {\n\treturn messages\n\t\t.map((message) => {\n\t\t\tconst content = message.content as { type?: string; text?: string };\n\t\t\tconst text = typeof content?.text === \"string\" ? content.text : JSON.stringify(message.content);\n\t\t\treturn messages.length > 1 ? `${message.role}: ${text}` : text;\n\t\t})\n\t\t.join(\"\\n\\n\");\n}\n"]}
|
|
@@ -4,11 +4,13 @@ import type { ToolDefinition } from "../../types.ts";
|
|
|
4
4
|
import type { McpCachedServerCatalog } from "./catalog-cache.ts";
|
|
5
5
|
import type { ServerConnection } from "./connection.ts";
|
|
6
6
|
import type { McpToolDetails } from "./expose/register.ts";
|
|
7
|
+
import type { McpOutputArtifacts } from "./guard/output-guard.ts";
|
|
7
8
|
import { applyMcpOutputGuard } from "./guard/output-guard.ts";
|
|
8
9
|
export interface McpResourceServer {
|
|
9
10
|
readonly server: string;
|
|
10
11
|
readonly connection: ServerConnection;
|
|
11
12
|
readonly agentDir?: string;
|
|
13
|
+
readonly artifacts?: McpOutputArtifacts;
|
|
12
14
|
readonly outputGuard?: Parameters<typeof applyMcpOutputGuard>[1]["outputGuard"];
|
|
13
15
|
readonly requestTimeoutMs?: number;
|
|
14
16
|
readonly resources: NonNullable<McpCachedServerCatalog["resources"]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/resources.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAExE,OAAO,EAAe,IAAI,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAChF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC;CACrE;AAED,yEAAyE;AACzE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAItF;AAED,+EAA+E;AAC/E,wBAAsB,8BAA8B,CACnD,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,aAAa,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,kEAAkE;AAClE,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/resources.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAExE,OAAO,EAAe,IAAI,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAChF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC;CACrE;AAED,yEAAyE;AACzE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAItF;AAED,+EAA+E;AAC/E,wBAAsB,8BAA8B,CACnD,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,aAAa,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,kEAAkE;AAClE,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BnG;AAED,QAAA,MAAM,UAAU;;EAEd,CAAC;AACH,QAAA,MAAM,UAAU;;;EAGd,CAAC;AAEH,KAAK,cAAc,GAAG,cAAc,CAAC,OAAO,UAAU,GAAG,OAAO,UAAU,EAAE,cAAc,GAAG,SAAS,EAAE,OAAO,CAAC,CAAC;AAEjH,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,SAAS,iBAAiB,EAAE,GAAG,cAAc,EAAE,CAsDpG;AAID,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,gFAAgF;AAChF,wBAAsB,yBAAyB,CAC9C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,SAAS,iBAAiB,EAAE,GACzC,OAAO,CAAC,mBAAmB,CAAC,CAuB9B"}
|
|
@@ -48,6 +48,7 @@ export async function readMcpResourceAsText(server, uri) {
|
|
|
48
48
|
});
|
|
49
49
|
const guarded = await applyMcpOutputGuard([{ type: "text", text: parts.join("\n") }], {
|
|
50
50
|
agentDir: server.agentDir,
|
|
51
|
+
artifacts: server.artifacts,
|
|
51
52
|
outputGuard: server.outputGuard,
|
|
52
53
|
server: server.server,
|
|
53
54
|
});
|