@bastani/atomic 0.9.14-alpha.1 → 0.9.14-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -0
- package/README.md +3 -3
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/mcp/package.json +3 -3
- package/dist/builtin/subagents/CHANGELOG.md +14 -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/package.json +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +45 -0
- package/dist/builtin/workflows/README.md +30 -8
- 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 +8 -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 +9 -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 +24 -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 +2680 -1418
- 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-prompt-nodes.ts +16 -11
- 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 +9 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +9 -0
- 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.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 +4 -2
- 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 +13 -9
- package/dist/core/tools/ask-user-question/ask-user-question.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.d.ts.map +1 -1
- package/dist/core/tools/edit.js +2 -0
- 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 +3 -1
- package/docs/tui.md +2 -0
- package/docs/usage.md +5 -4
- package/docs/workflows.md +62 -19
- package/npm-shrinkwrap.json +211 -232
- package/package.json +8 -8
- 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
|
@@ -19,6 +19,7 @@ import { runCallback } from "@bastani/atomic";
|
|
|
19
19
|
import { sleepOrAbort } from "../runs/shared/retry.js";
|
|
20
20
|
import { flattenTruncatedString } from "../shared/flat-string.js";
|
|
21
21
|
import type { ToolNodeSnapshot } from "../shared/store-types.js";
|
|
22
|
+
import { boundedToolPayloadRecord, boundedToolText } from "../shared/tool-payload-bounds.js";
|
|
22
23
|
import type {
|
|
23
24
|
WorkflowSerializableValue,
|
|
24
25
|
WorkflowToolContext,
|
|
@@ -109,12 +110,41 @@ export interface CreateToolPrimitiveInput {
|
|
|
109
110
|
readonly onNodeRunning?: (nodeId: string, startedAt: number) => void;
|
|
110
111
|
readonly onNodeEnd?: (
|
|
111
112
|
nodeId: string,
|
|
112
|
-
update: Pick<ToolNodeSnapshot, "status"> &
|
|
113
|
+
update: Pick<ToolNodeSnapshot, "status"> &
|
|
114
|
+
Partial<Pick<ToolNodeSnapshot, "endedAt" | "durationMs" | "result" | "resultSummary" | "error">>,
|
|
113
115
|
) => void;
|
|
114
116
|
readonly onNodeSettle?: (nodeId: string) => void;
|
|
115
117
|
readonly runTopology?: DurableStageRunTopology;
|
|
116
118
|
}
|
|
117
119
|
|
|
120
|
+
function cloneToolArgs(
|
|
121
|
+
args: Readonly<Record<string, WorkflowSerializableValue>>,
|
|
122
|
+
): Readonly<Record<string, WorkflowSerializableValue>> {
|
|
123
|
+
// Bounded, hostile-input safe, and always a plain object: author args may be
|
|
124
|
+
// cyclic, may throw on property access, may be arbitrarily large, and may
|
|
125
|
+
// carry a `toJSON` that would otherwise collapse the record to a scalar in a
|
|
126
|
+
// durable checkpoint. `argsHash` still hashes the raw args, so cache identity
|
|
127
|
+
// is unaffected by this inspection copy.
|
|
128
|
+
return boundedToolPayloadRecord(args);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Capture the callback's own source for read-only inspection.
|
|
133
|
+
*
|
|
134
|
+
* `Function.prototype.toString` reads text the runtime already holds: it never
|
|
135
|
+
* invokes the callback, never touches the filesystem, and never reaches any
|
|
136
|
+
* data beyond the function passed to this call. A host that refuses the read
|
|
137
|
+
* simply yields no source row.
|
|
138
|
+
*/
|
|
139
|
+
function captureCallbackSource(fn: unknown): string | undefined {
|
|
140
|
+
if (typeof fn !== "function") return undefined;
|
|
141
|
+
try {
|
|
142
|
+
return boundedToolText(Function.prototype.toString.call(fn));
|
|
143
|
+
} catch {
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
118
148
|
/**
|
|
119
149
|
* Create the `ctx.tool` primitive wired to a durable backend.
|
|
120
150
|
*/
|
|
@@ -155,7 +185,7 @@ export function createToolPrimitive(input: CreateToolPrimitiveInput): WorkflowTo
|
|
|
155
185
|
noteCancelled: () => admission?.noteCancelled?.(),
|
|
156
186
|
releaseAdmission: () => lease?.release(),
|
|
157
187
|
};
|
|
158
|
-
void executeToolInvocation(input, ordinals, name, args, fn, options, control)
|
|
188
|
+
void executeToolInvocation(input, ordinals, name, args, fn, options, control, captureCallbackSource(fn))
|
|
159
189
|
// Backstop for a throw before either explicit release point; the lease
|
|
160
190
|
// release itself is idempotent.
|
|
161
191
|
.finally(() => lease?.release())
|
|
@@ -172,6 +202,7 @@ async function executeToolInvocation<T extends WorkflowSerializableValue>(
|
|
|
172
202
|
fn: (toolCtx: WorkflowToolContext) => Promise<T>,
|
|
173
203
|
options: WorkflowToolOptions | undefined,
|
|
174
204
|
control: ToolInvocationAdmissionControl,
|
|
205
|
+
source: string | undefined,
|
|
175
206
|
): Promise<WorkflowToolInvocationResult<T>> {
|
|
176
207
|
input.throwIfCancelled();
|
|
177
208
|
if (
|
|
@@ -181,6 +212,9 @@ async function executeToolInvocation<T extends WorkflowSerializableValue>(
|
|
|
181
212
|
) {
|
|
182
213
|
throw new RangeError("atomic-workflows: ctx.tool maxAttempts must be a positive integer");
|
|
183
214
|
}
|
|
215
|
+
if (options?.timeoutMs !== undefined && (!Number.isFinite(options.timeoutMs) || options.timeoutMs <= 0)) {
|
|
216
|
+
throw new RangeError("atomic-workflows: ctx.tool timeoutMs must be a positive finite number");
|
|
217
|
+
}
|
|
184
218
|
const returnFailure = options?.failureMode === "return";
|
|
185
219
|
const identityMode = returnFailure ? { failureMode: "return" as const } : {};
|
|
186
220
|
const callKey = durableHash({ name, args, ...identityMode });
|
|
@@ -189,10 +223,13 @@ async function executeToolInvocation<T extends WorkflowSerializableValue>(
|
|
|
189
223
|
const argsHash = durableHash({ name, args, ordinal, ...identityMode });
|
|
190
224
|
|
|
191
225
|
const cached = input.backend.getToolCheckpoint(input.workflowId, argsHash);
|
|
226
|
+
const capturedSource = cached?.source ?? source;
|
|
192
227
|
const node: ToolNodeSnapshot = {
|
|
193
228
|
kind: "tool",
|
|
194
229
|
id: cached?.topology?.nodeId ?? `tool:${argsHash}`,
|
|
195
230
|
name,
|
|
231
|
+
args: cloneToolArgs(cached?.args ?? args),
|
|
232
|
+
...(capturedSource !== undefined ? { source: capturedSource } : {}),
|
|
196
233
|
argsHash,
|
|
197
234
|
ordinal: cached?.topology?.ordinal ?? ordinal,
|
|
198
235
|
parentIds: Object.freeze(cached?.topology?.parentIds ?? []),
|
|
@@ -223,6 +260,8 @@ async function executeToolInvocation<T extends WorkflowSerializableValue>(
|
|
|
223
260
|
input.onNodeEnd?.(node.id, {
|
|
224
261
|
status: failed ? "failed" : "cached",
|
|
225
262
|
endedAt,
|
|
263
|
+
...(node.startedAt !== undefined ? { durationMs: Math.max(0, endedAt - node.startedAt) } : {}),
|
|
264
|
+
result: output,
|
|
226
265
|
...(failed && returnedOutcome?.ok === false
|
|
227
266
|
? { error: returnedOutcome.error.message }
|
|
228
267
|
: { resultSummary: summarizeToolResult(output) }),
|
|
@@ -233,9 +272,11 @@ async function executeToolInvocation<T extends WorkflowSerializableValue>(
|
|
|
233
272
|
const cancelled = input.signal?.aborted === true;
|
|
234
273
|
if (cancelled) control.noteCancelled();
|
|
235
274
|
else input.onFailureObserved?.(error, node.id);
|
|
275
|
+
const endedAt = Date.now();
|
|
236
276
|
input.onNodeEnd?.(node.id, {
|
|
237
277
|
status: cancelled ? "cancelled" : "failed",
|
|
238
|
-
endedAt
|
|
278
|
+
endedAt,
|
|
279
|
+
...(node.startedAt !== undefined ? { durationMs: Math.max(0, endedAt - node.startedAt) } : {}),
|
|
239
280
|
error: error instanceof Error ? error.message : String(error),
|
|
240
281
|
});
|
|
241
282
|
input.onNodeSettle?.(node.id);
|
|
@@ -246,6 +287,8 @@ async function executeToolInvocation<T extends WorkflowSerializableValue>(
|
|
|
246
287
|
input,
|
|
247
288
|
node,
|
|
248
289
|
name,
|
|
290
|
+
args: node.args ?? args,
|
|
291
|
+
...(capturedSource !== undefined ? { source: capturedSource } : {}),
|
|
249
292
|
argsHash,
|
|
250
293
|
ordinal,
|
|
251
294
|
fn,
|
|
@@ -259,6 +302,8 @@ interface LiveToolInvocation<T extends WorkflowSerializableValue> {
|
|
|
259
302
|
readonly input: CreateToolPrimitiveInput;
|
|
260
303
|
readonly node: ToolNodeSnapshot;
|
|
261
304
|
readonly name: string;
|
|
305
|
+
readonly args: Readonly<Record<string, WorkflowSerializableValue>>;
|
|
306
|
+
readonly source?: string;
|
|
262
307
|
readonly argsHash: string;
|
|
263
308
|
readonly ordinal: number;
|
|
264
309
|
readonly fn: (toolCtx: WorkflowToolContext) => Promise<T>;
|
|
@@ -266,6 +311,86 @@ interface LiveToolInvocation<T extends WorkflowSerializableValue> {
|
|
|
266
311
|
readonly control: ToolInvocationAdmissionControl;
|
|
267
312
|
readonly returnFailure: boolean;
|
|
268
313
|
}
|
|
314
|
+
class WorkflowToolTimeoutError extends Error {
|
|
315
|
+
constructor(toolName: string, timeoutMs: number) {
|
|
316
|
+
super(`atomic-workflows: ctx.tool ${toolName} timed out after ${timeoutMs}ms`);
|
|
317
|
+
this.name = "TimeoutError";
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
const MAX_HOST_TIMER_MS = 2_147_483_647;
|
|
322
|
+
|
|
323
|
+
/** Schedule a finite deadline without triggering host timer overflow clamping. */
|
|
324
|
+
function scheduleDeadline(callback: () => void, timeoutMs: number): () => void {
|
|
325
|
+
let remainingMs = timeoutMs;
|
|
326
|
+
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
327
|
+
const scheduleNextChunk = () => {
|
|
328
|
+
const chunkMs = Math.min(remainingMs, MAX_HOST_TIMER_MS);
|
|
329
|
+
timer = setTimeout(() => {
|
|
330
|
+
remainingMs -= chunkMs;
|
|
331
|
+
if (remainingMs > 0) scheduleNextChunk();
|
|
332
|
+
else callback();
|
|
333
|
+
}, chunkMs);
|
|
334
|
+
};
|
|
335
|
+
scheduleNextChunk();
|
|
336
|
+
return () => {
|
|
337
|
+
if (timer !== undefined) clearTimeout(timer);
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
type ToolCallbackAttemptResult<T> =
|
|
342
|
+
| { readonly kind: "value"; readonly value: T }
|
|
343
|
+
| { readonly kind: "error"; readonly error: unknown };
|
|
344
|
+
|
|
345
|
+
function abortReason(signal: AbortSignal): Error {
|
|
346
|
+
return signal.reason instanceof Error ? signal.reason : new Error("atomic-workflows: workflow cancelled");
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/** Run one callback attempt with a fresh signal and deadline. */
|
|
350
|
+
async function executeTimedToolAttempt<T extends WorkflowSerializableValue>(
|
|
351
|
+
toolName: string,
|
|
352
|
+
runId: string,
|
|
353
|
+
fn: (toolCtx: WorkflowToolContext) => Promise<T>,
|
|
354
|
+
baseSignal: AbortSignal,
|
|
355
|
+
timeoutMs: number,
|
|
356
|
+
): Promise<T> {
|
|
357
|
+
const timeoutController = new AbortController();
|
|
358
|
+
const attemptSignal = AbortSignal.any([baseSignal, timeoutController.signal]);
|
|
359
|
+
return runCallback({ kind: "workflow.ctx_tool", name: toolName, runId }, async () => {
|
|
360
|
+
const callbackResult: Promise<ToolCallbackAttemptResult<T>> = Promise.resolve()
|
|
361
|
+
.then(() => fn({ signal: attemptSignal }))
|
|
362
|
+
.then(
|
|
363
|
+
(value) => ({ kind: "value" as const, value }),
|
|
364
|
+
(error: unknown) => ({ kind: "error" as const, error }),
|
|
365
|
+
);
|
|
366
|
+
let cancelDeadline: (() => void) | undefined;
|
|
367
|
+
let onAbort: (() => void) | undefined;
|
|
368
|
+
let timeoutError: WorkflowToolTimeoutError | undefined;
|
|
369
|
+
const timeoutResult = new Promise<never>((_, reject) => {
|
|
370
|
+
cancelDeadline = scheduleDeadline(() => {
|
|
371
|
+
if (baseSignal.aborted) return;
|
|
372
|
+
timeoutError = new WorkflowToolTimeoutError(toolName, timeoutMs);
|
|
373
|
+
timeoutController.abort(timeoutError);
|
|
374
|
+
reject(timeoutError);
|
|
375
|
+
}, timeoutMs);
|
|
376
|
+
});
|
|
377
|
+
const cancellationResult = new Promise<never>((_, reject) => {
|
|
378
|
+
onAbort = () => {
|
|
379
|
+
if (timeoutError === undefined) reject(abortReason(baseSignal));
|
|
380
|
+
};
|
|
381
|
+
if (baseSignal.aborted) onAbort();
|
|
382
|
+
else baseSignal.addEventListener("abort", onAbort, { once: true });
|
|
383
|
+
});
|
|
384
|
+
try {
|
|
385
|
+
const result = await Promise.race([callbackResult, timeoutResult, cancellationResult]);
|
|
386
|
+
if (result.kind === "value") return result.value;
|
|
387
|
+
throw result.error;
|
|
388
|
+
} finally {
|
|
389
|
+
cancelDeadline?.();
|
|
390
|
+
if (onAbort !== undefined) baseSignal.removeEventListener("abort", onAbort);
|
|
391
|
+
}
|
|
392
|
+
});
|
|
393
|
+
}
|
|
269
394
|
|
|
270
395
|
/**
|
|
271
396
|
* Execute one uncached tool call under its own abort controller.
|
|
@@ -278,7 +403,7 @@ interface LiveToolInvocation<T extends WorkflowSerializableValue> {
|
|
|
278
403
|
async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
|
|
279
404
|
live: LiveToolInvocation<T>,
|
|
280
405
|
): Promise<WorkflowToolInvocationResult<T>> {
|
|
281
|
-
const { input, node, name, argsHash, ordinal, fn, options, control, returnFailure } = live;
|
|
406
|
+
const { input, node, name, args, source, argsHash, ordinal, fn, options, control, returnFailure } = live;
|
|
282
407
|
const nodeController = new AbortController();
|
|
283
408
|
const toolSignal =
|
|
284
409
|
input.signal === undefined ? nodeController.signal : AbortSignal.any([input.signal, nodeController.signal]);
|
|
@@ -302,9 +427,13 @@ async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
|
|
|
302
427
|
const result = await executeWithRetries(
|
|
303
428
|
() => {
|
|
304
429
|
attempts += 1;
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
430
|
+
const callback =
|
|
431
|
+
options?.timeoutMs === undefined
|
|
432
|
+
? runCallback({ kind: "workflow.ctx_tool", name, runId: input.workflowId }, () =>
|
|
433
|
+
fn({ signal: toolSignal }),
|
|
434
|
+
)
|
|
435
|
+
: executeTimedToolAttempt(name, input.workflowId, fn, toolSignal, options.timeoutMs);
|
|
436
|
+
return callback.catch((error: unknown) => {
|
|
308
437
|
callbackError = error;
|
|
309
438
|
throw error;
|
|
310
439
|
});
|
|
@@ -328,6 +457,8 @@ async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
|
|
|
328
457
|
workflowId: input.workflowId,
|
|
329
458
|
checkpointId: `tool:${argsHash}`,
|
|
330
459
|
name,
|
|
460
|
+
args: cloneToolArgs(args),
|
|
461
|
+
...(source !== undefined ? { source } : {}),
|
|
331
462
|
argsHash,
|
|
332
463
|
output,
|
|
333
464
|
...(returnFailure ? { outcomeKind: "return_success" as const } : {}),
|
|
@@ -347,12 +478,15 @@ async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
|
|
|
347
478
|
input.onNodeEnd?.(node.id, {
|
|
348
479
|
status: "completed",
|
|
349
480
|
endedAt: completedAt,
|
|
481
|
+
durationMs: Math.max(0, completedAt - startedAt),
|
|
482
|
+
result: output,
|
|
350
483
|
resultSummary: summarizeToolResult(output),
|
|
351
484
|
});
|
|
352
485
|
input.onNodeSettle?.(node.id);
|
|
353
486
|
return output;
|
|
354
487
|
} catch (error) {
|
|
355
|
-
const
|
|
488
|
+
const timeoutFailure = error instanceof WorkflowToolTimeoutError;
|
|
489
|
+
const cancellation = timeoutFailure ? undefined : invocationCancellation(input, toolSignal);
|
|
356
490
|
if (cancellation !== undefined) {
|
|
357
491
|
control.noteCancelled();
|
|
358
492
|
// A cancelled call never writes a replayable `tool:` checkpoint and never
|
|
@@ -366,9 +500,11 @@ async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
|
|
|
366
500
|
if (returnFailure) {
|
|
367
501
|
await recordCancelledToolInspection(live, startedAt, cancellation, attempts);
|
|
368
502
|
}
|
|
503
|
+
const endedAt = Date.now();
|
|
369
504
|
input.onNodeEnd?.(node.id, {
|
|
370
505
|
status: "cancelled",
|
|
371
|
-
endedAt
|
|
506
|
+
endedAt,
|
|
507
|
+
durationMs: Math.max(0, endedAt - startedAt),
|
|
372
508
|
error: cancellation.message,
|
|
373
509
|
});
|
|
374
510
|
input.onNodeSettle?.(node.id);
|
|
@@ -380,11 +516,16 @@ async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
|
|
|
380
516
|
const failure = await recordThrowingToolFailure(
|
|
381
517
|
input,
|
|
382
518
|
node,
|
|
383
|
-
{ name, argsHash, ordinal, startedAt },
|
|
519
|
+
{ name, args, ...(source !== undefined ? { source } : {}), argsHash, ordinal, startedAt },
|
|
384
520
|
callbackFailure,
|
|
385
521
|
attempts,
|
|
386
522
|
);
|
|
387
|
-
input.onNodeEnd?.(node.id, {
|
|
523
|
+
input.onNodeEnd?.(node.id, {
|
|
524
|
+
status: "failed",
|
|
525
|
+
endedAt: failure.failedAt,
|
|
526
|
+
durationMs: Math.max(0, failure.failedAt - startedAt),
|
|
527
|
+
error: failure.message,
|
|
528
|
+
});
|
|
388
529
|
input.onNodeSettle?.(node.id);
|
|
389
530
|
throw callbackFailure;
|
|
390
531
|
}
|
|
@@ -396,6 +537,8 @@ async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
|
|
|
396
537
|
workflowId: input.workflowId,
|
|
397
538
|
checkpointId: `tool:${argsHash}`,
|
|
398
539
|
name,
|
|
540
|
+
args: cloneToolArgs(args),
|
|
541
|
+
...(source !== undefined ? { source } : {}),
|
|
399
542
|
argsHash,
|
|
400
543
|
output: outcome,
|
|
401
544
|
outcomeKind: "return_failure",
|
|
@@ -415,30 +558,44 @@ async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
|
|
|
415
558
|
await recordCheckpointDurably(input.backend, checkpoint);
|
|
416
559
|
} catch (persistenceError) {
|
|
417
560
|
input.onFailureObserved?.(persistenceError, node.id);
|
|
561
|
+
const endedAt = Date.now();
|
|
418
562
|
input.onNodeEnd?.(node.id, {
|
|
419
563
|
status: "failed",
|
|
420
|
-
endedAt
|
|
564
|
+
endedAt,
|
|
565
|
+
durationMs: Math.max(0, endedAt - startedAt),
|
|
421
566
|
error: persistenceError instanceof Error ? persistenceError.message : String(persistenceError),
|
|
422
567
|
});
|
|
423
568
|
input.onNodeSettle?.(node.id);
|
|
424
569
|
throw persistenceError;
|
|
425
570
|
}
|
|
426
|
-
input.onNodeEnd?.(node.id, {
|
|
571
|
+
input.onNodeEnd?.(node.id, {
|
|
572
|
+
status: "failed",
|
|
573
|
+
endedAt: completedAt,
|
|
574
|
+
durationMs: Math.max(0, completedAt - startedAt),
|
|
575
|
+
result: outcome,
|
|
576
|
+
error: outcome.error.message,
|
|
577
|
+
});
|
|
427
578
|
input.onNodeSettle?.(node.id);
|
|
428
|
-
throwIfInvocationCancelled(input, toolSignal);
|
|
579
|
+
if (!timeoutFailure) throwIfInvocationCancelled(input, toolSignal);
|
|
429
580
|
return outcome;
|
|
430
581
|
}
|
|
431
|
-
|
|
582
|
+
const reportedFailure = timeoutFailure ? callbackError : error;
|
|
583
|
+
input.onFailureObserved?.(reportedFailure, node.id);
|
|
432
584
|
const failure = await recordThrowingToolFailure(
|
|
433
585
|
input,
|
|
434
586
|
node,
|
|
435
|
-
{ name, argsHash, ordinal, startedAt },
|
|
436
|
-
|
|
587
|
+
{ name, args, ...(source !== undefined ? { source } : {}), argsHash, ordinal, startedAt },
|
|
588
|
+
reportedFailure,
|
|
437
589
|
attempts,
|
|
438
590
|
);
|
|
439
|
-
input.onNodeEnd?.(node.id, {
|
|
591
|
+
input.onNodeEnd?.(node.id, {
|
|
592
|
+
status: "failed",
|
|
593
|
+
endedAt: failure.failedAt,
|
|
594
|
+
durationMs: Math.max(0, failure.failedAt - startedAt),
|
|
595
|
+
error: failure.message,
|
|
596
|
+
});
|
|
440
597
|
input.onNodeSettle?.(node.id);
|
|
441
|
-
throw
|
|
598
|
+
throw reportedFailure;
|
|
442
599
|
} finally {
|
|
443
600
|
settlement.resolve();
|
|
444
601
|
unregisterControl?.();
|
|
@@ -464,7 +621,14 @@ async function recordCancelledToolInspection<T extends WorkflowSerializableValue
|
|
|
464
621
|
await recordThrowingToolFailure(
|
|
465
622
|
live.input,
|
|
466
623
|
live.node,
|
|
467
|
-
{
|
|
624
|
+
{
|
|
625
|
+
name: live.name,
|
|
626
|
+
args: live.args,
|
|
627
|
+
...(live.source !== undefined ? { source: live.source } : {}),
|
|
628
|
+
argsHash: live.argsHash,
|
|
629
|
+
ordinal: live.ordinal,
|
|
630
|
+
startedAt,
|
|
631
|
+
},
|
|
468
632
|
cancellation,
|
|
469
633
|
attempts,
|
|
470
634
|
);
|
|
@@ -606,6 +770,8 @@ async function recordReplayedToolTopology(
|
|
|
606
770
|
workflowId: input.workflowId,
|
|
607
771
|
checkpointId: `tool-replay-meta:${durableHash({ argsHash, topology })}`,
|
|
608
772
|
name: node.name,
|
|
773
|
+
...(cached.args !== undefined ? { args: cached.args } : {}),
|
|
774
|
+
...(cached.source !== undefined ? { source: cached.source } : {}),
|
|
609
775
|
argsHash,
|
|
610
776
|
output: cached.output,
|
|
611
777
|
...(cached.outcomeKind !== undefined ? { outcomeKind: cached.outcomeKind } : {}),
|
|
@@ -112,6 +112,10 @@ export interface DurableToolCheckpoint {
|
|
|
112
112
|
readonly checkpointId: string;
|
|
113
113
|
/** Tool name for display/debugging. */
|
|
114
114
|
readonly name: string;
|
|
115
|
+
/** Exact invocation arguments retained for read-only inspection. */
|
|
116
|
+
readonly args?: Readonly<Record<string, WorkflowSerializableValue>>;
|
|
117
|
+
/** Callback source captured at registration for read-only inspection. */
|
|
118
|
+
readonly source?: string;
|
|
115
119
|
/** Deterministic hash of the tool arguments for idempotency. */
|
|
116
120
|
readonly argsHash: string;
|
|
117
121
|
/** Cached tool output (JSON-serializable). */
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* cross-ref: issue #2078; src/runs/foreground/stage-control-registry.ts
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
+
import { createSessionScopedSingleton } from "../shared/session-scoped-singleton.js";
|
|
16
17
|
import type { WorkflowToolNodeIdentity } from "../shared/types.js";
|
|
17
18
|
import type { ToolAdmissionBoundary } from "./run-tool-admission-boundary.js";
|
|
18
19
|
import { WorkflowToolAbortError, type WorkflowToolAbortScope } from "./workflow-tool-abort.js";
|
|
@@ -130,7 +131,14 @@ export function createToolControlRegistry(): ToolControlRegistry {
|
|
|
130
131
|
* through `RunOpts.toolControlRegistry`; the singleton is the default consumer
|
|
131
132
|
* surface used by the extension factory.
|
|
132
133
|
*/
|
|
133
|
-
|
|
134
|
+
const SESSION_KEY = "workflows:tool-control:v1";
|
|
135
|
+
const singleton = createSessionScopedSingleton(SESSION_KEY, createToolControlRegistry);
|
|
136
|
+
|
|
137
|
+
export const toolControlRegistry: ToolControlRegistry = singleton.facade;
|
|
138
|
+
|
|
139
|
+
export function adoptToolControlRegistry(scope: object): ToolControlRegistry {
|
|
140
|
+
return singleton.adopt(scope);
|
|
141
|
+
}
|
|
134
142
|
|
|
135
143
|
/**
|
|
136
144
|
* Await settlement of aborted tool handles up to `timeoutMs` and report the
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { adoptToolControlRegistry } from "../engine/run-tool-control-registry.js";
|
|
2
|
+
import { adoptCancellationRegistry } from "../runs/background/cancellation-registry.js";
|
|
3
|
+
import { adoptJobTracker } from "../runs/background/job-tracker.js";
|
|
4
|
+
import { adoptStageControlRegistry } from "../runs/foreground/stage-control-registry.js";
|
|
5
|
+
import { adoptStageUiBroker } from "../shared/stage-ui-broker.js";
|
|
6
|
+
import { adoptStore } from "../shared/store-factory.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Re-bind every run-scoped singleton to host session state for `scope`.
|
|
10
|
+
* No-op when the host has not supplied a scope (unit tests, embedded SDK).
|
|
11
|
+
*/
|
|
12
|
+
export function adoptWorkflowSessionRunState(scope: object | undefined): void {
|
|
13
|
+
if (scope === undefined) return;
|
|
14
|
+
adoptStore(scope);
|
|
15
|
+
adoptStageControlRegistry(scope);
|
|
16
|
+
adoptCancellationRegistry(scope);
|
|
17
|
+
adoptToolControlRegistry(scope);
|
|
18
|
+
adoptJobTracker(scope);
|
|
19
|
+
adoptStageUiBroker(scope);
|
|
20
|
+
}
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
* src/tui/graph-view.ts pending-prompt rendering + key handling
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
|
+
import { requirePrimitivePromptAnswer } from "../shared/prompt-answer.js";
|
|
32
33
|
import type { Store } from "../shared/store.js";
|
|
33
34
|
import type { PendingPrompt, PromptKind } from "../shared/store-types.js";
|
|
34
35
|
import type { WorkflowUIAdapter } from "../shared/types.js";
|
|
@@ -128,48 +129,26 @@ function fallbackForKind(descriptor: PromptDescriptor): unknown {
|
|
|
128
129
|
export function buildBackgroundUIAdapter(store: Store, runId: string, signal?: AbortSignal): WorkflowUIAdapter {
|
|
129
130
|
return {
|
|
130
131
|
async input(prompt: string): Promise<string> {
|
|
131
|
-
const
|
|
132
|
-
return
|
|
132
|
+
const descriptor = { kind: "input" as const, message: prompt };
|
|
133
|
+
return requirePrimitivePromptAnswer(descriptor, await ask(store, runId, descriptor, signal)) as string;
|
|
133
134
|
},
|
|
134
135
|
|
|
135
136
|
async confirm(message: string): Promise<boolean> {
|
|
136
|
-
const
|
|
137
|
-
return
|
|
137
|
+
const descriptor = { kind: "confirm" as const, message };
|
|
138
|
+
return requirePrimitivePromptAnswer(descriptor, await ask(store, runId, descriptor, signal)) as boolean;
|
|
138
139
|
},
|
|
139
140
|
|
|
140
141
|
async select<T extends string>(message: string, options: readonly T[]): Promise<T> {
|
|
141
142
|
if (options.length === 0) {
|
|
142
143
|
throw new Error("atomic-workflows: ctx.ui.select requires at least one option");
|
|
143
144
|
}
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
runId,
|
|
147
|
-
{
|
|
148
|
-
kind: "select",
|
|
149
|
-
message,
|
|
150
|
-
choices: options,
|
|
151
|
-
},
|
|
152
|
-
signal,
|
|
153
|
-
);
|
|
154
|
-
if (typeof response === "string" && (options as readonly string[]).includes(response)) {
|
|
155
|
-
return response as T;
|
|
156
|
-
}
|
|
157
|
-
return options[0]!;
|
|
145
|
+
const descriptor = { kind: "select" as const, message, choices: options };
|
|
146
|
+
return requirePrimitivePromptAnswer(descriptor, await ask(store, runId, descriptor, signal)) as T;
|
|
158
147
|
},
|
|
159
148
|
|
|
160
149
|
async editor(initial?: string): Promise<string> {
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
runId,
|
|
164
|
-
{
|
|
165
|
-
kind: "editor",
|
|
166
|
-
message: "Edit and save to continue.",
|
|
167
|
-
initial,
|
|
168
|
-
},
|
|
169
|
-
signal,
|
|
170
|
-
);
|
|
171
|
-
if (typeof response === "string") return response;
|
|
172
|
-
return initial ?? "";
|
|
150
|
+
const descriptor = { kind: "editor" as const, message: "Edit and save to continue.", initial };
|
|
151
|
+
return requirePrimitivePromptAnswer(descriptor, await ask(store, runId, descriptor, signal)) as string;
|
|
173
152
|
},
|
|
174
153
|
};
|
|
175
154
|
}
|
|
@@ -8,6 +8,7 @@ import type { GraphOverlayPort } from "../tui/overlay-adapter.js";
|
|
|
8
8
|
import { buildGraphOverlayAdapter } from "../tui/overlay-adapter.js";
|
|
9
9
|
import { installStoreWidget, installToolExecutionHooks } from "../tui/store-widget-installer.js";
|
|
10
10
|
import type { PostMortemHandleResolution } from "../tui/workflow-attach-pane-types.js";
|
|
11
|
+
import { adoptWorkflowSessionRunState } from "./adopt-session-run-state.js";
|
|
11
12
|
import { registerCompletedStageIntercomAskRouter } from "./completed-stage-intercom-ask.js";
|
|
12
13
|
import { registerWorkflowLifecycleHandlers } from "./extension-lifecycle.js";
|
|
13
14
|
import { createWorkflowExtensionRuntimeState } from "./extension-runtime-state.js";
|
|
@@ -68,6 +69,8 @@ function registerIntercomControl(pi: ExtensionAPI, intercomControlRef: { current
|
|
|
68
69
|
}
|
|
69
70
|
|
|
70
71
|
function factory(pi: ExtensionAPI): void {
|
|
72
|
+
adoptWorkflowSessionRunState(pi.events);
|
|
73
|
+
|
|
71
74
|
const adapters = buildRuntimeAdapters(pi);
|
|
72
75
|
const runtimeState = createWorkflowExtensionRuntimeState(pi, adapters);
|
|
73
76
|
const postMortemResolverDeps = {
|
|
@@ -47,6 +47,17 @@ function installDbosProcessShutdown(): void {
|
|
|
47
47
|
process.once("beforeExit", () => void shutdownDbosQuietly());
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
/**
|
|
51
|
+
* `/reload`, `/fork`, `/new`, and `/resume` replace the host session inside
|
|
52
|
+
* one process that keeps running the workflows. Those reasons must not kill
|
|
53
|
+
* in-flight runs or drop live executor handles. `startup` and any reason
|
|
54
|
+
* this code does not recognise still clear: neither names a predecessor
|
|
55
|
+
* that handed anything over. `/reload` reuses the host bus; the others do not.
|
|
56
|
+
*/
|
|
57
|
+
function replacementStopsWorkflows(reason: string | undefined): boolean {
|
|
58
|
+
return reason !== "reload" && reason !== "fork" && reason !== "new" && reason !== "resume";
|
|
59
|
+
}
|
|
60
|
+
|
|
50
61
|
export interface WorkflowLifecycleRegistrationDeps {
|
|
51
62
|
runtimeState: WorkflowExtensionRuntimeState;
|
|
52
63
|
storeWidgetRef: { current: (() => void) | null };
|
|
@@ -72,28 +83,35 @@ export function registerWorkflowLifecycleHandlers(pi: ExtensionAPI, deps: Workfl
|
|
|
72
83
|
const messageLabel = reason === "new" ? "Starting a new session" : "Resuming another session";
|
|
73
84
|
try {
|
|
74
85
|
const shouldSwitchSession = await confirmSessionSwitch(
|
|
75
|
-
`${actionLabel}
|
|
76
|
-
`${messageLabel}
|
|
86
|
+
`${actionLabel} with ${inFlightWorkflowCount} in-flight ${workflowNoun} still running?`,
|
|
87
|
+
`${messageLabel} keeps ${inFlightWorkflowCount} in-flight ${workflowNoun} running in this process. They stay on the session that started them.`,
|
|
77
88
|
);
|
|
78
89
|
if (shouldSwitchSession) return undefined;
|
|
79
90
|
} catch {
|
|
80
91
|
return undefined;
|
|
81
92
|
}
|
|
82
93
|
const cancelledLabel = reason === "new" ? "New session" : "Resume";
|
|
83
|
-
ctx?.ui?.notify?.(`${cancelledLabel} cancelled; in-flight workflows
|
|
94
|
+
ctx?.ui?.notify?.(`${cancelledLabel} cancelled; in-flight workflows keep running.`, "info");
|
|
84
95
|
return { cancel: true };
|
|
85
96
|
});
|
|
86
97
|
|
|
87
|
-
pi.on("session_start", async (
|
|
98
|
+
pi.on("session_start", async (event, ctx) => {
|
|
99
|
+
const reason =
|
|
100
|
+
typeof event === "object" && event !== null && "reason" in event
|
|
101
|
+
? (event as { readonly reason?: string }).reason
|
|
102
|
+
: undefined;
|
|
88
103
|
runtimeState.resetWorkflowDiscoveryForSession();
|
|
89
104
|
deAdvertiseAskUserQuestionWhenHeadless(pi, ctx?.hasUI);
|
|
90
105
|
await runtimeState.ensureWorkflowConfigLoaded();
|
|
91
|
-
|
|
92
|
-
|
|
106
|
+
if (replacementStopsWorkflows(reason)) {
|
|
107
|
+
killAllRuns({ store, cancellation: cancellationRegistry, persistence: runtimeState.persistenceRef.current });
|
|
108
|
+
store.clear();
|
|
109
|
+
}
|
|
93
110
|
clearForms();
|
|
94
111
|
resetWorkflowLifecycleNotificationState(runtimeState.lifecycleNotificationState);
|
|
95
112
|
resetWorkflowHilAnswerNotificationState(runtimeState.hilAnswerNotificationState);
|
|
96
|
-
stageControlRegistry.clear();
|
|
113
|
+
if (replacementStopsWorkflows(reason)) stageControlRegistry.clear();
|
|
114
|
+
else stageControlRegistry.clearDetached();
|
|
97
115
|
// Named workflows publish lifecycle notices through the normal notification path.
|
|
98
116
|
runtimeState.setNotificationsActive(true);
|
|
99
117
|
runtimeState.startWorkflowDiscoveryWarmup(() => {
|
|
@@ -141,10 +159,10 @@ export function registerWorkflowLifecycleHandlers(pi: ExtensionAPI, deps: Workfl
|
|
|
141
159
|
} finally {
|
|
142
160
|
stageControlRegistry.clear();
|
|
143
161
|
}
|
|
144
|
-
} else {
|
|
145
|
-
// Every non-quit host-session boundary invalidates detached lazy handles
|
|
146
|
-
// synchronously, before they can attach to the replacement session.
|
|
162
|
+
} else if (replacementStopsWorkflows(reason)) {
|
|
147
163
|
stageControlRegistry.clear();
|
|
164
|
+
} else {
|
|
165
|
+
stageControlRegistry.clearDetached();
|
|
148
166
|
}
|
|
149
167
|
deps.storeWidgetRef.current?.();
|
|
150
168
|
deps.storeWidgetRef.current = null;
|