@stigmer/runner 3.15.0 → 3.15.2-dev.20260913223433
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -4
- package/dist/.build-fingerprint +1 -1
- package/dist/__test-utils__/execution-record-fixture.d.ts +14 -0
- package/dist/__test-utils__/execution-record-fixture.js +4 -0
- package/dist/__test-utils__/execution-record-fixture.js.map +1 -1
- package/dist/__test-utils__/file-review-projection.d.ts +40 -0
- package/dist/__test-utils__/file-review-projection.js +136 -0
- package/dist/__test-utils__/file-review-projection.js.map +1 -0
- package/dist/__test-utils__/harness-contract/types.d.ts +23 -1
- package/dist/__test-utils__/harness-contract/types.js +15 -0
- package/dist/__test-utils__/harness-contract/types.js.map +1 -1
- package/dist/__test-utils__/hermetic-activity.d.ts +44 -12
- package/dist/__test-utils__/hermetic-activity.js +52 -14
- package/dist/__test-utils__/hermetic-activity.js.map +1 -1
- package/dist/__test-utils__/model-registry-fixture.d.ts +32 -7
- package/dist/__test-utils__/model-registry-fixture.js +31 -7
- package/dist/__test-utils__/model-registry-fixture.js.map +1 -1
- package/dist/__test-utils__/turn-input-fixture.d.ts +1 -1
- package/dist/__test-utils__/turn-input-fixture.js +1 -1
- package/dist/__test-utils__/turn-input-fixture.js.map +1 -1
- package/dist/activities/call-agent.js +2 -2
- package/dist/activities/call-agent.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.js +45 -3
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +0 -9
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +2 -41
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -1
- package/dist/activities/execute-cursor/adapter.d.ts +7 -5
- package/dist/activities/execute-cursor/adapter.js +7 -5
- package/dist/activities/execute-cursor/adapter.js.map +1 -1
- package/dist/activities/execute-cursor/approval-policy.d.ts +5 -2
- package/dist/activities/execute-cursor/approval-policy.js +5 -2
- package/dist/activities/execute-cursor/approval-policy.js.map +1 -1
- package/dist/activities/execute-cursor/approval-state.d.ts +16 -8
- package/dist/activities/execute-cursor/approval-state.js +6 -3
- package/dist/activities/execute-cursor/approval-state.js.map +1 -1
- package/dist/activities/execute-cursor/cas-observations.d.ts +14 -2
- package/dist/activities/execute-cursor/cas-observations.js +19 -2
- package/dist/activities/execute-cursor/cas-observations.js.map +1 -1
- package/dist/activities/execute-cursor/cursor-capabilities.d.ts +8 -4
- package/dist/activities/execute-cursor/cursor-capabilities.js +21 -4
- package/dist/activities/execute-cursor/cursor-capabilities.js.map +1 -1
- package/dist/activities/execute-cursor/message-translator.d.ts +12 -20
- package/dist/activities/execute-cursor/message-translator.js +19 -32
- package/dist/activities/execute-cursor/message-translator.js.map +1 -1
- package/dist/activities/execute-cursor/prompt-builder.d.ts +48 -58
- package/dist/activities/execute-cursor/prompt-builder.js +76 -95
- package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
- package/dist/activities/execute-cursor/turn-boundary.d.ts +27 -55
- package/dist/activities/execute-cursor/turn-boundary.js +30 -90
- 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 +37 -49
- package/dist/activities/execute-cursor/turn-settle.js.map +1 -1
- package/dist/activities/execute-cursor/turn-setup.d.ts +16 -24
- package/dist/activities/execute-cursor/turn-setup.js +29 -59
- package/dist/activities/execute-cursor/turn-setup.js.map +1 -1
- package/dist/activities/execute-cursor/turn-stream.d.ts +3 -8
- package/dist/activities/execute-cursor/turn-stream.js +9 -22
- package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
- package/dist/activities/execute-cursor/turn.js +5 -1
- package/dist/activities/execute-cursor/turn.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.d.ts +93 -0
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js +348 -0
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.d.ts +170 -0
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js +225 -0
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.d.ts +24 -0
- package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js +41 -0
- package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.d.ts +54 -0
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js +72 -0
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.d.ts +187 -23
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js +238 -27
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js.map +1 -1
- package/dist/activities/execute-deep-agent/adapter.d.ts +41 -0
- package/dist/activities/execute-deep-agent/adapter.js +78 -0
- package/dist/activities/execute-deep-agent/adapter.js.map +1 -0
- package/dist/activities/execute-deep-agent/cas-capture-observer.d.ts +8 -0
- package/dist/activities/execute-deep-agent/cas-capture-observer.js +9 -0
- package/dist/activities/execute-deep-agent/cas-capture-observer.js.map +1 -1
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.d.ts +31 -0
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.js +40 -0
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.js.map +1 -0
- package/dist/activities/execute-deep-agent/execution-state.d.ts +4 -11
- package/dist/activities/execute-deep-agent/execution-state.js +4 -12
- package/dist/activities/execute-deep-agent/execution-state.js.map +1 -1
- package/dist/activities/execute-deep-agent/hitl.d.ts +49 -47
- package/dist/activities/execute-deep-agent/hitl.js +77 -103
- package/dist/activities/execute-deep-agent/hitl.js.map +1 -1
- package/dist/activities/execute-deep-agent/prompt-builder.d.ts +51 -23
- package/dist/activities/execute-deep-agent/prompt-builder.js +115 -76
- package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
- package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +18 -32
- package/dist/activities/execute-deep-agent/status-builder-shared.js +10 -65
- package/dist/activities/execute-deep-agent/status-builder-shared.js.map +1 -1
- package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +10 -8
- package/dist/activities/execute-deep-agent/streaming-side-effects.js +12 -14
- package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-tracker.d.ts +36 -13
- package/dist/activities/execute-deep-agent/subagent-tracker.js +76 -39
- package/dist/activities/execute-deep-agent/subagent-tracker.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +25 -28
- package/dist/activities/execute-deep-agent/subagent-transformer.js +29 -82
- package/dist/activities/execute-deep-agent/subagent-transformer.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-wiring.d.ts +3 -2
- package/dist/activities/execute-deep-agent/subagent-wiring.js +2 -2
- package/dist/activities/execute-deep-agent/subagent-wiring.js.map +1 -1
- package/dist/activities/execute-deep-agent/turn-settle.d.ts +42 -0
- package/dist/activities/execute-deep-agent/turn-settle.js +146 -0
- package/dist/activities/execute-deep-agent/turn-settle.js.map +1 -0
- package/dist/activities/execute-deep-agent/turn-setup.d.ts +212 -0
- package/dist/activities/execute-deep-agent/turn-setup.js +430 -0
- package/dist/activities/execute-deep-agent/turn-setup.js.map +1 -0
- package/dist/activities/execute-deep-agent/turn-stream.d.ts +97 -0
- package/dist/activities/execute-deep-agent/turn-stream.js +242 -0
- package/dist/activities/execute-deep-agent/turn-stream.js.map +1 -0
- package/dist/activities/execute-deep-agent/turn.d.ts +42 -0
- package/dist/activities/execute-deep-agent/turn.js +116 -0
- package/dist/activities/execute-deep-agent/turn.js.map +1 -0
- package/dist/activities/execute-deep-agent/v3-event-recorder.d.ts +6 -5
- package/dist/activities/execute-deep-agent/v3-event-recorder.js +6 -5
- package/dist/activities/execute-deep-agent/v3-event-recorder.js.map +1 -1
- package/dist/activities/execute-deep-agent/v3-events.d.ts +1 -1
- package/dist/activities/execute-deep-agent/v3-events.js +1 -1
- package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +60 -17
- package/dist/activities/execute-deep-agent/v3-status-builder.js +72 -57
- package/dist/activities/execute-deep-agent/v3-status-builder.js.map +1 -1
- package/dist/harness/approval-decisions.d.ts +61 -0
- package/dist/harness/approval-decisions.js +102 -0
- package/dist/harness/approval-decisions.js.map +1 -0
- package/dist/harness/capabilities.d.ts +16 -5
- package/dist/harness/capabilities.js +9 -0
- package/dist/harness/capabilities.js.map +1 -1
- package/dist/harness/capture.d.ts +144 -0
- package/dist/harness/capture.js +219 -0
- package/dist/harness/capture.js.map +1 -0
- package/dist/harness/persist-chokepoint.d.ts +19 -4
- package/dist/harness/persist-chokepoint.js +17 -4
- package/dist/harness/persist-chokepoint.js.map +1 -1
- package/dist/harness/run-turn.js +115 -29
- package/dist/harness/run-turn.js.map +1 -1
- package/dist/harness/terminal-table.d.ts +40 -11
- package/dist/harness/terminal-table.js +58 -19
- package/dist/harness/terminal-table.js.map +1 -1
- package/dist/harness/turn-context.d.ts +141 -76
- package/dist/harness/turn-context.js +194 -99
- package/dist/harness/turn-context.js.map +1 -1
- package/dist/harness/types.d.ts +65 -12
- package/dist/harness/types.js +8 -2
- package/dist/harness/types.js.map +1 -1
- package/dist/harness-adapters.d.ts +12 -8
- package/dist/harness-adapters.js +17 -9
- package/dist/harness-adapters.js.map +1 -1
- package/dist/middleware/approval-gate.d.ts +1 -1
- package/dist/middleware/approval-gate.js +1 -1
- package/dist/middleware/approval-gate.js.map +1 -1
- package/dist/middleware/cost-advisory.d.ts +39 -0
- package/dist/middleware/{cost-cap.js → cost-advisory.js} +37 -55
- package/dist/middleware/cost-advisory.js.map +1 -0
- package/dist/middleware/index.d.ts +23 -12
- package/dist/middleware/index.js +26 -18
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/types.d.ts +3 -2
- package/dist/runner-manager.js +1 -5
- package/dist/runner-manager.js.map +1 -1
- package/dist/runner.js +1 -5
- package/dist/runner.js.map +1 -1
- package/dist/shared/attachment-resolver.d.ts +41 -18
- package/dist/shared/attachment-resolver.js +178 -46
- package/dist/shared/attachment-resolver.js.map +1 -1
- package/dist/shared/attachment-zip.d.ts +85 -0
- package/dist/shared/attachment-zip.js +185 -0
- package/dist/shared/attachment-zip.js.map +1 -0
- package/dist/shared/connect-backfill.js +5 -4
- package/dist/shared/connect-backfill.js.map +1 -1
- package/dist/shared/cost-guard.d.ts +3 -3
- package/dist/shared/cost-guard.js +3 -3
- package/dist/shared/execution-status-writer.d.ts +5 -5
- package/dist/shared/execution-status-writer.js +5 -5
- package/dist/shared/extract-structured-output.d.ts +8 -7
- package/dist/shared/extract-structured-output.js +8 -7
- package/dist/shared/extract-structured-output.js.map +1 -1
- package/dist/shared/filereview/cas-progress.d.ts +1 -18
- package/dist/shared/filereview/cas-progress.js +4 -0
- package/dist/shared/filereview/cas-progress.js.map +1 -1
- package/dist/shared/filereview/cas-touched.d.ts +56 -0
- package/dist/shared/filereview/cas-touched.js +63 -0
- package/dist/shared/filereview/cas-touched.js.map +1 -0
- package/dist/shared/filereview/index.d.ts +2 -1
- package/dist/shared/filereview/index.js +2 -1
- package/dist/shared/filereview/index.js.map +1 -1
- package/dist/shared/mcp-resolver.d.ts +4 -5
- package/dist/shared/mcp-resolver.js +4 -5
- package/dist/shared/mcp-resolver.js.map +1 -1
- package/dist/shared/persist-decision.d.ts +3 -4
- package/dist/shared/persist-decision.js +3 -4
- package/dist/shared/persist-decision.js.map +1 -1
- package/dist/shared/plan-mode-permissions.d.ts +2 -2
- package/dist/shared/plan-mode-permissions.js +2 -2
- package/dist/shared/plan-mode-prompt.d.ts +1 -1
- package/dist/shared/plan-mode-prompt.js +1 -1
- package/dist/shared/prompt-sections.d.ts +163 -0
- package/dist/shared/prompt-sections.js +164 -0
- package/dist/shared/prompt-sections.js.map +1 -0
- package/dist/shared/skill-resolver.d.ts +4 -2
- package/dist/shared/skill-resolver.js +4 -2
- package/dist/shared/skill-resolver.js.map +1 -1
- package/dist/shared/tool-rounds.d.ts +32 -0
- package/dist/shared/tool-rounds.js +43 -0
- package/dist/shared/tool-rounds.js.map +1 -1
- package/dist/shared/tool-row.d.ts +34 -0
- package/dist/shared/tool-row.js +52 -0
- package/dist/shared/tool-row.js.map +1 -1
- package/dist/shared/workspace/session-provision.d.ts +3 -3
- package/dist/shared/workspace/session-provision.js +3 -3
- package/dist/shared/workspace/stigmer-link.d.ts +3 -3
- package/dist/shared/workspace/stigmer-link.js +3 -3
- package/dist/shared/workspace/writeback-coordinator.d.ts +15 -22
- package/dist/shared/workspace/writeback-coordinator.js +16 -53
- package/dist/shared/workspace/writeback-coordinator.js.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.js +1 -1
- package/package.json +4 -4
- package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +1 -0
- package/src/__test-utils__/execution-record-fixture.ts +18 -2
- package/src/__test-utils__/file-review-projection.ts +156 -0
- package/src/__test-utils__/git-workspace-fixture.ts +58 -0
- package/src/__test-utils__/harness-boot-order-child.ts +7 -2
- package/src/__test-utils__/harness-contract/contract.ts +33 -20
- package/src/__test-utils__/harness-contract/recording-sink.ts +11 -1
- package/src/__test-utils__/harness-contract/runtime-contract.ts +328 -10
- package/src/__test-utils__/harness-contract/scripted-adapter.ts +38 -6
- package/src/__test-utils__/harness-contract/types.ts +27 -3
- package/src/__test-utils__/hermetic-activity.ts +52 -14
- package/src/__test-utils__/model-registry-fixture.ts +32 -7
- package/src/__test-utils__/module-specifiers.ts +24 -0
- package/src/__test-utils__/turn-input-fixture.ts +2 -2
- package/src/__tests__/harness-boot-order.test.ts +9 -2
- package/src/activities/call-agent.ts +2 -2
- package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +47 -3
- package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +2 -48
- package/src/activities/execute-cursor/__tests__/approval-decisions-agree.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +6 -1
- package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +52 -27
- package/src/activities/execute-cursor/__tests__/cas-observations.test.ts +25 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.enhanced.everything.prompt.md +166 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.enhanced.plan-mode.prompt.md +186 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.hitl.recovery.prompt.md +191 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.hitl.reinvocation.prompt.md +13 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.resumed.prefixed.prompt.md +32 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.resumed.raw.prompt.md +1 -0
- package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +1 -2
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-error-at-create.status.json +4 -0
- package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +24 -4
- package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +6 -5
- package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +9 -0
- package/src/activities/execute-cursor/__tests__/hitl-resume-history.test.ts +11 -8
- package/src/activities/execute-cursor/__tests__/prompt-goldens.test.ts +229 -0
- package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +3 -3
- package/src/activities/execute-cursor/__tests__/sequential-gate-resume.test.ts +2 -2
- package/src/activities/execute-cursor/__tests__/turn-boundary.test.ts +78 -234
- package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +1 -26
- package/src/activities/execute-cursor/adapter.ts +7 -5
- package/src/activities/execute-cursor/approval-policy.ts +5 -2
- package/src/activities/execute-cursor/approval-state.ts +16 -8
- package/src/activities/execute-cursor/cas-observations.ts +20 -2
- package/src/activities/execute-cursor/cursor-capabilities.ts +24 -5
- package/src/activities/execute-cursor/message-translator.ts +29 -41
- package/src/activities/execute-cursor/prompt-builder.ts +99 -157
- package/src/activities/execute-cursor/turn-boundary.ts +34 -140
- package/src/activities/execute-cursor/turn-settle.ts +37 -51
- package/src/activities/execute-cursor/turn-setup.ts +30 -70
- package/src/activities/execute-cursor/turn-stream.ts +8 -31
- package/src/activities/execute-cursor/turn.ts +5 -1
- package/src/activities/execute-deep-agent/__test-utils__/contract-subject.ts +391 -0
- package/src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts +313 -0
- package/src/activities/execute-deep-agent/__test-utils__/hitl-script.ts +48 -0
- package/src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts +85 -0
- package/src/activities/execute-deep-agent/__test-utils__/scripted-model.ts +383 -36
- package/src/activities/execute-deep-agent/__tests__/adapter-graph-is-sdk-free.test.ts +76 -0
- package/src/activities/execute-deep-agent/__tests__/adapter-is-temporal-free.test.ts +47 -0
- package/src/activities/execute-deep-agent/__tests__/adapter.test.ts +80 -0
- package/src/activities/execute-deep-agent/__tests__/cas-capture-backend.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/execution-state-extended.test.ts +0 -2
- package/src/activities/execute-deep-agent/__tests__/execution-state.test.ts +0 -3
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.build-from-plan.prompt.md +172 -0
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.everything.prompt.md +167 -0
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.minimal.prompt.md +36 -0
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.plan-mode.prompt.md +178 -0
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.skills-below-threshold.prompt.md +158 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/file-review-capture.test.ts +210 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.status.json +74 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.status.json +104 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.status.json +78 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.status.json +138 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.status.json +68 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.status.json +154 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.status.json +116 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.status.json +69 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.status.json +67 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/plain-turn.status.json +47 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.status.json +68 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.status.json +280 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.status.json +77 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/resolution-error.status.json +18 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.status.json +99 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.status.json +109 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.status.json +76 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.text-fallback.status.json +51 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.tier2.status.json +51 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.tool-strategy.status.json +56 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.status.json +90 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.status.json +70 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.status.json +71 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/harness-contract.test.ts +144 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-approve-all-lease.test.ts +184 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-round-trips.test.ts +203 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-sequential-gates.test.ts +170 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/inline-artifact-across-gate.test.ts +175 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/pause-vs-shutdown.test.ts +206 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/plain-turn.test.ts +142 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/platform-stop.test.ts +126 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/recursion-limit.test.ts +139 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/resolution-error.test.ts +122 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/structured-output.test.ts +236 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-delegation.test.ts +161 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/tool-call.test.ts +157 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/workspace-lock-timeout.test.ts +152 -0
- package/src/activities/execute-deep-agent/__tests__/hitl.test.ts +50 -122
- package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +8 -6
- package/src/activities/execute-deep-agent/__tests__/plan-mode-path-normalization.test.ts +2 -2
- package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +35 -35
- package/src/activities/execute-deep-agent/__tests__/prompt-goldens.test.ts +247 -0
- package/src/activities/execute-deep-agent/__tests__/scripted-model.test.ts +329 -0
- package/src/activities/execute-deep-agent/__tests__/status-builder-shared.test.ts +1 -20
- package/src/activities/execute-deep-agent/__tests__/streaming-side-effects.test.ts +78 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-gitignored-capture.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/subagent-plan-mode-permissions.test.ts +2 -2
- package/src/activities/execute-deep-agent/__tests__/subagent-tracker.test.ts +57 -31
- package/src/activities/execute-deep-agent/__tests__/subagent-transformer.test.ts +19 -79
- package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +15 -15
- package/src/activities/execute-deep-agent/__tests__/summarization-verification.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/turn-stream.test.ts +391 -0
- package/src/activities/execute-deep-agent/__tests__/v3-status-builder.test.ts +343 -38
- package/src/activities/execute-deep-agent/__tests__/vision-input.test.ts +5 -5
- package/src/activities/execute-deep-agent/adapter.ts +94 -0
- package/src/activities/execute-deep-agent/cas-capture-observer.ts +11 -0
- package/src/activities/execute-deep-agent/deep-agent-capabilities.ts +43 -0
- package/src/activities/execute-deep-agent/execution-state.ts +4 -13
- package/src/activities/execute-deep-agent/hitl.ts +100 -123
- package/src/activities/execute-deep-agent/prompt-builder.ts +141 -115
- package/src/activities/execute-deep-agent/status-builder-shared.ts +21 -84
- package/src/activities/execute-deep-agent/streaming-side-effects.ts +13 -19
- package/src/activities/execute-deep-agent/subagent-tracker.ts +77 -42
- package/src/activities/execute-deep-agent/subagent-transformer.ts +46 -105
- package/src/activities/execute-deep-agent/subagent-wiring.ts +5 -4
- package/src/activities/execute-deep-agent/turn-settle.ts +164 -0
- package/src/activities/execute-deep-agent/turn-setup.ts +541 -0
- package/src/activities/execute-deep-agent/turn-stream.ts +313 -0
- package/src/activities/execute-deep-agent/turn.ts +131 -0
- package/src/activities/execute-deep-agent/v3-event-recorder.ts +6 -5
- package/src/activities/execute-deep-agent/v3-events.ts +1 -1
- package/src/activities/execute-deep-agent/v3-status-builder.ts +84 -63
- package/src/harness/__tests__/approval-decisions.test.ts +116 -0
- package/src/harness/__tests__/capture.test.ts +268 -0
- package/src/harness/__tests__/mount-skills.test.ts +169 -0
- package/src/harness/__tests__/persist-chokepoint.test.ts +38 -2
- package/src/harness/__tests__/run-turn-deterministic.test.ts +94 -0
- package/src/harness/__tests__/run-turn.test.ts +39 -23
- package/src/harness/__tests__/turn-attachments-vision.test.ts +80 -0
- package/src/harness/__tests__/turn-context.test.ts +73 -26
- package/src/harness/approval-decisions.ts +104 -0
- package/src/harness/capabilities.ts +16 -5
- package/src/harness/capture.ts +301 -0
- package/src/harness/persist-chokepoint.ts +24 -4
- package/src/harness/run-turn.ts +120 -29
- package/src/harness/terminal-table.ts +61 -20
- package/src/harness/turn-context.ts +208 -111
- package/src/harness/types.ts +66 -12
- package/src/harness-adapters.ts +17 -9
- package/src/middleware/__tests__/approval-gate.test.ts +1 -1
- package/src/middleware/__tests__/cost-advisory.test.ts +113 -0
- package/src/middleware/approval-gate.ts +2 -2
- package/src/middleware/{cost-cap.ts → cost-advisory.ts} +40 -70
- package/src/middleware/index.ts +29 -29
- package/src/middleware/types.ts +3 -2
- package/src/runner-manager.ts +0 -8
- package/src/runner.ts +0 -8
- package/src/shared/__tests__/attachment-naming.test.ts +6 -19
- package/src/shared/__tests__/attachment-resolver.test.ts +158 -8
- package/src/shared/__tests__/attachment-zip.test.ts +236 -0
- package/src/shared/__tests__/bedrock-adapter.test.ts +1 -1
- package/src/shared/__tests__/blueprint-resolver.test.ts +43 -0
- package/src/shared/__tests__/cost-guard.test.ts +3 -3
- package/src/shared/__tests__/prompt-sections.test.ts +167 -0
- package/src/shared/__tests__/secret-leak-scan.test.ts +2 -2
- package/src/{activities/execute-deep-agent → shared}/__tests__/stamp-flowed-rows.test.ts +33 -10
- package/src/shared/__tests__/vertex-adapter.test.ts +1 -1
- package/src/shared/attachment-resolver.ts +218 -55
- package/src/shared/attachment-zip.ts +281 -0
- package/src/shared/connect-backfill.ts +9 -11
- package/src/shared/cost-guard.ts +3 -3
- package/src/shared/execution-status-writer.ts +5 -5
- package/src/shared/extract-structured-output.ts +8 -7
- package/src/shared/filereview/__tests__/capture.test.ts +86 -4
- package/src/shared/filereview/__tests__/cas-progress.test.ts +2 -1
- package/src/shared/filereview/cas-progress.ts +5 -19
- package/src/shared/filereview/cas-touched.ts +89 -0
- package/src/shared/filereview/index.ts +4 -2
- package/src/shared/mcp-resolver.ts +4 -5
- package/src/shared/persist-decision.ts +3 -4
- package/src/shared/plan-mode-permissions.ts +2 -2
- package/src/shared/plan-mode-prompt.ts +1 -1
- package/src/shared/prompt-sections.ts +256 -0
- package/src/shared/skill-resolver.ts +4 -2
- package/src/shared/tool-rounds.ts +48 -0
- package/src/shared/tool-row.ts +61 -0
- package/src/shared/workspace/__tests__/stigmer-link.test.ts +7 -22
- package/src/shared/workspace/__tests__/writeback-coordinator.test.ts +20 -61
- package/src/shared/workspace/session-provision.ts +3 -3
- package/src/shared/workspace/stigmer-link.ts +3 -3
- package/src/shared/workspace/writeback-coordinator.ts +16 -64
- package/src/tools/index.ts +1 -1
- package/dist/activities/execute-cursor/capture-flow.d.ts +0 -142
- package/dist/activities/execute-cursor/capture-flow.js +0 -285
- package/dist/activities/execute-cursor/capture-flow.js.map +0 -1
- package/dist/activities/execute-cursor/command-provenance.d.ts +0 -48
- package/dist/activities/execute-cursor/command-provenance.js +0 -38
- package/dist/activities/execute-cursor/command-provenance.js.map +0 -1
- package/dist/activities/execute-deep-agent/attachment-injector.d.ts +0 -134
- package/dist/activities/execute-deep-agent/attachment-injector.js +0 -386
- package/dist/activities/execute-deep-agent/attachment-injector.js.map +0 -1
- package/dist/activities/execute-deep-agent/command-provenance.d.ts +0 -61
- package/dist/activities/execute-deep-agent/command-provenance.js +0 -72
- package/dist/activities/execute-deep-agent/command-provenance.js.map +0 -1
- package/dist/activities/execute-deep-agent/environment.d.ts +0 -24
- package/dist/activities/execute-deep-agent/environment.js +0 -58
- package/dist/activities/execute-deep-agent/environment.js.map +0 -1
- package/dist/activities/execute-deep-agent/event-recorder.d.ts +0 -21
- package/dist/activities/execute-deep-agent/event-recorder.js +0 -67
- package/dist/activities/execute-deep-agent/event-recorder.js.map +0 -1
- package/dist/activities/execute-deep-agent/index.d.ts +0 -15
- package/dist/activities/execute-deep-agent/index.js +0 -918
- package/dist/activities/execute-deep-agent/index.js.map +0 -1
- package/dist/activities/execute-deep-agent/mcp-gate.d.ts +0 -28
- package/dist/activities/execute-deep-agent/mcp-gate.js +0 -22
- package/dist/activities/execute-deep-agent/mcp-gate.js.map +0 -1
- package/dist/activities/execute-deep-agent/post-stream.d.ts +0 -23
- package/dist/activities/execute-deep-agent/post-stream.js +0 -71
- package/dist/activities/execute-deep-agent/post-stream.js.map +0 -1
- package/dist/activities/execute-deep-agent/setup.d.ts +0 -136
- package/dist/activities/execute-deep-agent/setup.js +0 -767
- package/dist/activities/execute-deep-agent/setup.js.map +0 -1
- package/dist/activities/execute-deep-agent/stamp-flowed-rows.d.ts +0 -36
- package/dist/activities/execute-deep-agent/stamp-flowed-rows.js +0 -56
- package/dist/activities/execute-deep-agent/stamp-flowed-rows.js.map +0 -1
- package/dist/activities/execute-deep-agent/status-builder.d.ts +0 -93
- package/dist/activities/execute-deep-agent/status-builder.js +0 -365
- package/dist/activities/execute-deep-agent/status-builder.js.map +0 -1
- package/dist/activities/execute-deep-agent/streaming-terminal.d.ts +0 -21
- package/dist/activities/execute-deep-agent/streaming-terminal.js +0 -80
- package/dist/activities/execute-deep-agent/streaming-terminal.js.map +0 -1
- package/dist/activities/execute-deep-agent/streaming-v3.d.ts +0 -13
- package/dist/activities/execute-deep-agent/streaming-v3.js +0 -174
- package/dist/activities/execute-deep-agent/streaming-v3.js.map +0 -1
- package/dist/activities/execute-deep-agent/streaming.d.ts +0 -81
- package/dist/activities/execute-deep-agent/streaming.js +0 -160
- package/dist/activities/execute-deep-agent/streaming.js.map +0 -1
- package/dist/middleware/cost-cap.d.ts +0 -22
- package/dist/middleware/cost-cap.js.map +0 -1
- package/dist/middleware/graceful-stop.d.ts +0 -17
- package/dist/middleware/graceful-stop.js +0 -63
- package/dist/middleware/graceful-stop.js.map +0 -1
- package/dist/shared/skill-writer.d.ts +0 -75
- package/dist/shared/skill-writer.js +0 -207
- package/dist/shared/skill-writer.js.map +0 -1
- package/src/activities/execute-cursor/__tests__/capture-flow.test.ts +0 -1032
- package/src/activities/execute-cursor/__tests__/command-provenance.test.ts +0 -240
- package/src/activities/execute-cursor/__tests__/progress-substrate.test.ts +0 -169
- package/src/activities/execute-cursor/capture-flow.ts +0 -379
- package/src/activities/execute-cursor/command-provenance.ts +0 -73
- package/src/activities/execute-deep-agent/__tests__/attachment-injector.test.ts +0 -1161
- package/src/activities/execute-deep-agent/__tests__/command-provenance.test.ts +0 -252
- package/src/activities/execute-deep-agent/__tests__/environment.test.ts +0 -108
- package/src/activities/execute-deep-agent/__tests__/event-recorder.test.ts +0 -150
- package/src/activities/execute-deep-agent/__tests__/hitl-integration.test.ts +0 -226
- package/src/activities/execute-deep-agent/__tests__/hitl-reject.test.ts +0 -318
- package/src/activities/execute-deep-agent/__tests__/hitl-resume-approve-all.test.ts +0 -351
- package/src/activities/execute-deep-agent/__tests__/hitl-resume-history.test.ts +0 -293
- package/src/activities/execute-deep-agent/__tests__/index.test.ts +0 -99
- package/src/activities/execute-deep-agent/__tests__/mcp-gate.test.ts +0 -44
- package/src/activities/execute-deep-agent/__tests__/post-stream.test.ts +0 -112
- package/src/activities/execute-deep-agent/__tests__/sequential-gate-resume.test.ts +0 -358
- package/src/activities/execute-deep-agent/__tests__/status-builder.test.ts +0 -1933
- package/src/activities/execute-deep-agent/__tests__/streaming-terminal.test.ts +0 -40
- package/src/activities/execute-deep-agent/__tests__/streaming-v3.test.ts +0 -597
- package/src/activities/execute-deep-agent/__tests__/streaming.test.ts +0 -508
- package/src/activities/execute-deep-agent/attachment-injector.ts +0 -627
- package/src/activities/execute-deep-agent/command-provenance.ts +0 -102
- package/src/activities/execute-deep-agent/environment.ts +0 -76
- package/src/activities/execute-deep-agent/event-recorder.ts +0 -95
- package/src/activities/execute-deep-agent/index.ts +0 -1072
- package/src/activities/execute-deep-agent/mcp-gate.ts +0 -37
- package/src/activities/execute-deep-agent/post-stream.ts +0 -109
- package/src/activities/execute-deep-agent/setup.ts +0 -1081
- package/src/activities/execute-deep-agent/stamp-flowed-rows.ts +0 -64
- package/src/activities/execute-deep-agent/status-builder.ts +0 -481
- package/src/activities/execute-deep-agent/streaming-terminal.ts +0 -106
- package/src/activities/execute-deep-agent/streaming-v3.ts +0 -277
- package/src/activities/execute-deep-agent/streaming.ts +0 -313
- package/src/middleware/__tests__/cost-cap.test.ts +0 -192
- package/src/middleware/__tests__/graceful-stop.test.ts +0 -105
- package/src/middleware/graceful-stop.ts +0 -86
- package/src/shared/__tests__/skill-writer.test.ts +0 -372
- package/src/shared/skill-writer.ts +0 -266
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
* the attachments are resolved. What remains is Cursor's own reading of that
|
|
10
10
|
* record: the cursor mode; the row facts beside the runtime's approval
|
|
11
11
|
* verdicts; the SDK's MCP config; the prompt-shaped view of the attachments;
|
|
12
|
-
* the HITL gate (hook script, approval state, grants, denial watcher,
|
|
13
|
-
*
|
|
12
|
+
* the HITL gate (hook script, approval state, grants, denial watcher, and
|
|
13
|
+
* the hook sidecar bound as the runtime's CAS observations); the catalog
|
|
14
|
+
* validation of the
|
|
14
15
|
* requested model; the credential, the sub-agents, the variant params and
|
|
15
16
|
* the agent itself (parked or resolved); the bind of a new agent's id through
|
|
16
17
|
* the sink; the prompt in one of its four shapes; the vision payload; the
|
|
@@ -27,40 +28,36 @@
|
|
|
27
28
|
|
|
28
29
|
import type { SDKUserMessage } from "@cursor/sdk";
|
|
29
30
|
import type { PendingApproval } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/approval_pb";
|
|
30
|
-
import type { SubAgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/subagent_pb";
|
|
31
31
|
import { InteractionMode } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
32
32
|
import { CursorMode } from "@stigmer/protos/ai/stigmer/agentic/session/v1/enum_pb";
|
|
33
33
|
|
|
34
|
+
import type { AgentExecutionStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
34
35
|
import type { Config } from "../../config.js";
|
|
35
36
|
import type { TurnInput, TurnSink } from "../../harness/types.js";
|
|
36
|
-
import { isReinvocation } from "../../harness/turn-context.js";
|
|
37
37
|
import { toCursorImages } from "../../shared/attachment-vision.js";
|
|
38
38
|
import { emitTimingLog } from "../../shared/cold-start-timing.js";
|
|
39
39
|
import { deriveExecutionFingerprintKey } from "../../shared/approval-fingerprint.js";
|
|
40
40
|
import { isUnattendedApprovalMode } from "../../shared/approval-policy.js";
|
|
41
41
|
import { excludeAppliedFromGrants } from "../../shared/exact-apply.js";
|
|
42
42
|
import { getRunnerHitlMasterSecret } from "../../shared/fingerprint-secret.js";
|
|
43
|
-
import { newProgressCaptureState, type ProgressCaptureState, type ProgressSubstrate } from "../../shared/filereview/progress.js";
|
|
44
43
|
import { enabledToolsBySlug } from "../../shared/mcp-enabled-tools.js";
|
|
45
44
|
import { ensureHitlDir } from "../../shared/workspace/platform-dir.js";
|
|
46
45
|
import { computeAgentFingerprint, takeCachedAgent } from "./agent-session-cache.js";
|
|
47
46
|
import { buildApprovalGrants, buildApprovalState, emitCursorGrantReceipts, reconstructAdjudicatedApprovals, watchDenialLedger, type ApprovalGrant } from "./approval-state.js";
|
|
48
|
-
import {
|
|
47
|
+
import { readSidecarSnapshot } from "./cas-observations.js";
|
|
49
48
|
import { CURSOR_CAPABILITIES } from "./cursor-capabilities.js";
|
|
50
49
|
import { toCursorMcpConfig, validateMcpServerEnv } from "./cursor-mcp-config.js";
|
|
51
50
|
import { determineCursorMode, isCloudMode } from "./cursor-mode.js";
|
|
52
51
|
import { closeProxySessions } from "./http2-interceptor.js";
|
|
53
|
-
import { seededSubAgentsOf } from "./message-translator.js";
|
|
54
52
|
import { ensureLoaded as ensurePricingLoaded, resolveModelId } from "./model-pricing.js";
|
|
55
53
|
import {
|
|
56
54
|
appendStructuredOutputDirective,
|
|
57
55
|
buildPrompt,
|
|
58
56
|
primarySendCarriesImages,
|
|
59
57
|
promptCarriesStandingContext,
|
|
60
|
-
type AttachmentPromptEntry,
|
|
61
58
|
type BuildPromptInput,
|
|
62
|
-
type VisionPromptInfo,
|
|
63
59
|
} from "./prompt-builder.js";
|
|
60
|
+
import { visionPromptInfoOf } from "../../shared/prompt-sections.js";
|
|
64
61
|
import { resolveServiceTierParams } from "./service-tier.js";
|
|
65
62
|
import {
|
|
66
63
|
createAgent,
|
|
@@ -93,8 +90,6 @@ export type CursorAgentMode = "cloud" | "local";
|
|
|
93
90
|
export interface AdjudicatedRows {
|
|
94
91
|
/** Create-vs-resume, derived from the state id exactly as the runtime derives it. */
|
|
95
92
|
readonly isReinvocation: boolean;
|
|
96
|
-
/** The sub-agent rows the accumulator re-registers on a resume. */
|
|
97
|
-
readonly seededSubAgents: readonly SubAgentExecution[];
|
|
98
93
|
/** The pending-approval protos the grant builder and the reinvocation prompt render. */
|
|
99
94
|
readonly adjudicatedApprovals: PendingApproval[];
|
|
100
95
|
/** The content digest that authorizes an approved edit by its exact bytes (a sibling edit to the same file re-gates). */
|
|
@@ -107,10 +102,6 @@ export interface CursorGate {
|
|
|
107
102
|
readonly hitlDir: string;
|
|
108
103
|
readonly hitlGate: HitlGateHandle;
|
|
109
104
|
readonly approvalGrants: ApprovalGrant[] | undefined;
|
|
110
|
-
/** The pre-turn tree in capture mode, pinned before the agent runs; the boundary diffs against it. */
|
|
111
|
-
readonly baselineTree: string | undefined;
|
|
112
|
-
readonly progressSubstrate: ProgressSubstrate | undefined;
|
|
113
|
-
readonly progressState: ProgressCaptureState;
|
|
114
105
|
/** Closes the denial-ledger watcher; idempotent. */
|
|
115
106
|
readonly stopDenialWatcher: () => void;
|
|
116
107
|
/** Restores the workspace's `.cursor/hooks.json` (issue #173); the runtime removes the `.stigmer` link after it. */
|
|
@@ -158,13 +149,18 @@ export function resolveCursorMode(input: TurnInput, config: CursorAdapterConfig)
|
|
|
158
149
|
return { cursorMode, agentMode: isCloudMode(cursorMode) ? "cloud" : "local" };
|
|
159
150
|
}
|
|
160
151
|
|
|
161
|
-
/**
|
|
162
|
-
|
|
163
|
-
|
|
152
|
+
/**
|
|
153
|
+
* The adapter's own read of the adjudicated rows the runtime already turned
|
|
154
|
+
* into verdicts. Create-vs-resume is the adapter's fact about its ENGINE: a
|
|
155
|
+
* bound agent id (`threadId`, engine-minted) means the Cursor agent already
|
|
156
|
+
* holds this session's conversation, so this turn resumes it — the runtime's
|
|
157
|
+
* `isReinvocation` answers its own question and is not consulted here.
|
|
158
|
+
*/
|
|
159
|
+
export function readAdjudicatedRows(input: TurnInput, status: AgentExecutionStatus): AdjudicatedRows {
|
|
160
|
+
const reinvoked = input.threadId !== "";
|
|
164
161
|
const adjudicated = reinvoked ? reconstructAdjudicatedApprovals(input.execution.status?.messages ?? []) : undefined;
|
|
165
162
|
return {
|
|
166
163
|
isReinvocation: reinvoked,
|
|
167
|
-
seededSubAgents: seededSubAgentsOf(input.execution),
|
|
168
164
|
adjudicatedApprovals: adjudicated?.pendingApprovals ?? [],
|
|
169
165
|
adjudicatedContentDigests: adjudicated?.contentDigests ?? new Map(),
|
|
170
166
|
};
|
|
@@ -185,21 +181,6 @@ export function projectMcpConfig(input: TurnInput): ReturnType<typeof toCursorMc
|
|
|
185
181
|
return toCursorMcpConfig(input.mcp.servers);
|
|
186
182
|
}
|
|
187
183
|
|
|
188
|
-
/** The prompt-shaped projections of the runtime's attachments: the `<input_files>` entries and the vision disclosure. */
|
|
189
|
-
export function prepareAttachmentPrompt(input: TurnInput): { attachmentEntries: AttachmentPromptEntry[]; visionPromptInfo: VisionPromptInfo | undefined } {
|
|
190
|
-
const { visionImages, visionNotViewable } = input.attachments;
|
|
191
|
-
const attachmentEntries = input.attachments.results.map((a) => ({
|
|
192
|
-
path: a.relativePath,
|
|
193
|
-
...(a.renamedFrom !== undefined ? { renamedFrom: a.renamedFrom } : {}),
|
|
194
|
-
...(a.downloadUrl !== undefined ? { downloadUrl: a.downloadUrl } : {}),
|
|
195
|
-
}));
|
|
196
|
-
const visionPromptInfo =
|
|
197
|
-
visionImages.length > 0 || visionNotViewable.length > 0
|
|
198
|
-
? { inlineFilenames: visionImages.map((v) => v.filename), notViewable: visionNotViewable }
|
|
199
|
-
: undefined;
|
|
200
|
-
return { attachmentEntries, visionPromptInfo };
|
|
201
|
-
}
|
|
202
|
-
|
|
203
184
|
/**
|
|
204
185
|
* Install the HITL approval gate BEFORE resolving the agent.
|
|
205
186
|
*
|
|
@@ -216,26 +197,16 @@ export function prepareAttachmentPrompt(input: TurnInput): { attachmentEntries:
|
|
|
216
197
|
* the resumed agent's re-attempt (which carries a fresh tool-call id) is
|
|
217
198
|
* allowed through. Exact-applied writes are EXCLUDED from the grants: with no
|
|
218
199
|
* grant, a further write to that file is re-gated (the user sees every change).
|
|
219
|
-
* Capture mode
|
|
220
|
-
* before
|
|
221
|
-
*
|
|
222
|
-
*
|
|
223
|
-
* to on resume. Covers a fresh turn and the approved-irreversible resume
|
|
224
|
-
* fall-through (the agent will run and may make further edits).
|
|
200
|
+
* Capture mode is the runtime's (`harness/capture.ts`: the baseline is pinned
|
|
201
|
+
* before this adapter runs, the candidate captured after it returns); what
|
|
202
|
+
* this gate contributes is the hook's on-disk sidecar of gitignored writes,
|
|
203
|
+
* bound as the runtime's CAS observations.
|
|
225
204
|
*/
|
|
226
205
|
export async function installGate(input: TurnInput, sink: TurnSink, rows: AdjudicatedRows, streamState: TurnStreamState): Promise<CursorGate> {
|
|
227
206
|
const { executionId, sessionId, workspace, mcp, approvalDecisions, appliedToolCallIds, artifactStorage } = input;
|
|
228
|
-
const { primaryDir, gitWorkspace, captureMode
|
|
207
|
+
const { primaryDir, gitWorkspace, captureMode } = workspace;
|
|
229
208
|
const globalBypass = mcp.leases.global;
|
|
230
209
|
|
|
231
|
-
let baselineTree: string | undefined;
|
|
232
|
-
if (captureMode && primaryDir) {
|
|
233
|
-
// Pin the pre-turn tree AND author BASELINE_CAPTURED so the projection can
|
|
234
|
-
// materialize the change set (status CAPTURING) before any candidate exists.
|
|
235
|
-
// The event rides the next persist; CAPTURING does not arm the unified gate.
|
|
236
|
-
baselineTree = await captureBaselineToLedger({ status: sink.status, gitRoot: primaryDir, executionId, changeSetId, gitWorkspace });
|
|
237
|
-
}
|
|
238
|
-
|
|
239
210
|
const hitlDir = await ensureHitlDir(sessionId);
|
|
240
211
|
const grantApprovals = excludeAppliedFromGrants(rows.adjudicatedApprovals, appliedToolCallIds);
|
|
241
212
|
const approvalGrants = approvalDecisions.size > 0
|
|
@@ -295,28 +266,18 @@ export async function installGate(input: TurnInput, sink: TurnSink, rows: Adjudi
|
|
|
295
266
|
});
|
|
296
267
|
sink.setupTiming.mark("install_hitl_gate");
|
|
297
268
|
|
|
298
|
-
//
|
|
299
|
-
//
|
|
300
|
-
//
|
|
301
|
-
//
|
|
302
|
-
//
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
gitWorkspace,
|
|
306
|
-
workspaceRoot: primaryDir,
|
|
307
|
-
baselineTree,
|
|
308
|
-
executionId,
|
|
309
|
-
hitlDir,
|
|
310
|
-
storage: artifactStorage,
|
|
311
|
-
});
|
|
269
|
+
// What the hook observed touching gitignored (or, in a non-git tree, any)
|
|
270
|
+
// paths this turn — the sidecar it stages under `captureIgnored`. Bound as
|
|
271
|
+
// the runtime's CAS observations; each read is one small directory scan,
|
|
272
|
+
// and the runtime reads it at most once per progress floor and once at the
|
|
273
|
+
// boundary. Bound whenever the gate exists: without storage the runtime
|
|
274
|
+
// ignores it (a gitignored write is deny-gated then, never captured).
|
|
275
|
+
sink.bindCasObservations(() => readSidecarSnapshot(hitlDir));
|
|
312
276
|
|
|
313
277
|
return {
|
|
314
278
|
hitlDir,
|
|
315
279
|
hitlGate,
|
|
316
280
|
approvalGrants,
|
|
317
|
-
baselineTree,
|
|
318
|
-
progressSubstrate,
|
|
319
|
-
progressState: newProgressCaptureState(),
|
|
320
281
|
stopDenialWatcher,
|
|
321
282
|
removeGate: () => removeHitlGate(hitlGate),
|
|
322
283
|
};
|
|
@@ -540,7 +501,6 @@ export async function createFreshAgent(engine: CursorEngine): Promise<AgentResol
|
|
|
540
501
|
export async function buildTurnPrompt(input: TurnInput, sink: TurnSink, engine: CursorEngine, rows: AdjudicatedRows): Promise<CursorPrompt> {
|
|
541
502
|
const { executionId, blueprint, standing, attachments, workspace, approvalDecisions, appliedToolCallIds, structuredOutputSchema } = input;
|
|
542
503
|
const spec = input.execution.spec!;
|
|
543
|
-
const { attachmentEntries, visionPromptInfo } = prepareAttachmentPrompt(input);
|
|
544
504
|
const interactionMode = spec.executionConfig?.interactionMode ?? InteractionMode.UNSPECIFIED;
|
|
545
505
|
const buildFromPlan = spec.executionConfig?.buildFromPlan ?? false;
|
|
546
506
|
|
|
@@ -548,13 +508,13 @@ export async function buildTurnPrompt(input: TurnInput, sink: TurnSink, engine:
|
|
|
548
508
|
approvalDecisions,
|
|
549
509
|
instructions: blueprint.instructions,
|
|
550
510
|
userMessage: spec.message,
|
|
551
|
-
skills: input.skills,
|
|
511
|
+
skills: input.skills.root,
|
|
552
512
|
channelMessaging: input.mcp.channelMessaging,
|
|
553
513
|
subAgents: blueprint.subAgents,
|
|
554
514
|
workspaceDirs: [...workspace.dirs],
|
|
555
515
|
workspaceFileRefs: spec.workspaceFileRefs ?? [],
|
|
556
|
-
attachments:
|
|
557
|
-
vision:
|
|
516
|
+
attachments: attachments.results,
|
|
517
|
+
vision: visionPromptInfoOf(attachments),
|
|
558
518
|
downloadUrlKind: input.artifactStorage?.downloadUrlKind,
|
|
559
519
|
pendingApprovals: rows.adjudicatedApprovals,
|
|
560
520
|
appliedToolCallIds,
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The Cursor harness's stream phase — the single per-event consumption loop that
|
|
3
|
-
* turns a live Cursor SDK run into the streamed transcript
|
|
4
|
-
*
|
|
3
|
+
* turns a live Cursor SDK run into the streamed transcript and the one flag
|
|
4
|
+
* that decides how the turn goes on (the first-denial stop).
|
|
5
5
|
*
|
|
6
6
|
* Extracted from the activity entry point so that BOTH the primary turn and
|
|
7
7
|
* the two recovery retries (poisoned-handle / transport-timeout) drive the
|
|
8
8
|
* exact same code. The retries previously re-implemented a stripped "bare"
|
|
9
|
-
* loop that dropped live persist,
|
|
10
|
-
* tracking, the first-denial early stop, and correct pause handling — so a
|
|
9
|
+
* loop that dropped live persist, sub-agent tracking, the first-denial early stop, and correct pause handling — so a
|
|
11
10
|
* retry froze the UI and mis-handled a mid-retry pause. One loop removes that
|
|
12
11
|
* drift by construction.
|
|
13
12
|
*
|
|
@@ -34,11 +33,6 @@ import type { SDKMessage, InteractionUpdate } from "@cursor/sdk";
|
|
|
34
33
|
import type { TurnSink } from "../../harness/types.js";
|
|
35
34
|
import { shouldPersistStreamingStatus } from "../../shared/persist-decision.js";
|
|
36
35
|
import { approvalDenials, readDenialLedger } from "./approval-state.js";
|
|
37
|
-
import {
|
|
38
|
-
captureFileChangeProgress,
|
|
39
|
-
type ProgressCaptureState,
|
|
40
|
-
type ProgressSubstrate,
|
|
41
|
-
} from "../../shared/filereview/progress.js";
|
|
42
36
|
import type { MessageAccumulator } from "./message-translator.js";
|
|
43
37
|
import type { DeltaEnricher } from "./delta-enricher.js";
|
|
44
38
|
import type { TodoTracker } from "./todo-tracker.js";
|
|
@@ -117,9 +111,6 @@ export interface CursorTurnStreamDeps extends TurnOnDeltaDeps {
|
|
|
117
111
|
readonly todoTracker: TodoTracker;
|
|
118
112
|
readonly eventRecorder: CursorTurnEventRecorder | undefined;
|
|
119
113
|
readonly scheduler: StreamingUpdateScheduler;
|
|
120
|
-
readonly progressSubstrate: ProgressSubstrate | undefined;
|
|
121
|
-
readonly progressState: ProgressCaptureState;
|
|
122
|
-
readonly changeSetId: string;
|
|
123
114
|
/** Session HITL dir holding the denial ledger; undefined → no gate installed → no first-denial stop. */
|
|
124
115
|
readonly hitlDir: string | undefined;
|
|
125
116
|
}
|
|
@@ -178,9 +169,6 @@ export async function consumeCursorTurnStream(
|
|
|
178
169
|
deltaEnricher,
|
|
179
170
|
eventRecorder,
|
|
180
171
|
scheduler,
|
|
181
|
-
progressSubstrate,
|
|
182
|
-
progressState,
|
|
183
|
-
changeSetId,
|
|
184
172
|
hitlDir,
|
|
185
173
|
executionId,
|
|
186
174
|
state,
|
|
@@ -300,22 +288,11 @@ export async function consumeCursorTurnStream(
|
|
|
300
288
|
state.eventCount,
|
|
301
289
|
);
|
|
302
290
|
if (shouldPersist) {
|
|
303
|
-
//
|
|
304
|
-
//
|
|
305
|
-
//
|
|
306
|
-
|
|
307
|
-
//
|
|
308
|
-
// far" snapshot onto status.file_change_progress, throttled internally by
|
|
309
|
-
// the floor. Never authoritative — the turn-boundary candidate remains
|
|
310
|
-
// the reviewed diff.
|
|
311
|
-
if (progressSubstrate) {
|
|
312
|
-
await captureFileChangeProgress({
|
|
313
|
-
status,
|
|
314
|
-
changeSetId,
|
|
315
|
-
substrate: progressSubstrate,
|
|
316
|
-
state: progressState,
|
|
317
|
-
});
|
|
318
|
-
}
|
|
291
|
+
// The accumulator upserts sub-agent rows into `status.subAgentExecutions`
|
|
292
|
+
// in place (wrapped by reference at construction), so every persist
|
|
293
|
+
// already carries delegation, IN_PROGRESS included. The runtime attaches
|
|
294
|
+
// the mid-run file-change progress on this write (the chokepoint's
|
|
295
|
+
// step 2), as it does on every write.
|
|
319
296
|
// Awaited: the runtime reads the control plane's answer to this write,
|
|
320
297
|
// and a STOP must be seen at the next event boundary, not one event late.
|
|
321
298
|
await sink.requestPersist();
|
|
@@ -82,7 +82,7 @@ export async function runCursorTurn(input: TurnInput, sink: TurnSink, config: Cu
|
|
|
82
82
|
// gate so the denial watcher can write into them.
|
|
83
83
|
const streamState = newTurnStreamState();
|
|
84
84
|
const mode = resolveCursorMode(input, config);
|
|
85
|
-
const rows = readAdjudicatedRows(input);
|
|
85
|
+
const rows = readAdjudicatedRows(input, sink.status);
|
|
86
86
|
gate = await installGate(input, sink, rows, streamState);
|
|
87
87
|
if (sink.stopSignal.aborted) return (outcome = { kind: "interrupted" });
|
|
88
88
|
|
|
@@ -179,6 +179,10 @@ function disposeEngine(engine: CursorEngine, sessionId: string, outcome: TurnOut
|
|
|
179
179
|
case "cancelled":
|
|
180
180
|
case "awaiting_approval":
|
|
181
181
|
case "interrupted":
|
|
182
|
+
// The Cursor SDK has no tool-round budget, so this adapter never ends a
|
|
183
|
+
// turn `tool_call_limit`; were it to, the engine would be parked like any
|
|
184
|
+
// other non-failed exit (the conversation continues on the next message).
|
|
185
|
+
case "tool_call_limit":
|
|
182
186
|
park();
|
|
183
187
|
return;
|
|
184
188
|
case "failed":
|