@stigmer/runner 3.15.3-dev.20260914100347 → 3.15.3-dev.20260916211208
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 +1 -0
- package/dist/.build-fingerprint +1 -1
- package/dist/__test-utils__/approval-contract/types.d.ts +1 -1
- package/dist/__test-utils__/hermetic-activity.d.ts +61 -7
- package/dist/__test-utils__/hermetic-activity.js +100 -9
- package/dist/__test-utils__/hermetic-activity.js.map +1 -1
- package/dist/__test-utils__/model-registry-fixture.d.ts +22 -3
- package/dist/__test-utils__/model-registry-fixture.js +22 -7
- package/dist/__test-utils__/model-registry-fixture.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.d.ts +2 -2
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.js +14 -11
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/fold.d.ts +61 -0
- package/dist/activities/execute-cursor/__test-utils__/fold.js +94 -0
- package/dist/activities/execute-cursor/__test-utils__/fold.js.map +1 -0
- package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js +1 -1
- package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +52 -14
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +46 -12
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.d.ts +21 -28
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js +27 -11
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.d.ts +70 -26
- package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.js +82 -32
- package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.js.map +1 -1
- package/dist/activities/execute-cursor/adapter.d.ts +8 -7
- package/dist/activities/execute-cursor/adapter.js +13 -9
- package/dist/activities/execute-cursor/adapter.js.map +1 -1
- package/dist/activities/execute-cursor/approval-policy.d.ts +10 -10
- package/dist/activities/execute-cursor/approval-policy.js +12 -23
- package/dist/activities/execute-cursor/approval-policy.js.map +1 -1
- package/dist/activities/execute-cursor/approval-state.d.ts +35 -1
- package/dist/activities/execute-cursor/approval-state.js +65 -0
- package/dist/activities/execute-cursor/approval-state.js.map +1 -1
- package/dist/activities/execute-cursor/{message-translator.d.ts → boundary-rows.d.ts} +45 -341
- package/dist/activities/execute-cursor/boundary-rows.js +1018 -0
- package/dist/activities/execute-cursor/boundary-rows.js.map +1 -0
- package/dist/activities/execute-cursor/cursor-capabilities.d.ts +1 -1
- package/dist/activities/execute-cursor/cursor-capabilities.js +1 -1
- package/dist/activities/execute-cursor/cursor-event-recorder.d.ts +33 -14
- package/dist/activities/execute-cursor/cursor-event-recorder.js +43 -21
- package/dist/activities/execute-cursor/cursor-event-recorder.js.map +1 -1
- package/dist/activities/execute-cursor/prompt-builder.d.ts +3 -3
- package/dist/activities/execute-cursor/prompt-builder.js +4 -4
- package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
- package/dist/activities/execute-cursor/sdk-warmup.d.ts +15 -6
- package/dist/activities/execute-cursor/sdk-warmup.js +15 -6
- package/dist/activities/execute-cursor/sdk-warmup.js.map +1 -1
- package/dist/activities/execute-cursor/service-tier.js +1 -2
- package/dist/activities/execute-cursor/service-tier.js.map +1 -1
- package/dist/activities/execute-cursor/session-lifecycle.d.ts +38 -59
- package/dist/activities/execute-cursor/session-lifecycle.js +59 -96
- package/dist/activities/execute-cursor/session-lifecycle.js.map +1 -1
- package/dist/activities/execute-cursor/session-store.d.ts +100 -0
- package/dist/activities/execute-cursor/session-store.js +157 -0
- package/dist/activities/execute-cursor/session-store.js.map +1 -0
- package/dist/activities/execute-cursor/sub-agent-steps.d.ts +79 -0
- package/dist/activities/execute-cursor/sub-agent-steps.js +180 -0
- package/dist/activities/execute-cursor/sub-agent-steps.js.map +1 -0
- package/dist/activities/execute-cursor/tool-result.d.ts +49 -0
- package/dist/activities/execute-cursor/tool-result.js +130 -0
- package/dist/activities/execute-cursor/tool-result.js.map +1 -0
- package/dist/activities/execute-cursor/translator.d.ts +178 -0
- package/dist/activities/execute-cursor/translator.js +485 -0
- package/dist/activities/execute-cursor/translator.js.map +1 -0
- package/dist/activities/execute-cursor/turn-boundary.d.ts +15 -5
- package/dist/activities/execute-cursor/turn-boundary.js +10 -14
- package/dist/activities/execute-cursor/turn-boundary.js.map +1 -1
- package/dist/activities/execute-cursor/turn-settle.d.ts +11 -7
- package/dist/activities/execute-cursor/turn-settle.js +47 -34
- package/dist/activities/execute-cursor/turn-settle.js.map +1 -1
- package/dist/activities/execute-cursor/turn-setup.d.ts +2 -2
- package/dist/activities/execute-cursor/turn-setup.js +5 -5
- package/dist/activities/execute-cursor/turn-setup.js.map +1 -1
- package/dist/activities/execute-cursor/turn-stream.d.ts +23 -14
- package/dist/activities/execute-cursor/turn-stream.js +41 -28
- package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
- package/dist/activities/execute-cursor/turn.d.ts +4 -4
- package/dist/activities/execute-cursor/turn.js +5 -5
- package/dist/activities/execute-cursor/usage-pricing.d.ts +2 -2
- package/dist/activities/execute-cursor/usage-pricing.js +2 -2
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.d.ts +2 -2
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js +2 -2
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.d.ts +16 -11
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js +22 -10
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.d.ts +2 -3
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js +2 -3
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.d.ts +12 -3
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js +18 -4
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.d.ts +10 -1
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js +24 -11
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js.map +1 -1
- package/dist/activities/execute-deep-agent/adapter.d.ts +1 -1
- package/dist/activities/execute-deep-agent/adapter.js +1 -1
- package/dist/activities/execute-deep-agent/approval-file-change.d.ts +19 -19
- package/dist/activities/execute-deep-agent/approval-file-change.js +16 -15
- package/dist/activities/execute-deep-agent/approval-file-change.js.map +1 -1
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.d.ts +2 -2
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.js +2 -2
- package/dist/activities/execute-deep-agent/hitl.d.ts +2 -2
- package/dist/activities/execute-deep-agent/hitl.js +2 -2
- package/dist/activities/execute-deep-agent/inline-publisher.d.ts +13 -3
- package/dist/activities/execute-deep-agent/inline-publisher.js +3 -3
- package/dist/activities/execute-deep-agent/inline-publisher.js.map +1 -1
- package/dist/activities/execute-deep-agent/prompt-builder.d.ts +3 -3
- package/dist/activities/execute-deep-agent/prompt-builder.js +6 -7
- package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
- package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +16 -8
- package/dist/activities/execute-deep-agent/streaming-side-effects.js +20 -33
- package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +3 -3
- package/dist/activities/execute-deep-agent/subagent-transformer.js +1 -1
- package/dist/activities/execute-deep-agent/translator.d.ts +134 -0
- package/dist/activities/execute-deep-agent/translator.js +418 -0
- package/dist/activities/execute-deep-agent/translator.js.map +1 -0
- package/dist/activities/execute-deep-agent/turn-settle.d.ts +13 -7
- package/dist/activities/execute-deep-agent/turn-settle.js +34 -45
- package/dist/activities/execute-deep-agent/turn-settle.js.map +1 -1
- package/dist/activities/execute-deep-agent/turn-setup.d.ts +8 -8
- package/dist/activities/execute-deep-agent/turn-setup.js +7 -7
- package/dist/activities/execute-deep-agent/turn-stream.d.ts +13 -10
- package/dist/activities/execute-deep-agent/turn-stream.js +44 -41
- package/dist/activities/execute-deep-agent/turn-stream.js.map +1 -1
- package/dist/activities/execute-deep-agent/turn.d.ts +3 -3
- package/dist/activities/execute-deep-agent/turn.js +3 -3
- package/dist/config.d.ts +2 -2
- package/dist/harness/approval-decisions.d.ts +1 -1
- package/dist/harness/approval-decisions.js +1 -1
- package/dist/harness/capabilities.d.ts +21 -11
- package/dist/harness/capabilities.js +2 -2
- package/dist/harness/capture.d.ts +4 -4
- package/dist/harness/capture.js +4 -4
- package/dist/harness/persist-chokepoint.d.ts +3 -3
- package/dist/harness/persist-chokepoint.js +3 -3
- package/dist/harness/registry.d.ts +2 -2
- package/dist/harness/registry.js +2 -2
- package/dist/harness/run-turn.d.ts +6 -4
- package/dist/harness/run-turn.js +31 -9
- package/dist/harness/run-turn.js.map +1 -1
- package/dist/harness/stop-controller.d.ts +1 -1
- package/dist/harness/stop-controller.js +1 -1
- package/dist/harness/terminal-table.d.ts +7 -7
- package/dist/harness/terminal-table.js +7 -7
- package/dist/harness/transcript/builder.d.ts +182 -0
- package/dist/harness/transcript/builder.js +693 -0
- package/dist/harness/transcript/builder.js.map +1 -0
- package/dist/harness/transcript/events.d.ts +218 -0
- package/dist/harness/transcript/events.js +50 -0
- package/dist/harness/transcript/events.js.map +1 -0
- package/dist/harness/transcript/state.d.ts +110 -0
- package/dist/harness/transcript/state.js +148 -0
- package/dist/harness/transcript/state.js.map +1 -0
- package/dist/harness/turn-context.d.ts +54 -38
- package/dist/harness/turn-context.js +42 -43
- package/dist/harness/turn-context.js.map +1 -1
- package/dist/harness/types.d.ts +63 -22
- package/dist/harness/types.js +12 -11
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/usage-accumulator.d.ts +2 -2
- package/dist/harness/usage-accumulator.js +2 -2
- package/dist/harness-adapters.d.ts +5 -4
- package/dist/harness-adapters.js +5 -4
- package/dist/harness-adapters.js.map +1 -1
- package/dist/middleware/approval-gate.d.ts +6 -0
- package/dist/middleware/approval-gate.js +7 -57
- package/dist/middleware/approval-gate.js.map +1 -1
- package/dist/middleware/cost-advisory.d.ts +3 -3
- package/dist/middleware/cost-advisory.js +3 -3
- package/dist/middleware/index.d.ts +1 -1
- package/dist/middleware/index.js +1 -1
- package/dist/runner-manager.js +1 -1
- package/dist/runner-manager.js.map +1 -1
- package/dist/shared/approval-policy.d.ts +53 -0
- package/dist/shared/approval-policy.js +76 -0
- package/dist/shared/approval-policy.js.map +1 -1
- package/dist/shared/args-preview.d.ts +45 -22
- package/dist/shared/args-preview.js +51 -41
- package/dist/shared/args-preview.js.map +1 -1
- package/dist/shared/attachment-resolver.d.ts +4 -4
- package/dist/shared/attachment-resolver.js +4 -4
- package/dist/shared/attachment-vision.d.ts +2 -1
- package/dist/shared/attachment-vision.js.map +1 -1
- package/dist/shared/attachment-zip.d.ts +2 -2
- package/dist/shared/attachment-zip.js +2 -2
- package/dist/shared/cost-guard.d.ts +2 -2
- package/dist/shared/cost-guard.js +2 -2
- package/dist/shared/exact-apply.d.ts +1 -1
- package/dist/shared/exact-apply.js +1 -1
- package/dist/shared/execution-context.d.ts +2 -2
- package/dist/shared/execution-context.js +2 -2
- package/dist/shared/extract-structured-output.d.ts +2 -2
- package/dist/shared/extract-structured-output.js +2 -2
- package/dist/shared/filereview/cas-touched.d.ts +2 -2
- package/dist/shared/filereview/cas-touched.js +2 -2
- package/dist/shared/heartbeat.d.ts +1 -1
- package/dist/shared/heartbeat.js +1 -1
- package/dist/shared/llm-backend.d.ts +0 -4
- package/dist/shared/llm-backend.js +0 -4
- package/dist/shared/llm-backend.js.map +1 -1
- package/dist/shared/model-error.d.ts +1 -2
- package/dist/shared/model-error.js +1 -2
- package/dist/shared/model-error.js.map +1 -1
- package/dist/shared/persist-decision.d.ts +18 -24
- package/dist/shared/persist-decision.js +19 -11
- package/dist/shared/persist-decision.js.map +1 -1
- package/dist/shared/prompt-sections.d.ts +4 -4
- package/dist/shared/prompt-sections.js +4 -4
- package/dist/shared/skill-resolver.d.ts +3 -3
- package/dist/shared/skill-resolver.js +3 -3
- package/dist/shared/status-offload.d.ts +1 -1
- package/dist/shared/status-offload.js +2 -2
- package/dist/shared/status-offload.js.map +1 -1
- package/dist/shared/streaming-scheduler.d.ts +2 -7
- package/dist/shared/streaming-scheduler.js +6 -14
- package/dist/shared/streaming-scheduler.js.map +1 -1
- package/dist/shared/subagent-rows.d.ts +2 -2
- package/dist/shared/subagent-rows.js +2 -2
- package/dist/shared/todos.d.ts +3 -3
- package/dist/shared/todos.js +3 -3
- package/dist/shared/tool-row.d.ts +19 -1
- package/dist/shared/tool-row.js +36 -2
- package/dist/shared/tool-row.js.map +1 -1
- package/dist/shared/worker-shutdown.d.ts +1 -1
- package/dist/shared/worker-shutdown.js +1 -1
- package/dist/shared/workspace/session-provision.d.ts +1 -1
- package/dist/shared/workspace/session-provision.js +1 -1
- package/dist/shared/workspace/sources/empty.d.ts +1 -1
- package/dist/shared/workspace/sources/empty.js +1 -2
- package/dist/shared/workspace/sources/empty.js.map +1 -1
- package/dist/shared/workspace/sources/git.js +4 -4
- package/dist/shared/workspace/sources/git.js.map +1 -1
- package/dist/shared/workspace/sources/local-path.js +6 -6
- package/dist/shared/workspace/sources/local-path.js.map +1 -1
- package/dist/shared/workspace/stigmer-link.d.ts +1 -1
- package/dist/shared/workspace/stigmer-link.js +1 -1
- package/dist/shared/workspace/types.d.ts +2 -5
- package/dist/shared/workspace/types.js +0 -6
- package/dist/shared/workspace/types.js.map +1 -1
- package/dist/shared/workspace/writeback-coordinator.d.ts +17 -4
- package/dist/shared/workspace/writeback-coordinator.js +7 -9
- package/dist/shared/workspace/writeback-coordinator.js.map +1 -1
- package/package.json +5 -5
- package/src/__test-utils__/__tests__/execution-record-barrier.test.ts +70 -0
- package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +35 -1
- package/src/__test-utils__/approval-contract/contract.ts +1 -1
- package/src/__test-utils__/approval-contract/types.ts +1 -1
- package/src/__test-utils__/harness-boot-order-child.ts +1 -1
- package/src/__test-utils__/harness-contract/contract.ts +8 -8
- package/src/__test-utils__/harness-contract/recording-sink.ts +11 -1
- package/src/__test-utils__/harness-contract/runtime-contract.ts +52 -16
- package/src/__test-utils__/harness-contract/scripted-adapter.ts +47 -43
- package/src/__test-utils__/hermetic-activity.ts +113 -9
- package/src/__test-utils__/model-registry-fixture.ts +31 -7
- package/src/__test-utils__/module-specifiers.ts +32 -3
- package/src/__tests__/harness-boot-order.test.ts +1 -1
- package/src/__tests__/harness-contract.test.ts +1 -1
- package/src/__tests__/runner-manager.test.ts +1 -1
- package/src/activities/execute-cursor/__test-utils__/__tests__/scripted-double.test.ts +32 -8
- package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +12 -10
- package/src/activities/execute-cursor/__test-utils__/fold.ts +116 -0
- package/src/activities/execute-cursor/__test-utils__/gateway-substrate.ts +1 -1
- package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +72 -19
- package/src/activities/execute-cursor/__test-utils__/scripted-agent.ts +35 -29
- package/src/activities/execute-cursor/__test-utils__/scripted-sdk.ts +94 -38
- package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/approval-state.test.ts +14 -21
- package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +3 -3
- package/src/activities/execute-cursor/__tests__/coarse-fingerprint.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/cursor-baseurl-routing.test.ts +10 -8
- package/src/activities/execute-cursor/__tests__/cursor-event-recorder.test.ts +142 -0
- package/src/activities/execute-cursor/__tests__/cursor-fetch-interceptor-bypass.test.ts +24 -12
- package/src/activities/execute-cursor/__tests__/cursor-generate-image-live.test.ts +7 -2
- package/src/activities/execute-cursor/__tests__/cursor-hook-protocol-live.test.ts +163 -0
- package/src/activities/execute-cursor/__tests__/cursor-sdk-auth-smoke.test.ts +23 -20
- package/src/activities/execute-cursor/__tests__/cursor-transcript-live.test.ts +298 -0
- package/src/activities/execute-cursor/__tests__/deny-gate-exact-apply.test.ts +4 -2
- package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/deny-and-retry.test.ts +5 -2
- package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +5 -2
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/mcp-tool-call.status.json +71 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-task-note.status.json +73 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.error-delta.status.json +78 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.output-first.status.json +72 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.status.json +72 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sub-agent-delegation.status.json +109 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/thinking-turn.status.json +78 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/todo-write.status.json +119 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-error.status.json +68 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-only-step.status.json +67 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattributed-hook-block.status.json +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +10 -7
- package/src/activities/execute-cursor/__tests__/hermetic/mcp-tool-call.test.ts +146 -0
- package/src/activities/execute-cursor/__tests__/hermetic/pause-vs-shutdown.test.ts +8 -5
- package/src/activities/execute-cursor/__tests__/hermetic/plain-turn.test.ts +6 -2
- package/src/activities/execute-cursor/__tests__/hermetic/recovery-fresh-agent.test.ts +4 -1
- package/src/activities/execute-cursor/__tests__/hermetic/run-wait-arms.test.ts +6 -2
- package/src/activities/execute-cursor/__tests__/hermetic/sdk-task-note.test.ts +122 -0
- package/src/activities/execute-cursor/__tests__/hermetic/shell-output-delta.test.ts +276 -0
- package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +12 -9
- package/src/activities/execute-cursor/__tests__/hermetic/sub-agent-delegation.test.ts +196 -0
- package/src/activities/execute-cursor/__tests__/hermetic/thinking-turn.test.ts +145 -0
- package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +4 -1
- package/src/activities/execute-cursor/__tests__/hermetic/todo-write.test.ts +165 -0
- package/src/activities/execute-cursor/__tests__/hermetic/tool-call.test.ts +7 -4
- package/src/activities/execute-cursor/__tests__/hermetic/tool-error.test.ts +138 -0
- package/src/activities/execute-cursor/__tests__/hermetic/tool-only-step.test.ts +130 -0
- package/src/activities/execute-cursor/__tests__/hermetic/unattributed-hook-block.test.ts +17 -2
- package/src/activities/execute-cursor/__tests__/hermetic/workspace-lock-timeout.test.ts +5 -2
- package/src/activities/execute-cursor/__tests__/hitl-ledger.test.ts +43 -60
- package/src/activities/execute-cursor/__tests__/hitl-resume-history.test.ts +23 -28
- package/src/activities/execute-cursor/__tests__/hook-script.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/http2-interceptor.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/prompt-goldens.test.ts +5 -5
- package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +11 -13
- package/src/activities/execute-cursor/__tests__/sequential-gate-resume.test.ts +8 -11
- package/src/activities/execute-cursor/__tests__/session-lifecycle.test.ts +86 -58
- package/src/activities/execute-cursor/__tests__/session-store.test.ts +220 -0
- package/src/activities/execute-cursor/__tests__/tool-result-image.test.ts +8 -22
- package/src/activities/execute-cursor/__tests__/translator.test.ts +594 -0
- package/src/activities/execute-cursor/__tests__/turn-boundary.test.ts +8 -5
- package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +87 -63
- package/src/activities/execute-cursor/adapter.ts +13 -9
- package/src/activities/execute-cursor/approval-policy.ts +12 -24
- package/src/activities/execute-cursor/approval-state.ts +66 -1
- package/src/activities/execute-cursor/boundary-rows.ts +1132 -0
- package/src/activities/execute-cursor/cursor-capabilities.ts +1 -1
- package/src/activities/execute-cursor/cursor-event-recorder.ts +57 -28
- package/src/activities/execute-cursor/fetch-interceptor.ts +1 -1
- package/src/activities/execute-cursor/http2-interceptor.ts +1 -1
- package/src/activities/execute-cursor/prompt-builder.ts +6 -6
- package/src/activities/execute-cursor/sdk-warmup.ts +15 -6
- package/src/activities/execute-cursor/service-tier.ts +1 -2
- package/src/activities/execute-cursor/session-lifecycle.ts +63 -109
- package/src/activities/execute-cursor/session-store.ts +187 -0
- package/src/activities/execute-cursor/sub-agent-steps.ts +188 -0
- package/src/activities/execute-cursor/tool-result.ts +128 -0
- package/src/activities/execute-cursor/translator.ts +541 -0
- package/src/activities/execute-cursor/turn-boundary.ts +21 -14
- package/src/activities/execute-cursor/turn-settle.ts +46 -34
- package/src/activities/execute-cursor/turn-setup.ts +5 -5
- package/src/activities/execute-cursor/turn-stream.ts +49 -46
- package/src/activities/execute-cursor/turn.ts +5 -5
- package/src/activities/execute-cursor/usage-pricing.ts +2 -2
- package/src/activities/execute-deep-agent/__test-utils__/contract-subject.ts +2 -2
- package/src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts +23 -11
- package/src/activities/execute-deep-agent/__test-utils__/hitl-script.ts +1 -1
- package/src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts +2 -3
- package/src/activities/execute-deep-agent/__test-utils__/scripted-model.ts +25 -4
- package/src/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.ts +25 -11
- package/src/activities/execute-deep-agent/__tests__/adapter-graph-is-sdk-free.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/adapter-is-temporal-free.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/approval-file-change.test.ts +6 -17
- package/src/activities/execute-deep-agent/__tests__/hermetic/file-review-capture.test.ts +25 -8
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.status.json +2 -7
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.status.json +4 -14
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.status.json +4 -7
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.status.json +2 -9
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.status.json +2 -9
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.status.json +109 -76
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.status.json +2 -10
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.status.json +2 -10
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.status.json +3 -6
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/write-todos.status.json +92 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/harness-contract.test.ts +3 -3
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-approve-all-lease.test.ts +9 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-round-trips.test.ts +3 -3
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-sequential-gates.test.ts +3 -3
- package/src/activities/execute-deep-agent/__tests__/hermetic/inline-artifact-across-gate.test.ts +7 -6
- package/src/activities/execute-deep-agent/__tests__/hermetic/pause-vs-shutdown.test.ts +10 -11
- package/src/activities/execute-deep-agent/__tests__/hermetic/plain-turn.test.ts +4 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/platform-stop.test.ts +9 -8
- package/src/activities/execute-deep-agent/__tests__/hermetic/recursion-limit.test.ts +21 -13
- package/src/activities/execute-deep-agent/__tests__/hermetic/resolution-error.test.ts +2 -2
- package/src/activities/execute-deep-agent/__tests__/hermetic/structured-output.test.ts +7 -7
- package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-delegation.test.ts +28 -12
- package/src/activities/execute-deep-agent/__tests__/hermetic/tool-call.test.ts +21 -21
- package/src/activities/execute-deep-agent/__tests__/hermetic/workspace-lock-timeout.test.ts +5 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/write-todos.test.ts +160 -0
- package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +35 -30
- package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +3 -4
- package/src/activities/execute-deep-agent/__tests__/prompt-goldens.test.ts +12 -10
- package/src/activities/execute-deep-agent/__tests__/scripted-model.test.ts +13 -3
- package/src/activities/execute-deep-agent/__tests__/streaming-side-effects.test.ts +26 -18
- package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/{subagent-tracker.test.ts → translator-subagents.test.ts} +76 -57
- package/src/activities/execute-deep-agent/__tests__/{v3-status-builder.test.ts → translator-through-builder.test.ts} +213 -299
- package/src/activities/execute-deep-agent/__tests__/translator.test.ts +505 -0
- package/src/activities/execute-deep-agent/__tests__/turn-stream.test.ts +11 -29
- package/src/activities/execute-deep-agent/adapter.ts +1 -1
- package/src/activities/execute-deep-agent/approval-file-change.ts +20 -22
- package/src/activities/execute-deep-agent/deep-agent-capabilities.ts +2 -2
- package/src/activities/execute-deep-agent/hitl.ts +2 -2
- package/src/activities/execute-deep-agent/inline-publisher.ts +16 -5
- package/src/activities/execute-deep-agent/prompt-builder.ts +6 -7
- package/src/activities/execute-deep-agent/streaming-side-effects.ts +22 -31
- package/src/activities/execute-deep-agent/subagent-transformer.ts +3 -3
- package/src/activities/execute-deep-agent/translator.ts +463 -0
- package/src/activities/execute-deep-agent/turn-settle.ts +35 -43
- package/src/activities/execute-deep-agent/turn-setup.ts +8 -8
- package/src/activities/execute-deep-agent/turn-stream.ts +53 -51
- package/src/activities/execute-deep-agent/turn.ts +3 -3
- package/src/config.ts +2 -2
- package/src/harness/README.md +335 -0
- package/src/harness/__tests__/approval-decisions.test.ts +2 -2
- package/src/harness/__tests__/capture.test.ts +3 -3
- package/src/harness/__tests__/import-direction.test.ts +3 -2
- package/src/harness/__tests__/mount-skills.test.ts +4 -1
- package/src/harness/__tests__/readme-index.test.ts +339 -0
- package/src/harness/__tests__/run-turn.test.ts +131 -6
- package/src/harness/__tests__/transcript-is-engine-free.test.ts +83 -0
- package/src/harness/__tests__/transcript-writers.test.ts +191 -0
- package/src/harness/__tests__/turn-attachments-vision.test.ts +5 -2
- package/src/harness/__tests__/turn-context.test.ts +5 -5
- package/src/harness/approval-decisions.ts +1 -1
- package/src/harness/capabilities.ts +21 -11
- package/src/harness/capture.ts +4 -4
- package/src/harness/persist-chokepoint.ts +3 -3
- package/src/harness/registry.ts +2 -2
- package/src/harness/run-turn.ts +33 -9
- package/src/harness/stop-controller.ts +1 -1
- package/src/harness/terminal-table.ts +7 -7
- package/src/harness/transcript/__tests__/builder.test.ts +975 -0
- package/src/harness/transcript/__tests__/state.test.ts +143 -0
- package/src/harness/transcript/builder.ts +755 -0
- package/src/harness/transcript/events.ts +262 -0
- package/src/harness/transcript/state.ts +167 -0
- package/src/harness/turn-context.ts +61 -46
- package/src/harness/types.ts +64 -22
- package/src/harness/usage-accumulator.ts +2 -2
- package/src/harness-adapters.ts +5 -4
- package/src/middleware/__tests__/cost-advisory.test.ts +2 -2
- package/src/middleware/approval-gate.ts +7 -74
- package/src/middleware/cost-advisory.ts +3 -3
- package/src/middleware/index.ts +1 -1
- package/src/runner-manager.ts +1 -1
- package/src/shared/__tests__/approval-policy.test.ts +45 -0
- package/src/shared/__tests__/args-preview.test.ts +40 -20
- package/src/shared/__tests__/attachment-naming.test.ts +1 -1
- package/src/shared/__tests__/attachment-resolver.test.ts +5 -5
- package/src/shared/__tests__/attachment-zip.test.ts +1 -1
- package/src/shared/__tests__/blueprint-resolver.test.ts +1 -1
- package/src/shared/__tests__/cost-guard.test.ts +1 -1
- package/src/shared/__tests__/exact-apply.test.ts +2 -1
- package/src/shared/__tests__/persist-decision.test.ts +19 -33
- package/src/shared/__tests__/prompt-sections.test.ts +1 -1
- package/src/shared/__tests__/stamp-flowed-rows.test.ts +1 -1
- package/src/shared/__tests__/status-offload.test.ts +1 -1
- package/src/shared/__tests__/streaming-scheduler.test.ts +8 -9
- package/src/shared/__tests__/todos.test.ts +1 -1
- package/src/shared/__tests__/tool-row.test.ts +1 -1
- package/src/shared/approval-policy.ts +95 -0
- package/src/shared/args-preview.ts +51 -42
- package/src/shared/attachment-resolver.ts +4 -4
- package/src/shared/attachment-vision.ts +2 -1
- package/src/shared/attachment-zip.ts +2 -2
- package/src/shared/cost-guard.ts +2 -2
- package/src/shared/exact-apply.ts +1 -1
- package/src/shared/execution-context.ts +2 -2
- package/src/shared/extract-structured-output.ts +2 -2
- package/src/shared/filereview/__tests__/capture.test.ts +9 -5
- package/src/shared/filereview/__tests__/git-substrate.test.ts +4 -1
- package/src/shared/filereview/__tests__/proxy-reconcile.test.ts +3 -3
- package/src/shared/filereview/cas-touched.ts +2 -2
- package/src/shared/heartbeat.ts +1 -1
- package/src/shared/llm-backend.ts +0 -4
- package/src/shared/model-error.ts +1 -2
- package/src/shared/persist-decision.ts +19 -28
- package/src/shared/prompt-sections.ts +4 -4
- package/src/shared/skill-resolver.ts +3 -3
- package/src/shared/status-offload.ts +2 -2
- package/src/shared/streaming-scheduler.ts +8 -13
- package/src/shared/subagent-rows.ts +2 -2
- package/src/shared/todos.ts +3 -3
- package/src/shared/tool-row.ts +38 -2
- package/src/shared/worker-shutdown.ts +1 -1
- package/src/shared/workspace/__tests__/git-source.test.ts +3 -3
- package/src/shared/workspace/__tests__/provisioner.test.ts +5 -5
- package/src/shared/workspace/__tests__/session-provision.test.ts +2 -2
- package/src/shared/workspace/__tests__/writeback-coordinator.integration.test.ts +8 -9
- package/src/shared/workspace/__tests__/writeback-coordinator.test.ts +25 -25
- package/src/shared/workspace/provisioner.ts +1 -1
- package/src/shared/workspace/session-provision.ts +1 -1
- package/src/shared/workspace/sources/empty.ts +2 -2
- package/src/shared/workspace/sources/git.ts +3 -4
- package/src/shared/workspace/sources/local-path.ts +5 -6
- package/src/shared/workspace/stigmer-link.ts +1 -1
- package/src/shared/workspace/types.ts +2 -5
- package/src/shared/workspace/writeback-coordinator.ts +23 -12
- package/dist/activities/execute-cursor/delta-enricher.d.ts +0 -87
- package/dist/activities/execute-cursor/delta-enricher.js +0 -265
- package/dist/activities/execute-cursor/delta-enricher.js.map +0 -1
- package/dist/activities/execute-cursor/message-translator.js +0 -2040
- package/dist/activities/execute-cursor/message-translator.js.map +0 -1
- package/dist/activities/execute-cursor/todo-tracker.d.ts +0 -40
- package/dist/activities/execute-cursor/todo-tracker.js +0 -80
- package/dist/activities/execute-cursor/todo-tracker.js.map +0 -1
- package/dist/activities/execute-deep-agent/execution-state.d.ts +0 -54
- package/dist/activities/execute-deep-agent/execution-state.js +0 -68
- package/dist/activities/execute-deep-agent/execution-state.js.map +0 -1
- package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +0 -65
- package/dist/activities/execute-deep-agent/status-builder-shared.js +0 -90
- package/dist/activities/execute-deep-agent/status-builder-shared.js.map +0 -1
- package/dist/activities/execute-deep-agent/subagent-tracker.d.ts +0 -113
- package/dist/activities/execute-deep-agent/subagent-tracker.js +0 -400
- package/dist/activities/execute-deep-agent/subagent-tracker.js.map +0 -1
- package/dist/activities/execute-deep-agent/v3-events.d.ts +0 -102
- package/dist/activities/execute-deep-agent/v3-events.js +0 -35
- package/dist/activities/execute-deep-agent/v3-events.js.map +0 -1
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.d.ts +0 -15
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js +0 -235
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js.map +0 -1
- package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +0 -111
- package/dist/activities/execute-deep-agent/v3-status-builder.js +0 -457
- package/dist/activities/execute-deep-agent/v3-status-builder.js.map +0 -1
- package/dist/shared/execution-status-writer.d.ts +0 -31
- package/dist/shared/execution-status-writer.js +0 -43
- package/dist/shared/execution-status-writer.js.map +0 -1
- package/src/activities/execute-cursor/__tests__/delta-enricher.test.ts +0 -310
- package/src/activities/execute-cursor/__tests__/message-translator.test.ts +0 -1033
- package/src/activities/execute-cursor/__tests__/todo-tracker.test.ts +0 -498
- package/src/activities/execute-cursor/delta-enricher.ts +0 -307
- package/src/activities/execute-cursor/message-translator.ts +0 -2319
- package/src/activities/execute-cursor/todo-tracker.ts +0 -91
- package/src/activities/execute-deep-agent/__tests__/execution-state-extended.test.ts +0 -148
- package/src/activities/execute-deep-agent/__tests__/execution-state.test.ts +0 -154
- package/src/activities/execute-deep-agent/__tests__/status-builder-shared.test.ts +0 -47
- package/src/activities/execute-deep-agent/__tests__/v3-protocol-normalizer.test.ts +0 -324
- package/src/activities/execute-deep-agent/execution-state.ts +0 -78
- package/src/activities/execute-deep-agent/status-builder-shared.ts +0 -142
- package/src/activities/execute-deep-agent/subagent-tracker.ts +0 -479
- package/src/activities/execute-deep-agent/v3-events.ts +0 -153
- package/src/activities/execute-deep-agent/v3-protocol-normalizer.ts +0 -264
- package/src/activities/execute-deep-agent/v3-status-builder.ts +0 -565
- package/src/shared/execution-status-writer.ts +0 -56
|
@@ -1,11 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-agent transcripts, end to end through the native translator and the
|
|
3
|
+
* builder: raw LangGraph v3 events with nested namespaces, the translator
|
|
4
|
+
* scoping them and speaking each sub-agent's lifecycle, the builder folding
|
|
5
|
+
* them into the row's own transcript (since #1097). These are the
|
|
6
|
+
* native translator's integration arms for delegation — the sub-agent
|
|
7
|
+
* tracker they once tested (`subagent-tracker.ts`, the second copy of the
|
|
8
|
+
* folding handlers) is gone; the builder's own scoped-handler arms live in
|
|
9
|
+
* `harness/transcript/__tests__/builder.test.ts`, the translator's scope
|
|
10
|
+
* arms in `translator.test.ts`.
|
|
11
|
+
*
|
|
12
|
+
* In the adapter's folder because the fixtures and the translator are
|
|
13
|
+
* `activities/` modules the direction fence keeps out of `harness/`.
|
|
14
|
+
*/
|
|
15
|
+
|
|
1
16
|
import { describe, it, expect, beforeEach } from "vitest";
|
|
2
17
|
import { create } from "@bufbuild/protobuf";
|
|
3
|
-
import { AgentExecutionStatusSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
18
|
+
import { type AgentExecutionStatus, AgentExecutionStatusSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
4
19
|
import { SubAgentExecutionSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/subagent_pb";
|
|
5
20
|
import { SubAgentStatus, MessageType, ToolCallStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
6
21
|
import { cancelInProgressSubAgentProtos } from "../../../shared/subagent-rows.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
22
|
+
import { TranscriptBuilder } from "../../../harness/transcript/builder.js";
|
|
23
|
+
import { DeepAgentTranslator } from "../translator.js";
|
|
9
24
|
import type { V3ProtocolEvent } from "../v3-event-recorder.js";
|
|
10
25
|
import {
|
|
11
26
|
resetSeq,
|
|
@@ -20,14 +35,18 @@ import {
|
|
|
20
35
|
makeProtocolEvent,
|
|
21
36
|
} from "../__test-utils__/v3-event-fixtures.js";
|
|
22
37
|
|
|
23
|
-
|
|
24
|
-
|
|
38
|
+
/** A builder and the status it builds into: the test writes through `sb` and reads `status`, as production reads `TurnSink.status`. */
|
|
39
|
+
function makeBuilder(): { sb: TranscriptBuilder; status: AgentExecutionStatus } {
|
|
40
|
+
const status = create(AgentExecutionStatusSchema, {});
|
|
41
|
+
return { sb: new TranscriptBuilder("exec-test", status), status };
|
|
25
42
|
}
|
|
26
43
|
|
|
27
|
-
|
|
44
|
+
/** The loop's path: one translator for the turn (it holds the task prefixes), every canonical event into the builder. */
|
|
45
|
+
function feedAll(sb: TranscriptBuilder, events: V3ProtocolEvent[]): void {
|
|
46
|
+
const translator = new DeepAgentTranslator(null);
|
|
28
47
|
for (const raw of events) {
|
|
29
|
-
for (const e of
|
|
30
|
-
sb.
|
|
48
|
+
for (const e of translator.translate(raw)) {
|
|
49
|
+
sb.apply(e);
|
|
31
50
|
}
|
|
32
51
|
}
|
|
33
52
|
}
|
|
@@ -79,18 +98,18 @@ function makeSubAgentEvent(taskCallId: string, method: string, data: unknown, ex
|
|
|
79
98
|
|
|
80
99
|
beforeEach(() => resetSeq());
|
|
81
100
|
|
|
82
|
-
describe("
|
|
101
|
+
describe("sub-agent transcripts (the translator and the builder together)", () => {
|
|
83
102
|
|
|
84
103
|
describe("lifecycle — happy path", () => {
|
|
85
104
|
it("creates SubAgentExecution on task tool_started", () => {
|
|
86
|
-
const sb = makeBuilder();
|
|
105
|
+
const { sb, status } = makeBuilder();
|
|
87
106
|
feedAll(sb, [
|
|
88
107
|
makeMessageStart("parent-1"),
|
|
89
108
|
makeTextDelta("parent-1", "Delegating to researcher."),
|
|
90
109
|
makeMessageFinish("parent-1"),
|
|
91
110
|
makeTaskToolStarted("call_sub_1", "researcher", "Research renewable energy"),
|
|
92
111
|
]);
|
|
93
|
-
const subs =
|
|
112
|
+
const subs = status.subAgentExecutions;
|
|
94
113
|
expect(subs).toHaveLength(1);
|
|
95
114
|
expect(subs[0].id).toBe("call_sub_1");
|
|
96
115
|
expect(subs[0].name).toBe("researcher");
|
|
@@ -101,24 +120,24 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
101
120
|
});
|
|
102
121
|
|
|
103
122
|
it("marks SubAgentExecution COMPLETED on task tool_finished", () => {
|
|
104
|
-
const sb = makeBuilder();
|
|
123
|
+
const { sb, status } = makeBuilder();
|
|
105
124
|
feedAll(sb, [
|
|
106
125
|
makeTaskToolStarted("call_sub_1", "researcher", "Research topic"),
|
|
107
126
|
makeTaskToolFinished("call_sub_1", "Renewable energy summary here."),
|
|
108
127
|
]);
|
|
109
|
-
const sub =
|
|
128
|
+
const sub = status.subAgentExecutions[0];
|
|
110
129
|
expect(sub.status).toBe(SubAgentStatus.SUB_AGENT_COMPLETED);
|
|
111
130
|
expect(sub.output).toBe("Renewable energy summary here.");
|
|
112
131
|
expect(sub.completedAt).toBeTruthy();
|
|
113
132
|
});
|
|
114
133
|
|
|
115
134
|
it("marks SubAgentExecution FAILED on task tool_error", () => {
|
|
116
|
-
const sb = makeBuilder();
|
|
135
|
+
const { sb, status } = makeBuilder();
|
|
117
136
|
feedAll(sb, [
|
|
118
137
|
makeTaskToolStarted("call_sub_1", "researcher", "Research topic"),
|
|
119
138
|
makeTaskToolError("call_sub_1", "Context overflow in sub-agent"),
|
|
120
139
|
]);
|
|
121
|
-
const sub =
|
|
140
|
+
const sub = status.subAgentExecutions[0];
|
|
122
141
|
expect(sub.status).toBe(SubAgentStatus.SUB_AGENT_FAILED);
|
|
123
142
|
expect(sub.error).toBe("Context overflow in sub-agent");
|
|
124
143
|
expect(sub.completedAt).toBeTruthy();
|
|
@@ -127,14 +146,14 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
127
146
|
|
|
128
147
|
describe("lifecycle — a stopped turn (the shared cancel act + the tracker's streaming finalize)", () => {
|
|
129
148
|
it("the shared cancelInProgressSubAgentProtos marks the tracked rows CANCELLED in place", () => {
|
|
130
|
-
const sb = makeBuilder();
|
|
149
|
+
const { sb, status } = makeBuilder();
|
|
131
150
|
feedAll(sb, [
|
|
132
151
|
makeTaskToolStarted("call_sub_1", "researcher", "Task 1"),
|
|
133
152
|
makeTaskToolStarted("call_sub_2", "shell", "Task 2"),
|
|
134
153
|
]);
|
|
135
154
|
|
|
136
|
-
cancelInProgressSubAgentProtos(
|
|
137
|
-
const subs =
|
|
155
|
+
cancelInProgressSubAgentProtos(status.subAgentExecutions);
|
|
156
|
+
const subs = status.subAgentExecutions;
|
|
138
157
|
expect(subs).toHaveLength(2);
|
|
139
158
|
expect(subs[0].status).toBe(SubAgentStatus.SUB_AGENT_CANCELLED);
|
|
140
159
|
expect(subs[0].completedAt).toBeTruthy();
|
|
@@ -142,21 +161,21 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
142
161
|
});
|
|
143
162
|
|
|
144
163
|
it("does not cancel already-completed sub-agents", () => {
|
|
145
|
-
const sb = makeBuilder();
|
|
164
|
+
const { sb, status } = makeBuilder();
|
|
146
165
|
feedAll(sb, [
|
|
147
166
|
makeTaskToolStarted("call_sub_1", "researcher", "Task 1"),
|
|
148
167
|
makeTaskToolFinished("call_sub_1", "done"),
|
|
149
168
|
makeTaskToolStarted("call_sub_2", "shell", "Task 2"),
|
|
150
169
|
]);
|
|
151
170
|
|
|
152
|
-
cancelInProgressSubAgentProtos(
|
|
153
|
-
const subs =
|
|
171
|
+
cancelInProgressSubAgentProtos(status.subAgentExecutions);
|
|
172
|
+
const subs = status.subAgentExecutions;
|
|
154
173
|
expect(subs[0].status).toBe(SubAgentStatus.SUB_AGENT_COMPLETED);
|
|
155
174
|
expect(subs[1].status).toBe(SubAgentStatus.SUB_AGENT_CANCELLED);
|
|
156
175
|
});
|
|
157
176
|
|
|
158
|
-
it("
|
|
159
|
-
const sb = makeBuilder();
|
|
177
|
+
it("finalize() clears the streaming flag on a sub-agent's in-flight message", () => {
|
|
178
|
+
const { sb, status } = makeBuilder();
|
|
160
179
|
feedAll(sb, [
|
|
161
180
|
makeTaskToolStarted("call_sub_1", "researcher", "Task 1"),
|
|
162
181
|
makeSubAgentEvent("call_sub_1", "messages", { event: "message-start", id: "msg_sub_1", run_id: "sub-run-1" }),
|
|
@@ -164,19 +183,19 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
164
183
|
event: "content-block-delta", index: 0, delta: { type: "text-delta", text: "Half a sente" }, run_id: "sub-run-1",
|
|
165
184
|
}),
|
|
166
185
|
]);
|
|
167
|
-
const msg =
|
|
186
|
+
const msg = status.subAgentExecutions[0].messages[0];
|
|
168
187
|
expect(msg.isStreaming, "the delta left the message streaming").toBe(true);
|
|
169
188
|
|
|
170
|
-
sb.
|
|
189
|
+
sb.finalize();
|
|
171
190
|
expect(msg.isStreaming).toBe(false);
|
|
172
191
|
});
|
|
173
192
|
});
|
|
174
193
|
|
|
175
|
-
describe("the status's array is built into by reference
|
|
194
|
+
describe("the status's array is built into by reference", () => {
|
|
176
195
|
it("new rows are pushed onto the array the builder was handed, never a replacement", () => {
|
|
177
196
|
const status = create(AgentExecutionStatusSchema, {});
|
|
178
197
|
const rows = status.subAgentExecutions;
|
|
179
|
-
const sb = new
|
|
198
|
+
const sb = new TranscriptBuilder("exec-test", status);
|
|
180
199
|
feedAll(sb, [makeTaskToolStarted("call_sub_1", "researcher", "Task 1")]);
|
|
181
200
|
expect(status.subAgentExecutions, "the same array object").toBe(rows);
|
|
182
201
|
expect(rows).toHaveLength(1);
|
|
@@ -189,7 +208,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
189
208
|
status: SubAgentStatus.SUB_AGENT_IN_PROGRESS,
|
|
190
209
|
});
|
|
191
210
|
const status = create(AgentExecutionStatusSchema, { subAgentExecutions: [seeded] });
|
|
192
|
-
const sb = new
|
|
211
|
+
const sb = new TranscriptBuilder("exec-test", status);
|
|
193
212
|
feedAll(sb, [
|
|
194
213
|
makeTaskToolStarted("call_sub_1", "researcher", "Task 1"),
|
|
195
214
|
makeSubAgentEvent("call_sub_1", "messages", { event: "message-start", id: "msg_sub_1", run_id: "sub-run-1" }),
|
|
@@ -208,7 +227,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
208
227
|
|
|
209
228
|
describe("namespace routing — sub-agent messages isolated from parent", () => {
|
|
210
229
|
it("routes sub-agent text events to SubAgentExecution.messages", () => {
|
|
211
|
-
const sb = makeBuilder();
|
|
230
|
+
const { sb, status } = makeBuilder();
|
|
212
231
|
feedAll(sb, [
|
|
213
232
|
makeMessageStart("parent-1"),
|
|
214
233
|
makeTextDelta("parent-1", "Delegating."),
|
|
@@ -229,21 +248,21 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
229
248
|
]);
|
|
230
249
|
|
|
231
250
|
// Parent messages should NOT contain sub-agent text
|
|
232
|
-
const parentMessages =
|
|
251
|
+
const parentMessages = status.messages;
|
|
233
252
|
expect(parentMessages).toHaveLength(1);
|
|
234
253
|
expect(parentMessages[0].content).toBe("Delegating.");
|
|
235
254
|
expect(parentMessages[0].toolCalls).toHaveLength(1);
|
|
236
255
|
expect(parentMessages[0].toolCalls[0].name).toBe("task");
|
|
237
256
|
|
|
238
257
|
// Sub-agent should have its own messages
|
|
239
|
-
const sub =
|
|
258
|
+
const sub = status.subAgentExecutions[0];
|
|
240
259
|
expect(sub.messages).toHaveLength(1);
|
|
241
260
|
expect(sub.messages[0].content).toBe("I found results.");
|
|
242
261
|
expect(sub.messages[0].type).toBe(MessageType.MESSAGE_AI);
|
|
243
262
|
});
|
|
244
263
|
|
|
245
264
|
it("routes sub-agent thinking events to SubAgentExecution.messages", () => {
|
|
246
|
-
const sb = makeBuilder();
|
|
265
|
+
const { sb, status } = makeBuilder();
|
|
247
266
|
feedAll(sb, [
|
|
248
267
|
makeTaskToolStarted("call_sub_1", "researcher", "Research"),
|
|
249
268
|
makeSubAgentEvent("call_sub_1", "messages", {
|
|
@@ -263,7 +282,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
263
282
|
event: "message-finish", reason: "end_turn", run_id: "sub-run-1",
|
|
264
283
|
}),
|
|
265
284
|
]);
|
|
266
|
-
const sub =
|
|
285
|
+
const sub = status.subAgentExecutions[0];
|
|
267
286
|
expect(sub.messages).toHaveLength(2);
|
|
268
287
|
expect(sub.messages[0].type).toBe(MessageType.MESSAGE_THINKING);
|
|
269
288
|
expect(sub.messages[0].content).toBe("Let me think...");
|
|
@@ -271,14 +290,14 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
271
290
|
expect(sub.messages[1].content).toBe("Here are the results.");
|
|
272
291
|
|
|
273
292
|
// Parent has one message: the AI message hosting the task tool_call
|
|
274
|
-
expect(
|
|
275
|
-
expect(
|
|
293
|
+
expect(status.messages).toHaveLength(1);
|
|
294
|
+
expect(status.messages[0].toolCalls[0].name).toBe("task");
|
|
276
295
|
});
|
|
277
296
|
});
|
|
278
297
|
|
|
279
298
|
describe("sub-agent tool calls", () => {
|
|
280
299
|
it("tracks tool calls within sub-agent context", () => {
|
|
281
|
-
const sb = makeBuilder();
|
|
300
|
+
const { sb, status } = makeBuilder();
|
|
282
301
|
const taskCallId = "call_task_1";
|
|
283
302
|
const subToolCallId = "call_grep_1";
|
|
284
303
|
|
|
@@ -304,7 +323,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
304
323
|
output: { lc: 1, type: "constructor", id: ["langchain_core", "messages", "ToolMessage"], kwargs: { content: "Found 3 matches", status: "success", tool_call_id: subToolCallId, name: "grep" } },
|
|
305
324
|
}, { namespace: [toolsNodeSegment(taskCallId), `tools:${subToolCallId}`] }),
|
|
306
325
|
]);
|
|
307
|
-
const sub =
|
|
326
|
+
const sub = status.subAgentExecutions[0];
|
|
308
327
|
expect(sub.messages).toHaveLength(1);
|
|
309
328
|
expect(sub.messages[0].toolCalls).toHaveLength(1);
|
|
310
329
|
expect(sub.messages[0].toolCalls[0].name).toBe("grep");
|
|
@@ -315,7 +334,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
315
334
|
|
|
316
335
|
describe("multiple concurrent sub-agents", () => {
|
|
317
336
|
it("tracks multiple sub-agents independently", () => {
|
|
318
|
-
const sb = makeBuilder();
|
|
337
|
+
const { sb, status } = makeBuilder();
|
|
319
338
|
|
|
320
339
|
feedAll(sb, [
|
|
321
340
|
makeTaskToolStarted("call_sub_1", "researcher", "Research topic A"),
|
|
@@ -347,7 +366,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
347
366
|
makeTaskToolFinished("call_sub_1", "A done"),
|
|
348
367
|
makeTaskToolFinished("call_sub_2", "B done"),
|
|
349
368
|
]);
|
|
350
|
-
const subs =
|
|
369
|
+
const subs = status.subAgentExecutions;
|
|
351
370
|
expect(subs).toHaveLength(2);
|
|
352
371
|
|
|
353
372
|
expect(subs[0].name).toBe("researcher");
|
|
@@ -362,7 +381,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
362
381
|
});
|
|
363
382
|
|
|
364
383
|
it("same sub-agent type invoked twice uses unique callIds", () => {
|
|
365
|
-
const sb = makeBuilder();
|
|
384
|
+
const { sb, status } = makeBuilder();
|
|
366
385
|
|
|
367
386
|
feedAll(sb, [
|
|
368
387
|
makeTaskToolStarted("call_1", "researcher", "Research A"),
|
|
@@ -370,7 +389,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
370
389
|
makeTaskToolStarted("call_2", "researcher", "Research B"),
|
|
371
390
|
makeTaskToolFinished("call_2", "Result B"),
|
|
372
391
|
]);
|
|
373
|
-
const subs =
|
|
392
|
+
const subs = status.subAgentExecutions;
|
|
374
393
|
expect(subs).toHaveLength(2);
|
|
375
394
|
expect(subs[0].id).toBe("call_1");
|
|
376
395
|
expect(subs[0].output).toBe("Result A");
|
|
@@ -381,7 +400,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
381
400
|
|
|
382
401
|
describe("parent timeline integrity", () => {
|
|
383
402
|
it("task tool_call appears in parent AI message", () => {
|
|
384
|
-
const sb = makeBuilder();
|
|
403
|
+
const { sb, status } = makeBuilder();
|
|
385
404
|
feedAll(sb, [
|
|
386
405
|
makeMessageStart("parent-1"),
|
|
387
406
|
makeTextDelta("parent-1", "Let me delegate."),
|
|
@@ -392,7 +411,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
392
411
|
makeTextDelta("parent-2", "The research is complete."),
|
|
393
412
|
makeMessageFinish("parent-2"),
|
|
394
413
|
]);
|
|
395
|
-
const msgs =
|
|
414
|
+
const msgs = status.messages;
|
|
396
415
|
|
|
397
416
|
// First AI message has the task tool call
|
|
398
417
|
expect(msgs[0].content).toBe("Let me delegate.");
|
|
@@ -409,36 +428,36 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
409
428
|
|
|
410
429
|
describe("edge cases", () => {
|
|
411
430
|
it("idempotent on duplicate task tool_started", () => {
|
|
412
|
-
const sb = makeBuilder();
|
|
431
|
+
const { sb, status } = makeBuilder();
|
|
413
432
|
feedAll(sb, [
|
|
414
433
|
makeTaskToolStarted("call_sub_1", "researcher", "Research"),
|
|
415
434
|
makeTaskToolStarted("call_sub_1", "researcher", "Research"),
|
|
416
435
|
]);
|
|
417
|
-
expect(
|
|
436
|
+
expect(status.subAgentExecutions).toHaveLength(1);
|
|
418
437
|
});
|
|
419
438
|
|
|
420
439
|
it("handles tool_finished for unknown callId gracefully", () => {
|
|
421
|
-
const sb = makeBuilder();
|
|
440
|
+
const { sb, status } = makeBuilder();
|
|
422
441
|
feedAll(sb, [
|
|
423
442
|
makeTaskToolFinished("unknown_call_id", "output"),
|
|
424
443
|
]);
|
|
425
|
-
expect(
|
|
444
|
+
expect(status.subAgentExecutions).toHaveLength(0);
|
|
426
445
|
});
|
|
427
446
|
|
|
428
447
|
it("events for non-tracked namespace pass to parent", () => {
|
|
429
|
-
const sb = makeBuilder();
|
|
448
|
+
const { sb, status } = makeBuilder();
|
|
430
449
|
feedAll(sb, [
|
|
431
450
|
makeMessageStart("parent-1"),
|
|
432
451
|
makeTextDelta("parent-1", "Normal text."),
|
|
433
452
|
makeMessageFinish("parent-1"),
|
|
434
453
|
]);
|
|
435
454
|
|
|
436
|
-
expect(
|
|
437
|
-
expect(
|
|
455
|
+
expect(status.messages).toHaveLength(1);
|
|
456
|
+
expect(status.messages[0].content).toBe("Normal text.");
|
|
438
457
|
});
|
|
439
458
|
|
|
440
459
|
it("depth-0 task tool_started (empty namespace) uses callId-based prefix", () => {
|
|
441
|
-
const sb = makeBuilder();
|
|
460
|
+
const { sb, status } = makeBuilder();
|
|
442
461
|
const callId = "call_depth0";
|
|
443
462
|
|
|
444
463
|
feedAll(sb, [
|
|
@@ -461,7 +480,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
461
480
|
event: "message-finish", reason: "end_turn", run_id: "sub-run",
|
|
462
481
|
}, { namespace: [`tools:${callId}`, "model_request"], node: "model_request" }),
|
|
463
482
|
]);
|
|
464
|
-
const subs =
|
|
483
|
+
const subs = status.subAgentExecutions;
|
|
465
484
|
expect(subs).toHaveLength(1);
|
|
466
485
|
expect(subs[0].name).toBe("researcher");
|
|
467
486
|
expect(subs[0].messages).toHaveLength(1);
|
|
@@ -469,7 +488,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
469
488
|
});
|
|
470
489
|
|
|
471
490
|
it("depth-1 events with registered prefix but no pipe stay in parent pipeline", () => {
|
|
472
|
-
const sb = makeBuilder();
|
|
491
|
+
const { sb, status } = makeBuilder();
|
|
473
492
|
const callId = "call_depth1_test";
|
|
474
493
|
|
|
475
494
|
feedAll(sb, [
|
|
@@ -489,11 +508,11 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
|
|
|
489
508
|
]);
|
|
490
509
|
// First message: AI message with task tool call (created by handleToolStarted)
|
|
491
510
|
// Second message: parent text that follows
|
|
492
|
-
expect(
|
|
493
|
-
expect(
|
|
494
|
-
expect(
|
|
511
|
+
expect(status.messages).toHaveLength(2);
|
|
512
|
+
expect(status.messages[0].toolCalls[0].name).toBe("task");
|
|
513
|
+
expect(status.messages[1].content).toBe("Parent continues.");
|
|
495
514
|
// Sub-agent has no messages (only registered, no child events routed)
|
|
496
|
-
const sub =
|
|
515
|
+
const sub = status.subAgentExecutions[0];
|
|
497
516
|
expect(sub.messages).toHaveLength(0);
|
|
498
517
|
});
|
|
499
518
|
});
|