@bastani/atomic 0.9.4-alpha.1 → 0.9.4-alpha.11
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 +109 -0
- package/dist/builtin/cursor/CHANGELOG.md +24 -0
- package/dist/builtin/cursor/package.json +4 -4
- package/dist/builtin/intercom/CHANGELOG.md +24 -0
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/mcp/CHANGELOG.md +24 -0
- package/dist/builtin/mcp/package.json +4 -4
- package/dist/builtin/subagents/CHANGELOG.md +52 -0
- package/dist/builtin/subagents/agents/code-simplifier.md +2 -2
- package/dist/builtin/subagents/agents/codebase-analyzer.md +2 -2
- package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +2 -2
- package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
- package/dist/builtin/subagents/agents/codebase-research-analyzer.md +2 -2
- package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
- package/dist/builtin/subagents/agents/debugger.md +1 -1
- package/dist/builtin/subagents/agents/worker.md +2 -2
- package/dist/builtin/subagents/package.json +4 -4
- package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +11 -1
- package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +11 -1
- package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +2 -0
- package/dist/builtin/subagents/src/runs/background/subagent-runner-step.ts +27 -4
- package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +25 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +1 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +1 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +1 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +1 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +2 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +3 -1
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +22 -0
- package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +15 -5
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +5 -1
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +2 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +4 -1
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +4 -1
- package/dist/builtin/subagents/src/runs/shared/attempt-watchdog.ts +126 -0
- package/dist/builtin/subagents/src/runs/shared/model-candidate-filter.ts +53 -0
- package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +52 -53
- package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +2 -0
- package/dist/builtin/subagents/src/shared/model-info.ts +16 -0
- package/dist/builtin/subagents/src/shared/types-config.ts +2 -0
- package/dist/builtin/subagents/src/slash/slash-commands.ts +2 -2
- package/dist/builtin/subagents/src/tui/render-result-compact.ts +3 -2
- package/dist/builtin/subagents/src/tui/render-result.ts +3 -3
- package/dist/builtin/subagents/src/tui/render-widget-graph.ts +4 -3
- package/dist/builtin/subagents/src/tui/render-widget.ts +10 -4
- package/dist/builtin/web-access/CHANGELOG.md +24 -0
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +54 -0
- package/dist/builtin/workflows/builtin/deep-research-codebase-utils.ts +24 -22
- package/dist/builtin/workflows/builtin/goal-runner.ts +12 -23
- package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +4 -4
- package/dist/builtin/workflows/builtin/ralph-models.ts +53 -75
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/src/runs/shared/model-fallback-failures.ts +59 -1
- package/dist/builtin/workflows/src/tui/keybindings-adapter.ts +4 -0
- package/dist/builtin/workflows/src/tui/overlay-adapter.ts +4 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-input.ts +12 -1
- package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +2 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +6 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +4 -0
- package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +4 -0
- package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +8 -9
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js +3 -2
- package/dist/bun/cli.js.map +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +13 -25
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +15 -5
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +10 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +18 -1
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +8 -1
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +16 -8
- 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 +4 -2
- package/dist/core/agent-session-export.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts +5 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +18 -7
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +13 -3
- 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-prompt.d.ts +2 -0
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +15 -2
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-retry.d.ts +2 -0
- package/dist/core/agent-session-retry.d.ts.map +1 -1
- package/dist/core/agent-session-retry.js +66 -7
- package/dist/core/agent-session-retry.js.map +1 -1
- package/dist/core/agent-session-state.d.ts.map +1 -1
- package/dist/core/agent-session-state.js +2 -2
- package/dist/core/agent-session-state.js.map +1 -1
- package/dist/core/agent-session-tool-hooks.d.ts +7 -1
- package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
- package/dist/core/agent-session-tool-hooks.js +26 -4
- 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 +4 -0
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session-tree.d.ts.map +1 -1
- package/dist/core/agent-session-tree.js +3 -1
- package/dist/core/agent-session-tree.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +4 -0
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +5 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +5 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/async/format.d.ts +3 -0
- package/dist/core/async/format.d.ts.map +1 -0
- package/dist/core/async/format.js +50 -0
- package/dist/core/async/format.js.map +1 -0
- package/dist/core/async/job-manager.d.ts +39 -0
- package/dist/core/async/job-manager.d.ts.map +1 -0
- package/dist/core/async/job-manager.js +254 -0
- package/dist/core/async/job-manager.js.map +1 -0
- package/dist/core/async/session-manager.d.ts +18 -0
- package/dist/core/async/session-manager.d.ts.map +1 -0
- package/dist/core/async/session-manager.js +61 -0
- package/dist/core/async/session-manager.js.map +1 -0
- package/dist/core/async/types.d.ts +23 -0
- package/dist/core/async/types.d.ts.map +1 -0
- package/dist/core/async/types.js +2 -0
- package/dist/core/async/types.js.map +1 -0
- package/dist/core/copilot-model-catalog.d.ts +38 -74
- package/dist/core/copilot-model-catalog.d.ts.map +1 -1
- package/dist/core/copilot-model-catalog.js +177 -68
- package/dist/core/copilot-model-catalog.js.map +1 -1
- package/dist/core/copilot-model-static-fallbacks.d.ts +43 -0
- package/dist/core/copilot-model-static-fallbacks.d.ts.map +1 -0
- package/dist/core/copilot-model-static-fallbacks.js +50 -0
- package/dist/core/copilot-model-static-fallbacks.js.map +1 -0
- package/dist/core/copilot-model-synthesis.d.ts +10 -0
- package/dist/core/copilot-model-synthesis.d.ts.map +1 -0
- package/dist/core/copilot-model-synthesis.js +89 -0
- package/dist/core/copilot-model-synthesis.js.map +1 -0
- package/dist/core/extensions/api-types.d.ts +2 -1
- 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/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader-core.d.ts.map +1 -1
- package/dist/core/extensions/loader-core.js +3 -3
- package/dist/core/extensions/loader-core.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts +11 -0
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +79 -11
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/session-events.d.ts +7 -1
- package/dist/core/extensions/session-events.d.ts.map +1 -1
- package/dist/core/extensions/session-events.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts +2 -0
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +38 -5
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/model-registry-builtins.d.ts.map +1 -1
- package/dist/core/model-registry-builtins.js +40 -6
- package/dist/core/model-registry-builtins.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +4 -3
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-defaults.d.ts.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/resource-loader-reload.d.ts.map +1 -1
- package/dist/core/resource-loader-reload.js +6 -3
- package/dist/core/resource-loader-reload.js.map +1 -1
- package/dist/core/resource-loader-types.d.ts +6 -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/session-manager-core.d.ts +2 -12
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js +8 -16
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/settings-manager-resource-accessors.d.ts +1 -0
- package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-resource-accessors.js +11 -0
- package/dist/core/settings-manager-resource-accessors.js.map +1 -1
- package/dist/core/settings-manager-ui-accessors.d.ts +2 -0
- package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-ui-accessors.js +9 -0
- package/dist/core/settings-manager-ui-accessors.js.map +1 -1
- package/dist/core/settings-types.d.ts +2 -0
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/timings.d.ts +7 -5
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js +42 -24
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/bash-async-execution.d.ts +25 -0
- package/dist/core/tools/bash-async-execution.d.ts.map +1 -0
- package/dist/core/tools/bash-async-execution.js +71 -0
- package/dist/core/tools/bash-async-execution.js.map +1 -0
- package/dist/core/tools/bash-async-jobs.d.ts +10 -0
- package/dist/core/tools/bash-async-jobs.d.ts.map +1 -1
- package/dist/core/tools/bash-async-jobs.js +18 -2
- package/dist/core/tools/bash-async-jobs.js.map +1 -1
- package/dist/core/tools/bash-async-output.d.ts +3 -1
- package/dist/core/tools/bash-async-output.d.ts.map +1 -1
- package/dist/core/tools/bash-async-output.js +4 -1
- package/dist/core/tools/bash-async-output.js.map +1 -1
- package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
- package/dist/core/tools/bash-pty-native.js +2 -2
- package/dist/core/tools/bash-pty-native.js.map +1 -1
- package/dist/core/tools/bash.d.ts +10 -4
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +20 -38
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/read-selectors.d.ts.map +1 -1
- package/dist/core/tools/read-selectors.js +19 -1
- package/dist/core/tools/read-selectors.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +12 -23
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/search-native.d.ts.map +1 -1
- package/dist/core/tools/search-native.js +2 -2
- package/dist/core/tools/search-native.js.map +1 -1
- package/dist/index-extensions.d.ts +1 -1
- package/dist/index-extensions.d.ts.map +1 -1
- package/dist/index-extensions.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main-session.d.ts.map +1 -1
- package/dist/main-session.js +14 -5
- package/dist/main-session.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +56 -32
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +3 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +22 -15
- package/dist/modes/interactive/components/assistant-message.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 +5 -5
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.js +8 -0
- package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js +1 -0
- package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +6 -2
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +16 -5
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +6 -1
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.d.ts +2 -0
- package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-deferred-startup.js +59 -0
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -0
- package/dist/modes/interactive/interactive-editor-actions.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-editor-actions.js +1 -0
- package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-context.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-extension-context.js +1 -0
- package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +3 -0
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +6 -0
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -0
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-types.d.ts +2 -0
- package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.js +2 -4
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +4 -3
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +5 -2
- 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 +11 -1
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +28 -51
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +27 -51
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.js +19 -0
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +26 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/rpc-entry.d.ts +3 -0
- package/dist/rpc-entry.d.ts.map +1 -0
- package/dist/rpc-entry.js +12 -0
- package/dist/rpc-entry.js.map +1 -0
- package/dist/utils/image-convert.d.ts +1 -0
- package/dist/utils/image-convert.d.ts.map +1 -1
- package/dist/utils/image-convert.js +21 -15
- package/dist/utils/image-convert.js.map +1 -1
- package/dist/utils/image-process.d.ts +18 -0
- package/dist/utils/image-process.d.ts.map +1 -0
- package/dist/utils/image-process.js +83 -0
- package/dist/utils/image-process.js.map +1 -0
- package/dist/utils/mime.d.ts.map +1 -1
- package/dist/utils/mime.js +41 -0
- package/dist/utils/mime.js.map +1 -1
- package/dist/utils/module-require.d.ts +11 -0
- package/dist/utils/module-require.d.ts.map +1 -0
- package/dist/utils/module-require.js +16 -0
- package/dist/utils/module-require.js.map +1 -0
- package/docs/compaction.md +2 -0
- package/docs/development.md +10 -0
- package/docs/extensions.md +11 -0
- package/docs/models.md +3 -3
- package/docs/providers.md +2 -1
- package/docs/rpc.md +60 -2
- package/docs/sdk.md +1 -1
- package/docs/settings.md +4 -1
- package/docs/subagents.md +6 -0
- package/docs/tools.md +4 -2
- package/docs/workflows.md +4 -2
- package/npm-shrinkwrap.json +138 -171
- package/package.json +19 -12
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,115 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.9.4-alpha.11] - 2026-07-03
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Fixed async `bash({ async: true })` jobs finishing silently: completed or failed session-managed background bash jobs now enqueue an `async-job-result` follow-up message into the originating chat session automatically, while explicit completed-job polling, explicit cancellation, and parent aborts acknowledge the job and suppress duplicate or unwanted idle turns. Suppression is checked again at the streaming boundary so a completed job polled while its automatic follow-up is staged does not later deliver a duplicate. Async delivery bookkeeping is now bounded by the existing background-job retention defaults, suppressions stay tied to retained jobs so disposed-session running jobs cannot later fall back into the owner session, 12KB–50KB follow-up outputs persist their full output path before inline preview truncation, just-under-threshold raw outputs remain fully inline instead of being preview-truncated without a `fullOutputPath`, shared-manager lifecycle tracking prevents owner-session disposal from dropping later-session jobs while cleaning stale handlers from disposed fork/subagent sessions, and non-blocking delivery attempts keep one live streaming session from delaying unrelated async job completions.
|
|
10
|
+
- Fixed a background bash job leak where a failed async-manager registration (disposed manager/session or a capacity race mid-flight) left a never-executed job permanently reported as `running` to `__atomic_bash_job` polls; the managed job entry is now discarded when registration fails and the tool call error is surfaced unchanged.
|
|
11
|
+
|
|
12
|
+
## [0.9.4-alpha.10] - 2026-07-03
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- Fixed every builtin extension (workflows, subagents, mcp, web-access, intercom, cursor) failing to load with `Package subpath './package.json' is not defined by "exports"` for npm/bun package installs of Atomic (regression in 0.9.4-alpha.9): the extension loader's installed-package alias fallback resolved host packages via `require.resolve("<pkg>/package.json")`, which Node's strict exports-map encapsulation rejects for packages like `@earendil-works/pi-ai` that do not export `./package.json` (the compiled binary and Bun-run dev paths were unaffected, which is why it slipped through). The loader now locates package roots by scanning the `node_modules` resolution chain directly, bypassing exports maps entirely while staying `import.meta.resolve()`-free to keep bytecode compilation intact. CI now guards this path with an installed-layout smoke test that runs the built package under the Node runtime on both Linux and Windows.
|
|
17
|
+
|
|
18
|
+
## [0.9.4-alpha.9] - 2026-07-02
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- Sped up TUI startup for the compiled Bun binary (and Windows) by ~2.8x on warm starts: builtin extensions transpiled at runtime through jiti now use a persistent on-disk cache at `~/.atomic/agent/cache/jiti/<version>` instead of re-transpiling ~280 TypeScript files on every launch (extension loading drops from ~4.1s to ~1.4s on Linux). Cache entries self-invalidate via jiti's source-content hashing, and stale version directories are pruned in the background.
|
|
23
|
+
- Made `--version`/`-v` a fast path that prints the version before loading the full CLI module graph, dropping `atomic --version` from ~380ms to ~25ms. The CLI entrypoint now loads the main module graph dynamically so metadata fast paths skip it entirely.
|
|
24
|
+
- Decoupled the TUI first paint from extension loading: in interactive mode the shell (header, editor, footer) now renders immediately with a "Loading extensions, skills, prompts, themes..." indicator while extension code loads in the background, dropping perceived compiled-binary startup from ~2s (warm) / ~5s (cold) to ~0.5s regardless of extension count. Deferred loading only engages when nothing before first paint needs extensions (no pending trust prompt, `-e` paths, extension flags, or CLI/settings model selection); resources, startup notices, and any saved-model restore that depends on extension-registered providers are applied once the background load completes.
|
|
25
|
+
- Deferred loading of the HTML session export module (including its large generated template) until `--export` or `/export` is actually used.
|
|
26
|
+
- Compiled binaries are now built with Bun bytecode compilation (`--bytecode --format=cjs`), skipping JavaScript parsing at launch: TUI first paint drops from ~450ms to ~200ms and `--version` from ~285ms to ~85ms. To support the CJS bundle (where `import.meta.url` no longer points into Bun's virtual filesystem), binary detection also checks `process.argv[1]`, native-module `require`s are anchored to the executable path, and the extension loader's dev-mode alias fallback resolves packages via their `package.json` export instead of `import.meta.resolve()`.
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
|
|
30
|
+
- Fixed intercepted provider safety refusals dead-ending agent turns: a canned "I'm sorry, but I cannot assist with that request." completion arriving with zero token usage and a spurious `stopReason` of `length` (or `stop`) — observed on `github-copilot` GPT models under very large contexts — was accepted as the final answer, silently ending the turn (and, inside workflows, poisoning worker receipts). Such canned refusals are now detected (single short refusal text, no tool calls or thinking, zero billed output) and auto-retried like other transient failures, bounded by `maxRetries`; genuine model-authored refusals that bill output tokens are never retried ([#1608](https://github.com/bastani-inc/atomic/issues/1608)).
|
|
31
|
+
- Fixed the root cause of GitHub Copilot sessions overrunning server-enforced limits when the live CAPI `/models` catalog is unavailable (cold start without cache, catalog fetch failure, or network-restricted environments): several bundled `pi-ai` Copilot model definitions disagree with what CAPI actually enforces — the `gpt-5.x` family claims a 400k context window vs CAPI's 272k default tier, `claude-opus-4.6`/`claude-sonnet-4.6` claim the branded 1M window as their base tier vs CAPI's 200k, and `claude-opus-4.6`/`4.7` ship a 32k output cap vs CAPI's real 64k. Because auto-compaction thresholds are driven by `model.contextWindow`, an overstated window meant sessions never compacted, sailed past the real server cap, and were intercepted by CAPI with the canned refusals above; understated output caps truncated long responses at half the real limit. Atomic now applies a static CAPI-derived limit snapshot (snapshotted 2026-07-02) for every bundled Copilot model present in the CAPI catalog whenever the active catalog has no entry for it, carrying the full tier structure — default-tier context window, `max_output_tokens`, and the branded long-context tier with its hard input cap where CAPI advertises one (e.g. 272k/1.05M with a 922k input cap for `gpt-5.5`, 200k/1M with a 936k input cap for `claude-opus-4.8`) — so persisted long-context selections stay valid offline; the live catalog (or its disk cache) always wins when available ([#1608](https://github.com/bastani-inc/atomic/issues/1608)).
|
|
32
|
+
- Changed structured safety-trigger errors to be auto-retried for all providers, not just GitHub Copilot Gemini: pi-ai maps Anthropic `refusal` stops to a canned "The model refused to complete the request" error and OpenAI-style APIs surface `finish_reason: content_filter`; both are now classified as retryable (bounded by `maxRetries`) so spurious safety triggers re-request the model call instead of dead-ending the task ([#1608](https://github.com/bastani-inc/atomic/issues/1608)).
|
|
33
|
+
|
|
34
|
+
## [0.9.4-alpha.7] - 2026-07-02
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- Added dynamic GitHub Copilot model population from the live CAPI `/models` catalog: picker-enabled, non-disabled plain chat ids are synthesized from catalog metadata (endpoints, capabilities, limits, and display names) while built-in `pi-ai` definitions still win, namespaced enterprise deployments such as `org/deployment/model` are skipped, and cached catalog metadata enables the same models on cold start.
|
|
39
|
+
- Added catalog-driven thinking-level gating for GitHub Copilot models so dynamically synthesized entries and bundled `pi-ai` Copilot models only offer the reasoning levels advertised by CAPI's `capabilities.supports.reasoning_effort` arrays, while models without an effort array keep their existing thinking behavior.
|
|
40
|
+
- Added a subagent watchdog escape hatch: setting `ATOMIC_SUBAGENT_ATTEMPT_IDLE_TIMEOUT_MS` or `ATOMIC_SUBAGENT_ATTEMPT_TIMEOUT_MS` to `0` (or a negative value) now disables the corresponding per-attempt timeout entirely; non-numeric values are ignored and the defaults apply. The `ATOMIC_SUBAGENT_ATTEMPT_KILL_GRACE_MS` SIGTERM→SIGKILL grace period intentionally cannot be disabled — `0`, negative, or non-numeric values fall back to its default so escalation always stays bounded ([#1581](https://github.com/bastani-inc/atomic/pull/1581)).
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
|
|
44
|
+
- Reverted the `@types/node` devDependency from `26.0.1` back to `24.12.4` to match the deliberate root `overrides` pin that aligns with upstream Pi's resolved lockfile (see [#1489](https://github.com/bastani-inc/atomic/pull/1489)); the dependabot bump in [#1548](https://github.com/bastani-inc/atomic/pull/1548) was a semantic no-op because the override forced resolution to `24.12.4`. Dependabot now ignores `@types/node` so it stops proposing inert bumps.
|
|
45
|
+
- Fixed the `read` tool to parse colon-delimited `file:START:END` (and grep-style `file:LINE:COL`) path selectors as a line range instead of leaving the leading number glued to the path (`file:395`), which produced a bogus `ENOENT` and pushed models (e.g. Opus) to fall back to `sed` ([#1585](https://github.com/bastani-inc/atomic/issues/1585)).
|
|
46
|
+
- Fixed GitHub Copilot models to use the live `max_output_tokens` value from the Copilot model catalog, preventing `github-copilot/claude-opus-4.8` from being capped by Atomic's stale built-in output-token limit after compaction ([#1582](https://github.com/bastani-inc/atomic/issues/1582)).
|
|
47
|
+
- Fixed active GitHub Copilot sessions to adopt live catalog model metadata as soon as the catalog loads, so fallback models refresh their supported reasoning levels without requiring a restart.
|
|
48
|
+
- Fixed workflow and subagent model fallback chains so request/context incompatibility failures (HTTP 400/413/422 bad/unprocessable/payload-too-large request, unsupported tool/parameter, context-length/context-window overflow, `invalid_request`/`bad_request`/`too_large` errors) advance to the next candidate instead of stopping. This ensures that when none of the configured fallback candidates can serve the current request, Atomic falls back to the currently selected user model rather than failing outright. Refusals, content-filter/safety blocks, cancellations, and task failures still stop the chain and are never retried on another model ([#1580](https://github.com/bastani-inc/atomic/issues/1580)).
|
|
49
|
+
- Fixed foreground and background subagent model attempts that produced no child activity from hanging indefinitely. Atomic now bounds each candidate with an idle watchdog and wall-clock cap, records retryable timeout attempts so fallback continues, and skips known unauthenticated providers before spawning while preserving unknown/custom providers and the current-model last resort ([#1580](https://github.com/bastani-inc/atomic/issues/1580)).
|
|
50
|
+
- Fixed the subagent per-attempt idle watchdog so an in-flight tool execution counts as activity: a slow, quiet tool call (long build or test run with no interim output) is no longer killed as a stalled attempt; the wall-clock cap still bounds such attempts ([#1581](https://github.com/bastani-inc/atomic/pull/1581)).
|
|
51
|
+
- Aligned the subagents and workflows model-failure classifiers' direct-message precedence and added a cross-package conformance test suite so the two classifier copies cannot silently drift ([#1581](https://github.com/bastani-inc/atomic/pull/1581)).
|
|
52
|
+
- Fixed the background subagent runner to spawn one default-model attempt when no model candidates were ever configured (no primary model, no fallbacks, and no current model), mirroring the foreground path instead of silently exiting 1 with no error and no spawn; an explicitly empty candidate list produced by pre-spawn auth filtering is still respected and surfaced as an error ([#1581](https://github.com/bastani-inc/atomic/pull/1581)).
|
|
53
|
+
|
|
54
|
+
## [0.9.4-alpha.6] - 2026-07-01
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
|
|
58
|
+
- Added `get_entries` and `get_tree` RPC commands for reading session entries and tree snapshots over RPC, with corresponding `RpcClient.getEntries`/`getTree` helpers and response types (inherited from upstream Pi [#6078](https://github.com/earendil-works/pi/pull/6078)).
|
|
59
|
+
- Added a package `./rpc-entry` export and `src/rpc-entry.ts` entrypoint for launching Atomic directly in RPC mode (inherited from upstream Pi).
|
|
60
|
+
- Added `session_info_changed` as an extension event so extensions can observe session name changes, wired through `AgentSession.setSessionName` to the extension runner (inherited from upstream Pi [#6175](https://github.com/earendil-works/pi/pull/6175)).
|
|
61
|
+
- Added an `externalEditor` settings.json override for Ctrl+G external editor commands, with default fallbacks to Notepad on Windows and `nano` elsewhere (inherited from upstream Pi [#6122](https://github.com/earendil-works/pi/issues/6122)).
|
|
62
|
+
- Added an `outputPad` setting (`0 | 1`, default `1`) controlling horizontal padding for user messages, assistant messages, and thinking blocks (inherited from upstream Pi [#6168](https://github.com/earendil-works/pi/issues/6168)).
|
|
63
|
+
- Added BMP image detection and shared `processImage`/`convertImageBytesToPng` helpers so unsupported image formats are normalized (converted to PNG) before inlining (inherited from upstream Pi [#6047](https://github.com/earendil-works/pi/issues/6047)).
|
|
64
|
+
- Added `resetTimings`/`time` timing namespaces so extension load timings are recorded and reset separately from main startup timings (inherited from upstream Pi [#6030](https://github.com/earendil-works/pi/pull/6030), [#6063](https://github.com/earendil-works/pi/pull/6063)).
|
|
65
|
+
|
|
66
|
+
### Changed
|
|
67
|
+
|
|
68
|
+
- Synced Atomic's `@earendil-works/pi-agent-core`, `pi-ai`, and `pi-tui` runtime dependencies from `^0.80.2` to `^0.80.3` and ported the relevant coding-agent changes while preserving Atomic branding, package names, the versionless-`main` release convention, bundled first-party extensions, and user-facing Atomic docs.
|
|
69
|
+
- Bumped `@earendil-works/pi-agent-core`, `pi-ai`, and `pi-tui` from `^0.80.2` to `^0.80.3` across `@bastani/atomic` and all bundled first-party extensions, and regenerated `bun.lock`, `package-lock.json`, and `npm-shrinkwrap.json`.
|
|
70
|
+
- Changed the default OpenAI model to `gpt-5.5` (inherited from upstream Pi). The Atomic-specific `github-copilot` default remains `gpt-5.4`.
|
|
71
|
+
- Deferred the shared `isRetryableAssistantError` retry classifier because Atomic's `_isRetryableError` carries Atomic-specific Copilot Gemini handling (`content_filter`/`finish_reason: error` for CAPI-mapped MALFORMED_FUNCTION_CALL); adopting it safely requires merging Atomic's extra patterns back in during a follow-up sync.
|
|
72
|
+
- Deferred the interactive status-indicator stabilization refactor (Loader → StatusIndicator classes) because it is a large TUI refactor that needs visual QA.
|
|
73
|
+
|
|
74
|
+
### Fixed
|
|
75
|
+
|
|
76
|
+
- Fixed extension `setActiveTools` changes to apply before the next provider request in the same run, by installing a `prepareNextTurnWithContext` hook that refreshes system prompt and tools (inherited from upstream Pi [#6162](https://github.com/earendil-works/pi/issues/6162)).
|
|
77
|
+
- Fixed `before_agent_start` system prompt overrides to survive when extension tool changes occur mid-run (inherited from upstream Pi [#6162](https://github.com/earendil-works/pi/issues/6162)).
|
|
78
|
+
- Fixed invalid session file errors at CLI entry to print a clean red error message instead of a stack trace, via `openSessionOrExit` wrappers around `SessionManager.open` call sites (inherited from upstream Pi [#6002](https://github.com/earendil-works/pi/issues/6002)).
|
|
79
|
+
- Fixed resumed/transcript chat rendering to respect the `outputPad` setting for user and assistant messages rendered through `renderChatMessageEntry` and the chat-session-host render path (inherited from upstream Pi [#6168](https://github.com/earendil-works/pi/issues/6168)).
|
|
80
|
+
- Fixed the dedicated `rpc-entry` to use Atomic's APP_NAME-based env marker (`ATOMIC_CODING_AGENT`) instead of the upstream `PI_CODING_AGENT`, and to force `--mode rpc` as the last CLI argument so a caller-supplied `--mode` cannot override it.
|
|
81
|
+
- Fixed pre-prompt compaction to stop after compaction instead of continuing immediately (already present in Atomic; documented for parity with upstream Pi [#6074](https://github.com/earendil-works/pi/pull/6074)).
|
|
82
|
+
- Fixed `--session` and `SessionManager` to reject non-empty invalid session files without overwriting them (inherited from upstream Pi [#6002](https://github.com/earendil-works/pi/issues/6002)).
|
|
83
|
+
- Fixed user-message transcript rendering to keep visible backslashes in Markdown escape sequences such as `\"` (inherited from upstream Pi [#6105](https://github.com/earendil-works/pi/issues/6105)).
|
|
84
|
+
- Fixed assistant messages stopped by output length to show a visible incomplete-response error (inherited from upstream Pi [#4290](https://github.com/earendil-works/pi/issues/4290)).
|
|
85
|
+
- Fixed `--no-session --session-id` so ephemeral CLI runs can use deterministic session IDs for provider cache affinity (inherited from upstream Pi [#6070](https://github.com/earendil-works/pi/issues/6070)).
|
|
86
|
+
- Fixed disk BMP image files to be detected, converted to PNG, and attached through `read` and CLI `@file` inputs (inherited from upstream Pi [#6047](https://github.com/earendil-works/pi/issues/6047)).
|
|
87
|
+
- Fixed a crash when undici emits an internal client error while terminating a mid-stream HTTP response, by attaching error-suppressing listeners to the global dispatcher and per-origin pools (inherited from upstream Pi [#6133](https://github.com/earendil-works/pi/issues/6133)).
|
|
88
|
+
|
|
89
|
+
## [0.9.4-alpha.5] - 2026-07-01
|
|
90
|
+
|
|
91
|
+
### Fixed
|
|
92
|
+
|
|
93
|
+
- Routed `COPILOT_GITHUB_TOKEN` env auth through an endpoint resolver that honors explicit Copilot base URL overrides, GitHub Enterprise server URLs, and the public Copilot routing hub so env-token users avoid account-specific endpoint `421 Misdirected Request` failures ([#1569](https://github.com/bastani-inc/atomic/issues/1569)).
|
|
94
|
+
|
|
95
|
+
## [0.9.4-alpha.4] - 2026-06-30
|
|
96
|
+
|
|
97
|
+
### Fixed
|
|
98
|
+
|
|
99
|
+
- Disabled Undici's default 10-second connect timeout in Atomic's global proxy-aware HTTP dispatcher so headless or sandboxed runs behind policy proxies can wait for slow provider CONNECT establishment instead of surfacing spurious `Connection error.` failures.
|
|
100
|
+
- Resumed post-compaction queued work through the full agent continuation lifecycle and surfaced continuation failures, preventing sessions from appearing dead after auto-compaction or failed tool-call recovery ([#1570](https://github.com/bastani-inc/atomic/issues/1570)).
|
|
101
|
+
|
|
102
|
+
## [0.9.4-alpha.3] - 2026-06-30
|
|
103
|
+
|
|
104
|
+
### Fixed
|
|
105
|
+
|
|
106
|
+
- Made release shrinkwrap preparation hermetic by deriving `@bastani/atomic-natives` and generated platform optional package entries from local stamped package metadata with deterministic registry tarball URLs, removing post-native-publish npm metadata lookups that could race registry propagation.
|
|
107
|
+
|
|
108
|
+
## [0.9.4-alpha.2] - 2026-06-29
|
|
109
|
+
|
|
110
|
+
### Fixed
|
|
111
|
+
|
|
112
|
+
- Hardened the coding-agent npm shrinkwrap generator so release publishes resolve the already-published `@bastani/atomic-natives` registry metadata and generated platform optional packages before packing `@bastani/atomic`, while versionless main keeps deterministic placeholder native package entries for shrinkwrap checks.
|
|
113
|
+
|
|
5
114
|
## [0.9.4-alpha.1] - 2026-06-29
|
|
6
115
|
|
|
7
116
|
### Changed
|
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.9.4-alpha.6] - 2026-07-01
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Aligned the Cursor provider dependency with upstream pi-ai `^0.80.3`; no Cursor provider source changes were needed for this metadata sync.
|
|
10
|
+
|
|
11
|
+
## [0.9.4-alpha.5] - 2026-07-01
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Published a synchronized Atomic 0.9.4-alpha.5 prerelease for the Cursor provider package; no functional Cursor provider changes were made after 0.9.4-alpha.1.
|
|
16
|
+
|
|
17
|
+
## [0.9.4-alpha.4] - 2026-06-30
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Published a synchronized Atomic 0.9.4-alpha.4 prerelease for the Cursor provider package; no functional Cursor provider changes were made after 0.9.4-alpha.1.
|
|
22
|
+
|
|
23
|
+
## [0.9.4-alpha.3] - 2026-06-30
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- Published a synchronized Atomic 0.9.4-alpha.3 prerelease for the Cursor provider package; no functional Cursor provider changes were made after 0.9.4-alpha.1.
|
|
28
|
+
|
|
5
29
|
## [0.9.4-alpha.1] - 2026-06-29
|
|
6
30
|
|
|
7
31
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/cursor",
|
|
3
|
-
"version": "0.9.4-alpha.
|
|
3
|
+
"version": "0.9.4-alpha.11",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Experimental first-party Atomic extension for Cursor OAuth, model discovery, and streaming provider registration.",
|
|
6
6
|
"contributors": [
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
}
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@bastani/atomic-natives": "0.9.4-alpha.
|
|
44
|
-
"@bufbuild/protobuf": "^2.
|
|
45
|
-
"@earendil-works/pi-ai": "^0.80.
|
|
43
|
+
"@bastani/atomic-natives": "0.9.4-alpha.11",
|
|
44
|
+
"@bufbuild/protobuf": "^2.12.1",
|
|
45
|
+
"@earendil-works/pi-ai": "^0.80.3"
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -4,6 +4,30 @@ All notable changes to the `pi-intercom` extension will be documented in this fi
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.9.4-alpha.6] - 2026-07-01
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- Aligned the intercom extension peer dependency with upstream pi TUI `^0.80.3`; no intercom extension source changes were needed for this metadata sync.
|
|
12
|
+
|
|
13
|
+
## [0.9.4-alpha.5] - 2026-07-01
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- Published a synchronized Atomic 0.9.4-alpha.5 prerelease for the intercom extension; no intercom extension changes were made after 0.9.4-alpha.1.
|
|
18
|
+
|
|
19
|
+
## [0.9.4-alpha.4] - 2026-06-30
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- Published a synchronized Atomic 0.9.4-alpha.4 prerelease for the intercom extension; no intercom extension changes were made after 0.9.4-alpha.1.
|
|
24
|
+
|
|
25
|
+
## [0.9.4-alpha.3] - 2026-06-30
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- Published a synchronized Atomic 0.9.4-alpha.3 prerelease for the intercom extension; no intercom extension changes were made after 0.9.4-alpha.1.
|
|
30
|
+
|
|
7
31
|
## [0.9.4-alpha.1] - 2026-06-29
|
|
8
32
|
|
|
9
33
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/intercom",
|
|
3
|
-
"version": "0.9.4-alpha.
|
|
3
|
+
"version": "0.9.4-alpha.11",
|
|
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": [
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"@bastani/atomic": "*",
|
|
42
|
-
"@earendil-works/pi-tui": "^0.80.
|
|
42
|
+
"@earendil-works/pi-tui": "^0.80.3"
|
|
43
43
|
},
|
|
44
44
|
"peerDependenciesMeta": {
|
|
45
45
|
"@bastani/atomic": {
|
|
@@ -7,6 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.9.4-alpha.6] - 2026-07-01
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Aligned the MCP extension peer dependencies with upstream pi AI/TUI `^0.80.3`; no MCP extension source changes were needed for this metadata sync.
|
|
15
|
+
|
|
16
|
+
## [0.9.4-alpha.5] - 2026-07-01
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Published a synchronized Atomic 0.9.4-alpha.5 prerelease for the MCP extension; no MCP extension changes were made after 0.9.4-alpha.1.
|
|
21
|
+
|
|
22
|
+
## [0.9.4-alpha.4] - 2026-06-30
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- Published a synchronized Atomic 0.9.4-alpha.4 prerelease for the MCP extension; no MCP extension changes were made after 0.9.4-alpha.1.
|
|
27
|
+
|
|
28
|
+
## [0.9.4-alpha.3] - 2026-06-30
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- Published a synchronized Atomic 0.9.4-alpha.3 prerelease for the MCP extension; no MCP extension changes were made after 0.9.4-alpha.1.
|
|
33
|
+
|
|
10
34
|
## [0.9.4-alpha.1] - 2026-06-29
|
|
11
35
|
|
|
12
36
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/mcp",
|
|
3
|
-
"version": "0.9.4-alpha.
|
|
3
|
+
"version": "0.9.4-alpha.11",
|
|
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": [
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"@bastani/atomic": "*",
|
|
35
|
-
"@earendil-works/pi-ai": "^0.80.
|
|
36
|
-
"@earendil-works/pi-tui": "^0.80.
|
|
35
|
+
"@earendil-works/pi-ai": "^0.80.3",
|
|
36
|
+
"@earendil-works/pi-tui": "^0.80.3",
|
|
37
37
|
"zod": "^3.25.0 || ^4.0.0"
|
|
38
38
|
},
|
|
39
39
|
"peerDependenciesMeta": {
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@modelcontextprotocol/ext-apps": "^1.7.
|
|
51
|
+
"@modelcontextprotocol/ext-apps": "^1.7.4",
|
|
52
52
|
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
53
53
|
"open": "^11.0.0",
|
|
54
54
|
"typebox": "^1.1.24",
|
|
@@ -2,6 +2,58 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.9.4-alpha.11] - 2026-07-03
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Fixed subagent live-detail hints to render the configured `app.tools.expand` keybinding instead of hardcoding Ctrl+O, so remapped users see the same binding honored by attached workflow stage viewers ([#1607](https://github.com/bastani-inc/atomic/issues/1607)).
|
|
10
|
+
- Fixed the running subagent widget so it preserves the last known expanded/open state across workflow stage-node exit re-renders instead of transiently collapsing when the live widget context is stale until the next subagent status update ([#1619](https://github.com/bastani-inc/atomic/issues/1619)).
|
|
11
|
+
|
|
12
|
+
## [0.9.4-alpha.9] - 2026-07-02
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- Curated builtin agent model defaults against Atomic's agentic-coding benchmark (pass@1 / avg cost per task, 2026-07-02) under a role-based placement principle: only reviewer-style roles warrant best-in-class models; every builtin agent is a performance-per-dollar role and now leads with the measured value point for its tier. All primaries are now `openai-codex/gpt-5.5`: `debugger` at `:xhigh` (67% / $7.23, with `anthropic/claude-fable-5:xhigh` — the 70% / $13.41 accuracy ceiling — as first cross-family fallback); `worker`, `code-simplifier`, `codebase-online-researcher`, `codebase-analyzer`, and `codebase-research-analyzer` at `:medium` (54% / $2.75, strictly better than their previous GLM-5.2 primaries measured at 36% / $2.84, which move into the fallback chain); and `codebase-locator`, `codebase-research-locator`, and `codebase-pattern-finder` at `:low` ($1.20 / task, 28 steps, 9.4k output tokens — the measured cheap-tier value point), backed only by measured fallbacks (`claude-opus-4.8:low` at 41% / $2.29, then `glm-5.2:high`). All fallback chains degrade in a consistent order: same-model provider mirrors first (to preserve capability when a provider fails), then remaining families by descending benchmark value (`claude-fable-5:low` at 60% / $3.76 ahead of `claude-opus-4.8:medium` at 49% / $3.44, then GLM), with OpenRouter mirrors as the availability tail in the same order; `claude-opus-4.8` fallbacks ride at their `:high`/`:medium`/`:low` value points instead of `:xhigh`. Dropped strictly dominated models from all chains: `claude-sonnet-5`, `claude-sonnet-4.6`, and `gemini-3.1-pro` everywhere, and `gemini-3.5-flash` everywhere. Unbenchmarked models (`gpt-5.4-mini`, `claude-haiku-4.5`) and unmeasured levels (`gemini-3.5-flash:low`) are removed entirely — every chain entry in every builtin agent now corresponds to a benchmark datapoint.
|
|
17
|
+
- Normalized all GLM-5.2 entries to the model's two real reasoning tiers: GLM-5.2's thinking-level map collapses `minimal`/`low`/`medium`/`high` to its "high" effort and `xhigh` to "max", so the previous `zai/glm-5.2:medium` and `:low` labels (the `codebase-online-researcher` and analyzer primaries and various fallbacks) silently ran at the "high" tier under a misleading label. Native `zai`/`zai-coding-cn` entries now say `:high` explicitly, the `debugger` chain keeps `:xhigh` (→ "max"), and the `openrouter/z-ai/glm-5.2` mirror — which only maps `:xhigh` — is now always `:xhigh` instead of unsupported `:medium`/`:low`.
|
|
18
|
+
|
|
19
|
+
## [0.9.4-alpha.7] - 2026-07-02
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- Fixed subagent model fallback so request/context incompatibility failures (HTTP 400/413/422 bad/unprocessable/payload-too-large request, unsupported tool/parameter, context-length/context-window overflow, `invalid_request`/`bad_request`/`too_large` errors) advance the chain to the next candidate instead of stopping. When none of the configured candidates can serve the request, the subagent now falls back to the current user-selected model. Refusals, content-filter/safety blocks, cancellations, and task failures still stop the chain ([#1580](https://github.com/bastani-inc/atomic/issues/1580)).
|
|
24
|
+
- Fixed foreground and background subagent model attempts that produced no child activity from hanging indefinitely. Each candidate attempt now has a conservative idle watchdog and absolute wall-clock cap, records a retryable timeout failure, and advances to the next fallback candidate; known providers without configured auth are skipped before spawning while unknown/custom providers and the current-model last resort are still attempted ([#1580](https://github.com/bastani-inc/atomic/issues/1580)).
|
|
25
|
+
- Fixed the per-attempt idle watchdog so an in-flight tool execution counts as activity: a slow, quiet tool call (long build or test run with no interim output) is no longer killed as a stalled attempt; the wall-clock cap still bounds such attempts ([#1581](https://github.com/bastani-inc/atomic/pull/1581)).
|
|
26
|
+
- Aligned the subagents model-failure classifier's direct-message precedence with the workflows classifier (direct-message classification now runs after nested cause/diagnostic traversal and before outer status/code classification), and added a cross-package conformance test suite so the two classifier copies cannot silently drift ([#1581](https://github.com/bastani-inc/atomic/pull/1581)).
|
|
27
|
+
- Fixed the background subagent runner to spawn one default-model attempt when no model candidates were ever configured (no primary model, no fallbacks, and no current model), mirroring the foreground path instead of silently exiting 1 with no error and no spawn. An explicitly empty candidate list produced by pre-spawn auth filtering is still respected and surfaced as an error ([#1581](https://github.com/bastani-inc/atomic/pull/1581)).
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- Added a watchdog escape hatch: setting `ATOMIC_SUBAGENT_ATTEMPT_IDLE_TIMEOUT_MS` or `ATOMIC_SUBAGENT_ATTEMPT_TIMEOUT_MS` to `0` (or a negative value) now disables the corresponding per-attempt timeout entirely; non-numeric values are ignored and the defaults apply. The `ATOMIC_SUBAGENT_ATTEMPT_KILL_GRACE_MS` SIGTERM→SIGKILL grace period intentionally cannot be disabled — `0`, negative, or non-numeric values fall back to its default so escalation always stays bounded ([#1581](https://github.com/bastani-inc/atomic/pull/1581)).
|
|
32
|
+
|
|
33
|
+
## [0.9.4-alpha.6] - 2026-07-01
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
|
|
37
|
+
- Aligned the subagents extension peer dependencies with upstream pi `^0.80.3` runtime packages; no subagents extension source changes were needed for this metadata sync.
|
|
38
|
+
|
|
39
|
+
## [0.9.4-alpha.5] - 2026-07-01
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
|
|
43
|
+
- Published a synchronized Atomic 0.9.4-alpha.5 prerelease for the subagents extension; no subagents extension changes were made after 0.9.4-alpha.1.
|
|
44
|
+
|
|
45
|
+
## [0.9.4-alpha.4] - 2026-06-30
|
|
46
|
+
|
|
47
|
+
### Changed
|
|
48
|
+
|
|
49
|
+
- Published a synchronized Atomic 0.9.4-alpha.4 prerelease for the subagents extension; no subagents extension changes were made after 0.9.4-alpha.1.
|
|
50
|
+
|
|
51
|
+
## [0.9.4-alpha.3] - 2026-06-30
|
|
52
|
+
|
|
53
|
+
### Changed
|
|
54
|
+
|
|
55
|
+
- Published a synchronized Atomic 0.9.4-alpha.3 prerelease for the subagents extension; no subagents extension changes were made after 0.9.4-alpha.1.
|
|
56
|
+
|
|
5
57
|
## [0.9.4-alpha.1] - 2026-06-29
|
|
6
58
|
|
|
7
59
|
### Changed
|
|
@@ -8,8 +8,8 @@ description: |
|
|
|
8
8
|
- Production-quality refinement of a working draft ("ugly but working CSV parser").
|
|
9
9
|
- Code that has gotten messy after several iterations.
|
|
10
10
|
tools: read, edit, write, search, find, ls, bash, todo
|
|
11
|
-
model:
|
|
12
|
-
fallbackModels:
|
|
11
|
+
model: openai-codex/gpt-5.5:medium
|
|
12
|
+
fallbackModels: github-copilot/gpt-5.5:medium, openai/gpt-5.5:medium, anthropic/claude-fable-5:low, github-copilot/claude-opus-4.8 (1m):medium, anthropic/claude-opus-4-8:medium, zai/glm-5.2:high, zai-coding-cn/glm-5.2:high, openrouter/openai/gpt-5.5:medium, openrouter/anthropic/claude-fable-5:low, openrouter/anthropic/claude-opus-4-8:medium, openrouter/z-ai/glm-5.2:xhigh
|
|
13
13
|
skills: tdd, playwright-cli, tmux
|
|
14
14
|
---
|
|
15
15
|
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
name: codebase-analyzer
|
|
3
3
|
description: Analyzes codebase implementation details. Call the codebase-analyzer agent when you need to find detailed information about specific components.
|
|
4
4
|
tools: read, search, find, ls, todo
|
|
5
|
-
model:
|
|
6
|
-
fallbackModels:
|
|
5
|
+
model: openai-codex/gpt-5.5:medium
|
|
6
|
+
fallbackModels: github-copilot/gpt-5.5:medium, openai/gpt-5.5:medium, anthropic/claude-fable-5:low, github-copilot/claude-opus-4.8 (1m):medium, anthropic/claude-opus-4-8:medium, zai/glm-5.2:high, zai-coding-cn/glm-5.2:high, openrouter/openai/gpt-5.5:medium, openrouter/anthropic/claude-fable-5:low, openrouter/anthropic/claude-opus-4-8:medium, openrouter/z-ai/glm-5.2:xhigh
|
|
7
7
|
skills: tdd, playwright-cli, tmux
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
name: codebase-locator
|
|
3
3
|
description: Locates files, directories, and components relevant to a feature or task. Basically a "super search/find/ls tool."
|
|
4
4
|
tools: read, search, find, ls
|
|
5
|
-
model: openai/gpt-5.
|
|
6
|
-
fallbackModels:
|
|
5
|
+
model: openai-codex/gpt-5.5:low
|
|
6
|
+
fallbackModels: github-copilot/gpt-5.5:low, openai/gpt-5.5:low, github-copilot/claude-opus-4.8 (1m):low, anthropic/claude-opus-4-8:low, zai/glm-5.2:high, zai-coding-cn/glm-5.2:high, openrouter/openai/gpt-5.5:low, openrouter/anthropic/claude-opus-4-8:low, openrouter/z-ai/glm-5.2:xhigh
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
You are a specialist at finding WHERE code lives in a codebase. Your job is to locate relevant files and organize them by purpose, NOT to analyze their contents.
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
name: codebase-online-researcher
|
|
3
3
|
description: Online research for up-to-date documentation and library-source knowledge. Use when you need authoritative external information — official docs, ecosystem context, version-specific behavior, GitHub permalinks into open-source libraries, or video tutorials.
|
|
4
4
|
tools: read, search, find, ls, bash, web_search, fetch_content, get_search_content, todo
|
|
5
|
-
model:
|
|
6
|
-
fallbackModels:
|
|
5
|
+
model: openai-codex/gpt-5.5:medium
|
|
6
|
+
fallbackModels: github-copilot/gpt-5.5:medium, openai/gpt-5.5:medium, anthropic/claude-fable-5:low, github-copilot/claude-opus-4.8 (1m):medium, anthropic/claude-opus-4-8:medium, zai/glm-5.2:high, zai-coding-cn/glm-5.2:high, openrouter/openai/gpt-5.5:medium, openrouter/anthropic/claude-fable-5:low, openrouter/anthropic/claude-opus-4-8:medium, openrouter/z-ai/glm-5.2:xhigh
|
|
7
7
|
skills: playwright-cli
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
name: codebase-pattern-finder
|
|
3
3
|
description: Find similar implementations, usage examples, or existing patterns in the codebase that can be modeled after.
|
|
4
4
|
tools: read, search, find, ls
|
|
5
|
-
model: openai/gpt-5.
|
|
6
|
-
fallbackModels:
|
|
5
|
+
model: openai-codex/gpt-5.5:low
|
|
6
|
+
fallbackModels: github-copilot/gpt-5.5:low, openai/gpt-5.5:low, github-copilot/claude-opus-4.8 (1m):low, anthropic/claude-opus-4-8:low, zai/glm-5.2:high, zai-coding-cn/glm-5.2:high, openrouter/openai/gpt-5.5:low, openrouter/anthropic/claude-opus-4-8:low, openrouter/z-ai/glm-5.2:xhigh
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
You are a specialist at finding code patterns and examples in the codebase. Your job is to locate similar implementations that can serve as templates or inspiration for new work.
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
name: codebase-research-analyzer
|
|
3
3
|
description: Analyzes local research documents to extract high-value insights, decisions, and technical details while filtering out noise. Use this when you want to deep dive on a research topic or understand the rationale behind decisions.
|
|
4
4
|
tools: read, search, find, ls, todo
|
|
5
|
-
model:
|
|
6
|
-
fallbackModels:
|
|
5
|
+
model: openai-codex/gpt-5.5:medium
|
|
6
|
+
fallbackModels: github-copilot/gpt-5.5:medium, openai/gpt-5.5:medium, anthropic/claude-fable-5:low, github-copilot/claude-opus-4.8 (1m):medium, anthropic/claude-opus-4-8:medium, zai/glm-5.2:high, zai-coding-cn/glm-5.2:high, openrouter/openai/gpt-5.5:medium, openrouter/anthropic/claude-fable-5:low, openrouter/anthropic/claude-opus-4-8:medium, openrouter/z-ai/glm-5.2:xhigh
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
You are a specialist at extracting HIGH-VALUE insights from research documents. Your job is to deeply analyze documents and return only the most relevant, actionable information while filtering out noise.
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
name: codebase-research-locator
|
|
3
3
|
description: Discovers local research documents that are relevant to the current research task.
|
|
4
4
|
tools: read, search, find, ls
|
|
5
|
-
model: openai/gpt-5.
|
|
6
|
-
fallbackModels:
|
|
5
|
+
model: openai-codex/gpt-5.5:low
|
|
6
|
+
fallbackModels: github-copilot/gpt-5.5:low, openai/gpt-5.5:low, github-copilot/claude-opus-4.8 (1m):low, anthropic/claude-opus-4-8:low, zai/glm-5.2:high, zai-coding-cn/glm-5.2:high, openrouter/openai/gpt-5.5:low, openrouter/anthropic/claude-opus-4-8:low, openrouter/z-ai/glm-5.2:xhigh
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
You are a specialist at finding documents in the `research/` directory. Your job is to locate relevant research documents and categorize them, NOT to analyze their contents in depth.
|
|
@@ -3,7 +3,7 @@ name: debugger
|
|
|
3
3
|
description: Debug errors, test failures, and unexpected behavior. Use PROACTIVELY when encountering issues, analyzing stack traces, or investigating system problems.
|
|
4
4
|
tools: read, search, find, ls, bash, web_search, fetch_content, get_search_content, intercom, contact_supervisor, todo
|
|
5
5
|
model: openai-codex/gpt-5.5:xhigh
|
|
6
|
-
fallbackModels: github-copilot/gpt-5.5:xhigh, openai/gpt-5.5:xhigh, github-copilot/claude-opus-4.8 (1m):
|
|
6
|
+
fallbackModels: github-copilot/gpt-5.5:xhigh, openai/gpt-5.5:xhigh, anthropic/claude-fable-5:xhigh, github-copilot/claude-opus-4.8 (1m):high, anthropic/claude-opus-4-8:high, zai/glm-5.2:xhigh, zai-coding-cn/glm-5.2:xhigh, openrouter/openai/gpt-5.5:xhigh, openrouter/anthropic/claude-fable-5:xhigh, openrouter/anthropic/claude-opus-4-8:high, openrouter/z-ai/glm-5.2:xhigh
|
|
7
7
|
skills: tdd, playwright-cli, tmux
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -5,8 +5,8 @@ systemPromptMode: replace
|
|
|
5
5
|
inheritProjectContext: true
|
|
6
6
|
inheritSkills: false
|
|
7
7
|
tools: read, edit, write, search, find, ls, bash, web_search, fetch_content, get_search_content, intercom, contact_supervisor, todo
|
|
8
|
-
model:
|
|
9
|
-
fallbackModels:
|
|
8
|
+
model: openai-codex/gpt-5.5:medium
|
|
9
|
+
fallbackModels: github-copilot/gpt-5.5:medium, openai/gpt-5.5:medium, anthropic/claude-fable-5:low, github-copilot/claude-opus-4.8 (1m):medium, anthropic/claude-opus-4-8:medium, zai/glm-5.2:high, zai-coding-cn/glm-5.2:high, openrouter/openai/gpt-5.5:medium, openrouter/anthropic/claude-fable-5:low, openrouter/anthropic/claude-opus-4-8:medium, openrouter/z-ai/glm-5.2:xhigh
|
|
10
10
|
skills: tdd, playwright-cli, tmux
|
|
11
11
|
defaultContext: fork
|
|
12
12
|
defaultProgress: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/subagents",
|
|
3
|
-
"version": "0.9.4-alpha.
|
|
3
|
+
"version": "0.9.4-alpha.11",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension for delegating tasks to subagents with chains, parallel execution, and TUI clarification. Fork of: https://github.com/nicobailon/pi-subagents",
|
|
6
6
|
"contributors": [
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
40
|
"@bastani/atomic": "*",
|
|
41
|
-
"@earendil-works/pi-agent-core": "^0.80.
|
|
42
|
-
"@earendil-works/pi-ai": "^0.80.
|
|
43
|
-
"@earendil-works/pi-tui": "^0.80.
|
|
41
|
+
"@earendil-works/pi-agent-core": "^0.80.3",
|
|
42
|
+
"@earendil-works/pi-ai": "^0.80.3",
|
|
43
|
+
"@earendil-works/pi-tui": "^0.80.3"
|
|
44
44
|
},
|
|
45
45
|
"peerDependenciesMeta": {
|
|
46
46
|
"@bastani/atomic": {
|
|
@@ -12,6 +12,7 @@ import type { RunnerStep } from "../shared/parallel-utils.ts";
|
|
|
12
12
|
import { injectSingleOutputInstruction, resolveSingleOutputPath, validateFileOnlyOutputMode } from "../shared/single-output.ts";
|
|
13
13
|
import { ChainOutputValidationError, validateChainOutputBindings } from "../shared/chain-outputs.ts";
|
|
14
14
|
import { buildModelCandidates, resolveModelCandidate } from "../shared/model-fallback.ts";
|
|
15
|
+
import { filterSpawnableModelCandidates } from "../shared/model-candidate-filter.ts";
|
|
15
16
|
import { NESTED_RUNS_DIR, nestedResultsPath, resolveInheritedNestedRouteFromEnv, resolveNestedParentAddressFromEnv, writeNestedEvent } from "../shared/nested-events.ts";
|
|
16
17
|
import { createStructuredOutputRuntime } from "../shared/structured-output.ts";
|
|
17
18
|
import { resolveExpectedWorktreeAgentCwd } from "../shared/worktree.ts";
|
|
@@ -57,6 +58,7 @@ export function executeAsyncChain(
|
|
|
57
58
|
const resultMode = params.resultMode ?? "chain";
|
|
58
59
|
const chainSkills = params.chainSkills ?? [];
|
|
59
60
|
const availableModels = params.availableModels;
|
|
61
|
+
const knownModelProviders = params.knownModelProviders;
|
|
60
62
|
const fastModeScope = resolveSubagentCodexFastModeScope(workflowStageSubagentGuard);
|
|
61
63
|
const runnerCwd = resolveChildCwd(ctx.cwd, cwd);
|
|
62
64
|
const firstStep = chain[0];
|
|
@@ -149,9 +151,16 @@ export function executeAsyncChain(
|
|
|
149
151
|
|
|
150
152
|
const primaryModel = resolveModelCandidate(behavior.model ?? a.model, availableModels, ctx.currentModelProvider);
|
|
151
153
|
const model = applyThinkingSuffix(primaryModel, a.thinking);
|
|
152
|
-
const
|
|
154
|
+
const rawModelCandidates = buildModelCandidates(behavior.model ?? a.model, a.fallbackModels, availableModels, ctx.currentModelProvider, ctx.currentModel, a.fallbackThinkingLevels)
|
|
153
155
|
.map((candidate) => applyThinkingSuffix(candidate, a.thinking))
|
|
154
156
|
.filter((candidate): candidate is string => typeof candidate === "string");
|
|
157
|
+
const filteredCandidates = filterSpawnableModelCandidates({
|
|
158
|
+
candidates: rawModelCandidates,
|
|
159
|
+
availableModels,
|
|
160
|
+
knownModelProviders,
|
|
161
|
+
currentModel: applyThinkingSuffix(ctx.currentModel, a.thinking),
|
|
162
|
+
});
|
|
163
|
+
const modelCandidates = filteredCandidates.candidates;
|
|
155
164
|
const fastModeSettings = getSubagentCodexFastModeSettings(stepCwd);
|
|
156
165
|
return {
|
|
157
166
|
agent: s.agent,
|
|
@@ -165,6 +174,7 @@ export function executeAsyncChain(
|
|
|
165
174
|
thinking: resolveEffectiveThinking(model, a.thinking),
|
|
166
175
|
...resolveSubagentModelFastModeMetadata({ model, modelCandidates, cwd: stepCwd, settings: fastModeSettings, scope: fastModeScope }),
|
|
167
176
|
modelCandidates,
|
|
177
|
+
modelAttempts: filteredCandidates.skippedAttempts,
|
|
168
178
|
codexFastModeSettings: fastModeSettings,
|
|
169
179
|
codexFastModeScope: fastModeScope,
|
|
170
180
|
tools: a.tools,
|
|
@@ -9,6 +9,7 @@ import { resolveChildCwd } from "../../shared/utils.ts";
|
|
|
9
9
|
import { applyThinkingSuffix, SUBAGENT_INTERCOM_SESSION_NAME_ENV } from "../shared/pi-args.ts";
|
|
10
10
|
import { injectSingleOutputInstruction, normalizeSingleOutputOverride, resolveSingleOutputPath, validateFileOnlyOutputMode } from "../shared/single-output.ts";
|
|
11
11
|
import { buildModelCandidates, resolveModelCandidate } from "../shared/model-fallback.ts";
|
|
12
|
+
import { filterSpawnableModelCandidates } from "../shared/model-candidate-filter.ts";
|
|
12
13
|
import { NESTED_RUNS_DIR, nestedResultsPath, resolveInheritedNestedRouteFromEnv, resolveNestedParentAddressFromEnv, writeNestedEvent } from "../shared/nested-events.ts";
|
|
13
14
|
import {
|
|
14
15
|
UNAVAILABLE_SUBAGENT_SKILL_ERROR,
|
|
@@ -50,6 +51,7 @@ export function executeAsyncSingle(
|
|
|
50
51
|
const runnerCwd = resolveChildCwd(ctx.cwd, cwd);
|
|
51
52
|
const skillNames = params.skills ?? agentConfig.skills ?? [];
|
|
52
53
|
const availableModels = params.availableModels;
|
|
54
|
+
const knownModelProviders = params.knownModelProviders;
|
|
53
55
|
const { resolved: resolvedSkills, missing: missingSkills } = resolveSkillsWithFallback(skillNames, runnerCwd, ctx.cwd);
|
|
54
56
|
if (missingSkills.includes("subagent")) return formatAsyncStartError("single", UNAVAILABLE_SUBAGENT_SKILL_ERROR);
|
|
55
57
|
let systemPrompt = agentConfig.systemPrompt?.trim() ?? "";
|
|
@@ -84,9 +86,16 @@ export function executeAsyncSingle(
|
|
|
84
86
|
resolveModelCandidate(params.modelOverride ?? agentConfig.model, availableModels, ctx.currentModelProvider),
|
|
85
87
|
agentConfig.thinking,
|
|
86
88
|
);
|
|
87
|
-
const
|
|
89
|
+
const rawModelCandidates = buildModelCandidates(params.modelOverride ?? agentConfig.model, agentConfig.fallbackModels, availableModels, ctx.currentModelProvider, ctx.currentModel)
|
|
88
90
|
.map((candidate) => applyThinkingSuffix(candidate, agentConfig.thinking))
|
|
89
91
|
.filter((candidate): candidate is string => typeof candidate === "string");
|
|
92
|
+
const filteredCandidates = filterSpawnableModelCandidates({
|
|
93
|
+
candidates: rawModelCandidates,
|
|
94
|
+
availableModels,
|
|
95
|
+
knownModelProviders,
|
|
96
|
+
currentModel: applyThinkingSuffix(ctx.currentModel, agentConfig.thinking),
|
|
97
|
+
});
|
|
98
|
+
const modelCandidates = filteredCandidates.candidates;
|
|
90
99
|
const fastModeSettings = getSubagentCodexFastModeSettings(runnerCwd);
|
|
91
100
|
const fastModeScope = resolveSubagentCodexFastModeScope(workflowStageSubagentGuard);
|
|
92
101
|
let spawnResult: AsyncSpawnResult = {};
|
|
@@ -103,6 +112,7 @@ export function executeAsyncSingle(
|
|
|
103
112
|
thinking: resolveEffectiveThinking(model, agentConfig.thinking),
|
|
104
113
|
...resolveSubagentModelFastModeMetadata({ model, modelCandidates, cwd: runnerCwd, settings: fastModeSettings, scope: fastModeScope }),
|
|
105
114
|
modelCandidates,
|
|
115
|
+
modelAttempts: filteredCandidates.skippedAttempts,
|
|
106
116
|
codexFastModeSettings: fastModeSettings,
|
|
107
117
|
codexFastModeScope: fastModeScope,
|
|
108
118
|
tools: agentConfig.tools,
|
|
@@ -26,6 +26,7 @@ export interface AsyncChainParams {
|
|
|
26
26
|
agents: AgentConfig[];
|
|
27
27
|
ctx: AsyncExecutionContext;
|
|
28
28
|
availableModels?: AvailableModelInfo[];
|
|
29
|
+
knownModelProviders?: string[];
|
|
29
30
|
cwd?: string;
|
|
30
31
|
maxOutput?: MaxOutputConfig;
|
|
31
32
|
artifactsDir?: string;
|
|
@@ -62,6 +63,7 @@ export interface AsyncSingleParams {
|
|
|
62
63
|
outputMode?: "inline" | "file-only";
|
|
63
64
|
modelOverride?: string;
|
|
64
65
|
availableModels?: AvailableModelInfo[];
|
|
66
|
+
knownModelProviders?: string[];
|
|
65
67
|
maxSubagentDepth: number;
|
|
66
68
|
workflowStageSubagentGuard?: boolean;
|
|
67
69
|
worktreeSetupHook?: string;
|