@bastani/atomic 0.9.12 → 0.9.13-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/builtin/intercom/CHANGELOG.md +6 -0
- package/dist/builtin/intercom/README.md +5 -12
- package/dist/builtin/intercom/broker/client.ts +11 -2
- package/dist/builtin/intercom/contact-supervisor-tool.ts +13 -3
- package/dist/builtin/intercom/index-heavy.ts +13 -3
- package/dist/builtin/intercom/index.ts +43 -19
- package/dist/builtin/intercom/intercom-utils.ts +15 -29
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/intercom/source-ownership.ts +9 -12
- package/dist/builtin/mcp/CHANGELOG.md +6 -0
- package/dist/builtin/mcp/README.md +3 -1
- package/dist/builtin/mcp/index.ts +10 -16
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/mcp/startup-warmup.ts +20 -8
- package/dist/builtin/subagents/CHANGELOG.md +30 -0
- package/dist/builtin/subagents/README.md +22 -30
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/src/extension/doctor.ts +1 -1
- package/dist/builtin/subagents/src/extension/fanout-child.ts +76 -56
- package/dist/builtin/subagents/src/extension/index.ts +23 -32
- package/dist/builtin/subagents/src/extension/startup-maintenance.ts +25 -44
- package/dist/builtin/subagents/src/intercom/result-intercom.ts +7 -7
- package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +166 -434
- package/dist/builtin/subagents/src/runs/background/notify.ts +29 -8
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +4 -4
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +1 -281
- package/dist/builtin/subagents/src/runs/foreground/execution-structured-retries.ts +11 -75
- package/dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts +457 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +119 -246
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +1 -1
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +18 -9
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +1 -1
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +4 -4
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +1 -646
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +2 -7
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +5 -5
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +7 -8
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +14 -5
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +158 -93
- package/dist/builtin/subagents/src/runs/inprocess/background-single.ts +179 -0
- package/dist/builtin/subagents/src/runs/inprocess/background.ts +89 -0
- package/dist/builtin/subagents/src/runs/inprocess/child-policy.ts +27 -0
- package/dist/builtin/subagents/src/runs/inprocess/control-registry.ts +55 -0
- package/dist/builtin/subagents/src/runs/inprocess/control-status.ts +106 -0
- package/dist/builtin/subagents/src/runs/inprocess/index.ts +50 -0
- package/dist/builtin/subagents/src/runs/inprocess/nested-routing.ts +218 -0
- package/dist/builtin/subagents/src/runs/{shared/subagent-prompt-runtime.ts → inprocess/prompt-behavior.ts} +37 -75
- package/dist/builtin/subagents/src/runs/inprocess/runner.ts +1138 -0
- package/dist/builtin/subagents/src/runs/{shared/nested-events.ts → inprocess/runtime-support/nested-api.ts} +13 -7
- package/dist/builtin/subagents/src/runs/{shared/nested-events-control.ts → inprocess/runtime-support/nested-control.ts} +18 -17
- package/dist/builtin/subagents/src/runs/{shared/nested-events-core.ts → inprocess/runtime-support/nested-core.ts} +14 -61
- package/dist/builtin/subagents/src/runs/{shared/nested-events-projection.ts → inprocess/runtime-support/nested-projection.ts} +4 -10
- package/dist/builtin/subagents/src/runs/{shared/nested-events-registry.ts → inprocess/runtime-support/nested-registry.ts} +19 -4
- package/dist/builtin/subagents/src/runs/{shared/nested-render.ts → inprocess/runtime-support/nested-rendering.ts} +3 -3
- package/dist/builtin/subagents/src/runs/{shared/nested-events-sanitize.ts → inprocess/runtime-support/nested-sanitize.ts} +3 -3
- package/dist/builtin/subagents/src/runs/inprocess.ts +1 -0
- package/dist/builtin/subagents/src/runs/shared/dynamic-fanout.ts +10 -4
- package/dist/builtin/subagents/src/runs/shared/model-candidate-filter.ts +0 -1
- package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +15 -492
- package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +13 -11
- package/dist/builtin/subagents/src/runs/shared/run-history.ts +3 -5
- package/dist/builtin/subagents/src/runs/shared/single-output.ts +4 -4
- package/dist/builtin/subagents/src/runs/shared/workflow-graph.ts +5 -5
- package/dist/builtin/subagents/src/shared/types-async.ts +0 -1
- package/dist/builtin/subagents/src/shared/types-config.ts +18 -0
- package/dist/builtin/subagents/src/shared/types-results.ts +9 -2
- package/dist/builtin/subagents/src/slash/prompt-template-bridge.ts +2 -3
- package/dist/builtin/subagents/src/slash/slash-live-state.ts +2 -2
- package/dist/builtin/subagents/src/tui/render-chain-graph.ts +10 -4
- package/dist/builtin/subagents/src/tui/render-event-formatting.ts +12 -11
- package/dist/builtin/subagents/src/tui/render-result-compact.ts +49 -12
- package/dist/builtin/subagents/src/tui/render-result.ts +46 -17
- package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -1
- package/dist/builtin/subagents/src/tui/render-status-progress.ts +8 -5
- package/dist/builtin/subagents/src/tui/render-widget-graph.ts +0 -8
- package/dist/builtin/subagents/src/tui/render-widget.ts +0 -24
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +25 -0
- package/dist/builtin/workflows/README.md +13 -3
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/src/durable/backend.ts +7 -0
- package/dist/builtin/workflows/src/durable/dbos-metadata.ts +11 -1
- package/dist/builtin/workflows/src/durable/resume-runtime.ts +1 -0
- package/dist/builtin/workflows/src/durable/tool-primitive.ts +4 -28
- package/dist/builtin/workflows/src/durable/types.ts +5 -0
- package/dist/builtin/workflows/src/engine/run.ts +17 -1
- package/dist/builtin/workflows/src/extension/atomic-stage-session.ts +12 -39
- package/dist/builtin/workflows/src/extension/config-file-loader.ts +10 -1
- package/dist/builtin/workflows/src/extension/config-loader.ts +1 -1
- package/dist/builtin/workflows/src/extension/dispatcher.ts +4 -0
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +1151 -737
- package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +303 -38
- package/dist/builtin/workflows/src/extension/render-result.ts +4 -0
- package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +6 -3
- package/dist/builtin/workflows/src/extension/runtime.ts +7 -1
- package/dist/builtin/workflows/src/extension/wiring.ts +53 -11
- package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +12 -3
- package/dist/builtin/workflows/src/extension/workflow-durable-resume-command.ts +5 -2
- package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +9 -7
- package/dist/builtin/workflows/src/extension/workflow-status-summary.ts +11 -0
- package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +18 -1
- package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +10 -8
- package/dist/builtin/workflows/src/extension/workflow-tool.ts +9 -4
- package/dist/builtin/workflows/src/runs/background/quit.ts +28 -4
- package/dist/builtin/workflows/src/runs/background/resume-acknowledgements.ts +2 -1
- package/dist/builtin/workflows/src/runs/background/status.ts +55 -8
- package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +4 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +3 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +688 -38
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +3 -1
- package/dist/builtin/workflows/src/runs/shared/model-fallback-failures.ts +19 -514
- package/dist/builtin/workflows/src/runs/shared/retry.ts +44 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +5 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +6 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +5 -1
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +5 -0
- package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +5 -0
- package/dist/builtin/workflows/src/shared/persistence-restore.ts +3 -0
- package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +4 -0
- package/dist/builtin/workflows/src/shared/run-indicator-status.ts +75 -0
- package/dist/builtin/workflows/src/shared/store-public-types.ts +43 -7
- package/dist/builtin/workflows/src/shared/store-run-methods.ts +42 -8
- package/dist/builtin/workflows/src/shared/store-stage-methods.ts +31 -8
- package/dist/builtin/workflows/src/shared/store-types.ts +34 -0
- package/dist/builtin/workflows/src/shared/timing.ts +10 -0
- package/dist/builtin/workflows/src/tui/chat-surface-message.ts +22 -2
- package/dist/builtin/workflows/src/tui/session-list.ts +1 -1
- package/dist/builtin/workflows/src/tui/session-overlays.ts +14 -10
- package/dist/builtin/workflows/src/tui/session-picker.ts +20 -4
- package/dist/builtin/workflows/src/tui/status-list.ts +31 -47
- package/dist/builtin/workflows/src/tui/store-widget-installer.ts +9 -1
- package/dist/builtin/workflows/src/tui/widget.ts +16 -46
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +54 -11
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +49 -14
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +13 -0
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-models.d.ts.map +1 -1
- package/dist/core/agent-session-models.js +12 -1
- package/dist/core/agent-session-models.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +4 -0
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-retry.d.ts +21 -4
- package/dist/core/agent-session-retry.d.ts.map +1 -1
- package/dist/core/agent-session-retry.js +232 -106
- package/dist/core/agent-session-retry.js.map +1 -1
- package/dist/core/agent-session-state.d.ts.map +1 -1
- package/dist/core/agent-session-state.js +2 -1
- package/dist/core/agent-session-state.js.map +1 -1
- package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
- package/dist/core/agent-session-tool-hooks.js +12 -0
- package/dist/core/agent-session-tool-hooks.js.map +1 -1
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +1 -1
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +3 -1
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +12 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +7 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/context-types.d.ts +25 -0
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/runner-context.d.ts +2 -1
- package/dist/core/extensions/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js +4 -0
- package/dist/core/extensions/runner-context.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +3 -2
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +3 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/model-fallback-failures.d.ts +30 -0
- package/dist/core/model-fallback-failures.d.ts.map +1 -0
- package/dist/core/model-fallback-failures.js +610 -0
- package/dist/core/model-fallback-failures.js.map +1 -0
- package/dist/core/retry-policy.d.ts +30 -0
- package/dist/core/retry-policy.d.ts.map +1 -0
- package/dist/core/retry-policy.js +25 -0
- package/dist/core/retry-policy.js.map +1 -0
- package/dist/core/sdk-types.d.ts +8 -2
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +6 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-core.d.ts +2 -0
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js +7 -0
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/index-extensions.d.ts +1 -1
- package/dist/index-extensions.d.ts.map +1 -1
- package/dist/index-extensions.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/docs/intercom.md +5 -10
- package/docs/settings.md +7 -1
- package/docs/subagents.md +19 -19
- package/docs/workflows.md +21 -5
- package/examples/extensions/gondolin/package-lock.json +3 -3
- package/npm-shrinkwrap.json +29 -29
- package/package.json +2 -2
- package/dist/builtin/subagents/src/runs/background/async-event-journal.ts +0 -112
- package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +0 -543
- package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +0 -140
- package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +0 -279
- package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +0 -99
- package/dist/builtin/subagents/src/runs/background/async-execution.ts +0 -17
- package/dist/builtin/subagents/src/runs/background/async-resume.ts +0 -402
- package/dist/builtin/subagents/src/runs/background/async-status.ts +0 -411
- package/dist/builtin/subagents/src/runs/background/completion-claims.ts +0 -196
- package/dist/builtin/subagents/src/runs/background/completion-dedupe.ts +0 -102
- package/dist/builtin/subagents/src/runs/background/parallel-groups.ts +0 -59
- package/dist/builtin/subagents/src/runs/background/result-delivery-processor.ts +0 -300
- package/dist/builtin/subagents/src/runs/background/result-file-claims.ts +0 -166
- package/dist/builtin/subagents/src/runs/background/result-quarantine.ts +0 -77
- package/dist/builtin/subagents/src/runs/background/result-retry-scheduler.ts +0 -48
- package/dist/builtin/subagents/src/runs/background/result-status.ts +0 -87
- package/dist/builtin/subagents/src/runs/background/result-watcher-data.ts +0 -72
- package/dist/builtin/subagents/src/runs/background/result-watcher.ts +0 -320
- package/dist/builtin/subagents/src/runs/background/run-id-resolver.ts +0 -105
- package/dist/builtin/subagents/src/runs/background/run-status.ts +0 -358
- package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +0 -457
- package/dist/builtin/subagents/src/runs/background/subagent-runner-dynamic.ts +0 -376
- package/dist/builtin/subagents/src/runs/background/subagent-runner-finalize.ts +0 -150
- package/dist/builtin/subagents/src/runs/background/subagent-runner-output.ts +0 -109
- package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel-helpers.ts +0 -128
- package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel.ts +0 -309
- package/dist/builtin/subagents/src/runs/background/subagent-runner-sequential.ts +0 -173
- package/dist/builtin/subagents/src/runs/background/subagent-runner-state.ts +0 -578
- package/dist/builtin/subagents/src/runs/background/subagent-runner-step.ts +0 -330
- package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +0 -330
- package/dist/builtin/subagents/src/runs/background/subagent-runner-types.ts +0 -210
- package/dist/builtin/subagents/src/runs/background/subagent-runner-utils.ts +0 -69
- package/dist/builtin/subagents/src/runs/background/subagent-runner.ts +0 -90
- package/dist/builtin/subagents/src/runs/background/top-level-async.ts +0 -12
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt-control.ts +0 -140
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt-finalize.ts +0 -108
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt-types.ts +0 -17
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +0 -558
- package/dist/builtin/subagents/src/runs/shared/attempt-watchdog.ts +0 -126
- package/dist/builtin/subagents/src/runs/shared/final-drain.ts +0 -39
- package/dist/builtin/subagents/src/runs/shared/pi-args.ts +0 -339
- package/dist/builtin/subagents/src/runs/shared/pi-spawn.ts +0 -165
- package/dist/builtin/subagents/src/runs/shared/spawn-env.ts +0 -21
- package/dist/builtin/subagents/src/shared/post-exit-stdio-guard.ts +0 -86
- /package/dist/builtin/subagents/src/runs/{shared/nested-path.ts → inprocess/runtime-support/nested-paths.ts} +0 -0
|
@@ -6,14 +6,14 @@ export {
|
|
|
6
6
|
readNestedControlResults,
|
|
7
7
|
writeNestedControlRequest,
|
|
8
8
|
writeNestedControlResult,
|
|
9
|
-
} from "./nested-
|
|
9
|
+
} from "./nested-control.ts";
|
|
10
10
|
export type {
|
|
11
11
|
NestedControlRequestRecord,
|
|
12
12
|
NestedControlResultRecord,
|
|
13
13
|
NestedEventRecord,
|
|
14
14
|
NestedRegistry,
|
|
15
15
|
NestedRoute,
|
|
16
|
-
} from "./nested-
|
|
16
|
+
} from "./nested-core.ts";
|
|
17
17
|
export {
|
|
18
18
|
assertSafeNestedId,
|
|
19
19
|
cleanupOldNestedRuntimeDirs,
|
|
@@ -31,7 +31,13 @@ export {
|
|
|
31
31
|
resolveNestedParentAddressFromEnv,
|
|
32
32
|
resolveNestedRouteFromEnv,
|
|
33
33
|
validateNestedRouteShape,
|
|
34
|
-
} from "./nested-
|
|
34
|
+
} from "./nested-core.ts";
|
|
35
|
+
export {
|
|
36
|
+
encodeNestedPathEnv,
|
|
37
|
+
MAX_NESTED_PATH_ENTRIES,
|
|
38
|
+
parseNestedPathEnv,
|
|
39
|
+
sanitizeNestedPath,
|
|
40
|
+
} from "./nested-paths.ts";
|
|
35
41
|
export {
|
|
36
42
|
attachRootChildrenToSteps,
|
|
37
43
|
hasLiveNestedDescendants,
|
|
@@ -41,8 +47,8 @@ export {
|
|
|
41
47
|
nestedSummaryFromAsyncStatus,
|
|
42
48
|
updateAsyncJobNestedProjection,
|
|
43
49
|
updateForegroundNestedProjection,
|
|
44
|
-
} from "./nested-
|
|
45
|
-
export type { NestedRunMatch, NestedRunResolutionScope } from "./nested-
|
|
50
|
+
} from "./nested-projection.ts";
|
|
51
|
+
export type { NestedRunMatch, NestedRunResolutionScope } from "./nested-registry.ts";
|
|
46
52
|
export {
|
|
47
53
|
findNestedRouteForRootId,
|
|
48
54
|
findNestedRun,
|
|
@@ -52,5 +58,5 @@ export {
|
|
|
52
58
|
projectNestedRegistryForRoot,
|
|
53
59
|
readNestedRegistry,
|
|
54
60
|
writeNestedEvent,
|
|
55
|
-
} from "./nested-
|
|
56
|
-
export { applyNestedEvent, parseNestedEventRecords, sanitizeSummary } from "./nested-
|
|
61
|
+
} from "./nested-registry.ts";
|
|
62
|
+
export { applyNestedEvent, parseNestedEventRecords, sanitizeSummary } from "./nested-sanitize.ts";
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
|
+
import {
|
|
4
|
+
appendInProcessControlRequest,
|
|
5
|
+
appendInProcessControlResult,
|
|
6
|
+
hasInProcessNestedRoute,
|
|
7
|
+
readInProcessControlRequests,
|
|
8
|
+
readInProcessControlResults,
|
|
9
|
+
} from "../nested-routing.ts";
|
|
3
10
|
import {
|
|
4
11
|
assertSafeId,
|
|
5
12
|
clampNumber,
|
|
@@ -11,14 +18,8 @@ import {
|
|
|
11
18
|
type NestedRoute,
|
|
12
19
|
stringValue,
|
|
13
20
|
validateRouteShape,
|
|
14
|
-
} from "./nested-
|
|
15
|
-
import { writeRouteRecord } from "./nested-
|
|
16
|
-
import {
|
|
17
|
-
SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV,
|
|
18
|
-
SUBAGENT_PARENT_CONTROL_INBOX_ENV,
|
|
19
|
-
SUBAGENT_PARENT_EVENT_SINK_ENV,
|
|
20
|
-
SUBAGENT_PARENT_ROOT_RUN_ID_ENV,
|
|
21
|
-
} from "./pi-args.ts";
|
|
21
|
+
} from "./nested-core.ts";
|
|
22
|
+
import { writeRouteRecord } from "./nested-registry.ts";
|
|
22
23
|
|
|
23
24
|
export function parseNestedControlRequest(content: string, route: NestedRoute): NestedControlRequestRecord | undefined {
|
|
24
25
|
if (Buffer.byteLength(content, "utf-8") > MAX_NESTED_EVENT_BYTES) return undefined;
|
|
@@ -90,13 +91,16 @@ export function writeNestedControlRequest(
|
|
|
90
91
|
};
|
|
91
92
|
const sanitized = parseNestedControlRequest(JSON.stringify(record), route);
|
|
92
93
|
if (!sanitized) throw new Error("Nested control request failed validation.");
|
|
93
|
-
|
|
94
|
+
const filePath = writeRouteRecord(route.controlInbox, sanitized.ts, sanitized);
|
|
95
|
+
appendInProcessControlRequest(route, { ...sanitized, filePath });
|
|
96
|
+
return filePath;
|
|
94
97
|
}
|
|
95
98
|
|
|
96
99
|
export function readNestedControlRequests(
|
|
97
100
|
route: NestedRoute,
|
|
98
101
|
): Array<NestedControlRequestRecord & { filePath: string }> {
|
|
99
102
|
validateRouteShape(route);
|
|
103
|
+
if (hasInProcessNestedRoute(route)) return [...readInProcessControlRequests(route)];
|
|
100
104
|
let entries: string[] = [];
|
|
101
105
|
try {
|
|
102
106
|
entries = fs
|
|
@@ -135,11 +139,13 @@ export function writeNestedControlResult(
|
|
|
135
139
|
};
|
|
136
140
|
const sanitized = parseNestedControlResult(JSON.stringify(record), route);
|
|
137
141
|
if (!sanitized) throw new Error("Nested control result failed validation.");
|
|
138
|
-
writeRouteRecord(route.eventSink, sanitized.ts, sanitized);
|
|
142
|
+
const filePath = writeRouteRecord(route.eventSink, sanitized.ts, sanitized);
|
|
143
|
+
appendInProcessControlResult(route, { ...sanitized, filePath });
|
|
139
144
|
}
|
|
140
145
|
|
|
141
146
|
export function readNestedControlResults(route: NestedRoute): NestedControlResultRecord[] {
|
|
142
147
|
validateRouteShape(route);
|
|
148
|
+
if (hasInProcessNestedRoute(route)) return [...readInProcessControlResults(route)] as NestedControlResultRecord[];
|
|
143
149
|
let entries: string[] = [];
|
|
144
150
|
try {
|
|
145
151
|
entries = fs
|
|
@@ -167,11 +173,6 @@ export function readNestedControlResults(route: NestedRoute): NestedControlResul
|
|
|
167
173
|
return results;
|
|
168
174
|
}
|
|
169
175
|
|
|
170
|
-
export function nestedRouteEnv(
|
|
171
|
-
return {
|
|
172
|
-
[SUBAGENT_PARENT_EVENT_SINK_ENV]: route.eventSink,
|
|
173
|
-
[SUBAGENT_PARENT_CONTROL_INBOX_ENV]: route.controlInbox,
|
|
174
|
-
[SUBAGENT_PARENT_ROOT_RUN_ID_ENV]: route.rootRunId,
|
|
175
|
-
[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV]: route.capabilityToken,
|
|
176
|
-
};
|
|
176
|
+
export function nestedRouteEnv(_route: NestedRoute): Record<string, string> {
|
|
177
|
+
return {};
|
|
177
178
|
}
|
|
@@ -1,20 +1,10 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
3
|
import * as path from "node:path";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV,
|
|
9
|
-
SUBAGENT_PARENT_CHILD_INDEX_ENV,
|
|
10
|
-
SUBAGENT_PARENT_CONTROL_INBOX_ENV,
|
|
11
|
-
SUBAGENT_PARENT_DEPTH_ENV,
|
|
12
|
-
SUBAGENT_PARENT_EVENT_SINK_ENV,
|
|
13
|
-
SUBAGENT_PARENT_MAX_DEPTH,
|
|
14
|
-
SUBAGENT_PARENT_PATH_ENV,
|
|
15
|
-
SUBAGENT_PARENT_ROOT_RUN_ID_ENV,
|
|
16
|
-
SUBAGENT_PARENT_RUN_ID_ENV,
|
|
17
|
-
} from "./pi-args.ts";
|
|
4
|
+
import { type NestedRouteInfo, type NestedRunSummary, TEMP_ROOT_DIR } from "../../../shared/types.ts";
|
|
5
|
+
import { MAX_SUBAGENT_NESTING_DEPTH } from "../../../shared/types-runtime.ts";
|
|
6
|
+
import { registerInProcessNestedRoute } from "../nested-routing.ts";
|
|
7
|
+
import { isSafeNestedPathId, type NestedPathEntry } from "./nested-paths.ts";
|
|
18
8
|
|
|
19
9
|
export const NESTED_EVENTS_DIR = path.join(TEMP_ROOT_DIR, "nested-subagent-events");
|
|
20
10
|
export const NESTED_RUNS_DIR = path.join(TEMP_ROOT_DIR, "nested-subagent-runs");
|
|
@@ -23,7 +13,7 @@ export const REGISTRY_FILE = "registry.json";
|
|
|
23
13
|
export const MAX_NESTED_EVENT_BYTES = 64 * 1024;
|
|
24
14
|
export const MAX_NESTED_STEPS = 12;
|
|
25
15
|
export const MAX_NESTED_CHILDREN = 16;
|
|
26
|
-
export const MAX_NESTED_DEPTH =
|
|
16
|
+
export const MAX_NESTED_DEPTH = MAX_SUBAGENT_NESTING_DEPTH;
|
|
27
17
|
export const MAX_PROCESSED_NESTED_EVENTS = 20_000;
|
|
28
18
|
type NestedStatusEventType = "subagent.nested.started" | "subagent.nested.updated" | "subagent.nested.completed";
|
|
29
19
|
type NestedControlResultEventType = "subagent.nested.control-result";
|
|
@@ -119,7 +109,9 @@ export function createNestedRoute(rootRunId: string): NestedRoute {
|
|
|
119
109
|
`${JSON.stringify({ rootRunId, capabilityToken, createdAt: Date.now() })}\n`,
|
|
120
110
|
{ mode: 0o600 },
|
|
121
111
|
);
|
|
122
|
-
|
|
112
|
+
const route = { rootRunId, eventSink, controlInbox, capabilityToken };
|
|
113
|
+
registerInProcessNestedRoute(route);
|
|
114
|
+
return route;
|
|
123
115
|
}
|
|
124
116
|
|
|
125
117
|
/** Whether any entry in the tree rooted at filePath has an mtime at or after cutoff, stopping at the first hit. */
|
|
@@ -174,57 +166,18 @@ export function cleanupOldNestedRuntimeDirs(maxAgeDays: number): void {
|
|
|
174
166
|
cleanupOldSubdirectories(NESTED_RUNS_DIR, maxAgeDays);
|
|
175
167
|
}
|
|
176
168
|
|
|
177
|
-
export function
|
|
178
|
-
|
|
179
|
-
// Atomic keeps reading legacy pi-prefixed env vars so older parent processes can route nested children.
|
|
180
|
-
const legacyName = name.replace(/^[A-Z0-9]+_/, "PI_");
|
|
181
|
-
return env[name] ?? (legacyName === name ? undefined : env[legacyName]);
|
|
169
|
+
export function resolveNestedRouteFromEnv(_env: NodeJS.ProcessEnv = process.env): NestedRoute | undefined {
|
|
170
|
+
return undefined;
|
|
182
171
|
}
|
|
183
172
|
|
|
184
|
-
export function
|
|
185
|
-
|
|
186
|
-
const eventSink = readSubagentEnv(env, SUBAGENT_PARENT_EVENT_SINK_ENV);
|
|
187
|
-
const controlInbox = readSubagentEnv(env, SUBAGENT_PARENT_CONTROL_INBOX_ENV);
|
|
188
|
-
const capabilityToken = readSubagentEnv(env, SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV);
|
|
189
|
-
if (!rootRunId || !eventSink || !controlInbox || !capabilityToken) return undefined;
|
|
190
|
-
const route = { rootRunId, eventSink, controlInbox, capabilityToken };
|
|
191
|
-
validateRouteShape(route);
|
|
192
|
-
const routeFile = path.join(commonRouteRoot(route), ROUTE_FILE);
|
|
193
|
-
const metadata = JSON.parse(fs.readFileSync(routeFile, "utf-8")) as {
|
|
194
|
-
rootRunId?: unknown;
|
|
195
|
-
capabilityToken?: unknown;
|
|
196
|
-
};
|
|
197
|
-
if (metadata.rootRunId !== rootRunId || metadata.capabilityToken !== capabilityToken) {
|
|
198
|
-
throw new Error("Nested event route metadata does not match the provided root id and capability token.");
|
|
199
|
-
}
|
|
200
|
-
return route;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
export function resolveInheritedNestedRouteFromEnv(env: NodeJS.ProcessEnv = process.env): NestedRoute | undefined {
|
|
204
|
-
try {
|
|
205
|
-
return resolveNestedRouteFromEnv(env);
|
|
206
|
-
} catch (error) {
|
|
207
|
-
console.error("Ignoring invalid nested subagent event route:", error);
|
|
208
|
-
return undefined;
|
|
209
|
-
}
|
|
173
|
+
export function resolveInheritedNestedRouteFromEnv(_env: NodeJS.ProcessEnv = process.env): NestedRoute | undefined {
|
|
174
|
+
return undefined;
|
|
210
175
|
}
|
|
211
176
|
|
|
212
177
|
export function resolveNestedParentAddressFromEnv(
|
|
213
|
-
|
|
178
|
+
_env: NodeJS.ProcessEnv = process.env,
|
|
214
179
|
): { parentRunId: string; parentStepIndex?: number; depth: number; path: NestedPathEntry[] } | undefined {
|
|
215
|
-
|
|
216
|
-
if (!isSafeNestedId(parentRunId)) return undefined;
|
|
217
|
-
const rawIndex = readSubagentEnv(env, SUBAGENT_PARENT_CHILD_INDEX_ENV);
|
|
218
|
-
const parentStepIndex = rawIndex && /^\d+$/.test(rawIndex) ? Number(rawIndex) : undefined;
|
|
219
|
-
const depth = Math.min(
|
|
220
|
-
Math.max(1, clampNumber(Number(readSubagentEnv(env, SUBAGENT_PARENT_DEPTH_ENV))) ?? 1),
|
|
221
|
-
MAX_NESTED_DEPTH,
|
|
222
|
-
);
|
|
223
|
-
const parsedPath = parseNestedPathEnv(readSubagentEnv(env, SUBAGENT_PARENT_PATH_ENV));
|
|
224
|
-
const nestedPath = parsedPath.length
|
|
225
|
-
? parsedPath
|
|
226
|
-
: [{ runId: parentRunId, ...(parentStepIndex !== undefined ? { stepIndex: parentStepIndex } : {}) }];
|
|
227
|
-
return { parentRunId, ...(parentStepIndex !== undefined ? { parentStepIndex } : {}), depth, path: nestedPath };
|
|
180
|
+
return undefined;
|
|
228
181
|
}
|
|
229
182
|
|
|
230
183
|
export function resolveNestedAsyncDir(rootRunId: string, run: NestedRunSummary): string | undefined {
|
|
@@ -8,16 +8,10 @@ import {
|
|
|
8
8
|
RESULTS_DIR,
|
|
9
9
|
type SubagentRunMode,
|
|
10
10
|
type SubagentState,
|
|
11
|
-
} from "
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
MAX_NESTED_CHILDREN,
|
|
16
|
-
MAX_NESTED_STEPS,
|
|
17
|
-
NESTED_RUNS_DIR,
|
|
18
|
-
} from "./nested-events-core.ts";
|
|
19
|
-
import { projectNestedEvents } from "./nested-events-registry.ts";
|
|
20
|
-
import { terminal } from "./nested-events-sanitize.ts";
|
|
11
|
+
} from "../../../shared/types.ts";
|
|
12
|
+
import { assertSafeId, containedPath, MAX_NESTED_CHILDREN, MAX_NESTED_STEPS, NESTED_RUNS_DIR } from "./nested-core.ts";
|
|
13
|
+
import { projectNestedEvents } from "./nested-registry.ts";
|
|
14
|
+
import { terminal } from "./nested-sanitize.ts";
|
|
21
15
|
|
|
22
16
|
export function attachRootChildrenToSteps<T extends { children?: NestedRunSummary[]; index?: number }>(
|
|
23
17
|
rootRunId: string,
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
3
|
import * as path from "node:path";
|
|
4
|
-
import { writeAtomicJson } from "
|
|
5
|
-
import type { NestedRunSummary } from "
|
|
4
|
+
import { writeAtomicJson } from "../../../shared/atomic-json.ts";
|
|
5
|
+
import type { NestedRunSummary } from "../../../shared/types.ts";
|
|
6
|
+
import { appendInProcessNestedEvent, hasInProcessNestedRoute, readInProcessNestedEvents } from "../nested-routing.ts";
|
|
6
7
|
import {
|
|
7
8
|
assertSafeId,
|
|
8
9
|
commonRouteRoot,
|
|
@@ -16,8 +17,8 @@ import {
|
|
|
16
17
|
REGISTRY_FILE,
|
|
17
18
|
ROUTE_FILE,
|
|
18
19
|
validateRouteShape,
|
|
19
|
-
} from "./nested-
|
|
20
|
-
import { applyNestedEvent, parseNestedEventRecords, parseRecord, sanitizeSummary } from "./nested-
|
|
20
|
+
} from "./nested-core.ts";
|
|
21
|
+
import { applyNestedEvent, parseNestedEventRecords, parseRecord, sanitizeSummary } from "./nested-sanitize.ts";
|
|
21
22
|
|
|
22
23
|
const REGISTRY_LOCK_DIR = ".registry.lock";
|
|
23
24
|
const REGISTRY_LOCK_TIMEOUT_MS = 2_000;
|
|
@@ -260,6 +261,19 @@ export function readNestedRegistry(route: NestedRoute): NestedRegistry {
|
|
|
260
261
|
|
|
261
262
|
export function projectNestedEvents(route: NestedRoute): NestedRegistry {
|
|
262
263
|
validateRouteShape(route);
|
|
264
|
+
if (hasInProcessNestedRoute(route)) {
|
|
265
|
+
const release = acquireRegistryLock(route);
|
|
266
|
+
try {
|
|
267
|
+
let registry = readNestedRegistry(route);
|
|
268
|
+
for (const event of readInProcessNestedEvents(route)) {
|
|
269
|
+
const parsed = parseRecord(JSON.stringify(event), route);
|
|
270
|
+
if (parsed) registry = applyNestedEvent(registry, parsed);
|
|
271
|
+
}
|
|
272
|
+
return registry;
|
|
273
|
+
} finally {
|
|
274
|
+
release();
|
|
275
|
+
}
|
|
276
|
+
}
|
|
263
277
|
const release = acquireRegistryLock(route);
|
|
264
278
|
try {
|
|
265
279
|
let registry = readNestedRegistry(route);
|
|
@@ -333,5 +347,6 @@ export function writeNestedEvent(
|
|
|
333
347
|
};
|
|
334
348
|
const sanitized = parseRecord(JSON.stringify(record), route);
|
|
335
349
|
if (!sanitized) throw new Error("Nested event record failed validation.");
|
|
350
|
+
appendInProcessNestedEvent(route, sanitized);
|
|
336
351
|
writeRouteRecord(route.eventSink, sanitized.ts, sanitized);
|
|
337
352
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { formatDuration, formatTokens, shortenPath } from "
|
|
2
|
-
import { formatActivityLabel } from "
|
|
3
|
-
import { type ActivityState, MAX_SUBAGENT_NESTING_DEPTH, type NestedRunSummary } from "
|
|
1
|
+
import { formatDuration, formatTokens, shortenPath } from "../../../shared/formatters.ts";
|
|
2
|
+
import { formatActivityLabel } from "../../../shared/status-format.ts";
|
|
3
|
+
import { type ActivityState, MAX_SUBAGENT_NESTING_DEPTH, type NestedRunSummary } from "../../../shared/types.ts";
|
|
4
4
|
|
|
5
5
|
export interface NestedRunCounts {
|
|
6
6
|
total: number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { NestedRunState, NestedRunSummary, NestedStepSummary } from "
|
|
1
|
+
import type { NestedRunState, NestedRunSummary, NestedStepSummary } from "../../../shared/types.ts";
|
|
2
2
|
import {
|
|
3
3
|
clampNumber,
|
|
4
4
|
isSafeNestedId,
|
|
@@ -10,8 +10,8 @@ import {
|
|
|
10
10
|
type NestedRegistry,
|
|
11
11
|
type NestedRoute,
|
|
12
12
|
stringValue,
|
|
13
|
-
} from "./nested-
|
|
14
|
-
import { sanitizeNestedPath } from "./nested-
|
|
13
|
+
} from "./nested-core.ts";
|
|
14
|
+
import { sanitizeNestedPath } from "./nested-paths.ts";
|
|
15
15
|
|
|
16
16
|
function sanitizeTokenUsage(value: unknown): NestedRunSummary["totalTokens"] | undefined {
|
|
17
17
|
if (!value || typeof value !== "object") return undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./inprocess/index.ts";
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { DynamicParallelStep, ParallelTaskItem } from "../../shared/settings.ts";
|
|
2
|
-
import type {
|
|
2
|
+
import type {
|
|
3
|
+
ArtifactPaths,
|
|
4
|
+
ChainOutputMap,
|
|
5
|
+
JsonSchemaObject,
|
|
6
|
+
SingleResult,
|
|
7
|
+
SubagentAttemptStatus,
|
|
8
|
+
} from "../../shared/types.ts";
|
|
3
9
|
import { getSingleResultOutput } from "../../shared/utils.ts";
|
|
4
10
|
import { validateStructuredOutputValue } from "./structured-output.ts";
|
|
5
11
|
|
|
@@ -22,7 +28,7 @@ export interface DynamicCollectedResult {
|
|
|
22
28
|
index: number;
|
|
23
29
|
item: unknown;
|
|
24
30
|
agent: string;
|
|
25
|
-
|
|
31
|
+
status: SubagentAttemptStatus;
|
|
26
32
|
text: string;
|
|
27
33
|
structured?: unknown;
|
|
28
34
|
error?: string;
|
|
@@ -350,7 +356,7 @@ export function collectDynamicResults(
|
|
|
350
356
|
step: DynamicParallelStep,
|
|
351
357
|
items: DynamicMaterializedItem[],
|
|
352
358
|
results: Array<
|
|
353
|
-
Pick<SingleResult, "agent" | "
|
|
359
|
+
Pick<SingleResult, "agent" | "status" | "error" | "structuredOutput" | "artifactPaths" | "savedOutputPath"> & {
|
|
354
360
|
output?: string;
|
|
355
361
|
finalOutput?: string;
|
|
356
362
|
}
|
|
@@ -368,7 +374,7 @@ export function collectDynamicResults(
|
|
|
368
374
|
index: entry.index,
|
|
369
375
|
item: entry.item,
|
|
370
376
|
agent: result?.agent ?? step.parallel.agent,
|
|
371
|
-
|
|
377
|
+
status: result?.status ?? "skipped",
|
|
372
378
|
text,
|
|
373
379
|
...(result?.structuredOutput !== undefined ? { structured: result.structuredOutput } : {}),
|
|
374
380
|
...(result?.error ? { error: result.error } : {}),
|