@stigmer/runner 3.15.3-dev.20260914100347 → 3.15.3-dev.20260916211208
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/.build-fingerprint +1 -1
- package/dist/__test-utils__/approval-contract/types.d.ts +1 -1
- package/dist/__test-utils__/hermetic-activity.d.ts +61 -7
- package/dist/__test-utils__/hermetic-activity.js +100 -9
- package/dist/__test-utils__/hermetic-activity.js.map +1 -1
- package/dist/__test-utils__/model-registry-fixture.d.ts +22 -3
- package/dist/__test-utils__/model-registry-fixture.js +22 -7
- package/dist/__test-utils__/model-registry-fixture.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.d.ts +2 -2
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.js +14 -11
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/fold.d.ts +61 -0
- package/dist/activities/execute-cursor/__test-utils__/fold.js +94 -0
- package/dist/activities/execute-cursor/__test-utils__/fold.js.map +1 -0
- package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js +1 -1
- package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +52 -14
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +46 -12
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.d.ts +21 -28
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js +27 -11
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.d.ts +70 -26
- package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.js +82 -32
- package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.js.map +1 -1
- package/dist/activities/execute-cursor/adapter.d.ts +8 -7
- package/dist/activities/execute-cursor/adapter.js +13 -9
- package/dist/activities/execute-cursor/adapter.js.map +1 -1
- package/dist/activities/execute-cursor/approval-policy.d.ts +10 -10
- package/dist/activities/execute-cursor/approval-policy.js +12 -23
- package/dist/activities/execute-cursor/approval-policy.js.map +1 -1
- package/dist/activities/execute-cursor/approval-state.d.ts +35 -1
- package/dist/activities/execute-cursor/approval-state.js +65 -0
- package/dist/activities/execute-cursor/approval-state.js.map +1 -1
- package/dist/activities/execute-cursor/{message-translator.d.ts → boundary-rows.d.ts} +45 -341
- package/dist/activities/execute-cursor/boundary-rows.js +1018 -0
- package/dist/activities/execute-cursor/boundary-rows.js.map +1 -0
- package/dist/activities/execute-cursor/cursor-capabilities.d.ts +1 -1
- package/dist/activities/execute-cursor/cursor-capabilities.js +1 -1
- package/dist/activities/execute-cursor/cursor-event-recorder.d.ts +33 -14
- package/dist/activities/execute-cursor/cursor-event-recorder.js +43 -21
- package/dist/activities/execute-cursor/cursor-event-recorder.js.map +1 -1
- package/dist/activities/execute-cursor/prompt-builder.d.ts +3 -3
- package/dist/activities/execute-cursor/prompt-builder.js +4 -4
- package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
- package/dist/activities/execute-cursor/sdk-warmup.d.ts +15 -6
- package/dist/activities/execute-cursor/sdk-warmup.js +15 -6
- package/dist/activities/execute-cursor/sdk-warmup.js.map +1 -1
- package/dist/activities/execute-cursor/service-tier.js +1 -2
- package/dist/activities/execute-cursor/service-tier.js.map +1 -1
- package/dist/activities/execute-cursor/session-lifecycle.d.ts +38 -59
- package/dist/activities/execute-cursor/session-lifecycle.js +59 -96
- package/dist/activities/execute-cursor/session-lifecycle.js.map +1 -1
- package/dist/activities/execute-cursor/session-store.d.ts +100 -0
- package/dist/activities/execute-cursor/session-store.js +157 -0
- package/dist/activities/execute-cursor/session-store.js.map +1 -0
- package/dist/activities/execute-cursor/sub-agent-steps.d.ts +79 -0
- package/dist/activities/execute-cursor/sub-agent-steps.js +180 -0
- package/dist/activities/execute-cursor/sub-agent-steps.js.map +1 -0
- package/dist/activities/execute-cursor/tool-result.d.ts +49 -0
- package/dist/activities/execute-cursor/tool-result.js +130 -0
- package/dist/activities/execute-cursor/tool-result.js.map +1 -0
- package/dist/activities/execute-cursor/translator.d.ts +178 -0
- package/dist/activities/execute-cursor/translator.js +485 -0
- package/dist/activities/execute-cursor/translator.js.map +1 -0
- package/dist/activities/execute-cursor/turn-boundary.d.ts +15 -5
- package/dist/activities/execute-cursor/turn-boundary.js +10 -14
- package/dist/activities/execute-cursor/turn-boundary.js.map +1 -1
- package/dist/activities/execute-cursor/turn-settle.d.ts +11 -7
- package/dist/activities/execute-cursor/turn-settle.js +47 -34
- package/dist/activities/execute-cursor/turn-settle.js.map +1 -1
- package/dist/activities/execute-cursor/turn-setup.d.ts +2 -2
- package/dist/activities/execute-cursor/turn-setup.js +5 -5
- package/dist/activities/execute-cursor/turn-setup.js.map +1 -1
- package/dist/activities/execute-cursor/turn-stream.d.ts +23 -14
- package/dist/activities/execute-cursor/turn-stream.js +41 -28
- package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
- package/dist/activities/execute-cursor/turn.d.ts +4 -4
- package/dist/activities/execute-cursor/turn.js +5 -5
- package/dist/activities/execute-cursor/usage-pricing.d.ts +2 -2
- package/dist/activities/execute-cursor/usage-pricing.js +2 -2
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.d.ts +2 -2
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js +2 -2
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.d.ts +16 -11
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js +22 -10
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.d.ts +2 -3
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js +2 -3
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.d.ts +12 -3
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js +18 -4
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.d.ts +10 -1
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js +24 -11
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js.map +1 -1
- package/dist/activities/execute-deep-agent/adapter.d.ts +1 -1
- package/dist/activities/execute-deep-agent/adapter.js +1 -1
- package/dist/activities/execute-deep-agent/approval-file-change.d.ts +19 -19
- package/dist/activities/execute-deep-agent/approval-file-change.js +16 -15
- package/dist/activities/execute-deep-agent/approval-file-change.js.map +1 -1
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.d.ts +2 -2
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.js +2 -2
- package/dist/activities/execute-deep-agent/hitl.d.ts +2 -2
- package/dist/activities/execute-deep-agent/hitl.js +2 -2
- package/dist/activities/execute-deep-agent/inline-publisher.d.ts +13 -3
- package/dist/activities/execute-deep-agent/inline-publisher.js +3 -3
- package/dist/activities/execute-deep-agent/inline-publisher.js.map +1 -1
- package/dist/activities/execute-deep-agent/prompt-builder.d.ts +3 -3
- package/dist/activities/execute-deep-agent/prompt-builder.js +6 -7
- package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
- package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +16 -8
- package/dist/activities/execute-deep-agent/streaming-side-effects.js +20 -33
- package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +3 -3
- package/dist/activities/execute-deep-agent/subagent-transformer.js +1 -1
- package/dist/activities/execute-deep-agent/translator.d.ts +134 -0
- package/dist/activities/execute-deep-agent/translator.js +418 -0
- package/dist/activities/execute-deep-agent/translator.js.map +1 -0
- package/dist/activities/execute-deep-agent/turn-settle.d.ts +13 -7
- package/dist/activities/execute-deep-agent/turn-settle.js +34 -45
- package/dist/activities/execute-deep-agent/turn-settle.js.map +1 -1
- package/dist/activities/execute-deep-agent/turn-setup.d.ts +8 -8
- package/dist/activities/execute-deep-agent/turn-setup.js +7 -7
- package/dist/activities/execute-deep-agent/turn-stream.d.ts +13 -10
- package/dist/activities/execute-deep-agent/turn-stream.js +44 -41
- package/dist/activities/execute-deep-agent/turn-stream.js.map +1 -1
- package/dist/activities/execute-deep-agent/turn.d.ts +3 -3
- package/dist/activities/execute-deep-agent/turn.js +3 -3
- package/dist/config.d.ts +2 -2
- package/dist/harness/approval-decisions.d.ts +1 -1
- package/dist/harness/approval-decisions.js +1 -1
- package/dist/harness/capabilities.d.ts +21 -11
- package/dist/harness/capabilities.js +2 -2
- package/dist/harness/capture.d.ts +4 -4
- package/dist/harness/capture.js +4 -4
- package/dist/harness/persist-chokepoint.d.ts +3 -3
- package/dist/harness/persist-chokepoint.js +3 -3
- package/dist/harness/registry.d.ts +2 -2
- package/dist/harness/registry.js +2 -2
- package/dist/harness/run-turn.d.ts +6 -4
- package/dist/harness/run-turn.js +31 -9
- package/dist/harness/run-turn.js.map +1 -1
- package/dist/harness/stop-controller.d.ts +1 -1
- package/dist/harness/stop-controller.js +1 -1
- package/dist/harness/terminal-table.d.ts +7 -7
- package/dist/harness/terminal-table.js +7 -7
- package/dist/harness/transcript/builder.d.ts +182 -0
- package/dist/harness/transcript/builder.js +693 -0
- package/dist/harness/transcript/builder.js.map +1 -0
- package/dist/harness/transcript/events.d.ts +218 -0
- package/dist/harness/transcript/events.js +50 -0
- package/dist/harness/transcript/events.js.map +1 -0
- package/dist/harness/transcript/state.d.ts +110 -0
- package/dist/harness/transcript/state.js +148 -0
- package/dist/harness/transcript/state.js.map +1 -0
- package/dist/harness/turn-context.d.ts +54 -38
- package/dist/harness/turn-context.js +42 -43
- package/dist/harness/turn-context.js.map +1 -1
- package/dist/harness/types.d.ts +63 -22
- package/dist/harness/types.js +12 -11
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/usage-accumulator.d.ts +2 -2
- package/dist/harness/usage-accumulator.js +2 -2
- package/dist/harness-adapters.d.ts +5 -4
- package/dist/harness-adapters.js +5 -4
- package/dist/harness-adapters.js.map +1 -1
- package/dist/middleware/approval-gate.d.ts +6 -0
- package/dist/middleware/approval-gate.js +7 -57
- package/dist/middleware/approval-gate.js.map +1 -1
- package/dist/middleware/cost-advisory.d.ts +3 -3
- package/dist/middleware/cost-advisory.js +3 -3
- package/dist/middleware/index.d.ts +1 -1
- package/dist/middleware/index.js +1 -1
- package/dist/runner-manager.js +1 -1
- package/dist/runner-manager.js.map +1 -1
- package/dist/shared/approval-policy.d.ts +53 -0
- package/dist/shared/approval-policy.js +76 -0
- package/dist/shared/approval-policy.js.map +1 -1
- package/dist/shared/args-preview.d.ts +45 -22
- package/dist/shared/args-preview.js +51 -41
- package/dist/shared/args-preview.js.map +1 -1
- package/dist/shared/attachment-resolver.d.ts +4 -4
- package/dist/shared/attachment-resolver.js +4 -4
- package/dist/shared/attachment-vision.d.ts +2 -1
- package/dist/shared/attachment-vision.js.map +1 -1
- package/dist/shared/attachment-zip.d.ts +2 -2
- package/dist/shared/attachment-zip.js +2 -2
- package/dist/shared/cost-guard.d.ts +2 -2
- package/dist/shared/cost-guard.js +2 -2
- package/dist/shared/exact-apply.d.ts +1 -1
- package/dist/shared/exact-apply.js +1 -1
- package/dist/shared/execution-context.d.ts +2 -2
- package/dist/shared/execution-context.js +2 -2
- package/dist/shared/extract-structured-output.d.ts +2 -2
- package/dist/shared/extract-structured-output.js +2 -2
- package/dist/shared/filereview/cas-touched.d.ts +2 -2
- package/dist/shared/filereview/cas-touched.js +2 -2
- package/dist/shared/heartbeat.d.ts +1 -1
- package/dist/shared/heartbeat.js +1 -1
- package/dist/shared/llm-backend.d.ts +0 -4
- package/dist/shared/llm-backend.js +0 -4
- package/dist/shared/llm-backend.js.map +1 -1
- package/dist/shared/model-error.d.ts +1 -2
- package/dist/shared/model-error.js +1 -2
- package/dist/shared/model-error.js.map +1 -1
- package/dist/shared/persist-decision.d.ts +18 -24
- package/dist/shared/persist-decision.js +19 -11
- package/dist/shared/persist-decision.js.map +1 -1
- package/dist/shared/prompt-sections.d.ts +4 -4
- package/dist/shared/prompt-sections.js +4 -4
- package/dist/shared/skill-resolver.d.ts +3 -3
- package/dist/shared/skill-resolver.js +3 -3
- package/dist/shared/status-offload.d.ts +1 -1
- package/dist/shared/status-offload.js +2 -2
- package/dist/shared/status-offload.js.map +1 -1
- package/dist/shared/streaming-scheduler.d.ts +2 -7
- package/dist/shared/streaming-scheduler.js +6 -14
- package/dist/shared/streaming-scheduler.js.map +1 -1
- package/dist/shared/subagent-rows.d.ts +2 -2
- package/dist/shared/subagent-rows.js +2 -2
- package/dist/shared/todos.d.ts +3 -3
- package/dist/shared/todos.js +3 -3
- package/dist/shared/tool-row.d.ts +19 -1
- package/dist/shared/tool-row.js +36 -2
- package/dist/shared/tool-row.js.map +1 -1
- package/dist/shared/worker-shutdown.d.ts +1 -1
- package/dist/shared/worker-shutdown.js +1 -1
- package/dist/shared/workspace/session-provision.d.ts +1 -1
- package/dist/shared/workspace/session-provision.js +1 -1
- package/dist/shared/workspace/sources/empty.d.ts +1 -1
- package/dist/shared/workspace/sources/empty.js +1 -2
- package/dist/shared/workspace/sources/empty.js.map +1 -1
- package/dist/shared/workspace/sources/git.js +4 -4
- package/dist/shared/workspace/sources/git.js.map +1 -1
- package/dist/shared/workspace/sources/local-path.js +6 -6
- package/dist/shared/workspace/sources/local-path.js.map +1 -1
- package/dist/shared/workspace/stigmer-link.d.ts +1 -1
- package/dist/shared/workspace/stigmer-link.js +1 -1
- package/dist/shared/workspace/types.d.ts +2 -5
- package/dist/shared/workspace/types.js +0 -6
- package/dist/shared/workspace/types.js.map +1 -1
- package/dist/shared/workspace/writeback-coordinator.d.ts +17 -4
- package/dist/shared/workspace/writeback-coordinator.js +7 -9
- package/dist/shared/workspace/writeback-coordinator.js.map +1 -1
- package/package.json +5 -5
- package/src/__test-utils__/__tests__/execution-record-barrier.test.ts +70 -0
- package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +35 -1
- package/src/__test-utils__/approval-contract/contract.ts +1 -1
- package/src/__test-utils__/approval-contract/types.ts +1 -1
- package/src/__test-utils__/harness-boot-order-child.ts +1 -1
- package/src/__test-utils__/harness-contract/contract.ts +8 -8
- package/src/__test-utils__/harness-contract/recording-sink.ts +11 -1
- package/src/__test-utils__/harness-contract/runtime-contract.ts +52 -16
- package/src/__test-utils__/harness-contract/scripted-adapter.ts +47 -43
- package/src/__test-utils__/hermetic-activity.ts +113 -9
- package/src/__test-utils__/model-registry-fixture.ts +31 -7
- package/src/__test-utils__/module-specifiers.ts +32 -3
- package/src/__tests__/harness-boot-order.test.ts +1 -1
- package/src/__tests__/harness-contract.test.ts +1 -1
- package/src/__tests__/runner-manager.test.ts +1 -1
- package/src/activities/execute-cursor/__test-utils__/__tests__/scripted-double.test.ts +32 -8
- package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +12 -10
- package/src/activities/execute-cursor/__test-utils__/fold.ts +116 -0
- package/src/activities/execute-cursor/__test-utils__/gateway-substrate.ts +1 -1
- package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +72 -19
- package/src/activities/execute-cursor/__test-utils__/scripted-agent.ts +35 -29
- package/src/activities/execute-cursor/__test-utils__/scripted-sdk.ts +94 -38
- package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/approval-state.test.ts +14 -21
- package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +3 -3
- package/src/activities/execute-cursor/__tests__/coarse-fingerprint.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/cursor-baseurl-routing.test.ts +10 -8
- package/src/activities/execute-cursor/__tests__/cursor-event-recorder.test.ts +142 -0
- package/src/activities/execute-cursor/__tests__/cursor-fetch-interceptor-bypass.test.ts +24 -12
- package/src/activities/execute-cursor/__tests__/cursor-generate-image-live.test.ts +7 -2
- package/src/activities/execute-cursor/__tests__/cursor-hook-protocol-live.test.ts +163 -0
- package/src/activities/execute-cursor/__tests__/cursor-sdk-auth-smoke.test.ts +23 -20
- package/src/activities/execute-cursor/__tests__/cursor-transcript-live.test.ts +298 -0
- package/src/activities/execute-cursor/__tests__/deny-gate-exact-apply.test.ts +4 -2
- package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/deny-and-retry.test.ts +5 -2
- package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +5 -2
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/mcp-tool-call.status.json +71 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-task-note.status.json +73 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.error-delta.status.json +78 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.output-first.status.json +72 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.status.json +72 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sub-agent-delegation.status.json +109 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/thinking-turn.status.json +78 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/todo-write.status.json +119 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-error.status.json +68 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-only-step.status.json +67 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattributed-hook-block.status.json +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +10 -7
- package/src/activities/execute-cursor/__tests__/hermetic/mcp-tool-call.test.ts +146 -0
- package/src/activities/execute-cursor/__tests__/hermetic/pause-vs-shutdown.test.ts +8 -5
- package/src/activities/execute-cursor/__tests__/hermetic/plain-turn.test.ts +6 -2
- package/src/activities/execute-cursor/__tests__/hermetic/recovery-fresh-agent.test.ts +4 -1
- package/src/activities/execute-cursor/__tests__/hermetic/run-wait-arms.test.ts +6 -2
- package/src/activities/execute-cursor/__tests__/hermetic/sdk-task-note.test.ts +122 -0
- package/src/activities/execute-cursor/__tests__/hermetic/shell-output-delta.test.ts +276 -0
- package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +12 -9
- package/src/activities/execute-cursor/__tests__/hermetic/sub-agent-delegation.test.ts +196 -0
- package/src/activities/execute-cursor/__tests__/hermetic/thinking-turn.test.ts +145 -0
- package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +4 -1
- package/src/activities/execute-cursor/__tests__/hermetic/todo-write.test.ts +165 -0
- package/src/activities/execute-cursor/__tests__/hermetic/tool-call.test.ts +7 -4
- package/src/activities/execute-cursor/__tests__/hermetic/tool-error.test.ts +138 -0
- package/src/activities/execute-cursor/__tests__/hermetic/tool-only-step.test.ts +130 -0
- package/src/activities/execute-cursor/__tests__/hermetic/unattributed-hook-block.test.ts +17 -2
- package/src/activities/execute-cursor/__tests__/hermetic/workspace-lock-timeout.test.ts +5 -2
- package/src/activities/execute-cursor/__tests__/hitl-ledger.test.ts +43 -60
- package/src/activities/execute-cursor/__tests__/hitl-resume-history.test.ts +23 -28
- package/src/activities/execute-cursor/__tests__/hook-script.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/http2-interceptor.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/prompt-goldens.test.ts +5 -5
- package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +11 -13
- package/src/activities/execute-cursor/__tests__/sequential-gate-resume.test.ts +8 -11
- package/src/activities/execute-cursor/__tests__/session-lifecycle.test.ts +86 -58
- package/src/activities/execute-cursor/__tests__/session-store.test.ts +220 -0
- package/src/activities/execute-cursor/__tests__/tool-result-image.test.ts +8 -22
- package/src/activities/execute-cursor/__tests__/translator.test.ts +594 -0
- package/src/activities/execute-cursor/__tests__/turn-boundary.test.ts +8 -5
- package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +87 -63
- package/src/activities/execute-cursor/adapter.ts +13 -9
- package/src/activities/execute-cursor/approval-policy.ts +12 -24
- package/src/activities/execute-cursor/approval-state.ts +66 -1
- package/src/activities/execute-cursor/boundary-rows.ts +1132 -0
- package/src/activities/execute-cursor/cursor-capabilities.ts +1 -1
- package/src/activities/execute-cursor/cursor-event-recorder.ts +57 -28
- package/src/activities/execute-cursor/fetch-interceptor.ts +1 -1
- package/src/activities/execute-cursor/http2-interceptor.ts +1 -1
- package/src/activities/execute-cursor/prompt-builder.ts +6 -6
- package/src/activities/execute-cursor/sdk-warmup.ts +15 -6
- package/src/activities/execute-cursor/service-tier.ts +1 -2
- package/src/activities/execute-cursor/session-lifecycle.ts +63 -109
- package/src/activities/execute-cursor/session-store.ts +187 -0
- package/src/activities/execute-cursor/sub-agent-steps.ts +188 -0
- package/src/activities/execute-cursor/tool-result.ts +128 -0
- package/src/activities/execute-cursor/translator.ts +541 -0
- package/src/activities/execute-cursor/turn-boundary.ts +21 -14
- package/src/activities/execute-cursor/turn-settle.ts +46 -34
- package/src/activities/execute-cursor/turn-setup.ts +5 -5
- package/src/activities/execute-cursor/turn-stream.ts +49 -46
- package/src/activities/execute-cursor/turn.ts +5 -5
- package/src/activities/execute-cursor/usage-pricing.ts +2 -2
- package/src/activities/execute-deep-agent/__test-utils__/contract-subject.ts +2 -2
- package/src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts +23 -11
- package/src/activities/execute-deep-agent/__test-utils__/hitl-script.ts +1 -1
- package/src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts +2 -3
- package/src/activities/execute-deep-agent/__test-utils__/scripted-model.ts +25 -4
- package/src/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.ts +25 -11
- package/src/activities/execute-deep-agent/__tests__/adapter-graph-is-sdk-free.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/adapter-is-temporal-free.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/approval-file-change.test.ts +6 -17
- package/src/activities/execute-deep-agent/__tests__/hermetic/file-review-capture.test.ts +25 -8
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.status.json +2 -7
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.status.json +4 -14
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.status.json +4 -7
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.status.json +2 -9
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.status.json +2 -9
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.status.json +109 -76
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.status.json +2 -10
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.status.json +2 -10
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.status.json +3 -6
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/write-todos.status.json +92 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/harness-contract.test.ts +3 -3
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-approve-all-lease.test.ts +9 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-round-trips.test.ts +3 -3
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-sequential-gates.test.ts +3 -3
- package/src/activities/execute-deep-agent/__tests__/hermetic/inline-artifact-across-gate.test.ts +7 -6
- package/src/activities/execute-deep-agent/__tests__/hermetic/pause-vs-shutdown.test.ts +10 -11
- package/src/activities/execute-deep-agent/__tests__/hermetic/plain-turn.test.ts +4 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/platform-stop.test.ts +9 -8
- package/src/activities/execute-deep-agent/__tests__/hermetic/recursion-limit.test.ts +21 -13
- package/src/activities/execute-deep-agent/__tests__/hermetic/resolution-error.test.ts +2 -2
- package/src/activities/execute-deep-agent/__tests__/hermetic/structured-output.test.ts +7 -7
- package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-delegation.test.ts +28 -12
- package/src/activities/execute-deep-agent/__tests__/hermetic/tool-call.test.ts +21 -21
- package/src/activities/execute-deep-agent/__tests__/hermetic/workspace-lock-timeout.test.ts +5 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/write-todos.test.ts +160 -0
- package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +35 -30
- package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +3 -4
- package/src/activities/execute-deep-agent/__tests__/prompt-goldens.test.ts +12 -10
- package/src/activities/execute-deep-agent/__tests__/scripted-model.test.ts +13 -3
- package/src/activities/execute-deep-agent/__tests__/streaming-side-effects.test.ts +26 -18
- package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/{subagent-tracker.test.ts → translator-subagents.test.ts} +76 -57
- package/src/activities/execute-deep-agent/__tests__/{v3-status-builder.test.ts → translator-through-builder.test.ts} +213 -299
- package/src/activities/execute-deep-agent/__tests__/translator.test.ts +505 -0
- package/src/activities/execute-deep-agent/__tests__/turn-stream.test.ts +11 -29
- package/src/activities/execute-deep-agent/adapter.ts +1 -1
- package/src/activities/execute-deep-agent/approval-file-change.ts +20 -22
- package/src/activities/execute-deep-agent/deep-agent-capabilities.ts +2 -2
- package/src/activities/execute-deep-agent/hitl.ts +2 -2
- package/src/activities/execute-deep-agent/inline-publisher.ts +16 -5
- package/src/activities/execute-deep-agent/prompt-builder.ts +6 -7
- package/src/activities/execute-deep-agent/streaming-side-effects.ts +22 -31
- package/src/activities/execute-deep-agent/subagent-transformer.ts +3 -3
- package/src/activities/execute-deep-agent/translator.ts +463 -0
- package/src/activities/execute-deep-agent/turn-settle.ts +35 -43
- package/src/activities/execute-deep-agent/turn-setup.ts +8 -8
- package/src/activities/execute-deep-agent/turn-stream.ts +53 -51
- package/src/activities/execute-deep-agent/turn.ts +3 -3
- package/src/config.ts +2 -2
- package/src/harness/README.md +335 -0
- package/src/harness/__tests__/approval-decisions.test.ts +2 -2
- package/src/harness/__tests__/capture.test.ts +3 -3
- package/src/harness/__tests__/import-direction.test.ts +3 -2
- package/src/harness/__tests__/mount-skills.test.ts +4 -1
- package/src/harness/__tests__/readme-index.test.ts +339 -0
- package/src/harness/__tests__/run-turn.test.ts +131 -6
- package/src/harness/__tests__/transcript-is-engine-free.test.ts +83 -0
- package/src/harness/__tests__/transcript-writers.test.ts +191 -0
- package/src/harness/__tests__/turn-attachments-vision.test.ts +5 -2
- package/src/harness/__tests__/turn-context.test.ts +5 -5
- package/src/harness/approval-decisions.ts +1 -1
- package/src/harness/capabilities.ts +21 -11
- package/src/harness/capture.ts +4 -4
- package/src/harness/persist-chokepoint.ts +3 -3
- package/src/harness/registry.ts +2 -2
- package/src/harness/run-turn.ts +33 -9
- package/src/harness/stop-controller.ts +1 -1
- package/src/harness/terminal-table.ts +7 -7
- package/src/harness/transcript/__tests__/builder.test.ts +975 -0
- package/src/harness/transcript/__tests__/state.test.ts +143 -0
- package/src/harness/transcript/builder.ts +755 -0
- package/src/harness/transcript/events.ts +262 -0
- package/src/harness/transcript/state.ts +167 -0
- package/src/harness/turn-context.ts +61 -46
- package/src/harness/types.ts +64 -22
- package/src/harness/usage-accumulator.ts +2 -2
- package/src/harness-adapters.ts +5 -4
- package/src/middleware/__tests__/cost-advisory.test.ts +2 -2
- package/src/middleware/approval-gate.ts +7 -74
- package/src/middleware/cost-advisory.ts +3 -3
- package/src/middleware/index.ts +1 -1
- package/src/runner-manager.ts +1 -1
- package/src/shared/__tests__/approval-policy.test.ts +45 -0
- package/src/shared/__tests__/args-preview.test.ts +40 -20
- package/src/shared/__tests__/attachment-naming.test.ts +1 -1
- package/src/shared/__tests__/attachment-resolver.test.ts +5 -5
- package/src/shared/__tests__/attachment-zip.test.ts +1 -1
- package/src/shared/__tests__/blueprint-resolver.test.ts +1 -1
- package/src/shared/__tests__/cost-guard.test.ts +1 -1
- package/src/shared/__tests__/exact-apply.test.ts +2 -1
- package/src/shared/__tests__/persist-decision.test.ts +19 -33
- package/src/shared/__tests__/prompt-sections.test.ts +1 -1
- package/src/shared/__tests__/stamp-flowed-rows.test.ts +1 -1
- package/src/shared/__tests__/status-offload.test.ts +1 -1
- package/src/shared/__tests__/streaming-scheduler.test.ts +8 -9
- package/src/shared/__tests__/todos.test.ts +1 -1
- package/src/shared/__tests__/tool-row.test.ts +1 -1
- package/src/shared/approval-policy.ts +95 -0
- package/src/shared/args-preview.ts +51 -42
- package/src/shared/attachment-resolver.ts +4 -4
- package/src/shared/attachment-vision.ts +2 -1
- package/src/shared/attachment-zip.ts +2 -2
- package/src/shared/cost-guard.ts +2 -2
- package/src/shared/exact-apply.ts +1 -1
- package/src/shared/execution-context.ts +2 -2
- package/src/shared/extract-structured-output.ts +2 -2
- package/src/shared/filereview/__tests__/capture.test.ts +9 -5
- package/src/shared/filereview/__tests__/git-substrate.test.ts +4 -1
- package/src/shared/filereview/__tests__/proxy-reconcile.test.ts +3 -3
- package/src/shared/filereview/cas-touched.ts +2 -2
- package/src/shared/heartbeat.ts +1 -1
- package/src/shared/llm-backend.ts +0 -4
- package/src/shared/model-error.ts +1 -2
- package/src/shared/persist-decision.ts +19 -28
- package/src/shared/prompt-sections.ts +4 -4
- package/src/shared/skill-resolver.ts +3 -3
- package/src/shared/status-offload.ts +2 -2
- package/src/shared/streaming-scheduler.ts +8 -13
- package/src/shared/subagent-rows.ts +2 -2
- package/src/shared/todos.ts +3 -3
- package/src/shared/tool-row.ts +38 -2
- package/src/shared/worker-shutdown.ts +1 -1
- package/src/shared/workspace/__tests__/git-source.test.ts +3 -3
- package/src/shared/workspace/__tests__/provisioner.test.ts +5 -5
- package/src/shared/workspace/__tests__/session-provision.test.ts +2 -2
- package/src/shared/workspace/__tests__/writeback-coordinator.integration.test.ts +8 -9
- package/src/shared/workspace/__tests__/writeback-coordinator.test.ts +25 -25
- package/src/shared/workspace/provisioner.ts +1 -1
- package/src/shared/workspace/session-provision.ts +1 -1
- package/src/shared/workspace/sources/empty.ts +2 -2
- package/src/shared/workspace/sources/git.ts +3 -4
- package/src/shared/workspace/sources/local-path.ts +5 -6
- package/src/shared/workspace/stigmer-link.ts +1 -1
- package/src/shared/workspace/types.ts +2 -5
- package/src/shared/workspace/writeback-coordinator.ts +23 -12
- package/dist/activities/execute-cursor/delta-enricher.d.ts +0 -87
- package/dist/activities/execute-cursor/delta-enricher.js +0 -265
- package/dist/activities/execute-cursor/delta-enricher.js.map +0 -1
- package/dist/activities/execute-cursor/message-translator.js +0 -2040
- package/dist/activities/execute-cursor/message-translator.js.map +0 -1
- package/dist/activities/execute-cursor/todo-tracker.d.ts +0 -40
- package/dist/activities/execute-cursor/todo-tracker.js +0 -80
- package/dist/activities/execute-cursor/todo-tracker.js.map +0 -1
- package/dist/activities/execute-deep-agent/execution-state.d.ts +0 -54
- package/dist/activities/execute-deep-agent/execution-state.js +0 -68
- package/dist/activities/execute-deep-agent/execution-state.js.map +0 -1
- package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +0 -65
- package/dist/activities/execute-deep-agent/status-builder-shared.js +0 -90
- package/dist/activities/execute-deep-agent/status-builder-shared.js.map +0 -1
- package/dist/activities/execute-deep-agent/subagent-tracker.d.ts +0 -113
- package/dist/activities/execute-deep-agent/subagent-tracker.js +0 -400
- package/dist/activities/execute-deep-agent/subagent-tracker.js.map +0 -1
- package/dist/activities/execute-deep-agent/v3-events.d.ts +0 -102
- package/dist/activities/execute-deep-agent/v3-events.js +0 -35
- package/dist/activities/execute-deep-agent/v3-events.js.map +0 -1
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.d.ts +0 -15
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js +0 -235
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js.map +0 -1
- package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +0 -111
- package/dist/activities/execute-deep-agent/v3-status-builder.js +0 -457
- package/dist/activities/execute-deep-agent/v3-status-builder.js.map +0 -1
- package/dist/shared/execution-status-writer.d.ts +0 -31
- package/dist/shared/execution-status-writer.js +0 -43
- package/dist/shared/execution-status-writer.js.map +0 -1
- package/src/activities/execute-cursor/__tests__/delta-enricher.test.ts +0 -310
- package/src/activities/execute-cursor/__tests__/message-translator.test.ts +0 -1033
- package/src/activities/execute-cursor/__tests__/todo-tracker.test.ts +0 -498
- package/src/activities/execute-cursor/delta-enricher.ts +0 -307
- package/src/activities/execute-cursor/message-translator.ts +0 -2319
- package/src/activities/execute-cursor/todo-tracker.ts +0 -91
- package/src/activities/execute-deep-agent/__tests__/execution-state-extended.test.ts +0 -148
- package/src/activities/execute-deep-agent/__tests__/execution-state.test.ts +0 -154
- package/src/activities/execute-deep-agent/__tests__/status-builder-shared.test.ts +0 -47
- package/src/activities/execute-deep-agent/__tests__/v3-protocol-normalizer.test.ts +0 -324
- package/src/activities/execute-deep-agent/execution-state.ts +0 -78
- package/src/activities/execute-deep-agent/status-builder-shared.ts +0 -142
- package/src/activities/execute-deep-agent/subagent-tracker.ts +0 -479
- package/src/activities/execute-deep-agent/v3-events.ts +0 -153
- package/src/activities/execute-deep-agent/v3-protocol-normalizer.ts +0 -264
- package/src/activities/execute-deep-agent/v3-status-builder.ts +0 -565
- package/src/shared/execution-status-writer.ts +0 -56
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The `@cursor/sdk` module a hermetic `ExecuteCursor` run imports — every
|
|
3
|
-
* runtime surface the activity path touches, backed by scripted agents
|
|
3
|
+
* runtime surface the activity path touches, backed by scripted agents — and
|
|
4
|
+
* the `@cursor/sdk/sqlite` module beside it, backed by a store that holds
|
|
5
|
+
* nothing.
|
|
4
6
|
*
|
|
5
|
-
* The activity reaches the SDK at
|
|
7
|
+
* The activity reaches the SDK at four runtime sites and nowhere else:
|
|
6
8
|
*
|
|
7
|
-
* - `session-lifecycle.ts`: `Agent.create(options)`, `Agent.resume(id, options)
|
|
8
|
-
*
|
|
9
|
+
* - `session-lifecycle.ts`: `Agent.create(options)`, `Agent.resume(id, options)`
|
|
10
|
+
* — the agent handle.
|
|
11
|
+
* - `session-store.ts`: `SqliteLocalAgentStore.open({ workspaceRef, stateRoot })`
|
|
12
|
+
* from `@cursor/sdk/sqlite` — the session's store the handle is created and
|
|
13
|
+
* resumed over (`local.store`).
|
|
9
14
|
* - `service-tier.ts`: `Cursor.models.list({ apiKey })` — the catalog the
|
|
10
15
|
* variant params (`fast`, `thinking`) are pinned from.
|
|
11
16
|
* - `index.ts` outer catch: `import("@cursor/sdk")` for `CursorSdkError`, the
|
|
@@ -13,34 +18,41 @@
|
|
|
13
18
|
*
|
|
14
19
|
* Neither the SDK nor the client is injectable into the activity (the real
|
|
15
20
|
* seam arrives with the harness contract; parent Q1/Q2), so — exactly as the
|
|
16
|
-
* native activity tests already do for their boundary modules — the
|
|
17
|
-
* substituted with `vi.mock`. Three existing tests each mock ONE of these
|
|
21
|
+
* native activity tests already do for their boundary modules — the modules
|
|
22
|
+
* are substituted with `vi.mock`. Three existing tests each mock ONE of these
|
|
18
23
|
* surfaces (`session-lifecycle.test.ts`, `service-tier.test.ts`,
|
|
19
|
-
* `sdk-warmup.test.ts`); a whole-activity run needs all
|
|
20
|
-
* what this module is.
|
|
24
|
+
* `sdk-warmup.test.ts`); a whole-activity run needs all of them at once, which
|
|
25
|
+
* is what this module is.
|
|
21
26
|
*
|
|
22
|
-
* `vi.mock` is hoisted and must appear in the test file
|
|
23
|
-
*
|
|
24
|
-
*
|
|
27
|
+
* `vi.mock` is hoisted and must appear in the test file, once per module id
|
|
28
|
+
* (a subpath is its own module id, so `@cursor/sdk/sqlite` needs its own
|
|
29
|
+
* `vi.mock`); the factories `await import()` this module and return
|
|
30
|
+
* {@link scriptedCursorSdkModule} and {@link scriptedCursorSqliteModule}. The
|
|
31
|
+
* modules' statics read the {@link ScriptedCursorSdk} bound for the current
|
|
25
32
|
* scenario ({@link bindScriptedSdk}), so one test file can run several
|
|
26
|
-
* scenarios with different agents against the same mocked
|
|
33
|
+
* scenarios with different agents against the same mocked modules.
|
|
27
34
|
*
|
|
28
35
|
* Resolution rules a scenario declares, mirroring what the real SDK does:
|
|
29
36
|
* - `Agent.create` hands out the agent declared for the session it is asked
|
|
30
|
-
* for (`
|
|
31
|
-
* the harness contract kit runs several sessions concurrently on
|
|
32
|
-
* adapter, and the order their creates arrive in is real I/O timing),
|
|
33
|
-
* the NEXT unclaimed agent in `agents` (turn 1 of a fresh session; the
|
|
34
|
-
* agent of a poisoned-handle recovery) — unless the scenario declared
|
|
35
|
-
* `createFailure`, which the FIRST create throws instead (the SDK refusing
|
|
37
|
+
* for (`agentForWorkspaceRef`, when the scenario resolves agents per
|
|
38
|
+
* session — the harness contract kit runs several sessions concurrently on
|
|
39
|
+
* one adapter, and the order their creates arrive in is real I/O timing),
|
|
40
|
+
* else the NEXT unclaimed agent in `agents` (turn 1 of a fresh session; the
|
|
41
|
+
* fresh agent of a poisoned-handle recovery) — unless the scenario declared
|
|
42
|
+
* a `createFailure`, which the FIRST create throws instead (the SDK refusing
|
|
36
43
|
* to mint an agent: a 401 on the key, a validation error).
|
|
37
44
|
* - `Agent.resume(id)` hands back the agent with that id if the scenario
|
|
38
45
|
* declared it (in `agents` or `resumableAgents`, or handed out for a
|
|
39
46
|
* session), else throws — `resolveAgent` then falls back to `create`, which
|
|
40
47
|
* is the production shape of a lost handle.
|
|
41
48
|
* - `Cursor.models.list` answers the scenario's catalog.
|
|
49
|
+
* - `SqliteLocalAgentStore.open` hands out a {@link ScriptedLocalAgentStore}
|
|
50
|
+
* carrying the ref and root it was asked for, and records the open; its
|
|
51
|
+
* `dispose()` is recorded too, so a scenario can assert the adapter's
|
|
52
|
+
* session-store lifetime (`releaseSession`, `shutdown`).
|
|
42
53
|
*/
|
|
43
54
|
import type { AgentOptions, ModelListItem, SDKAgent } from "@cursor/sdk";
|
|
55
|
+
import type { SqliteLocalAgentStoreOptions } from "@cursor/sdk/sqlite";
|
|
44
56
|
import type { ScriptedCursorAgent } from "./scripted-agent.js";
|
|
45
57
|
export interface ScriptedSdkOptions {
|
|
46
58
|
/** Agents handed out by `Agent.create`, in order. Also resumable by id. */
|
|
@@ -48,12 +60,12 @@ export interface ScriptedSdkOptions {
|
|
|
48
60
|
/**
|
|
49
61
|
* The agent `Agent.create` hands out for the session the create names,
|
|
50
62
|
* consulted before the ordered list. The SDK's create options carry the
|
|
51
|
-
* session as `
|
|
52
|
-
* `
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* every create, so a scenario may mint the session's
|
|
56
|
-
* learns of the session.
|
|
63
|
+
* session as the store's `workspaceRef` (`local.store`, opened by
|
|
64
|
+
* `session-store.ts`: `stigmer-session:<sessionId>`), so the resolver is
|
|
65
|
+
* keyed by that ref — a scenario computes the ref the same way the adapter
|
|
66
|
+
* does (`resolveSessionStoreLocation`). `undefined` falls through to the
|
|
67
|
+
* list. Consulted live on every create, so a scenario may mint the session's
|
|
68
|
+
* agent only when it learns of the session.
|
|
57
69
|
*/
|
|
58
70
|
readonly agentForWorkspaceRef?: (workspaceRef: string) => ScriptedCursorAgent | undefined;
|
|
59
71
|
/**
|
|
@@ -77,17 +89,32 @@ export interface RecordedResolution {
|
|
|
77
89
|
readonly agentId: string | undefined;
|
|
78
90
|
readonly options: Partial<AgentOptions> | undefined;
|
|
79
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* The `@cursor/sdk/sqlite` store the adapter opens per session, holding
|
|
94
|
+
* nothing: the scripted agents carry their own state, so the store only has
|
|
95
|
+
* to be the thing `Agent.create` / `Agent.resume` are handed and the thing
|
|
96
|
+
* `releaseSession` / `shutdown` dispose. `open` and `dispose` are recorded on
|
|
97
|
+
* the bound {@link ScriptedCursorSdk} for lifetime assertions.
|
|
98
|
+
*/
|
|
99
|
+
export declare class ScriptedLocalAgentStore {
|
|
100
|
+
readonly workspaceRef: string;
|
|
101
|
+
readonly stateRoot: string;
|
|
102
|
+
disposeCalls: number;
|
|
103
|
+
constructor(workspaceRef: string, stateRoot: string);
|
|
104
|
+
static open(options: SqliteLocalAgentStoreOptions): Promise<ScriptedLocalAgentStore>;
|
|
105
|
+
dispose(): Promise<void>;
|
|
106
|
+
}
|
|
80
107
|
export declare class ScriptedCursorSdk {
|
|
81
108
|
private readonly options;
|
|
82
109
|
readonly resolutions: RecordedResolution[];
|
|
83
|
-
|
|
110
|
+
/** Every store `SqliteLocalAgentStore.open` handed out, in order. */
|
|
111
|
+
readonly stores: ScriptedLocalAgentStore[];
|
|
84
112
|
private nextCreate;
|
|
85
113
|
private createFailurePending;
|
|
86
114
|
private readonly byId;
|
|
87
115
|
constructor(options: ScriptedSdkOptions);
|
|
88
116
|
create(options: AgentOptions): SDKAgent;
|
|
89
117
|
resume(agentId: string, options: Partial<AgentOptions> | undefined): SDKAgent;
|
|
90
|
-
archive(agentId: string): void;
|
|
91
118
|
listModels(): readonly ModelListItem[];
|
|
92
119
|
}
|
|
93
120
|
/** The construction options of the SDK's `CursorSdkError` (`errors.d.ts`), minus `cause`. */
|
|
@@ -136,3 +163,20 @@ export declare function bindScriptedSdk(sdk: ScriptedCursorSdk): void;
|
|
|
136
163
|
* here rather than silently stubbed.
|
|
137
164
|
*/
|
|
138
165
|
export declare function scriptedCursorSdkModule(): Record<string, unknown>;
|
|
166
|
+
/**
|
|
167
|
+
* The factory a test passes to `vi.mock("@cursor/sdk/sqlite", ...)`, beside
|
|
168
|
+
* the one above:
|
|
169
|
+
*
|
|
170
|
+
* ```ts
|
|
171
|
+
* vi.mock("@cursor/sdk/sqlite", async () =>
|
|
172
|
+
* (await import("../../__test-utils__/scripted-sdk.js")).scriptedCursorSqliteModule(),
|
|
173
|
+
* );
|
|
174
|
+
* ```
|
|
175
|
+
*
|
|
176
|
+
* The one export the runner reads from that entry (`session-store.ts`). The
|
|
177
|
+
* class is exported under the SDK's name so `session-store.ts`'s dynamic
|
|
178
|
+
* import destructures it unchanged; its type is the SDK's, which is why
|
|
179
|
+
* {@link ScriptedLocalAgentStore} carries `workspaceRef`, `stateRoot` and
|
|
180
|
+
* `dispose()` — the members the runner touches — and nothing else.
|
|
181
|
+
*/
|
|
182
|
+
export declare function scriptedCursorSqliteModule(): Record<string, unknown>;
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The `@cursor/sdk` module a hermetic `ExecuteCursor` run imports — every
|
|
3
|
-
* runtime surface the activity path touches, backed by scripted agents
|
|
3
|
+
* runtime surface the activity path touches, backed by scripted agents — and
|
|
4
|
+
* the `@cursor/sdk/sqlite` module beside it, backed by a store that holds
|
|
5
|
+
* nothing.
|
|
4
6
|
*
|
|
5
|
-
* The activity reaches the SDK at
|
|
7
|
+
* The activity reaches the SDK at four runtime sites and nowhere else:
|
|
6
8
|
*
|
|
7
|
-
* - `session-lifecycle.ts`: `Agent.create(options)`, `Agent.resume(id, options)
|
|
8
|
-
*
|
|
9
|
+
* - `session-lifecycle.ts`: `Agent.create(options)`, `Agent.resume(id, options)`
|
|
10
|
+
* — the agent handle.
|
|
11
|
+
* - `session-store.ts`: `SqliteLocalAgentStore.open({ workspaceRef, stateRoot })`
|
|
12
|
+
* from `@cursor/sdk/sqlite` — the session's store the handle is created and
|
|
13
|
+
* resumed over (`local.store`).
|
|
9
14
|
* - `service-tier.ts`: `Cursor.models.list({ apiKey })` — the catalog the
|
|
10
15
|
* variant params (`fast`, `thinking`) are pinned from.
|
|
11
16
|
* - `index.ts` outer catch: `import("@cursor/sdk")` for `CursorSdkError`, the
|
|
@@ -13,50 +18,78 @@
|
|
|
13
18
|
*
|
|
14
19
|
* Neither the SDK nor the client is injectable into the activity (the real
|
|
15
20
|
* seam arrives with the harness contract; parent Q1/Q2), so — exactly as the
|
|
16
|
-
* native activity tests already do for their boundary modules — the
|
|
17
|
-
* substituted with `vi.mock`. Three existing tests each mock ONE of these
|
|
21
|
+
* native activity tests already do for their boundary modules — the modules
|
|
22
|
+
* are substituted with `vi.mock`. Three existing tests each mock ONE of these
|
|
18
23
|
* surfaces (`session-lifecycle.test.ts`, `service-tier.test.ts`,
|
|
19
|
-
* `sdk-warmup.test.ts`); a whole-activity run needs all
|
|
20
|
-
* what this module is.
|
|
24
|
+
* `sdk-warmup.test.ts`); a whole-activity run needs all of them at once, which
|
|
25
|
+
* is what this module is.
|
|
21
26
|
*
|
|
22
|
-
* `vi.mock` is hoisted and must appear in the test file
|
|
23
|
-
*
|
|
24
|
-
*
|
|
27
|
+
* `vi.mock` is hoisted and must appear in the test file, once per module id
|
|
28
|
+
* (a subpath is its own module id, so `@cursor/sdk/sqlite` needs its own
|
|
29
|
+
* `vi.mock`); the factories `await import()` this module and return
|
|
30
|
+
* {@link scriptedCursorSdkModule} and {@link scriptedCursorSqliteModule}. The
|
|
31
|
+
* modules' statics read the {@link ScriptedCursorSdk} bound for the current
|
|
25
32
|
* scenario ({@link bindScriptedSdk}), so one test file can run several
|
|
26
|
-
* scenarios with different agents against the same mocked
|
|
33
|
+
* scenarios with different agents against the same mocked modules.
|
|
27
34
|
*
|
|
28
35
|
* Resolution rules a scenario declares, mirroring what the real SDK does:
|
|
29
36
|
* - `Agent.create` hands out the agent declared for the session it is asked
|
|
30
|
-
* for (`
|
|
31
|
-
* the harness contract kit runs several sessions concurrently on
|
|
32
|
-
* adapter, and the order their creates arrive in is real I/O timing),
|
|
33
|
-
* the NEXT unclaimed agent in `agents` (turn 1 of a fresh session; the
|
|
34
|
-
* agent of a poisoned-handle recovery) — unless the scenario declared
|
|
35
|
-
* `createFailure`, which the FIRST create throws instead (the SDK refusing
|
|
37
|
+
* for (`agentForWorkspaceRef`, when the scenario resolves agents per
|
|
38
|
+
* session — the harness contract kit runs several sessions concurrently on
|
|
39
|
+
* one adapter, and the order their creates arrive in is real I/O timing),
|
|
40
|
+
* else the NEXT unclaimed agent in `agents` (turn 1 of a fresh session; the
|
|
41
|
+
* fresh agent of a poisoned-handle recovery) — unless the scenario declared
|
|
42
|
+
* a `createFailure`, which the FIRST create throws instead (the SDK refusing
|
|
36
43
|
* to mint an agent: a 401 on the key, a validation error).
|
|
37
44
|
* - `Agent.resume(id)` hands back the agent with that id if the scenario
|
|
38
45
|
* declared it (in `agents` or `resumableAgents`, or handed out for a
|
|
39
46
|
* session), else throws — `resolveAgent` then falls back to `create`, which
|
|
40
47
|
* is the production shape of a lost handle.
|
|
41
48
|
* - `Cursor.models.list` answers the scenario's catalog.
|
|
49
|
+
* - `SqliteLocalAgentStore.open` hands out a {@link ScriptedLocalAgentStore}
|
|
50
|
+
* carrying the ref and root it was asked for, and records the open; its
|
|
51
|
+
* `dispose()` is recorded too, so a scenario can assert the adapter's
|
|
52
|
+
* session-store lifetime (`releaseSession`, `shutdown`).
|
|
42
53
|
*/
|
|
43
54
|
/**
|
|
44
|
-
* The
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
55
|
+
* The session a create names: the `workspaceRef` of the store it passes as
|
|
56
|
+
* `local.store`. In a hermetic run that store is the one this module's sqlite
|
|
57
|
+
* double opened; anything else (a test that mocks `@cursor/sdk` with its own
|
|
58
|
+
* stub and passes no store) names no session and falls through to the list.
|
|
48
59
|
*/
|
|
49
60
|
function workspaceRefOf(options) {
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
61
|
+
const store = options.local?.store;
|
|
62
|
+
return store instanceof ScriptedLocalAgentStore ? store.workspaceRef : undefined;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The `@cursor/sdk/sqlite` store the adapter opens per session, holding
|
|
66
|
+
* nothing: the scripted agents carry their own state, so the store only has
|
|
67
|
+
* to be the thing `Agent.create` / `Agent.resume` are handed and the thing
|
|
68
|
+
* `releaseSession` / `shutdown` dispose. `open` and `dispose` are recorded on
|
|
69
|
+
* the bound {@link ScriptedCursorSdk} for lifetime assertions.
|
|
70
|
+
*/
|
|
71
|
+
export class ScriptedLocalAgentStore {
|
|
72
|
+
workspaceRef;
|
|
73
|
+
stateRoot;
|
|
74
|
+
disposeCalls = 0;
|
|
75
|
+
constructor(workspaceRef, stateRoot) {
|
|
76
|
+
this.workspaceRef = workspaceRef;
|
|
77
|
+
this.stateRoot = stateRoot;
|
|
78
|
+
}
|
|
79
|
+
static async open(options) {
|
|
80
|
+
const store = new ScriptedLocalAgentStore(options.workspaceRef, options.stateRoot ?? "");
|
|
81
|
+
current().stores.push(store);
|
|
82
|
+
return store;
|
|
83
|
+
}
|
|
84
|
+
async dispose() {
|
|
85
|
+
this.disposeCalls++;
|
|
86
|
+
}
|
|
55
87
|
}
|
|
56
88
|
export class ScriptedCursorSdk {
|
|
57
89
|
options;
|
|
58
90
|
resolutions = [];
|
|
59
|
-
|
|
91
|
+
/** Every store `SqliteLocalAgentStore.open` handed out, in order. */
|
|
92
|
+
stores = [];
|
|
60
93
|
nextCreate = 0;
|
|
61
94
|
createFailurePending;
|
|
62
95
|
byId = new Map();
|
|
@@ -101,9 +134,6 @@ export class ScriptedCursorSdk {
|
|
|
101
134
|
agent.model = options.model;
|
|
102
135
|
return agent;
|
|
103
136
|
}
|
|
104
|
-
archive(agentId) {
|
|
105
|
-
this.archived.push(agentId);
|
|
106
|
-
}
|
|
107
137
|
listModels() {
|
|
108
138
|
return this.options.catalog;
|
|
109
139
|
}
|
|
@@ -178,7 +208,6 @@ export function scriptedCursorSdkModule() {
|
|
|
178
208
|
Agent: {
|
|
179
209
|
create: async (options) => current().create(options),
|
|
180
210
|
resume: async (agentId, options) => current().resume(agentId, options),
|
|
181
|
-
archive: async (agentId) => current().archive(agentId),
|
|
182
211
|
},
|
|
183
212
|
Cursor: {
|
|
184
213
|
models: {
|
|
@@ -188,4 +217,25 @@ export function scriptedCursorSdkModule() {
|
|
|
188
217
|
CursorSdkError: ScriptedCursorSdkError,
|
|
189
218
|
};
|
|
190
219
|
}
|
|
220
|
+
/**
|
|
221
|
+
* The factory a test passes to `vi.mock("@cursor/sdk/sqlite", ...)`, beside
|
|
222
|
+
* the one above:
|
|
223
|
+
*
|
|
224
|
+
* ```ts
|
|
225
|
+
* vi.mock("@cursor/sdk/sqlite", async () =>
|
|
226
|
+
* (await import("../../__test-utils__/scripted-sdk.js")).scriptedCursorSqliteModule(),
|
|
227
|
+
* );
|
|
228
|
+
* ```
|
|
229
|
+
*
|
|
230
|
+
* The one export the runner reads from that entry (`session-store.ts`). The
|
|
231
|
+
* class is exported under the SDK's name so `session-store.ts`'s dynamic
|
|
232
|
+
* import destructures it unchanged; its type is the SDK's, which is why
|
|
233
|
+
* {@link ScriptedLocalAgentStore} carries `workspaceRef`, `stateRoot` and
|
|
234
|
+
* `dispose()` — the members the runner touches — and nothing else.
|
|
235
|
+
*/
|
|
236
|
+
export function scriptedCursorSqliteModule() {
|
|
237
|
+
return {
|
|
238
|
+
SqliteLocalAgentStore: ScriptedLocalAgentStore,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
191
241
|
//# sourceMappingURL=scripted-sdk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripted-sdk.js","sourceRoot":"","sources":["../../../../src/activities/execute-cursor/__test-utils__/scripted-sdk.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"scripted-sdk.js","sourceRoot":"","sources":["../../../../src/activities/execute-cursor/__test-utils__/scripted-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
* module boots, releases, and delegates.
|
|
6
6
|
*
|
|
7
7
|
* What this adapter owns: the proxy interceptors and the parked-agent cache
|
|
8
|
-
* (worker lifetime), the parked agent per session (session
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* (worker lifetime), the parked agent and the SDK store per session (session
|
|
9
|
+
* lifetime; `agent-session-cache.ts`, `session-store.ts`), and one engine turn
|
|
10
|
+
* (`runTurn`, through `turn.ts`). Everything else about a turn is the
|
|
11
|
+
* runtime's (`harness/run-turn.ts`).
|
|
11
12
|
*
|
|
12
13
|
* THIS MODULE'S STATIC GRAPH IS SDK-FREE, ON PURPOSE. The composition roots
|
|
13
14
|
* import it (through `src/harness-adapters.ts`) BEFORE they boot it, and
|
|
@@ -27,7 +28,7 @@
|
|
|
27
28
|
* The interceptors read the proxy credential from `Config.proxyTokenRef` per
|
|
28
29
|
* request; which credential that is (the static root's control-plane token,
|
|
29
30
|
* the manager's minted runner token) is the root's decision, not this
|
|
30
|
-
* module's
|
|
31
|
+
* module's.
|
|
31
32
|
*
|
|
32
33
|
* What this adapter never does: throw out of `runTurn` (an SDK failure is
|
|
33
34
|
* `failed` with the classifier's sentence; an unexpected exception is
|
|
@@ -39,14 +40,14 @@
|
|
|
39
40
|
*
|
|
40
41
|
* The turn boundary (`turn-boundary.ts`) runs inside `turn.ts` and reads
|
|
41
42
|
* this harness's deny-and-retry evidence — the denial ledger — into WAITING
|
|
42
|
-
* rows and settled rows. The file-review capture is NOT here since
|
|
43
|
+
* rows and settled rows. The file-review capture is NOT here since #1096:
|
|
43
44
|
* the runtime pins the baseline before this adapter runs and captures the
|
|
44
45
|
* whole turn's tree after it returns (`harness/capture.ts`); what this
|
|
45
46
|
* adapter contributes is the hook sidecar it binds as the runtime's CAS
|
|
46
47
|
* observations (`turn-setup.ts` `installGate`).
|
|
47
48
|
*
|
|
48
|
-
* Extracted from `index.ts` `createCursorActivities`
|
|
49
|
-
* the turn body
|
|
49
|
+
* Extracted from `index.ts` `createCursorActivities` in #1070, which also
|
|
50
|
+
* split it from the turn body. The seventeen hermetic goldens under
|
|
50
51
|
* `__tests__/hermetic/` pin the result byte for byte.
|
|
51
52
|
*/
|
|
52
53
|
import type { Config } from "../../config.js";
|
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
* module boots, releases, and delegates.
|
|
6
6
|
*
|
|
7
7
|
* What this adapter owns: the proxy interceptors and the parked-agent cache
|
|
8
|
-
* (worker lifetime), the parked agent per session (session
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* (worker lifetime), the parked agent and the SDK store per session (session
|
|
9
|
+
* lifetime; `agent-session-cache.ts`, `session-store.ts`), and one engine turn
|
|
10
|
+
* (`runTurn`, through `turn.ts`). Everything else about a turn is the
|
|
11
|
+
* runtime's (`harness/run-turn.ts`).
|
|
11
12
|
*
|
|
12
13
|
* THIS MODULE'S STATIC GRAPH IS SDK-FREE, ON PURPOSE. The composition roots
|
|
13
14
|
* import it (through `src/harness-adapters.ts`) BEFORE they boot it, and
|
|
@@ -27,7 +28,7 @@
|
|
|
27
28
|
* The interceptors read the proxy credential from `Config.proxyTokenRef` per
|
|
28
29
|
* request; which credential that is (the static root's control-plane token,
|
|
29
30
|
* the manager's minted runner token) is the root's decision, not this
|
|
30
|
-
* module's
|
|
31
|
+
* module's.
|
|
31
32
|
*
|
|
32
33
|
* What this adapter never does: throw out of `runTurn` (an SDK failure is
|
|
33
34
|
* `failed` with the classifier's sentence; an unexpected exception is
|
|
@@ -39,14 +40,14 @@
|
|
|
39
40
|
*
|
|
40
41
|
* The turn boundary (`turn-boundary.ts`) runs inside `turn.ts` and reads
|
|
41
42
|
* this harness's deny-and-retry evidence — the denial ledger — into WAITING
|
|
42
|
-
* rows and settled rows. The file-review capture is NOT here since
|
|
43
|
+
* rows and settled rows. The file-review capture is NOT here since #1096:
|
|
43
44
|
* the runtime pins the baseline before this adapter runs and captures the
|
|
44
45
|
* whole turn's tree after it returns (`harness/capture.ts`); what this
|
|
45
46
|
* adapter contributes is the hook sidecar it binds as the runtime's CAS
|
|
46
47
|
* observations (`turn-setup.ts` `installGate`).
|
|
47
48
|
*
|
|
48
|
-
* Extracted from `index.ts` `createCursorActivities`
|
|
49
|
-
* the turn body
|
|
49
|
+
* Extracted from `index.ts` `createCursorActivities` in #1070, which also
|
|
50
|
+
* split it from the turn body. The seventeen hermetic goldens under
|
|
50
51
|
* `__tests__/hermetic/` pin the result byte for byte.
|
|
51
52
|
*/
|
|
52
53
|
import { markBoot } from "../../shared/cold-start-timing.js";
|
|
@@ -54,6 +55,7 @@ import { closeAllCachedAgents, evictSessionAgent } from "./agent-session-cache.j
|
|
|
54
55
|
import { CURSOR_CAPABILITIES } from "./cursor-capabilities.js";
|
|
55
56
|
import { installFetchInterceptor } from "./fetch-interceptor.js";
|
|
56
57
|
import { assertHttp2ConnectPatched, installHttp2Interceptor } from "./http2-interceptor.js";
|
|
58
|
+
import { releaseAllSessionStores, releaseSessionStore } from "./session-store.js";
|
|
57
59
|
/** The config slice this adapter reads per turn, taken at `boot`; a whole `Config` satisfies it. */
|
|
58
60
|
export function resolveCursorConfig(config) {
|
|
59
61
|
return {
|
|
@@ -102,13 +104,15 @@ export function createCursorAdapter() {
|
|
|
102
104
|
const { runCursorTurn } = await import("./turn.js");
|
|
103
105
|
booted = { config: resolveCursorConfig(bootConfig), runCursorTurn };
|
|
104
106
|
},
|
|
105
|
-
/** Close every parked agent (their executor leases and MCP subprocesses). */
|
|
107
|
+
/** Close every parked agent (their executor leases and MCP subprocesses), then every session's SDK store. */
|
|
106
108
|
async shutdown() {
|
|
107
109
|
closeAllCachedAgents();
|
|
110
|
+
await releaseAllSessionStores();
|
|
108
111
|
},
|
|
109
|
-
/** The session is done on this host: close the agent parked for it, if any (#215). */
|
|
112
|
+
/** The session is done on this host: close the agent parked for it, if any (#215), then its SDK store (#1053). */
|
|
110
113
|
async releaseSession(sessionId) {
|
|
111
114
|
evictSessionAgent(sessionId);
|
|
115
|
+
await releaseSessionStore(sessionId);
|
|
112
116
|
},
|
|
113
117
|
async runTurn(input, sink) {
|
|
114
118
|
if (booted === undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/adapter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGlF,oGAAoG;AACpG,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO;QACL,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;KACpD,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,mBAAmB;IACjC,IAAI,MAAuC,CAAC;IAE5C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,mBAAmB;QAEjC;;;;;;WAMG;QACH,KAAK,CAAC,IAAI,CAAC,UAAkB;YAC3B,IAAI,UAAU,CAAC,aAAa,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CACb,oIAAoI,CACrI,CAAC;YACJ,CAAC;YACD,qEAAqE;YACrE,uEAAuE;YACvE,wEAAwE;YACxE,oEAAoE;YACpE,uBAAuB,CAAC;gBACtB,aAAa,EAAE,UAAU,CAAC,aAAa,IAAI,SAAS;gBACpD,aAAa,EAAE,UAAU,CAAC,aAAa;aACxC,CAAC,CAAC;YACH,uBAAuB,CAAC;gBACtB,aAAa,EAAE,UAAU,CAAC,aAAa,IAAI,SAAS;gBACpD,aAAa,EAAE,UAAU,CAAC,aAAa;aACxC,CAAC,CAAC;YACH,QAAQ,CAAC,wBAAwB,CAAC,CAAC;YACnC,yEAAyE;YACzE,sEAAsE;YACtE,mDAAmD;YACnD,MAAM,yBAAyB,EAAE,CAAC;YAElC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YACpD,MAAM,GAAG,EAAE,MAAM,EAAE,mBAAmB,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;QACtE,CAAC;QAED,6GAA6G;QAC7G,KAAK,CAAC,QAAQ;YACZ,oBAAoB,EAAE,CAAC;YACvB,MAAM,uBAAuB,EAAE,CAAC;QAClC,CAAC;QAED,kHAAkH;QAClH,KAAK,CAAC,cAAc,CAAC,SAAiB;YACpC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC7B,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,KAAgB,EAAE,IAAc;YAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAC;YACpH,CAAC;YACD,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -37,16 +37,14 @@ export type { MergedToolPolicy, PolicySource } from "../../shared/approval-polic
|
|
|
37
37
|
export type ApprovalCategory = ToolApprovalCategory;
|
|
38
38
|
export declare const approvalCategory: typeof toolApprovalCategory;
|
|
39
39
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* and injected into the generated preToolUse hook script so the runner and the
|
|
47
|
-
* hook never disagree on which field to match.
|
|
40
|
+
* The salient argument fields — the resource a built-in acts on — are the
|
|
41
|
+
* platform's one list, `shared/args-preview.ts` `SALIENT_ARG_FIELDS` (moved
|
|
42
|
+
* there in #1097: the transcript builder previews every row over it for
|
|
43
|
+
* both harnesses). Re-exported here for this harness's identity code and the
|
|
44
|
+
* generated hook script, which inject it so the runner and the hook never
|
|
45
|
+
* disagree on which field to match.
|
|
48
46
|
*/
|
|
49
|
-
export
|
|
47
|
+
export { SALIENT_ARG_FIELDS } from "../../shared/args-preview.js";
|
|
50
48
|
/**
|
|
51
49
|
* Check whether a built-in (non-MCP) Cursor tool requires user approval.
|
|
52
50
|
*
|
|
@@ -88,7 +86,9 @@ export declare function getBuiltInGatedCategories(): Array<[string, ApprovalCate
|
|
|
88
86
|
* Approval-message template for a gated built-in tool (either taxonomy), or
|
|
89
87
|
* undefined when the tool is not gated. Resolved via {@link approvalCategory}
|
|
90
88
|
* so stream-side names (`edit`/`shell`/`delete`) and hook-side names
|
|
91
|
-
* (`Write`/`Shell`/`Delete`) both map to the same template
|
|
89
|
+
* (`Write`/`Shell`/`Delete`) both map to the same template — the platform's
|
|
90
|
+
* ONE table, `shared/approval-policy.ts` `CATEGORY_APPROVAL_MESSAGE`, shared
|
|
91
|
+
* with the native gate since #1097. Callers resolve the
|
|
92
92
|
* placeholders against the tool args via resolveApprovalMessage.
|
|
93
93
|
*/
|
|
94
94
|
export declare function getBuiltInApprovalMessage(toolName: string): string | undefined;
|
|
@@ -22,6 +22,7 @@ import { toolApprovalCategory } from "../../shared/tool-kind.js";
|
|
|
22
22
|
// (`from "./approval-policy.js"`) keep working unchanged. This module now owns
|
|
23
23
|
// only the Cursor-specific built-in-tool gating helpers below.
|
|
24
24
|
export { mergeApprovalPolicies, lookupMcpToolPolicy, resolveApprovalMessage, POLICY_ENGINE_VERSION, } from "../../shared/approval-policy.js";
|
|
25
|
+
import { CATEGORY_APPROVAL_MESSAGE } from "../../shared/approval-policy.js";
|
|
25
26
|
/**
|
|
26
27
|
* Built-in Cursor tools the preToolUse hook gates, named as the hook receives
|
|
27
28
|
* them.
|
|
@@ -43,29 +44,15 @@ const BUILT_IN_GATED = new Set([
|
|
|
43
44
|
]);
|
|
44
45
|
export const approvalCategory = toolApprovalCategory;
|
|
45
46
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* the
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
47
|
+
* The salient argument fields — the resource a built-in acts on — are the
|
|
48
|
+
* platform's one list, `shared/args-preview.ts` `SALIENT_ARG_FIELDS` (moved
|
|
49
|
+
* there in #1097: the transcript builder previews every row over it for
|
|
50
|
+
* both harnesses). Re-exported here for this harness's identity code and the
|
|
51
|
+
* generated hook script, which inject it so the runner and the hook never
|
|
52
|
+
* disagree on which field to match.
|
|
52
53
|
*/
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
delete: "Delete: {{args.path}}",
|
|
56
|
-
shell: "Run command: {{args.command}}",
|
|
57
|
-
};
|
|
58
|
-
/**
|
|
59
|
-
* Top-level tool-argument fields, in priority order, that identify the specific
|
|
60
|
-
* resource a built-in tool acts on. The list deliberately spans BOTH taxonomies'
|
|
61
|
-
* arg shapes: the hook input names a file `file_path` and the stream names it
|
|
62
|
-
* `path`; both name a shell command `command`. Extracting the same resource
|
|
63
|
-
* VALUE on both sides (the absolute path / the command string) is what lets the
|
|
64
|
-
* hook-recorded denial token equal the stream-computed token. Authored here once
|
|
65
|
-
* and injected into the generated preToolUse hook script so the runner and the
|
|
66
|
-
* hook never disagree on which field to match.
|
|
67
|
-
*/
|
|
68
|
-
export const SALIENT_ARG_FIELDS = ["file_path", "path", "target_notebook", "command"];
|
|
54
|
+
export { SALIENT_ARG_FIELDS } from "../../shared/args-preview.js";
|
|
55
|
+
import { SALIENT_ARG_FIELDS } from "../../shared/args-preview.js";
|
|
69
56
|
/**
|
|
70
57
|
* Check whether a built-in (non-MCP) Cursor tool requires user approval.
|
|
71
58
|
*
|
|
@@ -119,7 +106,9 @@ export function getBuiltInGatedCategories() {
|
|
|
119
106
|
* Approval-message template for a gated built-in tool (either taxonomy), or
|
|
120
107
|
* undefined when the tool is not gated. Resolved via {@link approvalCategory}
|
|
121
108
|
* so stream-side names (`edit`/`shell`/`delete`) and hook-side names
|
|
122
|
-
* (`Write`/`Shell`/`Delete`) both map to the same template
|
|
109
|
+
* (`Write`/`Shell`/`Delete`) both map to the same template — the platform's
|
|
110
|
+
* ONE table, `shared/approval-policy.ts` `CATEGORY_APPROVAL_MESSAGE`, shared
|
|
111
|
+
* with the native gate since #1097. Callers resolve the
|
|
123
112
|
* placeholders against the tool args via resolveApprovalMessage.
|
|
124
113
|
*/
|
|
125
114
|
export function getBuiltInApprovalMessage(toolName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-policy.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/approval-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,oBAAoB,EAA6B,MAAM,2BAA2B,CAAC;AAE5F,+EAA+E;AAC/E,iFAAiF;AACjF,+DAA+D;AAC/D,+EAA+E;AAC/E,+DAA+D;AAC/D,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"approval-policy.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/approval-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,oBAAoB,EAA6B,MAAM,2BAA2B,CAAC;AAE5F,+EAA+E;AAC/E,iFAAiF;AACjF,+DAA+D;AAC/D,+EAA+E;AAC/E,+DAA+D;AAC/D,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAG5E;;;;;;;;;;;GAWG;AACH,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IAClD,OAAO;IACP,YAAY;IACZ,cAAc;IACd,OAAO;IACP,QAAQ;CACT,CAAC,CAAC;AAoBH,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAErD;;;;;;;GAOG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,KAAK,GAAsC,EAAE,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAgB;IACxD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAyC;IACrE,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
*/
|
|
82
82
|
import { ApprovalAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
83
83
|
import type { PendingApproval } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/approval_pb";
|
|
84
|
-
import type { AgentMessage } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
|
|
84
|
+
import type { AgentMessage, ToolCall } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
|
|
85
85
|
import type { MergedToolPolicy, ApprovalCategory } from "./approval-policy.js";
|
|
86
86
|
import { type FingerprintKey } from "../../shared/approval-fingerprint.js";
|
|
87
87
|
export interface McpToolPolicyEntry {
|
|
@@ -248,6 +248,40 @@ export declare function contentToken(key: string, salient: string, contentDigest
|
|
|
248
248
|
* reinvoke-time identities can never drift.
|
|
249
249
|
*/
|
|
250
250
|
export declare function primaryToken(key: string, salient: string, contentDigest: string): string;
|
|
251
|
+
/**
|
|
252
|
+
* Compute a streamed tool call's identity token in the same canonical space the
|
|
253
|
+
* preToolUse hook records denials in (see {@link toolIdentity} / primaryToken).
|
|
254
|
+
* The token keys on the cross-taxonomy category + salient resource PLUS, for a
|
|
255
|
+
* file edit/write, the {@link contentDigest} of the edit content — so a stream
|
|
256
|
+
* `edit` correlates to the hook's `Write` deny for the same path AND content,
|
|
257
|
+
* and an approval of one edit does not match a DIFFERENT edit to the same file.
|
|
258
|
+
*
|
|
259
|
+
* The digest is read from the persisted `approval_content_digest` field when
|
|
260
|
+
* present (a seeded gate carries it, stable even if `args` was elided), and is
|
|
261
|
+
* recomputed from the call's args otherwise (a freshly-streamed call). For a
|
|
262
|
+
* shell/delete/MCP call (no content) it falls back to the coarse token, exactly
|
|
263
|
+
* as before — so those identities are unchanged.
|
|
264
|
+
*
|
|
265
|
+
* Exported so the resume-grant round-trip can be locked against it: the grant a
|
|
266
|
+
* resume mints for an approved tool (buildApprovalGrants -> primaryToken) must
|
|
267
|
+
* equal THIS denial/overlay identity, or the re-issued call is re-gated forever
|
|
268
|
+
* (the dual-path drift the approval-state round-trip suite guards against).
|
|
269
|
+
*/
|
|
270
|
+
export declare function toolCallIdentityToken(tc: ToolCall): string;
|
|
271
|
+
/**
|
|
272
|
+
* Decode a primary token back into its (key, salient, digest) for the synthesis
|
|
273
|
+
* fallback. The token is `base64(key \n salient)` (coarse) or
|
|
274
|
+
* `base64(key \n salient \n digest)` (content-exact); the digest is the optional
|
|
275
|
+
* third segment. salient never contains a newline (a path or shell command), so
|
|
276
|
+
* splitting on the first two newlines is unambiguous.
|
|
277
|
+
*/
|
|
278
|
+
export declare function decodeIdentityToken(token: string): {
|
|
279
|
+
key: string;
|
|
280
|
+
salient: string;
|
|
281
|
+
digest: string;
|
|
282
|
+
} | undefined;
|
|
283
|
+
/** Best-effort args record for a tool call (proto struct, else parsed preview). */
|
|
284
|
+
export declare function toolCallArgs(tc: ToolCall): Record<string, unknown>;
|
|
251
285
|
/**
|
|
252
286
|
* The shared HMAC coarse fingerprint of an approval grant.
|
|
253
287
|
*
|