@zhushanwen/subagent-core 0.2.0 → 0.5.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/README.md +45 -2
- package/agents/analyst.md +60 -0
- package/agents/coder.md +69 -0
- package/agents/debugger.md +66 -0
- package/agents/doc-reviewer.md +49 -0
- package/agents/explorer.md +63 -0
- package/agents/general-purpose.md +32 -0
- package/agents/orchestrator.md +61 -0
- package/agents/planner.md +53 -0
- package/agents/researcher.md +67 -0
- package/agents/reviewer.md +73 -0
- package/dist/chunk-43ONBFZX.js +240 -0
- package/dist/chunk-APZY4IME.js +27 -0
- package/dist/chunk-V3VHZ2VX.js +59 -0
- package/dist/execution/engine/engines/zcode/constants.cjs +62 -9
- package/dist/execution/engine/engines/zcode/constants.d.cts +116 -12
- package/dist/execution/engine/engines/zcode/constants.d.ts +116 -12
- package/dist/execution/engine/engines/zcode/constants.js +39 -7
- package/dist/execution/engine/engines/zcode/reader.d.cts +2 -1
- package/dist/execution/engine/engines/zcode/reader.d.ts +2 -1
- package/dist/execution/engine/engines/zcode/reader.js +4 -234
- package/dist/execution/engine/paths.js +7 -19
- package/dist/index.cjs +18234 -1277
- package/dist/index.d.cts +5646 -673
- package/dist/index.d.ts +5646 -673
- package/dist/index.js +17828 -1277
- package/dist/{types-BxyAidGf.d.cts → types-Dv4QhSJ_.d.cts} +678 -112
- package/dist/{types-BxyAidGf.d.ts → types-Dv4QhSJ_.d.ts} +678 -112
- package/package.json +7 -4
- package/src/__tests__/agent-opts-resolver-schema-prompt.test.ts +0 -1
- package/src/__tests__/append-system-prompt-assembly.test.ts +8 -7
- package/src/__tests__/fr4-get-state-handshake.test.ts +2 -2
- package/src/__tests__/m2-append-content-probe.test.ts +0 -1
- package/src/__tests__/manifest-store.test.ts +10 -9
- package/src/__tests__/record-store-cache.test.ts +0 -2
- package/src/__tests__/record-store-index.test.ts +1 -2
- package/src/__tests__/review-fix-loop-script.test.ts +93 -3
- package/src/__tests__/review-fix-loop-utils.test.ts +31 -10
- package/src/__tests__/robustness-low-batch1.test.ts +6 -5
- package/src/__tests__/robustness-medium-batch1.test.ts +2 -2
- package/src/__tests__/robustness-medium-batch2.test.ts +17 -6
- package/src/__tests__/robustness-medium-batch4.test.ts +2 -2
- package/src/__tests__/session-runner.test.ts +1 -1
- package/src/__tests__/smoke.test.ts +9 -2
- package/src/core/__tests__/host-services.test.ts +2 -2
- package/src/core/__tests__/logger.test.ts +1 -1
- package/src/core/error-message.ts +9 -0
- package/src/core/host-services.ts +21 -5
- package/src/core/notify-ports.ts +18 -5
- package/src/execution/__tests__/agent-profile.test.ts +232 -0
- package/src/execution/__tests__/agent-registry.test.ts +370 -0
- package/src/execution/__tests__/agent-result-mapper.test.ts +18 -2
- package/src/execution/__tests__/agents-assembly.test.ts +219 -0
- package/src/execution/__tests__/ask-user-transit-e2e.test.ts +6 -6
- package/src/execution/__tests__/chat-engine-routing.test.ts +136 -30
- package/src/execution/__tests__/chatmode-first-round-closure-spawn.test.ts +5 -4
- package/src/execution/__tests__/cold-resurrect.test.ts +283 -0
- package/src/execution/__tests__/create-concurrency-pool.test.ts +194 -0
- package/src/execution/__tests__/delivery-methods.test.ts +77 -62
- package/src/execution/__tests__/descendant-sweep-guards.test.ts +220 -0
- package/src/execution/__tests__/descendant-sweep.test.ts +269 -0
- package/src/execution/__tests__/dialog-queue.test.ts +199 -1
- package/src/execution/__tests__/engine-model-validation.test.ts +741 -0
- package/src/execution/__tests__/epipe-fallback.test.ts +31 -24
- package/src/execution/__tests__/execute-and-await-worktree.test.ts +21 -91
- package/src/execution/__tests__/execute-nesting.test.ts +34 -188
- package/src/execution/__tests__/execution-record.test.ts +217 -60
- package/src/execution/__tests__/execution-runtime-face.test.ts +272 -0
- package/src/execution/__tests__/explicit-agent-ref-guard.test.ts +3 -3
- package/src/execution/__tests__/finalize-record.test.ts +278 -16
- package/src/execution/__tests__/gc-timer.test.ts +57 -2
- package/src/execution/__tests__/get-record-for-action-restart.test.ts +14 -12
- package/src/execution/__tests__/get-state-handshake.test.ts +127 -0
- package/src/execution/__tests__/helpers/mock-extension-api.ts +1 -1
- package/src/execution/__tests__/helpers/session-runner-mocks.ts +113 -0
- package/src/execution/__tests__/helpers/spawn-mock.ts +150 -3
- package/src/execution/__tests__/helpers/subagent-service-mocks.ts +137 -0
- package/src/execution/__tests__/keep-alive-no-progress.test.ts +280 -0
- package/src/execution/__tests__/kill-all-escalation.test.ts +196 -0
- package/src/execution/__tests__/lifecycle-manager-idle-timer-identity.test.ts +117 -0
- package/src/execution/__tests__/lifecycle-manager.test.ts +39 -0
- package/src/execution/__tests__/lifecycle-predicates.test.ts +1 -2
- package/src/execution/__tests__/manifest-parentid.test.ts +4 -4
- package/src/execution/__tests__/manifest-store-tmp-recovery.test.ts +99 -0
- package/src/execution/__tests__/max-turns-to-watchdog-ms.test.ts +113 -0
- package/src/execution/__tests__/model-resolver.test.ts +2 -2
- package/src/execution/__tests__/nested-visibility-env-propagation.test.ts +23 -121
- package/src/execution/__tests__/nested-visibility.test.ts +2 -0
- package/src/execution/__tests__/notify-ledger.test.ts +1249 -0
- package/src/execution/__tests__/output-collector.test.ts +117 -6
- package/src/execution/__tests__/pi-invocation.test.ts +1 -1
- package/src/execution/__tests__/record-store-orphan-revive.test.ts +159 -0
- package/src/execution/__tests__/record-store.test.ts +89 -5
- package/src/execution/__tests__/records-cwd-isolation.test.ts +2 -2
- package/src/execution/__tests__/recursive-visibility-baseline.test.ts +29 -132
- package/src/execution/__tests__/recursive-visibility-env.test.ts +55 -179
- package/src/execution/__tests__/rpc-mode.test.ts +2 -2
- package/src/execution/__tests__/run-and-finalize-anchoring.test.ts +387 -0
- package/src/execution/__tests__/run-and-finalize-chatmode.test.ts +19 -9
- package/src/execution/__tests__/run-spawn-chatmode-settled.test.ts +5 -4
- package/src/execution/__tests__/run-spawn-edges.test.ts +418 -26
- package/src/execution/__tests__/run-spawn-integration.test.ts +3 -3
- package/src/execution/__tests__/run-spawn-resume.test.ts +2 -2
- package/src/execution/__tests__/run-spawn-rpc-mode.test.ts +2 -2
- package/src/execution/__tests__/run-spawn-stdout-callback-throw.test.ts +16 -8
- package/src/execution/__tests__/service-kill-escalation.test.ts +91 -0
- package/src/execution/__tests__/session-context-resolver.test.ts +0 -2
- package/src/execution/__tests__/session-file-gc.test.ts +35 -0
- package/src/execution/__tests__/session-pending.test.ts +471 -0
- package/src/execution/__tests__/session-reconstructor.test.ts +366 -15
- package/src/execution/__tests__/session-runner-branch-cache-lru.test.ts +110 -0
- package/src/execution/__tests__/session-runner-close-prune.test.ts +181 -0
- package/src/execution/__tests__/session-runner-dispatch.test.ts +489 -0
- package/src/execution/__tests__/session-runner-epipe.test.ts +4 -3
- package/src/execution/__tests__/session-runner-heartbeat-idle-fallback.test.ts +227 -0
- package/src/execution/__tests__/session-runner-lifecycle-helpers.test.ts +290 -0
- package/src/execution/__tests__/session-runner-schema-env.test.ts +7 -5
- package/src/execution/__tests__/settled-watchdog.test.ts +524 -0
- package/src/execution/__tests__/spawn-args.test.ts +11 -10
- package/src/execution/__tests__/spawn-event-adapter-rpc.test.ts +26 -23
- package/src/execution/__tests__/spawn-event-adapter.test.ts +1 -1
- package/src/execution/__tests__/spawn-worktree-guidance.test.ts +5 -4
- package/src/execution/__tests__/spawned-children.test.ts +155 -11
- package/src/execution/__tests__/start-sync-model-guard.test.ts +4 -4
- package/src/execution/__tests__/stdin-writer.test.ts +6 -4
- package/src/execution/__tests__/stream-sink-retirement.test.ts +6 -6
- package/src/execution/__tests__/subagent-actions-core.test.ts +1017 -0
- package/src/execution/__tests__/subagent-service-message-close.test.ts +99 -35
- package/src/execution/__tests__/subagent-service-multiproc-guard.test.ts +174 -0
- package/src/execution/__tests__/subagent-service-notify-gate.test.ts +271 -0
- package/src/execution/__tests__/subagent-service-parent-guard.test.ts +33 -29
- package/src/execution/__tests__/subagent-service-recovery-bounds.test.ts +341 -0
- package/src/execution/__tests__/subagent-service.test.ts +37 -30
- package/src/execution/__tests__/subprocess-agent-runner-routing.test.ts +88 -12
- package/src/execution/__tests__/subprocess-agent-runner-timeout.test.ts +75 -0
- package/src/execution/__tests__/subprocess-agent-runner.test.ts +22 -20
- package/src/execution/__tests__/temp-prompt.test.ts +1 -1
- package/src/execution/__tests__/timeout-integration.test.ts +13 -12
- package/src/execution/__tests__/turn-limiter-semantics.test.ts +1 -1
- package/src/execution/__tests__/turn-limiter.test.ts +1 -1
- package/src/execution/__tests__/ui-request-handler-factory.test.ts +107 -7
- package/src/execution/__tests__/ui-request-handler.test.ts +4 -3
- package/src/execution/__tests__/ui-request-queue.test.ts +167 -2
- package/src/execution/__tests__/worktree-git-ops.test.ts +571 -0
- package/src/execution/__tests__/worktree-manager.test.ts +14 -5
- package/src/execution/__tests__/worktree-pid-registration.integration.test.ts +4 -3
- package/src/execution/__tests__/worktree-reconcile-aging.test.ts +204 -0
- package/src/execution/agent-registry.ts +298 -30
- package/src/execution/agent-result-mapper.ts +3 -0
- package/src/execution/agents-assembly.ts +88 -0
- package/src/execution/cold-resurrect.ts +199 -0
- package/src/execution/concurrency-pool.ts +71 -9
- package/src/execution/dialog-queue.ts +101 -3
- package/src/execution/engine/__tests__/common/capability-gate.test.ts +91 -0
- package/src/execution/engine/__tests__/common/data-dir.test.ts +1 -1
- package/src/execution/engine/__tests__/common/journal-wiring.test.ts +84 -0
- package/src/execution/engine/__tests__/common/kill-chain.test.ts +34 -7
- package/src/execution/engine/__tests__/common/persona-router.test.ts +4 -5
- package/src/execution/engine/__tests__/common/pool-manager.test.ts +211 -51
- package/src/execution/engine/__tests__/common/session-view-service-zcode-dbpath.test.ts +149 -0
- package/src/execution/engine/__tests__/common/session-view-service.test.ts +499 -0
- package/src/execution/engine/__tests__/conformance/contract.abort.test.ts +56 -99
- package/src/execution/engine/__tests__/conformance/contract.agent-events.test.ts +88 -15
- package/src/execution/engine/__tests__/conformance/engine-conformance.live.test.ts +33 -7
- package/src/execution/engine/__tests__/conformance/golden-replay.pi.test.ts +1 -1
- package/src/execution/engine/__tests__/conformance/golden-replay.zcode.test.ts +75 -54
- package/src/execution/engine/__tests__/conformance/zcode-appserver-harness.ts +128 -0
- package/src/execution/engine/__tests__/engine-discovery.test.ts +15 -3
- package/src/execution/engine/__tests__/model-prompt.test.ts +15 -3
- package/src/execution/engine/__tests__/registry.test.ts +94 -3
- package/src/execution/engine/__tests__/routing.test.ts +115 -6
- package/src/execution/engine/common/capability-gate.ts +92 -0
- package/src/execution/engine/common/journal-wiring.ts +97 -0
- package/src/execution/engine/common/kill-chain.ts +42 -10
- package/src/execution/engine/common/nesting-guard.ts +66 -0
- package/src/execution/engine/common/persona-router.ts +18 -8
- package/src/execution/engine/common/pool-manager.ts +332 -78
- package/src/execution/engine/common/session-view-service.ts +506 -0
- package/src/execution/engine/common/session-view-types.ts +125 -0
- package/src/execution/engine/engine-discovery.ts +12 -16
- package/src/execution/engine/engines/pi/__tests__/pi-engine.test.ts +174 -28
- package/src/execution/engine/engines/pi/__tests__/spawn-opts-direct.test.ts +257 -0
- package/src/execution/{argv-mirror.ts → engine/engines/pi/argv-mirror.ts} +43 -21
- package/src/execution/{get-state-handshake.ts → engine/engines/pi/get-state-handshake.ts} +86 -11
- package/src/execution/{output-collector.ts → engine/engines/pi/output-collector.ts} +108 -19
- package/src/execution/engine/engines/pi/pi-engine.ts +434 -38
- package/src/execution/{pi-invocation.ts → engine/engines/pi/pi-invocation.ts} +2 -2
- package/src/execution/engine/engines/pi/reader.ts +11 -0
- package/src/execution/engine/engines/pi/registration.ts +4 -2
- package/src/execution/engine/engines/pi/session-runner.ts +2840 -0
- package/src/execution/{spawn-event-adapter.ts → engine/engines/pi/spawn-event-adapter.ts} +75 -34
- package/src/execution/{stdin-writer.ts → engine/engines/pi/stdin-writer.ts} +10 -9
- package/src/execution/{temp-prompt.ts → engine/engines/pi/temp-prompt.ts} +2 -2
- package/src/execution/{turn-limiter.ts → engine/engines/pi/turn-limiter.ts} +1 -1
- package/src/execution/engine/engines/zcode/__tests__/__fixtures__/fake-appserver.mjs +301 -0
- package/src/execution/engine/engines/zcode/__tests__/__fixtures__/zcode-golden-appserver.json +36 -0
- package/src/execution/engine/engines/zcode/__tests__/appserver-launcher.test.ts +321 -0
- package/src/execution/engine/engines/zcode/__tests__/connection.test.ts +473 -0
- package/src/execution/engine/engines/zcode/__tests__/parser.test.ts +7 -210
- package/src/execution/engine/engines/zcode/__tests__/preparer.test.ts +6 -110
- package/src/execution/engine/engines/zcode/__tests__/session-channel-dispose-harvest.test.ts +247 -0
- package/src/execution/engine/engines/zcode/__tests__/session-channel-turn-timers.test.ts +451 -0
- package/src/execution/engine/engines/zcode/__tests__/session-channel.test.ts +792 -0
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-appserver.test.ts +782 -0
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-degrade.test.ts +168 -0
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-dispose.test.ts +210 -0
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-retry.test.ts +353 -0
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-status.test.ts +282 -0
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-timeout.test.ts +372 -0
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine.live.test.ts +65 -47
- package/src/execution/engine/engines/zcode/appserver-launcher.ts +167 -0
- package/src/execution/engine/engines/zcode/connection.ts +598 -0
- package/src/execution/engine/engines/zcode/constants.ts +147 -14
- package/src/execution/engine/engines/zcode/golden-sample.ts +42 -34
- package/src/execution/engine/engines/zcode/parser.ts +12 -346
- package/src/execution/engine/engines/zcode/preparer.ts +22 -150
- package/src/execution/engine/engines/zcode/session-channel.ts +968 -0
- package/src/execution/engine/engines/zcode/zcode-engine.ts +1023 -250
- package/src/execution/engine/host-task-spec.ts +32 -36
- package/src/execution/engine/model-validation.ts +177 -0
- package/src/execution/engine/port.ts +65 -7
- package/src/execution/engine/registry.ts +53 -0
- package/src/execution/engine/routing.ts +75 -1
- package/src/execution/engine/types.ts +30 -103
- package/src/execution/execution-record.ts +222 -144
- package/src/execution/finalize-record.ts +181 -85
- package/src/execution/idle-gc.ts +28 -0
- package/src/execution/lifecycle-manager.ts +27 -3
- package/src/execution/lifecycle-predicates.ts +1 -1
- package/src/execution/manifest-store.ts +53 -62
- package/src/execution/notifier.ts +10 -10
- package/src/execution/notify-host.ts +212 -0
- package/src/execution/notify-ledger.ts +117 -16
- package/src/execution/record-entry.ts +8 -2
- package/src/execution/record-store.ts +148 -88
- package/src/execution/round-settlement.ts +93 -0
- package/src/execution/session-file-gc.ts +96 -62
- package/src/execution/session-pending.ts +213 -62
- package/src/execution/session-reconstructor.ts +256 -143
- package/src/execution/sessions-index.ts +127 -102
- package/src/execution/settled-watchdog.ts +311 -0
- package/src/execution/subagent-actions-core.ts +686 -0
- package/src/execution/subagent-service.ts +1106 -907
- package/src/execution/subprocess-agent-runner.ts +144 -97
- package/src/execution/types.ts +9 -0
- package/src/execution/ui-request-handler-factory.ts +126 -75
- package/src/execution/ui-request-queue.ts +50 -19
- package/src/execution/worktree-git-ops.ts +397 -0
- package/src/execution/worktree-manager.ts +72 -10
- package/src/execution/worktree-registry.ts +6 -12
- package/src/index.ts +542 -9
- package/src/orchestration/__tests__/__fixtures__/worker-template.snapshot.txt +42 -3
- package/src/orchestration/__tests__/agent-call-catch-fallback.test.ts +3 -5
- package/src/orchestration/__tests__/agent-call-stream.test.ts +2 -2
- package/src/orchestration/__tests__/args-meta.test.ts +358 -0
- package/src/orchestration/__tests__/args-validator.test.ts +14 -0
- package/src/orchestration/__tests__/error-recovery-rebuild-failure.test.ts +312 -0
- package/src/orchestration/__tests__/error-recovery-terminal-hardening.test.ts +384 -0
- package/src/orchestration/__tests__/execute-agent-call.test.ts +151 -11
- package/src/orchestration/__tests__/file-run-store-prune.test.ts +168 -0
- package/src/orchestration/__tests__/file-run-store-throttle.test.ts +168 -0
- package/src/orchestration/__tests__/file-run-store.test.ts +390 -0
- package/src/orchestration/__tests__/helpers/flush-microtasks.ts +13 -0
- package/src/orchestration/__tests__/launcher-nested-workflow.test.ts +34 -0
- package/src/orchestration/__tests__/lifecycle-abort-broadcast-signal.test.ts +357 -0
- package/src/orchestration/__tests__/lifecycle-recover-crashed.test.ts +289 -0
- package/src/orchestration/__tests__/lifecycle-runid-injection.test.ts +3 -3
- package/src/orchestration/__tests__/lifecycle.test.ts +84 -5
- package/src/orchestration/__tests__/non-cloneable-return-e2e.test.ts +1 -1
- package/src/orchestration/__tests__/run-snapshot.test.ts +356 -0
- package/src/orchestration/__tests__/script-generate.test.ts +314 -0
- package/src/orchestration/__tests__/script-lint.test.ts +17 -0
- package/src/orchestration/__tests__/test-mocks.ts +2 -0
- package/src/orchestration/__tests__/worker-exit-without-result.test.ts +7 -6
- package/src/orchestration/__tests__/worker-message-pump-finalize-run.test.ts +229 -0
- package/src/orchestration/__tests__/{error-recovery-handlers.test.ts → worker-message-pump-handlers.test.ts} +28 -27
- package/src/orchestration/__tests__/{error-recovery-postmessage-defense.test.ts → worker-message-pump-postmessage-defense.test.ts} +8 -8
- package/src/orchestration/__tests__/{error-recovery-serialize-failed-result.test.ts → worker-message-pump-serialize-failed-result.test.ts} +2 -2
- package/src/orchestration/__tests__/{error-recovery-workflow-call.test.ts → worker-message-pump-workflow-call.test.ts} +1 -1
- package/src/orchestration/__tests__/worker-pending-timeout-abort.test.ts +275 -0
- package/src/orchestration/__tests__/worker-script-builder-runtime.test.ts +78 -1
- package/src/orchestration/__tests__/worker-script-builder.test.ts +1 -1
- package/src/orchestration/__tests__/workflow-files.test.ts +186 -0
- package/src/orchestration/__tests__/workflow-nesting-e2e.test.ts +1 -1
- package/src/orchestration/__tests__/workflow-run-summary.test.ts +119 -0
- package/src/orchestration/__tests__/workflow-script-registry-impl.test.ts +124 -0
- package/src/orchestration/agent-opts-resolver.ts +8 -8
- package/src/orchestration/args-meta.ts +198 -0
- package/src/orchestration/args-validator.ts +53 -31
- package/src/orchestration/execute-agent-call.ts +25 -79
- package/src/orchestration/file-run-store.ts +327 -0
- package/src/orchestration/launcher.ts +160 -104
- package/src/orchestration/lifecycle.ts +371 -97
- package/src/orchestration/models/agent-call.ts +7 -7
- package/src/orchestration/models/budget.ts +5 -5
- package/src/orchestration/models/ports.ts +4 -4
- package/src/orchestration/models/run-runtime.ts +15 -15
- package/src/orchestration/models/trace.ts +9 -9
- package/src/orchestration/models/types.ts +111 -22
- package/src/orchestration/models/workflow-run.ts +28 -28
- package/src/orchestration/models/workflow-script.ts +4 -4
- package/src/orchestration/run-snapshot.ts +266 -0
- package/src/orchestration/script-generate.ts +154 -0
- package/src/orchestration/script-lint.ts +123 -90
- package/src/orchestration/worker-handle.ts +10 -10
- package/src/orchestration/worker-host.ts +10 -10
- package/src/orchestration/{error-recovery.ts → worker-message-pump.ts} +498 -221
- package/src/orchestration/worker-script-builder.ts +401 -346
- package/src/orchestration/workflow-files.ts +37 -11
- package/src/orchestration/workflow-run-summary.ts +69 -0
- package/src/orchestration/workflow-script-registry-impl.ts +31 -9
- package/src/shared/__tests__/agent-ref.test.ts +209 -2
- package/src/shared/__tests__/atomic-write.test.ts +267 -0
- package/src/shared/__tests__/bounded-serialize.test.ts +236 -0
- package/src/shared/__tests__/injection-render.test.ts +518 -0
- package/src/shared/__tests__/meta-parser.test.ts +151 -0
- package/src/shared/__tests__/resource-discovery-host-roots.test.ts +474 -0
- package/src/shared/__tests__/resource-discovery.test.ts +261 -217
- package/src/shared/agent-ref.ts +143 -2
- package/src/shared/atomic-write.ts +323 -0
- package/src/shared/bounded-serialize.ts +154 -0
- package/src/shared/injection-render.ts +279 -0
- package/src/shared/meta-parser.ts +182 -68
- package/src/shared/model-ref.ts +15 -2
- package/src/shared/resource-discovery.ts +97 -204
- package/src/shared/resource-meta.ts +14 -0
- package/src/shared/schema-jsonify.ts +1 -1
- package/src/shared/xml-injection.ts +9 -9
- package/workflows/README.md +9 -9
- package/workflows/chain.js +4 -2
- package/workflows/map-reduce.js +5 -3
- package/workflows/parallel.js +5 -3
- package/workflows/review-fix-loop-utils.cjs +165 -92
- package/workflows/review-fix-loop-utils.d.cts +287 -0
- package/workflows/review-fix-loop.js +18 -7
- package/workflows/scatter-gather.js +4 -2
- package/dist/chunk-3VOERJPJ.js +0 -22
- package/src/execution/__tests__/execute-options-mapper.test.ts +0 -200
- package/src/execution/engine/engines/pi/__tests__/task-spec-mapper.test.ts +0 -164
- package/src/execution/engine/engines/pi/task-spec-mapper.ts +0 -100
- package/src/execution/engine/engines/zcode/__tests__/__fixtures__/zcode-golden-spawn.json +0 -39
- package/src/execution/engine/engines/zcode/__tests__/launcher.test.ts +0 -150
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine.test.ts +0 -580
- package/src/execution/engine/engines/zcode/launcher.ts +0 -161
- package/src/execution/execute-options-mapper.ts +0 -115
- package/src/execution/session-runner.ts +0 -1789
- package/src/shared/__tests__/resource-discovery-manifest-cache.test.ts +0 -288
|
@@ -31,7 +31,9 @@ import type { LifecycleDeps } from "./models/ports.ts";
|
|
|
31
31
|
import type { RunSpec } from "./models/run-spec.ts";
|
|
32
32
|
import type { DoneReason } from "./models/types.ts";
|
|
33
33
|
import type { WorkflowRun } from "./models/workflow-run.ts";
|
|
34
|
+
import type { WorkflowScript } from "./models/workflow-script.ts";
|
|
34
35
|
import type { WorkflowScriptRegistry } from "./models/workflow-script-registry.ts";
|
|
36
|
+
import type { LintResult } from "./script-lint.ts";
|
|
35
37
|
import { assertSafeTimerDelay } from "../shared/timer-delay.ts";
|
|
36
38
|
|
|
37
39
|
// ── 常量 ─────────────────────────────────────────────────────
|
|
@@ -106,6 +108,14 @@ function pollInterval(): Promise<void> {
|
|
|
106
108
|
});
|
|
107
109
|
}
|
|
108
110
|
|
|
111
|
+
/** lint findings 摘要串(runAndWait / executeNestedWorkflow 共用同一错误文案格式)。 */
|
|
112
|
+
function formatLintErrorSummary(lintResult: LintResult): string {
|
|
113
|
+
return lintResult.findings
|
|
114
|
+
.filter((f) => f.severity === "error")
|
|
115
|
+
.map((f) => `L${f.line}: ${f.message}`)
|
|
116
|
+
.join("; ");
|
|
117
|
+
}
|
|
118
|
+
|
|
109
119
|
/**
|
|
110
120
|
* 从 WorkflowRun 构建 WorkflowRunResult(D-8)。
|
|
111
121
|
*
|
|
@@ -184,11 +194,11 @@ async function pollRunToResult(
|
|
|
184
194
|
return finalRun
|
|
185
195
|
? toResult(finalRun)
|
|
186
196
|
: {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
197
|
+
status: "done",
|
|
198
|
+
reason: "time_limited",
|
|
199
|
+
error: `Workflow timed out after ${explicitTimeoutMs}ms`,
|
|
200
|
+
runId,
|
|
201
|
+
};
|
|
192
202
|
}
|
|
193
203
|
|
|
194
204
|
// ── runAndWait ───────────────────────────────────────────────
|
|
@@ -214,6 +224,11 @@ async function pollRunToResult(
|
|
|
214
224
|
* @param timeoutMs 超时上限(可选)。[预算语义对齐 + U2] 未传或 <=0 = 不限(轮询至 done /
|
|
215
225
|
* abort 为止,不限时由 XYZ_SUBAGENT_RUN_WATCHDOG_MS 兜底)——旧实现默认 10 分钟会误杀长任务,
|
|
216
226
|
* 且 0/负值会落成立即超时;仅显式正数才限时。
|
|
227
|
+
* @param model Run 级 model override(可选)。[host-surface] 经 spec.model → workerData →
|
|
228
|
+
* $MODEL → agent() fallback(RunSpec Option B 同一路径)。缺省不覆盖——宿主未显式指定
|
|
229
|
+
* model 时维持脚本内 agent() 显式参数 / agent .md / 引擎默认的既有解析序。此前该入口
|
|
230
|
+
* 无 model 通道,消费方(zsw CLI --model)只能丢弃该参数——行为劈叉于走 buildSpec 的
|
|
231
|
+
* 异步入口。
|
|
217
232
|
* @returns WorkflowRunResult(status 恒 "done")
|
|
218
233
|
*/
|
|
219
234
|
export async function runAndWait(
|
|
@@ -222,8 +237,9 @@ export async function runAndWait(
|
|
|
222
237
|
deps: LauncherDeps,
|
|
223
238
|
signal?: AbortSignal,
|
|
224
239
|
timeoutMs?: number,
|
|
240
|
+
model?: string,
|
|
225
241
|
): Promise<WorkflowRunResult> {
|
|
226
|
-
|
|
242
|
+
// 1. registry 查找脚本(workflowRef = 绝对路径,S2 路径统一)
|
|
227
243
|
const script = await deps.registry.getPath(name);
|
|
228
244
|
if (!script) {
|
|
229
245
|
return {
|
|
@@ -234,36 +250,37 @@ export async function runAndWait(
|
|
|
234
250
|
};
|
|
235
251
|
}
|
|
236
252
|
|
|
237
|
-
|
|
253
|
+
// 2. lint 校验(失败抛错——脚本本身有问题,不应静默吞)
|
|
238
254
|
const lintResult = script.validate();
|
|
239
255
|
if (!lintResult.valid) {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
.join("; ");
|
|
244
|
-
throw new Error(`Workflow script '${name}' has lint errors: ${errors}`);
|
|
256
|
+
throw new Error(
|
|
257
|
+
`Workflow script '${name}' has lint errors: ${formatLintErrorSummary(lintResult)}`,
|
|
258
|
+
);
|
|
245
259
|
}
|
|
246
260
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
261
|
+
// 3. 构建 RunSpec
|
|
262
|
+
// 不设 budgetTimeMs:runAndWait 自身用轮询 deadline(pollRunToResult 内 while + safeAbort)
|
|
263
|
+
// 实施 timeout,并产出「Workflow timed out after Xms」的具体错误信息。spec 级
|
|
264
|
+
// 时间预算(lifecycle.scheduleTimeBudget)服务于 fire-and-forget 的交互式 run
|
|
265
|
+
// (tool-workflow actionRun),若在此也设会与轮询 deadline 同时触发产生竞态。
|
|
266
|
+
// model 是例外:时间预算必须二选一(竞态),model 只有单通道(spec Option B),
|
|
267
|
+
// 调用方显式传入即透传,不与任何轮询面竞争。
|
|
252
268
|
const spec: RunSpec = {
|
|
253
269
|
scriptSource: script.toExecutable(),
|
|
254
270
|
args,
|
|
255
271
|
budgetTokens: undefined,
|
|
272
|
+
model,
|
|
256
273
|
scriptName: script.name,
|
|
257
274
|
scriptPath: script.path,
|
|
258
275
|
description: script.meta.description,
|
|
259
276
|
parameters: script.meta.parameters,
|
|
260
277
|
};
|
|
261
278
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
279
|
+
// 4. 启动 workflow + 5. 轮询至 done(含 6. timeout → abortRun,C.7)
|
|
280
|
+
// pending-notification 的 register/unregister 由 runWorkflow(启动注册)+
|
|
281
|
+
// transition("done") 路径(完成注销)统一处理,runAndWait 不再重复 emit。
|
|
282
|
+
// m3:chokepoint 校验失败(ArgsValidationError)→ 返回 invalid_args 结果(run 从未
|
|
283
|
+
// 创建,runId 恒 ''),非 ArgsValidationError 保持传播。
|
|
267
284
|
let runId: string;
|
|
268
285
|
try {
|
|
269
286
|
runId = await runWorkflow(spec, deps, signal);
|
|
@@ -296,26 +313,125 @@ async function safeAbort(
|
|
|
296
313
|
try {
|
|
297
314
|
await abortRun(runId, deps, reason, doneReason);
|
|
298
315
|
} catch (err) {
|
|
299
|
-
|
|
316
|
+
// run 可能已终态或不存在——忽略,调用方据 toResult 判断
|
|
300
317
|
void err;
|
|
301
318
|
}
|
|
302
319
|
}
|
|
303
320
|
|
|
304
321
|
// ── executeNestedWorkflow(workflow() 嵌套调用实现) ────────
|
|
305
322
|
|
|
323
|
+
/** 父 run 的循环检测链:[...parentChain, parentScriptName](顶层 run 无 chain 时前段为空)。 */
|
|
324
|
+
function buildParentChain(parentRun: WorkflowRun): string[] {
|
|
325
|
+
return [...(parentRun.spec.parentWorkflowChain ?? []), parentRun.spec.scriptName];
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/** Step 2 的 signal 继承产物(childController + 父 signal/回调——finally 移除 listener 用)。 */
|
|
329
|
+
interface InheritedSignal {
|
|
330
|
+
childController: AbortController;
|
|
331
|
+
parentSignal: AbortSignal | undefined;
|
|
332
|
+
onParentAbort: () => void;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Step 2: signal 继承——子 run 响应父 run abort(parentController → childController)。
|
|
337
|
+
*
|
|
338
|
+
* [L-2] onParentAbort 提取为命名函数以便 finally removeEventListener,防子 run 完成后
|
|
339
|
+
* parentSignal 上残留 listener(多次嵌套调用会累积)。
|
|
340
|
+
*/
|
|
341
|
+
function inheritParentSignal(parentRun: WorkflowRun): InheritedSignal {
|
|
342
|
+
const childController = new AbortController();
|
|
343
|
+
const parentSignal = parentRun.runtime?.controller.signal;
|
|
344
|
+
const onParentAbort = (): void => childController.abort();
|
|
345
|
+
if (parentSignal) {
|
|
346
|
+
if (parentSignal.aborted) {
|
|
347
|
+
childController.abort();
|
|
348
|
+
} else {
|
|
349
|
+
parentSignal.addEventListener("abort", onParentAbort, { once: true });
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return { childController, parentSignal, onParentAbort };
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Step 4: 构建 RunSpec(共享父 Budget + 循环链)。
|
|
357
|
+
*
|
|
358
|
+
* budget 共享(F-7 方案 B):子 run 直接复用父 Budget 引用(budgetRef),consume 实时
|
|
359
|
+
* 累加到父 Budget,消除并行嵌套下的超支窗口,无需 sync-back。
|
|
360
|
+
*/
|
|
361
|
+
function buildNestedSpec(
|
|
362
|
+
args: Record<string, unknown>,
|
|
363
|
+
parentRun: WorkflowRun,
|
|
364
|
+
script: WorkflowScript,
|
|
365
|
+
chain: string[],
|
|
366
|
+
): RunSpec {
|
|
367
|
+
return {
|
|
368
|
+
scriptSource: script.toExecutable(),
|
|
369
|
+
args,
|
|
370
|
+
budgetRef: parentRun.state.budget,
|
|
371
|
+
// Run-level override 传播(与父 run 对齐):子 run 继承父 run 的 model/thinkingLevel,
|
|
372
|
+
// 否则嵌套 workflow 丢失父 run 的模型指定,回落主 agent 模型。
|
|
373
|
+
model: parentRun.spec.model,
|
|
374
|
+
thinkingLevel: parentRun.spec.thinkingLevel,
|
|
375
|
+
scriptName: script.name,
|
|
376
|
+
scriptPath: script.path,
|
|
377
|
+
description: script.meta.description,
|
|
378
|
+
parameters: script.meta.parameters,
|
|
379
|
+
parentWorkflowChain: chain,
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* 嵌套 workflow timeout 从父 run 完整传导:父 spec.budgetTimeMs 显式设定时原样作为子 run
|
|
385
|
+
* 轮询 deadline(不 min(DEFAULT) 封顶——旧实现把父 time:2h 截断到 10min,违背「显式传参
|
|
386
|
+
* 完整生效」语义);父未设 → undefined,无 deadline(不限)。
|
|
387
|
+
* [U2] 预算语义统一:父 budgetTimeMs <=0(含 0/负)与 undefined 同义 = 不限——与
|
|
388
|
+
* lifecycle.runWorkflow 的 budgetTimeMs 判定(>0 才挂 scheduleTimeBudget)对齐。
|
|
389
|
+
*/
|
|
390
|
+
function resolveNestedTimeoutMs(parentRun: WorkflowRun): number | undefined {
|
|
391
|
+
const raw = parentRun.spec.budgetTimeMs;
|
|
392
|
+
return raw !== undefined && raw > 0 ? raw : undefined;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* Step 6: 结果转换(budget 已通过共享 budgetRef 实时同步,无需 sync-back)。
|
|
397
|
+
* completed → content = 字符串原样 / 其余 JSON.stringify;非 completed → error result。
|
|
398
|
+
*/
|
|
399
|
+
function toNestedCallResult(
|
|
400
|
+
name: string,
|
|
401
|
+
result: WorkflowRunResult,
|
|
402
|
+
): { content: string; parsedOutput?: unknown; error?: string } {
|
|
403
|
+
if (result.reason === "completed") {
|
|
404
|
+
const scriptResult = result.scriptResult;
|
|
405
|
+
return {
|
|
406
|
+
content:
|
|
407
|
+
typeof scriptResult === "string"
|
|
408
|
+
? scriptResult
|
|
409
|
+
: JSON.stringify(scriptResult ?? ""),
|
|
410
|
+
parsedOutput:
|
|
411
|
+
typeof scriptResult === "object" && scriptResult !== null
|
|
412
|
+
? scriptResult
|
|
413
|
+
: undefined,
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
return {
|
|
417
|
+
content: "",
|
|
418
|
+
error: result.error ?? `Workflow '${name}' ended: ${result.reason}`,
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
|
|
306
422
|
/**
|
|
307
423
|
* workflow() 嵌套调用的 Engine 实现。
|
|
308
424
|
*
|
|
309
|
-
* Worker 脚本内调 workflow(name, args) 时,
|
|
425
|
+
* Worker 脚本内调 workflow(name, args) 时,worker-message-pump.dispatchWorkflowCall 路由
|
|
310
426
|
* 到 deps.onWorkflowCall,后者(Interface 层 makeDeps 注入)委托本函数。
|
|
311
427
|
*
|
|
312
|
-
* 流程(6
|
|
428
|
+
* 流程(6 步,Step 2-6 的机制细节见各 helper):
|
|
313
429
|
* 1. 循环检测——name 已在 parentWorkflowChain 中则拒绝(防 A→B→A 死循环)
|
|
314
|
-
* 2. signal 继承——子 run 响应父 run abort(
|
|
430
|
+
* 2. signal 继承——子 run 响应父 run abort(inheritParentSignal)
|
|
315
431
|
* 3. registry.get + lint——失败返回 error result(不抛错,让脚本 soft-fail)
|
|
316
432
|
* 4. 构建 RunSpec(共享父 Budget 引用 + parentWorkflowChain 延长)+ runWorkflow
|
|
317
433
|
* 5. pollRunToResult 轮询至 done(复用 runAndWait 的轮询逻辑)
|
|
318
|
-
* 6. 结果转换(
|
|
434
|
+
* 6. 结果转换(toNestedCallResult)
|
|
319
435
|
*
|
|
320
436
|
* 不走 runAndWait:runAndWait 内部构建 RunSpec 不支持 parentWorkflowChain 与 budget
|
|
321
437
|
* 共享引用,故直接构建 spec + runWorkflow + pollRunToResult。
|
|
@@ -332,11 +448,8 @@ export async function executeNestedWorkflow(
|
|
|
332
448
|
parentRun: WorkflowRun,
|
|
333
449
|
deps: LauncherDeps,
|
|
334
450
|
): Promise<{ content: string; parsedOutput?: unknown; error?: string }> {
|
|
335
|
-
|
|
336
|
-
const chain =
|
|
337
|
-
...(parentRun.spec.parentWorkflowChain ?? []),
|
|
338
|
-
parentRun.spec.scriptName,
|
|
339
|
-
];
|
|
451
|
+
// Step 1: 循环检测——parentWorkflowChain 不存在时为 [](顶层 run)
|
|
452
|
+
const chain = buildParentChain(parentRun);
|
|
340
453
|
if (chain.includes(name)) {
|
|
341
454
|
return {
|
|
342
455
|
content: "",
|
|
@@ -344,24 +457,13 @@ export async function executeNestedWorkflow(
|
|
|
344
457
|
};
|
|
345
458
|
}
|
|
346
459
|
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
// parentSignal 上残留 listener(多次嵌套调用会累积)。
|
|
350
|
-
const childController = new AbortController();
|
|
351
|
-
const parentSignal = parentRun.runtime?.controller.signal;
|
|
352
|
-
const onParentAbort = (): void => childController.abort();
|
|
353
|
-
if (parentSignal) {
|
|
354
|
-
if (parentSignal.aborted) {
|
|
355
|
-
childController.abort();
|
|
356
|
-
} else {
|
|
357
|
-
parentSignal.addEventListener("abort", onParentAbort, { once: true });
|
|
358
|
-
}
|
|
359
|
-
}
|
|
460
|
+
// Step 2: signal 继承——子 run 响应父 run abort
|
|
461
|
+
const { childController, parentSignal, onParentAbort } = inheritParentSignal(parentRun);
|
|
360
462
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
463
|
+
// Step 3+:registry 查找 + lint + RunSpec + runWorkflow + poll 全程 try(m3 E8——
|
|
464
|
+
// try 起点在 Step 2 的 listener 注册之后,覆盖 Step 3-6。runWorkflow throw
|
|
465
|
+
// (含 chokepoint ArgsValidationError)与 not found/lint 早返回均走 finally 移除
|
|
466
|
+
// parentSignal listener——修复原 try 外 runWorkflow 的泄漏路径)。
|
|
365
467
|
try {
|
|
366
468
|
// Step 3: registry 查找 + lint(失败返回 error result,不抛错)
|
|
367
469
|
const script = await deps.registry.getPath(name);
|
|
@@ -370,76 +472,30 @@ export async function executeNestedWorkflow(
|
|
|
370
472
|
}
|
|
371
473
|
const lintResult = script.validate();
|
|
372
474
|
if (!lintResult.valid) {
|
|
373
|
-
const errors = lintResult.findings
|
|
374
|
-
.filter((f) => f.severity === "error")
|
|
375
|
-
.map((f) => `L${f.line}: ${f.message}`)
|
|
376
|
-
.join("; ");
|
|
377
475
|
return {
|
|
378
476
|
content: "",
|
|
379
|
-
error: `Workflow script '${name}' has lint errors: ${
|
|
477
|
+
error: `Workflow script '${name}' has lint errors: ${formatLintErrorSummary(lintResult)}`,
|
|
380
478
|
};
|
|
381
479
|
}
|
|
382
480
|
|
|
383
|
-
// Step 4: 构建 RunSpec
|
|
384
|
-
//
|
|
385
|
-
//
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
args,
|
|
389
|
-
budgetRef: parentRun.state.budget,
|
|
390
|
-
// Run-level override 传播(与父 run 对齐):子 run 继承父 run 的 model/thinkingLevel,
|
|
391
|
-
// 否则嵌套 workflow 丢失父 run 的模型指定,回落主 agent 模型。
|
|
392
|
-
model: parentRun.spec.model,
|
|
393
|
-
thinkingLevel: parentRun.spec.thinkingLevel,
|
|
394
|
-
scriptName: script.name,
|
|
395
|
-
scriptPath: script.path,
|
|
396
|
-
description: script.meta.description,
|
|
397
|
-
parameters: script.meta.parameters,
|
|
398
|
-
parentWorkflowChain: chain,
|
|
399
|
-
};
|
|
481
|
+
// Step 4: 构建 RunSpec + 启动子 workflow
|
|
482
|
+
// budgetRef(共享 Budget)已在 spec 透传给子 run 处理 token/cost 预算,
|
|
483
|
+
// resolveNestedTimeoutMs 的 budgetTimeMs 只服务 pollRunToResult 的轮询 deadline
|
|
484
|
+
// (wall-clock 兜底)。
|
|
485
|
+
const spec = buildNestedSpec(args, parentRun, script, chain);
|
|
400
486
|
const runId = await runWorkflow(spec, deps, childController.signal);
|
|
401
487
|
|
|
402
488
|
// Step 5: 轮询至 done(复用 runAndWait 的轮询逻辑)
|
|
403
|
-
// [H-1] 嵌套 workflow timeout 从父 run 完整传导:父 spec.budgetTimeMs 显式设定时
|
|
404
|
-
// 原样作为子 run 轮询 deadline(不 min(DEFAULT) 封顶——旧实现把父 time:2h 截断到
|
|
405
|
-
// 10min,违背「显式传参完整生效」语义);父未设 → undefined,无 deadline(不限)。
|
|
406
|
-
// budgetRef(共享 Budget)已在 Step 4 透传给子 run 处理 token/cost 预算,
|
|
407
|
-
// 此处的 budgetTimeMs 只服务 pollRunToResult 的轮询 deadline(wall-clock 兜底)。
|
|
408
|
-
// [U2] 预算语义统一:父 budgetTimeMs <=0(含 0/负)与 undefined 同义 = 不限——
|
|
409
|
-
// 与 lifecycle.runWorkflow 的 budgetTimeMs 判定(>0 才挂 scheduleTimeBudget)对齐。
|
|
410
|
-
// 旧实现 0 传导给子 run 后 deadline=now 立即超时("timed out after 0ms"),与
|
|
411
|
-
// lifecycle 的 0=不限 语义分裂。pollRunToResult 内亦对非正值兜底归一(双写防漂移),
|
|
412
|
-
// 此处显式归一是传导语义的文档化表达。
|
|
413
|
-
const rawNestedTimeoutMs = parentRun.spec.budgetTimeMs;
|
|
414
|
-
const nestedTimeoutMs =
|
|
415
|
-
rawNestedTimeoutMs !== undefined && rawNestedTimeoutMs > 0 ? rawNestedTimeoutMs : undefined;
|
|
416
|
-
|
|
417
489
|
const result = await pollRunToResult(
|
|
418
490
|
runId,
|
|
419
491
|
deps,
|
|
420
492
|
childController.signal,
|
|
421
|
-
|
|
493
|
+
resolveNestedTimeoutMs(parentRun),
|
|
422
494
|
"Aborted by parent signal",
|
|
423
495
|
);
|
|
424
496
|
|
|
425
|
-
// Step 6:
|
|
426
|
-
|
|
427
|
-
const scriptResult = result.scriptResult;
|
|
428
|
-
return {
|
|
429
|
-
content:
|
|
430
|
-
typeof scriptResult === "string"
|
|
431
|
-
? scriptResult
|
|
432
|
-
: JSON.stringify(scriptResult ?? ""),
|
|
433
|
-
parsedOutput:
|
|
434
|
-
typeof scriptResult === "object" && scriptResult !== null
|
|
435
|
-
? scriptResult
|
|
436
|
-
: undefined,
|
|
437
|
-
};
|
|
438
|
-
}
|
|
439
|
-
return {
|
|
440
|
-
content: "",
|
|
441
|
-
error: result.error ?? `Workflow '${name}' ended: ${result.reason}`,
|
|
442
|
-
};
|
|
497
|
+
// Step 6: 结果转换
|
|
498
|
+
return toNestedCallResult(name, result);
|
|
443
499
|
} catch (err) {
|
|
444
500
|
// m3:chokepoint 校验失败 → {error}(§5.3 指引文案),非 ArgsValidationError 保持传播
|
|
445
501
|
// (dispatchWorkflowCall 的 .catch 兜底转 postResult,worker 不崩)。
|