@bastani/atomic 0.9.16-alpha.2 → 0.9.16-alpha.4
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 +14 -0
- package/dist/builtin/intercom/broker/spawn.ts +22 -2
- package/dist/builtin/intercom/index.bundle.mjs +61756 -0
- package/dist/builtin/intercom/package.json +3 -3
- package/dist/builtin/mcp/index.bundle.mjs +64963 -0
- package/dist/builtin/mcp/package.json +2 -2
- package/dist/builtin/subagents/package.json +2 -2
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +85733 -0
- package/dist/builtin/web-access/index.bundle.mjs +67475 -0
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/workflows/package.json +3 -3
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +76480 -96363
- package/dist/builtin/workflows/src/index.bundle.mjs +73306 -0
- package/dist/config-package-identity.d.ts +22 -0
- package/dist/config-package-identity.d.ts.map +1 -0
- package/dist/config-package-identity.js +73 -0
- package/dist/config-package-identity.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -10
- package/dist/config.js.map +1 -1
- package/dist/core/builtin-install-layout.d.ts +22 -0
- package/dist/core/builtin-install-layout.d.ts.map +1 -0
- package/dist/core/builtin-install-layout.js +23 -0
- package/dist/core/builtin-install-layout.js.map +1 -0
- package/dist/core/builtin-packages.d.ts.map +1 -1
- package/dist/core/builtin-packages.js +8 -32
- package/dist/core/builtin-packages.js.map +1 -1
- package/npm-shrinkwrap.json +32 -32
- package/package.json +3 -3
- package/dist/builtin/intercom/closed-workflow-stage-message.ts +0 -66
- package/dist/builtin/intercom/config.ts +0 -121
- package/dist/builtin/intercom/contact-supervisor-tool.ts +0 -328
- package/dist/builtin/intercom/foreground-detach-handoff.ts +0 -164
- package/dist/builtin/intercom/group.ts +0 -85
- package/dist/builtin/intercom/inbound-idle-queue.ts +0 -82
- package/dist/builtin/intercom/inbound-message-admission.ts +0 -79
- package/dist/builtin/intercom/incoming-message-delivery.ts +0 -49
- package/dist/builtin/intercom/index-heavy.ts +0 -539
- package/dist/builtin/intercom/index.ts +0 -503
- package/dist/builtin/intercom/intercom-test-seams.ts +0 -6
- package/dist/builtin/intercom/intercom-tool.ts +0 -602
- package/dist/builtin/intercom/intercom-utils.ts +0 -427
- package/dist/builtin/intercom/late-stage-message-router.ts +0 -148
- package/dist/builtin/intercom/lazy-heavy-proxy.ts +0 -108
- package/dist/builtin/intercom/lazy-subagent-ack.ts +0 -25
- package/dist/builtin/intercom/lazy-tool-execution.ts +0 -39
- package/dist/builtin/intercom/lifecycle-lease.ts +0 -51
- package/dist/builtin/intercom/lifecycle.ts +0 -144
- package/dist/builtin/intercom/overlay.ts +0 -96
- package/dist/builtin/intercom/parent-ask-handoff.ts +0 -72
- package/dist/builtin/intercom/reconnect-backoff.ts +0 -6
- package/dist/builtin/intercom/reply-routing.ts +0 -17
- package/dist/builtin/intercom/reply-tracker.ts +0 -110
- package/dist/builtin/intercom/reply-waiter.ts +0 -115
- package/dist/builtin/intercom/result-renderers.ts +0 -77
- package/dist/builtin/intercom/runtime-group.ts +0 -13
- package/dist/builtin/intercom/session-target.ts +0 -54
- package/dist/builtin/intercom/source-ownership.ts +0 -31
- package/dist/builtin/intercom/stable-delivery-retry.ts +0 -32
- package/dist/builtin/intercom/subagent-relay.ts +0 -290
- package/dist/builtin/intercom/supervisor-authorization-registry.ts +0 -22
- package/dist/builtin/intercom/terminal-ordering-barrier.ts +0 -247
- package/dist/builtin/intercom/types.ts +0 -66
- package/dist/builtin/intercom/ui/compose.ts +0 -159
- package/dist/builtin/intercom/ui/inline-message.ts +0 -78
- package/dist/builtin/intercom/ui/session-list.ts +0 -195
- package/dist/builtin/intercom/workflow-reply-tracker.ts +0 -19
- package/dist/builtin/intercom/workflow-stage-admission.ts +0 -43
- package/dist/builtin/intercom/workflow-stage-delivery-failure.ts +0 -77
- package/dist/builtin/mcp/agent-dir.ts +0 -30
- package/dist/builtin/mcp/apps-cancellation.ts +0 -32
- package/dist/builtin/mcp/call-tool-result.ts +0 -9
- package/dist/builtin/mcp/caller-wait.ts +0 -50
- package/dist/builtin/mcp/cli.js +0 -191
- package/dist/builtin/mcp/command-registration.ts +0 -82
- package/dist/builtin/mcp/commands.ts +0 -424
- package/dist/builtin/mcp/config-write-utils.ts +0 -104
- package/dist/builtin/mcp/config.ts +0 -498
- package/dist/builtin/mcp/consent-manager.ts +0 -64
- package/dist/builtin/mcp/direct-tool-executor.ts +0 -280
- package/dist/builtin/mcp/direct-tools.ts +0 -216
- package/dist/builtin/mcp/errors.ts +0 -219
- package/dist/builtin/mcp/glimpse-ui.ts +0 -81
- package/dist/builtin/mcp/host-html-template.ts +0 -426
- package/dist/builtin/mcp/index.ts +0 -443
- package/dist/builtin/mcp/init.ts +0 -319
- package/dist/builtin/mcp/lifecycle.ts +0 -93
- package/dist/builtin/mcp/logger.ts +0 -169
- package/dist/builtin/mcp/mcp-auth-flow.ts +0 -372
- package/dist/builtin/mcp/mcp-auth.ts +0 -297
- package/dist/builtin/mcp/mcp-callback-server.ts +0 -306
- package/dist/builtin/mcp/mcp-oauth-provider.ts +0 -324
- package/dist/builtin/mcp/mcp-panel-renderer.ts +0 -243
- package/dist/builtin/mcp/mcp-panel-state.ts +0 -227
- package/dist/builtin/mcp/mcp-panel-types.ts +0 -86
- package/dist/builtin/mcp/mcp-panel.ts +0 -393
- package/dist/builtin/mcp/mcp-setup-panel.ts +0 -502
- package/dist/builtin/mcp/metadata-cache.ts +0 -201
- package/dist/builtin/mcp/metadata-hydration.ts +0 -52
- package/dist/builtin/mcp/npx-resolver.ts +0 -425
- package/dist/builtin/mcp/oauth-handler.ts +0 -60
- package/dist/builtin/mcp/onboarding-state.ts +0 -68
- package/dist/builtin/mcp/proxy-auth.ts +0 -61
- package/dist/builtin/mcp/proxy-call.ts +0 -447
- package/dist/builtin/mcp/proxy-connect.ts +0 -78
- package/dist/builtin/mcp/proxy-info-modes.ts +0 -409
- package/dist/builtin/mcp/proxy-modes.ts +0 -3
- package/dist/builtin/mcp/proxy-types.ts +0 -3
- package/dist/builtin/mcp/resource-tools.ts +0 -17
- package/dist/builtin/mcp/sampling-handler.ts +0 -273
- package/dist/builtin/mcp/server-manager.ts +0 -372
- package/dist/builtin/mcp/session-cleanup-barrier.ts +0 -43
- package/dist/builtin/mcp/startup-warmup.ts +0 -110
- package/dist/builtin/mcp/state-lease.ts +0 -12
- package/dist/builtin/mcp/state.ts +0 -41
- package/dist/builtin/mcp/tool-call-timeout.ts +0 -101
- package/dist/builtin/mcp/tool-metadata.ts +0 -152
- package/dist/builtin/mcp/tool-registrar.ts +0 -46
- package/dist/builtin/mcp/tool-result-renderer.ts +0 -66
- package/dist/builtin/mcp/types.ts +0 -445
- package/dist/builtin/mcp/ui-resource-handler.ts +0 -145
- package/dist/builtin/mcp/ui-server-http.ts +0 -81
- package/dist/builtin/mcp/ui-server.ts +0 -499
- package/dist/builtin/mcp/ui-session.ts +0 -378
- package/dist/builtin/mcp/ui-stream-types.ts +0 -89
- package/dist/builtin/mcp/utils.ts +0 -165
- package/dist/builtin/subagents/src/agents/agent-discovery.ts +0 -116
- package/dist/builtin/subagents/src/agents/agent-loaders.ts +0 -216
- package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +0 -221
- package/dist/builtin/subagents/src/agents/agent-management.ts +0 -315
- package/dist/builtin/subagents/src/agents/agent-overrides.ts +0 -450
- package/dist/builtin/subagents/src/agents/agent-paths.ts +0 -69
- package/dist/builtin/subagents/src/agents/agent-scope.ts +0 -6
- package/dist/builtin/subagents/src/agents/agent-selection.ts +0 -23
- package/dist/builtin/subagents/src/agents/agent-serializer.ts +0 -113
- package/dist/builtin/subagents/src/agents/agent-types.ts +0 -97
- package/dist/builtin/subagents/src/agents/agents.ts +0 -25
- package/dist/builtin/subagents/src/agents/frontmatter.ts +0 -74
- package/dist/builtin/subagents/src/agents/identity.ts +0 -37
- package/dist/builtin/subagents/src/agents/skills-paths.ts +0 -380
- package/dist/builtin/subagents/src/agents/skills.ts +0 -398
- package/dist/builtin/subagents/src/extension/api-lifecycle.ts +0 -64
- package/dist/builtin/subagents/src/extension/config.ts +0 -16
- package/dist/builtin/subagents/src/extension/control-notices.ts +0 -91
- package/dist/builtin/subagents/src/extension/index.ts +0 -420
- package/dist/builtin/subagents/src/extension/notification-content.ts +0 -85
- package/dist/builtin/subagents/src/extension/prompt-guidance.ts +0 -11
- package/dist/builtin/subagents/src/extension/schemas.ts +0 -208
- package/dist/builtin/subagents/src/extension/startup-maintenance.ts +0 -133
- package/dist/builtin/subagents/src/extension/tool-description.ts +0 -17
- package/dist/builtin/subagents/src/extension/tool-rendering.ts +0 -53
- package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +0 -376
- package/dist/builtin/subagents/src/intercom/result-intercom.ts +0 -246
- package/dist/builtin/subagents/src/intercom/supervisor-authorization.ts +0 -30
- package/dist/builtin/subagents/src/runs/foreground/completion-notification.ts +0 -42
- package/dist/builtin/subagents/src/runs/foreground/detached-cleanup-barrier.ts +0 -26
- package/dist/builtin/subagents/src/runs/foreground/execution-detach-reservations.ts +0 -58
- package/dist/builtin/subagents/src/runs/foreground/execution-detach-route.ts +0 -19
- package/dist/builtin/subagents/src/runs/foreground/execution-intercom-detach.ts +0 -51
- package/dist/builtin/subagents/src/runs/foreground/execution-parent-ask-handoff.ts +0 -78
- package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +0 -1
- package/dist/builtin/subagents/src/runs/foreground/execution-updates.ts +0 -26
- package/dist/builtin/subagents/src/runs/foreground/execution-utils.ts +0 -61
- package/dist/builtin/subagents/src/runs/foreground/execution.ts +0 -6
- package/dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts +0 -512
- package/dist/builtin/subagents/src/runs/foreground/notify.ts +0 -355
- package/dist/builtin/subagents/src/runs/foreground/parent-ask-output.ts +0 -48
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-burst-display.ts +0 -46
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-burst.ts +0 -403
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +0 -223
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-cwd.ts +0 -6
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +0 -139
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-live-update.ts +0 -11
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +0 -268
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +0 -327
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parent-ask-projection.ts +0 -11
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +0 -12
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +0 -350
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +0 -246
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +0 -131
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-worktree.ts +0 -102
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +0 -217
- package/dist/builtin/subagents/src/runs/inprocess/child-policy.ts +0 -27
- package/dist/builtin/subagents/src/runs/inprocess/control-registry.ts +0 -55
- package/dist/builtin/subagents/src/runs/inprocess/control-status.ts +0 -72
- package/dist/builtin/subagents/src/runs/inprocess/index.ts +0 -27
- package/dist/builtin/subagents/src/runs/inprocess/prompt-behavior.ts +0 -168
- package/dist/builtin/subagents/src/runs/inprocess/runner.ts +0 -1280
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/temp-cleanup.ts +0 -69
- package/dist/builtin/subagents/src/runs/inprocess.ts +0 -1
- package/dist/builtin/subagents/src/runs/shared/intercom-group.ts +0 -67
- package/dist/builtin/subagents/src/runs/shared/long-running-guard.ts +0 -182
- package/dist/builtin/subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +0 -391
- package/dist/builtin/subagents/src/runs/shared/model-candidate-filter.ts +0 -56
- package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +0 -88
- package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +0 -70
- package/dist/builtin/subagents/src/runs/shared/progress-trend.ts +0 -69
- package/dist/builtin/subagents/src/runs/shared/run-history.ts +0 -64
- package/dist/builtin/subagents/src/runs/shared/single-output.ts +0 -169
- package/dist/builtin/subagents/src/runs/shared/subagent-control.ts +0 -234
- package/dist/builtin/subagents/src/runs/shared/worktree-post-create.ts +0 -111
- package/dist/builtin/subagents/src/runs/shared/worktree-root.ts +0 -67
- package/dist/builtin/subagents/src/runs/shared/worktree.ts +0 -552
- package/dist/builtin/subagents/src/shared/artifacts.ts +0 -240
- package/dist/builtin/subagents/src/shared/atomic-json.ts +0 -16
- package/dist/builtin/subagents/src/shared/event-jsonl-writer.ts +0 -330
- package/dist/builtin/subagents/src/shared/exclusive-file-publication.ts +0 -44
- package/dist/builtin/subagents/src/shared/fast-mode.ts +0 -87
- package/dist/builtin/subagents/src/shared/file-coalescer.ts +0 -40
- package/dist/builtin/subagents/src/shared/fork-context.ts +0 -79
- package/dist/builtin/subagents/src/shared/formatters.ts +0 -89
- package/dist/builtin/subagents/src/shared/jsonl-writer.ts +0 -83
- package/dist/builtin/subagents/src/shared/model-info.ts +0 -101
- package/dist/builtin/subagents/src/shared/model-resolution.ts +0 -78
- package/dist/builtin/subagents/src/shared/session-identity.ts +0 -10
- package/dist/builtin/subagents/src/shared/session-tokens.ts +0 -45
- package/dist/builtin/subagents/src/shared/settings.ts +0 -118
- package/dist/builtin/subagents/src/shared/status-format.ts +0 -50
- package/dist/builtin/subagents/src/shared/types-config.ts +0 -206
- package/dist/builtin/subagents/src/shared/types-depth.ts +0 -46
- package/dist/builtin/subagents/src/shared/types-foreground-state.ts +0 -48
- package/dist/builtin/subagents/src/shared/types-output.ts +0 -63
- package/dist/builtin/subagents/src/shared/types-results.ts +0 -259
- package/dist/builtin/subagents/src/shared/types-runtime.ts +0 -115
- package/dist/builtin/subagents/src/shared/types.ts +0 -13
- package/dist/builtin/subagents/src/shared/utils.ts +0 -342
- package/dist/builtin/subagents/src/slash/bridge-settlement.ts +0 -87
- package/dist/builtin/subagents/src/slash/prompt-template-bridge.ts +0 -455
- package/dist/builtin/subagents/src/slash/slash-bridge.ts +0 -194
- package/dist/builtin/subagents/src/slash/slash-commands.ts +0 -5
- package/dist/builtin/subagents/src/slash/slash-live-state.ts +0 -259
- package/dist/builtin/subagents/src/tui/render-event-formatting.ts +0 -7
- package/dist/builtin/subagents/src/tui/render-helpers.ts +0 -90
- package/dist/builtin/subagents/src/tui/render-layout.ts +0 -157
- package/dist/builtin/subagents/src/tui/render-progress.ts +0 -89
- package/dist/builtin/subagents/src/tui/render-result-animation.ts +0 -47
- package/dist/builtin/subagents/src/tui/render-result-compact.ts +0 -248
- package/dist/builtin/subagents/src/tui/render-result.ts +0 -438
- package/dist/builtin/subagents/src/tui/render-stable-output.ts +0 -50
- package/dist/builtin/subagents/src/tui/render-status-progress.ts +0 -168
- package/dist/builtin/subagents/src/tui/render.ts +0 -23
- package/dist/builtin/web-access/activity.ts +0 -101
- package/dist/builtin/web-access/chrome-cookies.ts +0 -323
- package/dist/builtin/web-access/code-search.ts +0 -107
- package/dist/builtin/web-access/config-paths.ts +0 -11
- package/dist/builtin/web-access/content-tools.ts +0 -354
- package/dist/builtin/web-access/curator-page-assets/script-1.ts +0 -400
- package/dist/builtin/web-access/curator-page-assets/script-2.ts +0 -400
- package/dist/builtin/web-access/curator-page-assets/script-3.ts +0 -400
- package/dist/builtin/web-access/curator-page-assets/script-4.ts +0 -400
- package/dist/builtin/web-access/curator-page-assets/script-5.ts +0 -398
- package/dist/builtin/web-access/curator-page-assets/styles-1.ts +0 -394
- package/dist/builtin/web-access/curator-page-assets/styles-2.ts +0 -394
- package/dist/builtin/web-access/curator-page-assets/styles-3.ts +0 -393
- package/dist/builtin/web-access/curator-page.ts +0 -196
- package/dist/builtin/web-access/curator-server-helpers.ts +0 -115
- package/dist/builtin/web-access/curator-server.ts +0 -494
- package/dist/builtin/web-access/exa-mcp.ts +0 -218
- package/dist/builtin/web-access/exa.ts +0 -317
- package/dist/builtin/web-access/extract-frames.ts +0 -229
- package/dist/builtin/web-access/extract.ts +0 -500
- package/dist/builtin/web-access/flat-string.ts +0 -37
- package/dist/builtin/web-access/gemini-api.ts +0 -111
- package/dist/builtin/web-access/gemini-search.ts +0 -363
- package/dist/builtin/web-access/gemini-url-context.ts +0 -126
- package/dist/builtin/web-access/gemini-web-config.ts +0 -53
- package/dist/builtin/web-access/gemini-web.ts +0 -397
- package/dist/builtin/web-access/github-api.ts +0 -198
- package/dist/builtin/web-access/github-config.ts +0 -156
- package/dist/builtin/web-access/github-extract.ts +0 -487
- package/dist/builtin/web-access/index-heavy.ts +0 -164
- package/dist/builtin/web-access/index.ts +0 -401
- package/dist/builtin/web-access/lifecycle-lease.ts +0 -38
- package/dist/builtin/web-access/pdf-extract.ts +0 -192
- package/dist/builtin/web-access/perplexity.ts +0 -194
- package/dist/builtin/web-access/result-renderers.ts +0 -366
- package/dist/builtin/web-access/rsc-extract.ts +0 -338
- package/dist/builtin/web-access/storage.ts +0 -72
- package/dist/builtin/web-access/subprocess.ts +0 -102
- package/dist/builtin/web-access/summary-review.ts +0 -287
- package/dist/builtin/web-access/utils.ts +0 -44
- package/dist/builtin/web-access/video-extract.ts +0 -375
- package/dist/builtin/web-access/web-search-activity.ts +0 -102
- package/dist/builtin/web-access/web-search-browser.ts +0 -124
- package/dist/builtin/web-access/web-search-command.ts +0 -242
- package/dist/builtin/web-access/web-search-config.ts +0 -157
- package/dist/builtin/web-access/web-search-curator.ts +0 -214
- package/dist/builtin/web-access/web-search-features.ts +0 -181
- package/dist/builtin/web-access/web-search-formatting.ts +0 -117
- package/dist/builtin/web-access/web-search-return.ts +0 -143
- package/dist/builtin/web-access/web-search-summary.ts +0 -177
- package/dist/builtin/web-access/web-search-tool.ts +0 -286
- package/dist/builtin/web-access/web-search-types.ts +0 -50
- package/dist/builtin/web-access/web-search-workflow.ts +0 -10
- package/dist/builtin/web-access/youtube-extract.ts +0 -309
- package/dist/builtin/workflows/src/authoring/keep-context.ts +0 -46
- package/dist/builtin/workflows/src/authoring/typebox-defaults.d.ts +0 -41
- package/dist/builtin/workflows/src/authoring/typebox-defaults.ts +0 -180
- package/dist/builtin/workflows/src/authoring/workflow.ts +0 -206
- package/dist/builtin/workflows/src/durable/backend.ts +0 -598
- package/dist/builtin/workflows/src/durable/boundary-lifecycle.ts +0 -172
- package/dist/builtin/workflows/src/durable/boundary-topology.ts +0 -475
- package/dist/builtin/workflows/src/durable/child-invocation.ts +0 -14
- package/dist/builtin/workflows/src/durable/child-primitive.ts +0 -124
- package/dist/builtin/workflows/src/durable/completed-catalog-stage-groups.ts +0 -385
- package/dist/builtin/workflows/src/durable/completed-catalog.ts +0 -685
- package/dist/builtin/workflows/src/durable/completed-inspection.ts +0 -157
- package/dist/builtin/workflows/src/durable/completed-subtree.ts +0 -50
- package/dist/builtin/workflows/src/durable/dbos-backend.ts +0 -580
- package/dist/builtin/workflows/src/durable/dbos-embedded-postgres-root.ts +0 -681
- package/dist/builtin/workflows/src/durable/dbos-embedded-postgres.ts +0 -717
- package/dist/builtin/workflows/src/durable/dbos-envelope.ts +0 -516
- package/dist/builtin/workflows/src/durable/dbos-lifecycle.ts +0 -208
- package/dist/builtin/workflows/src/durable/dbos-local-postgres.ts +0 -166
- package/dist/builtin/workflows/src/durable/dbos-metadata.ts +0 -196
- package/dist/builtin/workflows/src/durable/dbos-process-owner.ts +0 -87
- package/dist/builtin/workflows/src/durable/dbos-prompt-reservations.ts +0 -377
- package/dist/builtin/workflows/src/durable/dbos-registration-diagnostics.ts +0 -113
- package/dist/builtin/workflows/src/durable/dbos-sdk-handle.ts +0 -182
- package/dist/builtin/workflows/src/durable/dbos-status-transition.ts +0 -67
- package/dist/builtin/workflows/src/durable/dbos-tombstone.ts +0 -27
- package/dist/builtin/workflows/src/durable/durable-hash.ts +0 -18
- package/dist/builtin/workflows/src/durable/factory.ts +0 -93
- package/dist/builtin/workflows/src/durable/format-version.ts +0 -6
- package/dist/builtin/workflows/src/durable/index.ts +0 -82
- package/dist/builtin/workflows/src/durable/local-command.ts +0 -135
- package/dist/builtin/workflows/src/durable/prompt-reservation-state.ts +0 -184
- package/dist/builtin/workflows/src/durable/prompt-reservations.ts +0 -36
- package/dist/builtin/workflows/src/durable/resume-catalog.ts +0 -20
- package/dist/builtin/workflows/src/durable/resume-eligibility.ts +0 -106
- package/dist/builtin/workflows/src/durable/resume-runtime.ts +0 -344
- package/dist/builtin/workflows/src/durable/retention-policy.ts +0 -43
- package/dist/builtin/workflows/src/durable/run-timing.ts +0 -151
- package/dist/builtin/workflows/src/durable/scoped-backend.ts +0 -308
- package/dist/builtin/workflows/src/durable/stage-primitive.ts +0 -553
- package/dist/builtin/workflows/src/durable/stage-topology-validation.ts +0 -247
- package/dist/builtin/workflows/src/durable/stage-topology.ts +0 -53
- package/dist/builtin/workflows/src/durable/targeted-inspection.ts +0 -110
- package/dist/builtin/workflows/src/durable/tool-failure-checkpoint.ts +0 -54
- package/dist/builtin/workflows/src/durable/tool-outcome.ts +0 -130
- package/dist/builtin/workflows/src/durable/tool-primitive.ts +0 -861
- package/dist/builtin/workflows/src/durable/types.ts +0 -343
- package/dist/builtin/workflows/src/durable/ui-primitive.ts +0 -263
- package/dist/builtin/workflows/src/durable/workflow-child-result.ts +0 -63
- package/dist/builtin/workflows/src/durable/workflow-heartbeat-anchor.ts +0 -153
- package/dist/builtin/workflows/src/durable/workflow-status-transition.ts +0 -31
- package/dist/builtin/workflows/src/engine/graph-inference.ts +0 -100
- package/dist/builtin/workflows/src/engine/options.ts +0 -44
- package/dist/builtin/workflows/src/engine/primitives/chain.ts +0 -34
- package/dist/builtin/workflows/src/engine/primitives/exit.ts +0 -2
- package/dist/builtin/workflows/src/engine/primitives/parallel.ts +0 -74
- package/dist/builtin/workflows/src/engine/primitives/task.ts +0 -127
- package/dist/builtin/workflows/src/engine/primitives/ui.ts +0 -54
- package/dist/builtin/workflows/src/engine/primitives/workflow.ts +0 -219
- package/dist/builtin/workflows/src/engine/replay.ts +0 -8
- package/dist/builtin/workflows/src/engine/run-budget.ts +0 -308
- package/dist/builtin/workflows/src/engine/run-durable-admission.ts +0 -50
- package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +0 -97
- package/dist/builtin/workflows/src/engine/run-durable-stage-session.ts +0 -65
- package/dist/builtin/workflows/src/engine/run-durable-topology.ts +0 -295
- package/dist/builtin/workflows/src/engine/run-returned-status.ts +0 -86
- package/dist/builtin/workflows/src/engine/run-terminal-event.ts +0 -39
- package/dist/builtin/workflows/src/engine/run-terminal-failure.ts +0 -53
- package/dist/builtin/workflows/src/engine/run-tool-admission-boundary.ts +0 -99
- package/dist/builtin/workflows/src/engine/run-tool-control-registry.ts +0 -187
- package/dist/builtin/workflows/src/engine/run-tool-execution-tracker.ts +0 -164
- package/dist/builtin/workflows/src/engine/run-tool-node-lifecycle.ts +0 -158
- package/dist/builtin/workflows/src/engine/run.ts +0 -841
- package/dist/builtin/workflows/src/engine/runtime.ts +0 -220
- package/dist/builtin/workflows/src/engine/workflow-activity.ts +0 -13
- package/dist/builtin/workflows/src/engine/workflow-tool-abort.ts +0 -92
- package/dist/builtin/workflows/src/extension/adopt-session-run-state.ts +0 -20
- package/dist/builtin/workflows/src/extension/atomic-stage-session.ts +0 -168
- package/dist/builtin/workflows/src/extension/background-ui-adapter.ts +0 -154
- package/dist/builtin/workflows/src/extension/companions.ts +0 -210
- package/dist/builtin/workflows/src/extension/completed-stage-intercom-ask.ts +0 -167
- package/dist/builtin/workflows/src/extension/config-file-loader.ts +0 -185
- package/dist/builtin/workflows/src/extension/config-loader.ts +0 -439
- package/dist/builtin/workflows/src/extension/discovery-loaders.ts +0 -112
- package/dist/builtin/workflows/src/extension/discovery.ts +0 -424
- package/dist/builtin/workflows/src/extension/dispatcher.ts +0 -273
- package/dist/builtin/workflows/src/extension/extension-factory.ts +0 -133
- package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +0 -174
- package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +0 -596
- package/dist/builtin/workflows/src/extension/hil-answer-notifications.ts +0 -367
- package/dist/builtin/workflows/src/extension/index.ts +0 -42
- package/dist/builtin/workflows/src/extension/lifecycle-notification-delivery.ts +0 -83
- package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +0 -849
- package/dist/builtin/workflows/src/extension/mcp.ts +0 -121
- package/dist/builtin/workflows/src/extension/postmortem-deps.ts +0 -70
- package/dist/builtin/workflows/src/extension/public-types.ts +0 -234
- package/dist/builtin/workflows/src/extension/render-call.ts +0 -115
- package/dist/builtin/workflows/src/extension/render-component.ts +0 -12
- package/dist/builtin/workflows/src/extension/render-result.ts +0 -558
- package/dist/builtin/workflows/src/extension/renderers.ts +0 -89
- package/dist/builtin/workflows/src/extension/runtime-active-block-claim.ts +0 -78
- package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +0 -174
- package/dist/builtin/workflows/src/extension/runtime.ts +0 -439
- package/dist/builtin/workflows/src/extension/status-writer.ts +0 -182
- package/dist/builtin/workflows/src/extension/ui-surface.ts +0 -387
- package/dist/builtin/workflows/src/extension/wiring.ts +0 -490
- package/dist/builtin/workflows/src/extension/workflow-command-completions.ts +0 -129
- package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +0 -296
- package/dist/builtin/workflows/src/extension/workflow-command-surfaces.ts +0 -114
- package/dist/builtin/workflows/src/extension/workflow-command-utils.ts +0 -175
- package/dist/builtin/workflows/src/extension/workflow-durable-resume-command.ts +0 -270
- package/dist/builtin/workflows/src/extension/workflow-heartbeat-delivery.ts +0 -241
- package/dist/builtin/workflows/src/extension/workflow-heartbeat-notice.ts +0 -115
- package/dist/builtin/workflows/src/extension/workflow-heartbeat-scheduler.ts +0 -962
- package/dist/builtin/workflows/src/extension/workflow-model-catalog.ts +0 -24
- package/dist/builtin/workflows/src/extension/workflow-module-loader.ts +0 -162
- package/dist/builtin/workflows/src/extension/workflow-policy.ts +0 -13
- package/dist/builtin/workflows/src/extension/workflow-ports.ts +0 -45
- package/dist/builtin/workflows/src/extension/workflow-prompts.ts +0 -73
- package/dist/builtin/workflows/src/extension/workflow-reload-coordinator.ts +0 -66
- package/dist/builtin/workflows/src/extension/workflow-reload-report.ts +0 -42
- package/dist/builtin/workflows/src/extension/workflow-request-abort.ts +0 -15
- package/dist/builtin/workflows/src/extension/workflow-resume-picker-rows.ts +0 -96
- package/dist/builtin/workflows/src/extension/workflow-resume-shadow.ts +0 -53
- package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +0 -562
- package/dist/builtin/workflows/src/extension/workflow-schema.ts +0 -192
- package/dist/builtin/workflows/src/extension/workflow-stage-results.ts +0 -252
- package/dist/builtin/workflows/src/extension/workflow-status-summary.ts +0 -276
- package/dist/builtin/workflows/src/extension/workflow-targets.ts +0 -210
- package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +0 -265
- package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +0 -547
- package/dist/builtin/workflows/src/extension/workflow-tool-inspection.ts +0 -153
- package/dist/builtin/workflows/src/extension/workflow-tool-registration.ts +0 -145
- package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +0 -488
- package/dist/builtin/workflows/src/extension/workflow-tool.ts +0 -188
- package/dist/builtin/workflows/src/index.ts +0 -8
- package/dist/builtin/workflows/src/intercom/intercom-bridge.ts +0 -90
- package/dist/builtin/workflows/src/intercom/intercom-routing.ts +0 -131
- package/dist/builtin/workflows/src/intercom/result-intercom.ts +0 -271
- package/dist/builtin/workflows/src/runs/background/cancellation-registry.ts +0 -135
- package/dist/builtin/workflows/src/runs/background/durable-resume-transition.ts +0 -63
- package/dist/builtin/workflows/src/runs/background/job-tracker.ts +0 -125
- package/dist/builtin/workflows/src/runs/background/quit-tool-node.ts +0 -71
- package/dist/builtin/workflows/src/runs/background/quit.ts +0 -417
- package/dist/builtin/workflows/src/runs/background/resume-acknowledgements.ts +0 -99
- package/dist/builtin/workflows/src/runs/background/run-inspect.ts +0 -126
- package/dist/builtin/workflows/src/runs/background/runner.ts +0 -185
- package/dist/builtin/workflows/src/runs/background/startup-admission.ts +0 -73
- package/dist/builtin/workflows/src/runs/background/status.ts +0 -511
- package/dist/builtin/workflows/src/runs/background/workflow-lifecycle-aggregate.ts +0 -43
- package/dist/builtin/workflows/src/runs/foreground/executor-abort.ts +0 -441
- package/dist/builtin/workflows/src/runs/foreground/executor-child-boundary.ts +0 -263
- package/dist/builtin/workflows/src/runs/foreground/executor-child-helpers.ts +0 -79
- package/dist/builtin/workflows/src/runs/foreground/executor-child-workflow.ts +0 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-continuation.ts +0 -207
- package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +0 -321
- package/dist/builtin/workflows/src/runs/foreground/executor-exit-manager.ts +0 -224
- package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +0 -403
- package/dist/builtin/workflows/src/runs/foreground/executor-inputs.ts +0 -86
- package/dist/builtin/workflows/src/runs/foreground/executor-lifecycle.ts +0 -491
- package/dist/builtin/workflows/src/runs/foreground/executor-outputs.ts +0 -156
- package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +0 -379
- package/dist/builtin/workflows/src/runs/foreground/executor-queued-user-message.ts +0 -75
- package/dist/builtin/workflows/src/runs/foreground/executor-run-finalizers.ts +0 -144
- package/dist/builtin/workflows/src/runs/foreground/executor-run.ts +0 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-scheduler.ts +0 -206
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +0 -434
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-context.ts +0 -153
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +0 -225
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +0 -473
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +0 -156
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +0 -72
- package/dist/builtin/workflows/src/runs/foreground/executor-task-context.ts +0 -2
- package/dist/builtin/workflows/src/runs/foreground/executor-task-prompts.ts +0 -226
- package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +0 -186
- package/dist/builtin/workflows/src/runs/foreground/executor.ts +0 -25
- package/dist/builtin/workflows/src/runs/foreground/postmortem-stage-chat.ts +0 -245
- package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +0 -466
- package/dist/builtin/workflows/src/runs/foreground/stage-delivery-activity.ts +0 -86
- package/dist/builtin/workflows/src/runs/foreground/stage-queued-user-messages.ts +0 -95
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-candidate.ts +0 -21
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +0 -330
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +0 -1472
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-message-admission.ts +0 -196
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-messages.ts +0 -177
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +0 -97
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-output.ts +0 -278
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-pause.ts +0 -206
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-replacement.ts +0 -41
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-send-user-message.ts +0 -134
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-session-options.ts +0 -38
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-session.ts +0 -66
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-structured-output.ts +0 -120
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +0 -211
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-unresolved-overflow.ts +0 -42
- package/dist/builtin/workflows/src/runs/foreground/stage-runner.ts +0 -22
- package/dist/builtin/workflows/src/runs/foreground/stage-session-heartbeat.ts +0 -88
- package/dist/builtin/workflows/src/runs/foreground/stage-tool-execution-buffer.ts +0 -49
- package/dist/builtin/workflows/src/runs/shared/concurrency.ts +0 -76
- package/dist/builtin/workflows/src/runs/shared/graph-inference.ts +0 -2
- package/dist/builtin/workflows/src/runs/shared/model-fallback-candidates.ts +0 -325
- package/dist/builtin/workflows/src/runs/shared/model-fallback-failures.ts +0 -19
- package/dist/builtin/workflows/src/runs/shared/model-fallback.ts +0 -2
- package/dist/builtin/workflows/src/runs/shared/prompt-callsite.ts +0 -96
- package/dist/builtin/workflows/src/runs/shared/retry.ts +0 -44
- package/dist/builtin/workflows/src/runs/shared/validate-inputs.ts +0 -111
- package/dist/builtin/workflows/src/runs/shared/worktree-cache-lifecycle.ts +0 -23
- package/dist/builtin/workflows/src/runs/shared/worktree-cwd.ts +0 -116
- package/dist/builtin/workflows/src/runs/shared/worktree-diff.ts +0 -172
- package/dist/builtin/workflows/src/runs/shared/worktree-generation.ts +0 -57
- package/dist/builtin/workflows/src/runs/shared/worktree-git-runner.ts +0 -107
- package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +0 -407
- package/dist/builtin/workflows/src/runs/shared/worktree-post-create.ts +0 -137
- package/dist/builtin/workflows/src/runs/shared/worktree-root.ts +0 -84
- package/dist/builtin/workflows/src/runs/shared/worktree-setup.ts +0 -372
- package/dist/builtin/workflows/src/runs/shared/worktree-types.ts +0 -102
- package/dist/builtin/workflows/src/runs/shared/worktree.ts +0 -21
- package/dist/builtin/workflows/src/sdk-surface.ts +0 -70
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +0 -403
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +0 -489
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +0 -327
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +0 -437
- package/dist/builtin/workflows/src/shared/budget-meter.ts +0 -34
- package/dist/builtin/workflows/src/shared/budget.d.ts +0 -67
- package/dist/builtin/workflows/src/shared/budget.ts +0 -127
- package/dist/builtin/workflows/src/shared/expanded-workflow-graph.ts +0 -434
- package/dist/builtin/workflows/src/shared/flat-string.ts +0 -33
- package/dist/builtin/workflows/src/shared/graph-store-snapshot.ts +0 -188
- package/dist/builtin/workflows/src/shared/intercom-group.ts +0 -58
- package/dist/builtin/workflows/src/shared/persistence-compaction-policy.ts +0 -72
- package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +0 -613
- package/dist/builtin/workflows/src/shared/persistence-restore.ts +0 -306
- package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +0 -303
- package/dist/builtin/workflows/src/shared/prompt-answer.ts +0 -130
- package/dist/builtin/workflows/src/shared/prompt-callsite-context.ts +0 -13
- package/dist/builtin/workflows/src/shared/render-inputs-schema.ts +0 -161
- package/dist/builtin/workflows/src/shared/resume-continuation.ts +0 -2
- package/dist/builtin/workflows/src/shared/returned-run-status.ts +0 -164
- package/dist/builtin/workflows/src/shared/run-id.ts +0 -36
- package/dist/builtin/workflows/src/shared/run-indicator-status.ts +0 -75
- package/dist/builtin/workflows/src/shared/run-visibility.ts +0 -9
- package/dist/builtin/workflows/src/shared/schema-introspection.ts +0 -111
- package/dist/builtin/workflows/src/shared/serializable.ts +0 -118
- package/dist/builtin/workflows/src/shared/session-scoped-singleton.ts +0 -98
- package/dist/builtin/workflows/src/shared/session-transcript.ts +0 -79
- package/dist/builtin/workflows/src/shared/stage-prompt.ts +0 -338
- package/dist/builtin/workflows/src/shared/stage-ui-broker.ts +0 -340
- package/dist/builtin/workflows/src/shared/store-factory.ts +0 -26
- package/dist/builtin/workflows/src/shared/store-internal.ts +0 -252
- package/dist/builtin/workflows/src/shared/store-observation.ts +0 -10
- package/dist/builtin/workflows/src/shared/store-prompt-methods.ts +0 -215
- package/dist/builtin/workflows/src/shared/store-public-types.ts +0 -282
- package/dist/builtin/workflows/src/shared/store-run-methods.ts +0 -305
- package/dist/builtin/workflows/src/shared/store-stage-methods.ts +0 -331
- package/dist/builtin/workflows/src/shared/store-tool-node-methods.ts +0 -60
- package/dist/builtin/workflows/src/shared/store-types.ts +0 -439
- package/dist/builtin/workflows/src/shared/store.ts +0 -15
- package/dist/builtin/workflows/src/shared/timing.ts +0 -71
- package/dist/builtin/workflows/src/shared/tool-payload-bounds.ts +0 -576
- package/dist/builtin/workflows/src/shared/types.ts +0 -523
- package/dist/builtin/workflows/src/shared/workflow-artifact-env.ts +0 -21
- package/dist/builtin/workflows/src/shared/workflow-artifacts.ts +0 -259
- package/dist/builtin/workflows/src/shared/workflow-authoring-types.d.ts +0 -60
- package/dist/builtin/workflows/src/shared/workflow-authoring-types.ts +0 -111
- package/dist/builtin/workflows/src/shared/workflow-failures-classifier.ts +0 -292
- package/dist/builtin/workflows/src/shared/workflow-failures-contract.ts +0 -74
- package/dist/builtin/workflows/src/shared/workflow-failures-decisions.ts +0 -458
- package/dist/builtin/workflows/src/shared/workflow-failures-signals.ts +0 -303
- package/dist/builtin/workflows/src/shared/workflow-failures.ts +0 -13
- package/dist/builtin/workflows/src/shared/workflow-heartbeat-contract.d.ts +0 -21
- package/dist/builtin/workflows/src/shared/workflow-heartbeat-contract.ts +0 -25
- package/dist/builtin/workflows/src/shared/workflow-run-ownership.ts +0 -49
- package/dist/builtin/workflows/src/tui/chat-surface-message.ts +0 -319
- package/dist/builtin/workflows/src/tui/chat-surface.ts +0 -477
- package/dist/builtin/workflows/src/tui/color-utils.ts +0 -55
- package/dist/builtin/workflows/src/tui/connectors.ts +0 -84
- package/dist/builtin/workflows/src/tui/dispatch-confirm.ts +0 -334
- package/dist/builtin/workflows/src/tui/edge.ts +0 -25
- package/dist/builtin/workflows/src/tui/graph-canvas.ts +0 -185
- package/dist/builtin/workflows/src/tui/graph-theme.ts +0 -292
- package/dist/builtin/workflows/src/tui/graph-view-constants.ts +0 -49
- package/dist/builtin/workflows/src/tui/graph-view-graph-render.ts +0 -157
- package/dist/builtin/workflows/src/tui/graph-view-input.ts +0 -427
- package/dist/builtin/workflows/src/tui/graph-view-layout.ts +0 -297
- package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +0 -294
- package/dist/builtin/workflows/src/tui/graph-view-render.ts +0 -361
- package/dist/builtin/workflows/src/tui/graph-view-state.ts +0 -547
- package/dist/builtin/workflows/src/tui/graph-view-types.ts +0 -79
- package/dist/builtin/workflows/src/tui/graph-view.ts +0 -25
- package/dist/builtin/workflows/src/tui/header.ts +0 -210
- package/dist/builtin/workflows/src/tui/host-input-form.ts +0 -64
- package/dist/builtin/workflows/src/tui/inline-form-card.ts +0 -438
- package/dist/builtin/workflows/src/tui/inline-form-editor-text.ts +0 -120
- package/dist/builtin/workflows/src/tui/inline-form-editor.ts +0 -496
- package/dist/builtin/workflows/src/tui/inline-form-overlay.ts +0 -317
- package/dist/builtin/workflows/src/tui/inline-form-store.ts +0 -90
- package/dist/builtin/workflows/src/tui/inputs-overlay.ts +0 -185
- package/dist/builtin/workflows/src/tui/inputs-picker-editing.ts +0 -147
- package/dist/builtin/workflows/src/tui/inputs-picker-input.ts +0 -357
- package/dist/builtin/workflows/src/tui/inputs-picker-render.ts +0 -312
- package/dist/builtin/workflows/src/tui/inputs-picker-types.ts +0 -161
- package/dist/builtin/workflows/src/tui/inputs-picker.ts +0 -20
- package/dist/builtin/workflows/src/tui/keybindings-adapter.ts +0 -167
- package/dist/builtin/workflows/src/tui/layout.ts +0 -150
- package/dist/builtin/workflows/src/tui/mouse-input.ts +0 -61
- package/dist/builtin/workflows/src/tui/node-card.ts +0 -357
- package/dist/builtin/workflows/src/tui/overlay-adapter.ts +0 -449
- package/dist/builtin/workflows/src/tui/overlay-terminal-modes.ts +0 -39
- package/dist/builtin/workflows/src/tui/prompt-card-input.ts +0 -215
- package/dist/builtin/workflows/src/tui/prompt-card-render.ts +0 -584
- package/dist/builtin/workflows/src/tui/prompt-card-select.ts +0 -94
- package/dist/builtin/workflows/src/tui/prompt-card-state.ts +0 -61
- package/dist/builtin/workflows/src/tui/prompt-card-text.ts +0 -122
- package/dist/builtin/workflows/src/tui/prompt-card.ts +0 -12
- package/dist/builtin/workflows/src/tui/renderers.ts +0 -14
- package/dist/builtin/workflows/src/tui/run-detail.ts +0 -438
- package/dist/builtin/workflows/src/tui/run-identity-rows.ts +0 -97
- package/dist/builtin/workflows/src/tui/session-list.ts +0 -38
- package/dist/builtin/workflows/src/tui/session-overlays.ts +0 -161
- package/dist/builtin/workflows/src/tui/session-picker.ts +0 -482
- package/dist/builtin/workflows/src/tui/stage-chat-composer-drafts.ts +0 -19
- package/dist/builtin/workflows/src/tui/stage-chat-layout.ts +0 -81
- package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +0 -462
- package/dist/builtin/workflows/src/tui/stage-chat-view-custom-ui.ts +0 -115
- package/dist/builtin/workflows/src/tui/stage-chat-view-delivery-activity.ts +0 -113
- package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +0 -219
- package/dist/builtin/workflows/src/tui/stage-chat-view-input.ts +0 -216
- package/dist/builtin/workflows/src/tui/stage-chat-view-live-events.ts +0 -65
- package/dist/builtin/workflows/src/tui/stage-chat-view-pending-tools.ts +0 -7
- package/dist/builtin/workflows/src/tui/stage-chat-view-render-helpers.ts +0 -149
- package/dist/builtin/workflows/src/tui/stage-chat-view-render-settings.ts +0 -49
- package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +0 -575
- package/dist/builtin/workflows/src/tui/stage-chat-view-status.ts +0 -35
- package/dist/builtin/workflows/src/tui/stage-chat-view-transcript.ts +0 -226
- package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +0 -156
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +0 -309
- package/dist/builtin/workflows/src/tui/status-helpers.ts +0 -85
- package/dist/builtin/workflows/src/tui/status-list.ts +0 -447
- package/dist/builtin/workflows/src/tui/store-widget-installer.ts +0 -338
- package/dist/builtin/workflows/src/tui/submit-pane.ts +0 -148
- package/dist/builtin/workflows/src/tui/switcher.ts +0 -172
- package/dist/builtin/workflows/src/tui/text-helpers.ts +0 -208
- package/dist/builtin/workflows/src/tui/tool-detail.ts +0 -367
- package/dist/builtin/workflows/src/tui/widget.ts +0 -427
- package/dist/builtin/workflows/src/tui/workflow-attach-pane-handle.ts +0 -21
- package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +0 -77
- package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +0 -477
- package/dist/builtin/workflows/src/tui/workflow-list.ts +0 -189
- package/dist/builtin/workflows/src/tui/workflow-notice-card.ts +0 -167
- package/dist/builtin/workflows/src/tui/workflow-resume-selector.ts +0 -334
- package/dist/builtin/workflows/src/tui/workflow-status.ts +0 -12
- package/dist/builtin/workflows/src/workflows/identity.ts +0 -39
- package/dist/builtin/workflows/src/workflows/registry.ts +0 -115
|
@@ -1,338 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* stage-prompt — headless answering for brokered in-stage prompts.
|
|
3
|
-
*
|
|
4
|
-
* A workflow stage's agent can call the `ask_user_question` tool, and the
|
|
5
|
-
* executor raises a deterministic readiness gate after such a turn. Both
|
|
6
|
-
* render their UI through {@link StageUiBroker.requestCustomUi} and resolve the
|
|
7
|
-
* tool's `ctx.ui.custom<QuestionnaireResult>()` promise with a
|
|
8
|
-
* `QuestionnaireResult`-shaped value. That value is normally produced by the
|
|
9
|
-
* interactive TUI component.
|
|
10
|
-
*
|
|
11
|
-
* For programmatic / non-interactive control (e.g. an orchestrating agent
|
|
12
|
-
* answering via `workflow send`), we need to synthesize the same value WITHOUT
|
|
13
|
-
* the TUI. This module:
|
|
14
|
-
* 1. Parses the `ask_user_question` tool args into a serializable
|
|
15
|
-
* {@link StageInputRequest} descriptor (surfaced on the stage snapshot so
|
|
16
|
-
* `workflow send` / status can show the questions + options).
|
|
17
|
-
* 2. Produces a {@link StagePromptAdapter} whose `buildResult` maps a simple
|
|
18
|
-
* answer (free text, an option label, an option index, or a pre-built raw
|
|
19
|
-
* result) into the `QuestionnaireResult` the tool expects.
|
|
20
|
-
*
|
|
21
|
-
* cross-ref:
|
|
22
|
-
* - packages/coding-agent/src/core/tools/ask-user-question/tool/types.ts
|
|
23
|
-
* QuestionnaireResult / QuestionAnswer (the result shape mirrored here)
|
|
24
|
-
* - src/shared/stage-ui-broker.ts provideStagePrompt / answerStagePrompt
|
|
25
|
-
* - src/runs/foreground/executor.ts ask_user_question watcher + readiness gate
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
|
-
import type { StageInputKind, StageInputQuestion, StageInputRequest } from "./store-types.js";
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* A simple, transport-friendly answer to a brokered stage prompt. Exactly one
|
|
32
|
-
* of the fields is typically populated:
|
|
33
|
-
* - `raw`: a pre-built `QuestionnaireResult`-shaped value, forwarded verbatim.
|
|
34
|
-
* - `optionLabels`: explicit option label(s) (one for single-select, many for
|
|
35
|
-
* multi-select).
|
|
36
|
-
* - `text`: free text — matched against option labels / 1-based indices, and
|
|
37
|
-
* otherwise treated as a typed ("custom") answer.
|
|
38
|
-
*/
|
|
39
|
-
export interface StageInputAnswer {
|
|
40
|
-
readonly text?: string;
|
|
41
|
-
readonly optionLabels?: readonly string[];
|
|
42
|
-
readonly raw?: unknown;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/** Result shape mirrored from the coding-agent ask_user_question tool. */
|
|
46
|
-
interface BuiltAnswer {
|
|
47
|
-
questionIndex: number;
|
|
48
|
-
question: string;
|
|
49
|
-
kind: "option" | "custom" | "chat" | "multi";
|
|
50
|
-
answer: string | null;
|
|
51
|
-
selected?: string[];
|
|
52
|
-
}
|
|
53
|
-
interface BuiltResult {
|
|
54
|
-
answers: BuiltAnswer[];
|
|
55
|
-
cancelled: boolean;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Couples the serializable {@link StageInputRequest} descriptor with a
|
|
60
|
-
* `buildResult` that turns a {@link StageInputAnswer} into the value used to
|
|
61
|
-
* resolve the brokered `ctx.ui.custom` promise.
|
|
62
|
-
*/
|
|
63
|
-
export interface StagePromptAdapter {
|
|
64
|
-
readonly prompt: StageInputRequest;
|
|
65
|
-
buildResult(answer: StageInputAnswer): unknown;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function normalizeLabel(value: string): string {
|
|
69
|
-
return value.trim().toLowerCase();
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
function asString(value: unknown): string | undefined {
|
|
73
|
-
return typeof value === "string" ? value : undefined;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function readStringArray(value: unknown): readonly string[] | undefined {
|
|
77
|
-
if (!Array.isArray(value)) return undefined;
|
|
78
|
-
const out = value.filter((item): item is string => typeof item === "string" && item.trim().length > 0);
|
|
79
|
-
return out.length > 0 ? out : undefined;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function readFirstString(...values: readonly unknown[]): string | undefined {
|
|
83
|
-
for (const value of values) {
|
|
84
|
-
if (typeof value === "string" && value.length > 0) return value;
|
|
85
|
-
}
|
|
86
|
-
return undefined;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/** True when the answer carries a value the adapter can resolve. */
|
|
90
|
-
export function hasStageInputAnswerContent(answer: StageInputAnswer): boolean {
|
|
91
|
-
return answer.text !== undefined || answer.optionLabels !== undefined || answer.raw !== undefined;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Coerce a loosely-typed answer payload — as delivered by `workflow send`
|
|
96
|
-
* (`text` / `response` / `message`) — into a normalized {@link StageInputAnswer}
|
|
97
|
-
* the {@link StagePromptAdapter} can resolve against a question's options.
|
|
98
|
-
*
|
|
99
|
-
* Recognized inputs:
|
|
100
|
-
* - a plain string (option label, 1-based index, or free text);
|
|
101
|
-
* - a JSON-encoded string of any structured shape below;
|
|
102
|
-
* - a fully-formed `QuestionnaireResult` (every answer carries a numeric
|
|
103
|
-
* `questionIndex`), forwarded raw;
|
|
104
|
-
* - the orchestrator-friendly `{ answers: [{ answer | label | selected }] }`
|
|
105
|
-
* or `{ questions: [{ answer | label | selected }] }`;
|
|
106
|
-
* - a flat `{ answer | response | label | selected | optionLabels }`;
|
|
107
|
-
* - a string array (multi-select labels).
|
|
108
|
-
*
|
|
109
|
-
* Without this, a structured `response` was forwarded verbatim as the brokered
|
|
110
|
-
* result, violating the `QuestionnaireResult` contract and leaving the readiness
|
|
111
|
-
* gate (and any brokered prompt) unable to resolve to a matching option.
|
|
112
|
-
*/
|
|
113
|
-
export function coerceStageInputAnswer(value: unknown): StageInputAnswer {
|
|
114
|
-
if (typeof value === "string") {
|
|
115
|
-
const trimmed = value.trim();
|
|
116
|
-
if (trimmed.startsWith("{") || trimmed.startsWith("[")) {
|
|
117
|
-
try {
|
|
118
|
-
const parsed: unknown = JSON.parse(trimmed);
|
|
119
|
-
if (parsed !== null && typeof parsed === "object") {
|
|
120
|
-
const coerced = coerceStageInputAnswer(parsed);
|
|
121
|
-
if (hasStageInputAnswerContent(coerced)) return coerced;
|
|
122
|
-
}
|
|
123
|
-
} catch {
|
|
124
|
-
// Not JSON — fall through and treat the string as a literal answer.
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return { text: value };
|
|
128
|
-
}
|
|
129
|
-
if (Array.isArray(value)) {
|
|
130
|
-
const labels = readStringArray(value);
|
|
131
|
-
return labels !== undefined ? { optionLabels: labels } : {};
|
|
132
|
-
}
|
|
133
|
-
if (value === null || typeof value !== "object") return {};
|
|
134
|
-
|
|
135
|
-
const record = value as Record<string, unknown>;
|
|
136
|
-
|
|
137
|
-
// Forward verbatim ONLY a fully-formed QuestionnaireResult — every answer
|
|
138
|
-
// entry must carry a numeric `questionIndex`. A loosely-shaped `answers[]`
|
|
139
|
-
// (e.g. `{ answers: [{ question, answer }] }`) is NOT genuine: forwarding it
|
|
140
|
-
// raw makes the tool envelope match no question index and reply
|
|
141
|
-
// "User declined to answer questions", stranding the prompt.
|
|
142
|
-
const answersArray = Array.isArray(record.answers) ? (record.answers as readonly unknown[]) : undefined;
|
|
143
|
-
if (
|
|
144
|
-
answersArray !== undefined &&
|
|
145
|
-
answersArray.length > 0 &&
|
|
146
|
-
answersArray.every(
|
|
147
|
-
(entry) =>
|
|
148
|
-
entry !== null &&
|
|
149
|
-
typeof entry === "object" &&
|
|
150
|
-
typeof (entry as Record<string, unknown>).questionIndex === "number",
|
|
151
|
-
)
|
|
152
|
-
) {
|
|
153
|
-
return { raw: value };
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// Otherwise locate the answer-bearing record — the first `answers[]` or
|
|
157
|
-
// `questions[]` entry when present, else the object itself — and extract a
|
|
158
|
-
// value the adapter can resolve against the question's options (so it assigns
|
|
159
|
-
// the correct questionIndex), rather than forwarding an unusable result.
|
|
160
|
-
const source = answerBearingRecord(record);
|
|
161
|
-
const labels = readStringArray(source.optionLabels) ?? readStringArray(source.selected);
|
|
162
|
-
if (labels !== undefined) return { optionLabels: labels };
|
|
163
|
-
|
|
164
|
-
const text = readFirstString(source.answer, source.response, source.label, source.text);
|
|
165
|
-
if (text !== undefined) return { text };
|
|
166
|
-
|
|
167
|
-
// Nothing resolvable — decline rather than forward an unusable result.
|
|
168
|
-
return {};
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
function firstObjectOf(value: unknown): Record<string, unknown> | undefined {
|
|
172
|
-
const first = Array.isArray(value) ? value[0] : undefined;
|
|
173
|
-
return first !== null && typeof first === "object" ? (first as Record<string, unknown>) : undefined;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
function answerBearingRecord(record: Record<string, unknown>): Record<string, unknown> {
|
|
177
|
-
return firstObjectOf(record.answers) ?? firstObjectOf(record.questions) ?? record;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
function parseOption(value: unknown): StageInputQuestion["options"][number] | undefined {
|
|
181
|
-
if (value === null || typeof value !== "object") return undefined;
|
|
182
|
-
const record = value as Record<string, unknown>;
|
|
183
|
-
const label = asString(record.label);
|
|
184
|
-
if (label === undefined) return undefined;
|
|
185
|
-
const description = asString(record.description);
|
|
186
|
-
return description !== undefined ? { label, description } : { label };
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
function parseQuestion(value: unknown): StageInputQuestion | undefined {
|
|
190
|
-
if (value === null || typeof value !== "object") return undefined;
|
|
191
|
-
const record = value as Record<string, unknown>;
|
|
192
|
-
const question = asString(record.question);
|
|
193
|
-
if (question === undefined) return undefined;
|
|
194
|
-
const rawOptions = Array.isArray(record.options) ? record.options : [];
|
|
195
|
-
const options = rawOptions
|
|
196
|
-
.map(parseOption)
|
|
197
|
-
.filter((option): option is StageInputQuestion["options"][number] => option !== undefined);
|
|
198
|
-
const header = asString(record.header);
|
|
199
|
-
const multiSelect = record.multiSelect === true;
|
|
200
|
-
return {
|
|
201
|
-
question,
|
|
202
|
-
...(header !== undefined ? { header } : {}),
|
|
203
|
-
...(multiSelect ? { multiSelect: true } : {}),
|
|
204
|
-
options,
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* Parse `ask_user_question` tool args (`{ questions: [...] }`) into the
|
|
210
|
-
* serializable question descriptors. Returns `undefined` when no well-formed
|
|
211
|
-
* question is present.
|
|
212
|
-
*/
|
|
213
|
-
export function parseAskUserQuestionArgs(args: unknown): readonly StageInputQuestion[] | undefined {
|
|
214
|
-
if (args === null || typeof args !== "object") return undefined;
|
|
215
|
-
const rawQuestions = (args as Record<string, unknown>).questions;
|
|
216
|
-
if (!Array.isArray(rawQuestions)) return undefined;
|
|
217
|
-
const questions = rawQuestions
|
|
218
|
-
.map(parseQuestion)
|
|
219
|
-
.filter((question): question is StageInputQuestion => question !== undefined);
|
|
220
|
-
return questions.length > 0 ? questions : undefined;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* Sentinel label for the chat escape hatch. Matches the `ROW_INTENT_META.chat.label`
|
|
225
|
-
* in the coding-agent package. Duplicated here as a literal to avoid a cross-package
|
|
226
|
-
* import; the reserved-label guard in validate-questionnaire already prevents an
|
|
227
|
-
* authored option from using this label.
|
|
228
|
-
*/
|
|
229
|
-
const CHAT_ABOUT_THIS_LABEL = "Chat about this";
|
|
230
|
-
const CHAT_ABOUT_THIS_NORMALIZED = normalizeLabel(CHAT_ABOUT_THIS_LABEL);
|
|
231
|
-
|
|
232
|
-
function isChatSentinel(value: string): boolean {
|
|
233
|
-
return normalizeLabel(value) === CHAT_ABOUT_THIS_NORMALIZED;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
function answerChat(question: StageInputQuestion): BuiltAnswer {
|
|
237
|
-
return {
|
|
238
|
-
questionIndex: 0,
|
|
239
|
-
question: question.question,
|
|
240
|
-
kind: "chat",
|
|
241
|
-
answer: CHAT_ABOUT_THIS_LABEL,
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
/**
|
|
246
|
-
* Resolve a desired answer string against a single-select question's options.
|
|
247
|
-
* Checks the chat sentinel first (case/whitespace insensitive), then matches a
|
|
248
|
-
* case-insensitive option label, then a 1-based option index, then falls back to
|
|
249
|
-
* a typed ("custom") answer.
|
|
250
|
-
*/
|
|
251
|
-
function answerSingle(question: StageInputQuestion, desired: string): BuiltAnswer {
|
|
252
|
-
const normalized = normalizeLabel(desired);
|
|
253
|
-
// Chat sentinel takes priority over authored options — the label is reserved so
|
|
254
|
-
// no option can legitimately match it.
|
|
255
|
-
if (isChatSentinel(desired)) {
|
|
256
|
-
return answerChat(question);
|
|
257
|
-
}
|
|
258
|
-
const byLabel = question.options.find((option) => normalizeLabel(option.label) === normalized);
|
|
259
|
-
if (byLabel) {
|
|
260
|
-
return { questionIndex: 0, question: question.question, kind: "option", answer: byLabel.label };
|
|
261
|
-
}
|
|
262
|
-
const asIndex = Number.parseInt(desired.trim(), 10);
|
|
263
|
-
if (
|
|
264
|
-
Number.isInteger(asIndex) &&
|
|
265
|
-
asIndex >= 1 &&
|
|
266
|
-
asIndex <= question.options.length &&
|
|
267
|
-
String(asIndex) === desired.trim()
|
|
268
|
-
) {
|
|
269
|
-
const option = question.options[asIndex - 1]!;
|
|
270
|
-
return { questionIndex: 0, question: question.question, kind: "option", answer: option.label };
|
|
271
|
-
}
|
|
272
|
-
return { questionIndex: 0, question: question.question, kind: "custom", answer: desired };
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
function answerMulti(question: StageInputQuestion, candidates: readonly string[]): BuiltAnswer {
|
|
276
|
-
const selected: string[] = [];
|
|
277
|
-
for (const candidate of candidates) {
|
|
278
|
-
const normalized = normalizeLabel(candidate);
|
|
279
|
-
const byLabel = question.options.find((option) => normalizeLabel(option.label) === normalized);
|
|
280
|
-
if (byLabel) {
|
|
281
|
-
if (!selected.includes(byLabel.label)) selected.push(byLabel.label);
|
|
282
|
-
continue;
|
|
283
|
-
}
|
|
284
|
-
const asIndex = Number.parseInt(candidate.trim(), 10);
|
|
285
|
-
if (Number.isInteger(asIndex) && asIndex >= 1 && asIndex <= question.options.length) {
|
|
286
|
-
const option = question.options[asIndex - 1]!;
|
|
287
|
-
if (!selected.includes(option.label)) selected.push(option.label);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
return { questionIndex: 0, question: question.question, kind: "multi", answer: null, selected };
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
function buildResult(questions: readonly StageInputQuestion[], answer: StageInputAnswer): unknown {
|
|
294
|
-
if (answer.raw !== undefined) return answer.raw;
|
|
295
|
-
const question = questions[0];
|
|
296
|
-
if (question === undefined) return { answers: [], cancelled: true } satisfies BuiltResult;
|
|
297
|
-
|
|
298
|
-
const multi = question.multiSelect === true;
|
|
299
|
-
if (multi) {
|
|
300
|
-
const candidates =
|
|
301
|
-
answer.optionLabels !== undefined
|
|
302
|
-
? answer.optionLabels
|
|
303
|
-
: (answer.text ?? "")
|
|
304
|
-
.split(",")
|
|
305
|
-
.map((part) => part.trim())
|
|
306
|
-
.filter((part) => part.length > 0);
|
|
307
|
-
if (candidates.some(isChatSentinel)) {
|
|
308
|
-
return { answers: [answerChat(question)], cancelled: false } satisfies BuiltResult;
|
|
309
|
-
}
|
|
310
|
-
return { answers: [answerMulti(question, candidates)], cancelled: false } satisfies BuiltResult;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
const desired = answer.optionLabels?.[0] ?? answer.text;
|
|
314
|
-
if (desired === undefined || desired.length === 0) {
|
|
315
|
-
return { answers: [], cancelled: true } satisfies BuiltResult;
|
|
316
|
-
}
|
|
317
|
-
return { answers: [answerSingle(question, desired)], cancelled: false } satisfies BuiltResult;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
/**
|
|
321
|
-
* Build a {@link StagePromptAdapter} from `ask_user_question` tool args. Returns
|
|
322
|
-
* `undefined` when the args contain no parseable question (the prompt then
|
|
323
|
-
* stays TUI-only).
|
|
324
|
-
*/
|
|
325
|
-
export function buildStagePromptAdapter(
|
|
326
|
-
id: string,
|
|
327
|
-
kind: StageInputKind,
|
|
328
|
-
args: unknown,
|
|
329
|
-
createdAt: number,
|
|
330
|
-
): StagePromptAdapter | undefined {
|
|
331
|
-
const questions = parseAskUserQuestionArgs(args);
|
|
332
|
-
if (questions === undefined) return undefined;
|
|
333
|
-
const prompt: StageInputRequest = { id, kind, questions, createdAt };
|
|
334
|
-
return {
|
|
335
|
-
prompt,
|
|
336
|
-
buildResult: (answer) => buildResult(questions, answer),
|
|
337
|
-
};
|
|
338
|
-
}
|
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import type { Component, Focusable, TUI } from "@earendil-works/pi-tui";
|
|
3
|
-
import type {
|
|
4
|
-
PiCustomComponent,
|
|
5
|
-
PiCustomOverlayFactory,
|
|
6
|
-
PiCustomOverlayOptions,
|
|
7
|
-
PiKeybindings,
|
|
8
|
-
PiTheme,
|
|
9
|
-
} from "../extension/wiring.js";
|
|
10
|
-
import { createSessionScopedSingleton } from "./session-scoped-singleton.js";
|
|
11
|
-
import type { StageInputAnswer, StagePromptAdapter } from "./stage-prompt.js";
|
|
12
|
-
import type { StagePromptAnswerSource, Store } from "./store.js";
|
|
13
|
-
import { store as defaultStore } from "./store.js";
|
|
14
|
-
import type { StageInputRequest } from "./store-types.js";
|
|
15
|
-
|
|
16
|
-
export interface StageCustomUiRequest<T = unknown> {
|
|
17
|
-
readonly id: string;
|
|
18
|
-
readonly runId: string;
|
|
19
|
-
readonly stageId: string;
|
|
20
|
-
readonly factory: PiCustomOverlayFactory<T>;
|
|
21
|
-
readonly options?: PiCustomOverlayOptions;
|
|
22
|
-
readonly createdAt: number;
|
|
23
|
-
resolve(value: T): void;
|
|
24
|
-
reject(reason: unknown): void;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export interface StageCustomUiHost {
|
|
28
|
-
showCustomUi(request: StageCustomUiRequest): void;
|
|
29
|
-
hideCustomUi?(request: StageCustomUiRequest, reason: unknown): void;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface StagePromptResolvedEvent {
|
|
33
|
-
readonly runId: string;
|
|
34
|
-
readonly stageId: string;
|
|
35
|
-
readonly prompt: StageInputRequest;
|
|
36
|
-
readonly answer: unknown;
|
|
37
|
-
readonly answeredAt: number;
|
|
38
|
-
readonly answerSource?: StagePromptAnswerSource;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export interface AnswerStagePromptOptions {
|
|
42
|
-
/** Identifies who answered the prompt so notification code can avoid echoing workflow-tool answers. */
|
|
43
|
-
readonly answerSource?: StagePromptAnswerSource;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export type StagePromptResolvedListener = (event: StagePromptResolvedEvent) => void;
|
|
47
|
-
|
|
48
|
-
function key(runId: string, stageId: string): string {
|
|
49
|
-
return `${runId}\0${stageId}`;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function nextRequestId(): string {
|
|
53
|
-
return `stage-ui-${randomUUID()}`;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export class StageUiBroker {
|
|
57
|
-
private readonly store: Store;
|
|
58
|
-
private readonly pending = new Map<string, StageCustomUiRequest>();
|
|
59
|
-
private readonly hosts = new Map<string, StageCustomUiHost>();
|
|
60
|
-
// Headless-answer adapters keyed by (runId, stageId). Populated by the
|
|
61
|
-
// executor's ask_user_question watcher and the readiness gate so a brokered
|
|
62
|
-
// custom-UI prompt can be answered programmatically (e.g. via `workflow
|
|
63
|
-
// send`) without a TUI host rendering the interactive component.
|
|
64
|
-
private readonly adapters = new Map<string, StagePromptAdapter>();
|
|
65
|
-
private readonly resolvedPromptIds = new Map<string, string>();
|
|
66
|
-
private readonly resolvedListeners = new Set<StagePromptResolvedListener>();
|
|
67
|
-
|
|
68
|
-
constructor(store: Store = defaultStore) {
|
|
69
|
-
this.store = store;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Register the structured descriptor + headless result builder for the
|
|
74
|
-
* prompt a stage is about to raise (or has just raised) via
|
|
75
|
-
* `requestCustomUi`. Surfaces the descriptor on the stage snapshot so
|
|
76
|
-
* `workflow send` / status can see and answer it. Safe to call before or
|
|
77
|
-
* after the matching `requestCustomUi`; the (runId, stageId) key joins them.
|
|
78
|
-
*/
|
|
79
|
-
provideStagePrompt(runId: string, stageId: string, adapter: StagePromptAdapter): void {
|
|
80
|
-
const hostKey = key(runId, stageId);
|
|
81
|
-
this.adapters.set(hostKey, adapter);
|
|
82
|
-
// A newly provided adapter represents a fresh prompt instance, even when
|
|
83
|
-
// the caller reuses the same prompt id (readiness gates historically did).
|
|
84
|
-
// Clear the resolved marker unconditionally so a raced answer for this new
|
|
85
|
-
// request cannot be mistaken for a duplicate answer to the prior instance.
|
|
86
|
-
this.resolvedPromptIds.delete(hostKey);
|
|
87
|
-
this.store.recordStageInputRequest(runId, stageId, adapter.prompt);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/** Drop a stage's headless-answer adapter and clear its snapshot descriptor. */
|
|
91
|
-
clearStagePrompt(runId: string, stageId: string): void {
|
|
92
|
-
if (this.adapters.delete(key(runId, stageId))) {
|
|
93
|
-
this.store.clearStageInputRequest(runId, stageId);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Settle and hide any brokered prompt that belongs to a stage whose workflow
|
|
99
|
-
* lifecycle has ended. Detaching a host intentionally does not cancel human
|
|
100
|
-
* input, but terminal stage/run cleanup must not leave stale HIL UI mounted.
|
|
101
|
-
*/
|
|
102
|
-
cancelStagePrompt(runId: string, stageId: string, reason: unknown): void {
|
|
103
|
-
const hostKey = key(runId, stageId);
|
|
104
|
-
const request = this.pending.get(hostKey);
|
|
105
|
-
if (request) {
|
|
106
|
-
this.reject(request, reason);
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
if (this.adapters.delete(hostKey)) {
|
|
110
|
-
this.store.clearStageInputRequest(runId, stageId);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Return the structured descriptor for a stage's brokered prompt when BOTH a
|
|
116
|
-
* headless-answer adapter and a live pending request exist for it — i.e. when
|
|
117
|
-
* `answerStagePrompt` can actually resolve something right now.
|
|
118
|
-
*/
|
|
119
|
-
peekStagePrompt(runId: string, stageId: string): StageInputRequest | undefined {
|
|
120
|
-
const hostKey = key(runId, stageId);
|
|
121
|
-
const adapter = this.adapters.get(hostKey);
|
|
122
|
-
if (adapter && this.pending.has(hostKey)) return adapter.prompt;
|
|
123
|
-
return undefined;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Headlessly answer a stage's pending brokered prompt. Resolves the awaiting
|
|
128
|
-
* `ctx.ui.custom` promise with the adapter-built result. Returns `false` when
|
|
129
|
-
* there is no adapter+request pair for the stage.
|
|
130
|
-
*/
|
|
131
|
-
answerStagePrompt(
|
|
132
|
-
runId: string,
|
|
133
|
-
stageId: string,
|
|
134
|
-
answer: StageInputAnswer,
|
|
135
|
-
options: AnswerStagePromptOptions = {},
|
|
136
|
-
): boolean {
|
|
137
|
-
const hostKey = key(runId, stageId);
|
|
138
|
-
const adapter = this.adapters.get(hostKey);
|
|
139
|
-
const request = this.pending.get(hostKey);
|
|
140
|
-
if (!adapter || !request) return false;
|
|
141
|
-
this.resolve(request, adapter.buildResult(answer), options);
|
|
142
|
-
return true;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
wasStagePromptResolved(runId: string, stageId: string, promptId: string): boolean {
|
|
146
|
-
return this.resolvedPromptIds.get(key(runId, stageId)) === promptId;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
onStagePromptResolved(listener: StagePromptResolvedListener): () => void {
|
|
150
|
-
this.resolvedListeners.add(listener);
|
|
151
|
-
return () => {
|
|
152
|
-
this.resolvedListeners.delete(listener);
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
private notifyStagePromptAnswered(event: StagePromptResolvedEvent): void {
|
|
157
|
-
for (const listener of this.resolvedListeners) {
|
|
158
|
-
try {
|
|
159
|
-
listener(event);
|
|
160
|
-
} catch {
|
|
161
|
-
// Listener failures must not prevent the prompt from resolving.
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
private hideHost(host: StageCustomUiHost | undefined, request: StageCustomUiRequest, reason: unknown): void {
|
|
167
|
-
try {
|
|
168
|
-
host?.hideCustomUi?.(request, reason);
|
|
169
|
-
} catch {
|
|
170
|
-
// Host teardown is best-effort; request settlement must still continue.
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
private showHostOrReject(host: StageCustomUiHost, request: StageCustomUiRequest): void {
|
|
175
|
-
try {
|
|
176
|
-
host.showCustomUi(request);
|
|
177
|
-
} catch (error) {
|
|
178
|
-
this.reject(request, error);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
registerHost(runId: string, stageId: string, host: StageCustomUiHost): () => void {
|
|
183
|
-
const hostKey = key(runId, stageId);
|
|
184
|
-
const previousHost = this.hosts.get(hostKey);
|
|
185
|
-
const request = this.pending.get(hostKey);
|
|
186
|
-
if (previousHost && previousHost !== host && request) {
|
|
187
|
-
this.hideHost(previousHost, request, new Error(`atomic-workflows: stage ${stageId} custom UI host replaced`));
|
|
188
|
-
}
|
|
189
|
-
this.hosts.set(hostKey, host);
|
|
190
|
-
const activeRequest = this.pending.get(hostKey);
|
|
191
|
-
if (activeRequest) this.showHostOrReject(host, activeRequest);
|
|
192
|
-
return () => {
|
|
193
|
-
if (this.hosts.get(hostKey) !== host) return;
|
|
194
|
-
this.hosts.delete(hostKey);
|
|
195
|
-
// Unregistering a host means it stops *displaying* the request — not that
|
|
196
|
-
// the request is cancelled. A stage-scoped human-input request (e.g.
|
|
197
|
-
// ask_user_question / readiness gate) outlives any one attached chat:
|
|
198
|
-
// detaching leaves it pending (the stage stays awaiting_input) and a
|
|
199
|
-
// future host re-displays it. The request is settled only by the user
|
|
200
|
-
// answering (resolve) or the run aborting (its AbortSignal -> reject).
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
requestCustomUi<T>(
|
|
205
|
-
runId: string,
|
|
206
|
-
stageId: string,
|
|
207
|
-
factory: PiCustomOverlayFactory<T>,
|
|
208
|
-
options?: PiCustomOverlayOptions,
|
|
209
|
-
signal?: AbortSignal,
|
|
210
|
-
): Promise<T> {
|
|
211
|
-
if (signal?.aborted) {
|
|
212
|
-
return Promise.reject(signal.reason ?? new Error("atomic-workflows: stage UI request aborted"));
|
|
213
|
-
}
|
|
214
|
-
const hostKey = key(runId, stageId);
|
|
215
|
-
const existing = this.pending.get(hostKey);
|
|
216
|
-
if (existing) {
|
|
217
|
-
return Promise.reject(new Error(`atomic-workflows: stage ${stageId} already has a pending custom UI request`));
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
let request!: StageCustomUiRequest<T>;
|
|
221
|
-
const promise = new Promise<T>((resolve, reject) => {
|
|
222
|
-
request = {
|
|
223
|
-
id: nextRequestId(),
|
|
224
|
-
runId,
|
|
225
|
-
stageId,
|
|
226
|
-
factory,
|
|
227
|
-
...(options !== undefined ? { options } : {}),
|
|
228
|
-
createdAt: Date.now(),
|
|
229
|
-
resolve,
|
|
230
|
-
reject,
|
|
231
|
-
};
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
const onAbort = (): void => {
|
|
235
|
-
this.reject(request, signal?.reason ?? new Error("atomic-workflows: stage UI request aborted"));
|
|
236
|
-
};
|
|
237
|
-
signal?.addEventListener("abort", onAbort, { once: true });
|
|
238
|
-
|
|
239
|
-
this.pending.set(hostKey, request);
|
|
240
|
-
this.store.recordStageAwaitingInput(runId, stageId, true, request.createdAt);
|
|
241
|
-
const host = this.hosts.get(hostKey);
|
|
242
|
-
if (host) this.showHostOrReject(host, request);
|
|
243
|
-
// Re-check after listener registration and host display; AbortSignal does
|
|
244
|
-
// not replay an already-fired abort event for listeners added later.
|
|
245
|
-
if (signal?.aborted) onAbort();
|
|
246
|
-
|
|
247
|
-
return promise.finally(() => {
|
|
248
|
-
signal?.removeEventListener("abort", onAbort);
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
resolve<T>(request: StageCustomUiRequest<T>, value: T, options: AnswerStagePromptOptions = {}): void {
|
|
253
|
-
const hostKey = key(request.runId, request.stageId);
|
|
254
|
-
if (this.pending.get(hostKey)?.id !== request.id) return;
|
|
255
|
-
const prompt = this.adapters.get(hostKey)?.prompt;
|
|
256
|
-
this.pending.delete(hostKey);
|
|
257
|
-
this.adapters.delete(hostKey);
|
|
258
|
-
if (prompt !== undefined) this.resolvedPromptIds.set(hostKey, prompt.id);
|
|
259
|
-
this.store.clearStageInputRequest(request.runId, request.stageId);
|
|
260
|
-
this.store.recordStageAwaitingInput(request.runId, request.stageId, false);
|
|
261
|
-
this.hideHost(this.hosts.get(hostKey), request, undefined);
|
|
262
|
-
if (prompt !== undefined) {
|
|
263
|
-
this.notifyStagePromptAnswered({
|
|
264
|
-
runId: request.runId,
|
|
265
|
-
stageId: request.stageId,
|
|
266
|
-
prompt,
|
|
267
|
-
answer: value,
|
|
268
|
-
answeredAt: Date.now(),
|
|
269
|
-
...(options.answerSource !== undefined ? { answerSource: options.answerSource } : {}),
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
|
-
request.resolve(value);
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
reject(request: StageCustomUiRequest, reason: unknown): void {
|
|
276
|
-
const hostKey = key(request.runId, request.stageId);
|
|
277
|
-
if (this.pending.get(hostKey)?.id !== request.id) return;
|
|
278
|
-
this.pending.delete(hostKey);
|
|
279
|
-
this.adapters.delete(hostKey);
|
|
280
|
-
this.resolvedPromptIds.delete(hostKey);
|
|
281
|
-
this.store.clearStageInputRequest(request.runId, request.stageId);
|
|
282
|
-
this.store.recordStageAwaitingInput(request.runId, request.stageId, false);
|
|
283
|
-
this.hideHost(this.hosts.get(hostKey), request, reason);
|
|
284
|
-
request.reject(reason);
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
export interface MountedStageCustomUi {
|
|
289
|
-
readonly request: StageCustomUiRequest;
|
|
290
|
-
readonly component: PiCustomComponent & { invalidate(): void; dispose?(): void } & Partial<Focusable>;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
export async function mountStageCustomUi(
|
|
294
|
-
request: StageCustomUiRequest,
|
|
295
|
-
tui: TUI,
|
|
296
|
-
theme: PiTheme,
|
|
297
|
-
keybindings: PiKeybindings,
|
|
298
|
-
broker: StageUiBroker,
|
|
299
|
-
onDone?: () => void,
|
|
300
|
-
canResolve?: () => boolean,
|
|
301
|
-
): Promise<MountedStageCustomUi> {
|
|
302
|
-
const rawComponent = await request.factory(
|
|
303
|
-
tui as unknown as Parameters<StageCustomUiRequest["factory"]>[0],
|
|
304
|
-
theme,
|
|
305
|
-
keybindings,
|
|
306
|
-
(result: unknown) => {
|
|
307
|
-
if (canResolve?.() === false) return;
|
|
308
|
-
broker.resolve(request, result);
|
|
309
|
-
onDone?.();
|
|
310
|
-
},
|
|
311
|
-
);
|
|
312
|
-
const component: PiCustomComponent & { invalidate(): void; dispose?(): void } & Partial<Focusable> = {
|
|
313
|
-
render: (width) => rawComponent.render(width),
|
|
314
|
-
...(rawComponent.handleInput !== undefined
|
|
315
|
-
? { handleInput: (data: string): boolean => rawComponent.handleInput?.(data) === true }
|
|
316
|
-
: {}),
|
|
317
|
-
invalidate: () => rawComponent.invalidate?.(),
|
|
318
|
-
...(rawComponent.dispose !== undefined ? { dispose: () => rawComponent.dispose?.() } : {}),
|
|
319
|
-
};
|
|
320
|
-
if ("focused" in rawComponent) {
|
|
321
|
-
Object.defineProperty(component, "focused", {
|
|
322
|
-
get: () => (rawComponent as Component & Partial<Focusable>).focused,
|
|
323
|
-
set: (value: boolean) => {
|
|
324
|
-
(rawComponent as Component & Partial<Focusable>).focused = value;
|
|
325
|
-
},
|
|
326
|
-
enumerable: true,
|
|
327
|
-
configurable: true,
|
|
328
|
-
});
|
|
329
|
-
}
|
|
330
|
-
return { request, component };
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
const SESSION_KEY = "workflows:stage-ui:v1";
|
|
334
|
-
const singleton = createSessionScopedSingleton(SESSION_KEY, () => new StageUiBroker());
|
|
335
|
-
|
|
336
|
-
export const stageUiBroker = singleton.facade;
|
|
337
|
-
|
|
338
|
-
export function adoptStageUiBroker(scope: object): StageUiBroker {
|
|
339
|
-
return singleton.adopt(scope);
|
|
340
|
-
}
|