@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
|
@@ -58,7 +58,7 @@ Workflow lifecycle notices are enabled by default. They send steer prompts into
|
|
|
58
58
|
|
|
59
59
|
Set `enabled` to `false` to disable all lifecycle notices, or narrow `notifyOn` to a non-empty list of selected events. Completion, failure, and blocked lifecycle notices are emitted for top-level workflow runs, use steer delivery, and wake an idle model so the lifecycle update enters the model context when it happens. When a fulfilled workflow body leaves admitted tool failures, the engine promotes the first admission and persists that exact tool origin for the failed notice. Ordinary body rejections retain their original error and failed graph nodes without claiming a tool origin because transparent native promises do not expose the source promise; this prevents a caught tool rejection from being misattributed when body code later throws the same object or primitive. Nested child workflow completion/failure is reflected inside the expanded parent graph instead of producing separate top-level completion cards. Awaiting-input states are tracked for dedupe/restore, but workflows do not enqueue main-chat `/workflow connect` cards for them; prompt state remains visible through workflow status/connect surfaces, avoiding stale actionable cards if a prompt resolves while the main chat is streaming.
|
|
60
60
|
|
|
61
|
-
Treat
|
|
61
|
+
Treat blocked runs as continuable by default: resume, answer pending prompts, steer, or use a follow-up workflow. Explicit task-scoped inline/no-workflow requests override that default even for complex work. Safely hold/stop the affected run, reconcile completed work and in-flight effects, then continue inline without duplication; completed work is not undone. Keep safety, authorization and validation requirements. A `budget_exceeded` stop still requires approval before raising the chosen limit. See [verification and evidence](../coding-agent/docs/workflows/verification.md) for execution-mode scope, environment-aware browser/terminal/desktop verification, qlty setup and native GitHub attachments.
|
|
62
62
|
|
|
63
63
|
Control notices report deliberate actions on a top-level run: `/workflow <name>` produces a `WORKFLOW STARTED` card (`▶`), `/workflow pause` a `WORKFLOW PAUSED` card (`⏸`, warning tone), `/workflow quit` a `WORKFLOW QUIT` card (`⏹`, warning tone, plus a `resumable` field), and `/workflow resume` a `WORKFLOW RESUMED` card (`▶`). All four travel the same steer delivery, capped-backoff retry, and card path as the failure notice. The paused and quit text says the stop was deliberate and user-requested and instructs the model not to resume the run or take the work over unless asked, hinting `/workflow resume <run-id>`; the resumed text does not, since the run is progressing again.
|
|
64
64
|
|
|
@@ -451,7 +451,7 @@ When an item configures both `schema` and `output`, its successful `structured_o
|
|
|
451
451
|
|
|
452
452
|
`subagent` is available as a default workflow-stage tool on the same terms as main chat: a stage is a top-level session, so it can delegate once, and the children it launches cannot delegate further. Delegation is one level deep and nothing configures it. `tools` allowlists apply to bundled extension tools as well as built-ins; if a stage sets `tools`, list every non-mandatory tool it should see. Ordinary `intercom` remains registered and active in every workflow model stage even under `noTools: "all"`, restrictive allowlists, or exclusions. Restrictions on `subagent`, `web_search`, `fetch_content`, and every other tool are unchanged. Bundled `@bastani/subagents` agent definitions are available to the `subagent` tool in workflow stages, including workflows launched from a subagent child process.
|
|
453
453
|
|
|
454
|
-
Send material updates through Intercom to every affected workflow stage, including stages that have not started.
|
|
454
|
+
Send material updates through Intercom to every affected workflow stage, including stages that have not started. Join `workflow:<rootRunId>` and use `intercom list` to see live, pending, and possible future targets, then send to `workflow:<rootRunId>/<segment>[/<segment>...]`; segments may be stage names, run ids, or globs (`*` matches one segment, `**` any depth). Name and pattern sends remain sticky for every future match until root termination. When shared scope or acceptance criteria change, broadcast one authoritative update to `workflow:<rootRunId>/**` (or a narrower pattern) rather than enumerating stages; live matches receive it immediately and future matches receive it before their first model turn. A valid target outside the known set queues with a `notInKnownSet` warning and settles undeliverable at terminal only if never delivered. Use `ask` only once the target is live and can reply. Workflow `answer` handles pending human-input prompts, and workflow `resume` handles paused run control.
|
|
455
455
|
|
|
456
456
|
### Model fallbacks
|
|
457
457
|
|
|
@@ -492,7 +492,7 @@ export default workflow({
|
|
|
492
492
|
|
|
493
493
|
Set `model` and `fallbackModels` on the authored stage/task/chain/parallel item that needs them.
|
|
494
494
|
|
|
495
|
-
For authored workflows, choose thinking effort by stage role and failure cost rather than copying a benchmark's level onto every stage. Before launch, record each model stage's role, failure cost, primary model, thinking level, and fallback policy, then print a compact `Stage | Model | Thinking | Role` assignment with a short rationale. Reserve `max` for high-cost-of-error roles or an explicit user request; use `high` for demanding analysis, planning, and repair; use `medium` for user-impact review and reporting; and keep deterministic checks as tool nodes with no model call. Apply the same role policy independently to every fallback, not a mechanical `max` inheritance. Use only levels listed in the configured catalog's `availableThinkingLevels`; if a level is unsupported, choose another catalog model or leave the stage unpinned rather than inventing a suffix.
|
|
495
|
+
For authored workflows, choose thinking effort by stage role and failure cost rather than copying a benchmark's level onto every stage. Pick the model for each stage from the measured evidence in `packages/coding-agent/docs/models/evals.md` (its task-type picker maps stage types to the eval that measures them) and the role guidance in `packages/coding-agent/docs/models/model-selection.md`. Before launch, record each model stage's role, failure cost, primary model, thinking level, and fallback policy, then print a compact `Stage | Model | Thinking | Role` assignment with a short rationale. Reserve `max` for high-cost-of-error roles or an explicit user request; use `high` for demanding analysis, planning, and repair; use `medium` for user-impact review and reporting; and keep deterministic checks as tool nodes with no model call. Apply the same role policy independently to every fallback, not a mechanical `max` inheritance. Use only levels listed in the configured catalog's `availableThinkingLevels`; if a level is unsupported, choose another catalog model or leave the stage unpinned rather than inventing a suffix.
|
|
496
496
|
|
|
497
497
|
When pi exposes its model registry, workflow runs validate user-specified `model` / `fallbackModels` before starting model-backed work and report all unavailable or ambiguous IDs together. Bare model IDs are accepted only when they resolve uniquely or match the current provider; otherwise use `provider/model`. Fallback attempts may send the same prompt/context to a different provider, so choose fallbacks that fit your cost, privacy, and data-handling requirements.
|
|
498
498
|
|
|
@@ -668,13 +668,13 @@ Named workflow launches always run as **background tasks** in interactive sessio
|
|
|
668
668
|
|
|
669
669
|
Typing into an attached stage chat and pressing Enter steers: the message is consumed after the current assistant response finishes its tool batch and before the next model request, matching normal session steering. Ctrl+F queues a follow-up, consumed only when the agent would otherwise stop. Queued entries belong to the stage session rather than the pane, so leaving the stage and reattaching restores the pending `Steering:` / `Follow-up:` rows, and a detached stage node carries a `✉ N queued` badge in the graph.
|
|
670
670
|
|
|
671
|
-
At normal widths, the persistent `BACKGROUND` panel and interactive `/workflow status` list/detail name materialized pending stages by display name and canonical ID. They show
|
|
671
|
+
At normal widths, the persistent `BACKGROUND` panel and interactive `/workflow status` list/detail name materialized pending stages by display name and canonical ID. They show the canonical `workflow:<rootRunId>/<segment>[/<segment>...]` path only when pre-start Intercom delivery is available on a nonterminal owning run and label unavailable delivery otherwise; retained pending stages on ended runs, including ended nested child runs projected into a live root, never advertise a target. Interactive status cards and run detail wrap a full target onto continuation rows when needed, and narrow status cards preserve the full canonical stage ID rather than ellipsizing it. The single-line panel uses only pending-stage forms that fit its remaining metadata budget; if none fit, it omits the pending label entirely so mode, progress, live-tool, and elapsed/status metadata remains intact. The narrow widget remains aggregate-only.
|
|
672
672
|
|
|
673
673
|
Named launches return only after startup admission, while the admitted workflow body and stages remain background work. Pre-body setup failures (including invalid input-bound reusable worktrees) are returned immediately from the original tool call as structured failed results with the concrete error and allocated run id; Atomic does not first claim that the workflow started, and it removes the unadmitted run so corrected inputs can be retried immediately. Failures after admission continue to use normal background status and lifecycle notices.
|
|
674
674
|
|
|
675
675
|
Graceful quit is idempotent for already-paused runs and preserves unresolved `ctx.ui` prompts in DBOS. Pausing or interrupting a stage also holds every queued steering and follow-up item in place: no queued turn, late context-bearing delivery, or workflow continuation starts while the stage is paused, and the existing `resume` action releases the items once in their existing per-queue order without queue release itself starting a provider turn. Stable author-callsite-and-composed-nested-scope reservations are created before prompting and released by exact current-format token generation after answer checkpoint, rejection, or abort. Answering while quit/paused cannot advance workflow code until explicit resume.
|
|
676
676
|
|
|
677
|
-
Workflow durability uses DBOS/Postgres as its only persistent backend. Atomic initializes it lazily on the first workflow action, reuses that process-wide instance, and awaits readiness before durable execution or control. `DBOS_SYSTEM_DATABASE_URL` selects an existing database when supplied. Otherwise Atomic first provisions its embedded Postgres (npm-distributed binaries, directly spawned under `~/.atomic/postgres` on port 5439, shared across sessions) and tries DBOS's reusable `dbos-db` Docker container if embedded provisioning fails without leaving retained-process cleanup pending. Linux root execution clears inherited supplementary groups before dropping Postgres to an unprivileged primary GID/UID; when that account cannot traverse the installed binaries, Atomic publishes one exact package-content runtime generation under a root-owned cache, where it stays readable/executable but not writable by Postgres. Reuse and publication re-snapshot the current source, validate the deterministic path after rename, and fail closed on source mutation, corruption, or setup-lease displacement without accumulating unbounded repair copies. If DBOS still cannot become ready, Atomic
|
|
677
|
+
Workflow durability uses DBOS/Postgres as its only persistent backend. Atomic initializes it lazily on the first workflow action, reuses that process-wide instance, and awaits readiness before durable execution or control. `DBOS_SYSTEM_DATABASE_URL` selects an existing database when supplied. Otherwise Atomic first provisions its embedded Postgres (npm-distributed binaries, directly spawned under `~/.atomic/postgres` on port 5439, shared across sessions) and tries DBOS's reusable `dbos-db` Docker container if embedded provisioning fails without leaving retained-process cleanup pending. Linux root execution clears inherited supplementary groups before dropping Postgres to an unprivileged primary GID/UID; when that account cannot traverse the installed binaries, Atomic publishes one exact package-content runtime generation under a root-owned cache, where it stays readable/executable but not writable by Postgres. Reuse and publication re-snapshot the current source, validate the deterministic path after rename, and fail closed on source mutation, corruption, or setup-lease displacement without accumulating unbounded repair copies. If DBOS still cannot become ready, Atomic shows interactive and RPC actions a display-only warning notification that is not added to agent/model context, then runs against one process-local in-memory backend. Print and other headless actions without a usable UI write the same actionable warning to the console instead. Workflow execution continues, but its state does not survive the process and `/workflow resume` after exit has nothing to restore. Once DBOS is ready, query or write failures fail the workflow action and do not switch backends. Abrupt Atomic exit releases the retained native process lease without killing Postgres. Orderly shutdown sends fast shutdown and waits on that exact retained process; sessions attached to an already-running cluster never own or stop it. Concurrent Atomic sessions safely share one database: unique per-process executor ids, owner/heartbeat metadata on running workflows, and first-writer-wins claims on contended status transitions prevent double dispatch. Running workflows never appear as resume targets in any session; stale-heartbeat (crashed) ones surface as red `crashed` rows, paused rows render yellow, failed/blocked red, completed green, and the open picker live-updates on local changes plus a bounded cross-session poll.
|
|
678
678
|
|
|
679
679
|
DBOS is the only durable catalog for resume, completed inspection, deletion, and targeted lookup. Session JSONL files remain chat transcripts only. Atomic reads one current durable format and does not convert prior local state or pre-current DBOS records. A completed current-format child checkpoint created before boundary-start or invocation-fingerprint identity existed is shown only when its child checkpoints reciprocally prove the same root, parent run, boundary, child owner, and scope. Active checkpoints without a provable invocation fingerprint, and malformed, duplicate, stale, nonreciprocal, mixed, aliased, cyclic, orphaned, or unsupported topology, fail closed before cache exposure or child/control dispatch: Atomic does not invent a child link or execute child code to repair it.
|
|
680
680
|
|
|
@@ -689,7 +689,7 @@ Raw stage-chat prompt answer replay is live-memory only. `StageSnapshot.promptAn
|
|
|
689
689
|
```json
|
|
690
690
|
{
|
|
691
691
|
"name": "workflow",
|
|
692
|
-
"description": "Run named builtin, project, user, or package workflows; custom definitions may import reusable project/package workflows or builtin definitions from @bastani/atomic/workflows/builtin and nest them with ctx.workflow(...), including deeper composition within the configured maxDepth; when workflow execution fits but another shape would better achieve the task, author a custom TypeScript workflow({...}) inline with normal coding tools, reload it, and run it; after successfully creating and reloading a newly authored custom workflow, report the folder containing its generated code as 'Custom workflow created. You can inspect its code at: <workflow-folder-path>'; do this only for newly created custom workflows, never builtin or pre-existing workflows; discover with list/get/inputs/models, list session runs with status (no runId; statusFilter narrows the list), inspect status/stages/stage details, answer pending prompts only while the root workflow is nonterminal, pause/resume/interrupt/quit runs, and reload workflow resources. When steering or communication is useful, use Intercom. Before steering a stage, join its invocation group. Use the Intercom `groups` action to discover it. Workflow invocation groups are named `workflow:<rootRunId>`. Then address the stage as
|
|
692
|
+
"description": "Run named builtin, project, user, or package workflows; custom definitions may import reusable project/package workflows or builtin definitions from @bastani/atomic/workflows/builtin and nest them with ctx.workflow(...), including deeper composition within the configured maxDepth; when workflow execution fits but another shape would better achieve the task, author a custom TypeScript workflow({...}) inline with normal coding tools, reload it, and run it; after successfully creating and reloading a newly authored custom workflow, report the folder containing its generated code as 'Custom workflow created. You can inspect its code at: <workflow-folder-path>'; do this only for newly created custom workflows, never builtin or pre-existing workflows; discover with list/get/inputs/models, list session runs with status (no runId; statusFilter narrows the list), inspect status/stages/stage details, answer pending prompts only while the root workflow is nonterminal, pause/resume/interrupt/quit runs, and reload workflow resources. When steering or communication is useful, use Intercom. Before steering a stage, join its invocation group. Use the Intercom `groups` action to discover it. Workflow invocation groups are named `workflow:<rootRunId>`. Then address the stage as `workflow:<rootRunId>/<segment>[/<segment>...]`; each segment may be a stage name, run id, or glob (`*` matches one segment and `**` any depth). Use `intercom list` inside the invocation group to see live, pending, and possible future targets. Live delivery is immediate; a known stage that has not started is queued and receives the message before its first model turn. Name and pattern sends remain sticky for every future matching stage until the root run terminates. When shared scope or acceptance criteria change, broadcast one authoritative update to `workflow:<rootRunId>/**` (or a narrower path pattern) rather than enumerating stages. A syntactically valid target outside the known set queues with a `notInKnownSet` warning and settles undeliverable at terminal only if never delivered. Use `ask` only for a reply-capable live session. Treat a blocked run as continuable by default unless the user requests inline/no-workflow execution: then safely hold/stop it, reconcile completed work and in-flight side effects, and continue inline without duplication. Otherwise resume resumable blocks, answer pending prompts, steer past the obstacle, or start a follow-up workflow past a terminal block; resolve material ambiguity from user intent and repository evidence without bypassing safety or authorization. For action 'run' and 'resume', budget accepts per-field duration, token, cost, and warning overrides; fields resolve over the workflow declaration and config, and 0 disables a field. Pass budget only when the user asked for a limit; otherwise omit it entirely and inherit the declaration and config rather than inventing a cap. For primitive prompt answers, use booleans or the documented confirm labels, exact case-insensitive select labels or 1-based indexes, and text strings for input/editor; an invalid answer remains pending and returns guidance instead of choosing a default. For large stage handoffs, write context to files/artifacts, pass paths via reads, and prompt downstream agents to 'Read the file at <path>...' instead of injecting large previous text. Wrap critical parts of run inputs and steering messages in <keepContext>...</keepContext> so compaction preserves them verbatim in the stages that inherit them; tag role constraints, prohibitions, must-hold criteria, and identifiers, not background or bulk reference material. For transcripts, prefer status/stages/stage to get sessionFile/transcriptPath, quote the exact path without rewriting separators (Windows backslashes are valid), then search it with rg/grep and read small ranges; transcript is path-only by default when sessionFile/transcriptPath exists, explicit tail/limit returns bounded previews, and missing transcript paths fall back to a small preview. Use action 'models' to inspect models in the configured catalog; the result is a configured-auth snapshot showing what's present in the registry with configured authentication, not proof of credentials, entitlements, OAuth freshness, or live provider access. When authoring a workflow that should dynamically select a model, first call workflow({ action: 'models' }) to inspect the configured catalog, then select from the returned provider/id entries considering the isCurrent marker and available thinking levels.",
|
|
693
693
|
"parameters": {
|
|
694
694
|
"workflow": "string (optional) — workflow ID or normalized name",
|
|
695
695
|
"inputs": "object (optional) — key/value map of workflow inputs",
|
|
@@ -717,7 +717,7 @@ Raw stage-chat prompt answer replay is live-memory only. `StageSnapshot.promptAn
|
|
|
717
717
|
- **`transcript`** — path-only by default when a transcript file exists: use `status`, `stages`, or `stage` to identify the stage and its `sessionFile`/`transcriptPath`, quote the exact path without changing platform separators (for example, preserve Windows backslashes), then search that file with `rg`/`grep` for targeted terms and read only small surrounding ranges. Default text results include JSON-escaped `sessionFileJson`/`transcriptPathJson` lines for copy-safe path literals plus a `lazyReadPrompt`, with `entries: not inlined` so transcript bodies and tool outputs stay out of model context. Passing explicit `tail` or `limit` opts into a bounded inline preview for quick context checks. If no transcript path is available, the action falls back to a bounded preview of up to 5 recent entries with a `fallbackNote`. A registered live stage handle is used when one exists, even before live messages arrive; otherwise the action falls back to stored stage snapshots. Snapshot entries are ordered chronologically before `tail`/`limit` is applied, with terminal result/error entries kept after tool entries when timestamps are missing or tied. `includeToolOutput` applies only to inlined snapshot previews or no-path fallback previews; live session transcripts may not expose tool output.
|
|
718
718
|
- **`answer`** — answers one pending primitive or structured workflow prompt while the authoritative root is nonterminal. It accepts `promptId` plus `response`, `text`, or `message`, but never sends stage chat, steers work, resumes a stage, or starts a model turn.
|
|
719
719
|
|
|
720
|
-
Free-form workflow-stage communication uses ordinary Intercom, not the workflow tool. Send to
|
|
720
|
+
Free-form workflow-stage communication uses ordinary Intercom, not the workflow tool. Send to `workflow:<rootRunId>/<segment>[/<segment>...]`; `*` matches one segment and `**` any depth. `workflow:<rootRunId>/**` reaches live stages immediately and remains sticky for every future stage until root termination; narrower name and pattern targets likewise deliver to every future match. Use `intercom list` inside the invocation group to see live, pending, and possible future targets. Valid paths outside the known set queue with a `notInKnownSet` warning and settle undeliverable at terminal only if never delivered; use `ask` only on live targets.
|
|
721
721
|
The concise model-facing status listing enumerates pending stages with their display name, canonical ID, literal `pending` lifecycle, `pendingStageDeliveryAvailable` value, and an exact Intercom target only when that target is usable on a nonterminal owning run. Retained pending stages on ended root or nested child runs report unavailable delivery and no target, including when a child stage is projected through a live root. Duplicate names remain distinct through canonical IDs. Live `send` delivery is immediate, a known pending-stage `send` queues before the first model turn, and `ask` requires a live reply-capable stage.
|
|
722
722
|
- **`reload`** — refreshes workflow resources directly in-process instead of queuing a literal `/workflow reload` chat follow-up.
|
|
723
723
|
- **`models`** — returns safe model-catalog metadata from the configured registry. Each entry contains `provider` (e.g. `openai`), `id` (e.g. `gpt-4`), `fullId` (e.g. `openai/gpt-4`), `isCurrent` (whether this is the active model), and `availableThinkingLevels`, canonically derived from the registry model's `reasoning` and `thinkingLevelMap` metadata. The result is a configured-auth snapshot: it shows which models are present in the registry with configured authentication, not proof of credentials, entitlements, OAuth freshness, or live provider access. No secrets, tokens, or authentication details are returned.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
adversarial_verification_default
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-reqr3sr3.js";
|
|
4
4
|
import"./chunk-7at6dnkr.js";
|
|
5
5
|
import"./chunk-7430zyas.js";
|
|
6
6
|
import"./chunk-wpckd35c.js";
|
|
7
7
|
import"./chunk-cg9tmks0.js";
|
|
8
8
|
import"./chunk-bfkmzv9h.js";
|
|
9
|
-
import"./chunk-
|
|
9
|
+
import"./chunk-zbekjqew.js";
|
|
10
10
|
export {
|
|
11
11
|
adversarial_verification_default as default
|
|
12
12
|
};
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-bfkmzv9h.js";
|
|
4
4
|
import {
|
|
5
5
|
withSteeringPropagationContext
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-zbekjqew.js";
|
|
7
7
|
|
|
8
8
|
// dist/builtin/workflows/builtin/open-claude-design.ts
|
|
9
9
|
import { Type as Type2 } from "typebox";
|
|
@@ -806,8 +806,13 @@ async function runOpenClaudeDesignWorkflow(ctx) {
|
|
|
806
806
|
}
|
|
807
807
|
};
|
|
808
808
|
const designModelConfig = {
|
|
809
|
-
model: "
|
|
809
|
+
model: "openai-codex/gpt-6-astra:high",
|
|
810
810
|
fallbackModels: [
|
|
811
|
+
"github-copilot/gpt-6-astra:high",
|
|
812
|
+
"openai/gpt-6-astra:high",
|
|
813
|
+
"anthropic/claude-fable-5-1:high",
|
|
814
|
+
"github-copilot/claude-fable-5-1:high",
|
|
815
|
+
"anthropic/claude-opus-5:high",
|
|
811
816
|
"github-copilot/claude-opus-5:high",
|
|
812
817
|
"anthropic/claude-fable-5:high",
|
|
813
818
|
"github-copilot/claude-fable-5:high",
|
|
@@ -827,6 +832,8 @@ async function runOpenClaudeDesignWorkflow(ctx) {
|
|
|
827
832
|
"zai-coding-cn/glm-5.3-flash:high",
|
|
828
833
|
"baseten/zai-org/GLM-5.3:high",
|
|
829
834
|
"baseten/zai-org/GLM-5.3-Flash:high",
|
|
835
|
+
"openrouter/openai/gpt-6-astra:high",
|
|
836
|
+
"openrouter/anthropic/claude-fable-5-1:high",
|
|
830
837
|
"openrouter/anthropic/claude-opus-5:high",
|
|
831
838
|
"openrouter/anthropic/claude-fable-5:high",
|
|
832
839
|
"openrouter/anthropic/claude-opus-4-8:high",
|
|
@@ -16,6 +16,37 @@ import { randomUUID } from "node:crypto";
|
|
|
16
16
|
import { mkdir, readdir, rm, stat } from "node:fs/promises";
|
|
17
17
|
import { dirname, join } from "node:path";
|
|
18
18
|
import { getAgentDir, getEnvValue } from "@bastani/atomic";
|
|
19
|
+
// dist/builtin/workflows/src/durable/backend-process-owner.ts
|
|
20
|
+
var DURABLE_BACKEND_PROCESS_OWNER_KEY = Symbol.for("atomic-workflows/durable-backend-process-owner@1");
|
|
21
|
+
function emptyOwner() {
|
|
22
|
+
return {
|
|
23
|
+
version: 1,
|
|
24
|
+
injectedBackend: undefined,
|
|
25
|
+
initializedBackend: undefined,
|
|
26
|
+
initializing: undefined,
|
|
27
|
+
warningSink: undefined,
|
|
28
|
+
warningReported: false
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function ownerBag() {
|
|
32
|
+
return globalThis;
|
|
33
|
+
}
|
|
34
|
+
function getDurableBackendProcessOwner() {
|
|
35
|
+
const bag = ownerBag();
|
|
36
|
+
const existing = bag[DURABLE_BACKEND_PROCESS_OWNER_KEY];
|
|
37
|
+
if (existing !== undefined && existing.version === 1)
|
|
38
|
+
return existing;
|
|
39
|
+
const created = emptyOwner();
|
|
40
|
+
bag[DURABLE_BACKEND_PROCESS_OWNER_KEY] = created;
|
|
41
|
+
return created;
|
|
42
|
+
}
|
|
43
|
+
// dist/builtin/workflows/src/shared/possible-stages.ts
|
|
44
|
+
var BUILTIN_BARREL_SPECIFIERS = new Set([
|
|
45
|
+
"@bastani/atomic/workflows/builtin",
|
|
46
|
+
"@bastani/workflows/builtin"
|
|
47
|
+
]);
|
|
48
|
+
var TRACKED_NODE_METHODS = new Set(["stage", "task", "chain", "parallel", "workflow", "tool"]);
|
|
49
|
+
|
|
19
50
|
// dist/builtin/workflows/src/shared/workflow-failures-contract.ts
|
|
20
51
|
var WORKFLOW_FAILURE_KINDS = new Set([
|
|
21
52
|
"auth",
|
|
@@ -110,7 +141,7 @@ var STATUS_RELATED_MESSAGE_REFINEMENT_CODES = new Set([
|
|
|
110
141
|
]);
|
|
111
142
|
// dist/builtin/workflows/src/durable/dbos-process-owner.ts
|
|
112
143
|
var DBOS_PROCESS_OWNER_KEY = Symbol.for("atomic-workflows/dbos-process-owner@1");
|
|
113
|
-
function
|
|
144
|
+
function emptyOwner2() {
|
|
114
145
|
return {
|
|
115
146
|
version: 1,
|
|
116
147
|
state: "uninitialized",
|
|
@@ -122,15 +153,15 @@ function emptyOwner() {
|
|
|
122
153
|
wrappers: undefined
|
|
123
154
|
};
|
|
124
155
|
}
|
|
125
|
-
function
|
|
156
|
+
function ownerBag2() {
|
|
126
157
|
return globalThis;
|
|
127
158
|
}
|
|
128
159
|
function getDbosProcessOwner() {
|
|
129
|
-
const bag =
|
|
160
|
+
const bag = ownerBag2();
|
|
130
161
|
const existing = bag[DBOS_PROCESS_OWNER_KEY];
|
|
131
162
|
if (existing !== undefined && existing.version === 1)
|
|
132
163
|
return existing;
|
|
133
|
-
const created =
|
|
164
|
+
const created = emptyOwner2();
|
|
134
165
|
bag[DBOS_PROCESS_OWNER_KEY] = created;
|
|
135
166
|
return created;
|
|
136
167
|
}
|
|
@@ -177,14 +208,13 @@ function dbosLifecycleState() {
|
|
|
177
208
|
}
|
|
178
209
|
|
|
179
210
|
// dist/builtin/workflows/src/durable/factory.ts
|
|
180
|
-
var injectedBackend;
|
|
181
|
-
var initializedBackend;
|
|
182
211
|
function isMemoizedBackendUsable(backend) {
|
|
183
212
|
return !backend.persistent || dbosLifecycleState() === "ready";
|
|
184
213
|
}
|
|
185
214
|
function getDurableBackend() {
|
|
186
|
-
const
|
|
187
|
-
const
|
|
215
|
+
const owner2 = getDurableBackendProcessOwner();
|
|
216
|
+
const memoized = owner2.initializedBackend !== undefined && isMemoizedBackendUsable(owner2.initializedBackend) ? owner2.initializedBackend : undefined;
|
|
217
|
+
const backend = owner2.injectedBackend ?? memoized ?? getReadyDbosBackendSync();
|
|
188
218
|
if (backend === undefined)
|
|
189
219
|
throw new DbosNotReadyError;
|
|
190
220
|
return backend;
|
|
@@ -244,6 +274,96 @@ function queueStageMessage(messages, input, senderGroup, runGroup, stageIdentity
|
|
|
244
274
|
deduplicated: false
|
|
245
275
|
};
|
|
246
276
|
}
|
|
277
|
+
function queueStickyStageMessage(messages, input, senderGroup, runGroup) {
|
|
278
|
+
if (normalizeDeliveryGroup(senderGroup) !== normalizeDeliveryGroup(runGroup)) {
|
|
279
|
+
return { ok: false, reason: "group_mismatch", runId: input.runId, stageKey: input.targetPath };
|
|
280
|
+
}
|
|
281
|
+
const messageId = input.message.id;
|
|
282
|
+
const existing = messages.find((entry2) => entry2.runId === input.runId && entry2.id === messageId);
|
|
283
|
+
if (existing !== undefined) {
|
|
284
|
+
if (pendingStageMessageSignature(existing) !== pendingStageMessageSignature(input)) {
|
|
285
|
+
return {
|
|
286
|
+
ok: false,
|
|
287
|
+
reason: "message_id_conflict",
|
|
288
|
+
runId: input.runId,
|
|
289
|
+
stageKey: input.targetPath,
|
|
290
|
+
messageId
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
const queuedForTarget = queuedStickyCount(messages, input.runId, input.targetPath);
|
|
294
|
+
return {
|
|
295
|
+
ok: true,
|
|
296
|
+
messages,
|
|
297
|
+
entry: existing,
|
|
298
|
+
...existing.status === "queued" ? { position: queuedForTarget } : {},
|
|
299
|
+
deduplicated: true
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
if (queuedStickyCount(messages, input.runId, input.targetPath) >= PENDING_STAGE_MESSAGE_LIMIT) {
|
|
303
|
+
return {
|
|
304
|
+
ok: false,
|
|
305
|
+
reason: "capacity",
|
|
306
|
+
limit: PENDING_STAGE_MESSAGE_LIMIT,
|
|
307
|
+
runId: input.runId,
|
|
308
|
+
stageKey: input.targetPath
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
const entry = {
|
|
312
|
+
...input,
|
|
313
|
+
id: messageId,
|
|
314
|
+
stageKey: input.targetPath,
|
|
315
|
+
sticky: true,
|
|
316
|
+
deliveries: [],
|
|
317
|
+
deliveryCount: 0,
|
|
318
|
+
admissionOrder: nextAdmissionOrder(messages, input.runId),
|
|
319
|
+
status: "queued"
|
|
320
|
+
};
|
|
321
|
+
return {
|
|
322
|
+
ok: true,
|
|
323
|
+
messages: [...messages, entry],
|
|
324
|
+
entry,
|
|
325
|
+
position: queuedStickyCount(messages, input.runId, input.targetPath) + 1,
|
|
326
|
+
deduplicated: false
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
function queuedStickyCount(messages, runId, targetPath) {
|
|
330
|
+
return messages.filter((entry) => entry.runId === runId && entry.sticky === true && entry.targetPath === targetPath && entry.status === "queued").length;
|
|
331
|
+
}
|
|
332
|
+
function recordPendingStageMessageDeliveries(messages, runId, messageId, records, deliveredAt) {
|
|
333
|
+
const index = messages.findIndex((entry2) => entry2.runId === runId && entry2.id === messageId && entry2.sticky === true && entry2.status === "queued");
|
|
334
|
+
if (index < 0)
|
|
335
|
+
return messages;
|
|
336
|
+
const entry = messages[index];
|
|
337
|
+
const recorded = new Set((entry.deliveries ?? []).map((delivery) => `${delivery.runId}\x00${delivery.stageId}`));
|
|
338
|
+
const additions = [];
|
|
339
|
+
for (const record of records) {
|
|
340
|
+
const key = `${record.runId}\x00${record.stageId}`;
|
|
341
|
+
if (recorded.has(key))
|
|
342
|
+
continue;
|
|
343
|
+
recorded.add(key);
|
|
344
|
+
additions.push({
|
|
345
|
+
runId: record.runId,
|
|
346
|
+
stageId: record.stageId,
|
|
347
|
+
...record.stageName === undefined ? {} : { stageName: record.stageName },
|
|
348
|
+
deliveredAt
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
if (additions.length === 0)
|
|
352
|
+
return messages;
|
|
353
|
+
const deliveries = [...entry.deliveries ?? [], ...additions];
|
|
354
|
+
const next = { ...entry, deliveries, deliveryCount: deliveries.length };
|
|
355
|
+
const result = [...messages];
|
|
356
|
+
result[index] = next;
|
|
357
|
+
return result;
|
|
358
|
+
}
|
|
359
|
+
function settleStickyPendingStageMessageDelivered(messages, runId, messageId, settledAt) {
|
|
360
|
+
const index = messages.findIndex((entry) => entry.runId === runId && entry.id === messageId && entry.sticky === true && entry.status === "queued" && (entry.deliveryCount ?? 0) > 0);
|
|
361
|
+
if (index < 0)
|
|
362
|
+
return messages;
|
|
363
|
+
const next = [...messages];
|
|
364
|
+
next[index] = { ...next[index], status: "delivered", deliveredAt: settledAt };
|
|
365
|
+
return next;
|
|
366
|
+
}
|
|
247
367
|
function pendingStageMessagesFor(messages, runId, stageKey, stageIdentity) {
|
|
248
368
|
return messages.map((entry, index) => ({ entry, index })).filter(({ entry }) => matchesPendingStage(entry, runId, stageKey, stageIdentity) && entry.status === "queued").sort((left, right) => (left.entry.admissionOrder ?? left.index + 1) - (right.entry.admissionOrder ?? right.index + 1) || left.index - right.index).map(({ entry }) => entry);
|
|
249
369
|
}
|
|
@@ -263,7 +383,7 @@ function markPendingStageMessageUndeliverable(messages, runId, stageKey, message
|
|
|
263
383
|
}));
|
|
264
384
|
}
|
|
265
385
|
function markPendingStageMessageUndeliverableNotified(messages, runId, stageKey, messageId, notificationId, notifiedAt) {
|
|
266
|
-
const index = messages.findIndex((entry) => matchesPendingStage(entry, runId, stageKey) && entry.id === messageId && entry.status === "undeliverable" && entry.undeliverableNotificationId === notificationId && entry.undeliverableNotifiedAt === undefined);
|
|
386
|
+
const index = messages.findIndex((entry) => (entry.sticky === true ? entry.runId === runId : matchesPendingStage(entry, runId, stageKey)) && entry.id === messageId && entry.status === "undeliverable" && entry.undeliverableNotificationId === notificationId && entry.undeliverableNotifiedAt === undefined);
|
|
267
387
|
if (index < 0)
|
|
268
388
|
return messages;
|
|
269
389
|
const next = [...messages];
|
|
@@ -279,14 +399,21 @@ function pendingStageUndeliverableNotificationId(entry) {
|
|
|
279
399
|
].join(":");
|
|
280
400
|
}
|
|
281
401
|
function updateQueuedPendingStageMessage(messages, runId, stageKey, messageId, stageIdentity, update) {
|
|
282
|
-
const index = messages.findIndex((entry) =>
|
|
402
|
+
const index = messages.findIndex((entry) => queuedEntryMatches(entry, runId, stageKey, messageId, stageIdentity));
|
|
283
403
|
if (index < 0)
|
|
284
404
|
return messages;
|
|
285
405
|
const next = [...messages];
|
|
286
406
|
next[index] = update(next[index]);
|
|
287
407
|
return next;
|
|
288
408
|
}
|
|
409
|
+
function queuedEntryMatches(entry, runId, stageKey, messageId, stageIdentity) {
|
|
410
|
+
if (entry.runId !== runId || entry.id !== messageId || entry.status !== "queued")
|
|
411
|
+
return false;
|
|
412
|
+
return entry.sticky === true || matchesPendingStage(entry, runId, stageKey, stageIdentity);
|
|
413
|
+
}
|
|
289
414
|
function matchesPendingStage(entry, runId, stageKey, stageIdentity) {
|
|
415
|
+
if (entry.sticky === true)
|
|
416
|
+
return false;
|
|
290
417
|
if (entry.runId !== runId)
|
|
291
418
|
return false;
|
|
292
419
|
if (stageIdentity === undefined)
|
|
@@ -1058,6 +1185,50 @@ function createPendingStageDeliveryStoreMethods(context) {
|
|
|
1058
1185
|
context.bumpAndNotify();
|
|
1059
1186
|
return true;
|
|
1060
1187
|
});
|
|
1188
|
+
},
|
|
1189
|
+
async queueStickyStageMessage(input, senderGroup, runGroup, backend) {
|
|
1190
|
+
return await serialize(input.runId, async () => {
|
|
1191
|
+
const run = context.findRun(input.runId);
|
|
1192
|
+
if (run === undefined)
|
|
1193
|
+
return;
|
|
1194
|
+
const result = queueStickyStageMessage(run.pendingStageMessages ?? [], input, senderGroup, runGroup);
|
|
1195
|
+
if (result.ok && !result.deduplicated) {
|
|
1196
|
+
await persistTransition(backend, input.runId, result.messages);
|
|
1197
|
+
run.pendingStageMessages = [...result.messages];
|
|
1198
|
+
context.bumpAndNotify();
|
|
1199
|
+
}
|
|
1200
|
+
return result;
|
|
1201
|
+
});
|
|
1202
|
+
},
|
|
1203
|
+
async recordPendingStageMessageDeliveries(runId, messageId, records, deliveredAt, backend) {
|
|
1204
|
+
return await serialize(runId, async () => {
|
|
1205
|
+
const run = context.findRun(runId);
|
|
1206
|
+
if (run === undefined)
|
|
1207
|
+
return false;
|
|
1208
|
+
const current = run.pendingStageMessages ?? [];
|
|
1209
|
+
const next = recordPendingStageMessageDeliveries(current, runId, messageId, records, deliveredAt);
|
|
1210
|
+
if (next === current)
|
|
1211
|
+
return false;
|
|
1212
|
+
await persistTransition(backend, runId, next);
|
|
1213
|
+
run.pendingStageMessages = [...next];
|
|
1214
|
+
context.bumpAndNotify();
|
|
1215
|
+
return true;
|
|
1216
|
+
});
|
|
1217
|
+
},
|
|
1218
|
+
async settleStickyPendingStageMessageDelivered(runId, messageId, settledAt, backend) {
|
|
1219
|
+
return await serialize(runId, async () => {
|
|
1220
|
+
const run = context.findRun(runId);
|
|
1221
|
+
if (run === undefined)
|
|
1222
|
+
return false;
|
|
1223
|
+
const current = run.pendingStageMessages ?? [];
|
|
1224
|
+
const next = settleStickyPendingStageMessageDelivered(current, runId, messageId, settledAt);
|
|
1225
|
+
if (next === current)
|
|
1226
|
+
return false;
|
|
1227
|
+
await persistTransition(backend, runId, next);
|
|
1228
|
+
run.pendingStageMessages = [...next];
|
|
1229
|
+
context.bumpAndNotify();
|
|
1230
|
+
return true;
|
|
1231
|
+
});
|
|
1061
1232
|
}
|
|
1062
1233
|
};
|
|
1063
1234
|
}
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
reviewerFailureText,
|
|
10
10
|
summarizeReviewConvergence,
|
|
11
11
|
workflowArtifactDirectoryPath
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-b0v2xab1.js";
|
|
13
13
|
import {
|
|
14
14
|
fold_usage
|
|
15
15
|
} from "./chunk-7at6dnkr.js";
|
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
EVIDENCE_CLOSURE_POLICY,
|
|
28
28
|
FINDINGS_CONSOLIDATION_CONTRACT,
|
|
29
29
|
LITERAL_OBJECTIVE_CONTRACT,
|
|
30
|
+
MEDIA_PUBLICATION_GUIDANCE,
|
|
30
31
|
REGRESSION_EVIDENCE_CONTRACT,
|
|
31
32
|
REPO_INTENT_MINING_GUIDANCE,
|
|
32
33
|
REVIEWER_CALIBRATION_RULES,
|
|
@@ -41,7 +42,7 @@ import {
|
|
|
41
42
|
keepContext,
|
|
42
43
|
renderE2eQaVideoReviewGuidance,
|
|
43
44
|
withSteeringPropagationContext
|
|
44
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-zbekjqew.js";
|
|
45
46
|
|
|
46
47
|
// dist/builtin/workflows/builtin/goal.ts
|
|
47
48
|
import { Type as Type2 } from "typebox";
|
|
@@ -112,8 +113,13 @@ var reviewDecisionSchema = Type.Object({
|
|
|
112
113
|
|
|
113
114
|
// dist/builtin/workflows/builtin/goal-models.ts
|
|
114
115
|
var orchestratorModelConfig = {
|
|
115
|
-
model: "
|
|
116
|
+
model: "openai-codex/gpt-6-astra:high",
|
|
116
117
|
fallbackModels: [
|
|
118
|
+
"github-copilot/gpt-6-astra:high",
|
|
119
|
+
"openai/gpt-6-astra:high",
|
|
120
|
+
"anthropic/claude-fable-5-1:high",
|
|
121
|
+
"github-copilot/claude-fable-5-1:high",
|
|
122
|
+
"anthropic/claude-opus-5:high",
|
|
117
123
|
"github-copilot/claude-opus-5:high",
|
|
118
124
|
"openai-codex/gpt-5.6-sol:xhigh",
|
|
119
125
|
"github-copilot/gpt-5.6-sol:xhigh",
|
|
@@ -136,6 +142,8 @@ var orchestratorModelConfig = {
|
|
|
136
142
|
"zai-coding-cn/glm-5.3-flash:high",
|
|
137
143
|
"baseten/zai-org/GLM-5.3:high",
|
|
138
144
|
"baseten/zai-org/GLM-5.3-Flash:high",
|
|
145
|
+
"openrouter/openai/gpt-6-astra:high",
|
|
146
|
+
"openrouter/anthropic/claude-fable-5-1:high",
|
|
139
147
|
"openrouter/anthropic/claude-opus-5:high",
|
|
140
148
|
"openrouter/openai/gpt-5.6-sol:xhigh",
|
|
141
149
|
"openrouter/anthropic/claude-fable-5:high",
|
|
@@ -150,8 +158,13 @@ var orchestratorModelConfig = {
|
|
|
150
158
|
excludedTools: ["ask_user_question"]
|
|
151
159
|
};
|
|
152
160
|
var reviewerModelConfig = {
|
|
153
|
-
model: "
|
|
161
|
+
model: "openai-codex/gpt-6-astra:xhigh",
|
|
154
162
|
fallbackModels: [
|
|
163
|
+
"github-copilot/gpt-6-astra:xhigh",
|
|
164
|
+
"openai/gpt-6-astra:xhigh",
|
|
165
|
+
"anthropic/claude-fable-5-1:high",
|
|
166
|
+
"github-copilot/claude-fable-5-1:high",
|
|
167
|
+
"anthropic/claude-opus-5:high",
|
|
155
168
|
"github-copilot/claude-opus-5:high",
|
|
156
169
|
"anthropic/claude-fable-5:high",
|
|
157
170
|
"github-copilot/claude-fable-5:high",
|
|
@@ -174,6 +187,8 @@ var reviewerModelConfig = {
|
|
|
174
187
|
"zai-coding-cn/glm-5.3-flash:high",
|
|
175
188
|
"baseten/zai-org/GLM-5.3:high",
|
|
176
189
|
"baseten/zai-org/GLM-5.3-Flash:high",
|
|
190
|
+
"openrouter/openai/gpt-6-astra:xhigh",
|
|
191
|
+
"openrouter/anthropic/claude-fable-5-1:high",
|
|
177
192
|
"openrouter/anthropic/claude-opus-5:high",
|
|
178
193
|
"openrouter/anthropic/claude-fable-5:high",
|
|
179
194
|
"openrouter/openai/gpt-5.6-sol:xhigh",
|
|
@@ -702,7 +717,7 @@ function renderReviewerPrompt(args) {
|
|
|
702
717
|
["project_guidance", [
|
|
703
718
|
"Apply AGENTS.md/CLAUDE.md and nearby code, test, script, config, generated-artifact, and CI conventions; specific project guidance overrides general guidance.",
|
|
704
719
|
"Choose the smallest relevant targeted tests, lint, typecheck, build, generated checks, CI-equivalent scripts, or user-flow proof from repository evidence.",
|
|
705
|
-
"
|
|
720
|
+
"For missing required validation dependencies, use repository-approved setup when the environment permits rather than bypassing or mocking checks. If required evidence remains unavailable after reasonable recovery or a known restriction, record the limitation in overall_explanation and reviewer_error and do not approve. An unavailable optional mechanism alone is not a blocker when adequate objective-relevant proof and authoritative checks are present."
|
|
706
721
|
].join(`
|
|
707
722
|
`)],
|
|
708
723
|
["finding_contract", [
|
|
@@ -1088,6 +1103,9 @@ async function runGoalWorkflow(ctx, options) {
|
|
|
1088
1103
|
];
|
|
1089
1104
|
const prResult = await ctx.task("pull-request", {
|
|
1090
1105
|
prompt: taggedPrompt([
|
|
1106
|
+
["e2e_verification", E2E_VERIFICATION_GUIDANCE],
|
|
1107
|
+
["code_quality_verification", CODE_QUALITY_VERIFICATION_GUIDANCE],
|
|
1108
|
+
["media_publication", MEDIA_PUBLICATION_GUIDANCE],
|
|
1091
1109
|
[
|
|
1092
1110
|
"final_report",
|
|
1093
1111
|
[
|