@bastani/atomic 0.9.12 → 0.9.13-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +150 -0
- package/README.md +35 -17
- package/dist/builtin/i-have-adhd/CHANGELOG.md +17 -0
- package/dist/builtin/i-have-adhd/LICENSE +21 -0
- package/dist/builtin/i-have-adhd/README.md +18 -0
- package/dist/builtin/i-have-adhd/index.ts +238 -0
- package/dist/builtin/i-have-adhd/package.json +56 -0
- package/dist/builtin/i-have-adhd/skills/i-have-adhd/SKILL.md +140 -0
- package/dist/builtin/intercom/CHANGELOG.md +25 -0
- package/dist/builtin/intercom/README.md +30 -16
- package/dist/builtin/intercom/broker/bounded-stderr-install.ts +18 -0
- package/dist/builtin/intercom/broker/bounded-stderr.ts +132 -0
- package/dist/builtin/intercom/broker/broker.ts +12 -23
- package/dist/builtin/intercom/broker/client.ts +81 -5
- package/dist/builtin/intercom/broker/paths.ts +9 -0
- package/dist/builtin/intercom/broker/presence-handler.ts +103 -0
- package/dist/builtin/intercom/broker/spawn.ts +128 -29
- package/dist/builtin/intercom/contact-supervisor-tool.ts +13 -3
- package/dist/builtin/intercom/foreground-detach-handoff.ts +30 -14
- package/dist/builtin/intercom/group.ts +64 -25
- package/dist/builtin/intercom/index-heavy.ts +51 -8
- package/dist/builtin/intercom/index.ts +50 -22
- package/dist/builtin/intercom/intercom-tool.ts +82 -5
- package/dist/builtin/intercom/intercom-utils.ts +15 -29
- package/dist/builtin/intercom/lazy-subagent-ack.ts +11 -6
- package/dist/builtin/intercom/package.json +2 -3
- package/dist/builtin/intercom/runtime-group.ts +13 -0
- package/dist/builtin/intercom/skills/intercom/SKILL.md +30 -2
- package/dist/builtin/intercom/source-ownership.ts +9 -12
- package/dist/builtin/intercom/subagent-relay.ts +32 -16
- package/dist/builtin/intercom/terminal-ordering-barrier.ts +21 -4
- package/dist/builtin/intercom/types.ts +3 -1
- package/dist/builtin/intercom/ui/compose.ts +8 -6
- package/dist/builtin/intercom/ui/session-list.ts +7 -5
- package/dist/builtin/mcp/CHANGELOG.md +19 -0
- package/dist/builtin/mcp/README.md +3 -1
- package/dist/builtin/mcp/glimpse-ui.ts +2 -1
- package/dist/builtin/mcp/index.ts +10 -26
- package/dist/builtin/mcp/mcp-panel.ts +35 -34
- package/dist/builtin/mcp/mcp-setup-panel.ts +35 -33
- package/dist/builtin/mcp/npx-resolver.ts +3 -2
- package/dist/builtin/mcp/package.json +3 -3
- package/dist/builtin/mcp/sampling-handler.ts +5 -1
- package/dist/builtin/mcp/server-manager.ts +4 -7
- package/dist/builtin/mcp/startup-warmup.ts +20 -8
- package/dist/builtin/subagents/CHANGELOG.md +63 -0
- package/dist/builtin/subagents/README.md +144 -351
- package/dist/builtin/subagents/agents/worker.md +1 -1
- package/dist/builtin/subagents/package.json +5 -5
- package/dist/builtin/subagents/prompts/parallel-context-build.md +2 -2
- package/dist/builtin/subagents/prompts/parallel-handoff-plan.md +4 -4
- package/dist/builtin/subagents/prompts/review-loop.md +1 -1
- package/dist/builtin/subagents/skills/subagent/SKILL.md +39 -102
- package/dist/builtin/subagents/src/agents/agent-discovery.ts +1 -29
- package/dist/builtin/subagents/src/agents/agent-loaders.ts +1 -40
- package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +6 -135
- package/dist/builtin/subagents/src/agents/agent-management.ts +52 -282
- package/dist/builtin/subagents/src/agents/agent-paths.ts +0 -22
- package/dist/builtin/subagents/src/agents/agent-types.ts +0 -40
- package/dist/builtin/subagents/src/agents/agents.ts +0 -3
- package/dist/builtin/subagents/src/agents/identity.ts +2 -4
- package/dist/builtin/subagents/src/agents/skills-paths.ts +8 -1
- package/dist/builtin/subagents/src/extension/doctor.ts +4 -24
- package/dist/builtin/subagents/src/extension/fanout-child.ts +76 -56
- package/dist/builtin/subagents/src/extension/index.ts +32 -39
- package/dist/builtin/subagents/src/extension/prompt-guidance.ts +2 -2
- package/dist/builtin/subagents/src/extension/schemas.ts +1 -157
- package/dist/builtin/subagents/src/extension/startup-maintenance.ts +25 -46
- package/dist/builtin/subagents/src/extension/tool-description.ts +4 -13
- package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +6 -2
- package/dist/builtin/subagents/src/intercom/result-intercom.ts +27 -29
- package/dist/builtin/subagents/src/intercom/supervisor-authorization.ts +9 -2
- package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +248 -435
- package/dist/builtin/subagents/src/runs/background/completion-notification.ts +8 -3
- package/dist/builtin/subagents/src/runs/background/notify.ts +83 -26
- package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +1 -281
- package/dist/builtin/subagents/src/runs/foreground/execution-updates.ts +0 -5
- package/dist/builtin/subagents/src/runs/foreground/execution.ts +1 -4
- package/dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts +559 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +103 -259
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +29 -31
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +10 -173
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +7 -5
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +13 -6
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +1 -646
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +2 -7
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +14 -7
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +39 -20
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +16 -11
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-worktree.ts +1 -14
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +194 -104
- package/dist/builtin/subagents/src/runs/inprocess/background-single.ts +195 -0
- package/dist/builtin/subagents/src/runs/inprocess/background.ts +90 -0
- package/dist/builtin/subagents/src/runs/inprocess/child-policy.ts +27 -0
- package/dist/builtin/subagents/src/runs/inprocess/control-registry.ts +55 -0
- package/dist/builtin/subagents/src/runs/inprocess/control-status.ts +106 -0
- package/dist/builtin/subagents/src/runs/inprocess/index.ts +50 -0
- package/dist/builtin/subagents/src/runs/inprocess/nested-routing.ts +218 -0
- package/dist/builtin/subagents/src/runs/{shared/subagent-prompt-runtime.ts → inprocess/prompt-behavior.ts} +37 -75
- package/dist/builtin/subagents/src/runs/inprocess/runner.ts +1392 -0
- package/dist/builtin/subagents/src/runs/{shared/nested-events.ts → inprocess/runtime-support/nested-api.ts} +13 -7
- package/dist/builtin/subagents/src/runs/{shared/nested-events-control.ts → inprocess/runtime-support/nested-control.ts} +18 -17
- package/dist/builtin/subagents/src/runs/{shared/nested-events-core.ts → inprocess/runtime-support/nested-core.ts} +14 -61
- package/dist/builtin/subagents/src/runs/{shared/nested-events-projection.ts → inprocess/runtime-support/nested-projection.ts} +4 -12
- package/dist/builtin/subagents/src/runs/{shared/nested-events-registry.ts → inprocess/runtime-support/nested-registry.ts} +19 -4
- package/dist/builtin/subagents/src/runs/{shared/nested-render.ts → inprocess/runtime-support/nested-rendering.ts} +3 -3
- package/dist/builtin/subagents/src/runs/{shared/nested-events-sanitize.ts → inprocess/runtime-support/nested-sanitize.ts} +4 -6
- package/dist/builtin/subagents/src/runs/inprocess.ts +1 -0
- package/dist/builtin/subagents/src/runs/shared/intercom-group.ts +23 -7
- package/dist/builtin/subagents/src/runs/shared/model-candidate-filter.ts +0 -1
- package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +15 -492
- package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +13 -97
- package/dist/builtin/subagents/src/runs/shared/run-history.ts +3 -5
- package/dist/builtin/subagents/src/runs/shared/single-output.ts +4 -4
- package/dist/builtin/subagents/src/runs/shared/worktree.ts +7 -2
- package/dist/builtin/subagents/src/shared/formatters.ts +2 -56
- package/dist/builtin/subagents/src/shared/settings.ts +14 -350
- package/dist/builtin/subagents/src/shared/types-async.ts +8 -32
- package/dist/builtin/subagents/src/shared/types-config.ts +29 -13
- package/dist/builtin/subagents/src/shared/types-depth.ts +30 -56
- package/dist/builtin/subagents/src/shared/types-results.ts +18 -60
- package/dist/builtin/subagents/src/shared/types-runtime.ts +0 -1
- package/dist/builtin/subagents/src/shared/utils.ts +5 -0
- package/dist/builtin/subagents/src/slash/bridge-settlement.ts +87 -0
- package/dist/builtin/subagents/src/slash/prompt-template-bridge.ts +49 -10
- package/dist/builtin/subagents/src/slash/slash-bridge.ts +27 -7
- package/dist/builtin/subagents/src/slash/slash-commands.ts +37 -82
- package/dist/builtin/subagents/src/slash/slash-live-state.ts +3 -94
- package/dist/builtin/subagents/src/tui/render-event-formatting.ts +3 -35
- package/dist/builtin/subagents/src/tui/render-progress.ts +89 -0
- package/dist/builtin/subagents/src/tui/render-result-compact.ts +77 -68
- package/dist/builtin/subagents/src/tui/render-result.ts +79 -99
- package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -6
- package/dist/builtin/subagents/src/tui/render-status-progress.ts +8 -5
- package/dist/builtin/subagents/src/tui/render-widget-graph.ts +6 -63
- package/dist/builtin/subagents/src/tui/render-widget.ts +0 -24
- package/dist/builtin/web-access/CHANGELOG.md +14 -0
- package/dist/builtin/web-access/chrome-cookies.ts +3 -2
- package/dist/builtin/web-access/github-api.ts +7 -6
- package/dist/builtin/web-access/github-extract.ts +2 -1
- package/dist/builtin/web-access/package.json +3 -3
- package/dist/builtin/web-access/subprocess.ts +3 -1
- package/dist/builtin/web-access/summary-review.ts +2 -2
- package/dist/builtin/web-access/web-search-features.ts +38 -22
- package/dist/builtin/web-access/web-search-summary.ts +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +70 -0
- package/dist/builtin/workflows/README.md +54 -4
- package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +3 -0
- package/dist/builtin/workflows/builtin/ralph-models.ts +25 -20
- package/dist/builtin/workflows/builtin/shared-prompts.ts +5 -2
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/src/durable/backend.ts +25 -1
- package/dist/builtin/workflows/src/durable/completed-catalog-stage-groups.ts +60 -3
- package/dist/builtin/workflows/src/durable/completed-catalog.ts +67 -1
- package/dist/builtin/workflows/src/durable/completed-subtree.ts +22 -7
- package/dist/builtin/workflows/src/durable/dbos-metadata.ts +15 -1
- package/dist/builtin/workflows/src/durable/local-command.ts +2 -1
- package/dist/builtin/workflows/src/durable/resume-runtime.ts +1 -0
- package/dist/builtin/workflows/src/durable/tool-primitive.ts +4 -28
- package/dist/builtin/workflows/src/durable/types.ts +22 -1
- package/dist/builtin/workflows/src/durable/workflow-child-result.ts +3 -1
- package/dist/builtin/workflows/src/engine/primitives/workflow.ts +1 -1
- package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +10 -2
- package/dist/builtin/workflows/src/engine/run-durable-topology.ts +9 -2
- package/dist/builtin/workflows/src/engine/run.ts +17 -1
- package/dist/builtin/workflows/src/extension/atomic-stage-session.ts +18 -39
- package/dist/builtin/workflows/src/extension/companions.ts +1 -1
- package/dist/builtin/workflows/src/extension/config-file-loader.ts +10 -1
- package/dist/builtin/workflows/src/extension/config-loader.ts +1 -1
- package/dist/builtin/workflows/src/extension/dispatcher.ts +4 -0
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +2095 -1181
- package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +332 -39
- package/dist/builtin/workflows/src/extension/mcp.ts +13 -2
- package/dist/builtin/workflows/src/extension/render-result.ts +5 -0
- package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +6 -3
- package/dist/builtin/workflows/src/extension/runtime.ts +7 -1
- package/dist/builtin/workflows/src/extension/ui-surface.ts +7 -20
- package/dist/builtin/workflows/src/extension/wiring.ts +86 -17
- package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +12 -3
- package/dist/builtin/workflows/src/extension/workflow-durable-resume-command.ts +5 -2
- package/dist/builtin/workflows/src/extension/workflow-ports.ts +14 -6
- package/dist/builtin/workflows/src/extension/workflow-prompts.ts +11 -6
- package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +17 -7
- package/dist/builtin/workflows/src/extension/workflow-status-summary.ts +11 -0
- package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +18 -1
- package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +12 -8
- package/dist/builtin/workflows/src/extension/workflow-tool.ts +9 -4
- package/dist/builtin/workflows/src/intercom/intercom-routing.ts +12 -6
- package/dist/builtin/workflows/src/intercom/result-intercom.ts +35 -4
- package/dist/builtin/workflows/src/runs/background/quit.ts +28 -4
- package/dist/builtin/workflows/src/runs/background/resume-acknowledgements.ts +2 -1
- package/dist/builtin/workflows/src/runs/background/status.ts +70 -8
- package/dist/builtin/workflows/src/runs/foreground/executor-abort.ts +11 -3
- package/dist/builtin/workflows/src/runs/foreground/executor-child-boundary.ts +2 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +4 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-exit-manager.ts +26 -2
- package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +3 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-run-finalizers.ts +3 -2
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +688 -38
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +3 -1
- package/dist/builtin/workflows/src/runs/shared/model-fallback-failures.ts +19 -514
- package/dist/builtin/workflows/src/runs/shared/retry.ts +44 -0
- package/dist/builtin/workflows/src/runs/shared/worktree-git-runner.ts +5 -2
- package/dist/builtin/workflows/src/runs/shared/worktree-setup.ts +2 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +10 -3
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +11 -3
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +5 -1
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +5 -0
- package/dist/builtin/workflows/src/shared/graph-store-snapshot.ts +34 -2
- package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +28 -6
- package/dist/builtin/workflows/src/shared/persistence-restore.ts +3 -0
- package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +4 -0
- package/dist/builtin/workflows/src/shared/run-indicator-status.ts +75 -0
- package/dist/builtin/workflows/src/shared/stage-ui-broker.ts +10 -4
- package/dist/builtin/workflows/src/shared/store-public-types.ts +47 -9
- package/dist/builtin/workflows/src/shared/store-run-methods.ts +42 -8
- package/dist/builtin/workflows/src/shared/store-stage-methods.ts +31 -8
- package/dist/builtin/workflows/src/shared/store-types.ts +35 -1
- package/dist/builtin/workflows/src/shared/timing.ts +10 -0
- package/dist/builtin/workflows/src/shared/workflow-artifact-env.ts +21 -0
- package/dist/builtin/workflows/src/shared/workflow-artifacts.ts +2 -5
- package/dist/builtin/workflows/src/tui/chat-surface-message.ts +22 -2
- package/dist/builtin/workflows/src/tui/dispatch-confirm.ts +37 -2
- package/dist/builtin/workflows/src/tui/graph-view-constants.ts +0 -15
- package/dist/builtin/workflows/src/tui/graph-view-graph-render.ts +38 -47
- package/dist/builtin/workflows/src/tui/graph-view-input.ts +48 -45
- package/dist/builtin/workflows/src/tui/graph-view-layout.ts +266 -0
- package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +1 -86
- package/dist/builtin/workflows/src/tui/graph-view-render.ts +209 -91
- package/dist/builtin/workflows/src/tui/graph-view-state.ts +5 -7
- package/dist/builtin/workflows/src/tui/graph-view-types.ts +13 -7
- package/dist/builtin/workflows/src/tui/inline-form-editor.ts +8 -6
- package/dist/builtin/workflows/src/tui/inline-form-overlay.ts +2 -1
- package/dist/builtin/workflows/src/tui/inputs-overlay.ts +7 -4
- package/dist/builtin/workflows/src/tui/inputs-picker-input.ts +66 -0
- package/dist/builtin/workflows/src/tui/keybindings-adapter.ts +1 -0
- package/dist/builtin/workflows/src/tui/node-card.ts +1 -1
- package/dist/builtin/workflows/src/tui/overlay-adapter.ts +18 -46
- package/dist/builtin/workflows/src/tui/overlay-terminal-modes.ts +15 -26
- package/dist/builtin/workflows/src/tui/session-list.ts +1 -1
- package/dist/builtin/workflows/src/tui/session-overlays.ts +19 -12
- package/dist/builtin/workflows/src/tui/session-picker.ts +47 -4
- package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +5 -14
- package/dist/builtin/workflows/src/tui/stage-chat-view-input.ts +8 -7
- package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +12 -3
- package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +1 -11
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +0 -8
- package/dist/builtin/workflows/src/tui/status-list.ts +32 -47
- package/dist/builtin/workflows/src/tui/store-widget-installer.ts +9 -5
- package/dist/builtin/workflows/src/tui/widget.ts +16 -46
- package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +0 -15
- package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +2 -26
- package/dist/builtin/workflows/src/tui/workflow-status.ts +3 -3
- package/dist/bun/split-loader.js +2 -0
- package/dist/bun/split-loader.js.map +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +6 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth-check.d.ts +35 -0
- package/dist/cli/auth-check.d.ts.map +1 -0
- package/dist/cli/auth-check.js +100 -0
- package/dist/cli/auth-check.js.map +1 -0
- package/dist/cli/auth-command.d.ts +27 -0
- package/dist/cli/auth-command.d.ts.map +1 -0
- package/dist/cli/auth-command.js +150 -0
- package/dist/cli/auth-command.js.map +1 -0
- package/dist/cli/config-selector.js +2 -2
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/credential-print.d.ts +18 -23
- package/dist/cli/credential-print.d.ts.map +1 -1
- package/dist/cli/credential-print.js +42 -88
- package/dist/cli/credential-print.js.map +1 -1
- package/dist/cli/experimental/auth.d.ts +16 -0
- package/dist/cli/experimental/auth.d.ts.map +1 -0
- package/dist/cli/experimental/auth.js +13 -0
- package/dist/cli/experimental/auth.js.map +1 -0
- package/dist/cli/experimental/cli.d.ts +6 -0
- package/dist/cli/experimental/cli.d.ts.map +1 -0
- package/dist/cli/experimental/cli.js +5 -0
- package/dist/cli/experimental/cli.js.map +1 -0
- package/dist/cli/experimental/command-options.d.ts +17 -0
- package/dist/cli/experimental/command-options.d.ts.map +1 -0
- package/dist/cli/experimental/command-options.js +35 -0
- package/dist/cli/experimental/command-options.js.map +1 -0
- package/dist/cli/experimental/command.d.ts +63 -0
- package/dist/cli/experimental/command.d.ts.map +1 -0
- package/dist/cli/experimental/command.js +127 -0
- package/dist/cli/experimental/command.js.map +1 -0
- package/dist/cli/experimental/commands/client.d.ts +13 -0
- package/dist/cli/experimental/commands/client.d.ts.map +1 -0
- package/dist/cli/experimental/commands/client.js +25 -0
- package/dist/cli/experimental/commands/client.js.map +1 -0
- package/dist/cli/experimental/commands/pi.d.ts +15 -0
- package/dist/cli/experimental/commands/pi.d.ts.map +1 -0
- package/dist/cli/experimental/commands/pi.js +28 -0
- package/dist/cli/experimental/commands/pi.js.map +1 -0
- package/dist/cli/experimental/commands/server.d.ts +13 -0
- package/dist/cli/experimental/commands/server.d.ts.map +1 -0
- package/dist/cli/experimental/commands/server.js +25 -0
- package/dist/cli/experimental/commands/server.js.map +1 -0
- package/dist/cli/experimental/transport-address.d.ts +10 -0
- package/dist/cli/experimental/transport-address.d.ts.map +1 -0
- package/dist/cli/experimental/transport-address.js +38 -0
- package/dist/cli/experimental/transport-address.js.map +1 -0
- package/dist/cli/session-picker.js +2 -2
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +4 -10
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/client/index.d.ts +3 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +3 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/remote-session.d.ts +64 -0
- package/dist/client/remote-session.d.ts.map +1 -0
- package/dist/client/remote-session.js +351 -0
- package/dist/client/remote-session.js.map +1 -0
- package/dist/client/transcript.d.ts +12 -0
- package/dist/client/transcript.d.ts.map +1 -0
- package/dist/client/transcript.js +98 -0
- package/dist/client/transcript.js.map +1 -0
- package/dist/core/agent-session-auto-compaction.d.ts +17 -13
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +192 -67
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-bash.d.ts.map +1 -1
- package/dist/core/agent-session-bash.js +2 -0
- package/dist/core/agent-session-bash.js.map +1 -1
- package/dist/core/agent-session-compaction.d.ts +3 -6
- package/dist/core/agent-session-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-compaction.js +64 -28
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-events.d.ts +1 -11
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +64 -37
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +4 -2
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +19 -2
- 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 +1 -0
- package/dist/core/agent-session-models.d.ts.map +1 -1
- package/dist/core/agent-session-models.js +23 -5
- package/dist/core/agent-session-models.js.map +1 -1
- package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-post-tool-compaction.js +22 -6
- package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +4 -0
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-retry.d.ts +21 -4
- package/dist/core/agent-session-retry.d.ts.map +1 -1
- package/dist/core/agent-session-retry.js +232 -106
- package/dist/core/agent-session-retry.js.map +1 -1
- package/dist/core/agent-session-runtime-auth.d.ts.map +1 -1
- package/dist/core/agent-session-runtime-auth.js +3 -0
- package/dist/core/agent-session-runtime-auth.js.map +1 -1
- package/dist/core/agent-session-state.d.ts.map +1 -1
- package/dist/core/agent-session-state.js +2 -1
- package/dist/core/agent-session-state.js.map +1 -1
- package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
- package/dist/core/agent-session-tool-hooks.js +37 -14
- package/dist/core/agent-session-tool-hooks.js.map +1 -1
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +5 -1
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +5 -1
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +18 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +37 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/atomic-guide-command.d.ts.map +1 -1
- package/dist/core/atomic-guide-command.js +2 -3
- package/dist/core/atomic-guide-command.js.map +1 -1
- package/dist/core/auth-storage.d.ts +18 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +83 -0
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/bash-executor.d.ts +5 -0
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +43 -19
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/builtin-packages.d.ts.map +1 -1
- package/dist/core/builtin-packages.js +6 -0
- package/dist/core/builtin-packages.js.map +1 -1
- package/dist/core/codex-fast-mode.d.ts.map +1 -1
- package/dist/core/codex-fast-mode.js +8 -3
- package/dist/core/codex-fast-mode.js.map +1 -1
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js +4 -3
- package/dist/core/exec.js.map +1 -1
- package/dist/core/extensions/agent-events.d.ts +0 -1
- package/dist/core/extensions/agent-events.d.ts.map +1 -1
- package/dist/core/extensions/agent-events.js.map +1 -1
- package/dist/core/extensions/api-types.d.ts +5 -3
- 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 +40 -0
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/event-results.d.ts +5 -0
- package/dist/core/extensions/event-results.d.ts.map +1 -1
- package/dist/core/extensions/event-results.js.map +1 -1
- package/dist/core/extensions/index.d.ts +2 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +1 -0
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader-api.d.ts.map +1 -1
- package/dist/core/extensions/loader-api.js +14 -1
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-discovery.d.ts.map +1 -1
- package/dist/core/extensions/loader-discovery.js +3 -23
- package/dist/core/extensions/loader-discovery.js.map +1 -1
- package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
- package/dist/core/extensions/loader-runtime.js +20 -3
- package/dist/core/extensions/loader-runtime.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +7 -1
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/message-types.d.ts +6 -0
- package/dist/core/extensions/message-types.d.ts.map +1 -1
- package/dist/core/extensions/message-types.js.map +1 -1
- package/dist/core/extensions/provider-types.d.ts +9 -3
- package/dist/core/extensions/provider-types.d.ts.map +1 -1
- package/dist/core/extensions/provider-types.js.map +1 -1
- package/dist/core/extensions/runner-context.d.ts +2 -1
- package/dist/core/extensions/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js +4 -0
- package/dist/core/extensions/runner-context.js.map +1 -1
- package/dist/core/extensions/runner-registries.d.ts +2 -1
- package/dist/core/extensions/runner-registries.d.ts.map +1 -1
- package/dist/core/extensions/runner-registries.js +3 -0
- package/dist/core/extensions/runner-registries.js.map +1 -1
- package/dist/core/extensions/runner-ui.d.ts.map +1 -1
- package/dist/core/extensions/runner-ui.js +1 -0
- package/dist/core/extensions/runner-ui.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +4 -2
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +9 -3
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +4 -1
- package/dist/core/extensions/runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/runtime-types.js.map +1 -1
- package/dist/core/extensions/stale-context.d.ts +5 -0
- package/dist/core/extensions/stale-context.d.ts.map +1 -0
- package/dist/core/extensions/stale-context.js +11 -0
- package/dist/core/extensions/stale-context.js.map +1 -0
- package/dist/core/extensions/ui-types.d.ts +14 -11
- package/dist/core/extensions/ui-types.d.ts.map +1 -1
- package/dist/core/extensions/ui-types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +3 -2
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/intercom-runtime-group.d.ts +13 -0
- package/dist/core/intercom-runtime-group.d.ts.map +1 -0
- package/dist/core/intercom-runtime-group.js +23 -0
- package/dist/core/intercom-runtime-group.js.map +1 -0
- package/dist/core/keybindings.d.ts +44 -4
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/model-config.d.ts +39 -5
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +6 -0
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-fallback-failures.d.ts +30 -0
- package/dist/core/model-fallback-failures.d.ts.map +1 -0
- package/dist/core/model-fallback-failures.js +610 -0
- package/dist/core/model-fallback-failures.js.map +1 -0
- package/dist/core/model-registry.d.ts +12 -5
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +20 -12
- 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 +46 -14
- package/dist/core/model-resolver-cli.js.map +1 -1
- package/dist/core/model-resolver-defaults.d.ts.map +1 -1
- package/dist/core/model-resolver-defaults.js +2 -0
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/model-resolver-scope.d.ts +2 -0
- package/dist/core/model-resolver-scope.d.ts.map +1 -1
- package/dist/core/model-resolver-scope.js +12 -9
- package/dist/core/model-resolver-scope.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/model-runtime-snapshot.d.ts +10 -0
- package/dist/core/model-runtime-snapshot.d.ts.map +1 -1
- package/dist/core/model-runtime-snapshot.js +14 -1
- package/dist/core/model-runtime-snapshot.js.map +1 -1
- package/dist/core/model-runtime-streaming.d.ts +3 -1
- package/dist/core/model-runtime-streaming.d.ts.map +1 -1
- package/dist/core/model-runtime-streaming.js +16 -0
- package/dist/core/model-runtime-streaming.js.map +1 -1
- package/dist/core/model-runtime-types.d.ts +2 -0
- package/dist/core/model-runtime-types.d.ts.map +1 -1
- package/dist/core/model-runtime-types.js.map +1 -1
- package/dist/core/model-runtime.d.ts +37 -10
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +312 -113
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/oauth-login.d.ts.map +1 -1
- package/dist/core/oauth-login.js +2 -1
- package/dist/core/oauth-login.js.map +1 -1
- package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -1
- package/dist/core/openai-responses-payload-sanitizer.js +18 -2
- package/dist/core/openai-responses-payload-sanitizer.js.map +1 -1
- package/dist/core/package-manager-git.d.ts.map +1 -1
- package/dist/core/package-manager-git.js +56 -10
- package/dist/core/package-manager-git.js.map +1 -1
- package/dist/core/package-manager-manifest.d.ts +1 -1
- package/dist/core/package-manager-manifest.d.ts.map +1 -1
- package/dist/core/package-manager-manifest.js +19 -9
- package/dist/core/package-manager-manifest.js.map +1 -1
- package/dist/core/package-manager-resource-collector.js.map +1 -1
- package/dist/core/package-manager-resource-files.d.ts.map +1 -1
- package/dist/core/package-manager-resource-files.js +1 -2
- package/dist/core/package-manager-resource-files.js.map +1 -1
- package/dist/core/provider-composer-internal.d.ts +10 -2
- package/dist/core/provider-composer-internal.d.ts.map +1 -1
- package/dist/core/provider-composer-internal.js +7 -3
- package/dist/core/provider-composer-internal.js.map +1 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +19 -12
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +2 -0
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +77 -67
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js +3 -0
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-loader-context-files.d.ts.map +1 -1
- package/dist/core/resource-loader-context-files.js +13 -5
- package/dist/core/resource-loader-context-files.js.map +1 -1
- package/dist/core/retry-policy.d.ts +30 -0
- package/dist/core/retry-policy.d.ts.map +1 -0
- package/dist/core/retry-policy.js +25 -0
- package/dist/core/retry-policy.js.map +1 -0
- package/dist/core/runtime-credentials.d.ts +5 -5
- package/dist/core/runtime-credentials.d.ts.map +1 -1
- package/dist/core/runtime-credentials.js +8 -8
- package/dist/core/runtime-credentials.js.map +1 -1
- package/dist/core/sdk-types.d.ts +8 -2
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +6 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-core.d.ts +2 -0
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js +7 -0
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-list.d.ts.map +1 -1
- package/dist/core/session-manager-list.js +3 -1
- package/dist/core/session-manager-list.js.map +1 -1
- package/dist/core/settings-manager-ui-accessors.d.ts +8 -1
- package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-ui-accessors.js +31 -0
- package/dist/core/settings-manager-ui-accessors.js.map +1 -1
- package/dist/core/settings-manager.d.ts +2 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-merge.d.ts.map +1 -1
- package/dist/core/settings-merge.js +13 -16
- package/dist/core/settings-merge.js.map +1 -1
- package/dist/core/settings-types.d.ts +5 -0
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +0 -2
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts +2 -2
- package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/state/questionnaire-session.js +39 -2
- package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
- package/dist/core/tools/bash-async-execution.d.ts +2 -0
- package/dist/core/tools/bash-async-execution.d.ts.map +1 -1
- package/dist/core/tools/bash-async-execution.js +4 -1
- package/dist/core/tools/bash-async-execution.js.map +1 -1
- package/dist/core/tools/bash-async-output.d.ts +1 -0
- package/dist/core/tools/bash-async-output.d.ts.map +1 -1
- package/dist/core/tools/bash-async-output.js +62 -27
- package/dist/core/tools/bash-async-output.js.map +1 -1
- package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
- package/dist/core/tools/bash-pty-native.js +2 -1
- package/dist/core/tools/bash-pty-native.js.map +1 -1
- package/dist/core/tools/bash.d.ts +9 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +34 -16
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/directory-tree.d.ts +11 -0
- package/dist/core/tools/directory-tree.d.ts.map +1 -1
- package/dist/core/tools/directory-tree.js +26 -0
- package/dist/core/tools/directory-tree.js.map +1 -1
- package/dist/core/tools/edit.d.ts +4 -0
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +12 -8
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/errno.d.ts +25 -0
- package/dist/core/tools/errno.d.ts.map +1 -0
- package/dist/core/tools/errno.js +29 -0
- package/dist/core/tools/errno.js.map +1 -0
- package/dist/core/tools/find.d.ts +8 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +20 -15
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +5 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +7 -7
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +7 -7
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +4 -0
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +5 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +8 -1
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +50 -28
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/oversized-tool-result.d.ts.map +1 -1
- package/dist/core/tools/oversized-tool-result.js +129 -22
- package/dist/core/tools/oversized-tool-result.js.map +1 -1
- package/dist/core/tools/persisted-output-file.d.ts +80 -0
- package/dist/core/tools/persisted-output-file.d.ts.map +1 -0
- package/dist/core/tools/persisted-output-file.js +284 -0
- package/dist/core/tools/persisted-output-file.js.map +1 -0
- package/dist/core/tools/read.d.ts +10 -0
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +20 -8
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/search.d.ts +4 -0
- package/dist/core/tools/search.d.ts.map +1 -1
- package/dist/core/tools/search.js +5 -1
- package/dist/core/tools/search.js.map +1 -1
- package/dist/core/tools/session-temp-cleanup.d.ts +133 -0
- package/dist/core/tools/session-temp-cleanup.d.ts.map +1 -0
- package/dist/core/tools/session-temp-cleanup.js +669 -0
- package/dist/core/tools/session-temp-cleanup.js.map +1 -0
- package/dist/core/tools/session-temp-dir.d.ts +116 -0
- package/dist/core/tools/session-temp-dir.d.ts.map +1 -0
- package/dist/core/tools/session-temp-dir.js +409 -0
- package/dist/core/tools/session-temp-dir.js.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +2 -0
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/tool-limits.d.ts +11 -0
- package/dist/core/tools/tool-limits.d.ts.map +1 -1
- package/dist/core/tools/tool-limits.js +11 -0
- package/dist/core/tools/tool-limits.js.map +1 -1
- package/dist/core/tools/windows-directory-security.d.ts +82 -0
- package/dist/core/tools/windows-directory-security.d.ts.map +1 -0
- package/dist/core/tools/windows-directory-security.js +238 -0
- package/dist/core/tools/windows-directory-security.js.map +1 -0
- package/dist/core/tools/write.d.ts +4 -0
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +8 -4
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/trust-manager.js +1 -1
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/extensions/llama/huggingface-ui.d.ts +1 -1
- package/dist/extensions/llama/huggingface-ui.d.ts.map +1 -1
- package/dist/extensions/llama/huggingface-ui.js +6 -5
- package/dist/extensions/llama/huggingface-ui.js.map +1 -1
- package/dist/extensions/llama/index.d.ts.map +1 -1
- package/dist/extensions/llama/index.js +11 -2
- package/dist/extensions/llama/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +24 -8
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/extensions/llama/ui.d.ts.map +1 -1
- package/dist/extensions/llama/ui.js +5 -2
- package/dist/extensions/llama/ui.js.map +1 -1
- package/dist/index-extensions.d.ts +2 -2
- package/dist/index-extensions.d.ts.map +1 -1
- package/dist/index-extensions.js +1 -1
- package/dist/index-extensions.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/main-runtime-api-key.d.ts +2 -2
- package/dist/main-runtime-api-key.d.ts.map +1 -1
- package/dist/main-runtime-api-key.js +7 -2
- package/dist/main-runtime-api-key.js.map +1 -1
- package/dist/main-session.js +2 -2
- package/dist/main-session.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +130 -26
- package/dist/main.js.map +1 -1
- package/dist/modes/index.d.ts +1 -0
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/index.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +6 -2
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +18 -5
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +5 -4
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +2 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +3 -2
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts +17 -7
- package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js +35 -69
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.js +11 -3
- package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.js +25 -15
- package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js +9 -4
- package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.d.ts +2 -0
- package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.js +2 -0
- package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.d.ts +9 -0
- package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.js +14 -0
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.d.ts +32 -0
- package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.js +173 -5
- package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
- package/dist/modes/interactive/components/config-selector-list.d.ts +1 -1
- package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector-list.js +9 -8
- package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +32 -10
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts +2 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +3 -2
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +3 -2
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +1 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +4 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/fast-mode-selector.d.ts +1 -1
- package/dist/modes/interactive/components/fast-mode-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/fast-mode-selector.js +7 -5
- package/dist/modes/interactive/components/fast-mode-selector.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js +3 -0
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/host-input-form.d.ts +1 -1
- package/dist/modes/interactive/components/host-input-form.d.ts.map +1 -1
- package/dist/modes/interactive/components/host-input-form.js +6 -5
- package/dist/modes/interactive/components/host-input-form.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +1 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +2 -1
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
- package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
- package/dist/modes/interactive/components/markdown-transform.js +19 -0
- package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
- package/dist/modes/interactive/components/mermaid.d.ts +11 -0
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
- package/dist/modes/interactive/components/mermaid.js +81 -0
- package/dist/modes/interactive/components/mermaid.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +2 -2
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +9 -6
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +3 -2
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +6 -2
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +39 -13
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-delete.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-delete.js +2 -1
- package/dist/modes/interactive/components/session-selector-delete.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-list.d.ts +1 -1
- package/dist/modes/interactive/components/session-selector-list.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-list.js +12 -11
- package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +3 -3
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.js +9 -0
- package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js +21 -0
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-submenus.d.ts +3 -3
- package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-submenus.js +6 -1
- package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts +8 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +3 -2
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +2 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +50 -27
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-component.d.ts +1 -1
- package/dist/modes/interactive/components/tree-selector-component.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector-component.js +2 -3
- package/dist/modes/interactive/components/tree-selector-component.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-help.d.ts +1 -1
- package/dist/modes/interactive/components/tree-selector-help.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector-help.js +3 -1
- package/dist/modes/interactive/components/tree-selector-help.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-label-input.d.ts +1 -1
- package/dist/modes/interactive/components/tree-selector-label-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector-label-input.js +1 -0
- package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-list.d.ts +1 -1
- package/dist/modes/interactive/components/tree-selector-list.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector-list.js +3 -0
- package/dist/modes/interactive/components/tree-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/trust-selector.js +4 -0
- package/dist/modes/interactive/components/trust-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +4 -0
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +4 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +10 -2
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +2 -1
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +36 -18
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-login.js +9 -2
- package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.js +5 -1
- package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-bash-compact.js +16 -4
- 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 -0
- package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-context.js +12 -7
- package/dist/modes/interactive/interactive-extension-context.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-widgets.js +7 -24
- package/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.js +9 -8
- package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +52 -3
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +143 -5
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts +2 -2
- package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js +2 -2
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +9 -3
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.js +107 -41
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-process-lifecycle.js +1 -1
- package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +24 -6
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +44 -5
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +1 -0
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-slash-commands.js +9 -4
- 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 +37 -18
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-tui.d.ts +21 -0
- package/dist/modes/interactive/interactive-tui.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-tui.js +279 -0
- package/dist/modes/interactive/interactive-tui.js.map +1 -0
- package/dist/modes/interactive/streaming-assistant-message.d.ts +34 -0
- package/dist/modes/interactive/streaming-assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/streaming-assistant-message.js +76 -0
- package/dist/modes/interactive/streaming-assistant-message.js.map +1 -0
- package/dist/modes/interactive/theme/catppuccin-frappe.json +1 -0
- package/dist/modes/interactive/theme/catppuccin-latte.json +1 -0
- package/dist/modes/interactive/theme/catppuccin-macchiato.json +1 -0
- package/dist/modes/interactive/theme/catppuccin-mocha.json +1 -0
- package/dist/modes/interactive/theme/dark.json +1 -0
- package/dist/modes/interactive/theme/light.json +1 -0
- package/dist/modes/interactive/theme/terminal-detection.d.ts +10 -0
- package/dist/modes/interactive/theme/terminal-detection.d.ts.map +1 -1
- package/dist/modes/interactive/theme/terminal-detection.js +19 -0
- package/dist/modes/interactive/theme/terminal-detection.js.map +1 -1
- package/dist/modes/interactive/theme/theme-class.d.ts +2 -2
- package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-class.js +5 -1
- package/dist/modes/interactive/theme/theme-class.js.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts +3 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js +10 -13
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.js +1 -0
- package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.d.ts +4 -0
- package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.js +2 -1
- package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.json +5 -1
- package/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +1 -1
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.js +28 -11
- package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
- package/dist/modes/interactive-engine/engine-render-service.js +3 -3
- package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +2 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.js +2 -2
- package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.d.ts +7 -0
- package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +7 -0
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/protocol.d.ts +12 -10
- package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
- package/dist/modes/interactive-engine/protocol.js +14 -11
- package/dist/modes/interactive-engine/protocol.js.map +1 -1
- package/dist/modes/interactive-engine/remote-component.d.ts +11 -1
- package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
- package/dist/modes/interactive-engine/remote-component.js +48 -8
- package/dist/modes/interactive-engine/remote-component.js.map +1 -1
- package/dist/modes/interactive-engine/terminal-mode-controller.d.ts +19 -12
- package/dist/modes/interactive-engine/terminal-mode-controller.d.ts.map +1 -1
- package/dist/modes/interactive-engine/terminal-mode-controller.js +54 -35
- package/dist/modes/interactive-engine/terminal-mode-controller.js.map +1 -1
- package/dist/modes/json-event.d.ts +28 -0
- package/dist/modes/json-event.d.ts.map +1 -0
- package/dist/modes/json-event.js +12 -0
- package/dist/modes/json-event.js.map +1 -0
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +2 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client-process.d.ts +1 -0
- package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-process.js +5 -1
- package/dist/modes/rpc/rpc-client-process.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +7 -2
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.js +1 -1
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
- package/dist/modes/rpc/rpc-event-buffer.d.ts +9 -0
- package/dist/modes/rpc/rpc-event-buffer.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-event-buffer.js +10 -5
- package/dist/modes/rpc/rpc-event-buffer.js.map +1 -1
- package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-extension-ui.js +3 -0
- package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
- package/dist/modes/rpc/rpc-input.js +1 -1
- package/dist/modes/rpc/rpc-input.js.map +1 -1
- package/dist/modes/rpc/rpc-output-buffer.d.ts +9 -0
- package/dist/modes/rpc/rpc-output-buffer.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-output-buffer.js +10 -5
- package/dist/modes/rpc/rpc-output-buffer.js.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.js +3 -0
- package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
- package/dist/modes/rpc/rpc-responses.d.ts +1 -1
- package/dist/modes/rpc/rpc-responses.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-responses.js +13 -1
- package/dist/modes/rpc/rpc-responses.js.map +1 -1
- package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-session-binding.js +2 -1
- package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +9 -2
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/rpc-entry.js +2 -0
- package/dist/rpc-entry.js.map +1 -1
- package/dist/self-update-plan.d.ts.map +1 -1
- package/dist/self-update-plan.js +5 -4
- package/dist/self-update-plan.js.map +1 -1
- package/dist/server/create-harness.d.ts +53 -0
- package/dist/server/create-harness.d.ts.map +1 -0
- package/dist/server/create-harness.js +349 -0
- package/dist/server/create-harness.js.map +1 -0
- package/dist/utils/agent-attribution.d.ts +2 -0
- package/dist/utils/agent-attribution.d.ts.map +1 -0
- package/dist/utils/agent-attribution.js +2 -0
- package/dist/utils/agent-attribution.js.map +1 -0
- package/dist/utils/child-process.d.ts +3 -1
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js +24 -4
- package/dist/utils/child-process.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +2 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +12 -3
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/management-http.d.ts +23 -0
- package/dist/utils/management-http.d.ts.map +1 -0
- package/dist/utils/management-http.js +50 -0
- package/dist/utils/management-http.js.map +1 -0
- package/dist/utils/open-browser.d.ts.map +1 -1
- package/dist/utils/open-browser.js +2 -1
- package/dist/utils/open-browser.js.map +1 -1
- package/dist/utils/paths.d.ts +2 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +13 -0
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +17 -4
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/tool-result-images.d.ts +17 -0
- package/dist/utils/tool-result-images.d.ts.map +1 -0
- package/dist/utils/tool-result-images.js +41 -0
- package/dist/utils/tool-result-images.js.map +1 -0
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +7 -8
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.d.ts +4 -0
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +20 -2
- package/dist/utils/version-check.js.map +1 -1
- package/docs/compaction.md +2 -1
- package/docs/custom-provider.md +15 -7
- package/docs/development.md +1 -0
- package/docs/docs.json +1 -0
- package/docs/environment-variables.md +4 -0
- package/docs/extensions.md +102 -18
- package/docs/i-have-adhd.md +36 -0
- package/docs/intercom.md +31 -16
- package/docs/json.md +2 -2
- package/docs/keybindings.md +55 -12
- package/docs/models/model-selection.md +34 -8
- package/docs/models.md +28 -3
- package/docs/providers.md +20 -2
- package/docs/quickstart.md +5 -5
- package/docs/rpc.md +18 -12
- package/docs/sdk.md +43 -7
- package/docs/security.md +10 -10
- package/docs/sessions.md +2 -0
- package/docs/settings.md +32 -6
- package/docs/subagents.md +30 -45
- package/docs/themes.md +5 -3
- package/docs/tools.md +21 -1
- package/docs/tui.md +41 -24
- package/docs/usage.md +40 -14
- package/docs/windows.md +2 -0
- package/docs/workflows.md +237 -25
- package/examples/extensions/custom-provider-anthropic/index.ts +9 -2
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +9 -2
- package/examples/extensions/gondolin/package-lock.json +3 -3
- package/examples/extensions/modal-editor.ts +8 -10
- package/examples/extensions/rainbow-editor.ts +3 -2
- package/examples/extensions/subagent/README.md +16 -45
- package/examples/extensions/subagent/index.ts +6 -96
- package/examples/extensions/subagent/render.ts +0 -78
- package/examples/extensions/subagent/runner.ts +0 -3
- package/examples/extensions/subagent/schemas.ts +0 -13
- package/examples/extensions/subagent/types.ts +1 -2
- package/examples/sdk/09-api-keys-and-oauth.ts +6 -2
- package/examples/sdk/12-full-control.ts +8 -2
- package/examples/sdk/README.md +4 -1
- package/npm-shrinkwrap.json +191 -634
- package/package.json +14 -7
- package/dist/builtin/subagents/src/agents/chain-serializer.ts +0 -257
- package/dist/builtin/subagents/src/runs/background/async-event-journal.ts +0 -112
- package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +0 -543
- package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +0 -140
- package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +0 -279
- package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +0 -99
- package/dist/builtin/subagents/src/runs/background/async-execution.ts +0 -17
- package/dist/builtin/subagents/src/runs/background/async-resume.ts +0 -402
- package/dist/builtin/subagents/src/runs/background/async-status.ts +0 -411
- package/dist/builtin/subagents/src/runs/background/completion-claims.ts +0 -196
- package/dist/builtin/subagents/src/runs/background/completion-dedupe.ts +0 -102
- package/dist/builtin/subagents/src/runs/background/parallel-groups.ts +0 -59
- package/dist/builtin/subagents/src/runs/background/result-delivery-processor.ts +0 -300
- package/dist/builtin/subagents/src/runs/background/result-file-claims.ts +0 -166
- package/dist/builtin/subagents/src/runs/background/result-quarantine.ts +0 -77
- package/dist/builtin/subagents/src/runs/background/result-retry-scheduler.ts +0 -48
- package/dist/builtin/subagents/src/runs/background/result-status.ts +0 -87
- package/dist/builtin/subagents/src/runs/background/result-watcher-data.ts +0 -72
- package/dist/builtin/subagents/src/runs/background/result-watcher.ts +0 -320
- package/dist/builtin/subagents/src/runs/background/run-id-resolver.ts +0 -105
- package/dist/builtin/subagents/src/runs/background/run-status.ts +0 -358
- package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +0 -457
- package/dist/builtin/subagents/src/runs/background/subagent-runner-dynamic.ts +0 -376
- package/dist/builtin/subagents/src/runs/background/subagent-runner-finalize.ts +0 -150
- package/dist/builtin/subagents/src/runs/background/subagent-runner-output.ts +0 -109
- package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel-helpers.ts +0 -128
- package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel.ts +0 -309
- package/dist/builtin/subagents/src/runs/background/subagent-runner-sequential.ts +0 -173
- package/dist/builtin/subagents/src/runs/background/subagent-runner-state.ts +0 -578
- package/dist/builtin/subagents/src/runs/background/subagent-runner-step.ts +0 -330
- package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +0 -330
- package/dist/builtin/subagents/src/runs/background/subagent-runner-types.ts +0 -210
- package/dist/builtin/subagents/src/runs/background/subagent-runner-utils.ts +0 -69
- package/dist/builtin/subagents/src/runs/background/subagent-runner.ts +0 -90
- package/dist/builtin/subagents/src/runs/background/top-level-async.ts +0 -12
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-details.ts +0 -38
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +0 -280
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +0 -217
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +0 -271
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +0 -271
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +0 -200
- package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +0 -184
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt-control.ts +0 -140
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt-finalize.ts +0 -108
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt-types.ts +0 -17
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +0 -558
- package/dist/builtin/subagents/src/runs/foreground/execution-structured-retries.ts +0 -83
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +0 -109
- package/dist/builtin/subagents/src/runs/shared/attempt-watchdog.ts +0 -126
- package/dist/builtin/subagents/src/runs/shared/chain-outputs.ts +0 -126
- package/dist/builtin/subagents/src/runs/shared/dynamic-fanout.ts +0 -387
- package/dist/builtin/subagents/src/runs/shared/final-drain.ts +0 -39
- package/dist/builtin/subagents/src/runs/shared/pi-args.ts +0 -339
- package/dist/builtin/subagents/src/runs/shared/pi-spawn.ts +0 -165
- package/dist/builtin/subagents/src/runs/shared/spawn-env.ts +0 -21
- package/dist/builtin/subagents/src/runs/shared/structured-output.ts +0 -150
- package/dist/builtin/subagents/src/runs/shared/workflow-graph.ts +0 -232
- package/dist/builtin/subagents/src/shared/post-exit-stdio-guard.ts +0 -86
- package/dist/builtin/subagents/src/slash/saved-chain-mapping.ts +0 -60
- package/dist/builtin/subagents/src/tui/render-chain-graph.ts +0 -335
- package/examples/extensions/subagent/prompts/implement-and-review.md +0 -10
- package/examples/extensions/subagent/prompts/implement.md +0 -10
- package/examples/extensions/subagent/prompts/scout-and-plan.md +0 -9
- /package/dist/builtin/subagents/src/runs/{shared/nested-path.ts → inprocess/runtime-support/nested-paths.ts} +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type AgentSession,
|
|
3
3
|
type CreateAgentSessionOptions,
|
|
4
|
+
convertToLlm,
|
|
4
5
|
type PromptOptions,
|
|
5
6
|
type StructuredOutputCapture,
|
|
6
7
|
shouldApplyCodexFastModeForScope,
|
|
@@ -18,9 +19,11 @@ import {
|
|
|
18
19
|
buildModelCandidatesFromCatalog,
|
|
19
20
|
errorMessage,
|
|
20
21
|
isRetryableModelFailure,
|
|
22
|
+
isRetryableSameModelFailure,
|
|
21
23
|
type WorkflowResolvedModelCandidate,
|
|
22
24
|
workflowModelId,
|
|
23
25
|
} from "../shared/model-fallback.js";
|
|
26
|
+
import { nextRetryDecision, sleepOrAbort } from "../shared/retry.js";
|
|
24
27
|
import { StageDeliveryActivity, type StageDeliveryActivityListener } from "./stage-delivery-activity.js";
|
|
25
28
|
import { stageSessionQueueUpdateEvent } from "./stage-queued-user-messages.js";
|
|
26
29
|
import { candidateLabel, effectiveCandidateReasoning, modelAttemptReasoning } from "./stage-runner-candidate.js";
|
|
@@ -52,17 +55,107 @@ import type {
|
|
|
52
55
|
StageSessionRuntime,
|
|
53
56
|
StageUserMessagePreparation,
|
|
54
57
|
WorkflowFastModeSettingsManager,
|
|
58
|
+
WorkflowRetrySettings,
|
|
55
59
|
} from "./stage-runner-types.js";
|
|
56
60
|
import {
|
|
61
|
+
isUnresolvedContextOverflowFailure,
|
|
57
62
|
nextResumedContextOverflowFallbackIndex,
|
|
58
63
|
terminatingToolCallId,
|
|
59
64
|
unresolvedContextOverflowFailure,
|
|
60
65
|
unresolvedContextOverflowMessage,
|
|
61
66
|
} from "./stage-runner-unresolved-overflow.js";
|
|
62
67
|
|
|
68
|
+
type RetryPauseResume = NonNullable<ReturnType<StageSessionPause["currentResume"]>>;
|
|
69
|
+
|
|
70
|
+
interface ThrownErrorRetryState {
|
|
71
|
+
readonly controller: AbortController;
|
|
72
|
+
pauseResume?: RetryPauseResume;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Observes a controlled pause raised while a session creation is in flight. */
|
|
76
|
+
interface CreationPauseObserver {
|
|
77
|
+
pauseResume?: RetryPauseResume;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
interface SessionCreationPauseResult {
|
|
81
|
+
readonly kind: "paused";
|
|
82
|
+
readonly resumeMessage?: string;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function isSessionCreationPauseResult(
|
|
86
|
+
value: StageSessionRuntime | SessionCreationPauseResult,
|
|
87
|
+
): value is SessionCreationPauseResult {
|
|
88
|
+
return "kind" in value && value.kind === "paused";
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
class StageSessionCreationCancelled extends Error {
|
|
92
|
+
constructor() {
|
|
93
|
+
super("atomic-workflows: stage session creation was cancelled while paused");
|
|
94
|
+
this.name = "StageSessionCreationCancelled";
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function stageUserMessageText(message: StageSessionRuntime["messages"][number]): string | undefined {
|
|
99
|
+
if (message.role !== "user") return undefined;
|
|
100
|
+
if (typeof message.content === "string") return message.content;
|
|
101
|
+
return message.content
|
|
102
|
+
.filter((part) => part.type === "text")
|
|
103
|
+
.map((part) => part.text)
|
|
104
|
+
.join("");
|
|
105
|
+
}
|
|
106
|
+
function retrySettingsManagerFromError(error: unknown): WorkflowFastModeSettingsManager | undefined {
|
|
107
|
+
if (error === null || typeof error !== "object") return undefined;
|
|
108
|
+
const manager = (error as { readonly settingsManager?: unknown }).settingsManager;
|
|
109
|
+
if (manager === null || typeof manager !== "object") return undefined;
|
|
110
|
+
const candidate = manager as Partial<WorkflowFastModeSettingsManager>;
|
|
111
|
+
return typeof candidate.getCodexFastModeSettings === "function"
|
|
112
|
+
? (candidate as WorkflowFastModeSettingsManager)
|
|
113
|
+
: undefined;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
type RetryableAgentSession = AgentSession & {
|
|
117
|
+
_runAgentContinue(): Promise<void>;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
function retryableAgentSession(activeSession: StageSessionRuntime): RetryableAgentSession | undefined {
|
|
121
|
+
const session = asAgentSession(activeSession);
|
|
122
|
+
if (session === undefined) return undefined;
|
|
123
|
+
const candidate = session as AgentSession & { readonly _runAgentContinue?: unknown };
|
|
124
|
+
return typeof candidate._runAgentContinue === "function" ? (session as RetryableAgentSession) : undefined;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* pi-agent-core requires the last message of a continued transcript to convert
|
|
129
|
+
* to a `user` or `toolResult` provider message (`agent-loop.js` `agentLoopContinue`);
|
|
130
|
+
* anything else is rejected once the request reaches the provider.
|
|
131
|
+
*
|
|
132
|
+
* The raw tail is not enough to answer that. A retry that restored live state
|
|
133
|
+
* can leave a retained non-error assistant, or a `custom`/`bashExecution`/
|
|
134
|
+
* `branchSummary` message that Atomic's converter drops when it is excluded
|
|
135
|
+
* from context or empty — leaving an assistant as the converted tail. Evaluate
|
|
136
|
+
* the same `convertToLlm()` result Atomic sends.
|
|
137
|
+
*/
|
|
138
|
+
function canContinueFromTranscript(activeSession: StageSessionRuntime): boolean {
|
|
139
|
+
const converted = convertToLlm([...activeSession.messages]);
|
|
140
|
+
const last = converted[converted.length - 1];
|
|
141
|
+
return last !== undefined && (last.role === "user" || last.role === "toolResult");
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
class ThrownErrorRetryPaused extends Error {
|
|
145
|
+
constructor(readonly resume: RetryPauseResume) {
|
|
146
|
+
super("atomic-workflows: thrown-error retry paused");
|
|
147
|
+
this.name = "ThrownErrorRetryPaused";
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
63
151
|
export class StageSessionController {
|
|
64
152
|
private session: StageSessionRuntime | undefined;
|
|
65
153
|
private activeCreation: Promise<StageSessionRuntime> | undefined;
|
|
154
|
+
/** The creation promise a candidate walk still owns, if one is advancing. */
|
|
155
|
+
private ownedCreationPromise: Promise<StageSessionRuntime> | undefined;
|
|
156
|
+
private abortGeneration = 0;
|
|
157
|
+
private abortReason: Error | DOMException | string | undefined;
|
|
158
|
+
private abortReasonGeneration = 0;
|
|
66
159
|
private sessionPromise: Promise<StageSessionRuntime> | undefined;
|
|
67
160
|
private reattachSessionFile: string | undefined;
|
|
68
161
|
private lastPromptStartIndex: number | undefined;
|
|
@@ -88,7 +181,10 @@ export class StageSessionController {
|
|
|
88
181
|
private readonly pendingFallbackWarnings: string[] = [];
|
|
89
182
|
private readonly modelCatalog: WorkflowModelCatalogPort | undefined;
|
|
90
183
|
private sessionSettingsManager: WorkflowFastModeSettingsManager | undefined;
|
|
184
|
+
private readonly thrownErrorRetryStates = new Set<ThrownErrorRetryState>();
|
|
185
|
+
private readonly creationPauseObservers = new Set<CreationPauseObserver>();
|
|
91
186
|
private readonly replacement = new StageSessionReplacement();
|
|
187
|
+
private pendingCreationResumeMessage: string | undefined;
|
|
92
188
|
private readonly messageAdmission = new StageMessageAdmission();
|
|
93
189
|
private readonly deliveryActivity = new StageDeliveryActivity();
|
|
94
190
|
|
|
@@ -156,7 +252,23 @@ export class StageSessionController {
|
|
|
156
252
|
async ensureSession(consumer: AgentSessionConsumer = "prompt"): Promise<StageSessionRuntime> {
|
|
157
253
|
if (this.disposed) throw new Error(`atomic-workflows: stage "${this.opts.stageName}" session has been disposed`);
|
|
158
254
|
if (this.session !== undefined) return this.session;
|
|
159
|
-
if (!this.sessionPromise)
|
|
255
|
+
if (!this.sessionPromise) {
|
|
256
|
+
const pending = this.createInitialSession(consumer);
|
|
257
|
+
this.sessionPromise = pending;
|
|
258
|
+
// One creation gate: the walk owns this promise while it advances
|
|
259
|
+
// candidates, so a concurrent caller joins it instead of racing it.
|
|
260
|
+
this.ownedCreationPromise = pending;
|
|
261
|
+
const release = (): void => {
|
|
262
|
+
if (this.ownedCreationPromise === pending) this.ownedCreationPromise = undefined;
|
|
263
|
+
};
|
|
264
|
+
// A terminal creation failure must not be replayed to every later
|
|
265
|
+
// caller. Clear by identity so a walk that replaced the promise, or a
|
|
266
|
+
// cancellation that already cleared it, is left alone.
|
|
267
|
+
pending.then(release, () => {
|
|
268
|
+
release();
|
|
269
|
+
if (this.sessionPromise === pending) this.sessionPromise = undefined;
|
|
270
|
+
});
|
|
271
|
+
}
|
|
160
272
|
return this.sessionPromise;
|
|
161
273
|
}
|
|
162
274
|
|
|
@@ -186,11 +298,28 @@ export class StageSessionController {
|
|
|
186
298
|
}
|
|
187
299
|
preparation?.beforePreparation?.();
|
|
188
300
|
const sessionFile = preparation?.sessionFile;
|
|
189
|
-
const deliver = async (activity?: StageDeliveryActivity) =>
|
|
190
|
-
|
|
301
|
+
const deliver = async (activity?: StageDeliveryActivity) => {
|
|
302
|
+
const activeSession =
|
|
191
303
|
sessionFile === undefined
|
|
192
304
|
? await this.ensureSession("prompt")
|
|
193
|
-
: await this.ensureSessionFromFile(sessionFile, "prompt")
|
|
305
|
+
: await this.ensureSessionFromFile(sessionFile, "prompt");
|
|
306
|
+
const pausedDelivery = this.pauseControl.deferRunnerOwnedDelivery(() =>
|
|
307
|
+
sendStageUserMessage(
|
|
308
|
+
activeSession,
|
|
309
|
+
content,
|
|
310
|
+
options,
|
|
311
|
+
beforeDelivery,
|
|
312
|
+
release,
|
|
313
|
+
this.messageAdmission,
|
|
314
|
+
activity,
|
|
315
|
+
),
|
|
316
|
+
);
|
|
317
|
+
if (pausedDelivery !== undefined) {
|
|
318
|
+
release();
|
|
319
|
+
return pausedDelivery;
|
|
320
|
+
}
|
|
321
|
+
return sendStageUserMessage(
|
|
322
|
+
activeSession,
|
|
194
323
|
content,
|
|
195
324
|
options,
|
|
196
325
|
beforeDelivery,
|
|
@@ -198,6 +327,7 @@ export class StageSessionController {
|
|
|
198
327
|
this.messageAdmission,
|
|
199
328
|
activity,
|
|
200
329
|
);
|
|
330
|
+
};
|
|
201
331
|
if (this.session === undefined || sessionFile !== undefined)
|
|
202
332
|
return this.deliveryActivity.runWithLease(() => deliver());
|
|
203
333
|
return deliver(this.deliveryActivity);
|
|
@@ -226,29 +356,73 @@ export class StageSessionController {
|
|
|
226
356
|
consumer: AgentSessionConsumer = "prompt",
|
|
227
357
|
): Promise<void> {
|
|
228
358
|
if (!this.hasExplicitModelFallbackConfig) {
|
|
229
|
-
|
|
359
|
+
try {
|
|
360
|
+
const activeSession = await this.ensureSession(consumer);
|
|
361
|
+
const resumedText = this.pendingCreationResumeMessage;
|
|
362
|
+
this.pendingCreationResumeMessage = undefined;
|
|
363
|
+
await this.promptWithThrownErrorRetry(activeSession, resumedText ?? text, sdkOptions);
|
|
364
|
+
} catch (error) {
|
|
365
|
+
if (error instanceof StageSessionCreationCancelled) return;
|
|
366
|
+
throw error;
|
|
367
|
+
}
|
|
230
368
|
return;
|
|
231
369
|
}
|
|
232
370
|
|
|
233
371
|
const candidates = await this.modelCandidates();
|
|
234
372
|
if (candidates.length === 0) {
|
|
235
|
-
|
|
373
|
+
try {
|
|
374
|
+
const activeSession = await this.ensureSession(consumer);
|
|
375
|
+
const resumedText = this.pendingCreationResumeMessage;
|
|
376
|
+
this.pendingCreationResumeMessage = undefined;
|
|
377
|
+
await this.promptWithThrownErrorRetry(activeSession, resumedText ?? text, sdkOptions);
|
|
378
|
+
} catch (error) {
|
|
379
|
+
if (error instanceof StageSessionCreationCancelled) return;
|
|
380
|
+
throw error;
|
|
381
|
+
}
|
|
236
382
|
return;
|
|
237
383
|
}
|
|
238
384
|
|
|
239
|
-
|
|
385
|
+
// A creation already in flight — an eager walk, or a concurrent caller —
|
|
386
|
+
// owns the candidate chain. Join it rather than starting a second walk that
|
|
387
|
+
// would duplicate provider work and leak whichever session lost the race.
|
|
388
|
+
if (this.session === undefined && this.sessionPromise !== undefined) {
|
|
389
|
+
try {
|
|
390
|
+
await this.sessionPromise;
|
|
391
|
+
} catch (error) {
|
|
392
|
+
if (error instanceof StageSessionCreationCancelled) return;
|
|
393
|
+
// The exhausted walk cleared its own promise by identity; fall through
|
|
394
|
+
// and let the walk below report the failure for this prompt.
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
// A paused creation resumed with a replacement objective: that text is
|
|
399
|
+
// authoritative for this prompt and must not be dropped here.
|
|
400
|
+
const resumedText = this.pendingCreationResumeMessage;
|
|
401
|
+
this.pendingCreationResumeMessage = undefined;
|
|
402
|
+
let promptText = resumedText ?? text;
|
|
403
|
+
if (await this.tryResumeCurrentSession(promptText, sdkOptions, candidates)) return;
|
|
240
404
|
let index = this.activeCandidateIndex ?? 0;
|
|
241
405
|
while (index < candidates.length) {
|
|
242
406
|
const candidate = candidates[index]!;
|
|
243
|
-
const activeSession =
|
|
244
|
-
this.session && this.activeCandidateIndex === index
|
|
245
|
-
? this.session
|
|
246
|
-
: await this.createSession(candidate, consumer);
|
|
247
|
-
this.activeCandidateIndex = index;
|
|
248
|
-
this.selectedModel = candidate.id;
|
|
249
|
-
this.notifyModelFallbackMetaChange();
|
|
250
407
|
try {
|
|
251
|
-
const
|
|
408
|
+
const created =
|
|
409
|
+
this.session && this.activeCandidateIndex === index
|
|
410
|
+
? this.session
|
|
411
|
+
: await this.createSessionWithThrownErrorRetry(candidate, consumer);
|
|
412
|
+
if (isSessionCreationPauseResult(created)) {
|
|
413
|
+
if (created.resumeMessage === undefined) return;
|
|
414
|
+
promptText = created.resumeMessage;
|
|
415
|
+
continue;
|
|
416
|
+
}
|
|
417
|
+
const activeSession = created;
|
|
418
|
+
this.activeCandidateIndex = index;
|
|
419
|
+
this.selectedModel = candidate.id;
|
|
420
|
+
this.notifyModelFallbackMetaChange();
|
|
421
|
+
const { terminalScanStartIndex } = await this.promptWithThrownErrorRetry(
|
|
422
|
+
activeSession,
|
|
423
|
+
promptText,
|
|
424
|
+
sdkOptions,
|
|
425
|
+
);
|
|
252
426
|
const terminalFailure = latestTerminalAssistantFailureSince(activeSession.messages, terminalScanStartIndex);
|
|
253
427
|
if (terminalFailure !== undefined) {
|
|
254
428
|
if (this.capturedStructuredOutputForAttempt()) {
|
|
@@ -283,6 +457,9 @@ export class StageSessionController {
|
|
|
283
457
|
|
|
284
458
|
async disposeAll(): Promise<void> {
|
|
285
459
|
this.disposed = true;
|
|
460
|
+
const reason = new Error(`atomic-workflows: stage "${this.opts.stageName}" session has been disposed`);
|
|
461
|
+
this.markAbort(reason);
|
|
462
|
+
this.pauseControl.reject(reason);
|
|
286
463
|
for (const unsubscribe of this.listenerUnsubscribes.values()) unsubscribe();
|
|
287
464
|
this.listenerUnsubscribes.clear();
|
|
288
465
|
this.pendingListeners.clear();
|
|
@@ -294,8 +471,27 @@ export class StageSessionController {
|
|
|
294
471
|
await this.replacement.dispose();
|
|
295
472
|
await disposeStageSession(this.session);
|
|
296
473
|
}
|
|
474
|
+
|
|
475
|
+
async abort(): Promise<void> {
|
|
476
|
+
const reason = new DOMException("stage aborted", "AbortError");
|
|
477
|
+
this.markAbort(reason);
|
|
478
|
+
this.pauseControl.reject(reason);
|
|
479
|
+
await this.session?.abort();
|
|
480
|
+
}
|
|
297
481
|
requestPause(): Promise<void> {
|
|
298
|
-
|
|
482
|
+
const pause = this.pauseControl.requestPause();
|
|
483
|
+
const resume = this.pauseControl.currentResume();
|
|
484
|
+
if (resume !== undefined) {
|
|
485
|
+
this.pauseThrownErrorRetries(resume);
|
|
486
|
+
// A creation in flight cannot see the pause request itself, because
|
|
487
|
+
// completing the resume clears it before creation settles.
|
|
488
|
+
for (const observer of this.creationPauseObservers) {
|
|
489
|
+
if (observer.pauseResume !== undefined) continue;
|
|
490
|
+
observer.pauseResume = resume;
|
|
491
|
+
this.latchCreationResume(resume);
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
return pause;
|
|
299
495
|
}
|
|
300
496
|
resume(
|
|
301
497
|
message?: string,
|
|
@@ -326,13 +522,272 @@ export class StageSessionController {
|
|
|
326
522
|
return new DOMException("workflow killed", "AbortError");
|
|
327
523
|
};
|
|
328
524
|
const onAbort = (): void => {
|
|
525
|
+
const reason = abortReason();
|
|
526
|
+
this.markAbort(reason);
|
|
329
527
|
void this.session?.abort().catch(() => {});
|
|
330
|
-
this.pauseControl.reject(
|
|
528
|
+
this.pauseControl.reject(reason);
|
|
331
529
|
};
|
|
332
530
|
if (signal.aborted) onAbort();
|
|
333
531
|
else signal.addEventListener("abort", onAbort, { once: true });
|
|
334
532
|
}
|
|
335
533
|
|
|
534
|
+
private markAbort(reason: Error | DOMException | string): void {
|
|
535
|
+
this.abortGeneration += 1;
|
|
536
|
+
this.abortReason = reason;
|
|
537
|
+
this.abortReasonGeneration = this.abortGeneration;
|
|
538
|
+
this.abortThrownErrorRetries(reason);
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
private pauseThrownErrorRetries(resume: RetryPauseResume): void {
|
|
542
|
+
for (const state of this.thrownErrorRetryStates) {
|
|
543
|
+
if (state.pauseResume !== undefined) continue;
|
|
544
|
+
state.pauseResume = resume;
|
|
545
|
+
state.controller.abort(new ThrownErrorRetryPaused(resume));
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
private abortThrownErrorRetries(reason?: Error | DOMException | string): void {
|
|
550
|
+
for (const state of this.thrownErrorRetryStates) state.controller.abort(reason);
|
|
551
|
+
this.thrownErrorRetryStates.clear();
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
private retrySettings(): WorkflowRetrySettings | undefined {
|
|
555
|
+
const managers = [
|
|
556
|
+
this.sessionSettingsManager,
|
|
557
|
+
this.session?.settingsManager,
|
|
558
|
+
this.effectiveStageOptions?.settingsManager,
|
|
559
|
+
];
|
|
560
|
+
for (const manager of managers) {
|
|
561
|
+
if (manager === undefined || typeof manager.getRetrySettings !== "function") continue;
|
|
562
|
+
return manager.getRetrySettings();
|
|
563
|
+
}
|
|
564
|
+
return undefined;
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* Drop this attempt's failed input from live state before a same-candidate
|
|
568
|
+
* retry, keeping unrelated concurrent messages. The durable transcript keeps
|
|
569
|
+
* everything; this mirrors main-chat retry, which also only edits live state.
|
|
570
|
+
*
|
|
571
|
+
* `keepPrompt` retains the admitted stage prompt because the continuation
|
|
572
|
+
* path resumes the existing turn with `_runAgentContinue()`, and pi-agent-core
|
|
573
|
+
* rejects a transcript that does not end in a user or tool-result message.
|
|
574
|
+
* Returns the retained prompt so a later re-`prompt()` can drop it.
|
|
575
|
+
*/
|
|
576
|
+
private restoreSessionMessages(
|
|
577
|
+
session: StageSessionRuntime,
|
|
578
|
+
snapshot: StageSessionRuntime["messages"],
|
|
579
|
+
promptText: string,
|
|
580
|
+
keepPrompt: boolean,
|
|
581
|
+
): StageSessionRuntime["messages"][number] | undefined {
|
|
582
|
+
const snapshotMessages = new Set(snapshot);
|
|
583
|
+
const admitted = session.messages.filter((message) => !snapshotMessages.has(message));
|
|
584
|
+
const failedAssistantIndex = admitted.findLastIndex(
|
|
585
|
+
(message) => message.role === "assistant" && message.stopReason === "error",
|
|
586
|
+
);
|
|
587
|
+
const promptUser = admitted
|
|
588
|
+
.slice(0, failedAssistantIndex < 0 ? admitted.length : failedAssistantIndex)
|
|
589
|
+
.findLast((message) => message.role === "user" && stageUserMessageText(message) === promptText);
|
|
590
|
+
const retainedMessages = admitted.filter((message) => {
|
|
591
|
+
if (message === promptUser) return keepPrompt;
|
|
592
|
+
if (message.role === "assistant") return message.stopReason !== "error";
|
|
593
|
+
return ["user", "toolResult", "custom", "bashExecution", "branchSummary"].includes(message.role);
|
|
594
|
+
});
|
|
595
|
+
session.messages.splice(0, session.messages.length, ...snapshot, ...retainedMessages);
|
|
596
|
+
return keepPrompt ? promptUser : undefined;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
/** Remove a prompt retained for a continuation that will not happen. */
|
|
600
|
+
private dropRetainedPrompt(
|
|
601
|
+
session: StageSessionRuntime,
|
|
602
|
+
retained: StageSessionRuntime["messages"][number] | undefined,
|
|
603
|
+
): void {
|
|
604
|
+
if (retained === undefined) return;
|
|
605
|
+
const index = session.messages.indexOf(retained);
|
|
606
|
+
if (index >= 0) session.messages.splice(index, 1);
|
|
607
|
+
}
|
|
608
|
+
private async sleepForThrownErrorRetry(delayMs: number, state: ThrownErrorRetryState): Promise<void> {
|
|
609
|
+
this.thrownErrorRetryStates.add(state);
|
|
610
|
+
const currentResume = this.pauseControl.currentResume();
|
|
611
|
+
if (currentResume !== undefined) {
|
|
612
|
+
state.pauseResume = currentResume;
|
|
613
|
+
state.controller.abort(new ThrownErrorRetryPaused(currentResume));
|
|
614
|
+
}
|
|
615
|
+
try {
|
|
616
|
+
await sleepOrAbort(delayMs, state.controller.signal);
|
|
617
|
+
} finally {
|
|
618
|
+
this.thrownErrorRetryStates.delete(state);
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
/**
|
|
623
|
+
* Resume the existing turn under the same pause rules as a prompt.
|
|
624
|
+
*
|
|
625
|
+
* A controlled pause aborts the in-flight request, which must not be mistaken
|
|
626
|
+
* for a terminal model failure: the stage would advance a candidate and become
|
|
627
|
+
* unrecoverable by resume.
|
|
628
|
+
*/
|
|
629
|
+
private async continueWithPauseResume(
|
|
630
|
+
continuationSession: RetryableAgentSession,
|
|
631
|
+
): Promise<{ readonly kind: "continued" } | { readonly kind: "paused"; readonly message?: string }> {
|
|
632
|
+
const settlePause = async (resume: RetryPauseResume): Promise<{ kind: "paused"; message?: string }> => {
|
|
633
|
+
const resumed = await resume;
|
|
634
|
+
await resumed.runnerOwnedDeliverySettlement;
|
|
635
|
+
return { kind: "paused", ...(resumed.message === undefined ? {} : { message: resumed.message }) };
|
|
636
|
+
};
|
|
637
|
+
const pauseBeforeContinue = this.pauseControl.currentResume();
|
|
638
|
+
if (pauseBeforeContinue !== undefined) return settlePause(pauseBeforeContinue);
|
|
639
|
+
|
|
640
|
+
const state: ThrownErrorRetryState = { controller: new AbortController() };
|
|
641
|
+
this.thrownErrorRetryStates.add(state);
|
|
642
|
+
try {
|
|
643
|
+
await continuationSession._runAgentContinue();
|
|
644
|
+
} catch (error) {
|
|
645
|
+
const resume = state.pauseResume ?? this.pauseControl.currentResume();
|
|
646
|
+
if (resume === undefined) throw error;
|
|
647
|
+
return settlePause(resume);
|
|
648
|
+
} finally {
|
|
649
|
+
this.thrownErrorRetryStates.delete(state);
|
|
650
|
+
}
|
|
651
|
+
const pauseAfterContinue = state.pauseResume ?? this.pauseControl.currentResume();
|
|
652
|
+
if (pauseAfterContinue !== undefined) return settlePause(pauseAfterContinue);
|
|
653
|
+
return { kind: "continued" };
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
private async promptWithThrownErrorRetry(
|
|
657
|
+
activeSession: StageSessionRuntime,
|
|
658
|
+
text: string,
|
|
659
|
+
sdkOptions: PromptOptions | undefined,
|
|
660
|
+
): Promise<{ readonly terminalScanStartIndex: number }> {
|
|
661
|
+
let retryAttempt = 0;
|
|
662
|
+
let nextText = text;
|
|
663
|
+
let retryAdmittedPrompt = false;
|
|
664
|
+
let retainedPrompt: StageSessionRuntime["messages"][number] | undefined;
|
|
665
|
+
let terminalScanStartIndex: number | undefined;
|
|
666
|
+
while (true) {
|
|
667
|
+
const messagesBeforeAttempt = [...activeSession.messages];
|
|
668
|
+
try {
|
|
669
|
+
if (retryAdmittedPrompt) {
|
|
670
|
+
const continuationSession = retryableAgentSession(activeSession);
|
|
671
|
+
if (continuationSession !== undefined) {
|
|
672
|
+
const outcome = await this.continueWithPauseResume(continuationSession);
|
|
673
|
+
if (outcome.kind === "continued") {
|
|
674
|
+
return {
|
|
675
|
+
terminalScanStartIndex:
|
|
676
|
+
terminalScanStartIndex ?? this.lastPromptStartIndex ?? messagesBeforeAttempt.length,
|
|
677
|
+
};
|
|
678
|
+
}
|
|
679
|
+
// A controlled pause interrupted the continuation. The resumed
|
|
680
|
+
// objective owns the turn from here, so re-prompt with it rather
|
|
681
|
+
// than resuming a turn the operator replaced.
|
|
682
|
+
this.dropRetainedPrompt(activeSession, retainedPrompt);
|
|
683
|
+
retainedPrompt = undefined;
|
|
684
|
+
retryAdmittedPrompt = false;
|
|
685
|
+
retryAttempt = 0;
|
|
686
|
+
terminalScanStartIndex = undefined;
|
|
687
|
+
if (outcome.message === undefined) {
|
|
688
|
+
return { terminalScanStartIndex: activeSession.messages.length };
|
|
689
|
+
}
|
|
690
|
+
nextText = outcome.message;
|
|
691
|
+
continue;
|
|
692
|
+
}
|
|
693
|
+
// No continuation is possible after all, so the retained prompt
|
|
694
|
+
// must not survive into the re-prompt below.
|
|
695
|
+
this.dropRetainedPrompt(activeSession, retainedPrompt);
|
|
696
|
+
retainedPrompt = undefined;
|
|
697
|
+
retryAdmittedPrompt = false;
|
|
698
|
+
}
|
|
699
|
+
const result = await this.promptWithPauseResume(activeSession, nextText, sdkOptions);
|
|
700
|
+
return {
|
|
701
|
+
terminalScanStartIndex: terminalScanStartIndex ?? result.terminalScanStartIndex,
|
|
702
|
+
};
|
|
703
|
+
} catch (error) {
|
|
704
|
+
const errorSettingsManager = retrySettingsManagerFromError(error);
|
|
705
|
+
if (errorSettingsManager !== undefined) this.sessionSettingsManager = errorSettingsManager;
|
|
706
|
+
// An already-unresolved context overflow is terminal for this model:
|
|
707
|
+
// compaction has run and failed, so another identical request cannot
|
|
708
|
+
// help. It stays fallbackable so `handleCandidateFailure()` advances.
|
|
709
|
+
// Same-model retry eligibility is narrower than fallback eligibility:
|
|
710
|
+
// auth, model-unavailable, and request-incompatible failures advance
|
|
711
|
+
// to the next candidate immediately instead of burning the retry
|
|
712
|
+
// budget on a request the same model has already rejected.
|
|
713
|
+
const retryableFailure = isRetryableModelFailure(error);
|
|
714
|
+
const sameCandidateRetryable =
|
|
715
|
+
isRetryableSameModelFailure(error) && !isUnresolvedContextOverflowFailure(error);
|
|
716
|
+
const decision = nextRetryDecision(this.retrySettings(), retryAttempt, sameCandidateRetryable);
|
|
717
|
+
const continuationSession = retryableAgentSession(activeSession);
|
|
718
|
+
const admittedMessages = activeSession.messages.length > messagesBeforeAttempt.length;
|
|
719
|
+
const willRetry =
|
|
720
|
+
decision !== undefined &&
|
|
721
|
+
!this.disposed &&
|
|
722
|
+
this.opts.signal?.aborted !== true &&
|
|
723
|
+
!this.capturedStructuredOutputForAttempt();
|
|
724
|
+
// The continuation path resumes the same turn, so it needs the
|
|
725
|
+
// admitted prompt to stay; the re-prompt path re-sends it.
|
|
726
|
+
const willContinue = continuationSession !== undefined && admittedMessages;
|
|
727
|
+
if (retryableFailure && willRetry) {
|
|
728
|
+
retainedPrompt =
|
|
729
|
+
this.restoreSessionMessages(activeSession, messagesBeforeAttempt, nextText, willContinue) ??
|
|
730
|
+
retainedPrompt;
|
|
731
|
+
}
|
|
732
|
+
if (!willRetry) throw error;
|
|
733
|
+
terminalScanStartIndex ??= this.lastPromptStartIndex ?? messagesBeforeAttempt.length;
|
|
734
|
+
retryAttempt = decision.attempt;
|
|
735
|
+
const state: ThrownErrorRetryState = { controller: new AbortController() };
|
|
736
|
+
let pauseResume: RetryPauseResume | undefined;
|
|
737
|
+
try {
|
|
738
|
+
await this.sleepForThrownErrorRetry(decision.delayMs, state);
|
|
739
|
+
} catch (sleepError) {
|
|
740
|
+
if (sleepError instanceof ThrownErrorRetryPaused) pauseResume = sleepError.resume;
|
|
741
|
+
else {
|
|
742
|
+
if (this.opts.signal?.aborted) throw this.workflowAbortReason();
|
|
743
|
+
if (this.disposed)
|
|
744
|
+
throw new Error(`atomic-workflows: stage "${this.opts.stageName}" session has been disposed`);
|
|
745
|
+
throw sleepError;
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
if (pauseResume !== undefined) {
|
|
749
|
+
const resumed = await pauseResume;
|
|
750
|
+
retryAttempt = 0;
|
|
751
|
+
retryAdmittedPrompt = false;
|
|
752
|
+
terminalScanStartIndex = undefined;
|
|
753
|
+
// A resumed prompt re-sends its text, so the retained input would
|
|
754
|
+
// otherwise be duplicated.
|
|
755
|
+
this.dropRetainedPrompt(activeSession, retainedPrompt);
|
|
756
|
+
retainedPrompt = undefined;
|
|
757
|
+
if (resumed.message === undefined) {
|
|
758
|
+
return { terminalScanStartIndex: activeSession.messages.length };
|
|
759
|
+
}
|
|
760
|
+
nextText = resumed.message;
|
|
761
|
+
continue;
|
|
762
|
+
}
|
|
763
|
+
if (this.disposed)
|
|
764
|
+
throw new Error(`atomic-workflows: stage "${this.opts.stageName}" session has been disposed`);
|
|
765
|
+
if (this.opts.signal?.aborted) throw this.workflowAbortReason();
|
|
766
|
+
// Only resume the existing turn when the restored transcript still
|
|
767
|
+
// satisfies pi-agent-core's continuation contract. A retained
|
|
768
|
+
// non-error assistant tail would otherwise be rejected, so fall back
|
|
769
|
+
// to re-prompting and drop the input that path re-sends.
|
|
770
|
+
retryAdmittedPrompt = willContinue && canContinueFromTranscript(activeSession);
|
|
771
|
+
if (!retryAdmittedPrompt) {
|
|
772
|
+
this.dropRetainedPrompt(activeSession, retainedPrompt);
|
|
773
|
+
retainedPrompt = undefined;
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
private workflowAbortReason(): Error | DOMException | string {
|
|
780
|
+
const reason = this.opts.signal?.reason;
|
|
781
|
+
if (reason instanceof Error || reason instanceof DOMException || typeof reason === "string") return reason;
|
|
782
|
+
return new DOMException("workflow killed", "AbortError");
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
private staleCreationReason(startGeneration: number): Error | DOMException | string {
|
|
786
|
+
if (this.opts.signal?.aborted) return this.workflowAbortReason();
|
|
787
|
+
if (this.abortReasonGeneration > startGeneration && this.abortReason !== undefined) return this.abortReason;
|
|
788
|
+
return new DOMException("stage aborted", "AbortError");
|
|
789
|
+
}
|
|
790
|
+
|
|
336
791
|
private modelCandidates(): Promise<WorkflowResolvedModelCandidate[]> {
|
|
337
792
|
if (!this.candidatesPromise) {
|
|
338
793
|
this.candidatesPromise = buildModelCandidatesFromCatalog({
|
|
@@ -346,10 +801,18 @@ export class StageSessionController {
|
|
|
346
801
|
}
|
|
347
802
|
|
|
348
803
|
private async createInitialSession(consumer: AgentSessionConsumer): Promise<StageSessionRuntime> {
|
|
349
|
-
if (!this.hasExplicitModelFallbackConfig)
|
|
804
|
+
if (!this.hasExplicitModelFallbackConfig) {
|
|
805
|
+
return this.createSessionObservingPause(undefined, consumer).catch((error) =>
|
|
806
|
+
this.createInitialSessionWithRetry(undefined, consumer, { error }),
|
|
807
|
+
);
|
|
808
|
+
}
|
|
350
809
|
const candidates = await this.modelCandidates();
|
|
351
810
|
const first = candidates[0];
|
|
352
|
-
if (first === undefined)
|
|
811
|
+
if (first === undefined) {
|
|
812
|
+
return this.createSessionObservingPause(undefined, consumer).catch((error) =>
|
|
813
|
+
this.createInitialSessionWithRetry(undefined, consumer, { error }),
|
|
814
|
+
);
|
|
815
|
+
}
|
|
353
816
|
if (this.reattachSessionFile !== undefined) {
|
|
354
817
|
const resumed = await this.createSession(undefined, consumer, { restoreSavedModel: true });
|
|
355
818
|
const restoredId = workflowModelId(resumed.model);
|
|
@@ -361,7 +824,174 @@ export class StageSessionController {
|
|
|
361
824
|
}
|
|
362
825
|
this.activeCandidateIndex = 0;
|
|
363
826
|
this.selectedModel = first.id;
|
|
364
|
-
return this.
|
|
827
|
+
return this.createSessionObservingPause(first, consumer).catch((error) =>
|
|
828
|
+
this.createInitialSessionCandidateWalk(candidates, consumer, 0, { error }),
|
|
829
|
+
);
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
/**
|
|
833
|
+
* Creation-only version of the prompt candidate walk.
|
|
834
|
+
*
|
|
835
|
+
* An eagerly created session (`ctx.__ensureSession()`, an eager stage call, a
|
|
836
|
+
* control attach) has no prompt to drive `promptWithFallback()`, so without
|
|
837
|
+
* this a candidate whose creation keeps failing would exhaust its retries and
|
|
838
|
+
* throw while the configured fallbacks were never tried.
|
|
839
|
+
*/
|
|
840
|
+
private async createInitialSessionCandidateWalk(
|
|
841
|
+
candidates: readonly WorkflowResolvedModelCandidate[],
|
|
842
|
+
consumer: AgentSessionConsumer,
|
|
843
|
+
startIndex: number,
|
|
844
|
+
initialFailure: { readonly error: unknown } | undefined,
|
|
845
|
+
): Promise<StageSessionRuntime> {
|
|
846
|
+
let index = startIndex;
|
|
847
|
+
let pendingFailure = initialFailure;
|
|
848
|
+
let lastError: unknown = initialFailure?.error;
|
|
849
|
+
while (index < candidates.length) {
|
|
850
|
+
const candidate = candidates[index]!;
|
|
851
|
+
this.activeCandidateIndex = index;
|
|
852
|
+
this.selectedModel = candidate.id;
|
|
853
|
+
try {
|
|
854
|
+
const created = await this.createSessionWithThrownErrorRetry(candidate, consumer, pendingFailure);
|
|
855
|
+
pendingFailure = undefined;
|
|
856
|
+
if (!isSessionCreationPauseResult(created)) {
|
|
857
|
+
this.notifyModelFallbackMetaChange();
|
|
858
|
+
return created;
|
|
859
|
+
}
|
|
860
|
+
if (created.resumeMessage === undefined) {
|
|
861
|
+
// A pause without a replacement objective cancels this pending
|
|
862
|
+
// creation. Let the next prompt start a fresh creation attempt.
|
|
863
|
+
this.pendingCreationResumeMessage = undefined;
|
|
864
|
+
this.sessionPromise = undefined;
|
|
865
|
+
throw new StageSessionCreationCancelled();
|
|
866
|
+
}
|
|
867
|
+
// The replacement objective belongs to the next prompt; this
|
|
868
|
+
// candidate is still the one being created.
|
|
869
|
+
this.pendingCreationResumeMessage = created.resumeMessage;
|
|
870
|
+
} catch (error) {
|
|
871
|
+
if (error instanceof StageSessionCreationCancelled) throw error;
|
|
872
|
+
pendingFailure = undefined;
|
|
873
|
+
lastError = error;
|
|
874
|
+
if ((await this.handleCandidateFailure(error, candidate, candidates, index)) !== "retry") throw error;
|
|
875
|
+
index += 1;
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
throw lastError ?? new Error(`atomic-workflows: stage "${this.opts.stageName}" has no usable model candidate`);
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
private async createInitialSessionWithRetry(
|
|
882
|
+
candidate: WorkflowResolvedModelCandidate | undefined,
|
|
883
|
+
consumer: AgentSessionConsumer,
|
|
884
|
+
initialFailure?: { readonly error: unknown },
|
|
885
|
+
): Promise<StageSessionRuntime> {
|
|
886
|
+
let pendingFailure = initialFailure;
|
|
887
|
+
while (true) {
|
|
888
|
+
const created = await this.createSessionWithThrownErrorRetry(candidate, consumer, pendingFailure);
|
|
889
|
+
pendingFailure = undefined;
|
|
890
|
+
if (!isSessionCreationPauseResult(created)) return created;
|
|
891
|
+
if (created.resumeMessage === undefined) {
|
|
892
|
+
// A pause without a replacement objective cancels this pending
|
|
893
|
+
// creation. Let the next prompt start a fresh creation attempt.
|
|
894
|
+
this.pendingCreationResumeMessage = undefined;
|
|
895
|
+
this.sessionPromise = undefined;
|
|
896
|
+
throw new StageSessionCreationCancelled();
|
|
897
|
+
}
|
|
898
|
+
this.pendingCreationResumeMessage = created.resumeMessage;
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
/**
|
|
903
|
+
* Latch a paused creation's replacement objective for the next prompt.
|
|
904
|
+
*
|
|
905
|
+
* The created session is already attached, so the pause cannot cancel it
|
|
906
|
+
* without leaking it; the replacement text becomes the next prompt's input.
|
|
907
|
+
*/
|
|
908
|
+
private latchCreationResume(resume: RetryPauseResume): void {
|
|
909
|
+
void resume
|
|
910
|
+
.then(async (resolved) => {
|
|
911
|
+
await resolved.runnerOwnedDeliverySettlement;
|
|
912
|
+
if (resolved.message !== undefined) this.pendingCreationResumeMessage = resolved.message;
|
|
913
|
+
})
|
|
914
|
+
.catch(() => {});
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
/**
|
|
918
|
+
* Create while a controlled pause can still be observed.
|
|
919
|
+
*
|
|
920
|
+
* `requestPause()` latches its resume into every registered creation observer,
|
|
921
|
+
* so a pause that both starts and finishes while the adapter is still in
|
|
922
|
+
* flight is caught. Checking `currentResume()` after the await would miss it,
|
|
923
|
+
* because completing a resume clears the pause request.
|
|
924
|
+
*
|
|
925
|
+
* The creation promise is returned untouched, and observers are kept out of
|
|
926
|
+
* the thrown-retry set: this must add no microtask hop and must not alter
|
|
927
|
+
* abort or backoff semantics. An attached stream stays observable in the
|
|
928
|
+
* caller's own turn.
|
|
929
|
+
*/
|
|
930
|
+
private createSessionObservingPause(
|
|
931
|
+
candidate: WorkflowResolvedModelCandidate | undefined,
|
|
932
|
+
consumer: AgentSessionConsumer,
|
|
933
|
+
): Promise<StageSessionRuntime> {
|
|
934
|
+
const activePause = this.pauseControl.currentResume();
|
|
935
|
+
const observer: CreationPauseObserver = { pauseResume: activePause };
|
|
936
|
+
if (activePause !== undefined) this.latchCreationResume(activePause);
|
|
937
|
+
this.creationPauseObservers.add(observer);
|
|
938
|
+
const creation = this.createSession(candidate, consumer);
|
|
939
|
+
const settle = (): void => {
|
|
940
|
+
this.creationPauseObservers.delete(observer);
|
|
941
|
+
};
|
|
942
|
+
creation.then(settle, settle);
|
|
943
|
+
return creation;
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
private async createSessionWithThrownErrorRetry(
|
|
947
|
+
candidate: WorkflowResolvedModelCandidate | undefined,
|
|
948
|
+
consumer: AgentSessionConsumer,
|
|
949
|
+
initialFailure?: { readonly error: unknown },
|
|
950
|
+
): Promise<StageSessionRuntime | SessionCreationPauseResult> {
|
|
951
|
+
let retryAttempt = 0;
|
|
952
|
+
let pendingFailure = initialFailure;
|
|
953
|
+
while (true) {
|
|
954
|
+
try {
|
|
955
|
+
if (pendingFailure !== undefined) {
|
|
956
|
+
const failure = pendingFailure;
|
|
957
|
+
pendingFailure = undefined;
|
|
958
|
+
throw failure.error;
|
|
959
|
+
}
|
|
960
|
+
return await this.createSessionObservingPause(candidate, consumer);
|
|
961
|
+
} catch (error) {
|
|
962
|
+
const errorSettingsManager = retrySettingsManagerFromError(error);
|
|
963
|
+
if (errorSettingsManager !== undefined) this.sessionSettingsManager = errorSettingsManager;
|
|
964
|
+
const decision = nextRetryDecision(this.retrySettings(), retryAttempt, isRetryableSameModelFailure(error));
|
|
965
|
+
if (
|
|
966
|
+
decision === undefined ||
|
|
967
|
+
this.disposed ||
|
|
968
|
+
this.opts.signal?.aborted === true ||
|
|
969
|
+
this.capturedStructuredOutputForAttempt()
|
|
970
|
+
) {
|
|
971
|
+
throw error;
|
|
972
|
+
}
|
|
973
|
+
retryAttempt = decision.attempt;
|
|
974
|
+
const state: ThrownErrorRetryState = { controller: new AbortController() };
|
|
975
|
+
try {
|
|
976
|
+
await this.sleepForThrownErrorRetry(decision.delayMs, state);
|
|
977
|
+
} catch (sleepError) {
|
|
978
|
+
if (sleepError instanceof ThrownErrorRetryPaused) {
|
|
979
|
+
const resumed = await sleepError.resume;
|
|
980
|
+
return {
|
|
981
|
+
kind: "paused",
|
|
982
|
+
...(resumed.message === undefined ? {} : { resumeMessage: resumed.message }),
|
|
983
|
+
};
|
|
984
|
+
}
|
|
985
|
+
if (this.opts.signal?.aborted) throw this.workflowAbortReason();
|
|
986
|
+
if (this.disposed)
|
|
987
|
+
throw new Error(`atomic-workflows: stage "${this.opts.stageName}" session has been disposed`);
|
|
988
|
+
throw sleepError;
|
|
989
|
+
}
|
|
990
|
+
if (this.disposed)
|
|
991
|
+
throw new Error(`atomic-workflows: stage "${this.opts.stageName}" session has been disposed`);
|
|
992
|
+
if (this.opts.signal?.aborted) throw this.workflowAbortReason();
|
|
993
|
+
}
|
|
994
|
+
}
|
|
365
995
|
}
|
|
366
996
|
|
|
367
997
|
private createSession(
|
|
@@ -384,6 +1014,7 @@ export class StageSessionController {
|
|
|
384
1014
|
consumer: AgentSessionConsumer,
|
|
385
1015
|
resumeOptions?: { restoreSavedModel?: boolean },
|
|
386
1016
|
): Promise<StageSessionRuntime> {
|
|
1017
|
+
const startGeneration = this.abortGeneration;
|
|
387
1018
|
this.applyCandidateThinking(candidate);
|
|
388
1019
|
const stageOptions = buildStageSessionOptions({
|
|
389
1020
|
effectiveStageOptions: this.effectiveStageOptions,
|
|
@@ -392,22 +1023,37 @@ export class StageSessionController {
|
|
|
392
1023
|
reattachSessionFile: this.reattachSessionFile,
|
|
393
1024
|
sharedModelRuntime: this.sharedModelRuntime,
|
|
394
1025
|
});
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
1026
|
+
let created: StageSessionRuntime | StageSessionCreateResult;
|
|
1027
|
+
try {
|
|
1028
|
+
created = this.opts.adapters.agentSession
|
|
1029
|
+
? await this.opts.adapters.agentSession.create(
|
|
1030
|
+
stripWorkflowOnlyOptions(
|
|
1031
|
+
stageOptions,
|
|
1032
|
+
this.opts.defaultSessionDir,
|
|
1033
|
+
this.meta,
|
|
1034
|
+
) as StageSessionCreateOptions,
|
|
1035
|
+
{
|
|
1036
|
+
...this.meta,
|
|
1037
|
+
stageOptions,
|
|
1038
|
+
...(this.sharedOrchestrationContext !== undefined
|
|
1039
|
+
? { orchestrationContext: this.sharedOrchestrationContext }
|
|
1040
|
+
: {}),
|
|
1041
|
+
},
|
|
1042
|
+
)
|
|
1043
|
+
: missingAdapter(consumer);
|
|
1044
|
+
} catch (error) {
|
|
1045
|
+
if (this.disposed || this.opts.signal?.aborted === true || this.abortGeneration !== startGeneration)
|
|
1046
|
+
throw this.disposed
|
|
1047
|
+
? new Error(`atomic-workflows: stage "${this.opts.stageName}" session has been disposed`)
|
|
1048
|
+
: this.staleCreationReason(startGeneration);
|
|
1049
|
+
throw error;
|
|
1050
|
+
}
|
|
1051
|
+
if (this.disposed || this.opts.signal?.aborted === true || this.abortGeneration !== startGeneration) {
|
|
1052
|
+
await disposeStageSession(normalizeSessionCreateResult(created).session).catch(() => {});
|
|
1053
|
+
if (this.disposed)
|
|
1054
|
+
throw new Error(`atomic-workflows: stage "${this.opts.stageName}" session has been disposed`);
|
|
1055
|
+
throw this.staleCreationReason(startGeneration);
|
|
1056
|
+
}
|
|
411
1057
|
return attachCreatedStageSession(created, this.disposed, this.opts.stageName, (result) =>
|
|
412
1058
|
this.attachSession(result),
|
|
413
1059
|
);
|
|
@@ -453,11 +1099,15 @@ export class StageSessionController {
|
|
|
453
1099
|
}
|
|
454
1100
|
|
|
455
1101
|
private async disposeCurrentSession(): Promise<void> {
|
|
1102
|
+
this.abortThrownErrorRetries(new Error(`atomic-workflows: stage "${this.opts.stageName}" session was replaced`));
|
|
456
1103
|
const current = this.session;
|
|
457
1104
|
this.messageAdmission.reset();
|
|
458
1105
|
this.replacement.retire(current);
|
|
459
1106
|
this.session = undefined;
|
|
460
|
-
|
|
1107
|
+
// A candidate walk still advancing owns the shared creation promise: clearing
|
|
1108
|
+
// it here would let a concurrent caller start a second walk, duplicating
|
|
1109
|
+
// provider work and leaking whichever session lost the race.
|
|
1110
|
+
if (this.sessionPromise !== this.ownedCreationPromise) this.sessionPromise = undefined;
|
|
461
1111
|
this.sessionSettingsManager = undefined;
|
|
462
1112
|
this.resumeCurrentSession = false;
|
|
463
1113
|
for (const unsubscribe of this.listenerUnsubscribes.values()) unsubscribe();
|
|
@@ -526,7 +1176,7 @@ export class StageSessionController {
|
|
|
526
1176
|
const resumedLabel = this.selectedModel ?? workflowModelId(resumedSession.model) ?? candidates[0]!.id;
|
|
527
1177
|
this.notifyModelFallbackMetaChange();
|
|
528
1178
|
try {
|
|
529
|
-
const { terminalScanStartIndex } = await this.
|
|
1179
|
+
const { terminalScanStartIndex } = await this.promptWithThrownErrorRetry(resumedSession, text, sdkOptions);
|
|
530
1180
|
const terminalFailure = latestTerminalAssistantFailureSince(resumedSession.messages, terminalScanStartIndex);
|
|
531
1181
|
if (terminalFailure === undefined || this.capturedStructuredOutputForAttempt()) {
|
|
532
1182
|
this.modelAttempts.push({ model: resumedLabel, success: true });
|