@code-yeongyu/senpi 2026.7.23 → 2026.7.25-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +162 -6
- package/README.md +14 -1
- package/dist/beta/omo-local-update.d.ts +207 -0
- package/dist/beta/omo-local-update.d.ts.map +1 -0
- package/dist/beta/omo-local-update.js +708 -0
- package/dist/beta/omo-local-update.js.map +1 -0
- 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 +115 -4
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +1317 -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 +69 -34
- package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
- package/dist/core/extensions/builtin/config-reload/log.d.ts +4 -1
- package/dist/core/extensions/builtin/config-reload/log.d.ts.map +1 -1
- package/dist/core/extensions/builtin/config-reload/log.js +3 -0
- package/dist/core/extensions/builtin/config-reload/log.js.map +1 -1
- package/dist/core/extensions/builtin/config-reload/routine-settings.d.ts +15 -0
- package/dist/core/extensions/builtin/config-reload/routine-settings.d.ts.map +1 -0
- package/dist/core/extensions/builtin/config-reload/routine-settings.js +102 -0
- package/dist/core/extensions/builtin/config-reload/routine-settings.js.map +1 -0
- 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/gpt-5.6.d.ts +48 -0
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js +88 -64
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -1
- 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/builtin/websearch/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/index.js +2 -4
- package/dist/core/extensions/builtin/websearch/index.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/config.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/config.js +4 -1
- package/dist/core/extensions/builtin/websearch/websearch/config.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/native.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/native.js +2 -4
- package/dist/core/extensions/builtin/websearch/websearch/native.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/renderers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/renderers.js +20 -8
- package/dist/core/extensions/builtin/websearch/websearch/renderers.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/search.d.ts +6 -1
- package/dist/core/extensions/builtin/websearch/websearch/search.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/search.js +15 -11
- package/dist/core/extensions/builtin/websearch/websearch/search.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/tool.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/tool.js +5 -10
- package/dist/core/extensions/builtin/websearch/websearch/tool.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/types.d.ts +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/types.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 +32 -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 +1 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +22 -3
- 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 +39 -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/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +3 -0
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/retry-fallback/controller.d.ts +7 -0
- package/dist/core/retry-fallback/controller.d.ts.map +1 -1
- package/dist/core/retry-fallback/controller.js +13 -0
- package/dist/core/retry-fallback/controller.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 +8 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +10 -0
- 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/thinking-levels.d.ts.map +1 -1
- package/dist/core/thinking-levels.js +9 -2
- package/dist/core/thinking-levels.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 +7 -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/custom-message.d.ts +3 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +9 -2
- package/dist/modes/interactive/components/custom-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 +105 -80
- 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/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +11 -0
- package/dist/package-manager-cli.js.map +1 -1
- 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 +27 -9
- 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 +13 -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/message-renderer.ts +2 -2
- 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 +36 -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 +13 -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 +63 -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 +130 -47
- 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 +36 -15
- 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 +55 -26
- 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 +16 -13
- 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 +19 -13
- 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 +92 -58
- 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 +263 -56
- 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 +48 -21
- 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/simple-options.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/simple-options.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/simple-options.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/auth/oauth/radius.d.ts +3 -2
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/radius.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/radius.js +37 -35
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/radius.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js +11 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js.map +1 -1
- 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 +6 -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 +6 -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 +7 -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 +5 -54
- 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 +52 -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/error-body.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/error-body.js +8 -3
- package/node_modules/@earendil-works/pi-ai/dist/utils/error-body.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/server-fallback-receipt.d.ts +30 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/server-fallback-receipt.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/server-fallback-receipt.js +70 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/server-fallback-receipt.js.map +1 -0
- 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 -10
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.d.ts +0 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/hooks/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport type { BeforeAgentStartEventResult, ExtensionAPI, ExtensionContext, LoadedHookSources } from \"../../types.ts\";\nimport { registerHooksCommand } from \"./command.ts\";\nimport { loadHookConfigSources } from \"./config-loader.ts\";\nimport { dispatchHookEvent, runningHookHandlersStatusLabel } from \"./dispatcher.ts\";\nimport {\n\tbuildPostCompactHookInput,\n\tbuildPreCompactHookInput,\n\tbuildSessionStartHookInput,\n\tdispatchLifecycleHookEvent,\n\tpostCompactResultDetails,\n\tpreCompactResultDetails,\n\trecordLifecycleHookResult,\n\tsessionBeforeCompactResult,\n\tsessionStartResultDetails,\n} from \"./lifecycle-adapter.ts\";\nimport {\n\tappendSystemMessages,\n\tbuildUserPromptHookInput,\n\tformatPromptContextMessage,\n\tHOOK_CUSTOM_MESSAGE_TYPE,\n\ttype PendingPromptHookContext,\n\tpromptBlockReasonFromResult,\n\tpromptContextFromResult,\n\tsafeDiagnosticDetails,\n} from \"./prompt-adapter.ts\";\nimport { applyStopHookResult, buildStopHookInput, createStopTurnTracker } from \"./stop-adapter.ts\";\nimport {\n\tapplyPostToolUseResult,\n\tapplyPreToolUseResult,\n\tbuildPostToolUseHookInput,\n\tbuildPreToolUseHookInput,\n\ttoolContextsFromResult,\n} from \"./tool-adapter.ts\";\nimport { emptyHookTrustState } from \"./trust.ts\";\nimport { FileHookStateStorage } from \"./trust-storage.ts\";\nimport type { HookTrustState } from \"./types.ts\";\n\nexport { parseHookConfig } from \"./schema.ts\";\nexport type {\n\tCommandHookConfig,\n\tExecutableHookHandler,\n\tHookDiagnostic,\n\tHookDiagnosticCode,\n\tHookInputWire,\n\tHookOutputWire,\n\tHookRuntimeState,\n\tHookSourceMetadata,\n\tHookTrustEntry,\n\tHookTrustState,\n\tParsedHookConfig,\n\tSupportedHookEvent,\n\tUnsupportedKnownHookEvent,\n} from \"./types.ts\";\n\nexport default function hooksExtension(pi: ExtensionAPI): void {\n\tconst pendingPromptContexts: PendingPromptHookContext[] = [];\n\tconst pendingPreToolContexts = new Map<string, readonly string[]>();\n\tconst stopTurnTracker = createStopTurnTracker();\n\n\tconst refreshState = (ctx: ExtensionContext) => {\n\t\tconst sources = ctx.getLoadedHookSources?.() ?? fallbackHookSources(ctx.cwd);\n\t\tconst parsed = loadHookConfigSources({\n\t\t\tagentDir: sources.agentDir,\n\t\t\tcwd: sources.cwd,\n\t\t\tfileSystem: {\n\t\t\t\treadTextFile(path) {\n\t\t\t\t\treturn existsSync(path) ? readFileSync(path, \"utf-8\") : undefined;\n\t\t\t\t},\n\t\t\t},\n\t\t\tglobalHookSourcePaths: sources.globalHookSourcePaths,\n\t\t\tglobalHooksPath: sources.globalHooksPath,\n\t\t\tglobalSettingsHooks: sources.globalSettingsHooks,\n\t\t\tpreSessionHookSourcePaths: sources.preSessionHookSourcePaths,\n\t\t\tprojectHookSourcePaths: sources.projectHookSourcePaths,\n\t\t\tprojectHooksPath: sources.projectHooksPath,\n\t\t\tprojectSettingsHooks: sources.projectSettingsHooks,\n\t\t\truntimeHookSourcePaths: sources.runtimeHookSourcePaths,\n\t\t});\n\t\tconst storage = new FileHookStateStorage({ agentDir: sources.agentDir, cwd: sources.cwd });\n\t\tconst trust = mergeTrustStates(\n\t\t\tstorage.read(\"global\"),\n\t\t\tctx.isProjectTrusted() ? storage.read(\"project\") : emptyHookTrustState(),\n\t\t);\n\t\treturn { parsed, trust, storage };\n\t};\n\n\tpi.on(\"session_start\", async (event, ctx) => {\n\t\tconst state = refreshState(ctx);\n\t\tconst input = buildSessionStartHookInput(event, ctx);\n\t\tconst result = await dispatchLifecycleHookEvent({\n\t\t\tcwd: ctx.cwd,\n\t\t\thandlers: state.parsed.executableHandlers,\n\t\t\tinput,\n\t\t\tmatcherInputs: [\"SessionStart\", event.reason],\n\t\t\t...(ctx.signal === undefined ? {} : { signal: ctx.signal }),\n\t\t\ttrustState: state.trust,\n\t\t});\n\t\trecordLifecycleHookResult(pi, \"SessionStart\", sessionStartResultDetails(result));\n\t});\n\n\tpi.on(\"input\", async (event, ctx) => {\n\t\tif (event.source === \"extension\") return undefined;\n\t\tstopTurnTracker.reset();\n\t\tpendingPromptContexts.splice(0);\n\t\tconst state = refreshState(ctx);\n\t\tconst input = buildUserPromptHookInput({\n\t\t\tcwd: ctx.cwd,\n\t\t\tpermissionMode: \"default\",\n\t\t\tprompt: event.text,\n\t\t\tsessionId: ctx.sessionManager.getSessionId(),\n\t\t\ttranscriptPath: ctx.sessionManager.getSessionFile(),\n\t\t});\n\t\tconst result = await dispatchHookEvent({\n\t\t\tcwd: ctx.cwd,\n\t\t\thandlers: state.parsed.executableHandlers,\n\t\t\tinput,\n\t\t\tsignal: ctx.signal,\n\t\t\ttrustOptions: { platform: process.platform },\n\t\t\ttrustState: state.trust,\n\t\t});\n\t\tif (result.decision.kind === \"block\") {\n\t\t\tconst reason = promptBlockReasonFromResult(result);\n\t\t\tctx.ui.notify(reason, \"warning\");\n\t\t\tpi.sendMessage(\n\t\t\t\t{\n\t\t\t\t\tcustomType: HOOK_CUSTOM_MESSAGE_TYPE,\n\t\t\t\t\tcontent: reason,\n\t\t\t\t\tdisplay: false,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tdecision: \"block\",\n\t\t\t\t\t\tevent: \"UserPromptSubmit\",\n\t\t\t\t\t\tsourcePath: result.decision.source.sourcePath,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ triggerTurn: false },\n\t\t\t);\n\t\t\treturn { action: \"handled\" };\n\t\t}\n\t\tif (ctx.isIdle()) {\n\t\t\tconst pending = promptContextFromResult(result);\n\t\t\tif (pending !== undefined) {\n\t\t\t\tpendingPromptContexts.push(pending);\n\t\t\t}\n\t\t}\n\t\treturn { action: \"continue\" };\n\t});\n\n\tpi.on(\"before_agent_start\", async (event) => {\n\t\tconst pending = pendingPromptContexts.shift();\n\t\tif (pending === undefined) return undefined;\n\n\t\tconst messageContent = formatPromptContextMessage(pending);\n\t\tconst systemPrompt = appendSystemMessages(event.systemPrompt, pending.systemMessages);\n\t\tif (messageContent === undefined && systemPrompt === event.systemPrompt) return undefined;\n\n\t\tconst result: BeforeAgentStartEventResult = {};\n\t\tif (messageContent !== undefined) {\n\t\t\tresult.message = {\n\t\t\t\tcustomType: HOOK_CUSTOM_MESSAGE_TYPE,\n\t\t\t\tcontent: messageContent,\n\t\t\t\tdisplay: false,\n\t\t\t\tdetails: {\n\t\t\t\t\tevent: \"UserPromptSubmit\",\n\t\t\t\t\tdiagnostics: pending.diagnostics.map(safeDiagnosticDetails),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tif (systemPrompt !== event.systemPrompt) {\n\t\t\tresult.systemPrompt = systemPrompt;\n\t\t}\n\t\treturn result;\n\t});\n\n\tpi.on(\"tool_call\", async (event, ctx) => {\n\t\tpendingPreToolContexts.delete(event.toolCallId);\n\t\tconst state = refreshState(ctx);\n\t\tconst result = await dispatchHookEvent({\n\t\t\tcwd: ctx.cwd,\n\t\t\thandlers: state.parsed.executableHandlers,\n\t\t\tinput: buildPreToolUseHookInput(event, ctx),\n\t\t\tonRunningHandlersChange: (running) => {\n\t\t\t\tif (running.length === 0) return;\n\t\t\t\tctx.updateToolHookStatus?.(runningHookHandlersStatusLabel(running));\n\t\t\t},\n\t\t\tsignal: ctx.signal,\n\t\t\ttrustOptions: { platform: process.platform },\n\t\t\ttrustState: state.trust,\n\t\t});\n\t\tconst toolResult = applyPreToolUseResult(event, result);\n\t\tif (toolResult?.block) {\n\t\t\tpendingPreToolContexts.delete(event.toolCallId);\n\t\t\treturn toolResult;\n\t\t}\n\t\tconst contexts = toolContextsFromResult(result);\n\t\tif (contexts.length > 0) {\n\t\t\tpendingPreToolContexts.set(event.toolCallId, contexts);\n\t\t}\n\t\treturn toolResult;\n\t});\n\n\tpi.on(\"tool_result\", async (event, ctx) => {\n\t\tconst preToolContexts = pendingPreToolContexts.get(event.toolCallId) ?? [];\n\t\tpendingPreToolContexts.delete(event.toolCallId);\n\t\tconst state = refreshState(ctx);\n\t\tconst result = await dispatchHookEvent({\n\t\t\tcwd: ctx.cwd,\n\t\t\thandlers: state.parsed.executableHandlers,\n\t\t\tinput: buildPostToolUseHookInput(event, ctx),\n\t\t\tonRunningHandlersChange: (running) => {\n\t\t\t\tif (running.length === 0) return;\n\t\t\t\tctx.updateToolHookStatus?.(runningHookHandlersStatusLabel(running));\n\t\t\t},\n\t\t\tsignal: ctx.signal,\n\t\t\ttrustOptions: { platform: process.platform },\n\t\t\ttrustState: state.trust,\n\t\t});\n\t\treturn applyPostToolUseResult(event, result, preToolContexts);\n\t});\n\n\tpi.on(\"session_before_compact\", async (event, ctx) => {\n\t\tconst state = refreshState(ctx);\n\t\tconst result = await dispatchLifecycleHookEvent({\n\t\t\tcwd: ctx.cwd,\n\t\t\thandlers: state.parsed.executableHandlers,\n\t\t\tinput: buildPreCompactHookInput(event, ctx),\n\t\t\tmatcherInputs: [\"PreCompact\", event.reason],\n\t\t\tsignal: event.signal,\n\t\t\ttrustState: state.trust,\n\t\t});\n\t\tconst details = preCompactResultDetails(result);\n\t\trecordLifecycleHookResult(pi, \"PreCompact\", details);\n\t\treturn sessionBeforeCompactResult(details);\n\t});\n\n\tpi.on(\"session_compact\", async (event, ctx) => {\n\t\tif (!event.accepted) return undefined;\n\t\tconst state = refreshState(ctx);\n\t\tconst result = await dispatchLifecycleHookEvent({\n\t\t\tcwd: ctx.cwd,\n\t\t\thandlers: state.parsed.executableHandlers,\n\t\t\tinput: buildPostCompactHookInput(event, ctx),\n\t\t\tmatcherInputs: [\"PostCompact\", event.reason],\n\t\t\t...(ctx.signal === undefined ? {} : { signal: ctx.signal }),\n\t\t\ttrustState: state.trust,\n\t\t});\n\t\trecordLifecycleHookResult(pi, \"PostCompact\", postCompactResultDetails(result));\n\t\treturn undefined;\n\t});\n\n\tpi.on(\"agent_end\", async (event, ctx) => {\n\t\tconst state = refreshState(ctx);\n\t\tconst result = await dispatchHookEvent({\n\t\t\tcwd: ctx.cwd,\n\t\t\thandlers: state.parsed.executableHandlers,\n\t\t\tinput: buildStopHookInput(event, ctx),\n\t\t\tsignal: ctx.signal,\n\t\t\ttrustOptions: { platform: process.platform },\n\t\t\ttrustState: state.trust,\n\t\t});\n\t\tawait applyStopHookResult(pi, ctx, result, stopTurnTracker.turnKey(ctx));\n\t});\n\n\tregisterHooksCommand(pi, refreshState);\n}\n\nfunction mergeTrustStates(globalState: HookTrustState, projectState: HookTrustState): HookTrustState {\n\treturn { version: 1, hooks: { ...globalState.hooks, ...projectState.hooks } };\n}\n\nfunction fallbackHookSources(cwd: string): LoadedHookSources {\n\treturn {\n\t\tagentDir: cwd,\n\t\tcwd,\n\t\tglobalHookSourcePaths: [],\n\t\tglobalHooksPath: `${cwd}/hooks.json`,\n\t\tpreSessionHookSourcePaths: [],\n\t\tprojectHookSourcePaths: [],\n\t\tprojectHooksPath: `${cwd}/.senpi/hooks.json`,\n\t\truntimeHookSourcePaths: [],\n\t};\n}\n\nexport {\n\tSUPPORTED_HOOK_EVENTS,\n\tUNSUPPORTED_HANDLER_TYPES,\n\tUNSUPPORTED_KNOWN_HOOK_EVENTS,\n} from \"./types.ts\";\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/hooks/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport type { BeforeAgentStartEventResult, ExtensionAPI, ExtensionContext, LoadedHookSources } from \"../../types.ts\";\nimport { registerHooksCommand } from \"./command.ts\";\nimport { loadHookConfigSources } from \"./config-loader.ts\";\nimport { dispatchHookEvent, runningHookHandlersStatusLabel } from \"./dispatcher.ts\";\nimport {\n\tbuildPostCompactHookInput,\n\tbuildPreCompactHookInput,\n\tbuildSessionStartHookInput,\n\tdispatchLifecycleHookEvent,\n\tpostCompactResultDetails,\n\tpreCompactResultDetails,\n\trecordLifecycleHookResult,\n\tsessionBeforeCompactResult,\n\tsessionStartResultDetails,\n} from \"./lifecycle-adapter.ts\";\nimport {\n\tappendSystemMessages,\n\tbuildUserPromptHookInput,\n\tformatPromptContextMessage,\n\tHOOK_CUSTOM_MESSAGE_TYPE,\n\ttype PendingPromptHookContext,\n\tpromptBlockReasonFromResult,\n\tpromptContextFromResult,\n\tsafeDiagnosticDetails,\n} from \"./prompt-adapter.ts\";\nimport { applyStopHookResult, buildStopHookInput, createStopTurnTracker } from \"./stop-adapter.ts\";\nimport {\n\tapplyPostToolUseResult,\n\tapplyPreToolUseResult,\n\tbuildPostToolUseHookInput,\n\tbuildPreToolUseHookInput,\n\ttoolContextsFromResult,\n} from \"./tool-adapter.ts\";\nimport { emptyHookTrustState } from \"./trust.ts\";\nimport { FileHookStateStorage } from \"./trust-storage.ts\";\nimport type { HookTrustState } from \"./types.ts\";\n\nexport { parseHookConfig } from \"./schema.ts\";\nexport type {\n\tCommandHookConfig,\n\tExecutableHookHandler,\n\tHookDiagnostic,\n\tHookDiagnosticCode,\n\tHookInputWire,\n\tHookOutputWire,\n\tHookRuntimeState,\n\tHookSourceMetadata,\n\tHookTrustEntry,\n\tHookTrustState,\n\tParsedHookConfig,\n\tSupportedHookEvent,\n\tUnsupportedKnownHookEvent,\n} from \"./types.ts\";\n\nexport default function hooksExtension(pi: ExtensionAPI): void {\n\tconst pendingPromptContexts: PendingPromptHookContext[] = [];\n\tconst pendingPreToolContexts = new Map<string, readonly string[]>();\n\tconst stopTurnTracker = createStopTurnTracker();\n\n\tconst refreshState = (ctx: ExtensionContext) => {\n\t\tconst sources = ctx.getLoadedHookSources?.() ?? fallbackHookSources(ctx.cwd);\n\t\tconst parsed = loadHookConfigSources({\n\t\t\tagentDir: sources.agentDir,\n\t\t\tcwd: sources.cwd,\n\t\t\tfileSystem: {\n\t\t\t\treadTextFile(path) {\n\t\t\t\t\treturn existsSync(path) ? readFileSync(path, \"utf-8\") : undefined;\n\t\t\t\t},\n\t\t\t},\n\t\t\tglobalHookSourcePaths: sources.globalHookSourcePaths,\n\t\t\tglobalHooksPath: sources.globalHooksPath,\n\t\t\tglobalSettingsHooks: sources.globalSettingsHooks,\n\t\t\tpreSessionHookSourcePaths: sources.preSessionHookSourcePaths,\n\t\t\tprojectHookSourcePaths: sources.projectHookSourcePaths,\n\t\t\tprojectHooksPath: sources.projectHooksPath,\n\t\t\tprojectSettingsHooks: sources.projectSettingsHooks,\n\t\t\truntimeHookSourcePaths: sources.runtimeHookSourcePaths,\n\t\t});\n\t\tconst storage = new FileHookStateStorage({ agentDir: sources.agentDir, cwd: sources.cwd });\n\t\tconst trust = mergeTrustStates(\n\t\t\tstorage.read(\"global\"),\n\t\t\tctx.isProjectTrusted() ? storage.read(\"project\") : emptyHookTrustState(),\n\t\t);\n\t\treturn { parsed, trust, storage };\n\t};\n\n\tpi.on(\"session_start\", async (event, ctx) => {\n\t\tconst state = refreshState(ctx);\n\t\tconst input = buildSessionStartHookInput(event, ctx);\n\t\tconst result = await dispatchLifecycleHookEvent({\n\t\t\tcwd: ctx.cwd,\n\t\t\thandlers: state.parsed.executableHandlers,\n\t\t\tinput,\n\t\t\tmatcherInputs: [\"SessionStart\", event.reason],\n\t\t\t...(ctx.signal === undefined ? {} : { signal: ctx.signal }),\n\t\t\ttrustState: state.trust,\n\t\t});\n\t\trecordLifecycleHookResult(pi, \"SessionStart\", sessionStartResultDetails(result));\n\t});\n\n\tpi.on(\"input\", async (event, ctx) => {\n\t\tif (event.source === \"extension\") return undefined;\n\t\tstopTurnTracker.reset();\n\t\tpendingPromptContexts.splice(0);\n\t\tconst state = refreshState(ctx);\n\t\tconst input = buildUserPromptHookInput({\n\t\t\tcwd: ctx.cwd,\n\t\t\tpermissionMode: \"default\",\n\t\t\tprompt: event.text,\n\t\t\tsessionId: ctx.sessionManager.getSessionId(),\n\t\t\ttranscriptPath: ctx.sessionManager.getSessionFile(),\n\t\t});\n\t\tconst result = await dispatchHookEvent({\n\t\t\tcwd: ctx.cwd,\n\t\t\thandlers: state.parsed.executableHandlers,\n\t\t\tinput,\n\t\t\tsignal: ctx.signal,\n\t\t\ttrustOptions: { platform: process.platform },\n\t\t\ttrustState: state.trust,\n\t\t});\n\t\tif (result.decision.kind === \"block\") {\n\t\t\tconst reason = promptBlockReasonFromResult(result);\n\t\t\tctx.ui.notify(reason, \"warning\");\n\t\t\tpi.sendMessage(\n\t\t\t\t{\n\t\t\t\t\tcustomType: HOOK_CUSTOM_MESSAGE_TYPE,\n\t\t\t\t\tcontent: reason,\n\t\t\t\t\tdisplay: false,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tdecision: \"block\",\n\t\t\t\t\t\tevent: \"UserPromptSubmit\",\n\t\t\t\t\t\tsourcePath: result.decision.source.sourcePath,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ triggerTurn: false },\n\t\t\t);\n\t\t\treturn { action: \"handled\" };\n\t\t}\n\t\tif (ctx.isIdle()) {\n\t\t\tconst pending = promptContextFromResult(result);\n\t\t\tif (pending !== undefined) {\n\t\t\t\tpendingPromptContexts.push(pending);\n\t\t\t}\n\t\t}\n\t\treturn { action: \"continue\" };\n\t});\n\n\tpi.on(\"before_agent_start\", async (event) => {\n\t\tconst pending = pendingPromptContexts.shift();\n\t\tif (pending === undefined) return undefined;\n\n\t\tconst messageContent = formatPromptContextMessage(pending);\n\t\tconst systemPrompt = appendSystemMessages(event.systemPrompt, pending.systemMessages);\n\t\tif (messageContent === undefined && systemPrompt === event.systemPrompt) return undefined;\n\n\t\tconst result: BeforeAgentStartEventResult = {};\n\t\tif (messageContent !== undefined) {\n\t\t\tresult.message = {\n\t\t\t\tcustomType: HOOK_CUSTOM_MESSAGE_TYPE,\n\t\t\t\tcontent: messageContent,\n\t\t\t\tdisplay: false,\n\t\t\t\tdetails: {\n\t\t\t\t\tevent: \"UserPromptSubmit\",\n\t\t\t\t\tdiagnostics: pending.diagnostics.map(safeDiagnosticDetails),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tif (systemPrompt !== event.systemPrompt) {\n\t\t\tresult.systemPrompt = systemPrompt;\n\t\t}\n\t\treturn result;\n\t});\n\n\tpi.on(\"tool_call\", async (event, ctx) => {\n\t\tpendingPreToolContexts.delete(event.toolCallId);\n\t\tconst state = refreshState(ctx);\n\t\tconst result = await dispatchHookEvent({\n\t\t\tcwd: ctx.cwd,\n\t\t\thandlers: state.parsed.executableHandlers,\n\t\t\tinput: buildPreToolUseHookInput(event, ctx),\n\t\t\tonRunningHandlersChange: (running) => {\n\t\t\t\tif (running.length === 0) return;\n\t\t\t\tctx.updateToolHookStatus?.(runningHookHandlersStatusLabel(running));\n\t\t\t},\n\t\t\tsignal: ctx.signal,\n\t\t\ttrustOptions: { platform: process.platform },\n\t\t\ttrustState: state.trust,\n\t\t});\n\t\tconst toolResult = applyPreToolUseResult(event, result);\n\t\tif (toolResult?.block) {\n\t\t\tpendingPreToolContexts.delete(event.toolCallId);\n\t\t\treturn toolResult;\n\t\t}\n\t\tconst contexts = toolContextsFromResult(result);\n\t\tif (contexts.length > 0) {\n\t\t\tpendingPreToolContexts.set(event.toolCallId, contexts);\n\t\t}\n\t\treturn toolResult;\n\t});\n\n\tpi.on(\"tool_result\", async (event, ctx) => {\n\t\tconst preToolContexts = pendingPreToolContexts.get(event.toolCallId) ?? [];\n\t\tpendingPreToolContexts.delete(event.toolCallId);\n\t\tconst state = refreshState(ctx);\n\t\tconst result = await dispatchHookEvent({\n\t\t\tcwd: ctx.cwd,\n\t\t\thandlers: state.parsed.executableHandlers,\n\t\t\tinput: buildPostToolUseHookInput(event, ctx),\n\t\t\tonRunningHandlersChange: (running) => {\n\t\t\t\tif (running.length === 0) return;\n\t\t\t\tctx.updateToolHookStatus?.(runningHookHandlersStatusLabel(running));\n\t\t\t},\n\t\t\tsignal: ctx.signal,\n\t\t\ttrustOptions: { platform: process.platform },\n\t\t\ttrustState: state.trust,\n\t\t});\n\t\treturn applyPostToolUseResult(event, result, preToolContexts);\n\t});\n\n\tpi.on(\"session_before_compact\", async (event, ctx) => {\n\t\tconst state = refreshState(ctx);\n\t\tconst result = await dispatchLifecycleHookEvent({\n\t\t\tcwd: ctx.cwd,\n\t\t\thandlers: state.parsed.executableHandlers,\n\t\t\tinput: buildPreCompactHookInput(event, ctx),\n\t\t\tmatcherInputs: [\"PreCompact\", event.reason],\n\t\t\tsignal: event.signal,\n\t\t\ttrustState: state.trust,\n\t\t});\n\t\tconst details = preCompactResultDetails(result);\n\t\trecordLifecycleHookResult(pi, \"PreCompact\", details, { compactionRequestId: event.requestId });\n\t\treturn sessionBeforeCompactResult(details);\n\t});\n\n\tpi.on(\"session_compact\", async (event, ctx) => {\n\t\tif (!event.accepted) return undefined;\n\t\tconst state = refreshState(ctx);\n\t\tconst result = await dispatchLifecycleHookEvent({\n\t\t\tcwd: ctx.cwd,\n\t\t\thandlers: state.parsed.executableHandlers,\n\t\t\tinput: buildPostCompactHookInput(event, ctx),\n\t\t\tmatcherInputs: [\"PostCompact\", event.reason],\n\t\t\t...(ctx.signal === undefined ? {} : { signal: ctx.signal }),\n\t\t\ttrustState: state.trust,\n\t\t});\n\t\trecordLifecycleHookResult(pi, \"PostCompact\", postCompactResultDetails(result));\n\t\treturn undefined;\n\t});\n\n\tpi.on(\"agent_end\", async (event, ctx) => {\n\t\tconst state = refreshState(ctx);\n\t\tconst result = await dispatchHookEvent({\n\t\t\tcwd: ctx.cwd,\n\t\t\thandlers: state.parsed.executableHandlers,\n\t\t\tinput: buildStopHookInput(event, ctx),\n\t\t\tsignal: ctx.signal,\n\t\t\ttrustOptions: { platform: process.platform },\n\t\t\ttrustState: state.trust,\n\t\t});\n\t\tawait applyStopHookResult(pi, ctx, result, stopTurnTracker.turnKey(ctx));\n\t});\n\n\tregisterHooksCommand(pi, refreshState);\n}\n\nfunction mergeTrustStates(globalState: HookTrustState, projectState: HookTrustState): HookTrustState {\n\treturn { version: 1, hooks: { ...globalState.hooks, ...projectState.hooks } };\n}\n\nfunction fallbackHookSources(cwd: string): LoadedHookSources {\n\treturn {\n\t\tagentDir: cwd,\n\t\tcwd,\n\t\tglobalHookSourcePaths: [],\n\t\tglobalHooksPath: `${cwd}/hooks.json`,\n\t\tpreSessionHookSourcePaths: [],\n\t\tprojectHookSourcePaths: [],\n\t\tprojectHooksPath: `${cwd}/.senpi/hooks.json`,\n\t\truntimeHookSourcePaths: [],\n\t};\n}\n\nexport {\n\tSUPPORTED_HOOK_EVENTS,\n\tUNSUPPORTED_HANDLER_TYPES,\n\tUNSUPPORTED_KNOWN_HOOK_EVENTS,\n} from \"./types.ts\";\n"]}
|
|
@@ -24,6 +24,8 @@ export declare function sessionStartResultDetails(result: HookDispatchResult | u
|
|
|
24
24
|
export declare function preCompactResultDetails(result: HookDispatchResult | undefined): LifecycleResultDetails;
|
|
25
25
|
export declare function postCompactResultDetails(result: HookDispatchResult | undefined): LifecycleResultDetails;
|
|
26
26
|
export declare function sessionBeforeCompactResult(details: LifecycleResultDetails): SessionBeforeCompactResult | undefined;
|
|
27
|
-
export declare function recordLifecycleHookResult(pi: Pick<ExtensionAPI, "sendMessage">, event: LifecycleHookEvent, details: LifecycleResultDetails
|
|
27
|
+
export declare function recordLifecycleHookResult(pi: Pick<ExtensionAPI, "sendMessage">, event: LifecycleHookEvent, details: LifecycleResultDetails, options?: {
|
|
28
|
+
compactionRequestId?: string;
|
|
29
|
+
}): void;
|
|
28
30
|
export {};
|
|
29
31
|
//# sourceMappingURL=lifecycle-adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-adapter.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/hooks/lifecycle-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,EACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG7E,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEvG,KAAK,kBAAkB,GAAG,cAAc,GAAG,YAAY,GAAG,aAAa,CAAC;AAExE,KAAK,wBAAwB,GAAG;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;CACpC,CAAC;AAcF,KAAK,sBAAsB,GAAG;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;IAChD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAWzG;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,yBAAyB,EAAE,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAa/G;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAa1G;AAED,wBAAsB,0BAA0B,CAC/C,OAAO,EAAE,wBAAwB,GAC/B,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAuBzC;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GAAG,sBAAsB,CAExG;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GAAG,sBAAsB,CActG;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GAAG,sBAAsB,CAEvG;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,sBAAsB,GAAG,0BAA0B,GAAG,SAAS,CAElH;AAED,wBAAgB,yBAAyB,CACxC,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,EACrC,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"lifecycle-adapter.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/hooks/lifecycle-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,EACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG7E,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEvG,KAAK,kBAAkB,GAAG,cAAc,GAAG,YAAY,GAAG,aAAa,CAAC;AAExE,KAAK,wBAAwB,GAAG;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;CACpC,CAAC;AAcF,KAAK,sBAAsB,GAAG;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;IAChD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAWzG;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,yBAAyB,EAAE,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAa/G;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAa1G;AAED,wBAAsB,0BAA0B,CAC/C,OAAO,EAAE,wBAAwB,GAC/B,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAuBzC;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GAAG,sBAAsB,CAExG;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GAAG,sBAAsB,CActG;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GAAG,sBAAsB,CAEvG;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,sBAAsB,GAAG,0BAA0B,GAAG,SAAS,CAElH;AAED,wBAAgB,yBAAyB,CACxC,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,EACrC,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,sBAAsB,EAC/B,OAAO,CAAC,EAAE;IAAE,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,IAAI,CAiBN"}
|
|
@@ -93,7 +93,7 @@ export function postCompactResultDetails(result) {
|
|
|
93
93
|
export function sessionBeforeCompactResult(details) {
|
|
94
94
|
return details.cancel ? { cancel: true } : undefined;
|
|
95
95
|
}
|
|
96
|
-
export function recordLifecycleHookResult(pi, event, details) {
|
|
96
|
+
export function recordLifecycleHookResult(pi, event, details, options) {
|
|
97
97
|
if (details.contexts.length === 0 && details.diagnostics.length === 0 && details.reason === undefined)
|
|
98
98
|
return;
|
|
99
99
|
const content = details.contexts.length > 0 ? details.contexts.join("\n\n") : (details.reason ?? `${event} hook diagnostics.`);
|
|
@@ -104,6 +104,7 @@ export function recordLifecycleHookResult(pi, event, details) {
|
|
|
104
104
|
details: {
|
|
105
105
|
event,
|
|
106
106
|
diagnostics: details.diagnostics.map(safeDiagnosticDetails),
|
|
107
|
+
...(options?.compactionRequestId === undefined ? {} : { compactionRequestId: options.compactionRequestId }),
|
|
107
108
|
},
|
|
108
109
|
}, { triggerTurn: false });
|
|
109
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-adapter.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/hooks/lifecycle-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tExtensionAPI,\n\tExtensionContext,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeCompactResult,\n\tSessionCompactEvent,\n\tSessionStartEvent,\n} from \"../../types.ts\";\nimport { diagnostic } from \"./diagnostics.ts\";\nimport { dispatchHookEvent, type HookDispatchResult } from \"./dispatcher.ts\";\nimport { HOOK_CUSTOM_MESSAGE_TYPE, safeDiagnosticDetails } from \"./prompt-adapter.ts\";\nimport { createHookTrustEntry, hookTrustId, listHookTrustRecords } from \"./trust.ts\";\nimport type { ExecutableHookHandler, HookDiagnostic, HookInputWire, HookTrustState } from \"./types.ts\";\n\ntype LifecycleHookEvent = \"SessionStart\" | \"PreCompact\" | \"PostCompact\";\n\ntype LifecycleDispatchOptions = {\n\treadonly cwd: string;\n\treadonly handlers: readonly ExecutableHookHandler[];\n\treadonly input: HookInputWire;\n\treadonly matcherInputs: readonly string[];\n\treadonly signal?: AbortSignal;\n\treadonly trustState: HookTrustState;\n};\n\ntype LifecycleDispatchSelection = {\n\treadonly diagnostics: readonly HookDiagnostic[];\n\treadonly handlers: readonly ExecutableHookHandler[];\n};\n\ntype LifecycleHookOutput = {\n\treadonly additionalContext?: string;\n\treadonly customInstructions?: string;\n\treadonly decision?: string;\n\treadonly reason?: string;\n};\n\ntype LifecycleResultDetails = {\n\treadonly cancel: boolean;\n\treadonly contexts: readonly string[];\n\treadonly diagnostics: readonly HookDiagnostic[];\n\treadonly reason?: string;\n};\n\nexport function buildSessionStartHookInput(event: SessionStartEvent, ctx: ExtensionContext): HookInputWire {\n\tconst transcriptPath = ctx.sessionManager.getSessionFile();\n\treturn {\n\t\tcwd: ctx.cwd,\n\t\tevent: \"SessionStart\",\n\t\thook_event_name: \"SessionStart\",\n\t\treason: event.reason,\n\t\tsessionId: ctx.sessionManager.getSessionId(),\n\t\tsession_id: ctx.sessionManager.getSessionId(),\n\t\t...(transcriptPath === undefined ? {} : { transcript_path: transcriptPath }),\n\t};\n}\n\nexport function buildPreCompactHookInput(event: SessionBeforeCompactEvent, ctx: ExtensionContext): HookInputWire {\n\tconst transcriptPath = ctx.sessionManager.getSessionFile();\n\treturn {\n\t\tcwd: ctx.cwd,\n\t\tevent: \"PreCompact\",\n\t\thook_event_name: \"PreCompact\",\n\t\treason: event.reason,\n\t\trequest_id: event.requestId,\n\t\tsession_id: ctx.sessionManager.getSessionId(),\n\t\twill_retry: event.willRetry,\n\t\t...(event.customInstructions === undefined ? {} : { custom_instructions: event.customInstructions }),\n\t\t...(transcriptPath === undefined ? {} : { transcript_path: transcriptPath }),\n\t};\n}\n\nexport function buildPostCompactHookInput(event: SessionCompactEvent, ctx: ExtensionContext): HookInputWire {\n\tconst transcriptPath = ctx.sessionManager.getSessionFile();\n\treturn {\n\t\taccepted: event.accepted,\n\t\tcwd: ctx.cwd,\n\t\tevent: \"PostCompact\",\n\t\thook_event_name: \"PostCompact\",\n\t\treason: event.reason,\n\t\trequest_id: event.requestId,\n\t\tsession_id: ctx.sessionManager.getSessionId(),\n\t\twill_retry: event.willRetry,\n\t\t...(transcriptPath === undefined ? {} : { transcript_path: transcriptPath }),\n\t};\n}\n\nexport async function dispatchLifecycleHookEvent(\n\toptions: LifecycleDispatchOptions,\n): Promise<HookDispatchResult | undefined> {\n\tconst selection = selectLifecycleHandlers(options);\n\tif (selection.handlers.length === 0 && selection.diagnostics.length === 0) return undefined;\n\tconst trustedHandlers = selection.handlers.map((handler) => stripLifecycleMatcher(handler));\n\tconst hooks: Record<string, ReturnType<typeof createHookTrustEntry>> = {};\n\tfor (const handler of trustedHandlers) {\n\t\thooks[hookTrustId(handler)] = createHookTrustEntry(handler, {\n\t\t\tplatform: process.platform,\n\t\t\tupdatedAt: \"2026-06-29T00:00:00.000Z\",\n\t\t});\n\t}\n\tconst result = await dispatchHookEvent({\n\t\tcwd: options.cwd,\n\t\thandlers: trustedHandlers,\n\t\tinput: options.input,\n\t\t...(options.signal === undefined ? {} : { signal: options.signal }),\n\t\ttrustOptions: { platform: process.platform },\n\t\ttrustState: { hooks, version: 1 },\n\t});\n\treturn {\n\t\t...result,\n\t\tdiagnostics: [...selection.diagnostics, ...result.diagnostics],\n\t};\n}\n\nexport function sessionStartResultDetails(result: HookDispatchResult | undefined): LifecycleResultDetails {\n\treturn lifecycleResultDetails(\"SessionStart\", result);\n}\n\nexport function preCompactResultDetails(result: HookDispatchResult | undefined): LifecycleResultDetails {\n\tconst details = lifecycleResultDetails(\"PreCompact\", result);\n\tif (details.cancel) return details;\n\tconst blocker = result?.summaries.find((summary) => {\n\t\tconst output = readLifecycleHookOutput(\"PreCompact\", summary.run.stdout);\n\t\treturn output?.decision === \"block\" || output?.decision === \"deny\";\n\t});\n\tif (blocker === undefined) return details;\n\tconst output = readLifecycleHookOutput(\"PreCompact\", blocker.run.stdout);\n\treturn {\n\t\t...details,\n\t\tcancel: true,\n\t\t...(output?.reason === undefined ? {} : { reason: output.reason }),\n\t};\n}\n\nexport function postCompactResultDetails(result: HookDispatchResult | undefined): LifecycleResultDetails {\n\treturn lifecycleResultDetails(\"PostCompact\", result);\n}\n\nexport function sessionBeforeCompactResult(details: LifecycleResultDetails): SessionBeforeCompactResult | undefined {\n\treturn details.cancel ? { cancel: true } : undefined;\n}\n\nexport function recordLifecycleHookResult(\n\tpi: Pick<ExtensionAPI, \"sendMessage\">,\n\tevent: LifecycleHookEvent,\n\tdetails: LifecycleResultDetails,\n): void {\n\tif (details.contexts.length === 0 && details.diagnostics.length === 0 && details.reason === undefined) return;\n\tconst content =\n\t\tdetails.contexts.length > 0 ? details.contexts.join(\"\\n\\n\") : (details.reason ?? `${event} hook diagnostics.`);\n\tpi.sendMessage(\n\t\t{\n\t\t\tcustomType: HOOK_CUSTOM_MESSAGE_TYPE,\n\t\t\tcontent,\n\t\t\tdisplay: false,\n\t\t\tdetails: {\n\t\t\t\tevent,\n\t\t\t\tdiagnostics: details.diagnostics.map(safeDiagnosticDetails),\n\t\t\t},\n\t\t},\n\t\t{ triggerTurn: false },\n\t);\n}\n\nfunction selectLifecycleHandlers(options: LifecycleDispatchOptions): LifecycleDispatchSelection {\n\tconst matched: ExecutableHookHandler[] = [];\n\tconst diagnostics: HookDiagnostic[] = [];\n\tfor (const handler of options.handlers) {\n\t\tif (handler.event !== options.input.event) continue;\n\t\tif (isInitialRuntimeSessionStart(handler, options.input)) {\n\t\t\tdiagnostics.push(\n\t\t\t\tdiagnostic(\n\t\t\t\t\t{\n\t\t\t\t\t\tcode: \"unsupported_event\",\n\t\t\t\t\t\tevent: \"SessionStart\",\n\t\t\t\t\t\tmessage: \"Runtime SessionStart hooks are loaded for reload or the next session only.\",\n\t\t\t\t\t\tpath: \"hooks.SessionStart\",\n\t\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\t},\n\t\t\t\t\thandler.source,\n\t\t\t\t),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tconst match = matchesLifecycleMatcher(handler, options.matcherInputs);\n\t\tdiagnostics.push(...match.diagnostics);\n\t\tif (match.matched) matched.push(handler);\n\t}\n\tconst trustRecords = listHookTrustRecords(matched, options.trustState, { platform: process.platform });\n\tconst trusted = matched.filter((_handler, index) => trustRecords[index]?.executable === true);\n\treturn { diagnostics, handlers: trusted };\n}\n\nfunction isInitialRuntimeSessionStart(handler: ExecutableHookHandler, input: HookInputWire): boolean {\n\treturn input.event === \"SessionStart\" && input.reason === \"startup\" && handler.source.discoveredAt === \"runtime\";\n}\n\nfunction matchesLifecycleMatcher(\n\thandler: ExecutableHookHandler,\n\tinputs: readonly string[],\n): { readonly diagnostics: readonly HookDiagnostic[]; readonly matched: boolean } {\n\tconst matcher = handler.matcher?.trim();\n\tif (matcher === undefined || matcher.length === 0 || matcher === \"*\") {\n\t\treturn { diagnostics: [], matched: true };\n\t}\n\tconst literalMatched = matcher\n\t\t.split(/[|,]/)\n\t\t.map((part) => part.trim())\n\t\t.filter((part) => part.length > 0)\n\t\t.some((part) => inputs.includes(part));\n\ttry {\n\t\tconst regex = new RegExp(matcher);\n\t\treturn { diagnostics: [], matched: literalMatched || inputs.some((input) => regex.test(input)) };\n\t} catch (error) {\n\t\tif (error instanceof SyntaxError) {\n\t\t\treturn {\n\t\t\t\tdiagnostics: [\n\t\t\t\t\tdiagnostic(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: \"invalid_matcher\",\n\t\t\t\t\t\t\tevent: handler.event,\n\t\t\t\t\t\t\tmessage: `Hook matcher is not a valid JavaScript regular expression: ${error.message}`,\n\t\t\t\t\t\t\tpath: `hooks.${handler.event}[${handler.groupIndex}].matcher`,\n\t\t\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\thandler.source,\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t\tmatched: literalMatched,\n\t\t\t};\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction stripLifecycleMatcher(handler: ExecutableHookHandler): ExecutableHookHandler {\n\treturn {\n\t\tconfig: handler.config,\n\t\tevent: handler.event,\n\t\tgroupIndex: handler.groupIndex,\n\t\thandlerIndex: handler.handlerIndex,\n\t\tsource: handler.source,\n\t};\n}\n\nfunction lifecycleResultDetails(\n\tevent: LifecycleHookEvent,\n\tresult: HookDispatchResult | undefined,\n): LifecycleResultDetails {\n\tif (result === undefined) {\n\t\treturn { cancel: false, contexts: [], diagnostics: [] };\n\t}\n\tconst diagnostics = [...result.diagnostics, ...commandFailureDiagnostics(event, result)];\n\tconst contexts: string[] = [];\n\tfor (const summary of result.summaries) {\n\t\tconst output = readLifecycleHookOutput(event, summary.run.stdout);\n\t\tif (output?.additionalContext !== undefined && event !== \"PreCompact\") {\n\t\t\tcontexts.push(output.additionalContext);\n\t\t}\n\t\tif (event === \"PreCompact\") {\n\t\t\tdiagnostics.push(...preCompactUnsupportedDiagnostics(summary.handler, output));\n\t\t}\n\t}\n\tconst reason = event === \"PreCompact\" && result.decision.kind === \"block\" ? result.decision.reason : undefined;\n\treturn {\n\t\tcancel: event === \"PreCompact\" && result.decision.kind === \"block\",\n\t\tcontexts,\n\t\tdiagnostics,\n\t\t...(reason === undefined ? {} : { reason }),\n\t};\n}\n\nfunction commandFailureDiagnostics(event: LifecycleHookEvent, result: HookDispatchResult): readonly HookDiagnostic[] {\n\treturn result.summaries.flatMap((summary) => {\n\t\tif (summary.run.exitCode === 0 || (summary.run.exitCode === 2 && event === \"PreCompact\")) return [];\n\t\tconst status = summary.run.exitCode === null ? \"without an exit code\" : `with exit code ${summary.run.exitCode}`;\n\t\treturn [\n\t\t\tdiagnostic(\n\t\t\t\t{\n\t\t\t\t\tcode: \"invalid_root\",\n\t\t\t\t\tevent,\n\t\t\t\t\tmessage: `Hook command failed ${status}.`,\n\t\t\t\t\tpath: \"process.exitCode\",\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t},\n\t\t\t\tsummary.handler.source,\n\t\t\t),\n\t\t];\n\t});\n}\n\nfunction preCompactUnsupportedDiagnostics(\n\thandler: ExecutableHookHandler,\n\toutput: LifecycleHookOutput | undefined,\n): readonly HookDiagnostic[] {\n\tif (output === undefined) return [];\n\tconst diagnostics: HookDiagnostic[] = [];\n\tif (output.additionalContext !== undefined) {\n\t\tdiagnostics.push(\n\t\t\tdiagnostic(\n\t\t\t\t{\n\t\t\t\t\tcode: \"unsupported_field\",\n\t\t\t\t\tevent: \"PreCompact\",\n\t\t\t\t\tmessage: \"PreCompact additionalContext is diagnostic-only in builtin hooks v1.\",\n\t\t\t\t\tpath: \"stdout.hookSpecificOutput.additionalContext\",\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t},\n\t\t\t\thandler.source,\n\t\t\t),\n\t\t);\n\t}\n\tif (output.customInstructions !== undefined) {\n\t\tdiagnostics.push(\n\t\t\tdiagnostic(\n\t\t\t\t{\n\t\t\t\t\tcode: \"unsupported_field\",\n\t\t\t\t\tevent: \"PreCompact\",\n\t\t\t\t\tmessage: \"PreCompact customInstructions cannot mutate compaction in builtin hooks v1.\",\n\t\t\t\t\tpath: \"stdout.hookSpecificOutput.customInstructions\",\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t},\n\t\t\t\thandler.source,\n\t\t\t),\n\t\t);\n\t}\n\treturn diagnostics;\n}\n\nfunction readLifecycleHookOutput(event: LifecycleHookEvent, stdout: string): LifecycleHookOutput | undefined {\n\tconst trimmed = stdout.trim();\n\tif (trimmed.length === 0) return undefined;\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(trimmed);\n\t} catch (error) {\n\t\tif (error instanceof SyntaxError) return undefined;\n\t\tthrow error;\n\t}\n\tif (!isRecord(parsed)) return undefined;\n\tconst specific = isRecord(parsed.hookSpecificOutput) ? parsed.hookSpecificOutput : undefined;\n\tif (specific?.hookEventName !== undefined && specific.hookEventName !== event) return undefined;\n\treturn {\n\t\t...textField(specific?.additionalContext ?? parsed.additionalContext, \"additionalContext\"),\n\t\t...textField(specific?.customInstructions ?? parsed.customInstructions, \"customInstructions\"),\n\t\t...textField(parsed.decision, \"decision\"),\n\t\t...textField(specific?.permissionDecisionReason ?? parsed.reason, \"reason\"),\n\t};\n}\n\nfunction textField<K extends keyof LifecycleHookOutput>(\n\tvalue: unknown,\n\tkey: K,\n): Pick<LifecycleHookOutput, K> | Record<string, never> {\n\tif (typeof value !== \"string\") return {};\n\tconst trimmed = value.trim();\n\treturn trimmed.length === 0 ? {} : ({ [key]: trimmed } as Pick<LifecycleHookOutput, K>);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"lifecycle-adapter.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/hooks/lifecycle-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tExtensionAPI,\n\tExtensionContext,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeCompactResult,\n\tSessionCompactEvent,\n\tSessionStartEvent,\n} from \"../../types.ts\";\nimport { diagnostic } from \"./diagnostics.ts\";\nimport { dispatchHookEvent, type HookDispatchResult } from \"./dispatcher.ts\";\nimport { HOOK_CUSTOM_MESSAGE_TYPE, safeDiagnosticDetails } from \"./prompt-adapter.ts\";\nimport { createHookTrustEntry, hookTrustId, listHookTrustRecords } from \"./trust.ts\";\nimport type { ExecutableHookHandler, HookDiagnostic, HookInputWire, HookTrustState } from \"./types.ts\";\n\ntype LifecycleHookEvent = \"SessionStart\" | \"PreCompact\" | \"PostCompact\";\n\ntype LifecycleDispatchOptions = {\n\treadonly cwd: string;\n\treadonly handlers: readonly ExecutableHookHandler[];\n\treadonly input: HookInputWire;\n\treadonly matcherInputs: readonly string[];\n\treadonly signal?: AbortSignal;\n\treadonly trustState: HookTrustState;\n};\n\ntype LifecycleDispatchSelection = {\n\treadonly diagnostics: readonly HookDiagnostic[];\n\treadonly handlers: readonly ExecutableHookHandler[];\n};\n\ntype LifecycleHookOutput = {\n\treadonly additionalContext?: string;\n\treadonly customInstructions?: string;\n\treadonly decision?: string;\n\treadonly reason?: string;\n};\n\ntype LifecycleResultDetails = {\n\treadonly cancel: boolean;\n\treadonly contexts: readonly string[];\n\treadonly diagnostics: readonly HookDiagnostic[];\n\treadonly reason?: string;\n};\n\nexport function buildSessionStartHookInput(event: SessionStartEvent, ctx: ExtensionContext): HookInputWire {\n\tconst transcriptPath = ctx.sessionManager.getSessionFile();\n\treturn {\n\t\tcwd: ctx.cwd,\n\t\tevent: \"SessionStart\",\n\t\thook_event_name: \"SessionStart\",\n\t\treason: event.reason,\n\t\tsessionId: ctx.sessionManager.getSessionId(),\n\t\tsession_id: ctx.sessionManager.getSessionId(),\n\t\t...(transcriptPath === undefined ? {} : { transcript_path: transcriptPath }),\n\t};\n}\n\nexport function buildPreCompactHookInput(event: SessionBeforeCompactEvent, ctx: ExtensionContext): HookInputWire {\n\tconst transcriptPath = ctx.sessionManager.getSessionFile();\n\treturn {\n\t\tcwd: ctx.cwd,\n\t\tevent: \"PreCompact\",\n\t\thook_event_name: \"PreCompact\",\n\t\treason: event.reason,\n\t\trequest_id: event.requestId,\n\t\tsession_id: ctx.sessionManager.getSessionId(),\n\t\twill_retry: event.willRetry,\n\t\t...(event.customInstructions === undefined ? {} : { custom_instructions: event.customInstructions }),\n\t\t...(transcriptPath === undefined ? {} : { transcript_path: transcriptPath }),\n\t};\n}\n\nexport function buildPostCompactHookInput(event: SessionCompactEvent, ctx: ExtensionContext): HookInputWire {\n\tconst transcriptPath = ctx.sessionManager.getSessionFile();\n\treturn {\n\t\taccepted: event.accepted,\n\t\tcwd: ctx.cwd,\n\t\tevent: \"PostCompact\",\n\t\thook_event_name: \"PostCompact\",\n\t\treason: event.reason,\n\t\trequest_id: event.requestId,\n\t\tsession_id: ctx.sessionManager.getSessionId(),\n\t\twill_retry: event.willRetry,\n\t\t...(transcriptPath === undefined ? {} : { transcript_path: transcriptPath }),\n\t};\n}\n\nexport async function dispatchLifecycleHookEvent(\n\toptions: LifecycleDispatchOptions,\n): Promise<HookDispatchResult | undefined> {\n\tconst selection = selectLifecycleHandlers(options);\n\tif (selection.handlers.length === 0 && selection.diagnostics.length === 0) return undefined;\n\tconst trustedHandlers = selection.handlers.map((handler) => stripLifecycleMatcher(handler));\n\tconst hooks: Record<string, ReturnType<typeof createHookTrustEntry>> = {};\n\tfor (const handler of trustedHandlers) {\n\t\thooks[hookTrustId(handler)] = createHookTrustEntry(handler, {\n\t\t\tplatform: process.platform,\n\t\t\tupdatedAt: \"2026-06-29T00:00:00.000Z\",\n\t\t});\n\t}\n\tconst result = await dispatchHookEvent({\n\t\tcwd: options.cwd,\n\t\thandlers: trustedHandlers,\n\t\tinput: options.input,\n\t\t...(options.signal === undefined ? {} : { signal: options.signal }),\n\t\ttrustOptions: { platform: process.platform },\n\t\ttrustState: { hooks, version: 1 },\n\t});\n\treturn {\n\t\t...result,\n\t\tdiagnostics: [...selection.diagnostics, ...result.diagnostics],\n\t};\n}\n\nexport function sessionStartResultDetails(result: HookDispatchResult | undefined): LifecycleResultDetails {\n\treturn lifecycleResultDetails(\"SessionStart\", result);\n}\n\nexport function preCompactResultDetails(result: HookDispatchResult | undefined): LifecycleResultDetails {\n\tconst details = lifecycleResultDetails(\"PreCompact\", result);\n\tif (details.cancel) return details;\n\tconst blocker = result?.summaries.find((summary) => {\n\t\tconst output = readLifecycleHookOutput(\"PreCompact\", summary.run.stdout);\n\t\treturn output?.decision === \"block\" || output?.decision === \"deny\";\n\t});\n\tif (blocker === undefined) return details;\n\tconst output = readLifecycleHookOutput(\"PreCompact\", blocker.run.stdout);\n\treturn {\n\t\t...details,\n\t\tcancel: true,\n\t\t...(output?.reason === undefined ? {} : { reason: output.reason }),\n\t};\n}\n\nexport function postCompactResultDetails(result: HookDispatchResult | undefined): LifecycleResultDetails {\n\treturn lifecycleResultDetails(\"PostCompact\", result);\n}\n\nexport function sessionBeforeCompactResult(details: LifecycleResultDetails): SessionBeforeCompactResult | undefined {\n\treturn details.cancel ? { cancel: true } : undefined;\n}\n\nexport function recordLifecycleHookResult(\n\tpi: Pick<ExtensionAPI, \"sendMessage\">,\n\tevent: LifecycleHookEvent,\n\tdetails: LifecycleResultDetails,\n\toptions?: { compactionRequestId?: string },\n): void {\n\tif (details.contexts.length === 0 && details.diagnostics.length === 0 && details.reason === undefined) return;\n\tconst content =\n\t\tdetails.contexts.length > 0 ? details.contexts.join(\"\\n\\n\") : (details.reason ?? `${event} hook diagnostics.`);\n\tpi.sendMessage(\n\t\t{\n\t\t\tcustomType: HOOK_CUSTOM_MESSAGE_TYPE,\n\t\t\tcontent,\n\t\t\tdisplay: false,\n\t\t\tdetails: {\n\t\t\t\tevent,\n\t\t\t\tdiagnostics: details.diagnostics.map(safeDiagnosticDetails),\n\t\t\t\t...(options?.compactionRequestId === undefined ? {} : { compactionRequestId: options.compactionRequestId }),\n\t\t\t},\n\t\t},\n\t\t{ triggerTurn: false },\n\t);\n}\n\nfunction selectLifecycleHandlers(options: LifecycleDispatchOptions): LifecycleDispatchSelection {\n\tconst matched: ExecutableHookHandler[] = [];\n\tconst diagnostics: HookDiagnostic[] = [];\n\tfor (const handler of options.handlers) {\n\t\tif (handler.event !== options.input.event) continue;\n\t\tif (isInitialRuntimeSessionStart(handler, options.input)) {\n\t\t\tdiagnostics.push(\n\t\t\t\tdiagnostic(\n\t\t\t\t\t{\n\t\t\t\t\t\tcode: \"unsupported_event\",\n\t\t\t\t\t\tevent: \"SessionStart\",\n\t\t\t\t\t\tmessage: \"Runtime SessionStart hooks are loaded for reload or the next session only.\",\n\t\t\t\t\t\tpath: \"hooks.SessionStart\",\n\t\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\t},\n\t\t\t\t\thandler.source,\n\t\t\t\t),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tconst match = matchesLifecycleMatcher(handler, options.matcherInputs);\n\t\tdiagnostics.push(...match.diagnostics);\n\t\tif (match.matched) matched.push(handler);\n\t}\n\tconst trustRecords = listHookTrustRecords(matched, options.trustState, { platform: process.platform });\n\tconst trusted = matched.filter((_handler, index) => trustRecords[index]?.executable === true);\n\treturn { diagnostics, handlers: trusted };\n}\n\nfunction isInitialRuntimeSessionStart(handler: ExecutableHookHandler, input: HookInputWire): boolean {\n\treturn input.event === \"SessionStart\" && input.reason === \"startup\" && handler.source.discoveredAt === \"runtime\";\n}\n\nfunction matchesLifecycleMatcher(\n\thandler: ExecutableHookHandler,\n\tinputs: readonly string[],\n): { readonly diagnostics: readonly HookDiagnostic[]; readonly matched: boolean } {\n\tconst matcher = handler.matcher?.trim();\n\tif (matcher === undefined || matcher.length === 0 || matcher === \"*\") {\n\t\treturn { diagnostics: [], matched: true };\n\t}\n\tconst literalMatched = matcher\n\t\t.split(/[|,]/)\n\t\t.map((part) => part.trim())\n\t\t.filter((part) => part.length > 0)\n\t\t.some((part) => inputs.includes(part));\n\ttry {\n\t\tconst regex = new RegExp(matcher);\n\t\treturn { diagnostics: [], matched: literalMatched || inputs.some((input) => regex.test(input)) };\n\t} catch (error) {\n\t\tif (error instanceof SyntaxError) {\n\t\t\treturn {\n\t\t\t\tdiagnostics: [\n\t\t\t\t\tdiagnostic(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: \"invalid_matcher\",\n\t\t\t\t\t\t\tevent: handler.event,\n\t\t\t\t\t\t\tmessage: `Hook matcher is not a valid JavaScript regular expression: ${error.message}`,\n\t\t\t\t\t\t\tpath: `hooks.${handler.event}[${handler.groupIndex}].matcher`,\n\t\t\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\thandler.source,\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t\tmatched: literalMatched,\n\t\t\t};\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction stripLifecycleMatcher(handler: ExecutableHookHandler): ExecutableHookHandler {\n\treturn {\n\t\tconfig: handler.config,\n\t\tevent: handler.event,\n\t\tgroupIndex: handler.groupIndex,\n\t\thandlerIndex: handler.handlerIndex,\n\t\tsource: handler.source,\n\t};\n}\n\nfunction lifecycleResultDetails(\n\tevent: LifecycleHookEvent,\n\tresult: HookDispatchResult | undefined,\n): LifecycleResultDetails {\n\tif (result === undefined) {\n\t\treturn { cancel: false, contexts: [], diagnostics: [] };\n\t}\n\tconst diagnostics = [...result.diagnostics, ...commandFailureDiagnostics(event, result)];\n\tconst contexts: string[] = [];\n\tfor (const summary of result.summaries) {\n\t\tconst output = readLifecycleHookOutput(event, summary.run.stdout);\n\t\tif (output?.additionalContext !== undefined && event !== \"PreCompact\") {\n\t\t\tcontexts.push(output.additionalContext);\n\t\t}\n\t\tif (event === \"PreCompact\") {\n\t\t\tdiagnostics.push(...preCompactUnsupportedDiagnostics(summary.handler, output));\n\t\t}\n\t}\n\tconst reason = event === \"PreCompact\" && result.decision.kind === \"block\" ? result.decision.reason : undefined;\n\treturn {\n\t\tcancel: event === \"PreCompact\" && result.decision.kind === \"block\",\n\t\tcontexts,\n\t\tdiagnostics,\n\t\t...(reason === undefined ? {} : { reason }),\n\t};\n}\n\nfunction commandFailureDiagnostics(event: LifecycleHookEvent, result: HookDispatchResult): readonly HookDiagnostic[] {\n\treturn result.summaries.flatMap((summary) => {\n\t\tif (summary.run.exitCode === 0 || (summary.run.exitCode === 2 && event === \"PreCompact\")) return [];\n\t\tconst status = summary.run.exitCode === null ? \"without an exit code\" : `with exit code ${summary.run.exitCode}`;\n\t\treturn [\n\t\t\tdiagnostic(\n\t\t\t\t{\n\t\t\t\t\tcode: \"invalid_root\",\n\t\t\t\t\tevent,\n\t\t\t\t\tmessage: `Hook command failed ${status}.`,\n\t\t\t\t\tpath: \"process.exitCode\",\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t},\n\t\t\t\tsummary.handler.source,\n\t\t\t),\n\t\t];\n\t});\n}\n\nfunction preCompactUnsupportedDiagnostics(\n\thandler: ExecutableHookHandler,\n\toutput: LifecycleHookOutput | undefined,\n): readonly HookDiagnostic[] {\n\tif (output === undefined) return [];\n\tconst diagnostics: HookDiagnostic[] = [];\n\tif (output.additionalContext !== undefined) {\n\t\tdiagnostics.push(\n\t\t\tdiagnostic(\n\t\t\t\t{\n\t\t\t\t\tcode: \"unsupported_field\",\n\t\t\t\t\tevent: \"PreCompact\",\n\t\t\t\t\tmessage: \"PreCompact additionalContext is diagnostic-only in builtin hooks v1.\",\n\t\t\t\t\tpath: \"stdout.hookSpecificOutput.additionalContext\",\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t},\n\t\t\t\thandler.source,\n\t\t\t),\n\t\t);\n\t}\n\tif (output.customInstructions !== undefined) {\n\t\tdiagnostics.push(\n\t\t\tdiagnostic(\n\t\t\t\t{\n\t\t\t\t\tcode: \"unsupported_field\",\n\t\t\t\t\tevent: \"PreCompact\",\n\t\t\t\t\tmessage: \"PreCompact customInstructions cannot mutate compaction in builtin hooks v1.\",\n\t\t\t\t\tpath: \"stdout.hookSpecificOutput.customInstructions\",\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t},\n\t\t\t\thandler.source,\n\t\t\t),\n\t\t);\n\t}\n\treturn diagnostics;\n}\n\nfunction readLifecycleHookOutput(event: LifecycleHookEvent, stdout: string): LifecycleHookOutput | undefined {\n\tconst trimmed = stdout.trim();\n\tif (trimmed.length === 0) return undefined;\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(trimmed);\n\t} catch (error) {\n\t\tif (error instanceof SyntaxError) return undefined;\n\t\tthrow error;\n\t}\n\tif (!isRecord(parsed)) return undefined;\n\tconst specific = isRecord(parsed.hookSpecificOutput) ? parsed.hookSpecificOutput : undefined;\n\tif (specific?.hookEventName !== undefined && specific.hookEventName !== event) return undefined;\n\treturn {\n\t\t...textField(specific?.additionalContext ?? parsed.additionalContext, \"additionalContext\"),\n\t\t...textField(specific?.customInstructions ?? parsed.customInstructions, \"customInstructions\"),\n\t\t...textField(parsed.decision, \"decision\"),\n\t\t...textField(specific?.permissionDecisionReason ?? parsed.reason, \"reason\"),\n\t};\n}\n\nfunction textField<K extends keyof LifecycleHookOutput>(\n\tvalue: unknown,\n\tkey: K,\n): Pick<LifecycleHookOutput, K> | Record<string, never> {\n\tif (typeof value !== \"string\") return {};\n\tconst trimmed = value.trim();\n\treturn trimmed.length === 0 ? {} : ({ [key]: trimmed } as Pick<LifecycleHookOutput, K>);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { ExtensionAPI, ExtensionCommandContext } from "../../../types.ts";
|
|
2
|
-
|
|
2
|
+
import type { McpService } from "../service.ts";
|
|
3
|
+
export declare function handleMcpAuthCommand(subcommand: string, args: readonly string[], ctx: ExtensionCommandContext, pi: Pick<ExtensionAPI, "getActiveTools" | "setActiveTools" | "registerTool">, service: McpService): Promise<void>;
|
|
3
4
|
//# sourceMappingURL=commands-auth-dispatch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands-auth-dispatch.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/commands-auth-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"commands-auth-dispatch.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/commands-auth-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAKhD,wBAAsB,oBAAoB,CACzC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,uBAAuB,EAC5B,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,cAAc,CAAC,EAC5E,OAAO,EAAE,UAAU,GACjB,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { createMcpLogger } from "../log.js";
|
|
2
|
-
import { getMcpService } from "../service.js";
|
|
3
2
|
import { runAuth, runAuthComplete, runAuthStart, runLogout } from "./commands-auth.js";
|
|
4
3
|
// Bridges the /mcp slash command to the pure auth flow runners in
|
|
5
4
|
// commands-auth.ts, sourcing config/agentDir/env from the running service.
|
|
6
|
-
export async function handleMcpAuthCommand(subcommand, args, ctx, pi) {
|
|
5
|
+
export async function handleMcpAuthCommand(subcommand, args, ctx, pi, service) {
|
|
7
6
|
const name = args[0] ?? "";
|
|
8
|
-
const service = getMcpService();
|
|
9
7
|
const target = service.getAuthTarget(name);
|
|
10
8
|
if (name.length === 0 || target === undefined) {
|
|
11
9
|
ctx.ui.notify(`Unknown MCP server: ${name || "<missing>"}`, "error");
|
|
@@ -30,6 +28,10 @@ export async function handleMcpAuthCommand(subcommand, args, ctx, pi) {
|
|
|
30
28
|
},
|
|
31
29
|
openBrowser: (url) => ctx.ui.notify(`Open this URL to authorize ${name}:\n${url.toString()}`),
|
|
32
30
|
pending: service.getPendingAuth(),
|
|
31
|
+
interactiveGuard: {
|
|
32
|
+
begin: (serverName) => service.beginInteractiveAuth(serverName),
|
|
33
|
+
end: (serverName) => service.endInteractiveAuth(serverName),
|
|
34
|
+
},
|
|
33
35
|
serverName: name,
|
|
34
36
|
};
|
|
35
37
|
if (subcommand === "auth")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands-auth-dispatch.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/commands-auth-dispatch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"commands-auth-dispatch.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/commands-auth-dispatch.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionAPI, ExtensionCommandContext } from \"../../../types.ts\";\nimport { createMcpLogger } from \"../log.ts\";\nimport type { McpService } from \"../service.ts\";\nimport { type AuthCommandDeps, runAuth, runAuthComplete, runAuthStart, runLogout } from \"./commands-auth.ts\";\n\n// Bridges the /mcp slash command to the pure auth flow runners in\n// commands-auth.ts, sourcing config/agentDir/env from the running service.\nexport async function handleMcpAuthCommand(\n\tsubcommand: string,\n\targs: readonly string[],\n\tctx: ExtensionCommandContext,\n\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n\tservice: McpService,\n): Promise<void> {\n\tconst name = args[0] ?? \"\";\n\tconst target = service.getAuthTarget(name);\n\tif (name.length === 0 || target === undefined) {\n\t\tctx.ui.notify(`Unknown MCP server: ${name || \"<missing>\"}`, \"error\");\n\t\treturn;\n\t}\n\tconst deps: AuthCommandDeps = {\n\t\tagentDir: target.agentDir,\n\t\tcallbackUrl: target.callbackUrl,\n\t\tconfig: target.config,\n\t\tenv: target.env,\n\t\thasUI: ctx.hasUI,\n\t\tlogger: createMcpLogger(name),\n\t\tnotify: (message, type) => ctx.ui.notify(message, type),\n\t\tonReconnect: async () => {\n\t\t\ttry {\n\t\t\t\tawait service.reconnectServer(name);\n\t\t\t} catch {\n\t\t\t\t// A needs_auth/degraded state after logout is expected; status shows it.\n\t\t\t}\n\t\t\tawait service.attachSession({ type: \"session_start\", reason: \"reload\" }, ctx, pi).catch(() => undefined);\n\t\t},\n\t\topenBrowser: (url) => ctx.ui.notify(`Open this URL to authorize ${name}:\\n${url.toString()}`),\n\t\tpending: service.getPendingAuth(),\n\t\tinteractiveGuard: {\n\t\t\tbegin: (serverName) => service.beginInteractiveAuth(serverName),\n\t\t\tend: (serverName) => service.endInteractiveAuth(serverName),\n\t\t},\n\t\tserverName: name,\n\t};\n\tif (subcommand === \"auth\") return runAuth(deps);\n\tif (subcommand === \"auth-start\") {\n\t\tawait runAuthStart(deps);\n\t\treturn;\n\t}\n\tif (subcommand === \"auth-complete\") {\n\t\tconst redirect = args[1] ?? \"\";\n\t\tif (redirect.length === 0) {\n\t\t\tctx.ui.notify(`Usage: /mcp auth-complete ${name} <redirect-url>`, \"error\");\n\t\t\treturn;\n\t\t}\n\t\treturn runAuthComplete(deps, redirect);\n\t}\n\tif (subcommand === \"logout\") return runLogout(deps);\n\tctx.ui.notify(`Unknown MCP auth subcommand: ${subcommand}`, \"error\");\n}\n"]}
|
|
@@ -15,6 +15,11 @@ export interface AuthCommandDeps {
|
|
|
15
15
|
openBrowser?: (url: URL) => void | Promise<void>;
|
|
16
16
|
onReconnect: () => Promise<void>;
|
|
17
17
|
pending: Map<string, McpOAuthProvider>;
|
|
18
|
+
/** Per-service guard: the same server may authenticate in another session. */
|
|
19
|
+
interactiveGuard?: {
|
|
20
|
+
begin(serverName: string): boolean;
|
|
21
|
+
end(serverName: string): void;
|
|
22
|
+
};
|
|
18
23
|
flow?: OAuthFlowOptions;
|
|
19
24
|
}
|
|
20
25
|
export declare function runAuth(deps: AuthCommandDeps): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands-auth.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/commands-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,KAAK,IAAI,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IAEf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACxB;AAqCD,wBAAsB,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBlE;
|
|
1
|
+
{"version":3,"file":"commands-auth.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/commands-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,KAAK,IAAI,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IAEf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACvC,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE;QAAE,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACzF,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACxB;AAqCD,wBAAsB,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBlE;AA+DD,wBAAsB,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAezE;AAGD,wBAAsB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ/F;AAGD,wBAAsB,SAAS,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpE"}
|
|
@@ -46,10 +46,12 @@ export async function runAuth(deps) {
|
|
|
46
46
|
await runInteractive(deps);
|
|
47
47
|
}
|
|
48
48
|
async function runInteractive(deps) {
|
|
49
|
-
|
|
49
|
+
const beginInteractiveAuth = deps.interactiveGuard?.begin(deps.serverName) ?? !activeInteractiveAuthServers.has(deps.serverName);
|
|
50
|
+
if (!beginInteractiveAuth) {
|
|
50
51
|
throw new OAuthFlowError("needs_auth", `MCP server ${deps.serverName} authorization is already in progress; complete the existing browser flow or retry after it finishes.`, { serverName: deps.serverName });
|
|
51
52
|
}
|
|
52
|
-
|
|
53
|
+
if (deps.interactiveGuard === undefined)
|
|
54
|
+
activeInteractiveAuthServers.add(deps.serverName);
|
|
53
55
|
let provider;
|
|
54
56
|
let channel;
|
|
55
57
|
const oauth = deps.config.oauth;
|
|
@@ -87,7 +89,10 @@ async function runInteractive(deps) {
|
|
|
87
89
|
deps.notify(`MCP server ${deps.serverName} authorized`);
|
|
88
90
|
}
|
|
89
91
|
finally {
|
|
90
|
-
|
|
92
|
+
if (deps.interactiveGuard)
|
|
93
|
+
deps.interactiveGuard.end(deps.serverName);
|
|
94
|
+
else
|
|
95
|
+
activeInteractiveAuthServers.delete(deps.serverName);
|
|
91
96
|
await channel?.close();
|
|
92
97
|
}
|
|
93
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands-auth.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/commands-auth.ts"],"names":[],"mappings":"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","sourcesContent":["import type { McpServerConfig } from \"../config-schema.ts\";\nimport type { McpLogger } from \"../log.ts\";\nimport { openCallbackChannel } from \"./callback.ts\";\nimport { resolveServerAuth } from \"./context.ts\";\nimport type { OAuthFlowOptions } from \"./oauth.ts\";\nimport {\n\tbeginAuthorization,\n\tclientCredentialsGrant,\n\tcompleteAuthorization,\n\tfinishAuthorization,\n\tlogout,\n} from \"./oauth.ts\";\nimport { OAuthFlowError } from \"./oauth-errors.ts\";\nimport type { McpOAuthProvider } from \"./oauth-provider.ts\";\n\ntype Notify = (message: string, type?: \"info\" | \"warning\" | \"error\") => void;\n\nexport interface AuthCommandDeps {\n\tserverName: string;\n\tconfig: McpServerConfig;\n\tagentDir?: string;\n\tenv?: Record<string, string | undefined>;\n\tlogger?: McpLogger;\n\thasUI: boolean;\n\tnotify: Notify;\n\t// settings.oauthCallbackUrl override: when set, no local listener is opened.\n\tcallbackUrl?: string;\n\topenBrowser?: (url: URL) => void | Promise<void>;\n\tonReconnect: () => Promise<void>;\n\t// Persists the provider between auth-start and auth-complete so the in-memory\n\t// CSRF state survives across two command invocations in one session.\n\tpending: Map<string, McpOAuthProvider>;\n\tflow?: OAuthFlowOptions;\n}\n\nconst PASTE_REDIRECT = \"http://127.0.0.1:0/callback\";\nconst activeInteractiveAuthServers = new Set<string>();\n\nfunction ensureOAuth(deps: AuthCommandDeps): void {\n\tif (deps.config.auth === false || deps.config.type !== \"http\" || deps.config.url === undefined) {\n\t\tthrow new OAuthFlowError(\"headless\", `MCP server ${deps.serverName} is not an OAuth HTTP server.`, {\n\t\t\tserverName: deps.serverName,\n\t\t});\n\t}\n}\n\nfunction buildProvider(\n\tdeps: AuthCommandDeps,\n\tredirectUrl: string,\n\tonRedirect?: (url: URL) => void | Promise<void>,\n): McpOAuthProvider {\n\tconst plan = resolveServerAuth({\n\t\tagentDir: deps.agentDir,\n\t\tconfig: { ...deps.config, auth: \"oauth\" },\n\t\tenv: deps.env,\n\t\tlogger: deps.logger,\n\t\tonRedirect,\n\t\tredirectUrl,\n\t\tserverName: deps.serverName,\n\t});\n\tif (plan.provider === undefined) {\n\t\tthrow new OAuthFlowError(\"headless\", `MCP server ${deps.serverName} could not build an OAuth provider.`, {\n\t\t\tserverName: deps.serverName,\n\t\t});\n\t}\n\treturn plan.provider;\n}\n\n// `/mcp auth <server>`: client_credentials M2M, or interactive loopback flow.\n// Non-UI callers fail fast with an actionable headless hint (no browser).\nexport async function runAuth(deps: AuthCommandDeps): Promise<void> {\n\tensureOAuth(deps);\n\tif (deps.config.oauth?.flow === \"client_credentials\") {\n\t\tconst provider = buildProvider(deps, deps.callbackUrl ?? PASTE_REDIRECT);\n\t\tawait clientCredentialsGrant(provider, deps.flow);\n\t\tawait deps.onReconnect();\n\t\tdeps.notify(`MCP server ${deps.serverName} authenticated (client_credentials)`);\n\t\treturn;\n\t}\n\tif (!deps.hasUI) {\n\t\tdeps.notify(\n\t\t\t`MCP server ${deps.serverName} needs interactive OAuth. Run senpi in a terminal, then: /mcp auth-start ${deps.serverName} and /mcp auth-complete ${deps.serverName} <redirect-url>`,\n\t\t\t\"error\",\n\t\t);\n\t\treturn;\n\t}\n\tawait runInteractive(deps);\n}\n\nasync function runInteractive(deps: AuthCommandDeps): Promise<void> {\n\tif (activeInteractiveAuthServers.has(deps.serverName)) {\n\t\tthrow new OAuthFlowError(\n\t\t\t\"needs_auth\",\n\t\t\t`MCP server ${deps.serverName} authorization is already in progress; complete the existing browser flow or retry after it finishes.`,\n\t\t\t{ serverName: deps.serverName },\n\t\t);\n\t}\n\tactiveInteractiveAuthServers.add(deps.serverName);\n\tlet provider: McpOAuthProvider | undefined;\n\tlet channel: Awaited<ReturnType<typeof openCallbackChannel>> | undefined;\n\tconst oauth = deps.config.oauth;\n\tlet callbackPort: number | undefined;\n\tif (\n\t\t(deps.callbackUrl === undefined || deps.callbackUrl.length === 0) &&\n\t\toauth?.clientId !== undefined &&\n\t\toauth.clientMetadataUrl === undefined\n\t) {\n\t\tcallbackPort = oauth.callbackPort;\n\t}\n\ttry {\n\t\tchannel = await openCallbackChannel({\n\t\t\toverrideUrl: deps.callbackUrl,\n\t\t\tport: callbackPort,\n\t\t\tserverName: deps.serverName,\n\t\t\tvalidateState: (state) => provider?.consumeState(state) ?? false,\n\t\t});\n\t\tconst loopbackResult = channel.usesLoopback ? channel.waitForCode() : undefined;\n\t\tprovider = buildProvider(deps, channel.redirectUrl, (url) => deps.openBrowser?.(url));\n\t\tconst begin = await beginAuthorization(provider, deps.flow);\n\t\tif (begin.authorizationUrl !== undefined) deps.notify(`Opening browser to authorize ${deps.serverName}...`);\n\t\tif (!channel.usesLoopback) {\n\t\t\tdeps.pending.set(deps.serverName, provider);\n\t\t\tif (begin.authorizationUrl === undefined) {\n\t\t\t\tthrow new OAuthFlowError(\n\t\t\t\t\t\"needs_auth\",\n\t\t\t\t\t`MCP server ${deps.serverName} did not produce an authorization URL.`,\n\t\t\t\t\t{\n\t\t\t\t\t\tserverName: deps.serverName,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tdeps.notify(\n\t\t\t\t`Complete the browser flow, then run /mcp auth-complete ${deps.serverName} <redirect-url> with the final redirect URL.`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst { code } = await (loopbackResult ?? channel.waitForCode());\n\t\tawait finishAuthorization(provider, code, deps.flow);\n\t\tawait deps.onReconnect();\n\t\tdeps.notify(`MCP server ${deps.serverName} authorized`);\n\t} finally {\n\t\tactiveInteractiveAuthServers.delete(deps.serverName);\n\t\tawait channel?.close();\n\t}\n}\n\n// `/mcp auth-start <server>`: print the authorize URL for a browser-less paste.\nexport async function runAuthStart(deps: AuthCommandDeps): Promise<string> {\n\tensureOAuth(deps);\n\tconst provider = buildProvider(deps, deps.callbackUrl ?? PASTE_REDIRECT);\n\tconst begin = await beginAuthorization(provider, deps.flow);\n\tconst url = begin.authorizationUrl;\n\tif (url === undefined) {\n\t\tthrow new OAuthFlowError(\"needs_auth\", `MCP server ${deps.serverName} did not produce an authorization URL.`, {\n\t\t\tserverName: deps.serverName,\n\t\t});\n\t}\n\tdeps.pending.set(deps.serverName, provider);\n\tdeps.notify(\n\t\t`Open this URL, approve, then run /mcp auth-complete ${deps.serverName} <redirect-url>:\\n${url.toString()}`,\n\t);\n\treturn url.toString();\n}\n\n// `/mcp auth-complete <server> <redirect-url>`: finish the paste flow.\nexport async function runAuthComplete(deps: AuthCommandDeps, redirectUrl: string): Promise<void> {\n\tensureOAuth(deps);\n\tconst pending = deps.pending.get(deps.serverName);\n\tconst provider = pending ?? buildProvider(deps, deps.callbackUrl ?? PASTE_REDIRECT);\n\tawait completeAuthorization(provider, redirectUrl, deps.flow);\n\tdeps.pending.delete(deps.serverName);\n\tawait deps.onReconnect();\n\tdeps.notify(`MCP server ${deps.serverName} authorized`);\n}\n\n// `/mcp logout <server>`: clear stored credentials.\nexport async function runLogout(deps: AuthCommandDeps): Promise<void> {\n\tconst provider = buildProvider(deps, PASTE_REDIRECT);\n\tawait logout(provider);\n\tdeps.pending.delete(deps.serverName);\n\tawait deps.onReconnect();\n\tdeps.notify(`MCP server ${deps.serverName} logged out`);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"commands-auth.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/commands-auth.ts"],"names":[],"mappings":"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","sourcesContent":["import type { McpServerConfig } from \"../config-schema.ts\";\nimport type { McpLogger } from \"../log.ts\";\nimport { openCallbackChannel } from \"./callback.ts\";\nimport { resolveServerAuth } from \"./context.ts\";\nimport type { OAuthFlowOptions } from \"./oauth.ts\";\nimport {\n\tbeginAuthorization,\n\tclientCredentialsGrant,\n\tcompleteAuthorization,\n\tfinishAuthorization,\n\tlogout,\n} from \"./oauth.ts\";\nimport { OAuthFlowError } from \"./oauth-errors.ts\";\nimport type { McpOAuthProvider } from \"./oauth-provider.ts\";\n\ntype Notify = (message: string, type?: \"info\" | \"warning\" | \"error\") => void;\n\nexport interface AuthCommandDeps {\n\tserverName: string;\n\tconfig: McpServerConfig;\n\tagentDir?: string;\n\tenv?: Record<string, string | undefined>;\n\tlogger?: McpLogger;\n\thasUI: boolean;\n\tnotify: Notify;\n\t// settings.oauthCallbackUrl override: when set, no local listener is opened.\n\tcallbackUrl?: string;\n\topenBrowser?: (url: URL) => void | Promise<void>;\n\tonReconnect: () => Promise<void>;\n\t// Persists the provider between auth-start and auth-complete so the in-memory\n\t// CSRF state survives across two command invocations in one session.\n\tpending: Map<string, McpOAuthProvider>;\n\t/** Per-service guard: the same server may authenticate in another session. */\n\tinteractiveGuard?: { begin(serverName: string): boolean; end(serverName: string): void };\n\tflow?: OAuthFlowOptions;\n}\n\nconst PASTE_REDIRECT = \"http://127.0.0.1:0/callback\";\nconst activeInteractiveAuthServers = new Set<string>();\n\nfunction ensureOAuth(deps: AuthCommandDeps): void {\n\tif (deps.config.auth === false || deps.config.type !== \"http\" || deps.config.url === undefined) {\n\t\tthrow new OAuthFlowError(\"headless\", `MCP server ${deps.serverName} is not an OAuth HTTP server.`, {\n\t\t\tserverName: deps.serverName,\n\t\t});\n\t}\n}\n\nfunction buildProvider(\n\tdeps: AuthCommandDeps,\n\tredirectUrl: string,\n\tonRedirect?: (url: URL) => void | Promise<void>,\n): McpOAuthProvider {\n\tconst plan = resolveServerAuth({\n\t\tagentDir: deps.agentDir,\n\t\tconfig: { ...deps.config, auth: \"oauth\" },\n\t\tenv: deps.env,\n\t\tlogger: deps.logger,\n\t\tonRedirect,\n\t\tredirectUrl,\n\t\tserverName: deps.serverName,\n\t});\n\tif (plan.provider === undefined) {\n\t\tthrow new OAuthFlowError(\"headless\", `MCP server ${deps.serverName} could not build an OAuth provider.`, {\n\t\t\tserverName: deps.serverName,\n\t\t});\n\t}\n\treturn plan.provider;\n}\n\n// `/mcp auth <server>`: client_credentials M2M, or interactive loopback flow.\n// Non-UI callers fail fast with an actionable headless hint (no browser).\nexport async function runAuth(deps: AuthCommandDeps): Promise<void> {\n\tensureOAuth(deps);\n\tif (deps.config.oauth?.flow === \"client_credentials\") {\n\t\tconst provider = buildProvider(deps, deps.callbackUrl ?? PASTE_REDIRECT);\n\t\tawait clientCredentialsGrant(provider, deps.flow);\n\t\tawait deps.onReconnect();\n\t\tdeps.notify(`MCP server ${deps.serverName} authenticated (client_credentials)`);\n\t\treturn;\n\t}\n\tif (!deps.hasUI) {\n\t\tdeps.notify(\n\t\t\t`MCP server ${deps.serverName} needs interactive OAuth. Run senpi in a terminal, then: /mcp auth-start ${deps.serverName} and /mcp auth-complete ${deps.serverName} <redirect-url>`,\n\t\t\t\"error\",\n\t\t);\n\t\treturn;\n\t}\n\tawait runInteractive(deps);\n}\n\nasync function runInteractive(deps: AuthCommandDeps): Promise<void> {\n\tconst beginInteractiveAuth =\n\t\tdeps.interactiveGuard?.begin(deps.serverName) ?? !activeInteractiveAuthServers.has(deps.serverName);\n\tif (!beginInteractiveAuth) {\n\t\tthrow new OAuthFlowError(\n\t\t\t\"needs_auth\",\n\t\t\t`MCP server ${deps.serverName} authorization is already in progress; complete the existing browser flow or retry after it finishes.`,\n\t\t\t{ serverName: deps.serverName },\n\t\t);\n\t}\n\tif (deps.interactiveGuard === undefined) activeInteractiveAuthServers.add(deps.serverName);\n\tlet provider: McpOAuthProvider | undefined;\n\tlet channel: Awaited<ReturnType<typeof openCallbackChannel>> | undefined;\n\tconst oauth = deps.config.oauth;\n\tlet callbackPort: number | undefined;\n\tif (\n\t\t(deps.callbackUrl === undefined || deps.callbackUrl.length === 0) &&\n\t\toauth?.clientId !== undefined &&\n\t\toauth.clientMetadataUrl === undefined\n\t) {\n\t\tcallbackPort = oauth.callbackPort;\n\t}\n\ttry {\n\t\tchannel = await openCallbackChannel({\n\t\t\toverrideUrl: deps.callbackUrl,\n\t\t\tport: callbackPort,\n\t\t\tserverName: deps.serverName,\n\t\t\tvalidateState: (state) => provider?.consumeState(state) ?? false,\n\t\t});\n\t\tconst loopbackResult = channel.usesLoopback ? channel.waitForCode() : undefined;\n\t\tprovider = buildProvider(deps, channel.redirectUrl, (url) => deps.openBrowser?.(url));\n\t\tconst begin = await beginAuthorization(provider, deps.flow);\n\t\tif (begin.authorizationUrl !== undefined) deps.notify(`Opening browser to authorize ${deps.serverName}...`);\n\t\tif (!channel.usesLoopback) {\n\t\t\tdeps.pending.set(deps.serverName, provider);\n\t\t\tif (begin.authorizationUrl === undefined) {\n\t\t\t\tthrow new OAuthFlowError(\n\t\t\t\t\t\"needs_auth\",\n\t\t\t\t\t`MCP server ${deps.serverName} did not produce an authorization URL.`,\n\t\t\t\t\t{\n\t\t\t\t\t\tserverName: deps.serverName,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tdeps.notify(\n\t\t\t\t`Complete the browser flow, then run /mcp auth-complete ${deps.serverName} <redirect-url> with the final redirect URL.`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst { code } = await (loopbackResult ?? channel.waitForCode());\n\t\tawait finishAuthorization(provider, code, deps.flow);\n\t\tawait deps.onReconnect();\n\t\tdeps.notify(`MCP server ${deps.serverName} authorized`);\n\t} finally {\n\t\tif (deps.interactiveGuard) deps.interactiveGuard.end(deps.serverName);\n\t\telse activeInteractiveAuthServers.delete(deps.serverName);\n\t\tawait channel?.close();\n\t}\n}\n\n// `/mcp auth-start <server>`: print the authorize URL for a browser-less paste.\nexport async function runAuthStart(deps: AuthCommandDeps): Promise<string> {\n\tensureOAuth(deps);\n\tconst provider = buildProvider(deps, deps.callbackUrl ?? PASTE_REDIRECT);\n\tconst begin = await beginAuthorization(provider, deps.flow);\n\tconst url = begin.authorizationUrl;\n\tif (url === undefined) {\n\t\tthrow new OAuthFlowError(\"needs_auth\", `MCP server ${deps.serverName} did not produce an authorization URL.`, {\n\t\t\tserverName: deps.serverName,\n\t\t});\n\t}\n\tdeps.pending.set(deps.serverName, provider);\n\tdeps.notify(\n\t\t`Open this URL, approve, then run /mcp auth-complete ${deps.serverName} <redirect-url>:\\n${url.toString()}`,\n\t);\n\treturn url.toString();\n}\n\n// `/mcp auth-complete <server> <redirect-url>`: finish the paste flow.\nexport async function runAuthComplete(deps: AuthCommandDeps, redirectUrl: string): Promise<void> {\n\tensureOAuth(deps);\n\tconst pending = deps.pending.get(deps.serverName);\n\tconst provider = pending ?? buildProvider(deps, deps.callbackUrl ?? PASTE_REDIRECT);\n\tawait completeAuthorization(provider, redirectUrl, deps.flow);\n\tdeps.pending.delete(deps.serverName);\n\tawait deps.onReconnect();\n\tdeps.notify(`MCP server ${deps.serverName} authorized`);\n}\n\n// `/mcp logout <server>`: clear stored credentials.\nexport async function runLogout(deps: AuthCommandDeps): Promise<void> {\n\tconst provider = buildProvider(deps, PASTE_REDIRECT);\n\tawait logout(provider);\n\tdeps.pending.delete(deps.serverName);\n\tawait deps.onReconnect();\n\tdeps.notify(`MCP server ${deps.serverName} logged out`);\n}\n"]}
|
|
@@ -2,6 +2,7 @@ import type { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
|
2
2
|
import type { McpCachedServerCatalog } from "./catalog-cache.ts";
|
|
3
3
|
import type { McpServerConfig, McpSettings } from "./config-schema.ts";
|
|
4
4
|
import type { ServerConnection } from "./connection.ts";
|
|
5
|
+
import type { McpOutputArtifacts } from "./guard/output-guard.ts";
|
|
5
6
|
import type { McpEnsureFreshAuth } from "./health.ts";
|
|
6
7
|
type ListedTool = Awaited<ReturnType<Client["listTools"]>>["tools"][number];
|
|
7
8
|
export interface McpToolCatalogEntry {
|
|
@@ -15,9 +16,10 @@ export interface McpToolCatalogEntry {
|
|
|
15
16
|
ensureConnected?: () => Promise<void>;
|
|
16
17
|
ensureFresh?: McpEnsureFreshAuth;
|
|
17
18
|
agentDir?: string;
|
|
19
|
+
artifacts?: McpOutputArtifacts;
|
|
18
20
|
outputGuard?: McpSettings["outputGuard"];
|
|
19
21
|
}
|
|
20
|
-
type McpToolCatalogOptions = Pick<McpToolCatalogEntry, "agentDir" | "ensureFresh" | "outputGuard">;
|
|
22
|
+
type McpToolCatalogOptions = Pick<McpToolCatalogEntry, "agentDir" | "artifacts" | "ensureFresh" | "outputGuard">;
|
|
21
23
|
export declare function collectToolCatalog(server: string, connection: ServerConnection, config: McpServerConfig, options?: McpToolCatalogOptions): Promise<McpToolCatalogEntry[]>;
|
|
22
24
|
export declare function cachedToolsToCatalogEntries(server: string, catalog: McpCachedServerCatalog, connection: ServerConnection, requestTimeoutMs: number, ensureConnected: () => Promise<void>, options?: McpToolCatalogOptions): McpToolCatalogEntry[];
|
|
23
25
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;CACzC;AAED,KAAK,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,WAAW,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;CACzC;AAED,KAAK,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC,CAAC;AAEjH,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,eAAe,EACvB,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAiBhC;AAED,wBAAgB,2BAA2B,CAC1C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,sBAAsB,EAC/B,UAAU,EAAE,gBAAgB,EAC5B,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACpC,OAAO,GAAE,qBAA0B,GACjC,mBAAmB,EAAE,CAevB"}
|
|
@@ -4,6 +4,7 @@ export async function collectToolCatalog(server, connection, config, options = {
|
|
|
4
4
|
return result.items.map((tool) => ({
|
|
5
5
|
annotations: tool.annotations,
|
|
6
6
|
agentDir: options.agentDir,
|
|
7
|
+
artifacts: options.artifacts,
|
|
7
8
|
connection,
|
|
8
9
|
description: tool.description,
|
|
9
10
|
ensureFresh: options.ensureFresh,
|
|
@@ -18,6 +19,7 @@ export function cachedToolsToCatalogEntries(server, catalog, connection, request
|
|
|
18
19
|
return catalog.tools.map((tool) => ({
|
|
19
20
|
annotations: tool.annotations,
|
|
20
21
|
agentDir: options.agentDir,
|
|
22
|
+
artifacts: options.artifacts,
|
|
21
23
|
connection,
|
|
22
24
|
description: tool.description,
|
|
23
25
|
ensureConnected,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/catalog.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/catalog.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAuBzD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,MAAc,EACd,UAA4B,EAC5B,MAAuB,EACvB,OAAO,GAA0B,EAAE;IAEnC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAa,CAAC,MAAM,EAAE,EAAE,CAC3D,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CACzG,CAAC;IACF,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU;QACV,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,MAAM,EAAE,IAAI,CAAC,WAAW;QACxB,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,IAAI;KACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CAC1C,MAAc,EACd,OAA+B,EAC/B,UAA4B,EAC5B,gBAAwB,EACxB,eAAoC,EACpC,OAAO,GAA0B,EAAE;IAEnC,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU;QACV,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,eAAe;QACf,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,gBAAgB;QAChB,MAAM,EAAE,IAAI,CAAC,WAAW;QACxB,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,IAAI;KACf,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport type { McpCachedServerCatalog } from \"./catalog-cache.ts\";\nimport type { McpServerConfig, McpSettings } from \"./config-schema.ts\";\nimport type { ServerConnection } from \"./connection.ts\";\nimport { collectAllPages } from \"./expose/pagination.ts\";\nimport type { McpOutputArtifacts } from \"./guard/output-guard.ts\";\nimport type { McpEnsureFreshAuth } from \"./health.ts\";\n\ntype ListedTool = Awaited<ReturnType<Client[\"listTools\"]>>[\"tools\"][number];\n\nexport interface McpToolCatalogEntry {\n\tserver: string;\n\ttool: string;\n\tschema: ListedTool[\"inputSchema\"];\n\tdescription?: string;\n\tannotations?: ListedTool[\"annotations\"];\n\trequestTimeoutMs: number;\n\tconnection: ServerConnection;\n\tensureConnected?: () => Promise<void>;\n\tensureFresh?: McpEnsureFreshAuth;\n\tagentDir?: string;\n\tartifacts?: McpOutputArtifacts;\n\toutputGuard?: McpSettings[\"outputGuard\"];\n}\n\ntype McpToolCatalogOptions = Pick<McpToolCatalogEntry, \"agentDir\" | \"artifacts\" | \"ensureFresh\" | \"outputGuard\">;\n\nexport async function collectToolCatalog(\n\tserver: string,\n\tconnection: ServerConnection,\n\tconfig: McpServerConfig,\n\toptions: McpToolCatalogOptions = {},\n): Promise<McpToolCatalogEntry[]> {\n\tconst result = await collectAllPages<ListedTool>((cursor) =>\n\t\tconnection.client.listTools(cursor === undefined ? {} : { cursor }, { timeout: config.requestTimeoutMs }),\n\t);\n\treturn result.items.map((tool) => ({\n\t\tannotations: tool.annotations,\n\t\tagentDir: options.agentDir,\n\t\tartifacts: options.artifacts,\n\t\tconnection,\n\t\tdescription: tool.description,\n\t\tensureFresh: options.ensureFresh,\n\t\toutputGuard: options.outputGuard,\n\t\trequestTimeoutMs: config.requestTimeoutMs,\n\t\tschema: tool.inputSchema,\n\t\tserver,\n\t\ttool: tool.name,\n\t}));\n}\n\nexport function cachedToolsToCatalogEntries(\n\tserver: string,\n\tcatalog: McpCachedServerCatalog,\n\tconnection: ServerConnection,\n\trequestTimeoutMs: number,\n\tensureConnected: () => Promise<void>,\n\toptions: McpToolCatalogOptions = {},\n): McpToolCatalogEntry[] {\n\treturn catalog.tools.map((tool) => ({\n\t\tannotations: tool.annotations,\n\t\tagentDir: options.agentDir,\n\t\tartifacts: options.artifacts,\n\t\tconnection,\n\t\tdescription: tool.description,\n\t\tensureConnected,\n\t\tensureFresh: options.ensureFresh,\n\t\toutputGuard: options.outputGuard,\n\t\trequestTimeoutMs,\n\t\tschema: tool.inputSchema,\n\t\tserver,\n\t\ttool: tool.name,\n\t}));\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ExtensionAPI } from "../../types.ts";
|
|
2
|
-
export declare function registerMcpCommands(pi: ExtensionAPI): void;
|
|
2
|
+
export declare function registerMcpCommands(pi: ExtensionAPI, service?: import("./service.ts").McpService): void;
|
|
3
3
|
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AAwB5E,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AAwB5E,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,oCAAkB,GAAG,IAAI,CAarF"}
|