@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
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The native deep-agent harness's setup — what the LangGraph engine needs
|
|
3
|
+
* before it can run a turn, as small named steps over the runtime's resolved
|
|
4
|
+
* `TurnInput`, each returning a typed slice (the Cursor adapter's
|
|
5
|
+
* `turn-setup.ts` mold; never one long function).
|
|
6
|
+
*
|
|
7
|
+
* Everything harness-agnostic has already happened when these run: the
|
|
8
|
+
* execution, session and blueprint are fetched, the workspace is provisioned
|
|
9
|
+
* and locked, the MCP servers and approval policies are merged, the skills
|
|
10
|
+
* are mounted per owner, the attachments are resolved, the transcript is
|
|
11
|
+
* seeded. What remains is this engine's own reading of that record: the
|
|
12
|
+
* checkpointer; the deepagents backend and the CAS observer, rooted at the
|
|
13
|
+
* tree the runtime locked; the MCP connection that turns resolved servers
|
|
14
|
+
* into LangChain tools; the model; the middleware stack with the approval
|
|
15
|
+
* gate over the runtime's policies; the compiled sub-agents; the system
|
|
16
|
+
* prompt and the user message; `createDeepAgent`; and the checkpoint read
|
|
17
|
+
* that decides between a `Command(resume)` and a fresh message. The
|
|
18
|
+
* file-review capture is the runtime's (`harness/capture.ts`); this harness
|
|
19
|
+
* hands it only what its CAS observer saw (`turn.ts`).
|
|
20
|
+
*
|
|
21
|
+
* Every step reads `TurnInput` and the sink and nothing else of the
|
|
22
|
+
* runtime's. The `execution_setup` cold-start line is emitted here, once the
|
|
23
|
+
* graph exists, over the runtime's timeline (`sink.setupTiming`), so the one
|
|
24
|
+
* timeline reads end to end. The three progress labels only this harness
|
|
25
|
+
* knows are reported through the sink exactly as the orchestrator reported
|
|
26
|
+
* them (the resolution labels are the runtime's).
|
|
27
|
+
*
|
|
28
|
+
* One root for everything (Q-S3-8): the deepagents backend, the CAS
|
|
29
|
+
* observer, the gate's path normalization and the publisher are all rooted
|
|
30
|
+
* at `workspace.primaryDir` — the same tree the runtime locks, links and
|
|
31
|
+
* captures. For zero or one workspace entry this is byte-identical to the
|
|
32
|
+
* orchestrator's `workspaceBackend.rootDir`.
|
|
33
|
+
*
|
|
34
|
+
* Moved from `setup.ts` `performSetup` (the LangGraph half; the resolution
|
|
35
|
+
* half is the runtime's twelve phases) at S3 M2a; the step bodies are the
|
|
36
|
+
* orchestrator's, verbatim where nothing changed.
|
|
37
|
+
*/
|
|
38
|
+
import { createDeepAgent } from "deepagents";
|
|
39
|
+
import { InteractionMode } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
40
|
+
import { emitTimingLog } from "../../shared/cold-start-timing.js";
|
|
41
|
+
import { createCheckpointer } from "../../shared/checkpointer/factory.js";
|
|
42
|
+
import { ensureCheckpointDbPath } from "../../shared/workspace/platform-dir.js";
|
|
43
|
+
import { LocalWorkspaceBackend } from "../../shared/workspace/local-backend.js";
|
|
44
|
+
import { connectMcpServers } from "../../shared/mcp-manager.js";
|
|
45
|
+
import { formatChannelTemplatesSection } from "../../shared/channel-attachment.js";
|
|
46
|
+
import { isPathCapturable } from "../../shared/filereview/git-substrate.js";
|
|
47
|
+
import { resolveWorkspacePath } from "../../shared/file-change.js";
|
|
48
|
+
import { buildPlanModePermissions } from "../../shared/plan-mode-permissions.js";
|
|
49
|
+
import { buildMiddlewareStack } from "../../middleware/index.js";
|
|
50
|
+
import { createThinkTool, createWebFetchTool, resolveGuardPosture } from "../../tools/index.js";
|
|
51
|
+
import { deriveExecutionFingerprintKey } from "../../shared/approval-fingerprint.js";
|
|
52
|
+
import { getRunnerHitlMasterSecret } from "../../shared/fingerprint-secret.js";
|
|
53
|
+
import { getModelPricing, ensureLoaded as ensurePricingLoaded } from "../../shared/model-pricing.js";
|
|
54
|
+
import { getDefaultModel } from "../../shared/model-registry.js";
|
|
55
|
+
import { buildChatModel } from "../../shared/model-client.js";
|
|
56
|
+
import { isUnattendedApprovalMode } from "../../shared/approval-policy.js";
|
|
57
|
+
import { alsoAvailableSkillsNote, selectSkillsForPrompt, visionPromptInfoOf } from "../../shared/prompt-sections.js";
|
|
58
|
+
import { toLangChainImageBlocks } from "../../shared/attachment-vision.js";
|
|
59
|
+
import { resolveRecursionLimit, UNBOUNDED_ADVISORY_RECURSION_LIMIT } from "../../shared/tool-rounds.js";
|
|
60
|
+
import { jsonSchemaToZod } from "../../shared/json-schema-to-zod.js";
|
|
61
|
+
import { CasCaptureObserver } from "./cas-capture-observer.js";
|
|
62
|
+
import { createCasCaptureBackend } from "./cas-capture-backend.js";
|
|
63
|
+
import { resolveResumeInput } from "./hitl.js";
|
|
64
|
+
import { buildEnhancedSystemPrompt, composeUserMessage, renderSkillsSection } from "./prompt-builder.js";
|
|
65
|
+
import { buildShellEnv } from "./shell-env.js";
|
|
66
|
+
import { modelHasNativeThinking, transformAndCompileSubagents } from "./subagent-transformer.js";
|
|
67
|
+
// ── Steps ───────────────────────────────────────────────────────────────────
|
|
68
|
+
/**
|
|
69
|
+
* The registry id the turn runs on: what the execution asked for, as the
|
|
70
|
+
* runtime already resolved it (`input.model.requested`, `"default"` when the
|
|
71
|
+
* spec named none — the one reader of `spec.executionConfig.modelName`, which
|
|
72
|
+
* the Cursor adapter reads too), or the registry's default for `"default"`.
|
|
73
|
+
* The same reading the runtime's attachment phase made for the vision budget,
|
|
74
|
+
* so the model that sees the images is the model that runs. (Until S3 M5 this
|
|
75
|
+
* read the spec field beside the runtime's resolved copy; F-M3-P7.)
|
|
76
|
+
*/
|
|
77
|
+
export async function resolveModelName(input) {
|
|
78
|
+
return input.model.requested === "default" ? await getDefaultModel() : input.model.requested;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The checkpoint saver. The durable local (sqlite) backend keys its file
|
|
82
|
+
* per session — a session has exactly one thread (`thread-{sessionId}`), so
|
|
83
|
+
* checkpoint lifetime tracks session lifetime. Opened per turn and closed
|
|
84
|
+
* in the adapter's `finally` (`turn.ts`).
|
|
85
|
+
*/
|
|
86
|
+
export async function openCheckpointer(input, sink, config) {
|
|
87
|
+
const checkpointer = await createCheckpointer({
|
|
88
|
+
type: config.checkpointerType,
|
|
89
|
+
proxyEndpoint: config.checkpointerProxyEndpoint ?? undefined,
|
|
90
|
+
authToken: config.stigmerToken ?? undefined,
|
|
91
|
+
sqlitePath: config.checkpointerType === "sqlite" ? await ensureCheckpointDbPath(input.sessionId) : undefined,
|
|
92
|
+
});
|
|
93
|
+
sink.setupTiming.mark("create_checkpointer");
|
|
94
|
+
return checkpointer;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The workspace as the engine sees it, rooted at the runtime's primary tree
|
|
98
|
+
* (Q-S3-8). The platform dir the shared provision ensured rides along so
|
|
99
|
+
* the backend routes `.stigmer/…` reads to it.
|
|
100
|
+
*
|
|
101
|
+
* CAS capture (design docs 08/11/12): the single per-turn observer owns the
|
|
102
|
+
* before-bytes of first-touched CAS-owned paths AND the secret-blocked
|
|
103
|
+
* paths, keyed workspace-root-relative. Shared by the parent AND every
|
|
104
|
+
* sub-agent CAS backend, giving race-free first-touch-wins across
|
|
105
|
+
* concurrent graphs. In a git work tree it owns the .gitignored set only
|
|
106
|
+
* (git captures the tracked ones); in a non-git workspace it owns every
|
|
107
|
+
* touched path. Its ownership predicate is memoized, so `git check-ignore`
|
|
108
|
+
* runs at most once per distinct path.
|
|
109
|
+
*/
|
|
110
|
+
export function buildDeepAgentWorkspace(input) {
|
|
111
|
+
const { primaryDir, gitWorkspace, provision } = input.workspace;
|
|
112
|
+
const backend = new LocalWorkspaceBackend(primaryDir, provision.workspaceBackend.platformDir);
|
|
113
|
+
const isCapturablePath = gitWorkspace
|
|
114
|
+
? (rawPath) => isPathCapturable(primaryDir, resolveWorkspacePath(rawPath, primaryDir, true).path)
|
|
115
|
+
: (_rawPath) => Promise.resolve(false);
|
|
116
|
+
const casObserver = new CasCaptureObserver({
|
|
117
|
+
rootDir: primaryDir,
|
|
118
|
+
isIgnored: gitWorkspace
|
|
119
|
+
? async (relPath) => !(await isPathCapturable(primaryDir, relPath))
|
|
120
|
+
: async () => true,
|
|
121
|
+
});
|
|
122
|
+
return { backend, casObserver, isCapturablePath };
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Connect the runtime's resolved servers (synthesized attachments included)
|
|
126
|
+
* into LangChain tools. The connect covers the whole fan-out — stdio servers
|
|
127
|
+
* spawn npx/uvx subprocesses here, so on-demand package installs land in
|
|
128
|
+
* this span. A turn with no servers connects nothing: `MultiServerMCPClient`
|
|
129
|
+
* refuses an empty config, which is what the orchestrator's MCP gate
|
|
130
|
+
* (`mcp-gate.ts`) guarded against beside its channel-only reason; the
|
|
131
|
+
* runtime resolves unconditionally, so the one remaining question is
|
|
132
|
+
* "anything to connect?" (S3 M2a, F-M2a-17).
|
|
133
|
+
*/
|
|
134
|
+
export async function connectTools(input, sink) {
|
|
135
|
+
if (input.mcp.servers.length === 0) {
|
|
136
|
+
return { connection: undefined, mcpTools: [], serverToolMap: new Map(), toolServerMap: new Map() };
|
|
137
|
+
}
|
|
138
|
+
await sink.reportProgress("Connecting tools…");
|
|
139
|
+
const connection = await connectMcpServers([...input.mcp.servers]);
|
|
140
|
+
const serverToolMap = new Map();
|
|
141
|
+
const toolServerMap = new Map();
|
|
142
|
+
for (const [serverName, serverTools] of Object.entries(connection.serverToolMap)) {
|
|
143
|
+
serverToolMap.set(serverName, serverTools);
|
|
144
|
+
for (const t of serverTools)
|
|
145
|
+
toolServerMap.set(t.name, serverName);
|
|
146
|
+
}
|
|
147
|
+
sink.setupTiming.mark("connect_mcp");
|
|
148
|
+
sink.recordActivity();
|
|
149
|
+
return { connection, mcpTools: connection.tools, serverToolMap, toolServerMap };
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* The gate's posture. Two distinct bypasses (`shared/approval-policy.ts`
|
|
153
|
+
* `ActiveLeases`): the pre-armed spec.auto_approve_all is the one whole-run
|
|
154
|
+
* global bypass; an interactive APPROVE_ALL grants a run-lifetime lease
|
|
155
|
+
* scoped to that action's class. Server leases shaped the runtime's policy
|
|
156
|
+
* map (leased servers dropped); built-in category leases are applied inside
|
|
157
|
+
* the gate. Both flow into sub-agents via the shared gate config.
|
|
158
|
+
*/
|
|
159
|
+
export function readGateState(input, tools) {
|
|
160
|
+
return {
|
|
161
|
+
policies: input.mcp.policies,
|
|
162
|
+
toolServerMap: tools.toolServerMap,
|
|
163
|
+
leasedCategories: input.mcp.leases.categories,
|
|
164
|
+
globalBypass: input.mcp.leases.global,
|
|
165
|
+
unattended: isUnattendedApprovalMode(input.execution),
|
|
166
|
+
unattendedSkips: new Set(),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* The `## Skills` section of the root prompt: the skills the shared selection
|
|
171
|
+
* highlights for this turn's message (`shared/prompt-sections.ts`
|
|
172
|
+
* `selectSkillsForPrompt`: every skill below the threshold, the relevant ones
|
|
173
|
+
* at and above it), rendered with this engine's activation protocol, plus —
|
|
174
|
+
* when the selection left any out — an `### Also Available` note naming them
|
|
175
|
+
* (the sentence is the shared, tool-neutral one; the heading is this
|
|
176
|
+
* harness's markdown framing).
|
|
177
|
+
*/
|
|
178
|
+
export function renderRootSkillsSection(input) {
|
|
179
|
+
const { highlighted, alsoAvailable } = selectSkillsForPrompt(input.execution.spec?.message ?? "", input.skills.root);
|
|
180
|
+
if (alsoAvailable.length === 0)
|
|
181
|
+
return renderSkillsSection(highlighted);
|
|
182
|
+
console.log(`[turn-setup] Skill relevance filter: ${highlighted.length} included, ` +
|
|
183
|
+
`${alsoAvailable.length} excluded: ${alsoAvailable.join(", ")}`);
|
|
184
|
+
return renderSkillsSection(highlighted) + "\n### Also Available\n\n" + alsoAvailableSkillsNote(alsoAvailable) + "\n";
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* The system prompt over the runtime's resolved record: every input the
|
|
188
|
+
* builder renders is read from `TurnInput` here, in one place, so the mapping
|
|
189
|
+
* is a pure step a test can pin whole (`__tests__/prompt-goldens.test.ts`
|
|
190
|
+
* calls exactly this) rather than a stretch of `buildEngine`. The one input
|
|
191
|
+
* that is not on the record is the memoized memory selection, which the
|
|
192
|
+
* caller awaits (the runtime stamps the report on the status the first time
|
|
193
|
+
* it is pulled, before this turn's first persist).
|
|
194
|
+
*/
|
|
195
|
+
export function composeSystemPrompt(input, recalledMemories) {
|
|
196
|
+
const spec = input.execution.spec;
|
|
197
|
+
const execConfig = spec.executionConfig;
|
|
198
|
+
const primaryDir = input.workspace.primaryDir;
|
|
199
|
+
return buildEnhancedSystemPrompt({
|
|
200
|
+
instructions: input.blueprint.instructions,
|
|
201
|
+
provisionResults: input.workspace.provision.provisionResults,
|
|
202
|
+
containerRoot: primaryDir,
|
|
203
|
+
skillsPromptSection: renderRootSkillsSection(input),
|
|
204
|
+
// "" (nothing sendable) threads as undefined: the tool alone still serves
|
|
205
|
+
// text sends inside a 24-hour window (DD-006 D6).
|
|
206
|
+
channelTemplatesPromptSection: input.mcp.channelMessaging.length > 0
|
|
207
|
+
? formatChannelTemplatesSection(input.mcp.channelMessaging) || undefined
|
|
208
|
+
: undefined,
|
|
209
|
+
workspaceFileRefs: spec.workspaceFileRefs ?? [],
|
|
210
|
+
workspaceRoot: primaryDir,
|
|
211
|
+
inputFiles: input.attachments.results,
|
|
212
|
+
vision: visionPromptInfoOf(input.attachments),
|
|
213
|
+
downloadUrlKind: input.artifactStorage?.downloadUrlKind,
|
|
214
|
+
interactionMode: execConfig?.interactionMode,
|
|
215
|
+
buildFromPlan: execConfig?.buildFromPlan,
|
|
216
|
+
contextBridge: input.standing.contextBridge,
|
|
217
|
+
senderIdentity: input.standing.senderIdentity,
|
|
218
|
+
sessionContext: input.standing.sessionContext,
|
|
219
|
+
declaredPreferences: input.standing.declaredPreferences,
|
|
220
|
+
recalledMemories,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Build the engine: the model, the middleware stack with the gate, the
|
|
225
|
+
* tools, the compiled sub-agents, the system prompt and `createDeepAgent`.
|
|
226
|
+
*
|
|
227
|
+
* The service tier resolved ONCE by the runtime rides every model this
|
|
228
|
+
* execution constructs — the primary AND the sub-agent factory — so the
|
|
229
|
+
* provider account's default can never pick the price of any turn (#361).
|
|
230
|
+
* `max_tool_rounds` resolves to one recursion limit that feeds BOTH the hard
|
|
231
|
+
* stop on the invoke config and the budget middleware's ~80% advisory, so
|
|
232
|
+
* the warning and the enforcement can never disagree.
|
|
233
|
+
*
|
|
234
|
+
* Nothing in the middleware stack stops the run (Q-S3-3, landed at S3 M2b):
|
|
235
|
+
* the runtime's abort is the platform's one stop, and its TERMINATED arm the
|
|
236
|
+
* one enforcement of `max_cost_usd`; the cost advisory warns the model at
|
|
237
|
+
* ~80% of the cap the way the budget middleware warns at ~80% of the
|
|
238
|
+
* recursion limit.
|
|
239
|
+
*/
|
|
240
|
+
export async function buildEngine(input, sink, config, args) {
|
|
241
|
+
const { modelName, checkpointer, workspace, tools, gate } = args;
|
|
242
|
+
const { executionId, sessionId, blueprint, artifactStorage } = input;
|
|
243
|
+
const execConfig = input.execution.spec.executionConfig;
|
|
244
|
+
const primaryDir = input.workspace.primaryDir;
|
|
245
|
+
// The model. Resolution to the provider API id happens inside
|
|
246
|
+
// buildChatModel; modelName stays the registry id for pricing, the
|
|
247
|
+
// native-thinking heuristic, and sub-agent inheritance.
|
|
248
|
+
const buildModelFor = async (name) => (await buildChatModel({
|
|
249
|
+
modelName: name,
|
|
250
|
+
proxyEndpoint: config.proxyEndpoint ?? undefined,
|
|
251
|
+
stigmerToken: config.stigmerToken ?? undefined,
|
|
252
|
+
headerScope: { executionId },
|
|
253
|
+
serviceTier: input.model.serviceTier,
|
|
254
|
+
})).model;
|
|
255
|
+
const model = await buildModelFor(modelName);
|
|
256
|
+
sink.setupTiming.mark("build_model");
|
|
257
|
+
await ensurePricingLoaded();
|
|
258
|
+
const pricing = getModelPricing(modelName);
|
|
259
|
+
const isPlanMode = execConfig?.interactionMode === InteractionMode.PLAN;
|
|
260
|
+
const shellEnv = isPlanMode ? undefined : buildShellEnv(input.environment.envVars);
|
|
261
|
+
// Plan mode's filesystem permission rules, hoisted once: the parent graph
|
|
262
|
+
// and every sub-agent graph carry this single value (the write-deny half
|
|
263
|
+
// of plan mode; the read boundary is structural, issue #754).
|
|
264
|
+
const planModePermissions = isPlanMode ? buildPlanModePermissions() : undefined;
|
|
265
|
+
// The approval gate config is the single source of truth for HITL gating,
|
|
266
|
+
// built once and inherited verbatim by sub-agents. Null under the global
|
|
267
|
+
// pre-arm, where the gate is inert. Capture mode: file edits flow (tracked
|
|
268
|
+
// to the git diff, ignored into CAS on THIS gate); secret-like paths are
|
|
269
|
+
// hard-blocked (DD-E); shell/MCP stay gated. The CAS arm additionally
|
|
270
|
+
// requires storage to persist its blobs.
|
|
271
|
+
const captureMode = input.workspace.captureMode;
|
|
272
|
+
const approvalGateConfig = !gate.globalBypass
|
|
273
|
+
? {
|
|
274
|
+
policies: gate.policies,
|
|
275
|
+
leasedCategories: gate.leasedCategories,
|
|
276
|
+
toolServerMap: gate.toolServerMap,
|
|
277
|
+
fingerprintKey: deriveExecutionFingerprintKey(getRunnerHitlMasterSecret(), executionId),
|
|
278
|
+
executionId,
|
|
279
|
+
fileCaptureMode: captureMode,
|
|
280
|
+
isCapturablePath: workspace.isCapturablePath,
|
|
281
|
+
captureIgnored: captureMode && !!artifactStorage,
|
|
282
|
+
recordBlockedSecret: (rawPath) => workspace.casObserver.recordBlockedSecret(rawPath),
|
|
283
|
+
// Pre-delete byte capture (issue #303): a flowing delete's before-bytes
|
|
284
|
+
// are recorded by the gate at authorization time through the SAME
|
|
285
|
+
// shared observer, so the boundary authors a restorable DELETE.
|
|
286
|
+
captureDeleteBefore: (rawPath) => workspace.casObserver.recordBefore(rawPath),
|
|
287
|
+
unattended: gate.unattended,
|
|
288
|
+
unattendedSkips: gate.unattendedSkips,
|
|
289
|
+
}
|
|
290
|
+
: null;
|
|
291
|
+
const maxCostUsd = execConfig?.maxCostUsd ?? 0;
|
|
292
|
+
const recursionLimit = resolveRecursionLimit(execConfig?.maxToolRounds);
|
|
293
|
+
const { middleware, costAdvisory } = buildMiddlewareStack({
|
|
294
|
+
loopDetection: { historySize: 20, consecutiveThreshold: 7, totalThreshold: 20 },
|
|
295
|
+
executionBudget: { recursionLimit: recursionLimit ?? UNBOUNDED_ADVISORY_RECURSION_LIMIT, warningPct: 80 },
|
|
296
|
+
toolTruncation: { maxChars: execConfig?.maxToolResultChars || 30_000 },
|
|
297
|
+
costAdvisory: maxCostUsd > 0
|
|
298
|
+
? {
|
|
299
|
+
maxCostUsd,
|
|
300
|
+
inputPricePerMillion: pricing.inputPricePerMillion,
|
|
301
|
+
outputPricePerMillion: pricing.outputPricePerMillion,
|
|
302
|
+
cacheReadPricePerMillion: pricing.cacheReadPricePerMillion,
|
|
303
|
+
warningPct: 80,
|
|
304
|
+
}
|
|
305
|
+
: null,
|
|
306
|
+
otelSpans: { toolServerMap: gate.toolServerMap },
|
|
307
|
+
approvalGate: approvalGateConfig,
|
|
308
|
+
// Every graph, every mode (issue #754): the dialect-repair seam that keeps
|
|
309
|
+
// model-supplied paths canonical for the virtual-rooted backend and every
|
|
310
|
+
// downstream consumer (gate, capture, spans).
|
|
311
|
+
pathNormalization: { rootDir: primaryDir },
|
|
312
|
+
});
|
|
313
|
+
sink.setupTiming.mark("build_middleware");
|
|
314
|
+
// web_fetch is always-on for every native run (issue #214 parity with the
|
|
315
|
+
// Cursor harness); its URL guard posture — strict on managed cloud runners,
|
|
316
|
+
// relaxed on user-owned machines — is derived from the runner mode.
|
|
317
|
+
const webFetchPosture = resolveGuardPosture(config.mode);
|
|
318
|
+
const graphTools = [...tools.mcpTools, createThinkTool(), createWebFetchTool({ posture: webFetchPosture })];
|
|
319
|
+
await sink.reportProgress("Configuring sub-agents…");
|
|
320
|
+
const compiledSubagents = await transformAndCompileSubagents({
|
|
321
|
+
subAgents: blueprint.subAgents,
|
|
322
|
+
parentMcpTools: tools.mcpTools,
|
|
323
|
+
parentMcpServerToolMap: tools.serverToolMap,
|
|
324
|
+
parentMcpUsages: blueprint.mergedMcpServerUsages,
|
|
325
|
+
skills: input.skills.bySubAgent,
|
|
326
|
+
workspaceBackend: workspace.backend,
|
|
327
|
+
approvalGate: approvalGateConfig,
|
|
328
|
+
// Capture is universal: every sub-agent gets a CAS-observing backend wired
|
|
329
|
+
// to the SAME per-turn observer as the parent (Session 26, DD-19).
|
|
330
|
+
casObserver: workspace.casObserver,
|
|
331
|
+
parentModelName: modelName,
|
|
332
|
+
parentHasNativeThinking: modelHasNativeThinking(modelName),
|
|
333
|
+
webFetchPosture,
|
|
334
|
+
costAdvisory: costAdvisory ?? undefined,
|
|
335
|
+
modelFactory: buildModelFor,
|
|
336
|
+
shellEnv,
|
|
337
|
+
...(planModePermissions ? { permissions: planModePermissions } : {}),
|
|
338
|
+
});
|
|
339
|
+
sink.setupTiming.mark("compile_subagents");
|
|
340
|
+
sink.recordActivity();
|
|
341
|
+
await sink.reportProgress("Creating agent…");
|
|
342
|
+
// The runtime's memoized memory selection; it stamps the report on the
|
|
343
|
+
// status the first time it is pulled, before this turn's first persist.
|
|
344
|
+
const systemPrompt = composeSystemPrompt(input, await input.standing.selectRecalledMemories());
|
|
345
|
+
const outputSchema = input.structuredOutputSchema;
|
|
346
|
+
const responseFormat = outputSchema ? jsonSchemaToZod(outputSchema) : undefined;
|
|
347
|
+
// File capture point: the CAS-observing backend — git-tracked edits flow to
|
|
348
|
+
// disk (the boundary's git diff is authoritative) and the shared observer
|
|
349
|
+
// records the pre-turn bytes of every CAS-owned path. Gate-independent, so
|
|
350
|
+
// it holds even under the global bypass.
|
|
351
|
+
const fileBackend = await createCasCaptureBackend({ rootDir: primaryDir, observer: workspace.casObserver, shellEnv });
|
|
352
|
+
const graph = await createDeepAgent({
|
|
353
|
+
model,
|
|
354
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
355
|
+
checkpointer: checkpointer,
|
|
356
|
+
backend: fileBackend,
|
|
357
|
+
systemPrompt,
|
|
358
|
+
tools: graphTools,
|
|
359
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
360
|
+
middleware: middleware,
|
|
361
|
+
subagents: compiledSubagents ?? undefined,
|
|
362
|
+
...(responseFormat ? { responseFormat } : {}),
|
|
363
|
+
...(planModePermissions ? { permissions: planModePermissions } : {}),
|
|
364
|
+
});
|
|
365
|
+
const langgraphConfig = {
|
|
366
|
+
configurable: { thread_id: input.threadId },
|
|
367
|
+
// Hard enforcement of max_tool_rounds (null = unlimited): when the graph
|
|
368
|
+
// exhausts this, the stream throws GraphRecursionError and the adapter
|
|
369
|
+
// ends the turn `tool_call_limit` with the work checkpointed.
|
|
370
|
+
...(recursionLimit !== null ? { recursionLimit } : {}),
|
|
371
|
+
};
|
|
372
|
+
console.log(`[turn-setup] Complete: model=${modelName}, tools=${graphTools.length}, ` +
|
|
373
|
+
`middleware=${middleware.length}, thread_id=${input.threadId}`);
|
|
374
|
+
sink.setupTiming.mark("create_agent_graph");
|
|
375
|
+
emitTimingLog("execution_setup", {
|
|
376
|
+
execution_id: executionId,
|
|
377
|
+
session_id: sessionId,
|
|
378
|
+
harness: "native",
|
|
379
|
+
mcp_server_count: blueprint.mergedMcpServerUsages.length,
|
|
380
|
+
skill_count: blueprint.mergedSkillRefs.length,
|
|
381
|
+
workspace_entry_count: input.session.spec?.workspaceEntries?.length ?? 0,
|
|
382
|
+
}, sink.setupTiming);
|
|
383
|
+
sink.recordActivity();
|
|
384
|
+
return {
|
|
385
|
+
graph,
|
|
386
|
+
checkpointer,
|
|
387
|
+
langgraphConfig,
|
|
388
|
+
modelName,
|
|
389
|
+
pricing,
|
|
390
|
+
gate,
|
|
391
|
+
hasStructuredOutput: !!outputSchema,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* What the graph is invoked with. The checkpoint is read once (on the
|
|
396
|
+
* durable http saver an extra `getState` is a network round-trip): pending
|
|
397
|
+
* interrupts that the runtime's decisions answer make a `Command(resume)`;
|
|
398
|
+
* anything else is the turn's user message — the conversation catchup
|
|
399
|
+
* framed before it (cloud DD-006; in the USER MESSAGE so it enters the
|
|
400
|
+
* checkpointer with the turn), the structured-output contract appended, and
|
|
401
|
+
* the inline images FIRST as content blocks when the turn carries any (per
|
|
402
|
+
* Anthropic's images-before-text guidance; a plain string otherwise).
|
|
403
|
+
*/
|
|
404
|
+
export async function composeGraphInput(input, engine) {
|
|
405
|
+
const graphState = await engine.graph.getState(engine.langgraphConfig);
|
|
406
|
+
const resume = resolveResumeInput(input.approvalDecisions, graphState);
|
|
407
|
+
if (resume.isResumeFromApproval) {
|
|
408
|
+
return { kind: "resume", command: resume.graphInput };
|
|
409
|
+
}
|
|
410
|
+
const spec = input.execution.spec;
|
|
411
|
+
let userMessage = composeUserMessage(spec.message, input.standing.conversationCatchup);
|
|
412
|
+
if (engine.hasStructuredOutput) {
|
|
413
|
+
userMessage += `\n\n---\nIMPORTANT: When your analysis is complete, provide your findings as structured output matching the required schema. The system will capture your structured response automatically.`;
|
|
414
|
+
}
|
|
415
|
+
const { visionImages } = input.attachments;
|
|
416
|
+
return {
|
|
417
|
+
kind: "message",
|
|
418
|
+
input: {
|
|
419
|
+
messages: [
|
|
420
|
+
{
|
|
421
|
+
role: "user",
|
|
422
|
+
content: visionImages.length > 0
|
|
423
|
+
? [...toLangChainImageBlocks(visionImages), { type: "text", text: userMessage }]
|
|
424
|
+
: userMessage,
|
|
425
|
+
},
|
|
426
|
+
],
|
|
427
|
+
},
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
//# sourceMappingURL=turn-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-setup.js","sourceRoot":"","sources":["../../../src/activities/execute-deep-agent/turn-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The native deep-agent harness's stream phase — the single per-event
|
|
3
|
+
* consumption loop that turns a live LangGraph v3 event stream into the
|
|
4
|
+
* streamed transcript and the one fact that decides how
|
|
5
|
+
* the turn goes on (the graph paused at a gate).
|
|
6
|
+
*
|
|
7
|
+
* What the loop asks of the runtime, through the sink (`harness/types.ts`):
|
|
8
|
+
* `recordActivity()` per event (with the tool name on a tool start), so the
|
|
9
|
+
* runtime's stall watchdog measures the engine; `reportUsage()` per parent
|
|
10
|
+
* `message_finish`, priced here at the registry's rates for the model the
|
|
11
|
+
* turn runs on (`shared/model-pricing.ts`), so the runtime accounts and
|
|
12
|
+
* enforces the cost cap and writes `streamingUsage` (Q-M2a-2); `requestPersist()`
|
|
13
|
+
* where a discrete change or the streaming cadence says so
|
|
14
|
+
* (`shared/persist-decision.ts` over the builder's one dirty flag), AWAITED,
|
|
15
|
+
* so a platform STOP the runtime reads from that write aborts the signal
|
|
16
|
+
* before the next event is pulled; and `stopSignal`, checked at every event
|
|
17
|
+
* boundary and listened to inside the pull, where a stop cancels the graph
|
|
18
|
+
* run — the same act for every cause of stopping (the runtime knows why;
|
|
19
|
+
* this loop never does). An error the aborted run throws is the abort itself
|
|
20
|
+
* and settles `interrupted`, never `failed`.
|
|
21
|
+
*
|
|
22
|
+
* WHEN the run is aborted (S3 M2a, F-M2a-18): on the arrival of the next
|
|
23
|
+
* event — the graph's own step boundary — or after {@link STOP_GRACE_MS} if
|
|
24
|
+
* no event arrives. A LangGraph run aborted while a step is in flight leaves
|
|
25
|
+
* `@langchain/core` with an orphaned rejection (`AsyncGeneratorWithSetup`
|
|
26
|
+
* races its first pull against the signal eagerly, and an abort mid-step
|
|
27
|
+
* rejects a promise nothing awaits), which surfaces as a process-level
|
|
28
|
+
* `unhandledRejection` — logged by `main.ts`, but noise the runner must not
|
|
29
|
+
* produce on every pause. Aborting as an event arrives is clean, and it is
|
|
30
|
+
* exactly when the orchestrator's loop aborted; so the loop never aborts
|
|
31
|
+
* right after a persist, even one that answered STOP — it lets the next
|
|
32
|
+
* event arrive and stops there. A live engine yields an event well inside
|
|
33
|
+
* the grace; a wedged engine (the runtime's stall watchdog is the caller
|
|
34
|
+
* here) is forced, and that one orphan is the price of unblocking it — the
|
|
35
|
+
* contract's bound on settling `interrupted` is what wins.
|
|
36
|
+
*
|
|
37
|
+
* Until S3 M2a this loop (`streaming-v3.ts`) armed its own 120 s stall
|
|
38
|
+
* check, pulsed the Temporal heartbeat every 2 s, read STOP from its own
|
|
39
|
+
* persist and activated a graceful-stop middleware on it, told a pause from
|
|
40
|
+
* the activity's cancellation signal, and wrote PAUSED, COMPLETED and
|
|
41
|
+
* TERMINATED itself; every one of those is the runtime's now, and the loop
|
|
42
|
+
* reports only `completed`, `awaiting_approval` or `interrupted`. The
|
|
43
|
+
* graph's recursion limit propagates as its own error for `turn.ts` to
|
|
44
|
+
* classify (`tool_call_limit`), and an empty stream is an error the same
|
|
45
|
+
* way (`failed` on the `internal` surface).
|
|
46
|
+
*/
|
|
47
|
+
import type { TurnInput, TurnSink } from "../../harness/types.js";
|
|
48
|
+
import { InlinePublisher } from "./inline-publisher.js";
|
|
49
|
+
import { type V3ProtocolEvent } from "./v3-event-recorder.js";
|
|
50
|
+
import { V3StatusBuilder } from "./v3-status-builder.js";
|
|
51
|
+
import type { DeepAgentEngine, DeepAgentGraphInput, DeepAgentWorkspace } from "./turn-setup.js";
|
|
52
|
+
/**
|
|
53
|
+
* The subset of the v3 `GraphRunStream` this loop consumes. Kept structural
|
|
54
|
+
* so the loop is unit-testable with a scripted stream — no live graph.
|
|
55
|
+
*/
|
|
56
|
+
export interface StreamableRun extends AsyncIterable<V3ProtocolEvent> {
|
|
57
|
+
readonly output: Promise<unknown>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Why the turn's stream ended. `completed` and `awaiting_approval` proceed to
|
|
61
|
+
* the settle; `interrupted` is the runtime's stop, and the adapter settles
|
|
62
|
+
* `interrupted` (the runtime classifies the cause from its own evidence).
|
|
63
|
+
*/
|
|
64
|
+
export type DeepAgentStreamReason = "completed" | "awaiting_approval" | "interrupted";
|
|
65
|
+
export interface DeepAgentStreamResult {
|
|
66
|
+
readonly reason: DeepAgentStreamReason;
|
|
67
|
+
readonly eventsProcessed: number;
|
|
68
|
+
/** The graph's final state (`structuredResponse` rides it); absent unless the stream completed and the output resolved in time. */
|
|
69
|
+
readonly runOutput: Record<string, unknown> | undefined;
|
|
70
|
+
/** Inline publishes fired mid-turn, drained by the settle. */
|
|
71
|
+
readonly pendingPublishPromises: readonly Promise<void>[];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The transcript writers of one turn: the builder over `sink.status` and the
|
|
75
|
+
* publisher that writes artifacts through it (so a published artifact still
|
|
76
|
+
* forces the next persist). Built by the adapter's turn once and shared by
|
|
77
|
+
* the stream and the settle; the builder reports usage into the sink, priced
|
|
78
|
+
* for the model the turn runs on.
|
|
79
|
+
*/
|
|
80
|
+
export interface DeepAgentTranscript {
|
|
81
|
+
readonly builder: V3StatusBuilder;
|
|
82
|
+
readonly publisher: InlinePublisher;
|
|
83
|
+
}
|
|
84
|
+
export declare function createDeepAgentTranscript(input: TurnInput, sink: TurnSink, engine: DeepAgentEngine, workspace: DeepAgentWorkspace): DeepAgentTranscript;
|
|
85
|
+
export interface DeepAgentStreamDeps {
|
|
86
|
+
readonly input: TurnInput;
|
|
87
|
+
readonly sink: TurnSink;
|
|
88
|
+
readonly engine: DeepAgentEngine;
|
|
89
|
+
readonly graphInput: DeepAgentGraphInput;
|
|
90
|
+
readonly transcript: DeepAgentTranscript;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Start the graph run and consume it to the end, folding every event into
|
|
94
|
+
* the transcript. Returns why it ended; throws only what `turn.ts`
|
|
95
|
+
* classifies (the recursion limit, an empty stream, an engine error).
|
|
96
|
+
*/
|
|
97
|
+
export declare function consumeDeepAgentStream(deps: DeepAgentStreamDeps): Promise<DeepAgentStreamResult>;
|