@stigmer/runner 3.15.3-dev.20260914121148 → 3.16.0
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 +2 -1
- 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 +2 -2
- 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 +47 -12
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +41 -10
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.d.ts +15 -6
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js +17 -4
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js.map +1 -1
- package/dist/activities/execute-cursor/adapter.d.ts +4 -4
- package/dist/activities/execute-cursor/adapter.js +4 -4
- 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/service-tier.js +1 -2
- package/dist/activities/execute-cursor/service-tier.js.map +1 -1
- 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/activities/generate-session-subject.d.ts +25 -4
- package/dist/activities/generate-session-subject.js +17 -7
- package/dist/activities/generate-session-subject.js.map +1 -1
- package/dist/client/stigmer-client.d.ts +17 -6
- package/dist/client/stigmer-client.js +47 -14
- package/dist/client/stigmer-client.js.map +1 -1
- package/dist/config.d.ts +6 -3
- package/dist/config.js +4 -1
- package/dist/config.js.map +1 -1
- 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/interceptors/run-credential-activity.d.ts +28 -0
- package/dist/interceptors/run-credential-activity.js +56 -0
- package/dist/interceptors/run-credential-activity.js.map +1 -0
- 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 +10 -4
- package/dist/runner-manager.js.map +1 -1
- package/dist/shared/activity-input.d.ts +9 -0
- package/dist/shared/activity-input.js +17 -0
- package/dist/shared/activity-input.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-zip.d.ts +2 -2
- package/dist/shared/attachment-zip.js +2 -2
- package/dist/shared/channel-attachment.d.ts +8 -5
- package/dist/shared/channel-attachment.js +10 -6
- package/dist/shared/channel-attachment.js.map +1 -1
- 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/filereview/progress.d.ts +13 -0
- package/dist/shared/filereview/progress.js +13 -0
- package/dist/shared/filereview/progress.js.map +1 -1
- 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/memory-attachment.d.ts +16 -9
- package/dist/shared/memory-attachment.js +18 -10
- package/dist/shared/memory-attachment.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/run-credential-store.d.ts +32 -0
- package/dist/shared/run-credential-store.js +39 -0
- package/dist/shared/run-credential-store.js.map +1 -0
- package/dist/shared/run-credential.d.ts +61 -0
- package/dist/shared/run-credential.js +68 -0
- package/dist/shared/run-credential.js.map +1 -0
- 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/synthesized-attachment.d.ts +30 -3
- package/dist/shared/synthesized-attachment.js +26 -0
- package/dist/shared/synthesized-attachment.js.map +1 -1
- 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/dist/worker.js +10 -3
- package/dist/worker.js.map +1 -1
- package/dist/workflow-source.d.ts +10 -0
- package/dist/workflow-source.js +12 -0
- package/dist/workflow-source.js.map +1 -1
- package/dist/workflows/execute-from-execution.d.ts +15 -0
- package/dist/workflows/execute-from-execution.js +11 -0
- package/dist/workflows/execute-from-execution.js.map +1 -1
- package/dist/workflows/index.d.ts +5 -3
- package/dist/workflows/index.js +5 -3
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/interceptors/run-credential.d.ts +34 -0
- package/dist/workflows/interceptors/run-credential.js +71 -0
- package/dist/workflows/interceptors/run-credential.js.map +1 -0
- package/package.json +4 -4
- 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__/run-credential-e2e.test.ts +233 -0
- package/src/__tests__/run-credential-registration.test.ts +80 -0
- package/src/__tests__/runner-manager.test.ts +1 -1
- package/src/activities/__tests__/generate-session-subject-wire.test.ts +119 -0
- package/src/activities/execute-cursor/__test-utils__/__tests__/scripted-double.test.ts +1 -1
- package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +2 -2
- 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 +67 -17
- package/src/activities/execute-cursor/__test-utils__/scripted-agent.ts +19 -5
- 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-event-recorder.test.ts +142 -0
- package/src/activities/execute-cursor/__tests__/cursor-fetch-interceptor-bypass.test.ts +19 -8
- package/src/activities/execute-cursor/__tests__/cursor-sdk-auth-smoke.test.ts +10 -8
- 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 +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +1 -1
- 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 +7 -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 +5 -5
- package/src/activities/execute-cursor/__tests__/hermetic/plain-turn.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/hermetic/run-wait-arms.test.ts +2 -1
- 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 +8 -8
- 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 +1 -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 +3 -3
- 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 +13 -1
- package/src/activities/execute-cursor/__tests__/hermetic/workspace-lock-timeout.test.ts +2 -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__/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 +4 -4
- 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/service-tier.ts +1 -2
- 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/activities/generate-session-subject.ts +29 -4
- package/src/client/__tests__/stigmer-client.test.ts +92 -0
- package/src/client/stigmer-client.ts +48 -14
- package/src/config.ts +6 -3
- 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/interceptors/__tests__/run-credential-activity.test.ts +133 -0
- package/src/interceptors/run-credential-activity.ts +67 -0
- 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 +14 -4
- 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__/channel-attachment.test.ts +12 -0
- package/src/shared/__tests__/cost-guard.test.ts +1 -1
- package/src/shared/__tests__/exact-apply.test.ts +2 -1
- package/src/shared/__tests__/memory-attachment.test.ts +17 -0
- package/src/shared/__tests__/persist-decision.test.ts +19 -33
- package/src/shared/__tests__/prompt-sections.test.ts +1 -1
- package/src/shared/__tests__/run-credential.test.ts +111 -0
- 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/activity-input.ts +21 -0
- 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-zip.ts +2 -2
- package/src/shared/channel-attachment.ts +14 -6
- 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/filereview/progress.ts +13 -0
- package/src/shared/heartbeat.ts +1 -1
- package/src/shared/llm-backend.ts +0 -4
- package/src/shared/memory-attachment.ts +22 -10
- 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/run-credential-store.ts +45 -0
- package/src/shared/run-credential.ts +70 -0
- 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/synthesized-attachment.ts +38 -3
- 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/src/worker.ts +15 -3
- package/src/workflow-source.ts +15 -0
- package/src/workflows/__tests__/run-credential-interceptor.test.ts +178 -0
- package/src/workflows/execute-from-execution.ts +17 -0
- package/src/workflows/index.ts +5 -3
- package/src/workflows/interceptors/run-credential.ts +101 -0
- 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
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeepAgentTranslator — the native harness's translator: LangGraph's v3
|
|
3
|
+
* protocol events in, the canonical `TranscriptEvent` union out
|
|
4
|
+
* (`harness/transcript/events.ts`).
|
|
5
|
+
*
|
|
6
|
+
* The one module that knows LangGraph's wire shape:
|
|
7
|
+
* the shared builder folds what comes out of here and nothing of the engine
|
|
8
|
+
* reaches it otherwise. Every engine fact the builder used to read is
|
|
9
|
+
* answered on this side now (since #1097):
|
|
10
|
+
*
|
|
11
|
+
* - the tool's result, rendered to the string the row carries — the
|
|
12
|
+
* LangChain ToolMessage envelope and the LangGraph Command unwrapped;
|
|
13
|
+
* - the tool's attribution (`mcpServerSlug`) and authorization provenance,
|
|
14
|
+
* from the gate's posture (`resolveApprovalProvenance`, the gate's
|
|
15
|
+
* read-side twin);
|
|
16
|
+
* - the SCOPE of every event — the root's transcript or one sub-agent's —
|
|
17
|
+
* from LangGraph's namespace grammar, and the sub-agent's own lifecycle
|
|
18
|
+
* (`sub_agent_started/finished/failed`) from deepagents' `task` tool
|
|
19
|
+
* Until #1097 the builder read the namespace and the
|
|
20
|
+
* tool's name itself, and kept a second copy of every handler for the
|
|
21
|
+
* sub-agents' transcripts.
|
|
22
|
+
*
|
|
23
|
+
* What this translator deliberately does NOT answer: whether the gate holds
|
|
24
|
+
* a call. On native it never has to. LangGraph's `interrupt()` runs inside
|
|
25
|
+
* the gate middleware BEFORE the tool handler, so a held call emits no
|
|
26
|
+
* `tool-started` at all; the `tool-started` that does arrive is the engine's
|
|
27
|
+
* own word that the call was authorized — capture mode let the file write
|
|
28
|
+
* flow, a lease or the policy chain cleared it, or the user approved it on a
|
|
29
|
+
* resume. The gate's decision has arms this side cannot evaluate (capture
|
|
30
|
+
* mode asks the workspace's git state, asynchronously;
|
|
31
|
+
* `middleware/approval-gate.ts`), and duplicating them would be a second copy
|
|
32
|
+
* of the decision — exactly the drift one writer per fact exists to end. So
|
|
33
|
+
* native emits no `tool_started.gate`; the held call reaches the transcript
|
|
34
|
+
* as `approval_proposed` from the post-stream seed. Until #1097 the builder
|
|
35
|
+
* carried a copy of the decision that gated MCP tools only, a path
|
|
36
|
+
* production never took.
|
|
37
|
+
*
|
|
38
|
+
* Attribution and provenance are answered for ROOT-scope calls only: a
|
|
39
|
+
* sub-agent's rows carry none on either harness today (#1133), and one
|
|
40
|
+
* handler set would otherwise stamp them as a side effect.
|
|
41
|
+
*
|
|
42
|
+
* The scope, in LangGraph 1.3.2's grammar (mirrors deepagents'
|
|
43
|
+
* `createSubagentTransformer`): the root's model events arrive under
|
|
44
|
+
* `["model_request:<uuid>"]` and its tool events under `["tools:<uuid>"]`
|
|
45
|
+
* (one segment); a `task` tool start at that depth opens a sub-agent, and
|
|
46
|
+
* the segment it arrived under is the prefix every event of that sub-agent's
|
|
47
|
+
* graph carries first (`["tools:<uuid>", "model_request:<inner>"]`, two or
|
|
48
|
+
* more segments). An event with a REGISTERED first segment and two or more
|
|
49
|
+
* segments is the sub-agent's; everything else is the root's — including a
|
|
50
|
+
* nested namespace whose prefix nobody registered, which folds into the
|
|
51
|
+
* root as it always did (a sub-agent resumed inside its own gate
|
|
52
|
+
* with no re-emitted `task` start is the production case). A `task` inside
|
|
53
|
+
* a sub-agent is an ordinary row of that sub-agent's transcript: one level
|
|
54
|
+
* of delegation is tracked, as before.
|
|
55
|
+
*
|
|
56
|
+
* Beside the transcript, {@link usageOf} answers the loop's one
|
|
57
|
+
* non-transcript question about the wire — the usage a
|
|
58
|
+
* `message-finish` carries — so the loop never parses a raw event itself.
|
|
59
|
+
* What the wire carries that the transcript does not: `lifecycle` and
|
|
60
|
+
* `provider` events, the standalone `usage` event, each event's `seq` and
|
|
61
|
+
* `node`. None of it was ever folded; the recorder keeps the raw event for
|
|
62
|
+
* a replay.
|
|
63
|
+
*
|
|
64
|
+
* The file was `v3-protocol-normalizer.ts` (a stateless `normalize`) until
|
|
65
|
+
* #1097 made it stateful — the same word as `execute-cursor/translator.ts`,
|
|
66
|
+
* so a third harness's author finds one shape in both.
|
|
67
|
+
*
|
|
68
|
+
* Defensive parsing: handles both snake_case and camelCase field names
|
|
69
|
+
* for tool IDs/names (protocol spec uses camelCase but recordings show
|
|
70
|
+
* snake_case). Uses `data.event` as canonical discriminator, with
|
|
71
|
+
* `data.type` as fallback (CP04 finding).
|
|
72
|
+
*/
|
|
73
|
+
import { resolveApprovalProvenance } from "../../shared/approval-policy.js";
|
|
74
|
+
const loggedUnknowns = new Set();
|
|
75
|
+
/** deepagents' delegation tool: the one tool name this translator knows, because its start opens a sub-agent. */
|
|
76
|
+
const TASK_TOOL = "task";
|
|
77
|
+
// ── The translator ────────────────────────────────────────────────
|
|
78
|
+
export class DeepAgentTranslator {
|
|
79
|
+
gate;
|
|
80
|
+
/** First namespace segment → the sub-agent (its `task` call id) whose graph runs under it. */
|
|
81
|
+
subAgentByPrefix = new Map();
|
|
82
|
+
/** The `task` call ids whose completion closes a sub-agent. */
|
|
83
|
+
taskCalls = new Set();
|
|
84
|
+
/**
|
|
85
|
+
* @param gate the turn's gate posture, for attribution and provenance;
|
|
86
|
+
* `null` where a turn runs with none (the unit arms that drive the
|
|
87
|
+
* builder bare), and then every call is unattributed.
|
|
88
|
+
*/
|
|
89
|
+
constructor(gate) {
|
|
90
|
+
this.gate = gate;
|
|
91
|
+
}
|
|
92
|
+
/** One raw event to its canonical events — `translate(raw)` is the one signature every harness's translator shares. */
|
|
93
|
+
translate(raw) {
|
|
94
|
+
const namespace = raw.params.namespace;
|
|
95
|
+
const subAgentId = this.scopeOf(namespace);
|
|
96
|
+
const out = [];
|
|
97
|
+
for (const event of normalize(raw)) {
|
|
98
|
+
if (subAgentId !== undefined) {
|
|
99
|
+
out.push({ ...event, subAgentId });
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
switch (event.kind) {
|
|
103
|
+
case "tool_started":
|
|
104
|
+
if (event.name === TASK_TOOL && namespace.length <= 1) {
|
|
105
|
+
out.push(this.openSubAgent(event, namespace));
|
|
106
|
+
}
|
|
107
|
+
out.push(this.attribute(event));
|
|
108
|
+
break;
|
|
109
|
+
case "tool_finished":
|
|
110
|
+
out.push(event);
|
|
111
|
+
if (this.taskCalls.has(event.callId)) {
|
|
112
|
+
out.push({ kind: "sub_agent_finished", subAgentId: event.callId, output: event.result });
|
|
113
|
+
}
|
|
114
|
+
break;
|
|
115
|
+
case "tool_error":
|
|
116
|
+
out.push(event);
|
|
117
|
+
if (this.taskCalls.has(event.callId)) {
|
|
118
|
+
out.push({ kind: "sub_agent_failed", subAgentId: event.callId, error: event.message });
|
|
119
|
+
}
|
|
120
|
+
break;
|
|
121
|
+
default:
|
|
122
|
+
out.push(event);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return out;
|
|
126
|
+
}
|
|
127
|
+
/** The sub-agent an event belongs to, or `undefined` for the root (see the header for the grammar). */
|
|
128
|
+
scopeOf(namespace) {
|
|
129
|
+
if (namespace.length < 2)
|
|
130
|
+
return undefined;
|
|
131
|
+
return this.subAgentByPrefix.get(namespace[0]);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* A `task` start at the root opens a sub-agent keyed by the call id, with
|
|
135
|
+
* the segment it arrived under as the routing prefix (a depth-0 start —
|
|
136
|
+
* tests — gets a synthetic one so its children can still name it).
|
|
137
|
+
*/
|
|
138
|
+
openSubAgent(event, namespace) {
|
|
139
|
+
const prefix = namespace[0] ?? `tools:${event.callId}`;
|
|
140
|
+
this.subAgentByPrefix.set(prefix, event.callId);
|
|
141
|
+
this.taskCalls.add(event.callId);
|
|
142
|
+
const description = stringArg(event.input, "description");
|
|
143
|
+
return {
|
|
144
|
+
kind: "sub_agent_started",
|
|
145
|
+
subAgentId: event.callId,
|
|
146
|
+
name: stringArg(event.input, "subagent_type") || TASK_TOOL,
|
|
147
|
+
subject: description,
|
|
148
|
+
input: description,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/** The attribution and provenance for one root-scope tool start. */
|
|
152
|
+
attribute(event) {
|
|
153
|
+
const gate = this.gate;
|
|
154
|
+
if (!gate)
|
|
155
|
+
return event;
|
|
156
|
+
const mcpServerSlug = gate.toolServerMap.get(event.name) ?? "";
|
|
157
|
+
const provenance = resolveApprovalProvenance(event.name, mcpServerSlug, gate.policies, gate.leasedCategories, gate.globalBypass);
|
|
158
|
+
return {
|
|
159
|
+
...event,
|
|
160
|
+
mcpServerSlug,
|
|
161
|
+
...(provenance !== undefined ? { provenance } : {}),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function stringArg(input, key) {
|
|
166
|
+
const value = input[key];
|
|
167
|
+
return typeof value === "string" ? value : "";
|
|
168
|
+
}
|
|
169
|
+
// ── The wire, event by event ──────────────────────────────────────
|
|
170
|
+
/**
|
|
171
|
+
* The stateless core: one raw event to its canonical events, root-scoped
|
|
172
|
+
* (no `subAgentId`) and unattributed (`mcpServerSlug: ""`, no provenance, no
|
|
173
|
+
* gate). The translator layers scope and the gate's answers on top; the arms
|
|
174
|
+
* that pin the wire's shape read this directly.
|
|
175
|
+
*/
|
|
176
|
+
export function normalize(event) {
|
|
177
|
+
const method = event.method;
|
|
178
|
+
switch (method) {
|
|
179
|
+
case "messages": return normalizeMessage(event);
|
|
180
|
+
case "tools": return normalizeTool(event);
|
|
181
|
+
default:
|
|
182
|
+
return [];
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* The usage one raw event carries, or `undefined`. Read from `message-finish`
|
|
187
|
+
* ONLY — v3 also emits a standalone `usage` event for the same turn, and
|
|
188
|
+
* reading both would double-count. Every namespace's finish counts: a
|
|
189
|
+
* sub-agent's spend is the execution's spend (since #1096), and the cost
|
|
190
|
+
* cap the runtime enforces reads the whole execution.
|
|
191
|
+
*
|
|
192
|
+
* A loop concern, deliberately NOT a `TranscriptEvent`:
|
|
193
|
+
* usage is neither a row nor a message, and `translate`'s return type stays
|
|
194
|
+
* the one signature every harness's translator shares. The Cursor loop reads
|
|
195
|
+
* its usage from the SDK's `turn-ended` delta — the same division.
|
|
196
|
+
*/
|
|
197
|
+
export function usageOf(event) {
|
|
198
|
+
if (event.method !== "messages")
|
|
199
|
+
return undefined;
|
|
200
|
+
const data = event.params.data;
|
|
201
|
+
if (!data || readEventType(data) !== "message-finish")
|
|
202
|
+
return undefined;
|
|
203
|
+
return normalizeUsagePayload(data.usage);
|
|
204
|
+
}
|
|
205
|
+
// ── Messages Channel ──────────────────────────────────────────────
|
|
206
|
+
function normalizeMessage(event) {
|
|
207
|
+
const data = event.params.data;
|
|
208
|
+
if (!data)
|
|
209
|
+
return [];
|
|
210
|
+
const eventType = readEventType(data);
|
|
211
|
+
const runId = (data.run_id ?? "");
|
|
212
|
+
switch (eventType) {
|
|
213
|
+
case "message-start":
|
|
214
|
+
return [{ kind: "message_start", runId }];
|
|
215
|
+
case "content-block-delta":
|
|
216
|
+
return normalizeContentBlockDelta(data, runId);
|
|
217
|
+
case "message-finish":
|
|
218
|
+
return [{ kind: "message_finish", runId }];
|
|
219
|
+
// Carried by the wire, not by the transcript (see the header).
|
|
220
|
+
case "usage":
|
|
221
|
+
case "provider":
|
|
222
|
+
case "content-block-start":
|
|
223
|
+
case "content-block-finish":
|
|
224
|
+
return [];
|
|
225
|
+
default:
|
|
226
|
+
logUnknown("messages", eventType);
|
|
227
|
+
return [];
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
function normalizeContentBlockDelta(data, runId) {
|
|
231
|
+
const delta = data.delta;
|
|
232
|
+
if (!delta)
|
|
233
|
+
return [];
|
|
234
|
+
const deltaType = delta.type;
|
|
235
|
+
if (deltaType === "text-delta") {
|
|
236
|
+
const text = (delta.text ?? "");
|
|
237
|
+
if (!text)
|
|
238
|
+
return [];
|
|
239
|
+
return [{ kind: "text_delta", runId, text }];
|
|
240
|
+
}
|
|
241
|
+
if (deltaType === "reasoning-delta") {
|
|
242
|
+
const text = (delta.reasoning ?? "");
|
|
243
|
+
if (!text)
|
|
244
|
+
return [];
|
|
245
|
+
return [{ kind: "reasoning_delta", runId, text }];
|
|
246
|
+
}
|
|
247
|
+
if (deltaType === "block-delta") {
|
|
248
|
+
const fields = delta.fields;
|
|
249
|
+
if (!fields)
|
|
250
|
+
return [];
|
|
251
|
+
if (fields.type === "tool_call_chunk") {
|
|
252
|
+
const callId = (fields.id ?? "");
|
|
253
|
+
const argsChunk = (fields.args ?? "");
|
|
254
|
+
if (!argsChunk && !callId)
|
|
255
|
+
return [];
|
|
256
|
+
return [{ kind: "tool_arg_delta", callId, argsChunk }];
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return [];
|
|
260
|
+
}
|
|
261
|
+
// ── Tools Channel ─────────────────────────────────────────────────
|
|
262
|
+
function normalizeTool(event) {
|
|
263
|
+
const data = event.params.data;
|
|
264
|
+
if (!data)
|
|
265
|
+
return [];
|
|
266
|
+
const eventType = readEventType(data);
|
|
267
|
+
switch (eventType) {
|
|
268
|
+
case "tool-started": {
|
|
269
|
+
const callId = readToolCallId(data);
|
|
270
|
+
const name = readToolName(data);
|
|
271
|
+
const input = parseToolInput(data.input);
|
|
272
|
+
return [{ kind: "tool_started", callId, name, input, mcpServerSlug: "" }];
|
|
273
|
+
}
|
|
274
|
+
case "tool-finished": {
|
|
275
|
+
const callId = readToolCallId(data);
|
|
276
|
+
return [{ kind: "tool_finished", callId, result: extractToolResult(data.output) }];
|
|
277
|
+
}
|
|
278
|
+
case "tool-error": {
|
|
279
|
+
const callId = readToolCallId(data);
|
|
280
|
+
const message = (data.message ?? data.error ?? "");
|
|
281
|
+
return [{ kind: "tool_error", callId, message }];
|
|
282
|
+
}
|
|
283
|
+
case "tool-output-delta": {
|
|
284
|
+
const callId = readToolCallId(data);
|
|
285
|
+
const delta = (data.delta ?? "");
|
|
286
|
+
return [{ kind: "tool_output_delta", callId, delta: String(delta) }];
|
|
287
|
+
}
|
|
288
|
+
default:
|
|
289
|
+
logUnknown("tools", eventType);
|
|
290
|
+
return [];
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// ── Tool Result ───────────────────────────────────────────────────
|
|
294
|
+
/**
|
|
295
|
+
* Serialize a LangChain message `content` field into the canonical tool-result
|
|
296
|
+
* string.
|
|
297
|
+
*
|
|
298
|
+
* Text-only content is a plain string and passes through unchanged. Multimodal
|
|
299
|
+
* content (image, or mixed text+image — e.g. a computer-use screenshot) is an
|
|
300
|
+
* array of content blocks; we serialize the blocks array ITSELF, not the
|
|
301
|
+
* surrounding message envelope, so the result lands in the exact top-level-array
|
|
302
|
+
* shape the persist-time offload (`detectImagePayload`/`contentBlocks` in
|
|
303
|
+
* status-offload.ts) consumes to lift the image out into a renderable
|
|
304
|
+
* `ToolCallOutputRef`. Serializing the envelope instead would bury the base64
|
|
305
|
+
* one level deeper and defeat that detection.
|
|
306
|
+
*
|
|
307
|
+
* Returns undefined when `content` is neither a string nor an array, letting the
|
|
308
|
+
* caller fall back to serializing whatever else it holds.
|
|
309
|
+
*/
|
|
310
|
+
function serializeToolContent(content) {
|
|
311
|
+
if (typeof content === "string")
|
|
312
|
+
return content;
|
|
313
|
+
if (Array.isArray(content))
|
|
314
|
+
return JSON.stringify(content);
|
|
315
|
+
return undefined;
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* The `result: string` a `tool_finished` carries, from the v3 `tool-finished`
|
|
319
|
+
* output — engine knowledge that stays on this side of the union (it was
|
|
320
|
+
* `extractToolResultV3` in `harness/transcript/tool-result.ts` for a few
|
|
321
|
+
* commits of #1097). v3 wraps a LangChain `ToolMessage` in a constructor
|
|
322
|
+
* envelope, `{ lc, type, id, kwargs: { content, status, ... } }`; the content
|
|
323
|
+
* is what the row shows. Anything else is serialized as it came.
|
|
324
|
+
*
|
|
325
|
+
* A state-mutating tool returns a LangGraph `Command` instead —
|
|
326
|
+
* `{ lg_name: "Command", update: { ..., messages: [ToolMessage] }, goto }` —
|
|
327
|
+
* with its ToolMessage nested in the update (deepagents' `write_todos` and
|
|
328
|
+
* `task` both do). The row shows that ToolMessage's content, not the whole
|
|
329
|
+
* Command (since #1097; until then the row carried the serialized
|
|
330
|
+
* Command, the todos array twice over).
|
|
331
|
+
*/
|
|
332
|
+
function extractToolResult(output) {
|
|
333
|
+
if (typeof output === "string")
|
|
334
|
+
return output;
|
|
335
|
+
if (typeof output === "object" && output !== null) {
|
|
336
|
+
const obj = output;
|
|
337
|
+
const commandMessage = toolMessageOfCommand(obj);
|
|
338
|
+
if (commandMessage !== undefined)
|
|
339
|
+
return extractToolResult(commandMessage);
|
|
340
|
+
const kwargs = obj.kwargs;
|
|
341
|
+
if (kwargs) {
|
|
342
|
+
const fromKwargs = serializeToolContent(kwargs.content);
|
|
343
|
+
if (fromKwargs !== undefined)
|
|
344
|
+
return fromKwargs;
|
|
345
|
+
}
|
|
346
|
+
const fromContent = serializeToolContent(obj.content);
|
|
347
|
+
if (fromContent !== undefined)
|
|
348
|
+
return fromContent;
|
|
349
|
+
}
|
|
350
|
+
try {
|
|
351
|
+
return JSON.stringify(output);
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
return "[serialization error]";
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* The ToolMessage a LangGraph `Command` carries in `update.messages`, or
|
|
359
|
+
* `undefined` when the object is not a Command or carries none. The LAST
|
|
360
|
+
* message is the tool's own reply (a Command may prepend others); a Command
|
|
361
|
+
* with no message falls through to plain serialization, so nothing is lost.
|
|
362
|
+
*/
|
|
363
|
+
function toolMessageOfCommand(obj) {
|
|
364
|
+
if (obj.lg_name !== "Command")
|
|
365
|
+
return undefined;
|
|
366
|
+
const update = obj.update;
|
|
367
|
+
const messages = update?.messages;
|
|
368
|
+
if (!Array.isArray(messages) || messages.length === 0)
|
|
369
|
+
return undefined;
|
|
370
|
+
return messages[messages.length - 1];
|
|
371
|
+
}
|
|
372
|
+
// ── Defensive Field Parsers ───────────────────────────────────────
|
|
373
|
+
function readEventType(data) {
|
|
374
|
+
return (data.event ?? data.type) ?? "";
|
|
375
|
+
}
|
|
376
|
+
function readToolCallId(data) {
|
|
377
|
+
return (data.tool_call_id ?? data.toolCallId) ?? "";
|
|
378
|
+
}
|
|
379
|
+
function readToolName(data) {
|
|
380
|
+
return (data.tool_name ?? data.toolName ?? data.name) ?? "unknown_tool";
|
|
381
|
+
}
|
|
382
|
+
function parseToolInput(raw) {
|
|
383
|
+
if (raw === undefined || raw === null)
|
|
384
|
+
return {};
|
|
385
|
+
if (typeof raw === "object" && !Array.isArray(raw))
|
|
386
|
+
return raw;
|
|
387
|
+
if (typeof raw === "string") {
|
|
388
|
+
try {
|
|
389
|
+
return JSON.parse(raw);
|
|
390
|
+
}
|
|
391
|
+
catch {
|
|
392
|
+
return {};
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
return {};
|
|
396
|
+
}
|
|
397
|
+
function normalizeUsagePayload(raw) {
|
|
398
|
+
if (!raw)
|
|
399
|
+
return undefined;
|
|
400
|
+
const details = raw.input_token_details;
|
|
401
|
+
return {
|
|
402
|
+
input_tokens: raw.input_tokens,
|
|
403
|
+
output_tokens: raw.output_tokens,
|
|
404
|
+
total_tokens: raw.total_tokens,
|
|
405
|
+
input_token_details: details ? {
|
|
406
|
+
cache_creation: details.cache_creation,
|
|
407
|
+
cache_read: details.cache_read,
|
|
408
|
+
} : undefined,
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
function logUnknown(method, eventType) {
|
|
412
|
+
const key = `${method}:${eventType}`;
|
|
413
|
+
if (loggedUnknowns.has(key))
|
|
414
|
+
return;
|
|
415
|
+
loggedUnknowns.add(key);
|
|
416
|
+
console.debug(`[DeepAgentTranslator] Unknown event: method=${method} event=${eventType}`);
|
|
417
|
+
}
|
|
418
|
+
//# sourceMappingURL=translator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translator.js","sourceRoot":"","sources":["../../../src/activities/execute-deep-agent/translator.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,26 +8,32 @@
|
|
|
8
8
|
* the runtime's stop, mark in-flight sub-agent rows through the shared act
|
|
9
9
|
* and settle `interrupted` with nothing further; the graph's
|
|
10
10
|
* `structuredResponse` folded onto the status; the interrupts a completed
|
|
11
|
-
* stream left pending
|
|
11
|
+
* stream left pending proposed through the builder as WAITING rows; and the
|
|
12
|
+
* outcome.
|
|
12
13
|
*
|
|
13
14
|
* What this module never does: write a phase, a terminal copy or
|
|
14
15
|
* `completedAt` — those are the runtime's (`harness/run-turn.ts`,
|
|
15
|
-
* `terminal-table.ts`);
|
|
16
|
+
* `terminal-table.ts`); close the transcript's streaming flags — the
|
|
17
|
+
* runtime's, once `runTurn` returns, on every path (since #1097; until then this
|
|
18
|
+
* settle finalized the builder itself, and a turn that threw before
|
|
19
|
+
* reaching it left its last message streaming); settle SKIP and REJECT rows — the runtime's
|
|
16
20
|
* (`harness/approval-decisions.ts`, after every outcome); withhold secret
|
|
17
21
|
* content — the runtime's chokepoint does it on every write; finalize the
|
|
18
22
|
* write-back — the runtime's epilogue; capture the turn's file changes or
|
|
19
23
|
* decide whether a review is pending — the runtime's (`harness/capture.ts`,
|
|
20
24
|
* once, over whatever the whole turn left on the tree, after this settle
|
|
21
|
-
* returns;
|
|
22
|
-
*
|
|
25
|
+
* returns; since #1096). Transcript rows it CREATES go through the builder
|
|
26
|
+
* (`approval_proposed`, since #1097); the one row it AMENDS by identity is the
|
|
27
|
+
* gate's unattended skip (`reconcileUnattendedSkips`), whose evidence exists
|
|
28
|
+
* only inside this harness.
|
|
23
29
|
*
|
|
24
30
|
* The structured response is folded BEFORE the outcome is decided, so a turn
|
|
25
31
|
* the runtime then pauses for file review persists it and the pure
|
|
26
32
|
* file-review resume completes with it (the runtime's text fallback runs on
|
|
27
|
-
* the review-pending path too
|
|
33
|
+
* the review-pending path too).
|
|
28
34
|
*
|
|
29
|
-
* Moved from `index.ts` (post-stream through the terminal arms)
|
|
30
|
-
* the capture boundary left for the runtime
|
|
35
|
+
* Moved from `index.ts` (post-stream through the terminal arms) in #1096,
|
|
36
|
+
* where the capture boundary also left for the runtime.
|
|
31
37
|
*/
|
|
32
38
|
import type { TurnInput, TurnOutcome, TurnSink } from "../../harness/types.js";
|
|
33
39
|
import type { DeepAgentEngine } from "./turn-setup.js";
|
|
@@ -8,34 +8,34 @@
|
|
|
8
8
|
* the runtime's stop, mark in-flight sub-agent rows through the shared act
|
|
9
9
|
* and settle `interrupted` with nothing further; the graph's
|
|
10
10
|
* `structuredResponse` folded onto the status; the interrupts a completed
|
|
11
|
-
* stream left pending
|
|
11
|
+
* stream left pending proposed through the builder as WAITING rows; and the
|
|
12
|
+
* outcome.
|
|
12
13
|
*
|
|
13
14
|
* What this module never does: write a phase, a terminal copy or
|
|
14
15
|
* `completedAt` — those are the runtime's (`harness/run-turn.ts`,
|
|
15
|
-
* `terminal-table.ts`);
|
|
16
|
+
* `terminal-table.ts`); close the transcript's streaming flags — the
|
|
17
|
+
* runtime's, once `runTurn` returns, on every path (since #1097; until then this
|
|
18
|
+
* settle finalized the builder itself, and a turn that threw before
|
|
19
|
+
* reaching it left its last message streaming); settle SKIP and REJECT rows — the runtime's
|
|
16
20
|
* (`harness/approval-decisions.ts`, after every outcome); withhold secret
|
|
17
21
|
* content — the runtime's chokepoint does it on every write; finalize the
|
|
18
22
|
* write-back — the runtime's epilogue; capture the turn's file changes or
|
|
19
23
|
* decide whether a review is pending — the runtime's (`harness/capture.ts`,
|
|
20
24
|
* once, over whatever the whole turn left on the tree, after this settle
|
|
21
|
-
* returns;
|
|
22
|
-
*
|
|
25
|
+
* returns; since #1096). Transcript rows it CREATES go through the builder
|
|
26
|
+
* (`approval_proposed`, since #1097); the one row it AMENDS by identity is the
|
|
27
|
+
* gate's unattended skip (`reconcileUnattendedSkips`), whose evidence exists
|
|
28
|
+
* only inside this harness.
|
|
23
29
|
*
|
|
24
30
|
* The structured response is folded BEFORE the outcome is decided, so a turn
|
|
25
31
|
* the runtime then pauses for file review persists it and the pure
|
|
26
32
|
* file-review resume completes with it (the runtime's text fallback runs on
|
|
27
|
-
* the review-pending path too
|
|
33
|
+
* the review-pending path too).
|
|
28
34
|
*
|
|
29
|
-
* Moved from `index.ts` (post-stream through the terminal arms)
|
|
30
|
-
* the capture boundary left for the runtime
|
|
35
|
+
* Moved from `index.ts` (post-stream through the terminal arms) in #1096,
|
|
36
|
+
* where the capture boundary also left for the runtime.
|
|
31
37
|
*/
|
|
32
|
-
import { create } from "@bufbuild/protobuf";
|
|
33
|
-
import { AgentMessageSchema, ToolCallSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
|
|
34
|
-
import { MessageType, ToolCallStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
35
|
-
import { POLICY_ENGINE_VERSION, toProtoPolicySource } from "../../shared/approval-policy.js";
|
|
36
|
-
import { utcTimestamp } from "../../shared/status.js";
|
|
37
38
|
import { cancelInProgressSubAgentProtos } from "../../shared/subagent-rows.js";
|
|
38
|
-
import { classifyTool } from "../../shared/tool-kind.js";
|
|
39
39
|
import { captureApprovalArtifacts } from "./approval-file-change.js";
|
|
40
40
|
import { autoPublishWrittenFiles } from "./auto-publish.js";
|
|
41
41
|
import { detectPendingInterrupts, reconcileUnattendedSkips } from "./hitl.js";
|
|
@@ -66,10 +66,9 @@ export async function settleDeepAgentTurn(deps) {
|
|
|
66
66
|
if (stream.reason === "interrupted") {
|
|
67
67
|
// A stopped turn aborted the graph run, so any sub-agent the parent had
|
|
68
68
|
// delegated is no longer executing: CANCELLED through the one shared act
|
|
69
|
-
// (the runtime marks them itself only on its thrown arms)
|
|
70
|
-
//
|
|
69
|
+
// (the runtime marks them itself only on its thrown arms). There is no
|
|
70
|
+
// review to open.
|
|
71
71
|
cancelInProgressSubAgentProtos(status.subAgentExecutions);
|
|
72
|
-
transcript.builder.finalizeSubAgentStreaming();
|
|
73
72
|
return { kind: "interrupted" };
|
|
74
73
|
}
|
|
75
74
|
// The graph's structured response, when the run surfaced one: folded now,
|
|
@@ -98,11 +97,17 @@ export async function settleDeepAgentTurn(deps) {
|
|
|
98
97
|
return { kind: "completed" };
|
|
99
98
|
}
|
|
100
99
|
/**
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
100
|
+
* Propose, through the builder, one approval per interrupt the graph left
|
|
101
|
+
* pending — the gate's hold reaching the transcript as `approval_proposed`
|
|
102
|
+
* (since #1097). LangGraph's `interrupt()` ran before the tool
|
|
103
|
+
* handler, so the stream showed no row for the call; the builder creates
|
|
104
|
+
* the WAITING row on the message whose text proposed it, with the redacted
|
|
105
|
+
* args read from the AI message in graph state (the single source of truth
|
|
106
|
+
* for the proposed call; issue #754: a placeholder without args rendered a
|
|
107
|
+
* pathless header). Until #1097 this settle built the message and the rows
|
|
108
|
+
* itself, on a new empty AI message of its own, with no by-id check against
|
|
109
|
+
* rows the stream had created (the upsert closes it).
|
|
110
|
+
* Returns whether any was proposed.
|
|
106
111
|
*/
|
|
107
112
|
async function seedPendingInterrupts(deps) {
|
|
108
113
|
const { input, sink, engine } = deps;
|
|
@@ -113,34 +118,18 @@ async function seedPendingInterrupts(deps) {
|
|
|
113
118
|
const graphMessages = graphState.values.messages;
|
|
114
119
|
const aiMessages = Array.isArray(graphMessages) ? graphMessages : [];
|
|
115
120
|
console.log(`[turn-settle] Detected ${pending.length} pending interrupt(s) for execution ${input.executionId} — awaiting approval`);
|
|
116
|
-
const aiMsg = create(AgentMessageSchema, {
|
|
117
|
-
type: MessageType.MESSAGE_AI,
|
|
118
|
-
content: "",
|
|
119
|
-
timestamp: utcTimestamp(),
|
|
120
|
-
isStreaming: false,
|
|
121
|
-
});
|
|
122
121
|
for (const intr of pending) {
|
|
123
|
-
const
|
|
124
|
-
|
|
122
|
+
const { args } = captureApprovalArtifacts({ toolCallId: intr.toolCallId, messages: aiMessages });
|
|
123
|
+
sink.transcript.apply({
|
|
124
|
+
kind: "approval_proposed",
|
|
125
|
+
callId: intr.toolCallId,
|
|
125
126
|
name: intr.toolName,
|
|
126
|
-
status: ToolCallStatus.TOOL_CALL_WAITING_APPROVAL,
|
|
127
|
-
requiresApproval: true,
|
|
128
|
-
approvalMessage: intr.message,
|
|
129
|
-
approvalRequestedAt: utcTimestamp(),
|
|
130
127
|
mcpServerSlug: intr.mcpServerSlug,
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
policyEngineVersion: intr.policySource ? POLICY_ENGINE_VERSION : "",
|
|
128
|
+
message: intr.message,
|
|
129
|
+
...(args ? { args } : {}),
|
|
130
|
+
...(intr.policySource ? { provenance: intr.policySource } : {}),
|
|
135
131
|
});
|
|
136
|
-
const { argsPreview, args } = captureApprovalArtifacts({ toolCallId: intr.toolCallId, messages: aiMessages });
|
|
137
|
-
if (argsPreview)
|
|
138
|
-
toolCall.argsPreview = argsPreview;
|
|
139
|
-
if (args)
|
|
140
|
-
toolCall.args = args;
|
|
141
|
-
aiMsg.toolCalls.push(toolCall);
|
|
142
132
|
}
|
|
143
|
-
sink.
|
|
144
|
-
return true;
|
|
133
|
+
return sink.transcript.awaitingApproval;
|
|
145
134
|
}
|
|
146
135
|
//# sourceMappingURL=turn-settle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-settle.js","sourceRoot":"","sources":["../../../src/activities/execute-deep-agent/turn-settle.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"turn-settle.js","sourceRoot":"","sources":["../../../src/activities/execute-deep-agent/turn-settle.ts"],"names":[],"mappings":"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"}
|