@bastani/atomic 0.9.13 → 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 +58 -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 +57 -0
- package/dist/builtin/workflows/README.md +39 -8
- package/dist/builtin/workflows/builtin/adversarial-verification-runner.ts +16 -5
- package/dist/builtin/workflows/builtin/adversarial-verification.ts +4 -0
- package/dist/builtin/workflows/builtin/classify-and-act.ts +4 -0
- package/dist/builtin/workflows/builtin/fan-out-and-synthesize.ts +4 -0
- package/dist/builtin/workflows/builtin/generate-and-filter-runner.ts +12 -4
- package/dist/builtin/workflows/builtin/generate-and-filter.ts +4 -0
- package/dist/builtin/workflows/builtin/goal-models.ts +8 -10
- package/dist/builtin/workflows/builtin/goal.ts +4 -0
- 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/loop-until-done.ts +4 -0
- 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 +11 -15
- package/dist/builtin/workflows/builtin/ralph-models.ts +24 -29
- package/dist/builtin/workflows/builtin/ralph.ts +4 -0
- package/dist/builtin/workflows/builtin/tournament-runner.ts +6 -3
- package/dist/builtin/workflows/builtin/tournament.ts +4 -0
- 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/authoring/workflow.ts +9 -0
- package/dist/builtin/workflows/src/authoring.d.ts +3 -0
- package/dist/builtin/workflows/src/durable/completed-catalog.ts +23 -2
- 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/durable/workflow-heartbeat-anchor.ts +153 -0
- package/dist/builtin/workflows/src/engine/run-durable-stage-session.ts +28 -0
- package/dist/builtin/workflows/src/engine/run-tool-control-registry.ts +9 -1
- package/dist/builtin/workflows/src/engine/run.ts +1 -0
- 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/extension-runtime-state.ts +138 -0
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +3365 -1341
- package/dist/builtin/workflows/src/extension/workflow-heartbeat-delivery.ts +197 -0
- package/dist/builtin/workflows/src/extension/workflow-heartbeat-notice.ts +115 -0
- package/dist/builtin/workflows/src/extension/workflow-heartbeat-scheduler.ts +962 -0
- 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/sdk-surface.ts +9 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +10 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +10 -0
- package/dist/builtin/workflows/src/shared/graph-store-snapshot.ts +14 -2
- package/dist/builtin/workflows/src/shared/persistence-restore.ts +12 -0
- 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/shared/workflow-authoring-types.d.ts +1 -0
- package/dist/builtin/workflows/src/shared/workflow-authoring-types.ts +1 -0
- package/dist/builtin/workflows/src/shared/workflow-heartbeat-contract.d.ts +21 -0
- package/dist/builtin/workflows/src/shared/workflow-heartbeat-contract.ts +25 -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/index.d.ts +1 -0
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +1 -0
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader-api.d.ts +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/extensions/ui-types.d.ts +26 -0
- package/dist/core/extensions/ui-types.d.ts.map +1 -1
- package/dist/core/extensions/ui-types.js +17 -1
- package/dist/core/extensions/ui-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 +25 -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 +47 -18
- package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/multi-select-view.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/multi-select-view.js +5 -2
- package/dist/core/tools/ask-user-question/view/components/multi-select-view.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/submit-picker.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/submit-picker.js +3 -1
- package/dist/core/tools/ask-user-question/view/components/submit-picker.js.map +1 -1
- 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 +8 -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.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-extensions.d.ts +1 -1
- package/dist/index-extensions.d.ts.map +1 -1
- package/dist/index-extensions.js +1 -1
- package/dist/index-extensions.js.map +1 -1
- package/dist/index.d.ts +8 -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/reserved-bottom-overlay.d.ts +95 -0
- package/dist/modes/interactive/components/reserved-bottom-overlay.d.ts.map +1 -0
- package/dist/modes/interactive/components/reserved-bottom-overlay.js +234 -0
- package/dist/modes/interactive/components/reserved-bottom-overlay.js.map +1 -0
- 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 +94 -6
- package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +41 -3
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +80 -11
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +9 -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 +21 -1
- package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-tui.js +140 -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/interactive-engine/engine-custom-ui.d.ts +2 -0
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.js +1 -0
- package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
- package/dist/modes/interactive-engine/protocol.d.ts +1 -0
- package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
- package/dist/modes/interactive-engine/protocol.js +1 -0
- package/dist/modes/interactive-engine/protocol.js.map +1 -1
- package/dist/modes/interactive-engine/remote-component.d.ts +3 -1
- package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
- package/dist/modes/interactive-engine/remote-component.js +3 -2
- package/dist/modes/interactive-engine/remote-component.js.map +1 -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 +100 -2
- package/docs/json.md +3 -1
- package/docs/keybindings.md +8 -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 +96 -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
|
@@ -17,6 +17,7 @@ import type {
|
|
|
17
17
|
WorkflowOutputsFromSchemas,
|
|
18
18
|
WorkflowProvidedInputsFromSchemas,
|
|
19
19
|
} from "../shared/workflow-authoring-types.js";
|
|
20
|
+
import { DEFAULT_WORKFLOW_HEARTBEAT_INTERVAL_MINUTES } from "../shared/workflow-heartbeat-contract.js";
|
|
20
21
|
import { normalizeWorkflowName } from "../workflows/identity.js";
|
|
21
22
|
|
|
22
23
|
export type {
|
|
@@ -158,6 +159,13 @@ export function workflow<
|
|
|
158
159
|
) {
|
|
159
160
|
throw new TypeError("workflow: inputs must be a schema map");
|
|
160
161
|
}
|
|
162
|
+
const heartbeatIntervalMinutes =
|
|
163
|
+
spec.heartbeatIntervalMinutes === undefined
|
|
164
|
+
? DEFAULT_WORKFLOW_HEARTBEAT_INTERVAL_MINUTES
|
|
165
|
+
: spec.heartbeatIntervalMinutes;
|
|
166
|
+
if (!Number.isFinite(heartbeatIntervalMinutes) || heartbeatIntervalMinutes < 0) {
|
|
167
|
+
throw new TypeError("workflow: heartbeatIntervalMinutes must be a non-negative finite number");
|
|
168
|
+
}
|
|
161
169
|
|
|
162
170
|
const name = resolveWorkflowName(spec.name);
|
|
163
171
|
const normalizedName = normalizeWorkflowName(name);
|
|
@@ -174,6 +182,7 @@ export function workflow<
|
|
|
174
182
|
normalizedName,
|
|
175
183
|
description: spec.description,
|
|
176
184
|
...(spec.autoAttach === true ? { autoAttach: true } : {}),
|
|
185
|
+
heartbeatIntervalMinutes,
|
|
177
186
|
inputs: frozenInputs,
|
|
178
187
|
outputs: frozenOutputs,
|
|
179
188
|
...(inputBindings !== undefined ? { inputBindings } : {}),
|
|
@@ -4,6 +4,7 @@ export type { AgentSessionAdapter, CompleteAdapter, CompleteStageOpts, GitWorktr
|
|
|
4
4
|
import type * as AuthoringContract from "./shared/authoring-contract.js";
|
|
5
5
|
import type { AuthoredWorkflowSpec as SharedAuthoredWorkflowSpec, WorkflowInputsFromSchemas, WorkflowOutputsFromSchemas, WorkflowProvidedInputsFromSchemas } from "./shared/workflow-authoring-types.js";
|
|
6
6
|
export type { WorkflowInputsFromSchemas, WorkflowOutputsFromSchemas, WorkflowProvidedInputsFromSchemas, } from "./shared/workflow-authoring-types.js";
|
|
7
|
+
export type { WorkflowHeartbeatEvent, WorkflowHeartbeatEventDetails, WorkflowHeartbeatIdentity, } from "./shared/workflow-heartbeat-contract.js";
|
|
7
8
|
import type { GitWorktreeSetupOptions, GitWorktreeSetupResult, ResolvedInputs, RunResult, RunStatus, StageSnapshot, WorkflowDefinition as WorkflowContractDefinition, WorkflowExecutionPolicy, WorkflowInputSchemaMap, WorkflowInputValues, WorkflowOutputSchemaMap, WorkflowOutputValues, WorkflowSerializableObject } from "./shared/authoring-contract.js";
|
|
8
9
|
declare const workflowDefinitionBrand: unique symbol;
|
|
9
10
|
type WorkflowDefinitionBrand = {
|
|
@@ -55,6 +56,8 @@ export declare function workflow<const TInputs extends WorkflowInputSchemaMap =
|
|
|
55
56
|
export declare function keepContext(text: string): string;
|
|
56
57
|
export declare const KEEP_CONTEXT_OPEN_TAG: string;
|
|
57
58
|
export declare const KEEP_CONTEXT_CLOSE_TAG: string;
|
|
59
|
+
export declare const DEFAULT_WORKFLOW_HEARTBEAT_INTERVAL_MINUTES: 15;
|
|
60
|
+
export declare const WORKFLOW_HEARTBEAT_CUSTOM_TYPE: "workflows:workflow-heartbeat";
|
|
58
61
|
export declare function createRegistry<TDefinitions extends readonly AnyWorkflowDefinition[] = readonly AnyWorkflowDefinition[]>(initial?: TDefinitions): WorkflowRegistry;
|
|
59
62
|
export declare function normalizeWorkflowName(name: string): string;
|
|
60
63
|
export declare function workflowNamesEqual(a: string, b: string): boolean;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { flattenTruncatedString } from "../shared/flat-string.js";
|
|
2
2
|
import { isReopenableSessionTranscript } from "../shared/session-transcript.js";
|
|
3
3
|
import type { RunSnapshot, StageSnapshot, ToolNodeSnapshot } from "../shared/store-types.js";
|
|
4
|
+
import { boundedToolPayload, boundedToolPayloadRecord, boundedToolText } from "../shared/tool-payload-bounds.js";
|
|
4
5
|
import type { WorkflowInputValues, WorkflowSerializableValue } from "../shared/types.js";
|
|
5
6
|
import type { DurableWorkflowBackend } from "./backend.js";
|
|
6
7
|
import {
|
|
@@ -23,6 +24,17 @@ import {
|
|
|
23
24
|
import { isDurableWorkflowResumable } from "./resume-eligibility.js";
|
|
24
25
|
import { resolveDurableEntry } from "./resume-runtime.js";
|
|
25
26
|
import { priorRunElapsedMs, RUN_TIMING_CHECKPOINT_NAME } from "./run-timing.js";
|
|
27
|
+
import { WORKFLOW_HEARTBEAT_ANCHOR_CHECKPOINT_NAME } from "./workflow-heartbeat-anchor.js";
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Reserved run-level tool checkpoints that carry no graph node. They round-trip
|
|
31
|
+
* through the durable envelope like any tool checkpoint, so reconstruction has
|
|
32
|
+
* to skip them or they surface as phantom cached tool nodes.
|
|
33
|
+
*/
|
|
34
|
+
function isReservedRunCheckpointHash(argsHash: string): boolean {
|
|
35
|
+
return argsHash === RUN_TIMING_CHECKPOINT_NAME || argsHash === WORKFLOW_HEARTBEAT_ANCHOR_CHECKPOINT_NAME;
|
|
36
|
+
}
|
|
37
|
+
|
|
26
38
|
import {
|
|
27
39
|
directChildTopologyError,
|
|
28
40
|
groupByDurableStageKey,
|
|
@@ -218,7 +230,7 @@ function checkpointDrafts(checkpoints: readonly DurableCheckpoint[]): Reconstruc
|
|
|
218
230
|
stageByReplayKey.set(checkpoint.replayKey, mergeStageDraft(existing, checkpoint, sequence));
|
|
219
231
|
return;
|
|
220
232
|
}
|
|
221
|
-
if (checkpoint.kind !== "tool" || checkpoint.argsHash
|
|
233
|
+
if (checkpoint.kind !== "tool" || isReservedRunCheckpointHash(checkpoint.argsHash)) return;
|
|
222
234
|
if (!firstToolSequenceByHash.has(checkpoint.argsHash)) {
|
|
223
235
|
firstToolSequenceByHash.set(checkpoint.argsHash, sequence);
|
|
224
236
|
}
|
|
@@ -255,6 +267,11 @@ function completedToolNodes(
|
|
|
255
267
|
kind: "tool" as const,
|
|
256
268
|
id: topology?.nodeId ?? checkpoint.checkpointId,
|
|
257
269
|
name: checkpoint.name,
|
|
270
|
+
// Restored nodes are recorded into the live store, which session and
|
|
271
|
+
// status surfaces clone and re-serialize, so these inspection copies
|
|
272
|
+
// are bounded. `checkpoint.output` itself stays exact for replay.
|
|
273
|
+
...(checkpoint.args !== undefined ? { args: boundedToolPayloadRecord(checkpoint.args) } : {}),
|
|
274
|
+
...(checkpoint.source !== undefined ? { source: boundedToolText(checkpoint.source) } : {}),
|
|
258
275
|
argsHash: checkpoint.argsHash,
|
|
259
276
|
ordinal: topology?.ordinal ?? index + 1,
|
|
260
277
|
parentIds: Object.freeze(
|
|
@@ -266,6 +283,10 @@ function completedToolNodes(
|
|
|
266
283
|
executionOrder: topology?.order ?? firstSequenceByHash.get(checkpoint.argsHash)!,
|
|
267
284
|
...(topology?.startedAt !== undefined ? { startedAt: topology.startedAt } : {}),
|
|
268
285
|
endedAt: topology?.endedAt ?? checkpoint.completedAt,
|
|
286
|
+
...(topology?.startedAt !== undefined
|
|
287
|
+
? { durationMs: Math.max(0, (topology?.endedAt ?? checkpoint.completedAt) - topology.startedAt) }
|
|
288
|
+
: {}),
|
|
289
|
+
...(checkpoint.throwingFailureError === undefined ? { result: boundedToolPayload(checkpoint.output) } : {}),
|
|
269
290
|
...(failed
|
|
270
291
|
? { error: failureError ?? "Invalid durable ctx.tool failure outcome" }
|
|
271
292
|
: { resultSummary: summarizeCompletedToolResult(checkpoint.output) }),
|
|
@@ -390,7 +411,7 @@ function runSnapshotsFromCheckpoints(
|
|
|
390
411
|
const supportedNonGraphState = checkpoints.every(
|
|
391
412
|
(checkpoint) =>
|
|
392
413
|
checkpoint.kind === "ui" ||
|
|
393
|
-
(checkpoint.kind === "tool" && checkpoint.argsHash
|
|
414
|
+
(checkpoint.kind === "tool" && isReservedRunCheckpointHash(checkpoint.argsHash)),
|
|
394
415
|
);
|
|
395
416
|
if (policy.failClosed && supportedNonGraphState) {
|
|
396
417
|
return [emptyGraphRun(rootRunId, rootRunName, fallbackCompletedAt)];
|
|
@@ -81,6 +81,7 @@ export interface DbosStepRecord {
|
|
|
81
81
|
readonly completedAt?: number;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
+
import { getDbosProcessOwner } from "./dbos-process-owner.js";
|
|
84
85
|
import { createRealDbosHandle, type DbosLogger, type DbosStatic, getAtomicExecutorId } from "./dbos-sdk-handle.js";
|
|
85
86
|
// ---------------------------------------------------------------------------
|
|
86
87
|
// Real SDK handle factory (lazy import, no top-level dependency)
|
|
@@ -118,23 +119,35 @@ export async function configureDbosDurableBackend(config?: {
|
|
|
118
119
|
readonly systemDatabaseUrl?: string;
|
|
119
120
|
}): Promise<ConfiguredDbosDurability> {
|
|
120
121
|
const sdk = await importDbosSdk();
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
122
|
+
const owner = getDbosProcessOwner();
|
|
123
|
+
const existing = owner.wrappers;
|
|
124
|
+
// The SDK forbids setConfig after launch. Recover original wrappers first.
|
|
125
|
+
if (existing === undefined) {
|
|
126
|
+
const url = effectiveSystemDatabaseUrl(config?.systemDatabaseUrl);
|
|
127
|
+
sdk.setConfig({
|
|
128
|
+
name: "atomic-workflows",
|
|
129
|
+
...(url === undefined ? {} : { systemDatabaseUrl: url }),
|
|
130
|
+
runAdminServer: false,
|
|
131
|
+
// Unique per process: concurrent Atomic sessions share one database, and
|
|
132
|
+
// DBOS-level pending-workflow recovery must stay scoped to the owner.
|
|
133
|
+
executorID: getAtomicExecutorId(),
|
|
134
|
+
logger: SILENT_DBOS_LOGGER,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
const mainWorkflow =
|
|
138
|
+
existing?.mainWorkflow ??
|
|
139
|
+
sdk.registerWorkflow(async (_name: string, inputs: DurableInputs) => inputs, {
|
|
140
|
+
name: "atomicWorkflowHandle",
|
|
141
|
+
});
|
|
142
|
+
const checkpointWorkflow =
|
|
143
|
+
existing?.checkpointWorkflow ??
|
|
144
|
+
sdk.registerWorkflow(
|
|
145
|
+
async (_workflowId: string, _stepName: string, output: WorkflowSerializableValue) => output,
|
|
146
|
+
{ name: "atomicWorkflowCheckpoint" },
|
|
147
|
+
);
|
|
148
|
+
if (existing === undefined) {
|
|
149
|
+
owner.wrappers = { mainWorkflow, checkpointWorkflow };
|
|
150
|
+
}
|
|
138
151
|
return {
|
|
139
152
|
backend: new DbosDurableBackend(createRealDbosHandle(sdk, mainWorkflow, checkpointWorkflow)),
|
|
140
153
|
launch: () => sdk.launch(),
|
|
@@ -47,6 +47,8 @@ export interface DbosCheckpointEnvelope extends WorkflowSerializableObject {
|
|
|
47
47
|
readonly kind: DurableCheckpointKind;
|
|
48
48
|
readonly checkpointId: string;
|
|
49
49
|
readonly name?: string;
|
|
50
|
+
readonly args?: WorkflowSerializableValue;
|
|
51
|
+
readonly source?: string;
|
|
50
52
|
readonly argsHash?: string;
|
|
51
53
|
readonly promptKind?: UiPromptKind;
|
|
52
54
|
readonly outcomeKind?: "return_success" | "return_failure";
|
|
@@ -99,6 +101,8 @@ export function encodeCheckpoint(checkpoint: DurableCheckpoint): DbosCheckpointE
|
|
|
99
101
|
return {
|
|
100
102
|
...base,
|
|
101
103
|
name: t.name,
|
|
104
|
+
...(t.args !== undefined ? { args: t.args } : {}),
|
|
105
|
+
...(t.source !== undefined ? { source: t.source } : {}),
|
|
102
106
|
argsHash: t.argsHash,
|
|
103
107
|
...(t.outcomeKind !== undefined ? { outcomeKind: t.outcomeKind } : {}),
|
|
104
108
|
...(t.throwingFailureError !== undefined ? { throwingFailureError: t.throwingFailureError } : {}),
|
|
@@ -218,6 +222,10 @@ function decodeEnvelope(workflowId: string, env: DbosCheckpointEnvelope): Durabl
|
|
|
218
222
|
return undefined;
|
|
219
223
|
const common = { workflowId, checkpointId: env.checkpointId, completedAt: env.completedAt };
|
|
220
224
|
if (env.kind === "tool") {
|
|
225
|
+
// An inspection-only field must never invalidate durable state: one
|
|
226
|
+
// rejected checkpoint suppresses the whole workflow and re-runs completed
|
|
227
|
+
// side effects. `args` and `source` are therefore ignored when they are
|
|
228
|
+
// not the expected shape, while the replayable fields stay strict.
|
|
221
229
|
if (
|
|
222
230
|
typeof env.argsHash !== "string" ||
|
|
223
231
|
env.output === undefined ||
|
|
@@ -227,6 +235,10 @@ function decodeEnvelope(workflowId: string, env: DbosCheckpointEnvelope): Durabl
|
|
|
227
235
|
(env.throwingFailureError !== undefined && typeof env.throwingFailureError !== "string")
|
|
228
236
|
)
|
|
229
237
|
return undefined;
|
|
238
|
+
const inspectionArgs =
|
|
239
|
+
typeof env.args === "object" && env.args !== null && !Array.isArray(env.args)
|
|
240
|
+
? (env.args as Readonly<Record<string, WorkflowSerializableValue>>)
|
|
241
|
+
: undefined;
|
|
230
242
|
const outcome = env.outcomeKind === undefined ? undefined : workflowToolOutcomeFromValue(env.output);
|
|
231
243
|
if (
|
|
232
244
|
(env.outcomeKind === "return_success" && outcome?.ok !== true) ||
|
|
@@ -239,6 +251,8 @@ function decodeEnvelope(workflowId: string, env: DbosCheckpointEnvelope): Durabl
|
|
|
239
251
|
kind: "tool",
|
|
240
252
|
...common,
|
|
241
253
|
name: env.name ?? "tool",
|
|
254
|
+
...(inspectionArgs !== undefined ? { args: inspectionArgs } : {}),
|
|
255
|
+
...(typeof env.source === "string" ? { source: env.source } : {}),
|
|
242
256
|
argsHash: env.argsHash,
|
|
243
257
|
output: env.output,
|
|
244
258
|
...(env.outcomeKind !== undefined ? { outcomeKind: env.outcomeKind } : {}),
|
|
@@ -4,6 +4,8 @@ import {
|
|
|
4
4
|
resolveDbosSystemDatabaseUrl,
|
|
5
5
|
shouldProvisionLocalDbos,
|
|
6
6
|
} from "./dbos-local-postgres.js";
|
|
7
|
+
import { getDbosProcessOwner, resetDbosProcessOwner } from "./dbos-process-owner.js";
|
|
8
|
+
import { classifyDbosDurabilityFailure, readDbosFailureDetail } from "./dbos-registration-diagnostics.js";
|
|
7
9
|
|
|
8
10
|
export type DbosLifecycleState =
|
|
9
11
|
| "uninitialized"
|
|
@@ -52,49 +54,51 @@ const defaultConfigurator: DbosConfigurator = async () => {
|
|
|
52
54
|
let configureDurability: DbosConfigurator = defaultConfigurator;
|
|
53
55
|
let provisionLocalDbos: LocalDbosProvisioner = provisionResolvedLocalDbos;
|
|
54
56
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
);
|
|
57
|
+
function owner(): ReturnType<typeof getDbosProcessOwner> {
|
|
58
|
+
return getDbosProcessOwner();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async function durabilityFailure(action: string, error: unknown): Promise<DbosDurabilityError> {
|
|
62
|
+
const detail = readDbosFailureDetail(error);
|
|
63
|
+
const kind = await classifyDbosDurabilityFailure(error);
|
|
64
|
+
const guidance =
|
|
65
|
+
kind === "duplicate_registration"
|
|
66
|
+
? "A duplicate DBOS operation registration caused this failure; changing the database URL will not resolve it."
|
|
67
|
+
: "Set DBOS_SYSTEM_DATABASE_URL to an existing Postgres when local provisioning is unavailable.";
|
|
68
|
+
const cause = error instanceof Error ? { cause: error } : undefined;
|
|
69
|
+
return new DbosDurabilityError(`DBOS workflow durability ${action} failed: ${detail}. ${guidance}`, cause);
|
|
68
70
|
}
|
|
69
71
|
|
|
70
72
|
export async function configureDbosOnce(): Promise<ConfiguredDbosDurability> {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
+
const slot = owner();
|
|
74
|
+
if (slot.failure !== undefined) throw slot.failure;
|
|
75
|
+
slot.configured ??= configureDurability()
|
|
73
76
|
.then((value) => {
|
|
74
|
-
active = value;
|
|
75
|
-
state = "configured";
|
|
77
|
+
slot.active = value;
|
|
78
|
+
slot.state = "configured";
|
|
76
79
|
return value;
|
|
77
80
|
})
|
|
78
|
-
.catch((error: unknown) => {
|
|
79
|
-
failure = durabilityFailure("configuration", error);
|
|
80
|
-
state = "failed";
|
|
81
|
-
throw failure;
|
|
81
|
+
.catch(async (error: unknown) => {
|
|
82
|
+
slot.failure = await durabilityFailure("configuration", error);
|
|
83
|
+
slot.state = "failed";
|
|
84
|
+
throw slot.failure;
|
|
82
85
|
});
|
|
83
|
-
return await configured;
|
|
86
|
+
return await slot.configured;
|
|
84
87
|
}
|
|
85
88
|
|
|
86
89
|
export async function launchDbosOnce(): Promise<void> {
|
|
87
|
-
|
|
90
|
+
const slot = owner();
|
|
91
|
+
if (slot.failure !== undefined) throw slot.failure;
|
|
88
92
|
// The executor is process-scoped and stops exactly once, at process exit.
|
|
89
93
|
// Post-shutdown launches must fail loudly instead of returning a backend
|
|
90
94
|
// whose SDK launched marker has been cleared.
|
|
91
|
-
if (state === "shutting_down" || state === "shut_down") throw new DbosShutdownError();
|
|
95
|
+
if (slot.state === "shutting_down" || slot.state === "shut_down") throw new DbosShutdownError();
|
|
92
96
|
const durability = await configureDbosOnce();
|
|
93
|
-
launchPromise ??= (async () => {
|
|
94
|
-
state = "launching";
|
|
97
|
+
slot.launchPromise ??= (async () => {
|
|
98
|
+
slot.state = "launching";
|
|
95
99
|
try {
|
|
96
100
|
await durability.launch();
|
|
97
|
-
state = "ready";
|
|
101
|
+
slot.state = "ready";
|
|
98
102
|
} catch (error) {
|
|
99
103
|
if (shouldProvisionLocalDbos(error)) {
|
|
100
104
|
try {
|
|
@@ -103,54 +107,57 @@ export async function launchDbosOnce(): Promise<void> {
|
|
|
103
107
|
await durability.shutdown();
|
|
104
108
|
await provisionLocalDbos();
|
|
105
109
|
await durability.launch();
|
|
106
|
-
state = "ready";
|
|
110
|
+
slot.state = "ready";
|
|
107
111
|
return;
|
|
108
112
|
} catch (provisionError) {
|
|
109
|
-
failure = durabilityFailure("local Postgres startup", provisionError);
|
|
113
|
+
slot.failure = await durabilityFailure("local Postgres startup", provisionError);
|
|
110
114
|
}
|
|
111
115
|
} else {
|
|
112
|
-
failure = durabilityFailure("launch", error);
|
|
116
|
+
slot.failure = await durabilityFailure("launch", error);
|
|
113
117
|
}
|
|
114
|
-
state = "failed";
|
|
115
|
-
throw failure;
|
|
118
|
+
slot.state = "failed";
|
|
119
|
+
throw slot.failure;
|
|
116
120
|
}
|
|
117
121
|
})();
|
|
118
|
-
await launchPromise;
|
|
122
|
+
await slot.launchPromise;
|
|
119
123
|
}
|
|
120
124
|
|
|
121
125
|
export async function getReadyDbosBackend(): Promise<DbosDurableBackend> {
|
|
122
126
|
await launchDbosOnce();
|
|
123
|
-
|
|
124
|
-
|
|
127
|
+
const slot = owner();
|
|
128
|
+
if (slot.state !== "ready" || slot.active === undefined) throw slot.failure ?? new DbosNotReadyError();
|
|
129
|
+
return slot.active.backend;
|
|
125
130
|
}
|
|
126
131
|
|
|
127
132
|
export function getReadyDbosBackendSync(): DbosDurableBackend | undefined {
|
|
128
|
-
|
|
133
|
+
const slot = owner();
|
|
134
|
+
return slot.state === "ready" ? slot.active?.backend : undefined;
|
|
129
135
|
}
|
|
130
136
|
|
|
131
137
|
export async function shutdownDbos(): Promise<void> {
|
|
132
|
-
|
|
133
|
-
|
|
138
|
+
const slot = owner();
|
|
139
|
+
if (slot.shutdownPromise !== undefined) return await slot.shutdownPromise;
|
|
140
|
+
const configuredPromise = slot.configured;
|
|
134
141
|
if (configuredPromise === undefined) return;
|
|
135
|
-
shutdownPromise = (async () => {
|
|
142
|
+
slot.shutdownPromise = (async () => {
|
|
136
143
|
// A backend that never reached "ready" has nothing to flush or stop.
|
|
137
144
|
// `configured`/`launchPromise` memoize rejections, so re-awaiting them
|
|
138
145
|
// unguarded would rethrow the original provisioning failure out of every
|
|
139
146
|
// session dispose — crashing otherwise-successful runs at process exit.
|
|
140
147
|
const durability = await configuredPromise.catch(() => undefined);
|
|
141
148
|
if (durability === undefined) return;
|
|
142
|
-
if (launchPromise !== undefined) await launchPromise.catch(() => undefined);
|
|
143
|
-
if (state !== "ready") return;
|
|
144
|
-
state = "shutting_down";
|
|
149
|
+
if (slot.launchPromise !== undefined) await slot.launchPromise.catch(() => undefined);
|
|
150
|
+
if (slot.state !== "ready") return;
|
|
151
|
+
slot.state = "shutting_down";
|
|
145
152
|
await durability.backend.flush();
|
|
146
153
|
await durability.shutdown();
|
|
147
|
-
state = "shut_down";
|
|
148
|
-
})().catch((error: unknown) => {
|
|
149
|
-
failure = durabilityFailure("shutdown", error);
|
|
150
|
-
state = "failed";
|
|
151
|
-
throw failure;
|
|
154
|
+
slot.state = "shut_down";
|
|
155
|
+
})().catch(async (error: unknown) => {
|
|
156
|
+
slot.failure = await durabilityFailure("shutdown", error);
|
|
157
|
+
slot.state = "failed";
|
|
158
|
+
throw slot.failure;
|
|
152
159
|
});
|
|
153
|
-
await shutdownPromise;
|
|
160
|
+
await slot.shutdownPromise;
|
|
154
161
|
}
|
|
155
162
|
|
|
156
163
|
/**
|
|
@@ -159,12 +166,13 @@ export async function shutdownDbos(): Promise<void> {
|
|
|
159
166
|
* `/fork`, `/reload`) where the DBOS executor must stay launched.
|
|
160
167
|
*/
|
|
161
168
|
export async function flushDbos(): Promise<void> {
|
|
162
|
-
|
|
163
|
-
|
|
169
|
+
const slot = owner();
|
|
170
|
+
if (slot.state !== "ready" || slot.active === undefined) return;
|
|
171
|
+
await slot.active.backend.flush();
|
|
164
172
|
}
|
|
165
173
|
|
|
166
174
|
export function dbosLifecycleState(): DbosLifecycleState {
|
|
167
|
-
return state;
|
|
175
|
+
return owner().state;
|
|
168
176
|
}
|
|
169
177
|
|
|
170
178
|
/** Reset the process singleton with an explicit configurator for unit tests. */
|
|
@@ -172,12 +180,7 @@ export function resetDbosLifecycleForTests(
|
|
|
172
180
|
configurator: DbosConfigurator = defaultConfigurator,
|
|
173
181
|
provisioner: LocalDbosProvisioner = provisionResolvedLocalDbos,
|
|
174
182
|
): void {
|
|
175
|
-
|
|
176
|
-
configured = undefined;
|
|
177
|
-
active = undefined;
|
|
178
|
-
launchPromise = undefined;
|
|
179
|
-
shutdownPromise = undefined;
|
|
180
|
-
failure = undefined;
|
|
183
|
+
resetDbosProcessOwner();
|
|
181
184
|
configureDurability = configurator;
|
|
182
185
|
provisionLocalDbos = provisioner;
|
|
183
186
|
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process-global owner for DBOS lifecycle state and registered wrappers.
|
|
3
|
+
*
|
|
4
|
+
* `@dbos-inc/dbos-sdk` keeps a process-global operation registry that #1958
|
|
5
|
+
* leaves alive across session replacement. The workflows bundle is re-evaluated
|
|
6
|
+
* on `/reload` and the other process-preserving boundaries, so module-local
|
|
7
|
+
* variables restart at `uninitialized` and `configureDbosDurableBackend` would
|
|
8
|
+
* register `atomicWorkflowHandle` / `atomicWorkflowCheckpoint` a second time.
|
|
9
|
+
* The second registration throws and the replacement session degrades to
|
|
10
|
+
* `InMemoryDurableBackend` (#2022).
|
|
11
|
+
*
|
|
12
|
+
* Session scope is the wrong lifetime: the SDK registry is process-global, so
|
|
13
|
+
* a session-scoped owner would re-register per session and reproduce the bug.
|
|
14
|
+
* This slot lives on `globalThis` under `Symbol.for` so every load generation
|
|
15
|
+
* of the bundle — and a second copy of the module reached through a different
|
|
16
|
+
* specifier — shares one owner.
|
|
17
|
+
*
|
|
18
|
+
* The `@1` suffix is the shape version. Bump it when these fields change so a
|
|
19
|
+
* new generation declines an incompatible predecessor instead of reading it.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import type { WorkflowSerializableValue } from "../shared/types.js";
|
|
23
|
+
import type { ConfiguredDbosDurability } from "./dbos-backend.js";
|
|
24
|
+
import type { DbosDurabilityError, DbosLifecycleState } from "./dbos-lifecycle.js";
|
|
25
|
+
|
|
26
|
+
export const DBOS_PROCESS_OWNER_KEY = Symbol.for("atomic-workflows/dbos-process-owner@1");
|
|
27
|
+
|
|
28
|
+
export interface DbosRegisteredWrappers {
|
|
29
|
+
readonly mainWorkflow: (
|
|
30
|
+
name: string,
|
|
31
|
+
inputs: Record<string, WorkflowSerializableValue>,
|
|
32
|
+
) => Promise<WorkflowSerializableValue>;
|
|
33
|
+
readonly checkpointWorkflow: (
|
|
34
|
+
workflowId: string,
|
|
35
|
+
stepName: string,
|
|
36
|
+
output: WorkflowSerializableValue,
|
|
37
|
+
) => Promise<WorkflowSerializableValue>;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface DbosProcessOwner {
|
|
41
|
+
readonly version: 1;
|
|
42
|
+
state: DbosLifecycleState;
|
|
43
|
+
configured: Promise<ConfiguredDbosDurability> | undefined;
|
|
44
|
+
active: ConfiguredDbosDurability | undefined;
|
|
45
|
+
launchPromise: Promise<void> | undefined;
|
|
46
|
+
shutdownPromise: Promise<void> | undefined;
|
|
47
|
+
failure: DbosDurabilityError | undefined;
|
|
48
|
+
wrappers: DbosRegisteredWrappers | undefined;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function emptyOwner(): DbosProcessOwner {
|
|
52
|
+
return {
|
|
53
|
+
version: 1,
|
|
54
|
+
state: "uninitialized",
|
|
55
|
+
configured: undefined,
|
|
56
|
+
active: undefined,
|
|
57
|
+
launchPromise: undefined,
|
|
58
|
+
shutdownPromise: undefined,
|
|
59
|
+
failure: undefined,
|
|
60
|
+
wrappers: undefined,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function ownerBag(): Record<symbol, DbosProcessOwner | undefined> {
|
|
65
|
+
return globalThis as typeof globalThis & Record<symbol, DbosProcessOwner | undefined>;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function getDbosProcessOwner(): DbosProcessOwner {
|
|
69
|
+
const bag = ownerBag();
|
|
70
|
+
const existing = bag[DBOS_PROCESS_OWNER_KEY];
|
|
71
|
+
if (existing !== undefined && existing.version === 1) return existing;
|
|
72
|
+
const created = emptyOwner();
|
|
73
|
+
bag[DBOS_PROCESS_OWNER_KEY] = created;
|
|
74
|
+
return created;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** Reset every field on the process-global slot. Used by durability tests. */
|
|
78
|
+
export function resetDbosProcessOwner(): void {
|
|
79
|
+
const owner = getDbosProcessOwner();
|
|
80
|
+
owner.state = "uninitialized";
|
|
81
|
+
owner.configured = undefined;
|
|
82
|
+
owner.active = undefined;
|
|
83
|
+
owner.launchPromise = undefined;
|
|
84
|
+
owner.shutdownPromise = undefined;
|
|
85
|
+
owner.failure = undefined;
|
|
86
|
+
owner.wrappers = undefined;
|
|
87
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classify DBOS durability failures so a duplicate operation registration
|
|
3
|
+
* is not described as a Postgres provisioning problem (#2022 / #2462).
|
|
4
|
+
*
|
|
5
|
+
* Uses the SDK `Error` namespace (`DBOSConflictingRegistrationError` and
|
|
6
|
+
* `getDBOSErrorCode`). The SDK is loaded lazily so this module never
|
|
7
|
+
* statically imports `@dbos-inc/dbos-sdk`. `instanceof` is not used: two
|
|
8
|
+
* resolved copies of the SDK would make it fail.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export type DbosDurabilityFailureKind = "duplicate_registration" | "other";
|
|
12
|
+
|
|
13
|
+
interface DbosSdkErrorModule {
|
|
14
|
+
readonly DBOSConflictingRegistrationError?: new (msg: string) => object;
|
|
15
|
+
readonly getDBOSErrorCode?: (error: Error) => number | undefined;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
let cachedErrorModule: DbosSdkErrorModule | undefined;
|
|
19
|
+
let errorModuleLoad: Promise<DbosSdkErrorModule | undefined> | undefined;
|
|
20
|
+
|
|
21
|
+
async function loadDbosErrorModule(): Promise<DbosSdkErrorModule | undefined> {
|
|
22
|
+
if (cachedErrorModule !== undefined) return cachedErrorModule;
|
|
23
|
+
errorModuleLoad ??= (async () => {
|
|
24
|
+
const spec = "@dbos-inc/dbos-sdk";
|
|
25
|
+
try {
|
|
26
|
+
const mod = (await import(spec)) as { readonly Error?: DbosSdkErrorModule };
|
|
27
|
+
cachedErrorModule = mod.Error;
|
|
28
|
+
return cachedErrorModule;
|
|
29
|
+
} catch {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
})();
|
|
33
|
+
return await errorModuleLoad;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function conflictingRegistrationCode(errors: DbosSdkErrorModule | undefined): number | undefined {
|
|
37
|
+
const ctor = errors?.DBOSConflictingRegistrationError;
|
|
38
|
+
if (ctor === undefined) return undefined;
|
|
39
|
+
try {
|
|
40
|
+
const code = Reflect.get(new ctor(""), "dbosErrorCode");
|
|
41
|
+
return typeof code === "number" ? code : undefined;
|
|
42
|
+
} catch {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function isDuplicateRegistration(value: object, errors: DbosSdkErrorModule | undefined): boolean {
|
|
48
|
+
const expected = conflictingRegistrationCode(errors);
|
|
49
|
+
const code = readOwn(value, "dbosErrorCode");
|
|
50
|
+
if (typeof code === "number" && typeof expected === "number" && code === expected) return true;
|
|
51
|
+
if (errors?.getDBOSErrorCode !== undefined && value instanceof Error) {
|
|
52
|
+
try {
|
|
53
|
+
if (errors.getDBOSErrorCode(value) === expected) return true;
|
|
54
|
+
} catch {
|
|
55
|
+
/* keep walking */
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const name = readOwn(value, "name");
|
|
59
|
+
const className = errors?.DBOSConflictingRegistrationError?.name;
|
|
60
|
+
return typeof name === "string" && typeof className === "string" && name === className;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function classifyWith(error: unknown, errors: DbosSdkErrorModule | undefined): DbosDurabilityFailureKind {
|
|
64
|
+
try {
|
|
65
|
+
const seen = new Set<object>();
|
|
66
|
+
let current: unknown = error;
|
|
67
|
+
while (current !== undefined && current !== null) {
|
|
68
|
+
if (typeof current !== "object") return "other";
|
|
69
|
+
if (seen.has(current)) return "other";
|
|
70
|
+
seen.add(current);
|
|
71
|
+
if (isDuplicateRegistration(current, errors)) return "duplicate_registration";
|
|
72
|
+
current = readOwn(current, "cause");
|
|
73
|
+
}
|
|
74
|
+
} catch {
|
|
75
|
+
return "other";
|
|
76
|
+
}
|
|
77
|
+
return "other";
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Async classification used at the durability boundary so the first failure
|
|
82
|
+
* can load the SDK error classes before deciding. Subsequent sync callers
|
|
83
|
+
* reuse the cached module.
|
|
84
|
+
*/
|
|
85
|
+
export async function classifyDbosDurabilityFailure(error: unknown): Promise<DbosDurabilityFailureKind> {
|
|
86
|
+
const errors = await loadDbosErrorModule();
|
|
87
|
+
return classifyWith(error, errors);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Read an error's display detail without letting a throwing `message` getter
|
|
92
|
+
* escape the durability wrapper. `String(error)` is the last-resort fallback
|
|
93
|
+
* and is itself guarded: some `toString` implementations also throw.
|
|
94
|
+
*/
|
|
95
|
+
export function readDbosFailureDetail(error: unknown): string {
|
|
96
|
+
if (typeof error === "object" && error !== null) {
|
|
97
|
+
const message = readOwn(error, "message");
|
|
98
|
+
if (typeof message === "string" && message !== "") return message;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
return String(error);
|
|
102
|
+
} catch {
|
|
103
|
+
return "unknown error";
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function readOwn(value: object, key: string): unknown {
|
|
108
|
+
try {
|
|
109
|
+
return Reflect.get(value, key);
|
|
110
|
+
} catch {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
getReadyDbosBackend,
|
|
9
9
|
getReadyDbosBackendSync,
|
|
10
10
|
} from "./dbos-lifecycle.js";
|
|
11
|
+
import { classifyDbosDurabilityFailure, readDbosFailureDetail } from "./dbos-registration-diagnostics.js";
|
|
11
12
|
|
|
12
13
|
let injectedBackend: DurableWorkflowBackend | undefined;
|
|
13
14
|
let initializedBackend: DurableWorkflowBackend | undefined;
|
|
@@ -65,12 +66,9 @@ export async function initializeDurableBackend(): Promise<DurableWorkflowBackend
|
|
|
65
66
|
initializing = undefined;
|
|
66
67
|
}
|
|
67
68
|
initializing ??= getReadyDbosBackend()
|
|
68
|
-
.catch((error: unknown) => {
|
|
69
|
-
// Post-shutdown initialization is a process-exit race, not a
|
|
70
|
-
// provisioning failure: fail loudly instead of silently degrading to a
|
|
71
|
-
// non-durable backend.
|
|
69
|
+
.catch(async (error: unknown) => {
|
|
72
70
|
if (error instanceof DbosShutdownError) throw error;
|
|
73
|
-
return degradeToNonDurableBackend(error);
|
|
71
|
+
return await degradeToNonDurableBackend(error);
|
|
74
72
|
})
|
|
75
73
|
.then((backend) => {
|
|
76
74
|
initializedBackend = backend;
|
|
@@ -79,12 +77,17 @@ export async function initializeDurableBackend(): Promise<DurableWorkflowBackend
|
|
|
79
77
|
return await initializing;
|
|
80
78
|
}
|
|
81
79
|
|
|
82
|
-
function degradeToNonDurableBackend(error: unknown): DurableWorkflowBackend {
|
|
83
|
-
const detail =
|
|
80
|
+
async function degradeToNonDurableBackend(error: unknown): Promise<DurableWorkflowBackend> {
|
|
81
|
+
const detail = readDbosFailureDetail(error);
|
|
82
|
+
const kind = await classifyDbosDurabilityFailure(error);
|
|
83
|
+
const restore =
|
|
84
|
+
kind === "duplicate_registration"
|
|
85
|
+
? `Restore durability by resolving the duplicate DBOS operation registration: ${detail}`
|
|
86
|
+
: `Restore durability by fixing Postgres provisioning: ${detail}`;
|
|
84
87
|
console.error(
|
|
85
88
|
"atomic-workflows: durable backend unavailable — continuing NON-DURABLY with an in-memory backend. " +
|
|
86
89
|
"Workflow runs will execute, but their state will not survive this process and `/workflow resume` " +
|
|
87
|
-
`after exit will not work.
|
|
90
|
+
`after exit will not work. ${restore}`,
|
|
88
91
|
);
|
|
89
92
|
return new InMemoryDurableBackend();
|
|
90
93
|
}
|