@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
|
@@ -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 {
|
|
@@ -266,6 +267,11 @@ function completedToolNodes(
|
|
|
266
267
|
kind: "tool" as const,
|
|
267
268
|
id: topology?.nodeId ?? checkpoint.checkpointId,
|
|
268
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) } : {}),
|
|
269
275
|
argsHash: checkpoint.argsHash,
|
|
270
276
|
ordinal: topology?.ordinal ?? index + 1,
|
|
271
277
|
parentIds: Object.freeze(
|
|
@@ -277,6 +283,10 @@ function completedToolNodes(
|
|
|
277
283
|
executionOrder: topology?.order ?? firstSequenceByHash.get(checkpoint.argsHash)!,
|
|
278
284
|
...(topology?.startedAt !== undefined ? { startedAt: topology.startedAt } : {}),
|
|
279
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) } : {}),
|
|
280
290
|
...(failed
|
|
281
291
|
? { error: failureError ?? "Invalid durable ctx.tool failure outcome" }
|
|
282
292
|
: { resultSummary: summarizeCompletedToolResult(checkpoint.output) }),
|
|
@@ -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
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ToolNodeSnapshot } from "../shared/store-types.js";
|
|
2
|
+
import type { WorkflowSerializableValue } from "../shared/types.js";
|
|
2
3
|
import type { DurableWorkflowBackend } from "./backend.js";
|
|
3
4
|
import { workflowToolFailure } from "./tool-outcome.js";
|
|
4
5
|
import { DURABLE_TOOL_TOPOLOGY_VERSION, type DurableStageRunTopology } from "./types.js";
|
|
@@ -16,6 +17,8 @@ export async function recordThrowingToolFailure(
|
|
|
16
17
|
node: ToolNodeSnapshot,
|
|
17
18
|
identity: {
|
|
18
19
|
readonly name: string;
|
|
20
|
+
readonly args?: Readonly<Record<string, WorkflowSerializableValue>>;
|
|
21
|
+
readonly source?: string;
|
|
19
22
|
readonly argsHash: string;
|
|
20
23
|
readonly ordinal: number;
|
|
21
24
|
readonly startedAt: number;
|
|
@@ -30,6 +33,8 @@ export async function recordThrowingToolFailure(
|
|
|
30
33
|
workflowId: input.workflowId,
|
|
31
34
|
checkpointId: `tool-failure:${identity.argsHash}:${input.nextCheckpointId()}`,
|
|
32
35
|
name: identity.name,
|
|
36
|
+
...(identity.args !== undefined ? { args: identity.args } : {}),
|
|
37
|
+
...(identity.source !== undefined ? { source: identity.source } : {}),
|
|
33
38
|
argsHash: identity.argsHash,
|
|
34
39
|
output: null,
|
|
35
40
|
throwingFailureError: message,
|