@stigmer/runner 3.15.1 → 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
|
@@ -22,7 +22,7 @@ const SESSION_ID = "ses-01test";
|
|
|
22
22
|
const SESSION_BRANCH = `stigmer/${SESSION_ID}`;
|
|
23
23
|
|
|
24
24
|
// The shared proto-backed writer — the same implementation the Cursor harness
|
|
25
|
-
// wires in, and upsert-compatible with the deep-agent
|
|
25
|
+
// wires in, and upsert-compatible with the deep-agent V3StatusBuilder.
|
|
26
26
|
function makeStatusBuilder(): ExecutionStatusWriter {
|
|
27
27
|
return statusProtoWriter(create(AgentExecutionStatusSchema, {}));
|
|
28
28
|
}
|
|
@@ -185,11 +185,14 @@ describe("WriteBackCoordinator", () => {
|
|
|
185
185
|
|
|
186
186
|
// ── Full cycle ──────────────────────────────────────────────────────
|
|
187
187
|
|
|
188
|
+
// Every cycle below runs through `finalize()`, the coordinator's one entry
|
|
189
|
+
// point since S3 M2b (Q-M1-1; the per-file `onFileModified` went with the
|
|
190
|
+
// native stream loop that called it). The mechanics it pins are the same.
|
|
188
191
|
it("performs full cycle on the SESSION branch: branch -> commit -> push -> PR", async () => {
|
|
189
192
|
const backend = mockWorkspaceBackend();
|
|
190
193
|
const coord = makeCoordinator({ sb, backend });
|
|
191
194
|
|
|
192
|
-
await coord.
|
|
195
|
+
await coord.finalize();
|
|
193
196
|
|
|
194
197
|
const wbs = sb.currentStatus.workspaceWriteBacks;
|
|
195
198
|
expect(wbs).toHaveLength(1);
|
|
@@ -213,7 +216,7 @@ describe("WriteBackCoordinator", () => {
|
|
|
213
216
|
const backend = mockWorkspaceBackend();
|
|
214
217
|
const coord = makeCoordinator({ sb, backend, executionId: "exec-12345678rest" });
|
|
215
218
|
|
|
216
|
-
await coord.
|
|
219
|
+
await coord.finalize();
|
|
217
220
|
|
|
218
221
|
const commands = (backend.execute as ReturnType<typeof vi.fn>).mock.calls
|
|
219
222
|
.map((c: any) => c[0] as string);
|
|
@@ -233,19 +236,19 @@ describe("WriteBackCoordinator", () => {
|
|
|
233
236
|
});
|
|
234
237
|
const coord = makeCoordinator({ sb, backend });
|
|
235
238
|
|
|
236
|
-
await coord.
|
|
239
|
+
await coord.finalize();
|
|
237
240
|
|
|
238
241
|
expect(sb.currentStatus.workspaceWriteBacks).toHaveLength(0);
|
|
239
242
|
});
|
|
240
243
|
|
|
241
244
|
// ── Session-branch idempotency ──────────────────────────────────────
|
|
242
245
|
|
|
243
|
-
it("
|
|
246
|
+
it("a second finalize commits to the existing branch without re-creating it", async () => {
|
|
244
247
|
const backend = mockWorkspaceBackend();
|
|
245
248
|
const coord = makeCoordinator({ sb, backend });
|
|
246
249
|
|
|
247
|
-
await coord.
|
|
248
|
-
await coord.
|
|
250
|
+
await coord.finalize();
|
|
251
|
+
await coord.finalize();
|
|
249
252
|
|
|
250
253
|
const commands = (backend.execute as ReturnType<typeof vi.fn>).mock.calls
|
|
251
254
|
.map((c: any) => c[0] as string);
|
|
@@ -263,7 +266,7 @@ describe("WriteBackCoordinator", () => {
|
|
|
263
266
|
});
|
|
264
267
|
const coord = makeCoordinator({ sb, backend, executionId: "exec-turn2" });
|
|
265
268
|
|
|
266
|
-
await coord.
|
|
269
|
+
await coord.finalize();
|
|
267
270
|
|
|
268
271
|
const commands = (backend.execute as ReturnType<typeof vi.fn>).mock.calls
|
|
269
272
|
.map((c: any) => c[0] as string);
|
|
@@ -278,7 +281,7 @@ describe("WriteBackCoordinator", () => {
|
|
|
278
281
|
});
|
|
279
282
|
const coord = makeCoordinator({ sb, backend });
|
|
280
283
|
|
|
281
|
-
await coord.
|
|
284
|
+
await coord.finalize();
|
|
282
285
|
|
|
283
286
|
const commands = (backend.execute as ReturnType<typeof vi.fn>).mock.calls
|
|
284
287
|
.map((c: any) => c[0] as string);
|
|
@@ -296,7 +299,7 @@ describe("WriteBackCoordinator", () => {
|
|
|
296
299
|
});
|
|
297
300
|
const coord = makeCoordinator({ sb, backend });
|
|
298
301
|
|
|
299
|
-
await coord.
|
|
302
|
+
await coord.finalize();
|
|
300
303
|
|
|
301
304
|
const commands = (backend.execute as ReturnType<typeof vi.fn>).mock.calls
|
|
302
305
|
.map((c: any) => c[0] as string);
|
|
@@ -312,7 +315,7 @@ describe("WriteBackCoordinator", () => {
|
|
|
312
315
|
});
|
|
313
316
|
const coord = makeCoordinator({ sb });
|
|
314
317
|
|
|
315
|
-
await coord.
|
|
318
|
+
await coord.finalize();
|
|
316
319
|
|
|
317
320
|
const wbs = sb.currentStatus.workspaceWriteBacks;
|
|
318
321
|
expect(wbs[0].pullRequestNumber).toBe(7);
|
|
@@ -328,7 +331,7 @@ describe("WriteBackCoordinator", () => {
|
|
|
328
331
|
const calls = mockGithubApi();
|
|
329
332
|
const coord = makeCoordinator({ sb, githubToken: "ghp_plumbed_token" });
|
|
330
333
|
|
|
331
|
-
await coord.
|
|
334
|
+
await coord.finalize();
|
|
332
335
|
|
|
333
336
|
expect(calls.length).toBeGreaterThan(0);
|
|
334
337
|
for (const call of calls) {
|
|
@@ -350,7 +353,7 @@ describe("WriteBackCoordinator", () => {
|
|
|
350
353
|
});
|
|
351
354
|
const coord = makeCoordinator({ sb, backend });
|
|
352
355
|
|
|
353
|
-
await coord.
|
|
356
|
+
await coord.finalize();
|
|
354
357
|
|
|
355
358
|
const wbs = sb.currentStatus.workspaceWriteBacks;
|
|
356
359
|
expect(wbs).toHaveLength(1);
|
|
@@ -364,7 +367,7 @@ describe("WriteBackCoordinator", () => {
|
|
|
364
367
|
mockGithubApi({ createStatus: 403 });
|
|
365
368
|
const coord = makeCoordinator({ sb });
|
|
366
369
|
|
|
367
|
-
await coord.
|
|
370
|
+
await coord.finalize();
|
|
368
371
|
|
|
369
372
|
const wbs = sb.currentStatus.workspaceWriteBacks;
|
|
370
373
|
expect(wbs).toHaveLength(1);
|
|
@@ -381,7 +384,7 @@ describe("WriteBackCoordinator", () => {
|
|
|
381
384
|
const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {});
|
|
382
385
|
const coord = makeCoordinator({ sb, githubToken: "" });
|
|
383
386
|
|
|
384
|
-
await coord.
|
|
387
|
+
await coord.finalize();
|
|
385
388
|
|
|
386
389
|
const wbs = sb.currentStatus.workspaceWriteBacks;
|
|
387
390
|
expect(wbs).toHaveLength(1);
|
|
@@ -391,9 +394,9 @@ describe("WriteBackCoordinator", () => {
|
|
|
391
394
|
warnSpy.mockRestore();
|
|
392
395
|
});
|
|
393
396
|
|
|
394
|
-
// ── finalize
|
|
397
|
+
// ── finalize on a fresh coordinator ─────────────────────────────────
|
|
395
398
|
|
|
396
|
-
it("finalize
|
|
399
|
+
it("finalize commits, pushes and opens the PR for the entry's uncommitted changes", async () => {
|
|
397
400
|
const coord = makeCoordinator({ sb });
|
|
398
401
|
|
|
399
402
|
await coord.finalize();
|
|
@@ -403,50 +406,6 @@ describe("WriteBackCoordinator", () => {
|
|
|
403
406
|
WorkspaceWriteBackPhase.WORKSPACE_WRITE_BACK_PR_CREATED,
|
|
404
407
|
);
|
|
405
408
|
});
|
|
406
|
-
|
|
407
|
-
it("resolves path to single entry without prefix matching", async () => {
|
|
408
|
-
const coord = makeCoordinator({ sb });
|
|
409
|
-
|
|
410
|
-
await coord.onFileModified("any/path/file.ts");
|
|
411
|
-
|
|
412
|
-
expect(sb.currentStatus.workspaceWriteBacks).toHaveLength(1);
|
|
413
|
-
});
|
|
414
|
-
|
|
415
|
-
it("resolves path to correct entry in multi-entry workspace", async () => {
|
|
416
|
-
const coord = makeCoordinator({
|
|
417
|
-
sb,
|
|
418
|
-
provisionResults: [
|
|
419
|
-
makeProvisionResult({ entryName: "frontend", rootDir: "/workspace/frontend" }),
|
|
420
|
-
makeProvisionResult({ entryName: "backend", rootDir: "/workspace/backend" }),
|
|
421
|
-
],
|
|
422
|
-
workspaceEntries: [
|
|
423
|
-
makeWorkspaceEntry("frontend"),
|
|
424
|
-
makeWorkspaceEntry("backend"),
|
|
425
|
-
],
|
|
426
|
-
});
|
|
427
|
-
|
|
428
|
-
await coord.onFileModified("frontend/src/app.tsx");
|
|
429
|
-
|
|
430
|
-
const wbs = sb.currentStatus.workspaceWriteBacks;
|
|
431
|
-
expect(wbs).toHaveLength(1);
|
|
432
|
-
expect(wbs[0].workspaceEntryName).toBe("frontend");
|
|
433
|
-
});
|
|
434
|
-
|
|
435
|
-
it("ignores paths outside eligible entries in multi-entry mode", async () => {
|
|
436
|
-
const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {});
|
|
437
|
-
const coord = makeCoordinator({
|
|
438
|
-
sb,
|
|
439
|
-
provisionResults: [
|
|
440
|
-
makeProvisionResult({ entryName: "fe", rootDir: "/workspace/fe" }),
|
|
441
|
-
makeProvisionResult({ entryName: "be", rootDir: "/workspace/be" }),
|
|
442
|
-
],
|
|
443
|
-
workspaceEntries: [makeWorkspaceEntry("fe"), makeWorkspaceEntry("be")],
|
|
444
|
-
});
|
|
445
|
-
|
|
446
|
-
await coord.onFileModified("unknown/file.ts");
|
|
447
|
-
expect(sb.currentStatus.workspaceWriteBacks).toHaveLength(0);
|
|
448
|
-
warnSpy.mockRestore();
|
|
449
|
-
});
|
|
450
409
|
});
|
|
451
410
|
|
|
452
411
|
describe("parseGithubRepo", () => {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Local workspace provisioning for a harness turn.
|
|
3
3
|
*
|
|
4
|
-
* Harness-agnostic: the
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Harness-agnostic: the turn runtime's workspace phase, serving both
|
|
5
|
+
* adapters (the native orchestrator's twin, `provisionWorkspace`, retired
|
|
6
|
+
* with it at S3 M2b; Q-S3-8 carried its one difference). Agents run LOCAL
|
|
7
7
|
* (cloud is disabled — see execute-cursor/cursor-mode.ts), so the runner
|
|
8
8
|
* must clone git-repo workspace entries itself and mount local-path entries
|
|
9
9
|
* before the agent runs. Cloud agents previously cloned git repos
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
* - Created per turn, under the workspace turn lock — the link is a
|
|
17
17
|
* working-tree mutation, and re-pointing it while another session's turn is
|
|
18
18
|
* running on a shared tree would redirect that turn's reads mid-flight.
|
|
19
|
-
*
|
|
20
|
-
* acquisition)
|
|
21
|
-
* lock
|
|
19
|
+
* the turn runtime creates it in its skill and attachment phases (which
|
|
20
|
+
* run after lock acquisition), for both harnesses; until S3 M2a the native
|
|
21
|
+
* orchestrator created it unconditionally right after the lock.
|
|
22
22
|
* - Removed at turn end ({@link removeStigmerSymlink} in the activity's
|
|
23
23
|
* cleanup), so a real repo is left untouched once the turn ends; a
|
|
24
24
|
* multi-turn session recreates the link on the next turn.
|
|
@@ -14,16 +14,18 @@
|
|
|
14
14
|
* already exists (locally, or on the remote after a sandbox re-provision), and
|
|
15
15
|
* an already-open PR for the branch is adopted instead of re-created.
|
|
16
16
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
17
|
+
* It runs ONCE per turn, at the end: the turn runtime calls `finalize()`
|
|
18
|
+
* (`harness/run-turn.ts`) — in capture mode on the APPROVED tree after the
|
|
19
|
+
* review decisions reconcile, so speculative mid-turn edits never reach
|
|
20
|
+
* GitHub; on a non-capture git turn on whatever the turn left in the tree.
|
|
21
|
+
* Until S3 M2b (Q-M1-1) an incremental path also existed — `onFileModified`,
|
|
22
|
+
* a commit-and-push per file-modifying tool call on non-capture turns — and
|
|
23
|
+
* was reachable in no supported posture (every git workspace with artifact
|
|
24
|
+
* storage is a capture workspace, `shared/filereview/capture.ts`
|
|
25
|
+
* `deriveCaptureMode`); it went with the native stream loop that called it.
|
|
25
26
|
*
|
|
26
|
-
*
|
|
27
|
+
* Entries are written back in sequence, one cycle each; nothing here runs
|
|
28
|
+
* concurrently with itself.
|
|
27
29
|
*/
|
|
28
30
|
|
|
29
31
|
import { create } from "@bufbuild/protobuf";
|
|
@@ -81,7 +83,6 @@ export class WriteBackCoordinator {
|
|
|
81
83
|
|
|
82
84
|
private readonly eligible = new Map<string, EligibleEntry>();
|
|
83
85
|
private readonly state = new Map<string, EntryState>();
|
|
84
|
-
private readonly locks = new Map<string, Promise<void>>();
|
|
85
86
|
|
|
86
87
|
constructor(opts: {
|
|
87
88
|
statusWriter: ExecutionStatusWriter;
|
|
@@ -109,38 +110,15 @@ export class WriteBackCoordinator {
|
|
|
109
110
|
}
|
|
110
111
|
|
|
111
112
|
/**
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
|
|
116
|
-
async onFileModified(path: string): Promise<void> {
|
|
117
|
-
try {
|
|
118
|
-
const entryName = this.resolveEntry(path);
|
|
119
|
-
if (!entryName) return;
|
|
120
|
-
|
|
121
|
-
await this.withLock(entryName, () =>
|
|
122
|
-
this.writeBackEntry(entryName),
|
|
123
|
-
);
|
|
124
|
-
} catch (err) {
|
|
125
|
-
console.warn(
|
|
126
|
-
`[WriteBack] execution=${this.executionId} — ` +
|
|
127
|
-
`onFileModified error for '${path}': ${err}`,
|
|
128
|
-
);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Commits and pushes every eligible workspace entry's remaining uncommitted
|
|
134
|
-
* changes. In capture mode this is THE write-back — invoked once on the
|
|
135
|
-
* approved tree after review reconcile; on legacy turns it is the
|
|
136
|
-
* post-stream safety net.
|
|
113
|
+
* Commits and pushes every eligible workspace entry's uncommitted changes —
|
|
114
|
+
* THE write-back, once per turn (see the header). An entry's failure is
|
|
115
|
+
* recorded on its own write-back row and logged; it never throws, and it
|
|
116
|
+
* never stops the next entry.
|
|
137
117
|
*/
|
|
138
118
|
async finalize(): Promise<void> {
|
|
139
119
|
for (const entryName of this.eligible.keys()) {
|
|
140
120
|
try {
|
|
141
|
-
await this.
|
|
142
|
-
this.writeBackEntry(entryName),
|
|
143
|
-
);
|
|
121
|
+
await this.writeBackEntry(entryName);
|
|
144
122
|
} catch (err) {
|
|
145
123
|
console.warn(
|
|
146
124
|
`[WriteBack] execution=${this.executionId} entry=${entryName} — ` +
|
|
@@ -199,21 +177,6 @@ export class WriteBackCoordinator {
|
|
|
199
177
|
}
|
|
200
178
|
}
|
|
201
179
|
|
|
202
|
-
// ── Path Resolution ─────────────────────────────────────────────────
|
|
203
|
-
|
|
204
|
-
private resolveEntry(path: string): string | null {
|
|
205
|
-
if (this.eligible.size === 0) return null;
|
|
206
|
-
if (this.eligible.size === 1) return this.eligible.keys().next().value!;
|
|
207
|
-
|
|
208
|
-
const normalized = path.replace(/^\/+/, "");
|
|
209
|
-
for (const entryName of this.eligible.keys()) {
|
|
210
|
-
if (normalized.startsWith(entryName + "/") || normalized === entryName) {
|
|
211
|
-
return entryName;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return null;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
180
|
// ── Core Write-Back Cycle ───────────────────────────────────────────
|
|
218
181
|
|
|
219
182
|
/**
|
|
@@ -506,17 +469,6 @@ export class WriteBackCoordinator {
|
|
|
506
469
|
this.statusWriter.addWriteBack(wb);
|
|
507
470
|
}
|
|
508
471
|
|
|
509
|
-
// ── Concurrency ─────────────────────────────────────────────────────
|
|
510
|
-
|
|
511
|
-
private async withLock(
|
|
512
|
-
entryName: string,
|
|
513
|
-
fn: () => Promise<void>,
|
|
514
|
-
): Promise<void> {
|
|
515
|
-
const existing = this.locks.get(entryName) ?? Promise.resolve();
|
|
516
|
-
const next = existing.then(fn, fn);
|
|
517
|
-
this.locks.set(entryName, next);
|
|
518
|
-
await next;
|
|
519
|
-
}
|
|
520
472
|
}
|
|
521
473
|
|
|
522
474
|
// ── Helpers ───────────────────────────────────────────────────────────
|
package/src/tools/index.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Native built-in tools for the deep-agent harness.
|
|
3
3
|
*
|
|
4
4
|
* These are Stigmer-authored capabilities appended to the agent's tool list
|
|
5
|
-
* in execute-deep-agent/setup.ts (and mirrored for sub-agents in
|
|
5
|
+
* in execute-deep-agent/turn-setup.ts (and mirrored for sub-agents in
|
|
6
6
|
* subagent-transformer.ts) — distinct from deepagents' backend tools
|
|
7
7
|
* (ls/read_file/execute/…) and from MCP tools, which arrive via the
|
|
8
8
|
* connection layer.
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cursor adapter over the harness-agnostic capture-mode orchestration
|
|
3
|
-
* ({@link ../../shared/filereview/capture.js}).
|
|
4
|
-
*
|
|
5
|
-
* The substrate (git snapshot/restore) and the orchestration (baseline/candidate/
|
|
6
|
-
* reconcile authoring) live in `shared/filereview/` so the Cursor and deep-agent
|
|
7
|
-
* harnesses author IDENTICAL ledger entries. This adapter binds the Cursor
|
|
8
|
-
* specifics:
|
|
9
|
-
* - `harnessId = "cursor"` (stamped on the BASELINE payload the projection reads);
|
|
10
|
-
* - the Cursor gate files written into the workspace, excluded from the captured
|
|
11
|
-
* diff (`CURSOR_RUNNER_OWNED_PATHS`);
|
|
12
|
-
* - stamping the streamed file-edit transcript rows that flowed this turn with
|
|
13
|
-
* the change set id (`stampFlowedFileEditRows`) — the rows stay visible as
|
|
14
|
-
* observational/audit records at their transcript positions, while
|
|
15
|
-
* `file_change_sets` remains the single DECISION surface.
|
|
16
|
-
*
|
|
17
|
-
* The resume-time reconcile is NOT here since S2 M2: the turn runtime's
|
|
18
|
-
* `reconcileReinvocation` (`harness/turn-context.ts`) calls the shared
|
|
19
|
-
* reconcile directly under {@link CURSOR_FILE_REVIEW_IDENTITY}, the one
|
|
20
|
-
* export that carries the two Cursor facts it needs. The two capture
|
|
21
|
-
* functions keep their original signatures so the activity wiring (index.ts)
|
|
22
|
-
* and the cutover tests are unchanged.
|
|
23
|
-
*/
|
|
24
|
-
import type { AgentMessage } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
|
|
25
|
-
import type { AgentExecutionStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
26
|
-
import type { TurnCommandProvenance } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/filereview_pb";
|
|
27
|
-
import { type ProgressSubstrate } from "../../shared/filereview/progress.js";
|
|
28
|
-
import type { GitSubstrateChange as GitCapturedChange } from "../../shared/filereview/git-substrate.js";
|
|
29
|
-
import type { ArtifactStorage } from "../../shared/artifact-storage.js";
|
|
30
|
-
import type { FileReviewIdentity } from "../../harness/capabilities.js";
|
|
31
|
-
/**
|
|
32
|
-
* The two facts the runtime's resume-time reconcile needs from this harness
|
|
33
|
-
* (`harness/turn-context.ts` `reconcileReinvocation`): the same id and
|
|
34
|
-
* exclude list the capture functions below stamp and apply, so the baseline a
|
|
35
|
-
* turn authors and the reconcile a resume runs agree by construction.
|
|
36
|
-
*/
|
|
37
|
-
export declare const CURSOR_FILE_REVIEW_IDENTITY: FileReviewIdentity;
|
|
38
|
-
export { deriveCaptureMode } from "../../shared/filereview/capture.js";
|
|
39
|
-
/**
|
|
40
|
-
* Turn start: pin the pre-turn working tree behind the baseline ref and author
|
|
41
|
-
* BASELINE_CAPTURED (harnessId "cursor"). Returns the baseline tree sha for the
|
|
42
|
-
* turn-end diff.
|
|
43
|
-
*/
|
|
44
|
-
export declare function captureBaselineToLedger(opts: {
|
|
45
|
-
readonly status: AgentExecutionStatus;
|
|
46
|
-
readonly gitRoot: string;
|
|
47
|
-
readonly executionId: string;
|
|
48
|
-
readonly changeSetId: string;
|
|
49
|
-
/** True (default) for a git work tree; false for a CAS-only non-git workspace. */
|
|
50
|
-
readonly gitWorkspace?: boolean;
|
|
51
|
-
}): Promise<string>;
|
|
52
|
-
/**
|
|
53
|
-
* Turn end: capture the change set + author CANDIDATE_CAPTURED, then stamp the
|
|
54
|
-
* streamed file-edit rows that flowed this turn with the change set id — the
|
|
55
|
-
* rows stay visible in place as observational records while `file_change_sets`
|
|
56
|
-
* remains the single decision surface. The working tree is LEFT applied
|
|
57
|
-
* (Cursor parity).
|
|
58
|
-
*
|
|
59
|
-
* The change set is HYBRID (git tree) or CAS-only (non-git): the hook-staged
|
|
60
|
-
* writes from the cas-observations sidecar this turn ({@link readCasObservations})
|
|
61
|
-
* — the Cursor analog of deep-agent's `buildCasTurnCaptures` — composed with the
|
|
62
|
-
* git-tracked diff when `gitWorkspace`. Non-secret staged paths become
|
|
63
|
-
* `GIT_IGNORED_CAPTURED` (git tree) or `NON_GIT_CAS` (non-git) CAS captures
|
|
64
|
-
* (before-bytes from the sidecar, after-bytes re-read from disk);
|
|
65
|
-
* secret-blocked paths become content-less `DIFF_UNREVIEWABLE` entries. The
|
|
66
|
-
* boundary re-runs {@link partitionIgnoredPathsBySecret} as a fail-closed
|
|
67
|
-
* backstop, so a secret that ever slipped into the captured set still has its
|
|
68
|
-
* bytes withheld from durable storage.
|
|
69
|
-
*
|
|
70
|
-
* `deniedTokens` are the identities the hook gated this turn (shell/MCP, or a
|
|
71
|
-
* secret-like delete — non-secret CAS deletes flow since issue #303). A streamed
|
|
72
|
-
* file-edit row whose identity is in that set is left for the deny-gate
|
|
73
|
-
* reconcile path — it did NOT flow. A flowed gitignored write or delete is NOT
|
|
74
|
-
* in that set (the hook allowed it), so it is stamped like any other flowed
|
|
75
|
-
* edit and its captured delta surfaces as a CAS entry in the set.
|
|
76
|
-
*
|
|
77
|
-
* `hitlDir`/`storage` are omitted only by callers with no artifact storage
|
|
78
|
-
* (captureIgnored off); the CAS half is then skipped and this is a git-only
|
|
79
|
-
* capture exactly as before.
|
|
80
|
-
*
|
|
81
|
-
* Mutates `messages` and `status` in place. Returns the captured git changes.
|
|
82
|
-
*/
|
|
83
|
-
export declare function captureTurnToLedger(opts: {
|
|
84
|
-
readonly status: AgentExecutionStatus;
|
|
85
|
-
readonly gitRoot: string;
|
|
86
|
-
readonly executionId: string;
|
|
87
|
-
readonly changeSetId: string;
|
|
88
|
-
readonly baselineTree: string;
|
|
89
|
-
readonly messages: AgentMessage[];
|
|
90
|
-
readonly deniedTokens: ReadonlySet<string>;
|
|
91
|
-
readonly hitlDir?: string;
|
|
92
|
-
readonly storage?: ArtifactStorage;
|
|
93
|
-
/**
|
|
94
|
-
* Sub-agent tool-call ids that existed BEFORE this turn's stream (the seeded
|
|
95
|
-
* prior sub-agents). Sub-agent edit rows created this turn are stamped with the
|
|
96
|
-
* parent change set id; rows in this set are skipped so a resume never
|
|
97
|
-
* re-stamps a prior turn's sub-agent rows. Omit when there are no prior
|
|
98
|
-
* sub-agents.
|
|
99
|
-
*/
|
|
100
|
-
readonly priorSubAgentToolCallIds?: ReadonlySet<string>;
|
|
101
|
-
/**
|
|
102
|
-
* True (default) for a git work tree — the candidate is the git diff composed
|
|
103
|
-
* with the gitignored CAS captures (`GIT_IGNORED_CAPTURED`). False for a non-git
|
|
104
|
-
* workspace (Slice 2c): there is no git diff, so the whole change set is the CAS
|
|
105
|
-
* captures the hook staged for EVERY touched path (`NON_GIT_CAS`).
|
|
106
|
-
*/
|
|
107
|
-
readonly gitWorkspace?: boolean;
|
|
108
|
-
/**
|
|
109
|
-
* The approved-command turn facts (DD-28), derived by the caller from the
|
|
110
|
-
* turn's tool calls ({@link ../command-provenance.js}). Present only when the
|
|
111
|
-
* turn qualifies; carried verbatim to the CANDIDATE event.
|
|
112
|
-
*/
|
|
113
|
-
readonly commandProvenance?: TurnCommandProvenance;
|
|
114
|
-
}): Promise<readonly GitCapturedChange[]>;
|
|
115
|
-
/**
|
|
116
|
-
* Choose the mid-run progress substrate for this turn's workspace shape (DD-32 /
|
|
117
|
-
* DD-33), returning `undefined` when there is nothing to observe (not capture
|
|
118
|
-
* mode, or no workspace). Built ONCE per turn — the substrate owns its own
|
|
119
|
-
* short-circuit cache across the loop's persists; the floor lives in the caller's
|
|
120
|
-
* `ProgressCaptureState`. The live count and the turn-boundary reviewed set agree
|
|
121
|
-
* by construction: the git slice binds the SAME `CURSOR_RUNNER_OWNED_PATHS`
|
|
122
|
-
* exclusion {@link captureTurnToLedger} uses, and the CAS slice reads the SAME
|
|
123
|
-
* hook sidecar ({@link readCasObservations}) the boundary reads.
|
|
124
|
-
*
|
|
125
|
-
* - git tree, no storage -> git substrate only (tracked-file `--numstat`);
|
|
126
|
-
* - git tree, storage (HYBRID) -> git + CAS (the gitignored writes the hook staged);
|
|
127
|
-
* - non-git workspace -> CAS only (every tool-mediated write is CAS-staged).
|
|
128
|
-
*
|
|
129
|
-
* The CAS slice needs the hook sidecar, which exists only when `captureIgnored`
|
|
130
|
-
* is on (storage configured). A non-git capture already required storage
|
|
131
|
-
* (`deriveCaptureMode`), so its sidecar is always present; a git tree with no
|
|
132
|
-
* storage simply gets the git-only substrate (parity with the pre-DD-33 behavior).
|
|
133
|
-
*/
|
|
134
|
-
export declare function buildCursorProgressSubstrate(opts: {
|
|
135
|
-
readonly captureMode: boolean;
|
|
136
|
-
readonly gitWorkspace: boolean;
|
|
137
|
-
readonly workspaceRoot: string | undefined;
|
|
138
|
-
readonly baselineTree: string | undefined;
|
|
139
|
-
readonly executionId: string;
|
|
140
|
-
readonly hitlDir: string | undefined;
|
|
141
|
-
readonly storage: ArtifactStorage | undefined;
|
|
142
|
-
}): ProgressSubstrate | undefined;
|