@bastani/atomic 0.9.9 → 0.9.10
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 +132 -0
- package/README.md +2 -0
- package/dist/builtin/cursor/CHANGELOG.md +12 -0
- package/dist/builtin/cursor/package.json +3 -3
- package/dist/builtin/intercom/CHANGELOG.md +30 -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 +22 -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 +42 -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 +22 -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 +153 -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
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { runGit, runGitPlain } from "./worktree-git.js";
|
|
4
|
+
|
|
5
|
+
function tracked(repo: string, relativePath: string): boolean {
|
|
6
|
+
const result = runGit(repo, ["ls-files", "--error-unmatch", "--", relativePath]);
|
|
7
|
+
return result.status === 0;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function hasTrackedPathComponent(repo: string, relativePath: string): boolean {
|
|
11
|
+
const components = relativePath.split(/[\\/]+/).filter(Boolean);
|
|
12
|
+
let candidate = "";
|
|
13
|
+
for (const component of components) {
|
|
14
|
+
candidate = candidate ? `${candidate}/${component}` : component;
|
|
15
|
+
const result = runGit(repo, ["ls-files", "--stage", "--", candidate]);
|
|
16
|
+
if (result.status !== 0) continue;
|
|
17
|
+
const exact = result.stdout.split(/\r?\n/).some((line) => line.slice(line.indexOf("\t") + 1) === candidate);
|
|
18
|
+
if (exact) return true;
|
|
19
|
+
}
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function copyUntrackedFile(mainRoot: string, worktreeRoot: string, relativePath: string): boolean {
|
|
24
|
+
const source = path.join(mainRoot, relativePath);
|
|
25
|
+
const destination = path.join(worktreeRoot, relativePath);
|
|
26
|
+
if (!fs.existsSync(source) || fs.existsSync(destination) || hasTrackedPathComponent(worktreeRoot, relativePath)) return false;
|
|
27
|
+
fs.mkdirSync(path.dirname(destination), { recursive: true });
|
|
28
|
+
fs.copyFileSync(source, destination);
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function propagateLocalSettings(mainRoot: string, worktreeRoot: string): string[] {
|
|
33
|
+
const copied: string[] = [];
|
|
34
|
+
if (copyUntrackedFile(mainRoot, worktreeRoot, ".atomic/settings.local.json")) copied.push(".atomic/settings.local.json");
|
|
35
|
+
if (!tracked(mainRoot, ".atomic/settings.json") && copyUntrackedFile(mainRoot, worktreeRoot, ".atomic/settings.json")) {
|
|
36
|
+
copied.push(".atomic/settings.json");
|
|
37
|
+
}
|
|
38
|
+
return copied;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function populatedHooksDirectory(mainRoot: string): string | undefined {
|
|
42
|
+
const husky = path.join(mainRoot, ".husky");
|
|
43
|
+
try {
|
|
44
|
+
if (fs.statSync(husky).isDirectory()) return husky;
|
|
45
|
+
} catch {
|
|
46
|
+
// Try ordinary Git hooks.
|
|
47
|
+
}
|
|
48
|
+
const hooks = path.join(mainRoot, ".git", "hooks");
|
|
49
|
+
try {
|
|
50
|
+
const populated = fs.readdirSync(hooks, { withFileTypes: true })
|
|
51
|
+
.some((entry) => entry.isFile() && !entry.name.endsWith(".sample"));
|
|
52
|
+
return populated ? hooks : undefined;
|
|
53
|
+
} catch {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function configureSharedHooksPath(mainRoot: string): void {
|
|
59
|
+
const desired = populatedHooksDirectory(mainRoot);
|
|
60
|
+
if (desired === undefined) return;
|
|
61
|
+
const current = runGitPlain(mainRoot, ["config", "--get", "core.hooksPath"]);
|
|
62
|
+
if (current.status === 0 && path.resolve(mainRoot, current.stdout.trim()) === desired) return;
|
|
63
|
+
const configured = runGitPlain(mainRoot, ["config", "core.hooksPath", desired]);
|
|
64
|
+
if (configured.status !== 0) {
|
|
65
|
+
throw new Error(configured.stderr.trim() || "failed to configure shared core.hooksPath");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function normalizeSymlinkDirectory(value: string): string | undefined {
|
|
70
|
+
const trimmed = value.trim();
|
|
71
|
+
if (!trimmed || path.isAbsolute(trimmed)) return undefined;
|
|
72
|
+
const normalized = path.normalize(trimmed);
|
|
73
|
+
if (normalized === "." || normalized === ".." || normalized.startsWith(`..${path.sep}`)) return undefined;
|
|
74
|
+
return normalized;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function symlinkConfiguredDirectories(
|
|
78
|
+
mainRoot: string,
|
|
79
|
+
worktreeRoot: string,
|
|
80
|
+
directories: readonly string[],
|
|
81
|
+
): string[] {
|
|
82
|
+
const synthetic: string[] = [];
|
|
83
|
+
for (const rawDirectory of directories) {
|
|
84
|
+
const relativePath = normalizeSymlinkDirectory(rawDirectory);
|
|
85
|
+
if (relativePath === undefined || synthetic.includes(relativePath)) continue;
|
|
86
|
+
const source = path.join(mainRoot, relativePath);
|
|
87
|
+
const destination = path.join(worktreeRoot, relativePath);
|
|
88
|
+
if (!fs.existsSync(source) || fs.existsSync(destination) || hasTrackedPathComponent(worktreeRoot, relativePath)) continue;
|
|
89
|
+
fs.mkdirSync(path.dirname(destination), { recursive: true });
|
|
90
|
+
try {
|
|
91
|
+
fs.symlinkSync(source, destination, process.platform === "win32" ? "junction" : undefined);
|
|
92
|
+
synthetic.push(relativePath);
|
|
93
|
+
} catch {
|
|
94
|
+
// Optional setup: unsupported filesystems may reject symlinks.
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return synthetic;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function copyWorktreeIncludes(mainRoot: string, worktreeRoot: string): void {
|
|
101
|
+
if (!fs.existsSync(path.join(mainRoot, ".worktreeinclude"))) return;
|
|
102
|
+
const ignored = runGit(mainRoot, ["ls-files", "--others", "--ignored", "--exclude-standard"]);
|
|
103
|
+
const included = runGit(mainRoot, ["ls-files", "--others", "--ignored", "--exclude-from=.worktreeinclude"]);
|
|
104
|
+
if (ignored.status !== 0 || included.status !== 0) return;
|
|
105
|
+
const ignoredPaths = new Set(ignored.stdout.split(/\r?\n/).filter(Boolean));
|
|
106
|
+
for (const relativePath of included.stdout.split(/\r?\n/).filter(Boolean)) {
|
|
107
|
+
if (!ignoredPaths.has(relativePath) || hasTrackedPathComponent(worktreeRoot, relativePath)) continue;
|
|
108
|
+
const source = path.join(mainRoot, relativePath);
|
|
109
|
+
const destination = path.join(worktreeRoot, relativePath);
|
|
110
|
+
try {
|
|
111
|
+
if (!fs.statSync(source).isFile() || fs.existsSync(destination)) continue;
|
|
112
|
+
fs.mkdirSync(path.dirname(destination), { recursive: true });
|
|
113
|
+
fs.copyFileSync(source, destination);
|
|
114
|
+
} catch {
|
|
115
|
+
// A concurrently removed ignored file is harmless.
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export function performPostCreationSetup(
|
|
121
|
+
mainRoot: string,
|
|
122
|
+
worktreeRoot: string,
|
|
123
|
+
symlinkDirectories: readonly string[],
|
|
124
|
+
): string[] {
|
|
125
|
+
const syntheticPaths = propagateLocalSettings(mainRoot, worktreeRoot);
|
|
126
|
+
configureSharedHooksPath(mainRoot);
|
|
127
|
+
syntheticPaths.push(...symlinkConfiguredDirectories(mainRoot, worktreeRoot, symlinkDirectories));
|
|
128
|
+
copyWorktreeIncludes(mainRoot, worktreeRoot);
|
|
129
|
+
return syntheticPaths;
|
|
130
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
|
|
4
|
+
function pathFromPointer(contents: string, prefix: string, base: string): string | undefined {
|
|
5
|
+
if (!contents.startsWith(prefix)) return undefined;
|
|
6
|
+
const value = contents.slice(prefix.length).trim();
|
|
7
|
+
if (!value) return undefined;
|
|
8
|
+
return path.resolve(base, value);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function readText(file: string): string | undefined {
|
|
12
|
+
try {
|
|
13
|
+
return fs.readFileSync(file, "utf8");
|
|
14
|
+
} catch {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function samePath(left: string, right: string): boolean {
|
|
20
|
+
try {
|
|
21
|
+
const a = fs.realpathSync.native(left);
|
|
22
|
+
const b = fs.realpathSync.native(right);
|
|
23
|
+
return process.platform === "win32" ? a.toLowerCase() === b.toLowerCase() : a === b;
|
|
24
|
+
} catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Find the nearest checkout root without invoking Git. */
|
|
30
|
+
export function findGitRoot(cwd: string): string | undefined {
|
|
31
|
+
let current = path.resolve(cwd);
|
|
32
|
+
try {
|
|
33
|
+
if (!fs.statSync(current).isDirectory()) current = path.dirname(current);
|
|
34
|
+
} catch {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
while (true) {
|
|
38
|
+
try {
|
|
39
|
+
const entry = fs.statSync(path.join(current, ".git"));
|
|
40
|
+
if (entry.isDirectory() || entry.isFile()) return current;
|
|
41
|
+
} catch {
|
|
42
|
+
// Continue walking.
|
|
43
|
+
}
|
|
44
|
+
const parent = path.dirname(current);
|
|
45
|
+
if (parent === current) return undefined;
|
|
46
|
+
current = parent;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** Resolve only standard `git worktree add` layouts to their main checkout. */
|
|
51
|
+
export function resolveMainRepoRoot(repoRoot: string): string | undefined {
|
|
52
|
+
const gitEntry = path.join(repoRoot, ".git");
|
|
53
|
+
let stats: fs.Stats;
|
|
54
|
+
try {
|
|
55
|
+
stats = fs.statSync(gitEntry);
|
|
56
|
+
} catch {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
if (stats.isDirectory()) return path.resolve(repoRoot);
|
|
60
|
+
if (!stats.isFile()) return undefined;
|
|
61
|
+
|
|
62
|
+
const pointer = readText(gitEntry);
|
|
63
|
+
if (pointer === undefined) return undefined;
|
|
64
|
+
const gitDir = pathFromPointer(pointer, "gitdir:", repoRoot);
|
|
65
|
+
if (gitDir === undefined || path.basename(path.dirname(gitDir)) !== "worktrees") return undefined;
|
|
66
|
+
const commonGitDir = path.dirname(path.dirname(gitDir));
|
|
67
|
+
if (path.basename(commonGitDir) !== ".git") return undefined;
|
|
68
|
+
|
|
69
|
+
// A real linked-worktree admin directory points back to this checkout and
|
|
70
|
+
// declares the common directory. These checks reject crafted foreign pointers.
|
|
71
|
+
const backPointer = readText(path.join(gitDir, "gitdir"));
|
|
72
|
+
const commonPointer = readText(path.join(gitDir, "commondir"));
|
|
73
|
+
if (backPointer === undefined || commonPointer === undefined) return undefined;
|
|
74
|
+
const linkedGitEntry = path.resolve(gitDir, backPointer.trim());
|
|
75
|
+
const declaredCommonDir = path.resolve(gitDir, commonPointer.trim());
|
|
76
|
+
if (!backPointer.trim() || !commonPointer.trim()) return undefined;
|
|
77
|
+
if (!samePath(linkedGitEntry, gitEntry) || !samePath(declaredCommonDir, commonGitDir)) return undefined;
|
|
78
|
+
return path.dirname(commonGitDir);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export function findCanonicalGitRoot(cwd: string): string | undefined {
|
|
82
|
+
const repoRoot = findGitRoot(cwd);
|
|
83
|
+
return repoRoot === undefined ? undefined : resolveMainRepoRoot(repoRoot);
|
|
84
|
+
}
|
|
@@ -2,8 +2,9 @@ import { spawnSync } from "node:child_process";
|
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
3
|
import * as os from "node:os";
|
|
4
4
|
import * as path from "node:path";
|
|
5
|
-
import { APP_NAME } from "@bastani/atomic";
|
|
6
5
|
import { runGit, runGitChecked } from "./worktree-git.js";
|
|
6
|
+
import { performPostCreationSetup } from "./worktree-post-create.js";
|
|
7
|
+
import { findCanonicalGitRoot } from "./worktree-root.js";
|
|
7
8
|
import type {
|
|
8
9
|
CreateWorktreesOptions,
|
|
9
10
|
RepoState,
|
|
@@ -18,17 +19,37 @@ import type {
|
|
|
18
19
|
|
|
19
20
|
const DEFAULT_WORKTREE_SETUP_HOOK_TIMEOUT_MS = 30000;
|
|
20
21
|
|
|
21
|
-
function
|
|
22
|
+
function originDefaultBranch(mainRoot: string): string | undefined {
|
|
23
|
+
const symbolic = runGit(mainRoot, ["symbolic-ref", "--short", "refs/remotes/origin/HEAD"]);
|
|
24
|
+
let branch = symbolic.status === 0 && symbolic.stdout.trim().startsWith("origin/")
|
|
25
|
+
? symbolic.stdout.trim().slice("origin/".length)
|
|
26
|
+
: undefined;
|
|
27
|
+
if (!branch) {
|
|
28
|
+
const remote = runGit(mainRoot, ["remote", "show", "origin"]);
|
|
29
|
+
branch = remote.status === 0 ? remote.stdout.match(/^\s*HEAD branch:\s*(\S+)\s*$/m)?.[1] : undefined;
|
|
30
|
+
}
|
|
31
|
+
if (!branch || branch === "(unknown)") return undefined;
|
|
32
|
+
const remoteRef = `refs/remotes/origin/${branch}`;
|
|
33
|
+
if (runGit(mainRoot, ["show-ref", "--verify", "--quiet", remoteRef]).status !== 0) {
|
|
34
|
+
if (runGit(mainRoot, ["fetch", "origin", `${branch}:${remoteRef}`]).status !== 0) return undefined;
|
|
35
|
+
}
|
|
36
|
+
return `origin/${branch}`;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function resolveRepoState(cwd: string, explicitBaseBranch?: string): RepoState {
|
|
22
40
|
const cwdRelative = resolveRepoCwdRelative(cwd);
|
|
23
|
-
const toplevel = runGitChecked(cwd, ["rev-parse", "--show-toplevel"]).trim();
|
|
41
|
+
const toplevel = path.resolve(runGitChecked(cwd, ["rev-parse", "--show-toplevel"]).trim());
|
|
42
|
+
const mainRoot = findCanonicalGitRoot(toplevel);
|
|
43
|
+
if (mainRoot === undefined) throw new Error(`unable to resolve canonical main Git repository root from ${toplevel}`);
|
|
24
44
|
|
|
25
|
-
const status = runGitChecked(toplevel, ["status", "--porcelain"]);
|
|
45
|
+
const status = runGitChecked(toplevel, ["status", "--porcelain", "--untracked-files=no"]);
|
|
26
46
|
if (status.trim().length > 0) {
|
|
27
47
|
throw new Error("worktree isolation requires a clean git working tree. Commit or stash changes first.");
|
|
28
48
|
}
|
|
29
49
|
|
|
30
|
-
const
|
|
31
|
-
|
|
50
|
+
const baseRef = explicitBaseBranch?.trim() || originDefaultBranch(mainRoot) || "HEAD";
|
|
51
|
+
const baseCommit = runGitChecked(mainRoot, ["rev-parse", baseRef]).trim();
|
|
52
|
+
return { toplevel, mainRoot, cwdRelative, baseCommit, baseRef };
|
|
32
53
|
}
|
|
33
54
|
|
|
34
55
|
function normalizeComparableCwd(cwd: string): string {
|
|
@@ -63,12 +84,22 @@ export function formatWorktreeTaskCwdConflict(
|
|
|
63
84
|
return `worktree isolation uses the shared cwd (${sharedCwd}); task ${conflict.index + 1} (${conflict.agent}) sets cwd to ${conflict.cwd}. Remove task-level cwd overrides or disable worktree.`;
|
|
64
85
|
}
|
|
65
86
|
|
|
87
|
+
function flattenedWorktreeName(runId: string, index: number): string {
|
|
88
|
+
return `${runId}-${index}`.replaceAll("/", "+");
|
|
89
|
+
}
|
|
90
|
+
|
|
66
91
|
function buildWorktreeBranch(runId: string, index: number): string {
|
|
67
|
-
return
|
|
92
|
+
return `worktree-${flattenedWorktreeName(runId, index)}`;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function buildWorktreePath(mainRoot: string, runId: string, index: number): string {
|
|
96
|
+
return path.join(mainRoot, ".atomic", "worktrees", flattenedWorktreeName(runId, index));
|
|
68
97
|
}
|
|
69
98
|
|
|
70
|
-
function
|
|
71
|
-
|
|
99
|
+
function ensureWorktreeIgnore(mainRoot: string): void {
|
|
100
|
+
const worktreesRoot = path.join(mainRoot, ".atomic", "worktrees");
|
|
101
|
+
fs.mkdirSync(worktreesRoot, { recursive: true });
|
|
102
|
+
fs.writeFileSync(path.join(worktreesRoot, ".gitignore"), "*\n", "utf8");
|
|
72
103
|
}
|
|
73
104
|
|
|
74
105
|
function resolveRepoCwdRelative(cwd: string): string {
|
|
@@ -85,23 +116,13 @@ function resolveRepoCwdRelative(cwd: string): string {
|
|
|
85
116
|
|
|
86
117
|
export function resolveExpectedWorktreeAgentCwd(cwd: string, runId: string, index: number): string {
|
|
87
118
|
const cwdRelative = resolveRepoCwdRelative(cwd);
|
|
88
|
-
const
|
|
119
|
+
const toplevel = path.resolve(runGitChecked(cwd, ["rev-parse", "--show-toplevel"]).trim());
|
|
120
|
+
const mainRoot = findCanonicalGitRoot(toplevel);
|
|
121
|
+
if (mainRoot === undefined) throw new Error(`unable to resolve canonical main Git repository root from ${toplevel}`);
|
|
122
|
+
const worktreePath = buildWorktreePath(mainRoot, runId, index);
|
|
89
123
|
return cwdRelative ? path.join(worktreePath, cwdRelative) : worktreePath;
|
|
90
124
|
}
|
|
91
125
|
|
|
92
|
-
function linkNodeModulesIfPresent(toplevel: string, worktreePath: string): boolean {
|
|
93
|
-
const nodeModulesPath = path.join(toplevel, "node_modules");
|
|
94
|
-
const nodeModulesLinkPath = path.join(worktreePath, "node_modules");
|
|
95
|
-
if (!fs.existsSync(nodeModulesPath) || fs.existsSync(nodeModulesLinkPath)) return false;
|
|
96
|
-
try {
|
|
97
|
-
fs.symlinkSync(nodeModulesPath, nodeModulesLinkPath);
|
|
98
|
-
return true;
|
|
99
|
-
} catch {
|
|
100
|
-
// Symlink creation is optional (e.g., unsupported filesystems on CI runners).
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
126
|
function parseHookTimeout(timeoutMs: number | undefined): number {
|
|
106
127
|
if (timeoutMs === undefined) return DEFAULT_WORKTREE_SETUP_HOOK_TIMEOUT_MS;
|
|
107
128
|
if (!Number.isInteger(timeoutMs) || timeoutMs <= 0) {
|
|
@@ -227,32 +248,47 @@ function runWorktreeSetupHook(
|
|
|
227
248
|
return [...uniquePaths];
|
|
228
249
|
}
|
|
229
250
|
|
|
251
|
+
function waitForGitLockRelease(): void {
|
|
252
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 100);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
function cleanupSingleWorktree(repoCwd: string, worktree: Pick<WorktreeInfo, "path" | "branch">): void {
|
|
256
|
+
try { runGitChecked(repoCwd, ["worktree", "remove", "--force", worktree.path]); } catch {
|
|
257
|
+
// Cleanup is idempotent and best-effort.
|
|
258
|
+
}
|
|
259
|
+
waitForGitLockRelease();
|
|
260
|
+
try { runGitChecked(repoCwd, ["branch", "-D", worktree.branch]); } catch {
|
|
261
|
+
// Cleanup is idempotent and best-effort.
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
230
265
|
function createSingleWorktree(
|
|
231
|
-
|
|
266
|
+
mainRoot: string,
|
|
232
267
|
cwdRelative: string,
|
|
233
268
|
runId: string,
|
|
234
269
|
index: number,
|
|
270
|
+
baseRef: string,
|
|
235
271
|
baseCommit: string,
|
|
272
|
+
symlinkDirectories: readonly string[],
|
|
236
273
|
setupHook: ResolvedWorktreeSetupHook | undefined,
|
|
237
274
|
agent: string | undefined,
|
|
238
275
|
): WorktreeInfo {
|
|
239
276
|
const branch = buildWorktreeBranch(runId, index);
|
|
240
|
-
const worktreePath = buildWorktreePath(runId, index);
|
|
241
|
-
const add = runGit(
|
|
277
|
+
const worktreePath = buildWorktreePath(mainRoot, runId, index);
|
|
278
|
+
const add = runGit(mainRoot, ["worktree", "add", "-B", branch, worktreePath, baseRef]);
|
|
242
279
|
if (add.status !== 0) {
|
|
243
280
|
const message = add.stderr.trim() || add.stdout.trim() || `failed to create worktree ${worktreePath}`;
|
|
281
|
+
cleanupSingleWorktree(mainRoot, { path: worktreePath, branch });
|
|
244
282
|
throw new Error(message);
|
|
245
283
|
}
|
|
246
284
|
|
|
247
285
|
const agentCwd = cwdRelative ? path.join(worktreePath, cwdRelative) : worktreePath;
|
|
248
286
|
try {
|
|
249
|
-
const
|
|
250
|
-
const syntheticPaths = nodeModulesLinked ? ["node_modules"] : [];
|
|
251
|
-
|
|
287
|
+
const syntheticPaths = performPostCreationSetup(mainRoot, worktreePath, symlinkDirectories);
|
|
252
288
|
if (setupHook) {
|
|
253
289
|
const hookSyntheticPaths = runWorktreeSetupHook(setupHook, {
|
|
254
290
|
version: 1,
|
|
255
|
-
repoRoot:
|
|
291
|
+
repoRoot: mainRoot,
|
|
256
292
|
worktreePath,
|
|
257
293
|
agentCwd,
|
|
258
294
|
branch,
|
|
@@ -263,73 +299,51 @@ function createSingleWorktree(
|
|
|
263
299
|
});
|
|
264
300
|
syntheticPaths.push(...hookSyntheticPaths);
|
|
265
301
|
}
|
|
266
|
-
|
|
267
302
|
return {
|
|
268
303
|
path: worktreePath,
|
|
269
304
|
agentCwd,
|
|
270
305
|
branch,
|
|
271
306
|
index,
|
|
272
|
-
nodeModulesLinked,
|
|
307
|
+
nodeModulesLinked: syntheticPaths.includes("node_modules"),
|
|
273
308
|
syntheticPaths,
|
|
274
309
|
};
|
|
275
310
|
} catch (error) {
|
|
276
|
-
|
|
277
|
-
// Best-effort rollback; preserve the original setup failure.
|
|
278
|
-
}
|
|
279
|
-
try { runGitChecked(toplevel, ["branch", "-D", branch]); } catch {
|
|
280
|
-
// Best-effort rollback; preserve the original setup failure.
|
|
281
|
-
}
|
|
311
|
+
cleanupSingleWorktree(mainRoot, { path: worktreePath, branch });
|
|
282
312
|
throw error;
|
|
283
313
|
}
|
|
284
314
|
}
|
|
285
315
|
|
|
286
|
-
function cleanupSingleWorktree(repoCwd: string, worktree: WorktreeInfo): void {
|
|
287
|
-
try { runGitChecked(repoCwd, ["worktree", "remove", "--force", worktree.path]); } catch {
|
|
288
|
-
// Cleanup is best-effort to avoid masking caller errors.
|
|
289
|
-
}
|
|
290
|
-
try { runGitChecked(repoCwd, ["branch", "-D", worktree.branch]); } catch {
|
|
291
|
-
// Cleanup is best-effort to avoid masking caller errors.
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
|
|
295
316
|
export function createWorktrees(cwd: string, runId: string, count: number, options?: CreateWorktreesOptions): WorktreeSetup {
|
|
296
|
-
const repo = resolveRepoState(cwd);
|
|
297
|
-
|
|
317
|
+
const repo = resolveRepoState(cwd, options?.baseBranch);
|
|
318
|
+
ensureWorktreeIgnore(repo.mainRoot);
|
|
319
|
+
const setupHook = resolveWorktreeSetupHook(repo.mainRoot, options?.setupHook);
|
|
320
|
+
const symlinkDirectories = options?.symlinkDirectories ?? ["node_modules"];
|
|
298
321
|
const worktrees: WorktreeInfo[] = [];
|
|
299
322
|
|
|
300
323
|
try {
|
|
301
324
|
for (let index = 0; index < count; index++) {
|
|
302
325
|
worktrees.push(createSingleWorktree(
|
|
303
|
-
repo.
|
|
326
|
+
repo.mainRoot,
|
|
304
327
|
repo.cwdRelative,
|
|
305
328
|
runId,
|
|
306
329
|
index,
|
|
330
|
+
repo.baseRef,
|
|
307
331
|
repo.baseCommit,
|
|
332
|
+
symlinkDirectories,
|
|
308
333
|
setupHook,
|
|
309
334
|
options?.agents?.[index],
|
|
310
335
|
));
|
|
311
336
|
}
|
|
312
337
|
} catch (error) {
|
|
313
|
-
cleanupWorktrees({
|
|
314
|
-
cwd: repo.toplevel,
|
|
315
|
-
worktrees,
|
|
316
|
-
baseCommit: repo.baseCommit,
|
|
317
|
-
});
|
|
338
|
+
cleanupWorktrees({ cwd: repo.mainRoot, worktrees, baseCommit: repo.baseCommit });
|
|
318
339
|
throw error;
|
|
319
340
|
}
|
|
320
341
|
|
|
321
|
-
return {
|
|
322
|
-
cwd: repo.toplevel,
|
|
323
|
-
worktrees,
|
|
324
|
-
baseCommit: repo.baseCommit,
|
|
325
|
-
};
|
|
342
|
+
return { cwd: repo.mainRoot, worktrees, baseCommit: repo.baseCommit };
|
|
326
343
|
}
|
|
327
344
|
|
|
328
345
|
export function cleanupWorktrees(setup: WorktreeSetup): void {
|
|
329
346
|
for (let index = setup.worktrees.length - 1; index >= 0; index--) {
|
|
330
347
|
cleanupSingleWorktree(setup.cwd, setup.worktrees[index]!);
|
|
331
348
|
}
|
|
332
|
-
try { runGitChecked(setup.cwd, ["worktree", "prune"]); } catch {
|
|
333
|
-
// Pruning is best-effort cleanup.
|
|
334
|
-
}
|
|
335
349
|
}
|
|
@@ -38,6 +38,8 @@ export interface WorktreeSetupHookConfig {
|
|
|
38
38
|
export interface CreateWorktreesOptions {
|
|
39
39
|
agents?: string[];
|
|
40
40
|
setupHook?: WorktreeSetupHookConfig;
|
|
41
|
+
baseBranch?: string;
|
|
42
|
+
symlinkDirectories?: readonly string[];
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
export interface ResolvedWorktreeSetupHook {
|
|
@@ -93,6 +95,8 @@ export interface GitWorktreeSetupResult {
|
|
|
93
95
|
|
|
94
96
|
export interface RepoState {
|
|
95
97
|
toplevel: string;
|
|
98
|
+
mainRoot: string;
|
|
96
99
|
cwdRelative: string;
|
|
97
100
|
baseCommit: string;
|
|
101
|
+
baseRef: string;
|
|
98
102
|
}
|
|
@@ -26,7 +26,7 @@ export { INTERACTIVE_WORKFLOW_POLICY, NON_INTERACTIVE_WORKFLOW_POLICY } from "./
|
|
|
26
26
|
export type { AuthoredWorkflowDefinition, AuthoredWorkflowSpec, WorkflowInputsFromSchemas, WorkflowOutputsFromSchemas, WorkflowProvidedInputsFromSchemas } from "./authoring/workflow.js";
|
|
27
27
|
export type { WorkflowRegistry } from "./workflows/registry.js";
|
|
28
28
|
|
|
29
|
-
export { run,
|
|
29
|
+
export { run, resolveInputs } from "./runs/foreground/executor.js";
|
|
30
30
|
export type { RunOpts, RunResult, ResolvedInputs } from "./runs/foreground/executor.js";
|
|
31
31
|
export type { AgentSessionAdapter, StageAdapters } from "./runs/foreground/stage-runner.js";
|
|
32
32
|
export { GraphFrontierTracker } from "./engine/graph-inference.js";
|
|
@@ -24,7 +24,7 @@ export type WorkflowThinkingLevel = "off" | "minimal" | "low" | "medium" | "high
|
|
|
24
24
|
export type WorkflowExecutionMode = "interactive" | "non_interactive";
|
|
25
25
|
export type WorkflowExitStatus = "completed" | "skipped" | "cancelled" | "blocked";
|
|
26
26
|
export type RunStatus = "pending" | "running" | "paused" | WorkflowExitStatus | "failed" | "killed";
|
|
27
|
-
export type WorkflowDetailsMode = "named" | "
|
|
27
|
+
export type WorkflowDetailsMode = "named" | "inspection" | "control";
|
|
28
28
|
export type WorkflowDetailsStatus = "accepted" | "running" | WorkflowExitStatus | "failed" | "killed" | "noop";
|
|
29
29
|
export type WorkflowAction = "list" | "get" | "inputs" | "run" | "status" | "interrupt" | "resume";
|
|
30
30
|
type WorkflowExitOutputValues<TOutputs extends WorkflowOutputValues = WorkflowOutputValues> = [keyof TOutputs] extends [never] ? Readonly<Record<string, never>> : Partial<TOutputs>;
|
|
@@ -146,6 +146,13 @@ export interface StageOptions<TSchemaDef extends TSchema | undefined = TSchema |
|
|
|
146
146
|
readonly sessionDir?: string;
|
|
147
147
|
/** @deprecated Prefer suffixing model/fallbackModels entries with `:level`; removal is deferred. */
|
|
148
148
|
readonly thinkingLevel?: WorkflowThinkingLevel;
|
|
149
|
+
/**
|
|
150
|
+
* Intercom home group for this stage session. A named string joins that group;
|
|
151
|
+
* `true` auto-generates one shared UUID group per parallel set (all items in the
|
|
152
|
+
* set share it). Absent inherits per the precedence chain (ultimately "default").
|
|
153
|
+
* Only applied when the stage session actually has intercom access.
|
|
154
|
+
*/
|
|
155
|
+
readonly group?: string | true;
|
|
149
156
|
}
|
|
150
157
|
export interface CompleteStageOpts extends WorkflowModelFallbackFields {
|
|
151
158
|
readonly model?: WorkflowModelValue;
|
|
@@ -186,12 +193,31 @@ export interface WorkflowPersistencePort {
|
|
|
186
193
|
setLabel?(entryId: string, label: string): void;
|
|
187
194
|
appendCustomMessageEntry?(content: string, meta?: Record<string, unknown>): string | undefined;
|
|
188
195
|
}
|
|
196
|
+
/** Stable public identifier used to correlate replayed/overlapping turn lifecycle events. */
|
|
197
|
+
export type StageSessionTurnId = string | number;
|
|
198
|
+
/** Public lifecycle events emitted by stage session adapters for turn ownership. */
|
|
199
|
+
export type StageSessionEvent = {
|
|
200
|
+
readonly type: "agent_start";
|
|
201
|
+
readonly turnId?: StageSessionTurnId;
|
|
202
|
+
} | {
|
|
203
|
+
readonly type: "agent_end";
|
|
204
|
+
readonly turnId?: StageSessionTurnId;
|
|
205
|
+
readonly messages?: readonly WorkflowSerializableValue[];
|
|
206
|
+
};
|
|
189
207
|
export interface StageSessionRuntime {
|
|
190
208
|
prompt(text: string, options?: PromptOptions): Promise<string | void>;
|
|
191
209
|
sendUserMessage?(content: StageUserMessageContent, options?: StageSendUserMessageOptions): Promise<void>;
|
|
192
210
|
steer(text: string): Promise<void>;
|
|
193
211
|
followUp(text: string): Promise<void>;
|
|
194
|
-
|
|
212
|
+
/**
|
|
213
|
+
* Must emit `agent_start` when a submitted user-message turn takes ownership and
|
|
214
|
+
* `agent_end` when that owned turn terminates. Registration may replay state
|
|
215
|
+
* synchronously; synchronous untagged replays are snapshots only. An adapter
|
|
216
|
+
* that can emit a later end for a replayed turn while a newer turn is active
|
|
217
|
+
* must provide the same stable `turnId` on that replayed start and its end.
|
|
218
|
+
* After registration returns, starts must represent new turns.
|
|
219
|
+
*/
|
|
220
|
+
subscribe(listener: (event: StageSessionEvent) => void): () => void;
|
|
195
221
|
readonly sessionFile: string | undefined;
|
|
196
222
|
readonly sessionId: string;
|
|
197
223
|
setModel(model: WorkflowSerializableValue): Promise<void>;
|
|
@@ -258,7 +284,7 @@ export interface StageContext<TSchemaDef extends TSchema | undefined = undefined
|
|
|
258
284
|
sendUserMessage(content: StageUserMessageContent, options?: StageSendUserMessageOptions): Promise<void>;
|
|
259
285
|
steer(text: string): Promise<void>;
|
|
260
286
|
followUp(text: string): Promise<void>;
|
|
261
|
-
subscribe(listener: (event:
|
|
287
|
+
subscribe(listener: (event: StageSessionEvent) => void): () => void;
|
|
262
288
|
readonly sessionFile: string | undefined;
|
|
263
289
|
readonly sessionId: string;
|
|
264
290
|
setModel(model: WorkflowModelValue): Promise<void>;
|
|
@@ -338,26 +364,7 @@ export interface WorkflowParallelOptions extends WorkflowSharedTaskDefaults {
|
|
|
338
364
|
readonly concurrency?: number;
|
|
339
365
|
readonly failFast?: boolean;
|
|
340
366
|
}
|
|
341
|
-
export interface WorkflowDirectTaskItem extends WorkflowTaskOptions {
|
|
342
|
-
readonly name: string;
|
|
343
|
-
readonly count?: number;
|
|
344
|
-
}
|
|
345
|
-
export interface WorkflowParallelChainStep {
|
|
346
|
-
readonly parallel: readonly WorkflowDirectTaskItem[];
|
|
347
|
-
readonly concurrency?: number;
|
|
348
|
-
readonly failFast?: boolean;
|
|
349
|
-
readonly worktree?: boolean;
|
|
350
|
-
readonly gitWorktreeDir?: string;
|
|
351
|
-
readonly baseBranch?: string;
|
|
352
|
-
}
|
|
353
|
-
export type WorkflowChainStep = WorkflowDirectTaskItem | WorkflowParallelChainStep;
|
|
354
367
|
export type WorkflowTaskSessionOptions = StageOptions & WorkflowTaskSessionFields;
|
|
355
|
-
export interface WorkflowDirectOptions extends StageOptions, WorkflowTaskSessionFields {
|
|
356
|
-
readonly chainName?: string;
|
|
357
|
-
readonly concurrency?: number;
|
|
358
|
-
readonly failFast?: boolean;
|
|
359
|
-
readonly chainDir?: string;
|
|
360
|
-
}
|
|
361
368
|
export interface WorkflowRunChildOptions<TInputs extends WorkflowInputValues = WorkflowInputValues> {
|
|
362
369
|
readonly inputs?: TInputs;
|
|
363
370
|
readonly stageName?: string;
|
|
@@ -33,7 +33,7 @@ export type WorkflowThinkingLevel = "off" | "minimal" | "low" | "medium" | "high
|
|
|
33
33
|
export type WorkflowExecutionMode = "interactive" | "non_interactive";
|
|
34
34
|
export type WorkflowExitStatus = "completed" | "skipped" | "cancelled" | "blocked";
|
|
35
35
|
export type RunStatus = "pending" | "running" | "paused" | WorkflowExitStatus | "failed" | "killed";
|
|
36
|
-
export type WorkflowDetailsMode = "named" | "
|
|
36
|
+
export type WorkflowDetailsMode = "named" | "inspection" | "control";
|
|
37
37
|
export type WorkflowDetailsStatus = "accepted" | "running" | WorkflowExitStatus | "failed" | "killed" | "noop";
|
|
38
38
|
export type WorkflowAction = "list" | "get" | "inputs" | "run" | "status" | "interrupt" | "resume";
|
|
39
39
|
|
|
@@ -183,6 +183,13 @@ export interface StageOptions<TSchemaDef extends TSchema | undefined = TSchema |
|
|
|
183
183
|
readonly sessionDir?: string;
|
|
184
184
|
/** @deprecated Prefer suffixing model/fallbackModels entries with `:level`; removal is deferred. */
|
|
185
185
|
readonly thinkingLevel?: WorkflowThinkingLevel;
|
|
186
|
+
/**
|
|
187
|
+
* Intercom home group for this stage session. A named string joins that group;
|
|
188
|
+
* `true` auto-generates one shared UUID group per parallel set (all items in the
|
|
189
|
+
* set share it). Absent inherits per the precedence chain (ultimately "default").
|
|
190
|
+
* Only applied when the stage session actually has intercom access.
|
|
191
|
+
*/
|
|
192
|
+
readonly group?: string | true;
|
|
186
193
|
}
|
|
187
194
|
|
|
188
195
|
export interface CompleteStageOpts extends WorkflowModelFallbackFields {
|
|
@@ -233,12 +240,28 @@ export interface WorkflowPersistencePort {
|
|
|
233
240
|
appendCustomMessageEntry?(content: string, meta?: Record<string, unknown>): string | undefined;
|
|
234
241
|
}
|
|
235
242
|
|
|
243
|
+
/** Stable public identifier used to correlate replayed/overlapping turn lifecycle events. */
|
|
244
|
+
export type StageSessionTurnId = string | number;
|
|
245
|
+
|
|
246
|
+
/** Public lifecycle events emitted by stage session adapters for turn ownership. */
|
|
247
|
+
export type StageSessionEvent =
|
|
248
|
+
| { readonly type: "agent_start"; readonly turnId?: StageSessionTurnId }
|
|
249
|
+
| { readonly type: "agent_end"; readonly turnId?: StageSessionTurnId; readonly messages?: readonly WorkflowSerializableValue[] };
|
|
250
|
+
|
|
236
251
|
export interface StageSessionRuntime {
|
|
237
252
|
prompt(text: string, options?: PromptOptions): Promise<string | void>;
|
|
238
253
|
sendUserMessage?(content: StageUserMessageContent, options?: StageSendUserMessageOptions): Promise<void>;
|
|
239
254
|
steer(text: string): Promise<void>;
|
|
240
255
|
followUp(text: string): Promise<void>;
|
|
241
|
-
|
|
256
|
+
/**
|
|
257
|
+
* Must emit `agent_start` when a submitted user-message turn takes ownership and
|
|
258
|
+
* `agent_end` when that owned turn terminates. Registration may replay state
|
|
259
|
+
* synchronously; synchronous untagged replays are snapshots only. An adapter
|
|
260
|
+
* that can emit a later end for a replayed turn while a newer turn is active
|
|
261
|
+
* must provide the same stable `turnId` on that replayed start and its end.
|
|
262
|
+
* After registration returns, starts must represent new turns.
|
|
263
|
+
*/
|
|
264
|
+
subscribe(listener: (event: StageSessionEvent) => void): () => void;
|
|
242
265
|
readonly sessionFile: string | undefined;
|
|
243
266
|
readonly sessionId: string;
|
|
244
267
|
setModel(model: WorkflowSerializableValue): Promise<void>;
|
|
@@ -310,7 +333,7 @@ export interface StageContext<TSchemaDef extends TSchema | undefined = undefined
|
|
|
310
333
|
sendUserMessage(content: StageUserMessageContent, options?: StageSendUserMessageOptions): Promise<void>;
|
|
311
334
|
steer(text: string): Promise<void>;
|
|
312
335
|
followUp(text: string): Promise<void>;
|
|
313
|
-
subscribe(listener: (event:
|
|
336
|
+
subscribe(listener: (event: StageSessionEvent) => void): () => void;
|
|
314
337
|
readonly sessionFile: string | undefined;
|
|
315
338
|
readonly sessionId: string;
|
|
316
339
|
setModel(model: WorkflowModelValue): Promise<void>;
|
|
@@ -395,29 +418,8 @@ export interface WorkflowParallelOptions extends WorkflowSharedTaskDefaults {
|
|
|
395
418
|
readonly failFast?: boolean;
|
|
396
419
|
}
|
|
397
420
|
|
|
398
|
-
export interface WorkflowDirectTaskItem extends WorkflowTaskOptions {
|
|
399
|
-
readonly name: string;
|
|
400
|
-
readonly count?: number;
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
export interface WorkflowParallelChainStep {
|
|
404
|
-
readonly parallel: readonly WorkflowDirectTaskItem[];
|
|
405
|
-
readonly concurrency?: number;
|
|
406
|
-
readonly failFast?: boolean;
|
|
407
|
-
readonly worktree?: boolean;
|
|
408
|
-
readonly gitWorktreeDir?: string;
|
|
409
|
-
readonly baseBranch?: string;
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
export type WorkflowChainStep = WorkflowDirectTaskItem | WorkflowParallelChainStep;
|
|
413
421
|
export type WorkflowTaskSessionOptions = StageOptions & WorkflowTaskSessionFields;
|
|
414
422
|
|
|
415
|
-
export interface WorkflowDirectOptions extends StageOptions, WorkflowTaskSessionFields {
|
|
416
|
-
readonly chainName?: string;
|
|
417
|
-
readonly concurrency?: number;
|
|
418
|
-
readonly failFast?: boolean;
|
|
419
|
-
readonly chainDir?: string;
|
|
420
|
-
}
|
|
421
423
|
|
|
422
424
|
export interface WorkflowRunChildOptions<TInputs extends WorkflowInputValues = WorkflowInputValues> {
|
|
423
425
|
readonly inputs?: TInputs;
|