@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
|
@@ -5,6 +5,8 @@ import type { StageSessionRuntime } from "./stage-runner-types.js";
|
|
|
5
5
|
type TextLikeContent = {
|
|
6
6
|
readonly type?: string;
|
|
7
7
|
readonly text?: string;
|
|
8
|
+
readonly id?: string;
|
|
9
|
+
readonly name?: string;
|
|
8
10
|
};
|
|
9
11
|
|
|
10
12
|
type MessageWithTextContent = {
|
|
@@ -33,6 +35,52 @@ export function lastAssistantTextFromMessages(messages: AgentSession["messages"]
|
|
|
33
35
|
return undefined;
|
|
34
36
|
}
|
|
35
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Artifact text for a successful `structured_output` call (issue #2198).
|
|
40
|
+
*
|
|
41
|
+
* Primary: the ordinary text of the exact assistant message that carried the
|
|
42
|
+
* successful tool call, so corrective attempts and later admitted turns cannot
|
|
43
|
+
* replace the pairing. Fallback: when that message carries no ordinary text —
|
|
44
|
+
* or the session no longer holds it after model-fallback recreation — the most
|
|
45
|
+
* recent earlier assistant message that carries text and makes no
|
|
46
|
+
* `structured_output` call. Assistant turns after the successful call never
|
|
47
|
+
* win. When neither side exists the caller writes an empty artifact and its
|
|
48
|
+
* receipt carries the standard empty-artifact warning; the companion
|
|
49
|
+
* transcript remains the recovery path.
|
|
50
|
+
*/
|
|
51
|
+
export function assistantArtifactTextForToolCall(
|
|
52
|
+
messages: AgentSession["messages"],
|
|
53
|
+
toolCallId: string,
|
|
54
|
+
): string | undefined {
|
|
55
|
+
for (let index = messages.length - 1; index >= 0; index -= 1) {
|
|
56
|
+
const message = messages[index];
|
|
57
|
+
if (message?.role !== "assistant") continue;
|
|
58
|
+
const { content } = message as MessageWithTextContent;
|
|
59
|
+
if (!Array.isArray(content)) continue;
|
|
60
|
+
if (!content.some((block) => block.type === "toolCall" && block.id === toolCallId)) continue;
|
|
61
|
+
const text = extractMessageText(message);
|
|
62
|
+
if (text.trim().length > 0) return text;
|
|
63
|
+
return lastNonStructuredAssistantTextBefore(messages, index);
|
|
64
|
+
}
|
|
65
|
+
return lastNonStructuredAssistantTextBefore(messages, messages.length);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function lastNonStructuredAssistantTextBefore(
|
|
69
|
+
messages: AgentSession["messages"],
|
|
70
|
+
endIndex: number,
|
|
71
|
+
): string | undefined {
|
|
72
|
+
for (let index = endIndex - 1; index >= 0; index -= 1) {
|
|
73
|
+
const message = messages[index];
|
|
74
|
+
if (message?.role !== "assistant") continue;
|
|
75
|
+
const { content } = message as MessageWithTextContent;
|
|
76
|
+
if (!Array.isArray(content)) continue;
|
|
77
|
+
if (content.some((block) => block.type === "toolCall" && block.name === "structured_output")) continue;
|
|
78
|
+
const text = extractMessageText(message);
|
|
79
|
+
if (text.trim().length > 0) return text;
|
|
80
|
+
}
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
|
|
36
84
|
function messageStopReason(message: AgentSession["messages"][number]): string | undefined {
|
|
37
85
|
const record = message as { readonly stopReason?: unknown };
|
|
38
86
|
return typeof record.stopReason === "string" ? record.stopReason : undefined;
|
|
@@ -218,8 +218,11 @@ export function validatePromptOutputOptions(outputOptions: StageOutputOptions):
|
|
|
218
218
|
* "done, see the file" and persist that sentence as its deliverable, which is a
|
|
219
219
|
* foot-gun the workflow definition cannot see.
|
|
220
220
|
*/
|
|
221
|
-
export function stageOutputInstruction(outputOptions: StageOutputOptions): string {
|
|
221
|
+
export function stageOutputInstruction(outputOptions: StageOutputOptions, hasStructuredOutput = false): string {
|
|
222
222
|
if (typeof outputOptions.output !== "string" || outputOptions.output.length === 0) return "";
|
|
223
|
+
if (hasStructuredOutput) {
|
|
224
|
+
return "\n\n[This stage has two final output channels. In the same final assistant message, write the complete human-readable artifact as ordinary assistant text before calling structured_output. That text is saved verbatim as the artifact and is what later stages read; the structured_output tool arguments are the machine-readable result for workflow logic. Do not replace the artifact text with JSON or a pointer to another file. Files you write yourself are not the artifact.]";
|
|
225
|
+
}
|
|
223
226
|
return "\n\n[This stage's final message is saved verbatim as its artifact and is what later stages read. Return the complete result in that message rather than a pointer to it. Files you write yourself are not the artifact.]";
|
|
224
227
|
}
|
|
225
228
|
|
|
@@ -8,6 +8,15 @@ export const STRUCTURED_OUTPUT_MISSING_ERROR =
|
|
|
8
8
|
|
|
9
9
|
const STRUCTURED_OUTPUT_TOOL_NAME = "structured_output";
|
|
10
10
|
|
|
11
|
+
export interface StructuredOutputExecutionSnapshot<TValue> {
|
|
12
|
+
readonly toolCallId: string;
|
|
13
|
+
readonly value: TValue;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface StructuredOutputExecutionCapture<TValue> {
|
|
17
|
+
snapshot?: StructuredOutputExecutionSnapshot<TValue>;
|
|
18
|
+
}
|
|
19
|
+
|
|
11
20
|
type ToolResultContentBlock = {
|
|
12
21
|
readonly type?: unknown;
|
|
13
22
|
readonly text?: unknown;
|
|
@@ -36,7 +45,11 @@ export function structuredOutputToolErrorFromEvent(event: unknown): string | und
|
|
|
36
45
|
return toolResultText(resultRecord?.content) ?? "structured_output tool call failed schema validation.";
|
|
37
46
|
}
|
|
38
47
|
|
|
39
|
-
export function formatStructuredOutputCorrectionPrompt(
|
|
48
|
+
export function formatStructuredOutputCorrectionPrompt(
|
|
49
|
+
error: string,
|
|
50
|
+
attempt: number,
|
|
51
|
+
needsArtifactText = false,
|
|
52
|
+
): string {
|
|
40
53
|
return [
|
|
41
54
|
"The previous response failed this stage's structured-output contract.",
|
|
42
55
|
"",
|
|
@@ -46,7 +59,10 @@ export function formatStructuredOutputCorrectionPrompt(error: string, attempt: n
|
|
|
46
59
|
error,
|
|
47
60
|
"",
|
|
48
61
|
"You must finish by calling the `structured_output` tool exactly once with arguments matching the registered schema.",
|
|
49
|
-
"
|
|
62
|
+
"If you attempted `structured_output` and validation failed, correct the tool arguments and call `structured_output` again.",
|
|
63
|
+
needsArtifactText
|
|
64
|
+
? "In the same final assistant message, include the complete human-readable artifact as ordinary text before calling `structured_output`; the tool arguments are the separate machine-readable result. Do not put prose after the tool call, and do not write the artifact as plain JSON text or Markdown code."
|
|
65
|
+
: "Do not answer with plain JSON text, Markdown, or prose.",
|
|
50
66
|
].join("\n");
|
|
51
67
|
}
|
|
52
68
|
|
|
@@ -60,11 +76,34 @@ export function stringifyStructuredOutputValue(value: unknown): string {
|
|
|
60
76
|
}
|
|
61
77
|
}
|
|
62
78
|
|
|
63
|
-
export function stageOptionsWithStructuredOutput(
|
|
64
|
-
options: StageOptions | undefined,
|
|
65
|
-
capture: StructuredOutputCapture<
|
|
79
|
+
export function stageOptionsWithStructuredOutput<TSchemaDef extends TSchema>(
|
|
80
|
+
options: StageOptions<TSchemaDef | undefined> | undefined,
|
|
81
|
+
capture: StructuredOutputCapture<Static<TSchemaDef>> | undefined,
|
|
82
|
+
executionCapture?: StructuredOutputExecutionCapture<Static<TSchemaDef>>,
|
|
66
83
|
): StageOptions | undefined {
|
|
67
84
|
if (!options?.schema || !capture) return options;
|
|
85
|
+
const structuredOutputTool = createStructuredOutputTool({
|
|
86
|
+
schema: options.schema,
|
|
87
|
+
capture,
|
|
88
|
+
});
|
|
89
|
+
const executeStructuredOutput = structuredOutputTool.execute;
|
|
90
|
+
const capturedStructuredOutputTool = {
|
|
91
|
+
...structuredOutputTool,
|
|
92
|
+
async execute(...args: Parameters<typeof executeStructuredOutput>) {
|
|
93
|
+
const result = await executeStructuredOutput(...args);
|
|
94
|
+
// Mirror the shared capture, which keeps the latest successful call:
|
|
95
|
+
// a model-fallback session recreation can execute the tool a second
|
|
96
|
+
// time, and the snapshot must describe the call the live session (and
|
|
97
|
+
// its messages) actually holds, not an abandoned earlier one.
|
|
98
|
+
if (executionCapture !== undefined && capture.called) {
|
|
99
|
+
executionCapture.snapshot = {
|
|
100
|
+
toolCallId: args[0],
|
|
101
|
+
value: args[1],
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
},
|
|
106
|
+
};
|
|
68
107
|
const tools =
|
|
69
108
|
options.tools === undefined
|
|
70
109
|
? options.noTools === "all"
|
|
@@ -76,12 +115,6 @@ export function stageOptionsWithStructuredOutput(
|
|
|
76
115
|
...options,
|
|
77
116
|
...(tools !== undefined ? { tools } : {}),
|
|
78
117
|
...(excludedTools !== undefined ? { excludedTools } : {}),
|
|
79
|
-
customTools: [
|
|
80
|
-
...(options.customTools ?? []),
|
|
81
|
-
createStructuredOutputTool({
|
|
82
|
-
schema: options.schema as TSchema,
|
|
83
|
-
capture: capture as StructuredOutputCapture<Static<TSchema>>,
|
|
84
|
-
}),
|
|
85
|
-
],
|
|
118
|
+
customTools: [...(options.customTools ?? []), capturedStructuredOutputTool],
|
|
86
119
|
};
|
|
87
120
|
}
|
|
@@ -13,7 +13,12 @@ export type WorkflowCustomUiOverlayOptions = OverlayOptions;
|
|
|
13
13
|
export type WorkflowCustomUiOverlayHandle = OverlayHandle;
|
|
14
14
|
export type WorkflowCustomUiFactory<T> = (tui: TUI, theme: Theme, keybindings: KeybindingsManager, done: (value: T) => void) => WorkflowCustomUiComponent | Promise<WorkflowCustomUiComponent>;
|
|
15
15
|
export interface WorkflowCustomUiOptions {
|
|
16
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Ask the host to render as an overlay. Workflow graph hosts accept this: the
|
|
18
|
+
* attached stage chat mounts the widget on its ordinary custom-UI slot, which
|
|
19
|
+
* already keeps the stage transcript visible behind it, instead of opening a
|
|
20
|
+
* nested overlay above the graph chrome.
|
|
21
|
+
*/
|
|
17
22
|
readonly overlay?: boolean;
|
|
18
23
|
/** AbortSignal to programmatically dismiss the custom UI. */
|
|
19
24
|
readonly signal?: AbortSignal;
|
|
@@ -98,6 +103,8 @@ export interface WorkflowToolOptions {
|
|
|
98
103
|
readonly maxAttempts?: number;
|
|
99
104
|
readonly intervalMs?: number;
|
|
100
105
|
readonly backoffRate?: number;
|
|
106
|
+
/** Maximum duration in milliseconds for each callback attempt. */
|
|
107
|
+
readonly timeoutMs?: number;
|
|
101
108
|
}
|
|
102
109
|
export type WorkflowToolReturnOptions = WorkflowToolOptions & {
|
|
103
110
|
readonly failureMode: "return";
|
|
@@ -265,6 +272,8 @@ export interface ToolNodeSnapshot extends WorkflowSerializableObject {
|
|
|
265
272
|
/** Stable durable node identity. */
|
|
266
273
|
readonly id: string;
|
|
267
274
|
readonly name: string;
|
|
275
|
+
/** Exact invocation arguments retained for read-only graph inspection. */
|
|
276
|
+
readonly args?: Readonly<Record<string, WorkflowSerializableValue>>;
|
|
268
277
|
readonly argsHash: string;
|
|
269
278
|
readonly ordinal: number;
|
|
270
279
|
readonly parentIds: readonly string[];
|
|
@@ -274,6 +283,11 @@ export interface ToolNodeSnapshot extends WorkflowSerializableObject {
|
|
|
274
283
|
readonly executionOrder?: number;
|
|
275
284
|
readonly startedAt?: number;
|
|
276
285
|
readonly endedAt?: number;
|
|
286
|
+
readonly durationMs?: number;
|
|
287
|
+
/** Full serializable callback result, when one was retained. */
|
|
288
|
+
readonly result?: WorkflowSerializableValue;
|
|
289
|
+
/** Callback source captured from `fn.toString()` at registration. */
|
|
290
|
+
readonly source?: string;
|
|
277
291
|
readonly resultSummary?: string;
|
|
278
292
|
readonly error?: string;
|
|
279
293
|
readonly attachable: false;
|
|
@@ -49,7 +49,12 @@ export type WorkflowCustomUiFactory<T> = (
|
|
|
49
49
|
) => WorkflowCustomUiComponent | Promise<WorkflowCustomUiComponent>;
|
|
50
50
|
|
|
51
51
|
export interface WorkflowCustomUiOptions {
|
|
52
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* Ask the host to render as an overlay. Workflow graph hosts accept this: the
|
|
54
|
+
* attached stage chat mounts the widget on its ordinary custom-UI slot, which
|
|
55
|
+
* already keeps the stage transcript visible behind it, instead of opening a
|
|
56
|
+
* nested overlay above the graph chrome.
|
|
57
|
+
*/
|
|
53
58
|
readonly overlay?: boolean;
|
|
54
59
|
/** AbortSignal to programmatically dismiss the custom UI. */
|
|
55
60
|
readonly signal?: AbortSignal;
|
|
@@ -156,6 +161,8 @@ export interface WorkflowToolOptions {
|
|
|
156
161
|
readonly maxAttempts?: number;
|
|
157
162
|
readonly intervalMs?: number;
|
|
158
163
|
readonly backoffRate?: number;
|
|
164
|
+
/** Maximum duration in milliseconds for each callback attempt. */
|
|
165
|
+
readonly timeoutMs?: number;
|
|
159
166
|
}
|
|
160
167
|
|
|
161
168
|
export type WorkflowToolReturnOptions = WorkflowToolOptions & { readonly failureMode: "return" };
|
|
@@ -369,6 +376,8 @@ export interface ToolNodeSnapshot extends WorkflowSerializableObject {
|
|
|
369
376
|
/** Stable durable node identity. */
|
|
370
377
|
readonly id: string;
|
|
371
378
|
readonly name: string;
|
|
379
|
+
/** Exact invocation arguments retained for read-only graph inspection. */
|
|
380
|
+
readonly args?: Readonly<Record<string, WorkflowSerializableValue>>;
|
|
372
381
|
readonly argsHash: string;
|
|
373
382
|
readonly ordinal: number;
|
|
374
383
|
readonly parentIds: readonly string[];
|
|
@@ -378,6 +387,11 @@ export interface ToolNodeSnapshot extends WorkflowSerializableObject {
|
|
|
378
387
|
readonly executionOrder?: number;
|
|
379
388
|
readonly startedAt?: number;
|
|
380
389
|
readonly endedAt?: number;
|
|
390
|
+
readonly durationMs?: number;
|
|
391
|
+
/** Full serializable callback result, when one was retained. */
|
|
392
|
+
readonly result?: WorkflowSerializableValue;
|
|
393
|
+
/** Callback source captured from `fn.toString()` at registration. */
|
|
394
|
+
readonly source?: string;
|
|
381
395
|
readonly resultSummary?: string;
|
|
382
396
|
readonly error?: string;
|
|
383
397
|
readonly attachable: false;
|
|
@@ -10,6 +10,7 @@ import type {
|
|
|
10
10
|
WorkflowChildReplaySnapshot,
|
|
11
11
|
WorkflowNotice,
|
|
12
12
|
} from "./store-types.js";
|
|
13
|
+
import { boundedToolPayload, boundedToolPayloadRecord, boundedToolText } from "./tool-payload-bounds.js";
|
|
13
14
|
import type { WorkflowOutputValues, WorkflowSerializableValue } from "./types.js";
|
|
14
15
|
|
|
15
16
|
export const COMPACT_RESULT_FIELD_LIMIT = 1024;
|
|
@@ -115,7 +116,9 @@ function compactStage(stage: StageSnapshot): StageSnapshot {
|
|
|
115
116
|
attemptedModels: _attemptedModels,
|
|
116
117
|
modelAttempts: _modelAttempts,
|
|
117
118
|
// Agent-stage results can be unbounded and graph cards do not render
|
|
118
|
-
// them.
|
|
119
|
+
// them. Tool cards render a constant body, so `resultSummary` is kept
|
|
120
|
+
// for status surfaces while the bounded full payload below backs the
|
|
121
|
+
// read-only detail view.
|
|
119
122
|
result: _result,
|
|
120
123
|
...metadata
|
|
121
124
|
} = stage;
|
|
@@ -133,7 +136,16 @@ function compactStage(stage: StageSnapshot): StageSnapshot {
|
|
|
133
136
|
}
|
|
134
137
|
|
|
135
138
|
function compactToolNode(node: ToolNodeSnapshot): ToolNodeSnapshot {
|
|
136
|
-
return {
|
|
139
|
+
return {
|
|
140
|
+
...node,
|
|
141
|
+
parentIds: [...node.parentIds],
|
|
142
|
+
// Author payloads may be cyclic, may throw on property access, and may be
|
|
143
|
+
// arbitrarily large. `boundedToolPayload` contains all three so building a
|
|
144
|
+
// snapshot cannot throw and one version cannot retain a whole payload.
|
|
145
|
+
...(node.args !== undefined ? { args: boundedToolPayloadRecord(node.args) } : {}),
|
|
146
|
+
...(node.result !== undefined ? { result: boundedToolPayload(node.result) } : {}),
|
|
147
|
+
...(node.source !== undefined ? { source: boundedToolText(node.source) } : {}),
|
|
148
|
+
};
|
|
137
149
|
}
|
|
138
150
|
|
|
139
151
|
function compactRun(run: RunSnapshot): RunSnapshot {
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kind-aware answers for primitive workflow HIL prompts.
|
|
3
|
+
*
|
|
4
|
+
* Workflow-tool payloads cross a model/provider boundary before they reach the
|
|
5
|
+
* prompt waiter. Normalize them while the pending prompt descriptor is still
|
|
6
|
+
* available, rather than letting each UI sink guess what a raw value means.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { PendingPrompt, PromptKind } from "./store-types.js";
|
|
10
|
+
|
|
11
|
+
export type PrimitivePromptKind = Exclude<PromptKind, "custom">;
|
|
12
|
+
|
|
13
|
+
export type PrimitivePrompt = Pick<PendingPrompt, "kind" | "choices" | "initial"> & {
|
|
14
|
+
readonly kind: PrimitivePromptKind;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
type PrimitivePendingPrompt = PendingPrompt & { readonly kind: PrimitivePromptKind };
|
|
18
|
+
|
|
19
|
+
export function isPrimitivePrompt(prompt: PendingPrompt): prompt is PrimitivePendingPrompt {
|
|
20
|
+
return prompt.kind !== "custom";
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export type PrimitivePromptAnswer = string | boolean;
|
|
24
|
+
|
|
25
|
+
export interface PromptAnswerAccepted {
|
|
26
|
+
readonly ok: true;
|
|
27
|
+
readonly value: PrimitivePromptAnswer;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface PromptAnswerRejected {
|
|
31
|
+
readonly ok: false;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export type PrimitivePromptAnswerResult = PromptAnswerAccepted | PromptAnswerRejected;
|
|
35
|
+
|
|
36
|
+
const CONFIRM_TRUE = new Set(["true", "yes", "y", "approve", "confirm"]);
|
|
37
|
+
const CONFIRM_FALSE = new Set(["false", "no", "n", "reject", "deny"]);
|
|
38
|
+
|
|
39
|
+
function normalizeText(value: string): string {
|
|
40
|
+
return value.trim().toLowerCase();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function accepted(value: PrimitivePromptAnswer): PromptAnswerAccepted {
|
|
44
|
+
return { ok: true, value };
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function rejected(): PromptAnswerRejected {
|
|
48
|
+
return { ok: false };
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function selectIndex(value: unknown, choiceCount: number): number | undefined {
|
|
52
|
+
if (typeof value === "number") {
|
|
53
|
+
return Number.isInteger(value) && value >= 1 && value <= choiceCount ? value - 1 : undefined;
|
|
54
|
+
}
|
|
55
|
+
if (typeof value !== "string") return undefined;
|
|
56
|
+
const trimmed = value.trim();
|
|
57
|
+
if (!/^[1-9]\d*$/u.test(trimmed)) return undefined;
|
|
58
|
+
const index = Number(trimmed);
|
|
59
|
+
return Number.isSafeInteger(index) && index <= choiceCount ? index - 1 : undefined;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function coerceConfirm(value: unknown): PrimitivePromptAnswerResult {
|
|
63
|
+
if (typeof value === "boolean") return accepted(value);
|
|
64
|
+
if (typeof value !== "string") return rejected();
|
|
65
|
+
const normalized = normalizeText(value);
|
|
66
|
+
if (CONFIRM_TRUE.has(normalized)) return accepted(true);
|
|
67
|
+
if (CONFIRM_FALSE.has(normalized)) return accepted(false);
|
|
68
|
+
return rejected();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function coerceSelect(choices: readonly string[], value: unknown): PrimitivePromptAnswerResult {
|
|
72
|
+
if (typeof value === "string") {
|
|
73
|
+
const normalized = normalizeText(value);
|
|
74
|
+
const choice = choices.find((candidate) => normalizeText(candidate) === normalized);
|
|
75
|
+
if (choice !== undefined) return accepted(choice);
|
|
76
|
+
}
|
|
77
|
+
const index = selectIndex(value, choices.length);
|
|
78
|
+
return index === undefined ? rejected() : accepted(choices[index]!);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Normalize a raw answer for a primitive prompt, or reject it.
|
|
83
|
+
*
|
|
84
|
+
* The `default` branch is unreachable through the guarded call sites, which all
|
|
85
|
+
* exclude `custom` prompts. It exists so a malformed descriptor is rejected
|
|
86
|
+
* rather than falling through to `undefined`, which would make
|
|
87
|
+
* `requirePrimitivePromptAnswer` throw a bare `TypeError` on `result.ok`.
|
|
88
|
+
*/
|
|
89
|
+
export function coercePrimitivePromptAnswer(prompt: PrimitivePrompt, value: unknown): PrimitivePromptAnswerResult {
|
|
90
|
+
switch (prompt.kind) {
|
|
91
|
+
case "input":
|
|
92
|
+
case "editor":
|
|
93
|
+
return typeof value === "string" ? accepted(value) : rejected();
|
|
94
|
+
case "confirm":
|
|
95
|
+
return coerceConfirm(value);
|
|
96
|
+
case "select":
|
|
97
|
+
return coerceSelect(prompt.choices ?? [], value);
|
|
98
|
+
default:
|
|
99
|
+
return rejected();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Require a prompt answer to identify a value; defaults are reserved for abort/cancel paths. */
|
|
104
|
+
export function requirePrimitivePromptAnswer(prompt: PrimitivePrompt, value: unknown): PrimitivePromptAnswer {
|
|
105
|
+
const result = coercePrimitivePromptAnswer(prompt, value);
|
|
106
|
+
if (result.ok) return result.value;
|
|
107
|
+
throw new Error(
|
|
108
|
+
`atomic-workflows: Invalid ${prompt.kind} prompt answer. ${primitivePromptAnswerExpectation(prompt)}`,
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** Explain the only accepted workflow-tool answer shapes for a prompt. */
|
|
113
|
+
export function primitivePromptAnswerExpectation(prompt: PrimitivePrompt): string {
|
|
114
|
+
switch (prompt.kind) {
|
|
115
|
+
case "input":
|
|
116
|
+
case "editor":
|
|
117
|
+
return "Expected a text string in response, text, or message.";
|
|
118
|
+
case "confirm":
|
|
119
|
+
return "Expected a boolean or a case-insensitive trimmed string: true/false, yes/y, no/n, approve/reject, or confirm/deny.";
|
|
120
|
+
case "select":
|
|
121
|
+
return `Expected an exact choice label (case-insensitive, trimmed) or a 1-based numeric index. Available choices: ${prompt.choices?.join(", ") || "(none)"}.`;
|
|
122
|
+
default:
|
|
123
|
+
return "Expected an answer matching the pending prompt kind.";
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** Format a truthful workflow-send noop for an unusable primitive answer. */
|
|
128
|
+
export function primitivePromptAnswerRejection(promptId: string, prompt: PrimitivePrompt): string {
|
|
129
|
+
return `Invalid answer for ${prompt.kind} prompt ${promptId}. ${primitivePromptAnswerExpectation(prompt)}`;
|
|
130
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { sessionScopedExtensionState } from "@bastani/atomic";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Shared across duplicate copies of this module after a host scope is adopted.
|
|
5
|
+
* Windows' resolver can evaluate the same singleton file twice: one copy
|
|
6
|
+
* registers, the other adopts. A module-local `instance` then splits them.
|
|
7
|
+
*
|
|
8
|
+
* Construction records this copy's local in the process bag if the key is new,
|
|
9
|
+
* but `current()` / `facade` stay module-local until `adopt`. That keeps
|
|
10
|
+
* no-scope evaluations isolated. The first `adopt` claims the recorded local
|
|
11
|
+
* (the first constructor's populated object) into the host scope.
|
|
12
|
+
*/
|
|
13
|
+
const SHARED_STATES_KEY = Symbol.for("atomic-workflows/session-scoped-singleton-pre-adoption@1");
|
|
14
|
+
|
|
15
|
+
interface SharedSingletonState<T extends object> {
|
|
16
|
+
local: T;
|
|
17
|
+
instance: T | undefined;
|
|
18
|
+
localClaimed: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface ProcessSingletonStates {
|
|
22
|
+
readonly version: 1;
|
|
23
|
+
readonly byKey: Map<string, SharedSingletonState<object>>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function processBag(): Record<symbol, ProcessSingletonStates | undefined> {
|
|
27
|
+
return globalThis as typeof globalThis & Record<symbol, ProcessSingletonStates | undefined>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function recordLocal<T extends object>(key: string, local: T): SharedSingletonState<T> {
|
|
31
|
+
const bag = processBag();
|
|
32
|
+
let states = bag[SHARED_STATES_KEY];
|
|
33
|
+
if (states === undefined || states.version !== 1) {
|
|
34
|
+
states = { version: 1, byKey: new Map() };
|
|
35
|
+
bag[SHARED_STATES_KEY] = states;
|
|
36
|
+
}
|
|
37
|
+
const existing = states.byKey.get(key) as SharedSingletonState<T> | undefined;
|
|
38
|
+
if (existing !== undefined) return existing;
|
|
39
|
+
const created: SharedSingletonState<T> = { local, instance: undefined, localClaimed: false };
|
|
40
|
+
states.byKey.set(key, created as SharedSingletonState<object>);
|
|
41
|
+
return created;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Drop every shared slot so unit tests stay isolated. */
|
|
45
|
+
export function resetSessionScopedSingletonPreAdoptionForTests(): void {
|
|
46
|
+
delete processBag()[SHARED_STATES_KEY];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Stable facade over a run-scoped singleton that can re-bind to host
|
|
51
|
+
* session-scoped state after `/reload` re-evaluates the module graph.
|
|
52
|
+
*
|
|
53
|
+
* Local state seeds at most one unseen scope; later unseen scopes start fresh.
|
|
54
|
+
* After the first adopt, every module copy for the same key reads one instance.
|
|
55
|
+
*/
|
|
56
|
+
export interface SessionScopedSingleton<T extends object> {
|
|
57
|
+
readonly facade: T;
|
|
58
|
+
readonly adopt: (scope: object) => T;
|
|
59
|
+
readonly current: () => T;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function createSessionScopedSingleton<T extends object>(
|
|
63
|
+
key: string,
|
|
64
|
+
createLocal: () => T,
|
|
65
|
+
): SessionScopedSingleton<T> {
|
|
66
|
+
const local = createLocal();
|
|
67
|
+
const shared = recordLocal(key, local);
|
|
68
|
+
let instance = local;
|
|
69
|
+
|
|
70
|
+
const live = (): T => shared.instance ?? instance;
|
|
71
|
+
|
|
72
|
+
const current = (): T => live();
|
|
73
|
+
|
|
74
|
+
const adopt = (scope: object): T => {
|
|
75
|
+
shared.instance = sessionScopedExtensionState(scope, key, () => {
|
|
76
|
+
if (shared.localClaimed) return createLocal();
|
|
77
|
+
shared.localClaimed = true;
|
|
78
|
+
return shared.local;
|
|
79
|
+
});
|
|
80
|
+
instance = shared.instance;
|
|
81
|
+
return shared.instance;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const facade = new Proxy(local, {
|
|
85
|
+
get(_target, prop) {
|
|
86
|
+
const value = Reflect.get(live(), prop, live());
|
|
87
|
+
if (typeof value === "function") {
|
|
88
|
+
return value.bind(live());
|
|
89
|
+
}
|
|
90
|
+
return value;
|
|
91
|
+
},
|
|
92
|
+
has(_target, prop) {
|
|
93
|
+
return Reflect.has(live(), prop);
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
return { facade, adopt, current };
|
|
98
|
+
}
|
|
@@ -7,6 +7,7 @@ import type {
|
|
|
7
7
|
PiKeybindings,
|
|
8
8
|
PiTheme,
|
|
9
9
|
} from "../extension/wiring.js";
|
|
10
|
+
import { createSessionScopedSingleton } from "./session-scoped-singleton.js";
|
|
10
11
|
import type { StageInputAnswer, StagePromptAdapter } from "./stage-prompt.js";
|
|
11
12
|
import type { StagePromptAnswerSource, Store } from "./store.js";
|
|
12
13
|
import { store as defaultStore } from "./store.js";
|
|
@@ -329,4 +330,11 @@ export async function mountStageCustomUi(
|
|
|
329
330
|
return { request, component };
|
|
330
331
|
}
|
|
331
332
|
|
|
332
|
-
|
|
333
|
+
const SESSION_KEY = "workflows:stage-ui:v1";
|
|
334
|
+
const singleton = createSessionScopedSingleton(SESSION_KEY, () => new StageUiBroker());
|
|
335
|
+
|
|
336
|
+
export const stageUiBroker = singleton.facade;
|
|
337
|
+
|
|
338
|
+
export function adoptStageUiBroker(scope: object): StageUiBroker {
|
|
339
|
+
return singleton.adopt(scope);
|
|
340
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createSessionScopedSingleton } from "./session-scoped-singleton.js";
|
|
1
2
|
import { createStoreContext } from "./store-internal.js";
|
|
2
3
|
import { createPromptStoreMethods } from "./store-prompt-methods.js";
|
|
3
4
|
import type { Store } from "./store-public-types.js";
|
|
@@ -15,4 +16,11 @@ export function createStore(): Store {
|
|
|
15
16
|
};
|
|
16
17
|
}
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
const SESSION_KEY = "workflows:store:v1";
|
|
20
|
+
const singleton = createSessionScopedSingleton(SESSION_KEY, createStore);
|
|
21
|
+
|
|
22
|
+
export const store: Store = singleton.facade;
|
|
23
|
+
|
|
24
|
+
export function adoptStore(scope: object): Store {
|
|
25
|
+
return singleton.adopt(scope);
|
|
26
|
+
}
|
|
@@ -106,7 +106,8 @@ export interface Store {
|
|
|
106
106
|
recordToolNodeEnd(
|
|
107
107
|
runId: string,
|
|
108
108
|
nodeId: string,
|
|
109
|
-
update: Pick<ToolNodeSnapshot, "status"> &
|
|
109
|
+
update: Pick<ToolNodeSnapshot, "status"> &
|
|
110
|
+
Partial<Pick<ToolNodeSnapshot, "endedAt" | "durationMs" | "result" | "resultSummary" | "error">>,
|
|
110
111
|
): boolean;
|
|
111
112
|
/** Link a workflow boundary stage to its live child run before that child completes. */
|
|
112
113
|
recordStageWorkflowChildRun(runId: string, stageId: string, ref: WorkflowChildRunRef): boolean;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type StoreContext, TERMINAL_STATUSES } from "./store-internal.js";
|
|
2
2
|
import type { Store } from "./store-public-types.js";
|
|
3
3
|
import type { RunSnapshot, ToolNodeSnapshot } from "./store-types.js";
|
|
4
|
+
import { boundedToolPayload } from "./tool-payload-bounds.js";
|
|
4
5
|
|
|
5
6
|
type ToolNodeStoreMethods = Pick<Store, "recordToolNodeStart" | "recordToolNodeRunning" | "recordToolNodeEnd">;
|
|
6
7
|
|
|
@@ -44,6 +45,12 @@ export function createToolNodeStoreMethods(context: StoreContext): ToolNodeStore
|
|
|
44
45
|
return false;
|
|
45
46
|
node.status = update.status;
|
|
46
47
|
if (update.endedAt !== undefined) node.endedAt = update.endedAt;
|
|
48
|
+
if (update.durationMs !== undefined) node.durationMs = update.durationMs;
|
|
49
|
+
// The live store is read raw by session/status surfaces that clone and
|
|
50
|
+
// re-serialize it, so the author's result is detached and bounded here
|
|
51
|
+
// rather than aliased. The durable checkpoint keeps the exact output,
|
|
52
|
+
// which is what a cached replay returns.
|
|
53
|
+
if (update.result !== undefined) node.result = boundedToolPayload(update.result);
|
|
47
54
|
if (update.resultSummary !== undefined) node.resultSummary = update.resultSummary;
|
|
48
55
|
if (update.error !== undefined) node.error = update.error;
|
|
49
56
|
context.bumpAndNotify();
|
|
@@ -3,7 +3,12 @@
|
|
|
3
3
|
* cross-ref: spec §5.5
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type {
|
|
6
|
+
import type {
|
|
7
|
+
WorkflowExitStatus,
|
|
8
|
+
WorkflowInputValues,
|
|
9
|
+
WorkflowOutputValues,
|
|
10
|
+
WorkflowSerializableValue,
|
|
11
|
+
} from "./types.js";
|
|
7
12
|
|
|
8
13
|
export type RunStatus = "pending" | "running" | "paused" | WorkflowExitStatus | "killed";
|
|
9
14
|
export type StageStatus =
|
|
@@ -23,6 +28,8 @@ export interface ToolNodeSnapshot {
|
|
|
23
28
|
readonly kind: "tool";
|
|
24
29
|
readonly id: string;
|
|
25
30
|
readonly name: string;
|
|
31
|
+
/** Exact invocation arguments retained for read-only graph inspection. */
|
|
32
|
+
readonly args?: Readonly<Record<string, WorkflowSerializableValue>>;
|
|
26
33
|
readonly argsHash: string;
|
|
27
34
|
readonly ordinal: number;
|
|
28
35
|
readonly parentIds: readonly string[];
|
|
@@ -35,8 +42,18 @@ export interface ToolNodeSnapshot {
|
|
|
35
42
|
executionOrder?: number;
|
|
36
43
|
startedAt?: number;
|
|
37
44
|
endedAt?: number;
|
|
45
|
+
durationMs?: number;
|
|
46
|
+
/** Full serializable callback result, when one was retained. */
|
|
47
|
+
result?: WorkflowSerializableValue;
|
|
48
|
+
/**
|
|
49
|
+
* Callback source captured from `fn.toString()` when the call was
|
|
50
|
+
* registered. Inspection-only: capture never re-runs the callback, never
|
|
51
|
+
* reads a file, and never reaches past the value already in hand.
|
|
52
|
+
*/
|
|
53
|
+
source?: string;
|
|
38
54
|
resultSummary?: string;
|
|
39
55
|
error?: string;
|
|
56
|
+
/** Tool nodes remain read-only graph inspection targets, never chat targets. */
|
|
40
57
|
readonly attachable: false;
|
|
41
58
|
}
|
|
42
59
|
|