@bastani/atomic 0.9.14-alpha.1 → 0.9.14-alpha.3
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 +60 -0
- package/README.md +3 -3
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/mcp/CHANGELOG.md +6 -0
- package/dist/builtin/mcp/package.json +4 -4
- package/dist/builtin/subagents/CHANGELOG.md +20 -0
- package/dist/builtin/subagents/README.md +6 -4
- package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
- package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
- package/dist/builtin/subagents/agents/codebase-locator.md +1 -1
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +1 -1
- package/dist/builtin/subagents/agents/codebase-pattern-finder.md +1 -1
- package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
- package/dist/builtin/subagents/agents/codebase-research-locator.md +1 -1
- package/dist/builtin/subagents/agents/debugger.md +1 -1
- package/dist/builtin/subagents/agents/worker.md +1 -1
- package/dist/builtin/subagents/package.json +6 -5
- package/dist/builtin/subagents/src/agents/agent-discovery.ts +17 -11
- package/dist/builtin/subagents/src/agents/agent-loaders.ts +115 -43
- package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +10 -8
- package/dist/builtin/subagents/src/agents/agent-management.ts +8 -7
- package/dist/builtin/subagents/src/agents/agent-overrides.ts +2 -2
- package/dist/builtin/subagents/src/agents/agent-scope.ts +1 -1
- package/dist/builtin/subagents/src/agents/agent-selection.ts +1 -1
- package/dist/builtin/subagents/src/agents/agent-serializer.ts +24 -3
- package/dist/builtin/subagents/src/agents/agent-types.ts +3 -1
- package/dist/builtin/subagents/src/agents/agents.ts +7 -5
- package/dist/builtin/subagents/src/agents/frontmatter.ts +67 -22
- package/dist/builtin/subagents/src/agents/identity.ts +1 -1
- package/dist/builtin/subagents/src/agents/skills-paths.ts +1 -1
- package/dist/builtin/subagents/src/agents/skills.ts +64 -6
- package/dist/builtin/subagents/src/extension/config.ts +1 -1
- package/dist/builtin/subagents/src/extension/control-notices.ts +2 -2
- package/dist/builtin/subagents/src/extension/doctor.ts +15 -5
- package/dist/builtin/subagents/src/extension/fanout-child.ts +12 -12
- package/dist/builtin/subagents/src/extension/index.ts +23 -23
- package/dist/builtin/subagents/src/extension/notification-content.ts +1 -1
- package/dist/builtin/subagents/src/extension/schemas.ts +1 -1
- package/dist/builtin/subagents/src/extension/startup-maintenance.ts +3 -3
- package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +3 -3
- package/dist/builtin/subagents/src/intercom/result-intercom.ts +1 -1
- package/dist/builtin/subagents/src/intercom/supervisor-authorization.ts +1 -1
- package/dist/builtin/subagents/src/runs/foreground/completion-notification.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/execution-detach-reservations.ts +1 -1
- package/dist/builtin/subagents/src/runs/foreground/execution-intercom-detach.ts +3 -3
- package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +1 -1
- package/dist/builtin/subagents/src/runs/foreground/execution-updates.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/execution-utils.ts +1 -1
- package/dist/builtin/subagents/src/runs/foreground/execution.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts +27 -11
- package/dist/builtin/subagents/src/runs/foreground/notify.ts +3 -3
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +11 -11
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +3 -3
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +15 -14
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +19 -19
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +14 -13
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +9 -9
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +7 -7
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-worktree.ts +6 -6
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +24 -23
- package/dist/builtin/subagents/src/runs/inprocess/control-registry.ts +1 -1
- package/dist/builtin/subagents/src/runs/inprocess/control-status.ts +3 -3
- package/dist/builtin/subagents/src/runs/inprocess/index.ts +3 -3
- package/dist/builtin/subagents/src/runs/inprocess/prompt-behavior.ts +17 -8
- package/dist/builtin/subagents/src/runs/inprocess/runner.ts +60 -12
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-api.ts +8 -8
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-control.ts +3 -3
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-core.ts +4 -4
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-projection.ts +4 -4
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-registry.ts +5 -5
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-rendering.ts +3 -3
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-sanitize.ts +3 -3
- package/dist/builtin/subagents/src/runs/inprocess.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/long-running-guard.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/model-candidate-filter.ts +3 -3
- package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +2 -2
- package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/single-output.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/subagent-control.ts +1 -1
- package/dist/builtin/subagents/src/shared/artifacts.ts +2 -2
- package/dist/builtin/subagents/src/shared/event-jsonl-writer.ts +1 -1
- package/dist/builtin/subagents/src/shared/fast-mode.ts +1 -1
- package/dist/builtin/subagents/src/shared/formatters.ts +2 -2
- package/dist/builtin/subagents/src/shared/jsonl-writer.ts +1 -1
- package/dist/builtin/subagents/src/shared/model-resolution.ts +1 -1
- package/dist/builtin/subagents/src/shared/session-tokens.ts +1 -1
- package/dist/builtin/subagents/src/shared/settings.ts +4 -4
- package/dist/builtin/subagents/src/shared/status-format.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-config.ts +16 -4
- package/dist/builtin/subagents/src/shared/types-depth.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-nested.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-output.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-results.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-runtime.ts +1 -1
- package/dist/builtin/subagents/src/shared/types.ts +6 -6
- package/dist/builtin/subagents/src/shared/utils.ts +3 -3
- package/dist/builtin/subagents/src/slash/prompt-template-bridge.ts +1 -1
- package/dist/builtin/subagents/src/slash/slash-bridge.ts +3 -3
- package/dist/builtin/subagents/src/slash/slash-commands.ts +6 -6
- package/dist/builtin/subagents/src/slash/slash-live-state.ts +3 -3
- package/dist/builtin/subagents/src/tui/render-event-formatting.ts +2 -2
- package/dist/builtin/subagents/src/tui/render-layout.ts +1 -1
- package/dist/builtin/subagents/src/tui/render-progress.ts +2 -2
- package/dist/builtin/subagents/src/tui/render-result-compact.ts +7 -7
- package/dist/builtin/subagents/src/tui/render-result.ts +10 -10
- package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -1
- package/dist/builtin/subagents/src/tui/render-status-progress.ts +5 -5
- package/dist/builtin/subagents/src/tui/render.ts +4 -4
- package/dist/builtin/web-access/CHANGELOG.md +6 -0
- package/dist/builtin/web-access/package.json +3 -3
- package/dist/builtin/workflows/CHANGELOG.md +57 -0
- package/dist/builtin/workflows/README.md +31 -9
- package/dist/builtin/workflows/builtin/adversarial-verification-runner.ts +16 -5
- package/dist/builtin/workflows/builtin/generate-and-filter-runner.ts +12 -4
- package/dist/builtin/workflows/builtin/goal-models.ts +10 -10
- package/dist/builtin/workflows/builtin/index.d.ts +0 -4
- package/dist/builtin/workflows/builtin/loop-until-done-runner.ts +4 -2
- package/dist/builtin/workflows/builtin/open-claude-design-live-protocol.ts +305 -0
- package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +115 -171
- package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +10 -25
- package/dist/builtin/workflows/builtin/open-claude-design-setup.ts +19 -86
- package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +0 -6
- package/dist/builtin/workflows/builtin/open-claude-design.d.ts +0 -5
- package/dist/builtin/workflows/builtin/open-claude-design.ts +7 -15
- package/dist/builtin/workflows/builtin/ralph-models.ts +29 -29
- package/dist/builtin/workflows/builtin/tournament-runner.ts +6 -3
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/skills/impeccable/SKILL.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_asset_producer.toml +25 -31
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_documenter.toml +1 -0
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_finish_reviewer.toml +16 -10
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_manual_edit_applier.toml +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/android.md +6 -0
- package/dist/builtin/workflows/skills/impeccable/reference/animate.md +3 -0
- package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +3 -1
- package/dist/builtin/workflows/skills/impeccable/reference/craft-floor.md +6 -1
- package/dist/builtin/workflows/skills/impeccable/reference/critique.md +18 -2
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/asset-producer.md +24 -30
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/documenter.md +1 -0
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/finish-reviewer.md +16 -10
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/manual-edit-applier.md +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/distill.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/doctor.md +1 -0
- package/dist/builtin/workflows/skills/impeccable/reference/document.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/extract.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +12 -6
- package/dist/builtin/workflows/skills/impeccable/reference/init.md +12 -3
- package/dist/builtin/workflows/skills/impeccable/reference/ios.md +6 -0
- package/dist/builtin/workflows/skills/impeccable/reference/live-setup.md +102 -0
- package/dist/builtin/workflows/skills/impeccable/reference/live.md +113 -521
- package/dist/builtin/workflows/skills/impeccable/reference/new-work.md +39 -26
- package/dist/builtin/workflows/skills/impeccable/reference/overdrive.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/polish.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/quieter.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/visualize.md +25 -11
- package/dist/builtin/workflows/skills/impeccable/scripts/concept-seed.mjs +332 -221
- package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +10 -19
- package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +91 -38
- package/dist/builtin/workflows/skills/impeccable/scripts/critique-storage.mjs +19 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +56 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +10 -16
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +140 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +1174 -694
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns.mjs +1 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +5 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +431 -45
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +10 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +47 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/node/file-system.mjs +23 -22
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +0 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +384 -384
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/color.mjs +466 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/doctor.mjs +2 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/embed-prompt.mjs +270 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/generate-image.mjs +51 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +70 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +336 -90
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/composition-catalog.mjs +38 -3
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/concept-catalog.mjs +77 -11
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/design-parser.mjs +102 -19
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +44 -59
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/is-generated.mjs +3 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/open-system-browser.mjs +57 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/roll-selection.mjs +369 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness-deep.mjs +31 -3
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness.mjs +73 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/live/accept-css.mjs +617 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/accept-verify.mjs +71 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/browser-script-parts.mjs +29 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/live/event-validation.mjs +54 -7
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/astro.mjs +47 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/detect-utils.mjs +157 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/index.mjs +143 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/journal.mjs +205 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/nextjs.mjs +49 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/nuxt.mjs +170 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/script-src.mjs +26 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/static-html.mjs +26 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/sveltekit.mjs +71 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/tag-strategy.mjs +247 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/tanstack-start.mjs +70 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/vite-generic.mjs +42 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/instructions.mjs +169 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/roots.mjs +670 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/session-store.mjs +232 -35
- package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-ast.mjs +969 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-component.mjs +621 -74
- package/dist/builtin/workflows/skills/impeccable/scripts/live/sveltekit-adapter.mjs +66 -28
- package/dist/builtin/workflows/skills/impeccable/scripts/live/tanstack-adapter.mjs +12 -12
- package/dist/builtin/workflows/skills/impeccable/scripts/live/ui-surfaces.mjs +75 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/vocabulary.mjs +135 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +23 -37
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +945 -115
- package/dist/builtin/workflows/skills/impeccable/scripts/live-complete.mjs +33 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/live-copy-edit-agent.mjs +132 -15
- package/dist/builtin/workflows/skills/impeccable/scripts/live-inject.mjs +173 -425
- package/dist/builtin/workflows/skills/impeccable/scripts/live-insert.mjs +2 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live-poll.mjs +16 -3
- package/dist/builtin/workflows/skills/impeccable/scripts/live-resume.mjs +39 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/live-server.mjs +194 -27
- package/dist/builtin/workflows/skills/impeccable/scripts/live-status.mjs +10 -4
- package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +50 -31
- package/dist/builtin/workflows/skills/impeccable/scripts/live.mjs +91 -28
- package/dist/builtin/workflows/skills/impeccable/scripts/pin.mjs +8 -5
- package/dist/builtin/workflows/skills/impeccable/scripts/serve-question.mjs +759 -109
- package/dist/builtin/workflows/src/durable/completed-catalog.ts +10 -0
- package/dist/builtin/workflows/src/durable/dbos-backend.ts +30 -17
- package/dist/builtin/workflows/src/durable/dbos-envelope.ts +14 -0
- package/dist/builtin/workflows/src/durable/dbos-lifecycle.ts +60 -57
- package/dist/builtin/workflows/src/durable/dbos-process-owner.ts +87 -0
- package/dist/builtin/workflows/src/durable/dbos-registration-diagnostics.ts +113 -0
- package/dist/builtin/workflows/src/durable/factory.ts +11 -8
- package/dist/builtin/workflows/src/durable/tool-failure-checkpoint.ts +5 -0
- package/dist/builtin/workflows/src/durable/tool-primitive.ts +186 -20
- package/dist/builtin/workflows/src/durable/types.ts +4 -0
- package/dist/builtin/workflows/src/engine/run-tool-control-registry.ts +9 -1
- package/dist/builtin/workflows/src/extension/adopt-session-run-state.ts +20 -0
- package/dist/builtin/workflows/src/extension/background-ui-adapter.ts +9 -30
- package/dist/builtin/workflows/src/extension/extension-factory.ts +3 -0
- package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +28 -10
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +2736 -1444
- package/dist/builtin/workflows/src/extension/workflow-prompts.ts +4 -1
- package/dist/builtin/workflows/src/extension/workflow-schema.ts +29 -5
- package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +32 -1
- package/dist/builtin/workflows/src/runs/background/cancellation-registry.ts +10 -1
- package/dist/builtin/workflows/src/runs/background/job-tracker.ts +10 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +32 -4
- package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +19 -20
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +27 -20
- package/dist/builtin/workflows/src/runs/foreground/executor.ts +4 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +31 -1
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +41 -10
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-messages.ts +48 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-output.ts +4 -1
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-structured-output.ts +45 -12
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +15 -1
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +15 -1
- package/dist/builtin/workflows/src/shared/graph-store-snapshot.ts +14 -2
- package/dist/builtin/workflows/src/shared/prompt-answer.ts +130 -0
- package/dist/builtin/workflows/src/shared/session-scoped-singleton.ts +98 -0
- package/dist/builtin/workflows/src/shared/stage-ui-broker.ts +9 -1
- package/dist/builtin/workflows/src/shared/store-factory.ts +9 -1
- package/dist/builtin/workflows/src/shared/store-public-types.ts +2 -1
- package/dist/builtin/workflows/src/shared/store-tool-node-methods.ts +7 -0
- package/dist/builtin/workflows/src/shared/store-types.ts +18 -1
- package/dist/builtin/workflows/src/shared/tool-payload-bounds.ts +576 -0
- package/dist/builtin/workflows/src/tui/graph-theme.ts +8 -1
- package/dist/builtin/workflows/src/tui/graph-view-constants.ts +11 -0
- package/dist/builtin/workflows/src/tui/graph-view-input.ts +100 -5
- package/dist/builtin/workflows/src/tui/graph-view-layout.ts +42 -11
- package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +55 -6
- package/dist/builtin/workflows/src/tui/graph-view-render.ts +71 -6
- package/dist/builtin/workflows/src/tui/graph-view-state.ts +43 -0
- package/dist/builtin/workflows/src/tui/keybindings-adapter.ts +2 -0
- package/dist/builtin/workflows/src/tui/node-card.ts +5 -1
- package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +11 -2
- package/dist/builtin/workflows/src/tui/stage-chat-view-custom-ui.ts +7 -8
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +36 -10
- package/dist/builtin/workflows/src/tui/switcher.ts +11 -4
- package/dist/builtin/workflows/src/tui/tool-detail.ts +348 -0
- package/dist/builtin/workflows/src/tui/workflow-status.ts +5 -2
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +11 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth-check.d.ts +1 -1
- package/dist/cli/auth-check.js.map +1 -1
- package/dist/cli/credential-print.d.ts +1 -1
- package/dist/cli/credential-print.js.map +1 -1
- package/dist/cli/list-models.d.ts +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/startup-ui.d.ts +9 -0
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +7 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/core/agent-session-custom-message-commit.js +2 -2
- package/dist/core/agent-session-custom-message-commit.js.map +1 -1
- package/dist/core/agent-session-export.d.ts +6 -1
- package/dist/core/agent-session-export.d.ts.map +1 -1
- package/dist/core/agent-session-export.js +6 -3
- package/dist/core/agent-session-export.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +6 -4
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +5 -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-prompt.d.ts +12 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +31 -10
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-runtime-auth.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-skill-block.d.ts +1 -0
- package/dist/core/agent-session-skill-block.d.ts.map +1 -1
- package/dist/core/agent-session-skill-block.js +18 -2
- package/dist/core/agent-session-skill-block.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-types.d.ts +2 -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 +1 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/atomic-guide-command.js +2 -2
- package/dist/core/atomic-guide-command.js.map +1 -1
- package/dist/core/builtin-packages.d.ts.map +1 -1
- package/dist/core/builtin-packages.js +0 -6
- package/dist/core/builtin-packages.js.map +1 -1
- package/dist/core/cloudflare-gateway-binding.d.ts +11 -0
- package/dist/core/cloudflare-gateway-binding.d.ts.map +1 -0
- package/dist/core/cloudflare-gateway-binding.js +11 -0
- package/dist/core/cloudflare-gateway-binding.js.map +1 -0
- package/dist/core/codex-fast-mode-transport.d.ts +12 -0
- package/dist/core/codex-fast-mode-transport.d.ts.map +1 -0
- package/dist/core/codex-fast-mode-transport.js +130 -0
- package/dist/core/codex-fast-mode-transport.js.map +1 -0
- package/dist/core/codex-fast-mode.d.ts +20 -6
- package/dist/core/codex-fast-mode.d.ts.map +1 -1
- package/dist/core/codex-fast-mode.js +111 -3
- package/dist/core/codex-fast-mode.js.map +1 -1
- package/dist/core/diagnostics.d.ts +4 -0
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/diagnostics.js.map +1 -1
- package/dist/core/event-bus.d.ts +12 -0
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js +22 -0
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/experimental.d.ts +25 -0
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js +24 -0
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/export-html/template-js/tree-filter-render.js +4 -3
- package/dist/core/export-html/template.js +4 -3
- package/dist/core/extension-session-state.d.ts +28 -0
- package/dist/core/extension-session-state.d.ts.map +1 -0
- package/dist/core/extension-session-state.js +55 -0
- package/dist/core/extension-session-state.js.map +1 -0
- package/dist/core/extensions/api-types.d.ts +6 -0
- 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 +4 -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/loader-api.d.ts +1 -1
- package/dist/core/extensions/loader-api.d.ts.map +1 -1
- package/dist/core/extensions/loader-api.js +16 -10
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +12 -1
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/runner-context.d.ts +2 -0
- package/dist/core/extensions/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js +8 -0
- package/dist/core/extensions/runner-context.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +1 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +3 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +3 -0
- package/dist/core/extensions/runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/runtime-types.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +5 -0
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/keybindings.d.ts +24 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +6 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-config.d.ts +5 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +1 -0
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-cli.d.ts +1 -1
- package/dist/core/model-resolver-cli.js.map +1 -1
- package/dist/core/model-resolver-defaults.js +3 -3
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/model-resolver-initial.d.ts +1 -1
- package/dist/core/model-resolver-initial.js.map +1 -1
- package/dist/core/model-resolver-scope.d.ts +1 -1
- package/dist/core/model-resolver-scope.js.map +1 -1
- package/dist/core/model-runtime.d.ts +54 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +96 -13
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/oauth-login.js.map +1 -1
- package/dist/core/project-trust.d.ts +10 -0
- package/dist/core/project-trust.d.ts.map +1 -1
- package/dist/core/project-trust.js +12 -0
- package/dist/core/project-trust.js.map +1 -1
- package/dist/core/resource-loader-assets.d.ts.map +1 -1
- package/dist/core/resource-loader-assets.js +14 -5
- package/dist/core/resource-loader-assets.js.map +1 -1
- package/dist/core/resource-loader-core.d.ts +3 -0
- package/dist/core/resource-loader-core.d.ts.map +1 -1
- package/dist/core/resource-loader-core.js +5 -0
- package/dist/core/resource-loader-core.js.map +1 -1
- package/dist/core/resource-loader-internals.d.ts +2 -0
- package/dist/core/resource-loader-internals.d.ts.map +1 -1
- package/dist/core/resource-loader-internals.js.map +1 -1
- package/dist/core/resource-loader-reload.d.ts.map +1 -1
- package/dist/core/resource-loader-reload.js +2 -0
- package/dist/core/resource-loader-reload.js.map +1 -1
- package/dist/core/resource-loader-types.d.ts +2 -0
- package/dist/core/resource-loader-types.d.ts.map +1 -1
- package/dist/core/resource-loader-types.js.map +1 -1
- package/dist/core/resource-loader.d.ts +2 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +1 -0
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk-types.d.ts +7 -6
- 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 +17 -6
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-core.d.ts +7 -1
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js +11 -2
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-entries.d.ts +2 -2
- package/dist/core/session-manager-entries.d.ts.map +1 -1
- package/dist/core/session-manager-entries.js +6 -4
- package/dist/core/session-manager-entries.js.map +1 -1
- package/dist/core/session-manager-list.d.ts.map +1 -1
- package/dist/core/session-manager-list.js +5 -1
- package/dist/core/session-manager-list.js.map +1 -1
- package/dist/core/session-manager-types.d.ts +25 -2
- package/dist/core/session-manager-types.d.ts.map +1 -1
- package/dist/core/session-manager-types.js.map +1 -1
- package/dist/core/session-manager.d.ts +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +1 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +8 -0
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-manager-ui-accessors.d.ts +3 -1
- package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-ui-accessors.js +9 -0
- package/dist/core/settings-manager-ui-accessors.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-types.d.ts +4 -0
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/skill-catalog.d.ts +35 -0
- package/dist/core/skill-catalog.d.ts.map +1 -0
- package/dist/core/skill-catalog.js +264 -0
- package/dist/core/skill-catalog.js.map +1 -0
- package/dist/core/skills-async.d.ts.map +1 -1
- package/dist/core/skills-async.js +12 -6
- package/dist/core/skills-async.js.map +1 -1
- package/dist/core/skills.d.ts +2 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +8 -5
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -5
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.js +2 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/ask-user-question/ask-user-question.d.ts +7 -3
- package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/ask-user-question.js +15 -10
- package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/build-questionnaire.d.ts +1 -0
- package/dist/core/tools/ask-user-question/state/build-questionnaire.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/state/build-questionnaire.js +1 -0
- package/dist/core/tools/ask-user-question/state/build-questionnaire.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/key-router.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/state/key-router.js +3 -1
- package/dist/core/tools/ask-user-question/state/key-router.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts +3 -0
- 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 +3 -0
- package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/state-reducer.d.ts +1 -0
- package/dist/core/tools/ask-user-question/state/state-reducer.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/state/state-reducer.js +3 -1
- package/dist/core/tools/ask-user-question/state/state-reducer.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/chat-row-view.d.ts +2 -0
- package/dist/core/tools/ask-user-question/view/components/chat-row-view.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/chat-row-view.js +1 -0
- package/dist/core/tools/ask-user-question/view/components/chat-row-view.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.d.ts +3 -0
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.js +2 -1
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +2 -0
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-batch.d.ts +33 -0
- package/dist/core/tools/edit-batch.d.ts.map +1 -0
- package/dist/core/tools/edit-batch.js +89 -0
- package/dist/core/tools/edit-batch.js.map +1 -0
- package/dist/core/tools/edit.d.ts +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +100 -42
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +3 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.js +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/hashline-engine/format.d.ts +2 -0
- package/dist/core/tools/hashline-engine/format.d.ts.map +1 -1
- package/dist/core/tools/hashline-engine/format.js +4 -2
- package/dist/core/tools/hashline-engine/format.js.map +1 -1
- package/dist/core/tools/hashline-engine/messages.d.ts +2 -0
- package/dist/core/tools/hashline-engine/messages.d.ts.map +1 -1
- package/dist/core/tools/hashline-engine/messages.js +4 -2
- package/dist/core/tools/hashline-engine/messages.js.map +1 -1
- package/dist/core/tools/hashline-engine/parser.d.ts.map +1 -1
- package/dist/core/tools/hashline-engine/parser.js +16 -4
- package/dist/core/tools/hashline-engine/parser.js.map +1 -1
- package/dist/core/tools/hashline-engine/tokenizer.d.ts.map +1 -1
- package/dist/core/tools/hashline-engine/tokenizer.js +37 -27
- package/dist/core/tools/hashline-engine/tokenizer.js.map +1 -1
- package/dist/core/tools/hashline.d.ts.map +1 -1
- package/dist/core/tools/hashline.js +8 -2
- package/dist/core/tools/hashline.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +2 -0
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +8 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/search.d.ts.map +1 -1
- package/dist/core/tools/search.js +2 -0
- package/dist/core/tools/search.js.map +1 -1
- package/dist/core/tools/todos.d.ts +3 -12
- package/dist/core/tools/todos.d.ts.map +1 -1
- package/dist/core/tools/todos.js +19 -4
- package/dist/core/tools/todos.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +2 -0
- package/dist/core/tools/write.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/main-runtime-api-key.d.ts +1 -1
- package/dist/main-runtime-api-key.js.map +1 -1
- package/dist/main-session-options.d.ts +1 -1
- package/dist/main-session-options.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +10 -2
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.d.ts +8 -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 +8 -0
- package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.d.ts +26 -0
- package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.js +38 -0
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.d.ts +37 -0
- package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.js +54 -1
- package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
- package/dist/modes/interactive/components/fast-mode-selector.js +1 -1
- package/dist/modes/interactive/components/fast-mode-selector.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +2 -1
- 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.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts +4 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +4 -0
- package/dist/modes/interactive/components/session-selector-search.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 +3 -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 +7 -0
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts +3 -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/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +12 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +5 -4
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive/interactive-bash-compact.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-bash-compact.js +2 -2
- package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-custom-ui.js +2 -2
- package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +38 -3
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +75 -10
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +7 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-types.d.ts +2 -0
- package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
- package/dist/modes/interactive/interactive-model-catalog-startup.d.ts +8 -1
- package/dist/modes/interactive/interactive-model-catalog-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-model-catalog-startup.js +13 -3
- package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.js +3 -4
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +6 -0
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-resource-disclosure.js +2 -2
- package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +7 -3
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +7 -1
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-slash-commands.js +2 -2
- 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 +34 -9
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-tui.d.ts +18 -1
- package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-tui.js +126 -38
- package/dist/modes/interactive/interactive-tui.js.map +1 -1
- package/dist/modes/interactive/model-catalog-refresh.d.ts +17 -0
- package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
- package/dist/modes/interactive/model-catalog-refresh.js +84 -0
- package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +2 -0
- package/dist/modes/interactive/theme/light.json +2 -0
- package/dist/modes/interactive/theme/theme-class.d.ts +12 -3
- package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-class.js +6 -1
- package/dist/modes/interactive/theme/theme-class.js.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts +10 -2
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js +23 -10
- 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 +8 -0
- package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.js +3 -1
- package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.json +9 -1
- package/dist/modes/json-event.d.ts +6 -1
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js +17 -2
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.js +5 -4
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
- package/dist/modes/rpc/rpc-responses.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/server/create-harness.d.ts.map +1 -1
- package/dist/server/create-harness.js +11 -0
- package/dist/server/create-harness.js.map +1 -1
- package/dist/utils/abort.d.ts +9 -0
- package/dist/utils/abort.d.ts.map +1 -0
- package/dist/utils/abort.js +19 -0
- package/dist/utils/abort.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +16 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +19 -19
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/custom-provider.md +9 -8
- package/docs/development.md +0 -1
- package/docs/docs.json +0 -1
- package/docs/environment-variables.md +3 -0
- package/docs/extensions.md +73 -2
- package/docs/json.md +3 -1
- package/docs/keybindings.md +7 -3
- package/docs/models/artificial-analysis-index.md +2 -2
- package/docs/models/model-selection.md +32 -23
- package/docs/models/pareto-efficiency.md +25 -24
- package/docs/providers.md +95 -2
- package/docs/quickstart.md +4 -2
- package/docs/rpc.md +21 -7
- package/docs/sdk.md +26 -1
- package/docs/session-format.md +5 -2
- package/docs/settings.md +34 -3
- package/docs/skills.md +16 -1
- package/docs/terminal-setup.md +15 -2
- package/docs/themes.md +22 -4
- package/docs/tools.md +4 -2
- package/docs/tui.md +2 -0
- package/docs/usage.md +5 -4
- package/docs/workflows.md +65 -22
- package/npm-shrinkwrap.json +247 -253
- package/package.json +11 -11
- package/dist/builtin/i-have-adhd/CHANGELOG.md +0 -30
- package/dist/builtin/i-have-adhd/LICENSE +0 -21
- package/dist/builtin/i-have-adhd/README.md +0 -18
- package/dist/builtin/i-have-adhd/index.ts +0 -238
- package/dist/builtin/i-have-adhd/package.json +0 -56
- package/dist/builtin/i-have-adhd/skills/i-have-adhd/SKILL.md +0 -140
- package/dist/builtin/workflows/builtin/open-claude-design-feedback.ts +0 -359
- package/dist/builtin/workflows/skills/impeccable/scripts/live/ui-core.mjs +0 -180
- package/docs/i-have-adhd.md +0 -36
|
@@ -3,6 +3,7 @@ export const WORKFLOW_TOOL_DESCRIPTION =
|
|
|
3
3
|
"when workflow execution fits but another shape would better achieve the task, author a custom TypeScript workflow({...}) inline with normal coding tools, reload it, and run it; after successfully creating and reloading a newly authored custom workflow, report the folder containing its generated code as 'Custom workflow created. You can inspect its code at: <workflow-folder-path>'; do this only for newly created custom workflows, never builtin or pre-existing workflows; " +
|
|
4
4
|
"discover with list/get/inputs/models, list session runs with status (no runId; statusFilter narrows the list), inspect status/stages/stage details, " +
|
|
5
5
|
"send prompt answers or steering only while the root workflow is nonterminal, pause/resume/interrupt/quit runs, and reload workflow resources. " +
|
|
6
|
+
"For primitive prompt answers, use booleans or the documented confirm labels, exact case-insensitive select labels or 1-based indexes, and text strings for input/editor; an invalid answer remains pending and returns guidance instead of choosing a default. " +
|
|
6
7
|
"For large stage handoffs, write context to files/artifacts, pass paths via reads, and prompt downstream agents to 'Read the file at <path>...' instead of injecting large previous text. " +
|
|
7
8
|
"Wrap critical parts of run inputs and steering messages in <keepContext>...</keepContext> so compaction preserves them verbatim in the stages that inherit them; tag role constraints, prohibitions, must-hold criteria, and identifiers, not background or bulk reference material. " +
|
|
8
9
|
"For transcripts, prefer status/stages/stage to get sessionFile/transcriptPath, " +
|
|
@@ -50,6 +51,8 @@ export const DEFAULT_PROMPT_GUIDANCE: string[] = [
|
|
|
50
51
|
`**Workflow authoring and handoffs**:
|
|
51
52
|
- When a user asks to create or edit a workflow, clarify only unresolved requirements that materially affect its purpose, inputs, stages, handoffs, validation, success criteria, or starter pattern. Read the workflow docs/examples, implement the TypeScript definition with normal coding tools, reload it, and run representative test inputs before presenting it. Use the create-spec skill when it adds value; it is not mandatory when context is already sufficient.
|
|
52
53
|
- After creating and reloading a newly authored custom workflow, close the loop by stating the folder containing the workflow file just written, for example \`.atomic/workflows/\`, in this shape: \`Custom workflow created. You can inspect its code at: <workflow-folder-path>\`. Do this only for newly created custom workflows, never builtin or pre-existing workflows.
|
|
54
|
+
- Keep a small, readable workflow in one entry file. Do not split short one-use prompts, create one file per stage, add wrapper-only modules, hide the graph across files, or use line counts alone as a module boundary.
|
|
55
|
+
- When a meaningful source boundary improves clarity, reuse, ownership, or testability, keep the graph and control flow in the top-level workflow entry file and extract cohesive concerns such as long or reused prompt builders, shared TypeBox schemas and workflow-specific types, model-policy constants shared by several stages, deterministic helpers with their own testable behavior, or reusable child workflow definitions into a subdirectory below the top-level discovery directory — either one owned by a single workflow or a shared support directory. Project and user discovery scans only top-level \`.ts\`/\`.js\`/\`.mjs\`/\`.cjs\` files in the workflow directory, so those support modules are not scanned as extra top-level workflow candidates; use \`.js\` import extensions from TypeScript source.
|
|
53
56
|
- When creating or editing a workflow that pins an explicit stage \`model\` or \`fallbackModels\`, consult \`packages/coding-agent/docs/models/model-selection.md\` for role-based recommendations, treating benchmark thinking levels as measurement configurations rather than universal workflow defaults, then call \`workflow({ action: "models" })\` to see the models actually present in the user's configured catalog. Use only the catalog's returned \`fullId\` values as model strings, and append a thinking suffix only when that exact level appears in the entry's \`availableThinkingLevels\`; apply the stage role and failure-cost policy independently to the primary and every fallback; treat an absent or empty \`availableThinkingLevels\` as no suffix support rather than inferring one. If a guide-recommended model for the role is unavailable, try another guide-recommended model that is present in the catalog. If the selected model does not support the role's level, choose another catalog model that does or leave the stage unpinned rather than inventing or silently promoting a level. An explicit user request for a level overrides the role default, but never fabricate an unsupported catalog level. If no recommendation intersects with the catalog, leave the stage unpinned rather than inventing a substitute, and mention the limitation, asking the user only if the workflow requires an explicit model choice. If the catalog is empty, continue with unpinned stages, state that no configured models were returned, and do not fabricate model IDs. Do not inspect or infer credentials, environment variables, auth files, token validity, entitlements, or the reason a model is absent; \`isCurrent\` marks the active selection, not a quality recommendation.
|
|
54
57
|
- Consult docs/workflows.md and its starter patterns (Classify-and-act, Fan-out-and-synthesize, Adversarial verification, Generate-and-filter, Tournament, Loop until done, and Stacked implementation slices) when designing a stage graph.
|
|
55
58
|
- Treat workflow composition as a first-class authoring option. Before duplicating stages, inspect reusable workflow modules and builtin exports; import their definitions and invoke them with \`ctx.workflow(...)\`, mapping typed inputs and consuming only declared outputs. Nested workflows can themselves import children, so combine small reusable graphs into a richer parent while respecting \`maxDepth\`.
|
|
@@ -61,7 +64,7 @@ export const DEFAULT_PROMPT_GUIDANCE: string[] = [
|
|
|
61
64
|
- Bounded loops must create distinct tracked work for every iteration; never reopen an ancestor below its downstream work. Stacked implementation slices are unrolled, not looped: each slice gets a fresh child boundary and distinct tracked nodes, and no slice may add an edge back to the current frontier, itself, or an ancestor. If a retained session receives follow-up without new dependency work, keep it as non-topological activity metadata rather than adding a back-edge. Before launch, sketch nodes and dependencies for every branch and loop and reject any proposed parent edge to the node itself or an ancestor.
|
|
62
65
|
- Treat dynamic graph validation during execution, replay, and DBOS hydration as the authoritative cycle boundary. If runtime topology code changes, require incremental edge checks and DBOS hydration validation; prompt guidance and TypeScript types cannot replace those runtime checks.
|
|
63
66
|
- Every workflow invocation automatically receives one stable, non-default Intercom group. Intercom-capable stages inherit it, nested workflows keep the top-level invocation group, and subagents inherit their launching stage's group. Do not mint or thread group names through ordinary workflow definitions. Use an explicit \`group\` only for an intentional override: a named group or \`group: true\` creates a subgroup, while \`group: "default"\` opts into the shared default group. Stages without Intercom access receive no group, and \`contact_supervisor\` still crosses group boundaries for authorized escalation.
|
|
64
|
-
- Prefer \`ctx.tool(name, args, fn)\` for workflow-owned TypeScript operations with side effects, such as filesystem writes, network mutations, and external API actions. It creates a tracked, non-attachable durable graph node before invoking \`fn\`; it may be used before, between, after, or without model stages. A completed \`ctx.tool\` call is durably checkpointed with its serializable result, so resume replays that result without rerunning \`fn\`. For checks that may fail during a bounded repair loop, opt into \`failureMode: "return"\`, branch on the typed outcome, and pass only the needed error fields to the repair stage or artifact yourself; Atomic does not inject failure evidence into later prompts. Cancellation and storage faults still throw. Keep pure computation and side-effect-free transformations as ordinary TypeScript. Do not wrap agent-stage internals or every function call indiscriminately; this rule applies to side effects orchestrated directly by the workflow definition.
|
|
67
|
+
- Prefer \`ctx.tool(name, args, fn)\` for workflow-owned TypeScript operations with side effects, such as filesystem writes, network mutations, and external API actions. It creates a tracked, non-attachable durable graph node before invoking \`fn\`; it may be used before, between, after, or without model stages. A completed \`ctx.tool\` call is durably checkpointed with its serializable result, so resume replays that result without rerunning \`fn\`. For checks that may fail during a bounded repair loop, opt into \`failureMode: "return"\`, branch on the typed outcome, and pass only the needed error fields to the repair stage or artifact yourself; Atomic does not inject failure evidence into later prompts. Retries do not bound a hung callback, so every \`ctx.tool\` callback that starts a child process or performs network I/O MUST set an explicit positive finite \`timeoutMs\` and forward the supplied \`signal\` to cancellable work. A timeout applies per attempt, aborts that attempt's signal, and gives retries a fresh deadline and signal. Cancellation and storage faults still throw. Keep pure computation and side-effect-free transformations as ordinary TypeScript. Do not wrap agent-stage internals or every function call indiscriminately; this rule applies to side effects orchestrated directly by the workflow definition.
|
|
65
68
|
- Pass large stage context through files/artifacts and \`reads\` with an explicit \`Read the file at <path>...\` prompt rather than large \`previous\` payloads or injected session history.
|
|
66
69
|
- Wrap critical stage-prompt content in \`<keepContext>\` / \`</keepContext>\`. Tagged content survives compression verbatim regardless of the compression ratio, and every line of the span including the tag lines is protected. A long-running stage will be compacted, and compaction ranks lines individually: an objective is verbose and restated while the constraint that narrows it is usually one line, so the constraint is the cheaper deletion and what survives reads as broader permission than intended. Tag role constraints that bound a stage to part of the work, acceptance criteria and immutable contracts, explicit prohibitions, and identifiers a stage must not lose such as a target branch, worktree path, or run ID. Do not tag bulk context: protected lines count against the keep target rather than raising it, so a large protected span makes the surrounding transcript compress harder — tag the constraint, not the material it applies to.
|
|
67
70
|
- Separate implementation/review acceptance from explicitly authorized final actions such as PR/MR/review creation, release tagging, deployment, or publication. Stop implementation loops once acceptance is proven and carry a remaining final action separately.
|
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
import { type Static, Type } from "typebox";
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Advertise the JSON value types accepted by workflow-send responses.
|
|
5
|
+
*
|
|
6
|
+
* `Type.Unknown()` emits `{}`, which tells a provider nothing about this
|
|
7
|
+
* property. A retained session shows an assistant tool call that answered a
|
|
8
|
+
* `ctx.ui.confirm` prompt with the string `"true"` rather than a boolean, so
|
|
9
|
+
* naming the accepted types is worth doing. It is not the runtime fix: no
|
|
10
|
+
* inspected host or pi-ai layer converts a boolean to a string, and prompt-kind
|
|
11
|
+
* normalization happens at the pending-prompt boundary, not in provider
|
|
12
|
+
* argument validation.
|
|
13
|
+
*
|
|
14
|
+
* String comes first so validation does not convert text answers to booleans.
|
|
15
|
+
*/
|
|
16
|
+
const WorkflowResponseSchema = Type.Union(
|
|
17
|
+
[
|
|
18
|
+
Type.String(),
|
|
19
|
+
Type.Boolean(),
|
|
20
|
+
Type.Number(),
|
|
21
|
+
Type.Null(),
|
|
22
|
+
Type.Array(Type.Unknown()),
|
|
23
|
+
Type.Record(Type.String(), Type.Unknown()),
|
|
24
|
+
],
|
|
25
|
+
{
|
|
26
|
+
description:
|
|
27
|
+
"Answer payload for a pending stage prompt. Primitive prompts accept text strings, booleans, or numeric select indexes according to the prompt kind; structured prompts may accept JSON arrays or objects.",
|
|
28
|
+
},
|
|
29
|
+
);
|
|
30
|
+
|
|
3
31
|
export const WorkflowParametersSchema = Type.Object(
|
|
4
32
|
{
|
|
5
33
|
workflow: Type.Optional(
|
|
@@ -114,11 +142,7 @@ export const WorkflowParametersSchema = Type.Object(
|
|
|
114
142
|
description: "Text to send to a stage for prompt answers, steering, follow-ups, or resume messages.",
|
|
115
143
|
}),
|
|
116
144
|
),
|
|
117
|
-
response: Type.Optional(
|
|
118
|
-
Type.Unknown({
|
|
119
|
-
description: "Structured response payload for answering a pending stage prompt.",
|
|
120
|
-
}),
|
|
121
|
-
),
|
|
145
|
+
response: Type.Optional(WorkflowResponseSchema),
|
|
122
146
|
delivery: Type.Optional(
|
|
123
147
|
Type.Union(
|
|
124
148
|
[
|
|
@@ -10,6 +10,11 @@ import {
|
|
|
10
10
|
expandedStageLabel,
|
|
11
11
|
expandWorkflowGraph,
|
|
12
12
|
} from "../shared/expanded-workflow-graph.js";
|
|
13
|
+
import {
|
|
14
|
+
coercePrimitivePromptAnswer,
|
|
15
|
+
isPrimitivePrompt,
|
|
16
|
+
primitivePromptAnswerRejection,
|
|
17
|
+
} from "../shared/prompt-answer.js";
|
|
13
18
|
import { coerceStageInputAnswer, hasStageInputAnswerContent, type StageInputAnswer } from "../shared/stage-prompt.js";
|
|
14
19
|
import { stageUiBroker } from "../shared/stage-ui-broker.js";
|
|
15
20
|
import { store } from "../shared/store.js";
|
|
@@ -287,7 +292,33 @@ export async function workflowSendAction(
|
|
|
287
292
|
`Input request ${promptId} was already answered.`,
|
|
288
293
|
);
|
|
289
294
|
}
|
|
290
|
-
const
|
|
295
|
+
const rawPayload = promptPayloadFromArgs(args);
|
|
296
|
+
const pendingPrompt = snapshot?.pendingPrompt;
|
|
297
|
+
const primitivePrompt =
|
|
298
|
+
pendingPrompt?.id === promptId && isPrimitivePrompt(pendingPrompt) ? pendingPrompt : undefined;
|
|
299
|
+
if (primitivePrompt !== undefined) {
|
|
300
|
+
const coercedPayload = coercePrimitivePromptAnswer(primitivePrompt, rawPayload);
|
|
301
|
+
if (!coercedPayload.ok) {
|
|
302
|
+
return workflowSendResult(
|
|
303
|
+
stageRunId,
|
|
304
|
+
stage.stageId,
|
|
305
|
+
"answer",
|
|
306
|
+
"noop",
|
|
307
|
+
primitivePromptAnswerRejection(promptId, primitivePrompt),
|
|
308
|
+
);
|
|
309
|
+
}
|
|
310
|
+
const ok = store.resolveStagePendingPrompt(stageRunId, stage.stageId, promptId, coercedPayload.value, {
|
|
311
|
+
answerSource: "workflow_tool",
|
|
312
|
+
});
|
|
313
|
+
return workflowSendResult(
|
|
314
|
+
stageRunId,
|
|
315
|
+
stage.stageId,
|
|
316
|
+
"answer",
|
|
317
|
+
ok ? "ok" : "noop",
|
|
318
|
+
ok ? `Answered prompt ${promptId}.` : `No matching pending prompt ${promptId}.`,
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
const ok = store.resolveStagePendingPrompt(stageRunId, stage.stageId, promptId, rawPayload, {
|
|
291
322
|
answerSource: "workflow_tool",
|
|
292
323
|
});
|
|
293
324
|
return workflowSendResult(
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
* cross-ref: spec §8.1 Phase D (kill-runtime-wiring downstream)
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
+
import { createSessionScopedSingleton } from "../../shared/session-scoped-singleton.js";
|
|
17
|
+
|
|
16
18
|
// ---------------------------------------------------------------------------
|
|
17
19
|
// Types
|
|
18
20
|
// ---------------------------------------------------------------------------
|
|
@@ -123,4 +125,11 @@ export function createCancellationRegistry(): CancellationRegistry {
|
|
|
123
125
|
* Singleton registry for the default runtime. Consumers needing isolation
|
|
124
126
|
* should call createCancellationRegistry() instead.
|
|
125
127
|
*/
|
|
126
|
-
|
|
128
|
+
const SESSION_KEY = "workflows:cancellation:v1";
|
|
129
|
+
const singleton = createSessionScopedSingleton(SESSION_KEY, createCancellationRegistry);
|
|
130
|
+
|
|
131
|
+
export const cancellationRegistry: CancellationRegistry = singleton.facade;
|
|
132
|
+
|
|
133
|
+
export function adoptCancellationRegistry(scope: object): CancellationRegistry {
|
|
134
|
+
return singleton.adopt(scope);
|
|
135
|
+
}
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* cross-ref: spec detached-runner §job-tracker
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
+
import { createSessionScopedSingleton } from "../../shared/session-scoped-singleton.js";
|
|
13
|
+
|
|
12
14
|
// ---------------------------------------------------------------------------
|
|
13
15
|
// Types
|
|
14
16
|
// ---------------------------------------------------------------------------
|
|
@@ -113,4 +115,11 @@ export function createJobTracker(): JobTracker {
|
|
|
113
115
|
/**
|
|
114
116
|
* Singleton tracker for the default runtime.
|
|
115
117
|
*/
|
|
116
|
-
|
|
118
|
+
const SESSION_KEY = "workflows:job-tracker:v1";
|
|
119
|
+
const singleton = createSessionScopedSingleton(SESSION_KEY, createJobTracker);
|
|
120
|
+
|
|
121
|
+
export const jobTracker: JobTracker = singleton.facade;
|
|
122
|
+
|
|
123
|
+
export function adoptJobTracker(scope: object): JobTracker {
|
|
124
|
+
return singleton.adopt(scope);
|
|
125
|
+
}
|
|
@@ -262,6 +262,8 @@ export function askUserQuestionToolEvent(event: unknown): AskUserQuestionToolEve
|
|
|
262
262
|
|
|
263
263
|
export const READINESS_GATE_ADVANCE_LABEL = "I'm ready to move on to the next workflow stage.";
|
|
264
264
|
|
|
265
|
+
export const READINESS_GATE_CHAT_MESSAGE = "The user would like to chat more about this";
|
|
266
|
+
|
|
265
267
|
const READINESS_GATE_ADVANCE_NORMALIZED = READINESS_GATE_ADVANCE_LABEL.trim().toLowerCase();
|
|
266
268
|
|
|
267
269
|
export const READINESS_GATE_QUESTION_PARAMS = {
|
|
@@ -313,6 +315,32 @@ export function toolResultHasChatAnswer(result: unknown): boolean {
|
|
|
313
315
|
return answers.some((a) => a !== null && typeof a === "object" && (a as Record<string, unknown>).kind === "chat");
|
|
314
316
|
}
|
|
315
317
|
|
|
318
|
+
export type ReadinessDecision = { readonly action: "advance" } | { readonly action: "stay"; readonly message?: string };
|
|
319
|
+
|
|
320
|
+
function firstReadinessAnswer(result: unknown): Record<string, unknown> | undefined {
|
|
321
|
+
if (result === null || typeof result !== "object") return undefined;
|
|
322
|
+
const details = (result as Record<string, unknown>).details;
|
|
323
|
+
if (details === null || typeof details !== "object") return undefined;
|
|
324
|
+
const answers = (details as Record<string, unknown>).answers;
|
|
325
|
+
if (!Array.isArray(answers)) return undefined;
|
|
326
|
+
const first = answers[0];
|
|
327
|
+
return first !== null && typeof first === "object" ? (first as Record<string, unknown>) : undefined;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
export function readinessStayMessage(result: unknown): string | undefined {
|
|
331
|
+
const first = firstReadinessAnswer(result);
|
|
332
|
+
if (first === undefined) return undefined;
|
|
333
|
+
if (first.kind === "chat") return READINESS_GATE_CHAT_MESSAGE;
|
|
334
|
+
if (first.kind !== "custom" || typeof first.answer !== "string") return undefined;
|
|
335
|
+
return first.answer.trim().length > 0 ? first.answer : undefined;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
export function interpretReadinessResult(result: unknown): ReadinessDecision {
|
|
339
|
+
if (readinessResultMeansAdvance(result)) return { action: "advance" };
|
|
340
|
+
const message = readinessStayMessage(result);
|
|
341
|
+
return message !== undefined ? { action: "stay", message } : { action: "stay" };
|
|
342
|
+
}
|
|
343
|
+
|
|
316
344
|
export { RESUME_CONTINUATION_PROMPT } from "../../shared/resume-continuation.js";
|
|
317
345
|
|
|
318
346
|
export function shouldInjectResumeContinuation(state: {
|
|
@@ -327,7 +355,7 @@ export function shouldInjectResumeContinuation(state: {
|
|
|
327
355
|
let cachedReadinessGateTool: ReturnType<typeof createAskUserQuestionToolDefinition> | undefined;
|
|
328
356
|
function readinessGateTool(): ReturnType<typeof createAskUserQuestionToolDefinition> {
|
|
329
357
|
if (cachedReadinessGateTool === undefined) {
|
|
330
|
-
cachedReadinessGateTool = createAskUserQuestionToolDefinition();
|
|
358
|
+
cachedReadinessGateTool = createAskUserQuestionToolDefinition({ chatAsOption: true });
|
|
331
359
|
}
|
|
332
360
|
return cachedReadinessGateTool;
|
|
333
361
|
}
|
|
@@ -336,9 +364,9 @@ export async function askReadinessViaStageBroker(
|
|
|
336
364
|
runId: string,
|
|
337
365
|
stageId: string,
|
|
338
366
|
signal: AbortSignal,
|
|
339
|
-
): Promise<
|
|
367
|
+
): Promise<ReadinessDecision> {
|
|
340
368
|
const execute = readinessGateTool().execute;
|
|
341
|
-
if (execute === undefined) return "advance";
|
|
369
|
+
if (execute === undefined) return { action: "advance" };
|
|
342
370
|
const gateContext = {
|
|
343
371
|
hasUI: true,
|
|
344
372
|
ui: {
|
|
@@ -368,7 +396,7 @@ export async function askReadinessViaStageBroker(
|
|
|
368
396
|
undefined,
|
|
369
397
|
gateContext as unknown as Parameters<typeof execute>[4],
|
|
370
398
|
);
|
|
371
|
-
return
|
|
399
|
+
return interpretReadinessResult(result);
|
|
372
400
|
} finally {
|
|
373
401
|
stageUiBroker.clearStagePrompt(runId, stageId);
|
|
374
402
|
}
|
|
@@ -2,6 +2,7 @@ import type { DurableStageTopology } from "../../durable/types.js";
|
|
|
2
2
|
import type { DurableUiReplayRequest } from "../../durable/ui-primitive.js";
|
|
3
3
|
import type { GraphFrontierTracker } from "../../engine/graph-inference.js";
|
|
4
4
|
import { appendStageEnd, appendStageStart } from "../../shared/persistence-session-entries.js";
|
|
5
|
+
import { requirePrimitivePromptAnswer } from "../../shared/prompt-answer.js";
|
|
5
6
|
import { withPromptCallerStack } from "../../shared/prompt-callsite-context.js";
|
|
6
7
|
import { stageUiBroker } from "../../shared/stage-ui-broker.js";
|
|
7
8
|
import type { Store } from "../../shared/store.js";
|
|
@@ -221,8 +222,16 @@ export function buildPromptNodeUiAdapter(input: {
|
|
|
221
222
|
if (shouldReplay) {
|
|
222
223
|
await Promise.resolve();
|
|
223
224
|
input.throwIfWorkflowExitSelected();
|
|
225
|
+
let response = replayAnswer.value;
|
|
226
|
+
try {
|
|
227
|
+
if (!isCustom) response = requirePrimitivePromptAnswer(descriptor, response);
|
|
228
|
+
} catch (err) {
|
|
229
|
+
applyFailureToStage(stageSnapshot, input.classifyExecutorFailure(err));
|
|
230
|
+
await finalizePromptStage("failed");
|
|
231
|
+
throw err;
|
|
232
|
+
}
|
|
224
233
|
await finalizePromptStage("completed");
|
|
225
|
-
return
|
|
234
|
+
return response;
|
|
226
235
|
}
|
|
227
236
|
|
|
228
237
|
try {
|
|
@@ -234,15 +243,9 @@ export function buildPromptNodeUiAdapter(input: {
|
|
|
234
243
|
}
|
|
235
244
|
|
|
236
245
|
if (isCustom) {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
);
|
|
241
|
-
applyFailureToStage(stageSnapshot, input.classifyExecutorFailure(error));
|
|
242
|
-
await finalizePromptStage("failed");
|
|
243
|
-
throw error;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
+
// `overlay: true` is a placement hint the attached stage-chat host
|
|
247
|
+
// honours by mounting on its ordinary custom-UI slot, so a workflow
|
|
248
|
+
// asking for an overlay is served rather than failed here.
|
|
246
249
|
const mergedSignal = mergeHilSignals(input.signal, descriptor.options?.signal);
|
|
247
250
|
try {
|
|
248
251
|
if (mergedSignal.signal.aborted) throw hilAbortError(mergedSignal.signal);
|
|
@@ -323,9 +326,10 @@ export function buildPromptNodeUiAdapter(input: {
|
|
|
323
326
|
},
|
|
324
327
|
);
|
|
325
328
|
});
|
|
329
|
+
const normalizedResponse = requirePrimitivePromptAnswer(descriptor, response);
|
|
326
330
|
await waitForExplicitResume();
|
|
327
331
|
await finalizePromptStage("completed");
|
|
328
|
-
return
|
|
332
|
+
return normalizedResponse;
|
|
329
333
|
} catch (err) {
|
|
330
334
|
if (input.signal.aborted) {
|
|
331
335
|
input.preserveWorkflowExitSkippedReason(stageSnapshot, "run-aborted");
|
|
@@ -355,22 +359,17 @@ export function buildPromptNodeUiAdapter(input: {
|
|
|
355
359
|
});
|
|
356
360
|
},
|
|
357
361
|
async input(promptText: string): Promise<string> {
|
|
358
|
-
|
|
359
|
-
return typeof response === "string" ? response : String(response ?? "");
|
|
362
|
+
return (await ask({ kind: "input", message: promptText })) as string;
|
|
360
363
|
},
|
|
361
364
|
async confirm(message: string): Promise<boolean> {
|
|
362
|
-
|
|
363
|
-
return response === true;
|
|
365
|
+
return (await ask({ kind: "confirm", message })) as boolean;
|
|
364
366
|
},
|
|
365
367
|
async select<T extends string>(message: string, options: readonly T[]): Promise<T> {
|
|
366
368
|
if (options.length === 0) throw new Error("atomic-workflows: ctx.ui.select requires at least one option");
|
|
367
|
-
|
|
368
|
-
if (typeof response === "string" && (options as readonly string[]).includes(response)) return response as T;
|
|
369
|
-
return options[0]!;
|
|
369
|
+
return (await ask({ kind: "select", message, choices: options })) as T;
|
|
370
370
|
},
|
|
371
371
|
async editor(initial?: string): Promise<string> {
|
|
372
|
-
|
|
373
|
-
return typeof response === "string" ? response : (initial ?? "");
|
|
372
|
+
return (await ask({ kind: "editor", message: "Edit and save to continue.", initial })) as string;
|
|
374
373
|
},
|
|
375
374
|
async custom<T>(factory: WorkflowCustomUiFactory<T>, options?: WorkflowCustomUiOptions): Promise<T> {
|
|
376
375
|
const response = await ask(customPromptDescriptor(factory, options));
|
|
@@ -6,6 +6,7 @@ import { hasExplicitFastModeCandidate } from "./executor-direct-helpers.js";
|
|
|
6
6
|
import {
|
|
7
7
|
askReadinessViaStageBroker,
|
|
8
8
|
RESUME_CONTINUATION_PROMPT,
|
|
9
|
+
type ReadinessDecision,
|
|
9
10
|
shouldInjectResumeContinuation,
|
|
10
11
|
} from "./executor-hil.js";
|
|
11
12
|
import { applyFailureToStage } from "./executor-lifecycle.js";
|
|
@@ -45,7 +46,7 @@ export function createTrackedStageCaller(input: {
|
|
|
45
46
|
const { runtime } = input;
|
|
46
47
|
const readinessGateEnabled =
|
|
47
48
|
runtime.opts.confirmStageReadiness !== undefined || runtime.opts.usePromptNodesForUi === true;
|
|
48
|
-
const confirmReadiness = async (): Promise<
|
|
49
|
+
const confirmReadiness = async (): Promise<ReadinessDecision> => {
|
|
49
50
|
try {
|
|
50
51
|
if (runtime.opts.confirmStageReadiness !== undefined) {
|
|
51
52
|
const ready = await runtime.opts.confirmStageReadiness({
|
|
@@ -54,11 +55,11 @@ export function createTrackedStageCaller(input: {
|
|
|
54
55
|
stageName: runtime.name,
|
|
55
56
|
signal: runtime.signal,
|
|
56
57
|
});
|
|
57
|
-
return ready ? "advance" : "stay";
|
|
58
|
+
return ready ? { action: "advance" } : { action: "stay" };
|
|
58
59
|
}
|
|
59
60
|
return await askReadinessViaStageBroker(runtime.runId, runtime.stageId, runtime.signal);
|
|
60
61
|
} catch {
|
|
61
|
-
return "advance";
|
|
62
|
+
return { action: "advance" };
|
|
62
63
|
}
|
|
63
64
|
};
|
|
64
65
|
|
|
@@ -230,27 +231,33 @@ export function createTrackedStageCaller(input: {
|
|
|
230
231
|
try {
|
|
231
232
|
while (runtime.state.askUserQuestionObservedThisTurn || repeatReadinessAfterChatTurn) {
|
|
232
233
|
const decision = await confirmReadiness();
|
|
233
|
-
if (decision === "advance") break;
|
|
234
|
+
if (decision.action === "advance") break;
|
|
234
235
|
if (runtime.signal.aborted) break;
|
|
235
236
|
runtime.state.askUserQuestionObservedThisTurn = false;
|
|
236
237
|
runtime.state.chatAnswerObservedThisTurn = false;
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
238
|
+
if (decision.message !== undefined) {
|
|
239
|
+
result = (await runtime.raceStageSessionHeartbeat(
|
|
240
|
+
raceAbort(runtime.innerCtx.prompt(decision.message), runtime.signal),
|
|
241
|
+
)) as T;
|
|
242
|
+
} else {
|
|
243
|
+
runtime.state.waitingForStageChatTurn = true;
|
|
244
|
+
try {
|
|
245
|
+
await runtime.raceStageSessionHeartbeat(
|
|
246
|
+
raceAbort(
|
|
247
|
+
new Promise<void>((resolve) => {
|
|
248
|
+
resolveNextTurnEnd = resolve;
|
|
249
|
+
runtime.state.wakeWaitingForStageChatTurn = resolve;
|
|
250
|
+
}),
|
|
251
|
+
runtime.signal,
|
|
252
|
+
),
|
|
253
|
+
);
|
|
254
|
+
} finally {
|
|
255
|
+
runtime.state.wakeWaitingForStageChatTurn = undefined;
|
|
256
|
+
runtime.state.waitingForStageChatTurn = false;
|
|
257
|
+
}
|
|
258
|
+
if (runtime.signal.aborted) break;
|
|
259
|
+
result = (runtime.innerCtx.__getLastAssistantText() ?? result) as T;
|
|
251
260
|
}
|
|
252
|
-
if (runtime.signal.aborted) break;
|
|
253
|
-
result = (runtime.innerCtx.__getLastAssistantText() ?? result) as T;
|
|
254
261
|
const continuationDrain = await drainResumeContinuations(result);
|
|
255
262
|
result = continuationDrain.result;
|
|
256
263
|
repeatReadinessAfterChatTurn ||= continuationDrain.chatAnswerObserved;
|
|
@@ -7,12 +7,16 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
export { raceAbort } from "./executor-abort.js";
|
|
10
|
+
export type { ReadinessDecision } from "./executor-hil.js";
|
|
10
11
|
export {
|
|
11
12
|
askReadinessViaStageBroker,
|
|
13
|
+
interpretReadinessResult,
|
|
12
14
|
READINESS_GATE_ADVANCE_LABEL,
|
|
15
|
+
READINESS_GATE_CHAT_MESSAGE,
|
|
13
16
|
READINESS_GATE_QUESTION_PARAMS,
|
|
14
17
|
RESUME_CONTINUATION_PROMPT,
|
|
15
18
|
readinessResultMeansAdvance,
|
|
19
|
+
readinessStayMessage,
|
|
16
20
|
shouldInjectResumeContinuation,
|
|
17
21
|
toolResultHasChatAnswer,
|
|
18
22
|
} from "./executor-hil.js";
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
28
|
import type { AgentSession, AgentSessionEvent } from "@bastani/atomic";
|
|
29
|
+
import { createSessionScopedSingleton } from "../../shared/session-scoped-singleton.js";
|
|
29
30
|
import type { StageDeliveryActivityEvent } from "./stage-delivery-activity.js";
|
|
30
31
|
import type { StageQueuedUserMessages } from "./stage-queued-user-messages.js";
|
|
31
32
|
import type { StageUserMessageDeliveryAction } from "./stage-runner-types.js";
|
|
@@ -188,6 +189,8 @@ export interface StageControlRegistry {
|
|
|
188
189
|
get(runId: string, stageId: string): StageControlHandle | undefined;
|
|
189
190
|
/** Resolve all currently-registered chat handles for a run. */
|
|
190
191
|
forRun(runId: string): readonly StageControlHandle[];
|
|
192
|
+
/** True when this run currently has a registration map. */
|
|
193
|
+
has(runId: string): boolean;
|
|
191
194
|
/** Build a run-level control aggregate. Cheap; not memoised. */
|
|
192
195
|
run(runId: string): WorkflowRunControlHandle;
|
|
193
196
|
/**
|
|
@@ -196,6 +199,13 @@ export interface StageControlRegistry {
|
|
|
196
199
|
* their subscriptions when the host store is cleared.
|
|
197
200
|
*/
|
|
198
201
|
clear(): void;
|
|
202
|
+
/**
|
|
203
|
+
* Drop only handles detached from run-level control (`controlsDependencies`
|
|
204
|
+
* false), disposing them through the background-dispose path. Live executor
|
|
205
|
+
* handles that still own workflow execution stay registered. Emptied run
|
|
206
|
+
* maps are pruned.
|
|
207
|
+
*/
|
|
208
|
+
clearDetached(): void;
|
|
199
209
|
}
|
|
200
210
|
|
|
201
211
|
/**
|
|
@@ -415,6 +425,9 @@ export function createStageControlRegistry(): StageControlRegistry {
|
|
|
415
425
|
if (!runMap) return [];
|
|
416
426
|
return [...runMap.values()].map((entry) => entry.handle);
|
|
417
427
|
},
|
|
428
|
+
has(runId: string): boolean {
|
|
429
|
+
return _byRun.has(runId);
|
|
430
|
+
},
|
|
418
431
|
run(runId: string): WorkflowRunControlHandle {
|
|
419
432
|
return makeRunHandle(runId);
|
|
420
433
|
},
|
|
@@ -425,6 +438,16 @@ export function createStageControlRegistry(): StageControlRegistry {
|
|
|
425
438
|
disposeEntryInBackground(entry, "atomic-workflows: stage handle dispose failed");
|
|
426
439
|
}
|
|
427
440
|
},
|
|
441
|
+
clearDetached(): void {
|
|
442
|
+
for (const [runId, runMap] of [..._byRun]) {
|
|
443
|
+
for (const [stageId, entry] of [...runMap]) {
|
|
444
|
+
if (entry.controlsDependencies) continue;
|
|
445
|
+
runMap.delete(stageId);
|
|
446
|
+
disposeEntryInBackground(entry, "atomic-workflows: detached stage handle dispose failed");
|
|
447
|
+
}
|
|
448
|
+
if (runMap.size === 0) _byRun.delete(runId);
|
|
449
|
+
}
|
|
450
|
+
},
|
|
428
451
|
};
|
|
429
452
|
}
|
|
430
453
|
|
|
@@ -433,4 +456,11 @@ export function createStageControlRegistry(): StageControlRegistry {
|
|
|
433
456
|
* explicit instance via `RunOpts.stageControlRegistry`; the singleton
|
|
434
457
|
* is the default consumer surface used by the extension factory.
|
|
435
458
|
*/
|
|
436
|
-
|
|
459
|
+
const SESSION_KEY = "workflows:stage-control:v1";
|
|
460
|
+
const singleton = createSessionScopedSingleton(SESSION_KEY, createStageControlRegistry);
|
|
461
|
+
|
|
462
|
+
export const stageControlRegistry: StageControlRegistry = singleton.facade;
|
|
463
|
+
|
|
464
|
+
export function adoptStageControlRegistry(scope: object): StageControlRegistry {
|
|
465
|
+
return singleton.adopt(scope);
|
|
466
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { createStructuredOutputCapture, runCallback } from "@bastani/atomic";
|
|
2
|
+
import type { Static, TSchema } from "typebox";
|
|
2
3
|
import type { StageExecutionMeta } from "../../shared/types.js";
|
|
3
4
|
import { StageSessionController } from "./stage-runner-controller.js";
|
|
4
|
-
import { assistantMessage } from "./stage-runner-messages.js";
|
|
5
|
+
import { assistantArtifactTextForToolCall, assistantMessage } from "./stage-runner-messages.js";
|
|
5
6
|
import {
|
|
6
7
|
finalizePromptOutput,
|
|
7
8
|
splitPromptOptions,
|
|
@@ -12,6 +13,7 @@ import {
|
|
|
12
13
|
formatStructuredOutputCorrectionPrompt,
|
|
13
14
|
STRUCTURED_OUTPUT_MAX_CORRECTIVE_PROMPTS,
|
|
14
15
|
STRUCTURED_OUTPUT_MISSING_ERROR,
|
|
16
|
+
type StructuredOutputExecutionCapture,
|
|
15
17
|
stageOptionsWithStructuredOutput,
|
|
16
18
|
stringifyStructuredOutputValue,
|
|
17
19
|
} from "./stage-runner-structured-output.js";
|
|
@@ -19,8 +21,14 @@ import type { InternalStageContext, StageRunnerOpts } from "./stage-runner-types
|
|
|
19
21
|
|
|
20
22
|
export function createStageContext(opts: StageRunnerOpts): InternalStageContext {
|
|
21
23
|
const { stageId, stageName, adapters, runId, workflowIntercomGroup, signal, stageOptions, executionMode } = opts;
|
|
22
|
-
const structuredOutputCapture = stageOptions?.schema ? createStructuredOutputCapture<
|
|
23
|
-
const
|
|
24
|
+
const structuredOutputCapture = stageOptions?.schema ? createStructuredOutputCapture<Static<TSchema>>() : undefined;
|
|
25
|
+
const structuredOutputExecutionCapture: StructuredOutputExecutionCapture<Static<TSchema>> | undefined =
|
|
26
|
+
stageOptions?.schema ? {} : undefined;
|
|
27
|
+
const effectiveStageOptions = stageOptionsWithStructuredOutput(
|
|
28
|
+
stageOptions,
|
|
29
|
+
structuredOutputCapture,
|
|
30
|
+
structuredOutputExecutionCapture,
|
|
31
|
+
);
|
|
24
32
|
const meta: StageExecutionMeta = {
|
|
25
33
|
runId,
|
|
26
34
|
stageId,
|
|
@@ -34,6 +42,7 @@ export function createStageContext(opts: StageRunnerOpts): InternalStageContext
|
|
|
34
42
|
let lastAssistantText: string | undefined;
|
|
35
43
|
let lastFinalizedOutput: string | undefined;
|
|
36
44
|
let lastFinalizedMessageCount: number | undefined;
|
|
45
|
+
let structuredArtifactFinalized = false;
|
|
37
46
|
let adapterMessages = [] as InternalStageContext["messages"];
|
|
38
47
|
|
|
39
48
|
function runtimeCwd(): string {
|
|
@@ -43,7 +52,8 @@ export function createStageContext(opts: StageRunnerOpts): InternalStageContext
|
|
|
43
52
|
function finalizedOutputIsCurrent(): boolean {
|
|
44
53
|
return (
|
|
45
54
|
lastFinalizedOutput !== undefined &&
|
|
46
|
-
(
|
|
55
|
+
(structuredArtifactFinalized ||
|
|
56
|
+
lastFinalizedMessageCount === undefined ||
|
|
47
57
|
controller.currentSession?.messages.length === lastFinalizedMessageCount)
|
|
48
58
|
);
|
|
49
59
|
}
|
|
@@ -54,9 +64,10 @@ export function createStageContext(opts: StageRunnerOpts): InternalStageContext
|
|
|
54
64
|
async prompt(text, options) {
|
|
55
65
|
const { sdkOptions, outputOptions } = splitPromptOptions(options);
|
|
56
66
|
validatePromptOutputOptions(outputOptions);
|
|
67
|
+
const hasOutputArtifact = typeof outputOptions.output === "string" && outputOptions.output.length > 0;
|
|
57
68
|
// The runtime owns the artifact write, so it states that contract itself
|
|
58
69
|
// rather than relying on every workflow definition to describe it.
|
|
59
|
-
const promptText = `${text}${stageOutputInstruction(outputOptions)}`;
|
|
70
|
+
const promptText = `${text}${stageOutputInstruction(outputOptions, structuredOutputCapture !== undefined)}`;
|
|
60
71
|
if (structuredOutputCapture?.called) {
|
|
61
72
|
throw new Error(
|
|
62
73
|
"atomic-workflows: stage schema supports one prompt() call per stage context because structured_output may be called exactly once. Create a new ctx.stage(...) for each additional schema-backed prompt.",
|
|
@@ -97,19 +108,39 @@ export function createStageContext(opts: StageRunnerOpts): InternalStageContext
|
|
|
97
108
|
throw new Error(structuredOutputError);
|
|
98
109
|
}
|
|
99
110
|
correctiveAttempts += 1;
|
|
100
|
-
nextPrompt = formatStructuredOutputCorrectionPrompt(
|
|
111
|
+
nextPrompt = formatStructuredOutputCorrectionPrompt(
|
|
112
|
+
structuredOutputError,
|
|
113
|
+
correctiveAttempts,
|
|
114
|
+
hasOutputArtifact,
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
const sessionMessages = controller.currentSession?.messages;
|
|
118
|
+
const executionSnapshot = structuredOutputExecutionCapture?.snapshot;
|
|
119
|
+
if (executionSnapshot === undefined) {
|
|
120
|
+
throw new Error(
|
|
121
|
+
"atomic-workflows: structured_output completed without an execution snapshot; the successful tool call could not be paired with its result.",
|
|
122
|
+
);
|
|
101
123
|
}
|
|
102
|
-
|
|
124
|
+
// The exact successful tool-call message owns the artifact. When it
|
|
125
|
+
// carries no ordinary text — or the session no longer holds it after
|
|
126
|
+
// model-fallback recreation — fall back to the last non-structured
|
|
127
|
+
// assistant text so an earlier-turn deliverable is not discarded
|
|
128
|
+
// (issue #2198); only when no prose exists anywhere is the artifact
|
|
129
|
+
// empty, and its receipt then carries the empty-artifact warning.
|
|
130
|
+
const rawOutputText = hasOutputArtifact
|
|
131
|
+
? (assistantArtifactTextForToolCall(sessionMessages ?? [], executionSnapshot.toolCallId) ?? "")
|
|
132
|
+
: stringifyStructuredOutputValue(executionSnapshot.value);
|
|
103
133
|
lastAssistantText = await finalizePromptOutput(
|
|
104
|
-
|
|
134
|
+
rawOutputText,
|
|
105
135
|
outputOptions,
|
|
106
136
|
runtimeCwd(),
|
|
107
137
|
runId,
|
|
108
|
-
|
|
138
|
+
sessionMessages,
|
|
109
139
|
);
|
|
110
140
|
lastFinalizedOutput = lastAssistantText;
|
|
111
141
|
lastFinalizedMessageCount = controller.currentSession?.messages.length;
|
|
112
|
-
|
|
142
|
+
if (hasOutputArtifact) structuredArtifactFinalized = true;
|
|
143
|
+
return executionSnapshot.value as never;
|
|
113
144
|
}
|
|
114
145
|
await controller.promptWithFallback(promptText, sdkOptions);
|
|
115
146
|
const rawText = controller.lastAssistantText(lastAssistantText) ?? "";
|