@bastani/atomic 0.9.16-alpha.2 → 0.9.16-alpha.3
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 +7 -0
- package/dist/builtin/intercom/broker/spawn.ts +22 -2
- package/dist/builtin/intercom/index.bundle.mjs +61694 -0
- package/dist/builtin/intercom/package.json +3 -3
- package/dist/builtin/mcp/index.bundle.mjs +64901 -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 +85671 -0
- package/dist/builtin/web-access/index.bundle.mjs +67413 -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 +76391 -96336
- package/dist/builtin/workflows/src/index.bundle.mjs +73244 -0
- 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,1280 +0,0 @@
|
|
|
1
|
-
import { appendFileSync, existsSync, mkdirSync, statSync } from "node:fs";
|
|
2
|
-
import { basename, dirname, join, relative, resolve } from "node:path";
|
|
3
|
-
import {
|
|
4
|
-
type AgentSession,
|
|
5
|
-
type AgentSessionEvent,
|
|
6
|
-
type AgentSessionEventListener,
|
|
7
|
-
type CreateAgentSessionOptions,
|
|
8
|
-
createAgentSession,
|
|
9
|
-
DefaultResourceLoader,
|
|
10
|
-
getAgentDir,
|
|
11
|
-
getBuiltinPackagePaths,
|
|
12
|
-
type PackageSource,
|
|
13
|
-
SessionManager,
|
|
14
|
-
type SessionStats,
|
|
15
|
-
SettingsManager,
|
|
16
|
-
type SubagentIntercomIdentity,
|
|
17
|
-
} from "@bastani/atomic";
|
|
18
|
-
import {
|
|
19
|
-
type ChildIdentity,
|
|
20
|
-
type NativeAdmissionResult,
|
|
21
|
-
type AgentStatus as NativeAgentStatus,
|
|
22
|
-
type NativeExecutionGuardResult,
|
|
23
|
-
type TerminationCause as NativeTerminationCause,
|
|
24
|
-
SubagentControl,
|
|
25
|
-
} from "@bastani/atomic-natives";
|
|
26
|
-
import type { Api, Model } from "@bastani/pi-ai/compat";
|
|
27
|
-
import type { AgentConfig } from "../../agents/agent-types.js";
|
|
28
|
-
import {
|
|
29
|
-
buildSkillInjection,
|
|
30
|
-
isSubagentOrchestrationSkillSelector,
|
|
31
|
-
resolveSkillsFromCatalog,
|
|
32
|
-
} from "../../agents/skills.js";
|
|
33
|
-
import { ensureArtifactsDir, writeArtifact, writeMetadata } from "../../shared/artifacts.js";
|
|
34
|
-
import {
|
|
35
|
-
getSubagentCodexFastModeSettings,
|
|
36
|
-
resolveSubagentCodexFastModeScope,
|
|
37
|
-
resolveSubagentModelFastMode,
|
|
38
|
-
} from "../../shared/fast-mode.js";
|
|
39
|
-
import { DEFAULT_MAX_JSONL_BYTES } from "../../shared/jsonl-writer.js";
|
|
40
|
-
import { resolveEffectiveThinking } from "../../shared/model-info.js";
|
|
41
|
-
import {
|
|
42
|
-
type AgentProgress,
|
|
43
|
-
type ArtifactPaths,
|
|
44
|
-
DEFAULT_MAX_OUTPUT,
|
|
45
|
-
type MaxOutputConfig,
|
|
46
|
-
truncateOutput,
|
|
47
|
-
} from "../../shared/types.js";
|
|
48
|
-
import { type ChildModePolicy, resolveChildModePolicy } from "./child-policy.js";
|
|
49
|
-
import { createInProcessChildPromptBehavior, createInProcessChildSystemPromptTransform } from "./prompt-behavior.js";
|
|
50
|
-
|
|
51
|
-
export type ChildStatus = NativeAgentStatus;
|
|
52
|
-
export type ContinuationReason = "intercom-coordination";
|
|
53
|
-
export type TerminationCauseName = NativeTerminationCause;
|
|
54
|
-
export type TerminalStatus = "ok" | "error" | "skipped" | "interrupted" | "continued";
|
|
55
|
-
|
|
56
|
-
export interface ParentContext {
|
|
57
|
-
readonly path: string;
|
|
58
|
-
readonly depth: number;
|
|
59
|
-
readonly sessionId?: string;
|
|
60
|
-
readonly intercomGroup?: string;
|
|
61
|
-
readonly workflowStageSubagentGuard?: boolean;
|
|
62
|
-
readonly orchestrationContext?: CreateAgentSessionOptions["orchestrationContext"];
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export interface TestSessionOptions {
|
|
66
|
-
readonly output?: string;
|
|
67
|
-
readonly promptLogPath?: string;
|
|
68
|
-
/** Hold a test prompt open until the caller releases the supplied promise. */
|
|
69
|
-
readonly promptGate?: Promise<void>;
|
|
70
|
-
/** Match AgentSession.abort() settling an active prompt without throwing. */
|
|
71
|
-
readonly abortResolvesPrompt?: boolean;
|
|
72
|
-
/** Emit a fallback event for tests that exercise live model metadata. */
|
|
73
|
-
readonly fallbackModel?: string;
|
|
74
|
-
/** Emit the effective thinking level applied to the fallback candidate. */
|
|
75
|
-
readonly fallbackThinkingLevel?: string;
|
|
76
|
-
/** Test-only session model exposed through the AgentSession accessors. */
|
|
77
|
-
readonly sessionModel?: string;
|
|
78
|
-
/** Test-only effective thinking level exposed through the AgentSession accessors. */
|
|
79
|
-
readonly sessionThinkingLevel?: string;
|
|
80
|
-
/** Test-only session events emitted in order after the initial agent_start event. */
|
|
81
|
-
readonly events?: readonly AgentSessionEvent[];
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export interface ChildSpec {
|
|
85
|
-
readonly taskName: string;
|
|
86
|
-
readonly task: string;
|
|
87
|
-
readonly agent: AgentConfig;
|
|
88
|
-
readonly cwd: string;
|
|
89
|
-
readonly tools?: string[];
|
|
90
|
-
readonly excludedTools?: string[];
|
|
91
|
-
readonly mcpDirectTools?: string[];
|
|
92
|
-
readonly skills?: string[];
|
|
93
|
-
readonly customTools?: CreateAgentSessionOptions["customTools"];
|
|
94
|
-
readonly model?: Model<Api>;
|
|
95
|
-
readonly thinkingLevel?: CreateAgentSessionOptions["thinkingLevel"];
|
|
96
|
-
readonly parent?: ParentContext;
|
|
97
|
-
/** Typed identity/capability resolved by the parent before admission. */
|
|
98
|
-
readonly intercom?: SubagentIntercomIdentity;
|
|
99
|
-
readonly sessionFile?: string;
|
|
100
|
-
readonly testSession?: boolean | TestSessionOptions;
|
|
101
|
-
readonly artifactJsonlPath?: string;
|
|
102
|
-
/**
|
|
103
|
-
* Fallback model candidates (full ids, optional `:thinking` suffix) handed to
|
|
104
|
-
* the SDK session so child fallback uses the exact classification and
|
|
105
|
-
* candidate-advancement behavior main chat and workflow stages share.
|
|
106
|
-
*/
|
|
107
|
-
readonly fallbackModels?: readonly string[];
|
|
108
|
-
/** Live progress callback for the parent's tool-result rendering. */
|
|
109
|
-
readonly onProgress?: (progress: AgentProgress) => void;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
export interface ChildPolicy extends ChildModePolicy {
|
|
113
|
-
readonly cwd: string;
|
|
114
|
-
readonly tools?: readonly string[];
|
|
115
|
-
readonly excludedTools?: readonly string[];
|
|
116
|
-
readonly mcpDirectTools?: readonly string[];
|
|
117
|
-
readonly skills: readonly string[];
|
|
118
|
-
readonly customTools?: CreateAgentSessionOptions["customTools"];
|
|
119
|
-
readonly model?: Model<Api>;
|
|
120
|
-
readonly thinkingLevel?: CreateAgentSessionOptions["thinkingLevel"];
|
|
121
|
-
readonly intercomGroup?: string;
|
|
122
|
-
readonly depth: number;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
export interface ModelCandidate {
|
|
126
|
-
readonly model?: Model<Api>;
|
|
127
|
-
readonly modelId?: string;
|
|
128
|
-
readonly thinkingLevel?: CreateAgentSessionOptions["thinkingLevel"];
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
function modelIdForCandidate(candidate: ModelCandidate, fallbackModel?: Model<Api>): string | undefined {
|
|
132
|
-
return (
|
|
133
|
-
candidate.modelId ??
|
|
134
|
-
(candidate.model ? `${candidate.model.provider}/${candidate.model.id}` : undefined) ??
|
|
135
|
-
(fallbackModel ? `${fallbackModel.provider}/${fallbackModel.id}` : undefined)
|
|
136
|
-
);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
function modelIdForSession(session: AgentSession | undefined): string | undefined {
|
|
140
|
-
const model = session?.model;
|
|
141
|
-
return model ? `${model.provider}/${model.id}` : undefined;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
function thinkingLevelForSession(session: AgentSession | undefined): string | undefined {
|
|
145
|
-
const thinking = session?.thinkingLevel;
|
|
146
|
-
return typeof thinking === "string" ? thinking : undefined;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
function initialThinkingForAttempt(
|
|
150
|
-
model: string | undefined,
|
|
151
|
-
configuredThinking: string | undefined,
|
|
152
|
-
): string | undefined {
|
|
153
|
-
return resolveEffectiveThinking(model, configuredThinking) ?? configuredThinking;
|
|
154
|
-
}
|
|
155
|
-
function defaultFastModeForChild(
|
|
156
|
-
cwd: string,
|
|
157
|
-
context: ParentContext["orchestrationContext"],
|
|
158
|
-
workflowStageSubagentGuard?: boolean,
|
|
159
|
-
): (model?: string) => boolean {
|
|
160
|
-
const settings = getSubagentCodexFastModeSettings(cwd);
|
|
161
|
-
const scope = resolveSubagentCodexFastModeScope(workflowStageSubagentGuard ?? context?.kind === "workflow-stage");
|
|
162
|
-
return (model) => resolveSubagentModelFastMode({ model, cwd, settings, scope });
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
export interface AttemptSignals {
|
|
166
|
-
readonly abort: AbortSignal;
|
|
167
|
-
readonly interrupt: AbortSignal;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
export type AttemptStats = SessionStats;
|
|
171
|
-
export interface AttemptSkillReport {
|
|
172
|
-
readonly skills?: readonly string[];
|
|
173
|
-
readonly skillsWarning?: string;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
export type AttemptOutcome = (
|
|
177
|
-
| {
|
|
178
|
-
readonly status: "ok";
|
|
179
|
-
readonly output: string;
|
|
180
|
-
readonly stats: AttemptStats;
|
|
181
|
-
readonly path: string;
|
|
182
|
-
readonly envelope: string;
|
|
183
|
-
readonly sessionFile?: string;
|
|
184
|
-
readonly model?: string;
|
|
185
|
-
readonly thinking?: string;
|
|
186
|
-
readonly attemptedModels?: readonly string[];
|
|
187
|
-
}
|
|
188
|
-
| {
|
|
189
|
-
readonly status: "error";
|
|
190
|
-
readonly cause: string;
|
|
191
|
-
readonly stats: AttemptStats;
|
|
192
|
-
readonly path: string;
|
|
193
|
-
readonly envelope: string;
|
|
194
|
-
readonly sessionFile?: string;
|
|
195
|
-
readonly fallbackSignal?: string;
|
|
196
|
-
readonly model?: string;
|
|
197
|
-
readonly thinking?: string;
|
|
198
|
-
readonly attemptedModels?: readonly string[];
|
|
199
|
-
}
|
|
200
|
-
| {
|
|
201
|
-
readonly status: "interrupted";
|
|
202
|
-
readonly stats: AttemptStats;
|
|
203
|
-
readonly path: string;
|
|
204
|
-
readonly envelope: string;
|
|
205
|
-
readonly sessionFile?: string;
|
|
206
|
-
readonly model?: string;
|
|
207
|
-
readonly thinking?: string;
|
|
208
|
-
}
|
|
209
|
-
| {
|
|
210
|
-
readonly status: "continued";
|
|
211
|
-
readonly childPath: string;
|
|
212
|
-
readonly stats: AttemptStats;
|
|
213
|
-
readonly path: string;
|
|
214
|
-
readonly envelope: string;
|
|
215
|
-
readonly sessionFile?: string;
|
|
216
|
-
readonly model?: string;
|
|
217
|
-
readonly thinking?: string;
|
|
218
|
-
}
|
|
219
|
-
) &
|
|
220
|
-
AttemptSkillReport;
|
|
221
|
-
|
|
222
|
-
export interface ResultEnvelope {
|
|
223
|
-
readonly path: string;
|
|
224
|
-
readonly status: TerminalStatus;
|
|
225
|
-
readonly cause?: string;
|
|
226
|
-
readonly stats: AttemptStats;
|
|
227
|
-
readonly envelope: string;
|
|
228
|
-
readonly model?: string;
|
|
229
|
-
readonly thinking?: string;
|
|
230
|
-
readonly fastMode?: boolean;
|
|
231
|
-
readonly modelAttempts?: readonly {
|
|
232
|
-
readonly model: string;
|
|
233
|
-
readonly status: TerminalStatus;
|
|
234
|
-
readonly cause?: string;
|
|
235
|
-
}[];
|
|
236
|
-
readonly sessionFile?: string;
|
|
237
|
-
readonly artifactsDir?: string;
|
|
238
|
-
readonly durationMs?: number;
|
|
239
|
-
readonly timestamp: number;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
export interface DeliverChildResultOptions {
|
|
243
|
-
readonly artifactsDir?: string;
|
|
244
|
-
readonly artifactPaths?: ArtifactPaths;
|
|
245
|
-
readonly artifactsDisabled?: boolean;
|
|
246
|
-
readonly maxOutput?: MaxOutputConfig;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
export interface AdmittedResult {
|
|
250
|
-
readonly admitted?: AdmittedChild;
|
|
251
|
-
readonly refusal?: AdmissionRefusal;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
export interface AdmissionRefusal {
|
|
255
|
-
readonly kind: NativeAdmissionResult["refusal"] extends infer R ? (R extends { kind: infer K } ? K : never) : never;
|
|
256
|
-
readonly reason: string;
|
|
257
|
-
readonly maxDepth?: number;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
const EMPTY_STATS: AttemptStats = {
|
|
261
|
-
sessionFile: undefined,
|
|
262
|
-
sessionId: "",
|
|
263
|
-
userMessages: 0,
|
|
264
|
-
assistantMessages: 0,
|
|
265
|
-
toolCalls: 0,
|
|
266
|
-
toolResults: 0,
|
|
267
|
-
totalMessages: 0,
|
|
268
|
-
tokens: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
|
|
269
|
-
cost: 0,
|
|
270
|
-
};
|
|
271
|
-
|
|
272
|
-
const CAPACITY_RETRY_INITIAL_DELAY_MS = 5;
|
|
273
|
-
const INTERRUPTED_ENVELOPE = "Interrupted";
|
|
274
|
-
const CAPACITY_RETRY_MAX_DELAY_MS = 100;
|
|
275
|
-
|
|
276
|
-
type CapacityWaitResult = "retry" | "abort" | "interrupt";
|
|
277
|
-
|
|
278
|
-
function waitForExecutionCapacity(delayMs: number, signals: AttemptSignals): Promise<CapacityWaitResult> {
|
|
279
|
-
if (signals.interrupt.aborted) return Promise.resolve("interrupt");
|
|
280
|
-
if (signals.abort.aborted) return Promise.resolve("abort");
|
|
281
|
-
return new Promise((resolveWait) => {
|
|
282
|
-
let settled = false;
|
|
283
|
-
let timer: ReturnType<typeof setTimeout>;
|
|
284
|
-
const settle = (result: CapacityWaitResult) => {
|
|
285
|
-
if (settled) return;
|
|
286
|
-
settled = true;
|
|
287
|
-
clearTimeout(timer);
|
|
288
|
-
signals.abort.removeEventListener("abort", onAbort);
|
|
289
|
-
signals.interrupt.removeEventListener("abort", onInterrupt);
|
|
290
|
-
resolveWait(result);
|
|
291
|
-
};
|
|
292
|
-
const onAbort = () => settle("abort");
|
|
293
|
-
const onInterrupt = () => settle("interrupt");
|
|
294
|
-
signals.abort.addEventListener("abort", onAbort, { once: true });
|
|
295
|
-
signals.interrupt.addEventListener("abort", onInterrupt, { once: true });
|
|
296
|
-
timer = setTimeout(() => settle("retry"), delayMs);
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
function workflowMetadataFromContext(
|
|
301
|
-
context: CreateAgentSessionOptions["orchestrationContext"] | undefined,
|
|
302
|
-
): { runId: string; stageId: string; stageName: string } | undefined {
|
|
303
|
-
if (context?.kind !== "workflow-stage") return undefined;
|
|
304
|
-
return {
|
|
305
|
-
runId: context.workflowRunId,
|
|
306
|
-
stageId: context.workflowStageId,
|
|
307
|
-
stageName: context.workflowStageName,
|
|
308
|
-
};
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
/**
|
|
312
|
-
* In-process children must load the same bundled extensions as the host.
|
|
313
|
-
* Workflow extensions are disabled inside workflow-owned sessions because their
|
|
314
|
-
* startup lifecycle belongs to the parent workflow store.
|
|
315
|
-
*/
|
|
316
|
-
export function inProcessChildBuiltinPackagePaths(
|
|
317
|
-
context: CreateAgentSessionOptions["orchestrationContext"] | undefined,
|
|
318
|
-
): PackageSource[] {
|
|
319
|
-
return getBuiltinPackagePaths().map((source) => {
|
|
320
|
-
if (context?.kind !== "workflow-stage" || basename(source) !== "workflows") return source;
|
|
321
|
-
return { source, extensions: [] };
|
|
322
|
-
});
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
/**
|
|
326
|
-
* Resource-loading options for a real (non-test) in-process child session.
|
|
327
|
-
* Omitting `builtinPackagePaths` leaves a child with no bundled extension at
|
|
328
|
-
* all — no `subagent`, `web_search`, `fetch_content`, or `intercom` — so the
|
|
329
|
-
* bundled roots belong in every child loader.
|
|
330
|
-
*/
|
|
331
|
-
export function inProcessChildResourceLoaderOptions(input: {
|
|
332
|
-
readonly cwd: string;
|
|
333
|
-
readonly agentDir: string;
|
|
334
|
-
readonly settingsManager: SettingsManager;
|
|
335
|
-
readonly agent: Pick<AgentConfig, "systemPrompt" | "systemPromptMode">;
|
|
336
|
-
readonly orchestrationContext: CreateAgentSessionOptions["orchestrationContext"] | undefined;
|
|
337
|
-
}): ConstructorParameters<typeof DefaultResourceLoader>[0] {
|
|
338
|
-
const agentPrompt = input.agent.systemPrompt?.trim();
|
|
339
|
-
return {
|
|
340
|
-
cwd: input.cwd,
|
|
341
|
-
agentDir: input.agentDir,
|
|
342
|
-
settingsManager: input.settingsManager,
|
|
343
|
-
builtinPackagePaths: inProcessChildBuiltinPackagePaths(input.orchestrationContext),
|
|
344
|
-
...(agentPrompt && input.agent.systemPromptMode === "append"
|
|
345
|
-
? { appendSystemPrompt: [agentPrompt] }
|
|
346
|
-
: agentPrompt
|
|
347
|
-
? { systemPrompt: agentPrompt }
|
|
348
|
-
: {}),
|
|
349
|
-
};
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
function createTestSession(sessionManager: SessionManager, spec: ChildSpec): AgentSession {
|
|
353
|
-
const listeners = new Set<AgentSessionEventListener>();
|
|
354
|
-
const testOptions = typeof spec.testSession === "object" ? spec.testSession : {};
|
|
355
|
-
const sessionModel = (() => {
|
|
356
|
-
const fullId = testOptions.sessionModel;
|
|
357
|
-
if (!fullId) return undefined;
|
|
358
|
-
const slash = fullId.indexOf("/");
|
|
359
|
-
return {
|
|
360
|
-
provider: slash === -1 ? "" : fullId.slice(0, slash),
|
|
361
|
-
id: slash === -1 ? fullId : fullId.slice(slash + 1),
|
|
362
|
-
};
|
|
363
|
-
})();
|
|
364
|
-
let lastAssistantText = "";
|
|
365
|
-
let aborted = false;
|
|
366
|
-
let settlePromptAbort: (() => void) | undefined;
|
|
367
|
-
const promptAbort = new Promise<"aborted">((resolve, reject) => {
|
|
368
|
-
settlePromptAbort = () => {
|
|
369
|
-
if (testOptions.abortResolvesPrompt) resolve("aborted");
|
|
370
|
-
else reject(new Error("aborted"));
|
|
371
|
-
};
|
|
372
|
-
});
|
|
373
|
-
let userMessages = 0;
|
|
374
|
-
let assistantMessages = 0;
|
|
375
|
-
const zeroTokens = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 };
|
|
376
|
-
const zeroCost = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 };
|
|
377
|
-
return {
|
|
378
|
-
sessionFile: sessionManager.getSessionFile(),
|
|
379
|
-
model: sessionModel,
|
|
380
|
-
thinkingLevel: testOptions.sessionThinkingLevel,
|
|
381
|
-
abort: async () => {
|
|
382
|
-
aborted = true;
|
|
383
|
-
settlePromptAbort?.();
|
|
384
|
-
},
|
|
385
|
-
subscribe(listener: AgentSessionEventListener) {
|
|
386
|
-
listeners.add(listener);
|
|
387
|
-
return () => listeners.delete(listener);
|
|
388
|
-
},
|
|
389
|
-
prompt: async (text: string) => {
|
|
390
|
-
for (const listener of listeners) listener({ type: "agent_start" } as AgentSessionEvent);
|
|
391
|
-
if (aborted) throw new Error("aborted");
|
|
392
|
-
if (testOptions.promptLogPath) appendFileSync(testOptions.promptLogPath, `${text}\n---PROMPT---\n`, "utf8");
|
|
393
|
-
sessionManager.appendMessage({ role: "user", content: text, timestamp: Date.now() });
|
|
394
|
-
userMessages += 1;
|
|
395
|
-
if (testOptions.promptGate) {
|
|
396
|
-
const gateResult = await Promise.race([
|
|
397
|
-
testOptions.promptGate.then(() => "released" as const),
|
|
398
|
-
promptAbort,
|
|
399
|
-
]);
|
|
400
|
-
if (gateResult === "aborted") return "";
|
|
401
|
-
}
|
|
402
|
-
for (const event of testOptions.events ?? []) {
|
|
403
|
-
for (const listener of listeners) listener(event);
|
|
404
|
-
}
|
|
405
|
-
if (testOptions.fallbackModel) {
|
|
406
|
-
for (const listener of listeners) {
|
|
407
|
-
listener({
|
|
408
|
-
type: "model_fallback_start",
|
|
409
|
-
from: "openai/gpt-5.1-codex",
|
|
410
|
-
to: testOptions.fallbackModel,
|
|
411
|
-
reason: "test fallback",
|
|
412
|
-
attempt: 1,
|
|
413
|
-
} as AgentSessionEvent);
|
|
414
|
-
if (testOptions.fallbackThinkingLevel) {
|
|
415
|
-
listener({
|
|
416
|
-
type: "thinking_level_changed",
|
|
417
|
-
level: testOptions.fallbackThinkingLevel,
|
|
418
|
-
} as AgentSessionEvent);
|
|
419
|
-
}
|
|
420
|
-
listener({
|
|
421
|
-
type: "tool_execution_start",
|
|
422
|
-
toolCallId: "test-fallback-tool",
|
|
423
|
-
toolName: "test-fallback-tool",
|
|
424
|
-
args: {},
|
|
425
|
-
} as AgentSessionEvent);
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
lastAssistantText = testOptions.output ?? "done";
|
|
429
|
-
sessionManager.appendMessage({
|
|
430
|
-
role: "assistant",
|
|
431
|
-
content: [{ type: "text", text: lastAssistantText }],
|
|
432
|
-
api: "openai-responses",
|
|
433
|
-
provider: "openai",
|
|
434
|
-
model: "gpt-5.4",
|
|
435
|
-
usage: {
|
|
436
|
-
input: 0,
|
|
437
|
-
output: 0,
|
|
438
|
-
cacheRead: 0,
|
|
439
|
-
cacheWrite: 0,
|
|
440
|
-
totalTokens: 0,
|
|
441
|
-
cost: zeroCost,
|
|
442
|
-
},
|
|
443
|
-
stopReason: "stop",
|
|
444
|
-
timestamp: Date.now(),
|
|
445
|
-
});
|
|
446
|
-
assistantMessages += 1;
|
|
447
|
-
return lastAssistantText;
|
|
448
|
-
},
|
|
449
|
-
getLastAssistantText: () => lastAssistantText,
|
|
450
|
-
getSessionStats: () => ({
|
|
451
|
-
sessionFile: sessionManager.getSessionFile(),
|
|
452
|
-
sessionId: sessionManager.getSessionId(),
|
|
453
|
-
userMessages,
|
|
454
|
-
assistantMessages,
|
|
455
|
-
toolCalls: 0,
|
|
456
|
-
toolResults: 0,
|
|
457
|
-
totalMessages: userMessages + assistantMessages,
|
|
458
|
-
tokens: zeroTokens,
|
|
459
|
-
cost: 0,
|
|
460
|
-
}),
|
|
461
|
-
dispose: () => {},
|
|
462
|
-
} as unknown as AgentSession;
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
function nativeStatus(value: ChildStatus): NativeAgentStatus {
|
|
466
|
-
return value;
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
function nativeCause(value: TerminationCauseName): NativeTerminationCause {
|
|
470
|
-
return value;
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
function refusal(result: NativeAdmissionResult): AdmittedResult {
|
|
474
|
-
if (!result.refusal) return {};
|
|
475
|
-
return {
|
|
476
|
-
refusal: {
|
|
477
|
-
kind: result.refusal.kind,
|
|
478
|
-
reason: result.refusal.reason,
|
|
479
|
-
...(result.refusal.maxDepth === undefined ? {} : { maxDepth: result.refusal.maxDepth }),
|
|
480
|
-
},
|
|
481
|
-
};
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
function statsFor(session: AgentSession | undefined, fallbackSessionId: string): AttemptStats {
|
|
485
|
-
if (!session) return { ...EMPTY_STATS, sessionId: fallbackSessionId };
|
|
486
|
-
try {
|
|
487
|
-
return session.getSessionStats();
|
|
488
|
-
} catch {
|
|
489
|
-
return {
|
|
490
|
-
...EMPTY_STATS,
|
|
491
|
-
sessionId: fallbackSessionId,
|
|
492
|
-
sessionFile: session.sessionFile,
|
|
493
|
-
};
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
function outputFor(session: AgentSession | undefined): string {
|
|
498
|
-
return session?.getLastAssistantText() ?? "";
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
function boundedEnvelope(output: string, artifactPath?: string, maxOutput?: MaxOutputConfig): string {
|
|
502
|
-
const config = { ...DEFAULT_MAX_OUTPUT, ...maxOutput };
|
|
503
|
-
const result = truncateOutput(output, config, artifactPath);
|
|
504
|
-
return result.truncated && artifactPath ? `${result.text}\n\nFull output: ${artifactPath}` : result.text;
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
function canonicalArtifactPaths(artifactsDir: string, childPath: string): ArtifactPaths {
|
|
508
|
-
const prefix = childPath.replaceAll("/", "_");
|
|
509
|
-
return {
|
|
510
|
-
inputPath: join(artifactsDir, `${prefix}_input.md`),
|
|
511
|
-
outputPath: join(artifactsDir, `${prefix}_output.md`),
|
|
512
|
-
jsonlPath: join(artifactsDir, `${prefix}.jsonl`),
|
|
513
|
-
metadataPath: join(artifactsDir, `${prefix}_meta.json`),
|
|
514
|
-
};
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
function validatePath(pathValue: string): void {
|
|
518
|
-
if (
|
|
519
|
-
!pathValue ||
|
|
520
|
-
pathValue.startsWith("/") ||
|
|
521
|
-
pathValue.includes("\\") ||
|
|
522
|
-
pathValue.split("/").some((part) => !part || part === "." || part === "..")
|
|
523
|
-
) {
|
|
524
|
-
throw new Error("child path is outside the trusted session root");
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
function trustedSessionRoot(parent: ParentContext, requestedRoot?: string): string {
|
|
529
|
-
validatePath(parent.path);
|
|
530
|
-
const root = resolve(requestedRoot ?? join(process.cwd(), ".atomic", "subagents"));
|
|
531
|
-
const child = resolve(root, ...parent.path.split("/"));
|
|
532
|
-
if (relative(root, child).startsWith("..")) throw new Error("subagent session root escapes trusted root");
|
|
533
|
-
return root;
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
function sessionDirectory(root: string, pathValue: string): string {
|
|
537
|
-
validatePath(pathValue);
|
|
538
|
-
const directory = resolve(root, ...pathValue.split("/"));
|
|
539
|
-
if (relative(root, directory).startsWith("..")) throw new Error("child session path escapes trusted root");
|
|
540
|
-
return directory;
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
function safeArgsPreview(args: unknown): string {
|
|
544
|
-
if (args === undefined) return "";
|
|
545
|
-
try {
|
|
546
|
-
const text = typeof args === "string" ? args : JSON.stringify(args);
|
|
547
|
-
return text.length > 200 ? `${text.slice(0, 200)}…` : text;
|
|
548
|
-
} catch {
|
|
549
|
-
return "";
|
|
550
|
-
}
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
/**
|
|
554
|
-
* How a child session event should publish {@link AgentProgress} to the host UI.
|
|
555
|
-
*
|
|
556
|
-
* - `force` — the event changed progress the live widget shows; bypass the throttle.
|
|
557
|
-
* - `throttled` — worth publishing, but subject to the 400 ms throttle.
|
|
558
|
-
* - `none` — carries nothing the widget shows; do not publish.
|
|
559
|
-
*
|
|
560
|
-
* `none` is the important case. Foreground subagent results render into chat
|
|
561
|
-
* scrollback, which can sit above pi-tui's viewport fold. Every publish rewrites
|
|
562
|
-
* `durationMs`/`lastActivityAt` and repaints the widget, and a repaint of a row
|
|
563
|
-
* above the fold makes `TUI.doRender()` take its `firstChanged < viewportTop`
|
|
564
|
-
* branch, which issues a full redraw that writes `\x1b[2J\x1b[H\x1b[3J` — clearing
|
|
565
|
-
* the user's scrollback and snapping the terminal to the bottom. A catch-all
|
|
566
|
-
* publish therefore destroyed the scrollback ~2.5x/s for the whole run, because
|
|
567
|
-
* `AgentSessionEvent` includes high-frequency traffic (`message_update` streaming
|
|
568
|
-
* deltas, `tool_execution_update`, `entry_appended`) that the widget never shows.
|
|
569
|
-
* Keep this table narrow: add an event only when the widget renders something the
|
|
570
|
-
* event changed.
|
|
571
|
-
*/
|
|
572
|
-
export type ProgressEmission = "force" | "throttled" | "none";
|
|
573
|
-
|
|
574
|
-
export function progressEmissionFor(eventType: AgentSessionEvent["type"]): ProgressEmission {
|
|
575
|
-
switch (eventType) {
|
|
576
|
-
case "agent_start":
|
|
577
|
-
case "tool_execution_start":
|
|
578
|
-
case "tool_execution_end":
|
|
579
|
-
return "force";
|
|
580
|
-
case "message_end":
|
|
581
|
-
return "throttled";
|
|
582
|
-
default:
|
|
583
|
-
return "none";
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
function writeEvent(pathValue: string | undefined, event: AgentSessionEvent): void {
|
|
588
|
-
if (!pathValue) return;
|
|
589
|
-
const line = `${JSON.stringify(event)}\n`;
|
|
590
|
-
let existingBytes = 0;
|
|
591
|
-
try {
|
|
592
|
-
existingBytes = statSync(pathValue).size;
|
|
593
|
-
} catch (error) {
|
|
594
|
-
if ((error as NodeJS.ErrnoException).code !== "ENOENT") throw error;
|
|
595
|
-
}
|
|
596
|
-
if (existingBytes + Buffer.byteLength(line, "utf8") > DEFAULT_MAX_JSONL_BYTES) return;
|
|
597
|
-
mkdirSync(dirname(pathValue), { recursive: true });
|
|
598
|
-
appendFileSync(pathValue, line, "utf8");
|
|
599
|
-
}
|
|
600
|
-
|
|
601
|
-
/**
|
|
602
|
-
* A child identity whose constructor is private. Depth and path validation happen
|
|
603
|
-
* at the Rust admission door, so callers cannot manufacture an admitted child
|
|
604
|
-
* below the single permitted delegation level or bypass canonical identity
|
|
605
|
-
* allocation.
|
|
606
|
-
*/
|
|
607
|
-
interface AdmittedChildInput {
|
|
608
|
-
readonly identity: ChildIdentity;
|
|
609
|
-
readonly spec: ChildSpec;
|
|
610
|
-
readonly policy: ChildPolicy;
|
|
611
|
-
readonly sessionDir: string;
|
|
612
|
-
readonly sessionFile?: string;
|
|
613
|
-
readonly control: SubagentControlRuntime;
|
|
614
|
-
}
|
|
615
|
-
|
|
616
|
-
export class AdmittedChild {
|
|
617
|
-
readonly identity: ChildIdentity;
|
|
618
|
-
readonly spec: ChildSpec;
|
|
619
|
-
readonly policy: ChildPolicy;
|
|
620
|
-
readonly sessionDir: string;
|
|
621
|
-
readonly sessionFile?: string;
|
|
622
|
-
readonly control: SubagentControlRuntime;
|
|
623
|
-
|
|
624
|
-
private constructor(input: {
|
|
625
|
-
identity: ChildIdentity;
|
|
626
|
-
spec: ChildSpec;
|
|
627
|
-
policy: ChildPolicy;
|
|
628
|
-
sessionDir: string;
|
|
629
|
-
sessionFile?: string;
|
|
630
|
-
control: SubagentControlRuntime;
|
|
631
|
-
}) {
|
|
632
|
-
this.identity = input.identity;
|
|
633
|
-
this.spec = input.spec;
|
|
634
|
-
this.policy = input.policy;
|
|
635
|
-
this.sessionDir = input.sessionDir;
|
|
636
|
-
this.sessionFile = input.sessionFile;
|
|
637
|
-
this.control = input.control;
|
|
638
|
-
}
|
|
639
|
-
|
|
640
|
-
static create(input: AdmittedChildInput): AdmittedChild {
|
|
641
|
-
if (input.identity.depth > 1) throw new Error("child depth exceeds maximum 1");
|
|
642
|
-
validatePath(input.identity.path);
|
|
643
|
-
return new AdmittedChild(input);
|
|
644
|
-
}
|
|
645
|
-
}
|
|
646
|
-
|
|
647
|
-
export interface ChildRuntimeMetadata {
|
|
648
|
-
model?: string;
|
|
649
|
-
thinking?: string;
|
|
650
|
-
fastMode?: boolean;
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
export interface RunningAttempt {
|
|
654
|
-
readonly id: number;
|
|
655
|
-
readonly child: AdmittedChild;
|
|
656
|
-
readonly candidate: ModelCandidate;
|
|
657
|
-
readonly startedAt: number;
|
|
658
|
-
currentModel?: string;
|
|
659
|
-
currentThinking?: string;
|
|
660
|
-
currentFastMode?: boolean;
|
|
661
|
-
status: "running" | ChildStatus;
|
|
662
|
-
promise: Promise<AttemptOutcome>;
|
|
663
|
-
terminate?: (cause: TerminationCauseName) => Promise<void>;
|
|
664
|
-
attemptToken?: number;
|
|
665
|
-
}
|
|
666
|
-
|
|
667
|
-
export interface StartAttemptOptions {
|
|
668
|
-
readonly fastModeForModel?: (model: string | undefined) => boolean;
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
export class SubagentControlRuntime {
|
|
672
|
-
readonly native: SubagentControl;
|
|
673
|
-
readonly parent: ParentContext;
|
|
674
|
-
readonly sessionRoot: string;
|
|
675
|
-
private readonly runningAttempts = new Map<number, RunningAttempt>();
|
|
676
|
-
private readonly attemptTokens = new Map<string, number>();
|
|
677
|
-
private readonly attemptTerminators = new Map<string, (cause: TerminationCauseName) => Promise<void>>();
|
|
678
|
-
private readonly delivered = new Set<string>();
|
|
679
|
-
private readonly deliveredEnvelopes = new Map<string, ResultEnvelope>();
|
|
680
|
-
private nextAttemptId = 1;
|
|
681
|
-
|
|
682
|
-
constructor(parent: ParentContext, sessionRoot?: string) {
|
|
683
|
-
this.parent = { ...parent };
|
|
684
|
-
this.sessionRoot = trustedSessionRoot(this.parent, sessionRoot);
|
|
685
|
-
this.native = new SubagentControl(this.parent.path);
|
|
686
|
-
}
|
|
687
|
-
|
|
688
|
-
registerAgents(agents: readonly AgentConfig[]): void {
|
|
689
|
-
for (const agent of agents) this.native.registerAgent(agent.name);
|
|
690
|
-
}
|
|
691
|
-
|
|
692
|
-
admitChildSession(spec: ChildSpec, parent: ParentContext = this.parent): AdmittedResult {
|
|
693
|
-
if (!existsSync(spec.cwd) || !statSync(spec.cwd).isDirectory()) {
|
|
694
|
-
return {
|
|
695
|
-
refusal: {
|
|
696
|
-
kind: "invalidCwd",
|
|
697
|
-
reason: `cwd is not a directory: ${spec.cwd}`,
|
|
698
|
-
},
|
|
699
|
-
};
|
|
700
|
-
}
|
|
701
|
-
const native = this.native.admitChildSession(
|
|
702
|
-
{ taskName: spec.taskName, agentName: spec.agent.name, cwd: spec.cwd },
|
|
703
|
-
{ path: parent.path, depth: parent.depth },
|
|
704
|
-
);
|
|
705
|
-
if (!native.child) return refusal(native);
|
|
706
|
-
const identity = native.child;
|
|
707
|
-
const childModePolicy = resolveChildModePolicy(spec);
|
|
708
|
-
const sessionDir = spec.sessionFile
|
|
709
|
-
? dirname(spec.sessionFile)
|
|
710
|
-
: sessionDirectory(this.sessionRoot, identity.path);
|
|
711
|
-
mkdirSync(sessionDir, { recursive: true });
|
|
712
|
-
return {
|
|
713
|
-
admitted: AdmittedChild.create({
|
|
714
|
-
identity,
|
|
715
|
-
spec,
|
|
716
|
-
policy: {
|
|
717
|
-
...childModePolicy,
|
|
718
|
-
cwd: spec.cwd,
|
|
719
|
-
tools: spec.tools ?? spec.agent.tools,
|
|
720
|
-
excludedTools: spec.excludedTools,
|
|
721
|
-
mcpDirectTools: spec.mcpDirectTools ?? spec.agent.mcpDirectTools,
|
|
722
|
-
skills: [...(spec.skills ?? spec.agent.skills ?? [])],
|
|
723
|
-
customTools: spec.customTools,
|
|
724
|
-
model: spec.model,
|
|
725
|
-
thinkingLevel: spec.thinkingLevel ?? (spec.agent.thinking as ChildPolicy["thinkingLevel"]),
|
|
726
|
-
intercomGroup: parent.intercomGroup,
|
|
727
|
-
intercom: spec.intercom,
|
|
728
|
-
depth: identity.depth,
|
|
729
|
-
},
|
|
730
|
-
sessionDir,
|
|
731
|
-
sessionFile: spec.sessionFile,
|
|
732
|
-
control: this,
|
|
733
|
-
}),
|
|
734
|
-
};
|
|
735
|
-
}
|
|
736
|
-
|
|
737
|
-
async runChildAttempt(
|
|
738
|
-
admitted: AdmittedChild,
|
|
739
|
-
candidate: ModelCandidate,
|
|
740
|
-
signals: AttemptSignals,
|
|
741
|
-
onModelChange: ((model: string | undefined, thinking?: string, fastMode?: boolean) => void) | undefined,
|
|
742
|
-
fastModeForModel: (model: string | undefined) => boolean,
|
|
743
|
-
): Promise<AttemptOutcome> {
|
|
744
|
-
const candidateModelId = modelIdForCandidate(candidate, admitted.policy.model);
|
|
745
|
-
const configuredThinking = candidate.thinkingLevel ?? admitted.policy.thinkingLevel;
|
|
746
|
-
let effectiveModelId = candidateModelId;
|
|
747
|
-
let effectiveThinking = initialThinkingForAttempt(candidateModelId, configuredThinking);
|
|
748
|
-
let attemptedModels: string[] = candidateModelId ? [candidateModelId] : [];
|
|
749
|
-
let guard: NativeExecutionGuardResult;
|
|
750
|
-
let retryDelayMs = CAPACITY_RETRY_INITIAL_DELAY_MS;
|
|
751
|
-
for (;;) {
|
|
752
|
-
guard = this.native.beginChildAttempt(admitted.identity.path);
|
|
753
|
-
if (guard.token || guard.refusal?.kind !== "capacityExhausted") break;
|
|
754
|
-
const waitResult = await waitForExecutionCapacity(retryDelayMs, signals);
|
|
755
|
-
if (waitResult !== "retry") {
|
|
756
|
-
const stats = { ...EMPTY_STATS, sessionId: admitted.identity.path };
|
|
757
|
-
const status = waitResult === "interrupt" ? "interrupted" : "error";
|
|
758
|
-
this.native.publishChildStatus(admitted.identity.path, nativeStatus(status));
|
|
759
|
-
return status === "interrupted"
|
|
760
|
-
? {
|
|
761
|
-
status,
|
|
762
|
-
stats,
|
|
763
|
-
path: admitted.identity.path,
|
|
764
|
-
envelope: INTERRUPTED_ENVELOPE,
|
|
765
|
-
...(effectiveModelId === undefined ? {} : { model: effectiveModelId }),
|
|
766
|
-
...(effectiveThinking === undefined ? {} : { thinking: effectiveThinking }),
|
|
767
|
-
}
|
|
768
|
-
: {
|
|
769
|
-
status,
|
|
770
|
-
cause: waitResult,
|
|
771
|
-
stats,
|
|
772
|
-
path: admitted.identity.path,
|
|
773
|
-
envelope: boundedEnvelope(waitResult),
|
|
774
|
-
...(effectiveModelId === undefined ? {} : { model: effectiveModelId }),
|
|
775
|
-
...(effectiveThinking === undefined ? {} : { thinking: effectiveThinking }),
|
|
776
|
-
};
|
|
777
|
-
}
|
|
778
|
-
retryDelayMs = Math.min(retryDelayMs * 2, CAPACITY_RETRY_MAX_DELAY_MS);
|
|
779
|
-
}
|
|
780
|
-
if (!guard.token) {
|
|
781
|
-
const reason = guard.refusal?.reason ?? "child execution was refused";
|
|
782
|
-
const stats = { ...EMPTY_STATS, sessionId: admitted.identity.path };
|
|
783
|
-
this.native.publishChildStatus(admitted.identity.path, nativeStatus("error"));
|
|
784
|
-
return {
|
|
785
|
-
status: "error",
|
|
786
|
-
cause: reason,
|
|
787
|
-
stats,
|
|
788
|
-
path: admitted.identity.path,
|
|
789
|
-
envelope: boundedEnvelope(reason),
|
|
790
|
-
...(effectiveModelId === undefined ? {} : { model: effectiveModelId }),
|
|
791
|
-
...(effectiveThinking === undefined ? {} : { thinking: effectiveThinking }),
|
|
792
|
-
};
|
|
793
|
-
}
|
|
794
|
-
const token = guard.token;
|
|
795
|
-
this.attemptTokens.set(admitted.identity.path, token);
|
|
796
|
-
let session: AgentSession | undefined;
|
|
797
|
-
let activeSessionManager: SessionManager | undefined;
|
|
798
|
-
let termination: TerminationCauseName | undefined;
|
|
799
|
-
let terminating: Promise<void> | undefined;
|
|
800
|
-
let unsubscribe: (() => void) | undefined;
|
|
801
|
-
let skillReport: AttemptSkillReport = {};
|
|
802
|
-
const terminate = async (cause: TerminationCauseName): Promise<void> => {
|
|
803
|
-
if (terminating) return terminating;
|
|
804
|
-
termination = cause;
|
|
805
|
-
terminating = (async () => {
|
|
806
|
-
try {
|
|
807
|
-
activeSessionManager?.flush();
|
|
808
|
-
await session?.abort();
|
|
809
|
-
} finally {
|
|
810
|
-
try {
|
|
811
|
-
await this.native.terminateChildAttempt(token, nativeCause(cause));
|
|
812
|
-
} catch {
|
|
813
|
-
// The attempt may have completed between signal delivery and termination.
|
|
814
|
-
}
|
|
815
|
-
}
|
|
816
|
-
})();
|
|
817
|
-
return terminating;
|
|
818
|
-
};
|
|
819
|
-
this.attemptTerminators.set(admitted.identity.path, terminate);
|
|
820
|
-
const abortListener = () => void terminate("abort");
|
|
821
|
-
const interruptListener = () => void terminate("interrupt");
|
|
822
|
-
signals.abort.addEventListener("abort", abortListener, { once: true });
|
|
823
|
-
signals.interrupt.addEventListener("abort", interruptListener, {
|
|
824
|
-
once: true,
|
|
825
|
-
});
|
|
826
|
-
try {
|
|
827
|
-
const workflow = workflowMetadataFromContext(admitted.spec.parent?.orchestrationContext);
|
|
828
|
-
if (admitted.sessionFile) mkdirSync(dirname(admitted.sessionFile), { recursive: true });
|
|
829
|
-
const sessionManager = admitted.sessionFile
|
|
830
|
-
? SessionManager.open(admitted.sessionFile, admitted.sessionDir, admitted.policy.cwd)
|
|
831
|
-
: SessionManager.create(
|
|
832
|
-
admitted.policy.cwd,
|
|
833
|
-
admitted.sessionDir,
|
|
834
|
-
workflow ? { internal: true, workflow } : { internal: true },
|
|
835
|
-
);
|
|
836
|
-
activeSessionManager = sessionManager;
|
|
837
|
-
if (workflow) sessionManager.markSessionInternal(workflow);
|
|
838
|
-
let created: { session: AgentSession };
|
|
839
|
-
if (admitted.spec.testSession) {
|
|
840
|
-
created = { session: createTestSession(sessionManager, admitted.spec) };
|
|
841
|
-
} else {
|
|
842
|
-
const settingsManager = SettingsManager.create(admitted.policy.cwd, getAgentDir());
|
|
843
|
-
const resourceLoader = new DefaultResourceLoader(
|
|
844
|
-
inProcessChildResourceLoaderOptions({
|
|
845
|
-
cwd: admitted.policy.cwd,
|
|
846
|
-
agentDir: getAgentDir(),
|
|
847
|
-
settingsManager,
|
|
848
|
-
agent: admitted.spec.agent,
|
|
849
|
-
orchestrationContext: admitted.spec.parent?.orchestrationContext,
|
|
850
|
-
}),
|
|
851
|
-
);
|
|
852
|
-
await resourceLoader.reload();
|
|
853
|
-
const selectedSkills = resolveSkillsFromCatalog(
|
|
854
|
-
[...admitted.policy.skills],
|
|
855
|
-
resourceLoader.getSkillCatalog(),
|
|
856
|
-
admitted.policy.cwd,
|
|
857
|
-
);
|
|
858
|
-
skillReport = {
|
|
859
|
-
...(selectedSkills.resolved.length > 0
|
|
860
|
-
? { skills: selectedSkills.resolved.map((skill) => skill.name) }
|
|
861
|
-
: {}),
|
|
862
|
-
...(selectedSkills.missing.length > 0
|
|
863
|
-
? { skillsWarning: `Skills not found: ${selectedSkills.missing.join(", ")}` }
|
|
864
|
-
: {}),
|
|
865
|
-
};
|
|
866
|
-
if (selectedSkills.missing.some(isSubagentOrchestrationSkillSelector)) {
|
|
867
|
-
throw new Error("Skills not found: subagent");
|
|
868
|
-
}
|
|
869
|
-
const skillInjection = buildSkillInjection(selectedSkills.resolved);
|
|
870
|
-
const promptBehavior = createInProcessChildPromptBehavior(admitted.policy);
|
|
871
|
-
const systemPromptTransform = createInProcessChildSystemPromptTransform(admitted.policy, skillInjection);
|
|
872
|
-
created = {
|
|
873
|
-
session: (
|
|
874
|
-
await createAgentSession({
|
|
875
|
-
cwd: admitted.policy.cwd,
|
|
876
|
-
model: candidate.model ?? admitted.policy.model,
|
|
877
|
-
thinkingLevel: candidate.thinkingLevel ?? admitted.policy.thinkingLevel,
|
|
878
|
-
...(admitted.spec.fallbackModels?.length
|
|
879
|
-
? { fallbackModels: [...admitted.spec.fallbackModels] }
|
|
880
|
-
: {}),
|
|
881
|
-
tools: admitted.policy.tools ? [...admitted.policy.tools] : undefined,
|
|
882
|
-
excludedTools: admitted.policy.excludedTools ? [...admitted.policy.excludedTools] : undefined,
|
|
883
|
-
customTools: admitted.policy.customTools,
|
|
884
|
-
resourceLoader,
|
|
885
|
-
sessionManager,
|
|
886
|
-
settingsManager,
|
|
887
|
-
orchestrationContext: admitted.spec.parent?.orchestrationContext,
|
|
888
|
-
subagentPolicy: admitted.policy,
|
|
889
|
-
systemPromptTransform,
|
|
890
|
-
initialContextTransform: promptBehavior.initialContextTransform,
|
|
891
|
-
})
|
|
892
|
-
).session,
|
|
893
|
-
};
|
|
894
|
-
await created.session.extensionRunner.emit({ type: "session_start", reason: "startup" });
|
|
895
|
-
}
|
|
896
|
-
session = created.session;
|
|
897
|
-
const initialModelId = modelIdForSession(session) ?? candidateModelId;
|
|
898
|
-
effectiveModelId = initialModelId;
|
|
899
|
-
effectiveThinking =
|
|
900
|
-
thinkingLevelForSession(session) ?? initialThinkingForAttempt(candidateModelId, configuredThinking);
|
|
901
|
-
attemptedModels = initialModelId ? [initialModelId] : [];
|
|
902
|
-
onModelChange?.(effectiveModelId, effectiveThinking, fastModeForModel(effectiveModelId));
|
|
903
|
-
const progressState: AgentProgress = {
|
|
904
|
-
index: 0,
|
|
905
|
-
agent: admitted.spec.agent.name,
|
|
906
|
-
status: "running",
|
|
907
|
-
...(initialModelId === undefined ? {} : { model: initialModelId }),
|
|
908
|
-
...(effectiveThinking === undefined ? {} : { thinking: effectiveThinking }),
|
|
909
|
-
fastMode: fastModeForModel(initialModelId),
|
|
910
|
-
task: admitted.spec.task,
|
|
911
|
-
recentTools: [],
|
|
912
|
-
recentOutput: [],
|
|
913
|
-
toolCount: 0,
|
|
914
|
-
tokens: 0,
|
|
915
|
-
durationMs: 0,
|
|
916
|
-
lastActivityAt: Date.now(),
|
|
917
|
-
};
|
|
918
|
-
const attemptStartedAt = Date.now();
|
|
919
|
-
let lastProgressEmit = 0;
|
|
920
|
-
const emitProgress = (force: boolean) => {
|
|
921
|
-
const onProgress = admitted.spec.onProgress;
|
|
922
|
-
if (!onProgress) return;
|
|
923
|
-
const now = Date.now();
|
|
924
|
-
if (!force && now - lastProgressEmit < 400) return;
|
|
925
|
-
lastProgressEmit = now;
|
|
926
|
-
progressState.durationMs = now - attemptStartedAt;
|
|
927
|
-
progressState.lastActivityAt = now;
|
|
928
|
-
onProgress({ ...progressState, recentTools: [...progressState.recentTools] });
|
|
929
|
-
};
|
|
930
|
-
unsubscribe = session.subscribe((event) => {
|
|
931
|
-
writeEvent(admitted.spec.artifactJsonlPath, event);
|
|
932
|
-
const emission = progressEmissionFor(event.type);
|
|
933
|
-
if (event.type === "agent_start") {
|
|
934
|
-
this.native.publishChildStatus(admitted.identity.path, nativeStatus("running"));
|
|
935
|
-
} else if (event.type === "tool_execution_start") {
|
|
936
|
-
progressState.toolCount += 1;
|
|
937
|
-
progressState.currentTool = event.toolName;
|
|
938
|
-
progressState.currentToolArgs = safeArgsPreview(event.args);
|
|
939
|
-
progressState.currentToolStartedAt = Date.now();
|
|
940
|
-
} else if (event.type === "tool_execution_end") {
|
|
941
|
-
if (progressState.currentTool !== undefined) {
|
|
942
|
-
progressState.recentTools.push({
|
|
943
|
-
tool: progressState.currentTool,
|
|
944
|
-
args: progressState.currentToolArgs ?? "",
|
|
945
|
-
endMs: Date.now(),
|
|
946
|
-
});
|
|
947
|
-
if (progressState.recentTools.length > 5) progressState.recentTools.shift();
|
|
948
|
-
}
|
|
949
|
-
progressState.currentTool = undefined;
|
|
950
|
-
progressState.currentToolArgs = undefined;
|
|
951
|
-
progressState.currentToolStartedAt = undefined;
|
|
952
|
-
} else if (event.type === "message_end") {
|
|
953
|
-
const message = (event as { message?: { role?: string; usage?: { input?: number; output?: number } } })
|
|
954
|
-
.message;
|
|
955
|
-
if (message?.role === "assistant") {
|
|
956
|
-
progressState.turnCount = (progressState.turnCount ?? 0) + 1;
|
|
957
|
-
const usage = message.usage;
|
|
958
|
-
if (usage) progressState.tokens += (usage.input ?? 0) + (usage.output ?? 0);
|
|
959
|
-
}
|
|
960
|
-
}
|
|
961
|
-
if (emission !== "none") emitProgress(emission === "force");
|
|
962
|
-
if (event.type === "model_fallback_start") {
|
|
963
|
-
if (!attemptedModels.includes(event.to)) attemptedModels.push(event.to);
|
|
964
|
-
effectiveModelId = event.to;
|
|
965
|
-
progressState.model = event.to;
|
|
966
|
-
progressState.fastMode = fastModeForModel(event.to);
|
|
967
|
-
onModelChange?.(effectiveModelId, effectiveThinking, progressState.fastMode);
|
|
968
|
-
} else if (event.type === "thinking_level_changed") {
|
|
969
|
-
effectiveThinking = event.level;
|
|
970
|
-
progressState.thinking = effectiveThinking;
|
|
971
|
-
const fastMode = fastModeForModel(effectiveModelId);
|
|
972
|
-
onModelChange?.(effectiveModelId, effectiveThinking, fastMode);
|
|
973
|
-
emitProgress(true);
|
|
974
|
-
}
|
|
975
|
-
});
|
|
976
|
-
if (signals.abort.aborted) await terminate("abort");
|
|
977
|
-
if (signals.interrupt.aborted) await terminate("interrupt");
|
|
978
|
-
await session.prompt(admitted.spec.task);
|
|
979
|
-
await terminating;
|
|
980
|
-
const stats = statsFor(session, admitted.identity.path);
|
|
981
|
-
const sessionFile = session.sessionFile;
|
|
982
|
-
const output = outputFor(session);
|
|
983
|
-
const status: "ok" | "error" | "interrupted" =
|
|
984
|
-
termination === "interrupt" ? "interrupted" : termination ? "error" : "ok";
|
|
985
|
-
this.native.publishChildStatus(admitted.identity.path, nativeStatus(status));
|
|
986
|
-
this.native.finishChildAttempt(token, nativeStatus(status));
|
|
987
|
-
const envelope =
|
|
988
|
-
status === "interrupted"
|
|
989
|
-
? INTERRUPTED_ENVELOPE
|
|
990
|
-
: boundedEnvelope(output || termination || "(no output)", undefined);
|
|
991
|
-
if (status === "ok")
|
|
992
|
-
return {
|
|
993
|
-
status,
|
|
994
|
-
output,
|
|
995
|
-
stats,
|
|
996
|
-
path: admitted.identity.path,
|
|
997
|
-
envelope,
|
|
998
|
-
sessionFile,
|
|
999
|
-
...(effectiveModelId === undefined ? {} : { model: effectiveModelId }),
|
|
1000
|
-
...(effectiveThinking === undefined ? {} : { thinking: effectiveThinking }),
|
|
1001
|
-
...(attemptedModels.length > 1 ? { attemptedModels: [...attemptedModels] } : {}),
|
|
1002
|
-
...skillReport,
|
|
1003
|
-
};
|
|
1004
|
-
return {
|
|
1005
|
-
status,
|
|
1006
|
-
cause: termination ?? "agent session ended without a successful completion",
|
|
1007
|
-
stats,
|
|
1008
|
-
path: admitted.identity.path,
|
|
1009
|
-
envelope,
|
|
1010
|
-
sessionFile,
|
|
1011
|
-
...(effectiveModelId === undefined ? {} : { model: effectiveModelId }),
|
|
1012
|
-
...(effectiveThinking === undefined ? {} : { thinking: effectiveThinking }),
|
|
1013
|
-
...(status === "error" && attemptedModels.length > 1 ? { attemptedModels: [...attemptedModels] } : {}),
|
|
1014
|
-
...skillReport,
|
|
1015
|
-
};
|
|
1016
|
-
} catch (error) {
|
|
1017
|
-
const stats = statsFor(session, admitted.identity.path);
|
|
1018
|
-
const cause = error instanceof Error ? error.message : String(error);
|
|
1019
|
-
const status: "interrupted" | "error" = termination === "interrupt" ? "interrupted" : "error";
|
|
1020
|
-
this.native.publishChildStatus(admitted.identity.path, nativeStatus(status));
|
|
1021
|
-
try {
|
|
1022
|
-
this.native.finishChildAttempt(token, nativeStatus(status));
|
|
1023
|
-
} catch {
|
|
1024
|
-
// Preserve the original failure when Rust already stamped termination.
|
|
1025
|
-
}
|
|
1026
|
-
return status === "interrupted"
|
|
1027
|
-
? {
|
|
1028
|
-
status,
|
|
1029
|
-
stats,
|
|
1030
|
-
path: admitted.identity.path,
|
|
1031
|
-
envelope: INTERRUPTED_ENVELOPE,
|
|
1032
|
-
sessionFile: session?.sessionFile,
|
|
1033
|
-
...(effectiveModelId === undefined ? {} : { model: effectiveModelId }),
|
|
1034
|
-
...(effectiveThinking === undefined ? {} : { thinking: effectiveThinking }),
|
|
1035
|
-
...skillReport,
|
|
1036
|
-
}
|
|
1037
|
-
: {
|
|
1038
|
-
status,
|
|
1039
|
-
cause,
|
|
1040
|
-
stats,
|
|
1041
|
-
path: admitted.identity.path,
|
|
1042
|
-
envelope: boundedEnvelope(cause),
|
|
1043
|
-
sessionFile: session?.sessionFile,
|
|
1044
|
-
...(effectiveModelId === undefined ? {} : { model: effectiveModelId }),
|
|
1045
|
-
...(effectiveThinking === undefined ? {} : { thinking: effectiveThinking }),
|
|
1046
|
-
...(attemptedModels.length > 1 ? { attemptedModels: [...attemptedModels] } : {}),
|
|
1047
|
-
...skillReport,
|
|
1048
|
-
};
|
|
1049
|
-
} finally {
|
|
1050
|
-
signals.abort.removeEventListener("abort", abortListener);
|
|
1051
|
-
signals.interrupt.removeEventListener("abort", interruptListener);
|
|
1052
|
-
try {
|
|
1053
|
-
unsubscribe?.();
|
|
1054
|
-
} catch {
|
|
1055
|
-
// Listener teardown must not replace the attempt result.
|
|
1056
|
-
}
|
|
1057
|
-
try {
|
|
1058
|
-
activeSessionManager?.flush();
|
|
1059
|
-
} catch {
|
|
1060
|
-
// Persistence teardown must not replace the attempt result.
|
|
1061
|
-
}
|
|
1062
|
-
try {
|
|
1063
|
-
session?.dispose();
|
|
1064
|
-
} catch {
|
|
1065
|
-
// Session teardown must not replace the attempt result.
|
|
1066
|
-
}
|
|
1067
|
-
if (this.attemptTokens.get(admitted.identity.path) === token)
|
|
1068
|
-
this.attemptTokens.delete(admitted.identity.path);
|
|
1069
|
-
if (this.attemptTerminators.get(admitted.identity.path) === terminate)
|
|
1070
|
-
this.attemptTerminators.delete(admitted.identity.path);
|
|
1071
|
-
}
|
|
1072
|
-
}
|
|
1073
|
-
|
|
1074
|
-
startAttempt(
|
|
1075
|
-
admitted: AdmittedChild,
|
|
1076
|
-
candidate: ModelCandidate,
|
|
1077
|
-
signals: AttemptSignals,
|
|
1078
|
-
options: StartAttemptOptions = {},
|
|
1079
|
-
): RunningAttempt {
|
|
1080
|
-
const initialModel = modelIdForCandidate(candidate, admitted.policy.model);
|
|
1081
|
-
const initialThinking = initialThinkingForAttempt(
|
|
1082
|
-
initialModel,
|
|
1083
|
-
candidate.thinkingLevel ?? admitted.policy.thinkingLevel,
|
|
1084
|
-
);
|
|
1085
|
-
const fastModeForModel =
|
|
1086
|
-
options.fastModeForModel ??
|
|
1087
|
-
defaultFastModeForChild(
|
|
1088
|
-
admitted.policy.cwd,
|
|
1089
|
-
admitted.spec.parent?.orchestrationContext,
|
|
1090
|
-
admitted.spec.parent?.workflowStageSubagentGuard,
|
|
1091
|
-
);
|
|
1092
|
-
const running: RunningAttempt = {
|
|
1093
|
-
id: this.nextAttemptId++,
|
|
1094
|
-
child: admitted,
|
|
1095
|
-
candidate,
|
|
1096
|
-
status: "running",
|
|
1097
|
-
startedAt: Date.now(),
|
|
1098
|
-
...(initialModel === undefined ? {} : { currentModel: initialModel }),
|
|
1099
|
-
currentThinking: initialThinking,
|
|
1100
|
-
currentFastMode: fastModeForModel(initialModel),
|
|
1101
|
-
promise: Promise.resolve({
|
|
1102
|
-
status: "error",
|
|
1103
|
-
cause: "uninitialized",
|
|
1104
|
-
stats: { ...EMPTY_STATS, sessionId: admitted.identity.path },
|
|
1105
|
-
path: admitted.identity.path,
|
|
1106
|
-
envelope: "uninitialized",
|
|
1107
|
-
}),
|
|
1108
|
-
};
|
|
1109
|
-
running.promise = this.runChildAttempt(
|
|
1110
|
-
admitted,
|
|
1111
|
-
candidate,
|
|
1112
|
-
signals,
|
|
1113
|
-
(model, thinking, fastMode) => {
|
|
1114
|
-
running.currentModel = model;
|
|
1115
|
-
running.currentThinking = thinking;
|
|
1116
|
-
running.currentFastMode = fastMode;
|
|
1117
|
-
},
|
|
1118
|
-
fastModeForModel,
|
|
1119
|
-
).then((result) => {
|
|
1120
|
-
running.status = result.status;
|
|
1121
|
-
this.runningAttempts.delete(running.id);
|
|
1122
|
-
return result;
|
|
1123
|
-
});
|
|
1124
|
-
running.terminate = (cause) => this.terminateRunningAttempt(running, cause);
|
|
1125
|
-
running.promise.catch(() => undefined);
|
|
1126
|
-
this.runningAttempts.set(running.id, running);
|
|
1127
|
-
return running;
|
|
1128
|
-
}
|
|
1129
|
-
|
|
1130
|
-
continueDetached(running: RunningAttempt, _reason: ContinuationReason): string {
|
|
1131
|
-
if (running.status !== "running") throw new Error("continue_detached requires a running attempt");
|
|
1132
|
-
this.native.publishChildStatus(running.child.identity.path, nativeStatus("continued"));
|
|
1133
|
-
running.status = "continued";
|
|
1134
|
-
running.promise.catch(() => undefined);
|
|
1135
|
-
return running.child.identity.path;
|
|
1136
|
-
}
|
|
1137
|
-
|
|
1138
|
-
getChildMetadata(pathValue: string): ChildRuntimeMetadata | undefined {
|
|
1139
|
-
const running = [...this.runningAttempts.values()].find(
|
|
1140
|
-
(attempt) =>
|
|
1141
|
-
attempt.child.identity.path === pathValue &&
|
|
1142
|
-
(attempt.status === "running" || attempt.status === "continued"),
|
|
1143
|
-
);
|
|
1144
|
-
if (!running) return undefined;
|
|
1145
|
-
const model = running.currentModel;
|
|
1146
|
-
const thinking = running.currentThinking;
|
|
1147
|
-
if (model === undefined && thinking === undefined && running.currentFastMode === undefined) return undefined;
|
|
1148
|
-
return {
|
|
1149
|
-
...(model === undefined ? {} : { model }),
|
|
1150
|
-
...(thinking === undefined ? {} : { thinking }),
|
|
1151
|
-
...(running.currentFastMode === undefined ? {} : { fastMode: running.currentFastMode }),
|
|
1152
|
-
};
|
|
1153
|
-
}
|
|
1154
|
-
|
|
1155
|
-
async terminateChildAttempt(running: RunningAttempt, cause: TerminationCauseName): Promise<void> {
|
|
1156
|
-
if (running.status !== "running" && running.status !== "continued") return;
|
|
1157
|
-
await running.terminate?.(cause);
|
|
1158
|
-
await running.promise;
|
|
1159
|
-
}
|
|
1160
|
-
|
|
1161
|
-
async deliverChildResult(envelope: ResultEnvelope, options?: DeliverChildResultOptions): Promise<void> {
|
|
1162
|
-
if (this.delivered.has(envelope.path)) return;
|
|
1163
|
-
this.delivered.add(envelope.path);
|
|
1164
|
-
const artifactDir = options?.artifactsDir ?? envelope.artifactsDir;
|
|
1165
|
-
const paths =
|
|
1166
|
-
options?.artifactPaths ?? (artifactDir ? canonicalArtifactPaths(artifactDir, envelope.path) : undefined);
|
|
1167
|
-
const bounded = boundedEnvelope(envelope.envelope, paths?.outputPath, options?.maxOutput);
|
|
1168
|
-
const deliveredEnvelope = { ...envelope, envelope: bounded };
|
|
1169
|
-
this.deliveredEnvelopes.set(envelope.path, deliveredEnvelope);
|
|
1170
|
-
if (options?.artifactsDisabled) return;
|
|
1171
|
-
if (!artifactDir || !paths)
|
|
1172
|
-
throw new Error(`Artifact persistence paths are unresolved for child ${envelope.path}`);
|
|
1173
|
-
ensureArtifactsDir(artifactDir);
|
|
1174
|
-
writeArtifact(paths.outputPath, envelope.envelope);
|
|
1175
|
-
writeMetadata(paths.metadataPath, {
|
|
1176
|
-
...deliveredEnvelope,
|
|
1177
|
-
outputPath: paths.outputPath,
|
|
1178
|
-
});
|
|
1179
|
-
appendFileSync(join(artifactDir, "run-history.jsonl"), `${JSON.stringify(deliveredEnvelope)}\n`, "utf8");
|
|
1180
|
-
}
|
|
1181
|
-
|
|
1182
|
-
getDeliveredResult(pathValue: string): ResultEnvelope | undefined {
|
|
1183
|
-
return this.deliveredEnvelopes.get(pathValue);
|
|
1184
|
-
}
|
|
1185
|
-
findChild(pathValue: string): ChildIdentity | undefined {
|
|
1186
|
-
return this.native.listChildren().find((child) => child.path === pathValue);
|
|
1187
|
-
}
|
|
1188
|
-
|
|
1189
|
-
listChildren(): readonly ChildIdentity[] {
|
|
1190
|
-
return this.native.listChildren();
|
|
1191
|
-
}
|
|
1192
|
-
|
|
1193
|
-
async interruptChild(pathValue: string): Promise<boolean> {
|
|
1194
|
-
const running = [...this.runningAttempts.values()].find(
|
|
1195
|
-
(attempt) =>
|
|
1196
|
-
attempt.child.identity.path === pathValue &&
|
|
1197
|
-
(attempt.status === "running" || attempt.status === "continued"),
|
|
1198
|
-
);
|
|
1199
|
-
if (!running) return false;
|
|
1200
|
-
await this.terminateChildAttempt(running, "interrupt");
|
|
1201
|
-
return true;
|
|
1202
|
-
}
|
|
1203
|
-
|
|
1204
|
-
subscribe(pathValue: string, callback: (status: ChildStatus) => void): void {
|
|
1205
|
-
this.native.subscribeChildStatus(pathValue, callback);
|
|
1206
|
-
}
|
|
1207
|
-
|
|
1208
|
-
private async terminateRunningAttempt(running: RunningAttempt, cause: TerminationCauseName): Promise<void> {
|
|
1209
|
-
const terminate = this.attemptTerminators.get(running.child.identity.path);
|
|
1210
|
-
if (terminate) {
|
|
1211
|
-
await terminate(cause);
|
|
1212
|
-
return;
|
|
1213
|
-
}
|
|
1214
|
-
const token = running.attemptToken ?? this.attemptTokens.get(running.child.identity.path);
|
|
1215
|
-
if (token === undefined) {
|
|
1216
|
-
await running.promise;
|
|
1217
|
-
return;
|
|
1218
|
-
}
|
|
1219
|
-
try {
|
|
1220
|
-
await this.native.terminateChildAttempt(token, nativeCause(cause));
|
|
1221
|
-
} catch {
|
|
1222
|
-
// The runner's signal path owns the race with terminal completion.
|
|
1223
|
-
}
|
|
1224
|
-
}
|
|
1225
|
-
}
|
|
1226
|
-
|
|
1227
|
-
export function createSubagentControl(parent: ParentContext, sessionRoot?: string): SubagentControlRuntime {
|
|
1228
|
-
return new SubagentControlRuntime(parent, sessionRoot);
|
|
1229
|
-
}
|
|
1230
|
-
|
|
1231
|
-
export function admit_child_session(
|
|
1232
|
-
control: SubagentControlRuntime,
|
|
1233
|
-
spec: ChildSpec,
|
|
1234
|
-
parent: ParentContext,
|
|
1235
|
-
): AdmittedResult {
|
|
1236
|
-
return control.admitChildSession(spec, parent);
|
|
1237
|
-
}
|
|
1238
|
-
|
|
1239
|
-
export function run_child_attempt(
|
|
1240
|
-
control: SubagentControlRuntime,
|
|
1241
|
-
admitted: AdmittedChild,
|
|
1242
|
-
candidate: ModelCandidate,
|
|
1243
|
-
signals: AttemptSignals,
|
|
1244
|
-
): Promise<AttemptOutcome> {
|
|
1245
|
-
return control.runChildAttempt(
|
|
1246
|
-
admitted,
|
|
1247
|
-
candidate,
|
|
1248
|
-
signals,
|
|
1249
|
-
undefined,
|
|
1250
|
-
defaultFastModeForChild(
|
|
1251
|
-
admitted.policy.cwd,
|
|
1252
|
-
admitted.spec.parent?.orchestrationContext,
|
|
1253
|
-
admitted.spec.parent?.workflowStageSubagentGuard,
|
|
1254
|
-
),
|
|
1255
|
-
);
|
|
1256
|
-
}
|
|
1257
|
-
|
|
1258
|
-
export function continue_detached(
|
|
1259
|
-
control: SubagentControlRuntime,
|
|
1260
|
-
running: RunningAttempt,
|
|
1261
|
-
reason: ContinuationReason,
|
|
1262
|
-
): string {
|
|
1263
|
-
return control.continueDetached(running, reason);
|
|
1264
|
-
}
|
|
1265
|
-
|
|
1266
|
-
export function terminate_child_attempt(
|
|
1267
|
-
control: SubagentControlRuntime,
|
|
1268
|
-
running: RunningAttempt,
|
|
1269
|
-
cause: TerminationCauseName,
|
|
1270
|
-
): Promise<void> {
|
|
1271
|
-
return control.terminateChildAttempt(running, cause);
|
|
1272
|
-
}
|
|
1273
|
-
|
|
1274
|
-
export function deliver_child_result(
|
|
1275
|
-
control: SubagentControlRuntime,
|
|
1276
|
-
envelope: ResultEnvelope,
|
|
1277
|
-
options?: DeliverChildResultOptions,
|
|
1278
|
-
): Promise<void> {
|
|
1279
|
-
return control.deliverChildResult(envelope, options);
|
|
1280
|
-
}
|