@bastani/atomic 0.9.24 → 0.9.25-alpha.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 +42 -0
- package/dist/builtin/intercom/index.bundle.mjs +5 -0
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/mcp/CHANGELOG.md +11 -0
- package/dist/builtin/mcp/index.bundle.mjs +219 -71
- package/dist/builtin/mcp/package.json +6 -2
- package/dist/builtin/subagents/package.json +3 -3
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +1 -0
- package/dist/builtin/web-access/index.bundle.mjs +7 -6
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +6 -0
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +1 -0
- package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6_1_sol.md +66 -0
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +1 -0
- package/dist/cli/startup-ui.d.ts +3 -4
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +3 -4
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +5 -0
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-export.d.ts.map +1 -1
- package/dist/core/agent-session-export.js +3 -0
- package/dist/core/agent-session-export.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +4 -0
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +2 -1
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-nested-tools.d.ts +10 -0
- package/dist/core/agent-session-nested-tools.d.ts.map +1 -0
- package/dist/core/agent-session-nested-tools.js +76 -0
- package/dist/core/agent-session-nested-tools.js.map +1 -0
- package/dist/core/agent-session-runtime-auth.js +3 -1
- package/dist/core/agent-session-runtime-auth.js.map +1 -1
- package/dist/core/agent-session-state.d.ts +2 -0
- package/dist/core/agent-session-state.d.ts.map +1 -1
- package/dist/core/agent-session-state.js +11 -11
- package/dist/core/agent-session-state.js.map +1 -1
- package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
- package/dist/core/agent-session-tool-hooks.js +18 -3
- package/dist/core/agent-session-tool-hooks.js.map +1 -1
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +15 -3
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +6 -2
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/builtin-resource-loader.d.ts.map +1 -1
- package/dist/core/builtin-resource-loader.js +13 -1
- package/dist/core/builtin-resource-loader.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +1 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js +18 -18
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/execution-model-router.d.ts.map +1 -1
- package/dist/core/execution-model-router.js +24 -8
- package/dist/core/execution-model-router.js.map +1 -1
- package/dist/core/export-html/template.js +12 -0
- package/dist/core/extensions/agent-events.d.ts +3 -0
- package/dist/core/extensions/agent-events.d.ts.map +1 -1
- package/dist/core/extensions/agent-events.js.map +1 -1
- package/dist/core/extensions/api-types.d.ts +2 -0
- package/dist/core/extensions/api-types.d.ts.map +1 -1
- package/dist/core/extensions/api-types.js.map +1 -1
- package/dist/core/extensions/context-types.d.ts +9 -0
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/event-results.d.ts +3 -0
- package/dist/core/extensions/event-results.d.ts.map +1 -1
- package/dist/core/extensions/event-results.js.map +1 -1
- package/dist/core/extensions/index.d.ts +2 -0
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader-api.d.ts.map +1 -1
- package/dist/core/extensions/loader-api.js +4 -0
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-core.d.ts.map +1 -1
- package/dist/core/extensions/loader-core.js +3 -5
- package/dist/core/extensions/loader-core.js.map +1 -1
- package/dist/core/extensions/loader-host-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-host-modules.js +7 -1
- package/dist/core/extensions/loader-host-modules.js.map +1 -1
- package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
- package/dist/core/extensions/loader-runtime.js +3 -0
- package/dist/core/extensions/loader-runtime.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +4 -0
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/provider-types.d.ts +2 -0
- package/dist/core/extensions/provider-types.d.ts.map +1 -1
- package/dist/core/extensions/provider-types.js.map +1 -1
- package/dist/core/extensions/runner-events.d.ts.map +1 -1
- package/dist/core/extensions/runner-events.js +16 -1
- package/dist/core/extensions/runner-events.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +5 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +34 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +5 -0
- package/dist/core/extensions/runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/runtime-types.js.map +1 -1
- package/dist/core/extensions/tool-events.d.ts +4 -0
- package/dist/core/extensions/tool-events.d.ts.map +1 -1
- package/dist/core/extensions/tool-events.js.map +1 -1
- package/dist/core/extensions/tool-types.d.ts +34 -3
- package/dist/core/extensions/tool-types.d.ts.map +1 -1
- package/dist/core/extensions/tool-types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js +14 -2
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/fast-model-routing-transport.d.ts.map +1 -1
- package/dist/core/fast-model-routing-transport.js +2 -1
- package/dist/core/fast-model-routing-transport.js.map +1 -1
- package/dist/core/fast-model-routing.d.ts +1 -2
- package/dist/core/fast-model-routing.d.ts.map +1 -1
- package/dist/core/fast-model-routing.js +13 -11
- package/dist/core/fast-model-routing.js.map +1 -1
- package/dist/core/fast-model-variants.d.ts +4 -1
- package/dist/core/fast-model-variants.d.ts.map +1 -1
- package/dist/core/fast-model-variants.js +42 -17
- package/dist/core/fast-model-variants.js.map +1 -1
- package/dist/core/mandatory-resource-loader.d.ts.map +1 -1
- package/dist/core/mandatory-resource-loader.js +9 -0
- package/dist/core/mandatory-resource-loader.js.map +1 -1
- package/dist/core/model-registry.d.ts +4 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +9 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-defaults.js +1 -1
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/model-routing-candidates.d.ts +4 -0
- package/dist/core/model-routing-candidates.d.ts.map +1 -1
- package/dist/core/model-routing-candidates.js +8 -3
- package/dist/core/model-routing-candidates.js.map +1 -1
- package/dist/core/model-routing-evals.d.ts.map +1 -1
- package/dist/core/model-routing-evals.js +4 -5
- package/dist/core/model-routing-evals.js.map +1 -1
- package/dist/core/model-runtime.d.ts +3 -2
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +19 -25
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/nested-tool-calls.d.ts +64 -0
- package/dist/core/nested-tool-calls.d.ts.map +1 -0
- package/dist/core/nested-tool-calls.js +132 -0
- package/dist/core/nested-tool-calls.js.map +1 -0
- package/dist/core/oauth-provider-metadata.js +1 -1
- package/dist/core/oauth-provider-metadata.js.map +1 -1
- package/dist/core/package-manager-resolver.d.ts.map +1 -1
- package/dist/core/package-manager-resolver.js +21 -3
- package/dist/core/package-manager-resolver.js.map +1 -1
- package/dist/core/package-manager-resource-accumulator.d.ts.map +1 -1
- package/dist/core/package-manager-resource-accumulator.js +2 -0
- package/dist/core/package-manager-resource-accumulator.js.map +1 -1
- package/dist/core/package-manager-types.d.ts +2 -0
- package/dist/core/package-manager-types.d.ts.map +1 -1
- package/dist/core/package-manager-types.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +1 -0
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/resource-loader-core.d.ts.map +1 -1
- package/dist/core/resource-loader-core.js +12 -6
- package/dist/core/resource-loader-core.js.map +1 -1
- package/dist/core/resource-loader-extensions.d.ts +1 -0
- package/dist/core/resource-loader-extensions.d.ts.map +1 -1
- package/dist/core/resource-loader-extensions.js +64 -4
- package/dist/core/resource-loader-extensions.js.map +1 -1
- package/dist/core/resource-loader-paths.d.ts.map +1 -1
- package/dist/core/resource-loader-paths.js +2 -1
- package/dist/core/resource-loader-paths.js.map +1 -1
- package/dist/core/resource-loader-reload.d.ts.map +1 -1
- package/dist/core/resource-loader-reload.js +5 -4
- package/dist/core/resource-loader-reload.js.map +1 -1
- package/dist/core/resource-loader-source-info.d.ts.map +1 -1
- package/dist/core/resource-loader-source-info.js +7 -5
- package/dist/core/resource-loader-source-info.js.map +1 -1
- package/dist/core/resource-loader-types.d.ts +4 -0
- package/dist/core/resource-loader-types.d.ts.map +1 -1
- package/dist/core/resource-loader-types.js.map +1 -1
- package/dist/core/sdk-types.d.ts +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/session-manager-core.d.ts +2 -0
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js +5 -1
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-entries.d.ts +1 -1
- package/dist/core/session-manager-entries.d.ts.map +1 -1
- package/dist/core/session-manager-entries.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +4 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +27 -1
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-manager-core.d.ts +2 -0
- package/dist/core/settings-manager-core.d.ts.map +1 -1
- package/dist/core/settings-manager-core.js +4 -0
- package/dist/core/settings-manager-core.js.map +1 -1
- package/dist/core/settings-manager-ui-accessors.d.ts +3 -1
- package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-ui-accessors.js +13 -0
- package/dist/core/settings-manager-ui-accessors.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-merge.d.ts +1 -0
- package/dist/core/settings-merge.d.ts.map +1 -1
- package/dist/core/settings-merge.js +30 -1
- package/dist/core/settings-merge.js.map +1 -1
- package/dist/core/settings-types.d.ts +8 -1
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/source-info.d.ts +3 -0
- package/dist/core/source-info.d.ts.map +1 -1
- package/dist/core/source-info.js +11 -0
- package/dist/core/source-info.js.map +1 -1
- package/dist/core/structured-output/index.d.ts.map +1 -1
- package/dist/core/structured-output/index.js +3 -1
- package/dist/core/structured-output/index.js.map +1 -1
- package/dist/core/tool-loadout.d.ts +6 -0
- package/dist/core/tool-loadout.d.ts.map +1 -0
- package/dist/core/tool-loadout.js +63 -0
- package/dist/core/tool-loadout.js.map +1 -0
- package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/ask-user-question.js +1 -0
- package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +31 -11
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +4 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +32 -0
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/powershell.d.ts +27 -21
- package/dist/core/tools/powershell.d.ts.map +1 -1
- package/dist/core/tools/render-utils.d.ts +4 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +19 -0
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/tool-concurrency.d.ts +1 -1
- package/dist/core/tools/tool-concurrency.d.ts.map +1 -1
- package/dist/core/tools/tool-concurrency.js +28 -3
- package/dist/core/tools/tool-concurrency.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +4 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/usage-totals.d.ts +2 -0
- package/dist/core/usage-totals.d.ts.map +1 -1
- package/dist/core/usage-totals.js +23 -0
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/extensions/codemode/execute.d.ts +10 -0
- package/dist/extensions/codemode/execute.d.ts.map +1 -0
- package/dist/extensions/codemode/execute.js +313 -0
- package/dist/extensions/codemode/execute.js.map +1 -0
- package/dist/extensions/codemode/index.d.ts +11 -0
- package/dist/extensions/codemode/index.d.ts.map +1 -0
- package/dist/extensions/codemode/index.js +14 -0
- package/dist/extensions/codemode/index.js.map +1 -0
- package/dist/extensions/codemode/renderer.d.ts +4 -0
- package/dist/extensions/codemode/renderer.d.ts.map +1 -0
- package/dist/extensions/codemode/renderer.js +78 -0
- package/dist/extensions/codemode/renderer.js.map +1 -0
- package/dist/extensions/codemode/tool.d.ts +51 -0
- package/dist/extensions/codemode/tool.d.ts.map +1 -0
- package/dist/extensions/codemode/tool.js +134 -0
- package/dist/extensions/codemode/tool.js.map +1 -0
- package/dist/extensions/codemode/worker.d.ts +2 -0
- package/dist/extensions/codemode/worker.d.ts.map +1 -0
- package/dist/extensions/codemode/worker.js +2 -0
- package/dist/extensions/codemode/worker.js.map +1 -0
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +5 -1
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +31 -10
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/extensions/tool-search/index.d.ts +5 -0
- package/dist/extensions/tool-search/index.d.ts.map +1 -0
- package/dist/extensions/tool-search/index.js +6 -0
- package/dist/extensions/tool-search/index.js.map +1 -0
- package/dist/extensions/tool-search/tool.d.ts +41 -0
- package/dist/extensions/tool-search/tool.d.ts.map +1 -0
- package/dist/extensions/tool-search/tool.js +161 -0
- package/dist/extensions/tool-search/tool.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts +1 -0
- package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js +2 -0
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector-list.js +9 -1
- package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/config-selector-project-scope.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector-project-scope.js +4 -1
- package/dist/modes/interactive/components/config-selector-project-scope.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts +2 -2
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js +1 -0
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +42 -7
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.js +3 -0
- package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js +13 -0
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-submenus.js +3 -1
- package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts +3 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
- package/dist/modes/interactive/components/themed-text.d.ts +8 -0
- package/dist/modes/interactive/components/themed-text.d.ts.map +1 -0
- package/dist/modes/interactive/components/themed-text.js +14 -0
- package/dist/modes/interactive/components/themed-text.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +5 -3
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +2 -0
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +2 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +5 -0
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-resource-rendering.js +7 -10
- package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +5 -0
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +1 -0
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +8 -3
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-tui.d.ts +2 -1
- package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-tui.js +1 -0
- package/dist/modes/interactive/interactive-tui.js.map +1 -1
- package/dist/modes/interactive/theme/color-utils.d.ts.map +1 -1
- package/dist/modes/interactive/theme/color-utils.js +3 -0
- package/dist/modes/interactive/theme/color-utils.js.map +1 -1
- package/dist/modes/interactive/theme/export-colors.d.ts.map +1 -1
- package/dist/modes/interactive/theme/export-colors.js +4 -1
- package/dist/modes/interactive/theme/export-colors.js.map +1 -1
- package/dist/modes/interactive/theme/system-theme.d.ts +23 -0
- package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/system-theme.js +462 -0
- package/dist/modes/interactive/theme/system-theme.js.map +1 -0
- package/dist/modes/interactive/theme/terminal-colors.d.ts +10 -0
- package/dist/modes/interactive/theme/terminal-colors.d.ts.map +1 -0
- package/dist/modes/interactive/theme/terminal-colors.js +36 -0
- package/dist/modes/interactive/theme/terminal-colors.js.map +1 -0
- package/dist/modes/interactive/theme/terminal-detection.d.ts +4 -6
- package/dist/modes/interactive/theme/terminal-detection.d.ts.map +1 -1
- package/dist/modes/interactive/theme/terminal-detection.js +12 -46
- package/dist/modes/interactive/theme/terminal-detection.js.map +1 -1
- package/dist/modes/interactive/theme/theme-class.d.ts +1 -0
- package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-class.js +2 -2
- package/dist/modes/interactive/theme/theme-class.js.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts +16 -8
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js +106 -64
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.js +23 -2
- package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.js +1 -1
- package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.json +2 -2
- package/dist/modes/interactive/theme/theme.d.ts +2 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +2 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/interactive-engine/engine-session-stats.d.ts +26 -0
- package/dist/modes/interactive-engine/engine-session-stats.d.ts.map +1 -0
- package/dist/modes/interactive-engine/engine-session-stats.js +71 -0
- package/dist/modes/interactive-engine/engine-session-stats.js.map +1 -0
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +2 -0
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.js +4 -0
- package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.d.ts +3 -0
- package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +27 -5
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.js +3 -1
- package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +8 -2
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +2 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/shell.d.ts +1 -3
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +3 -30
- package/dist/utils/shell.js.map +1 -1
- package/docs/extensions/api-reference.md +5 -1
- package/docs/extensions/authoring.md +31 -1
- package/docs/extensions/events.md +3 -1
- package/docs/extensions.md +14 -0
- package/docs/models/evals.md +45 -2
- package/docs/models/reference.md +33 -2
- package/docs/models.md +1 -0
- package/docs/packages.md +2 -0
- package/docs/providers.md +34 -7
- package/docs/reference/cli.md +4 -0
- package/docs/rpc/protocol.md +10 -0
- package/docs/sdk/reference.md +11 -1
- package/docs/sdk/structured-decisions.md +4 -2
- package/docs/session-format.md +5 -0
- package/docs/settings.md +19 -5
- package/docs/skills.md +1 -1
- package/docs/themes/reference.md +2 -1
- package/docs/themes.md +4 -2
- package/docs/tools.md +39 -0
- package/npm-shrinkwrap.json +115 -113
- package/package.json +12 -9
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,48 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.9.25-alpha.2] - 2026-09-30
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- OpenAI's **Sign in with ChatGPT** login now shows a redirect-URL paste input, allowing authentication from remote machines without a reachable local browser callback.
|
|
10
|
+
- SDK-created sessions now discover package-provided workflows from their resource loader, including after workflow reload, while preserving project trust and custom loaders without workflow resources ([#3372](https://github.com/bastani-inc/atomic/issues/3372)).
|
|
11
|
+
- SDK-created sessions now retain package-contributed MCP servers when adding the shipped MCP extension to a custom resource loader ([#3372](https://github.com/bastani-inc/atomic/issues/3372)).
|
|
12
|
+
- Structured decisions and schema-backed workflow results now accept strict-provider null placeholders for omitted optional fields instead of exhausting output repairs. Explicitly nullable fields keep their null values, and required fields still enforce the original schema.
|
|
13
|
+
|
|
14
|
+
## [0.9.25-alpha.1] - 2026-09-29
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- Added GPT-6.1 Sol and its first-party Fast variants for OpenAI API keys and ChatGPT Codex subscriptions.
|
|
19
|
+
- Added **Sign in with ChatGPT** for the OpenAI provider, independently of Codex backend login.
|
|
20
|
+
- Added Jev decision models on Vercel AI Gateway and OpenCode Zen.
|
|
21
|
+
- Added configurable fullscreen mouse-wheel scrolling with terminal-aware automatic behavior or a fixed line count.
|
|
22
|
+
- Extension tools can declare exposure, namespaces, annotations and output schemas, and invoke permitted nested tools through the ordinary validation and permission hooks.
|
|
23
|
+
- Added a selectable system theme based on the terminal's palette and contrast, and OKHSL colors for custom themes.
|
|
24
|
+
- Added opt-in `codemode` scripts for composing permitted tools, filtering output, branch-local JSON storage, and classifier calls, plus `tool_search` for activating deferred tools. Interactive and orchestration tools remain unavailable from scripts.
|
|
25
|
+
- Added `builtin:llama.cpp`, `builtin:codemode`, and `builtin:tool-search` extension resources for explicit loading and settings-based enable/disable controls, with diagnostics when an extension replaces codemode or tool search.
|
|
26
|
+
- Added Ultrafast for GPT-6 Astra as `openai/gpt-6-astra-ultrafast` and `openai-codex/gpt-6-astra-ultrafast`, priced at OpenAI's published Ultrafast rates. GPT-6 Astra is the only model with an Ultrafast choice. If the provider rejects an Ultrafast choice you selected, the request fails.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- `defaultTools` now accepts `+name` and `-name` modifiers. Project modifier-only lists adjust the global selection instead of replacing it.
|
|
31
|
+
- Automatic model routing now includes GPT-6.1 Sol results from Artificial Analysis, FrontierCode, and OpenAI's published external benchmarks, preserving measured efforts and independent reporters. Metadata-backed Fast variants use base-model evidence without inventing separate Fast scores; independently registered Fast IDs require their own evidence.
|
|
32
|
+
- Completed `bash` commands now return bounded structured output for programmatic callers, including nonzero exits, without increasing model-facing output limits.
|
|
33
|
+
- Codex's automatic provider default is now GPT-6.1 Sol. Explicit saved model selections remain unchanged.
|
|
34
|
+
- Reduced transcript/footer and shell-preview rendering work in long sessions.
|
|
35
|
+
- Tool previews without custom renderers now show their arguments in collapsed and expanded views.
|
|
36
|
+
- `-fast` and `-ultrafast` choices for OpenAI and Codex models now follow the tiers each model advertises in Codex's catalog and on OpenAI's pricing page. Models without Fast, such as `gpt-5.3-codex-spark`, `openai/gpt-5-nano`, `openai/gpt-5-pro`, and `openai/o1`, no longer list a `-fast` choice. A tier the model doesn't advertise is left out of the request, which runs at standard processing.
|
|
37
|
+
- OpenAI and Codex Fast usage is priced at each model's published Fast rates instead of a flat 2x, for example 1.7x for GPT-4o. A Fast request that OpenAI serves at Standard is priced at Standard.
|
|
38
|
+
|
|
39
|
+
### Fixed
|
|
40
|
+
|
|
41
|
+
- Theme-colored notices now refresh after theme changes and late terminal color replies.
|
|
42
|
+
- llama.cpp unloaded autoload presets now retain their cached effective context size instead of falling back to the model's training limit.
|
|
43
|
+
- Native extension providers with stored credentials become available immediately after registration without exposing unrelated unauthenticated models.
|
|
44
|
+
- Cancelled tools no longer start queued native or nested sequential calls after cancellation.
|
|
45
|
+
- The interactive footer's context percentage, token, cost and cache-hit (`CH`) segments update after every message again, instead of only when a run ends. A new session no longer shows `0.0%` with no token or cost segments for its whole first run, and steered or long runs keep the footer current. The footer totals now include cache-warming requests, which `/session` already counts, and RPC `get_session_stats` responses report the newest reply's usage as `latestAssistantUsage` ([#3328](https://github.com/bastani-inc/atomic/issues/3328); [#3364](https://github.com/bastani-inc/atomic/pull/3364) by [@dairefagan](https://github.com/dairefagan)).
|
|
46
|
+
|
|
5
47
|
## [0.9.24] - 2026-09-29
|
|
6
48
|
|
|
7
49
|
### Added
|
|
@@ -2577,6 +2577,7 @@ function registerContactSupervisorTool(pi, deps) {
|
|
|
2577
2577
|
if (childOrchestratorMetadata !== null) {
|
|
2578
2578
|
pi.registerTool({
|
|
2579
2579
|
name: "contact_supervisor",
|
|
2580
|
+
exposure: "model-only",
|
|
2580
2581
|
label: "Contact Supervisor",
|
|
2581
2582
|
description: "Subagent-only tool for contacting the supervisor agent that delegated this task. In a live foreground child, need_decision and interview_request end the child and return a fresh-subagent handoff to the supervisor; fallback Intercom delivery waits for a reply when no foreground owner claims the request. One blocking supervisor request is allowed per child and may coexist with ordinary intercom asks. progress_update is fire-and-forget. Do not use for routine completion handoffs.",
|
|
2582
2583
|
promptSnippet: "Subagent-only: yield decisions or structured interviews to the supervisor for a fresh-child follow-up, or send meaningful plan-changing progress updates.",
|
|
@@ -3301,6 +3302,7 @@ function registerIntercomTool(pi, deps) {
|
|
|
3301
3302
|
const activeReplyTracker = () => typeof deps.replyTracker === "function" ? deps.replyTracker() : deps.replyTracker;
|
|
3302
3303
|
pi.registerTool({
|
|
3303
3304
|
name: "intercom",
|
|
3305
|
+
exposure: "model-only",
|
|
3304
3306
|
label: "Intercom",
|
|
3305
3307
|
description: `Send a message to another local agent session running on this machine.
|
|
3306
3308
|
Use this to communicate findings, request help, or coordinate work with other sessions.
|
|
@@ -7883,6 +7885,7 @@ function intercom(pi, options = {}) {
|
|
|
7883
7885
|
typedContactSupervisorRegistered = true;
|
|
7884
7886
|
pi.registerTool({
|
|
7885
7887
|
name: "contact_supervisor",
|
|
7888
|
+
exposure: "model-only",
|
|
7886
7889
|
label: "Contact Supervisor",
|
|
7887
7890
|
description: "Subagent-only tool for contacting the supervisor agent that delegated this task.",
|
|
7888
7891
|
promptSnippet: "Subagent-only: contact the supervisor for decisions, interviews, or meaningful updates.",
|
|
@@ -8120,6 +8123,7 @@ function intercom(pi, options = {}) {
|
|
|
8120
8123
|
});
|
|
8121
8124
|
pi.registerTool({
|
|
8122
8125
|
name: "intercom",
|
|
8126
|
+
exposure: "model-only",
|
|
8123
8127
|
label: "Intercom",
|
|
8124
8128
|
description: `Send a message to another local agent session running on this machine.
|
|
8125
8129
|
Use this to communicate findings, request help, or coordinate work with other sessions.
|
|
@@ -8169,6 +8173,7 @@ Usage:
|
|
|
8169
8173
|
if (hasSubagentIntercomEnv()) {
|
|
8170
8174
|
pi.registerTool({
|
|
8171
8175
|
name: "contact_supervisor",
|
|
8176
|
+
exposure: "model-only",
|
|
8172
8177
|
label: "Contact Supervisor",
|
|
8173
8178
|
description: "Subagent-only tool for contacting the supervisor agent that delegated this task. Use need_decision when blocked, uncertain, needing approval, or facing a product/API/scope decision before continuing; this waits for the supervisor's reply. Use interview_request when multiple structured questions need supervisor answers; this also waits for a reply. Use progress_update only for meaningful progress or unexpected discoveries that change the plan; this does not wait for a reply. Do not use for routine completion handoffs.",
|
|
8174
8179
|
promptSnippet: "Subagent-only: contact the supervisor for decisions, structured interviews, or meaningful plan-changing updates. Do not use for routine completion handoffs.",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/intercom",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.25-alpha.2",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension providing a private coordination channel between parent and child agent sessions. Fork of: https://github.com/nicobailon/pi-intercom",
|
|
6
6
|
"contributors": [
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
46
|
"@bastani/atomic": "*",
|
|
47
|
-
"@earendil-works/pi-tui": "^0.
|
|
47
|
+
"@earendil-works/pi-tui": "^0.99.1",
|
|
48
48
|
"typebox": "*"
|
|
49
49
|
},
|
|
50
50
|
"peerDependenciesMeta": {
|
|
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.9.25-alpha.1] - 2026-09-29
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- MCP tool previews now show arguments in collapsed and expanded views while redacting sensitive argument fields.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Concurrent Atomic processes now coordinate rotating OAuth refresh tokens, reusing the refreshed credential rather than independently rotating the same token.
|
|
19
|
+
- Stalled OAuth refresh requests now time out after 15 seconds, including response-body reads, so connection shutdown can finish and release the refresh lock.
|
|
20
|
+
|
|
10
21
|
## [0.9.24] - 2026-09-29
|
|
11
22
|
|
|
12
23
|
### Added
|
|
@@ -13473,13 +13473,14 @@ var require_fast_uri = __commonJS(function(exports, module) {
|
|
|
13473
13473
|
if (!malformedIPLiteral) {
|
|
13474
13474
|
malformedHost = canonicalizeHost(parsed, options, schemeHandler, isIP);
|
|
13475
13475
|
}
|
|
13476
|
-
if (
|
|
13477
|
-
|
|
13478
|
-
|
|
13479
|
-
|
|
13480
|
-
parsed.host = reescapeHostDelimiters(host, isIP);
|
|
13481
|
-
}
|
|
13476
|
+
if (uri.indexOf("%") !== -1 && parsed.host !== undefined && !malformedIPLiteral) {
|
|
13477
|
+
let host = isIP ? parsed.host : normalizePercentEncoding(parsed.host, true);
|
|
13478
|
+
if (!isIP) {
|
|
13479
|
+
host = normalizePercentEncoding(host.toLowerCase());
|
|
13482
13480
|
}
|
|
13481
|
+
parsed.host = reescapeHostDelimiters(host, isIP);
|
|
13482
|
+
}
|
|
13483
|
+
if (!schemeHandler || schemeHandler && !schemeHandler.skipNormalize) {
|
|
13483
13484
|
if (parsed.path) {
|
|
13484
13485
|
parsed.path = normalizePathEncoding(parsed.path);
|
|
13485
13486
|
}
|
|
@@ -19860,6 +19861,7 @@ var init_npx_resolver = __esm(() => {
|
|
|
19860
19861
|
// dist/builtin/mcp/mcp-auth.ts
|
|
19861
19862
|
import { mkdirSync as mkdirSync4, readFileSync as readFileSync5, writeFileSync as writeFileSync4, existsSync as existsSync5, rmSync } from "fs";
|
|
19862
19863
|
import { join as join5 } from "path";
|
|
19864
|
+
import lockfile from "proper-lockfile";
|
|
19863
19865
|
function getOwnedOAuthTransients() {
|
|
19864
19866
|
const owner = getMcpOwner();
|
|
19865
19867
|
if (!owner)
|
|
@@ -19898,6 +19900,14 @@ function ensureServerDir(serverName) {
|
|
|
19898
19900
|
mkdirSync4(dir, { recursive: true, mode: 448 });
|
|
19899
19901
|
}
|
|
19900
19902
|
}
|
|
19903
|
+
async function acquireTokenRefreshLock(serverName) {
|
|
19904
|
+
ensureServerDir(serverName);
|
|
19905
|
+
return lockfile.lock(getServerDir(serverName), {
|
|
19906
|
+
realpath: false,
|
|
19907
|
+
retries: { retries: 120, minTimeout: 100, maxTimeout: 1000 },
|
|
19908
|
+
stale: 60000
|
|
19909
|
+
});
|
|
19910
|
+
}
|
|
19901
19911
|
function readAuthEntry(serverName) {
|
|
19902
19912
|
try {
|
|
19903
19913
|
const filePath = getTokensFilePath(serverName);
|
|
@@ -20058,6 +20068,58 @@ var init_mcp_auth = __esm(() => {
|
|
|
20058
20068
|
});
|
|
20059
20069
|
|
|
20060
20070
|
// dist/builtin/mcp/mcp-oauth-provider.ts
|
|
20071
|
+
async function fetchRefreshResponse(url, init) {
|
|
20072
|
+
const controller = new AbortController;
|
|
20073
|
+
const signal = init.signal ? AbortSignal.any([init.signal, controller.signal]) : controller.signal;
|
|
20074
|
+
const timer = setTimeout(() => controller.abort(new DOMException("MCP token refresh timed out", "TimeoutError")), REFRESH_REQUEST_TIMEOUT_MS);
|
|
20075
|
+
let reader;
|
|
20076
|
+
let onAbort;
|
|
20077
|
+
const aborted = new Promise((_resolve, reject) => {
|
|
20078
|
+
onAbort = () => {
|
|
20079
|
+
reader?.cancel(signal.reason).catch(() => {});
|
|
20080
|
+
reject(signal.reason);
|
|
20081
|
+
};
|
|
20082
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
20083
|
+
if (signal.aborted)
|
|
20084
|
+
onAbort();
|
|
20085
|
+
});
|
|
20086
|
+
const request = (async () => {
|
|
20087
|
+
signal.throwIfAborted();
|
|
20088
|
+
const response = await fetch(url, { ...init, signal });
|
|
20089
|
+
if (signal.aborted) {
|
|
20090
|
+
response.body?.cancel(signal.reason).catch(() => {});
|
|
20091
|
+
signal.throwIfAborted();
|
|
20092
|
+
}
|
|
20093
|
+
reader = response.body?.getReader();
|
|
20094
|
+
const decoder = new TextDecoder;
|
|
20095
|
+
let text = "";
|
|
20096
|
+
if (reader) {
|
|
20097
|
+
try {
|
|
20098
|
+
for (;; ) {
|
|
20099
|
+
const chunk = await reader.read();
|
|
20100
|
+
signal.throwIfAborted();
|
|
20101
|
+
if (chunk.done)
|
|
20102
|
+
break;
|
|
20103
|
+
text += decoder.decode(chunk.value, { stream: true });
|
|
20104
|
+
}
|
|
20105
|
+
text += decoder.decode();
|
|
20106
|
+
} finally {
|
|
20107
|
+
reader.releaseLock();
|
|
20108
|
+
}
|
|
20109
|
+
}
|
|
20110
|
+
return new Response(response.body ? text : null, {
|
|
20111
|
+
status: response.status,
|
|
20112
|
+
statusText: response.statusText,
|
|
20113
|
+
headers: response.headers
|
|
20114
|
+
});
|
|
20115
|
+
})();
|
|
20116
|
+
try {
|
|
20117
|
+
return await Promise.race([request, aborted]);
|
|
20118
|
+
} finally {
|
|
20119
|
+
clearTimeout(timer);
|
|
20120
|
+
signal.removeEventListener("abort", onAbort);
|
|
20121
|
+
}
|
|
20122
|
+
}
|
|
20061
20123
|
function getConfiguredOAuthCallbackPort() {
|
|
20062
20124
|
return configuredOAuthCallbackPort;
|
|
20063
20125
|
}
|
|
@@ -20074,6 +20136,66 @@ class McpOAuthProvider {
|
|
|
20074
20136
|
config;
|
|
20075
20137
|
callbacks;
|
|
20076
20138
|
transients = getOwnedOAuthTransients();
|
|
20139
|
+
refreshRelease;
|
|
20140
|
+
refreshes = new Set;
|
|
20141
|
+
fetch = async (url, init) => {
|
|
20142
|
+
if (!(init?.body instanceof URLSearchParams) || init.body.get("grant_type") !== "refresh_token") {
|
|
20143
|
+
return fetch(url, init);
|
|
20144
|
+
}
|
|
20145
|
+
let finish;
|
|
20146
|
+
const pending = new Promise((resolve) => {
|
|
20147
|
+
finish = resolve;
|
|
20148
|
+
});
|
|
20149
|
+
this.refreshes.add(pending);
|
|
20150
|
+
const release = await acquireTokenRefreshLock(this.serverName).catch((error) => {
|
|
20151
|
+
this.refreshes.delete(pending);
|
|
20152
|
+
finish();
|
|
20153
|
+
throw error;
|
|
20154
|
+
});
|
|
20155
|
+
this.refreshRelease = async () => {
|
|
20156
|
+
this.refreshRelease = undefined;
|
|
20157
|
+
try {
|
|
20158
|
+
await release();
|
|
20159
|
+
} finally {
|
|
20160
|
+
this.refreshes.delete(pending);
|
|
20161
|
+
finish();
|
|
20162
|
+
}
|
|
20163
|
+
};
|
|
20164
|
+
try {
|
|
20165
|
+
init.signal?.throwIfAborted();
|
|
20166
|
+
const current = getAuthForUrl(this.serverName, this.serverUrl)?.tokens;
|
|
20167
|
+
if (!current?.refreshToken)
|
|
20168
|
+
throw new UnauthorizedError("MCP refresh credentials are no longer available");
|
|
20169
|
+
if (current.refreshToken !== init.body.get("refresh_token") && (!current.expiresAt || current.expiresAt > Date.now() / 1000)) {
|
|
20170
|
+
return Response.json({
|
|
20171
|
+
access_token: current.accessToken,
|
|
20172
|
+
refresh_token: current.refreshToken,
|
|
20173
|
+
token_type: "Bearer",
|
|
20174
|
+
...current.expiresAt ? { expires_in: Math.max(0, current.expiresAt - Date.now() / 1000) } : {},
|
|
20175
|
+
...current.scope ? { scope: current.scope } : {}
|
|
20176
|
+
});
|
|
20177
|
+
}
|
|
20178
|
+
const body = new URLSearchParams(init.body);
|
|
20179
|
+
body.set("refresh_token", current.refreshToken);
|
|
20180
|
+
const response = await fetchRefreshResponse(url, { ...init, body });
|
|
20181
|
+
if (!response.ok) {
|
|
20182
|
+
await this.refreshRelease();
|
|
20183
|
+
return response;
|
|
20184
|
+
}
|
|
20185
|
+
const parsed = OAuthTokensSchema.safeParse(await response.clone().json());
|
|
20186
|
+
if (!parsed.success) {
|
|
20187
|
+
await this.refreshRelease();
|
|
20188
|
+
return response;
|
|
20189
|
+
}
|
|
20190
|
+
return Response.json({ refresh_token: current.refreshToken, ...parsed.data });
|
|
20191
|
+
} catch (error) {
|
|
20192
|
+
await this.refreshRelease?.();
|
|
20193
|
+
throw error;
|
|
20194
|
+
}
|
|
20195
|
+
};
|
|
20196
|
+
async waitForRefresh() {
|
|
20197
|
+
await Promise.all(this.refreshes);
|
|
20198
|
+
}
|
|
20077
20199
|
transientEntry() {
|
|
20078
20200
|
if (!this.transients)
|
|
20079
20201
|
return getAuthForUrl(this.serverName, this.serverUrl);
|
|
@@ -20165,14 +20287,19 @@ class McpOAuthProvider {
|
|
|
20165
20287
|
};
|
|
20166
20288
|
}
|
|
20167
20289
|
async saveTokens(tokens) {
|
|
20168
|
-
|
|
20169
|
-
|
|
20170
|
-
|
|
20171
|
-
|
|
20172
|
-
|
|
20173
|
-
|
|
20174
|
-
|
|
20175
|
-
|
|
20290
|
+
try {
|
|
20291
|
+
if (!this.refreshRelease)
|
|
20292
|
+
this.ensureActive();
|
|
20293
|
+
const storedTokens = {
|
|
20294
|
+
accessToken: tokens.access_token,
|
|
20295
|
+
refreshToken: tokens.refresh_token,
|
|
20296
|
+
expiresAt: tokens.expires_in ? Date.now() / 1000 + tokens.expires_in : undefined,
|
|
20297
|
+
scope: tokens.scope
|
|
20298
|
+
};
|
|
20299
|
+
updateTokens(this.serverName, storedTokens, this.serverUrl);
|
|
20300
|
+
} finally {
|
|
20301
|
+
await this.refreshRelease?.();
|
|
20302
|
+
}
|
|
20176
20303
|
}
|
|
20177
20304
|
async redirectToAuthorization(authorizationUrl) {
|
|
20178
20305
|
this.ensureActive();
|
|
@@ -20255,9 +20382,10 @@ class McpOAuthProvider {
|
|
|
20255
20382
|
return params;
|
|
20256
20383
|
}
|
|
20257
20384
|
}
|
|
20258
|
-
var DEFAULT_OAUTH_CALLBACK_PORT = 19876, OAUTH_CALLBACK_PATH = "/callback", configuredOAuthCallbackPort, oauthCallbackPort;
|
|
20385
|
+
var DEFAULT_OAUTH_CALLBACK_PORT = 19876, OAUTH_CALLBACK_PATH = "/callback", REFRESH_REQUEST_TIMEOUT_MS = 15000, configuredOAuthCallbackPort, oauthCallbackPort;
|
|
20259
20386
|
var init_mcp_oauth_provider = __esm(() => {
|
|
20260
20387
|
init_auth2();
|
|
20388
|
+
init_auth();
|
|
20261
20389
|
init_mcp_auth();
|
|
20262
20390
|
configuredOAuthCallbackPort = DEFAULT_OAUTH_CALLBACK_PORT;
|
|
20263
20391
|
if (process.env.MCP_OAUTH_CALLBACK_PORT) {
|
|
@@ -20954,6 +21082,7 @@ var init_open = __esm(() => {
|
|
|
20954
21082
|
|
|
20955
21083
|
// dist/builtin/mcp/mcp-callback-server.ts
|
|
20956
21084
|
import { createServer } from "http";
|
|
21085
|
+
import { oauthErrorHtml, oauthSuccessHtml } from "@bastani/pi-ai/utils/oauth-page";
|
|
20957
21086
|
function handleRequest(req, res) {
|
|
20958
21087
|
const url = new URL(req.url || "/", `http://${req.headers.host}`);
|
|
20959
21088
|
if (url.pathname !== OAUTH_CALLBACK_PATH) {
|
|
@@ -21123,48 +21252,12 @@ function stopCallbackServer(error = new Error("OAuth callback server stopped"))
|
|
|
21123
21252
|
setOAuthCallbackPort(getConfiguredOAuthCallbackPort());
|
|
21124
21253
|
});
|
|
21125
21254
|
}
|
|
21126
|
-
var HTML_SUCCESS =
|
|
21127
|
-
<html>
|
|
21128
|
-
<head>
|
|
21129
|
-
<title>Pi - Authorization Successful</title>
|
|
21130
|
-
<style>
|
|
21131
|
-
body { font-family: system-ui, -apple-system, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #1a1a2e; color: #eee; }
|
|
21132
|
-
.container { text-align: center; padding: 2rem; }
|
|
21133
|
-
h1 { color: #4ade80; margin-bottom: 1rem; }
|
|
21134
|
-
p { color: #aaa; }
|
|
21135
|
-
</style>
|
|
21136
|
-
</head>
|
|
21137
|
-
<body>
|
|
21138
|
-
<div class="container">
|
|
21139
|
-
<h1>Authorization Successful</h1>
|
|
21140
|
-
<p>You can close this window and return to Pi.</p>
|
|
21141
|
-
</div>
|
|
21142
|
-
<script>setTimeout(() => window.close(), 2000);</script>
|
|
21143
|
-
</body>
|
|
21144
|
-
</html>`, renderCallbackErrorHtml = () => `<!DOCTYPE html>
|
|
21145
|
-
<html>
|
|
21146
|
-
<head>
|
|
21147
|
-
<title>Pi - Authorization Failed</title>
|
|
21148
|
-
<style>
|
|
21149
|
-
body { font-family: system-ui, -apple-system, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #1a1a2e; color: #eee; }
|
|
21150
|
-
.container { text-align: center; padding: 2rem; }
|
|
21151
|
-
h1 { color: #f87171; margin-bottom: 1rem; }
|
|
21152
|
-
p { color: #aaa; }
|
|
21153
|
-
.error { color: #fca5a5; font-family: monospace; margin-top: 1rem; padding: 1rem; background: rgba(248,113,113,0.1); border-radius: 0.5rem; }
|
|
21154
|
-
</style>
|
|
21155
|
-
</head>
|
|
21156
|
-
<body>
|
|
21157
|
-
<div class="container">
|
|
21158
|
-
<h1>Authorization Failed</h1>
|
|
21159
|
-
<p>An error occurred during authorization.</p>
|
|
21160
|
-
<div class="error">Return to Atomic and try again.</div>
|
|
21161
|
-
</div>
|
|
21162
|
-
</body>
|
|
21163
|
-
</html>`, server, serverTransition, pendingAuths, standaloneOwner, serverOwners, callbackOwner = () => getMcpOwner() ?? standaloneOwner, CALLBACK_TIMEOUT_MS, MAX_PORT_SCAN_ATTEMPTS = 25;
|
|
21255
|
+
var HTML_SUCCESS, renderCallbackErrorHtml = () => oauthErrorHtml("Return to Atomic and try again."), server, serverTransition, pendingAuths, standaloneOwner, serverOwners, callbackOwner = () => getMcpOwner() ?? standaloneOwner, CALLBACK_TIMEOUT_MS, MAX_PORT_SCAN_ATTEMPTS = 25;
|
|
21164
21256
|
var init_mcp_callback_server = __esm(() => {
|
|
21165
21257
|
init_mcp_oauth_provider();
|
|
21166
21258
|
init_logger();
|
|
21167
21259
|
init_diagnostics();
|
|
21260
|
+
HTML_SUCCESS = oauthSuccessHtml("You can close this window and return to Atomic.");
|
|
21168
21261
|
serverTransition = Promise.resolve();
|
|
21169
21262
|
pendingAuths = new Map;
|
|
21170
21263
|
standaloneOwner = {};
|
|
@@ -21371,7 +21464,7 @@ async function startAuthAttempt(serverName, serverUrl, definition, owner) {
|
|
|
21371
21464
|
};
|
|
21372
21465
|
if (config.grantType === "client_credentials") {
|
|
21373
21466
|
const authProvider = new McpOAuthProvider(serverName, serverUrl, config, providerCallbacks);
|
|
21374
|
-
const result = await auth(authProvider, { serverUrl }).catch((error) => {
|
|
21467
|
+
const result = await auth(authProvider, { serverUrl, fetchFn: authProvider.fetch }).catch((error) => {
|
|
21375
21468
|
throw sanitizeRemoteError(error, serverUrl);
|
|
21376
21469
|
});
|
|
21377
21470
|
assertActive(owner);
|
|
@@ -21393,7 +21486,7 @@ async function startAuthAttempt(serverName, serverUrl, definition, owner) {
|
|
|
21393
21486
|
assertActive: () => assertActive(owner)
|
|
21394
21487
|
});
|
|
21395
21488
|
try {
|
|
21396
|
-
const result = await auth(authProvider, { serverUrl }).catch((error) => {
|
|
21489
|
+
const result = await auth(authProvider, { serverUrl, fetchFn: authProvider.fetch }).catch((error) => {
|
|
21397
21490
|
throw sanitizeRemoteError(error, serverUrl);
|
|
21398
21491
|
});
|
|
21399
21492
|
assertActive(owner);
|
|
@@ -21406,7 +21499,7 @@ async function startAuthAttempt(serverName, serverUrl, definition, owner) {
|
|
|
21406
21499
|
const pendingTransport = {
|
|
21407
21500
|
serverName,
|
|
21408
21501
|
serverUrl,
|
|
21409
|
-
transport: new StreamableHTTPClientTransport(new URL(serverUrl), { authProvider }),
|
|
21502
|
+
transport: new StreamableHTTPClientTransport(new URL(serverUrl), { authProvider, fetch: authProvider.fetch }),
|
|
21410
21503
|
oauthState
|
|
21411
21504
|
};
|
|
21412
21505
|
pendingTransports.set(serverName, pendingTransport);
|
|
@@ -21908,22 +22001,33 @@ class McpServerManager {
|
|
|
21908
22001
|
onRedirect: async (_authUrl) => {}
|
|
21909
22002
|
});
|
|
21910
22003
|
}
|
|
21911
|
-
const
|
|
22004
|
+
const protect = (transport) => {
|
|
22005
|
+
if (authProvider) {
|
|
22006
|
+
const close = transport.close.bind(transport);
|
|
22007
|
+
transport.close = async () => {
|
|
22008
|
+
await authProvider.waitForRefresh();
|
|
22009
|
+
await close();
|
|
22010
|
+
};
|
|
22011
|
+
}
|
|
22012
|
+
return protectRemoteTransport(transport, resolvedUrl);
|
|
22013
|
+
};
|
|
22014
|
+
const streamableTransport = protect(new StreamableHTTPClientTransport(url, {
|
|
21912
22015
|
requestInit,
|
|
21913
|
-
authProvider
|
|
21914
|
-
|
|
22016
|
+
authProvider,
|
|
22017
|
+
fetch: authProvider?.fetch
|
|
22018
|
+
}));
|
|
21915
22019
|
try {
|
|
21916
22020
|
const testClient = new Client({ name: "pi-mcp-probe", version: "2.1.2" });
|
|
21917
22021
|
await testClient.connect(streamableTransport);
|
|
21918
22022
|
await testClient.close().catch(() => {});
|
|
21919
22023
|
await streamableTransport.close().catch(() => {});
|
|
21920
|
-
return
|
|
22024
|
+
return protect(new StreamableHTTPClientTransport(url, { requestInit, authProvider, fetch: authProvider?.fetch }));
|
|
21921
22025
|
} catch (error) {
|
|
21922
22026
|
await streamableTransport.close().catch(() => {});
|
|
21923
22027
|
if (error instanceof UnauthorizedError) {
|
|
21924
22028
|
throw error;
|
|
21925
22029
|
}
|
|
21926
|
-
return
|
|
22030
|
+
return protect(new SSEClientTransport(url, { requestInit, authProvider, fetch: authProvider?.fetch }));
|
|
21927
22031
|
}
|
|
21928
22032
|
}
|
|
21929
22033
|
async fetchAllTools(client) {
|
|
@@ -25625,7 +25729,7 @@ function stateChangedResult() {
|
|
|
25625
25729
|
function createDirectToolExecutor(ensureInitialized, isActiveStateOwner, spec, options = {}) {
|
|
25626
25730
|
const startUiSession = options.startUiSession ?? maybeStartUiSession;
|
|
25627
25731
|
const startAutoAuth = options.startAutoAuth ?? attemptDirectAutoAuth;
|
|
25628
|
-
|
|
25732
|
+
const execute = async function execute(_toolCallId, params, signal) {
|
|
25629
25733
|
signal?.throwIfAborted();
|
|
25630
25734
|
let state;
|
|
25631
25735
|
try {
|
|
@@ -25761,6 +25865,7 @@ Expected parameters:
|
|
|
25761
25865
|
${formatSchema(spec.inputSchema)}`;
|
|
25762
25866
|
return {
|
|
25763
25867
|
content: [{ type: "text", text: `Error: ${errorText}` }],
|
|
25868
|
+
structuredContent: result,
|
|
25764
25869
|
details: { error: "tool_error", server: spec.serverName }
|
|
25765
25870
|
};
|
|
25766
25871
|
}
|
|
@@ -25772,11 +25877,13 @@ ${formatSchema(spec.inputSchema)}`;
|
|
|
25772
25877
|
content: [{ type: "text", text: `${resultText}
|
|
25773
25878
|
|
|
25774
25879
|
${uiMessage}` }],
|
|
25880
|
+
structuredContent: result,
|
|
25775
25881
|
details: { server: spec.serverName, tool: spec.originalName, uiOpen: true }
|
|
25776
25882
|
};
|
|
25777
25883
|
}
|
|
25778
25884
|
return {
|
|
25779
25885
|
content: content.length > 0 ? content : [{ type: "text", text: "(empty result)" }],
|
|
25886
|
+
structuredContent: result,
|
|
25780
25887
|
details: { server: spec.serverName, tool: spec.originalName }
|
|
25781
25888
|
};
|
|
25782
25889
|
} catch (error) {
|
|
@@ -25806,6 +25913,18 @@ ${formatSchema(spec.inputSchema)}`;
|
|
|
25806
25913
|
}
|
|
25807
25914
|
}
|
|
25808
25915
|
};
|
|
25916
|
+
return async (...args) => {
|
|
25917
|
+
const result = await execute(...args);
|
|
25918
|
+
if (spec.resourceUri || result.structuredContent !== undefined)
|
|
25919
|
+
return result;
|
|
25920
|
+
return {
|
|
25921
|
+
...result,
|
|
25922
|
+
structuredContent: {
|
|
25923
|
+
content: result.content.map((block) => block.type === "text" ? { type: "text", text: block.text } : { type: "image", data: block.data, mimeType: block.mimeType }),
|
|
25924
|
+
isError: !!result.details.error
|
|
25925
|
+
}
|
|
25926
|
+
};
|
|
25927
|
+
};
|
|
25809
25928
|
}
|
|
25810
25929
|
var init_direct_tool_executor = __esm(() => {
|
|
25811
25930
|
init_init();
|
|
@@ -27086,7 +27205,7 @@ function blockToLines(block) {
|
|
|
27086
27205
|
}
|
|
27087
27206
|
return [`[image: ${block.mimeType}]`];
|
|
27088
27207
|
}
|
|
27089
|
-
function formatMcpToolResultLines(result, expanded, maxCollapsedLines =
|
|
27208
|
+
function formatMcpToolResultLines(result, expanded, maxCollapsedLines = 5) {
|
|
27090
27209
|
const allLines = result.content.flatMap(blockToLines);
|
|
27091
27210
|
const lines = allLines.length > 0 ? allLines : ["(empty result)"];
|
|
27092
27211
|
if (expanded || lines.length <= maxCollapsedLines) {
|
|
@@ -27114,6 +27233,7 @@ ${theme.fg("muted", `(${expandKey} Expand)`)}` : "";
|
|
|
27114
27233
|
// dist/builtin/mcp/tool-call-renderer.ts
|
|
27115
27234
|
init_tool_metadata();
|
|
27116
27235
|
init_types2();
|
|
27236
|
+
import { formatToolCallWithArgs } from "@bastani/atomic";
|
|
27117
27237
|
import { stripTerminalSequences, Text as Text2 } from "@earendil-works/pi-tui";
|
|
27118
27238
|
function textArg(value) {
|
|
27119
27239
|
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
@@ -27129,14 +27249,31 @@ function inferServer(tool, source) {
|
|
|
27129
27249
|
});
|
|
27130
27250
|
return candidates.length === 1 ? candidates[0] : undefined;
|
|
27131
27251
|
}
|
|
27132
|
-
function
|
|
27252
|
+
function redactArguments(value) {
|
|
27253
|
+
if (Array.isArray(value))
|
|
27254
|
+
return value.map(redactArguments);
|
|
27255
|
+
if (value !== null && typeof value === "object")
|
|
27256
|
+
return Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, /token|secret|password|authorization|api.?key/i.test(key) ? "[redacted]" : redactArguments(entry)]));
|
|
27257
|
+
return value;
|
|
27258
|
+
}
|
|
27259
|
+
function header(theme, server, operation, args, expanded = false) {
|
|
27133
27260
|
const clean = (value) => stripTerminalSequences(value).replace(/[\r\n\t]/g, " ");
|
|
27261
|
+
if (server && args && Object.keys(args).length > 0)
|
|
27262
|
+
return new Text2(formatToolCallWithArgs(`MCP${server ? ` ${clean(server)}` : ""} · ${clean(operation)}`, redactArguments(args), { fg: (name, text) => theme.fg(name, text), bold: (text) => theme.bold?.(text) ?? text }, expanded), 0, 0);
|
|
27134
27263
|
return new Text2(theme.fg("toolTitle", `MCP${server ? ` ${clean(server)}` : ""}`) + theme.fg("muted", ` · ${clean(operation)}`), 0, 0);
|
|
27135
27264
|
}
|
|
27136
|
-
function renderMcpDirectToolCall(server, tool, theme) {
|
|
27137
|
-
return header(theme, server, tool);
|
|
27265
|
+
function renderMcpDirectToolCall(server, tool, theme, args, expanded = false) {
|
|
27266
|
+
return header(theme, server, tool, args, expanded);
|
|
27138
27267
|
}
|
|
27139
|
-
function renderMcpToolCall(args, theme, source = {}) {
|
|
27268
|
+
function renderMcpToolCall(args, theme, source = {}, expanded = false) {
|
|
27269
|
+
let callArgs = args.args;
|
|
27270
|
+
if (typeof callArgs === "string") {
|
|
27271
|
+
try {
|
|
27272
|
+
callArgs = JSON.parse(callArgs);
|
|
27273
|
+
} catch {
|
|
27274
|
+
callArgs = { args: callArgs };
|
|
27275
|
+
}
|
|
27276
|
+
}
|
|
27140
27277
|
const action = textArg(args?.action);
|
|
27141
27278
|
const tool = textArg(args?.tool);
|
|
27142
27279
|
const connect = textArg(args?.connect);
|
|
@@ -27144,8 +27281,11 @@ function renderMcpToolCall(args, theme, source = {}) {
|
|
|
27144
27281
|
const server = textArg(args?.server);
|
|
27145
27282
|
if (action === "ui-messages")
|
|
27146
27283
|
return header(theme, undefined, action);
|
|
27147
|
-
if (tool)
|
|
27148
|
-
|
|
27284
|
+
if (tool) {
|
|
27285
|
+
const target = server ?? inferServer(tool, source);
|
|
27286
|
+
const knownTarget = target !== undefined && (Object.hasOwn(source.config?.mcpServers ?? {}, target) || source.toolMetadata?.has(target));
|
|
27287
|
+
return header(theme, target, tool, knownTarget && typeof callArgs === "object" && callArgs !== null && !Array.isArray(callArgs) ? callArgs : undefined, expanded);
|
|
27288
|
+
}
|
|
27149
27289
|
if (connect)
|
|
27150
27290
|
return header(theme, connect, "connect");
|
|
27151
27291
|
if (describe)
|
|
@@ -27225,8 +27365,16 @@ function mcpAdapter(pi) {
|
|
|
27225
27365
|
description: spec.description || "(no description)",
|
|
27226
27366
|
promptSnippet: truncateAtWord(spec.description, 100) || `MCP tool from ${spec.serverName}`,
|
|
27227
27367
|
parameters: Type.Unsafe(spec.inputSchema || { type: "object", properties: {} }),
|
|
27368
|
+
exposure: "direct",
|
|
27369
|
+
namespace: { name: `mcp:${spec.serverName}` },
|
|
27370
|
+
...!spec.resourceUri ? { outputSchema: Type.Object({
|
|
27371
|
+
content: Type.Array(Type.Object({ type: Type.String() }, { additionalProperties: true })),
|
|
27372
|
+
isError: Type.Optional(Type.Boolean()),
|
|
27373
|
+
structuredContent: Type.Optional(Type.Object({}, { additionalProperties: true })),
|
|
27374
|
+
_meta: Type.Optional(Type.Object({}, { additionalProperties: true }))
|
|
27375
|
+
}, { additionalProperties: true }) } : {},
|
|
27228
27376
|
execute: createDirectToolExecutor(() => ensureMcpInitialized(), (candidate) => isOwnedState(candidate), spec),
|
|
27229
|
-
renderCall: (
|
|
27377
|
+
renderCall: (args, theme, context) => renderMcpDirectToolCall(spec.serverName, spec.originalName, theme, args, context.expanded),
|
|
27230
27378
|
renderResult: renderMcpToolResult
|
|
27231
27379
|
});
|
|
27232
27380
|
}
|
|
@@ -27555,7 +27703,7 @@ function mcpAdapter(pi) {
|
|
|
27555
27703
|
server: Type.Optional(Type.String({ description: "Filter to specific server (also disambiguates tool calls)" })),
|
|
27556
27704
|
action: Type.Optional(Type.String({ description: "Action: 'ui-messages' to retrieve prompts/intents from UI sessions" }))
|
|
27557
27705
|
}),
|
|
27558
|
-
renderCall: (args, theme) => renderMcpToolCall(args, theme, { config: state?.config ?? renderConfig, toolMetadata: state?.toolMetadata }),
|
|
27706
|
+
renderCall: (args, theme, context) => renderMcpToolCall(args, theme, { config: state?.config ?? renderConfig, toolMetadata: state?.toolMetadata }, context.expanded),
|
|
27559
27707
|
renderResult: renderMcpToolResult,
|
|
27560
27708
|
async execute(_toolCallId, params, signal, _onUpdate, _ctx) {
|
|
27561
27709
|
signal?.throwIfAborted();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/mcp",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.25-alpha.2",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension that adapts MCP (Model Context Protocol) servers into the coding agent. Fork of: https://github.com/nicobailon/pi-mcp-adapter",
|
|
6
6
|
"contributors": [
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"@bastani/atomic": "*",
|
|
35
35
|
"@bastani/pi-ai": "*",
|
|
36
|
-
"@earendil-works/pi-tui": "^0.
|
|
36
|
+
"@earendil-works/pi-tui": "^0.99.1",
|
|
37
37
|
"zod": "^3.25.0 || ^4.0.0",
|
|
38
38
|
"typebox": "*"
|
|
39
39
|
},
|
|
@@ -52,6 +52,10 @@
|
|
|
52
52
|
"@modelcontextprotocol/ext-apps": "^1.7.5",
|
|
53
53
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
54
54
|
"open": "^11.0.1",
|
|
55
|
+
"proper-lockfile": "4.1.2",
|
|
55
56
|
"zod": "^3.25.0 || ^4.0.0"
|
|
57
|
+
},
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"@types/proper-lockfile": "4.1.4"
|
|
56
60
|
}
|
|
57
61
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/subagents",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.25-alpha.2",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension for delegating tasks to subagents with parallel execution. Fork of: https://github.com/nicobailon/pi-subagents",
|
|
6
6
|
"contributors": [
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"@bastani/atomic": "*",
|
|
37
37
|
"@bastani/pi-ai": "*",
|
|
38
|
-
"@earendil-works/pi-agent-core": "^0.
|
|
39
|
-
"@earendil-works/pi-tui": "^0.
|
|
38
|
+
"@earendil-works/pi-agent-core": "^0.99.1",
|
|
39
|
+
"@earendil-works/pi-tui": "^0.99.1",
|
|
40
40
|
"typebox": "*"
|
|
41
41
|
},
|
|
42
42
|
"peerDependenciesMeta": {
|
|
@@ -18260,6 +18260,7 @@ function registerSubagentExtension(pi) {
|
|
|
18260
18260
|
});
|
|
18261
18261
|
const tool = {
|
|
18262
18262
|
name: "subagent",
|
|
18263
|
+
exposure: "model-only",
|
|
18263
18264
|
label: "Subagent",
|
|
18264
18265
|
description: SUBAGENT_TOOL_DESCRIPTION,
|
|
18265
18266
|
parameters: SubagentParams,
|