@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
|
@@ -10,29 +10,36 @@
|
|
|
10
10
|
* retry froze the UI and mis-handled a mid-retry pause. One loop removes that
|
|
11
11
|
* drift by construction.
|
|
12
12
|
*
|
|
13
|
+
* The transcript (since #1097): every stream event goes through the harness's
|
|
14
|
+
* translator (`translator.ts`) into the shared `TranscriptBuilder`
|
|
15
|
+
* (`harness/transcript/builder.ts`), and the delta channel's facts, which the
|
|
16
|
+
* translator QUEUES as they arrive in `onDelta`, are drained into the builder
|
|
17
|
+
* after each stream event — never during an awaited persist, where a row
|
|
18
|
+
* write would land on a row the offload is replacing.
|
|
19
|
+
* Until #1097 this loop fed three writers of its own (the message accumulator,
|
|
20
|
+
* the delta enricher, the todo tracker), the Cursor copy of the folding rule.
|
|
21
|
+
*
|
|
13
22
|
* What the loop asks of the runtime, through the sink (`harness/types.ts`):
|
|
14
23
|
* `recordActivity()` per event (with the tool name) and per delta, so the
|
|
15
24
|
* runtime's stall watchdog measures the engine; `reportUsage()` per
|
|
16
25
|
* `turn-ended` delta, priced here at the requested variant's rates
|
|
17
26
|
* (`usage-pricing.ts`), so the runtime accounts and enforces the cost cap;
|
|
18
27
|
* `requestPersist()` where a discrete change or the streaming cadence says
|
|
19
|
-
* so (`shared/persist-decision.ts` over
|
|
28
|
+
* so (`shared/persist-decision.ts` over the builder's dirty flag), AWAITED,
|
|
20
29
|
* so a platform STOP the runtime reads from that write aborts the signal
|
|
21
30
|
* before the next event is pulled; and `stopSignal`, checked at every event
|
|
22
31
|
* boundary and listened to inside the pull, where an abort cancels the SDK
|
|
23
32
|
* run — the one way a wedged stream is unblocked, and the same act for every
|
|
24
33
|
* cause of stopping (the runtime knows why; this loop never does).
|
|
25
34
|
*
|
|
26
|
-
* Until
|
|
35
|
+
* Until #1070 this loop armed its own stall watchdog, enforced the cost cap,
|
|
27
36
|
* read STOP from its own persist, and told a pause from the activity's
|
|
28
37
|
* cancellation signal; every one of those is the runtime's now, and the loop
|
|
29
38
|
* reports only `completed`, `first-denial` or `interrupted`.
|
|
30
39
|
*/
|
|
31
40
|
import type { SDKMessage, InteractionUpdate } from "@cursor/sdk";
|
|
32
41
|
import type { TurnSink } from "../../harness/types.js";
|
|
33
|
-
import type {
|
|
34
|
-
import type { DeltaEnricher } from "./delta-enricher.js";
|
|
35
|
-
import type { TodoTracker } from "./todo-tracker.js";
|
|
42
|
+
import type { CursorTranslator } from "./translator.js";
|
|
36
43
|
import type { StreamingUpdateScheduler } from "../../shared/streaming-scheduler.js";
|
|
37
44
|
import type { CursorUsagePricer } from "./usage-pricing.js";
|
|
38
45
|
import type { createCursorEventRecorder } from "./cursor-event-recorder.js";
|
|
@@ -67,30 +74,31 @@ export interface TurnStreamState {
|
|
|
67
74
|
denialCancelSettled: Promise<void> | undefined;
|
|
68
75
|
/** Written by: the loop (a stream ERROR status event) + the retry setup (reset). Read by: error classification. */
|
|
69
76
|
streamErrorMessage: string | undefined;
|
|
70
|
-
/** Written by: the loop. Read by: the
|
|
77
|
+
/** Written by: the loop. Read by: the persist cadence and logs. */
|
|
71
78
|
eventCount: number;
|
|
72
79
|
/** Written + read by: onDelta (log the first turn's context attribution exactly once). */
|
|
73
80
|
firstTurnAttributionLogged: boolean;
|
|
74
81
|
}
|
|
75
82
|
export declare function newTurnStreamState(): TurnStreamState;
|
|
76
83
|
/**
|
|
77
|
-
* The subset of collaborators the shared onDelta needs
|
|
78
|
-
*
|
|
79
|
-
*
|
|
84
|
+
* The subset of collaborators the shared onDelta needs — the sink, the
|
|
85
|
+
* pricer, the translator (which queues the delta's transcript facts), the
|
|
86
|
+
* recorder (which sequences the delta with the stream events around it) and
|
|
87
|
+
* the state. Broken out from CursorTurnStreamDeps so the send that wires
|
|
88
|
+
* onDelta needs nothing of the stream loop.
|
|
80
89
|
*/
|
|
81
90
|
export interface TurnOnDeltaDeps {
|
|
82
91
|
readonly sink: TurnSink;
|
|
83
92
|
/** This harness's pricing of a `turn-ended` delta at the requested variant's rates. */
|
|
84
93
|
readonly usagePricer: CursorUsagePricer;
|
|
85
|
-
readonly
|
|
94
|
+
readonly translator: CursorTranslator;
|
|
95
|
+
/** The raw recording of both channels (`cursor-event-recorder.ts`); undefined when recording is off. */
|
|
96
|
+
readonly eventRecorder: CursorTurnEventRecorder | undefined;
|
|
86
97
|
readonly promptEstimatedTokens: number;
|
|
87
98
|
readonly executionId: string;
|
|
88
99
|
readonly state: TurnStreamState;
|
|
89
100
|
}
|
|
90
101
|
export interface CursorTurnStreamDeps extends TurnOnDeltaDeps {
|
|
91
|
-
readonly accumulator: MessageAccumulator;
|
|
92
|
-
readonly todoTracker: TodoTracker;
|
|
93
|
-
readonly eventRecorder: CursorTurnEventRecorder | undefined;
|
|
94
102
|
readonly scheduler: StreamingUpdateScheduler;
|
|
95
103
|
/** Session HITL dir holding the denial ledger; undefined → no gate installed → no first-denial stop. */
|
|
96
104
|
readonly hitlDir: string | undefined;
|
|
@@ -99,7 +107,8 @@ export interface CursorTurnStreamDeps extends TurnOnDeltaDeps {
|
|
|
99
107
|
* Build the shared onDelta callback. The Cursor SDK's fine-grained delta channel
|
|
100
108
|
* carries token usage, live shell output, and precise tool-call timings; it also
|
|
101
109
|
* fires far more often than discrete stream events, so it is where the runtime's
|
|
102
|
-
* stall timer is reset during a long model generation.
|
|
110
|
+
* stall timer is reset during a long model generation. Usage is priced here
|
|
111
|
+
* (a loop concern); the transcript facts are the translator's to queue.
|
|
103
112
|
*/
|
|
104
113
|
export declare function makeCursorTurnOnDelta(deps: TurnOnDeltaDeps): (event: {
|
|
105
114
|
update: InteractionUpdate;
|
|
@@ -10,20 +10,29 @@
|
|
|
10
10
|
* retry froze the UI and mis-handled a mid-retry pause. One loop removes that
|
|
11
11
|
* drift by construction.
|
|
12
12
|
*
|
|
13
|
+
* The transcript (since #1097): every stream event goes through the harness's
|
|
14
|
+
* translator (`translator.ts`) into the shared `TranscriptBuilder`
|
|
15
|
+
* (`harness/transcript/builder.ts`), and the delta channel's facts, which the
|
|
16
|
+
* translator QUEUES as they arrive in `onDelta`, are drained into the builder
|
|
17
|
+
* after each stream event — never during an awaited persist, where a row
|
|
18
|
+
* write would land on a row the offload is replacing.
|
|
19
|
+
* Until #1097 this loop fed three writers of its own (the message accumulator,
|
|
20
|
+
* the delta enricher, the todo tracker), the Cursor copy of the folding rule.
|
|
21
|
+
*
|
|
13
22
|
* What the loop asks of the runtime, through the sink (`harness/types.ts`):
|
|
14
23
|
* `recordActivity()` per event (with the tool name) and per delta, so the
|
|
15
24
|
* runtime's stall watchdog measures the engine; `reportUsage()` per
|
|
16
25
|
* `turn-ended` delta, priced here at the requested variant's rates
|
|
17
26
|
* (`usage-pricing.ts`), so the runtime accounts and enforces the cost cap;
|
|
18
27
|
* `requestPersist()` where a discrete change or the streaming cadence says
|
|
19
|
-
* so (`shared/persist-decision.ts` over
|
|
28
|
+
* so (`shared/persist-decision.ts` over the builder's dirty flag), AWAITED,
|
|
20
29
|
* so a platform STOP the runtime reads from that write aborts the signal
|
|
21
30
|
* before the next event is pulled; and `stopSignal`, checked at every event
|
|
22
31
|
* boundary and listened to inside the pull, where an abort cancels the SDK
|
|
23
32
|
* run — the one way a wedged stream is unblocked, and the same act for every
|
|
24
33
|
* cause of stopping (the runtime knows why; this loop never does).
|
|
25
34
|
*
|
|
26
|
-
* Until
|
|
35
|
+
* Until #1070 this loop armed its own stall watchdog, enforced the cost cap,
|
|
27
36
|
* read STOP from its own persist, and told a pause from the activity's
|
|
28
37
|
* cancellation signal; every one of those is the runtime's now, and the loop
|
|
29
38
|
* reports only `completed`, `first-denial` or `interrupted`.
|
|
@@ -44,15 +53,19 @@ export function newTurnStreamState() {
|
|
|
44
53
|
* Build the shared onDelta callback. The Cursor SDK's fine-grained delta channel
|
|
45
54
|
* carries token usage, live shell output, and precise tool-call timings; it also
|
|
46
55
|
* fires far more often than discrete stream events, so it is where the runtime's
|
|
47
|
-
* stall timer is reset during a long model generation.
|
|
56
|
+
* stall timer is reset during a long model generation. Usage is priced here
|
|
57
|
+
* (a loop concern); the transcript facts are the translator's to queue.
|
|
48
58
|
*/
|
|
49
59
|
export function makeCursorTurnOnDelta(deps) {
|
|
50
|
-
const { sink, usagePricer,
|
|
60
|
+
const { sink, usagePricer, translator, eventRecorder, promptEstimatedTokens, executionId, state } = deps;
|
|
51
61
|
return ({ update }) => {
|
|
52
62
|
// Progress on the delta channel too: a long model generation emits token
|
|
53
63
|
// deltas but few discrete stream events, and resetting only in the stream
|
|
54
64
|
// loop would false-positive a stall.
|
|
55
65
|
sink.recordActivity();
|
|
66
|
+
// Recorded on arrival, before anything reads it, so the file's order is
|
|
67
|
+
// the SDK's order across both channels.
|
|
68
|
+
eventRecorder?.recordDelta(update);
|
|
56
69
|
if (update.type === "turn-ended" && update.usage) {
|
|
57
70
|
// The running estimate advances only here; the runtime enforces the cap
|
|
58
71
|
// and aborts the signal, which the loop reads at the next boundary.
|
|
@@ -66,7 +79,7 @@ export function makeCursorTurnOnDelta(deps) {
|
|
|
66
79
|
`cursorOverhead=${cursorOverhead} (estimated)`);
|
|
67
80
|
}
|
|
68
81
|
}
|
|
69
|
-
|
|
82
|
+
translator.observeDelta(update);
|
|
70
83
|
};
|
|
71
84
|
}
|
|
72
85
|
/**
|
|
@@ -78,8 +91,8 @@ export function makeCursorTurnOnDelta(deps) {
|
|
|
78
91
|
* post-stream finalize and the settle.
|
|
79
92
|
*/
|
|
80
93
|
export async function consumeCursorTurnStream(run, deps) {
|
|
81
|
-
const { sink,
|
|
82
|
-
const {
|
|
94
|
+
const { sink, translator, eventRecorder, scheduler, hitlDir, executionId, state, } = deps;
|
|
95
|
+
const { stopSignal, transcript } = sink;
|
|
83
96
|
// The runtime's stop, whatever its cause, ends the run through the SDK's
|
|
84
97
|
// own cancel: that is what unblocks a wedged `for await` (a stall), and it
|
|
85
98
|
// stops the engine's tools and deltas from outliving the turn on every
|
|
@@ -106,12 +119,14 @@ export async function consumeCursorTurnStream(run, deps) {
|
|
|
106
119
|
// Progress: reset the runtime's stall timer on every stream event,
|
|
107
120
|
// naming the tool so a stall's copy can say `last tool: shell`.
|
|
108
121
|
sink.recordActivity(event.type === "tool_call" && typeof event.name === "string" ? event.name : undefined);
|
|
109
|
-
eventRecorder?.record(event
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
122
|
+
eventRecorder?.record(event);
|
|
123
|
+
// The stream event, then the deltas that arrived since the last one —
|
|
124
|
+
// the enricher's order, kept so a completion the delta channel reported
|
|
125
|
+
// in the same window as the stream's own defers to the stream's instant.
|
|
126
|
+
for (const fact of translator.translate(event))
|
|
127
|
+
transcript.apply(fact);
|
|
128
|
+
for (const fact of translator.drainDeltas())
|
|
129
|
+
transcript.apply(fact);
|
|
115
130
|
// First-denial stop (HITL clean pause). In CAPTURE mode this fires only for
|
|
116
131
|
// an IRREVERSIBLE tool the hook still gates (shell, MCP, or a gitignored
|
|
117
132
|
// write/delete) — file edits flow freely and are captured at the turn
|
|
@@ -126,7 +141,7 @@ export async function consumeCursorTurnStream(run, deps) {
|
|
|
126
141
|
// post-denial reaction (thinking, narration, a workaround shell) stream and
|
|
127
142
|
// persist live (production case aex_01kwj07f7g23c3wp9sn8496z5g). The
|
|
128
143
|
// tool_call-event read stays as the backstop for platforms where fs.watch
|
|
129
|
-
// is unreliable; the current event was already
|
|
144
|
+
// is unreliable; the current event was already folded above, so the
|
|
130
145
|
// anchor's own row is always present for the turn-boundary gate overlay.
|
|
131
146
|
if (!state.firstDenialDetected && hitlDir && (state.denialLedgerDirty || event.type === "tool_call")) {
|
|
132
147
|
state.denialLedgerDirty = false;
|
|
@@ -152,7 +167,6 @@ export async function consumeCursorTurnStream(run, deps) {
|
|
|
152
167
|
break;
|
|
153
168
|
}
|
|
154
169
|
}
|
|
155
|
-
deltaEnricher.applyEnrichments(status.messages);
|
|
156
170
|
state.eventCount++;
|
|
157
171
|
if (event.type === "status") {
|
|
158
172
|
console.log(`ExecuteCursor stream status: execution=${executionId}, status=${JSON.stringify(event)}`);
|
|
@@ -164,23 +178,22 @@ export async function consumeCursorTurnStream(run, deps) {
|
|
|
164
178
|
state.streamErrorMessage = statusEvent.message;
|
|
165
179
|
}
|
|
166
180
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
contentDirty: accumulator.isDirty,
|
|
171
|
-
}, scheduler, state.eventCount);
|
|
181
|
+
// The builder's one flag is the discrete signal, as on native
|
|
182
|
+
// (`shared/persist-decision.ts`).
|
|
183
|
+
const shouldPersist = shouldPersistStreamingStatus(transcript.dirty, scheduler, state.eventCount);
|
|
172
184
|
if (shouldPersist) {
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
//
|
|
176
|
-
|
|
177
|
-
//
|
|
185
|
+
// Cleared as the write is requested, not after it lands (the same
|
|
186
|
+
// order as the native loop): a change that folds while the write is
|
|
187
|
+
// in flight must dirty the next one.
|
|
188
|
+
transcript.markPersisted();
|
|
189
|
+
// The builder upserts sub-agent rows into `status.subAgentExecutions`
|
|
190
|
+
// in place (the status's own array), so every persist already carries
|
|
191
|
+
// delegation, IN_PROGRESS included. The runtime attaches the mid-run
|
|
192
|
+
// file-change progress on this write (the chokepoint's step 2), as it
|
|
193
|
+
// does on every write.
|
|
178
194
|
// Awaited: the runtime reads the control plane's answer to this write,
|
|
179
195
|
// and a STOP must be seen at the next event boundary, not one event late.
|
|
180
196
|
await sink.requestPersist();
|
|
181
|
-
deltaEnricher.markPersisted();
|
|
182
|
-
todoTracker.markPersisted();
|
|
183
|
-
accumulator.markPersisted();
|
|
184
197
|
scheduler.markUpdateSent(state.eventCount);
|
|
185
198
|
}
|
|
186
199
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-stream.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/turn-stream.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"turn-stream.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/turn-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,17 +25,17 @@
|
|
|
25
25
|
* on why `stopSignal` aborted, never writes a phase or a terminal copy, never
|
|
26
26
|
* imports `@temporalio/*` (`__tests__/adapter-is-temporal-free.test.ts`).
|
|
27
27
|
*
|
|
28
|
-
* Engine disposition, one rule per outcome
|
|
28
|
+
* Engine disposition, one rule per outcome: the agent is PARKED
|
|
29
29
|
* for the session's next turn on every exit but a failure — `completed`,
|
|
30
30
|
* `cancelled`, `awaiting_approval` and `interrupted` alike (a wedged handle
|
|
31
31
|
* after a stall is caught by the poisoned-handle recovery on the next turn;
|
|
32
|
-
* before
|
|
32
|
+
* before #1070 a pause, a shutdown and a stall dropped the handle, leaking the
|
|
33
33
|
* executor lease). A `failed` turn keeps the orchestrator's three
|
|
34
34
|
* dispositions: an engine-reported failure parks (a bad key is not a bad
|
|
35
35
|
* handle), a user-actionable failure closes, an internal failure drops.
|
|
36
36
|
*
|
|
37
|
-
* Extracted from `index.ts` `executeCursorInner`
|
|
38
|
-
* `adapter.ts`
|
|
37
|
+
* Extracted from `index.ts` `executeCursorInner` and moved out of
|
|
38
|
+
* `adapter.ts` in #1070; the seventeen hermetic goldens under `__tests__/hermetic/`
|
|
39
39
|
* pin the result byte for byte.
|
|
40
40
|
*/
|
|
41
41
|
import type { TurnInput, TurnOutcome, TurnSink } from "../../harness/types.js";
|
|
@@ -25,17 +25,17 @@
|
|
|
25
25
|
* on why `stopSignal` aborted, never writes a phase or a terminal copy, never
|
|
26
26
|
* imports `@temporalio/*` (`__tests__/adapter-is-temporal-free.test.ts`).
|
|
27
27
|
*
|
|
28
|
-
* Engine disposition, one rule per outcome
|
|
28
|
+
* Engine disposition, one rule per outcome: the agent is PARKED
|
|
29
29
|
* for the session's next turn on every exit but a failure — `completed`,
|
|
30
30
|
* `cancelled`, `awaiting_approval` and `interrupted` alike (a wedged handle
|
|
31
31
|
* after a stall is caught by the poisoned-handle recovery on the next turn;
|
|
32
|
-
* before
|
|
32
|
+
* before #1070 a pause, a shutdown and a stall dropped the handle, leaking the
|
|
33
33
|
* executor lease). A `failed` turn keeps the orchestrator's three
|
|
34
34
|
* dispositions: an engine-reported failure parks (a bad key is not a bad
|
|
35
35
|
* handle), a user-actionable failure closes, an internal failure drops.
|
|
36
36
|
*
|
|
37
|
-
* Extracted from `index.ts` `executeCursorInner`
|
|
38
|
-
* `adapter.ts`
|
|
37
|
+
* Extracted from `index.ts` `executeCursorInner` and moved out of
|
|
38
|
+
* `adapter.ts` in #1070; the seventeen hermetic goldens under `__tests__/hermetic/`
|
|
39
39
|
* pin the result byte for byte.
|
|
40
40
|
*/
|
|
41
41
|
import { describeExecutionError } from "../../shared/model-error.js";
|
|
@@ -54,7 +54,7 @@ export async function runCursorTurn(input, sink, config) {
|
|
|
54
54
|
closeProxySessions();
|
|
55
55
|
// The module-level fallback the interceptors read when no execution
|
|
56
56
|
// context is entered (the runtime enters one around the whole activity;
|
|
57
|
-
// the SDK warm-up in main.ts has none). Deprecated;
|
|
57
|
+
// the SDK warm-up in main.ts has none). Deprecated; its removal is #1132.
|
|
58
58
|
setInterceptorExecutionId(executionId);
|
|
59
59
|
if (sink.stopSignal.aborted)
|
|
60
60
|
return { kind: "interrupted" };
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* basis on the priced delta the runtime accumulates.
|
|
5
5
|
*
|
|
6
6
|
* The runtime cannot price without the vendor's table and variant semantics,
|
|
7
|
-
* and it must not import them
|
|
7
|
+
* and it must not import them, so the adapter hands
|
|
8
8
|
* `TurnSink.reportUsage` a delta that already carries `estimatedCostUsd`
|
|
9
9
|
* and the basis (`model`, the catalog-validated id; `requestedModelParams`,
|
|
10
10
|
* the JSON of the params sent with every create/resume) the runtime writes
|
|
11
|
-
* into `streaming_usage`. Split out of the accumulator
|
|
11
|
+
* into `streaming_usage`. Split out of the accumulator in #1070
|
|
12
12
|
* (`harness/usage-accumulator.ts` keeps the sums); the arithmetic and the
|
|
13
13
|
* rounding are unchanged, so the estimate is byte-for-byte the old one.
|
|
14
14
|
*
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* basis on the priced delta the runtime accumulates.
|
|
5
5
|
*
|
|
6
6
|
* The runtime cannot price without the vendor's table and variant semantics,
|
|
7
|
-
* and it must not import them
|
|
7
|
+
* and it must not import them, so the adapter hands
|
|
8
8
|
* `TurnSink.reportUsage` a delta that already carries `estimatedCostUsd`
|
|
9
9
|
* and the basis (`model`, the catalog-validated id; `requestedModelParams`,
|
|
10
10
|
* the JSON of the params sent with every create/resume) the runtime writes
|
|
11
|
-
* into `streaming_usage`. Split out of the accumulator
|
|
11
|
+
* into `streaming_usage`. Split out of the accumulator in #1070
|
|
12
12
|
* (`harness/usage-accumulator.ts` keeps the sums); the arithmetic and the
|
|
13
13
|
* rounding are unchanged, so the estimate is byte-for-byte the old one.
|
|
14
14
|
*
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* module owns the ENGINE — what the model will do on its next call — and
|
|
11
11
|
* reports what really happened. The adapter under test is the production
|
|
12
12
|
* one, untouched; the model client is the one module doubled
|
|
13
|
-
* (`scripted-model-module.ts
|
|
13
|
+
* (`scripted-model-module.ts`), and the tools the model
|
|
14
14
|
* calls are deepagents' real built-ins over the real gate.
|
|
15
15
|
*
|
|
16
16
|
* ── The engine is per execution, and its memory is the conversation ────────
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* checkpoint IS the engine's memory, which is why the same plan is right on
|
|
29
29
|
* a `Command(resume)` (the tool result is in the transcript before the model
|
|
30
30
|
* is asked) and on a later turn of the same thread (an approved-and-run call
|
|
31
|
-
* is not proposed again — Cursor's "obedient model"
|
|
31
|
+
* is not proposed again — Cursor's subject's "obedient model", derived
|
|
32
32
|
* instead of stored).
|
|
33
33
|
*
|
|
34
34
|
* ── The translation, one rule per word ──────────────────────────────────────
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* module owns the ENGINE — what the model will do on its next call — and
|
|
11
11
|
* reports what really happened. The adapter under test is the production
|
|
12
12
|
* one, untouched; the model client is the one module doubled
|
|
13
|
-
* (`scripted-model-module.ts
|
|
13
|
+
* (`scripted-model-module.ts`), and the tools the model
|
|
14
14
|
* calls are deepagents' real built-ins over the real gate.
|
|
15
15
|
*
|
|
16
16
|
* ── The engine is per execution, and its memory is the conversation ────────
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* checkpoint IS the engine's memory, which is why the same plan is right on
|
|
29
29
|
* a `Command(resume)` (the tool result is in the transcript before the model
|
|
30
30
|
* is asked) and on a later turn of the same thread (an approved-and-run call
|
|
31
|
-
* is not proposed again — Cursor's "obedient model"
|
|
31
|
+
* is not proposed again — Cursor's subject's "obedient model", derived
|
|
32
32
|
* instead of stored).
|
|
33
33
|
*
|
|
34
34
|
* ── The translation, one rule per word ──────────────────────────────────────
|
|
@@ -41,25 +41,30 @@
|
|
|
41
41
|
* network. A scenario picks one; the HITL arms record both.
|
|
42
42
|
*
|
|
43
43
|
* The ONE knowledge of production this driver holds is `activityFactory`: how
|
|
44
|
-
* to obtain the `ExecuteDeepAgent` function from a `Config`. Since
|
|
44
|
+
* to obtain the `ExecuteDeepAgent` function from a `Config`. Since #1096 it
|
|
45
45
|
* is the harness registry's: the native adapter booted and bound to its
|
|
46
46
|
* byte-pinned activity name through `createHarnessActivities`, exactly the
|
|
47
|
-
* way the composition roots bind it since
|
|
47
|
+
* way the composition roots bind it since #1096 through `harness-adapters.ts`
|
|
48
48
|
* (and the way the Cursor driver binds its own, `hermetic-cursor.ts`). The
|
|
49
|
-
* orchestrator this adapter replaced (`index.ts`, `setup.ts`) was deleted
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* none
|
|
49
|
+
* orchestrator this adapter replaced (`index.ts`, `setup.ts`) was deleted in
|
|
50
|
+
* #1096; the goldens moved once, with the flip onto the runtime, each hunk
|
|
51
|
+
* quoted with its reason in its test's header, and the switch of the roots
|
|
52
|
+
* moved none.
|
|
53
53
|
*
|
|
54
54
|
* `boot` registers the deepagents harness profiles as production does
|
|
55
|
-
* (
|
|
56
|
-
* auto-injected its ungated `general-purpose` sub-agent into every
|
|
55
|
+
* (found in #1096: the orchestrator-driven runs never did, so deepagents
|
|
56
|
+
* auto-injected its ungated `general-purpose` sub-agent into every earlier
|
|
57
57
|
* scenario; the scripted model never delegated to it).
|
|
58
58
|
*
|
|
59
|
-
* Determinism beyond
|
|
59
|
+
* Determinism beyond the Cursor driver's (#1048): the clock ticks once per model turn (the scripted
|
|
60
60
|
* model's `onTurn`), so status timestamps and the persist cadence land on the
|
|
61
61
|
* same instants every run; a scenario's interruption (pause, worker shutdown)
|
|
62
|
-
* is scheduled on a model turn through the same hook, never on a timer.
|
|
62
|
+
* is scheduled on a model turn through the same hook, never on a timer. And
|
|
63
|
+
* a turn does not begin — the clock does not tick — until the loop has
|
|
64
|
+
* persisted the previous turn's tool results settled
|
|
65
|
+
* (`ExecutionRecord.whenToolCallsSettled`): the ground a real model's latency
|
|
66
|
+
* gives for free, without which the producer runs ahead of a consumer that is
|
|
67
|
+
* awaiting a slow persist and the stamps of one turn straddle the next tick.
|
|
63
68
|
*/
|
|
64
69
|
import type { Config } from "../../../config.js";
|
|
65
70
|
import type { StigmerClient } from "../../../client/stigmer-client.js";
|
|
@@ -94,7 +99,7 @@ export declare function hermeticDeepAgentConfig(env: HermeticEnvironment, checkp
|
|
|
94
99
|
export declare function sessionWorkspaceDir(env: HermeticEnvironment): string;
|
|
95
100
|
/** The `ExecuteDeepAgent` function as the runner serves it: the typed object OR the legacy positional pair. */
|
|
96
101
|
export type ExecuteDeepAgentFn = (arg0: ExecuteActivityInput | string, arg1?: string) => Promise<unknown>;
|
|
97
|
-
/** How the driver obtains the activity from a `Config` — the one seam
|
|
102
|
+
/** How the driver obtains the activity from a `Config` — the one seam the move onto the runtime flipped. */
|
|
98
103
|
export type ActivityFactory = (config: Config) => Promise<ExecuteDeepAgentFn>;
|
|
99
104
|
/**
|
|
100
105
|
* The adapter through the registry: `createDeepAgentAdapter()` booted on the
|
|
@@ -41,25 +41,30 @@
|
|
|
41
41
|
* network. A scenario picks one; the HITL arms record both.
|
|
42
42
|
*
|
|
43
43
|
* The ONE knowledge of production this driver holds is `activityFactory`: how
|
|
44
|
-
* to obtain the `ExecuteDeepAgent` function from a `Config`. Since
|
|
44
|
+
* to obtain the `ExecuteDeepAgent` function from a `Config`. Since #1096 it
|
|
45
45
|
* is the harness registry's: the native adapter booted and bound to its
|
|
46
46
|
* byte-pinned activity name through `createHarnessActivities`, exactly the
|
|
47
|
-
* way the composition roots bind it since
|
|
47
|
+
* way the composition roots bind it since #1096 through `harness-adapters.ts`
|
|
48
48
|
* (and the way the Cursor driver binds its own, `hermetic-cursor.ts`). The
|
|
49
|
-
* orchestrator this adapter replaced (`index.ts`, `setup.ts`) was deleted
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* none
|
|
49
|
+
* orchestrator this adapter replaced (`index.ts`, `setup.ts`) was deleted in
|
|
50
|
+
* #1096; the goldens moved once, with the flip onto the runtime, each hunk
|
|
51
|
+
* quoted with its reason in its test's header, and the switch of the roots
|
|
52
|
+
* moved none.
|
|
53
53
|
*
|
|
54
54
|
* `boot` registers the deepagents harness profiles as production does
|
|
55
|
-
* (
|
|
56
|
-
* auto-injected its ungated `general-purpose` sub-agent into every
|
|
55
|
+
* (found in #1096: the orchestrator-driven runs never did, so deepagents
|
|
56
|
+
* auto-injected its ungated `general-purpose` sub-agent into every earlier
|
|
57
57
|
* scenario; the scripted model never delegated to it).
|
|
58
58
|
*
|
|
59
|
-
* Determinism beyond
|
|
59
|
+
* Determinism beyond the Cursor driver's (#1048): the clock ticks once per model turn (the scripted
|
|
60
60
|
* model's `onTurn`), so status timestamps and the persist cadence land on the
|
|
61
61
|
* same instants every run; a scenario's interruption (pause, worker shutdown)
|
|
62
|
-
* is scheduled on a model turn through the same hook, never on a timer.
|
|
62
|
+
* is scheduled on a model turn through the same hook, never on a timer. And
|
|
63
|
+
* a turn does not begin — the clock does not tick — until the loop has
|
|
64
|
+
* persisted the previous turn's tool results settled
|
|
65
|
+
* (`ExecutionRecord.whenToolCallsSettled`): the ground a real model's latency
|
|
66
|
+
* gives for free, without which the producer runs ahead of a consumer that is
|
|
67
|
+
* awaiting a slow persist and the stamps of one turn straddle the next tick.
|
|
63
68
|
*/
|
|
64
69
|
import { rmSync } from "node:fs";
|
|
65
70
|
import { dirname, join } from "node:path";
|
|
@@ -182,6 +187,13 @@ export class DeepAgentScenario {
|
|
|
182
187
|
this.config = config;
|
|
183
188
|
this.model = new ScriptedModel(script, [], {
|
|
184
189
|
onTurn: async (info) => {
|
|
190
|
+
// A real model answers long after the loop has folded and persisted
|
|
191
|
+
// the tool results it is answering; a scripted one answers at once and
|
|
192
|
+
// lets the producer run a turn ahead of the consumer. Wait for that
|
|
193
|
+
// ground before ticking, so every stamp of the previous turn precedes
|
|
194
|
+
// this turn's instant, whatever the persist's I/O took (the barrier's
|
|
195
|
+
// own header on `ExecutionRecord` carries the whole reason).
|
|
196
|
+
await this.record.whenToolCallsSettled(info.priorToolCallIds);
|
|
185
197
|
this.clock.tick();
|
|
186
198
|
if (onTurn && this.controls)
|
|
187
199
|
await onTurn(info, this.controls);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermetic-deep-agent.js","sourceRoot":"","sources":["../../../../src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hermetic-deep-agent.js","sourceRoot":"","sources":["../../../../src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@ export const EXECUTE_CALL_B = {
|
|
|
24
24
|
};
|
|
25
25
|
/** The gate's copy for a SHELL built-in (`CATEGORY_APPROVAL_MESSAGE.shell` over the args). */
|
|
26
26
|
export function executeApprovalMessage(call) {
|
|
27
|
-
return `
|
|
27
|
+
return `Run command: ${String(call.args.command)}`;
|
|
28
28
|
}
|
|
29
29
|
/** Round 0 of every gated arm: one text block and the gated `execute` A. */
|
|
30
30
|
export const GATED_OPENING_TURN = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hitl-script.js","sourceRoot":"","sources":["../../../../src/activities/execute-deep-agent/__test-utils__/hitl-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;CACrC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;CACrC,CAAC;AAEF,8FAA8F;AAC9F,MAAM,UAAU,sBAAsB,CAAC,IAAsB;IAC3D,OAAO,
|
|
1
|
+
{"version":3,"file":"hitl-script.js","sourceRoot":"","sources":["../../../../src/activities/execute-deep-agent/__test-utils__/hitl-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;CACrC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;CACrC,CAAC;AAEF,8FAA8F;AAC9F,MAAM,UAAU,sBAAsB,CAAC,IAAsB;IAC3D,OAAO,gBAAgB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAiB;IAC9C,IAAI,EAAE,yBAAyB;IAC/B,SAAS,EAAE,CAAC,cAAc,CAAC;IAC3B,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE;CAChD,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,wBAAwB;IAC9B,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE;CAChD,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC"}
|
|
@@ -9,8 +9,7 @@
|
|
|
9
9
|
* (`shared/extract-structured-output.ts`). None of them takes a model as an
|
|
10
10
|
* argument, so the one seam a hermetic run has is this module — the native analog of the Cursor
|
|
11
11
|
* driver's `vi.mock("@cursor/sdk")`: the vendor engine doubled where the
|
|
12
|
-
* runner imports it, and nothing else
|
|
13
|
-
* Q-S3-11).
|
|
12
|
+
* runner imports it, and nothing else.
|
|
14
13
|
*
|
|
15
14
|
* `vi.mock` is hoisted and must live in the test file; the factory can
|
|
16
15
|
* `await import()` this module:
|
|
@@ -33,7 +32,7 @@
|
|
|
33
32
|
* header), so a test that runs several executions at once — the harness
|
|
34
33
|
* contract kit's concurrency invariant — routes each build to that
|
|
35
34
|
* execution's own engine through the id production already sends, and
|
|
36
|
-
* through nothing added for the test
|
|
35
|
+
* through nothing added for the test.
|
|
37
36
|
*/
|
|
38
37
|
import type { BuildChatModelOptions, BuiltChatModel } from "../../../shared/model-client.js";
|
|
39
38
|
import type { ScriptedModel } from "./scripted-model.js";
|
|
@@ -9,8 +9,7 @@
|
|
|
9
9
|
* (`shared/extract-structured-output.ts`). None of them takes a model as an
|
|
10
10
|
* argument, so the one seam a hermetic run has is this module — the native analog of the Cursor
|
|
11
11
|
* driver's `vi.mock("@cursor/sdk")`: the vendor engine doubled where the
|
|
12
|
-
* runner imports it, and nothing else
|
|
13
|
-
* Q-S3-11).
|
|
12
|
+
* runner imports it, and nothing else.
|
|
14
13
|
*
|
|
15
14
|
* `vi.mock` is hoisted and must live in the test file; the factory can
|
|
16
15
|
* `await import()` this module:
|
|
@@ -33,7 +32,7 @@
|
|
|
33
32
|
* header), so a test that runs several executions at once — the harness
|
|
34
33
|
* contract kit's concurrency invariant — routes each build to that
|
|
35
34
|
* execution's own engine through the id production already sends, and
|
|
36
|
-
* through nothing added for the test
|
|
35
|
+
* through nothing added for the test.
|
|
37
36
|
*/
|
|
38
37
|
import { stripProviderPrefix, tryInferProvider } from "../../../shared/llm-proxy.js";
|
|
39
38
|
let resolve;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripted-model-module.js","sourceRoot":"","sources":["../../../../src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"scripted-model-module.js","sourceRoot":"","sources":["../../../../src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAGH,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAMrF,IAAI,OAA0C,CAAC;AAC/C,MAAM,MAAM,GAA4B,EAAE,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAA4C;IAC5E,OAAO,GAAG,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IAC5D,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACpB,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,mBAAmB;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,yBAAyB;IAGvC,OAAO;QACL,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,gFAAgF;oBAC9E,oCAAoC,CACvC,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;gBACL,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC;gBACpB,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,WAAW;gBACzD,UAAU,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;aAChD,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|