@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
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAI1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAGL,kBAAkB,EAClB,uBAAuB,GAIxB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAA+B,MAAM,qDAAqD,CAAC;AAC1H,OAAO,EAAE,oBAAoB,EAAE,MAAM,mDAAmD,CAAC;AACzF,OAAO,EAAE,aAAa,EAA8C,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,8EAA8E;AAC9E,8DAA8D;AAC9D,8EAA8E;AAE9E,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,GAAG,EAAE,cAAc;IACnB,WAAW,EAAE,mBAAmB;IAChC,SAAS,EAAE,UAAU;IACrB,eAAe,EAAE,mBAAmB;IACpC,OAAO,EAAE,mBAAmB;IAC5B,SAAS,EAAE,gBAAgB;IAC3B,sEAAsE;IACtE,KAAK,EAAE,oBAAoB;IAC3B,gGAAgG;IAChG,QAAQ,EAAE,UAAU,UAAU,EAAE;CACxB,CAAC;AASX,mGAAmG;AACnG,MAAM,UAAU,wBAAwB,CAAC,OAA+B;IACtE,OAAO,sBAAsB,CAAC;QAC5B,GAAG,OAAO;QACV,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK;QAC7C,GAAG,EAAE;YACH,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B;KACF,CAAC,CAAC;AACL,CAAC;AAQD,uFAAuF;AACvF,MAAM,UAAU,uBAAuB,CAAC,GAAwB,EAAE,gBAAsC;IACtG,OAAO;QACL,SAAS,EAAE,qBAAqB;QAChC,eAAe,EAAE,gBAAgB;QACjC,iBAAiB,EAAE,SAAS;QAC5B,sBAAsB,EAAE,uBAAuB;QAC/C,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,EAAE;QAChB,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,IAAI,EAAE,OAAO;QACb,aAAa,EAAE,IAAI;QACnB,uBAAuB,EAAE,CAAC;QAC1B,kBAAkB,EAAE,IAAI;QACxB,gBAAgB,EAAE,KAAK;QACvB,gBAAgB;QAChB,yBAAyB,EAAE,IAAI;QAC/B,qBAAqB,EAAE,IAAI;QAC3B,YAAY,EAAE,OAAO,CAAC,KAAK;QAC3B,0BAA0B,EAAE,OAAO;QACnC,qBAAqB,EAAE,OAAO;QAC9B,sBAAsB,EAAE,OAAO;KAChC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAwB;IAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;AACnE,CAAC;AAYD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAoB,KAAK,EAAE,MAAM,EAAE,EAAE;IACtE,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IACjE,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IACzC,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/F,OAAO,UAAU,CAAC,gBAAiB,CAAC;AACtC,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAwB;IAClE,mBAAmB,EAAE,CAAC;IACtB,kBAAkB,EAAE,CAAC;IACrB,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1F,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,kGAAkG;AAClG,MAAM,OAAO,iBAAiB;IAMjB;IACA;IACA;IAEA;IATX,4GAA4G;IAC5G,QAAQ,CAAiC;IAChC,KAAK,CAAgB;IAE9B,YACW,GAAwB,EACxB,KAAoB,EACpB,MAAuB;IAChC,mFAAmF;IAC1E,MAAc,EACvB,MAAsB,EACtB,MAA0C;QANjC,QAAG,GAAH,GAAG,CAAqB;QACxB,UAAK,GAAL,KAAK,CAAe;QACpB,WAAM,GAAN,MAAM,CAAiB;QAEvB,WAAM,GAAN,MAAM,CAAQ;QAIvB,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,EAAE,EAAE;YACzC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACrB,oEAAoE;gBACpE,uEAAuE;gBACvE,oEAAoE;gBACpE,sEAAsE;gBACtE,sEAAsE;gBACtE,6DAA6D;gBAC7D,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC9D,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAClB,IAAI,MAAM,IAAI,IAAI,CAAC,QAAQ;oBAAE,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjE,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AA0BD,yGAAyG;AACzG,MAAM,UAAU,sBAAsB,CAAC,OAAiC;IACtE,2BAA2B,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CACpC,OAAO,CAAC,GAAG,EACX,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,EACd,EAAE,GAAG,uBAAuB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,YAAY,IAAI,QAAQ,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAChG,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,MAAM,CACf,CAAC;IACF,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;IACnE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAaD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAA2B,EAC3B,UAAgC,EAAE;IAElC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,IAAI,sBAAsB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;IACrC,MAAM,KAAK,GAAyB;QAClC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW;QACzC,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,OAAO;KAClB,CAAC;IACF,MAAM,IAAI,GAA6C,OAAO,CAAC,UAAU;QACvE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC;QACzC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACZ,OAAO,uBAAuB,CAAC,QAAQ,EAAE,IAAI,EAAE;QAC7C,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS;QACpC,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;YACvB,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC7B,OAAO,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -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"}
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* indexing left to the caller — for a consumer whose plan is not "turn k on
|
|
29
29
|
* round k" but "the first step the conversation does not yet show" (the
|
|
30
30
|
* harness contract kit's native subject, whose one execution spans many
|
|
31
|
-
* kit turns on one sqlite thread
|
|
31
|
+
* kit turns on one sqlite thread).
|
|
32
32
|
*
|
|
33
33
|
* A turn may END the model call instead of finishing the message
|
|
34
34
|
* ({@link TurnEnding}): `fail` throws after its chunks (a provider error
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
* and otherwise falls back to a synthesized final-message event sequence
|
|
47
47
|
* (`@langchain/langgraph` `pregel/messages-v2.js` `emitFinalMessage`). The
|
|
48
48
|
* fallback spreads a `tool_call` block's `args` OBJECT into the
|
|
49
|
-
* `tool_call_chunk` fields the runner's
|
|
50
|
-
* (`
|
|
49
|
+
* `tool_call_chunk` fields the runner's translator reads as a JSON STRING
|
|
50
|
+
* (`translator.ts` `argsChunk`), which no real provider does.
|
|
51
51
|
* Streaming keeps the double on the production event path: `@langchain/core`
|
|
52
52
|
* `language_models/compat.js` `convertChunksToEvents` turns the chunks below
|
|
53
53
|
* into `message-start`, per-block `content-block-start` / `-delta` /
|
|
@@ -167,6 +167,13 @@ export type ScriptSelector = (boundToolNames: string[], context: ScriptRoleConte
|
|
|
167
167
|
export interface ScriptedTurnInfo {
|
|
168
168
|
readonly boundToolNames: readonly string[];
|
|
169
169
|
readonly round: number;
|
|
170
|
+
/**
|
|
171
|
+
* The ids of the tool calls the transcript's last AI message made — the
|
|
172
|
+
* calls whose results this turn answers. Empty on a role's first turn and
|
|
173
|
+
* after a text-only turn. Read from the transcript the engine hands the
|
|
174
|
+
* model, never from the script, so it is what the engine actually ran.
|
|
175
|
+
*/
|
|
176
|
+
readonly priorToolCallIds: readonly string[];
|
|
170
177
|
}
|
|
171
178
|
export interface ScriptedModelOptions {
|
|
172
179
|
/**
|
|
@@ -223,6 +230,8 @@ export declare class ScriptedModel extends BaseChatModel {
|
|
|
223
230
|
}
|
|
224
231
|
/** Tool rounds the transcript already holds: AI messages that proposed at least one tool call. */
|
|
225
232
|
export declare function completedToolRounds(messages: readonly BaseMessage[]): number;
|
|
233
|
+
/** The tool-call ids on the transcript's last AI message; `[]` when there is none or it made no calls. */
|
|
234
|
+
export declare function priorToolCallIds(messages: readonly BaseMessage[]): string[];
|
|
226
235
|
/** A pending approval interrupt surfaced at the parent checkpoint. */
|
|
227
236
|
export interface PendingInterrupt {
|
|
228
237
|
taskId: string;
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* indexing left to the caller — for a consumer whose plan is not "turn k on
|
|
29
29
|
* round k" but "the first step the conversation does not yet show" (the
|
|
30
30
|
* harness contract kit's native subject, whose one execution spans many
|
|
31
|
-
* kit turns on one sqlite thread
|
|
31
|
+
* kit turns on one sqlite thread).
|
|
32
32
|
*
|
|
33
33
|
* A turn may END the model call instead of finishing the message
|
|
34
34
|
* ({@link TurnEnding}): `fail` throws after its chunks (a provider error
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
* and otherwise falls back to a synthesized final-message event sequence
|
|
47
47
|
* (`@langchain/langgraph` `pregel/messages-v2.js` `emitFinalMessage`). The
|
|
48
48
|
* fallback spreads a `tool_call` block's `args` OBJECT into the
|
|
49
|
-
* `tool_call_chunk` fields the runner's
|
|
50
|
-
* (`
|
|
49
|
+
* `tool_call_chunk` fields the runner's translator reads as a JSON STRING
|
|
50
|
+
* (`translator.ts` `argsChunk`), which no real provider does.
|
|
51
51
|
* Streaming keeps the double on the production event path: `@langchain/core`
|
|
52
52
|
* `language_models/compat.js` `convertChunksToEvents` turns the chunks below
|
|
53
53
|
* into `message-start`, per-block `content-block-start` / `-delta` /
|
|
@@ -99,7 +99,11 @@ export class ScriptedModel extends BaseChatModel {
|
|
|
99
99
|
/** The turn for this transcript, after the driver hook has run. */
|
|
100
100
|
async turnFor(messages) {
|
|
101
101
|
const round = completedToolRounds(messages);
|
|
102
|
-
await this.options.onTurn?.({
|
|
102
|
+
await this.options.onTurn?.({
|
|
103
|
+
boundToolNames: this.toolNames,
|
|
104
|
+
round,
|
|
105
|
+
priorToolCallIds: priorToolCallIds(messages),
|
|
106
|
+
});
|
|
103
107
|
const context = { systemPrompt: systemPromptOf(messages) };
|
|
104
108
|
return resolveTurn(this.select(this.toolNames, context), { round, transcript: messages, toolNames: this.toolNames });
|
|
105
109
|
}
|
|
@@ -197,6 +201,16 @@ export function completedToolRounds(messages) {
|
|
|
197
201
|
}
|
|
198
202
|
return rounds;
|
|
199
203
|
}
|
|
204
|
+
/** The tool-call ids on the transcript's last AI message; `[]` when there is none or it made no calls. */
|
|
205
|
+
export function priorToolCallIds(messages) {
|
|
206
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
207
|
+
const m = messages[i];
|
|
208
|
+
if (!isAIMessage(m))
|
|
209
|
+
continue;
|
|
210
|
+
return (m.tool_calls ?? []).flatMap((call) => (call.id ? [call.id] : []));
|
|
211
|
+
}
|
|
212
|
+
return [];
|
|
213
|
+
}
|
|
200
214
|
function resolveTurn(script, request) {
|
|
201
215
|
if (typeof script === "function")
|
|
202
216
|
return script(request.transcript);
|