@stigmer/runner 3.15.3-dev.20260914121148 → 3.16.0
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 -1
- package/dist/.build-fingerprint +1 -1
- package/dist/__test-utils__/approval-contract/types.d.ts +1 -1
- package/dist/__test-utils__/hermetic-activity.d.ts +61 -7
- package/dist/__test-utils__/hermetic-activity.js +100 -9
- package/dist/__test-utils__/hermetic-activity.js.map +1 -1
- package/dist/__test-utils__/model-registry-fixture.d.ts +22 -3
- package/dist/__test-utils__/model-registry-fixture.js +22 -7
- package/dist/__test-utils__/model-registry-fixture.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.d.ts +2 -2
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.js +2 -2
- package/dist/activities/execute-cursor/__test-utils__/fold.d.ts +61 -0
- package/dist/activities/execute-cursor/__test-utils__/fold.js +94 -0
- package/dist/activities/execute-cursor/__test-utils__/fold.js.map +1 -0
- package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js +1 -1
- package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +47 -12
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +41 -10
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.d.ts +15 -6
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js +17 -4
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js.map +1 -1
- package/dist/activities/execute-cursor/adapter.d.ts +4 -4
- package/dist/activities/execute-cursor/adapter.js +4 -4
- package/dist/activities/execute-cursor/approval-policy.d.ts +10 -10
- package/dist/activities/execute-cursor/approval-policy.js +12 -23
- package/dist/activities/execute-cursor/approval-policy.js.map +1 -1
- package/dist/activities/execute-cursor/approval-state.d.ts +35 -1
- package/dist/activities/execute-cursor/approval-state.js +65 -0
- package/dist/activities/execute-cursor/approval-state.js.map +1 -1
- package/dist/activities/execute-cursor/{message-translator.d.ts → boundary-rows.d.ts} +45 -341
- package/dist/activities/execute-cursor/boundary-rows.js +1018 -0
- package/dist/activities/execute-cursor/boundary-rows.js.map +1 -0
- package/dist/activities/execute-cursor/cursor-capabilities.d.ts +1 -1
- package/dist/activities/execute-cursor/cursor-capabilities.js +1 -1
- package/dist/activities/execute-cursor/cursor-event-recorder.d.ts +33 -14
- package/dist/activities/execute-cursor/cursor-event-recorder.js +43 -21
- package/dist/activities/execute-cursor/cursor-event-recorder.js.map +1 -1
- package/dist/activities/execute-cursor/prompt-builder.d.ts +3 -3
- package/dist/activities/execute-cursor/prompt-builder.js +4 -4
- package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
- package/dist/activities/execute-cursor/service-tier.js +1 -2
- package/dist/activities/execute-cursor/service-tier.js.map +1 -1
- package/dist/activities/execute-cursor/sub-agent-steps.d.ts +79 -0
- package/dist/activities/execute-cursor/sub-agent-steps.js +180 -0
- package/dist/activities/execute-cursor/sub-agent-steps.js.map +1 -0
- package/dist/activities/execute-cursor/tool-result.d.ts +49 -0
- package/dist/activities/execute-cursor/tool-result.js +130 -0
- package/dist/activities/execute-cursor/tool-result.js.map +1 -0
- package/dist/activities/execute-cursor/translator.d.ts +178 -0
- package/dist/activities/execute-cursor/translator.js +485 -0
- package/dist/activities/execute-cursor/translator.js.map +1 -0
- package/dist/activities/execute-cursor/turn-boundary.d.ts +15 -5
- package/dist/activities/execute-cursor/turn-boundary.js +10 -14
- package/dist/activities/execute-cursor/turn-boundary.js.map +1 -1
- package/dist/activities/execute-cursor/turn-settle.d.ts +11 -7
- package/dist/activities/execute-cursor/turn-settle.js +47 -34
- package/dist/activities/execute-cursor/turn-settle.js.map +1 -1
- package/dist/activities/execute-cursor/turn-setup.d.ts +2 -2
- package/dist/activities/execute-cursor/turn-setup.js +5 -5
- package/dist/activities/execute-cursor/turn-setup.js.map +1 -1
- package/dist/activities/execute-cursor/turn-stream.d.ts +23 -14
- package/dist/activities/execute-cursor/turn-stream.js +41 -28
- package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
- package/dist/activities/execute-cursor/turn.d.ts +4 -4
- package/dist/activities/execute-cursor/turn.js +5 -5
- package/dist/activities/execute-cursor/usage-pricing.d.ts +2 -2
- package/dist/activities/execute-cursor/usage-pricing.js +2 -2
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.d.ts +2 -2
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js +2 -2
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.d.ts +16 -11
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js +22 -10
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.d.ts +2 -3
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js +2 -3
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.d.ts +12 -3
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js +18 -4
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.d.ts +10 -1
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js +24 -11
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js.map +1 -1
- package/dist/activities/execute-deep-agent/adapter.d.ts +1 -1
- package/dist/activities/execute-deep-agent/adapter.js +1 -1
- package/dist/activities/execute-deep-agent/approval-file-change.d.ts +19 -19
- package/dist/activities/execute-deep-agent/approval-file-change.js +16 -15
- package/dist/activities/execute-deep-agent/approval-file-change.js.map +1 -1
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.d.ts +2 -2
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.js +2 -2
- package/dist/activities/execute-deep-agent/hitl.d.ts +2 -2
- package/dist/activities/execute-deep-agent/hitl.js +2 -2
- package/dist/activities/execute-deep-agent/inline-publisher.d.ts +13 -3
- package/dist/activities/execute-deep-agent/inline-publisher.js +3 -3
- package/dist/activities/execute-deep-agent/inline-publisher.js.map +1 -1
- package/dist/activities/execute-deep-agent/prompt-builder.d.ts +3 -3
- package/dist/activities/execute-deep-agent/prompt-builder.js +6 -7
- package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
- package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +16 -8
- package/dist/activities/execute-deep-agent/streaming-side-effects.js +20 -33
- package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +3 -3
- package/dist/activities/execute-deep-agent/subagent-transformer.js +1 -1
- package/dist/activities/execute-deep-agent/translator.d.ts +134 -0
- package/dist/activities/execute-deep-agent/translator.js +418 -0
- package/dist/activities/execute-deep-agent/translator.js.map +1 -0
- package/dist/activities/execute-deep-agent/turn-settle.d.ts +13 -7
- package/dist/activities/execute-deep-agent/turn-settle.js +34 -45
- package/dist/activities/execute-deep-agent/turn-settle.js.map +1 -1
- package/dist/activities/execute-deep-agent/turn-setup.d.ts +8 -8
- package/dist/activities/execute-deep-agent/turn-setup.js +7 -7
- package/dist/activities/execute-deep-agent/turn-stream.d.ts +13 -10
- package/dist/activities/execute-deep-agent/turn-stream.js +44 -41
- package/dist/activities/execute-deep-agent/turn-stream.js.map +1 -1
- package/dist/activities/execute-deep-agent/turn.d.ts +3 -3
- package/dist/activities/execute-deep-agent/turn.js +3 -3
- package/dist/activities/generate-session-subject.d.ts +25 -4
- package/dist/activities/generate-session-subject.js +17 -7
- package/dist/activities/generate-session-subject.js.map +1 -1
- package/dist/client/stigmer-client.d.ts +17 -6
- package/dist/client/stigmer-client.js +47 -14
- package/dist/client/stigmer-client.js.map +1 -1
- package/dist/config.d.ts +6 -3
- package/dist/config.js +4 -1
- package/dist/config.js.map +1 -1
- package/dist/harness/approval-decisions.d.ts +1 -1
- package/dist/harness/approval-decisions.js +1 -1
- package/dist/harness/capabilities.d.ts +21 -11
- package/dist/harness/capabilities.js +2 -2
- package/dist/harness/capture.d.ts +4 -4
- package/dist/harness/capture.js +4 -4
- package/dist/harness/persist-chokepoint.d.ts +3 -3
- package/dist/harness/persist-chokepoint.js +3 -3
- package/dist/harness/registry.d.ts +2 -2
- package/dist/harness/registry.js +2 -2
- package/dist/harness/run-turn.d.ts +6 -4
- package/dist/harness/run-turn.js +31 -9
- package/dist/harness/run-turn.js.map +1 -1
- package/dist/harness/stop-controller.d.ts +1 -1
- package/dist/harness/stop-controller.js +1 -1
- package/dist/harness/terminal-table.d.ts +7 -7
- package/dist/harness/terminal-table.js +7 -7
- package/dist/harness/transcript/builder.d.ts +182 -0
- package/dist/harness/transcript/builder.js +693 -0
- package/dist/harness/transcript/builder.js.map +1 -0
- package/dist/harness/transcript/events.d.ts +218 -0
- package/dist/harness/transcript/events.js +50 -0
- package/dist/harness/transcript/events.js.map +1 -0
- package/dist/harness/transcript/state.d.ts +110 -0
- package/dist/harness/transcript/state.js +148 -0
- package/dist/harness/transcript/state.js.map +1 -0
- package/dist/harness/turn-context.d.ts +54 -38
- package/dist/harness/turn-context.js +42 -43
- package/dist/harness/turn-context.js.map +1 -1
- package/dist/harness/types.d.ts +63 -22
- package/dist/harness/types.js +12 -11
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/usage-accumulator.d.ts +2 -2
- package/dist/harness/usage-accumulator.js +2 -2
- package/dist/harness-adapters.d.ts +5 -4
- package/dist/harness-adapters.js +5 -4
- package/dist/harness-adapters.js.map +1 -1
- package/dist/interceptors/run-credential-activity.d.ts +28 -0
- package/dist/interceptors/run-credential-activity.js +56 -0
- package/dist/interceptors/run-credential-activity.js.map +1 -0
- package/dist/middleware/approval-gate.d.ts +6 -0
- package/dist/middleware/approval-gate.js +7 -57
- package/dist/middleware/approval-gate.js.map +1 -1
- package/dist/middleware/cost-advisory.d.ts +3 -3
- package/dist/middleware/cost-advisory.js +3 -3
- package/dist/middleware/index.d.ts +1 -1
- package/dist/middleware/index.js +1 -1
- package/dist/runner-manager.js +10 -4
- package/dist/runner-manager.js.map +1 -1
- package/dist/shared/activity-input.d.ts +9 -0
- package/dist/shared/activity-input.js +17 -0
- package/dist/shared/activity-input.js.map +1 -1
- package/dist/shared/approval-policy.d.ts +53 -0
- package/dist/shared/approval-policy.js +76 -0
- package/dist/shared/approval-policy.js.map +1 -1
- package/dist/shared/args-preview.d.ts +45 -22
- package/dist/shared/args-preview.js +51 -41
- package/dist/shared/args-preview.js.map +1 -1
- package/dist/shared/attachment-resolver.d.ts +4 -4
- package/dist/shared/attachment-resolver.js +4 -4
- package/dist/shared/attachment-zip.d.ts +2 -2
- package/dist/shared/attachment-zip.js +2 -2
- package/dist/shared/channel-attachment.d.ts +8 -5
- package/dist/shared/channel-attachment.js +10 -6
- package/dist/shared/channel-attachment.js.map +1 -1
- package/dist/shared/cost-guard.d.ts +2 -2
- package/dist/shared/cost-guard.js +2 -2
- package/dist/shared/exact-apply.d.ts +1 -1
- package/dist/shared/exact-apply.js +1 -1
- package/dist/shared/execution-context.d.ts +2 -2
- package/dist/shared/execution-context.js +2 -2
- package/dist/shared/extract-structured-output.d.ts +2 -2
- package/dist/shared/extract-structured-output.js +2 -2
- package/dist/shared/filereview/cas-touched.d.ts +2 -2
- package/dist/shared/filereview/cas-touched.js +2 -2
- package/dist/shared/filereview/progress.d.ts +13 -0
- package/dist/shared/filereview/progress.js +13 -0
- package/dist/shared/filereview/progress.js.map +1 -1
- package/dist/shared/heartbeat.d.ts +1 -1
- package/dist/shared/heartbeat.js +1 -1
- package/dist/shared/llm-backend.d.ts +0 -4
- package/dist/shared/llm-backend.js +0 -4
- package/dist/shared/llm-backend.js.map +1 -1
- package/dist/shared/memory-attachment.d.ts +16 -9
- package/dist/shared/memory-attachment.js +18 -10
- package/dist/shared/memory-attachment.js.map +1 -1
- package/dist/shared/model-error.d.ts +1 -2
- package/dist/shared/model-error.js +1 -2
- package/dist/shared/model-error.js.map +1 -1
- package/dist/shared/persist-decision.d.ts +18 -24
- package/dist/shared/persist-decision.js +19 -11
- package/dist/shared/persist-decision.js.map +1 -1
- package/dist/shared/prompt-sections.d.ts +4 -4
- package/dist/shared/prompt-sections.js +4 -4
- package/dist/shared/run-credential-store.d.ts +32 -0
- package/dist/shared/run-credential-store.js +39 -0
- package/dist/shared/run-credential-store.js.map +1 -0
- package/dist/shared/run-credential.d.ts +61 -0
- package/dist/shared/run-credential.js +68 -0
- package/dist/shared/run-credential.js.map +1 -0
- package/dist/shared/skill-resolver.d.ts +3 -3
- package/dist/shared/skill-resolver.js +3 -3
- package/dist/shared/status-offload.d.ts +1 -1
- package/dist/shared/status-offload.js +2 -2
- package/dist/shared/status-offload.js.map +1 -1
- package/dist/shared/streaming-scheduler.d.ts +2 -7
- package/dist/shared/streaming-scheduler.js +6 -14
- package/dist/shared/streaming-scheduler.js.map +1 -1
- package/dist/shared/subagent-rows.d.ts +2 -2
- package/dist/shared/subagent-rows.js +2 -2
- package/dist/shared/synthesized-attachment.d.ts +30 -3
- package/dist/shared/synthesized-attachment.js +26 -0
- package/dist/shared/synthesized-attachment.js.map +1 -1
- package/dist/shared/todos.d.ts +3 -3
- package/dist/shared/todos.js +3 -3
- package/dist/shared/tool-row.d.ts +19 -1
- package/dist/shared/tool-row.js +36 -2
- package/dist/shared/tool-row.js.map +1 -1
- package/dist/shared/worker-shutdown.d.ts +1 -1
- package/dist/shared/worker-shutdown.js +1 -1
- package/dist/shared/workspace/session-provision.d.ts +1 -1
- package/dist/shared/workspace/session-provision.js +1 -1
- package/dist/shared/workspace/sources/empty.d.ts +1 -1
- package/dist/shared/workspace/sources/empty.js +1 -2
- package/dist/shared/workspace/sources/empty.js.map +1 -1
- package/dist/shared/workspace/sources/git.js +4 -4
- package/dist/shared/workspace/sources/git.js.map +1 -1
- package/dist/shared/workspace/sources/local-path.js +6 -6
- package/dist/shared/workspace/sources/local-path.js.map +1 -1
- package/dist/shared/workspace/stigmer-link.d.ts +1 -1
- package/dist/shared/workspace/stigmer-link.js +1 -1
- package/dist/shared/workspace/types.d.ts +2 -5
- package/dist/shared/workspace/types.js +0 -6
- package/dist/shared/workspace/types.js.map +1 -1
- package/dist/shared/workspace/writeback-coordinator.d.ts +17 -4
- package/dist/shared/workspace/writeback-coordinator.js +7 -9
- package/dist/shared/workspace/writeback-coordinator.js.map +1 -1
- package/dist/worker.js +10 -3
- package/dist/worker.js.map +1 -1
- package/dist/workflow-source.d.ts +10 -0
- package/dist/workflow-source.js +12 -0
- package/dist/workflow-source.js.map +1 -1
- package/dist/workflows/execute-from-execution.d.ts +15 -0
- package/dist/workflows/execute-from-execution.js +11 -0
- package/dist/workflows/execute-from-execution.js.map +1 -1
- package/dist/workflows/index.d.ts +5 -3
- package/dist/workflows/index.js +5 -3
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/interceptors/run-credential.d.ts +34 -0
- package/dist/workflows/interceptors/run-credential.js +71 -0
- package/dist/workflows/interceptors/run-credential.js.map +1 -0
- package/package.json +4 -4
- package/src/__test-utils__/__tests__/execution-record-barrier.test.ts +70 -0
- package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +35 -1
- package/src/__test-utils__/approval-contract/contract.ts +1 -1
- package/src/__test-utils__/approval-contract/types.ts +1 -1
- package/src/__test-utils__/harness-boot-order-child.ts +1 -1
- package/src/__test-utils__/harness-contract/contract.ts +8 -8
- package/src/__test-utils__/harness-contract/recording-sink.ts +11 -1
- package/src/__test-utils__/harness-contract/runtime-contract.ts +52 -16
- package/src/__test-utils__/harness-contract/scripted-adapter.ts +47 -43
- package/src/__test-utils__/hermetic-activity.ts +113 -9
- package/src/__test-utils__/model-registry-fixture.ts +31 -7
- package/src/__test-utils__/module-specifiers.ts +32 -3
- package/src/__tests__/harness-boot-order.test.ts +1 -1
- package/src/__tests__/harness-contract.test.ts +1 -1
- package/src/__tests__/run-credential-e2e.test.ts +233 -0
- package/src/__tests__/run-credential-registration.test.ts +80 -0
- package/src/__tests__/runner-manager.test.ts +1 -1
- package/src/activities/__tests__/generate-session-subject-wire.test.ts +119 -0
- package/src/activities/execute-cursor/__test-utils__/__tests__/scripted-double.test.ts +1 -1
- package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +2 -2
- package/src/activities/execute-cursor/__test-utils__/fold.ts +116 -0
- package/src/activities/execute-cursor/__test-utils__/gateway-substrate.ts +1 -1
- package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +67 -17
- package/src/activities/execute-cursor/__test-utils__/scripted-agent.ts +19 -5
- package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/approval-state.test.ts +14 -21
- package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +3 -3
- package/src/activities/execute-cursor/__tests__/coarse-fingerprint.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/cursor-event-recorder.test.ts +142 -0
- package/src/activities/execute-cursor/__tests__/cursor-fetch-interceptor-bypass.test.ts +19 -8
- package/src/activities/execute-cursor/__tests__/cursor-sdk-auth-smoke.test.ts +10 -8
- package/src/activities/execute-cursor/__tests__/cursor-transcript-live.test.ts +298 -0
- package/src/activities/execute-cursor/__tests__/deny-gate-exact-apply.test.ts +4 -2
- package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/deny-and-retry.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/mcp-tool-call.status.json +71 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-task-note.status.json +73 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.error-delta.status.json +78 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.output-first.status.json +72 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.status.json +72 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sub-agent-delegation.status.json +109 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/thinking-turn.status.json +78 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/todo-write.status.json +119 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-error.status.json +68 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-only-step.status.json +67 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattributed-hook-block.status.json +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +7 -7
- package/src/activities/execute-cursor/__tests__/hermetic/mcp-tool-call.test.ts +146 -0
- package/src/activities/execute-cursor/__tests__/hermetic/pause-vs-shutdown.test.ts +5 -5
- package/src/activities/execute-cursor/__tests__/hermetic/plain-turn.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/hermetic/run-wait-arms.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/hermetic/sdk-task-note.test.ts +122 -0
- package/src/activities/execute-cursor/__tests__/hermetic/shell-output-delta.test.ts +276 -0
- package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +8 -8
- package/src/activities/execute-cursor/__tests__/hermetic/sub-agent-delegation.test.ts +196 -0
- package/src/activities/execute-cursor/__tests__/hermetic/thinking-turn.test.ts +145 -0
- package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/todo-write.test.ts +165 -0
- package/src/activities/execute-cursor/__tests__/hermetic/tool-call.test.ts +3 -3
- package/src/activities/execute-cursor/__tests__/hermetic/tool-error.test.ts +138 -0
- package/src/activities/execute-cursor/__tests__/hermetic/tool-only-step.test.ts +130 -0
- package/src/activities/execute-cursor/__tests__/hermetic/unattributed-hook-block.test.ts +13 -1
- package/src/activities/execute-cursor/__tests__/hermetic/workspace-lock-timeout.test.ts +2 -2
- package/src/activities/execute-cursor/__tests__/hitl-ledger.test.ts +43 -60
- package/src/activities/execute-cursor/__tests__/hitl-resume-history.test.ts +23 -28
- package/src/activities/execute-cursor/__tests__/hook-script.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/http2-interceptor.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/prompt-goldens.test.ts +5 -5
- package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +11 -13
- package/src/activities/execute-cursor/__tests__/sequential-gate-resume.test.ts +8 -11
- package/src/activities/execute-cursor/__tests__/tool-result-image.test.ts +8 -22
- package/src/activities/execute-cursor/__tests__/translator.test.ts +594 -0
- package/src/activities/execute-cursor/__tests__/turn-boundary.test.ts +8 -5
- package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +87 -63
- package/src/activities/execute-cursor/adapter.ts +4 -4
- package/src/activities/execute-cursor/approval-policy.ts +12 -24
- package/src/activities/execute-cursor/approval-state.ts +66 -1
- package/src/activities/execute-cursor/boundary-rows.ts +1132 -0
- package/src/activities/execute-cursor/cursor-capabilities.ts +1 -1
- package/src/activities/execute-cursor/cursor-event-recorder.ts +57 -28
- package/src/activities/execute-cursor/fetch-interceptor.ts +1 -1
- package/src/activities/execute-cursor/http2-interceptor.ts +1 -1
- package/src/activities/execute-cursor/prompt-builder.ts +6 -6
- package/src/activities/execute-cursor/service-tier.ts +1 -2
- package/src/activities/execute-cursor/sub-agent-steps.ts +188 -0
- package/src/activities/execute-cursor/tool-result.ts +128 -0
- package/src/activities/execute-cursor/translator.ts +541 -0
- package/src/activities/execute-cursor/turn-boundary.ts +21 -14
- package/src/activities/execute-cursor/turn-settle.ts +46 -34
- package/src/activities/execute-cursor/turn-setup.ts +5 -5
- package/src/activities/execute-cursor/turn-stream.ts +49 -46
- package/src/activities/execute-cursor/turn.ts +5 -5
- package/src/activities/execute-cursor/usage-pricing.ts +2 -2
- package/src/activities/execute-deep-agent/__test-utils__/contract-subject.ts +2 -2
- package/src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts +23 -11
- package/src/activities/execute-deep-agent/__test-utils__/hitl-script.ts +1 -1
- package/src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts +2 -3
- package/src/activities/execute-deep-agent/__test-utils__/scripted-model.ts +25 -4
- package/src/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.ts +25 -11
- package/src/activities/execute-deep-agent/__tests__/adapter-graph-is-sdk-free.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/adapter-is-temporal-free.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/approval-file-change.test.ts +6 -17
- package/src/activities/execute-deep-agent/__tests__/hermetic/file-review-capture.test.ts +25 -8
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.status.json +2 -7
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.status.json +4 -14
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.status.json +4 -7
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.status.json +2 -9
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.status.json +2 -9
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.status.json +109 -76
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.status.json +2 -10
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.status.json +2 -10
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.status.json +3 -6
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/write-todos.status.json +92 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/harness-contract.test.ts +3 -3
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-approve-all-lease.test.ts +9 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-round-trips.test.ts +3 -3
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-sequential-gates.test.ts +3 -3
- package/src/activities/execute-deep-agent/__tests__/hermetic/inline-artifact-across-gate.test.ts +7 -6
- package/src/activities/execute-deep-agent/__tests__/hermetic/pause-vs-shutdown.test.ts +10 -11
- package/src/activities/execute-deep-agent/__tests__/hermetic/plain-turn.test.ts +4 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/platform-stop.test.ts +9 -8
- package/src/activities/execute-deep-agent/__tests__/hermetic/recursion-limit.test.ts +21 -13
- package/src/activities/execute-deep-agent/__tests__/hermetic/resolution-error.test.ts +2 -2
- package/src/activities/execute-deep-agent/__tests__/hermetic/structured-output.test.ts +7 -7
- package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-delegation.test.ts +28 -12
- package/src/activities/execute-deep-agent/__tests__/hermetic/tool-call.test.ts +21 -21
- package/src/activities/execute-deep-agent/__tests__/hermetic/workspace-lock-timeout.test.ts +5 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/write-todos.test.ts +160 -0
- package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +35 -30
- package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +3 -4
- package/src/activities/execute-deep-agent/__tests__/prompt-goldens.test.ts +12 -10
- package/src/activities/execute-deep-agent/__tests__/scripted-model.test.ts +13 -3
- package/src/activities/execute-deep-agent/__tests__/streaming-side-effects.test.ts +26 -18
- package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/{subagent-tracker.test.ts → translator-subagents.test.ts} +76 -57
- package/src/activities/execute-deep-agent/__tests__/{v3-status-builder.test.ts → translator-through-builder.test.ts} +213 -299
- package/src/activities/execute-deep-agent/__tests__/translator.test.ts +505 -0
- package/src/activities/execute-deep-agent/__tests__/turn-stream.test.ts +11 -29
- package/src/activities/execute-deep-agent/adapter.ts +1 -1
- package/src/activities/execute-deep-agent/approval-file-change.ts +20 -22
- package/src/activities/execute-deep-agent/deep-agent-capabilities.ts +2 -2
- package/src/activities/execute-deep-agent/hitl.ts +2 -2
- package/src/activities/execute-deep-agent/inline-publisher.ts +16 -5
- package/src/activities/execute-deep-agent/prompt-builder.ts +6 -7
- package/src/activities/execute-deep-agent/streaming-side-effects.ts +22 -31
- package/src/activities/execute-deep-agent/subagent-transformer.ts +3 -3
- package/src/activities/execute-deep-agent/translator.ts +463 -0
- package/src/activities/execute-deep-agent/turn-settle.ts +35 -43
- package/src/activities/execute-deep-agent/turn-setup.ts +8 -8
- package/src/activities/execute-deep-agent/turn-stream.ts +53 -51
- package/src/activities/execute-deep-agent/turn.ts +3 -3
- package/src/activities/generate-session-subject.ts +29 -4
- package/src/client/__tests__/stigmer-client.test.ts +92 -0
- package/src/client/stigmer-client.ts +48 -14
- package/src/config.ts +6 -3
- package/src/harness/README.md +335 -0
- package/src/harness/__tests__/approval-decisions.test.ts +2 -2
- package/src/harness/__tests__/capture.test.ts +3 -3
- package/src/harness/__tests__/import-direction.test.ts +3 -2
- package/src/harness/__tests__/mount-skills.test.ts +4 -1
- package/src/harness/__tests__/readme-index.test.ts +339 -0
- package/src/harness/__tests__/run-turn.test.ts +131 -6
- package/src/harness/__tests__/transcript-is-engine-free.test.ts +83 -0
- package/src/harness/__tests__/transcript-writers.test.ts +191 -0
- package/src/harness/__tests__/turn-attachments-vision.test.ts +5 -2
- package/src/harness/__tests__/turn-context.test.ts +5 -5
- package/src/harness/approval-decisions.ts +1 -1
- package/src/harness/capabilities.ts +21 -11
- package/src/harness/capture.ts +4 -4
- package/src/harness/persist-chokepoint.ts +3 -3
- package/src/harness/registry.ts +2 -2
- package/src/harness/run-turn.ts +33 -9
- package/src/harness/stop-controller.ts +1 -1
- package/src/harness/terminal-table.ts +7 -7
- package/src/harness/transcript/__tests__/builder.test.ts +975 -0
- package/src/harness/transcript/__tests__/state.test.ts +143 -0
- package/src/harness/transcript/builder.ts +755 -0
- package/src/harness/transcript/events.ts +262 -0
- package/src/harness/transcript/state.ts +167 -0
- package/src/harness/turn-context.ts +61 -46
- package/src/harness/types.ts +64 -22
- package/src/harness/usage-accumulator.ts +2 -2
- package/src/harness-adapters.ts +5 -4
- package/src/interceptors/__tests__/run-credential-activity.test.ts +133 -0
- package/src/interceptors/run-credential-activity.ts +67 -0
- package/src/middleware/__tests__/cost-advisory.test.ts +2 -2
- package/src/middleware/approval-gate.ts +7 -74
- package/src/middleware/cost-advisory.ts +3 -3
- package/src/middleware/index.ts +1 -1
- package/src/runner-manager.ts +14 -4
- package/src/shared/__tests__/approval-policy.test.ts +45 -0
- package/src/shared/__tests__/args-preview.test.ts +40 -20
- package/src/shared/__tests__/attachment-naming.test.ts +1 -1
- package/src/shared/__tests__/attachment-resolver.test.ts +5 -5
- package/src/shared/__tests__/attachment-zip.test.ts +1 -1
- package/src/shared/__tests__/blueprint-resolver.test.ts +1 -1
- package/src/shared/__tests__/channel-attachment.test.ts +12 -0
- package/src/shared/__tests__/cost-guard.test.ts +1 -1
- package/src/shared/__tests__/exact-apply.test.ts +2 -1
- package/src/shared/__tests__/memory-attachment.test.ts +17 -0
- package/src/shared/__tests__/persist-decision.test.ts +19 -33
- package/src/shared/__tests__/prompt-sections.test.ts +1 -1
- package/src/shared/__tests__/run-credential.test.ts +111 -0
- package/src/shared/__tests__/stamp-flowed-rows.test.ts +1 -1
- package/src/shared/__tests__/status-offload.test.ts +1 -1
- package/src/shared/__tests__/streaming-scheduler.test.ts +8 -9
- package/src/shared/__tests__/todos.test.ts +1 -1
- package/src/shared/__tests__/tool-row.test.ts +1 -1
- package/src/shared/activity-input.ts +21 -0
- package/src/shared/approval-policy.ts +95 -0
- package/src/shared/args-preview.ts +51 -42
- package/src/shared/attachment-resolver.ts +4 -4
- package/src/shared/attachment-zip.ts +2 -2
- package/src/shared/channel-attachment.ts +14 -6
- package/src/shared/cost-guard.ts +2 -2
- package/src/shared/exact-apply.ts +1 -1
- package/src/shared/execution-context.ts +2 -2
- package/src/shared/extract-structured-output.ts +2 -2
- package/src/shared/filereview/__tests__/capture.test.ts +9 -5
- package/src/shared/filereview/__tests__/git-substrate.test.ts +4 -1
- package/src/shared/filereview/__tests__/proxy-reconcile.test.ts +3 -3
- package/src/shared/filereview/cas-touched.ts +2 -2
- package/src/shared/filereview/progress.ts +13 -0
- package/src/shared/heartbeat.ts +1 -1
- package/src/shared/llm-backend.ts +0 -4
- package/src/shared/memory-attachment.ts +22 -10
- package/src/shared/model-error.ts +1 -2
- package/src/shared/persist-decision.ts +19 -28
- package/src/shared/prompt-sections.ts +4 -4
- package/src/shared/run-credential-store.ts +45 -0
- package/src/shared/run-credential.ts +70 -0
- package/src/shared/skill-resolver.ts +3 -3
- package/src/shared/status-offload.ts +2 -2
- package/src/shared/streaming-scheduler.ts +8 -13
- package/src/shared/subagent-rows.ts +2 -2
- package/src/shared/synthesized-attachment.ts +38 -3
- package/src/shared/todos.ts +3 -3
- package/src/shared/tool-row.ts +38 -2
- package/src/shared/worker-shutdown.ts +1 -1
- package/src/shared/workspace/__tests__/git-source.test.ts +3 -3
- package/src/shared/workspace/__tests__/provisioner.test.ts +5 -5
- package/src/shared/workspace/__tests__/session-provision.test.ts +2 -2
- package/src/shared/workspace/__tests__/writeback-coordinator.integration.test.ts +8 -9
- package/src/shared/workspace/__tests__/writeback-coordinator.test.ts +25 -25
- package/src/shared/workspace/provisioner.ts +1 -1
- package/src/shared/workspace/session-provision.ts +1 -1
- package/src/shared/workspace/sources/empty.ts +2 -2
- package/src/shared/workspace/sources/git.ts +3 -4
- package/src/shared/workspace/sources/local-path.ts +5 -6
- package/src/shared/workspace/stigmer-link.ts +1 -1
- package/src/shared/workspace/types.ts +2 -5
- package/src/shared/workspace/writeback-coordinator.ts +23 -12
- package/src/worker.ts +15 -3
- package/src/workflow-source.ts +15 -0
- package/src/workflows/__tests__/run-credential-interceptor.test.ts +178 -0
- package/src/workflows/execute-from-execution.ts +17 -0
- package/src/workflows/index.ts +5 -3
- package/src/workflows/interceptors/run-credential.ts +101 -0
- package/dist/activities/execute-cursor/delta-enricher.d.ts +0 -87
- package/dist/activities/execute-cursor/delta-enricher.js +0 -265
- package/dist/activities/execute-cursor/delta-enricher.js.map +0 -1
- package/dist/activities/execute-cursor/message-translator.js +0 -2040
- package/dist/activities/execute-cursor/message-translator.js.map +0 -1
- package/dist/activities/execute-cursor/todo-tracker.d.ts +0 -40
- package/dist/activities/execute-cursor/todo-tracker.js +0 -80
- package/dist/activities/execute-cursor/todo-tracker.js.map +0 -1
- package/dist/activities/execute-deep-agent/execution-state.d.ts +0 -54
- package/dist/activities/execute-deep-agent/execution-state.js +0 -68
- package/dist/activities/execute-deep-agent/execution-state.js.map +0 -1
- package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +0 -65
- package/dist/activities/execute-deep-agent/status-builder-shared.js +0 -90
- package/dist/activities/execute-deep-agent/status-builder-shared.js.map +0 -1
- package/dist/activities/execute-deep-agent/subagent-tracker.d.ts +0 -113
- package/dist/activities/execute-deep-agent/subagent-tracker.js +0 -400
- package/dist/activities/execute-deep-agent/subagent-tracker.js.map +0 -1
- package/dist/activities/execute-deep-agent/v3-events.d.ts +0 -102
- package/dist/activities/execute-deep-agent/v3-events.js +0 -35
- package/dist/activities/execute-deep-agent/v3-events.js.map +0 -1
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.d.ts +0 -15
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js +0 -235
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js.map +0 -1
- package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +0 -111
- package/dist/activities/execute-deep-agent/v3-status-builder.js +0 -457
- package/dist/activities/execute-deep-agent/v3-status-builder.js.map +0 -1
- package/dist/shared/execution-status-writer.d.ts +0 -31
- package/dist/shared/execution-status-writer.js +0 -43
- package/dist/shared/execution-status-writer.js.map +0 -1
- package/src/activities/execute-cursor/__tests__/delta-enricher.test.ts +0 -310
- package/src/activities/execute-cursor/__tests__/message-translator.test.ts +0 -1033
- package/src/activities/execute-cursor/__tests__/todo-tracker.test.ts +0 -498
- package/src/activities/execute-cursor/delta-enricher.ts +0 -307
- package/src/activities/execute-cursor/message-translator.ts +0 -2319
- package/src/activities/execute-cursor/todo-tracker.ts +0 -91
- package/src/activities/execute-deep-agent/__tests__/execution-state-extended.test.ts +0 -148
- package/src/activities/execute-deep-agent/__tests__/execution-state.test.ts +0 -154
- package/src/activities/execute-deep-agent/__tests__/status-builder-shared.test.ts +0 -47
- package/src/activities/execute-deep-agent/__tests__/v3-protocol-normalizer.test.ts +0 -324
- package/src/activities/execute-deep-agent/execution-state.ts +0 -78
- package/src/activities/execute-deep-agent/status-builder-shared.ts +0 -142
- package/src/activities/execute-deep-agent/subagent-tracker.ts +0 -479
- package/src/activities/execute-deep-agent/v3-events.ts +0 -153
- package/src/activities/execute-deep-agent/v3-protocol-normalizer.ts +0 -264
- package/src/activities/execute-deep-agent/v3-status-builder.ts +0 -565
- package/src/shared/execution-status-writer.ts +0 -56
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
# harness/ — the turn runtime and the adapter contract
|
|
2
|
+
|
|
3
|
+
This folder is the turn runtime, the code that runs one agent turn for every
|
|
4
|
+
harness, and the contract a harness implements to run behind it
|
|
5
|
+
(`harness/types.ts`). A harness is one engine the runner can drive: today the
|
|
6
|
+
native LangGraph deep-agent and the Cursor SDK; the contract was designed
|
|
7
|
+
against the Claude Agent SDK and the Codex SDK as well
|
|
8
|
+
(`harness/capabilities.ts`). An adapter is the `HarnessAdapter` object a
|
|
9
|
+
harness's factory returns; a harness is that adapter plus its registry row.
|
|
10
|
+
|
|
11
|
+
This file is an index for someone adding a harness. To add one: read the modules
|
|
12
|
+
below in order, write the adapter files, touch the sites, prove it with the kit.
|
|
13
|
+
The rules this file follows are at the end.
|
|
14
|
+
|
|
15
|
+
## One harness, six spellings
|
|
16
|
+
|
|
17
|
+
The harness identity is spelled differently in each layer, and every spelling is
|
|
18
|
+
pinned somewhere. Read a row across before searching for anything.
|
|
19
|
+
|
|
20
|
+
| Spelling | Native | Cursor |
|
|
21
|
+
| --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | ---------------------------- |
|
|
22
|
+
| The adapter's folder | `activities/execute-deep-agent/` | `activities/execute-cursor/` |
|
|
23
|
+
| `HarnessName` in `harness/registry.ts` | `deep-agent` | `cursor` |
|
|
24
|
+
| The Temporal activity in `harness/registry.ts` | `ExecuteDeepAgent` | `ExecuteCursor` |
|
|
25
|
+
| The proto enum in `apis/ai/stigmer/agentic/session/v1/enum.proto` | `HARNESS_NATIVE` | `HARNESS_CURSOR` |
|
|
26
|
+
| The model registry's key in `backend/services/stigmer-server/src/domain/workflow/registry/data/model-registry.json` | `native` | `cursor` |
|
|
27
|
+
| The file-review id in `activities/execute-deep-agent/deep-agent-capabilities.ts` and `activities/execute-cursor/cursor-capabilities.ts` | `deep-agent` | `cursor` |
|
|
28
|
+
| The vendor SDK package in `backend/services/runner/package.json` | `deepagents` | `@cursor/sdk` |
|
|
29
|
+
|
|
30
|
+
## Modules, in reading order
|
|
31
|
+
|
|
32
|
+
- `harness/types.ts` — the contract: `HarnessAdapter`, `TurnInput`, `TurnSink`,
|
|
33
|
+
`TurnOutcome`, and what was deliberately left off it.
|
|
34
|
+
- `harness/capabilities.ts` — the flags the runtime branches on instead of
|
|
35
|
+
harness names (`HarnessCapabilities`, `PausePrimitive`, `StateIdSource`), the
|
|
36
|
+
harness matrix the contract was designed against, and which values a real
|
|
37
|
+
adapter stands behind.
|
|
38
|
+
- `__test-utils__/harness-contract/scripted-adapter.ts` — the template: every
|
|
39
|
+
rule of the contract as the smallest code that obeys it, with the reason
|
|
40
|
+
beside it.
|
|
41
|
+
- `harness/registry.ts` — the wire vocabulary: `HarnessName`, the byte-pinned
|
|
42
|
+
`HARNESS_ACTIVITY_NAMES`, the boot order and how a boot failure is handled,
|
|
43
|
+
and `createHarnessActivities`.
|
|
44
|
+
- `harness-adapters.ts` — the one table of real rows (`HARNESS_ADAPTERS`), and
|
|
45
|
+
why its static graph must stay SDK-free.
|
|
46
|
+
- `harness/transcript/events.ts` — `TranscriptEvent`, the canonical event a
|
|
47
|
+
translator emits.
|
|
48
|
+
- `harness/transcript/builder.ts` — `TranscriptBuilder`, the one builder every
|
|
49
|
+
harness folds its events through.
|
|
50
|
+
- `harness/capture.ts` — the file-review capture. The runtime owns all of it; an
|
|
51
|
+
adapter supplies one fact, which CAS-owned paths its engine touched.
|
|
52
|
+
- `harness/turn-context.ts` — the resolution phases that build the `TurnInput`
|
|
53
|
+
(`resolveTurnContext`), and what is deliberately left to the adapter.
|
|
54
|
+
- `harness/run-turn.ts` — the activity body (`runTurnActivity`) and
|
|
55
|
+
`settleWith`, the one place a turn's terminal status is written.
|
|
56
|
+
|
|
57
|
+
## Adapter files
|
|
58
|
+
|
|
59
|
+
What the contract requires:
|
|
60
|
+
|
|
61
|
+
- `activities/<harness>/adapter.ts` — a factory returning a `HarnessAdapter`.
|
|
62
|
+
`activities/execute-deep-agent/adapter.ts` (`createDeepAgentAdapter`) is the
|
|
63
|
+
smaller real shape, with no per-session state;
|
|
64
|
+
`activities/execute-cursor/adapter.ts` (`createCursorAdapter`) is the one with
|
|
65
|
+
session state.
|
|
66
|
+
- `activities/<harness>/<harness>-capabilities.ts` — the flags, declared once,
|
|
67
|
+
each with its reason:
|
|
68
|
+
`activities/execute-deep-agent/deep-agent-capabilities.ts`
|
|
69
|
+
(`DEEP_AGENT_CAPABILITIES`),
|
|
70
|
+
`activities/execute-cursor/cursor-capabilities.ts` (`CURSOR_CAPABILITIES`).
|
|
71
|
+
- `activities/<harness>/translator.ts` — the engine's events rendered as
|
|
72
|
+
`TranscriptEvent`s into `TranscriptBuilder` (`harness/transcript/events.ts` is
|
|
73
|
+
the union): `activities/execute-deep-agent/translator.ts`,
|
|
74
|
+
`activities/execute-cursor/translator.ts`.
|
|
75
|
+
|
|
76
|
+
Everything else in an adapter's folder is the engine's business and is not a
|
|
77
|
+
template: 17 of the native adapter's 20 modules and 32 of the Cursor adapter's
|
|
78
|
+
35, at the commit the footprint below measures. That business is:
|
|
79
|
+
|
|
80
|
+
- how the engine is created or resumed,
|
|
81
|
+
- how the prompt is placed,
|
|
82
|
+
- how MCP servers are bound,
|
|
83
|
+
- how the engine is made to stop before a gated side effect.
|
|
84
|
+
|
|
85
|
+
What every adapter's test side carries:
|
|
86
|
+
|
|
87
|
+
- `activities/<harness>/__test-utils__/contract-subject.ts` — the harness as a
|
|
88
|
+
`HarnessContractSubject`: the real adapter, with the kit's scenario vocabulary
|
|
89
|
+
translated onto the harness's own SDK double.
|
|
90
|
+
`activities/execute-deep-agent/__test-utils__/contract-subject.ts` is the
|
|
91
|
+
smaller example;
|
|
92
|
+
`activities/execute-cursor/__test-utils__/contract-subject.ts` the first.
|
|
93
|
+
- `activities/<harness>/__tests__/hermetic/harness-contract.test.ts` — both
|
|
94
|
+
halves of the kit against the real adapter, with what the subject cannot
|
|
95
|
+
produce declared SKIPPED:
|
|
96
|
+
`activities/execute-deep-agent/__tests__/hermetic/harness-contract.test.ts`,
|
|
97
|
+
`activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts`. Their
|
|
98
|
+
goldens: `activities/execute-deep-agent/__tests__/hermetic/goldens/`,
|
|
99
|
+
`activities/execute-cursor/__tests__/hermetic/goldens/`.
|
|
100
|
+
- `activities/<harness>/__tests__/adapter-is-temporal-free.test.ts` — the fence
|
|
101
|
+
that keeps `@temporalio/*` out of the adapter:
|
|
102
|
+
`activities/execute-deep-agent/__tests__/adapter-is-temporal-free.test.ts`,
|
|
103
|
+
`activities/execute-cursor/__tests__/adapter-is-temporal-free.test.ts`.
|
|
104
|
+
- `activities/<harness>/__tests__/adapter-graph-is-sdk-free.test.ts` — the fence
|
|
105
|
+
that walks the adapter module's static graph and refuses a vendor SDK on it. A
|
|
106
|
+
new harness adds it.
|
|
107
|
+
`activities/execute-deep-agent/__tests__/adapter-graph-is-sdk-free.test.ts` is
|
|
108
|
+
the shape; the Cursor adapter predates it, and
|
|
109
|
+
`__tests__/harness-boot-order.test.ts` proves its graph in a fresh process.
|
|
110
|
+
|
|
111
|
+
## Sites a new harness touches
|
|
112
|
+
|
|
113
|
+
Measured at commit f25d15131 (2026-09-16). Every list in this section is dated
|
|
114
|
+
by that line.
|
|
115
|
+
|
|
116
|
+
### In the runner
|
|
117
|
+
|
|
118
|
+
Read off the registry, its tests and the package, not off the probes below. The
|
|
119
|
+
composition roots, `runner.ts` and `runner-manager.ts`, read `HARNESS_ADAPTERS`
|
|
120
|
+
and nothing per harness; there is nothing to touch there.
|
|
121
|
+
|
|
122
|
+
- `harness-adapters.ts` — one row in `HARNESS_ADAPTERS`, in boot order.
|
|
123
|
+
- `harness/registry.ts` — one member of `HarnessName` and one entry in
|
|
124
|
+
`HARNESS_ACTIVITY_NAMES`, byte-identical to the server's pin.
|
|
125
|
+
- `harness/capabilities.ts` — the harness matrix in the header gains a column.
|
|
126
|
+
- `config.ts` — the harness's own settings, if it has any (`cursorApiKey`,
|
|
127
|
+
`checkpointerType` are the two adapters' today).
|
|
128
|
+
- `activities/call-agent.ts` — `resolveHarness`, the wire string to the proto
|
|
129
|
+
enum for the workflow task.
|
|
130
|
+
- `workflow-engine/loader.ts` — the YAML shorthand map from harness word to enum
|
|
131
|
+
name.
|
|
132
|
+
- `shared/filereview/events.ts` — a comment stating the closed set of
|
|
133
|
+
file-review ids.
|
|
134
|
+
- `__tests__/harness-boot-order.test.ts` — the header states the row count; its
|
|
135
|
+
child process, `__test-utils__/harness-boot-order-child.ts`, boots
|
|
136
|
+
`HARNESS_ADAPTERS` itself, so a new row runs with no code change.
|
|
137
|
+
- `backend/services/runner/package.json` — the vendor SDK dependency.
|
|
138
|
+
- `backend/services/runner/scripts/bundle-slim.mjs` — `RUNTIME_EXTERNALS`, the
|
|
139
|
+
SDKs the slim bundle leaves external because they ship native helpers.
|
|
140
|
+
- `backend/services/runner/README.md` — the environment-variable table names
|
|
141
|
+
each harness's settings.
|
|
142
|
+
- `backend/services/runner/Dockerfile.sandbox` — a comment listing the
|
|
143
|
+
activities the image serves.
|
|
144
|
+
|
|
145
|
+
### Outside the runner: the method
|
|
146
|
+
|
|
147
|
+
The identity has six spellings (the table above); the folder is not searched
|
|
148
|
+
for, and each of the five probes below finds one of the others. Run all five
|
|
149
|
+
from the repository root and read every hit; the lists below came from doing
|
|
150
|
+
exactly that.
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# The same exclusions for every probe. __test-utils__/ stays in: the kit and the hermetic drivers enumerate harnesses.
|
|
154
|
+
X=(-g '!node_modules' -g '!**/gen/**' -g '!*_pb.*' -g '!*.pb.go' -g '!apis/stubs/**' -g '!tools/codegen/output/**'
|
|
155
|
+
-g '!**/dist/**' -g '!**/dist-slim/**' -g '!**/__tests__/**' -g '!*.test.*' -g '!**/goldens/**' -g '!*lock*')
|
|
156
|
+
rg -l "${X[@]}" 'HARNESS_NATIVE|HARNESS_CURSOR|Harness\.(NATIVE|CURSOR)|\bHarnessOption\b' # the proto enum
|
|
157
|
+
rg -l "${X[@]}" 'ExecuteDeepAgent|ExecuteCursor|HARNESS_ACTIVITY_NAMES' # the activity name
|
|
158
|
+
rg -l "${X[@]}" '\bHarnessName\b|["'"'"']deep-agent["'"'"']|["'"'"']cursor["'"'"']' # the registry name and file-review id
|
|
159
|
+
rg -l "${X[@]}" '"harness"\s*:\s*"(native|cursor)"' # the model registry's key
|
|
160
|
+
rg -l "${X[@]}" '@cursor/sdk|\bdeepagents\b' # the vendor SDK package
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Every hit falls into one of three classes:
|
|
164
|
+
|
|
165
|
+
- **Enumerates** — a switch, a record keyed by harness, a label table, a
|
|
166
|
+
byte-pinned name, a per-harness data row, or a comment that states the closed
|
|
167
|
+
set. A new harness must touch it.
|
|
168
|
+
- **Passes through** — reads, forwards or types by the value, or a fixture that
|
|
169
|
+
carries it. Nothing to touch.
|
|
170
|
+
- **Generated** — rebuilt from the proto or the registry by `make codegen`.
|
|
171
|
+
Never edited by hand.
|
|
172
|
+
|
|
173
|
+
### Outside the runner: sites that enumerate
|
|
174
|
+
|
|
175
|
+
| File | What enumerates the harness set |
|
|
176
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
177
|
+
| `apis/ai/stigmer/agentic/session/v1/enum.proto` | The `Harness` enum itself; the root. Then `make codegen`. |
|
|
178
|
+
| `apis/ai/stigmer/agentic/session/v1/spec.proto` | The `harness` field's comment lists each harness and its activity. |
|
|
179
|
+
| `apis/ai/stigmer/agentic/workflow/v1/tasks/agent_call.proto` | The `harness` field's comment lists each harness. |
|
|
180
|
+
| `apis/ai/stigmer/iam/identityaccount/v1/spec.proto` | `default_harness` names the allowed lowercase strings in its validation rule. |
|
|
181
|
+
| `apis/ai/stigmer/agentic/agentexecution/v1/filereview.proto` | `harness_id` comments state the closed set of file-review ids. |
|
|
182
|
+
| `apis/ai/stigmer/billing/v1/io.proto`, `apis/ai/stigmer/billing/v1/policy.proto` | Harness string fields whose comments state the set. |
|
|
183
|
+
| `backend/services/stigmer-server/src/temporal/agentexecution/names.ts` | `EXECUTE_CURSOR_ACTIVITY_NAME`, `EXECUTE_DEEP_AGENT_ACTIVITY_NAME`: the server side of the runner's byte-pinned names. |
|
|
184
|
+
| `backend/services/stigmer-server/src/temporal/agentexecution/workflows/invoke-agent-execution.ts` | The activity proxy typed per name, and a branch on the enum: `executeCursorFlow` for a harness whose engine mints the state id (the server reads it back), the deep-agent flow for one whose id the server mints first (`EnsureThread`). The largest site; a new harness needs an arm here, its own flow or one of these two. |
|
|
185
|
+
| `backend/services/stigmer-server/src/domain/workflow/converter/task-converters.ts` | A `switch` over `Harness` to the YAML shorthand. |
|
|
186
|
+
| `backend/services/stigmer-server/src/domain/workflow/converter/unmarshal.ts` | `normalizeEnumShorthands`: the YAML word to the enum name. |
|
|
187
|
+
| `backend/services/stigmer-server/src/domain/workflow/registry/pin-validation.ts` | `HARNESS_NAME_CURSOR` and a Cursor-only pin rule. |
|
|
188
|
+
| `backend/services/stigmer-server/src/domain/workflow/registry/data/model-registry.json` | Per-harness model rows; a harness with its own catalog adds rows. |
|
|
189
|
+
| `backend/services/stigmer-server/src/temporal/schedule/model-pinning.ts` | A Cursor-only pinning rule. |
|
|
190
|
+
| `backend/services/stigmer-server/scripts/capture-replay-histories.ts` | A map keyed by activity name, one stub per activity (a maintainer script). |
|
|
191
|
+
| `client-apps/cli/src/commands/agent-exec-flags.ts` | The `--harness` flag's help text lists the values. |
|
|
192
|
+
| `client-apps/cli/src/resources/run/create.ts` | The flag string to the enum. |
|
|
193
|
+
| `client-apps/cli/src/resources/run/prepare.ts` | `HarnessFlag` and its checks. |
|
|
194
|
+
| `client-apps/cli/src/resources/run/header.ts` | The run header's harness label. |
|
|
195
|
+
| `client-apps/cli/src/resources/task-configs.ts` | The YAML shorthand map. |
|
|
196
|
+
| `apis/ai/stigmer/agentic/agentexecution/v1/enum.proto` | A comment on tool-name casing per harness. |
|
|
197
|
+
| `backend/README.md` | Lists the harnesses and the SDK behind each. |
|
|
198
|
+
| `client-apps/desktop/scripts/stage-runner-slim.sh`, `client-apps/desktop/scripts/macos-codesign-tree.sh` | Stage and sign the vendor SDKs' native helpers for the desktop app; a harness whose SDK ships one touches both. |
|
|
199
|
+
| `sdk/react/src/models/harness.ts` | The SDK hub: `HarnessOption`, `HARNESS_META`, `HARNESS_LABELS`, `HARNESS_OPTIONS`, `DEFAULT_HARNESS`, `toProtoHarness`, `fromProtoHarness`. `HarnessOption` carries four values beyond the proto's two; `toProtoHarness` maps them to `NATIVE` through its `default` arm. |
|
|
200
|
+
| `sdk/react/src/models/HarnessSelector.tsx` | `OPTIONS`, the two selectable values. |
|
|
201
|
+
| `sdk/react/src/models/ModelSelector.tsx` | A Cursor-only thinking rule, and the filter that hides the extra options by name. |
|
|
202
|
+
| `sdk/react/src/identity-account/AccountPreferencesPanel.tsx` | One `HarnessOptionRow` per harness, placed by hand. |
|
|
203
|
+
| `sdk/react/src/identity-account/useAccountExecutionDefaults.ts` | Validates the preference against the two names. |
|
|
204
|
+
| `sdk/react/src/workflow/inspector/forms/AgentCallForm.tsx` | Two radio buttons, placed by hand. |
|
|
205
|
+
| `sdk/react/src/pricing-governance/BaselineEditor.tsx` | A select with one option per harness. |
|
|
206
|
+
| `site/src/components/pages/pricing/ModelPricingTable.tsx` | Harness to display label. |
|
|
207
|
+
| `site/src/data/harness-cost-comparison.json` | Per-harness cost rows. |
|
|
208
|
+
| `docs/concepts/harnesses.mdx`, `docs/concepts/sessions.mdx`, `docs/guides/runners/cursor-harness.mdx`, `docs/guides/workflows/task-types/agent-call.mdx`, `docs/vocabulary.md` | Hand-authored pages that name the harness set; each has an entry in `docs/_inventory/classification.yaml` to keep current. |
|
|
209
|
+
|
|
210
|
+
The cloud composition that serves api.stigmer.ai has sites of the same three
|
|
211
|
+
classes (billing gates, pricing arms, the channel broker's harness switch, its
|
|
212
|
+
own model registry). A harness that must run there is a change on that side too.
|
|
213
|
+
|
|
214
|
+
### Outside the runner: sites that pass the value through
|
|
215
|
+
|
|
216
|
+
Nothing to touch. Listed so a probe's hit here is a stop, not a lead.
|
|
217
|
+
|
|
218
|
+
- `apis/`: `apis/ai/stigmer/agentic/workflow/v1/tasks/meta/agent_call.yaml` (an
|
|
219
|
+
example value); `apis/ai/stigmer/agentic/agentexecution/v1/io.proto`,
|
|
220
|
+
`apis/ai/stigmer/agentic/agentexecution/v1/usage.proto`,
|
|
221
|
+
`apis/ai/stigmer/billing/v1/model_pricing_baseline.proto`,
|
|
222
|
+
`apis/ai/stigmer/billing/v1/pricing_override.proto` (free-form provider or
|
|
223
|
+
harness strings with examples); the fixtures under
|
|
224
|
+
`apis/testdata/hitl/file-review/`.
|
|
225
|
+
- The server: `backend/services/stigmer-server/src/domain/session/steps.ts` (the
|
|
226
|
+
immutability check; no per-harness arm);
|
|
227
|
+
`backend/services/stigmer-server/src/temporal/agentexecution/dispatch.ts`,
|
|
228
|
+
`backend/services/stigmer-server/src/temporal/agentexecution/activities.ts`,
|
|
229
|
+
`backend/services/stigmer-server/src/temporal/agentexecution/worker.ts`,
|
|
230
|
+
`backend/services/stigmer-server/src/temporal/agentexecution/workflow-input.ts`
|
|
231
|
+
(read the session's harness or name the activities in prose).
|
|
232
|
+
- The React SDK: `sdk/react/src/models/registry.ts`,
|
|
233
|
+
`sdk/react/src/models/useModelRegistry.ts`,
|
|
234
|
+
`sdk/react/src/models/service-tier.ts`; everything under
|
|
235
|
+
`sdk/react/src/channel/`, `sdk/react/src/composer/`,
|
|
236
|
+
`sdk/react/src/execution/`, `sdk/react/src/schedule/`,
|
|
237
|
+
`sdk/react/src/session/` (typed by the option or defaulting to one value).
|
|
238
|
+
- Fixtures and clients: `test/e2e/helpers/approval.ts`,
|
|
239
|
+
`test/extension-consumer/src/fake-extension.ts`, `test/fixtures/tool-view/`,
|
|
240
|
+
`site/src/components/docs/demos/shared/StigmerPreviewProvider.tsx`,
|
|
241
|
+
`sdk/java/src/main/java/ai/stigmer/sdk/BillingClient.java` (a hand-written
|
|
242
|
+
client's field comment).
|
|
243
|
+
- Inside the runner: comments across `shared/` and the composition roots that
|
|
244
|
+
name both activities or the native engine's tool names as examples;
|
|
245
|
+
`__test-utils__/hermetic-activity.ts` and
|
|
246
|
+
`__test-utils__/model-registry-fixture.ts`; the kit's
|
|
247
|
+
`__test-utils__/harness-contract/runtime-contract.ts` and
|
|
248
|
+
`__test-utils__/harness-contract/types.ts`, typed by `HarnessName` and
|
|
249
|
+
selecting by it.
|
|
250
|
+
|
|
251
|
+
### Generated
|
|
252
|
+
|
|
253
|
+
`make codegen` rebuilds these from the proto and the registry; do not edit them:
|
|
254
|
+
`apis/stubs/`, `sdk/go/proto/`, `tools/codegen/output/`,
|
|
255
|
+
`tools/codegen/schemas/`,
|
|
256
|
+
`backend/services/stigmer-server/src/domain/workflow/registry/data/task-kind-registry.json`,
|
|
257
|
+
`docs/sdk/resources/`, `docs/sdk/react/`, `docs/cli/commands/`.
|
|
258
|
+
|
|
259
|
+
### Verifying
|
|
260
|
+
|
|
261
|
+
`make codegen` after the proto edit. `npm test` in `backend/services/runner/`
|
|
262
|
+
runs the kit, every fence, the boot-order test and this file's own test.
|
|
263
|
+
|
|
264
|
+
## The contract kit
|
|
265
|
+
|
|
266
|
+
- `__test-utils__/harness-contract/contract.ts` — the adapter-side half:
|
|
267
|
+
`describeHarnessContract`, the invariants every adapter owes the runtime, and
|
|
268
|
+
what the kit cannot measure.
|
|
269
|
+
- `__test-utils__/harness-contract/runtime-contract.ts` — the runtime-side half:
|
|
270
|
+
`describeHarnessRuntimeContract`, what the runtime owes every harness, proven
|
|
271
|
+
through the real activity.
|
|
272
|
+
- `__test-utils__/harness-contract/types.ts` — `HarnessContractSubject`, the one
|
|
273
|
+
interface a real adapter implements to join the kit, and the scenario
|
|
274
|
+
vocabulary (`ScenarioStep`).
|
|
275
|
+
- `__test-utils__/hermetic-activity.ts` — `runActivityHermetically`: a real
|
|
276
|
+
activity with no network, and the rule for a golden that will not hold still.
|
|
277
|
+
The vendor SDK double is the adapter's own.
|
|
278
|
+
- `__tests__/harness-contract.test.ts` — the template under both pause
|
|
279
|
+
primitives and both state-id sources; a real adapter registers both halves in
|
|
280
|
+
its own hermetic file instead.
|
|
281
|
+
- `__test-utils__/__tests__/harness-contract-self-check.test.ts` — every
|
|
282
|
+
invariant run against an adapter broken in exactly the way it exists to catch.
|
|
283
|
+
- `harness/__tests__/run-turn.test.ts` — the runtime-side half against the
|
|
284
|
+
template, one arm per row of the terminal table, and the template's own
|
|
285
|
+
timing, not any engine's.
|
|
286
|
+
|
|
287
|
+
The hermetic goldens in each adapter's goldens folder (named above) are the
|
|
288
|
+
second net: they pin a turn's persisted status byte for byte.
|
|
289
|
+
|
|
290
|
+
## Footprint
|
|
291
|
+
|
|
292
|
+
Measured at commit f25d15131 (2026-09-16), production TypeScript only,
|
|
293
|
+
`__tests__/` and `__test-utils__/` excluded. Run from `backend/services/runner/`
|
|
294
|
+
to re-measure:
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
wc -l src/__test-utils__/harness-contract/scripted-adapter.ts
|
|
298
|
+
for d in src/activities/execute-deep-agent src/activities/execute-cursor src/harness; do
|
|
299
|
+
printf '%s: ' "$d"
|
|
300
|
+
find "$d" -name '*.ts' -not -path '*/__tests__/*' -not -path '*/__test-utils__/*' | xargs cat | wc -l
|
|
301
|
+
done
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
| What | Lines | Files |
|
|
305
|
+
| -------------------------------------------------------------------------------------------------------- | ------ | ----- |
|
|
306
|
+
| The template, `__test-utils__/harness-contract/scripted-adapter.ts`: the floor, no engine, no translator | 385 | 1 |
|
|
307
|
+
| The native adapter, `activities/execute-deep-agent/` | 4,308 | 20 |
|
|
308
|
+
| The Cursor adapter, `activities/execute-cursor/`: the ceiling, with its deny-and-retry hook and ledger | 11,554 | 35 |
|
|
309
|
+
| The runtime, `harness/`, for scale: written once | 4,985 | 14 |
|
|
310
|
+
| The test side the native adapter adds: its subject, its hermetic kit file, its two fences | 658 | 4 |
|
|
311
|
+
|
|
312
|
+
## Design history
|
|
313
|
+
|
|
314
|
+
The pull requests carry the measured acceptance of each step; the module headers
|
|
315
|
+
carry the reasoning.
|
|
316
|
+
|
|
317
|
+
- #1048 — the hermetic regression net: a real activity, no network, goldens byte
|
|
318
|
+
for byte.
|
|
319
|
+
- #1064 — the adapter contract, the scripted template, the contract kit and the
|
|
320
|
+
registry.
|
|
321
|
+
- #1070 — the turn runtime extracted; the Cursor activity became an adapter.
|
|
322
|
+
- #1096 — the native deep-agent harness as an adapter over the same runtime.
|
|
323
|
+
- #1097 — one transcript builder over one canonical event for every harness.
|
|
324
|
+
- #1136 — the headers made readable to a stranger; every citation public.
|
|
325
|
+
|
|
326
|
+
## About this file
|
|
327
|
+
|
|
328
|
+
Every fact about the design has one home, the header of the module that owns it.
|
|
329
|
+
This file points at that home in one sentence and restates nothing; if this file
|
|
330
|
+
and a header disagree, the header is right and this file is corrected. It adds
|
|
331
|
+
two things no header can carry: the sites outside the runner, derived by the
|
|
332
|
+
method above, and the footprint. Paths inside the runner's `src` directory are
|
|
333
|
+
spelled from `src`; every other path is spelled from the repository root.
|
|
334
|
+
`harness/__tests__/readme-index.test.ts` fails when a path or a symbol named
|
|
335
|
+
here stops resolving.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `harness/approval-decisions.ts` — the runtime's one settler of a decision
|
|
3
3
|
* that never runs the tool. These arms came with the function from the
|
|
4
|
-
* native harness's `hitl.ts` (`reconcileNonExecutingDecisions`,
|
|
5
|
-
*
|
|
4
|
+
* native harness's `hitl.ts` (`reconcileNonExecutingDecisions`, in #1096):
|
|
5
|
+
* SKIP and REJECT settle to SKIPPED (REJECT with the pinned reason),
|
|
6
6
|
* APPROVE and APPROVE_ALL are left to the engine's own events, sub-agent
|
|
7
7
|
* transcripts are settled alike, and an undecided row is untouched. The
|
|
8
8
|
* reader half (`approvalDecisionsOf`) is pinned against the Cursor adapter's
|
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
* resolution phases and the outcome table.
|
|
6
6
|
*
|
|
7
7
|
* What is asserted here and nowhere else are the two rules the lift made
|
|
8
|
-
* one for every harness (
|
|
8
|
+
* one for every harness (#1096):
|
|
9
9
|
*
|
|
10
10
|
* - the stamp reads the ROW's status: a COMPLETED write row created this
|
|
11
11
|
* turn is badged, a FAILED or WAITING one is not, a seeded prior-turn row
|
|
12
12
|
* keeps its own change set;
|
|
13
13
|
* - the provenance scopes by id-novelty and consents by the row's own
|
|
14
14
|
* approval: the approved command that executed ON ITS SEEDED ROW (message
|
|
15
|
-
* 0, the shape both engines produce
|
|
15
|
+
* 0, the shape both engines produce) qualifies the turn, where
|
|
16
16
|
* a positional scope missed it.
|
|
17
17
|
*
|
|
18
18
|
* The ledger shape itself is `shared/filereview/capture.ts`'s and is pinned
|
|
@@ -210,7 +210,7 @@ describe("harness/capture over a git work tree", () => {
|
|
|
210
210
|
});
|
|
211
211
|
});
|
|
212
212
|
|
|
213
|
-
describe("deriveCommandProvenance — one rule for both engines
|
|
213
|
+
describe("deriveCommandProvenance — one rule for both engines", () => {
|
|
214
214
|
const seededShell = (status: ToolCallStatus, approvalAction: ApprovalAction) =>
|
|
215
215
|
row("tc-shell", "shell", status, { approvalAction, args: { command: "make generate" } });
|
|
216
216
|
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
* Temporal-free fence), so a path quoted in a header comment (several
|
|
18
18
|
* `shared/` modules cite `activities/...` in prose) cannot trip it, and no
|
|
19
19
|
* import form can slip past it: static, type-only, side-effect, re-export
|
|
20
|
-
* and dynamic `import()` are all module specifiers to the parser.
|
|
21
|
-
*
|
|
20
|
+
* and dynamic `import()` are all module specifiers to the parser. The
|
|
21
|
+
* `harness/` fence landed in #1070; the `shared/` half in #1097.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
import { describe, it, expect } from "vitest";
|
|
@@ -128,6 +128,7 @@ describe("src/harness never imports src/activities", () => {
|
|
|
128
128
|
join("harness", "registry.ts"),
|
|
129
129
|
join("harness", "types.ts"),
|
|
130
130
|
join("harness", "capabilities.ts"),
|
|
131
|
+
join("harness", "transcript", "builder.ts"),
|
|
131
132
|
]),
|
|
132
133
|
);
|
|
133
134
|
});
|
|
@@ -31,6 +31,7 @@ import { mockStigmerClient } from "../../__test-utils__/mock-client.js";
|
|
|
31
31
|
import { testConfig } from "../../__test-utils__/config-fixture.js";
|
|
32
32
|
import { turnInputFixture } from "../../__test-utils__/turn-input-fixture.js";
|
|
33
33
|
import { TimingRecorder } from "../../shared/cold-start-timing.js";
|
|
34
|
+
import { TranscriptBuilder } from "../transcript/builder.js";
|
|
34
35
|
import { mountSkills, type ResolutionDeps } from "../turn-context.js";
|
|
35
36
|
|
|
36
37
|
const env = createHermeticEnvironment();
|
|
@@ -62,13 +63,15 @@ function skillClient(available: readonly string[]) {
|
|
|
62
63
|
|
|
63
64
|
function depsWith(client: ResolutionDeps["client"], sessionId: string): { deps: ResolutionDeps; labels: string[] } {
|
|
64
65
|
const labels: string[] = [];
|
|
66
|
+
const status = create(AgentExecutionStatusSchema, {});
|
|
65
67
|
return {
|
|
66
68
|
labels,
|
|
67
69
|
deps: {
|
|
68
70
|
input: { executionId: `aex-${sessionId}`, threadId: "", turnSeq: 0 },
|
|
69
71
|
client,
|
|
70
72
|
config: testConfig({ workspaceRootDir: env.workspaceRootDir }),
|
|
71
|
-
status
|
|
73
|
+
status,
|
|
74
|
+
transcript: new TranscriptBuilder(`aex-${sessionId}`, status),
|
|
72
75
|
artifactStorage: undefined,
|
|
73
76
|
timing: new TimingRecorder(),
|
|
74
77
|
signal: new AbortController().signal,
|