@bastani/atomic 0.9.5-alpha.9 → 0.9.6-alpha.1
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 +114 -0
- package/README.md +2 -2
- package/dist/builtin/cursor/CHANGELOG.md +18 -0
- package/dist/builtin/cursor/package.json +3 -3
- package/dist/builtin/cursor/src/model-mapper.ts +6 -3
- package/dist/builtin/intercom/CHANGELOG.md +43 -0
- package/dist/builtin/intercom/README.md +5 -3
- package/dist/builtin/intercom/broker/broker.ts +6 -114
- package/dist/builtin/intercom/broker/client.ts +29 -54
- package/dist/builtin/intercom/broker/delivered-message-cache.ts +44 -0
- package/dist/builtin/intercom/broker/pending-send-registry.ts +142 -0
- package/dist/builtin/intercom/broker/send-handler.ts +106 -0
- package/dist/builtin/intercom/broker/send-signature.ts +37 -0
- package/dist/builtin/intercom/foreground-detach-handoff.ts +136 -0
- package/dist/builtin/intercom/index-heavy.ts +40 -61
- package/dist/builtin/intercom/index.ts +222 -267
- package/dist/builtin/intercom/lazy-heavy-proxy.ts +108 -0
- package/dist/builtin/intercom/lazy-subagent-ack.ts +20 -0
- package/dist/builtin/intercom/lazy-tool-execution.ts +39 -0
- package/dist/builtin/intercom/lifecycle-lease.ts +51 -0
- package/dist/builtin/intercom/lifecycle.ts +36 -34
- package/dist/builtin/intercom/package.json +3 -6
- package/dist/builtin/intercom/reply-routing.ts +17 -0
- package/dist/builtin/intercom/subagent-relay.ts +58 -12
- package/dist/builtin/intercom/types.ts +3 -3
- package/dist/builtin/mcp/CHANGELOG.md +33 -0
- package/dist/builtin/mcp/OAUTH.md +1 -0
- package/dist/builtin/mcp/README.md +4 -0
- package/dist/builtin/mcp/apps-cancellation.ts +32 -0
- package/dist/builtin/mcp/call-tool-result.ts +9 -0
- package/dist/builtin/mcp/caller-wait.ts +50 -0
- package/dist/builtin/mcp/command-registration.ts +82 -0
- package/dist/builtin/mcp/direct-tool-executor.ts +279 -0
- package/dist/builtin/mcp/direct-tools.ts +6 -239
- package/dist/builtin/mcp/host-html-template.ts +4 -2
- package/dist/builtin/mcp/index.ts +258 -250
- package/dist/builtin/mcp/init.ts +96 -87
- package/dist/builtin/mcp/mcp-auth-flow.ts +247 -237
- package/dist/builtin/mcp/mcp-callback-server.ts +89 -68
- package/dist/builtin/mcp/mcp-oauth-provider.ts +23 -1
- package/dist/builtin/mcp/metadata-hydration.ts +21 -6
- package/dist/builtin/mcp/package.json +3 -3
- package/dist/builtin/mcp/proxy-auth.ts +4 -4
- package/dist/builtin/mcp/proxy-call.ts +111 -40
- package/dist/builtin/mcp/proxy-connect.ts +35 -15
- package/dist/builtin/mcp/proxy-info-modes.ts +49 -19
- package/dist/builtin/mcp/proxy-modes.ts +3 -3
- package/dist/builtin/mcp/session-cleanup-barrier.ts +43 -0
- package/dist/builtin/mcp/state-lease.ts +12 -0
- package/dist/builtin/mcp/ui-server.ts +8 -8
- package/dist/builtin/mcp/ui-session.ts +9 -18
- package/dist/builtin/subagents/CHANGELOG.md +73 -0
- package/dist/builtin/subagents/README.md +30 -29
- package/dist/builtin/subagents/agents/code-simplifier.md +2 -2
- package/dist/builtin/subagents/agents/codebase-analyzer.md +2 -2
- package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +2 -2
- package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
- package/dist/builtin/subagents/agents/codebase-research-analyzer.md +2 -2
- package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
- package/dist/builtin/subagents/agents/debugger.md +2 -2
- package/dist/builtin/subagents/agents/worker.md +2 -2
- package/dist/builtin/subagents/package.json +5 -5
- package/dist/builtin/subagents/prompts/review-loop.md +1 -1
- package/dist/builtin/subagents/skills/subagent/SKILL.md +38 -37
- package/dist/builtin/subagents/src/extension/api-lifecycle.ts +64 -0
- package/dist/builtin/subagents/src/extension/fanout-child.ts +44 -51
- package/dist/builtin/subagents/src/extension/index.ts +287 -307
- package/dist/builtin/subagents/src/extension/prompt-guidance.ts +6 -10
- package/dist/builtin/subagents/src/extension/schemas.ts +22 -5
- package/dist/builtin/subagents/src/extension/tool-description.ts +29 -0
- package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +13 -2
- package/dist/builtin/subagents/src/intercom/result-intercom.ts +4 -4
- package/dist/builtin/subagents/src/runs/background/async-event-journal.ts +106 -0
- package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +3 -2
- package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +13 -2
- package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +3 -0
- package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +1 -1
- package/dist/builtin/subagents/src/runs/background/completion-claims.ts +189 -0
- package/dist/builtin/subagents/src/runs/background/completion-dedupe.ts +44 -7
- package/dist/builtin/subagents/src/runs/background/completion-notification.ts +34 -0
- package/dist/builtin/subagents/src/runs/background/notify.ts +72 -22
- package/dist/builtin/subagents/src/runs/background/result-delivery-processor.ts +232 -0
- package/dist/builtin/subagents/src/runs/background/result-file-claims.ts +151 -0
- package/dist/builtin/subagents/src/runs/background/result-quarantine.ts +72 -0
- package/dist/builtin/subagents/src/runs/background/result-retry-scheduler.ts +48 -0
- package/dist/builtin/subagents/src/runs/background/result-status.ts +81 -0
- package/dist/builtin/subagents/src/runs/background/result-watcher-data.ts +59 -0
- package/dist/builtin/subagents/src/runs/background/result-watcher.ts +172 -238
- package/dist/builtin/subagents/src/runs/background/run-id-resolver.ts +3 -2
- package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +73 -14
- package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +17 -13
- package/dist/builtin/subagents/src/runs/background/top-level-async.ts +1 -2
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +1 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +1 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +1 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +7 -9
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +3 -13
- package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +2 -15
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt-finalize.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +53 -44
- package/dist/builtin/subagents/src/runs/foreground/execution-detach-reservations.ts +48 -0
- package/dist/builtin/subagents/src/runs/foreground/execution-detach-route.ts +17 -0
- package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +39 -26
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +3 -1
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +3 -51
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +6 -11
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +11 -2
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +2 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +5 -112
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +2 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +68 -118
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +79 -7
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +3 -0
- package/dist/builtin/subagents/src/runs/shared/pi-args.ts +2 -2
- package/dist/builtin/subagents/src/runs/shared/pi-spawn.ts +27 -11
- package/dist/builtin/subagents/src/shared/artifacts.ts +22 -11
- package/dist/builtin/subagents/src/shared/event-jsonl-writer.ts +294 -0
- package/dist/builtin/subagents/src/shared/exclusive-file-publication.ts +44 -0
- package/dist/builtin/subagents/src/shared/jsonl-writer.ts +1 -0
- package/dist/builtin/subagents/src/shared/model-info.ts +2 -2
- package/dist/builtin/subagents/src/shared/settings.ts +20 -10
- package/dist/builtin/subagents/src/shared/types-async.ts +3 -1
- package/dist/builtin/subagents/src/shared/types-config.ts +2 -0
- package/dist/builtin/subagents/src/shared/types-runtime.ts +3 -2
- package/dist/builtin/subagents/src/slash/slash-commands.ts +9 -12
- package/dist/builtin/subagents/src/slash/slash-live-state.ts +63 -32
- package/dist/builtin/subagents/src/tui/render-result.ts +7 -0
- package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -0
- package/dist/builtin/subagents/src/tui/render-widget.ts +128 -89
- package/dist/builtin/web-access/CHANGELOG.md +34 -0
- package/dist/builtin/web-access/README.md +4 -0
- package/dist/builtin/web-access/content-tools.ts +8 -3
- package/dist/builtin/web-access/index-heavy.ts +1 -1
- package/dist/builtin/web-access/index.ts +190 -46
- package/dist/builtin/web-access/lifecycle-lease.ts +38 -0
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/web-access/result-renderers.ts +1 -1
- package/dist/builtin/web-access/summary-review.ts +1 -1
- package/dist/builtin/web-access/web-search-activity.ts +1 -1
- package/dist/builtin/web-access/web-search-return.ts +7 -0
- package/dist/builtin/web-access/web-search-summary.ts +1 -1
- package/dist/builtin/web-access/web-search-tool.ts +4 -2
- package/dist/builtin/workflows/CHANGELOG.md +76 -0
- package/dist/builtin/workflows/README.md +5 -5
- package/dist/builtin/workflows/builtin/deep-research-codebase-utils.ts +27 -4
- package/dist/builtin/workflows/builtin/goal-runner.ts +47 -26
- package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +10 -0
- package/dist/builtin/workflows/builtin/ralph-core.ts +6 -6
- package/dist/builtin/workflows/builtin/ralph-models.ts +71 -36
- package/dist/builtin/workflows/builtin/ralph-runner.ts +0 -11
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/src/durable/stage-primitive.ts +2 -1
- package/dist/builtin/workflows/src/engine/primitives/task.ts +2 -1
- package/dist/builtin/workflows/src/extension/workflow-prompts.ts +23 -22
- package/dist/builtin/workflows/src/extension/workflow-schema.ts +15 -2
- package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +1 -2
- package/dist/builtin/workflows/src/runs/shared/model-fallback-candidates.ts +1 -1
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +2 -2
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +2 -2
- package/dist/builtin/workflows/src/shared/resume-continuation.ts +2 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +1 -23
- package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +54 -9
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +5 -2
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +2 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +2 -1
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-message-queue.d.ts.map +1 -1
- package/dist/core/agent-session-message-queue.js +1 -1
- package/dist/core/agent-session-message-queue.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +1 -1
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-retry.d.ts.map +1 -1
- package/dist/core/agent-session-retry.js +1 -1
- package/dist/core/agent-session-retry.js.map +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +3 -2
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/anthropic-thinking-guard.d.ts +5 -5
- package/dist/core/anthropic-thinking-guard.d.ts.map +1 -1
- package/dist/core/anthropic-thinking-guard.js +42 -32
- package/dist/core/anthropic-thinking-guard.js.map +1 -1
- package/dist/core/atomic-guide-command.d.ts.map +1 -1
- package/dist/core/atomic-guide-command.js +15 -15
- package/dist/core/atomic-guide-command.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +14 -9
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +2 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +79 -46
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/context-assistant-turns.d.ts +42 -0
- package/dist/core/compaction/context-assistant-turns.d.ts.map +1 -0
- package/dist/core/compaction/context-assistant-turns.js +87 -0
- package/dist/core/compaction/context-assistant-turns.js.map +1 -0
- package/dist/core/compaction/context-compaction-critical.d.ts +1 -1
- package/dist/core/compaction/context-compaction-critical.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction-critical.js +2 -2
- package/dist/core/compaction/context-compaction-critical.js.map +1 -1
- package/dist/core/compaction/context-compaction-eviction-alternates.d.ts +18 -0
- package/dist/core/compaction/context-compaction-eviction-alternates.d.ts.map +1 -0
- package/dist/core/compaction/context-compaction-eviction-alternates.js +186 -0
- package/dist/core/compaction/context-compaction-eviction-alternates.js.map +1 -0
- package/dist/core/compaction/context-compaction-eviction.d.ts +10 -2
- package/dist/core/compaction/context-compaction-eviction.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction-eviction.js +196 -146
- package/dist/core/compaction/context-compaction-eviction.js.map +1 -1
- package/dist/core/compaction/context-compaction-prompt.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction-prompt.js +1 -1
- package/dist/core/compaction/context-compaction-prompt.js.map +1 -1
- package/dist/core/compaction/context-compaction-types.d.ts +2 -0
- package/dist/core/compaction/context-compaction-types.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction-types.js.map +1 -1
- package/dist/core/compaction/context-deletion-application.d.ts +5 -4
- package/dist/core/compaction/context-deletion-application.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-application.js +17 -15
- package/dist/core/compaction/context-deletion-application.js.map +1 -1
- package/dist/core/compaction/context-deletion-store.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-store.js +1 -1
- package/dist/core/compaction/context-deletion-store.js.map +1 -1
- package/dist/core/compaction/context-deletion-targets.d.ts +2 -1
- package/dist/core/compaction/context-deletion-targets.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-targets.js +36 -31
- package/dist/core/compaction/context-deletion-targets.js.map +1 -1
- package/dist/core/compaction/context-deletion-tool-helpers.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-tool-helpers.js +116 -43
- package/dist/core/compaction/context-deletion-tool-helpers.js.map +1 -1
- package/dist/core/compaction/context-transcript-analysis.d.ts +1 -2
- package/dist/core/compaction/context-transcript-analysis.d.ts.map +1 -1
- package/dist/core/compaction/context-transcript-analysis.js +33 -37
- package/dist/core/compaction/context-transcript-analysis.js.map +1 -1
- package/dist/core/copilot-model-synthesis.d.ts.map +1 -1
- package/dist/core/copilot-model-synthesis.js +3 -1
- package/dist/core/copilot-model-synthesis.js.map +1 -1
- package/dist/core/extensions/provider-types.d.ts +2 -7
- package/dist/core/extensions/provider-types.d.ts.map +1 -1
- package/dist/core/extensions/provider-types.js.map +1 -1
- package/dist/core/messages.d.ts +9 -0
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +100 -18
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-registry-builtins.d.ts.map +1 -1
- package/dist/core/model-registry-builtins.js +5 -0
- package/dist/core/model-registry-builtins.js.map +1 -1
- package/dist/core/model-registry-custom-loader.d.ts.map +1 -1
- package/dist/core/model-registry-custom-loader.js +49 -8
- package/dist/core/model-registry-custom-loader.js.map +1 -1
- package/dist/core/model-registry-dynamic.d.ts.map +1 -1
- package/dist/core/model-registry-dynamic.js +11 -5
- package/dist/core/model-registry-dynamic.js.map +1 -1
- package/dist/core/model-registry-loader.d.ts.map +1 -1
- package/dist/core/model-registry-loader.js +8 -0
- package/dist/core/model-registry-loader.js.map +1 -1
- package/dist/core/model-registry-schemas.d.ts +93 -8
- package/dist/core/model-registry-schemas.d.ts.map +1 -1
- package/dist/core/model-registry-schemas.js +24 -12
- package/dist/core/model-registry-schemas.js.map +1 -1
- package/dist/core/model-registry-types.d.ts +7 -6
- package/dist/core/model-registry-types.d.ts.map +1 -1
- package/dist/core/model-registry-types.js.map +1 -1
- package/dist/core/model-registry.d.ts +5 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +23 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-cli.d.ts.map +1 -1
- package/dist/core/model-resolver-cli.js +33 -5
- package/dist/core/model-resolver-cli.js.map +1 -1
- package/dist/core/model-resolver-initial.d.ts +6 -1
- package/dist/core/model-resolver-initial.d.ts.map +1 -1
- package/dist/core/model-resolver-initial.js +12 -7
- package/dist/core/model-resolver-initial.js.map +1 -1
- package/dist/core/model-resolver.d.ts +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/resource-loader-context-files.d.ts +1 -0
- package/dist/core/resource-loader-context-files.d.ts.map +1 -1
- package/dist/core/resource-loader-context-files.js +13 -10
- package/dist/core/resource-loader-context-files.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +2 -2
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-entry-normalization.d.ts +7 -0
- package/dist/core/session-entry-normalization.d.ts.map +1 -0
- package/dist/core/session-entry-normalization.js +14 -0
- package/dist/core/session-entry-normalization.js.map +1 -0
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js +1 -0
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-history.d.ts +2 -2
- package/dist/core/session-manager-history.d.ts.map +1 -1
- package/dist/core/session-manager-history.js +127 -108
- package/dist/core/session-manager-history.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +2 -2
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-types.d.ts +1 -1
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +11 -8
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/main-session.d.ts.map +1 -1
- package/dist/main-session.js +1 -0
- package/dist/main-session.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-options.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-options.js +3 -1
- package/dist/modes/interactive/components/settings-selector-options.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +2 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +2 -1
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-child-ordering.d.ts +7 -0
- package/dist/modes/interactive/interactive-child-ordering.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-child-ordering.js +26 -0
- package/dist/modes/interactive/interactive-child-ordering.js.map +1 -0
- package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js +2 -2
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.js +8 -3
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
- package/dist/modes/interactive/theme/theme-class.d.ts +1 -1
- package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-class.js +2 -0
- package/dist/modes/interactive/theme/theme-class.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +3 -0
- package/dist/utils/clipboard-image.js.map +1 -1
- package/docs/changelog.mdx +19 -0
- package/docs/compaction.md +55 -48
- package/docs/custom-provider.md +18 -5
- package/docs/extensions.md +7 -3
- package/docs/models.md +69 -10
- package/docs/providers.md +1 -1
- package/docs/quickstart.md +9 -7
- package/docs/rpc.md +2 -2
- package/docs/sdk.md +1 -1
- package/docs/settings.md +3 -3
- package/docs/subagents.md +36 -5
- package/docs/tools.md +1 -1
- package/docs/usage.md +4 -2
- package/docs/workflows.md +27 -44
- package/examples/extensions/preset.ts +2 -2
- package/examples/extensions/subagent/README.md +2 -2
- package/examples/extensions/subagent/index.ts +1 -2
- package/examples/extensions/subagent/schemas.ts +4 -1
- package/examples/sdk/12-full-control.ts +1 -1
- package/npm-shrinkwrap.json +48 -51
- package/package.json +7 -7
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-behavior.ts +0 -75
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-component.ts +0 -202
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-edit.ts +0 -97
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-editor.ts +0 -160
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-frame.ts +0 -72
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-modes.ts +0 -161
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-selectors.ts +0 -203
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-selectors.ts +0 -234
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-state.ts +0 -103
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-types.ts +0 -29
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify.ts +0 -9
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-clarify.ts +0 -117
|
@@ -37,18 +37,29 @@ export const FILE_ONLY_OUTPUT = "file-only" satisfies WorkflowOutputMode;
|
|
|
37
37
|
export const PLANNER_MODEL_CONFIG = {
|
|
38
38
|
model: "anthropic/claude-fable-5:high",
|
|
39
39
|
fallbackModels: [
|
|
40
|
+
"openai-codex/gpt-5.6-sol:xhigh",
|
|
41
|
+
"github-copilot/gpt-5.6-sol:xhigh",
|
|
42
|
+
"openai/gpt-5.6-sol:xhigh",
|
|
40
43
|
"openai-codex/gpt-5.5:xhigh",
|
|
41
44
|
"github-copilot/gpt-5.5:xhigh",
|
|
42
45
|
"openai/gpt-5.5:xhigh",
|
|
43
46
|
"github-copilot/claude-opus-4.8 (1m):high",
|
|
44
47
|
"anthropic/claude-opus-4-8:high",
|
|
48
|
+
"cursor/claude-fable-5:high",
|
|
49
|
+
"cursor/gpt-5.6-sol:xhigh",
|
|
50
|
+
"cursor/gpt-5.5:high",
|
|
51
|
+
"cursor/claude-opus-4-8-thinking:high",
|
|
52
|
+
"cursor/grok-4.5",
|
|
45
53
|
"zai/glm-5.2:xhigh",
|
|
46
54
|
"zai-coding-cn/glm-5.2:xhigh",
|
|
55
|
+
"cursor/glm-5.2",
|
|
47
56
|
"openrouter/anthropic/claude-fable-5:high",
|
|
57
|
+
"openrouter/openai/gpt-5.6-sol:xhigh",
|
|
48
58
|
"openrouter/sakana/fugu-ultra:high",
|
|
49
59
|
"openrouter/openai/gpt-5.5:xhigh",
|
|
50
60
|
"openrouter/anthropic/claude-opus-4-8:high",
|
|
51
|
-
"openrouter/
|
|
61
|
+
"openrouter/x-ai/grok-4.5",
|
|
62
|
+
"openrouter/z-ai/glm-5.2:xhigh",
|
|
52
63
|
],
|
|
53
64
|
excludedTools: ["ask_user_question"],
|
|
54
65
|
} as const;
|
|
@@ -58,16 +69,26 @@ export const PLANNER_MODEL_CONFIG = {
|
|
|
58
69
|
// and glm-5.2:high (36%/$2.84) back it up; unbenchmarked minis/haiku/flash
|
|
59
70
|
// are excluded.
|
|
60
71
|
export const EXPLORER_MODEL_CONFIG = {
|
|
61
|
-
model: "openai-codex/gpt-5.
|
|
72
|
+
model: "openai-codex/gpt-5.6-terra:high",
|
|
62
73
|
fallbackModels: [
|
|
74
|
+
"github-copilot/gpt-5.6-terra:high",
|
|
75
|
+
"openai/gpt-5.6-terra:high",
|
|
76
|
+
"openai-codex/gpt-5.5:low",
|
|
63
77
|
"github-copilot/gpt-5.5:low",
|
|
64
78
|
"openai/gpt-5.5:low",
|
|
65
79
|
"github-copilot/claude-opus-4.8 (1m):low",
|
|
66
80
|
"anthropic/claude-opus-4-8:low",
|
|
81
|
+
"cursor/gpt-5.6-terra:high",
|
|
82
|
+
"cursor/gpt-5.5:low",
|
|
83
|
+
"cursor/claude-opus-4-8-thinking:low",
|
|
84
|
+
"cursor/grok-4.5",
|
|
67
85
|
"zai/glm-5.2:high",
|
|
68
86
|
"zai-coding-cn/glm-5.2:high",
|
|
87
|
+
"cursor/glm-5.2",
|
|
88
|
+
"openrouter/openai/gpt-5.6-terra:high",
|
|
69
89
|
"openrouter/openai/gpt-5.5:low",
|
|
70
90
|
"openrouter/anthropic/claude-opus-4-8:low",
|
|
91
|
+
"openrouter/x-ai/grok-4.5",
|
|
71
92
|
"openrouter/z-ai/glm-5.2:xhigh",
|
|
72
93
|
],
|
|
73
94
|
excludedTools: ["ask_user_question"],
|
|
@@ -92,7 +113,10 @@ export function taggedPrompt(sections: readonly PromptSection[]): string {
|
|
|
92
113
|
.join("\n\n");
|
|
93
114
|
}
|
|
94
115
|
|
|
95
|
-
export function positiveInteger(
|
|
116
|
+
export function positiveInteger(
|
|
117
|
+
value: number | undefined,
|
|
118
|
+
fallback: number,
|
|
119
|
+
): number {
|
|
96
120
|
return typeof value === "number" && Number.isFinite(value) && value > 0
|
|
97
121
|
? Math.floor(value)
|
|
98
122
|
: fallback;
|
|
@@ -351,4 +375,3 @@ export function displayRelativePath(path: string, fromCwd: string): string {
|
|
|
351
375
|
}
|
|
352
376
|
return displayPath(path);
|
|
353
377
|
}
|
|
354
|
-
|
|
@@ -114,22 +114,32 @@ export async function runGoalWorkflow(ctx: GoalRunnerContext, options: GoalWorkf
|
|
|
114
114
|
const comparisonBaseBranch = normalizeBranchInput(inputs.base_branch, "origin/main");
|
|
115
115
|
const { ledger, ledgerPath, artifactDir } = await createGoalLedger(objective, acceptanceCriteria);
|
|
116
116
|
|
|
117
|
-
// Chains curated from Atomic's agentic-coding benchmark
|
|
118
|
-
// ralph-models.ts for the frontier data and drop rationale).
|
|
117
|
+
// Chains curated from Atomic's agentic-coding benchmark; see ralph-models.ts for frontier data and drop rationale.
|
|
119
118
|
const workerModelConfig = {
|
|
120
|
-
model: "openai-codex/gpt-5.
|
|
119
|
+
model: "openai-codex/gpt-5.6-sol:medium",
|
|
121
120
|
fallbackModels: [
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
121
|
+
"github-copilot/gpt-5.6-sol:medium",
|
|
122
|
+
"openai/gpt-5.6-sol:medium",
|
|
123
|
+
"openai-codex/gpt-5.5:medium",
|
|
124
|
+
"github-copilot/gpt-5.5:medium",
|
|
125
|
+
"openai/gpt-5.5:medium",
|
|
126
|
+
"anthropic/claude-fable-5:low",
|
|
127
|
+
"github-copilot/claude-opus-4.8 (1m):medium",
|
|
128
|
+
"anthropic/claude-opus-4-8:medium",
|
|
129
|
+
"cursor/gpt-5.6-sol:medium",
|
|
130
|
+
"cursor/gpt-5.5:medium",
|
|
131
|
+
"cursor/claude-fable-5:low",
|
|
132
|
+
"cursor/claude-opus-4-8-thinking:medium",
|
|
133
|
+
"cursor/grok-4.5",
|
|
134
|
+
"zai/glm-5.2:high",
|
|
135
|
+
"zai-coding-cn/glm-5.2:high",
|
|
136
|
+
"cursor/glm-5.2",
|
|
137
|
+
"openrouter/openai/gpt-5.6-sol:medium",
|
|
138
|
+
"openrouter/openai/gpt-5.5:medium",
|
|
139
|
+
"openrouter/anthropic/claude-fable-5:low",
|
|
140
|
+
"openrouter/anthropic/claude-opus-4-8:medium",
|
|
141
|
+
"openrouter/x-ai/grok-4.5",
|
|
142
|
+
"openrouter/z-ai/glm-5.2:xhigh"
|
|
133
143
|
],
|
|
134
144
|
excludedTools: ["ask_user_question"],
|
|
135
145
|
};
|
|
@@ -137,18 +147,29 @@ export async function runGoalWorkflow(ctx: GoalRunnerContext, options: GoalWorkf
|
|
|
137
147
|
const reviewerModelConfig = {
|
|
138
148
|
model: "anthropic/claude-fable-5:high",
|
|
139
149
|
fallbackModels: [
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
150
|
+
"openai-codex/gpt-5.6-sol:max",
|
|
151
|
+
"github-copilot/gpt-5.6-sol:max",
|
|
152
|
+
"openai/gpt-5.6-sol:max",
|
|
153
|
+
"openai-codex/gpt-5.5:xhigh",
|
|
154
|
+
"github-copilot/gpt-5.5:xhigh",
|
|
155
|
+
"openai/gpt-5.5:xhigh",
|
|
156
|
+
"github-copilot/claude-opus-4.8 (1m):high",
|
|
157
|
+
"anthropic/claude-opus-4-8:high",
|
|
158
|
+
"cursor/claude-fable-5:high",
|
|
159
|
+
"cursor/gpt-5.6-sol:max",
|
|
160
|
+
"cursor/gpt-5.5:high",
|
|
161
|
+
"cursor/claude-opus-4-8-thinking:high",
|
|
162
|
+
"cursor/grok-4.5",
|
|
163
|
+
"zai/glm-5.2:xhigh",
|
|
164
|
+
"zai-coding-cn/glm-5.2:xhigh",
|
|
165
|
+
"cursor/glm-5.2",
|
|
166
|
+
"openrouter/anthropic/claude-fable-5:high",
|
|
167
|
+
"openrouter/openai/gpt-5.6-sol:max",
|
|
168
|
+
"openrouter/sakana/fugu-ultra:high",
|
|
169
|
+
"openrouter/openai/gpt-5.5:xhigh",
|
|
170
|
+
"openrouter/anthropic/claude-opus-4-8:high",
|
|
171
|
+
"openrouter/x-ai/grok-4.5",
|
|
172
|
+
"openrouter/z-ai/glm-5.2:xhigh"
|
|
152
173
|
],
|
|
153
174
|
excludedTools: ["ask_user_question"],
|
|
154
175
|
schema: reviewDecisionSchema,
|
|
@@ -82,11 +82,21 @@ export async function runOpenClaudeDesignWorkflow(ctx: OpenClaudeDesignContext):
|
|
|
82
82
|
fallbackModels: [
|
|
83
83
|
"github-copilot/claude-opus-4.8 (1m):high",
|
|
84
84
|
"anthropic/claude-opus-4-8:high",
|
|
85
|
+
"cursor/claude-fable-5:high",
|
|
86
|
+
"cursor/claude-opus-4-8-thinking:high",
|
|
87
|
+
"openai-codex/gpt-5.6-sol:xhigh",
|
|
88
|
+
"github-copilot/gpt-5.6-sol:xhigh",
|
|
89
|
+
"openai/gpt-5.6-sol:xhigh",
|
|
90
|
+
"cursor/gpt-5.6-sol:xhigh",
|
|
91
|
+
"cursor/grok-4.5",
|
|
85
92
|
"zai/glm-5.2:xhigh",
|
|
86
93
|
"zai-coding-cn/glm-5.2:xhigh",
|
|
94
|
+
"cursor/glm-5.2",
|
|
87
95
|
"openrouter/anthropic/claude-fable-5:high",
|
|
88
96
|
"openrouter/anthropic/claude-opus-4-8:high",
|
|
97
|
+
"openrouter/openai/gpt-5.6-sol:xhigh",
|
|
89
98
|
"openrouter/sakana/fugu-ultra:high",
|
|
99
|
+
"openrouter/x-ai/grok-4.5",
|
|
90
100
|
"openrouter/z-ai/glm-5.2:xhigh"
|
|
91
101
|
],
|
|
92
102
|
};
|
|
@@ -21,15 +21,15 @@ const DEFAULT_RESEARCH_DIR = "research";
|
|
|
21
21
|
const IMPLEMENTATION_NOTES_FILENAME = "implementation-notes.md";
|
|
22
22
|
const QA_E2E_VIDEO_FILENAME = "qa-e2e-evidence.webm";
|
|
23
23
|
const MAX_RESEARCH_SLUG_LENGTH = 80;
|
|
24
|
-
// Reviewer fan-out launches
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
//
|
|
24
|
+
// Reviewer fan-out launches two independent reviewers; the loop stops only when
|
|
25
|
+
// both reviewers independently approve. Approval is severity-aware: a reviewer
|
|
26
|
+
// approves when it judged the patch correct, reported no reviewer_error, and
|
|
27
|
+
// filed no *blocking* (P0/P1/P2) finding. P3 nice-to-haves no longer keep the
|
|
28
28
|
// loop iterating, so a single low-priority nit (or a placeholder finding) can no
|
|
29
29
|
// longer strand an otherwise-approved patch. Requiring unanimous approval still
|
|
30
|
-
// means a blocking finding from
|
|
30
|
+
// means a blocking finding from either reviewer keeps the loop going. See
|
|
31
31
|
// ./ralph-review-gate.ts for the gate types and decision logic.
|
|
32
|
-
export const REVIEWER_COUNT =
|
|
32
|
+
export const REVIEWER_COUNT = 2;
|
|
33
33
|
|
|
34
34
|
const reviewFindingSchema = Type.Object(
|
|
35
35
|
{
|
|
@@ -5,9 +5,8 @@ import { reviewDecisionSchema } from "./ralph-core.js";
|
|
|
5
5
|
// - Critical synthesis/review stages prefer fable-5:xhigh, then gpt-5.5 xhigh
|
|
6
6
|
// variants, openrouter fugu-ultra, long-context opus, and GLM fallbacks.
|
|
7
7
|
// - Research remains on gpt-5.5:medium / fable-5:low for perf-per-dollar.
|
|
8
|
-
// - Reviewer B keeps gpt-5.5:xhigh as an independent frontier family
|
|
9
|
-
//
|
|
10
|
-
// mid-chain, to decorrelate review errors.
|
|
8
|
+
// - Reviewer B keeps gpt-5.5:xhigh as an independent frontier family to
|
|
9
|
+
// decorrelate review errors from reviewer A.
|
|
11
10
|
// - Dominated benchmark models stay out of the chains: claude-sonnet-5,
|
|
12
11
|
// claude-sonnet-4.6, gemini-3.1-pro, and gemini-3.5-flash.
|
|
13
12
|
// - GLM-5.2 has only two real reasoning tiers — its thinkingLevelMap collapses
|
|
@@ -18,54 +17,87 @@ import { reviewDecisionSchema } from "./ralph-core.js";
|
|
|
18
17
|
export const promptEngineerModelConfig = {
|
|
19
18
|
model: "anthropic/claude-fable-5:high",
|
|
20
19
|
fallbackModels: [
|
|
20
|
+
"openai-codex/gpt-5.6-sol:xhigh",
|
|
21
|
+
"github-copilot/gpt-5.6-sol:xhigh",
|
|
22
|
+
"openai/gpt-5.6-sol:xhigh",
|
|
21
23
|
"openai-codex/gpt-5.5:xhigh",
|
|
22
24
|
"github-copilot/gpt-5.5:xhigh",
|
|
23
25
|
"openai/gpt-5.5:xhigh",
|
|
24
26
|
"github-copilot/claude-opus-4.8 (1m):high",
|
|
25
27
|
"anthropic/claude-opus-4-8:high",
|
|
28
|
+
"cursor/claude-fable-5:high",
|
|
29
|
+
"cursor/gpt-5.6-sol:xhigh",
|
|
30
|
+
"cursor/gpt-5.5:high",
|
|
31
|
+
"cursor/claude-opus-4-8-thinking:high",
|
|
32
|
+
"cursor/grok-4.5",
|
|
26
33
|
"zai/glm-5.2:xhigh",
|
|
27
34
|
"zai-coding-cn/glm-5.2:xhigh",
|
|
35
|
+
"cursor/glm-5.2",
|
|
28
36
|
"openrouter/anthropic/claude-fable-5:high",
|
|
37
|
+
"openrouter/openai/gpt-5.6-sol:xhigh",
|
|
29
38
|
"openrouter/sakana/fugu-ultra:high",
|
|
30
39
|
"openrouter/openai/gpt-5.5:xhigh",
|
|
31
40
|
"openrouter/anthropic/claude-opus-4-8:high",
|
|
41
|
+
"openrouter/x-ai/grok-4.5",
|
|
32
42
|
"openrouter/z-ai/glm-5.2:xhigh"
|
|
33
43
|
],
|
|
34
44
|
excludedTools: ["ask_user_question"],
|
|
35
45
|
};
|
|
36
46
|
|
|
37
47
|
export const researchModelConfig = {
|
|
38
|
-
model: "openai-codex/gpt-5.
|
|
48
|
+
model: "openai-codex/gpt-5.6-sol:medium",
|
|
39
49
|
fallbackModels: [
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
"github-copilot/gpt-5.6-sol:medium",
|
|
51
|
+
"openai/gpt-5.6-sol:medium",
|
|
52
|
+
"openai-codex/gpt-5.5:medium",
|
|
53
|
+
"github-copilot/gpt-5.5:medium",
|
|
54
|
+
"openai/gpt-5.5:medium",
|
|
55
|
+
"anthropic/claude-fable-5:low",
|
|
56
|
+
"github-copilot/claude-opus-4.8 (1m):medium",
|
|
57
|
+
"anthropic/claude-opus-4-8:medium",
|
|
58
|
+
"cursor/gpt-5.6-sol:medium",
|
|
59
|
+
"cursor/gpt-5.5:medium",
|
|
60
|
+
"cursor/claude-fable-5:low",
|
|
61
|
+
"cursor/claude-opus-4-8-thinking:medium",
|
|
62
|
+
"cursor/grok-4.5",
|
|
63
|
+
"zai/glm-5.2:high",
|
|
64
|
+
"zai-coding-cn/glm-5.2:high",
|
|
65
|
+
"cursor/glm-5.2",
|
|
66
|
+
"openrouter/openai/gpt-5.6-sol:medium",
|
|
67
|
+
"openrouter/openai/gpt-5.5:medium",
|
|
68
|
+
"openrouter/anthropic/claude-fable-5:low",
|
|
69
|
+
"openrouter/anthropic/claude-opus-4-8:medium",
|
|
70
|
+
"openrouter/x-ai/grok-4.5",
|
|
71
|
+
"openrouter/z-ai/glm-5.2:high"
|
|
51
72
|
],
|
|
52
73
|
excludedTools: ["ask_user_question"],
|
|
53
74
|
};
|
|
54
75
|
|
|
55
76
|
export const orchestratorModelConfig = {
|
|
56
|
-
model: "
|
|
77
|
+
model: "openai-codex/gpt-5.6-sol:xhigh",
|
|
57
78
|
fallbackModels: [
|
|
79
|
+
"github-copilot/gpt-5.6-sol:xhigh",
|
|
80
|
+
"openai/gpt-5.6-sol:xhigh",
|
|
81
|
+
"anthropic/claude-fable-5:high",
|
|
58
82
|
"openai-codex/gpt-5.5:xhigh",
|
|
59
83
|
"github-copilot/gpt-5.5:xhigh",
|
|
60
84
|
"openai/gpt-5.5:xhigh",
|
|
61
85
|
"github-copilot/claude-opus-4.8 (1m):high",
|
|
62
86
|
"anthropic/claude-opus-4-8:high",
|
|
87
|
+
"cursor/gpt-5.6-sol:xhigh",
|
|
88
|
+
"cursor/claude-fable-5:high",
|
|
89
|
+
"cursor/gpt-5.5:high",
|
|
90
|
+
"cursor/claude-opus-4-8-thinking:high",
|
|
91
|
+
"cursor/grok-4.5",
|
|
63
92
|
"zai/glm-5.2:xhigh",
|
|
64
93
|
"zai-coding-cn/glm-5.2:xhigh",
|
|
94
|
+
"cursor/glm-5.2",
|
|
95
|
+
"openrouter/openai/gpt-5.6-sol:xhigh",
|
|
65
96
|
"openrouter/anthropic/claude-fable-5:high",
|
|
66
97
|
"openrouter/sakana/fugu-ultra:high",
|
|
67
98
|
"openrouter/openai/gpt-5.5:xhigh",
|
|
68
99
|
"openrouter/anthropic/claude-opus-4-8:high",
|
|
100
|
+
"openrouter/x-ai/grok-4.5",
|
|
69
101
|
"openrouter/z-ai/glm-5.2:xhigh"
|
|
70
102
|
],
|
|
71
103
|
excludedTools: ["ask_user_question"],
|
|
@@ -74,17 +106,28 @@ export const orchestratorModelConfig = {
|
|
|
74
106
|
export const reviewerAModelConfig = {
|
|
75
107
|
model: "anthropic/claude-fable-5:high",
|
|
76
108
|
fallbackModels: [
|
|
109
|
+
"openai-codex/gpt-5.6-sol:max",
|
|
110
|
+
"github-copilot/gpt-5.6-sol:max",
|
|
111
|
+
"openai/gpt-5.6-sol:max",
|
|
77
112
|
"openai-codex/gpt-5.5:xhigh",
|
|
78
113
|
"github-copilot/gpt-5.5:xhigh",
|
|
79
114
|
"openai/gpt-5.5:xhigh",
|
|
80
115
|
"github-copilot/claude-opus-4.8 (1m):high",
|
|
81
116
|
"anthropic/claude-opus-4-8:high",
|
|
117
|
+
"cursor/claude-fable-5:high",
|
|
118
|
+
"cursor/gpt-5.6-sol:max",
|
|
119
|
+
"cursor/gpt-5.5:high",
|
|
120
|
+
"cursor/claude-opus-4-8-thinking:high",
|
|
121
|
+
"cursor/grok-4.5",
|
|
82
122
|
"zai/glm-5.2:xhigh",
|
|
83
123
|
"zai-coding-cn/glm-5.2:xhigh",
|
|
124
|
+
"cursor/glm-5.2",
|
|
84
125
|
"openrouter/anthropic/claude-fable-5:high",
|
|
126
|
+
"openrouter/openai/gpt-5.6-sol:max",
|
|
85
127
|
"openrouter/sakana/fugu-ultra:high",
|
|
86
128
|
"openrouter/openai/gpt-5.5:xhigh",
|
|
87
129
|
"openrouter/anthropic/claude-opus-4-8:high",
|
|
130
|
+
"openrouter/x-ai/grok-4.5",
|
|
88
131
|
"openrouter/z-ai/glm-5.2:xhigh"
|
|
89
132
|
],
|
|
90
133
|
excludedTools: ["ask_user_question"],
|
|
@@ -92,41 +135,33 @@ export const reviewerAModelConfig = {
|
|
|
92
135
|
};
|
|
93
136
|
|
|
94
137
|
export const reviewerBModelConfig = {
|
|
95
|
-
model: "openai-codex/gpt-5.
|
|
138
|
+
model: "openai-codex/gpt-5.6-sol:max",
|
|
96
139
|
fallbackModels: [
|
|
140
|
+
"github-copilot/gpt-5.6-sol:max",
|
|
141
|
+
"openai/gpt-5.6-sol:max",
|
|
142
|
+
"openai-codex/gpt-5.5:xhigh",
|
|
97
143
|
"github-copilot/gpt-5.5:xhigh",
|
|
98
144
|
"openai/gpt-5.5:xhigh",
|
|
99
145
|
"anthropic/claude-fable-5:high",
|
|
100
146
|
"github-copilot/claude-opus-4.8 (1m):high",
|
|
101
147
|
"anthropic/claude-opus-4-8:high",
|
|
148
|
+
"cursor/gpt-5.6-sol:max",
|
|
149
|
+
"cursor/gpt-5.5:high",
|
|
150
|
+
"cursor/claude-fable-5:high",
|
|
151
|
+
"cursor/claude-opus-4-8-thinking:high",
|
|
152
|
+
"cursor/grok-4.5",
|
|
102
153
|
"zai/glm-5.2:xhigh",
|
|
103
154
|
"zai-coding-cn/glm-5.2:xhigh",
|
|
155
|
+
"cursor/glm-5.2",
|
|
156
|
+
"openrouter/openai/gpt-5.6-sol:max",
|
|
104
157
|
"openrouter/openai/gpt-5.5:xhigh",
|
|
105
158
|
"openrouter/anthropic/claude-fable-5:high",
|
|
106
159
|
"openrouter/sakana/fugu-ultra:high",
|
|
107
160
|
"openrouter/anthropic/claude-opus-4-8:high",
|
|
161
|
+
"openrouter/x-ai/grok-4.5",
|
|
108
162
|
"openrouter/z-ai/glm-5.2:xhigh"
|
|
109
163
|
],
|
|
110
164
|
excludedTools: ["ask_user_question"],
|
|
111
165
|
schema: reviewDecisionSchema,
|
|
112
166
|
};
|
|
113
167
|
|
|
114
|
-
export const reviewerCModelConfig = {
|
|
115
|
-
model: "zai/glm-5.2:xhigh",
|
|
116
|
-
fallbackModels: [
|
|
117
|
-
"zai-coding-cn/glm-5.2:xhigh",
|
|
118
|
-
"openai-codex/gpt-5.5:xhigh",
|
|
119
|
-
"github-copilot/gpt-5.5:xhigh",
|
|
120
|
-
"openai/gpt-5.5:xhigh",
|
|
121
|
-
"anthropic/claude-fable-5:high",
|
|
122
|
-
"github-copilot/claude-opus-4.8 (1m):high",
|
|
123
|
-
"anthropic/claude-opus-4-8:high",
|
|
124
|
-
"openrouter/sakana/fugu-ultra:high",
|
|
125
|
-
"openrouter/z-ai/glm-5.2:xhigh",
|
|
126
|
-
"openrouter/openai/gpt-5.5:xhigh",
|
|
127
|
-
"openrouter/anthropic/claude-fable-5:high",
|
|
128
|
-
"openrouter/anthropic/claude-opus-4-8:high"
|
|
129
|
-
],
|
|
130
|
-
excludedTools: ["ask_user_question"],
|
|
131
|
-
schema: reviewDecisionSchema,
|
|
132
|
-
};
|
|
@@ -38,7 +38,6 @@ import {
|
|
|
38
38
|
researchModelConfig,
|
|
39
39
|
reviewerAModelConfig,
|
|
40
40
|
reviewerBModelConfig,
|
|
41
|
-
reviewerCModelConfig,
|
|
42
41
|
} from "./ralph-models.js";
|
|
43
42
|
export async function runRalphWorkflow(
|
|
44
43
|
ctx: WorkflowRunContext<RalphInputs>,
|
|
@@ -252,16 +251,6 @@ export async function runRalphWorkflow(
|
|
|
252
251
|
],
|
|
253
252
|
...reviewerBModelConfig,
|
|
254
253
|
},
|
|
255
|
-
{
|
|
256
|
-
name: "reviewer-c",
|
|
257
|
-
task: reviewPrompt,
|
|
258
|
-
reads: [
|
|
259
|
-
researchPath,
|
|
260
|
-
implementationNotesPath,
|
|
261
|
-
orchestratorReportPath,
|
|
262
|
-
],
|
|
263
|
-
...reviewerCModelConfig,
|
|
264
|
-
},
|
|
265
254
|
],
|
|
266
255
|
{
|
|
267
256
|
task: workflowPrompt,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/workflows",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.6-alpha.1",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension for multi-stage workflow authoring and execution.",
|
|
6
6
|
"contributors": [
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
},
|
|
84
84
|
"peerDependencies": {
|
|
85
85
|
"@bastani/atomic": "*",
|
|
86
|
-
"@earendil-works/pi-tui": "^0.80.
|
|
86
|
+
"@earendil-works/pi-tui": "^0.80.6"
|
|
87
87
|
},
|
|
88
88
|
"peerDependenciesMeta": {
|
|
89
89
|
"@bastani/atomic": {
|
|
@@ -7,6 +7,7 @@ import type { DurableWorkflowBackend } from "./backend.js";
|
|
|
7
7
|
import type { ParallelFailFastScope } from "../runs/foreground/executor-types.js";
|
|
8
8
|
import { durableHash } from "./backend.js";
|
|
9
9
|
import { recordCheckpointDurably } from "./tool-primitive.js";
|
|
10
|
+
import { RESUME_CONTINUATION_PROMPT } from "../shared/resume-continuation.js";
|
|
10
11
|
import type { DurableStageCheckpoint } from "./types.js";
|
|
11
12
|
export type DurableCompletedStageCheckpoint = DurableStageCheckpoint & { readonly output: WorkflowSerializableValue };
|
|
12
13
|
|
|
@@ -66,7 +67,7 @@ export async function recordStageSessionCheckpoint(deps: DurableStageDeps, stage
|
|
|
66
67
|
return true;
|
|
67
68
|
}
|
|
68
69
|
|
|
69
|
-
const MID_SESSION_RESUME_PROMPT =
|
|
70
|
+
const MID_SESSION_RESUME_PROMPT = RESUME_CONTINUATION_PROMPT;
|
|
70
71
|
|
|
71
72
|
function withMidSessionResumePrompt<T extends StageContext>(stage: T, enabled: boolean): T {
|
|
72
73
|
if (!enabled) return stage;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { WorkflowChainOptions, WorkflowParallelOptions, WorkflowTaskOptions, WorkflowTaskResult, WorkflowTaskStep } from "../../shared/types.js";
|
|
2
2
|
import type { ParallelFailFastScope } from "../../runs/foreground/executor-types.js";
|
|
3
3
|
import type { EngineRuntime } from "../runtime.js";
|
|
4
|
+
import { RESUME_CONTINUATION_PROMPT } from "../../shared/resume-continuation.js";
|
|
4
5
|
import {
|
|
5
6
|
applyTaskContext,
|
|
6
7
|
structuredTaskOutputText,
|
|
@@ -51,7 +52,7 @@ function createTaskPrimitive(runtime: EngineRuntime): WorkflowTaskPrimitive {
|
|
|
51
52
|
});
|
|
52
53
|
const stage = stageHandle.context;
|
|
53
54
|
const promptText = resolvedTaskOptions.resumeFromSessionFile !== undefined
|
|
54
|
-
?
|
|
55
|
+
? RESUME_CONTINUATION_PROMPT
|
|
55
56
|
: applyTaskContext(`${taskReadInstruction(resolvedTaskOptions)}${taskPrompt(resolvedTaskOptions)}`, taskPrevious(resolvedTaskOptions));
|
|
56
57
|
const rawOutput = await stage.prompt(promptText, taskPromptOptions(resolvedTaskOptions));
|
|
57
58
|
const structured = typeof rawOutput === "string" ? undefined : rawOutput;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export const WORKFLOW_TOOL_DESCRIPTION =
|
|
2
|
-
"Run named workflows or direct one-off task/tasks/chain workflows; " +
|
|
2
|
+
"Run named builtin, project, user, or package workflows, or direct one-off task/tasks/chain workflows; custom definitions may import reusable project/package workflows or builtin definitions from @bastani/workflows/builtin and nest them with ctx.workflow(...), including deeper composition within the configured maxDepth; " +
|
|
3
|
+
"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; " +
|
|
3
4
|
"discover with list/get/inputs, inspect status/stages/stage details, " +
|
|
4
5
|
"send prompt answers or steering, pause/resume/interrupt/kill runs, and reload workflow resources. " +
|
|
5
6
|
"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. " +
|
|
@@ -8,26 +9,26 @@ export const WORKFLOW_TOOL_DESCRIPTION =
|
|
|
8
9
|
"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.";
|
|
9
10
|
|
|
10
11
|
export const DEFAULT_PROMPT_GUIDANCE: string[] = [
|
|
11
|
-
`**Workflows**: Treat workflows as the default execution path for any non-trivial task and for any request that has inherent structure plus an objective you can make verifiable. Use the \`workflow\` tool for existing named workflows and
|
|
12
|
-
- Decide the execution mode before your first tool call on a new request and state it in one short line: inline (tiny, deterministic, low-risk) or
|
|
13
|
-
- Workflow fit check:
|
|
14
|
-
- Treat loop
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
12
|
+
`**Workflows**: Treat workflows as the default execution path for any non-trivial task and for any request that has inherent structure plus an objective you can make verifiable. Use the \`workflow\` tool for existing named workflows and one-off tracked \`task\`, \`tasks\`, or \`chain\` shapes; when the task needs richer control flow, author a custom TypeScript \`workflow({...})\` inline with normal coding tools, reload workflow resources, and run it.
|
|
13
|
+
- Decide the execution mode before your first tool call on a new request and state it in one short line: inline (tiny, deterministic, low-risk) or workflow. Reconnaissance counts as inline execution, so an unstated "explore first" default must not silently commit you to an unbounded inline session.
|
|
14
|
+
- Workflow fit check: prefer a workflow for implementation, build, debug/diagnosis, bug-fix, migration, new-feature, scoped multi-file, or docs/code changes with validation; and whenever there are multiple steps, dependencies, handoffs, uncertainty, review/validation needs, long-running work, measurable done criteria, or an outcome that needs evidence.
|
|
15
|
+
- Treat loop or stop-condition wording as a strong workflow signal, especially "do X until Y", "repeat until", "iterate until", "review/fix until passing", "run checks and fix until green", "keep going until done", or any prompt that names an approval gate or evidence requirement.
|
|
16
|
+
- Do not force-fit an installed workflow, direct one-off shape, or builtin such as \`goal\` or \`ralph\`. When another graph better matches the task, write a task-specific TypeScript workflow inline. Use and combine the documented starter patterns: Classify-and-act for runtime routing, Fan-out-and-synthesize for independent slices, Adversarial verification for worker/reviewer/reducer repair, Generate-and-filter or Tournament for competing candidates, and Loop until done for bounded convergence. Rich custom workflows may use deterministic branching, dynamic fan-out, child workflows, artifacts, structured outputs, human-in-the-loop prompts, gates, retries, and explicit stop conditions.
|
|
17
|
+
- Compose workflows instead of rebuilding every capability in one graph. Workflow definitions are normal TypeScript modules: import reusable project/package definitions or builtins from \`@bastani/workflows/builtin\`, then call \`ctx.workflow(childDefinition, { inputs, stageName })\`. Imported children may nest more workflows up to \`maxDepth\`; their stages, HIL prompts, control, durability, and declared outputs remain part of the expanded parent graph. Pass definitions, not registry-name strings or paths.
|
|
18
|
+
- Composition examples: import \`deepResearchCodebase\`, then conditionally nest \`goal\` or \`ralph\` for implementation; wrap \`openClaudeDesign\` with project-specific approval/export stages; or build a reusable user-defined research child and import it into several parent workflows. Prefer composing a proven builtin or shared child over copying its prompt/graph.
|
|
19
|
+
- Example custom shapes: classify a request and dispatch category-specific stages; fan out per package and synthesize artifact-backed results; implement, run fresh-context verifiers, reduce findings, and loop through repairs until approved; generate several plans and filter or tournament-rank them; or rerun checks and fixes until green with a progress ledger and max-iteration escape hatch.
|
|
20
|
+
- Budget reconnaissance: once workflow fit is clear, keep pre-workflow exploration to a few quick reads that sharpen the objective and validation criteria. Put deep research, upstream/design comparison, and behavior probing inside the workflow. Pass large context through files/artifacts and \`reads\` rather than injecting it into prompts.
|
|
21
|
+
- Course-correct instead of drifting: after roughly ten exploratory tool calls with no artifact, edit, or commit, or repeated "let me verify one more thing" loops, stop, write findings to a context file, and hand the task to the best-fit named or custom workflow. Sunk inline research transfers through files; it is not a reason to stay inline.
|
|
22
|
+
- Only skip workflows for tiny, deterministic, low-risk answers or direct edits where stage tracking clearly costs more than it adds, typically a single-file/no-test/no-review change or a simple answer.`,
|
|
23
|
+
`**Workflow discovery and lifecycle**:
|
|
18
24
|
- For unfamiliar named workflows, discover with \`action: "list"\`, inspect with \`action: "get"\` or \`action: "inputs"\`, and run with \`action: "run"\`, \`workflow\`, and validated \`inputs\`; do not invent workflow names or input keys.
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
|
|
28
|
-
- When designing reviewer-gated workflows, distinguish implementation/review acceptance from post-approval final actions such as PR/MR/review creation, release tagging, deployment, or publication. Prompt reviewers/reducers to approve and stop the implementation loop when implementation and validation criteria are proven and only an explicitly authorized final action remains; carry that remainder as a next action or final-action field instead of another implementation turn.
|
|
29
|
-
- When authoring workflow, stage, reviewer, or reducer prompts, remember that a model stage sees its local prompt, artifacts, tools, and reads — not the workflow graph's name or surrounding implementation details unless you explicitly provide them. Describe the concrete action, available evidence, and success criteria directly (for example "review the current code delta" or "create/update the review request") instead of asking the model to reason from labels like "the create-PR workflow stage", "this Goal run", or "the Ralph reviewer". Use workflow or stage names only when the name itself is user-visible context or materially affects behavior.
|
|
30
|
-
- Prefer the \`goal\` workflow for small-to-medium non-trivial one-off fixes, debugging, docs/code changes, scoped multi-file edits, or test/fix loops when you can name the work surface, outcome, and validation; prefer the \`ralph\` workflow for larger/riskier work, migrations, new features, broad refactors, multi-package changes, or tasks estimated over ~2K LoC.
|
|
31
|
-
- Adjust \`goal.max_turns\` for Goal runs and \`ralph.max_loops\` for Ralph runs based on task complexity (estimated LoC, risk, validation effort, and number of unique files/areas touched).
|
|
32
|
-
- Define an objective that includes tight scope, concrete and verifiable done criteria, and validation steps; then monitor progress as above instead of doing parallel implementation yourself.`,
|
|
25
|
+
- Once you run a workflow, end the current turn and wait for user input or a lifecycle notice. Do not use sleep/status polling loops: key start, finish, and failure events arrive automatically. Use targeted \`status\`/\`stages\`/\`stage\` checks only when the user asks or the next step needs them, and use \`send\`/\`pause\`/\`resume\`/\`interrupt\`/\`kill\` only to answer, steer, or honor control requests.
|
|
26
|
+
- For transcripts, avoid whole-file reads. Get \`sessionFile\`/\`transcriptPath\` from \`stages\` or \`stage\`, preserve the exact path and platform separators, search with \`rg\`/\`grep\`, and read small relevant ranges; use explicit \`tail\` or \`limit\` only for a bounded preview.`,
|
|
27
|
+
`**Workflow authoring and handoffs**:
|
|
28
|
+
- When a user asks to create or edit a workflow, clarify only unresolved requirements that materially affect its purpose, inputs, stages, handoffs, validation, success criteria, or starter pattern. Read the workflow docs/examples, implement the TypeScript definition with normal coding tools, reload it, and run representative test inputs before presenting it. Use the create-spec skill when it adds value; it is not mandatory when context is already sufficient.
|
|
29
|
+
- Consult docs/workflows.md and its starter patterns (Classify-and-act, Fan-out-and-synthesize, Adversarial verification, Generate-and-filter, Tournament, and Loop until done) when designing a stage graph.
|
|
30
|
+
- Treat workflow composition as a first-class authoring option. Before duplicating stages, inspect reusable workflow modules and builtin exports; import their definitions and invoke them with \`ctx.workflow(...)\`, mapping typed inputs and consuming only declared outputs. Nested workflows can themselves import children, so combine small reusable graphs into a richer parent while respecting \`maxDepth\`.
|
|
31
|
+
- Pass large stage context through files/artifacts and \`reads\` with an explicit \`Read the file at <path>...\` prompt rather than large \`previous\` payloads or injected session history.
|
|
32
|
+
- Separate implementation/review acceptance from explicitly authorized final actions such as PR/MR/review creation, release tagging, deployment, or publication. Stop implementation loops once acceptance is proven and carry a remaining final action separately.
|
|
33
|
+
- A model stage sees its local prompt, artifacts, tools, and reads, not the graph name or surrounding implementation. State the concrete action, evidence, and success criteria directly.`,
|
|
33
34
|
];
|
|
@@ -49,7 +49,7 @@ const StageSessionOptionProperties = {
|
|
|
49
49
|
agentDir: Type.Optional(Type.String()),
|
|
50
50
|
authStorage: Type.Optional(SdkSessionOptionSchema("authStorage")),
|
|
51
51
|
modelRegistry: Type.Optional(SdkSessionOptionSchema("modelRegistry")),
|
|
52
|
-
model: Type.Optional(Type.Unsafe<WorkflowModelValue>({ description: "Primary model id or SDK model object. String ids may include a reasoning suffix, e.g. openai/gpt-5:high; valid levels: off|minimal|low|medium|high|xhigh. A parenthesized context-window token may precede or follow the suffix, e.g. github-copilot/claude-opus-4.8 (1m):xhigh or github-copilot/claude-opus-4.8:xhigh (1m). Use (long) for a generic long-context marker, or a rounded size matching the model's long tier (e.g. (1m) or (1.1m)); both select the model's advertised long tier." })),
|
|
52
|
+
model: Type.Optional(Type.Unsafe<WorkflowModelValue>({ description: "Primary model id or SDK model object. String ids may include a reasoning suffix, e.g. openai/gpt-5:high; valid levels: off|minimal|low|medium|high|xhigh|max. A parenthesized context-window token may precede or follow the suffix, e.g. github-copilot/claude-opus-4.8 (1m):xhigh or github-copilot/claude-opus-4.8:xhigh (1m). Use (long) for a generic long-context marker, or a rounded size matching the model's long tier (e.g. (1m) or (1.1m)); both select the model's advertised long tier." })),
|
|
53
53
|
contextWindow: Type.Optional(Type.Number({ description: "Context-window token budget for the stage session (e.g. 1000000). Non-strict by default: an unsupported value keeps the model's default window. Prefer the per-model `(1m)` token in a model/fallbackModels entry when only specific models should use a larger window." })),
|
|
54
54
|
contextWindowStrict: Type.Optional(Type.Boolean({ description: "Treat an unsupported contextWindow as an error instead of falling back to the model's default window." })),
|
|
55
55
|
thinkingLevel: Type.Optional(SdkSessionOptionSchema("thinkingLevel")),
|
|
@@ -71,8 +71,21 @@ const StageSessionOptionProperties = {
|
|
|
71
71
|
forkFromSessionFile: Type.Optional(Type.String()),
|
|
72
72
|
};
|
|
73
73
|
|
|
74
|
+
// Keep this union opaque to Value.Convert: branch ordering otherwise coerces
|
|
75
|
+
// boolean false to "false", or the legitimate string path "false" to false.
|
|
76
|
+
const WorkflowOutputSchema = Type.Unsafe<string | false>({
|
|
77
|
+
not: {
|
|
78
|
+
not: {
|
|
79
|
+
anyOf: [
|
|
80
|
+
{ type: "string" },
|
|
81
|
+
{ const: false },
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
|
|
74
87
|
const WorkflowTaskOptionProperties = {
|
|
75
|
-
output: Type.Optional(
|
|
88
|
+
output: Type.Optional(WorkflowOutputSchema),
|
|
76
89
|
outputMode: Type.Optional(Type.Union([Type.Literal("inline"), Type.Literal("file-only")])),
|
|
77
90
|
reads: Type.Optional(Type.Union([Type.Array(Type.String()), Type.Literal(false)])),
|
|
78
91
|
worktree: Type.Optional(Type.Boolean()),
|
|
@@ -310,8 +310,7 @@ export function toolResultHasChatAnswer(result: unknown): boolean {
|
|
|
310
310
|
);
|
|
311
311
|
}
|
|
312
312
|
|
|
313
|
-
export
|
|
314
|
-
"Continue where you left off. If you believe you are finished with your original task (or a redefined task if the user told you), stop.";
|
|
313
|
+
export { RESUME_CONTINUATION_PROMPT } from "../../shared/resume-continuation.js";
|
|
315
314
|
|
|
316
315
|
export function shouldInjectResumeContinuation(state: {
|
|
317
316
|
readonly resumeOccurred: boolean;
|