@stigmer/runner 3.14.1 → 3.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-fingerprint +1 -1
- package/dist/__test-utils__/execution-record-fixture.d.ts +47 -0
- package/dist/__test-utils__/execution-record-fixture.js +68 -0
- package/dist/__test-utils__/execution-record-fixture.js.map +1 -0
- package/dist/__test-utils__/harness-contract/types.d.ts +166 -0
- package/dist/__test-utils__/harness-contract/types.js +49 -0
- package/dist/__test-utils__/harness-contract/types.js.map +1 -0
- package/dist/__test-utils__/hermetic-activity.d.ts +28 -5
- package/dist/__test-utils__/hermetic-activity.js +23 -7
- package/dist/__test-utils__/hermetic-activity.js.map +1 -1
- package/dist/__test-utils__/mock-workspace.d.ts +15 -0
- package/dist/__test-utils__/mock-workspace.js +21 -0
- package/dist/__test-utils__/mock-workspace.js.map +1 -0
- package/dist/__test-utils__/model-registry-fixture.d.ts +56 -0
- package/dist/__test-utils__/model-registry-fixture.js +66 -0
- package/dist/__test-utils__/model-registry-fixture.js.map +1 -0
- package/dist/__test-utils__/turn-input-fixture.d.ts +60 -0
- package/dist/__test-utils__/turn-input-fixture.js +118 -0
- package/dist/__test-utils__/turn-input-fixture.js.map +1 -0
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.d.ts +107 -0
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.js +344 -0
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.js.map +1 -0
- package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.d.ts +20 -0
- package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.js +58 -0
- package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js +2 -32
- package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +38 -62
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +47 -121
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.d.ts +17 -1
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js +27 -4
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.d.ts +52 -11
- package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.js +66 -7
- package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.js.map +1 -1
- package/dist/activities/execute-cursor/adapter.d.ts +55 -0
- package/dist/activities/execute-cursor/adapter.js +119 -0
- package/dist/activities/execute-cursor/adapter.js.map +1 -0
- package/dist/activities/execute-cursor/approval-state.d.ts +2 -2
- package/dist/activities/execute-cursor/approval-state.js.map +1 -1
- package/dist/activities/execute-cursor/capture-flow.d.ts +15 -30
- package/dist/activities/execute-cursor/capture-flow.js +17 -26
- package/dist/activities/execute-cursor/capture-flow.js.map +1 -1
- package/dist/activities/execute-cursor/cursor-capabilities.d.ts +23 -0
- package/dist/activities/execute-cursor/cursor-capabilities.js +33 -0
- package/dist/activities/execute-cursor/cursor-capabilities.js.map +1 -0
- package/dist/activities/execute-cursor/cursor-mcp-config.d.ts +2 -2
- package/dist/activities/execute-cursor/cursor-mcp-config.js.map +1 -1
- package/dist/activities/execute-cursor/fetch-interceptor.d.ts +15 -25
- package/dist/activities/execute-cursor/fetch-interceptor.js +39 -33
- package/dist/activities/execute-cursor/fetch-interceptor.js.map +1 -1
- package/dist/activities/execute-cursor/http2-interceptor.d.ts +21 -17
- package/dist/activities/execute-cursor/http2-interceptor.js +38 -31
- package/dist/activities/execute-cursor/http2-interceptor.js.map +1 -1
- package/dist/activities/execute-cursor/message-translator.d.ts +28 -19
- package/dist/activities/execute-cursor/message-translator.js +76 -27
- package/dist/activities/execute-cursor/message-translator.js.map +1 -1
- package/dist/activities/execute-cursor/prompt-builder.d.ts +180 -11
- package/dist/activities/execute-cursor/prompt-builder.js +171 -0
- package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
- package/dist/activities/execute-cursor/rejection-capture.d.ts +3 -6
- package/dist/activities/execute-cursor/rejection-capture.js +5 -7
- package/dist/activities/execute-cursor/rejection-capture.js.map +1 -1
- package/dist/activities/execute-cursor/session-lifecycle.d.ts +1 -4
- package/dist/activities/execute-cursor/session-lifecycle.js.map +1 -1
- package/dist/activities/execute-cursor/turn-boundary.d.ts +1 -1
- package/dist/activities/execute-cursor/turn-settle.d.ts +49 -0
- package/dist/activities/execute-cursor/turn-settle.js +507 -0
- package/dist/activities/execute-cursor/turn-settle.js.map +1 -0
- package/dist/activities/execute-cursor/turn-setup.d.ts +173 -0
- package/dist/activities/execute-cursor/turn-setup.js +496 -0
- package/dist/activities/execute-cursor/turn-setup.js.map +1 -0
- package/dist/activities/execute-cursor/turn-stream.d.ts +41 -71
- package/dist/activities/execute-cursor/turn-stream.js +70 -135
- package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
- package/dist/activities/execute-cursor/turn.d.ts +43 -0
- package/dist/activities/execute-cursor/turn.js +222 -0
- package/dist/activities/execute-cursor/turn.js.map +1 -0
- package/dist/activities/execute-cursor/usage-pricing.d.ts +38 -0
- package/dist/activities/execute-cursor/usage-pricing.js +50 -0
- package/dist/activities/execute-cursor/usage-pricing.js.map +1 -0
- package/dist/activities/execute-deep-agent/approval-file-change.d.ts +1 -1
- package/dist/activities/execute-deep-agent/approval-file-change.js +1 -1
- package/dist/activities/execute-deep-agent/environment.js +1 -1
- package/dist/activities/execute-deep-agent/environment.js.map +1 -1
- package/dist/activities/execute-deep-agent/setup.js +3 -2
- package/dist/activities/execute-deep-agent/setup.js.map +1 -1
- package/dist/activities/hydrate-workflow-execution.js +1 -1
- package/dist/activities/hydrate-workflow-execution.js.map +1 -1
- package/dist/config.d.ts +15 -0
- package/dist/config.js.map +1 -1
- package/dist/harness/capabilities.d.ts +16 -0
- package/dist/harness/capabilities.js +1 -0
- package/dist/harness/capabilities.js.map +1 -1
- package/dist/harness/persist-chokepoint.d.ts +74 -0
- package/dist/harness/persist-chokepoint.js +88 -0
- package/dist/harness/persist-chokepoint.js.map +1 -0
- package/dist/harness/registry.d.ts +44 -5
- package/dist/harness/registry.js +61 -5
- package/dist/harness/registry.js.map +1 -1
- package/dist/harness/run-turn.d.ts +53 -0
- package/dist/harness/run-turn.js +528 -0
- package/dist/harness/run-turn.js.map +1 -0
- package/dist/harness/stop-controller.d.ts +50 -0
- package/dist/harness/stop-controller.js +62 -0
- package/dist/harness/stop-controller.js.map +1 -0
- package/dist/harness/terminal-table.d.ts +141 -0
- package/dist/harness/terminal-table.js +239 -0
- package/dist/harness/terminal-table.js.map +1 -0
- package/dist/harness/turn-context.d.ts +523 -0
- package/dist/harness/turn-context.js +739 -0
- package/dist/harness/turn-context.js.map +1 -0
- package/dist/harness/types.d.ts +232 -52
- package/dist/harness/types.js +17 -8
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/usage-accumulator.d.ts +68 -0
- package/dist/harness/usage-accumulator.js +101 -0
- package/dist/harness/usage-accumulator.js.map +1 -0
- package/dist/harness-adapters.d.ts +27 -0
- package/dist/harness-adapters.js +28 -0
- package/dist/harness-adapters.js.map +1 -0
- package/dist/main.js.map +1 -1
- package/dist/runner-manager.js +64 -48
- package/dist/runner-manager.js.map +1 -1
- package/dist/runner.d.ts +5 -4
- package/dist/runner.js +65 -64
- package/dist/runner.js.map +1 -1
- package/dist/shared/approval-policy.d.ts +1 -1
- package/dist/shared/approval-policy.js.map +1 -1
- package/dist/{activities/execute-cursor → shared}/attachment-resolver.d.ts +2 -2
- package/dist/{activities/execute-cursor → shared}/attachment-resolver.js +5 -5
- package/dist/shared/attachment-resolver.js.map +1 -0
- package/dist/{activities/execute-cursor → shared}/blueprint-resolver.d.ts +7 -5
- package/dist/{activities/execute-cursor → shared}/blueprint-resolver.js +3 -63
- package/dist/shared/blueprint-resolver.js.map +1 -0
- package/dist/shared/channel-attachment.d.ts +1 -1
- package/dist/shared/channel-attachment.js.map +1 -1
- package/dist/{activities/execute-cursor → shared}/cost-guard.d.ts +5 -1
- package/dist/{activities/execute-cursor → shared}/cost-guard.js +5 -1
- package/dist/shared/cost-guard.js.map +1 -0
- package/dist/{activities/execute-cursor → shared}/env-resolver.d.ts +1 -1
- package/dist/shared/env-resolver.js.map +1 -0
- package/dist/{activities/execute-cursor → shared}/exact-apply.d.ts +1 -1
- package/dist/{activities/execute-cursor → shared}/exact-apply.js +6 -6
- package/dist/shared/exact-apply.js.map +1 -0
- package/dist/shared/execution-context.d.ts +35 -0
- package/dist/shared/execution-context.js +38 -0
- package/dist/shared/execution-context.js.map +1 -0
- package/dist/{activities/execute-cursor → shared}/extract-structured-output.d.ts +5 -2
- package/dist/{activities/execute-cursor → shared}/extract-structured-output.js +9 -6
- package/dist/shared/extract-structured-output.js.map +1 -0
- package/dist/shared/filereview/capture.d.ts +1 -1
- package/dist/shared/filereview/capture.js +1 -1
- package/dist/shared/heartbeat.d.ts +13 -11
- package/dist/shared/heartbeat.js +14 -29
- package/dist/shared/heartbeat.js.map +1 -1
- package/dist/{activities/execute-cursor → shared}/persist-decision.d.ts +5 -2
- package/dist/{activities/execute-cursor → shared}/persist-decision.js +4 -1
- package/dist/shared/persist-decision.js.map +1 -0
- package/dist/{activities/execute-cursor → shared}/skill-resolver.d.ts +16 -3
- package/dist/{activities/execute-cursor → shared}/skill-resolver.js +12 -4
- package/dist/shared/skill-resolver.js.map +1 -0
- package/dist/shared/subagent-rows.d.ts +21 -0
- package/dist/shared/subagent-rows.js +34 -0
- package/dist/shared/subagent-rows.js.map +1 -0
- package/dist/shared/worker-shutdown.d.ts +43 -16
- package/dist/shared/worker-shutdown.js +28 -13
- package/dist/shared/worker-shutdown.js.map +1 -1
- package/dist/shared/workspace/platform-dir.d.ts +1 -1
- package/dist/shared/workspace/platform-dir.js +1 -1
- package/dist/shared/workspace/session-provision.d.ts +54 -0
- package/dist/{activities/execute-cursor/workspace-provision.js → shared/workspace/session-provision.js} +15 -12
- package/dist/shared/workspace/session-provision.js.map +1 -0
- package/package.json +4 -4
- package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +110 -14
- package/src/__test-utils__/execution-record-fixture.ts +104 -0
- package/src/__test-utils__/harness-boot-order-child.ts +58 -0
- package/src/__test-utils__/harness-contract/contract.ts +128 -83
- package/src/__test-utils__/harness-contract/recording-sink.ts +15 -4
- package/src/__test-utils__/harness-contract/runtime-contract.ts +666 -0
- package/src/__test-utils__/harness-contract/scripted-adapter.ts +92 -32
- package/src/__test-utils__/harness-contract/types.ts +85 -9
- package/src/__test-utils__/hermetic-activity.ts +33 -8
- package/src/__test-utils__/model-registry-fixture.ts +72 -0
- package/src/__test-utils__/module-specifiers.ts +82 -0
- package/src/__test-utils__/turn-input-fixture.ts +155 -0
- package/src/__tests__/harness-boot-order.test.ts +77 -0
- package/src/__tests__/harness-contract.test.ts +7 -5
- package/src/__tests__/runner-manager.test.ts +18 -0
- package/src/activities/execute-cursor/__test-utils__/__tests__/scripted-double.test.ts +102 -0
- package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +396 -0
- package/src/activities/execute-cursor/__test-utils__/cursor-hook-harness.ts +66 -0
- package/src/activities/execute-cursor/__test-utils__/gateway-substrate.ts +2 -43
- package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +65 -145
- package/src/activities/execute-cursor/__test-utils__/scripted-agent.ts +30 -4
- package/src/activities/execute-cursor/__test-utils__/scripted-sdk.ts +96 -8
- package/src/activities/execute-cursor/__tests__/adapter-is-temporal-free.test.ts +45 -0
- package/src/activities/execute-cursor/__tests__/approval-decisions-agree.test.ts +90 -0
- package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +7 -8
- package/src/activities/execute-cursor/__tests__/capture-flow.test.ts +28 -1
- package/src/activities/execute-cursor/__tests__/deny-gate-exact-apply.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +64 -6
- 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/cost-cap.status.json +53 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/pause.status.json +1 -6
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/platform-stop.status.json +56 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/recovery-transport-timeout.status.json +48 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/resolution-error.status.json +18 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/run-cancelled.status.json +36 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/run-error-non-retryable.status.json +37 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-error-at-create.status.json +38 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/stall.status.json +59 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattributed-hook-block.status.json +79 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/worker-shutdown.status.json +2 -7
- package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +170 -0
- package/src/activities/execute-cursor/__tests__/hermetic/pause-vs-shutdown.test.ts +22 -18
- package/src/activities/execute-cursor/__tests__/hermetic/plain-turn.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/recovery-fresh-agent.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/run-wait-arms.test.ts +286 -0
- package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +332 -0
- package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +193 -0
- package/src/activities/execute-cursor/__tests__/hermetic/tool-call.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/unattributed-hook-block.test.ts +185 -0
- package/src/activities/execute-cursor/__tests__/hermetic/workspace-lock-timeout.test.ts +151 -0
- package/src/activities/execute-cursor/__tests__/http2-interceptor.test.ts +65 -35
- package/src/activities/execute-cursor/__tests__/message-translator.test.ts +0 -40
- package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +171 -0
- package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +118 -243
- package/src/activities/execute-cursor/__tests__/usage-pricing.test.ts +84 -0
- package/src/activities/execute-cursor/adapter.ts +138 -0
- package/src/activities/execute-cursor/approval-state.ts +2 -2
- package/src/activities/execute-cursor/capture-flow.ts +18 -41
- package/src/activities/execute-cursor/cursor-capabilities.ts +35 -0
- package/src/activities/execute-cursor/cursor-mcp-config.ts +2 -2
- package/src/activities/execute-cursor/fetch-interceptor.ts +48 -45
- package/src/activities/execute-cursor/http2-interceptor.ts +47 -34
- package/src/activities/execute-cursor/message-translator.ts +90 -45
- package/src/activities/execute-cursor/prompt-builder.ts +327 -12
- package/src/activities/execute-cursor/rejection-capture.ts +5 -12
- package/src/activities/execute-cursor/session-lifecycle.ts +1 -5
- package/src/activities/execute-cursor/turn-boundary.ts +1 -1
- package/src/activities/execute-cursor/turn-settle.ts +601 -0
- package/src/activities/execute-cursor/turn-setup.ts +645 -0
- package/src/activities/execute-cursor/turn-stream.ts +84 -210
- package/src/activities/execute-cursor/turn.ts +240 -0
- package/src/activities/execute-cursor/usage-pricing.ts +67 -0
- package/src/activities/execute-deep-agent/approval-file-change.ts +1 -1
- package/src/activities/execute-deep-agent/environment.ts +1 -1
- package/src/activities/execute-deep-agent/setup.ts +3 -2
- package/src/activities/hydrate-workflow-execution.ts +1 -1
- package/src/config.ts +13 -0
- package/src/harness/__tests__/import-direction.test.ts +168 -0
- package/src/harness/__tests__/persist-chokepoint.test.ts +146 -0
- package/src/harness/__tests__/registry.test.ts +1 -0
- package/src/harness/__tests__/run-turn.test.ts +165 -0
- package/src/harness/__tests__/stop-controller.test.ts +49 -0
- package/src/harness/__tests__/turn-context.test.ts +178 -0
- package/src/harness/__tests__/usage-accumulator.test.ts +83 -0
- package/src/harness/capabilities.ts +17 -0
- package/src/harness/persist-chokepoint.ts +112 -0
- package/src/harness/registry.ts +79 -5
- package/src/harness/run-turn.ts +618 -0
- package/src/harness/stop-controller.ts +83 -0
- package/src/harness/terminal-table.ts +276 -0
- package/src/harness/turn-context.ts +1028 -0
- package/src/harness/types.ts +248 -53
- package/src/harness/usage-accumulator.ts +122 -0
- package/src/harness-adapters.ts +30 -0
- package/src/main.ts +1 -1
- package/src/runner-manager.ts +68 -61
- package/src/runner.ts +67 -78
- package/src/shared/__tests__/attachment-naming.test.ts +1 -1
- package/src/{activities/execute-cursor → shared}/__tests__/attachment-resolver.test.ts +6 -4
- package/src/{activities/execute-cursor → shared}/__tests__/cost-guard.test.ts +2 -1
- package/src/{activities/execute-cursor → shared}/__tests__/exact-apply.test.ts +3 -3
- package/src/{activities/execute-cursor → shared}/__tests__/extract-structured-output.test.ts +8 -8
- package/src/{activities/execute-cursor → shared}/__tests__/persist-decision.test.ts +4 -2
- package/src/{activities/execute-cursor → shared}/__tests__/skill-resolver.test.ts +1 -1
- package/src/shared/__tests__/subagent-rows.test.ts +34 -0
- package/src/shared/__tests__/worker-shutdown.test.ts +44 -39
- package/src/shared/approval-policy.ts +1 -1
- package/src/{activities/execute-cursor → shared}/attachment-resolver.ts +6 -6
- package/src/{activities/execute-cursor → shared}/blueprint-resolver.ts +7 -78
- package/src/shared/channel-attachment.ts +1 -1
- package/src/{activities/execute-cursor → shared}/cost-guard.ts +5 -1
- package/src/{activities/execute-cursor → shared}/env-resolver.ts +1 -1
- package/src/{activities/execute-cursor → shared}/exact-apply.ts +7 -7
- package/src/shared/execution-context.ts +45 -0
- package/src/{activities/execute-cursor → shared}/extract-structured-output.ts +10 -7
- package/src/shared/filereview/capture.ts +1 -1
- package/src/shared/heartbeat.ts +13 -33
- package/src/{activities/execute-cursor → shared}/persist-decision.ts +5 -2
- package/src/{activities/execute-cursor → shared}/skill-resolver.ts +20 -6
- package/src/shared/subagent-rows.ts +39 -0
- package/src/shared/worker-shutdown.ts +55 -25
- package/src/{activities/execute-cursor/__tests__/workspace-provision.test.ts → shared/workspace/__tests__/session-provision.test.ts} +25 -28
- package/src/shared/workspace/platform-dir.ts +1 -1
- package/src/{activities/execute-cursor/workspace-provision.ts → shared/workspace/session-provision.ts} +29 -16
- package/dist/activities/execute-cursor/attachment-resolver.js.map +0 -1
- package/dist/activities/execute-cursor/blueprint-resolver.js.map +0 -1
- package/dist/activities/execute-cursor/cost-guard.js.map +0 -1
- package/dist/activities/execute-cursor/env-resolver.js.map +0 -1
- package/dist/activities/execute-cursor/exact-apply.js.map +0 -1
- package/dist/activities/execute-cursor/extract-structured-output.js.map +0 -1
- package/dist/activities/execute-cursor/index.d.ts +0 -209
- package/dist/activities/execute-cursor/index.js +0 -2345
- package/dist/activities/execute-cursor/index.js.map +0 -1
- package/dist/activities/execute-cursor/persist-decision.js.map +0 -1
- package/dist/activities/execute-cursor/skill-resolver.js.map +0 -1
- package/dist/activities/execute-cursor/usage-accumulator.d.ts +0 -89
- package/dist/activities/execute-cursor/usage-accumulator.js +0 -121
- package/dist/activities/execute-cursor/usage-accumulator.js.map +0 -1
- package/dist/activities/execute-cursor/workspace-provision.d.ts +0 -42
- package/dist/activities/execute-cursor/workspace-provision.js.map +0 -1
- package/src/activities/execute-cursor/__tests__/usage-accumulator.test.ts +0 -164
- package/src/activities/execute-cursor/index.ts +0 -2876
- package/src/activities/execute-cursor/usage-accumulator.ts +0 -169
- /package/dist/{activities/execute-cursor → shared}/env-resolver.js +0 -0
|
@@ -21,22 +21,31 @@
|
|
|
21
21
|
* (await import("../../../../__test-utils__/hermetic-activity.js")).hermeticStigmerClientModule());
|
|
22
22
|
* ```
|
|
23
23
|
*
|
|
24
|
-
* Network: the
|
|
25
|
-
* (`
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* one registry document — and to THROW for any other URL, so a new network
|
|
29
|
-
* dependency on the activity path fails the hermetic run instead of leaking.
|
|
24
|
+
* Network: the registry document and the `fetch` stub that serves it are
|
|
25
|
+
* the runtime's fixtures (`src/__test-utils__/model-registry-fixture.ts`);
|
|
26
|
+
* the record's four resources come from `execution-record-fixture.ts` with
|
|
27
|
+
* this harness's ids and model laid over the defaults.
|
|
30
28
|
*
|
|
31
29
|
* The fixture model is `composer-2.5`, pinned (not Auto) on purpose: Auto short-
|
|
32
30
|
* circuits `resolveServiceTierParams` before the catalog, and a pinned model runs
|
|
33
31
|
* the catalog path, the variant-param pinning, and the `run.wait()` model echo
|
|
34
32
|
* check — more of the production path under the golden.
|
|
33
|
+
*
|
|
34
|
+
* Where a scenario reaches the knobs that drive the terminal table, each on
|
|
35
|
+
* the object that models the thing deciding it: the execution's cost budget
|
|
36
|
+
* and the control plane's STOP answer on the record (`CursorRecordOptions`);
|
|
37
|
+
* a control-plane fault on the client (`clientOverrides`); the runner's stall
|
|
38
|
+
* and lock windows on the scenario's `Config` (`config`); an SDK failure on
|
|
39
|
+
* the SDK double (`ScriptedSdkOptions`); an SDK-side cancel or a mid-stream
|
|
40
|
+
* wedge as an `effect` step on the run. Nothing here is a switch in production
|
|
41
|
+
* code — every knob is a value the production path already reads.
|
|
35
42
|
*/
|
|
36
43
|
import type { ModelListItem } from "@cursor/sdk";
|
|
37
44
|
import { type WorkspaceEntry } from "@stigmer/protos/ai/stigmer/agentic/session/v1/workspace_pb";
|
|
45
|
+
import type { StigmerClient } from "../../../client/stigmer-client.js";
|
|
38
46
|
import type { Config } from "../../../config.js";
|
|
39
47
|
import { ExecutionRecord, ScriptedClock, type ActivityInvocation, type HermeticEnvironment, type InvocationControls } from "../../../__test-utils__/hermetic-activity.js";
|
|
48
|
+
import { type ExecutionRecordOptions } from "../../../__test-utils__/execution-record-fixture.js";
|
|
40
49
|
import { ScriptedCursorSdk, type ScriptedSdkOptions } from "./scripted-sdk.js";
|
|
41
50
|
export declare const FIXTURE: {
|
|
42
51
|
readonly org: "hermetic-org";
|
|
@@ -45,65 +54,16 @@ export declare const FIXTURE: {
|
|
|
45
54
|
readonly agentInstanceId: "ain_hermetic_0001";
|
|
46
55
|
readonly agentId: "agt_hermetic_0001";
|
|
47
56
|
readonly agentName: "hermetic-agent";
|
|
48
|
-
/** The pinned model; in the registry
|
|
57
|
+
/** The pinned model; in the registry fixture AND the SDK catalog below. */
|
|
49
58
|
readonly model: "composer-2.5";
|
|
50
59
|
readonly cursorApiKey: "hermetic-cursor-api-key";
|
|
51
60
|
};
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
/** The agent's instructions (system prompt body). */
|
|
56
|
-
readonly instructions?: string;
|
|
57
|
-
/** Session workspace entries (a `local_path` entry turns on capture mode). */
|
|
58
|
-
readonly workspaceEntries?: WorkspaceEntry[];
|
|
59
|
-
readonly modelName?: string;
|
|
60
|
-
readonly autoApproveAll?: boolean;
|
|
61
|
-
}
|
|
62
|
-
/** The four resources of one execution, wired by id into a chain. */
|
|
61
|
+
/** The record's knobs; the ids and the default model are this harness's fixture. */
|
|
62
|
+
export type CursorRecordOptions = Omit<ExecutionRecordOptions, "ids">;
|
|
63
|
+
/** The four resources of one execution, wired by id into a chain, under the Cursor fixture ids. */
|
|
63
64
|
export declare function cursorExecutionRecord(options: CursorRecordOptions): ExecutionRecord;
|
|
64
|
-
/**
|
|
65
|
-
* The model registry document both readers parse (`parsePricingTable` wants
|
|
66
|
-
* `harness: "cursor"` + `pricing`; `parseRegistry` wants `id` + `provider` and
|
|
67
|
-
* reads `capabilities.vision`). One entry, the fixture model, priced at round
|
|
68
|
-
* numbers so the golden's `estimatedCostUsd` is legible.
|
|
69
|
-
*/
|
|
70
|
-
export declare const REGISTRY_DOCUMENT: {
|
|
71
|
-
readonly models: readonly [{
|
|
72
|
-
readonly id: "composer-2.5";
|
|
73
|
-
readonly displayName: "Composer 2.5 (hermetic fixture)";
|
|
74
|
-
readonly provider: "cursor";
|
|
75
|
-
readonly harness: "cursor";
|
|
76
|
-
readonly costTier: "standard";
|
|
77
|
-
readonly featured: true;
|
|
78
|
-
readonly capabilities: {
|
|
79
|
-
readonly vision: true;
|
|
80
|
-
};
|
|
81
|
-
readonly pricing: {
|
|
82
|
-
readonly inputPricePerMillion: 1;
|
|
83
|
-
readonly outputPricePerMillion: 4;
|
|
84
|
-
readonly cacheWritePricePerMillion: 1;
|
|
85
|
-
readonly cacheReadPricePerMillion: 0.1;
|
|
86
|
-
};
|
|
87
|
-
readonly pricingVariants: {
|
|
88
|
-
readonly fast: {
|
|
89
|
-
readonly inputPricePerMillion: 3;
|
|
90
|
-
readonly outputPricePerMillion: 12;
|
|
91
|
-
readonly cacheWritePricePerMillion: 3;
|
|
92
|
-
readonly cacheReadPricePerMillion: 0.3;
|
|
93
|
-
};
|
|
94
|
-
};
|
|
95
|
-
}];
|
|
96
|
-
};
|
|
97
65
|
/** The SDK catalog entry for the fixture model: both pinnable params declared. */
|
|
98
66
|
export declare const SDK_CATALOG: readonly ModelListItem[];
|
|
99
|
-
/**
|
|
100
|
-
* Stub `fetch` to answer the registry document and refuse everything else.
|
|
101
|
-
* Returns the URLs fetched, for the "no other network" assertion.
|
|
102
|
-
*/
|
|
103
|
-
export declare function stubRegistryFetch(): {
|
|
104
|
-
readonly urls: string[];
|
|
105
|
-
restore(): void;
|
|
106
|
-
};
|
|
107
67
|
/** The OSS/local runner posture: direct Cursor API key, no proxy, local mode. */
|
|
108
68
|
export declare function hermeticCursorConfig(env: HermeticEnvironment): Config;
|
|
109
69
|
/**
|
|
@@ -148,12 +108,27 @@ export interface CursorScenario {
|
|
|
148
108
|
readonly clock: ScriptedClock;
|
|
149
109
|
readonly record: ExecutionRecord;
|
|
150
110
|
readonly sdk: ScriptedCursorSdk;
|
|
111
|
+
/** The runner this scenario runs on: the OSS posture plus the scenario's knobs. */
|
|
112
|
+
readonly config: Config;
|
|
151
113
|
}
|
|
152
114
|
export interface CursorScenarioOptions {
|
|
153
115
|
readonly env: HermeticEnvironment;
|
|
154
116
|
readonly clock: ScriptedClock;
|
|
155
117
|
readonly record: ExecutionRecord;
|
|
156
118
|
readonly sdk: ScriptedSdkOptions;
|
|
119
|
+
/**
|
|
120
|
+
* Control-plane facets the scenario opts INTO, or faults it injects, over
|
|
121
|
+
* the record's everyday answers (`ExecutionRecord.client`): a rejecting
|
|
122
|
+
* `getAgent` is how a blueprint-resolution failure is staged.
|
|
123
|
+
*/
|
|
124
|
+
readonly clientOverrides?: Partial<StigmerClient>;
|
|
125
|
+
/**
|
|
126
|
+
* Runner knobs over {@link hermeticCursorConfig}: a scenario that needs the
|
|
127
|
+
* stall watchdog or the workspace-lock wait to expire states the window
|
|
128
|
+
* here. A property of the runner the scenario runs on, not of one turn, so
|
|
129
|
+
* it lives on the scenario and every turn of it sees the same `Config`.
|
|
130
|
+
*/
|
|
131
|
+
readonly config?: Partial<Config>;
|
|
157
132
|
}
|
|
158
133
|
/** Bind the record and the SDK for a scenario; resets the harness caches first. */
|
|
159
134
|
export declare function beginCursorScenario(options: CursorScenarioOptions): CursorScenario;
|
|
@@ -165,8 +140,9 @@ export interface CursorTurnOptions {
|
|
|
165
140
|
readonly onControls?: (controls: InvocationControls) => void;
|
|
166
141
|
}
|
|
167
142
|
/**
|
|
168
|
-
* Run ONE `ExecuteCursor` invocation for the scenario
|
|
169
|
-
*
|
|
170
|
-
*
|
|
143
|
+
* Run ONE `ExecuteCursor` invocation for the scenario: the real Cursor
|
|
144
|
+
* adapter under the real turn runtime, as the composition roots wire them.
|
|
145
|
+
* Built per invocation (the registry constructs its client, which is the one
|
|
146
|
+
* bound at `beginCursorScenario`; the adapter boots on the scenario's config).
|
|
171
147
|
*/
|
|
172
148
|
export declare function runCursorTurn(scenario: CursorScenario, options?: CursorTurnOptions): Promise<ActivityInvocation>;
|
|
@@ -21,34 +21,33 @@
|
|
|
21
21
|
* (await import("../../../../__test-utils__/hermetic-activity.js")).hermeticStigmerClientModule());
|
|
22
22
|
* ```
|
|
23
23
|
*
|
|
24
|
-
* Network: the
|
|
25
|
-
* (`
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* one registry document — and to THROW for any other URL, so a new network
|
|
29
|
-
* dependency on the activity path fails the hermetic run instead of leaking.
|
|
24
|
+
* Network: the registry document and the `fetch` stub that serves it are
|
|
25
|
+
* the runtime's fixtures (`src/__test-utils__/model-registry-fixture.ts`);
|
|
26
|
+
* the record's four resources come from `execution-record-fixture.ts` with
|
|
27
|
+
* this harness's ids and model laid over the defaults.
|
|
30
28
|
*
|
|
31
29
|
* The fixture model is `composer-2.5`, pinned (not Auto) on purpose: Auto short-
|
|
32
30
|
* circuits `resolveServiceTierParams` before the catalog, and a pinned model runs
|
|
33
31
|
* the catalog path, the variant-param pinning, and the `run.wait()` model echo
|
|
34
32
|
* check — more of the production path under the golden.
|
|
33
|
+
*
|
|
34
|
+
* Where a scenario reaches the knobs that drive the terminal table, each on
|
|
35
|
+
* the object that models the thing deciding it: the execution's cost budget
|
|
36
|
+
* and the control plane's STOP answer on the record (`CursorRecordOptions`);
|
|
37
|
+
* a control-plane fault on the client (`clientOverrides`); the runner's stall
|
|
38
|
+
* and lock windows on the scenario's `Config` (`config`); an SDK failure on
|
|
39
|
+
* the SDK double (`ScriptedSdkOptions`); an SDK-side cancel or a mid-stream
|
|
40
|
+
* wedge as an `effect` step on the run. Nothing here is a switch in production
|
|
41
|
+
* code — every knob is a value the production path already reads.
|
|
35
42
|
*/
|
|
36
43
|
import { execFileSync } from "node:child_process";
|
|
37
44
|
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
38
45
|
import { dirname, join } from "node:path";
|
|
39
46
|
import { create } from "@bufbuild/protobuf";
|
|
40
|
-
import { vi } from "vitest";
|
|
41
|
-
import { AgentExecutionSchema, } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
42
|
-
import { AgentExecutionSpecSchema, ExecutionConfigSchema, } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/spec_pb";
|
|
43
|
-
import { SessionSchema } from "@stigmer/protos/ai/stigmer/agentic/session/v1/api_pb";
|
|
44
|
-
import { SessionSpecSchema } from "@stigmer/protos/ai/stigmer/agentic/session/v1/spec_pb";
|
|
45
47
|
import { LocalPathSourceSchema, WorkspaceEntrySchema, WorkspaceSourceSchema, } from "@stigmer/protos/ai/stigmer/agentic/session/v1/workspace_pb";
|
|
46
|
-
import {
|
|
47
|
-
import {
|
|
48
|
-
import {
|
|
49
|
-
import { AgentInstanceSpecSchema } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/spec_pb";
|
|
50
|
-
import { ApiResourceMetadataSchema } from "@stigmer/protos/ai/stigmer/commons/apiresource/metadata_pb";
|
|
51
|
-
import { ExecutionRecord, bindHermeticClient, runActivityHermetically, } from "../../../__test-utils__/hermetic-activity.js";
|
|
48
|
+
import { bindHermeticClient, runActivityHermetically, } from "../../../__test-utils__/hermetic-activity.js";
|
|
49
|
+
import { executionRecordFixture } from "../../../__test-utils__/execution-record-fixture.js";
|
|
50
|
+
import { FIXTURE_MODEL } from "../../../__test-utils__/model-registry-fixture.js";
|
|
52
51
|
import { _resetAgentSessionCacheForTests } from "../agent-session-cache.js";
|
|
53
52
|
import { _resetPricingCache } from "../model-pricing-data.js";
|
|
54
53
|
import { resetCatalogCacheForTests } from "../service-tier.js";
|
|
@@ -64,95 +63,28 @@ export const FIXTURE = {
|
|
|
64
63
|
agentInstanceId: "ain_hermetic_0001",
|
|
65
64
|
agentId: "agt_hermetic_0001",
|
|
66
65
|
agentName: "hermetic-agent",
|
|
67
|
-
/** The pinned model; in the registry
|
|
68
|
-
model:
|
|
66
|
+
/** The pinned model; in the registry fixture AND the SDK catalog below. */
|
|
67
|
+
model: FIXTURE_MODEL,
|
|
69
68
|
cursorApiKey: "hermetic-cursor-api-key",
|
|
70
69
|
};
|
|
71
|
-
/** The four resources of one execution, wired by id into a chain. */
|
|
70
|
+
/** The four resources of one execution, wired by id into a chain, under the Cursor fixture ids. */
|
|
72
71
|
export function cursorExecutionRecord(options) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
return executionRecordFixture({
|
|
73
|
+
...options,
|
|
74
|
+
modelName: options.modelName ?? FIXTURE.model,
|
|
75
|
+
ids: {
|
|
76
76
|
org: FIXTURE.org,
|
|
77
|
-
|
|
78
|
-
}),
|
|
79
|
-
spec: create(AgentExecutionSpecSchema, {
|
|
77
|
+
executionId: FIXTURE.executionId,
|
|
80
78
|
sessionId: FIXTURE.sessionId,
|
|
81
|
-
message: options.message,
|
|
82
|
-
autoApproveAll: options.autoApproveAll ?? false,
|
|
83
|
-
executionConfig: create(ExecutionConfigSchema, {
|
|
84
|
-
modelName: options.modelName ?? FIXTURE.model,
|
|
85
|
-
}),
|
|
86
|
-
}),
|
|
87
|
-
});
|
|
88
|
-
const session = create(SessionSchema, {
|
|
89
|
-
metadata: create(ApiResourceMetadataSchema, {
|
|
90
|
-
id: FIXTURE.sessionId,
|
|
91
|
-
org: FIXTURE.org,
|
|
92
|
-
name: FIXTURE.sessionId,
|
|
93
|
-
}),
|
|
94
|
-
spec: create(SessionSpecSchema, {
|
|
95
79
|
agentInstanceId: FIXTURE.agentInstanceId,
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const agentInstance = create(AgentInstanceSchema, {
|
|
100
|
-
metadata: create(ApiResourceMetadataSchema, {
|
|
101
|
-
id: FIXTURE.agentInstanceId,
|
|
102
|
-
org: FIXTURE.org,
|
|
103
|
-
name: FIXTURE.agentInstanceId,
|
|
104
|
-
}),
|
|
105
|
-
spec: create(AgentInstanceSpecSchema, { agentId: FIXTURE.agentId }),
|
|
106
|
-
});
|
|
107
|
-
const agent = create(AgentSchema, {
|
|
108
|
-
metadata: create(ApiResourceMetadataSchema, {
|
|
109
|
-
id: FIXTURE.agentId,
|
|
110
|
-
org: FIXTURE.org,
|
|
111
|
-
name: FIXTURE.agentName,
|
|
112
|
-
}),
|
|
113
|
-
spec: create(AgentSpecSchema, {
|
|
114
|
-
description: "Hermetic fixture agent",
|
|
115
|
-
instructions: options.instructions ?? "You are the hermetic fixture agent. Answer briefly.",
|
|
116
|
-
}),
|
|
80
|
+
agentId: FIXTURE.agentId,
|
|
81
|
+
agentName: FIXTURE.agentName,
|
|
82
|
+
},
|
|
117
83
|
});
|
|
118
|
-
return new ExecutionRecord({ execution, session, agentInstance, agent });
|
|
119
84
|
}
|
|
120
85
|
// ---------------------------------------------------------------------------
|
|
121
|
-
// The
|
|
86
|
+
// The SDK catalog
|
|
122
87
|
// ---------------------------------------------------------------------------
|
|
123
|
-
/**
|
|
124
|
-
* The model registry document both readers parse (`parsePricingTable` wants
|
|
125
|
-
* `harness: "cursor"` + `pricing`; `parseRegistry` wants `id` + `provider` and
|
|
126
|
-
* reads `capabilities.vision`). One entry, the fixture model, priced at round
|
|
127
|
-
* numbers so the golden's `estimatedCostUsd` is legible.
|
|
128
|
-
*/
|
|
129
|
-
export const REGISTRY_DOCUMENT = {
|
|
130
|
-
models: [
|
|
131
|
-
{
|
|
132
|
-
id: FIXTURE.model,
|
|
133
|
-
displayName: "Composer 2.5 (hermetic fixture)",
|
|
134
|
-
provider: "cursor",
|
|
135
|
-
harness: "cursor",
|
|
136
|
-
costTier: "standard",
|
|
137
|
-
featured: true,
|
|
138
|
-
capabilities: { vision: true },
|
|
139
|
-
pricing: {
|
|
140
|
-
inputPricePerMillion: 1.0,
|
|
141
|
-
outputPricePerMillion: 4.0,
|
|
142
|
-
cacheWritePricePerMillion: 1.0,
|
|
143
|
-
cacheReadPricePerMillion: 0.1,
|
|
144
|
-
},
|
|
145
|
-
pricingVariants: {
|
|
146
|
-
fast: {
|
|
147
|
-
inputPricePerMillion: 3.0,
|
|
148
|
-
outputPricePerMillion: 12.0,
|
|
149
|
-
cacheWritePricePerMillion: 3.0,
|
|
150
|
-
cacheReadPricePerMillion: 0.3,
|
|
151
|
-
},
|
|
152
|
-
},
|
|
153
|
-
},
|
|
154
|
-
],
|
|
155
|
-
};
|
|
156
88
|
/** The SDK catalog entry for the fixture model: both pinnable params declared. */
|
|
157
89
|
export const SDK_CATALOG = [
|
|
158
90
|
{
|
|
@@ -164,22 +96,6 @@ export const SDK_CATALOG = [
|
|
|
164
96
|
],
|
|
165
97
|
},
|
|
166
98
|
];
|
|
167
|
-
/**
|
|
168
|
-
* Stub `fetch` to answer the registry document and refuse everything else.
|
|
169
|
-
* Returns the URLs fetched, for the "no other network" assertion.
|
|
170
|
-
*/
|
|
171
|
-
export function stubRegistryFetch() {
|
|
172
|
-
const urls = [];
|
|
173
|
-
vi.stubGlobal("fetch", vi.fn(async (input) => {
|
|
174
|
-
const url = typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
|
|
175
|
-
urls.push(url);
|
|
176
|
-
if (!url.includes("/model-registry")) {
|
|
177
|
-
throw new Error(`hermetic run attempted a non-registry network call: ${url}`);
|
|
178
|
-
}
|
|
179
|
-
return { ok: true, status: 200, json: async () => REGISTRY_DOCUMENT };
|
|
180
|
-
}));
|
|
181
|
-
return { urls, restore: () => vi.unstubAllGlobals() };
|
|
182
|
-
}
|
|
183
99
|
// ---------------------------------------------------------------------------
|
|
184
100
|
// Config
|
|
185
101
|
// ---------------------------------------------------------------------------
|
|
@@ -303,20 +219,30 @@ export function beginCursorScenario(options) {
|
|
|
303
219
|
resetCursorModuleState();
|
|
304
220
|
const sdk = new ScriptedCursorSdk(options.sdk);
|
|
305
221
|
bindScriptedSdk(sdk);
|
|
306
|
-
bindHermeticClient(options.record.client());
|
|
307
|
-
return {
|
|
222
|
+
bindHermeticClient(options.record.client(options.clientOverrides));
|
|
223
|
+
return {
|
|
224
|
+
env: options.env,
|
|
225
|
+
clock: options.clock,
|
|
226
|
+
record: options.record,
|
|
227
|
+
sdk,
|
|
228
|
+
config: { ...hermeticCursorConfig(options.env), ...options.config },
|
|
229
|
+
};
|
|
308
230
|
}
|
|
309
231
|
/**
|
|
310
|
-
* Run ONE `ExecuteCursor` invocation for the scenario
|
|
311
|
-
*
|
|
312
|
-
*
|
|
232
|
+
* Run ONE `ExecuteCursor` invocation for the scenario: the real Cursor
|
|
233
|
+
* adapter under the real turn runtime, as the composition roots wire them.
|
|
234
|
+
* Built per invocation (the registry constructs its client, which is the one
|
|
235
|
+
* bound at `beginCursorScenario`; the adapter boots on the scenario's config).
|
|
313
236
|
*/
|
|
314
237
|
export async function runCursorTurn(scenario, options = {}) {
|
|
315
238
|
// Imported lazily so the scenario file's `vi.mock` declarations are in
|
|
316
|
-
// force before the
|
|
317
|
-
//
|
|
318
|
-
const {
|
|
319
|
-
const
|
|
239
|
+
// force before the adapter module is loaded and before its `boot` loads
|
|
240
|
+
// `@cursor/sdk` (through `turn.ts`) and the registry loads the client.
|
|
241
|
+
const { createCursorAdapter } = await import("../adapter.js");
|
|
242
|
+
const { createHarnessActivities } = await import("../../../harness/registry.js");
|
|
243
|
+
const adapter = createCursorAdapter();
|
|
244
|
+
await adapter.boot(scenario.config);
|
|
245
|
+
const activities = await createHarnessActivities([{ harness: "cursor", adapter }], scenario.config);
|
|
320
246
|
// The typed wire shape the control plane's workflow sends (activity-input.ts).
|
|
321
247
|
const input = {
|
|
322
248
|
execution_id: scenario.record.executionId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermetic-cursor.js","sourceRoot":"","sources":["../../../../src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hermetic-cursor.js","sourceRoot":"","sources":["../../../../src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,11 @@
|
|
|
42
42
|
*
|
|
43
43
|
* Every `send()` consumes the NEXT script in the agent's queue: turn 1, then
|
|
44
44
|
* the resumed turn 2 on the same parked agent. A `send()` with no script left
|
|
45
|
-
* is a test bug and throws.
|
|
45
|
+
* is a test bug and throws. A golden scenario declares every script up front
|
|
46
|
+
* (`turns`); a driver that learns what the next turn plays only just before
|
|
47
|
+
* it runs — the harness contract kit's Cursor subject — arranges it with
|
|
48
|
+
* {@link ScriptedCursorAgent.arrangeNextTurn}, which REPLACES the slot the
|
|
49
|
+
* next `send()` will consume.
|
|
46
50
|
*/
|
|
47
51
|
import type { ModelSelection, Run, RunOperation, RunResult, RunStatus, SDKAgent, SDKMessage, SDKUserMessage, SendOptions } from "@cursor/sdk";
|
|
48
52
|
import type { ConversationTurn } from "@cursor/sdk";
|
|
@@ -149,6 +153,8 @@ export interface RecordedSend {
|
|
|
149
153
|
readonly message: string | SDKUserMessage;
|
|
150
154
|
readonly hasOnDelta: boolean;
|
|
151
155
|
}
|
|
156
|
+
/** The run id a send is given when the scenario named none: `run-<agentId>-<n>`, `n` counting sends from 1. */
|
|
157
|
+
export declare function defaultRunId(agentId: string, sendIndex: number): string;
|
|
152
158
|
export declare class ScriptedCursorAgent implements SDKAgent {
|
|
153
159
|
private readonly options;
|
|
154
160
|
readonly agentId: string;
|
|
@@ -157,7 +163,17 @@ export declare class ScriptedCursorAgent implements SDKAgent {
|
|
|
157
163
|
readonly runs: ScriptedRun[];
|
|
158
164
|
closeCalls: number;
|
|
159
165
|
private nextTurn;
|
|
166
|
+
/** The scenario's scripts, one slot per send; `arrangeNextTurn` writes the slot the next send consumes. */
|
|
167
|
+
private readonly turns;
|
|
160
168
|
constructor(options: ScriptedAgentOptions);
|
|
169
|
+
/** The run id the NEXT `send()` will be given — so a script can be built with matching event ids before the send happens. */
|
|
170
|
+
get nextRunId(): string;
|
|
171
|
+
/**
|
|
172
|
+
* Set (or replace) what the NEXT `send()` plays. Scripts already consumed
|
|
173
|
+
* are untouched; a slot declared up front for a later send stays where it
|
|
174
|
+
* is.
|
|
175
|
+
*/
|
|
176
|
+
arrangeNextTurn(script: TurnScript): void;
|
|
161
177
|
send(message: string | SDKUserMessage, options?: SendOptions): Promise<Run>;
|
|
162
178
|
close(): void;
|
|
163
179
|
reload(): Promise<void>;
|
|
@@ -42,7 +42,11 @@
|
|
|
42
42
|
*
|
|
43
43
|
* Every `send()` consumes the NEXT script in the agent's queue: turn 1, then
|
|
44
44
|
* the resumed turn 2 on the same parked agent. A `send()` with no script left
|
|
45
|
-
* is a test bug and throws.
|
|
45
|
+
* is a test bug and throws. A golden scenario declares every script up front
|
|
46
|
+
* (`turns`); a driver that learns what the next turn plays only just before
|
|
47
|
+
* it runs — the harness contract kit's Cursor subject — arranges it with
|
|
48
|
+
* {@link ScriptedCursorAgent.arrangeNextTurn}, which REPLACES the slot the
|
|
49
|
+
* next `send()` will consume.
|
|
46
50
|
*/
|
|
47
51
|
/** Step builders — the vocabulary a scenario file reads as. */
|
|
48
52
|
export const step = {
|
|
@@ -193,6 +197,10 @@ export class ScriptedRun {
|
|
|
193
197
|
l(status);
|
|
194
198
|
}
|
|
195
199
|
}
|
|
200
|
+
/** The run id a send is given when the scenario named none: `run-<agentId>-<n>`, `n` counting sends from 1. */
|
|
201
|
+
export function defaultRunId(agentId, sendIndex) {
|
|
202
|
+
return `run-${agentId}-${sendIndex + 1}`;
|
|
203
|
+
}
|
|
196
204
|
export class ScriptedCursorAgent {
|
|
197
205
|
options;
|
|
198
206
|
agentId;
|
|
@@ -201,17 +209,32 @@ export class ScriptedCursorAgent {
|
|
|
201
209
|
runs = [];
|
|
202
210
|
closeCalls = 0;
|
|
203
211
|
nextTurn = 0;
|
|
212
|
+
/** The scenario's scripts, one slot per send; `arrangeNextTurn` writes the slot the next send consumes. */
|
|
213
|
+
turns;
|
|
204
214
|
constructor(options) {
|
|
205
215
|
this.options = options;
|
|
206
216
|
this.agentId = options.agentId;
|
|
217
|
+
this.turns = [...options.turns];
|
|
218
|
+
}
|
|
219
|
+
/** The run id the NEXT `send()` will be given — so a script can be built with matching event ids before the send happens. */
|
|
220
|
+
get nextRunId() {
|
|
221
|
+
return this.options.runIds?.[this.nextTurn] ?? defaultRunId(this.agentId, this.nextTurn);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Set (or replace) what the NEXT `send()` plays. Scripts already consumed
|
|
225
|
+
* are untouched; a slot declared up front for a later send stays where it
|
|
226
|
+
* is.
|
|
227
|
+
*/
|
|
228
|
+
arrangeNextTurn(script) {
|
|
229
|
+
this.turns[this.nextTurn] = script;
|
|
207
230
|
}
|
|
208
231
|
async send(message, options) {
|
|
209
|
-
const script = this.
|
|
232
|
+
const script = this.turns[this.nextTurn];
|
|
210
233
|
if (!script) {
|
|
211
234
|
throw new Error(`ScriptedCursorAgent ${this.agentId}: send() #${this.nextTurn + 1} has no script ` +
|
|
212
|
-
`(the scenario declared ${this.
|
|
235
|
+
`(the scenario declared ${this.turns.length})`);
|
|
213
236
|
}
|
|
214
|
-
const runId = this.
|
|
237
|
+
const runId = this.nextRunId;
|
|
215
238
|
this.nextTurn++;
|
|
216
239
|
this.sends.push({ message, hasOnDelta: !!options?.onDelta });
|
|
217
240
|
if (options?.model)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripted-agent.js","sourceRoot":"","sources":["../../../../src/activities/execute-cursor/__test-utils__/scripted-agent.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"scripted-agent.js","sourceRoot":"","sources":["../../../../src/activities/execute-cursor/__test-utils__/scripted-agent.ts"],"names":[],"mappings":"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"}
|