@bastani/atomic 0.9.18-alpha.5 → 0.9.18-alpha.7
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 +88 -0
- package/README.md +3 -3
- package/dist/builtin/intercom/CHANGELOG.md +39 -0
- package/dist/builtin/intercom/README.md +22 -2
- package/dist/builtin/intercom/broker/broker.ts +676 -128
- package/dist/builtin/intercom/broker/client.ts +151 -35
- package/dist/builtin/intercom/broker/delivered-message-cache.ts +497 -37
- package/dist/builtin/intercom/broker/framing.ts +4 -2
- package/dist/builtin/intercom/broker/paths.ts +10 -0
- package/dist/builtin/intercom/broker/pending-send-registry.ts +1 -2
- package/dist/builtin/intercom/broker/send-handler.ts +311 -52
- package/dist/builtin/intercom/broker/send-signature.ts +4 -2
- package/dist/builtin/intercom/broker/socket-writes.ts +103 -0
- package/dist/builtin/intercom/broker/spawn.ts +9 -4
- package/dist/builtin/intercom/index.bundle.mjs +1410 -212
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/intercom/recoverable-disconnect.ts +52 -0
- package/dist/builtin/intercom/retry-policy.ts +8 -0
- package/dist/builtin/intercom/skills/intercom/SKILL.md +17 -9
- package/dist/builtin/intercom/types.ts +27 -8
- package/dist/builtin/intercom/workflow-stage-path-matching.ts +90 -0
- package/dist/builtin/intercom/workflow-stage-target.ts +57 -0
- package/dist/builtin/mcp/index.bundle.mjs +427 -126
- package/dist/builtin/mcp/package.json +2 -2
- package/dist/builtin/subagents/CHANGELOG.md +19 -0
- package/dist/builtin/subagents/README.md +3 -3
- 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 +11 -11
- 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 +3 -3
- package/dist/builtin/subagents/agents/worker.md +2 -2
- package/dist/builtin/subagents/package.json +3 -3
- package/dist/builtin/subagents/skills/qlty/SKILL.md +29 -101
- package/dist/builtin/subagents/skills/qlty/references/manual-configuration.md +52 -0
- package/dist/builtin/subagents/skills/subagent/SKILL.md +11 -11
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +49 -132
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +46 -0
- package/dist/builtin/workflows/README.md +7 -7
- package/dist/builtin/workflows/builtin/adversarial-verification.js +2 -2
- package/dist/builtin/workflows/builtin/{chunk-szz1ajz9.js → chunk-42s7sw0b.js} +9 -2
- package/dist/builtin/workflows/builtin/{chunk-2dqb5s2q.js → chunk-79fjkcvh.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-n58a7v26.js → chunk-b0v2xab1.js} +181 -10
- package/dist/builtin/workflows/builtin/{chunk-fghhy2a5.js → chunk-ed4jfn5t.js} +23 -5
- package/dist/builtin/workflows/builtin/{chunk-h3r2vkzc.js → chunk-hqpe2cyx.js} +60 -21
- package/dist/builtin/workflows/builtin/{chunk-hzzn6adg.js → chunk-k3w87x8y.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-82ha8p41.js → chunk-n8h4yyew.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-qwzvgxnq.js → chunk-reqr3sr3.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-c53y8bdh.js → chunk-wgccch41.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-0x6e303p.js → chunk-zbekjqew.js} +20 -7
- package/dist/builtin/workflows/builtin/{chunk-29wrp38a.js → chunk-ze5x3d1r.js} +1 -1
- package/dist/builtin/workflows/builtin/classify-and-act.js +2 -2
- package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +2 -2
- package/dist/builtin/workflows/builtin/generate-and-filter.js +2 -2
- package/dist/builtin/workflows/builtin/goal.js +3 -3
- package/dist/builtin/workflows/builtin/index.js +11 -11
- package/dist/builtin/workflows/builtin/loop-until-done.js +2 -2
- package/dist/builtin/workflows/builtin/open-claude-design.js +2 -2
- package/dist/builtin/workflows/builtin/ralph.js +3 -3
- package/dist/builtin/workflows/builtin/steering-context.js +1 -1
- package/dist/builtin/workflows/builtin/tournament.js +2 -2
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +39 -52
- package/dist/builtin/workflows/skills/prompt-engineer/references/advanced_patterns.md +9 -37
- package/dist/builtin/workflows/skills/prompt-engineer/references/claude_fable_5.md +49 -0
- package/dist/builtin/workflows/skills/prompt-engineer/references/claude_fable_5_1.md +57 -0
- package/dist/builtin/workflows/skills/prompt-engineer/references/claude_opus_4_8.md +57 -0
- package/dist/builtin/workflows/skills/prompt-engineer/references/claude_opus_5.md +47 -0
- package/dist/builtin/workflows/skills/prompt-engineer/references/claude_sonnet_5.md +57 -0
- package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_5_5.md +60 -0
- package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_5_6.md +58 -0
- package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6_astra.md +58 -0
- package/dist/builtin/workflows/skills/prompt-engineer/references/quality_improvement.md +18 -4
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +3194 -737
- package/dist/builtin/workflows/src/index.js +899 -436
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +0 -10
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +4 -0
- package/dist/cli/list-models.js.map +1 -1
- package/dist/client/index.d.ts +1 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -2
- package/dist/client/index.js.map +1 -1
- package/dist/config.d.ts +0 -9
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -45
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-compaction.js +8 -6
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +1 -0
- 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-models.d.ts.map +1 -1
- package/dist/core/agent-session-models.js +3 -4
- package/dist/core/agent-session-models.js.map +1 -1
- package/dist/core/agent-session-queue-pause.d.ts.map +1 -1
- package/dist/core/agent-session-queue-pause.js +6 -0
- package/dist/core/agent-session-queue-pause.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +13 -5
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-tool-hooks.js +1 -1
- package/dist/core/agent-session-tool-hooks.js.map +1 -1
- package/dist/core/agent-session-tree.d.ts.map +1 -1
- package/dist/core/agent-session-tree.js +8 -0
- package/dist/core/agent-session-tree.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +2 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +2 -2
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +4 -4
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/extensions/api-types.d.ts +8 -2
- 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 +12 -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/runner-shortcuts.d.ts.map +1 -1
- package/dist/core/extensions/runner-shortcuts.js +0 -1
- package/dist/core/extensions/runner-shortcuts.js.map +1 -1
- package/dist/core/fast-model-routing-transport.d.ts +12 -0
- package/dist/core/fast-model-routing-transport.d.ts.map +1 -0
- package/dist/core/{codex-fast-mode-transport.js → fast-model-routing-transport.js} +29 -29
- package/dist/core/fast-model-routing-transport.js.map +1 -0
- package/dist/core/fast-model-routing.d.ts +57 -0
- package/dist/core/fast-model-routing.d.ts.map +1 -0
- package/dist/core/fast-model-routing.js +201 -0
- package/dist/core/fast-model-routing.js.map +1 -0
- package/dist/core/fast-model-variants.d.ts +98 -0
- package/dist/core/fast-model-variants.d.ts.map +1 -0
- package/dist/core/fast-model-variants.js +148 -0
- package/dist/core/fast-model-variants.js.map +1 -0
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +4 -2
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/keybindings.d.ts +0 -10
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +0 -8
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/messages.d.ts +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-config.d.ts +15 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +3 -0
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-resolver-initial.js +1 -1
- package/dist/core/model-resolver-initial.js.map +1 -1
- package/dist/core/model-runtime-streaming.d.ts +14 -1
- package/dist/core/model-runtime-streaming.d.ts.map +1 -1
- package/dist/core/model-runtime-streaming.js +25 -3
- package/dist/core/model-runtime-streaming.js.map +1 -1
- package/dist/core/model-runtime.d.ts +39 -2
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +91 -7
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/provider-composer-internal.d.ts.map +1 -1
- package/dist/core/provider-composer-internal.js +8 -2
- package/dist/core/provider-composer-internal.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +18 -18
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-archive.d.ts.map +1 -1
- package/dist/core/session-manager-archive.js +25 -2
- package/dist/core/session-manager-archive.js.map +1 -1
- package/dist/core/settings-manager-core.d.ts +0 -2
- package/dist/core/settings-manager-core.d.ts.map +1 -1
- package/dist/core/settings-manager-core.js +2 -9
- package/dist/core/settings-manager-core.js.map +1 -1
- package/dist/core/settings-manager-internals.d.ts +0 -1
- package/dist/core/settings-manager-internals.d.ts.map +1 -1
- package/dist/core/settings-manager-internals.js.map +1 -1
- package/dist/core/settings-manager-ui-accessors.d.ts +0 -8
- package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-ui-accessors.js +0 -53
- 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-types.d.ts +0 -5
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/skills.d.ts +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +4 -2
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +0 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.js +7 -7
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/edit.d.ts +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +128 -3
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/hashline.d.ts +2 -2
- package/dist/core/tools/hashline.d.ts.map +1 -1
- package/dist/core/tools/hashline.js +40 -10
- package/dist/core/tools/hashline.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +8 -8
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/workflow-stage-admission.d.ts +6 -0
- package/dist/core/workflow-stage-admission.d.ts.map +1 -1
- package/dist/core/workflow-stage-admission.js +14 -0
- package/dist/core/workflow-stage-admission.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 +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -5
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/atomic-working-status.d.ts +4 -0
- package/dist/modes/interactive/components/atomic-working-status.d.ts.map +1 -1
- package/dist/modes/interactive/components/atomic-working-status.js +26 -1
- package/dist/modes/interactive/components/atomic-working-status.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +7 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +43 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +0 -6
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +1 -2
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +0 -1
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +6 -11
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -5
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +3 -19
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts +1 -2
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +4 -11
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/transcript-follow-indicator.js +3 -3
- package/dist/modes/interactive/components/transcript-follow-indicator.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +8 -8
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +5 -16
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive/interactive-bash-compact.js +2 -9
- package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js +3 -0
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-editor-actions.js +2 -2
- package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-custom-ui.js +1 -0
- package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-dialogs.js +7 -0
- package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-runtime.js +20 -10
- package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-hotkeys-debug.js +1 -5
- package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -1
- package/dist/modes/interactive/interactive-initial-session-binding.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-initial-session-binding.js +3 -0
- package/dist/modes/interactive/interactive-initial-session-binding.js.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.js +0 -8
- package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +5 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +15 -9
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -3
- package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js +1 -3
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +9 -12
- 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-model-routing.js +10 -13
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +29 -0
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +2 -32
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/interactive-session-routing.js +1 -5
- package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +1 -5
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-slash-commands.js +6 -13
- package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +19 -13
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-tui.js +27 -3
- package/dist/modes/interactive/interactive-tui.js.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.js +1 -0
- package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +4 -1
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js +13 -6
- package/dist/utils/child-process.js.map +1 -1
- package/dist/utils/exif-orientation.d.ts.map +1 -1
- package/dist/utils/exif-orientation.js +2 -3
- package/dist/utils/exif-orientation.js.map +1 -1
- package/dist/utils/tools-manager.d.ts +1 -0
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +33 -18
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/custom-provider.md +2 -0
- package/docs/development.md +17 -0
- package/docs/docs.json +14 -2
- package/docs/extensions.md +9 -4
- package/docs/intercom.md +41 -7
- package/docs/keybindings.md +8 -6
- package/docs/models/evals.md +394 -0
- package/docs/models/model-selection.md +54 -27
- package/docs/models/pareto-efficiency.md +33 -16
- package/docs/models.md +37 -1
- package/docs/packages.md +2 -2
- package/docs/providers.md +44 -20
- package/docs/quickstart.md +8 -6
- package/docs/rpc.md +3 -3
- package/docs/sdk.md +2 -16
- package/docs/settings.md +19 -22
- package/docs/skills.md +4 -2
- package/docs/subagents.md +9 -3
- package/docs/tools/edit.md +373 -0
- package/docs/tools.md +3 -7
- package/docs/tui.md +2 -1
- package/docs/usage.md +3 -5
- package/docs/workflows/api-reference.md +1395 -0
- package/docs/workflows/authoring.md +678 -0
- package/docs/workflows/builtins.md +245 -0
- package/docs/workflows/operations.md +811 -0
- package/docs/workflows/reliable-design.md +2099 -0
- package/docs/workflows/verification.md +62 -0
- package/docs/workflows.md +15 -5183
- package/npm-shrinkwrap.json +584 -69
- package/package.json +7 -7
- package/dist/client/remote-session.d.ts +0 -64
- package/dist/client/remote-session.d.ts.map +0 -1
- package/dist/client/remote-session.js +0 -351
- package/dist/client/remote-session.js.map +0 -1
- package/dist/client/transcript.d.ts +0 -12
- package/dist/client/transcript.d.ts.map +0 -1
- package/dist/client/transcript.js +0 -98
- package/dist/client/transcript.js.map +0 -1
- package/dist/core/codex-fast-mode-transport.d.ts +0 -12
- package/dist/core/codex-fast-mode-transport.d.ts.map +0 -1
- package/dist/core/codex-fast-mode-transport.js.map +0 -1
- package/dist/core/codex-fast-mode.d.ts +0 -53
- package/dist/core/codex-fast-mode.d.ts.map +0 -1
- package/dist/core/codex-fast-mode.js +0 -249
- package/dist/core/codex-fast-mode.js.map +0 -1
- package/dist/modes/interactive/components/fast-mode-selector.d.ts +0 -27
- package/dist/modes/interactive/components/fast-mode-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/fast-mode-selector.js +0 -107
- package/dist/modes/interactive/components/fast-mode-selector.js.map +0 -1
- package/dist/server/create-harness.d.ts +0 -53
- package/dist/server/create-harness.d.ts.map +0 -1
- package/dist/server/create-harness.js +0 -360
- package/dist/server/create-harness.js.map +0 -1
- package/docs/models/artificial-analysis-index.md +0 -83
|
@@ -7768,14 +7768,12 @@ function splitKnownThinkingSuffix(model) {
|
|
|
7768
7768
|
function formatTokens(n) {
|
|
7769
7769
|
return n < 1000 ? String(n) : n < 1e4 ? `${(n / 1000).toFixed(1)}k` : `${Math.round(n / 1000)}k`;
|
|
7770
7770
|
}
|
|
7771
|
-
function formatModelThinking(model, thinking
|
|
7771
|
+
function formatModelThinking(model, thinking) {
|
|
7772
7772
|
const parsed = model ? splitKnownThinkingSuffix(model) : undefined;
|
|
7773
7773
|
const displayModel = parsed?.baseModel ?? model;
|
|
7774
7774
|
const explicitThinking = THINKING_LEVELS.find((level) => level === thinking?.trim());
|
|
7775
7775
|
const displayThinking = parsed?.thinkingSuffix ? parsed.thinkingSuffix.slice(1) : explicitThinking;
|
|
7776
7776
|
const parts = [displayModel, displayThinking ? `thinking ${displayThinking}` : undefined].filter(Boolean);
|
|
7777
|
-
if (fastMode && parts.length > 0)
|
|
7778
|
-
parts.push("fast");
|
|
7779
7777
|
return parts.join(" · ");
|
|
7780
7778
|
}
|
|
7781
7779
|
function formatUsage(u) {
|
|
@@ -10021,9 +10019,8 @@ import {
|
|
|
10021
10019
|
DefaultResourceLoader,
|
|
10022
10020
|
getAgentDir as getAgentDir2,
|
|
10023
10021
|
getBuiltinPackagePaths as getBuiltinPackagePaths2,
|
|
10024
|
-
readStoredCredential,
|
|
10025
10022
|
SessionManager,
|
|
10026
|
-
SettingsManager
|
|
10023
|
+
SettingsManager
|
|
10027
10024
|
} from "@bastani/atomic";
|
|
10028
10025
|
import {
|
|
10029
10026
|
SubagentControl
|
|
@@ -10253,59 +10250,6 @@ function cleanupAllArtifactDirs(maxAgeDays, sessionsRoots) {
|
|
|
10253
10250
|
}
|
|
10254
10251
|
}
|
|
10255
10252
|
|
|
10256
|
-
// dist/builtin/subagents/src/shared/fast-mode.ts
|
|
10257
|
-
import {
|
|
10258
|
-
SettingsManager,
|
|
10259
|
-
shouldApplyCodexFastModeForScope
|
|
10260
|
-
} from "@bastani/atomic";
|
|
10261
|
-
function getSubagentCodexFastModeSettings(cwd) {
|
|
10262
|
-
try {
|
|
10263
|
-
return SettingsManager.create(cwd).getCodexFastModeSettings();
|
|
10264
|
-
} catch {
|
|
10265
|
-
return { chat: false, workflow: false };
|
|
10266
|
-
}
|
|
10267
|
-
}
|
|
10268
|
-
function modelIdentityFromModelId(model) {
|
|
10269
|
-
if (!model)
|
|
10270
|
-
return;
|
|
10271
|
-
const { baseModel } = splitKnownThinkingSuffix(model);
|
|
10272
|
-
const slash = baseModel.indexOf("/");
|
|
10273
|
-
if (slash <= 0 || slash === baseModel.length - 1)
|
|
10274
|
-
return;
|
|
10275
|
-
return { provider: baseModel.slice(0, slash), id: baseModel.slice(slash + 1) };
|
|
10276
|
-
}
|
|
10277
|
-
function resolvedIdentityMatches(resolved, model) {
|
|
10278
|
-
if (!model)
|
|
10279
|
-
return true;
|
|
10280
|
-
const parsed = modelIdentityFromModelId(model);
|
|
10281
|
-
if (!parsed)
|
|
10282
|
-
return false;
|
|
10283
|
-
if (parsed.provider !== resolved.provider)
|
|
10284
|
-
return false;
|
|
10285
|
-
return resolved.id === undefined || parsed.id === resolved.id;
|
|
10286
|
-
}
|
|
10287
|
-
function identityForFastMode(input) {
|
|
10288
|
-
if (input.resolvedModel && resolvedIdentityMatches(input.resolvedModel, input.model)) {
|
|
10289
|
-
return input.resolvedModel;
|
|
10290
|
-
}
|
|
10291
|
-
if (input.model) {
|
|
10292
|
-
const resolved = input.resolveModel?.(input.model);
|
|
10293
|
-
if (resolved)
|
|
10294
|
-
return resolved;
|
|
10295
|
-
}
|
|
10296
|
-
return modelIdentityFromModelId(input.model);
|
|
10297
|
-
}
|
|
10298
|
-
function resolveSubagentCodexFastModeScope(orchestrationContext) {
|
|
10299
|
-
return orchestrationContext?.kind === "workflow-stage" ? "workflow" : "chat";
|
|
10300
|
-
}
|
|
10301
|
-
function resolveSubagentModelFastMode(input) {
|
|
10302
|
-
const model = identityForFastMode(input);
|
|
10303
|
-
if (!model)
|
|
10304
|
-
return false;
|
|
10305
|
-
const settings = input.settings ?? getSubagentCodexFastModeSettings(input.cwd);
|
|
10306
|
-
return shouldApplyCodexFastModeForScope(model, settings, input.scope ?? "chat", input.copilotCredential);
|
|
10307
|
-
}
|
|
10308
|
-
|
|
10309
10253
|
// dist/builtin/subagents/src/shared/jsonl-writer.ts
|
|
10310
10254
|
var DEFAULT_MAX_JSONL_BYTES = 50 * 1024 * 1024;
|
|
10311
10255
|
|
|
@@ -10483,12 +10427,6 @@ function thinkingLevelForSession(session) {
|
|
|
10483
10427
|
function initialThinkingForAttempt(model, configuredThinking) {
|
|
10484
10428
|
return resolveEffectiveThinking(model, configuredThinking) ?? configuredThinking;
|
|
10485
10429
|
}
|
|
10486
|
-
function defaultFastModeForChild(cwd, context, resolvedModel) {
|
|
10487
|
-
const settings = getSubagentCodexFastModeSettings(cwd);
|
|
10488
|
-
const scope = resolveSubagentCodexFastModeScope(context);
|
|
10489
|
-
const copilotCredential = readStoredCredential("github-copilot");
|
|
10490
|
-
return (model) => resolveSubagentModelFastMode({ model, resolvedModel, cwd, settings, scope, copilotCredential });
|
|
10491
|
-
}
|
|
10492
10430
|
var EMPTY_STATS = {
|
|
10493
10431
|
sessionFile: undefined,
|
|
10494
10432
|
sessionId: "",
|
|
@@ -10919,7 +10857,7 @@ class SubagentControlRuntime {
|
|
|
10919
10857
|
})
|
|
10920
10858
|
};
|
|
10921
10859
|
}
|
|
10922
|
-
async runChildAttempt(admitted, candidate, signals, onModelChange
|
|
10860
|
+
async runChildAttempt(admitted, candidate, signals, onModelChange) {
|
|
10923
10861
|
const candidateModelId = modelIdForCandidate(candidate, admitted.policy.model);
|
|
10924
10862
|
const configuredThinking = candidate.thinkingLevel ?? admitted.policy.thinkingLevel;
|
|
10925
10863
|
let effectiveModelId = candidateModelId;
|
|
@@ -11016,7 +10954,7 @@ class SubagentControlRuntime {
|
|
|
11016
10954
|
if (admitted.spec.testSession) {
|
|
11017
10955
|
created = { session: createTestSession(sessionManager, admitted.spec) };
|
|
11018
10956
|
} else {
|
|
11019
|
-
const settingsManager =
|
|
10957
|
+
const settingsManager = SettingsManager.create(admitted.policy.cwd, getAgentDir2());
|
|
11020
10958
|
const resourceLoader = new DefaultResourceLoader(inProcessChildResourceLoaderOptions({
|
|
11021
10959
|
cwd: admitted.policy.cwd,
|
|
11022
10960
|
agentDir: getAgentDir2(),
|
|
@@ -11061,14 +10999,13 @@ class SubagentControlRuntime {
|
|
|
11061
10999
|
effectiveModelId = initialModelId;
|
|
11062
11000
|
effectiveThinking = thinkingLevelForSession(session) ?? initialThinkingForAttempt(candidateModelId, configuredThinking);
|
|
11063
11001
|
attemptedModels = initialModelId ? [initialModelId] : [];
|
|
11064
|
-
onModelChange?.(effectiveModelId, effectiveThinking
|
|
11002
|
+
onModelChange?.(effectiveModelId, effectiveThinking);
|
|
11065
11003
|
const progressState = {
|
|
11066
11004
|
index: 0,
|
|
11067
11005
|
agent: admitted.spec.agent.name,
|
|
11068
11006
|
status: "running",
|
|
11069
11007
|
...initialModelId === undefined ? {} : { model: initialModelId },
|
|
11070
11008
|
...effectiveThinking === undefined ? {} : { thinking: effectiveThinking },
|
|
11071
|
-
fastMode: fastModeForModel(initialModelId),
|
|
11072
11009
|
task: admitted.spec.task,
|
|
11073
11010
|
recentTools: [],
|
|
11074
11011
|
recentOutput: [],
|
|
@@ -11130,13 +11067,11 @@ class SubagentControlRuntime {
|
|
|
11130
11067
|
attemptedModels.push(event.to);
|
|
11131
11068
|
effectiveModelId = event.to;
|
|
11132
11069
|
progressState.model = event.to;
|
|
11133
|
-
|
|
11134
|
-
onModelChange?.(effectiveModelId, effectiveThinking, progressState.fastMode);
|
|
11070
|
+
onModelChange?.(effectiveModelId, effectiveThinking);
|
|
11135
11071
|
} else if (event.type === "thinking_level_changed") {
|
|
11136
11072
|
effectiveThinking = event.level;
|
|
11137
11073
|
progressState.thinking = effectiveThinking;
|
|
11138
|
-
|
|
11139
|
-
onModelChange?.(effectiveModelId, effectiveThinking, fastMode);
|
|
11074
|
+
onModelChange?.(effectiveModelId, effectiveThinking);
|
|
11140
11075
|
emitProgress(true);
|
|
11141
11076
|
}
|
|
11142
11077
|
});
|
|
@@ -11242,10 +11177,9 @@ class SubagentControlRuntime {
|
|
|
11242
11177
|
this.attemptTerminators.delete(admitted.identity.path);
|
|
11243
11178
|
}
|
|
11244
11179
|
}
|
|
11245
|
-
startAttempt(admitted, candidate, signals
|
|
11180
|
+
startAttempt(admitted, candidate, signals) {
|
|
11246
11181
|
const initialModel = modelIdForCandidate(candidate, admitted.policy.model);
|
|
11247
11182
|
const initialThinking = initialThinkingForAttempt(initialModel, candidate.thinkingLevel ?? admitted.policy.thinkingLevel);
|
|
11248
|
-
const fastModeForModel = options.fastModeForModel ?? defaultFastModeForChild(admitted.policy.cwd, admitted.spec.parent?.orchestrationContext, candidate.model);
|
|
11249
11183
|
const running = {
|
|
11250
11184
|
id: this.nextAttemptId++,
|
|
11251
11185
|
child: admitted,
|
|
@@ -11254,7 +11188,6 @@ class SubagentControlRuntime {
|
|
|
11254
11188
|
startedAt: Date.now(),
|
|
11255
11189
|
...initialModel === undefined ? {} : { currentModel: initialModel },
|
|
11256
11190
|
currentThinking: initialThinking,
|
|
11257
|
-
currentFastMode: fastModeForModel(initialModel),
|
|
11258
11191
|
promise: Promise.resolve({
|
|
11259
11192
|
status: "error",
|
|
11260
11193
|
cause: "uninitialized",
|
|
@@ -11263,11 +11196,10 @@ class SubagentControlRuntime {
|
|
|
11263
11196
|
envelope: "uninitialized"
|
|
11264
11197
|
})
|
|
11265
11198
|
};
|
|
11266
|
-
running.promise = this.runChildAttempt(admitted, candidate, signals, (model, thinking
|
|
11199
|
+
running.promise = this.runChildAttempt(admitted, candidate, signals, (model, thinking) => {
|
|
11267
11200
|
running.currentModel = model;
|
|
11268
11201
|
running.currentThinking = thinking;
|
|
11269
|
-
|
|
11270
|
-
}, fastModeForModel).then((result2) => {
|
|
11202
|
+
}).then((result2) => {
|
|
11271
11203
|
running.status = result2.status;
|
|
11272
11204
|
this.runningAttempts.delete(running.id);
|
|
11273
11205
|
return result2;
|
|
@@ -11295,12 +11227,11 @@ class SubagentControlRuntime {
|
|
|
11295
11227
|
return;
|
|
11296
11228
|
const model = running.currentModel;
|
|
11297
11229
|
const thinking = running.currentThinking;
|
|
11298
|
-
if (model === undefined && thinking === undefined
|
|
11230
|
+
if (model === undefined && thinking === undefined)
|
|
11299
11231
|
return;
|
|
11300
11232
|
return {
|
|
11301
11233
|
...model === undefined ? {} : { model },
|
|
11302
|
-
...thinking === undefined ? {} : { thinking }
|
|
11303
|
-
...running.currentFastMode === undefined ? {} : { fastMode: running.currentFastMode }
|
|
11234
|
+
...thinking === undefined ? {} : { thinking }
|
|
11304
11235
|
};
|
|
11305
11236
|
}
|
|
11306
11237
|
async terminateChildAttempt(running, cause) {
|
|
@@ -12182,6 +12113,8 @@ function refuseSubagentChildDelegation(ctx, mode) {
|
|
|
12182
12113
|
}
|
|
12183
12114
|
function prepareExecutionContext(input) {
|
|
12184
12115
|
const { params, ctx, signal, onUpdate, deps } = input;
|
|
12116
|
+
const stageCloseSignal = ctx.orchestrationContext?.messageAdmission?.boundary.closeSignal;
|
|
12117
|
+
const executionSignal = stageCloseSignal === undefined ? signal : AbortSignal.any([signal, stageCloseSignal]);
|
|
12185
12118
|
const depth = getCurrentSubagentDepth(ctx);
|
|
12186
12119
|
const normalized = normalizeRepeatedParallelCounts(params);
|
|
12187
12120
|
if (normalized.error)
|
|
@@ -12283,7 +12216,7 @@ ${effectiveParams.task ?? ""}` };
|
|
|
12283
12216
|
params: effectiveParams,
|
|
12284
12217
|
effectiveCwd,
|
|
12285
12218
|
ctx,
|
|
12286
|
-
signal,
|
|
12219
|
+
signal: executionSignal,
|
|
12287
12220
|
onUpdate: onUpdateWithContext,
|
|
12288
12221
|
agents,
|
|
12289
12222
|
...parallelAgentConfigs ? { parallelAgentConfigs } : {},
|
|
@@ -12298,6 +12231,7 @@ ${effectiveParams.task ?? ""}` };
|
|
|
12298
12231
|
controlConfig,
|
|
12299
12232
|
intercomBridge
|
|
12300
12233
|
};
|
|
12234
|
+
ctx.orchestrationContext?.messageAdmission?.boundary.registerOwnedSubagentRun(runId);
|
|
12301
12235
|
const foregroundMode = hasTasks ? "parallel" : "single";
|
|
12302
12236
|
const foregroundControl = {
|
|
12303
12237
|
runId,
|
|
@@ -13776,6 +13710,9 @@ function createForegroundControlNotifier(data, deps) {
|
|
|
13776
13710
|
event
|
|
13777
13711
|
});
|
|
13778
13712
|
}
|
|
13713
|
+
function workflowStageAcceptsDetachedNotification(ctx) {
|
|
13714
|
+
return ctx.orchestrationContext?.messageAdmission?.isOpen() !== false;
|
|
13715
|
+
}
|
|
13779
13716
|
function resultSummaryForIntercom(result2) {
|
|
13780
13717
|
const output = getSingleResultOutput(result2);
|
|
13781
13718
|
if (result2.status === "error" && result2.error) {
|
|
@@ -13962,14 +13899,16 @@ async function runParallelPath(data, deps) {
|
|
|
13962
13899
|
const results = await runForegroundParallelTasks({
|
|
13963
13900
|
onDetachedExit: (index, result2) => {
|
|
13964
13901
|
try {
|
|
13965
|
-
|
|
13966
|
-
|
|
13967
|
-
|
|
13968
|
-
|
|
13969
|
-
|
|
13970
|
-
|
|
13971
|
-
|
|
13972
|
-
|
|
13902
|
+
if (workflowStageAcceptsDetachedNotification(ctx)) {
|
|
13903
|
+
notifyDetachedForegroundChildExit({
|
|
13904
|
+
pi: deps.pi,
|
|
13905
|
+
runId,
|
|
13906
|
+
mode: "parallel",
|
|
13907
|
+
index,
|
|
13908
|
+
totalTasks: tasks.length,
|
|
13909
|
+
result: result2
|
|
13910
|
+
});
|
|
13911
|
+
}
|
|
13973
13912
|
} finally {
|
|
13974
13913
|
detachedCleanup.recover(index);
|
|
13975
13914
|
}
|
|
@@ -14108,7 +14047,6 @@ ${worktreeSuffix}` : childContent;
|
|
|
14108
14047
|
// dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts
|
|
14109
14048
|
import { existsSync as existsSync15, statSync as statSync8 } from "node:fs";
|
|
14110
14049
|
import { join as join19 } from "node:path";
|
|
14111
|
-
import { readStoredCredential as readStoredCredential2 } from "@bastani/atomic";
|
|
14112
14050
|
|
|
14113
14051
|
// dist/builtin/subagents/src/runs/shared/model-candidate-filter.ts
|
|
14114
14052
|
function providerFromModel(model) {
|
|
@@ -14309,7 +14247,7 @@ function workflowOrchestrationContext(options) {
|
|
|
14309
14247
|
...options.intercomGroup ? { intercomGroup: options.intercomGroup } : {}
|
|
14310
14248
|
};
|
|
14311
14249
|
}
|
|
14312
|
-
function progressFor(agent, task, outcome, startedAt
|
|
14250
|
+
function progressFor(agent, task, outcome, startedAt) {
|
|
14313
14251
|
const status = outcome.status === "ok" ? "completed" : outcome.status === "interrupted" && isParentCancellation(outcome.cause) ? "interrupted" : "failed";
|
|
14314
14252
|
return {
|
|
14315
14253
|
index: 0,
|
|
@@ -14318,7 +14256,6 @@ function progressFor(agent, task, outcome, startedAt, fastMode) {
|
|
|
14318
14256
|
task,
|
|
14319
14257
|
...outcome.model === undefined ? {} : { model: outcome.model },
|
|
14320
14258
|
...outcome.thinking === undefined ? {} : { thinking: outcome.thinking },
|
|
14321
|
-
...fastMode ? { fastMode: true } : {},
|
|
14322
14259
|
recentTools: [],
|
|
14323
14260
|
recentOutput: outcome.envelope ? outcome.envelope.split(`
|
|
14324
14261
|
`).slice(-10) : [],
|
|
@@ -14331,12 +14268,11 @@ function progressFor(agent, task, outcome, startedAt, fastMode) {
|
|
|
14331
14268
|
...outcome.status === "interrupted" && isParentCancellation(outcome.cause) ? { cause: outcome.cause } : {}
|
|
14332
14269
|
};
|
|
14333
14270
|
}
|
|
14334
|
-
function resultFromOutcome(agent, task, outcome, startedAt, artifactPaths
|
|
14271
|
+
function resultFromOutcome(agent, task, outcome, startedAt, artifactPaths) {
|
|
14335
14272
|
const status = outcome.status;
|
|
14336
14273
|
const output = outcome.status === "ok" ? outcome.output : outcome.envelope;
|
|
14337
14274
|
const model = outcome.model;
|
|
14338
14275
|
const thinking = outcome.thinking;
|
|
14339
|
-
const fastModeEnabled = fastModeForModel(model);
|
|
14340
14276
|
const result2 = {
|
|
14341
14277
|
agent: agent.name,
|
|
14342
14278
|
task,
|
|
@@ -14350,13 +14286,12 @@ function resultFromOutcome(agent, task, outcome, startedAt, artifactPaths, fastM
|
|
|
14350
14286
|
usage: usageFromStats(outcome.stats),
|
|
14351
14287
|
...model === undefined ? {} : { model },
|
|
14352
14288
|
...thinking === undefined ? {} : { thinking },
|
|
14353
|
-
...fastModeEnabled ? { fastMode: true } : {},
|
|
14354
14289
|
..."attemptedModels" in outcome && outcome.attemptedModels?.length ? { attemptedModels: [...outcome.attemptedModels] } : {},
|
|
14355
14290
|
...outcome.skills?.length ? { skills: [...outcome.skills] } : {},
|
|
14356
14291
|
...outcome.skillsWarning ? { skillsWarning: outcome.skillsWarning } : {},
|
|
14357
14292
|
finalOutput: output,
|
|
14358
14293
|
sessionFile: outcome.sessionFile,
|
|
14359
|
-
progress: progressFor(agent, task, outcome, startedAt
|
|
14294
|
+
progress: progressFor(agent, task, outcome, startedAt),
|
|
14360
14295
|
progressSummary: {
|
|
14361
14296
|
toolCount: outcome.stats.toolCalls,
|
|
14362
14297
|
tokens: outcome.stats.tokens.total,
|
|
@@ -14413,20 +14348,7 @@ async function runSingleInProcess(runtimeCwd, agent, task, options) {
|
|
|
14413
14348
|
const fallbackCandidates = filteredCandidates.candidates.slice(1);
|
|
14414
14349
|
const inheritsDispatchConfig = agent.model === undefined && (agent.fallbackModels === undefined || agent.fallbackModels.length === 0) && options.modelOverride === undefined;
|
|
14415
14350
|
const resolvedCandidate = candidate ? options.resolveCandidateModel?.(candidate) : undefined;
|
|
14416
|
-
const fastModeSettings = getSubagentCodexFastModeSettings(cwd);
|
|
14417
|
-
const copilotCredential = readStoredCredential2("github-copilot");
|
|
14418
14351
|
const orchestrationContext = workflowOrchestrationContext(options);
|
|
14419
|
-
const fastModeScope = resolveSubagentCodexFastModeScope(orchestrationContext);
|
|
14420
|
-
const resolveModel = (modelId) => options.resolveCandidateModel?.(modelId)?.model;
|
|
14421
|
-
const fastModeForModel = (model) => resolveSubagentModelFastMode({
|
|
14422
|
-
model,
|
|
14423
|
-
resolvedModel: resolvedCandidate?.model,
|
|
14424
|
-
resolveModel,
|
|
14425
|
-
cwd,
|
|
14426
|
-
settings: fastModeSettings,
|
|
14427
|
-
scope: fastModeScope,
|
|
14428
|
-
copilotCredential
|
|
14429
|
-
});
|
|
14430
14352
|
const parent = {
|
|
14431
14353
|
path: options.runId,
|
|
14432
14354
|
depth: options.parentDepth ?? 0,
|
|
@@ -14482,7 +14404,6 @@ ${task}`);
|
|
|
14482
14404
|
const liveProgress = { ...progress, index: options.index ?? 0 };
|
|
14483
14405
|
const liveModel = liveProgress.model ?? candidate;
|
|
14484
14406
|
const liveThinking = liveProgress.thinking;
|
|
14485
|
-
const liveFastMode = fastModeForModel(liveModel);
|
|
14486
14407
|
const liveResult = {
|
|
14487
14408
|
agent: agent.name,
|
|
14488
14409
|
task,
|
|
@@ -14491,7 +14412,6 @@ ${task}`);
|
|
|
14491
14412
|
usage: emptyUsage(),
|
|
14492
14413
|
...liveModel === undefined ? {} : { model: liveModel },
|
|
14493
14414
|
...liveThinking === undefined ? {} : { thinking: liveThinking },
|
|
14494
|
-
...liveFastMode ? { fastMode: true } : {},
|
|
14495
14415
|
progress: liveProgress
|
|
14496
14416
|
};
|
|
14497
14417
|
options.onUpdate?.({
|
|
@@ -14513,7 +14433,7 @@ ${task}`);
|
|
|
14513
14433
|
const running = control.startAttempt(admission.admitted, { model: resolvedCandidate?.model, modelId: candidate, thinkingLevel: spec.thinkingLevel }, {
|
|
14514
14434
|
abort: options.signal ?? neverAbort,
|
|
14515
14435
|
interrupt: options.interruptSignal ?? neverAbort
|
|
14516
|
-
}
|
|
14436
|
+
});
|
|
14517
14437
|
if (options.onUpdate) {
|
|
14518
14438
|
const launchModel = running.currentModel ?? candidate;
|
|
14519
14439
|
spec.onProgress?.({
|
|
@@ -14523,7 +14443,6 @@ ${task}`);
|
|
|
14523
14443
|
task,
|
|
14524
14444
|
...launchModel === undefined ? {} : { model: launchModel },
|
|
14525
14445
|
...running.currentThinking === undefined ? {} : { thinking: running.currentThinking },
|
|
14526
|
-
fastMode: running.currentFastMode ?? fastModeForModel(launchModel),
|
|
14527
14446
|
recentTools: [],
|
|
14528
14447
|
recentOutput: [],
|
|
14529
14448
|
toolCount: 0,
|
|
@@ -14558,7 +14477,7 @@ ${task}`);
|
|
|
14558
14477
|
detachCleanup();
|
|
14559
14478
|
parentAskCleanup();
|
|
14560
14479
|
running.promise.then(async (continuedOutcome) => {
|
|
14561
|
-
const recovered = resultFromOutcome(agent, task, continuedOutcome, startedAt, artifactPaths
|
|
14480
|
+
const recovered = resultFromOutcome(agent, task, continuedOutcome, startedAt, artifactPaths);
|
|
14562
14481
|
await control.deliverChildResult({
|
|
14563
14482
|
path: continuedOutcome.path,
|
|
14564
14483
|
status: continuedOutcome.status,
|
|
@@ -14567,7 +14486,6 @@ ${task}`);
|
|
|
14567
14486
|
envelope: continuedOutcome.envelope,
|
|
14568
14487
|
...recovered.model === undefined ? {} : { model: recovered.model },
|
|
14569
14488
|
...recovered.thinking === undefined ? {} : { thinking: recovered.thinking },
|
|
14570
|
-
...recovered.fastMode ? { fastMode: true } : {},
|
|
14571
14489
|
sessionFile: continuedOutcome.sessionFile,
|
|
14572
14490
|
timestamp: Date.now(),
|
|
14573
14491
|
artifactsDir: options.artifactsDir
|
|
@@ -14580,7 +14498,6 @@ ${task}`);
|
|
|
14580
14498
|
options.onDetachedExit?.(recovered);
|
|
14581
14499
|
});
|
|
14582
14500
|
const continuedModel = running.currentModel ?? candidate;
|
|
14583
|
-
const continuedFastMode = fastModeForModel(continuedModel);
|
|
14584
14501
|
const continuedThinking = running.currentThinking;
|
|
14585
14502
|
const continuedResult = {
|
|
14586
14503
|
agent: agent.name,
|
|
@@ -14594,7 +14511,6 @@ ${task}`);
|
|
|
14594
14511
|
usage: emptyUsage(),
|
|
14595
14512
|
...continuedModel === undefined ? {} : { model: continuedModel },
|
|
14596
14513
|
...continuedThinking === undefined ? {} : { thinking: continuedThinking },
|
|
14597
|
-
...continuedFastMode ? { fastMode: true } : {},
|
|
14598
14514
|
progress: {
|
|
14599
14515
|
index: options.index ?? 0,
|
|
14600
14516
|
agent: agent.name,
|
|
@@ -14602,7 +14518,6 @@ ${task}`);
|
|
|
14602
14518
|
task,
|
|
14603
14519
|
...continuedModel === undefined ? {} : { model: continuedModel },
|
|
14604
14520
|
...continuedThinking === undefined ? {} : { thinking: continuedThinking },
|
|
14605
|
-
fastMode: continuedFastMode,
|
|
14606
14521
|
recentTools: [],
|
|
14607
14522
|
recentOutput: [],
|
|
14608
14523
|
toolCount: 0,
|
|
@@ -14620,7 +14535,7 @@ ${task}`);
|
|
|
14620
14535
|
detachCleanup();
|
|
14621
14536
|
parentAskCleanup();
|
|
14622
14537
|
const outcome = winner.value;
|
|
14623
|
-
const result2 = resultFromOutcome(agent, task, outcome, startedAt, artifactPaths
|
|
14538
|
+
const result2 = resultFromOutcome(agent, task, outcome, startedAt, artifactPaths);
|
|
14624
14539
|
if (filteredCandidates.skippedAttempts.length)
|
|
14625
14540
|
result2.modelAttempts = [...filteredCandidates.skippedAttempts, ...result2.modelAttempts ?? []];
|
|
14626
14541
|
await control.deliverChildResult({
|
|
@@ -14631,7 +14546,6 @@ ${task}`);
|
|
|
14631
14546
|
envelope: outcome.envelope,
|
|
14632
14547
|
...result2.model === undefined ? {} : { model: result2.model },
|
|
14633
14548
|
...result2.thinking === undefined ? {} : { thinking: result2.thinking },
|
|
14634
|
-
...result2.fastMode ? { fastMode: true } : {},
|
|
14635
14549
|
sessionFile: outcome.sessionFile,
|
|
14636
14550
|
timestamp: Date.now(),
|
|
14637
14551
|
artifactsDir: options.artifactsDir
|
|
@@ -14841,8 +14755,9 @@ async function runSinglePath(data, deps) {
|
|
|
14841
14755
|
},
|
|
14842
14756
|
onDetachedExit: (result2) => {
|
|
14843
14757
|
cleanupTransientProgress(progressDir, artifactConfig.enabled);
|
|
14844
|
-
if (result2)
|
|
14758
|
+
if (result2 && workflowStageAcceptsDetachedNotification(ctx)) {
|
|
14845
14759
|
notifyDetachedForegroundChildExit({ pi: deps.pi, runId, mode: "single", index: 0, result: result2 });
|
|
14760
|
+
}
|
|
14846
14761
|
},
|
|
14847
14762
|
index: 0,
|
|
14848
14763
|
modelOverride,
|
|
@@ -15746,8 +15661,8 @@ import { getMarkdownTheme, keyHintIfBound as keyHintIfBound2 } from "@bastani/at
|
|
|
15746
15661
|
import { Container as Container2, Markdown, Spacer, Text as Text2 } from "@earendil-works/pi-tui";
|
|
15747
15662
|
|
|
15748
15663
|
// dist/builtin/subagents/src/tui/render-event-formatting.ts
|
|
15749
|
-
function modelThinkingBadge(theme, model, thinking
|
|
15750
|
-
const label = formatModelThinking(model, thinking
|
|
15664
|
+
function modelThinkingBadge(theme, model, thinking) {
|
|
15665
|
+
const label = formatModelThinking(model, thinking);
|
|
15751
15666
|
return label ? theme.fg("dim", ` (${label})`) : "";
|
|
15752
15667
|
}
|
|
15753
15668
|
|
|
@@ -15989,7 +15904,7 @@ function renderSingleCompact(d, r, theme, now, pulseFrame) {
|
|
|
15989
15904
|
]);
|
|
15990
15905
|
const c = new Container;
|
|
15991
15906
|
const width = getTermWidth() - 4;
|
|
15992
|
-
const modelDisplay = modelThinkingBadge(theme, r.model, r.thinking
|
|
15907
|
+
const modelDisplay = modelThinkingBadge(theme, r.model, r.thinking);
|
|
15993
15908
|
c.addChild(new Text(truncLine(`${resultGlyph(r, output, theme, isRunning, pulseFrame)} ${theme.fg("toolTitle", theme.bold(r.agent))}${modelDisplay}${contextBadge}${stats ? ` ${theme.fg("dim", "·")} ${stats}` : ""}`, width), 0, 0));
|
|
15994
15909
|
if (isRunning && r.progress) {
|
|
15995
15910
|
const progressSnapshotNow = snapshotNowForProgress(r.progress, now);
|
|
@@ -16073,7 +15988,7 @@ function renderMultiCompact(d, theme, now, pulseFrame) {
|
|
|
16073
15988
|
const runningProg = d.progress?.find((p) => p.index === i && p.status === "running");
|
|
16074
15989
|
if (runningProg) {
|
|
16075
15990
|
const runningStats = formatProgressStats(theme, runningProg, true, now);
|
|
16076
|
-
const runningBadge = modelThinkingBadge(theme, runningProg.model, runningProg.thinking
|
|
15991
|
+
const runningBadge = modelThinkingBadge(theme, runningProg.model, runningProg.thinking);
|
|
16077
15992
|
const runningLine = `${theme.fg("accent", pulseGlyph(pulseFrame))} ${rowLabel}: ${themeBold(theme, agentName)}${runningBadge}${runningStats ? ` ${theme.fg("dim", "·")} ${runningStats}` : ""}`;
|
|
16078
15993
|
c.addChild(new Text(truncLine(` ${runningLine}`, width), 0, 0));
|
|
16079
15994
|
const activity = compactCurrentActivity(runningProg, now);
|
|
@@ -16095,7 +16010,7 @@ function renderMultiCompact(d, theme, now, pulseFrame) {
|
|
|
16095
16010
|
const rPending = rProg && "status" in rProg && rProg.status === "pending";
|
|
16096
16011
|
const stepNumber = r.progress?.index !== undefined ? r.progress.index + 1 : progressFromArray?.index !== undefined ? progressFromArray.index + 1 : i + 1;
|
|
16097
16012
|
const stepStats = formatProgressStats(theme, rProg, true, now);
|
|
16098
|
-
const modelDisplay = modelThinkingBadge(theme, r.model ?? rProg?.model, r.thinking ?? rProg?.thinking
|
|
16013
|
+
const modelDisplay = modelThinkingBadge(theme, r.model ?? rProg?.model, r.thinking ?? rProg?.thinking);
|
|
16099
16014
|
const glyph2 = rPending ? theme.fg("dim", "◦") : resultGlyph(r, output, theme, rRunning, pulseFrame);
|
|
16100
16015
|
const pendingLabel = rPending ? ` ${theme.fg("dim", "· pending")}` : "";
|
|
16101
16016
|
const stepLabel = resultRowLabel(d, multiLabel, i, stepNumber);
|
|
@@ -16226,7 +16141,7 @@ function renderSubagentResult(result2, options, theme) {
|
|
|
16226
16141
|
const progressInfo = isRunning && r.progress ? ` | ${r.progress.toolCount} tools, ${formatTokens(r.progress.tokens)} tok, ${formatDuration(displayProgressDurationMs(r.progress, options.now))}` : r.progressSummary ? ` | ${r.progressSummary.toolCount} tools, ${formatTokens(r.progressSummary.tokens)} tok, ${formatDuration(r.progressSummary.durationMs)}` : "";
|
|
16227
16142
|
const w2 = getTermWidth() - 4;
|
|
16228
16143
|
const fit2 = (text) => expanded ? text : truncLine(text, w2);
|
|
16229
|
-
const modelDisplay = modelThinkingBadge(theme, r.model, r.thinking
|
|
16144
|
+
const modelDisplay = modelThinkingBadge(theme, r.model, r.thinking);
|
|
16230
16145
|
const toolCallLines = getToolCallLines(r, expanded);
|
|
16231
16146
|
const c2 = new Container2;
|
|
16232
16147
|
c2.addChild(new Text2(fit2(`${icon2} ${theme.fg("toolTitle", theme.bold(r.agent))}${modelDisplay}${contextBadge2}${progressInfo}`), 0, 0));
|
|
@@ -16344,7 +16259,7 @@ function renderSubagentResult(result2, options, theme) {
|
|
|
16344
16259
|
const runningProg = d.progress?.find((p) => p.index === i && p.status === "running");
|
|
16345
16260
|
if (runningProg) {
|
|
16346
16261
|
const runningStats = ` | ${runningProg.toolCount} tools, ${formatDuration(displayProgressDurationMs(runningProg, options.now))}`;
|
|
16347
|
-
const runningBadge = modelThinkingBadge(theme, runningProg.model, runningProg.thinking
|
|
16262
|
+
const runningBadge = modelThinkingBadge(theme, runningProg.model, runningProg.thinking);
|
|
16348
16263
|
c.addChild(new Text2(fit(`${theme.fg("warning", "running")} ${rowLabel}: ${theme.bold(theme.fg("warning", agentName))}${runningBadge}${runningStats}`), 0, 0));
|
|
16349
16264
|
const progressSnapshotNow = snapshotNowForProgress(runningProg, options.now);
|
|
16350
16265
|
const liveStatusLine = buildLiveStatusLine(runningProg, progressSnapshotNow);
|
|
@@ -16369,7 +16284,7 @@ function renderSubagentResult(result2, options, theme) {
|
|
|
16369
16284
|
const resultOutput = getSingleResultOutput(r);
|
|
16370
16285
|
const statusIcon = rRunning ? theme.fg("warning", "running") : r.status === "error" ? theme.fg("error", "failed") : isParentCancellation(r.cause) && (r.interrupted || r.status === "interrupted") ? theme.fg("warning", "cancelled") : r.status === "skipped" || r.status === "interrupted" || r.status === "continued" ? theme.fg("warning", r.status) : hasEmptyTextOutputWithoutOutputTarget(r.task, resultOutput) ? theme.fg("warning", "warning") : theme.fg("success", "done");
|
|
16371
16286
|
const stats = rProg ? ` | ${rProg.toolCount} tools, ${formatDuration(displayProgressDurationMs(rProg, options.now))}` : "";
|
|
16372
|
-
const modelDisplay = modelThinkingBadge(theme, r.model ?? rProg?.model, r.thinking ?? rProg?.thinking
|
|
16287
|
+
const modelDisplay = modelThinkingBadge(theme, r.model ?? rProg?.model, r.thinking ?? rProg?.thinking);
|
|
16373
16288
|
const stepLabel = resultRowLabel(d, multiLabel, i, stepNumber);
|
|
16374
16289
|
const stepHeader = rRunning ? `${statusIcon} ${stepLabel}: ${theme.bold(theme.fg("warning", r.agent))}${modelDisplay}${stats}` : `${statusIcon} ${stepLabel}: ${theme.bold(r.agent)}${modelDisplay}${stats}`;
|
|
16375
16290
|
const toolCallLines = getToolCallLines(r, expanded);
|
|
@@ -16547,13 +16462,15 @@ function parseSubagentNotifyContent(content) {
|
|
|
16547
16462
|
// dist/builtin/subagents/src/extension/prompt-guidance.ts
|
|
16548
16463
|
var DEFAULT_PROMPT_GUIDANCE = [
|
|
16549
16464
|
`**Subagent orchestration**: Use subagents for focused specialist work inside workflows or as bounded delegation when a workflow would be unnecessary overhead.
|
|
16550
|
-
-
|
|
16465
|
+
- Unless the user explicitly chooses inline execution for the specified task, workflows are the default for non-trivial structured work with verifiable objectives; use a workflow for implementation, review, or retry pipelines and let its stages delegate specialists.
|
|
16466
|
+
- Explicit requests such as "inline", "do this directly", or "don't use a workflow", and equivalent wording, override that default even for complex tasks. Do not create or launch a hidden/nested workflow or pressure the user to reapprove the choice. Preserve appropriate testing, review and evidence inline, and unrelated safety and authorization constraints. Apply the preference only to the specified task. Quoted examples and questions about inline code are not execution-mode instructions.
|
|
16467
|
+
- On a switch from an active workflow to inline, notify the controlling session to safely hold/stop the affected run, reconcile completed work and in-flight side effects, then continue inline without duplicate execution. Do not claim completed work was undone.
|
|
16551
16468
|
- Use a single subagent for a focused specialty or parallel tasks for independent work. Keep substantial-overlap tasks together rather than duplicating investigation across agents.
|
|
16552
16469
|
- Delegate noisy or context-heavy command investigation when isolation helps, but run concise commands inline when that is simpler.
|
|
16553
16470
|
- Foreground execution is the only subagent execution mode; do not duplicate a delegated job while waiting. Workflow stages may still run their own durable work in the background.
|
|
16554
16471
|
- Use the debugger subagent for actual failures that need reproduction, root-cause diagnosis, and a validated fix; additional debugger or research delegates are optional when they add a distinct useful angle.
|
|
16555
16472
|
- Let each named agent use its declared model and fallback policy: omit the explicit model argument unless the user requests an exact model or a documented task requirement needs one, and record the reason for any override before launch. Do not choose an ad hoc model merely for diversity.
|
|
16556
|
-
- If an agent has no declared model or fallback policy, consult packages/coding-agent/docs/models/model-selection.md for the role's Pareto-efficient recommendations, then use workflow({ action: "models" }) when available to inspect the configured catalog. Pin only a returned fullId and only append a thinking level listed for that entry. If the catalog tool is unavailable, the catalog is empty, or no recommended model is present, leave the child unpinned and state the limitation rather than inventing a model. Do not inspect credentials or infer why a model is absent.
|
|
16473
|
+
- If an agent has no declared model or fallback policy, consult packages/coding-agent/docs/models/model-selection.md for the role's Pareto-efficient recommendations and packages/coding-agent/docs/models/evals.md for the measured per-evaluation scores by task type, then use workflow({ action: "models" }) when available to inspect the configured catalog. Pin only a returned fullId and only append a thinking level listed for that entry. If the catalog tool is unavailable, the catalog is empty, or no recommended model is present, leave the child unpinned and state the limitation rather than inventing a model. Do not inspect credentials or infer why a model is absent.
|
|
16557
16474
|
- Workflow stages automatically receive their invocation-scoped Intercom group, and delegated children inherit the launching session's group across single, parallel, and follow-up work. Do not create or propagate group identifiers for ordinary workflow-stage delegation; use an explicit group only for an intentional topology override. Keep contact_supervisor available for cross-group escalation.`
|
|
16558
16475
|
];
|
|
16559
16476
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/web-access",
|
|
3
|
-
"version": "0.9.18-alpha.
|
|
3
|
+
"version": "0.9.18-alpha.7",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension for web search, URL fetching, GitHub repo cloning, PDF/video extraction. Fork of: https://github.com/nicobailon/pi-web-access",
|
|
6
6
|
"contributors": [
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"@bastani/atomic": "*",
|
|
34
|
-
"@earendil-works/pi-tui": "^0.
|
|
34
|
+
"@earendil-works/pi-tui": "^0.85.1"
|
|
35
35
|
},
|
|
36
36
|
"peerDependenciesMeta": {
|
|
37
37
|
"@bastani/atomic": {
|
|
@@ -6,6 +6,52 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.9.18-alpha.7] - 2026-09-05
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Pending-stage Intercom settlement now skips unrelated runs with no messages to settle. Genuine sweep failures produce one display-only warning per distinct message in interactive sessions instead of repeated console stack traces; headless sessions retain console diagnostics, and pending messages remain available for recovery.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- Updated the bundled prompt-engineering skill with GPT-6 Astra prompting and API migration guidance, plus an attributed instruction audit covering concise skill descriptions, selective reference loading, proportionate testing, permission boundaries, and completion criteria.
|
|
18
|
+
- Split prompt-engineering model advice into individually sourced guides for GPT-5.6, GPT-5.5, Claude Fable 5.1, Fable 5, Opus 5, Opus 4.8, and Sonnet 5, alongside Astra. Shared guidance now routes to each model's distinct effort, verification, delegation, and API migration rules.
|
|
19
|
+
|
|
20
|
+
## [0.9.18-alpha.6] - 2026-09-04
|
|
21
|
+
|
|
22
|
+
### Breaking Changes
|
|
23
|
+
|
|
24
|
+
- Workflow-stage Intercom targets now accept only root-anchored `workflow:<rootRunId>/<segment>[/<segment>...]` paths. The legacy `<runId>:<stageKey>` form is refused with a canonical-path migration hint.
|
|
25
|
+
- Removed the `fastMode` field from `WorkflowTaskResult`, stage snapshots, fallback metadata, and durable checkpoint/envelope records. Workflow stages now select fast inference explicitly by pinning a canonical `-fast` model ID in `model` or `fallbackModels`; normal and fast IDs remain separate ordered candidates.
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- Durable workflows now resolve checksum-pinned embedded PostgreSQL runtimes on Linux musl x64/ARM64 and Windows ARM64 while preserving explicit database URL precedence, Docker fallback, root privilege dropping, and retained-process shutdown ownership. Windows ARM64 uses the PostgreSQL x64 runtime through Windows 11 x64 emulation.
|
|
30
|
+
- Workflow launch now scans and persists possible literal, patterned, and nested-child stage paths. Sticky name and glob sends deliver to every future matching stage, while `workflow:<rootRunId>/**` broadcasts to live stages and remains queued for future descendants until root termination.
|
|
31
|
+
- Possible future targets and their queued counts now appear in `intercom list`. Valid paths outside the scanned set are accepted with a `notInKnownSet` warning and settle as undeliverable at terminal only when they never matched.
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
|
|
35
|
+
- Heartbeat, workflow-tool, and builtin stage guidance now directs shared scope and acceptance-criteria amendments through one authoritative path broadcast rather than enumerating known stages, and teaches path discovery, globs, sticky delivery, and live-only asks.
|
|
36
|
+
- The stage-chat jump indicator now uses the same `↓ Jump to latest message · <shortcut>` copy as the fullscreen transcript overlay.
|
|
37
|
+
- Updated Goal/Ralph orchestration, Ralph prompt engineering and research, and Open Claude Design to GPT-6 Astra at `high`; Goal reviewers and Ralph reviewer B use Astra at `xhigh`, while Ralph reviewer A uses Claude Fable 5.1 at `high`. Added Astra and Fable 5.1 fallbacks while retaining role-specific provider order and reasoning levels. Ralph research now places Fable 5 before Sol, and reviewer B places Sol after Fable 5 and Fugu before GPT-5.5 in its OpenRouter group.
|
|
38
|
+
|
|
39
|
+
- Workflow guidance honors explicit task-scoped inline/no-workflow requests, including safe handoff from active runs without duplicate execution. Default authoring and Goal/Ralph prompts select browser, terminal or desktop/simulator verification by environment, support offline/manual qlty setup, and describe authorized native GitHub media attachments with verified hosted links.
|
|
40
|
+
- Model-pinning guidance now points authored workflows at the measured per-evaluation scores in `packages/coding-agent/docs/models/evals.md` (formerly `artificial-analysis-index.md`), whose task-type picker maps each stage type to the eval that measures it, alongside the role guidance in `model-selection.md`.
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
|
|
44
|
+
- Tool-only workflows no longer emit a `ZERO_STAGES` discovery warning. The static scan now recognizes `ctx.tool()` as tracked graph work without advertising tool nodes as future chat-stage targets.
|
|
45
|
+
- A schema-backed stage that exhausts its structured-output correction budget now advances the model fallback chain instead of failing the whole stage on its first candidate. Each candidate gets the stage prompt plus three corrective follow-ups; a candidate that never produces a valid `structured_output` call fails over exactly like a rate-limited one, recording its attempts as failures with an error naming what the turn looked like (no assistant message, empty assistant text, or the validation error), emitting a `[fallback]` warning, and re-sending the original stage prompt to the next candidate with a fresh budget. With no candidate left the stage still fails with the existing contract error. A model attempt that succeeds is now recorded in the running stage's durable metadata at the moment it succeeds rather than only when the stage ends, so mid-run status and a run resumed after an interruption both report the model that actually produced the result instead of showing only the attempts that failed. ([#2812](https://github.com/bastani-inc/atomic/issues/2812))
|
|
46
|
+
- A stage whose queued Intercom messages can no longer be delivered now fails instead of running forever. `stage-runner-controller` awaits `pendingStageDelivery.ready()` with no timeout, and only a successful drain ever settled it — so when Intercom exhausted its bounded warm-up retries the stage stayed `running` with nothing owning recovery. `createWorkflowPendingStageDelivery` now implements the delivery contract's `fail(reason)`: the first reason wins, `ready()` settles exactly once with a `WorkflowPendingStageDeliveryFailedError` (`code: "pending_stage_delivery_failed"`) carrying the run id, stage id, and stage name, and the stage reaches a deterministic non-retryable `failed` outcome whose error names it. That outcome is now non-retryable by construction rather than by wording: the stage lifecycle refuses a terminal delivery failure as a model failure at both decision sites, so no same-model retry is spent, no fallback candidate is walked, and no `[fallback]` warning blames a model for a stage that would have been refused the same instructions by every candidate. The delivery owner's reason is kept on the error's `reason` property instead of as `cause`, because the shared classifier walks `cause` and Intercom's reason nests the transport error that lost the broker — which made a dead delivery read as a retryable `network_timeout`. A terminal failure latched before the controller's first `ready()` is honored, an unobserved rejection does not surface as an unhandled rejection, a stage with nothing queued still short-circuits and runs, and a drain requested after the latch is a no-op so queued steering stays queued rather than being marked delivered. The session attached just before the gate is disposed and detached on that failure, so a later `ensureSession()` cannot hand back a stage session that skipped its queued instructions.
|
|
47
|
+
- Workflow durability degradation now appears as a display-only warning notification for interactive and RPC actions instead of being written to the console; print and headless actions still receive an actionable console diagnostic when no usable UI exists.
|
|
48
|
+
- In-flight durable resume, catalog preparation, and completed-workflow opening now keep using the backend selected by initialization instead of re-reading mutable factory state after an asynchronous boundary, preventing a concurrent backend reset from stranding the operation with a not-ready error while preserving distinct malformed, stale, and missing-target diagnostics.
|
|
49
|
+
|
|
50
|
+
- Uncaught targeted `ctx.tool` aborts now retain the failed tool identity and an inspection-only cancellation frontier. Public resume, including fresh DBOS hydration and session lifecycle restoration, replays completed work and retries the unfinished tool without fabricating a model stage.
|
|
51
|
+
- Tool-frontier resume rejects missing, ambiguous, cyclic, or identity-inconsistent state before replaying unfinished callbacks. Older records recover only when typed persisted checkpoints prove a unique safe frontier, including for multiline tool names; transcript text is not converted into checkpoints.
|
|
52
|
+
- Incremental graph parent replacement now rejects self-edges and back-edges before mutating the workflow DAG.
|
|
53
|
+
- Tool-frontier continuations reject normal returns and explicit completed exits that skip the exact unfinished tool, and reject replacement model/task and child-workflow execution before side effects. Stage/task worktree setup follows replay selection and live admission. The failure names the pending frontier, preserves source recovery evidence, and does not repeat completed callbacks.
|
|
54
|
+
|
|
9
55
|
## [0.9.18-alpha.3] - 2026-09-01
|
|
10
56
|
|
|
11
57
|
### Added
|