@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
package/dist/harness/types.d.ts
CHANGED
|
@@ -54,8 +54,14 @@
|
|
|
54
54
|
* - No persist cadence. The runtime's chokepoint is single-flight and
|
|
55
55
|
* unconditional at settle; WHEN a streaming turn asks for a write is the
|
|
56
56
|
* adapter's (`shared/persist-decision.ts` over its own dirty flags, since
|
|
57
|
-
* what counts as a discrete change is engine knowledge)
|
|
58
|
-
*
|
|
57
|
+
* what counts as a discrete change is engine knowledge). Revisited with
|
|
58
|
+
* both loops in view at S3 M4 and kept (Q-S3-13): the cadence RULE is
|
|
59
|
+
* shared, the timing is the engine's.
|
|
60
|
+
* - No capture. The file-review capture is the runtime's whole
|
|
61
|
+
* (`harness/capture.ts`): the baseline before `runTurn`, the candidate
|
|
62
|
+
* after it, the stamp, the review decision. The one capture fact an
|
|
63
|
+
* adapter holds — what its engine observed touching CAS-owned paths — it
|
|
64
|
+
* binds through `TurnSink.bindCasObservations`.
|
|
59
65
|
*
|
|
60
66
|
* Module shape follows `shared/checkpointer/`: `types.ts`, `capabilities.ts`,
|
|
61
67
|
* `registry.ts`, no barrel.
|
|
@@ -80,6 +86,7 @@ import type { EffectiveThinkingMode } from "../shared/thinking-mode.js";
|
|
|
80
86
|
import type { SenderIdentity } from "../shared/sender-identity.js";
|
|
81
87
|
import type { DeclaredPreferencesContent } from "../shared/declared-preferences.js";
|
|
82
88
|
import type { RecalledMemoriesContent } from "../shared/recalled-memories.js";
|
|
89
|
+
import type { CasTouchedReader } from "../shared/filereview/cas-touched.js";
|
|
83
90
|
import type { HarnessCapabilities } from "./capabilities.js";
|
|
84
91
|
/**
|
|
85
92
|
* One harness, as the runtime sees it. ONE adapter object exists per worker
|
|
@@ -181,6 +188,20 @@ export interface TurnMcp {
|
|
|
181
188
|
readonly leases: ActiveLeases;
|
|
182
189
|
readonly policies: ReadonlyMap<string, MergedToolPolicy>;
|
|
183
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* The mounted skills (phase 5), each under the session's platform dir and
|
|
193
|
+
* reachable from the workspace through its `.stigmer` link; the harness
|
|
194
|
+
* renders them into its prompt shapes. Resolved per OWNER, because a
|
|
195
|
+
* sub-agent's skills are its own prompt's, not the root's: the root's are
|
|
196
|
+
* `blueprint.mergedSkillRefs` (agent plus session), a sub-agent's are its
|
|
197
|
+
* `skillRefs` on the blueprint, keyed by the sub-agent's name (the key its
|
|
198
|
+
* compiler uses). A sub-agent with no skills has no entry. Empty for a
|
|
199
|
+
* harness whose `capabilities.subAgents` is false.
|
|
200
|
+
*/
|
|
201
|
+
export interface TurnSkills {
|
|
202
|
+
readonly root: readonly SkillMetadata[];
|
|
203
|
+
readonly bySubAgent: ReadonlyMap<string, readonly SkillMetadata[]>;
|
|
204
|
+
}
|
|
184
205
|
/** The turn's explicit inputs (phase 5b), resolved into the workspace with the vision facts derived once. */
|
|
185
206
|
export interface TurnAttachments {
|
|
186
207
|
readonly results: readonly ResolvedAttachment[];
|
|
@@ -227,9 +248,13 @@ export interface TurnStandingContext {
|
|
|
227
248
|
* `engine-minted` harness's first turn (nothing minted yet) and the id the
|
|
228
249
|
* adapter bound through {@link TurnSink.bindHarnessState} on every later
|
|
229
250
|
* invocation; the runtime-minted id on every turn of a `deterministic`
|
|
230
|
-
* harness. An adapter derives create-vs-resume from it and its
|
|
231
|
-
*
|
|
232
|
-
*
|
|
251
|
+
* harness. An adapter derives create-vs-resume for its ENGINE from it and its
|
|
252
|
+
* own state; the runtime derives its own reinvocation fact (the seed, the
|
|
253
|
+
* reconcile) in `turn-context.ts`'s `isReinvocation`, one arm per
|
|
254
|
+
* `stateIdSource`. The contract carries no flag because the two readings
|
|
255
|
+
* answer different questions ("does the engine hold state for this session"
|
|
256
|
+
* vs "does this execution have a transcript") and one name over two meanings
|
|
257
|
+
* would be the divergence a contract exists to prevent.
|
|
233
258
|
*
|
|
234
259
|
* Adapter-only facts (the Cursor mode, the service-tier params, the seeded
|
|
235
260
|
* sub-agent rows) are read by the adapter from these records, never resolved
|
|
@@ -260,8 +285,7 @@ export interface TurnInput extends NormalizedActivityInput {
|
|
|
260
285
|
readonly environment: TurnEnvironment;
|
|
261
286
|
readonly workspace: TurnWorkspace;
|
|
262
287
|
readonly mcp: TurnMcp;
|
|
263
|
-
|
|
264
|
-
readonly skills: readonly SkillMetadata[];
|
|
288
|
+
readonly skills: TurnSkills;
|
|
265
289
|
readonly attachments: TurnAttachments;
|
|
266
290
|
/** Approved whole-file writes the runtime applied itself this turn (exact-apply); the harness issues no grant for them. */
|
|
267
291
|
readonly appliedToolCallIds: ReadonlySet<string>;
|
|
@@ -281,11 +305,10 @@ export interface TurnInput extends NormalizedActivityInput {
|
|
|
281
305
|
* the adapter appends the engine's transcript rows (assistant messages,
|
|
282
306
|
* tool-call rows and their approval status, sub-agent rows, todos); the
|
|
283
307
|
* runtime writes the phase, the terminal system messages, `streamingUsage`,
|
|
284
|
-
* artifacts, write-backs
|
|
285
|
-
*
|
|
286
|
-
*
|
|
287
|
-
*
|
|
288
|
-
* says so.)
|
|
308
|
+
* artifacts, write-backs, `fileChangeProgress`, the file-review ledger
|
|
309
|
+
* events and the change-set stamp on a flowed edit row (S3 M4,
|
|
310
|
+
* `harness/capture.ts`). An adapter never writes a phase or a terminal copy:
|
|
311
|
+
* those are Temporal semantics the runtime owns once.
|
|
289
312
|
*/
|
|
290
313
|
export interface TurnSink {
|
|
291
314
|
/**
|
|
@@ -368,6 +391,25 @@ export interface TurnSink {
|
|
|
368
391
|
* that error and executes nothing further.
|
|
369
392
|
*/
|
|
370
393
|
bindHarnessState(harnessStateId: string): Promise<void>;
|
|
394
|
+
/**
|
|
395
|
+
* What the engine observed touching CAS-owned paths this turn — gitignored
|
|
396
|
+
* paths in a git tree, every path in a non-git one: the pre-turn bytes of
|
|
397
|
+
* each first-touched path and the paths the gate blocked as secrets
|
|
398
|
+
* (`shared/filereview/cas-touched.ts`). The one fact about a turn's file
|
|
399
|
+
* changes the runtime cannot read from the tree: the pre-edit bytes exist
|
|
400
|
+
* only at mutation time, in whatever sits between the engine and the disk
|
|
401
|
+
* (the deep-agent's filesystem backend and gate, the Cursor hook's
|
|
402
|
+
* sidecar). The runtime reads the AFTER bytes itself and owns everything
|
|
403
|
+
* else of the capture (`harness/capture.ts`): the baseline, the progress,
|
|
404
|
+
* the candidate, the stamp, the review decision.
|
|
405
|
+
*
|
|
406
|
+
* Bound once, before the first persist, as `bindHarnessState` is; the
|
|
407
|
+
* runtime pulls it at each progress refresh and at the turn boundary, so
|
|
408
|
+
* it must return an atomic snapshot (copy live state before any await). A
|
|
409
|
+
* harness that observes nothing binds nothing and gets git-only capture.
|
|
410
|
+
* Never throws.
|
|
411
|
+
*/
|
|
412
|
+
bindCasObservations(read: CasTouchedReader): void;
|
|
371
413
|
}
|
|
372
414
|
/**
|
|
373
415
|
* Token counts for one engine turn, priced. The four counts are what the
|
|
@@ -427,6 +469,15 @@ export type FailureSurface = "engine" | "actionable" | "internal";
|
|
|
427
469
|
* takes, `cause` is for the log. The runtime persists FAILED and RETURNS
|
|
428
470
|
* (Temporal does not retry a returned activity; re-running the same
|
|
429
471
|
* prompt would fail the same way).
|
|
472
|
+
* - `tool_call_limit`: the engine exhausted the tool-round budget the
|
|
473
|
+
* execution set (`max_tool_rounds`, `shared/tool-rounds.ts`) and stopped
|
|
474
|
+
* at a step boundary with its work checkpointed. Not `failed`: the
|
|
475
|
+
* platform deliberately stopped the run, and the conversation continues
|
|
476
|
+
* on the next message. The runtime writes TERMINATED with the cross-repo
|
|
477
|
+
* prefix and the user copy, and RETURNS (a retry would spend the same
|
|
478
|
+
* budget again). Every surveyed SDK ends a turn on a budget with a
|
|
479
|
+
* distinct outcome (Claude's `maxTurns` subtype, Codex's turn reason), so
|
|
480
|
+
* this is a cross-harness fact, not an engine quirk.
|
|
430
481
|
* - `interrupted`: `sink.stopSignal` aborted and the adapter stopped. WHY it
|
|
431
482
|
* aborted is the runtime's evidence (its watchdog, its accounting, its
|
|
432
483
|
* chokepoint, the cancellation it was delivered), so no reason rides here;
|
|
@@ -438,6 +489,8 @@ export type TurnOutcome = {
|
|
|
438
489
|
readonly kind: "cancelled";
|
|
439
490
|
} | {
|
|
440
491
|
readonly kind: "awaiting_approval";
|
|
492
|
+
} | {
|
|
493
|
+
readonly kind: "tool_call_limit";
|
|
441
494
|
} | {
|
|
442
495
|
readonly kind: "failed";
|
|
443
496
|
readonly message: string;
|
package/dist/harness/types.js
CHANGED
|
@@ -54,8 +54,14 @@
|
|
|
54
54
|
* - No persist cadence. The runtime's chokepoint is single-flight and
|
|
55
55
|
* unconditional at settle; WHEN a streaming turn asks for a write is the
|
|
56
56
|
* adapter's (`shared/persist-decision.ts` over its own dirty flags, since
|
|
57
|
-
* what counts as a discrete change is engine knowledge)
|
|
58
|
-
*
|
|
57
|
+
* what counts as a discrete change is engine knowledge). Revisited with
|
|
58
|
+
* both loops in view at S3 M4 and kept (Q-S3-13): the cadence RULE is
|
|
59
|
+
* shared, the timing is the engine's.
|
|
60
|
+
* - No capture. The file-review capture is the runtime's whole
|
|
61
|
+
* (`harness/capture.ts`): the baseline before `runTurn`, the candidate
|
|
62
|
+
* after it, the stamp, the review decision. The one capture fact an
|
|
63
|
+
* adapter holds — what its engine observed touching CAS-owned paths — it
|
|
64
|
+
* binds through `TurnSink.bindCasObservations`.
|
|
59
65
|
*
|
|
60
66
|
* Module shape follows `shared/checkpointer/`: `types.ts`, `capabilities.ts`,
|
|
61
67
|
* `registry.ts`, no barrel.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The harnesses this worker serves: one registry row per adapter, in boot
|
|
3
3
|
* order. The ONE place an adapter's factory is named outside its own
|
|
4
|
-
* directory
|
|
4
|
+
* directory; both composition roots read this table and nothing else to
|
|
5
|
+
* learn which harnesses exist.
|
|
5
6
|
*
|
|
6
7
|
* Lives at the source root, beside the composition roots that read it, and
|
|
7
8
|
* not in `harness/registry.ts`: a row imports its adapter from
|
|
@@ -11,17 +12,20 @@
|
|
|
11
12
|
*
|
|
12
13
|
* ORDER IS LOAD-BEARING (`registry.ts` `bootHarnesses`): the Cursor
|
|
13
14
|
* adapter's interceptors must patch `node:http2` before anything dials the
|
|
14
|
-
* control plane, so it boots first. The native deep-agent
|
|
15
|
-
*
|
|
16
|
-
*
|
|
15
|
+
* control plane, so it boots first. The native deep-agent adapter boots
|
|
16
|
+
* second; its `boot` registers the deepagents harness profiles and loads
|
|
17
|
+
* LangChain, both after the patch (S3 M2b, 2026-09-13; until then the roots
|
|
18
|
+
* imported the native orchestrator directly beside this table).
|
|
17
19
|
*
|
|
18
20
|
* THIS MODULE'S STATIC GRAPH MUST STAY CONNECT- AND SDK-FREE. The roots
|
|
19
21
|
* import it BEFORE they boot the harnesses, and the Cursor adapter's boot is
|
|
20
22
|
* where `node:http2` is patched and `@cursor/sdk` first loaded; an adapter
|
|
21
|
-
* factory that imported its SDK statically would defeat both.
|
|
22
|
-
* named here loads its vendor SDK inside `boot` (`adapter.ts`
|
|
23
|
-
*
|
|
24
|
-
*
|
|
23
|
+
* factory that imported its SDK statically would defeat both. Every adapter
|
|
24
|
+
* named here loads its vendor SDK inside `boot` (`execute-cursor/adapter.ts`
|
|
25
|
+
* and `execute-deep-agent/adapter.ts` show the shape; each has a fence that
|
|
26
|
+
* walks its static graph). `__tests__/harness-boot-order.test.ts` boots a
|
|
27
|
+
* fresh process through this module — both rows — and fails if the graph
|
|
28
|
+
* regresses.
|
|
25
29
|
*/
|
|
26
30
|
import type { HarnessRow } from "./harness/registry.js";
|
|
27
31
|
export declare const HARNESS_ADAPTERS: readonly HarnessRow[];
|
package/dist/harness-adapters.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The harnesses this worker serves: one registry row per adapter, in boot
|
|
3
3
|
* order. The ONE place an adapter's factory is named outside its own
|
|
4
|
-
* directory
|
|
4
|
+
* directory; both composition roots read this table and nothing else to
|
|
5
|
+
* learn which harnesses exist.
|
|
5
6
|
*
|
|
6
7
|
* Lives at the source root, beside the composition roots that read it, and
|
|
7
8
|
* not in `harness/registry.ts`: a row imports its adapter from
|
|
@@ -11,18 +12,25 @@
|
|
|
11
12
|
*
|
|
12
13
|
* ORDER IS LOAD-BEARING (`registry.ts` `bootHarnesses`): the Cursor
|
|
13
14
|
* adapter's interceptors must patch `node:http2` before anything dials the
|
|
14
|
-
* control plane, so it boots first. The native deep-agent
|
|
15
|
-
*
|
|
16
|
-
*
|
|
15
|
+
* control plane, so it boots first. The native deep-agent adapter boots
|
|
16
|
+
* second; its `boot` registers the deepagents harness profiles and loads
|
|
17
|
+
* LangChain, both after the patch (S3 M2b, 2026-09-13; until then the roots
|
|
18
|
+
* imported the native orchestrator directly beside this table).
|
|
17
19
|
*
|
|
18
20
|
* THIS MODULE'S STATIC GRAPH MUST STAY CONNECT- AND SDK-FREE. The roots
|
|
19
21
|
* import it BEFORE they boot the harnesses, and the Cursor adapter's boot is
|
|
20
22
|
* where `node:http2` is patched and `@cursor/sdk` first loaded; an adapter
|
|
21
|
-
* factory that imported its SDK statically would defeat both.
|
|
22
|
-
* named here loads its vendor SDK inside `boot` (`adapter.ts`
|
|
23
|
-
*
|
|
24
|
-
*
|
|
23
|
+
* factory that imported its SDK statically would defeat both. Every adapter
|
|
24
|
+
* named here loads its vendor SDK inside `boot` (`execute-cursor/adapter.ts`
|
|
25
|
+
* and `execute-deep-agent/adapter.ts` show the shape; each has a fence that
|
|
26
|
+
* walks its static graph). `__tests__/harness-boot-order.test.ts` boots a
|
|
27
|
+
* fresh process through this module — both rows — and fails if the graph
|
|
28
|
+
* regresses.
|
|
25
29
|
*/
|
|
26
30
|
import { createCursorAdapter } from "./activities/execute-cursor/adapter.js";
|
|
27
|
-
|
|
31
|
+
import { createDeepAgentAdapter } from "./activities/execute-deep-agent/adapter.js";
|
|
32
|
+
export const HARNESS_ADAPTERS = [
|
|
33
|
+
{ harness: "cursor", adapter: createCursorAdapter() },
|
|
34
|
+
{ harness: "deep-agent", adapter: createDeepAgentAdapter() },
|
|
35
|
+
];
|
|
28
36
|
//# sourceMappingURL=harness-adapters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-adapters.js","sourceRoot":"","sources":["../src/harness-adapters.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"harness-adapters.js","sourceRoot":"","sources":["../src/harness-adapters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAGpF,MAAM,CAAC,MAAM,gBAAgB,GAA0B;IACrD,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE;IACrD,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,sBAAsB,EAAE,EAAE;CAC7D,CAAC"}
|
|
@@ -94,7 +94,7 @@ export interface ApprovalGateConfig {
|
|
|
94
94
|
* gitignored path stays on the interrupt gate exactly as before.
|
|
95
95
|
*
|
|
96
96
|
* True only for gates whose backend a CAS observer wraps: the parent gate
|
|
97
|
-
* always (setup.ts), and — since DD-19 — sub-agent gates too, because
|
|
97
|
+
* always (turn-setup.ts), and — since DD-19 — sub-agent gates too, because
|
|
98
98
|
* `compileSubagents` gives every sub-agent a CAS-observing backend wired to
|
|
99
99
|
* the SAME shared observer and `buildSubAgentMiddleware` then inherits this
|
|
100
100
|
* config verbatim. A gate over an UNOBSERVED backend must keep this false:
|
|
@@ -78,7 +78,7 @@ export function createApprovalGateMiddleware(config) {
|
|
|
78
78
|
const { policies, toolServerMap } = config;
|
|
79
79
|
const leasedCategories = config.leasedCategories ?? EMPTY_CATEGORY_SET;
|
|
80
80
|
// No global-bypass early return: a pre-armed spec.auto_approve_all means the
|
|
81
|
-
// gate is never even installed (setup.ts builds this config only when not
|
|
81
|
+
// gate is never even installed (turn-setup.ts builds this config only when not
|
|
82
82
|
// global). Scoped leases keep the gate active so non-leased actions still gate.
|
|
83
83
|
return {
|
|
84
84
|
name: "ApprovalGateMiddleware",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-gate.js","sourceRoot":"","sources":["../../src/middleware/approval-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAGL,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAA6B,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EACL,0BAA0B,GAE3B,MAAM,mCAAmC,CAAC;AAyG3C,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,+CAA+C;AAC/C,MAAM,yBAAyB,GAAyC;IACtE,KAAK,EAAE,2BAA2B;IAClC,MAAM,EAAE,uBAAuB;IAC/B,KAAK,EAAE,mCAAmC;CAC3C,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAAC,QAAgB,EAAE,IAAY,EAAE,UAAkB;IAChF,OAAO,IAAI,WAAW,CAAC;QACrB,OAAO,EACL,SAAS,QAAQ,gCAAgC,IAAI,cAAc;YACnE,4EAA4E;QAC9E,YAAY,EAAE,UAAU;QACxB,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,MAA0B;IAE1B,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IAC3C,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,kBAAkB,CAAC;IAEvE,6EAA6E;IAC7E
|
|
1
|
+
{"version":3,"file":"approval-gate.js","sourceRoot":"","sources":["../../src/middleware/approval-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost advisory middleware: warns the model once as the execution's estimated
|
|
3
|
+
* spend nears `max_cost_usd`, so it can wrap up before the cap.
|
|
4
|
+
*
|
|
5
|
+
* It ADVISES; it does not cap. The one enforcement of `max_cost_usd` is the
|
|
6
|
+
* turn runtime's (`harness/run-turn.ts` over `shared/cost-guard.ts`): every
|
|
7
|
+
* usage delta the adapter reports moves the runtime's estimate, and when the
|
|
8
|
+
* estimate crosses the cap the runtime stops the turn and settles TERMINATED
|
|
9
|
+
* with the cost-limit copy. The graph learns of the stop through its abort
|
|
10
|
+
* signal, the same way it learns of a platform STOP or a stall. This is the
|
|
11
|
+
* shape `execution-budget.ts` already has beside LangGraph's `recursionLimit`:
|
|
12
|
+
* the middleware warns inside the graph, the engine's own limit enforces.
|
|
13
|
+
*
|
|
14
|
+
* Until S3 M2b (Q-S3-3) this module was `cost-cap.ts` and did both: it also
|
|
15
|
+
* blocked every tool call once the running cost passed the cap and gave the
|
|
16
|
+
* model one tool-free round to summarize. That second enforcement lived
|
|
17
|
+
* inside the graph, where the runtime could not see it, and a platform STOP
|
|
18
|
+
* had a sibling (`graceful-stop.ts`, deleted with it) that let the run spend
|
|
19
|
+
* a summary round after the platform said stop. Both went when the runtime
|
|
20
|
+
* became the one place a turn is stopped (harness runtime program, S3).
|
|
21
|
+
*
|
|
22
|
+
* afterModel — reads `usage_metadata` off the latest AIMessage, prices the
|
|
23
|
+
* call at the parent's rates (a sub-agent on its own model is priced the
|
|
24
|
+
* same way the enforcement prices it; per-sub-agent pricing is an S5 item),
|
|
25
|
+
* accumulates the running total, and injects the warning SystemMessage once
|
|
26
|
+
* at `warningPct` of the cap.
|
|
27
|
+
*
|
|
28
|
+
* forSubAgent — a view that shares the running total, so a sub-agent's calls
|
|
29
|
+
* advance the same figure the parent's warning reads.
|
|
30
|
+
*
|
|
31
|
+
* Only built when `max_cost_usd > 0` is explicitly configured.
|
|
32
|
+
*/
|
|
33
|
+
import type { StigmerMiddleware, CostAdvisoryConfig } from "./types.js";
|
|
34
|
+
export interface CostAdvisoryMiddleware extends StigmerMiddleware {
|
|
35
|
+
/** The running estimate this advisory has priced, in USD. */
|
|
36
|
+
readonly runningCost: number;
|
|
37
|
+
forSubAgent(): StigmerMiddleware;
|
|
38
|
+
}
|
|
39
|
+
export declare function createCostAdvisoryMiddleware(config: CostAdvisoryConfig): CostAdvisoryMiddleware;
|
|
@@ -1,19 +1,36 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Cost
|
|
2
|
+
* Cost advisory middleware: warns the model once as the execution's estimated
|
|
3
|
+
* spend nears `max_cost_usd`, so it can wrap up before the cap.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
5
|
+
* It ADVISES; it does not cap. The one enforcement of `max_cost_usd` is the
|
|
6
|
+
* turn runtime's (`harness/run-turn.ts` over `shared/cost-guard.ts`): every
|
|
7
|
+
* usage delta the adapter reports moves the runtime's estimate, and when the
|
|
8
|
+
* estimate crosses the cap the runtime stops the turn and settles TERMINATED
|
|
9
|
+
* with the cost-limit copy. The graph learns of the stop through its abort
|
|
10
|
+
* signal, the same way it learns of a platform STOP or a stall. This is the
|
|
11
|
+
* shape `execution-budget.ts` already has beside LangGraph's `recursionLimit`:
|
|
12
|
+
* the middleware warns inside the graph, the engine's own limit enforces.
|
|
6
13
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
14
|
+
* Until S3 M2b (Q-S3-3) this module was `cost-cap.ts` and did both: it also
|
|
15
|
+
* blocked every tool call once the running cost passed the cap and gave the
|
|
16
|
+
* model one tool-free round to summarize. That second enforcement lived
|
|
17
|
+
* inside the graph, where the runtime could not see it, and a platform STOP
|
|
18
|
+
* had a sibling (`graceful-stop.ts`, deleted with it) that let the run spend
|
|
19
|
+
* a summary round after the platform said stop. Both went when the runtime
|
|
20
|
+
* became the one place a turn is stopped (harness runtime program, S3).
|
|
10
21
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
22
|
+
* afterModel — reads `usage_metadata` off the latest AIMessage, prices the
|
|
23
|
+
* call at the parent's rates (a sub-agent on its own model is priced the
|
|
24
|
+
* same way the enforcement prices it; per-sub-agent pricing is an S5 item),
|
|
25
|
+
* accumulates the running total, and injects the warning SystemMessage once
|
|
26
|
+
* at `warningPct` of the cap.
|
|
13
27
|
*
|
|
14
|
-
*
|
|
28
|
+
* forSubAgent — a view that shares the running total, so a sub-agent's calls
|
|
29
|
+
* advance the same figure the parent's warning reads.
|
|
30
|
+
*
|
|
31
|
+
* Only built when `max_cost_usd > 0` is explicitly configured.
|
|
15
32
|
*/
|
|
16
|
-
import {
|
|
33
|
+
import { SystemMessage } from "@langchain/core/messages";
|
|
17
34
|
const DEFAULT_WARNING_PCT = 80;
|
|
18
35
|
const MIN_WARNING_PCT = 50;
|
|
19
36
|
const MAX_WARNING_PCT = 95;
|
|
@@ -29,7 +46,7 @@ function extractUsage(aiMessage) {
|
|
|
29
46
|
: 0;
|
|
30
47
|
return { totalInput, output, cacheRead };
|
|
31
48
|
}
|
|
32
|
-
export function
|
|
49
|
+
export function createCostAdvisoryMiddleware(config) {
|
|
33
50
|
const { maxCostUsd, inputPricePerMillion, outputPricePerMillion, cacheReadPricePerMillion, } = config;
|
|
34
51
|
const warningPct = config.warningPct ?? DEFAULT_WARNING_PCT;
|
|
35
52
|
if (maxCostUsd <= 0)
|
|
@@ -39,7 +56,6 @@ export function createCostCapMiddleware(config) {
|
|
|
39
56
|
}
|
|
40
57
|
let runningCost = 0;
|
|
41
58
|
let warned = false;
|
|
42
|
-
let exceeded = false;
|
|
43
59
|
let modelCallCount = 0;
|
|
44
60
|
function computeCallCost(totalInput, output, cacheRead) {
|
|
45
61
|
let inputCost;
|
|
@@ -68,19 +84,7 @@ export function createCostCapMiddleware(config) {
|
|
|
68
84
|
`and any remaining work so the user can continue in the next message.`,
|
|
69
85
|
});
|
|
70
86
|
}
|
|
71
|
-
function createExceededMessage() {
|
|
72
|
-
return new SystemMessage({
|
|
73
|
-
content: `Budget exceeded: This execution has consumed ` +
|
|
74
|
-
`$${runningCost.toFixed(4)}, exceeding the ` +
|
|
75
|
-
`$${maxCostUsd.toFixed(2)} budget. ` +
|
|
76
|
-
`All tool calls are now blocked. ` +
|
|
77
|
-
`Respond with a summary of what you accomplished and ` +
|
|
78
|
-
`what work remains so the user can continue.`,
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
87
|
function processAfterModel(state) {
|
|
82
|
-
if (exceeded)
|
|
83
|
-
return;
|
|
84
88
|
const messages = (state.messages ?? []);
|
|
85
89
|
let lastAi = null;
|
|
86
90
|
for (let i = messages.length - 1; i >= 0; i--) {
|
|
@@ -95,65 +99,43 @@ export function createCostCapMiddleware(config) {
|
|
|
95
99
|
const { totalInput, output, cacheRead } = extractUsage(lastAi);
|
|
96
100
|
if (totalInput === 0 && output === 0)
|
|
97
101
|
return;
|
|
98
|
-
|
|
99
|
-
runningCost += callCost;
|
|
102
|
+
runningCost += computeCallCost(totalInput, output, cacheRead);
|
|
100
103
|
modelCallCount++;
|
|
101
104
|
const warningThreshold = maxCostUsd * warningPct / 100;
|
|
102
|
-
if (runningCost >= maxCostUsd) {
|
|
103
|
-
exceeded = true;
|
|
104
|
-
console.warn(`[CostCap] EXCEEDED: $${runningCost.toFixed(4)} >= $${maxCostUsd.toFixed(2)} ` +
|
|
105
|
-
`after ${modelCallCount} calls. Tool execution will be blocked.`);
|
|
106
|
-
return { messages: [createExceededMessage()] };
|
|
107
|
-
}
|
|
108
105
|
if (!warned && runningCost >= warningThreshold) {
|
|
109
106
|
warned = true;
|
|
110
|
-
console.warn(`[
|
|
107
|
+
console.warn(`[CostAdvisory] WARNING: $${runningCost.toFixed(4)} >= $${warningThreshold.toFixed(4)} ` +
|
|
111
108
|
`(${warningPct}% of $${maxCostUsd.toFixed(2)}) after ${modelCallCount} calls.`);
|
|
112
109
|
return { messages: [createWarningMessage()] };
|
|
113
110
|
}
|
|
114
111
|
}
|
|
115
|
-
async function processWrapToolCall(request, handler) {
|
|
116
|
-
if (exceeded) {
|
|
117
|
-
return new ToolMessage({
|
|
118
|
-
content: `[Budget exceeded: tool execution blocked. ` +
|
|
119
|
-
`Summarize your progress for the user.]`,
|
|
120
|
-
tool_call_id: request.toolCall.id,
|
|
121
|
-
name: request.toolCall.name,
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
return await handler(request);
|
|
125
|
-
}
|
|
126
112
|
const middleware = {
|
|
127
|
-
name: "
|
|
113
|
+
name: "CostAdvisoryMiddleware",
|
|
128
114
|
get runningCost() { return runningCost; },
|
|
129
|
-
get exceeded() { return exceeded; },
|
|
130
115
|
beforeAgent() {
|
|
131
116
|
runningCost = 0;
|
|
132
117
|
warned = false;
|
|
133
|
-
exceeded = false;
|
|
134
118
|
modelCallCount = 0;
|
|
135
119
|
},
|
|
136
120
|
afterModel(state) {
|
|
137
121
|
return processAfterModel(state);
|
|
138
122
|
},
|
|
139
|
-
wrapToolCall: processWrapToolCall,
|
|
140
123
|
afterAgent() {
|
|
141
124
|
const pctUsed = maxCostUsd > 0
|
|
142
125
|
? (runningCost / maxCostUsd * 100)
|
|
143
126
|
: 0;
|
|
144
|
-
console.log(`[
|
|
145
|
-
`(~${pctUsed.toFixed(0)}%) across ${modelCallCount} calls, `
|
|
146
|
-
`warned=${warned}, exceeded=${exceeded}`);
|
|
127
|
+
console.log(`[CostAdvisory] Summary: $${runningCost.toFixed(4)} of $${maxCostUsd.toFixed(2)} ` +
|
|
128
|
+
`(~${pctUsed.toFixed(0)}%) across ${modelCallCount} calls, warned=${warned}`);
|
|
147
129
|
},
|
|
148
130
|
forSubAgent() {
|
|
149
131
|
return {
|
|
150
|
-
name: "
|
|
151
|
-
//
|
|
132
|
+
name: "CostAdvisorySubAgentView",
|
|
133
|
+
// The view does NOT reset the running total on beforeAgent: a
|
|
134
|
+
// sub-agent's calls advance the parent's figure.
|
|
152
135
|
afterModel(state) { return processAfterModel(state); },
|
|
153
|
-
wrapToolCall: processWrapToolCall,
|
|
154
136
|
};
|
|
155
137
|
},
|
|
156
138
|
};
|
|
157
139
|
return middleware;
|
|
158
140
|
}
|
|
159
|
-
//# sourceMappingURL=cost-
|
|
141
|
+
//# sourceMappingURL=cost-advisory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-advisory.js","sourceRoot":"","sources":["../../src/middleware/cost-advisory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +1,41 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Middleware stack factory.
|
|
2
|
+
* Middleware stack factory for the native harness's root graph.
|
|
3
3
|
*
|
|
4
|
-
* Assembles the ordered middleware array from a MiddlewareStackConfig.
|
|
5
|
-
*
|
|
4
|
+
* Assembles the ordered middleware array from a MiddlewareStackConfig. The
|
|
5
|
+
* order is load-bearing and reads top to bottom:
|
|
6
6
|
*
|
|
7
7
|
* 0. Path normalization (conditional: only on permission-rule-bearing
|
|
8
8
|
* graphs — FIRST, so every downstream middleware observes canonical
|
|
9
9
|
* workspace-absolute paths)
|
|
10
10
|
* 1. Loop detection (always)
|
|
11
|
-
* 2. Execution budget (always
|
|
11
|
+
* 2. Execution budget (always — advises at ~80% of the tool-round budget
|
|
12
|
+
* that LangGraph's `recursionLimit` enforces)
|
|
12
13
|
* 3. Tool intent (always — bind-time shell schema extension, issue #276)
|
|
13
14
|
* 4. Tool truncation (always)
|
|
14
|
-
* 5.
|
|
15
|
-
* 6. Cost
|
|
15
|
+
* 5. Approval gate (conditional: absent under the global bypass)
|
|
16
|
+
* 6. Cost advisory (conditional: only when maxCostUsd > 0 — advises at
|
|
17
|
+
* ~80% of the cap that the turn runtime enforces)
|
|
16
18
|
* 7. Error hints (always)
|
|
17
19
|
* 8. OTel spans (always, no-op when OTel not configured)
|
|
20
|
+
*
|
|
21
|
+
* Every middleware here either shapes the graph's tool surface or ADVISES
|
|
22
|
+
* the model; none of them stops the run. A stop — the platform's, the
|
|
23
|
+
* cost cap's, a stall's — is the turn runtime's, delivered to the graph
|
|
24
|
+
* through its abort signal (harness runtime program, S3 Q-S3-3; until M2b a
|
|
25
|
+
* graceful-stop middleware and the cost cap's tool block were second stops
|
|
26
|
+
* inside the graph that the runtime could not see).
|
|
27
|
+
*
|
|
28
|
+
* The sub-agent stack is `execute-deep-agent/subagent-wiring.ts`'s: the same
|
|
29
|
+
* order over the parent's shared instances where one exists (the advisory's
|
|
30
|
+
* running total), fresh ones otherwise.
|
|
18
31
|
*/
|
|
19
32
|
import type { StigmerMiddleware, MiddlewareStackConfig } from "./types.js";
|
|
20
|
-
import type
|
|
21
|
-
|
|
22
|
-
export type { GracefulStopMiddleware } from "./graceful-stop.js";
|
|
23
|
-
export type { CostCapMiddleware } from "./cost-cap.js";
|
|
33
|
+
import { type CostAdvisoryMiddleware } from "./cost-advisory.js";
|
|
34
|
+
export type { CostAdvisoryMiddleware } from "./cost-advisory.js";
|
|
24
35
|
export type { StigmerMiddleware, MiddlewareStackConfig } from "./types.js";
|
|
25
36
|
export interface MiddlewareStackResult {
|
|
26
37
|
readonly middleware: StigmerMiddleware[];
|
|
27
|
-
|
|
28
|
-
readonly
|
|
38
|
+
/** The advisory's instance, for the sub-agent stacks to share its running total; null when no cap is configured. */
|
|
39
|
+
readonly costAdvisory: CostAdvisoryMiddleware | null;
|
|
29
40
|
}
|
|
30
41
|
export declare function buildMiddlewareStack(config?: MiddlewareStackConfig): MiddlewareStackResult;
|