@bastani/atomic 0.9.9 → 0.9.10-alpha.1
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 +66 -0
- package/README.md +2 -0
- package/dist/builtin/cursor/CHANGELOG.md +6 -0
- package/dist/builtin/cursor/package.json +3 -3
- package/dist/builtin/intercom/CHANGELOG.md +15 -0
- package/dist/builtin/intercom/README.md +12 -4
- package/dist/builtin/intercom/broker/broker.ts +96 -14
- package/dist/builtin/intercom/broker/client-message-validation.ts +39 -0
- package/dist/builtin/intercom/broker/client.ts +101 -92
- package/dist/builtin/intercom/broker/group-isolation.ts +28 -0
- package/dist/builtin/intercom/broker/send-handler.ts +62 -10
- package/dist/builtin/intercom/broker/send-signature.ts +3 -0
- package/dist/builtin/intercom/broker/supervisor-channel.ts +126 -0
- package/dist/builtin/intercom/closed-workflow-stage-message.ts +66 -0
- package/dist/builtin/intercom/config.ts +10 -0
- package/dist/builtin/intercom/contact-supervisor-tool.ts +14 -10
- package/dist/builtin/intercom/foreground-detach-handoff.ts +12 -2
- package/dist/builtin/intercom/group.ts +46 -0
- package/dist/builtin/intercom/inbound-message-admission.ts +79 -0
- package/dist/builtin/intercom/incoming-message-delivery.ts +49 -0
- package/dist/builtin/intercom/index-heavy.ts +148 -94
- package/dist/builtin/intercom/index.ts +66 -4
- package/dist/builtin/intercom/intercom-test-seams.ts +6 -0
- package/dist/builtin/intercom/intercom-tool.ts +71 -20
- package/dist/builtin/intercom/intercom-utils.ts +15 -2
- package/dist/builtin/intercom/late-stage-message-router.ts +148 -0
- package/dist/builtin/intercom/lifecycle.ts +10 -4
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/intercom/reconnect-backoff.ts +6 -0
- package/dist/builtin/intercom/reply-tracker.ts +8 -0
- package/dist/builtin/intercom/skills/intercom/SKILL.md +2 -0
- package/dist/builtin/intercom/stable-delivery-retry.ts +32 -0
- package/dist/builtin/intercom/subagent-relay.ts +67 -14
- package/dist/builtin/intercom/supervisor-authorization-registry.ts +22 -0
- package/dist/builtin/intercom/terminal-ordering-barrier.ts +144 -25
- package/dist/builtin/intercom/types.ts +18 -5
- package/dist/builtin/intercom/workflow-reply-tracker.ts +19 -0
- package/dist/builtin/intercom/workflow-stage-admission.ts +43 -0
- package/dist/builtin/intercom/workflow-stage-delivery-failure.ts +77 -0
- package/dist/builtin/mcp/CHANGELOG.md +11 -0
- package/dist/builtin/mcp/README.md +6 -2
- package/dist/builtin/mcp/config.ts +8 -8
- package/dist/builtin/mcp/direct-tool-executor.ts +7 -6
- package/dist/builtin/mcp/package.json +3 -3
- package/dist/builtin/mcp/proxy-call.ts +5 -4
- package/dist/builtin/mcp/sampling-handler.ts +7 -2
- package/dist/builtin/mcp/tool-call-timeout.ts +101 -0
- package/dist/builtin/mcp/tool-result-renderer.ts +3 -2
- package/dist/builtin/mcp/types.ts +5 -0
- package/dist/builtin/mcp/ui-server.ts +3 -2
- package/dist/builtin/subagents/CHANGELOG.md +21 -0
- package/dist/builtin/subagents/README.md +6 -3
- 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 +4 -4
- package/dist/builtin/subagents/skills/subagent/SKILL.md +1 -1
- package/dist/builtin/subagents/src/extension/index.ts +37 -61
- package/dist/builtin/subagents/src/extension/notification-content.ts +80 -0
- package/dist/builtin/subagents/src/extension/schemas.ts +9 -0
- package/dist/builtin/subagents/src/extension/tool-description.ts +1 -0
- package/dist/builtin/subagents/src/intercom/supervisor-authorization.ts +23 -0
- package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +4 -0
- package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +2 -0
- package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +4 -0
- package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +75 -13
- package/dist/builtin/subagents/src/runs/background/async-status.ts +19 -0
- package/dist/builtin/subagents/src/runs/background/completion-notification.ts +4 -3
- package/dist/builtin/subagents/src/runs/background/notify.ts +76 -15
- package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +1 -1
- package/dist/builtin/subagents/src/runs/background/subagent-runner-dynamic.ts +13 -0
- package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel.ts +1 -0
- package/dist/builtin/subagents/src/runs/background/subagent-runner-sequential.ts +1 -0
- package/dist/builtin/subagents/src/runs/background/subagent-runner-step.ts +2 -1
- package/dist/builtin/subagents/src/runs/background/subagent-runner-types.ts +4 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +13 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +19 -2
- package/dist/builtin/subagents/src/runs/foreground/detached-cleanup-barrier.ts +26 -0
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +19 -30
- package/dist/builtin/subagents/src/runs/foreground/execution-intercom-detach.ts +47 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +60 -2
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +21 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +21 -2
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +6 -1
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +2 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +2 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/intercom-group.ts +50 -0
- package/dist/builtin/subagents/src/runs/shared/pi-args.ts +16 -0
- package/dist/builtin/subagents/src/runs/shared/worktree-post-create.ts +75 -0
- package/dist/builtin/subagents/src/runs/shared/worktree-root.ts +51 -0
- package/dist/builtin/subagents/src/runs/shared/worktree.ts +69 -77
- package/dist/builtin/subagents/src/shared/types-config.ts +6 -0
- package/dist/builtin/subagents/src/slash/slash-commands.ts +3 -2
- package/dist/builtin/subagents/src/tui/render-result-compact.ts +5 -3
- package/dist/builtin/subagents/src/tui/render-result.ts +5 -3
- package/dist/builtin/subagents/src/tui/render-widget-graph.ts +7 -4
- package/dist/builtin/web-access/CHANGELOG.md +11 -0
- package/dist/builtin/web-access/extract-frames.ts +14 -13
- package/dist/builtin/web-access/extract.ts +2 -2
- package/dist/builtin/web-access/gemini-api.ts +0 -3
- package/dist/builtin/web-access/gemini-web-config.ts +1 -3
- package/dist/builtin/web-access/gemini-web.ts +1 -0
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/web-access/perplexity.ts +0 -3
- package/dist/builtin/web-access/result-renderers.ts +7 -5
- package/dist/builtin/web-access/subprocess.ts +100 -0
- package/dist/builtin/web-access/summary-review.ts +14 -3
- package/dist/builtin/web-access/video-extract.ts +12 -17
- package/dist/builtin/web-access/web-search-browser.ts +18 -10
- package/dist/builtin/web-access/web-search-summary.ts +9 -2
- package/dist/builtin/web-access/youtube-extract.ts +22 -25
- package/dist/builtin/workflows/CHANGELOG.md +77 -0
- package/dist/builtin/workflows/README.md +76 -38
- package/dist/builtin/workflows/ambient.d.ts +30 -0
- package/dist/builtin/workflows/builtin/adversarial-verification-prompts.ts +15 -0
- package/dist/builtin/workflows/builtin/adversarial-verification-runner.ts +93 -0
- package/dist/builtin/workflows/builtin/adversarial-verification.d.ts +11 -0
- package/dist/builtin/workflows/builtin/adversarial-verification.ts +24 -0
- package/dist/builtin/workflows/builtin/classify-and-act-prompts.ts +11 -0
- package/dist/builtin/workflows/builtin/classify-and-act-runner.ts +110 -0
- package/dist/builtin/workflows/builtin/classify-and-act.d.ts +24 -0
- package/dist/builtin/workflows/builtin/classify-and-act.ts +35 -0
- package/dist/builtin/workflows/builtin/deep-research-codebase-utils.ts +8 -2
- package/dist/builtin/workflows/builtin/fan-out-and-synthesize-prompts.ts +11 -0
- package/dist/builtin/workflows/builtin/fan-out-and-synthesize-runner.ts +96 -0
- package/dist/builtin/workflows/builtin/fan-out-and-synthesize.d.ts +23 -0
- package/dist/builtin/workflows/builtin/fan-out-and-synthesize.ts +32 -0
- package/dist/builtin/workflows/builtin/generate-and-filter-prompts.ts +15 -0
- package/dist/builtin/workflows/builtin/generate-and-filter-runner.ts +75 -0
- package/dist/builtin/workflows/builtin/generate-and-filter.d.ts +11 -0
- package/dist/builtin/workflows/builtin/generate-and-filter.ts +26 -0
- package/dist/builtin/workflows/builtin/goal-models.ts +72 -0
- package/dist/builtin/workflows/builtin/goal-runner.ts +2 -64
- package/dist/builtin/workflows/builtin/index.d.ts +44 -0
- package/dist/builtin/workflows/builtin/index.ts +6 -0
- package/dist/builtin/workflows/builtin/loop-until-done-prompts.ts +79 -0
- package/dist/builtin/workflows/builtin/loop-until-done-runner.ts +189 -0
- package/dist/builtin/workflows/builtin/loop-until-done.d.ts +34 -0
- package/dist/builtin/workflows/builtin/loop-until-done.ts +31 -0
- package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +6 -1
- package/dist/builtin/workflows/builtin/pattern-artifact-root.ts +28 -0
- package/dist/builtin/workflows/builtin/ralph-models.ts +26 -5
- package/dist/builtin/workflows/builtin/ralph-runner.ts +1 -0
- package/dist/builtin/workflows/builtin/tournament-prompts.ts +79 -0
- package/dist/builtin/workflows/builtin/tournament-runner.ts +188 -0
- package/dist/builtin/workflows/builtin/tournament.d.ts +33 -0
- package/dist/builtin/workflows/builtin/tournament.ts +34 -0
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/src/authoring.d.ts +2 -6
- package/dist/builtin/workflows/src/durable/backend.ts +163 -120
- package/dist/builtin/workflows/src/durable/completed-catalog.ts +37 -64
- package/dist/builtin/workflows/src/durable/completed-inspection.ts +4 -72
- package/dist/builtin/workflows/src/durable/dbos-backend.ts +242 -195
- package/dist/builtin/workflows/src/durable/dbos-embedded-postgres.ts +207 -0
- package/dist/builtin/workflows/src/durable/dbos-envelope.ts +42 -42
- package/dist/builtin/workflows/src/durable/dbos-lifecycle.ts +155 -0
- package/dist/builtin/workflows/src/durable/dbos-local-postgres.ts +126 -0
- package/dist/builtin/workflows/src/durable/dbos-metadata.ts +105 -58
- package/dist/builtin/workflows/src/durable/dbos-prompt-reservations.ts +320 -0
- package/dist/builtin/workflows/src/durable/dbos-sdk-handle.ts +161 -0
- package/dist/builtin/workflows/src/durable/dbos-status-transition.ts +62 -0
- package/dist/builtin/workflows/src/durable/dbos-tombstone.ts +2 -2
- package/dist/builtin/workflows/src/durable/durable-hash.ts +20 -0
- package/dist/builtin/workflows/src/durable/factory.ts +23 -83
- package/dist/builtin/workflows/src/durable/format-version.ts +4 -10
- package/dist/builtin/workflows/src/durable/index.ts +16 -20
- package/dist/builtin/workflows/src/durable/local-command.ts +63 -0
- package/dist/builtin/workflows/src/durable/prompt-reservation-state.ts +177 -0
- package/dist/builtin/workflows/src/durable/prompt-reservations.ts +36 -0
- package/dist/builtin/workflows/src/durable/resume-catalog.ts +2 -200
- package/dist/builtin/workflows/src/durable/resume-eligibility.ts +42 -2
- package/dist/builtin/workflows/src/durable/resume-runtime.ts +121 -118
- package/dist/builtin/workflows/src/durable/retention-policy.ts +42 -0
- package/dist/builtin/workflows/src/durable/run-timing.ts +98 -0
- package/dist/builtin/workflows/src/durable/scoped-backend.ts +62 -14
- package/dist/builtin/workflows/src/durable/stage-primitive.ts +15 -2
- package/dist/builtin/workflows/src/durable/tool-primitive.ts +11 -7
- package/dist/builtin/workflows/src/durable/types.ts +25 -18
- package/dist/builtin/workflows/src/durable/ui-primitive.ts +117 -29
- package/dist/builtin/workflows/src/durable/workflow-status-transition.ts +30 -0
- package/dist/builtin/workflows/src/engine/primitives/parallel.ts +20 -5
- package/dist/builtin/workflows/src/engine/primitives/task.ts +3 -2
- package/dist/builtin/workflows/src/engine/primitives/ui.ts +6 -3
- package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +14 -22
- package/dist/builtin/workflows/src/engine/run-durable-stage-session.ts +14 -14
- package/dist/builtin/workflows/src/engine/run.ts +35 -37
- package/dist/builtin/workflows/src/engine/runtime.ts +3 -0
- package/dist/builtin/workflows/src/engine/workflow-activity.ts +9 -0
- package/dist/builtin/workflows/src/extension/completed-stage-intercom-ask.ts +155 -0
- package/dist/builtin/workflows/src/extension/config-file-loader.ts +13 -0
- package/dist/builtin/workflows/src/extension/config-loader.ts +20 -0
- package/dist/builtin/workflows/src/extension/dispatcher.ts +56 -17
- package/dist/builtin/workflows/src/extension/extension-factory.ts +13 -10
- package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +37 -59
- package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +16 -18
- package/dist/builtin/workflows/src/extension/lifecycle-notification-delivery.ts +83 -0
- package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +80 -41
- package/dist/builtin/workflows/src/extension/postmortem-deps.ts +73 -0
- package/dist/builtin/workflows/src/extension/public-types.ts +11 -51
- package/dist/builtin/workflows/src/extension/render-call.ts +3 -9
- package/dist/builtin/workflows/src/extension/render-result.ts +22 -7
- package/dist/builtin/workflows/src/extension/runtime-active-block-claim.ts +78 -0
- package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +50 -29
- package/dist/builtin/workflows/src/extension/runtime.ts +70 -219
- package/dist/builtin/workflows/src/extension/ui-surface.ts +107 -3
- package/dist/builtin/workflows/src/extension/wiring.ts +76 -7
- package/dist/builtin/workflows/src/extension/workflow-command-completions.ts +10 -5
- package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +27 -5
- package/dist/builtin/workflows/src/extension/workflow-durable-resume-command.ts +49 -19
- package/dist/builtin/workflows/src/extension/workflow-prompts.ts +8 -8
- package/dist/builtin/workflows/src/extension/workflow-resume-picker-rows.ts +81 -0
- package/dist/builtin/workflows/src/extension/workflow-resume-shadow.ts +55 -0
- package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +193 -145
- package/dist/builtin/workflows/src/extension/workflow-schema.ts +9 -133
- package/dist/builtin/workflows/src/extension/workflow-status-summary.ts +189 -0
- package/dist/builtin/workflows/src/extension/workflow-targets.ts +1 -1
- package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +78 -3
- package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +185 -89
- package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +92 -11
- package/dist/builtin/workflows/src/extension/workflow-tool.ts +18 -24
- package/dist/builtin/workflows/src/runs/background/durable-resume-transition.ts +63 -0
- package/dist/builtin/workflows/src/runs/background/quit.ts +139 -29
- package/dist/builtin/workflows/src/runs/background/resume-acknowledgements.ts +97 -0
- package/dist/builtin/workflows/src/runs/background/run-inspect.ts +111 -0
- package/dist/builtin/workflows/src/runs/background/runner.ts +46 -17
- package/dist/builtin/workflows/src/runs/background/startup-admission.ts +77 -0
- package/dist/builtin/workflows/src/runs/background/status.ts +133 -224
- package/dist/builtin/workflows/src/runs/background/workflow-lifecycle-aggregate.ts +44 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +57 -256
- package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +7 -4
- package/dist/builtin/workflows/src/runs/foreground/executor-lifecycle.ts +12 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +39 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-queued-user-message.ts +75 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +44 -12
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +63 -12
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +30 -4
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +3 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +4 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-task-prompts.ts +0 -67
- package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +6 -0
- package/dist/builtin/workflows/src/runs/foreground/executor.ts +0 -1
- package/dist/builtin/workflows/src/runs/foreground/postmortem-stage-chat.ts +169 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +38 -1
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-candidate.ts +21 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +21 -3
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +85 -84
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-message-admission.ts +195 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +12 -5
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-replacement.ts +42 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-send-user-message.ts +100 -8
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-session-options.ts +51 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-session.ts +19 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +28 -2
- package/dist/builtin/workflows/src/runs/shared/prompt-callsite.ts +4 -6
- package/dist/builtin/workflows/src/runs/shared/worktree-git-runner.ts +89 -0
- package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +29 -133
- package/dist/builtin/workflows/src/runs/shared/worktree-post-create.ts +130 -0
- package/dist/builtin/workflows/src/runs/shared/worktree-root.ts +84 -0
- package/dist/builtin/workflows/src/runs/shared/worktree-setup.ts +77 -63
- package/dist/builtin/workflows/src/runs/shared/worktree-types.ts +4 -0
- package/dist/builtin/workflows/src/sdk-surface.ts +1 -1
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +29 -22
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +26 -24
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +5 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +5 -0
- package/dist/builtin/workflows/src/shared/intercom-group.ts +51 -0
- package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +6 -0
- package/dist/builtin/workflows/src/shared/persistence-restore.ts +4 -0
- package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +3 -0
- package/dist/builtin/workflows/src/shared/prompt-callsite-context.ts +13 -0
- package/dist/builtin/workflows/src/shared/returned-run-status.ts +2 -1
- package/dist/builtin/workflows/src/shared/session-transcript.ts +74 -0
- package/dist/builtin/workflows/src/shared/store-stage-methods.ts +1 -0
- package/dist/builtin/workflows/src/shared/store-types.ts +8 -0
- package/dist/builtin/workflows/src/shared/timing.ts +4 -1
- package/dist/builtin/workflows/src/shared/types.ts +2 -6
- package/dist/builtin/workflows/src/tui/chat-surface-message.ts +2 -42
- package/dist/builtin/workflows/src/tui/dispatch-confirm.ts +2 -2
- package/dist/builtin/workflows/src/tui/graph-view-constants.ts +7 -3
- package/dist/builtin/workflows/src/tui/graph-view-input.ts +29 -67
- package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +15 -10
- package/dist/builtin/workflows/src/tui/graph-view-state.ts +0 -2
- package/dist/builtin/workflows/src/tui/graph-view-types.ts +3 -9
- package/dist/builtin/workflows/src/tui/host-input-form.ts +62 -0
- package/dist/builtin/workflows/src/tui/mouse-input.ts +63 -0
- package/dist/builtin/workflows/src/tui/node-card.ts +1 -0
- package/dist/builtin/workflows/src/tui/overlay-adapter.ts +67 -42
- package/dist/builtin/workflows/src/tui/overlay-terminal-modes.ts +49 -0
- package/dist/builtin/workflows/src/tui/session-overlays.ts +3 -104
- package/dist/builtin/workflows/src/tui/session-picker.ts +3 -12
- package/dist/builtin/workflows/src/tui/stage-chat-composer-drafts.ts +19 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +30 -10
- package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +19 -9
- package/dist/builtin/workflows/src/tui/stage-chat-view-input.ts +25 -38
- package/dist/builtin/workflows/src/tui/stage-chat-view-render-helpers.ts +1 -1
- package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +7 -6
- package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +7 -1
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +3 -1
- package/dist/builtin/workflows/src/tui/store-widget-installer.ts +19 -20
- package/dist/builtin/workflows/src/tui/switcher.ts +4 -4
- package/dist/builtin/workflows/src/tui/widget.ts +46 -33
- package/dist/builtin/workflows/src/tui/workflow-attach-pane-handle.ts +26 -0
- package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +14 -2
- package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +26 -27
- package/dist/builtin/workflows/src/tui/workflow-resume-selector.ts +208 -69
- package/dist/bun/cli.js +3 -0
- package/dist/bun/cli.js.map +1 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +3 -0
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +19 -2
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-compaction.js +2 -2
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +5 -3
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-export.js +1 -1
- package/dist/core/agent-session-export.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts +2 -4
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +9 -2
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-message-queue.d.ts +6 -0
- package/dist/core/agent-session-message-queue.d.ts.map +1 -1
- package/dist/core/agent-session-message-queue.js +107 -36
- package/dist/core/agent-session-message-queue.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +18 -7
- 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-models.d.ts +3 -1
- package/dist/core/agent-session-models.d.ts.map +1 -1
- package/dist/core/agent-session-models.js +1 -1
- package/dist/core/agent-session-models.js.map +1 -1
- package/dist/core/agent-session-post-tool-compaction.d.ts +16 -0
- package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -0
- package/dist/core/agent-session-post-tool-compaction.js +113 -0
- package/dist/core/agent-session-post-tool-compaction.js.map +1 -0
- 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 +22 -5
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +3 -0
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
- package/dist/core/agent-session-tool-hooks.js +21 -0
- package/dist/core/agent-session-tool-hooks.js.map +1 -1
- package/dist/core/agent-session-tree.d.ts.map +1 -1
- package/dist/core/agent-session-tree.js +2 -1
- package/dist/core/agent-session-tree.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +7 -0
- 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 +6 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +18 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/async/job-manager.d.ts +1 -0
- package/dist/core/async/job-manager.d.ts.map +1 -1
- package/dist/core/async/job-manager.js +29 -5
- package/dist/core/async/job-manager.js.map +1 -1
- package/dist/core/async/session-manager.d.ts +2 -4
- package/dist/core/async/session-manager.d.ts.map +1 -1
- package/dist/core/async/session-manager.js +5 -32
- package/dist/core/async/session-manager.js.map +1 -1
- package/dist/core/atomic-guide-command.d.ts.map +1 -1
- package/dist/core/atomic-guide-command.js +2 -0
- package/dist/core/atomic-guide-command.js.map +1 -1
- package/dist/core/auth-storage.d.ts +20 -10
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +151 -92
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/callback-activity.d.ts +27 -0
- package/dist/core/callback-activity.d.ts.map +1 -0
- package/dist/core/callback-activity.js +44 -0
- package/dist/core/callback-activity.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +4 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +4 -3
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction-boundary.d.ts +1 -1
- package/dist/core/compaction/compaction-boundary.d.ts.map +1 -1
- package/dist/core/compaction/compaction-boundary.js +10 -23
- package/dist/core/compaction/compaction-boundary.js.map +1 -1
- package/dist/core/compaction/compaction-runner.d.ts +4 -1
- package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
- package/dist/core/compaction/compaction-runner.js +1 -1
- package/dist/core/compaction/compaction-runner.js.map +1 -1
- package/dist/core/compaction/compaction-types.d.ts +3 -2
- package/dist/core/compaction/compaction-types.d.ts.map +1 -1
- package/dist/core/compaction/compaction-types.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +6 -6
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +12 -9
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/index.d.ts +1 -0
- package/dist/core/compaction/index.d.ts.map +1 -1
- package/dist/core/compaction/index.js +1 -0
- package/dist/core/compaction/index.js.map +1 -1
- package/dist/core/compaction/range-planner-diagnostics.d.ts +101 -0
- package/dist/core/compaction/range-planner-diagnostics.d.ts.map +1 -0
- package/dist/core/compaction/range-planner-diagnostics.js +116 -0
- package/dist/core/compaction/range-planner-diagnostics.js.map +1 -0
- package/dist/core/compaction/range-planner.d.ts +13 -3
- package/dist/core/compaction/range-planner.d.ts.map +1 -1
- package/dist/core/compaction/range-planner.js +117 -68
- package/dist/core/compaction/range-planner.js.map +1 -1
- package/dist/core/compaction/truncated-range-recovery.d.ts +47 -0
- package/dist/core/compaction/truncated-range-recovery.d.ts.map +1 -0
- package/dist/core/compaction/truncated-range-recovery.js +112 -0
- package/dist/core/compaction/truncated-range-recovery.js.map +1 -0
- package/dist/core/extensions/api-types.d.ts +2 -2
- 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 +23 -1
- 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 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader-api.js +2 -2
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-core.d.ts.map +1 -1
- package/dist/core/extensions/loader-core.js +8 -1
- package/dist/core/extensions/loader-core.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +9 -6
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/message-types.d.ts +17 -0
- package/dist/core/extensions/message-types.d.ts.map +1 -1
- package/dist/core/extensions/message-types.js.map +1 -1
- package/dist/core/extensions/provider-types.d.ts +3 -0
- package/dist/core/extensions/provider-types.d.ts.map +1 -1
- package/dist/core/extensions/provider-types.js.map +1 -1
- package/dist/core/extensions/runner-events.d.ts.map +1 -1
- package/dist/core/extensions/runner-events.js +11 -10
- package/dist/core/extensions/runner-events.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +2 -2
- 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 +78 -0
- package/dist/core/extensions/ui-types.d.ts.map +1 -1
- package/dist/core/extensions/ui-types.js.map +1 -1
- package/dist/core/model-registry-auth.d.ts +2 -1
- package/dist/core/model-registry-auth.d.ts.map +1 -1
- package/dist/core/model-registry-auth.js +25 -6
- package/dist/core/model-registry-auth.js.map +1 -1
- package/dist/core/model-registry-builtins.d.ts +3 -2
- package/dist/core/model-registry-builtins.d.ts.map +1 -1
- package/dist/core/model-registry-builtins.js +12 -6
- package/dist/core/model-registry-builtins.js.map +1 -1
- package/dist/core/model-registry-dynamic.d.ts +1 -0
- package/dist/core/model-registry-dynamic.d.ts.map +1 -1
- package/dist/core/model-registry-dynamic.js +53 -13
- package/dist/core/model-registry-dynamic.js.map +1 -1
- package/dist/core/model-registry-loader.d.ts +2 -1
- package/dist/core/model-registry-loader.d.ts.map +1 -1
- package/dist/core/model-registry-loader.js +2 -2
- package/dist/core/model-registry-loader.js.map +1 -1
- package/dist/core/model-registry-types.d.ts +10 -3
- package/dist/core/model-registry-types.d.ts.map +1 -1
- package/dist/core/model-registry-types.js.map +1 -1
- package/dist/core/model-registry.d.ts +15 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +214 -30
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/models-store.d.ts +25 -0
- package/dist/core/models-store.d.ts.map +1 -0
- package/dist/core/models-store.js +73 -0
- package/dist/core/models-store.js.map +1 -0
- package/dist/core/oauth-compat.d.ts +17 -0
- package/dist/core/oauth-compat.d.ts.map +1 -0
- package/dist/core/oauth-compat.js +2 -0
- package/dist/core/oauth-compat.js.map +1 -0
- package/dist/core/oauth-provider-bridge.d.ts +40 -0
- package/dist/core/oauth-provider-bridge.d.ts.map +1 -0
- package/dist/core/oauth-provider-bridge.js +169 -0
- package/dist/core/oauth-provider-bridge.js.map +1 -0
- package/dist/core/output-guard.d.ts +2 -0
- package/dist/core/output-guard.d.ts.map +1 -1
- package/dist/core/output-guard.js +14 -0
- package/dist/core/output-guard.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts +5 -0
- package/dist/core/remote-catalog-provider.d.ts.map +1 -0
- package/dist/core/remote-catalog-provider.js +138 -0
- package/dist/core/remote-catalog-provider.js.map +1 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +8 -3
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-core.d.ts +1 -1
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js +1 -1
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-entries.d.ts +1 -1
- package/dist/core/session-manager-entries.d.ts.map +1 -1
- package/dist/core/session-manager-entries.js.map +1 -1
- package/dist/core/session-manager-history.d.ts +2 -2
- package/dist/core/session-manager-history.js +2 -2
- package/dist/core/session-manager-history.js.map +1 -1
- package/dist/core/session-manager-list.d.ts.map +1 -1
- package/dist/core/session-manager-list.js +65 -23
- package/dist/core/session-manager-list.js.map +1 -1
- package/dist/core/session-manager-types.d.ts +3 -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/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +9 -5
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +2 -3
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/find.js +2 -2
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.js +2 -2
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/ls.js +2 -2
- 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 +4 -3
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/todos-render.d.ts.map +1 -1
- package/dist/core/tools/todos-render.js +3 -2
- package/dist/core/tools/todos-render.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +3 -2
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/write.js +2 -2
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/workflow-stage-admission.d.ts +29 -0
- package/dist/core/workflow-stage-admission.d.ts.map +1 -0
- package/dist/core/workflow-stage-admission.js +81 -0
- package/dist/core/workflow-stage-admission.js.map +1 -0
- package/dist/index-extensions.d.ts +1 -1
- package/dist/index-extensions.d.ts.map +1 -1
- package/dist/index-extensions.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/main-types.d.ts +13 -0
- package/dist/main-types.d.ts.map +1 -0
- package/dist/main-types.js +2 -0
- package/dist/main-types.js.map +1 -0
- package/dist/main.d.ts +2 -5
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +25 -17
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +17 -12
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/atomic-banner.d.ts +7 -0
- package/dist/modes/interactive/components/atomic-banner.d.ts.map +1 -1
- package/dist/modes/interactive/components/atomic-banner.js +20 -0
- package/dist/modes/interactive/components/atomic-banner.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +5 -3
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +3 -4
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts +4 -0
- package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js +4 -0
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.js +79 -8
- package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js +4 -2
- package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.d.ts +1 -0
- package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.js +4 -1
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
- package/dist/modes/interactive/components/compaction-boundary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-boundary-message.js +3 -4
- package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
- package/dist/modes/interactive/components/host-input-form-mount.d.ts +14 -0
- package/dist/modes/interactive/components/host-input-form-mount.d.ts.map +1 -0
- package/dist/modes/interactive/components/host-input-form-mount.js +79 -0
- package/dist/modes/interactive/components/host-input-form-mount.js.map +1 -0
- package/dist/modes/interactive/components/host-input-form.d.ts +52 -0
- package/dist/modes/interactive/components/host-input-form.d.ts.map +1 -0
- package/dist/modes/interactive/components/host-input-form.js +278 -0
- package/dist/modes/interactive/components/host-input-form.js.map +1 -0
- package/dist/modes/interactive/components/host-session-picker.d.ts +46 -0
- package/dist/modes/interactive/components/host-session-picker.d.ts.map +1 -0
- package/dist/modes/interactive/components/host-session-picker.js +183 -0
- package/dist/modes/interactive/components/host-session-picker.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +1 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +1 -1
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts +2 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +12 -0
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +3 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +8 -2
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +7 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +57 -10
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +15 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +35 -3
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +3 -2
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +9 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +24 -10
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-login.js +7 -1
- package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.js +3 -3
- package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +49 -0
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive/interactive-bash-compact.js +2 -0
- package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-context.js +14 -0
- package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-runtime.js +1 -1
- package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-global-clear.d.ts +13 -0
- package/dist/modes/interactive/interactive-global-clear.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-global-clear.js +11 -0
- package/dist/modes/interactive/interactive-global-clear.js.map +1 -0
- package/dist/modes/interactive/interactive-input-handling.js +17 -10
- package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +6 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +25 -2
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts +4 -3
- package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js +2 -2
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-helpers.d.ts +4 -1
- package/dist/modes/interactive/interactive-mode-helpers.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-helpers.js +14 -1
- package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +3 -2
- 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 +3 -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-routing.js +7 -4
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-queueing.js +2 -2
- package/dist/modes/interactive/interactive-queueing.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +25 -4
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-session-routing.js +3 -0
- package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-slash-commands.js +5 -2
- package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +22 -9
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-terminal-title.d.ts +6 -0
- package/dist/modes/interactive/interactive-terminal-title.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-terminal-title.js +7 -0
- package/dist/modes/interactive/interactive-terminal-title.js.map +1 -0
- package/dist/modes/interactive-engine/activity-watchdog.d.ts +45 -0
- package/dist/modes/interactive-engine/activity-watchdog.d.ts.map +1 -0
- package/dist/modes/interactive-engine/activity-watchdog.js +74 -0
- package/dist/modes/interactive-engine/activity-watchdog.js.map +1 -0
- package/dist/modes/interactive-engine/create-isolated-runtime.d.ts +14 -0
- package/dist/modes/interactive-engine/create-isolated-runtime.d.ts.map +1 -0
- package/dist/modes/interactive-engine/create-isolated-runtime.js +56 -0
- package/dist/modes/interactive-engine/create-isolated-runtime.js.map +1 -0
- package/dist/modes/interactive-engine/engine-args.d.ts +10 -0
- package/dist/modes/interactive-engine/engine-args.d.ts.map +1 -0
- package/dist/modes/interactive-engine/engine-args.js +55 -0
- package/dist/modes/interactive-engine/engine-args.js.map +1 -0
- package/dist/modes/interactive-engine/engine-child-liveness.d.ts +7 -0
- package/dist/modes/interactive-engine/engine-child-liveness.d.ts.map +1 -0
- package/dist/modes/interactive-engine/engine-child-liveness.js +50 -0
- package/dist/modes/interactive-engine/engine-child-liveness.js.map +1 -0
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts +47 -0
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -0
- package/dist/modes/interactive-engine/engine-custom-ui.js +276 -0
- package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -0
- package/dist/modes/interactive-engine/engine-input-form.d.ts +13 -0
- package/dist/modes/interactive-engine/engine-input-form.d.ts.map +1 -0
- package/dist/modes/interactive-engine/engine-input-form.js +49 -0
- package/dist/modes/interactive-engine/engine-input-form.js.map +1 -0
- package/dist/modes/interactive-engine/engine-monitor.d.ts +18 -0
- package/dist/modes/interactive-engine/engine-monitor.d.ts.map +1 -0
- package/dist/modes/interactive-engine/engine-monitor.js +63 -0
- package/dist/modes/interactive-engine/engine-monitor.js.map +1 -0
- package/dist/modes/interactive-engine/engine-render-service.d.ts +17 -0
- package/dist/modes/interactive-engine/engine-render-service.d.ts.map +1 -0
- package/dist/modes/interactive-engine/engine-render-service.js +150 -0
- package/dist/modes/interactive-engine/engine-render-service.js.map +1 -0
- package/dist/modes/interactive-engine/engine-session-picker.d.ts +22 -0
- package/dist/modes/interactive-engine/engine-session-picker.d.ts.map +1 -0
- package/dist/modes/interactive-engine/engine-session-picker.js +106 -0
- package/dist/modes/interactive-engine/engine-session-picker.js.map +1 -0
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +23 -0
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -0
- package/dist/modes/interactive-engine/extension-ui-bridge.js +126 -0
- package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -0
- package/dist/modes/interactive-engine/input-form-host.d.ts +15 -0
- package/dist/modes/interactive-engine/input-form-host.d.ts.map +1 -0
- package/dist/modes/interactive-engine/input-form-host.js +44 -0
- package/dist/modes/interactive-engine/input-form-host.js.map +1 -0
- package/dist/modes/interactive-engine/isolated-runtime.d.ts +75 -0
- package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -0
- package/dist/modes/interactive-engine/isolated-runtime.js +448 -0
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -0
- package/dist/modes/interactive-engine/protocol.d.ts +184 -0
- package/dist/modes/interactive-engine/protocol.d.ts.map +1 -0
- package/dist/modes/interactive-engine/protocol.js +254 -0
- package/dist/modes/interactive-engine/protocol.js.map +1 -0
- package/dist/modes/interactive-engine/remote-command-catalog.d.ts +33 -0
- package/dist/modes/interactive-engine/remote-command-catalog.d.ts.map +1 -0
- package/dist/modes/interactive-engine/remote-command-catalog.js +51 -0
- package/dist/modes/interactive-engine/remote-command-catalog.js.map +1 -0
- package/dist/modes/interactive-engine/remote-component.d.ts +16 -0
- package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -0
- package/dist/modes/interactive-engine/remote-component.js +209 -0
- package/dist/modes/interactive-engine/remote-component.js.map +1 -0
- package/dist/modes/interactive-engine/remote-frame-clamp.d.ts +25 -0
- package/dist/modes/interactive-engine/remote-frame-clamp.d.ts.map +1 -0
- package/dist/modes/interactive-engine/remote-frame-clamp.js +43 -0
- package/dist/modes/interactive-engine/remote-frame-clamp.js.map +1 -0
- package/dist/modes/interactive-engine/remote-renderer.d.ts +59 -0
- package/dist/modes/interactive-engine/remote-renderer.d.ts.map +1 -0
- package/dist/modes/interactive-engine/remote-renderer.js +123 -0
- package/dist/modes/interactive-engine/remote-renderer.js.map +1 -0
- package/dist/modes/interactive-engine/session-picker-host.d.ts +25 -0
- package/dist/modes/interactive-engine/session-picker-host.d.ts.map +1 -0
- package/dist/modes/interactive-engine/session-picker-host.js +75 -0
- package/dist/modes/interactive-engine/session-picker-host.js.map +1 -0
- package/dist/modes/interactive-engine/terminal-mode-controller.d.ts +43 -0
- package/dist/modes/interactive-engine/terminal-mode-controller.d.ts.map +1 -0
- package/dist/modes/interactive-engine/terminal-mode-controller.js +109 -0
- package/dist/modes/interactive-engine/terminal-mode-controller.js.map +1 -0
- package/dist/modes/rpc/bounded-writer.d.ts +27 -0
- package/dist/modes/rpc/bounded-writer.d.ts.map +1 -0
- package/dist/modes/rpc/bounded-writer.js +103 -0
- package/dist/modes/rpc/bounded-writer.js.map +1 -0
- package/dist/modes/rpc/jsonl.d.ts +15 -12
- package/dist/modes/rpc/jsonl.d.ts.map +1 -1
- package/dist/modes/rpc/jsonl.js +102 -28
- package/dist/modes/rpc/jsonl.js.map +1 -1
- package/dist/modes/rpc/rpc-client-api.d.ts +83 -0
- package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client-api.js +64 -0
- package/dist/modes/rpc/rpc-client-api.js.map +1 -0
- package/dist/modes/rpc/rpc-client-process.d.ts +19 -0
- package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client-process.js +79 -0
- package/dist/modes/rpc/rpc-client-process.js.map +1 -0
- package/dist/modes/rpc/rpc-client-waits.d.ts +8 -0
- package/dist/modes/rpc/rpc-client-waits.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client-waits.js +33 -0
- package/dist/modes/rpc/rpc-client-waits.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +48 -124
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +295 -249
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts +5 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.js +79 -3
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
- package/dist/modes/rpc/rpc-event-buffer.d.ts +11 -0
- package/dist/modes/rpc/rpc-event-buffer.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-event-buffer.js +30 -0
- package/dist/modes/rpc/rpc-event-buffer.js.map +1 -0
- package/dist/modes/rpc/rpc-extension-ui.d.ts +7 -1
- package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-extension-ui.js +54 -32
- package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
- package/dist/modes/rpc/rpc-input-scheduler.d.ts +16 -0
- package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-input-scheduler.js +69 -0
- package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -0
- package/dist/modes/rpc/rpc-input.d.ts +2 -1
- package/dist/modes/rpc/rpc-input.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-input.js +4 -9
- package/dist/modes/rpc/rpc-input.js.map +1 -1
- package/dist/modes/rpc/rpc-keybindings-reload.d.ts +27 -0
- package/dist/modes/rpc/rpc-keybindings-reload.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-keybindings-reload.js +69 -0
- package/dist/modes/rpc/rpc-keybindings-reload.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +63 -8
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-output-buffer.d.ts +10 -0
- package/dist/modes/rpc/rpc-output-buffer.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-output-buffer.js +70 -0
- package/dist/modes/rpc/rpc-output-buffer.js.map +1 -0
- package/dist/modes/rpc/rpc-session-binding.d.ts +16 -1
- package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-session-binding.js +16 -3
- package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +109 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli-parser.d.ts +2 -0
- package/dist/package-manager-cli-parser.d.ts.map +1 -1
- package/dist/package-manager-cli-parser.js +24 -5
- package/dist/package-manager-cli-parser.js.map +1 -1
- package/dist/package-manager-cli.d.ts +7 -0
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +65 -1
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/shell.d.ts +1 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +46 -0
- package/dist/utils/shell.js.map +1 -1
- package/docs/changelog.mdx +11 -0
- package/docs/compaction.md +53 -17
- package/docs/custom-provider.md +24 -5
- package/docs/development.md +9 -7
- package/docs/docs.json +1 -0
- package/docs/extensions.md +30 -16
- package/docs/intercom.md +489 -0
- package/docs/json.md +1 -1
- package/docs/keybindings.md +1 -1
- package/docs/packages.md +1 -0
- package/docs/quickstart.md +11 -5
- package/docs/rpc.md +9 -7
- package/docs/sdk.md +6 -0
- package/docs/session-format.md +7 -6
- package/docs/sessions.md +4 -2
- package/docs/settings.md +2 -2
- package/docs/subagents.md +7 -2
- package/docs/tui.md +61 -2
- package/docs/usage.md +6 -5
- package/docs/workflows.md +2572 -1379
- package/examples/extensions/handoff.ts +1 -1
- package/examples/extensions/qna.ts +1 -1
- package/examples/extensions/summarize.ts +1 -1
- package/npm-shrinkwrap.json +225 -76
- package/package.json +7 -6
- package/dist/builtin/workflows/src/durable/file-backend.ts +0 -439
- package/dist/builtin/workflows/src/durable/file-lock.ts +0 -153
- package/dist/builtin/workflows/src/durable/file-state.ts +0 -104
- package/dist/builtin/workflows/src/extension/runtime-direct.ts +0 -96
- package/dist/builtin/workflows/src/extension/workflow-tool-helpers.ts +0 -66
- package/dist/builtin/workflows/src/runs/foreground/executor-direct-output.ts +0 -91
- package/dist/builtin/workflows/src/runs/foreground/executor-direct.ts +0 -282
- package/dist/builtin/workflows/src/shared/resumable-workflow-notices.ts +0 -43
- package/dist/builtin/workflows/src/tui/session-confirm.ts +0 -299
|
@@ -9,7 +9,7 @@ import { durableHash } from "./backend.js";
|
|
|
9
9
|
import { recordCheckpointDurably } from "./tool-primitive.js";
|
|
10
10
|
import { elapsedStageMs } from "../shared/timing.js";
|
|
11
11
|
import { RESUME_CONTINUATION_PROMPT } from "../shared/resume-continuation.js";
|
|
12
|
-
import type
|
|
12
|
+
import { DURABLE_STAGE_TOPOLOGY_VERSION, type DurableStageCheckpoint } from "./types.js";
|
|
13
13
|
export type DurableCompletedStageCheckpoint = DurableStageCheckpoint & { readonly output: WorkflowSerializableValue };
|
|
14
14
|
|
|
15
15
|
export interface DurableStageDeps {
|
|
@@ -50,6 +50,18 @@ export async function recordStageCheckpoint(deps: DurableStageDeps, stage: Stage
|
|
|
50
50
|
return true;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
/**
|
|
54
|
+
* Debounce granularity for stage-session duration updates. `durationMs`
|
|
55
|
+
* differs on virtually every prompt/steer event, so comparing it exactly
|
|
56
|
+
* forced a full durable read-merge-rewrite per event; identity fields
|
|
57
|
+
* (session id/file/start) still force an immediate write when they change.
|
|
58
|
+
*/
|
|
59
|
+
const STAGE_SESSION_DURATION_BUCKET_MS = 30_000;
|
|
60
|
+
|
|
61
|
+
function stageSessionDurationBucket(durationMs: number | undefined): number {
|
|
62
|
+
return Math.floor((durationMs ?? 0) / STAGE_SESSION_DURATION_BUCKET_MS);
|
|
63
|
+
}
|
|
64
|
+
|
|
53
65
|
export async function recordStageSessionCheckpoint(deps: DurableStageDeps, stage: StageSnapshot): Promise<boolean> {
|
|
54
66
|
const replayKey = deps.replayKeyForCompletedStage?.(stage) ?? stage.replayKey ?? deps.nextReplayKey(stage.name);
|
|
55
67
|
if (stage.sessionFile === undefined) return false;
|
|
@@ -60,7 +72,7 @@ export async function recordStageSessionCheckpoint(deps: DurableStageDeps, stage
|
|
|
60
72
|
&& current.sessionId === stage.sessionId
|
|
61
73
|
&& current.sessionFile === stage.sessionFile
|
|
62
74
|
&& current.startedAt === stage.startedAt
|
|
63
|
-
&& current.durationMs === durationMs) return false;
|
|
75
|
+
&& stageSessionDurationBucket(current.durationMs) === stageSessionDurationBucket(durationMs)) return false;
|
|
64
76
|
const checkpoint: DurableStageCheckpoint = {
|
|
65
77
|
kind: "stage",
|
|
66
78
|
workflowId: deps.workflowId,
|
|
@@ -246,6 +258,7 @@ function stageOutput(stage: StageSnapshot): WorkflowSerializableValue {
|
|
|
246
258
|
|
|
247
259
|
function checkpointMetadata(stage: StageSnapshot): Partial<DurableStageCheckpoint> {
|
|
248
260
|
return {
|
|
261
|
+
topology: { version: DURABLE_STAGE_TOPOLOGY_VERSION, stageId: stage.id, parentIds: [...stage.parentIds] },
|
|
249
262
|
...(stage.startedAt !== undefined ? { startedAt: stage.startedAt } : {}),
|
|
250
263
|
...(stage.endedAt !== undefined ? { endedAt: stage.endedAt } : {}),
|
|
251
264
|
...(stage.durationMs !== undefined ? { durationMs: stage.durationMs } : {}),
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* typescript code and cache the result for DBOS."
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
+
import { runCallback } from "@bastani/atomic";
|
|
18
19
|
import type { WorkflowSerializableValue } from "../shared/types.js";
|
|
19
20
|
import type { DurableWorkflowBackend } from "./backend.js";
|
|
20
21
|
import { durableHash } from "./backend.js";
|
|
@@ -85,7 +86,15 @@ export function createToolPrimitive(input: CreateToolPrimitiveInput): WorkflowTo
|
|
|
85
86
|
if (cached !== undefined) return cached as T;
|
|
86
87
|
|
|
87
88
|
// Execute (with optional retries).
|
|
88
|
-
const result = await executeWithRetries(
|
|
89
|
+
const result = await executeWithRetries(
|
|
90
|
+
() => runCallback(
|
|
91
|
+
{ kind: "workflow.ctx_tool", name, runId: input.workflowId },
|
|
92
|
+
fn,
|
|
93
|
+
),
|
|
94
|
+
options,
|
|
95
|
+
input.throwIfCancelled,
|
|
96
|
+
input.signal,
|
|
97
|
+
);
|
|
89
98
|
|
|
90
99
|
// Re-check cancellation after the tool function resolves but BEFORE the
|
|
91
100
|
// side-effect result is durably checkpointed/returned. A side effect that
|
|
@@ -110,12 +119,7 @@ export function createToolPrimitive(input: CreateToolPrimitiveInput): WorkflowTo
|
|
|
110
119
|
}
|
|
111
120
|
|
|
112
121
|
export async function recordCheckpointDurably(backend: DurableWorkflowBackend, checkpoint: DurableCheckpoint): Promise<void> {
|
|
113
|
-
|
|
114
|
-
await backend.recordCheckpointAsync(checkpoint);
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
backend.recordCheckpoint(checkpoint);
|
|
118
|
-
await backend.flush?.();
|
|
122
|
+
await backend.recordCheckpointAsync(checkpoint);
|
|
119
123
|
}
|
|
120
124
|
|
|
121
125
|
async function executeWithRetries<T>(
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import type { WorkflowModelAttempt, WorkflowSerializableValue } from "../shared/types.js";
|
|
13
|
-
import type { DURABLE_FORMAT_VERSION } from "./format-version.js";
|
|
14
13
|
|
|
15
14
|
// ---------------------------------------------------------------------------
|
|
16
15
|
// Top-level workflow identity
|
|
@@ -53,6 +52,8 @@ export interface DurableWorkflowHandle {
|
|
|
53
52
|
readonly rootWorkflowId?: string;
|
|
54
53
|
/** Explicit resumability flag for failed/blocked runs. */
|
|
55
54
|
readonly resumable?: boolean;
|
|
55
|
+
/** Executor id of the Atomic process that last wrote this workflow's metadata. */
|
|
56
|
+
readonly ownerExecutorId?: string;
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
export type DurableWorkflowStatus =
|
|
@@ -107,6 +108,15 @@ export interface DurableUiCheckpoint {
|
|
|
107
108
|
readonly completedAt: number;
|
|
108
109
|
}
|
|
109
110
|
|
|
111
|
+
export const DURABLE_STAGE_TOPOLOGY_VERSION = 1 as const;
|
|
112
|
+
|
|
113
|
+
/** Versioned source-stage lineage used to reconstruct completed DAGs after restart. */
|
|
114
|
+
export interface DurableStageTopology {
|
|
115
|
+
readonly version: typeof DURABLE_STAGE_TOPOLOGY_VERSION;
|
|
116
|
+
readonly stageId: string;
|
|
117
|
+
readonly parentIds: readonly string[];
|
|
118
|
+
}
|
|
119
|
+
|
|
110
120
|
/** A `ctx.stage(...)` / `ctx.task(...)` durable checkpoint or resumable session marker. */
|
|
111
121
|
export interface DurableStageCheckpoint {
|
|
112
122
|
readonly kind: "stage";
|
|
@@ -116,6 +126,8 @@ export interface DurableStageCheckpoint {
|
|
|
116
126
|
readonly name: string;
|
|
117
127
|
/** Stable replay key (matches existing continuation replay semantics). */
|
|
118
128
|
readonly replayKey: string;
|
|
129
|
+
/** Source stage identity and parents for fresh-process completed-run inspection. */
|
|
130
|
+
readonly topology?: DurableStageTopology;
|
|
119
131
|
/** Stage output text or structured result when the stage completed. */
|
|
120
132
|
readonly output?: WorkflowSerializableValue;
|
|
121
133
|
/** Resumable Atomic/Pi session metadata for in-progress LM stages. */
|
|
@@ -146,26 +158,24 @@ export type UiPromptKind = "input" | "confirm" | "select" | "editor" | "custom";
|
|
|
146
158
|
export type WorkflowSerializableObject = Readonly<Record<string, WorkflowSerializableValue>>;
|
|
147
159
|
|
|
148
160
|
// ---------------------------------------------------------------------------
|
|
149
|
-
//
|
|
161
|
+
// DBOS metadata and resume catalog
|
|
150
162
|
// ---------------------------------------------------------------------------
|
|
151
163
|
|
|
152
|
-
/**
|
|
153
|
-
|
|
154
|
-
* entry. This is the session-file cache described by the issue — it lets a new
|
|
155
|
-
* session discover resumable workflows without scanning the full DBOS system
|
|
156
|
-
* database. DBOS remains the checkpoint source of truth; this cache mirrors
|
|
157
|
-
* the minimal top-level metadata needed for `/workflow resume` discovery.
|
|
158
|
-
*/
|
|
159
|
-
export interface DurableCheckpointEntry {
|
|
160
|
-
/** Durable metadata schema version used to reject incompatible discovery rows. */
|
|
161
|
-
readonly formatVersion: typeof DURABLE_FORMAT_VERSION;
|
|
162
|
-
readonly type: "workflow.durable.checkpoint";
|
|
164
|
+
/** Current workflow metadata persisted in DBOS. */
|
|
165
|
+
export interface DurableWorkflowMetadata {
|
|
163
166
|
readonly workflowId: string;
|
|
164
167
|
readonly name: string;
|
|
165
168
|
readonly inputs: WorkflowSerializableObject;
|
|
166
169
|
readonly status: DurableWorkflowStatus;
|
|
167
170
|
readonly completedCheckpoints: number;
|
|
168
171
|
readonly pendingPrompts: number;
|
|
172
|
+
readonly createdAt: number;
|
|
173
|
+
readonly promptReservationEpoch: string;
|
|
174
|
+
/** Executor id of the Atomic process that wrote this metadata generation. */
|
|
175
|
+
readonly ownerExecutorId?: string;
|
|
176
|
+
/** Unique winner token for a first-writer-wins status-transition generation. */
|
|
177
|
+
readonly transitionClaimId?: string;
|
|
178
|
+
readonly sessionFile?: string;
|
|
169
179
|
readonly label?: string;
|
|
170
180
|
readonly rootWorkflowId?: string;
|
|
171
181
|
readonly resumable?: boolean;
|
|
@@ -173,13 +183,10 @@ export interface DurableCheckpointEntry {
|
|
|
173
183
|
readonly workflowCwd?: string;
|
|
174
184
|
readonly repositoryRoot?: string;
|
|
175
185
|
readonly gitWorktreeRoot?: string;
|
|
176
|
-
readonly
|
|
186
|
+
readonly updatedAt: number;
|
|
177
187
|
}
|
|
178
188
|
|
|
179
|
-
/**
|
|
180
|
-
* Resume catalog entry for the cross-session `/workflow resume` selector.
|
|
181
|
-
* Built from durable checkpoint entries found across session files.
|
|
182
|
-
*/
|
|
189
|
+
/** Resume catalog entry loaded directly from DBOS metadata. */
|
|
183
190
|
export interface ResumableWorkflowEntry {
|
|
184
191
|
readonly workflowId: string;
|
|
185
192
|
readonly name: string;
|
|
@@ -6,10 +6,13 @@ import type {
|
|
|
6
6
|
WorkflowUIContext,
|
|
7
7
|
} from "../shared/authoring-contract-ui.js";
|
|
8
8
|
import type { WorkflowSerializableValue } from "../shared/types.js";
|
|
9
|
+
import { withPromptCallerStack } from "../shared/prompt-callsite-context.js";
|
|
10
|
+
import { selectPromptCallsiteFrame } from "../runs/shared/prompt-callsite.js";
|
|
9
11
|
import type { DurableWorkflowBackend } from "./backend.js";
|
|
10
12
|
import { durableHash } from "./backend.js";
|
|
11
13
|
import type { DurableUiCheckpoint, UiPromptKind } from "./types.js";
|
|
12
14
|
import { recordCheckpointDurably } from "./tool-primitive.js";
|
|
15
|
+
import { claimDurablePromptToken, durablePromptScope, releaseDurablePrompt, reserveDurablePrompt, type PromptReservationToken } from "./prompt-reservations.js";
|
|
13
16
|
|
|
14
17
|
export interface DurableUiDeps {
|
|
15
18
|
readonly workflowId: string;
|
|
@@ -20,11 +23,25 @@ export interface DurableUiDeps {
|
|
|
20
23
|
export function wrapUiWithDurable(base: WorkflowUIContext, deps: DurableUiDeps): WorkflowUIContext {
|
|
21
24
|
const ordinals = new Map<string, number>();
|
|
22
25
|
|
|
23
|
-
const
|
|
24
|
-
|
|
26
|
+
const scope = durablePromptScope(deps.backend, deps.workflowId);
|
|
27
|
+
const nextIdentity = (
|
|
28
|
+
kind: UiPromptKind,
|
|
29
|
+
message: string,
|
|
30
|
+
callerStack: string | undefined,
|
|
31
|
+
details?: WorkflowSerializableValue,
|
|
32
|
+
): { key: string; hash: string } => {
|
|
33
|
+
const authorCallsite = selectPromptCallsiteFrame(callerStack ?? "") ?? "unknown";
|
|
34
|
+
const descriptor = { kind, message, details: details ?? null };
|
|
35
|
+
const baseIdentity = {
|
|
36
|
+
rootWorkflowId: scope.rootWorkflowId,
|
|
37
|
+
scope: scope.scope,
|
|
38
|
+
authorCallsite: durableHash({ authorCallsite }),
|
|
39
|
+
descriptor,
|
|
40
|
+
};
|
|
41
|
+
const baseKey = durableHash(baseIdentity);
|
|
25
42
|
const ordinal = (ordinals.get(baseKey) ?? 0) + 1;
|
|
26
43
|
ordinals.set(baseKey, ordinal);
|
|
27
|
-
const identity =
|
|
44
|
+
const identity = ordinal === 1 ? baseIdentity : { ...baseIdentity, ordinal };
|
|
28
45
|
return { key: JSON.stringify(identity), hash: durableHash(identity) };
|
|
29
46
|
};
|
|
30
47
|
|
|
@@ -46,51 +63,122 @@ export function wrapUiWithDurable(base: WorkflowUIContext, deps: DurableUiDeps):
|
|
|
46
63
|
|
|
47
64
|
const cachedCustom = (identity: { readonly hash: string }): { readonly found: boolean; readonly response?: WorkflowSerializableValue } => {
|
|
48
65
|
const hit = deps.backend.listCheckpoints(deps.workflowId)
|
|
49
|
-
.find((checkpoint) => checkpoint.kind === "ui"
|
|
66
|
+
.find((checkpoint) => checkpoint.kind === "ui"
|
|
67
|
+
&& (checkpoint.promptHash === identity.hash || checkpoint.promptHash.endsWith(`:${identity.hash}`)));
|
|
50
68
|
return hit?.kind === "ui" ? { found: true, response: hit.response } : { found: false };
|
|
51
69
|
};
|
|
52
70
|
|
|
71
|
+
const releasePending = async (identity: { readonly hash: string }, token: PromptReservationToken): Promise<void> => {
|
|
72
|
+
releaseDurablePrompt(deps.backend, deps.workflowId, identity.hash, token);
|
|
73
|
+
await deps.backend.flush();
|
|
74
|
+
};
|
|
75
|
+
const beginPending = (identity: { readonly hash: string }): {
|
|
76
|
+
readonly token: PromptReservationToken;
|
|
77
|
+
readonly write?: Promise<void>;
|
|
78
|
+
} => {
|
|
79
|
+
const token = reserveDurablePrompt(deps.backend, deps.workflowId, identity.hash);
|
|
80
|
+
const write = deps.backend.flush();
|
|
81
|
+
return { token, write };
|
|
82
|
+
};
|
|
83
|
+
const waitForPendingWrite = async (
|
|
84
|
+
identity: { readonly hash: string },
|
|
85
|
+
pending: { readonly token: PromptReservationToken; readonly write?: Promise<void> },
|
|
86
|
+
): Promise<void> => {
|
|
87
|
+
if (pending.write === undefined) return;
|
|
88
|
+
try {
|
|
89
|
+
await pending.write;
|
|
90
|
+
} catch (error) {
|
|
91
|
+
releaseDurablePrompt(deps.backend, deps.workflowId, identity.hash, pending.token);
|
|
92
|
+
try { await deps.backend.flush(); } catch { /* Preserve the opening-write failure. */ }
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
const releaseCached = async (identity: { readonly hash: string }): Promise<void> => {
|
|
97
|
+
const token = claimDurablePromptToken(deps.backend, deps.workflowId, identity.hash);
|
|
98
|
+
if (token !== undefined) await releasePending(identity, token);
|
|
99
|
+
};
|
|
100
|
+
|
|
53
101
|
return {
|
|
54
102
|
async input(promptText: string): Promise<string> {
|
|
55
|
-
const
|
|
103
|
+
const callerStack = new Error().stack;
|
|
104
|
+
const identity = nextIdentity("input", promptText, callerStack);
|
|
56
105
|
const hit = cached(identity);
|
|
57
|
-
if (typeof hit === "string")
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
106
|
+
if (typeof hit === "string") {
|
|
107
|
+
await releaseCached(identity);
|
|
108
|
+
return hit;
|
|
109
|
+
}
|
|
110
|
+
const pending = beginPending(identity);
|
|
111
|
+
await waitForPendingWrite(identity, pending);
|
|
112
|
+
try {
|
|
113
|
+
const response = await withPromptCallerStack(callerStack, () => base.input(promptText));
|
|
114
|
+
await record("input", identity, response);
|
|
115
|
+
return response;
|
|
116
|
+
} finally { await releasePending(identity, pending.token); }
|
|
61
117
|
},
|
|
62
118
|
async confirm(message: string): Promise<boolean> {
|
|
63
|
-
const
|
|
119
|
+
const callerStack = new Error().stack;
|
|
120
|
+
const identity = nextIdentity("confirm", message, callerStack);
|
|
64
121
|
const hit = cached(identity);
|
|
65
|
-
if (typeof hit === "boolean")
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
122
|
+
if (typeof hit === "boolean") {
|
|
123
|
+
await releaseCached(identity);
|
|
124
|
+
return hit;
|
|
125
|
+
}
|
|
126
|
+
const pending = beginPending(identity);
|
|
127
|
+
await waitForPendingWrite(identity, pending);
|
|
128
|
+
try {
|
|
129
|
+
const response = await withPromptCallerStack(callerStack, () => base.confirm(message));
|
|
130
|
+
await record("confirm", identity, response);
|
|
131
|
+
return response;
|
|
132
|
+
} finally { await releasePending(identity, pending.token); }
|
|
69
133
|
},
|
|
70
134
|
async select<T extends string>(message: string, options: readonly T[]): Promise<T> {
|
|
71
|
-
const
|
|
135
|
+
const callerStack = new Error().stack;
|
|
136
|
+
const identity = nextIdentity("select", message, callerStack, [...options]);
|
|
72
137
|
const hit = cached(identity);
|
|
73
|
-
if (typeof hit === "string")
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
138
|
+
if (typeof hit === "string") {
|
|
139
|
+
await releaseCached(identity);
|
|
140
|
+
return hit as T;
|
|
141
|
+
}
|
|
142
|
+
const pending = beginPending(identity);
|
|
143
|
+
await waitForPendingWrite(identity, pending);
|
|
144
|
+
try {
|
|
145
|
+
const response = await withPromptCallerStack(callerStack, () => base.select<T>(message, options));
|
|
146
|
+
await record("select", identity, response);
|
|
147
|
+
return response;
|
|
148
|
+
} finally { await releasePending(identity, pending.token); }
|
|
77
149
|
},
|
|
78
150
|
async editor(initial?: string): Promise<string> {
|
|
79
|
-
const
|
|
151
|
+
const callerStack = new Error().stack;
|
|
152
|
+
const identity = nextIdentity("editor", initial ?? "", callerStack, initial ?? null);
|
|
80
153
|
const hit = cached(identity);
|
|
81
|
-
if (typeof hit === "string")
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
154
|
+
if (typeof hit === "string") {
|
|
155
|
+
await releaseCached(identity);
|
|
156
|
+
return hit;
|
|
157
|
+
}
|
|
158
|
+
const pending = beginPending(identity);
|
|
159
|
+
await waitForPendingWrite(identity, pending);
|
|
160
|
+
try {
|
|
161
|
+
const response = await withPromptCallerStack(callerStack, () => base.editor(initial));
|
|
162
|
+
await record("editor", identity, response);
|
|
163
|
+
return response;
|
|
164
|
+
} finally { await releasePending(identity, pending.token); }
|
|
85
165
|
},
|
|
86
166
|
async custom<T>(factory: WorkflowCustomUiFactory<T>, options?: WorkflowCustomUiOptions): Promise<T> {
|
|
167
|
+
const callerStack = new Error().stack;
|
|
87
168
|
const replayIdentity = options?.replayIdentity ?? factory?.name ?? "custom";
|
|
88
|
-
const identity = nextIdentity("custom", replayIdentity, { replayIdentity });
|
|
169
|
+
const identity = nextIdentity("custom", replayIdentity, callerStack, { replayIdentity });
|
|
89
170
|
const hit = cachedCustom(identity);
|
|
90
|
-
if (hit.found)
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
171
|
+
if (hit.found) {
|
|
172
|
+
await releaseCached(identity);
|
|
173
|
+
return hit.response as T;
|
|
174
|
+
}
|
|
175
|
+
const pending = beginPending(identity);
|
|
176
|
+
await waitForPendingWrite(identity, pending);
|
|
177
|
+
try {
|
|
178
|
+
const response = await withPromptCallerStack(callerStack, () => base.custom<T>(factory, options));
|
|
179
|
+
await record("custom", identity, response as WorkflowSerializableValue);
|
|
180
|
+
return response;
|
|
181
|
+
} finally { await releasePending(identity, pending.token); }
|
|
94
182
|
},
|
|
95
183
|
};
|
|
96
184
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { DurableWorkflowHandle, DurableWorkflowStatus } from "./types.js";
|
|
2
|
+
import type { DurableWorkflowBackend } from "./backend.js";
|
|
3
|
+
|
|
4
|
+
/** Read one loadable handle without combining objects from different generations. */
|
|
5
|
+
export function getLoadableDurableWorkflow(
|
|
6
|
+
backend: DurableWorkflowBackend,
|
|
7
|
+
workflowId: string,
|
|
8
|
+
): DurableWorkflowHandle | undefined {
|
|
9
|
+
return backend.getLoadableWorkflow(workflowId);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Terminal durable generations cannot be reopened by stale nonterminal writers. */
|
|
13
|
+
export function isAbsorbingDurableStatus(status: DurableWorkflowStatus, resumable?: boolean): boolean {
|
|
14
|
+
return status === "completed" || status === "cancelled"
|
|
15
|
+
|| ((status === "failed" || status === "blocked") && resumable === false);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** Perform a required conditional status transition. */
|
|
19
|
+
export async function transitionDurableWorkflowStatus(
|
|
20
|
+
backend: DurableWorkflowBackend,
|
|
21
|
+
workflowId: string,
|
|
22
|
+
expectedStatuses: readonly DurableWorkflowStatus[],
|
|
23
|
+
status: DurableWorkflowStatus,
|
|
24
|
+
pendingPrompts?: number,
|
|
25
|
+
resumable?: boolean,
|
|
26
|
+
): Promise<boolean> {
|
|
27
|
+
return await backend.transitionWorkflowStatus(
|
|
28
|
+
workflowId, expectedStatuses, status, pendingPrompts, resumable,
|
|
29
|
+
);
|
|
30
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
1
2
|
import type { WorkflowParallelOptions, WorkflowTaskResult, WorkflowTaskStep } from "../../shared/types.js";
|
|
2
3
|
import type { EngineRuntime } from "../runtime.js";
|
|
3
4
|
import type { WorkflowTaskPrimitive } from "./task.js";
|
|
@@ -11,6 +12,7 @@ import {
|
|
|
11
12
|
taskPrevious,
|
|
12
13
|
taskWithSharedDefaults,
|
|
13
14
|
} from "../../runs/foreground/executor-task-prompts.js";
|
|
15
|
+
import { normalizeAutoGroupSentinel } from "../../shared/intercom-group.js";
|
|
14
16
|
|
|
15
17
|
export function createParallelPrimitive(input: {
|
|
16
18
|
readonly runtime: EngineRuntime;
|
|
@@ -18,19 +20,32 @@ export function createParallelPrimitive(input: {
|
|
|
18
20
|
}): (steps: readonly WorkflowTaskStep[], options?: WorkflowParallelOptions) => Promise<WorkflowTaskResult[]> {
|
|
19
21
|
return async (steps: readonly WorkflowTaskStep[], options: WorkflowParallelOptions = {}): Promise<WorkflowTaskResult[]> => {
|
|
20
22
|
input.runtime.exit.throwIfWorkflowExitSelected();
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
// Normalize both authored and agent-serialized sentinels before deciding
|
|
24
|
+
// whether this invocation needs one shared auto-group UUID.
|
|
25
|
+
const normalizeGroup = <T extends { group?: string | true }>(value: T): T =>
|
|
26
|
+
value.group === undefined ? value : { ...value, group: normalizeAutoGroupSentinel(value.group) };
|
|
27
|
+
const normalizedOptions = normalizeGroup(options);
|
|
28
|
+
const normalizedSteps = steps.map(normalizeGroup);
|
|
29
|
+
const needsAutoGroup = normalizedOptions.group === true
|
|
30
|
+
|| normalizedSteps.some((step) => step.group === true);
|
|
31
|
+
const autoGroup = needsAutoGroup ? randomUUID() : undefined;
|
|
32
|
+
const resolveAutoGroup = <T extends { group?: string | true }>(value: T): T =>
|
|
33
|
+
value.group === true && autoGroup ? { ...value, group: autoGroup } : value;
|
|
34
|
+
const resolvedOptions = resolveAutoGroup(normalizedOptions);
|
|
35
|
+
const resolvedSteps = normalizedSteps.map(resolveAutoGroup);
|
|
36
|
+
const fallback = parallelFallbackTask(resolvedSteps, resolvedOptions);
|
|
37
|
+
const failFastEnabled = resolvedOptions.failFast !== false;
|
|
23
38
|
const parallelScope: ParallelFailFastScope = {
|
|
24
39
|
failed: false,
|
|
25
40
|
activeStages: new Map<string, ParallelFailFastStage>(),
|
|
26
41
|
parentIds: Object.freeze(input.runtime.tracker.currentParents()),
|
|
27
42
|
};
|
|
28
|
-
return mapParallelSteps(
|
|
43
|
+
return mapParallelSteps(resolvedSteps, resolvedOptions.concurrency, resolvedOptions.failFast, async (step) => {
|
|
29
44
|
input.runtime.exit.throwIfWorkflowExitSelected();
|
|
30
|
-
const prompt = replaceTaskPlaceholder(step.prompt ?? step.task ?? fallback,
|
|
45
|
+
const prompt = replaceTaskPlaceholder(step.prompt ?? step.task ?? fallback, resolvedOptions.task ?? fallback);
|
|
31
46
|
return await input.task(
|
|
32
47
|
step.name,
|
|
33
|
-
taskWithSharedDefaults(taskOptionsFromStep(step, prompt, taskPrevious(step)),
|
|
48
|
+
taskWithSharedDefaults(taskOptionsFromStep(step, prompt, taskPrevious(step)), resolvedOptions),
|
|
34
49
|
parallelScope,
|
|
35
50
|
);
|
|
36
51
|
}, async (error) => {
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
import {
|
|
16
16
|
cleanupPreparedWorktrees,
|
|
17
17
|
collectWorktreeDiffs,
|
|
18
|
-
|
|
18
|
+
prepareTaskWorktrees,
|
|
19
19
|
stageOptionsWithGitWorktree,
|
|
20
20
|
stageOptionsWithInputDefaults,
|
|
21
21
|
} from "../../runs/foreground/executor-direct-helpers.js";
|
|
@@ -81,12 +81,13 @@ function createTaskPrimitive(runtime: EngineRuntime): WorkflowTaskPrimitive {
|
|
|
81
81
|
};
|
|
82
82
|
|
|
83
83
|
if (options.worktree !== true) return runTaskOnce(options);
|
|
84
|
-
const prepared =
|
|
84
|
+
const prepared = prepareTaskWorktrees(
|
|
85
85
|
[{ ...options, name }],
|
|
86
86
|
{ ...options, worktree: true },
|
|
87
87
|
`${runtime.runId}-${name}-${crypto.randomUUID()}`,
|
|
88
88
|
name,
|
|
89
89
|
runtime.workflowInvocationCwd,
|
|
90
|
+
runtime.worktreeSymlinkDirectories,
|
|
90
91
|
);
|
|
91
92
|
const preparedTask = prepared.tasks[0]!;
|
|
92
93
|
try {
|
|
@@ -27,9 +27,12 @@ export function buildExitGatedUiContext(input: BuildExitGatedUiContextInput): Wo
|
|
|
27
27
|
: input.opts.executionMode === "non_interactive" && input.opts.ui === undefined
|
|
28
28
|
? makeHeadlessUnavailableUIContext()
|
|
29
29
|
: normalizeUIContext(input.opts.ui);
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
const
|
|
30
|
+
// Prompt-node continuation owns replay so its stage remains observable;
|
|
31
|
+
// durable response replay is for non-node UI and fresh redispatches.
|
|
32
|
+
const promptNodeReplay = input.opts.usePromptNodesForUi === true && input.opts.continuation !== undefined;
|
|
33
|
+
const durableBase = input.durableUi !== undefined && !promptNodeReplay
|
|
34
|
+
? wrapUiWithDurable(base, input.durableUi)
|
|
35
|
+
: base;
|
|
33
36
|
return {
|
|
34
37
|
async input(promptText: string): Promise<string> {
|
|
35
38
|
input.throwIfWorkflowExitSelected();
|
|
@@ -10,46 +10,38 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import type { RunSnapshot } from "../shared/store-types.js";
|
|
13
|
-
import type { WorkflowPersistencePort } from "../shared/types.js";
|
|
14
13
|
import type { DurableWorkflowBackend } from "../durable/backend.js";
|
|
15
|
-
import { persistDurableCacheEntry } from "../durable/resume-catalog.js";
|
|
16
14
|
import type { DurableWorkflowStatus } from "../durable/types.js";
|
|
15
|
+
import { recordRunTimingCheckpoint } from "../durable/run-timing.js";
|
|
16
|
+
import { effectiveRunStatus } from "../shared/returned-run-status.js";
|
|
17
17
|
|
|
18
18
|
export interface DurableTerminalFinalizeInput {
|
|
19
19
|
readonly runId: string;
|
|
20
20
|
readonly runSnapshot: RunSnapshot;
|
|
21
21
|
readonly isRoot: boolean;
|
|
22
22
|
readonly durableBackend: DurableWorkflowBackend;
|
|
23
|
-
readonly persistence?: WorkflowPersistencePort;
|
|
24
23
|
}
|
|
25
24
|
|
|
26
|
-
/**
|
|
27
|
-
* Map and persist the terminal durable status for a root workflow run when the
|
|
28
|
-
* run did not complete normally. Safe to call from a `finally` block: flush
|
|
29
|
-
* failures are logged but never rethrown so they do not mask the original
|
|
30
|
-
* failure/exit status.
|
|
31
|
-
*/
|
|
25
|
+
/** Persist the terminal durable status and surface DBOS write failures. */
|
|
32
26
|
export async function finalizeDurableTerminalStatus(input: DurableTerminalFinalizeInput): Promise<void> {
|
|
33
27
|
if (!input.isRoot) return;
|
|
34
|
-
const status = input.runSnapshot
|
|
28
|
+
const status = effectiveRunStatus(input.runSnapshot);
|
|
35
29
|
const isExitTerminal = input.runSnapshot.exited === true && status !== "running";
|
|
36
|
-
const
|
|
37
|
-
|
|
30
|
+
const isBlocked = status === "blocked"
|
|
31
|
+
&& (input.runSnapshot.endedAt !== undefined || input.runSnapshot.blockedAt !== undefined);
|
|
32
|
+
if (status !== "failed" && status !== "killed" && !isExitTerminal && !isBlocked) return;
|
|
38
33
|
|
|
39
34
|
const durableStatus = toDurableStatus(status);
|
|
40
35
|
if (durableStatus !== undefined) {
|
|
36
|
+
// Failed/blocked runs may be resumed cross-session by workflow id; persist
|
|
37
|
+
// the exact accumulated elapsed so the resumed dashboard total continues
|
|
38
|
+
// from the prior sessions instead of restarting at zero.
|
|
39
|
+
if (durableStatus === "failed" || durableStatus === "blocked") {
|
|
40
|
+
recordRunTimingCheckpoint(input.durableBackend, input.runSnapshot);
|
|
41
|
+
}
|
|
41
42
|
input.durableBackend.setWorkflowStatus(input.runId, durableStatus, undefined, input.runSnapshot.resumable);
|
|
42
43
|
}
|
|
43
|
-
|
|
44
|
-
await input.durableBackend.flush?.();
|
|
45
|
-
} catch (flushErr) {
|
|
46
|
-
const msg = flushErr instanceof Error ? flushErr.message : String(flushErr);
|
|
47
|
-
console.warn(`atomic-workflows: durable terminal status flush failed: ${msg}`);
|
|
48
|
-
}
|
|
49
|
-
if (input.persistence !== undefined && input.durableBackend.persistent) {
|
|
50
|
-
const cacheEntry = input.durableBackend.toCacheEntry(input.runId);
|
|
51
|
-
if (cacheEntry) persistDurableCacheEntry(input.persistence, cacheEntry);
|
|
52
|
-
}
|
|
44
|
+
await input.durableBackend.flush();
|
|
53
45
|
}
|
|
54
46
|
|
|
55
47
|
function toDurableStatus(status: RunSnapshot["status"]): DurableWorkflowStatus | undefined {
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import type { StageSnapshot } from "../shared/store-types.js";
|
|
2
|
-
import type { WorkflowPersistencePort } from "../shared/types.js";
|
|
3
|
-
import type { DurableWorkflowBackend } from "../durable/backend.js";
|
|
4
|
-
import { persistDurableCacheEntry } from "../durable/resume-catalog.js";
|
|
1
|
+
import type { RunSnapshot, StageSnapshot } from "../shared/store-types.js";
|
|
5
2
|
import { recordStageSessionCheckpoint, type DurableStageDeps } from "../durable/stage-primitive.js";
|
|
3
|
+
import { recordRunTimingCheckpoint } from "../durable/run-timing.js";
|
|
6
4
|
|
|
7
5
|
export interface DurableStageSessionRecorderInput {
|
|
8
6
|
readonly runId: string;
|
|
9
7
|
readonly deps: DurableStageDeps;
|
|
10
|
-
readonly backend: DurableWorkflowBackend;
|
|
11
|
-
readonly persistence?: WorkflowPersistencePort;
|
|
12
8
|
readonly onStageSession?: (runId: string, snapshot: StageSnapshot) => unknown;
|
|
9
|
+
/**
|
|
10
|
+
* Live root-run snapshot. When present, stage-session checkpoints also
|
|
11
|
+
* refresh the debounced run-level elapsed record so a durable resume can
|
|
12
|
+
* seed the total workflow duration. Omitted for child runs — run timing is
|
|
13
|
+
* only tracked for the root workflow.
|
|
14
|
+
*/
|
|
15
|
+
readonly runSnapshot?: RunSnapshot;
|
|
13
16
|
}
|
|
14
17
|
|
|
15
18
|
export function createDurableStageSessionRecorder(
|
|
@@ -17,14 +20,11 @@ export function createDurableStageSessionRecorder(
|
|
|
17
20
|
): (stageRunId: string, snapshot: StageSnapshot) => void {
|
|
18
21
|
return (stageRunId, snapshot) => {
|
|
19
22
|
if (stageRunId === input.runId) {
|
|
20
|
-
void recordStageSessionCheckpoint(input.deps, snapshot).then((
|
|
21
|
-
if (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}).catch((
|
|
25
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
26
|
-
console.warn(`atomic-workflows: durable stage session checkpoint failed: ${message}`);
|
|
27
|
-
});
|
|
23
|
+
void recordStageSessionCheckpoint(input.deps, snapshot).then(() => {
|
|
24
|
+
if (input.runSnapshot !== undefined) {
|
|
25
|
+
recordRunTimingCheckpoint(input.deps.backend, input.runSnapshot, { debounce: true });
|
|
26
|
+
}
|
|
27
|
+
}).catch(() => {});
|
|
28
28
|
}
|
|
29
29
|
void input.onStageSession?.(stageRunId, snapshot);
|
|
30
30
|
};
|