@stigmer/runner 0.1.0-dev.20261017020314.g644422724c27
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/LICENSE +194 -0
- package/README.md +310 -0
- package/dist/.build-fingerprint +1 -0
- package/dist/__test-utils__/approval-contract/hook-commands.d.ts +25 -0
- package/dist/__test-utils__/approval-contract/hook-commands.js +87 -0
- package/dist/__test-utils__/approval-contract/hook-commands.js.map +1 -0
- package/dist/__test-utils__/approval-contract/types.d.ts +326 -0
- package/dist/__test-utils__/approval-contract/types.js +24 -0
- package/dist/__test-utils__/approval-contract/types.js.map +1 -0
- package/dist/__test-utils__/approval-log.d.ts +34 -0
- package/dist/__test-utils__/approval-log.js +126 -0
- package/dist/__test-utils__/approval-log.js.map +1 -0
- package/dist/__test-utils__/execution-record-fixture.d.ts +121 -0
- package/dist/__test-utils__/execution-record-fixture.js +134 -0
- package/dist/__test-utils__/execution-record-fixture.js.map +1 -0
- package/dist/__test-utils__/file-review-projection.d.ts +45 -0
- package/dist/__test-utils__/file-review-projection.js +61 -0
- package/dist/__test-utils__/file-review-projection.js.map +1 -0
- package/dist/__test-utils__/harness-contract/types.d.ts +188 -0
- package/dist/__test-utils__/harness-contract/types.js +64 -0
- package/dist/__test-utils__/harness-contract/types.js.map +1 -0
- package/dist/__test-utils__/hermetic-activity.d.ts +450 -0
- package/dist/__test-utils__/hermetic-activity.js +883 -0
- package/dist/__test-utils__/hermetic-activity.js.map +1 -0
- package/dist/__test-utils__/loopback-host.d.ts +23 -0
- package/dist/__test-utils__/loopback-host.js +45 -0
- package/dist/__test-utils__/loopback-host.js.map +1 -0
- package/dist/__test-utils__/mock-client.d.ts +13 -0
- package/dist/__test-utils__/mock-client.js +46 -0
- package/dist/__test-utils__/mock-client.js.map +1 -0
- package/dist/__test-utils__/mock-workspace.d.ts +15 -0
- package/dist/__test-utils__/mock-workspace.js +21 -0
- package/dist/__test-utils__/mock-workspace.js.map +1 -0
- package/dist/__test-utils__/model-registry-fixture.d.ts +111 -0
- package/dist/__test-utils__/model-registry-fixture.js +109 -0
- package/dist/__test-utils__/model-registry-fixture.js.map +1 -0
- package/dist/__test-utils__/turn-input-fixture.d.ts +60 -0
- package/dist/__test-utils__/turn-input-fixture.js +129 -0
- package/dist/__test-utils__/turn-input-fixture.js.map +1 -0
- package/dist/activities/attach-session.d.ts +34 -0
- package/dist/activities/attach-session.js +94 -0
- package/dist/activities/attach-session.js.map +1 -0
- package/dist/activities/ensure-thread.d.ts +24 -0
- package/dist/activities/ensure-thread.js +44 -0
- package/dist/activities/ensure-thread.js.map +1 -0
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.d.ts +107 -0
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.js +392 -0
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.js.map +1 -0
- package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.d.ts +251 -0
- package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.js +254 -0
- package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.js.map +1 -0
- package/dist/activities/execute-cursor/__test-utils__/fold.d.ts +62 -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.d.ts +34 -0
- package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js +287 -0
- package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js.map +1 -0
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +202 -0
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +306 -0
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -0
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.d.ts +176 -0
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js +278 -0
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js.map +1 -0
- package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.d.ts +182 -0
- package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.js +241 -0
- package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.js.map +1 -0
- package/dist/activities/execute-cursor/adapter.d.ts +63 -0
- package/dist/activities/execute-cursor/adapter.js +141 -0
- package/dist/activities/execute-cursor/adapter.js.map +1 -0
- package/dist/activities/execute-cursor/agent-session-cache.d.ts +72 -0
- package/dist/activities/execute-cursor/agent-session-cache.js +186 -0
- package/dist/activities/execute-cursor/agent-session-cache.js.map +1 -0
- package/dist/activities/execute-cursor/approval-policy.d.ts +67 -0
- package/dist/activities/execute-cursor/approval-policy.js +101 -0
- package/dist/activities/execute-cursor/approval-policy.js.map +1 -0
- package/dist/activities/execute-cursor/approval-state.d.ts +657 -0
- package/dist/activities/execute-cursor/approval-state.js +682 -0
- package/dist/activities/execute-cursor/approval-state.js.map +1 -0
- package/dist/activities/execute-cursor/boundary-rows.d.ts +455 -0
- package/dist/activities/execute-cursor/boundary-rows.js +1268 -0
- package/dist/activities/execute-cursor/boundary-rows.js.map +1 -0
- package/dist/activities/execute-cursor/cas-observations.d.ts +126 -0
- package/dist/activities/execute-cursor/cas-observations.js +240 -0
- package/dist/activities/execute-cursor/cas-observations.js.map +1 -0
- package/dist/activities/execute-cursor/cursor-capabilities.d.ts +37 -0
- package/dist/activities/execute-cursor/cursor-capabilities.js +74 -0
- package/dist/activities/execute-cursor/cursor-capabilities.js.map +1 -0
- package/dist/activities/execute-cursor/cursor-event-recorder.d.ts +43 -0
- package/dist/activities/execute-cursor/cursor-event-recorder.js +88 -0
- package/dist/activities/execute-cursor/cursor-event-recorder.js.map +1 -0
- package/dist/activities/execute-cursor/cursor-mcp-config.d.ts +58 -0
- package/dist/activities/execute-cursor/cursor-mcp-config.js +86 -0
- package/dist/activities/execute-cursor/cursor-mcp-config.js.map +1 -0
- package/dist/activities/execute-cursor/cursor-mode.d.ts +32 -0
- package/dist/activities/execute-cursor/cursor-mode.js +36 -0
- package/dist/activities/execute-cursor/cursor-mode.js.map +1 -0
- package/dist/activities/execute-cursor/error-classifier.d.ts +138 -0
- package/dist/activities/execute-cursor/error-classifier.js +330 -0
- package/dist/activities/execute-cursor/error-classifier.js.map +1 -0
- package/dist/activities/execute-cursor/fetch-interceptor.d.ts +56 -0
- package/dist/activities/execute-cursor/fetch-interceptor.js +378 -0
- package/dist/activities/execute-cursor/fetch-interceptor.js.map +1 -0
- package/dist/activities/execute-cursor/hook-scope.d.ts +143 -0
- package/dist/activities/execute-cursor/hook-scope.js +149 -0
- package/dist/activities/execute-cursor/hook-scope.js.map +1 -0
- package/dist/activities/execute-cursor/hook-script.d.ts +172 -0
- package/dist/activities/execute-cursor/hook-script.js +1204 -0
- package/dist/activities/execute-cursor/hook-script.js.map +1 -0
- package/dist/activities/execute-cursor/hook-server.d.ts +152 -0
- package/dist/activities/execute-cursor/hook-server.js +422 -0
- package/dist/activities/execute-cursor/hook-server.js.map +1 -0
- package/dist/activities/execute-cursor/hook-tool-hiding.d.ts +37 -0
- package/dist/activities/execute-cursor/hook-tool-hiding.js +58 -0
- package/dist/activities/execute-cursor/hook-tool-hiding.js.map +1 -0
- package/dist/activities/execute-cursor/hook-views.d.ts +74 -0
- package/dist/activities/execute-cursor/hook-views.js +180 -0
- package/dist/activities/execute-cursor/hook-views.js.map +1 -0
- package/dist/activities/execute-cursor/http2-interceptor.d.ts +98 -0
- package/dist/activities/execute-cursor/http2-interceptor.js +218 -0
- package/dist/activities/execute-cursor/http2-interceptor.js.map +1 -0
- package/dist/activities/execute-cursor/model-pricing-data.d.ts +39 -0
- package/dist/activities/execute-cursor/model-pricing-data.js +109 -0
- package/dist/activities/execute-cursor/model-pricing-data.js.map +1 -0
- package/dist/activities/execute-cursor/model-pricing.d.ts +51 -0
- package/dist/activities/execute-cursor/model-pricing.js +160 -0
- package/dist/activities/execute-cursor/model-pricing.js.map +1 -0
- package/dist/activities/execute-cursor/prompt-builder.d.ts +437 -0
- package/dist/activities/execute-cursor/prompt-builder.js +719 -0
- package/dist/activities/execute-cursor/prompt-builder.js.map +1 -0
- package/dist/activities/execute-cursor/rejection-capture.d.ts +27 -0
- package/dist/activities/execute-cursor/rejection-capture.js +78 -0
- package/dist/activities/execute-cursor/rejection-capture.js.map +1 -0
- package/dist/activities/execute-cursor/run-telemetry.d.ts +61 -0
- package/dist/activities/execute-cursor/run-telemetry.js +149 -0
- package/dist/activities/execute-cursor/run-telemetry.js.map +1 -0
- package/dist/activities/execute-cursor/sdk-warmup.d.ts +53 -0
- package/dist/activities/execute-cursor/sdk-warmup.js +70 -0
- package/dist/activities/execute-cursor/sdk-warmup.js.map +1 -0
- package/dist/activities/execute-cursor/service-tier.d.ts +68 -0
- package/dist/activities/execute-cursor/service-tier.js +200 -0
- package/dist/activities/execute-cursor/service-tier.js.map +1 -0
- package/dist/activities/execute-cursor/session-lifecycle.d.ts +247 -0
- package/dist/activities/execute-cursor/session-lifecycle.js +330 -0
- package/dist/activities/execute-cursor/session-lifecycle.js.map +1 -0
- package/dist/activities/execute-cursor/session-store.d.ts +99 -0
- package/dist/activities/execute-cursor/session-store.js +156 -0
- package/dist/activities/execute-cursor/session-store.js.map +1 -0
- 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/subagent-config.d.ts +61 -0
- package/dist/activities/execute-cursor/subagent-config.js +102 -0
- package/dist/activities/execute-cursor/subagent-config.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 +183 -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 +124 -0
- package/dist/activities/execute-cursor/turn-boundary.js +210 -0
- package/dist/activities/execute-cursor/turn-boundary.js.map +1 -0
- package/dist/activities/execute-cursor/turn-recovery.d.ts +62 -0
- package/dist/activities/execute-cursor/turn-recovery.js +208 -0
- package/dist/activities/execute-cursor/turn-recovery.js.map +1 -0
- package/dist/activities/execute-cursor/turn-settle.d.ts +59 -0
- package/dist/activities/execute-cursor/turn-settle.js +512 -0
- package/dist/activities/execute-cursor/turn-settle.js.map +1 -0
- package/dist/activities/execute-cursor/turn-setup.d.ts +281 -0
- package/dist/activities/execute-cursor/turn-setup.js +739 -0
- package/dist/activities/execute-cursor/turn-setup.js.map +1 -0
- package/dist/activities/execute-cursor/turn-stream.d.ts +133 -0
- package/dist/activities/execute-cursor/turn-stream.js +239 -0
- package/dist/activities/execute-cursor/turn-stream.js.map +1 -0
- package/dist/activities/execute-cursor/turn.d.ts +46 -0
- package/dist/activities/execute-cursor/turn.js +247 -0
- package/dist/activities/execute-cursor/turn.js.map +1 -0
- package/dist/activities/execute-cursor/usage-pricing.d.ts +38 -0
- package/dist/activities/execute-cursor/usage-pricing.js +50 -0
- package/dist/activities/execute-cursor/usage-pricing.js.map +1 -0
- package/dist/activities/execute-cursor/workspace-hook-files.d.ts +116 -0
- package/dist/activities/execute-cursor/workspace-hook-files.js +390 -0
- package/dist/activities/execute-cursor/workspace-hook-files.js.map +1 -0
- package/dist/activities/execute-cursor/workspace-setup.d.ts +148 -0
- package/dist/activities/execute-cursor/workspace-setup.js +444 -0
- package/dist/activities/execute-cursor/workspace-setup.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.d.ts +102 -0
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js +361 -0
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/gateway-substrate.d.ts +33 -0
- package/dist/activities/execute-deep-agent/__test-utils__/gateway-substrate.js +423 -0
- package/dist/activities/execute-deep-agent/__test-utils__/gateway-substrate.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.d.ts +224 -0
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js +307 -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__/paused-session-fixture.d.ts +76 -0
- package/dist/activities/execute-deep-agent/__test-utils__/paused-session-fixture.js +112 -0
- package/dist/activities/execute-deep-agent/__test-utils__/paused-session-fixture.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.d.ts +53 -0
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js +71 -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 +305 -0
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js +368 -0
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/think-bound-session.d.ts +17 -0
- package/dist/activities/execute-deep-agent/__test-utils__/think-bound-session.js +23 -0
- package/dist/activities/execute-deep-agent/__test-utils__/think-bound-session.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.d.ts +80 -0
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js +195 -0
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js.map +1 -0
- package/dist/activities/execute-deep-agent/adapter.d.ts +41 -0
- package/dist/activities/execute-deep-agent/adapter.js +79 -0
- package/dist/activities/execute-deep-agent/adapter.js.map +1 -0
- package/dist/activities/execute-deep-agent/approval-file-change.d.ts +54 -0
- package/dist/activities/execute-deep-agent/approval-file-change.js +68 -0
- package/dist/activities/execute-deep-agent/approval-file-change.js.map +1 -0
- package/dist/activities/execute-deep-agent/auto-publish.d.ts +17 -0
- package/dist/activities/execute-deep-agent/auto-publish.js +71 -0
- package/dist/activities/execute-deep-agent/auto-publish.js.map +1 -0
- package/dist/activities/execute-deep-agent/cas-capture-backend.d.ts +84 -0
- package/dist/activities/execute-deep-agent/cas-capture-backend.js +106 -0
- package/dist/activities/execute-deep-agent/cas-capture-backend.js.map +1 -0
- package/dist/activities/execute-deep-agent/cas-capture-observer.d.ts +83 -0
- package/dist/activities/execute-deep-agent/cas-capture-observer.js +117 -0
- package/dist/activities/execute-deep-agent/cas-capture-observer.js.map +1 -0
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.d.ts +32 -0
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.js +45 -0
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.js.map +1 -0
- package/dist/activities/execute-deep-agent/deepagents-profiles.d.ts +30 -0
- package/dist/activities/execute-deep-agent/deepagents-profiles.js +46 -0
- package/dist/activities/execute-deep-agent/deepagents-profiles.js.map +1 -0
- package/dist/activities/execute-deep-agent/engine-tools.d.ts +32 -0
- package/dist/activities/execute-deep-agent/engine-tools.js +32 -0
- package/dist/activities/execute-deep-agent/engine-tools.js.map +1 -0
- package/dist/activities/execute-deep-agent/hitl.d.ts +126 -0
- package/dist/activities/execute-deep-agent/hitl.js +194 -0
- package/dist/activities/execute-deep-agent/hitl.js.map +1 -0
- package/dist/activities/execute-deep-agent/hooks-setup.d.ts +25 -0
- package/dist/activities/execute-deep-agent/hooks-setup.js +59 -0
- package/dist/activities/execute-deep-agent/hooks-setup.js.map +1 -0
- package/dist/activities/execute-deep-agent/inline-publisher.d.ts +83 -0
- package/dist/activities/execute-deep-agent/inline-publisher.js +152 -0
- package/dist/activities/execute-deep-agent/inline-publisher.js.map +1 -0
- package/dist/activities/execute-deep-agent/platform-route.d.ts +145 -0
- package/dist/activities/execute-deep-agent/platform-route.js +237 -0
- package/dist/activities/execute-deep-agent/platform-route.js.map +1 -0
- package/dist/activities/execute-deep-agent/prompt-builder.d.ts +189 -0
- package/dist/activities/execute-deep-agent/prompt-builder.js +369 -0
- package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -0
- package/dist/activities/execute-deep-agent/resumed-history.d.ts +25 -0
- package/dist/activities/execute-deep-agent/resumed-history.js +47 -0
- package/dist/activities/execute-deep-agent/resumed-history.js.map +1 -0
- package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +49 -0
- package/dist/activities/execute-deep-agent/streaming-side-effects.js +73 -0
- package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -0
- package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +253 -0
- package/dist/activities/execute-deep-agent/subagent-transformer.js +474 -0
- package/dist/activities/execute-deep-agent/subagent-transformer.js.map +1 -0
- package/dist/activities/execute-deep-agent/subagent-wiring.d.ts +99 -0
- package/dist/activities/execute-deep-agent/subagent-wiring.js +119 -0
- package/dist/activities/execute-deep-agent/subagent-wiring.js.map +1 -0
- package/dist/activities/execute-deep-agent/todo-list.d.ts +40 -0
- package/dist/activities/execute-deep-agent/todo-list.js +51 -0
- package/dist/activities/execute-deep-agent/todo-list.js.map +1 -0
- package/dist/activities/execute-deep-agent/translator.d.ts +167 -0
- package/dist/activities/execute-deep-agent/translator.js +521 -0
- package/dist/activities/execute-deep-agent/translator.js.map +1 -0
- package/dist/activities/execute-deep-agent/turn-settle.d.ts +48 -0
- package/dist/activities/execute-deep-agent/turn-settle.js +141 -0
- package/dist/activities/execute-deep-agent/turn-settle.js.map +1 -0
- package/dist/activities/execute-deep-agent/turn-setup.d.ts +281 -0
- package/dist/activities/execute-deep-agent/turn-setup.js +687 -0
- package/dist/activities/execute-deep-agent/turn-setup.js.map +1 -0
- package/dist/activities/execute-deep-agent/turn-stream.d.ts +105 -0
- package/dist/activities/execute-deep-agent/turn-stream.js +236 -0
- package/dist/activities/execute-deep-agent/turn-stream.js.map +1 -0
- package/dist/activities/execute-deep-agent/turn.d.ts +48 -0
- package/dist/activities/execute-deep-agent/turn.js +136 -0
- package/dist/activities/execute-deep-agent/turn.js.map +1 -0
- package/dist/activities/execute-deep-agent/v3-event-recorder.d.ts +32 -0
- package/dist/activities/execute-deep-agent/v3-event-recorder.js +72 -0
- package/dist/activities/execute-deep-agent/v3-event-recorder.js.map +1 -0
- package/dist/activities/generate-session-subject.d.ts +93 -0
- package/dist/activities/generate-session-subject.js +285 -0
- package/dist/activities/generate-session-subject.js.map +1 -0
- package/dist/activities/list-plugin-tools.d.ts +76 -0
- package/dist/activities/list-plugin-tools.js +170 -0
- package/dist/activities/list-plugin-tools.js.map +1 -0
- package/dist/agent-host/channel.d.ts +93 -0
- package/dist/agent-host/channel.js +332 -0
- package/dist/agent-host/channel.js.map +1 -0
- package/dist/agent-host/codec.d.ts +290 -0
- package/dist/agent-host/codec.js +437 -0
- package/dist/agent-host/codec.js.map +1 -0
- package/dist/agent-host/entry.d.ts +56 -0
- package/dist/agent-host/entry.js +137 -0
- package/dist/agent-host/entry.js.map +1 -0
- package/dist/agent-host/environment.d.ts +36 -0
- package/dist/agent-host/environment.js +72 -0
- package/dist/agent-host/environment.js.map +1 -0
- package/dist/agent-host/failed-boot.d.ts +15 -0
- package/dist/agent-host/failed-boot.js +26 -0
- package/dist/agent-host/failed-boot.js.map +1 -0
- package/dist/agent-host/fs-service.d.ts +18 -0
- package/dist/agent-host/fs-service.js +133 -0
- package/dist/agent-host/fs-service.js.map +1 -0
- package/dist/agent-host/host-sink.d.ts +63 -0
- package/dist/agent-host/host-sink.js +136 -0
- package/dist/agent-host/host-sink.js.map +1 -0
- package/dist/agent-host/host.d.ts +48 -0
- package/dist/agent-host/host.js +191 -0
- package/dist/agent-host/host.js.map +1 -0
- package/dist/agent-host/hosting.d.ts +80 -0
- package/dist/agent-host/hosting.js +126 -0
- package/dist/agent-host/hosting.js.map +1 -0
- package/dist/agent-host/protocol.d.ts +478 -0
- package/dist/agent-host/protocol.js +77 -0
- package/dist/agent-host/protocol.js.map +1 -0
- package/dist/agent-host/remote-adapter.d.ts +64 -0
- package/dist/agent-host/remote-adapter.js +283 -0
- package/dist/agent-host/remote-adapter.js.map +1 -0
- package/dist/agent-host/remote-fs.d.ts +19 -0
- package/dist/agent-host/remote-fs.js +120 -0
- package/dist/agent-host/remote-fs.js.map +1 -0
- package/dist/agent-host/supervisor.d.ts +149 -0
- package/dist/agent-host/supervisor.js +311 -0
- package/dist/agent-host/supervisor.js.map +1 -0
- package/dist/agent-proxy/cursor-lane.d.ts +124 -0
- package/dist/agent-proxy/cursor-lane.js +507 -0
- package/dist/agent-proxy/cursor-lane.js.map +1 -0
- package/dist/agent-proxy/lanes.d.ts +63 -0
- package/dist/agent-proxy/lanes.js +255 -0
- package/dist/agent-proxy/lanes.js.map +1 -0
- package/dist/agent-proxy/loopback-certificate.d.ts +27 -0
- package/dist/agent-proxy/loopback-certificate.js +115 -0
- package/dist/agent-proxy/loopback-certificate.js.map +1 -0
- package/dist/agent-proxy/otlp-forward.d.ts +67 -0
- package/dist/agent-proxy/otlp-forward.js +170 -0
- package/dist/agent-proxy/otlp-forward.js.map +1 -0
- package/dist/agent-proxy/relay.d.ts +67 -0
- package/dist/agent-proxy/relay.js +164 -0
- package/dist/agent-proxy/relay.js.map +1 -0
- package/dist/agent-proxy/server.d.ts +84 -0
- package/dist/agent-proxy/server.js +258 -0
- package/dist/agent-proxy/server.js.map +1 -0
- package/dist/attach/entry.d.ts +36 -0
- package/dist/attach/entry.js +69 -0
- package/dist/attach/entry.js.map +1 -0
- package/dist/attach/main.d.ts +14 -0
- package/dist/attach/main.js +25 -0
- package/dist/attach/main.js.map +1 -0
- package/dist/attach/push.d.ts +71 -0
- package/dist/attach/push.js +123 -0
- package/dist/attach/push.js.map +1 -0
- package/dist/attach/waiter.d.ts +108 -0
- package/dist/attach/waiter.js +323 -0
- package/dist/attach/waiter.js.map +1 -0
- package/dist/bootstrap.d.ts +80 -0
- package/dist/bootstrap.js +119 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/client/server-contracts.d.ts +51 -0
- package/dist/client/server-contracts.js +70 -0
- package/dist/client/server-contracts.js.map +1 -0
- package/dist/client/stigmer-client.d.ts +328 -0
- package/dist/client/stigmer-client.js +478 -0
- package/dist/client/stigmer-client.js.map +1 -0
- package/dist/client/token-claims.d.ts +40 -0
- package/dist/client/token-claims.js +88 -0
- package/dist/client/token-claims.js.map +1 -0
- package/dist/config.d.ts +216 -0
- package/dist/config.js +200 -0
- package/dist/config.js.map +1 -0
- package/dist/exit-backstop.d.ts +64 -0
- package/dist/exit-backstop.js +79 -0
- package/dist/exit-backstop.js.map +1 -0
- package/dist/gen/turn/ai/stigmer/runner/turn/v1/enum_pb.d.ts +1016 -0
- package/dist/gen/turn/ai/stigmer/runner/turn/v1/enum_pb.js +1035 -0
- package/dist/gen/turn/ai/stigmer/runner/turn/v1/enum_pb.js.map +1 -0
- package/dist/gen/turn/ai/stigmer/runner/turn/v1/ledger_pb.d.ts +402 -0
- package/dist/gen/turn/ai/stigmer/runner/turn/v1/ledger_pb.js +47 -0
- package/dist/gen/turn/ai/stigmer/runner/turn/v1/ledger_pb.js.map +1 -0
- package/dist/gen/turn/ai/stigmer/runner/turn/v1/rows_pb.d.ts +826 -0
- package/dist/gen/turn/ai/stigmer/runner/turn/v1/rows_pb.js +48 -0
- package/dist/gen/turn/ai/stigmer/runner/turn/v1/rows_pb.js.map +1 -0
- package/dist/gen-ai-conventions.d.ts +95 -0
- package/dist/gen-ai-conventions.js +102 -0
- package/dist/gen-ai-conventions.js.map +1 -0
- package/dist/harness/approval-answers.d.ts +104 -0
- package/dist/harness/approval-answers.js +136 -0
- package/dist/harness/approval-answers.js.map +1 -0
- package/dist/harness/approval-decisions.d.ts +50 -0
- package/dist/harness/approval-decisions.js +80 -0
- package/dist/harness/approval-decisions.js.map +1 -0
- package/dist/harness/capabilities.d.ts +149 -0
- package/dist/harness/capabilities.js +48 -0
- package/dist/harness/capabilities.js.map +1 -0
- package/dist/harness/capture.d.ts +154 -0
- package/dist/harness/capture.js +248 -0
- package/dist/harness/capture.js.map +1 -0
- package/dist/harness/cost-cap-watch.d.ts +31 -0
- package/dist/harness/cost-cap-watch.js +44 -0
- package/dist/harness/cost-cap-watch.js.map +1 -0
- package/dist/harness/events/emitter.d.ts +220 -0
- package/dist/harness/events/emitter.js +726 -0
- package/dist/harness/events/emitter.js.map +1 -0
- package/dist/harness/events/ids.d.ts +88 -0
- package/dist/harness/events/ids.js +136 -0
- package/dist/harness/events/ids.js.map +1 -0
- package/dist/harness/loaded-versions.d.ts +20 -0
- package/dist/harness/loaded-versions.js +70 -0
- package/dist/harness/loaded-versions.js.map +1 -0
- package/dist/harness/owed-undos.d.ts +119 -0
- package/dist/harness/owed-undos.js +200 -0
- package/dist/harness/owed-undos.js.map +1 -0
- package/dist/harness/persist-chokepoint.d.ts +113 -0
- package/dist/harness/persist-chokepoint.js +126 -0
- package/dist/harness/persist-chokepoint.js.map +1 -0
- package/dist/harness/registry.d.ts +108 -0
- package/dist/harness/registry.js +174 -0
- package/dist/harness/registry.js.map +1 -0
- package/dist/harness/run-span.d.ts +78 -0
- package/dist/harness/run-span.js +139 -0
- package/dist/harness/run-span.js.map +1 -0
- package/dist/harness/run-turn.d.ts +59 -0
- package/dist/harness/run-turn.js +749 -0
- package/dist/harness/run-turn.js.map +1 -0
- package/dist/harness/stop-controller.d.ts +65 -0
- package/dist/harness/stop-controller.js +70 -0
- package/dist/harness/stop-controller.js.map +1 -0
- package/dist/harness/terminal-table.d.ts +212 -0
- package/dist/harness/terminal-table.js +329 -0
- package/dist/harness/terminal-table.js.map +1 -0
- package/dist/harness/transcript/builder.d.ts +269 -0
- package/dist/harness/transcript/builder.js +842 -0
- package/dist/harness/transcript/builder.js.map +1 -0
- package/dist/harness/transcript/events.d.ts +236 -0
- package/dist/harness/transcript/events.js +55 -0
- package/dist/harness/transcript/events.js.map +1 -0
- package/dist/harness/transcript/resume-seed.d.ts +67 -0
- package/dist/harness/transcript/resume-seed.js +228 -0
- package/dist/harness/transcript/resume-seed.js.map +1 -0
- package/dist/harness/transcript/state.d.ts +111 -0
- package/dist/harness/transcript/state.js +147 -0
- package/dist/harness/transcript/state.js.map +1 -0
- package/dist/harness/turn-context.d.ts +923 -0
- package/dist/harness/turn-context.js +1448 -0
- package/dist/harness/turn-context.js.map +1 -0
- package/dist/harness/turn-timeline.d.ts +132 -0
- package/dist/harness/turn-timeline.js +213 -0
- package/dist/harness/turn-timeline.js.map +1 -0
- package/dist/harness/types.d.ts +700 -0
- package/dist/harness/types.js +72 -0
- package/dist/harness/types.js.map +1 -0
- package/dist/harness/usage-accumulator.d.ts +76 -0
- package/dist/harness/usage-accumulator.js +112 -0
- package/dist/harness/usage-accumulator.js.map +1 -0
- package/dist/harness-adapters.d.ts +40 -0
- package/dist/harness-adapters.js +45 -0
- package/dist/harness-adapters.js.map +1 -0
- package/dist/idle-watchdog.d.ts +11 -0
- package/dist/idle-watchdog.js +24 -0
- package/dist/idle-watchdog.js.map +1 -0
- package/dist/in-flight.d.ts +35 -0
- package/dist/in-flight.js +61 -0
- package/dist/in-flight.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptors/run-credential-activity.d.ts +24 -0
- package/dist/interceptors/run-credential-activity.js +36 -0
- package/dist/interceptors/run-credential-activity.js.map +1 -0
- package/dist/ipc-protocol-fixtures.d.ts +28 -0
- package/dist/ipc-protocol-fixtures.js +50 -0
- package/dist/ipc-protocol-fixtures.js.map +1 -0
- package/dist/ipc-protocol.d.ts +43 -0
- package/dist/ipc-protocol.js +20 -0
- package/dist/ipc-protocol.js.map +1 -0
- package/dist/main.d.ts +26 -0
- package/dist/main.js +451 -0
- package/dist/main.js.map +1 -0
- package/dist/middleware/advisory-message.d.ts +52 -0
- package/dist/middleware/advisory-message.js +58 -0
- package/dist/middleware/advisory-message.js.map +1 -0
- package/dist/middleware/approval-gate.d.ts +255 -0
- package/dist/middleware/approval-gate.js +502 -0
- package/dist/middleware/approval-gate.js.map +1 -0
- package/dist/middleware/cost-advisory.d.ts +65 -0
- package/dist/middleware/cost-advisory.js +185 -0
- package/dist/middleware/cost-advisory.js.map +1 -0
- package/dist/middleware/error-hints.d.ts +27 -0
- package/dist/middleware/error-hints.js +116 -0
- package/dist/middleware/error-hints.js.map +1 -0
- package/dist/middleware/execution-budget.d.ts +38 -0
- package/dist/middleware/execution-budget.js +168 -0
- package/dist/middleware/execution-budget.js.map +1 -0
- package/dist/middleware/index.d.ts +55 -0
- package/dist/middleware/index.js +80 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/loop-detection.d.ts +22 -0
- package/dist/middleware/loop-detection.js +161 -0
- package/dist/middleware/loop-detection.js.map +1 -0
- package/dist/middleware/otel-spans.d.ts +43 -0
- package/dist/middleware/otel-spans.js +281 -0
- package/dist/middleware/otel-spans.js.map +1 -0
- package/dist/middleware/path-normalization.d.ts +84 -0
- package/dist/middleware/path-normalization.js +161 -0
- package/dist/middleware/path-normalization.js.map +1 -0
- package/dist/middleware/tool-intent.d.ts +57 -0
- package/dist/middleware/tool-intent.js +152 -0
- package/dist/middleware/tool-intent.js.map +1 -0
- package/dist/middleware/tool-scope.d.ts +119 -0
- package/dist/middleware/tool-scope.js +159 -0
- package/dist/middleware/tool-scope.js.map +1 -0
- package/dist/middleware/tool-truncation.d.ts +16 -0
- package/dist/middleware/tool-truncation.js +67 -0
- package/dist/middleware/tool-truncation.js.map +1 -0
- package/dist/middleware/types.d.ts +119 -0
- package/dist/middleware/types.js +10 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/otel-export.d.ts +142 -0
- package/dist/otel-export.js +269 -0
- package/dist/otel-export.js.map +1 -0
- package/dist/otel-metrics.d.ts +22 -0
- package/dist/otel-metrics.js +47 -0
- package/dist/otel-metrics.js.map +1 -0
- package/dist/otel.d.ts +49 -0
- package/dist/otel.js +125 -0
- package/dist/otel.js.map +1 -0
- package/dist/payload-codecs.d.ts +17 -0
- package/dist/payload-codecs.js +45 -0
- package/dist/payload-codecs.js.map +1 -0
- package/dist/pipe-safety.d.ts +55 -0
- package/dist/pipe-safety.js +103 -0
- package/dist/pipe-safety.js.map +1 -0
- package/dist/pool-member.d.ts +61 -0
- package/dist/pool-member.js +51 -0
- package/dist/pool-member.js.map +1 -0
- package/dist/preflight.d.ts +77 -0
- package/dist/preflight.js +98 -0
- package/dist/preflight.js.map +1 -0
- package/dist/run-trace-id.d.ts +34 -0
- package/dist/run-trace-id.js +44 -0
- package/dist/run-trace-id.js.map +1 -0
- package/dist/runner-entry.d.ts +15 -0
- package/dist/runner-entry.js +17 -0
- package/dist/runner-entry.js.map +1 -0
- package/dist/runner-manager.d.ts +160 -0
- package/dist/runner-manager.js +590 -0
- package/dist/runner-manager.js.map +1 -0
- package/dist/runner-token-coordinator.d.ts +61 -0
- package/dist/runner-token-coordinator.js +89 -0
- package/dist/runner-token-coordinator.js.map +1 -0
- package/dist/runner.d.ts +155 -0
- package/dist/runner.js +392 -0
- package/dist/runner.js.map +1 -0
- package/dist/sandbox-token-renewal.d.ts +64 -0
- package/dist/sandbox-token-renewal.js +168 -0
- package/dist/sandbox-token-renewal.js.map +1 -0
- package/dist/shared/activity-input.d.ts +52 -0
- package/dist/shared/activity-input.js +34 -0
- package/dist/shared/activity-input.js.map +1 -0
- package/dist/shared/agent-fs.d.ts +144 -0
- package/dist/shared/agent-fs.js +171 -0
- package/dist/shared/agent-fs.js.map +1 -0
- package/dist/shared/agent-handover.d.ts +42 -0
- package/dist/shared/agent-handover.js +156 -0
- package/dist/shared/agent-handover.js.map +1 -0
- package/dist/shared/agent-identity.d.ts +96 -0
- package/dist/shared/agent-identity.js +153 -0
- package/dist/shared/agent-identity.js.map +1 -0
- package/dist/shared/agent-servers.d.ts +4 -0
- package/dist/shared/agent-servers.js +46 -0
- package/dist/shared/agent-servers.js.map +1 -0
- package/dist/shared/approval-canonicalize.d.ts +19 -0
- package/dist/shared/approval-canonicalize.js +119 -0
- package/dist/shared/approval-canonicalize.js.map +1 -0
- package/dist/shared/approval-fingerprint.d.ts +103 -0
- package/dist/shared/approval-fingerprint.js +110 -0
- package/dist/shared/approval-fingerprint.js.map +1 -0
- package/dist/shared/approval-policy.d.ts +323 -0
- package/dist/shared/approval-policy.js +375 -0
- package/dist/shared/approval-policy.js.map +1 -0
- package/dist/shared/archive-mount.d.ts +68 -0
- package/dist/shared/archive-mount.js +108 -0
- package/dist/shared/archive-mount.js.map +1 -0
- package/dist/shared/args-preview.d.ts +90 -0
- package/dist/shared/args-preview.js +121 -0
- package/dist/shared/args-preview.js.map +1 -0
- package/dist/shared/artifact-storage.d.ts +155 -0
- package/dist/shared/artifact-storage.js +373 -0
- package/dist/shared/artifact-storage.js.map +1 -0
- package/dist/shared/attachment-download-urls.d.ts +53 -0
- package/dist/shared/attachment-download-urls.js +68 -0
- package/dist/shared/attachment-download-urls.js.map +1 -0
- package/dist/shared/attachment-naming.d.ts +53 -0
- package/dist/shared/attachment-naming.js +59 -0
- package/dist/shared/attachment-naming.js.map +1 -0
- package/dist/shared/attachment-resolver.d.ts +124 -0
- package/dist/shared/attachment-resolver.js +322 -0
- package/dist/shared/attachment-resolver.js.map +1 -0
- package/dist/shared/attachment-vision.d.ts +245 -0
- package/dist/shared/attachment-vision.js +339 -0
- package/dist/shared/attachment-vision.js.map +1 -0
- 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/blueprint-resolver.d.ts +175 -0
- package/dist/shared/blueprint-resolver.js +305 -0
- package/dist/shared/blueprint-resolver.js.map +1 -0
- package/dist/shared/builtin-assistant-prompt.d.ts +30 -0
- package/dist/shared/builtin-assistant-prompt.js +36 -0
- package/dist/shared/builtin-assistant-prompt.js.map +1 -0
- package/dist/shared/builtin-judge.d.ts +9 -0
- package/dist/shared/builtin-judge.js +53 -0
- package/dist/shared/builtin-judge.js.map +1 -0
- package/dist/shared/caller-identity.d.ts +112 -0
- package/dist/shared/caller-identity.js +150 -0
- package/dist/shared/caller-identity.js.map +1 -0
- package/dist/shared/channel-attachment.d.ts +90 -0
- package/dist/shared/channel-attachment.js +209 -0
- package/dist/shared/channel-attachment.js.map +1 -0
- package/dist/shared/checkpointer/factory.d.ts +32 -0
- package/dist/shared/checkpointer/factory.js +72 -0
- package/dist/shared/checkpointer/factory.js.map +1 -0
- package/dist/shared/checkpointer/http-saver.d.ts +70 -0
- package/dist/shared/checkpointer/http-saver.js +335 -0
- package/dist/shared/checkpointer/http-saver.js.map +1 -0
- package/dist/shared/checkpointer/sqlite-saver.d.ts +54 -0
- package/dist/shared/checkpointer/sqlite-saver.js +272 -0
- package/dist/shared/checkpointer/sqlite-saver.js.map +1 -0
- package/dist/shared/checkpointer/types.d.ts +25 -0
- package/dist/shared/checkpointer/types.js +18 -0
- package/dist/shared/checkpointer/types.js.map +1 -0
- package/dist/shared/cold-start-timing.d.ts +124 -0
- package/dist/shared/cold-start-timing.js +220 -0
- package/dist/shared/cold-start-timing.js.map +1 -0
- package/dist/shared/context-bridge.d.ts +30 -0
- package/dist/shared/context-bridge.js +45 -0
- package/dist/shared/context-bridge.js.map +1 -0
- package/dist/shared/conversation-attachment.d.ts +103 -0
- package/dist/shared/conversation-attachment.js +128 -0
- package/dist/shared/conversation-attachment.js.map +1 -0
- package/dist/shared/conversation-catchup.d.ts +40 -0
- package/dist/shared/conversation-catchup.js +86 -0
- package/dist/shared/conversation-catchup.js.map +1 -0
- package/dist/shared/cost-guard.d.ts +51 -0
- package/dist/shared/cost-guard.js +58 -0
- package/dist/shared/cost-guard.js.map +1 -0
- package/dist/shared/declared-preferences.d.ts +47 -0
- package/dist/shared/declared-preferences.js +64 -0
- package/dist/shared/declared-preferences.js.map +1 -0
- package/dist/shared/eval-case/agent-mock.d.ts +61 -0
- package/dist/shared/eval-case/agent-mock.js +88 -0
- package/dist/shared/eval-case/agent-mock.js.map +1 -0
- package/dist/shared/eval-case/case-archive.d.ts +51 -0
- package/dist/shared/eval-case/case-archive.js +119 -0
- package/dist/shared/eval-case/case-archive.js.map +1 -0
- package/dist/shared/eval-case/mock-endpoint.d.ts +68 -0
- package/dist/shared/eval-case/mock-endpoint.js +209 -0
- package/dist/shared/eval-case/mock-endpoint.js.map +1 -0
- package/dist/shared/eval-case/prepare-case.d.ts +78 -0
- package/dist/shared/eval-case/prepare-case.js +193 -0
- package/dist/shared/eval-case/prepare-case.js.map +1 -0
- package/dist/shared/eval-case/read-files.d.ts +26 -0
- package/dist/shared/eval-case/read-files.js +88 -0
- package/dist/shared/eval-case/read-files.js.map +1 -0
- package/dist/shared/exact-apply.d.ts +109 -0
- package/dist/shared/exact-apply.js +205 -0
- package/dist/shared/exact-apply.js.map +1 -0
- package/dist/shared/execution-context.d.ts +47 -0
- package/dist/shared/execution-context.js +51 -0
- package/dist/shared/execution-context.js.map +1 -0
- package/dist/shared/execution-target.d.ts +13 -0
- package/dist/shared/execution-target.js +15 -0
- package/dist/shared/execution-target.js.map +1 -0
- package/dist/shared/extract-json.d.ts +26 -0
- package/dist/shared/extract-json.js +140 -0
- package/dist/shared/extract-json.js.map +1 -0
- package/dist/shared/extract-structured-output.d.ts +38 -0
- package/dist/shared/extract-structured-output.js +68 -0
- package/dist/shared/extract-structured-output.js.map +1 -0
- package/dist/shared/file-change.d.ts +42 -0
- package/dist/shared/file-change.js +55 -0
- package/dist/shared/file-change.js.map +1 -0
- package/dist/shared/file-tools.d.ts +105 -0
- package/dist/shared/file-tools.js +166 -0
- package/dist/shared/file-tools.js.map +1 -0
- package/dist/shared/filereview/capture.d.ts +238 -0
- package/dist/shared/filereview/capture.js +559 -0
- package/dist/shared/filereview/capture.js.map +1 -0
- package/dist/shared/filereview/cas-progress.d.ts +45 -0
- package/dist/shared/filereview/cas-progress.js +131 -0
- package/dist/shared/filereview/cas-progress.js.map +1 -0
- package/dist/shared/filereview/cas-substrate.d.ts +226 -0
- package/dist/shared/filereview/cas-substrate.js +315 -0
- package/dist/shared/filereview/cas-substrate.js.map +1 -0
- 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/command-provenance.d.ts +95 -0
- package/dist/shared/filereview/command-provenance.js +134 -0
- package/dist/shared/filereview/command-provenance.js.map +1 -0
- package/dist/shared/filereview/digest.d.ts +40 -0
- package/dist/shared/filereview/digest.js +66 -0
- package/dist/shared/filereview/digest.js.map +1 -0
- package/dist/shared/filereview/events.d.ts +199 -0
- package/dist/shared/filereview/events.js +348 -0
- package/dist/shared/filereview/events.js.map +1 -0
- package/dist/shared/filereview/git-substrate.d.ts +233 -0
- package/dist/shared/filereview/git-substrate.js +528 -0
- package/dist/shared/filereview/git-substrate.js.map +1 -0
- package/dist/shared/filereview/index.d.ts +15 -0
- package/dist/shared/filereview/index.js +16 -0
- package/dist/shared/filereview/index.js.map +1 -0
- package/dist/shared/filereview/line-counts.d.ts +48 -0
- package/dist/shared/filereview/line-counts.js +72 -0
- package/dist/shared/filereview/line-counts.js.map +1 -0
- package/dist/shared/filereview/progress.d.ts +200 -0
- package/dist/shared/filereview/progress.js +245 -0
- package/dist/shared/filereview/progress.js.map +1 -0
- package/dist/shared/filereview/record.d.ts +53 -0
- package/dist/shared/filereview/record.js +104 -0
- package/dist/shared/filereview/record.js.map +1 -0
- package/dist/shared/filereview/secret-paths.d.ts +61 -0
- package/dist/shared/filereview/secret-paths.js +103 -0
- package/dist/shared/filereview/secret-paths.js.map +1 -0
- package/dist/shared/fingerprint-secret.d.ts +35 -0
- package/dist/shared/fingerprint-secret.js +68 -0
- package/dist/shared/fingerprint-secret.js.map +1 -0
- package/dist/shared/grpc-retry.d.ts +28 -0
- package/dist/shared/grpc-retry.js +39 -0
- package/dist/shared/grpc-retry.js.map +1 -0
- package/dist/shared/heartbeat.d.ts +24 -0
- package/dist/shared/heartbeat.js +40 -0
- package/dist/shared/heartbeat.js.map +1 -0
- package/dist/shared/hooks/answer.d.ts +49 -0
- package/dist/shared/hooks/answer.js +152 -0
- package/dist/shared/hooks/answer.js.map +1 -0
- package/dist/shared/hooks/condition.d.ts +71 -0
- package/dist/shared/hooks/condition.js +341 -0
- package/dist/shared/hooks/condition.js.map +1 -0
- package/dist/shared/hooks/evaluate.d.ts +125 -0
- package/dist/shared/hooks/evaluate.js +253 -0
- package/dist/shared/hooks/evaluate.js.map +1 -0
- package/dist/shared/hooks/formats/claude-code.d.ts +43 -0
- package/dist/shared/hooks/formats/claude-code.js +90 -0
- package/dist/shared/hooks/formats/claude-code.js.map +1 -0
- package/dist/shared/hooks/formats/common.d.ts +30 -0
- package/dist/shared/hooks/formats/common.js +7 -0
- package/dist/shared/hooks/formats/common.js.map +1 -0
- package/dist/shared/hooks/formats/cursor.d.ts +72 -0
- package/dist/shared/hooks/formats/cursor.js +238 -0
- package/dist/shared/hooks/formats/cursor.js.map +1 -0
- package/dist/shared/hooks/hook-set.d.ts +84 -0
- package/dist/shared/hooks/hook-set.js +80 -0
- package/dist/shared/hooks/hook-set.js.map +1 -0
- package/dist/shared/hooks/matcher.d.ts +14 -0
- package/dist/shared/hooks/matcher.js +32 -0
- package/dist/shared/hooks/matcher.js.map +1 -0
- package/dist/shared/hooks/messages.d.ts +19 -0
- package/dist/shared/hooks/messages.js +34 -0
- package/dist/shared/hooks/messages.js.map +1 -0
- package/dist/shared/hooks/run.d.ts +89 -0
- package/dist/shared/hooks/run.js +146 -0
- package/dist/shared/hooks/run.js.map +1 -0
- package/dist/shared/hooks/setup.d.ts +73 -0
- package/dist/shared/hooks/setup.js +166 -0
- package/dist/shared/hooks/setup.js.map +1 -0
- package/dist/shared/hooks/shell-commands.d.ts +39 -0
- package/dist/shared/hooks/shell-commands.js +326 -0
- package/dist/shared/hooks/shell-commands.js.map +1 -0
- package/dist/shared/hooks/tool-view.d.ts +164 -0
- package/dist/shared/hooks/tool-view.js +310 -0
- package/dist/shared/hooks/tool-view.js.map +1 -0
- package/dist/shared/http-retry.d.ts +85 -0
- package/dist/shared/http-retry.js +101 -0
- package/dist/shared/http-retry.js.map +1 -0
- package/dist/shared/implement-plan-prompt.d.ts +44 -0
- package/dist/shared/implement-plan-prompt.js +98 -0
- package/dist/shared/implement-plan-prompt.js.map +1 -0
- package/dist/shared/json-schema-to-zod.d.ts +13 -0
- package/dist/shared/json-schema-to-zod.js +49 -0
- package/dist/shared/json-schema-to-zod.js.map +1 -0
- package/dist/shared/llm-backend.d.ts +303 -0
- package/dist/shared/llm-backend.js +491 -0
- package/dist/shared/llm-backend.js.map +1 -0
- package/dist/shared/llm-proxy.d.ts +64 -0
- package/dist/shared/llm-proxy.js +131 -0
- package/dist/shared/llm-proxy.js.map +1 -0
- package/dist/shared/mcp-manager.d.ts +61 -0
- package/dist/shared/mcp-manager.js +131 -0
- package/dist/shared/mcp-manager.js.map +1 -0
- package/dist/shared/mcp-oauth-detect.d.ts +23 -0
- package/dist/shared/mcp-oauth-detect.js +72 -0
- package/dist/shared/mcp-oauth-detect.js.map +1 -0
- package/dist/shared/mcp-resolver.d.ts +145 -0
- package/dist/shared/mcp-resolver.js +238 -0
- package/dist/shared/mcp-resolver.js.map +1 -0
- package/dist/shared/mcp-schema-sanitizer.d.ts +68 -0
- package/dist/shared/mcp-schema-sanitizer.js +195 -0
- package/dist/shared/mcp-schema-sanitizer.js.map +1 -0
- package/dist/shared/mcp-tool-listing.d.ts +80 -0
- package/dist/shared/mcp-tool-listing.js +166 -0
- package/dist/shared/mcp-tool-listing.js.map +1 -0
- package/dist/shared/mcp-transport-guard.d.ts +53 -0
- package/dist/shared/mcp-transport-guard.js +70 -0
- package/dist/shared/mcp-transport-guard.js.map +1 -0
- package/dist/shared/memory-attachment.d.ts +103 -0
- package/dist/shared/memory-attachment.js +142 -0
- package/dist/shared/memory-attachment.js.map +1 -0
- package/dist/shared/memory-retrieval.d.ts +126 -0
- package/dist/shared/memory-retrieval.js +293 -0
- package/dist/shared/memory-retrieval.js.map +1 -0
- package/dist/shared/model-client.d.ts +111 -0
- package/dist/shared/model-client.js +328 -0
- package/dist/shared/model-client.js.map +1 -0
- package/dist/shared/model-error.d.ts +94 -0
- package/dist/shared/model-error.js +475 -0
- package/dist/shared/model-error.js.map +1 -0
- package/dist/shared/model-facts.d.ts +21 -0
- package/dist/shared/model-facts.js +22 -0
- package/dist/shared/model-facts.js.map +1 -0
- package/dist/shared/model-lanes.d.ts +48 -0
- package/dist/shared/model-lanes.js +52 -0
- package/dist/shared/model-lanes.js.map +1 -0
- package/dist/shared/model-pricing-data.d.ts +20 -0
- package/dist/shared/model-pricing-data.js +82 -0
- package/dist/shared/model-pricing-data.js.map +1 -0
- package/dist/shared/model-pricing.d.ts +16 -0
- package/dist/shared/model-pricing.js +46 -0
- package/dist/shared/model-pricing.js.map +1 -0
- package/dist/shared/model-registry.d.ts +113 -0
- package/dist/shared/model-registry.js +250 -0
- package/dist/shared/model-registry.js.map +1 -0
- package/dist/shared/persist-decision.d.ts +38 -0
- package/dist/shared/persist-decision.js +40 -0
- package/dist/shared/persist-decision.js.map +1 -0
- package/dist/shared/placeholder-resolver.d.ts +39 -0
- package/dist/shared/placeholder-resolver.js +86 -0
- package/dist/shared/placeholder-resolver.js.map +1 -0
- package/dist/shared/plan-artifact.d.ts +105 -0
- package/dist/shared/plan-artifact.js +225 -0
- package/dist/shared/plan-artifact.js.map +1 -0
- package/dist/shared/plan-mode-permissions.d.ts +49 -0
- package/dist/shared/plan-mode-permissions.js +51 -0
- package/dist/shared/plan-mode-permissions.js.map +1 -0
- package/dist/shared/plan-mode-prompt.d.ts +41 -0
- package/dist/shared/plan-mode-prompt.js +74 -0
- package/dist/shared/plan-mode-prompt.js.map +1 -0
- package/dist/shared/platform-server-address.d.ts +72 -0
- package/dist/shared/platform-server-address.js +103 -0
- package/dist/shared/platform-server-address.js.map +1 -0
- package/dist/shared/plugin-mount.d.ts +165 -0
- package/dist/shared/plugin-mount.js +428 -0
- package/dist/shared/plugin-mount.js.map +1 -0
- package/dist/shared/plugin-servers.d.ts +16 -0
- package/dist/shared/plugin-servers.js +22 -0
- package/dist/shared/plugin-servers.js.map +1 -0
- package/dist/shared/prompt-sections.d.ts +140 -0
- package/dist/shared/prompt-sections.js +135 -0
- package/dist/shared/prompt-sections.js.map +1 -0
- package/dist/shared/recalled-memories.d.ts +55 -0
- package/dist/shared/recalled-memories.js +70 -0
- package/dist/shared/recalled-memories.js.map +1 -0
- package/dist/shared/registry-endpoint.d.ts +60 -0
- package/dist/shared/registry-endpoint.js +99 -0
- package/dist/shared/registry-endpoint.js.map +1 -0
- 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 +40 -0
- package/dist/shared/run-credential.js +47 -0
- package/dist/shared/run-credential.js.map +1 -0
- package/dist/shared/run-values.d.ts +88 -0
- package/dist/shared/run-values.js +101 -0
- package/dist/shared/run-values.js.map +1 -0
- package/dist/shared/runner-credential-keys.d.ts +20 -0
- package/dist/shared/runner-credential-keys.js +101 -0
- package/dist/shared/runner-credential-keys.js.map +1 -0
- package/dist/shared/runner-credential-store.d.ts +77 -0
- package/dist/shared/runner-credential-store.js +111 -0
- package/dist/shared/runner-credential-store.js.map +1 -0
- package/dist/shared/sender-identity.d.ts +50 -0
- package/dist/shared/sender-identity.js +69 -0
- package/dist/shared/sender-identity.js.map +1 -0
- package/dist/shared/service-tier.d.ts +55 -0
- package/dist/shared/service-tier.js +67 -0
- package/dist/shared/service-tier.js.map +1 -0
- package/dist/shared/session-context.d.ts +35 -0
- package/dist/shared/session-context.js +52 -0
- package/dist/shared/session-context.js.map +1 -0
- package/dist/shared/shell-env.d.ts +42 -0
- package/dist/shared/shell-env.js +65 -0
- package/dist/shared/shell-env.js.map +1 -0
- package/dist/shared/skill-mount.d.ts +135 -0
- package/dist/shared/skill-mount.js +178 -0
- package/dist/shared/skill-mount.js.map +1 -0
- package/dist/shared/skill-resolver.d.ts +57 -0
- package/dist/shared/skill-resolver.js +113 -0
- package/dist/shared/skill-resolver.js.map +1 -0
- package/dist/shared/stall-watchdog.d.ts +68 -0
- package/dist/shared/stall-watchdog.js +102 -0
- package/dist/shared/stall-watchdog.js.map +1 -0
- package/dist/shared/status-offload.d.ts +196 -0
- package/dist/shared/status-offload.js +655 -0
- package/dist/shared/status-offload.js.map +1 -0
- package/dist/shared/status.d.ts +100 -0
- package/dist/shared/status.js +191 -0
- package/dist/shared/status.js.map +1 -0
- package/dist/shared/streaming-scheduler.d.ts +59 -0
- package/dist/shared/streaming-scheduler.js +110 -0
- package/dist/shared/streaming-scheduler.js.map +1 -0
- package/dist/shared/subagent-gate.d.ts +47 -0
- package/dist/shared/subagent-gate.js +98 -0
- package/dist/shared/subagent-gate.js.map +1 -0
- package/dist/shared/subagent-rows.d.ts +21 -0
- package/dist/shared/subagent-rows.js +34 -0
- package/dist/shared/subagent-rows.js.map +1 -0
- package/dist/shared/subagents.d.ts +49 -0
- package/dist/shared/subagents.js +51 -0
- package/dist/shared/subagents.js.map +1 -0
- package/dist/shared/synthesized-attachment.d.ts +73 -0
- package/dist/shared/synthesized-attachment.js +59 -0
- package/dist/shared/synthesized-attachment.js.map +1 -0
- package/dist/shared/telemetry-content.d.ts +132 -0
- package/dist/shared/telemetry-content.js +239 -0
- package/dist/shared/telemetry-content.js.map +1 -0
- package/dist/shared/thinking-mode.d.ts +82 -0
- package/dist/shared/thinking-mode.js +105 -0
- package/dist/shared/thinking-mode.js.map +1 -0
- package/dist/shared/todos.d.ts +30 -0
- package/dist/shared/todos.js +58 -0
- package/dist/shared/todos.js.map +1 -0
- package/dist/shared/tool-kind.d.ts +41 -0
- package/dist/shared/tool-kind.js +107 -0
- package/dist/shared/tool-kind.js.map +1 -0
- package/dist/shared/tool-lists.d.ts +283 -0
- package/dist/shared/tool-lists.js +518 -0
- package/dist/shared/tool-lists.js.map +1 -0
- package/dist/shared/tool-rounds.d.ts +91 -0
- package/dist/shared/tool-rounds.js +136 -0
- package/dist/shared/tool-rounds.js.map +1 -0
- package/dist/shared/tool-row.d.ts +195 -0
- package/dist/shared/tool-row.js +320 -0
- package/dist/shared/tool-row.js.map +1 -0
- package/dist/shared/trace-context.d.ts +20 -0
- package/dist/shared/trace-context.js +36 -0
- package/dist/shared/trace-context.js.map +1 -0
- package/dist/shared/with-timeout.d.ts +27 -0
- package/dist/shared/with-timeout.js +47 -0
- package/dist/shared/with-timeout.js.map +1 -0
- package/dist/shared/worker-shutdown.d.ts +99 -0
- package/dist/shared/worker-shutdown.js +94 -0
- package/dist/shared/worker-shutdown.js.map +1 -0
- package/dist/shared/workspace/file-tree.d.ts +13 -0
- package/dist/shared/workspace/file-tree.js +101 -0
- package/dist/shared/workspace/file-tree.js.map +1 -0
- package/dist/shared/workspace/git-credential.d.ts +91 -0
- package/dist/shared/workspace/git-credential.js +222 -0
- package/dist/shared/workspace/git-credential.js.map +1 -0
- package/dist/shared/workspace/git-identity.d.ts +36 -0
- package/dist/shared/workspace/git-identity.js +39 -0
- package/dist/shared/workspace/git-identity.js.map +1 -0
- package/dist/shared/workspace/local-backend.d.ts +44 -0
- package/dist/shared/workspace/local-backend.js +110 -0
- package/dist/shared/workspace/local-backend.js.map +1 -0
- package/dist/shared/workspace/platform-dir.d.ts +106 -0
- package/dist/shared/workspace/platform-dir.js +151 -0
- package/dist/shared/workspace/platform-dir.js.map +1 -0
- package/dist/shared/workspace/platform-mount.d.ts +95 -0
- package/dist/shared/workspace/platform-mount.js +157 -0
- package/dist/shared/workspace/platform-mount.js.map +1 -0
- package/dist/shared/workspace/provisioner.d.ts +52 -0
- package/dist/shared/workspace/provisioner.js +70 -0
- package/dist/shared/workspace/provisioner.js.map +1 -0
- package/dist/shared/workspace/session-provision.d.ts +56 -0
- package/dist/shared/workspace/session-provision.js +54 -0
- package/dist/shared/workspace/session-provision.js.map +1 -0
- package/dist/shared/workspace/session-root.d.ts +35 -0
- package/dist/shared/workspace/session-root.js +53 -0
- package/dist/shared/workspace/session-root.js.map +1 -0
- package/dist/shared/workspace/sources/empty.d.ts +8 -0
- package/dist/shared/workspace/sources/empty.js +16 -0
- package/dist/shared/workspace/sources/empty.js.map +1 -0
- package/dist/shared/workspace/sources/git.d.ts +30 -0
- package/dist/shared/workspace/sources/git.js +224 -0
- package/dist/shared/workspace/sources/git.js.map +1 -0
- package/dist/shared/workspace/sources/local-path.d.ts +17 -0
- package/dist/shared/workspace/sources/local-path.js +61 -0
- package/dist/shared/workspace/sources/local-path.js.map +1 -0
- package/dist/shared/workspace/stigmer-link.d.ts +73 -0
- package/dist/shared/workspace/stigmer-link.js +173 -0
- package/dist/shared/workspace/stigmer-link.js.map +1 -0
- package/dist/shared/workspace/types.d.ts +71 -0
- package/dist/shared/workspace/types.js +19 -0
- package/dist/shared/workspace/types.js.map +1 -0
- package/dist/shared/workspace/workspace-lock.d.ts +86 -0
- package/dist/shared/workspace/workspace-lock.js +190 -0
- package/dist/shared/workspace/workspace-lock.js.map +1 -0
- package/dist/shared/workspace/writeback-coordinator.d.ts +119 -0
- package/dist/shared/workspace/writeback-coordinator.js +361 -0
- package/dist/shared/workspace/writeback-coordinator.js.map +1 -0
- package/dist/shared/zip-extract.d.ts +55 -0
- package/dist/shared/zip-extract.js +98 -0
- package/dist/shared/zip-extract.js.map +1 -0
- package/dist/tools/index.d.ts +26 -0
- package/dist/tools/index.js +26 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/url-guard.d.ts +77 -0
- package/dist/tools/url-guard.js +119 -0
- package/dist/tools/url-guard.js.map +1 -0
- package/dist/tools/web-fetch-tool.d.ts +55 -0
- package/dist/tools/web-fetch-tool.js +218 -0
- package/dist/tools/web-fetch-tool.js.map +1 -0
- package/dist/worker.d.ts +35 -0
- package/dist/worker.js +71 -0
- package/dist/worker.js.map +1 -0
- package/dist/workflow-source.d.ts +38 -0
- package/dist/workflow-source.js +53 -0
- package/dist/workflow-source.js.map +1 -0
- package/dist/workflows/index.d.ts +32 -0
- package/dist/workflows/index.js +33 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/list-plugin-tools.d.ts +23 -0
- package/dist/workflows/list-plugin-tools.js +56 -0
- package/dist/workflows/list-plugin-tools.js.map +1 -0
- package/dist/workflows/types.d.ts +43 -0
- package/dist/workflows/types.js +18 -0
- package/dist/workflows/types.js.map +1 -0
- package/package.json +161 -0
- package/src/__test-utils__/__tests__/execution-record-barrier.test.ts +75 -0
- package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +361 -0
- package/src/__test-utils__/__tests__/live-gate.test.ts +100 -0
- package/src/__test-utils__/__tests__/real-model-registry.test.ts +53 -0
- package/src/__test-utils__/__tests__/vitest-global-setup.test.ts +37 -0
- package/src/__test-utils__/agent-host-probe-child.ts +77 -0
- package/src/__test-utils__/approval-contract/contract.ts +613 -0
- package/src/__test-utils__/approval-contract/hook-commands.ts +100 -0
- package/src/__test-utils__/approval-contract/types.ts +323 -0
- package/src/__test-utils__/approval-log.ts +142 -0
- package/src/__test-utils__/config-fixture.ts +65 -0
- package/src/__test-utils__/cursor-sdk-wire-child.ts +47 -0
- package/src/__test-utils__/execution-record-fixture.ts +229 -0
- package/src/__test-utils__/fake-artifact-storage.ts +83 -0
- package/src/__test-utils__/fake-upstream.ts +67 -0
- package/src/__test-utils__/file-review-projection.ts +77 -0
- package/src/__test-utils__/git-workspace-fixture.ts +58 -0
- package/src/__test-utils__/harness-boot-order-child.ts +78 -0
- package/src/__test-utils__/harness-contract/contract.ts +652 -0
- package/src/__test-utils__/harness-contract/recording-sink.ts +138 -0
- package/src/__test-utils__/harness-contract/runtime-contract.ts +1136 -0
- package/src/__test-utils__/harness-contract/scripted-adapter.ts +404 -0
- package/src/__test-utils__/harness-contract/types.ts +200 -0
- package/src/__test-utils__/hermetic-activity.ts +1061 -0
- package/src/__test-utils__/import-http2-first.ts +11 -0
- package/src/__test-utils__/live-gate.ts +106 -0
- package/src/__test-utils__/loopback-host.ts +48 -0
- package/src/__test-utils__/mock-client.ts +52 -0
- package/src/__test-utils__/mock-workspace.ts +28 -0
- package/src/__test-utils__/model-registry-fixture.ts +133 -0
- package/src/__test-utils__/module-specifiers.ts +177 -0
- package/src/__test-utils__/proto-helpers.ts +70 -0
- package/src/__test-utils__/real-model-registry.ts +85 -0
- package/src/__test-utils__/refuse-engine-sdks.ts +18 -0
- package/src/__test-utils__/timing-lines.ts +43 -0
- package/src/__test-utils__/turn-input-fixture.ts +166 -0
- package/src/__test-utils__/vitest-global-setup.ts +50 -0
- package/src/__tests__/agent-separation.container.test.ts +157 -0
- package/src/__tests__/approval-gateway-contract.test.ts +29 -0
- package/src/__tests__/bootstrap.test.ts +264 -0
- package/src/__tests__/config-boundary.test.ts +135 -0
- package/src/__tests__/config.test.ts +165 -0
- package/src/__tests__/exit-backstop.test.ts +91 -0
- package/src/__tests__/harness-boot-order.test.ts +87 -0
- package/src/__tests__/harness-contract.test.ts +27 -0
- package/src/__tests__/in-flight.test.ts +84 -0
- package/src/__tests__/ipc-protocol-fixtures.test.ts +61 -0
- package/src/__tests__/ipc-protocol.test.ts +33 -0
- package/src/__tests__/otel-export.test.ts +266 -0
- package/src/__tests__/otel-init.test.ts +111 -0
- package/src/__tests__/otel-metrics.test.ts +37 -0
- package/src/__tests__/pipe-safety.test.ts +119 -0
- package/src/__tests__/pool-member.test.ts +77 -0
- package/src/__tests__/preflight.test.ts +104 -0
- package/src/__tests__/readme-environment.test.ts +678 -0
- package/src/__tests__/run-credential-registration.test.ts +53 -0
- package/src/__tests__/run-trace-id.test.ts +53 -0
- package/src/__tests__/runner-hosting.test.ts +134 -0
- package/src/__tests__/runner-manager-interceptors.test.ts +67 -0
- package/src/__tests__/runner-manager-shutdown.test.ts +199 -0
- package/src/__tests__/runner-manager.test.ts +95 -0
- package/src/__tests__/runner-token-coordinator.test.ts +166 -0
- package/src/__tests__/runner.test.ts +284 -0
- package/src/__tests__/sandbox-token-renewal.test.ts +175 -0
- package/src/__tests__/worker.test.ts +107 -0
- package/src/activities/__tests__/attach-session.test.ts +133 -0
- package/src/activities/__tests__/ensure-thread.test.ts +96 -0
- package/src/activities/__tests__/error-classifier.test.ts +464 -0
- package/src/activities/__tests__/generate-session-subject-wire.test.ts +119 -0
- package/src/activities/__tests__/generate-session-subject.test.ts +356 -0
- package/src/activities/__tests__/list-plugin-tools.test.ts +392 -0
- package/src/activities/attach-session.ts +111 -0
- package/src/activities/ensure-thread.ts +45 -0
- package/src/activities/execute-cursor/__test-utils__/__tests__/scripted-double.test.ts +126 -0
- package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +445 -0
- package/src/activities/execute-cursor/__test-utils__/cursor-hook-harness.ts +407 -0
- package/src/activities/execute-cursor/__test-utils__/fold.ts +118 -0
- package/src/activities/execute-cursor/__test-utils__/gateway-substrate.ts +316 -0
- package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +428 -0
- package/src/activities/execute-cursor/__test-utils__/scripted-agent.ts +374 -0
- package/src/activities/execute-cursor/__test-utils__/scripted-sdk.ts +310 -0
- package/src/activities/execute-cursor/__tests__/adapter-is-temporal-free.test.ts +45 -0
- package/src/activities/execute-cursor/__tests__/agent-session-cache.test.ts +220 -0
- package/src/activities/execute-cursor/__tests__/approval-decisions-agree.test.ts +141 -0
- package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +335 -0
- package/src/activities/execute-cursor/__tests__/approval-state.test.ts +288 -0
- package/src/activities/execute-cursor/__tests__/boundary-seal.test.ts +125 -0
- package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +1045 -0
- package/src/activities/execute-cursor/__tests__/cas-observations.test.ts +267 -0
- package/src/activities/execute-cursor/__tests__/check-tool-scope.test.ts +290 -0
- package/src/activities/execute-cursor/__tests__/coarse-fingerprint.test.ts +98 -0
- package/src/activities/execute-cursor/__tests__/cursor-baseurl-routing.live.test.ts +94 -0
- package/src/activities/execute-cursor/__tests__/cursor-event-recorder.test.ts +142 -0
- package/src/activities/execute-cursor/__tests__/cursor-fetch-interceptor-bypass.live.test.ts +76 -0
- package/src/activities/execute-cursor/__tests__/cursor-generate-image.live.test.ts +154 -0
- package/src/activities/execute-cursor/__tests__/cursor-hook-protocol.live.test.ts +479 -0
- package/src/activities/execute-cursor/__tests__/cursor-hooks-gate.live.test.ts +295 -0
- package/src/activities/execute-cursor/__tests__/cursor-mcp-config.test.ts +128 -0
- package/src/activities/execute-cursor/__tests__/cursor-mode.test.ts +95 -0
- package/src/activities/execute-cursor/__tests__/cursor-sdk-auth.live.test.ts +97 -0
- package/src/activities/execute-cursor/__tests__/cursor-transcript.live.test.ts +289 -0
- package/src/activities/execute-cursor/__tests__/deny-gate-exact-apply.test.ts +200 -0
- package/src/activities/execute-cursor/__tests__/error-classifier-billing.test.ts +178 -0
- package/src/activities/execute-cursor/__tests__/error-classifier-extraction.test.ts +208 -0
- package/src/activities/execute-cursor/__tests__/error-classifier-introspection.test.ts +156 -0
- package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +389 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.enhanced.append.prompt.md +147 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.enhanced.everything.prompt.md +164 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.enhanced.no-instructions.prompt.md +142 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.enhanced.plan-mode.prompt.md +184 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.hitl.recovery.prompt.md +189 -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.append.prompt.md +5 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.resumed.raw.prompt.md +1 -0
- package/src/activities/execute-cursor/__tests__/hermetic/answers.test.ts +279 -0
- package/src/activities/execute-cursor/__tests__/hermetic/built-in-assistant.test.ts +127 -0
- package/src/activities/execute-cursor/__tests__/hermetic/bypassed-tool-call.test.ts +120 -0
- package/src/activities/execute-cursor/__tests__/hermetic/deny-and-retry.test.ts +233 -0
- package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +262 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/approve-all.turn2.events.json +94 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/approve-all.turn2.rows.json +47 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/approve-all.turn2.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/cost-cap.events.json +14 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/cost-cap.rows.json +14 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/cost-cap.status.json +18 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/deny-and-retry.turn1.events.json +37 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/deny-and-retry.turn1.rows.json +29 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/deny-and-retry.turn1.status.json +4 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/deny-and-retry.turn2.events.json +71 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/deny-and-retry.turn2.rows.json +32 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/deny-and-retry.turn2.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/file-review-capture.events.json +68 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/file-review-capture.rows.json +96 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/file-review-capture.status.json +74 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/file-review-off.events.json +50 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/file-review-off.rows.json +32 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/file-review-off.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/file-review-reconcile.events.json +91 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/file-review-reconcile.rows.json +9 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/file-review-reconcile.status.json +6 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/hooks.turn1.events.json +110 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/hooks.turn1.rows.json +77 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/hooks.turn1.status.json +14 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/hooks.turn2.events.json +144 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/hooks.turn2.rows.json +34 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/hooks.turn2.status.json +27 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/mcp-tool-call.events.json +50 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/mcp-tool-call.rows.json +30 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/mcp-tool-call.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/pause.events.json +14 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/pause.rows.json +9 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/pause.status.json +4 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/plain-turn.events.json +14 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/plain-turn.rows.json +9 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/plain-turn.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/platform-stop.events.json +37 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/platform-stop.rows.json +29 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/platform-stop.status.json +6 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/recovery-fresh-agent.events.json +26 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/recovery-fresh-agent.rows.json +14 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/recovery-fresh-agent.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/recovery-transport-timeout.events.json +14 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/recovery-transport-timeout.rows.json +9 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/recovery-transport-timeout.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/reject.turn2.events.json +61 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/reject.turn2.rows.json +31 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/reject.turn2.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/resolution-error.events.json +1 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/resolution-error.rows.json +14 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/resolution-error.status.json +7 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/run-cancelled.events.json +14 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/run-cancelled.rows.json +9 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/run-cancelled.status.json +5 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/run-error-non-retryable.events.json +14 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/run-error-non-retryable.rows.json +9 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/run-error-non-retryable.status.json +7 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-error-at-create.events.json +1 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-error-at-create.rows.json +14 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-error-at-create.status.json +7 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-task-note.events.json +56 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-task-note.rows.json +34 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-task-note.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.error-delta.events.json +64 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.error-delta.rows.json +36 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.error-delta.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.events.json +49 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.output-first.events.json +49 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.output-first.rows.json +31 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.output-first.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.rows.json +31 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/stall.events.json +24 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/stall.rows.json +29 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/stall.status.json +7 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sub-agent-delegation.events.json +158 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sub-agent-delegation.rows.json +70 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sub-agent-delegation.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/thinking-turn.events.json +77 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/thinking-turn.rows.json +39 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/thinking-turn.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/todo-write.events.json +99 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/todo-write.rows.json +80 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/todo-write.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-call.events.json +49 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-call.rows.json +29 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-call.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-error.events.json +50 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-error.rows.json +29 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-error.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-only-step.events.json +37 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-only-step.rows.json +28 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-only-step.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattended-skip.events.json +51 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattended-skip.rows.json +31 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattended-skip.status.json +17 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattributed-hook-block.events.json +50 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattributed-hook-block.rows.json +36 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattributed-hook-block.status.json +19 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/worker-shutdown.events.json +14 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/worker-shutdown.rows.json +14 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/worker-shutdown.status.json +7 -0
- package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +198 -0
- package/src/activities/execute-cursor/__tests__/hermetic/hooks.test.ts +569 -0
- package/src/activities/execute-cursor/__tests__/hermetic/mcp-tool-call.test.ts +149 -0
- package/src/activities/execute-cursor/__tests__/hermetic/pause-vs-shutdown.test.ts +222 -0
- package/src/activities/execute-cursor/__tests__/hermetic/plain-turn.test.ts +178 -0
- package/src/activities/execute-cursor/__tests__/hermetic/recovery-fresh-agent.test.ts +162 -0
- package/src/activities/execute-cursor/__tests__/hermetic/run-wait-arms.test.ts +296 -0
- package/src/activities/execute-cursor/__tests__/hermetic/sdk-task-note.test.ts +125 -0
- package/src/activities/execute-cursor/__tests__/hermetic/shell-output-delta.test.ts +283 -0
- package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +342 -0
- package/src/activities/execute-cursor/__tests__/hermetic/sub-agent-delegation.test.ts +197 -0
- package/src/activities/execute-cursor/__tests__/hermetic/thinking-turn.test.ts +149 -0
- package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +214 -0
- package/src/activities/execute-cursor/__tests__/hermetic/todo-write.test.ts +169 -0
- package/src/activities/execute-cursor/__tests__/hermetic/tool-call.test.ts +143 -0
- package/src/activities/execute-cursor/__tests__/hermetic/tool-error.test.ts +141 -0
- package/src/activities/execute-cursor/__tests__/hermetic/tool-lists.test.ts +391 -0
- package/src/activities/execute-cursor/__tests__/hermetic/tool-only-step.test.ts +134 -0
- package/src/activities/execute-cursor/__tests__/hermetic/turn-phases.test.ts +136 -0
- package/src/activities/execute-cursor/__tests__/hermetic/unattended-skip.test.ts +157 -0
- package/src/activities/execute-cursor/__tests__/hermetic/unattributed-hook-block.test.ts +200 -0
- package/src/activities/execute-cursor/__tests__/hermetic/workspace-lock-timeout.test.ts +156 -0
- package/src/activities/execute-cursor/__tests__/hitl-ledger.test.ts +2109 -0
- package/src/activities/execute-cursor/__tests__/hitl-resume-history.test.ts +431 -0
- package/src/activities/execute-cursor/__tests__/hook-refusal-rows.test.ts +95 -0
- package/src/activities/execute-cursor/__tests__/hook-scope.test.ts +175 -0
- package/src/activities/execute-cursor/__tests__/hook-script.test.ts +1408 -0
- package/src/activities/execute-cursor/__tests__/hook-server.test.ts +465 -0
- package/src/activities/execute-cursor/__tests__/hook-views.test.ts +171 -0
- package/src/activities/execute-cursor/__tests__/http2-interceptor.test.ts +408 -0
- package/src/activities/execute-cursor/__tests__/model-pricing.test.ts +173 -0
- package/src/activities/execute-cursor/__tests__/prepare-hooks.test.ts +97 -0
- package/src/activities/execute-cursor/__tests__/prompt-builder-delegation.test.ts +85 -0
- package/src/activities/execute-cursor/__tests__/prompt-goldens.test.ts +270 -0
- package/src/activities/execute-cursor/__tests__/resolve-timeout-message.test.ts +24 -0
- package/src/activities/execute-cursor/__tests__/run-telemetry.test.ts +177 -0
- package/src/activities/execute-cursor/__tests__/runner-error-regressions.test.ts +103 -0
- package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +174 -0
- package/src/activities/execute-cursor/__tests__/scope-refusal-rows.test.ts +269 -0
- package/src/activities/execute-cursor/__tests__/sdk-warmup.test.ts +45 -0
- package/src/activities/execute-cursor/__tests__/sequential-gate-resume.test.ts +182 -0
- package/src/activities/execute-cursor/__tests__/service-tier.test.ts +230 -0
- package/src/activities/execute-cursor/__tests__/session-lifecycle.test.ts +336 -0
- package/src/activities/execute-cursor/__tests__/session-store.test.ts +220 -0
- package/src/activities/execute-cursor/__tests__/subagent-config.test.ts +181 -0
- package/src/activities/execute-cursor/__tests__/tool-result-image.test.ts +250 -0
- package/src/activities/execute-cursor/__tests__/translator.test.ts +651 -0
- package/src/activities/execute-cursor/__tests__/turn-boundary.test.ts +415 -0
- package/src/activities/execute-cursor/__tests__/turn-recovery.test.ts +186 -0
- package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +354 -0
- package/src/activities/execute-cursor/__tests__/usage-pricing.test.ts +84 -0
- package/src/activities/execute-cursor/__tests__/workspace-setup.test.ts +814 -0
- package/src/activities/execute-cursor/adapter.ts +161 -0
- package/src/activities/execute-cursor/agent-session-cache.ts +229 -0
- package/src/activities/execute-cursor/approval-policy.ts +129 -0
- package/src/activities/execute-cursor/approval-state.ts +1097 -0
- package/src/activities/execute-cursor/boundary-rows.ts +1419 -0
- package/src/activities/execute-cursor/cas-observations.ts +263 -0
- package/src/activities/execute-cursor/cursor-capabilities.ts +80 -0
- package/src/activities/execute-cursor/cursor-event-recorder.ts +112 -0
- package/src/activities/execute-cursor/cursor-mcp-config.ts +124 -0
- package/src/activities/execute-cursor/cursor-mode.ts +42 -0
- package/src/activities/execute-cursor/error-classifier.ts +416 -0
- package/src/activities/execute-cursor/fetch-interceptor.ts +454 -0
- package/src/activities/execute-cursor/hook-scope.ts +216 -0
- package/src/activities/execute-cursor/hook-script.ts +1232 -0
- package/src/activities/execute-cursor/hook-server.ts +473 -0
- package/src/activities/execute-cursor/hook-tool-hiding.ts +76 -0
- package/src/activities/execute-cursor/hook-views.ts +195 -0
- package/src/activities/execute-cursor/http2-interceptor.ts +267 -0
- package/src/activities/execute-cursor/model-pricing-data.ts +170 -0
- package/src/activities/execute-cursor/model-pricing.ts +190 -0
- package/src/activities/execute-cursor/prompt-builder.ts +1081 -0
- package/src/activities/execute-cursor/rejection-capture.ts +93 -0
- package/src/activities/execute-cursor/run-telemetry.ts +189 -0
- package/src/activities/execute-cursor/sdk-warmup.ts +77 -0
- package/src/activities/execute-cursor/service-tier.ts +251 -0
- package/src/activities/execute-cursor/session-lifecycle.ts +543 -0
- package/src/activities/execute-cursor/session-store.ts +186 -0
- package/src/activities/execute-cursor/sub-agent-steps.ts +188 -0
- package/src/activities/execute-cursor/subagent-config.ts +124 -0
- package/src/activities/execute-cursor/tool-result.ts +128 -0
- package/src/activities/execute-cursor/translator.ts +544 -0
- package/src/activities/execute-cursor/turn-boundary.ts +373 -0
- package/src/activities/execute-cursor/turn-recovery.ts +223 -0
- package/src/activities/execute-cursor/turn-settle.ts +605 -0
- package/src/activities/execute-cursor/turn-setup.ts +964 -0
- package/src/activities/execute-cursor/turn-stream.ts +354 -0
- package/src/activities/execute-cursor/turn.ts +271 -0
- package/src/activities/execute-cursor/usage-pricing.ts +67 -0
- package/src/activities/execute-cursor/workspace-hook-files.ts +424 -0
- package/src/activities/execute-cursor/workspace-setup.ts +549 -0
- package/src/activities/execute-deep-agent/__test-utils__/contract-subject.ts +404 -0
- package/src/activities/execute-deep-agent/__test-utils__/gateway-substrate.ts +519 -0
- package/src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts +430 -0
- package/src/activities/execute-deep-agent/__test-utils__/hitl-script.ts +48 -0
- package/src/activities/execute-deep-agent/__test-utils__/paused-session-fixture.ts +172 -0
- package/src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts +84 -0
- package/src/activities/execute-deep-agent/__test-utils__/scripted-model.ts +585 -0
- package/src/activities/execute-deep-agent/__test-utils__/think-bound-session.ts +29 -0
- package/src/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.ts +295 -0
- 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 +83 -0
- package/src/activities/execute-deep-agent/__tests__/approval-file-change.test.ts +88 -0
- package/src/activities/execute-deep-agent/__tests__/auto-publish.test.ts +144 -0
- package/src/activities/execute-deep-agent/__tests__/builtin-tool-surface.test.ts +108 -0
- package/src/activities/execute-deep-agent/__tests__/cas-capture-backend.test.ts +286 -0
- package/src/activities/execute-deep-agent/__tests__/cas-capture-observer.test.ts +163 -0
- package/src/activities/execute-deep-agent/__tests__/engine-tools.test.ts +97 -0
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.build-from-plan.prompt.md +133 -0
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.everything.prompt.md +151 -0
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.judge.prompt.md +26 -0
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.minimal.append.prompt.md +28 -0
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.minimal.prompt.md +25 -0
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.plan-mode.prompt.md +140 -0
- package/src/activities/execute-deep-agent/__tests__/goldens/user-message.everything.md +36 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/answers.test.ts +114 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/built-in-assistant.test.ts +103 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/cost-advisory.test.ts +239 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/file-review-capture.test.ts +306 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/fixtures/paused-session.deepagents-1.10.2.json +592 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/fixtures/paused-session.think-bound.json +498 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.events.json +49 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.rows.json +32 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.status.json +15 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.events.json +118 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.rows.json +45 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.status.json +16 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.events.json +69 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.rows.json +30 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.status.json +16 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.events.json +69 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.rows.json +97 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.status.json +84 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-off.events.json +51 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-off.rows.json +33 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-off.status.json +27 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-reconcile.events.json +92 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-reconcile.rows.json +9 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-reconcile.status.json +6 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.events.json +35 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.rows.json +27 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.status.json +15 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/hooks.turn1.events.json +107 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/hooks.turn1.rows.json +74 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/hooks.turn1.status.json +25 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/hooks.turn2.events.json +141 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/hooks.turn2.rows.json +31 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/hooks.turn2.status.json +26 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.events.json +71 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.rows.json +50 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.status.json +26 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.events.json +105 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.rows.json +30 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.status.json +27 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.events.json +37 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.rows.json +24 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.status.json +15 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.events.json +24 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.rows.json +22 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.status.json +15 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/plain-turn.events.json +14 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/plain-turn.rows.json +9 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/plain-turn.status.json +16 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.events.json +24 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.rows.json +27 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.status.json +17 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.events.json +352 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.rows.json +209 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.status.json +18 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.events.json +71 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.rows.json +29 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.status.json +16 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/resolution-error.events.json +1 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/resolution-error.rows.json +14 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/resolution-error.status.json +7 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.events.json +90 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.rows.json +48 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.status.json +15 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.events.json +124 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.rows.json +30 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.status.json +16 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.events.json +70 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.rows.json +29 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.status.json +16 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.text-fallback.events.json +24 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.text-fallback.rows.json +13 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.text-fallback.status.json +16 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.tier2.events.json +24 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.tier2.rows.json +13 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.tier2.status.json +16 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.tool-strategy.events.json +36 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.tool-strategy.rows.json +18 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.tool-strategy.status.json +16 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.events.json +118 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.rows.json +49 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.status.json +16 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.events.json +49 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.rows.json +29 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.status.json +16 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/unattended-skip.events.json +51 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/unattended-skip.rows.json +31 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/unattended-skip.status.json +16 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.events.json +37 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.rows.json +29 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.status.json +18 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/write-todos.events.json +58 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/write-todos.rows.json +54 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/write-todos.status.json +16 -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 +194 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-parallel-gates.test.ts +131 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-round-trips.test.ts +224 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-sequential-gates.test.ts +180 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/hooks.test.ts +556 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/inline-artifact-across-gate.test.ts +188 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/pause-vs-shutdown.test.ts +217 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/plain-turn.test.ts +162 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/platform-stop.test.ts +130 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/recorded-agent-version.test.ts +148 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/recursion-limit.test.ts +212 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/resolution-error.test.ts +130 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/resume-across-engine-upgrade.test.ts +268 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/resume-across-think-retirement.test.ts +181 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/run-finished-while-waiting.test.ts +110 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/run-values-refused.test.ts +106 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/structured-output.test.ts +242 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-concurrent-invocations.test.ts +312 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-delegation.test.ts +211 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-own-context.test.ts +192 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/thrown-turn-drains-publishes.test.ts +154 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/tool-call.test.ts +167 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/tool-lists.test.ts +291 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/turn-phases.test.ts +118 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/unattended-skip.test.ts +130 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/workspace-lock-timeout.test.ts +154 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/write-todos.test.ts +160 -0
- package/src/activities/execute-deep-agent/__tests__/hitl.test.ts +355 -0
- package/src/activities/execute-deep-agent/__tests__/hooks-setup.test.ts +333 -0
- package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +350 -0
- package/src/activities/execute-deep-agent/__tests__/loaded-tool-marks.test.ts +95 -0
- package/src/activities/execute-deep-agent/__tests__/plain-turn.live.test.ts +103 -0
- package/src/activities/execute-deep-agent/__tests__/plan-mode-path-normalization.test.ts +404 -0
- package/src/activities/execute-deep-agent/__tests__/platform-route.test.ts +185 -0
- package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +577 -0
- package/src/activities/execute-deep-agent/__tests__/prompt-goldens.test.ts +293 -0
- package/src/activities/execute-deep-agent/__tests__/resume-across-think-retirement.live.test.ts +98 -0
- package/src/activities/execute-deep-agent/__tests__/resumed-history.test.ts +48 -0
- package/src/activities/execute-deep-agent/__tests__/scripted-model.test.ts +408 -0
- package/src/activities/execute-deep-agent/__tests__/shell-execute-gate.test.ts +293 -0
- package/src/activities/execute-deep-agent/__tests__/streaming-side-effects.test.ts +120 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-approval-propagation.test.ts +160 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-gitignored-capture.test.ts +214 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-plan-mode-permissions.test.ts +213 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-spans.test.ts +110 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-transformer.test.ts +662 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +197 -0
- package/src/activities/execute-deep-agent/__tests__/summarization-verification.test.ts +330 -0
- package/src/activities/execute-deep-agent/__tests__/tool-call.live.test.ts +80 -0
- package/src/activities/execute-deep-agent/__tests__/tool-scope.test.ts +519 -0
- package/src/activities/execute-deep-agent/__tests__/translator-subagents.test.ts +519 -0
- package/src/activities/execute-deep-agent/__tests__/translator-through-builder.test.ts +830 -0
- package/src/activities/execute-deep-agent/__tests__/translator.test.ts +641 -0
- package/src/activities/execute-deep-agent/__tests__/turn-setup-connect.test.ts +89 -0
- package/src/activities/execute-deep-agent/__tests__/turn-setup-tool-lists.test.ts +192 -0
- package/src/activities/execute-deep-agent/__tests__/turn-stream.test.ts +381 -0
- package/src/activities/execute-deep-agent/__tests__/v3-event-recorder.test.ts +186 -0
- package/src/activities/execute-deep-agent/__tests__/vision-input.test.ts +152 -0
- package/src/activities/execute-deep-agent/adapter.ts +95 -0
- package/src/activities/execute-deep-agent/approval-file-change.ts +86 -0
- package/src/activities/execute-deep-agent/auto-publish.ts +80 -0
- package/src/activities/execute-deep-agent/cas-capture-backend.ts +154 -0
- package/src/activities/execute-deep-agent/cas-capture-observer.ts +132 -0
- package/src/activities/execute-deep-agent/deep-agent-capabilities.ts +49 -0
- package/src/activities/execute-deep-agent/deepagents-profiles.ts +51 -0
- package/src/activities/execute-deep-agent/engine-tools.ts +33 -0
- package/src/activities/execute-deep-agent/hitl.ts +274 -0
- package/src/activities/execute-deep-agent/hooks-setup.ts +75 -0
- package/src/activities/execute-deep-agent/inline-publisher.ts +208 -0
- package/src/activities/execute-deep-agent/platform-route.ts +284 -0
- package/src/activities/execute-deep-agent/prompt-builder.ts +547 -0
- package/src/activities/execute-deep-agent/resumed-history.ts +52 -0
- package/src/activities/execute-deep-agent/streaming-side-effects.ts +83 -0
- package/src/activities/execute-deep-agent/subagent-transformer.ts +732 -0
- package/src/activities/execute-deep-agent/subagent-wiring.ts +180 -0
- package/src/activities/execute-deep-agent/todo-list.ts +56 -0
- package/src/activities/execute-deep-agent/translator.ts +564 -0
- package/src/activities/execute-deep-agent/turn-settle.ts +162 -0
- package/src/activities/execute-deep-agent/turn-setup.ts +842 -0
- package/src/activities/execute-deep-agent/turn-stream.ts +309 -0
- package/src/activities/execute-deep-agent/turn.ts +151 -0
- package/src/activities/execute-deep-agent/v3-event-recorder.ts +112 -0
- package/src/activities/generate-session-subject.ts +376 -0
- package/src/activities/list-plugin-tools.ts +251 -0
- package/src/agent-host/__tests__/channel.test.ts +271 -0
- package/src/agent-host/__tests__/codec.test.ts +435 -0
- package/src/agent-host/__tests__/entry-telemetry.test.ts +159 -0
- package/src/agent-host/__tests__/entry.test.ts +223 -0
- package/src/agent-host/__tests__/environment.test.ts +73 -0
- package/src/agent-host/__tests__/failed-boot.test.ts +58 -0
- package/src/agent-host/__tests__/host-sink.test.ts +118 -0
- package/src/agent-host/__tests__/host.test.ts +162 -0
- package/src/agent-host/__tests__/hostile-host.test.ts +440 -0
- package/src/agent-host/__tests__/offload-through-host.test.ts +124 -0
- package/src/agent-host/__tests__/remote-fs.test.ts +177 -0
- package/src/agent-host/__tests__/spawned-host.test.ts +174 -0
- package/src/agent-host/__tests__/supervisor.test.ts +488 -0
- package/src/agent-host/channel.ts +334 -0
- package/src/agent-host/codec.ts +631 -0
- package/src/agent-host/entry.ts +153 -0
- package/src/agent-host/environment.ts +76 -0
- package/src/agent-host/failed-boot.ts +29 -0
- package/src/agent-host/fs-service.ts +133 -0
- package/src/agent-host/host-sink.ts +153 -0
- package/src/agent-host/host.ts +228 -0
- package/src/agent-host/hosting.ts +162 -0
- package/src/agent-host/protocol.ts +380 -0
- package/src/agent-host/remote-adapter.ts +320 -0
- package/src/agent-host/remote-fs.ts +128 -0
- package/src/agent-host/supervisor.ts +382 -0
- package/src/agent-proxy/__tests__/cursor-lane.test.ts +635 -0
- package/src/agent-proxy/__tests__/cursor-sdk-key-required.test.ts +119 -0
- package/src/agent-proxy/__tests__/cursor-sdk-wire.test.ts +175 -0
- package/src/agent-proxy/__tests__/lanes.test.ts +258 -0
- package/src/agent-proxy/__tests__/loopback-certificate.test.ts +100 -0
- package/src/agent-proxy/__tests__/otlp-forward-rebuild.test.ts +66 -0
- package/src/agent-proxy/__tests__/otlp-forward.test.ts +295 -0
- package/src/agent-proxy/__tests__/relay.test.ts +115 -0
- package/src/agent-proxy/__tests__/server.test.ts +436 -0
- package/src/agent-proxy/cursor-lane.ts +528 -0
- package/src/agent-proxy/lanes.ts +285 -0
- package/src/agent-proxy/loopback-certificate.ts +143 -0
- package/src/agent-proxy/otlp-forward.ts +190 -0
- package/src/agent-proxy/relay.ts +188 -0
- package/src/agent-proxy/server.ts +266 -0
- package/src/attach/__tests__/entry.test.ts +123 -0
- package/src/attach/__tests__/import-graph.test.ts +66 -0
- package/src/attach/__tests__/push.test.ts +162 -0
- package/src/attach/__tests__/waiter.test.ts +416 -0
- package/src/attach/entry.ts +92 -0
- package/src/attach/main.ts +26 -0
- package/src/attach/push.ts +165 -0
- package/src/attach/waiter.ts +370 -0
- package/src/bootstrap.ts +178 -0
- package/src/client/__tests__/agent-version-read.test.ts +39 -0
- package/src/client/__tests__/eval-read.test.ts +43 -0
- package/src/client/__tests__/plugin-read.test.ts +57 -0
- package/src/client/__tests__/run-calls.test.ts +65 -0
- package/src/client/__tests__/server-contracts.test.ts +157 -0
- package/src/client/__tests__/session-events-calls.test.ts +139 -0
- package/src/client/__tests__/stigmer-client.test.ts +577 -0
- package/src/client/__tests__/token-claims.test.ts +102 -0
- package/src/client/server-contracts.ts +124 -0
- package/src/client/stigmer-client.ts +686 -0
- package/src/client/token-claims.ts +103 -0
- package/src/config.ts +378 -0
- package/src/exit-backstop.ts +97 -0
- package/src/gen/turn/ai/stigmer/runner/turn/v1/enum_pb.ts +1142 -0
- package/src/gen/turn/ai/stigmer/runner/turn/v1/ledger_pb.ts +458 -0
- package/src/gen/turn/ai/stigmer/runner/turn/v1/rows_pb.ts +920 -0
- package/src/gen-ai-conventions.ts +121 -0
- package/src/harness/README.md +372 -0
- package/src/harness/__tests__/approval-answers.test.ts +202 -0
- package/src/harness/__tests__/approval-decisions.test.ts +114 -0
- package/src/harness/__tests__/attachment-credential.test.ts +115 -0
- package/src/harness/__tests__/capture.test.ts +285 -0
- package/src/harness/__tests__/import-direction.test.ts +169 -0
- package/src/harness/__tests__/loaded-versions.test.ts +76 -0
- package/src/harness/__tests__/mount-skills.test.ts +305 -0
- package/src/harness/__tests__/owed-undos.test.ts +305 -0
- package/src/harness/__tests__/persist-chokepoint.test.ts +344 -0
- package/src/harness/__tests__/readme-index.test.ts +339 -0
- package/src/harness/__tests__/reconcile-turn.test.ts +111 -0
- package/src/harness/__tests__/registry.test.ts +178 -0
- package/src/harness/__tests__/reinvocation-carry.test.ts +65 -0
- package/src/harness/__tests__/resolve-hooks.test.ts +241 -0
- package/src/harness/__tests__/resolve-subagents.test.ts +477 -0
- package/src/harness/__tests__/run-span.test.ts +255 -0
- package/src/harness/__tests__/run-turn-deterministic.test.ts +94 -0
- package/src/harness/__tests__/run-turn-eval-case.test.ts +211 -0
- package/src/harness/__tests__/run-turn.test.ts +435 -0
- package/src/harness/__tests__/runtime-touches-no-agent-path.test.ts +109 -0
- package/src/harness/__tests__/stop-controller.test.ts +93 -0
- package/src/harness/__tests__/terminal-table.test.ts +81 -0
- package/src/harness/__tests__/transcript-is-engine-free.test.ts +83 -0
- package/src/harness/__tests__/transcript-writers.test.ts +193 -0
- package/src/harness/__tests__/turn-attachments-vision.test.ts +105 -0
- package/src/harness/__tests__/turn-context.test.ts +213 -0
- package/src/harness/__tests__/turn-mcp.test.ts +554 -0
- package/src/harness/__tests__/turn-timeline.test.ts +290 -0
- package/src/harness/__tests__/usage-accumulator.test.ts +106 -0
- package/src/harness/approval-answers.ts +174 -0
- package/src/harness/approval-decisions.ts +82 -0
- package/src/harness/capabilities.ts +155 -0
- package/src/harness/capture.ts +337 -0
- package/src/harness/cost-cap-watch.ts +52 -0
- package/src/harness/events/__tests__/emitter.test.ts +715 -0
- package/src/harness/events/__tests__/ids-corpus.test.ts +86 -0
- package/src/harness/events/emitter.ts +805 -0
- package/src/harness/events/ids.ts +156 -0
- package/src/harness/loaded-versions.ts +78 -0
- package/src/harness/owed-undos.ts +258 -0
- package/src/harness/persist-chokepoint.ts +163 -0
- package/src/harness/registry.ts +203 -0
- package/src/harness/run-span.ts +184 -0
- package/src/harness/run-turn.ts +862 -0
- package/src/harness/stop-controller.ts +101 -0
- package/src/harness/terminal-table.ts +390 -0
- package/src/harness/transcript/__tests__/builder.test.ts +1246 -0
- package/src/harness/transcript/__tests__/resume-seed.test.ts +148 -0
- package/src/harness/transcript/__tests__/state.test.ts +144 -0
- package/src/harness/transcript/builder.ts +925 -0
- package/src/harness/transcript/events.ts +281 -0
- package/src/harness/transcript/resume-seed.ts +280 -0
- package/src/harness/transcript/state.ts +167 -0
- package/src/harness/turn-context.ts +1982 -0
- package/src/harness/turn-timeline.ts +248 -0
- package/src/harness/types.ts +725 -0
- package/src/harness/usage-accumulator.ts +134 -0
- package/src/harness-adapters.ts +48 -0
- package/src/idle-watchdog.ts +28 -0
- package/src/in-flight.ts +71 -0
- package/src/index.ts +48 -0
- package/src/interceptors/__tests__/run-credential-activity.test.ts +86 -0
- package/src/interceptors/run-credential-activity.ts +40 -0
- package/src/ipc-protocol-fixtures.ts +90 -0
- package/src/ipc-protocol.ts +89 -0
- package/src/main.ts +506 -0
- package/src/middleware/__tests__/advisory-message.test.ts +59 -0
- package/src/middleware/__tests__/approval-gate-hooks.test.ts +269 -0
- package/src/middleware/__tests__/approval-gate.test.ts +1072 -0
- package/src/middleware/__tests__/cost-advisory.test.ts +272 -0
- package/src/middleware/__tests__/error-hints.test.ts +90 -0
- package/src/middleware/__tests__/execution-budget.test.ts +239 -0
- package/src/middleware/__tests__/loop-detection.test.ts +194 -0
- package/src/middleware/__tests__/otel-spans.test.ts +460 -0
- package/src/middleware/__tests__/path-normalization.test.ts +198 -0
- package/src/middleware/__tests__/tool-intent.test.ts +266 -0
- package/src/middleware/__tests__/tool-truncation.test.ts +112 -0
- package/src/middleware/advisory-message.ts +62 -0
- package/src/middleware/approval-gate.ts +741 -0
- package/src/middleware/cost-advisory.ts +224 -0
- package/src/middleware/error-hints.ts +136 -0
- package/src/middleware/execution-budget.ts +197 -0
- package/src/middleware/index.ts +100 -0
- package/src/middleware/loop-detection.ts +197 -0
- package/src/middleware/otel-spans.ts +345 -0
- package/src/middleware/path-normalization.ts +178 -0
- package/src/middleware/tool-intent.ts +174 -0
- package/src/middleware/tool-scope.ts +201 -0
- package/src/middleware/tool-truncation.ts +94 -0
- package/src/middleware/types.ts +141 -0
- package/src/otel-export.ts +325 -0
- package/src/otel-metrics.ts +61 -0
- package/src/otel.ts +173 -0
- package/src/payload-codecs.ts +66 -0
- package/src/pipe-safety.ts +117 -0
- package/src/pool-member.ts +99 -0
- package/src/preflight.ts +104 -0
- package/src/run-trace-id.ts +50 -0
- package/src/runner-entry.ts +18 -0
- package/src/runner-manager.ts +882 -0
- package/src/runner-token-coordinator.ts +140 -0
- package/src/runner.ts +588 -0
- package/src/sandbox-token-renewal.ts +211 -0
- package/src/shared/__tests__/activity-input.test.ts +78 -0
- package/src/shared/__tests__/advisory-anthropic-payload.test.ts +194 -0
- package/src/shared/__tests__/agent-handover.test.ts +186 -0
- package/src/shared/__tests__/agent-identity.test.ts +144 -0
- package/src/shared/__tests__/agent-servers.test.ts +55 -0
- package/src/shared/__tests__/approval-canonicalize.test.ts +106 -0
- package/src/shared/__tests__/approval-fingerprint.test.ts +115 -0
- package/src/shared/__tests__/approval-policy.test.ts +466 -0
- package/src/shared/__tests__/args-preview.test.ts +147 -0
- package/src/shared/__tests__/artifact-storage-extended.test.ts +243 -0
- package/src/shared/__tests__/artifact-storage.test.ts +844 -0
- package/src/shared/__tests__/attachment-download-urls.test.ts +72 -0
- package/src/shared/__tests__/attachment-naming.test.ts +146 -0
- package/src/shared/__tests__/attachment-resolver.test.ts +644 -0
- package/src/shared/__tests__/attachment-vision.test.ts +424 -0
- package/src/shared/__tests__/attachment-zip.test.ts +236 -0
- package/src/shared/__tests__/bedrock-adapter.test.ts +213 -0
- package/src/shared/__tests__/bedrock-seam.test.ts +390 -0
- package/src/shared/__tests__/blueprint-resolver.test.ts +629 -0
- package/src/shared/__tests__/builtin-judge.test.ts +57 -0
- package/src/shared/__tests__/caller-identity.test.ts +172 -0
- package/src/shared/__tests__/channel-attachment.test.ts +285 -0
- package/src/shared/__tests__/cold-start-timing.test.ts +333 -0
- package/src/shared/__tests__/context-bridge.test.ts +51 -0
- package/src/shared/__tests__/conversation-attachment.test.ts +152 -0
- package/src/shared/__tests__/conversation-catchup.test.ts +94 -0
- package/src/shared/__tests__/cost-guard.test.ts +68 -0
- package/src/shared/__tests__/declared-preferences.test.ts +109 -0
- package/src/shared/__tests__/default-model-agrees-with-server.test.ts +74 -0
- package/src/shared/__tests__/exact-apply.test.ts +370 -0
- package/src/shared/__tests__/execution-target.test.ts +33 -0
- package/src/shared/__tests__/extract-json.test.ts +153 -0
- package/src/shared/__tests__/extract-structured-output.test.ts +149 -0
- package/src/shared/__tests__/file-change.test.ts +85 -0
- package/src/shared/__tests__/file-tools.test.ts +90 -0
- package/src/shared/__tests__/fingerprint-secret.test.ts +51 -0
- package/src/shared/__tests__/foundry-adapter.test.ts +276 -0
- package/src/shared/__tests__/foundry-seam.test.ts +482 -0
- package/src/shared/__tests__/grpc-retry-extended.test.ts +38 -0
- package/src/shared/__tests__/grpc-retry.test.ts +43 -0
- package/src/shared/__tests__/http-retry.test.ts +68 -0
- package/src/shared/__tests__/implement-plan-prompt.test.ts +86 -0
- package/src/shared/__tests__/json-schema-to-zod.test.ts +227 -0
- package/src/shared/__tests__/lease-scope-corpus.test.ts +78 -0
- package/src/shared/__tests__/llm-backend.test.ts +676 -0
- package/src/shared/__tests__/llm-proxy.test.ts +179 -0
- package/src/shared/__tests__/mcp-manager.test.ts +272 -0
- package/src/shared/__tests__/mcp-oauth-detect.test.ts +167 -0
- package/src/shared/__tests__/mcp-resolver.test.ts +454 -0
- package/src/shared/__tests__/mcp-schema-sanitizer.test.ts +267 -0
- package/src/shared/__tests__/mcp-tool-listing.hang.test.ts +82 -0
- package/src/shared/__tests__/mcp-tool-listing.test.ts +257 -0
- package/src/shared/__tests__/mcp-transport-guard.test.ts +71 -0
- package/src/shared/__tests__/memory-attachment.test.ts +183 -0
- package/src/shared/__tests__/memory-retrieval.test.ts +310 -0
- package/src/shared/__tests__/model-client-sampling.test.ts +110 -0
- package/src/shared/__tests__/model-client.test.ts +623 -0
- package/src/shared/__tests__/model-error.test.ts +579 -0
- package/src/shared/__tests__/model-lanes.test.ts +225 -0
- package/src/shared/__tests__/model-pricing.test.ts +131 -0
- package/src/shared/__tests__/model-registry-at-provider.live.test.ts +63 -0
- package/src/shared/__tests__/model-registry.test.ts +460 -0
- package/src/shared/__tests__/persist-decision.test.ts +87 -0
- package/src/shared/__tests__/placeholder-resolver.test.ts +210 -0
- package/src/shared/__tests__/plan-artifact.test.ts +260 -0
- package/src/shared/__tests__/plan-mode-permissions.test.ts +29 -0
- package/src/shared/__tests__/platform-server-address.test.ts +125 -0
- package/src/shared/__tests__/plugin-mount-faults.test.ts +71 -0
- package/src/shared/__tests__/plugin-mount.test.ts +407 -0
- package/src/shared/__tests__/plugin-servers.test.ts +53 -0
- package/src/shared/__tests__/policy-source-corpus.test.ts +69 -0
- package/src/shared/__tests__/prompt-sections.test.ts +113 -0
- package/src/shared/__tests__/recalled-memories.test.ts +88 -0
- package/src/shared/__tests__/registry-endpoint.test.ts +96 -0
- package/src/shared/__tests__/run-credential.test.ts +109 -0
- package/src/shared/__tests__/run-values.test.ts +125 -0
- package/src/shared/__tests__/runner-credential-store.test.ts +175 -0
- package/src/shared/__tests__/secret-leak-scan.test.ts +100 -0
- package/src/shared/__tests__/sender-identity.test.ts +92 -0
- package/src/shared/__tests__/session-context.test.ts +67 -0
- package/src/shared/__tests__/shell-env.test.ts +118 -0
- package/src/shared/__tests__/skill-mount.test.ts +353 -0
- package/src/shared/__tests__/skill-resolver.test.ts +401 -0
- package/src/shared/__tests__/stall-watchdog.test.ts +193 -0
- package/src/shared/__tests__/stamp-flowed-rows.test.ts +142 -0
- package/src/shared/__tests__/status-offload.test.ts +778 -0
- package/src/shared/__tests__/status.test.ts +350 -0
- package/src/shared/__tests__/streaming-scheduler.test.ts +198 -0
- package/src/shared/__tests__/subagent-gate.test.ts +112 -0
- package/src/shared/__tests__/subagent-rows.test.ts +34 -0
- package/src/shared/__tests__/subagents.test.ts +135 -0
- package/src/shared/__tests__/synthesized-attachment.test.ts +96 -0
- package/src/shared/__tests__/telemetry-content.test.ts +220 -0
- package/src/shared/__tests__/thinking-mode.test.ts +69 -0
- package/src/shared/__tests__/todos.test.ts +216 -0
- package/src/shared/__tests__/tool-kind.test.ts +81 -0
- package/src/shared/__tests__/tool-lists.test.ts +463 -0
- package/src/shared/__tests__/tool-rounds.test.ts +107 -0
- package/src/shared/__tests__/tool-row.test.ts +390 -0
- package/src/shared/__tests__/trace-context.test.ts +68 -0
- package/src/shared/__tests__/vertex-adapter.test.ts +196 -0
- package/src/shared/__tests__/vertex-seam.test.ts +296 -0
- package/src/shared/__tests__/with-timeout.test.ts +60 -0
- package/src/shared/__tests__/worker-shutdown.test.ts +106 -0
- package/src/shared/__tests__/zip-extract.test.ts +256 -0
- package/src/shared/activity-input.ts +78 -0
- package/src/shared/agent-fs.ts +264 -0
- package/src/shared/agent-handover.ts +171 -0
- package/src/shared/agent-identity.ts +185 -0
- package/src/shared/agent-servers.ts +51 -0
- package/src/shared/approval-canonicalize.ts +159 -0
- package/src/shared/approval-fingerprint.ts +145 -0
- package/src/shared/approval-policy.ts +536 -0
- package/src/shared/archive-mount.ts +140 -0
- package/src/shared/args-preview.ts +128 -0
- package/src/shared/artifact-storage.ts +496 -0
- package/src/shared/attachment-download-urls.ts +76 -0
- package/src/shared/attachment-naming.ts +78 -0
- package/src/shared/attachment-resolver.ts +468 -0
- package/src/shared/attachment-vision.ts +466 -0
- package/src/shared/attachment-zip.ts +281 -0
- package/src/shared/blueprint-resolver.ts +420 -0
- package/src/shared/builtin-assistant-prompt.ts +38 -0
- package/src/shared/builtin-judge.ts +62 -0
- package/src/shared/caller-identity.ts +186 -0
- package/src/shared/channel-attachment.ts +246 -0
- package/src/shared/checkpointer/__tests__/factory.test.ts +88 -0
- package/src/shared/checkpointer/__tests__/http-saver.test.ts +393 -0
- package/src/shared/checkpointer/__tests__/sqlite-saver.test.ts +212 -0
- package/src/shared/checkpointer/factory.ts +94 -0
- package/src/shared/checkpointer/http-saver.ts +429 -0
- package/src/shared/checkpointer/sqlite-saver.ts +384 -0
- package/src/shared/checkpointer/types.ts +27 -0
- package/src/shared/cold-start-timing.ts +260 -0
- package/src/shared/context-bridge.ts +51 -0
- package/src/shared/conversation-attachment.ts +141 -0
- package/src/shared/conversation-catchup.ts +93 -0
- package/src/shared/cost-guard.ts +63 -0
- package/src/shared/declared-preferences.ts +84 -0
- package/src/shared/eval-case/__tests__/agent-mock.test.ts +126 -0
- package/src/shared/eval-case/__tests__/case-archive.test.ts +159 -0
- package/src/shared/eval-case/__tests__/mock-endpoint-failure.test.ts +65 -0
- package/src/shared/eval-case/__tests__/mock-endpoint.test.ts +269 -0
- package/src/shared/eval-case/__tests__/prepare-case.test.ts +228 -0
- package/src/shared/eval-case/__tests__/read-files.test.ts +90 -0
- package/src/shared/eval-case/agent-mock.ts +131 -0
- package/src/shared/eval-case/case-archive.ts +135 -0
- package/src/shared/eval-case/mock-endpoint.ts +282 -0
- package/src/shared/eval-case/prepare-case.ts +227 -0
- package/src/shared/eval-case/read-files.ts +94 -0
- package/src/shared/exact-apply.ts +247 -0
- package/src/shared/execution-context.ts +62 -0
- package/src/shared/execution-target.ts +17 -0
- package/src/shared/extract-json.ts +153 -0
- package/src/shared/extract-structured-output.ts +83 -0
- package/src/shared/file-change.ts +62 -0
- package/src/shared/file-tools.ts +167 -0
- package/src/shared/filereview/__tests__/capture.test.ts +1178 -0
- package/src/shared/filereview/__tests__/cas-progress.test.ts +229 -0
- package/src/shared/filereview/__tests__/cas-substrate.test.ts +504 -0
- package/src/shared/filereview/__tests__/command-provenance.test.ts +249 -0
- package/src/shared/filereview/__tests__/digest.test.ts +100 -0
- package/src/shared/filereview/__tests__/events.test.ts +350 -0
- package/src/shared/filereview/__tests__/git-substrate.test.ts +365 -0
- package/src/shared/filereview/__tests__/line-counts.test.ts +73 -0
- package/src/shared/filereview/__tests__/progress.test.ts +480 -0
- package/src/shared/filereview/__tests__/proxy-reconcile.test.ts +265 -0
- package/src/shared/filereview/__tests__/record.test.ts +126 -0
- package/src/shared/filereview/__tests__/secret-paths.test.ts +121 -0
- package/src/shared/filereview/capture.ts +783 -0
- package/src/shared/filereview/cas-progress.ts +155 -0
- package/src/shared/filereview/cas-substrate.ts +460 -0
- package/src/shared/filereview/cas-touched.ts +89 -0
- package/src/shared/filereview/command-provenance.ts +182 -0
- package/src/shared/filereview/digest.ts +83 -0
- package/src/shared/filereview/events.ts +515 -0
- package/src/shared/filereview/git-substrate.ts +680 -0
- package/src/shared/filereview/index.ts +99 -0
- package/src/shared/filereview/line-counts.ts +83 -0
- package/src/shared/filereview/progress.ts +361 -0
- package/src/shared/filereview/record.ts +107 -0
- package/src/shared/filereview/secret-paths.ts +119 -0
- package/src/shared/fingerprint-secret.ts +77 -0
- package/src/shared/grpc-retry.ts +54 -0
- package/src/shared/heartbeat.ts +50 -0
- package/src/shared/hooks/__tests__/answer.test.ts +179 -0
- package/src/shared/hooks/__tests__/condition.test.ts +389 -0
- package/src/shared/hooks/__tests__/cursor-format.test.ts +209 -0
- package/src/shared/hooks/__tests__/evaluate.test.ts +473 -0
- package/src/shared/hooks/__tests__/run.test.ts +159 -0
- package/src/shared/hooks/__tests__/stall.test.ts +75 -0
- package/src/shared/hooks/__tests__/tool-view.test.ts +235 -0
- package/src/shared/hooks/answer.ts +180 -0
- package/src/shared/hooks/condition.ts +341 -0
- package/src/shared/hooks/evaluate.ts +381 -0
- package/src/shared/hooks/formats/claude-code.ts +106 -0
- package/src/shared/hooks/formats/common.ts +31 -0
- package/src/shared/hooks/formats/cursor.ts +261 -0
- package/src/shared/hooks/hook-set.ts +134 -0
- package/src/shared/hooks/matcher.ts +31 -0
- package/src/shared/hooks/messages.ts +38 -0
- package/src/shared/hooks/run.ts +190 -0
- package/src/shared/hooks/setup.ts +209 -0
- package/src/shared/hooks/shell-commands.ts +326 -0
- package/src/shared/hooks/tool-view.ts +406 -0
- package/src/shared/http-retry.ts +139 -0
- package/src/shared/implement-plan-prompt.ts +104 -0
- package/src/shared/json-schema-to-zod.ts +53 -0
- package/src/shared/llm-backend.ts +623 -0
- package/src/shared/llm-proxy.ts +154 -0
- package/src/shared/mcp-manager.ts +161 -0
- package/src/shared/mcp-oauth-detect.ts +80 -0
- package/src/shared/mcp-resolver.ts +338 -0
- package/src/shared/mcp-schema-sanitizer.ts +222 -0
- package/src/shared/mcp-tool-listing.ts +203 -0
- package/src/shared/mcp-transport-guard.ts +81 -0
- package/src/shared/memory-attachment.ts +177 -0
- package/src/shared/memory-retrieval.ts +380 -0
- package/src/shared/model-client.ts +465 -0
- package/src/shared/model-error.ts +551 -0
- package/src/shared/model-facts.ts +30 -0
- package/src/shared/model-lanes.ts +66 -0
- package/src/shared/model-pricing-data.ts +123 -0
- package/src/shared/model-pricing.ts +64 -0
- package/src/shared/model-registry.ts +352 -0
- package/src/shared/persist-decision.ts +47 -0
- package/src/shared/placeholder-resolver.ts +113 -0
- package/src/shared/plan-artifact.ts +255 -0
- package/src/shared/plan-mode-permissions.ts +53 -0
- package/src/shared/plan-mode-prompt.ts +74 -0
- package/src/shared/platform-server-address.ts +124 -0
- package/src/shared/plugin-mount.ts +495 -0
- package/src/shared/plugin-servers.ts +23 -0
- package/src/shared/prompt-sections.ts +205 -0
- package/src/shared/recalled-memories.ts +90 -0
- package/src/shared/registry-endpoint.ts +108 -0
- package/src/shared/run-credential-store.ts +45 -0
- package/src/shared/run-credential.ts +48 -0
- package/src/shared/run-values.ts +154 -0
- package/src/shared/runner-credential-keys.ts +106 -0
- package/src/shared/runner-credential-store.ts +115 -0
- package/src/shared/sender-identity.ts +85 -0
- package/src/shared/service-tier.ts +78 -0
- package/src/shared/session-context.ts +58 -0
- package/src/shared/shell-env.ts +75 -0
- package/src/shared/skill-mount.ts +214 -0
- package/src/shared/skill-resolver.ts +167 -0
- package/src/shared/stall-watchdog.ts +122 -0
- package/src/shared/status-offload.ts +742 -0
- package/src/shared/status.ts +268 -0
- package/src/shared/streaming-scheduler.ts +158 -0
- package/src/shared/subagent-gate.ts +122 -0
- package/src/shared/subagent-rows.ts +39 -0
- package/src/shared/subagents.ts +75 -0
- package/src/shared/synthesized-attachment.ts +100 -0
- package/src/shared/telemetry-content.ts +301 -0
- package/src/shared/thinking-mode.ts +125 -0
- package/src/shared/todos.ts +68 -0
- package/src/shared/tool-kind.ts +140 -0
- package/src/shared/tool-lists.ts +617 -0
- package/src/shared/tool-rounds.ts +151 -0
- package/src/shared/tool-row.ts +346 -0
- package/src/shared/trace-context.ts +35 -0
- package/src/shared/with-timeout.ts +53 -0
- package/src/shared/worker-shutdown.ts +134 -0
- package/src/shared/workspace/__tests__/file-tree.test.ts +210 -0
- package/src/shared/workspace/__tests__/git-credential.test.ts +470 -0
- package/src/shared/workspace/__tests__/git-identity.test.ts +124 -0
- package/src/shared/workspace/__tests__/git-source.test.ts +476 -0
- package/src/shared/workspace/__tests__/local-backend-platform.test.ts +259 -0
- package/src/shared/workspace/__tests__/local-backend.test.ts +160 -0
- package/src/shared/workspace/__tests__/platform-mount.test.ts +378 -0
- package/src/shared/workspace/__tests__/provisioner.test.ts +194 -0
- package/src/shared/workspace/__tests__/session-provision.test.ts +322 -0
- package/src/shared/workspace/__tests__/session-root.test.ts +42 -0
- package/src/shared/workspace/__tests__/stigmer-link.test.ts +278 -0
- package/src/shared/workspace/__tests__/workspace-lock.test.ts +207 -0
- package/src/shared/workspace/__tests__/writeback-coordinator-git.test.ts +244 -0
- package/src/shared/workspace/__tests__/writeback-coordinator.test.ts +495 -0
- package/src/shared/workspace/file-tree.ts +116 -0
- package/src/shared/workspace/git-credential.ts +247 -0
- package/src/shared/workspace/git-identity.ts +41 -0
- package/src/shared/workspace/local-backend.ts +132 -0
- package/src/shared/workspace/platform-dir.ts +163 -0
- package/src/shared/workspace/platform-mount.ts +190 -0
- package/src/shared/workspace/provisioner.ts +119 -0
- package/src/shared/workspace/session-provision.ts +104 -0
- package/src/shared/workspace/session-root.ts +60 -0
- package/src/shared/workspace/sources/empty.ts +19 -0
- package/src/shared/workspace/sources/git.ts +292 -0
- package/src/shared/workspace/sources/local-path.ts +92 -0
- package/src/shared/workspace/stigmer-link.ts +185 -0
- package/src/shared/workspace/types.ts +85 -0
- package/src/shared/workspace/workspace-lock.ts +245 -0
- package/src/shared/workspace/writeback-coordinator.ts +522 -0
- package/src/shared/zip-extract.ts +118 -0
- package/src/tools/__tests__/url-guard.test.ts +155 -0
- package/src/tools/__tests__/web-fetch-tool.test.ts +193 -0
- package/src/tools/index.ts +27 -0
- package/src/tools/url-guard.ts +140 -0
- package/src/tools/web-fetch-tool.ts +278 -0
- package/src/worker.ts +112 -0
- package/src/workflow-source.ts +72 -0
- package/src/workflows/__tests__/barrel.test.ts +21 -0
- package/src/workflows/__tests__/list-plugin-tools.test.ts +82 -0
- package/src/workflows/index.ts +36 -0
- package/src/workflows/list-plugin-tools.ts +70 -0
- package/src/workflows/types.ts +46 -0
|
@@ -0,0 +1,1448 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The turn context — everything the runtime resolves for one agent turn
|
|
3
|
+
* before any harness runs, as small named phases producing one typed record.
|
|
4
|
+
*
|
|
5
|
+
* A turn begins with a dozen reads and provisions that have nothing to do
|
|
6
|
+
* with the engine that will run it: the execution and its session, the
|
|
7
|
+
* agent blueprint, the run's values, the workspace and its lock, the undos
|
|
8
|
+
* still owed to earlier turns, what the previous turn left waiting for
|
|
9
|
+
* approval, the MCP servers with the
|
|
10
|
+
* approval default and the agent's tool scope, the attachments, the standing context. Until #1070
|
|
11
|
+
* that sequence lived inline in the Cursor orchestrator
|
|
12
|
+
* (`activities/execute-cursor/index.ts` `executeCursorInner`, phases 1 to
|
|
13
|
+
* 9c); the native orchestrator carried a second copy in its `performSetup`.
|
|
14
|
+
* This module is the one copy. Each phase is a function that reads its
|
|
15
|
+
* inputs, reports its progress label, heartbeats once on entry, and returns
|
|
16
|
+
* a typed slice of the contract's `TurnInput`; {@link resolveTurnContext}
|
|
17
|
+
* sequences them, and the adapter runs its own harness-specific steps after
|
|
18
|
+
* the whole record exists.
|
|
19
|
+
*
|
|
20
|
+
* Shape, chosen against the native orchestrator's `setup.ts` (deleted in
|
|
21
|
+
* #1096): a typed record built from small functions (the `SetupResult` mold),
|
|
22
|
+
* never one 775-line `performSetup`. The record is the adapter contract's `TurnInput`
|
|
23
|
+
* (`types.ts`): every phase returns a named slice of it, and
|
|
24
|
+
* {@link resolveTurnContext} composes the whole. There is no wider
|
|
25
|
+
* "runtime-private" record beside it — the lock release and the write-back
|
|
26
|
+
* coordinator a phase produces are the caller's `TurnFrame` resources, set
|
|
27
|
+
* the instant they exist so a `finally` sees them on every path (a first cut
|
|
28
|
+
* had a `TurnContext extends TurnInput` for them; once the groups lifted,
|
|
29
|
+
* nothing read the extension after composition, so #1070 shipped without it).
|
|
30
|
+
*
|
|
31
|
+
* Three rules every phase obeys:
|
|
32
|
+
*
|
|
33
|
+
* - It never persists and never returns a slim status. A phase that can end
|
|
34
|
+
* the turn (the lock, the reconcile turn's undo) returns a
|
|
35
|
+
* {@link TurnSettlement} naming WHAT was decided; the caller writes the
|
|
36
|
+
* status, persists once and returns. The lock golden pins that persist as
|
|
37
|
+
* the turn's one and only, which is why the rule is structural.
|
|
38
|
+
* - It imports nothing from `src/activities/` (pinned by
|
|
39
|
+
* `__tests__/import-direction.test.ts`). A fact only the harness knows
|
|
40
|
+
* (its file-review identity, its vision profile) arrives through
|
|
41
|
+
* `HarnessCapabilities`.
|
|
42
|
+
* - Its heartbeat pulse and its cold-start timing marks are its own: the
|
|
43
|
+
* step name it enters under is the mark name it emits, one vocabulary for
|
|
44
|
+
* "where in setup are we" in Temporal heartbeat details and the
|
|
45
|
+
* `execution_setup` log.
|
|
46
|
+
*
|
|
47
|
+
* What is deliberately NOT here, and where it is instead:
|
|
48
|
+
*
|
|
49
|
+
* - Cursor's catalog validation of the requested model (`resolveModelId`),
|
|
50
|
+
* the pricing preload and the MCP env pre-flight warning stay in the
|
|
51
|
+
* Cursor adapter: each reads a module that is the adapter's own, and the
|
|
52
|
+
* runtime carries the REQUESTED model name so every harness validates
|
|
53
|
+
* against its own catalog. The skill mount was in that list until #1070
|
|
54
|
+
* found it reads the control plane, which only the runtime holds; it is
|
|
55
|
+
* {@link mountSkills}.
|
|
56
|
+
* - The approval grants, the HITL gate, the capture baseline pin and the
|
|
57
|
+
* Cursor agent itself (phases 5c, 7, 8a, 9) are the adapter's.
|
|
58
|
+
* - The memory selection is a memoized thunk, not a value: whether a prompt
|
|
59
|
+
* carries standing context depends on how the ENGINE resolved (a resumed
|
|
60
|
+
* agent already holds it), which the runtime learns only after the
|
|
61
|
+
* adapter runs. The runtime prepares the selection once; the adapter
|
|
62
|
+
* pulls it when its prompt needs it.
|
|
63
|
+
*/
|
|
64
|
+
import { CancelledFailure } from "@temporalio/activity";
|
|
65
|
+
import { clone } from "@bufbuild/protobuf";
|
|
66
|
+
import { RunStatusSchema } from "@stigmer/apis/ai/stigmer/agentic/run/v1/api_pb";
|
|
67
|
+
import { RunPhase } from "@stigmer/apis/ai/stigmer/agentic/run/v1/enum_pb";
|
|
68
|
+
import { scopedRunnerCredential } from "../client/token-claims.js";
|
|
69
|
+
import { APPROVAL_ANSWER_EVENT_TYPES, approvalAnswersOf, copyAnswersOntoRows } from "./approval-answers.js";
|
|
70
|
+
import { RESUME_SEED_EVENT_TYPES, resumeSeedOf } from "./transcript/resume-seed.js";
|
|
71
|
+
import { resolveBlueprint } from "../shared/blueprint-resolver.js";
|
|
72
|
+
import { fetchTurnValues, RunValuesRefusedError } from "../shared/run-values.js";
|
|
73
|
+
import { provisionSessionWorkspace } from "../shared/workspace/session-provision.js";
|
|
74
|
+
import { WriteBackCoordinator } from "../shared/workspace/writeback-coordinator.js";
|
|
75
|
+
import { isGitWorkTree } from "../shared/filereview/git-substrate.js";
|
|
76
|
+
import { fetchCaseArchive } from "../shared/eval-case/case-archive.js";
|
|
77
|
+
import { prepareEvalCase } from "../shared/eval-case/prepare-case.js";
|
|
78
|
+
import { chatAgentMockModel } from "../shared/eval-case/agent-mock.js";
|
|
79
|
+
import { formatTryStop } from "@stigmer/eval-runtime";
|
|
80
|
+
import { deriveCaptureMode, deriveCaptureSubstrate } from "../shared/filereview/capture.js";
|
|
81
|
+
import { acquireWorkspaceLock, WorkspaceLockCancelledError, WorkspaceLockTimeoutError, } from "../shared/workspace/workspace-lock.js";
|
|
82
|
+
import { LocalWorkspaceBackend } from "../shared/workspace/local-backend.js";
|
|
83
|
+
import { describeServerHome, DuplicateServerNameError, platformServerSlugsOf, resolveTurnServers, sameServerHome, } from "../shared/mcp-resolver.js";
|
|
84
|
+
import { resolveMcpTransportPosture } from "../shared/mcp-transport-guard.js";
|
|
85
|
+
import { callerIdentityValues, resolveCallerIdentity } from "../shared/caller-identity.js";
|
|
86
|
+
import { discoverChannelMessaging, synthesizeChannelAttachment } from "../shared/channel-attachment.js";
|
|
87
|
+
import { readChannelConversationId, synthesizeConversationAttachment } from "../shared/conversation-attachment.js";
|
|
88
|
+
import { synthesizeMemoryAttachment } from "../shared/memory-attachment.js";
|
|
89
|
+
import { injectSynthesizedAttachment } from "../shared/synthesized-attachment.js";
|
|
90
|
+
import { buildMcpApprovalDefault, deriveActiveLeases, NOTHING_LISTED } from "../shared/approval-policy.js";
|
|
91
|
+
import { listTurnTools } from "../shared/mcp-tool-listing.js";
|
|
92
|
+
import { ToolScope } from "../shared/tool-lists.js";
|
|
93
|
+
import { resolveAttachments } from "../shared/attachment-resolver.js";
|
|
94
|
+
import { resolveSkills } from "../shared/skill-resolver.js";
|
|
95
|
+
import { loadedVersionsOf } from "./loaded-versions.js";
|
|
96
|
+
import { mountPlugin, PluginMountError } from "../shared/plugin-mount.js";
|
|
97
|
+
import { isTerminalError } from "../shared/grpc-retry.js";
|
|
98
|
+
import { hookServerNamesOf } from "../shared/hooks/tool-view.js";
|
|
99
|
+
import { getPlatformDir } from "../shared/workspace/platform-dir.js";
|
|
100
|
+
import { HookFormat } from "@stigmer/apis/ai/stigmer/agentic/plugin/v1/hooks_pb";
|
|
101
|
+
import { join } from "node:path";
|
|
102
|
+
import { PLUGINS_SUBDIR } from "../shared/plugin-mount.js";
|
|
103
|
+
import { ensureStigmerSymlink, STIGMER_LOCAL_STATE_DIR } from "../shared/workspace/stigmer-link.js";
|
|
104
|
+
import { pluginAgentName } from "../shared/blueprint-resolver.js";
|
|
105
|
+
import { VisionBudget } from "../shared/attachment-vision.js";
|
|
106
|
+
import { getDefaultModel, getModelVisionCapability } from "../shared/model-registry.js";
|
|
107
|
+
import { pluginSubagentScope, savedSubagentScope, subagentModel } from "../shared/subagents.js";
|
|
108
|
+
import { applyApprovedWholeFileWrites } from "../shared/exact-apply.js";
|
|
109
|
+
import { resolveEffectiveServiceTier } from "../shared/service-tier.js";
|
|
110
|
+
import { resolveEffectiveThinkingMode } from "../shared/thinking-mode.js";
|
|
111
|
+
import { readContextBridge } from "../shared/context-bridge.js";
|
|
112
|
+
import { readSenderIdentity } from "../shared/sender-identity.js";
|
|
113
|
+
import { readSessionContext } from "../shared/session-context.js";
|
|
114
|
+
import { readDeclaredPreferences } from "../shared/declared-preferences.js";
|
|
115
|
+
import { sessionIdOf } from "../shared/execution-target.js";
|
|
116
|
+
import { readConversationCatchup } from "../shared/conversation-catchup.js";
|
|
117
|
+
import { selectRecalledFacts } from "../shared/memory-retrieval.js";
|
|
118
|
+
import { reconcileOwedUndos } from "./owed-undos.js";
|
|
119
|
+
// ---------------------------------------------------------------------------
|
|
120
|
+
// Pure helpers (exported for their tests and for the adapter kit)
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
122
|
+
/**
|
|
123
|
+
* Whether the engine already holds state for this execution, so this
|
|
124
|
+
* invocation resumes rather than begins. One function keyed on how the
|
|
125
|
+
* harness mints its state id:
|
|
126
|
+
*
|
|
127
|
+
* - `engine-minted` (Cursor: the agent id): the runtime knows nothing until
|
|
128
|
+
* the adapter binds an id, so a non-empty `threadId` IS the evidence.
|
|
129
|
+
* Correct today because a pure-reconcile turn does not advance `turnSeq`
|
|
130
|
+
* and the legacy positional wire shape yields 0, so `turnSeq` cannot be
|
|
131
|
+
* the signal.
|
|
132
|
+
* - `deterministic` (native: the runtime-minted thread id): the id exists
|
|
133
|
+
* on the FIRST turn too, so the evidence is the session's log: whether it
|
|
134
|
+
* holds an event the runner wrote from this run's engine
|
|
135
|
+
* ({@link runWroteEngineEvents}). Whether the execution already has
|
|
136
|
+
* committed history is the ONE signal that behaves identically across
|
|
137
|
+
* the engine's checkpointer backends: a durable saver (sqlite locally,
|
|
138
|
+
* http in cloud) keeps the checkpoint and resumes from it, while the
|
|
139
|
+
* test-only memory saver recreates it empty and replays from scratch —
|
|
140
|
+
* so the live checkpoint cannot be the signal (native's
|
|
141
|
+
* `shouldSeedFromPersistedTranscript`, retired with its orchestrator).
|
|
142
|
+
* Any event of the run cannot be it either: the server writes the run's
|
|
143
|
+
* `user.message` when it creates the run. A first run's engine has
|
|
144
|
+
* written nothing and starts from empty, as it always did.
|
|
145
|
+
*
|
|
146
|
+
* This is the runtime's own reading, for its phases (the seed, the
|
|
147
|
+
* exact-apply). An adapter that needs create-vs-resume for its ENGINE
|
|
148
|
+
* reads `input.threadId` itself — for an engine-minted harness that is the
|
|
149
|
+
* same bit, for a deterministic one the engine's checkpoint is the adapter's
|
|
150
|
+
* to consult — so the contract carries no flag with two meanings.
|
|
151
|
+
*/
|
|
152
|
+
export function isReinvocation(stateIdSource, input, runWroteEvents) {
|
|
153
|
+
switch (stateIdSource) {
|
|
154
|
+
case "engine-minted":
|
|
155
|
+
return input.threadId !== "";
|
|
156
|
+
case "deterministic":
|
|
157
|
+
return runWroteEvents;
|
|
158
|
+
default: {
|
|
159
|
+
const exhaustive = stateIdSource;
|
|
160
|
+
throw new Error(`isReinvocation: unknown state id source ${String(exhaustive)}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* The event types the runner writes from the rows its engine produced
|
|
166
|
+
* (`events/emitter.ts` `writeMessage`, `writeToolUse`): a message, a
|
|
167
|
+
* thinking, a tool use, a harness note. The other types a runner may write
|
|
168
|
+
* say nothing about the engine: `stigmer.memory.recalled` is written at the
|
|
169
|
+
* turn's first write whatever the engine did, and
|
|
170
|
+
* `stigmer.file_review.reconciled` at the turn's start, before any engine;
|
|
171
|
+
* the rest follow one of these.
|
|
172
|
+
*/
|
|
173
|
+
export const ENGINE_EVENT_TYPES = [
|
|
174
|
+
"agent.message",
|
|
175
|
+
"agent.thinking",
|
|
176
|
+
"agent.tool_use",
|
|
177
|
+
"agent.mcp_tool_use",
|
|
178
|
+
"stigmer.harness.note",
|
|
179
|
+
];
|
|
180
|
+
/**
|
|
181
|
+
* Whether the session's log holds an event an earlier invocation of this
|
|
182
|
+
* run wrote from its engine ({@link ENGINE_EVENT_TYPES}): one read of at
|
|
183
|
+
* most one event. Throws when the log cannot be read, as the turn's other
|
|
184
|
+
* control-plane reads do.
|
|
185
|
+
*/
|
|
186
|
+
export async function runWroteEngineEvents(client, sessionId, runId) {
|
|
187
|
+
return client.hasRunSessionEvent(sessionId, runId, ENGINE_EVENT_TYPES);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* The run's events, read from the session's log each time it is called
|
|
191
|
+
* (`TurnInput.readRunEvents`): what an adapter tells the turn's story from.
|
|
192
|
+
*/
|
|
193
|
+
export function runEventsReader(client, sessionId, runId) {
|
|
194
|
+
return () => client.listRunSessionEvents(sessionId, runId);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Carry the status's own outputs over on a resume (HITL approval,
|
|
198
|
+
* pause/resume, transient recovery): the artifacts and write-backs earlier
|
|
199
|
+
* invocations registered, and the streaming usage so far. They are the run's
|
|
200
|
+
* file outputs and cost, not its transcript, and the server takes each list
|
|
201
|
+
* a write carries as the whole list, so a resumed turn that publishes one
|
|
202
|
+
* artifact sends every earlier one too. The persisted protos are cloned so
|
|
203
|
+
* the input execution stays immutable. Nothing of the transcript is carried:
|
|
204
|
+
* the asks a resumed engine resumes onto come from the session's log
|
|
205
|
+
* (`transcript/resume-seed.ts`), and every other row is the invocation's own.
|
|
206
|
+
*/
|
|
207
|
+
export function seedStatusOutputs(status, execution) {
|
|
208
|
+
const persisted = execution.status;
|
|
209
|
+
if (!persisted)
|
|
210
|
+
return;
|
|
211
|
+
const seed = clone(RunStatusSchema, persisted);
|
|
212
|
+
status.artifacts.push(...seed.artifacts);
|
|
213
|
+
status.workspaceWriteBacks.push(...seed.workspaceWriteBacks);
|
|
214
|
+
if (seed.streamingUsage !== undefined)
|
|
215
|
+
status.streamingUsage = seed.streamingUsage;
|
|
216
|
+
}
|
|
217
|
+
/** The log types a reinvocation reads, once: the seed's and the answers'. */
|
|
218
|
+
export const REINVOCATION_EVENT_TYPES = [...new Set([...RESUME_SEED_EVENT_TYPES, ...APPROVAL_ANSWER_EVENT_TYPES])];
|
|
219
|
+
// ---------------------------------------------------------------------------
|
|
220
|
+
// The phases, in the order the turn runs them
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
/** Phase 1: hydrate the execution from the control plane. */
|
|
223
|
+
export async function fetchExecution(deps) {
|
|
224
|
+
deps.enterPhase("fetch_execution");
|
|
225
|
+
await deps.reportProgress("Fetching execution");
|
|
226
|
+
const execution = await deps.client.getExecution(deps.input.executionId);
|
|
227
|
+
const spec = execution.spec;
|
|
228
|
+
deps.timing.mark("fetch_execution");
|
|
229
|
+
return { execution, spec, sessionId: sessionIdOf(spec) };
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Phase 2: load the session and resolve the full agent blueprint: the agent
|
|
233
|
+
* and version the execution recorded at create, merged with the session's
|
|
234
|
+
* own tools.
|
|
235
|
+
*/
|
|
236
|
+
export async function resolveAgentBlueprint(deps, execution, sessionId) {
|
|
237
|
+
deps.enterPhase("resolve_blueprint");
|
|
238
|
+
await deps.reportProgress("Resolving agent blueprint");
|
|
239
|
+
const session = await deps.client.getSession(sessionId);
|
|
240
|
+
const blueprint = await resolveBlueprint(deps.client, session, execution.status, execution.metadata?.labels ?? {}, execution.spec?.excludedPluginIds);
|
|
241
|
+
deps.timing.mark("resolve_blueprint");
|
|
242
|
+
return { session, blueprint };
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Phase 2b: the run's values, fetched from their vaults now and grouped by
|
|
246
|
+
* declarer (`shared/run-values.ts`). A fetch refused for a reason the
|
|
247
|
+
* person fixes settles the turn with the server's message.
|
|
248
|
+
*/
|
|
249
|
+
export async function fetchValues(deps) {
|
|
250
|
+
deps.enterPhase("fetch_values");
|
|
251
|
+
await deps.reportProgress("Fetching values from vaults");
|
|
252
|
+
let values;
|
|
253
|
+
try {
|
|
254
|
+
values = await fetchTurnValues(deps.client, deps.input.executionId);
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
if (err instanceof RunValuesRefusedError) {
|
|
258
|
+
return { kind: "settled", settlement: { kind: "values-refused", message: err.message } };
|
|
259
|
+
}
|
|
260
|
+
throw err;
|
|
261
|
+
}
|
|
262
|
+
deps.timing.mark("fetch_values");
|
|
263
|
+
return { kind: "ready", values };
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Phase 2c, first half: provision the workspace (clone
|
|
267
|
+
* git repos / mount local paths) so the LOCAL agent operates on the actual
|
|
268
|
+
* repo, wire the git write-back coordinator, and decide the capture posture.
|
|
269
|
+
*
|
|
270
|
+
* Git provisioning is idempotent across multi-turn and HITL reinvocations.
|
|
271
|
+
* The write-back coordinator pushes the session's tree to the session branch
|
|
272
|
+
* (stigmer/<session-id>) and keeps one PR open; finalize runs at exactly two
|
|
273
|
+
* seams (a reconcile turn, after it put undone files back, and terminal
|
|
274
|
+
* completion), never mid-turn. Non-eligible workspaces (local paths, no
|
|
275
|
+
* credentials) make it a no-op coordinator, here `null`.
|
|
276
|
+
*
|
|
277
|
+
* File review is opt-in (`review`: the session's `file_review`, or a
|
|
278
|
+
* eval-run try). With it on, apply-then-review is the model: a git work
|
|
279
|
+
* tree captures per-file from the git diff at the turn boundary; a NON-git
|
|
280
|
+
* workspace captures every write via the path-scoped CAS substrate, which
|
|
281
|
+
* needs artifact storage to persist blobs, and falls back to the classic
|
|
282
|
+
* deny-gate without it. With it off, file edits flow and nothing is
|
|
283
|
+
* captured. `gitWorkspace` selects the substrate, `captureSubstrate` says
|
|
284
|
+
* whether one exists (the secret-path rule's input), `captureMode` whether
|
|
285
|
+
* capture runs.
|
|
286
|
+
*
|
|
287
|
+
* The change-set id is minted from the workflow-threaded turn index so it is
|
|
288
|
+
* stable across a Temporal retry (idempotent ledger authoring) and unique per
|
|
289
|
+
* turn; a "wasted" id on a turn that captures nothing is harmless.
|
|
290
|
+
*/
|
|
291
|
+
export async function provisionWorkspace(deps, args) {
|
|
292
|
+
deps.enterPhase("provision_workspace");
|
|
293
|
+
await deps.reportProgress("Provisioning workspace");
|
|
294
|
+
const provision = await provisionSessionWorkspace(deps.config, args.session, args.repositories, args.sessionId);
|
|
295
|
+
deps.timing.mark("provision_workspace");
|
|
296
|
+
const writeback = provision.provisionResults.length > 0
|
|
297
|
+
? new WriteBackCoordinator({
|
|
298
|
+
writeBacks: deps.transcript,
|
|
299
|
+
executionId: deps.input.executionId,
|
|
300
|
+
sessionId: args.sessionId,
|
|
301
|
+
repositories: args.repositories,
|
|
302
|
+
provisionResults: provision.provisionResults,
|
|
303
|
+
workspaceEntries: args.session.spec?.workspaceEntries ?? [],
|
|
304
|
+
workspaceBackend: provision.workspaceBackend,
|
|
305
|
+
})
|
|
306
|
+
: null;
|
|
307
|
+
const primaryDir = provision.workspaceDirs[0];
|
|
308
|
+
const gitWorkspace = primaryDir ? await isGitWorkTree(primaryDir) : false;
|
|
309
|
+
const captureSubstrate = deriveCaptureSubstrate(primaryDir, gitWorkspace, !!deps.artifactStorage);
|
|
310
|
+
const captureMode = deriveCaptureMode(primaryDir, gitWorkspace, !!deps.artifactStorage, args.review);
|
|
311
|
+
const changeSetId = `${deps.input.executionId}:${deps.input.turnSeq}`;
|
|
312
|
+
return {
|
|
313
|
+
workspace: {
|
|
314
|
+
dirs: provision.workspaceDirs,
|
|
315
|
+
primaryDir,
|
|
316
|
+
gitWorkspace,
|
|
317
|
+
captureSubstrate,
|
|
318
|
+
fileReview: args.review,
|
|
319
|
+
captureMode,
|
|
320
|
+
changeSetId,
|
|
321
|
+
provision,
|
|
322
|
+
},
|
|
323
|
+
writeback,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Whether a turn's file edits are offered for review: the session asked
|
|
328
|
+
* (`SessionSpec.file_review`, off unless set), or the run is an eval
|
|
329
|
+
* run's try, whose file graders read the captured sets whatever the switch says.
|
|
330
|
+
*/
|
|
331
|
+
export function fileReviewOn(session, spec) {
|
|
332
|
+
return (session.spec?.fileReview ?? false) || spec.evalCase !== undefined;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Phase 2c, second half: serialize this turn against
|
|
336
|
+
* every other execution sharing the primary working tree. Sessions declaring
|
|
337
|
+
* the same localPath (or the shared runner root) resolve to ONE directory,
|
|
338
|
+
* and an unserialized concurrent write lands inside this turn's
|
|
339
|
+
* baseline→candidate window, misattributing another session's file to this
|
|
340
|
+
* turn's review. Acquired before ANY tree mutation (the owed undos, gate
|
|
341
|
+
* install, agent writes, capture); while another turn holds the lock this
|
|
342
|
+
* surfaces a visible waiting state and heartbeats; a cancel aborts the wait
|
|
343
|
+
* at once.
|
|
344
|
+
*
|
|
345
|
+
* Its own phase so the release handle reaches the caller the instant the
|
|
346
|
+
* lock exists: nothing runs between acquisition and hand-over, so nothing
|
|
347
|
+
* can throw and leave a held lock the caller's `finally` never sees.
|
|
348
|
+
*/
|
|
349
|
+
export async function acquireWorkspaceTurnLock(deps, primaryDir) {
|
|
350
|
+
deps.enterPhase("acquire_workspace_lock");
|
|
351
|
+
let release;
|
|
352
|
+
let waited = false;
|
|
353
|
+
if (primaryDir) {
|
|
354
|
+
try {
|
|
355
|
+
release = await acquireWorkspaceLock(primaryDir, {
|
|
356
|
+
onWaiting: () => {
|
|
357
|
+
waited = true;
|
|
358
|
+
return deps.reportProgress("Waiting for workspace — in use by another session");
|
|
359
|
+
},
|
|
360
|
+
heartbeat: deps.heartbeat,
|
|
361
|
+
signal: deps.signal,
|
|
362
|
+
timeoutMs: deps.config.workspaceLockTimeoutMs,
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
catch (lockErr) {
|
|
366
|
+
if (lockErr instanceof WorkspaceLockCancelledError) {
|
|
367
|
+
throw new CancelledFailure("Activity cancelled while waiting for the workspace lock");
|
|
368
|
+
}
|
|
369
|
+
if (lockErr instanceof WorkspaceLockTimeoutError) {
|
|
370
|
+
return { kind: "settled", settlement: { kind: "workspace-lock-timeout", error: lockErr } };
|
|
371
|
+
}
|
|
372
|
+
throw lockErr;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
deps.timing.mark("acquire_workspace_lock");
|
|
376
|
+
return { kind: "acquired", release, waited };
|
|
377
|
+
}
|
|
378
|
+
/** The phases the server holds as finished: it takes no more status and no more events of such a run. */
|
|
379
|
+
const FINISHED_PHASES = new Set([
|
|
380
|
+
RunPhase.RUN_COMPLETED,
|
|
381
|
+
RunPhase.RUN_FAILED,
|
|
382
|
+
RunPhase.RUN_CANCELLED,
|
|
383
|
+
RunPhase.RUN_TERMINATED,
|
|
384
|
+
]);
|
|
385
|
+
/**
|
|
386
|
+
* Phase 2c, after the lock: a turn that waited for its workspace reads its
|
|
387
|
+
* run again, and ends with the run when it finished meanwhile.
|
|
388
|
+
*
|
|
389
|
+
* The turn holding the workspace can be an earlier invocation of the same
|
|
390
|
+
* run. A pause cancels the running activity, but the cancellation reaches
|
|
391
|
+
* the runner only at its next heartbeat, so the paused invocation can
|
|
392
|
+
* finish its turn, persist the run finished and only then let the resumed
|
|
393
|
+
* one have the tree. The server takes nothing more of a finished run (no
|
|
394
|
+
* status, no event), so an invocation that ran on would spend a model call
|
|
395
|
+
* whose answer the log refuses, and leave the engine's checkpoint holding a
|
|
396
|
+
* reply the session never shows. A turn that did not wait read its run
|
|
397
|
+
* moments ago (phase 1), so only a wait costs the second read.
|
|
398
|
+
*/
|
|
399
|
+
export async function runFinishedWhileWaiting(deps, waited) {
|
|
400
|
+
if (!waited)
|
|
401
|
+
return undefined;
|
|
402
|
+
const status = (await deps.client.getExecution(deps.input.executionId)).status;
|
|
403
|
+
if (status === undefined || !FINISHED_PHASES.has(status.phase))
|
|
404
|
+
return undefined;
|
|
405
|
+
return { kind: "run-finished", status };
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Phase 2d: a eval-run try's own setup (`shared/eval-case/
|
|
409
|
+
* prepare-case.ts`), after the workspace lock because the scaffold mutates
|
|
410
|
+
* the tree. The scaffold may make the workspace a git repository, so the
|
|
411
|
+
* capture substrate is derived again; the capture baseline is pinned after
|
|
412
|
+
* every phase (`run-turn.ts`), so what the scaffold made is baseline, never
|
|
413
|
+
* the try's change. The case's variables join the agent's run values, the
|
|
414
|
+
* one path to the native shell and the plugin's hooks.
|
|
415
|
+
*/
|
|
416
|
+
export async function prepareEvalCasePhase(deps, args) {
|
|
417
|
+
const context = args.spec.evalCase;
|
|
418
|
+
if (context === undefined)
|
|
419
|
+
return { kind: "ready", prepared: undefined };
|
|
420
|
+
deps.enterPhase("prepare_eval_case");
|
|
421
|
+
await deps.reportProgress("Preparing the eval case");
|
|
422
|
+
const archive = await fetchCaseArchive(deps.client, context);
|
|
423
|
+
const outcome = await prepareEvalCase({ context, archive, sessionId: args.sessionId, primaryDir: args.workspace.primaryDir });
|
|
424
|
+
deps.timing.mark("prepare_eval_case");
|
|
425
|
+
if (outcome.kind === "scaffold-failed") {
|
|
426
|
+
return {
|
|
427
|
+
kind: "settled",
|
|
428
|
+
settlement: { kind: "eval-scaffold-failed", message: formatTryStop({ kind: "scaffold-failed", detail: outcome.detail }) },
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
const { primaryDir, fileReview } = args.workspace;
|
|
432
|
+
const gitWorkspace = primaryDir ? await isGitWorkTree(primaryDir) : false;
|
|
433
|
+
const hasStorage = !!deps.artifactStorage;
|
|
434
|
+
return {
|
|
435
|
+
kind: "ready",
|
|
436
|
+
prepared: {
|
|
437
|
+
case: outcome.prepared,
|
|
438
|
+
workspace: {
|
|
439
|
+
...args.workspace,
|
|
440
|
+
gitWorkspace,
|
|
441
|
+
captureSubstrate: deriveCaptureSubstrate(primaryDir, gitWorkspace, hasStorage),
|
|
442
|
+
captureMode: deriveCaptureMode(primaryDir, gitWorkspace, hasStorage, fileReview),
|
|
443
|
+
},
|
|
444
|
+
values: { ...args.values, agent: { ...args.values.agent, ...outcome.prepared.env } },
|
|
445
|
+
archive,
|
|
446
|
+
},
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Phase 4c: a eval-run try's MCP stand-ins (`shared/eval-case/
|
|
451
|
+
* mock-endpoint.ts`). Each replaces the plugin's own server of the same
|
|
452
|
+
* name in the turn's list, so the real one is never started; a stand-in
|
|
453
|
+
* the turn's lists exclude whole is left out like any server (#2106). The
|
|
454
|
+
* endpoint goes on the frame at once, so the turn's `finally` closes it
|
|
455
|
+
* whatever happens next. Loaded only for a try with mocks: the MCP SDK's
|
|
456
|
+
* HTTP server imports `node:http2`, which must stay out of the pre-boot
|
|
457
|
+
* module graph (`src/__tests__/harness-boot-order.test.ts`).
|
|
458
|
+
*/
|
|
459
|
+
export async function startEvalMocks(deps, args) {
|
|
460
|
+
const context = args.spec.evalCase;
|
|
461
|
+
if (context === undefined || context.mocks.length === 0)
|
|
462
|
+
return args.mcp;
|
|
463
|
+
deps.enterPhase("start_eval_mocks");
|
|
464
|
+
const { startMockEndpoint } = await import("../shared/eval-case/mock-endpoint.js");
|
|
465
|
+
const endpoint = await startMockEndpoint({
|
|
466
|
+
context,
|
|
467
|
+
archive: args.archive,
|
|
468
|
+
agentModel: chatAgentMockModel({ modelName: context.agentMockModel, config: deps.config, executionId: deps.input.executionId }),
|
|
469
|
+
});
|
|
470
|
+
if (endpoint === undefined)
|
|
471
|
+
return args.mcp;
|
|
472
|
+
args.frame.evalMocks = endpoint;
|
|
473
|
+
const standIns = callableServers(endpoint.servers, args.mcp.toolScope, args.mcp.platformServerSlugs);
|
|
474
|
+
const replaced = new Set(endpoint.servers.map((server) => server.slug));
|
|
475
|
+
const kept = new Set(standIns.map((server) => server.slug));
|
|
476
|
+
// An engine that does not read its tools' marks scopes a server's tools
|
|
477
|
+
// by the listing: a stand-in lists its mocked tools, none destructive.
|
|
478
|
+
const { listing } = args.mcp;
|
|
479
|
+
return {
|
|
480
|
+
...args.mcp,
|
|
481
|
+
servers: [...args.mcp.servers.filter((server) => !replaced.has(server.slug)), ...standIns],
|
|
482
|
+
listing: listing === undefined
|
|
483
|
+
? undefined
|
|
484
|
+
: {
|
|
485
|
+
listed: [
|
|
486
|
+
...listing.listed.filter(({ server }) => !replaced.has(server)),
|
|
487
|
+
...endpoint.listed.filter(({ server }) => kept.has(server)),
|
|
488
|
+
],
|
|
489
|
+
destructive: listing.destructive.filter(({ server }) => !replaced.has(server)),
|
|
490
|
+
unlisted: listing.unlisted.filter((server) => !replaced.has(server)),
|
|
491
|
+
},
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Phase 3: what the previous invocation left.
|
|
496
|
+
*
|
|
497
|
+
* Whether this invocation resumes is read first ({@link isReinvocation},
|
|
498
|
+
* with the log's {@link runWroteEngineEvents}). On a reinvocation the run's
|
|
499
|
+
* events are read once ({@link REINVOCATION_EVENT_TYPES}) and the asks the
|
|
500
|
+
* engine resumes onto are seeded through the builder (`transcript/resume-seed.ts`),
|
|
501
|
+
* before any harness runs; the status's own outputs are carried over
|
|
502
|
+
* ({@link seedStatusOutputs}). Tool approvals (shell / MCP / a gated write)
|
|
503
|
+
* resolve from the answers the server appended to the session's log, read
|
|
504
|
+
* through the one door, `approval-answers.ts` `approvalAnswersOf`, and the
|
|
505
|
+
* seed then copies each call's answer from the log onto its row
|
|
506
|
+
* (`copyAnswersOntoRows`): every later reader of a row's `approval_action`
|
|
507
|
+
* reads the log's answer.
|
|
508
|
+
*
|
|
509
|
+
* Any answer runs the agent: an
|
|
510
|
+
* allowed call proceeds; a denied one is refused with the reason given, and
|
|
511
|
+
* the run continues without it (the row is settled SKIPPED after the turn,
|
|
512
|
+
* `approval-decisions.ts`). Until #1096 a REJECT failed the turn here with
|
|
513
|
+
* its own FAILED arm, Cursor's legacy; the proto (`APPROVAL_ACTION_REJECT`:
|
|
514
|
+
* "does NOT fail the run"), the conformance suite and the native harness
|
|
515
|
+
* said otherwise since stigmer#197, and the runtime agrees.
|
|
516
|
+
*
|
|
517
|
+
* File review is not here: a turn never waits on it, and the undos a person
|
|
518
|
+
* made after a turn are done at every turn's start, under the lock
|
|
519
|
+
* (`owed-undos.ts`). The step name is the wire's and stays.
|
|
520
|
+
*/
|
|
521
|
+
export async function reconcileReinvocation(deps, args) {
|
|
522
|
+
deps.enterPhase("reconcile_reinvocation");
|
|
523
|
+
const runId = deps.input.executionId;
|
|
524
|
+
const runWroteEvents = await runWroteEngineEvents(deps.client, args.sessionId, runId);
|
|
525
|
+
const reinvoked = isReinvocation(args.stateIdSource, deps.input, runWroteEvents);
|
|
526
|
+
if (!reinvoked) {
|
|
527
|
+
return {
|
|
528
|
+
isReinvocation: false,
|
|
529
|
+
runWroteEvents,
|
|
530
|
+
approvalDecisions: new Map(),
|
|
531
|
+
approvalDenyMessages: new Map(),
|
|
532
|
+
approvalAsks: new Map(),
|
|
533
|
+
grants: new Map(),
|
|
534
|
+
answerText: undefined,
|
|
535
|
+
recalledMemoriesReport: undefined,
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
seedStatusOutputs(deps.status, args.execution);
|
|
539
|
+
const events = await deps.client.listRunSessionEvents(args.sessionId, runId, REINVOCATION_EVENT_TYPES);
|
|
540
|
+
const seed = resumeSeedOf(runId, events);
|
|
541
|
+
deps.transcript.seed(seed.rows);
|
|
542
|
+
const answers = approvalAnswersOf(runId, deps.rows, events);
|
|
543
|
+
copyAnswersOntoRows(runId, deps.rows, answers);
|
|
544
|
+
return {
|
|
545
|
+
isReinvocation: true,
|
|
546
|
+
runWroteEvents,
|
|
547
|
+
approvalDecisions: answers.decisions,
|
|
548
|
+
approvalDenyMessages: answers.denyMessages,
|
|
549
|
+
approvalAsks: answers.asks,
|
|
550
|
+
grants: answers.grants,
|
|
551
|
+
answerText: seed.answerText,
|
|
552
|
+
recalledMemoriesReport: seed.recalledMemoriesReport,
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Phase 2c, third half: the undos still owed to earlier turns, done under
|
|
557
|
+
* the lock before anything else touches the tree (`owed-undos.ts`), on every
|
|
558
|
+
* turn: a message turn, a reinvocation, a reconcile turn.
|
|
559
|
+
*/
|
|
560
|
+
export async function reconcileOwedUndosPhase(deps, args) {
|
|
561
|
+
deps.enterPhase("reconcile_owed_undos");
|
|
562
|
+
const outcomes = await reconcileOwedUndos({
|
|
563
|
+
client: deps.client,
|
|
564
|
+
runId: deps.input.executionId,
|
|
565
|
+
sessionId: args.sessionId,
|
|
566
|
+
workspace: args.workspace,
|
|
567
|
+
artifactStorage: deps.artifactStorage,
|
|
568
|
+
reconcileTurn: args.reconcileTurn,
|
|
569
|
+
recordReconciled: deps.recordReconciled,
|
|
570
|
+
});
|
|
571
|
+
deps.timing.mark("reconcile_owed_undos");
|
|
572
|
+
return outcomes;
|
|
573
|
+
}
|
|
574
|
+
/** A reconcile turn's settlement from what its start put back: COMPLETED, its rows naming what was undone or what failed. */
|
|
575
|
+
export function reconcileTurnSettlement(outcomes) {
|
|
576
|
+
const failures = outcomes.filter((outcome) => outcome.failure !== "");
|
|
577
|
+
return {
|
|
578
|
+
kind: "file-review-resolved",
|
|
579
|
+
failed: failures.length > 0,
|
|
580
|
+
failureDetail: failures.map((outcome) => outcome.failureDetail).join("; "),
|
|
581
|
+
discardedPaths: outcomes.flatMap((outcome) => outcome.undonePaths),
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
/** The transcript row a turn without the platform's own MCP servers carries (#2062). */
|
|
585
|
+
export const PLATFORM_TOOLS_OFF_NOTICE = "The platform's own tools (memory, channel messaging and the conversation tools) are off for this turn: no credential scoped to this run could be had.";
|
|
586
|
+
/**
|
|
587
|
+
* Phases 4 to 4b: the tool surface.
|
|
588
|
+
*
|
|
589
|
+
* The MCP-bound env map (and ONLY it, never the agent process env) carries
|
|
590
|
+
* the reserved caller-identity keys, so a server that declares them in
|
|
591
|
+
* spec.env can template the platform-verified caller into its headers;
|
|
592
|
+
* filterEnvToDeclaredKeys keeps every other server blind. Every server is a
|
|
593
|
+
* plugin's (the turn's plugins, shared/mcp-resolver.ts), named as Claude
|
|
594
|
+
* Code names it. Resolution fills a missing STIGMER_SERVER_ADDRESS per
|
|
595
|
+
* server from `config`'s endpoints (shared/platform-server-address.ts). The
|
|
596
|
+
* resolved list then gains three synthesized attachments, deliberately
|
|
597
|
+
* AFTER resolve: an attachment is the platform's own server, never listed,
|
|
598
|
+
* and its tools never ask:
|
|
599
|
+
*
|
|
600
|
+
* - channel messaging: the discovery read IS the attachment
|
|
601
|
+
* decision, and every failure mode degrades to honest absence;
|
|
602
|
+
* - conversation participation: the
|
|
603
|
+
* channel-id session label IS the decision, a free local read;
|
|
604
|
+
* - memory capture: the recall snapshot's enabled bit IS the
|
|
605
|
+
* decision, server-stamped at execution create.
|
|
606
|
+
*
|
|
607
|
+
* Their credential story: the exchanged scoped runner token authenticates
|
|
608
|
+
* the discovery reads per call and goes into the attachments. The runner's
|
|
609
|
+
* own key never does (#2062): without a scoped token, a credential already
|
|
610
|
+
* scoped below the runner (a cloud sandbox's session token) is used, a
|
|
611
|
+
* runner holding none runs them without one, and otherwise the turn runs
|
|
612
|
+
* without the platform's own servers and says so (\`PLATFORM_TOOLS_OFF_NOTICE\`).
|
|
613
|
+
* The exchange is opportunistic, so a failed one never kills the run,
|
|
614
|
+
* unlike the env read, where secrets are load-bearing.
|
|
615
|
+
*
|
|
616
|
+
* The approval default's MCP half is built last (which tools their servers
|
|
617
|
+
* mark destructive, read live), with two bypasses shared with the native
|
|
618
|
+
* harness (`shared/approval-policy.ts` `ActiveLeases`): the pre-armed
|
|
619
|
+
* spec.auto_approve_all is the one whole-run global bypass; an interactive
|
|
620
|
+
* APPROVE_ALL grants a run-lifetime lease scoped to that action's class,
|
|
621
|
+
* read from the run's `stigmer.permission.grant` events (`grants`, the
|
|
622
|
+
* reinvocation phase's read; none on a fresh turn). An
|
|
623
|
+
* engine that loads the tools itself reads their marks from what it loaded
|
|
624
|
+
* (`capabilities.readsToolMarks`), so the default carries only the leases
|
|
625
|
+
* here and the engine completes it; for any other engine each plugin server
|
|
626
|
+
* is listed now, in parallel (shared/mcp-tool-listing.ts), and a server
|
|
627
|
+
* whose listing fails asks before every one of its tools. The
|
|
628
|
+
* agent's tool scope is resolved here too, from its two lists, so both
|
|
629
|
+
* harnesses enforce one reading of them. The harness projects its SDK config
|
|
630
|
+
* from `servers` after this returns, exactly once, so every mutation is
|
|
631
|
+
* visible by construction.
|
|
632
|
+
*/
|
|
633
|
+
export async function resolveMcpServersAndPolicies(deps, args) {
|
|
634
|
+
const { client, config } = deps;
|
|
635
|
+
const { executionId } = deps.input;
|
|
636
|
+
const { execution, session, sessionId, blueprint, values } = args;
|
|
637
|
+
deps.enterPhase("resolve_mcp_servers");
|
|
638
|
+
await deps.reportProgress("Resolving MCP servers");
|
|
639
|
+
const transportPosture = resolveMcpTransportPosture(config.mode);
|
|
640
|
+
const platformValues = turnPlatformValues(blueprint, session, sessionId);
|
|
641
|
+
let servers = resolveTurnServers({
|
|
642
|
+
agent: blueprint.agent === undefined
|
|
643
|
+
? undefined
|
|
644
|
+
: { agentId: blueprint.agent.id, subagent: null, servers: blueprint.agent.spec.mcpServers },
|
|
645
|
+
plugins: blueprint.plugins,
|
|
646
|
+
tools: values.tools,
|
|
647
|
+
platformValues,
|
|
648
|
+
transportPosture,
|
|
649
|
+
platformEndpoints: config,
|
|
650
|
+
}).resolvedServers;
|
|
651
|
+
deps.timing.mark("resolve_mcp_servers");
|
|
652
|
+
// The turn's tool scope (the agent's lists, then this turn's over them,
|
|
653
|
+
// which can only narrow), and the servers it leaves standing, before
|
|
654
|
+
// anything connects, the tool listing included: a server the lists
|
|
655
|
+
// exclude whole is never started or dialled, since no tool of it could be
|
|
656
|
+
// called (#2106). A eval-run try's mocked servers are left out too:
|
|
657
|
+
// their stand-ins take their names (`startEvalMocks`), and the real ones
|
|
658
|
+
// must never start. The platform's own servers, added below, are always
|
|
659
|
+
// kept.
|
|
660
|
+
const toolScope = mainToolScope(blueprint, execution.spec);
|
|
661
|
+
const standIns = new Set((execution.spec?.evalCase?.mocks ?? []).map((mock) => mock.segment));
|
|
662
|
+
const resolved = servers;
|
|
663
|
+
servers = callableServers(resolved, toolScope, new Set()).filter((server) => !standIns.has(server.slug));
|
|
664
|
+
if (servers.length < resolved.length) {
|
|
665
|
+
const left = resolved.filter((server) => !servers.includes(server)).map((server) => server.slug);
|
|
666
|
+
console.log(`[turn-context] execution=${executionId}: not connecting ${left.join(", ")}: excluded whole by the turn's tool lists, or answered by a stand-in`);
|
|
667
|
+
}
|
|
668
|
+
// Phase 4a: the plugin servers' tools, listed now for an engine that does
|
|
669
|
+
// not load them itself.
|
|
670
|
+
let listing;
|
|
671
|
+
if (!args.readsToolMarks && servers.length > 0) {
|
|
672
|
+
await deps.reportProgress("Listing MCP tools");
|
|
673
|
+
listing = await listTurnTools(servers);
|
|
674
|
+
deps.timing.mark("list_mcp_tools");
|
|
675
|
+
}
|
|
676
|
+
let exchangedRunnerToken;
|
|
677
|
+
try {
|
|
678
|
+
exchangedRunnerToken =
|
|
679
|
+
await client.acquireScopedRunnerToken({ agentExecutionId: executionId });
|
|
680
|
+
}
|
|
681
|
+
catch (err) {
|
|
682
|
+
console.warn("[turn-context] Scoped-token exchange failed for attachment/discovery " +
|
|
683
|
+
`reads; the platform's own MCP servers use a credential scoped below the runner, or are off for this turn: ${err instanceof Error ? err.message : err}`);
|
|
684
|
+
}
|
|
685
|
+
// The platform's own servers run on the agent's side of the turn, so they
|
|
686
|
+
// never carry the runner's own key (#2062): a credential scoped to this
|
|
687
|
+
// run when there is one; else an ambient credential already scoped below
|
|
688
|
+
// the runner, a cloud sandbox's session token, until the cloud mints run
|
|
689
|
+
// credentials (#2080); a runner holding no credential (a trusted-local
|
|
690
|
+
// server) gives them none, as before; and a runner whose own key could
|
|
691
|
+
// not be exchanged runs the turn without them, and says so.
|
|
692
|
+
const attachmentCredential = exchangedRunnerToken ??
|
|
693
|
+
scopedRunnerCredential(config.stigmerRunnerTokenRef?.current ?? config.stigmerTokenRef.current) ??
|
|
694
|
+
(config.stigmerTokenRef.current ? undefined : null);
|
|
695
|
+
if (attachmentCredential === undefined) {
|
|
696
|
+
console.warn(`[turn-context] execution=${executionId}: no credential scoped to this run; the platform's own MCP servers are off for this turn`);
|
|
697
|
+
deps.transcript.apply({ kind: "system_note", text: PLATFORM_TOOLS_OFF_NOTICE });
|
|
698
|
+
}
|
|
699
|
+
const attachmentEndpoints = {
|
|
700
|
+
bridgeEndpoint: config.mcpBridgeEndpoint,
|
|
701
|
+
credential: attachmentCredential ?? null,
|
|
702
|
+
backendEndpoint: config.stigmerBackendEndpoint,
|
|
703
|
+
};
|
|
704
|
+
const attachmentsOn = attachmentCredential !== undefined;
|
|
705
|
+
// Phase 4a2: the channel messaging attachment.
|
|
706
|
+
const channelMessaging = await discoverChannelMessaging(client, exchangedRunnerToken);
|
|
707
|
+
if (attachmentsOn && channelMessaging.length > 0) {
|
|
708
|
+
const attachment = synthesizeChannelAttachment(channelMessaging, attachmentEndpoints);
|
|
709
|
+
if (attachment) {
|
|
710
|
+
servers = injectSynthesizedAttachment(servers, attachment, "channel messaging");
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
// Phase 4a4: the conversation participation attachment. HTTP-only:
|
|
714
|
+
// synthesize answers undefined with no bridge endpoint by design.
|
|
715
|
+
const conversationAttachment = attachmentsOn
|
|
716
|
+
? synthesizeConversationAttachment(readChannelConversationId(session.metadata?.labels), attachmentEndpoints)
|
|
717
|
+
: undefined;
|
|
718
|
+
if (conversationAttachment) {
|
|
719
|
+
servers = injectSynthesizedAttachment(servers, conversationAttachment, "conversation participation");
|
|
720
|
+
}
|
|
721
|
+
// Phase 4a5: the memory capture attachment. The capture context is
|
|
722
|
+
// attribution the server verifies or trusts per edition; the subject is
|
|
723
|
+
// never threaded, it derives from the credential.
|
|
724
|
+
const memoryAttachment = attachmentsOn && synthesizeMemoryAttachment(execution.status?.recalledMemories, {
|
|
725
|
+
org: session.metadata?.org ?? "",
|
|
726
|
+
// Provenance, not scope: empty for the built-in assistant, and the
|
|
727
|
+
// carrier omits an empty field (memory-attachment.ts).
|
|
728
|
+
agentId: blueprint.agent?.id ?? "",
|
|
729
|
+
sessionId,
|
|
730
|
+
agentExecutionId: executionId,
|
|
731
|
+
}, attachmentEndpoints);
|
|
732
|
+
if (memoryAttachment) {
|
|
733
|
+
servers = injectSynthesizedAttachment(servers, memoryAttachment, "memory capture");
|
|
734
|
+
}
|
|
735
|
+
// Phase 4b: the approval default's MCP half, over the servers the turn
|
|
736
|
+
// connects.
|
|
737
|
+
const leases = deriveActiveLeases(args.grants.values(), execution.spec?.autoApproveAll ?? false);
|
|
738
|
+
const mcpDefault = buildMcpApprovalDefault(listing ?? NOTHING_LISTED, leases);
|
|
739
|
+
// The platform's own servers, read from the homes the attachments carry
|
|
740
|
+
// once every one is injected: one truth for hiding them from hooks,
|
|
741
|
+
// keeping them outside the tool lists and marking their tools.
|
|
742
|
+
const platformServerSlugs = platformServerSlugsOf(servers);
|
|
743
|
+
return { servers, channelMessaging, leases, mcpDefault, listing, platformServerSlugs, toolScope };
|
|
744
|
+
}
|
|
745
|
+
/** The caller-identity keys every plugin server of the turn may template (the main agent's and each subagent's). */
|
|
746
|
+
function turnPlatformValues(blueprint, session, sessionId) {
|
|
747
|
+
return callerIdentityValues(resolveCallerIdentity(blueprint.sessionSpec.metadata, session.status?.audit?.specAudit?.createdBy), sessionId);
|
|
748
|
+
}
|
|
749
|
+
/**
|
|
750
|
+
* The servers a turn connects: every one whose tools the scope can reach at
|
|
751
|
+
* all (`ToolScope.allowsMcpFamily`), and the platform's own. A server
|
|
752
|
+
* excluded tool by tool still connects, since its other tools may remain.
|
|
753
|
+
*/
|
|
754
|
+
export function callableServers(servers, toolScope, platformServerSlugs) {
|
|
755
|
+
return servers.filter((server) => platformServerSlugs.has(server.slug) || toolScope.allowsMcpFamily(server.slug));
|
|
756
|
+
}
|
|
757
|
+
/**
|
|
758
|
+
* The main agent's tool scope for one turn: the agent's two lists, then the
|
|
759
|
+
* turn's own (`RunSpec.tools`, `RunSpec.disallowed_tools`) as one more layer,
|
|
760
|
+
* so a turn narrows its agent's tools (or the built-in assistant's, which has
|
|
761
|
+
* no lists) and never widens them (`shared/tool-lists.ts`). Unrestricted
|
|
762
|
+
* when neither carries a list.
|
|
763
|
+
*/
|
|
764
|
+
export function mainToolScope(blueprint, spec) {
|
|
765
|
+
const agentSpec = blueprint.agent?.spec;
|
|
766
|
+
return ToolScope.ofMain([
|
|
767
|
+
...(agentSpec ? [{ owner: "The agent", lists: { tools: agentSpec.tools, disallowedTools: agentSpec.disallowedTools } }] : []),
|
|
768
|
+
{ owner: "The turn", lists: { tools: spec?.tools ?? [], disallowedTools: spec?.disallowedTools ?? [] } },
|
|
769
|
+
]);
|
|
770
|
+
}
|
|
771
|
+
/**
|
|
772
|
+
* Phase 5 (between the tool surface and the attachments): mount the skills
|
|
773
|
+
* under the session's platform dir, reachable from the workspace through its
|
|
774
|
+
* `.stigmer` link, and return what a prompt renders, per owner
|
|
775
|
+
* (`shared/skill-resolver.ts`).
|
|
776
|
+
* Reads the control plane, which is why it is the runtime's and not a
|
|
777
|
+
* harness's; each harness places the returned metadata in its own prompt
|
|
778
|
+
* shapes — the root's in its system prompt, a sub-agent's in that
|
|
779
|
+
* sub-agent's, client-free.
|
|
780
|
+
*
|
|
781
|
+
* Each plugin of the turn is mounted once (shared/plugin-mount.ts, its
|
|
782
|
+
* verified archive), and its skills are rendered from the mounted tree as
|
|
783
|
+
* `<plugin>:<skill>`, never copied: the root gets every plugin's skills,
|
|
784
|
+
* and a plugin's agent (`<plugin>:<agent>`) the ones its `skills:` names. A
|
|
785
|
+
* plugin that cannot be mounted contributes no skills, warned, as a failed
|
|
786
|
+
* skill does.
|
|
787
|
+
*
|
|
788
|
+
* The root's refs are the blueprint's merged set (agent plus session). A
|
|
789
|
+
* ref that fails resolves to nothing, warned and never thrown, as the
|
|
790
|
+
* root's always did. A plugin subagent's skills are mapped only for a
|
|
791
|
+
* harness whose `capabilities.subAgents` is true: the blueprint's plugin
|
|
792
|
+
* subagents are that harness's to compile, so their skills are its to
|
|
793
|
+
* render. A saved subagent's skills are its own context's
|
|
794
|
+
* ({@link resolveSubagents}). One progress label for the whole phase, as
|
|
795
|
+
* before.
|
|
796
|
+
*
|
|
797
|
+
* A scope that denies `Skill` hides skills (`ToolScope.hidesSkills`): the
|
|
798
|
+
* root's when the main scope denies it, a plugin subagent's when its own
|
|
799
|
+
* lists narrowed from the main scope do. A hidden owner's skills are
|
|
800
|
+
* neither fetched nor mounted, so no prompt lists them; the harness's
|
|
801
|
+
* confined read refuses the skill files an earlier turn mounted.
|
|
802
|
+
*
|
|
803
|
+
* The `.stigmer` link this and the attachment phase create is removed in
|
|
804
|
+
* the runtime's finally, after the harness's own teardown. Until #1096 the
|
|
805
|
+
* native orchestrator fetched and mounted sub-agent skills itself
|
|
806
|
+
* (`subagent-transformer.ts` with a client); this phase is where that read
|
|
807
|
+
* lives now.
|
|
808
|
+
*
|
|
809
|
+
* Beside the skills it returns `loaded`: the root's mounted skills by id at
|
|
810
|
+
* their version hash, for the run's record of what it loaded
|
|
811
|
+
* (`loaded-versions.ts`). A plugin's skills are not listed; the plugin's
|
|
812
|
+
* digest names them.
|
|
813
|
+
*/
|
|
814
|
+
export async function mountSkills(deps, args) {
|
|
815
|
+
deps.enterPhase("resolve_skills");
|
|
816
|
+
await deps.reportProgress("Resolving skills");
|
|
817
|
+
const options = { sessionId: args.sessionId, primaryWorkspaceDir: args.primaryDir };
|
|
818
|
+
const { toolScope } = args;
|
|
819
|
+
if (toolScope.hidesSkills) {
|
|
820
|
+
console.log(`[resolveSkills] execution=${deps.input.executionId}: the tool lists deny Skill; no skills this turn`);
|
|
821
|
+
}
|
|
822
|
+
const resolved = toolScope.hidesSkills ? [] : await resolveSkills(deps.client, args.blueprint.mergedSkillRefs, options);
|
|
823
|
+
const root = resolved.map((skill) => skill.metadata);
|
|
824
|
+
const bySubAgent = new Map();
|
|
825
|
+
for (const plugin of args.blueprint.plugins) {
|
|
826
|
+
// The same rule for a plugin's skills: the root lists them unless the
|
|
827
|
+
// main scope hides skills, and a plugin agent its own unless its lists,
|
|
828
|
+
// narrowed from the main scope, do.
|
|
829
|
+
const pluginName = plugin.metadata?.name ?? "";
|
|
830
|
+
const agents = args.subAgents
|
|
831
|
+
? (plugin.status?.agents ?? []).filter((agent) => agent.skills.length > 0 &&
|
|
832
|
+
!pluginSubagentScope(toolScope, { name: pluginAgentName(pluginName, agent.name), tools: agent.tools, disallowedTools: agent.disallowedTools }).hidesSkills)
|
|
833
|
+
: [];
|
|
834
|
+
if (toolScope.hidesSkills && agents.length === 0)
|
|
835
|
+
continue;
|
|
836
|
+
const skills = await mountPluginSkills(deps, plugin, args.sessionId, args.primaryDir);
|
|
837
|
+
if (!toolScope.hidesSkills)
|
|
838
|
+
root.push(...skills.values());
|
|
839
|
+
for (const agent of agents) {
|
|
840
|
+
const own = agent.skills.flatMap((name) => skills.get(name) ?? []);
|
|
841
|
+
if (own.length > 0)
|
|
842
|
+
bySubAgent.set(pluginAgentName(pluginName, agent.name), own);
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
deps.timing.mark("resolve_skills");
|
|
846
|
+
return { skills: { root, bySubAgent }, loaded: resolved.map((skill) => skill.loaded) };
|
|
847
|
+
}
|
|
848
|
+
/**
|
|
849
|
+
* A plugin's skills by their name in the plugin, as a prompt renders them:
|
|
850
|
+
* `<plugin>:<skill>`, with the path of the skill's SKILL.md inside the
|
|
851
|
+
* plugin's mounted tree, reached from the workspace through `.stigmer`. A
|
|
852
|
+
* plugin that cannot be mounted contributes none, warned.
|
|
853
|
+
*/
|
|
854
|
+
async function mountPluginSkills(deps, plugin, sessionId, primaryDir) {
|
|
855
|
+
const skills = plugin.status?.skills ?? [];
|
|
856
|
+
if (skills.length === 0)
|
|
857
|
+
return new Map();
|
|
858
|
+
const pluginName = plugin.metadata?.name ?? "";
|
|
859
|
+
try {
|
|
860
|
+
const platformDir = getPlatformDir(sessionId);
|
|
861
|
+
await ensureStigmerSymlink(primaryDir, platformDir);
|
|
862
|
+
await mountPlugin(deps.client, plugin, platformDir);
|
|
863
|
+
}
|
|
864
|
+
catch (err) {
|
|
865
|
+
console.warn(`[turn-context] the skills of plugin '${pluginName}' are missing this turn: its archive could not be mounted: ${errorText(err)}`);
|
|
866
|
+
return new Map();
|
|
867
|
+
}
|
|
868
|
+
const digest = plugin.status?.digest ?? "";
|
|
869
|
+
return new Map(skills.map((skill) => [
|
|
870
|
+
skill.name,
|
|
871
|
+
{
|
|
872
|
+
name: `${pluginName}:${skill.name}`,
|
|
873
|
+
description: skill.description || `Skill: ${skill.name}`,
|
|
874
|
+
path: join(STIGMER_LOCAL_STATE_DIR, PLUGINS_SUBDIR, digest, skill.path, "SKILL.md"),
|
|
875
|
+
},
|
|
876
|
+
]));
|
|
877
|
+
}
|
|
878
|
+
/** No hooks: the record of a turn whose plugins carry none and whose agent writes none. */
|
|
879
|
+
const NO_HOOKS = { sources: [], serverNames: new Map() };
|
|
880
|
+
/** The plugins among `plugins` that carry hooks. */
|
|
881
|
+
function pluginsWithHooks(plugins) {
|
|
882
|
+
return plugins.filter((plugin) => (plugin.status?.hooks?.groups.length ?? 0) > 0);
|
|
883
|
+
}
|
|
884
|
+
/**
|
|
885
|
+
* Phase 2b: refuse a turn whose agent or any of its subagents has hooks
|
|
886
|
+
* when the harness does not run them, right after the blueprint and before
|
|
887
|
+
* anything else is fetched or provisioned. Run without them, the hooks would be policies that
|
|
888
|
+
* silently vanished; the refusal names them and says what to do. Both built
|
|
889
|
+
* harnesses run hooks, so this refuses nothing today; it stays for the
|
|
890
|
+
* next harness that does not.
|
|
891
|
+
*/
|
|
892
|
+
export function refuseUnrunnableHooks(blueprint, capabilities) {
|
|
893
|
+
const described = [
|
|
894
|
+
...pluginsWithHooks(blueprint.plugins).map((plugin) => `the plugin '${plugin.metadata?.name ?? ""}'`),
|
|
895
|
+
...(blueprint.agent?.spec?.hooks ?? []).map(() => "the agent's own hooks block"),
|
|
896
|
+
...blueprint.subagents.flatMap((subagent) => [
|
|
897
|
+
...pluginsWithHooks(subagent.plugins).map((plugin) => `the plugin '${plugin.metadata?.name ?? ""}' of the subagent '${subagent.name}'`),
|
|
898
|
+
...subagent.spec.hooks.map(() => `the subagent '${subagent.name}''s own hooks block`),
|
|
899
|
+
]),
|
|
900
|
+
];
|
|
901
|
+
if (described.length === 0 || capabilities.runsHooks)
|
|
902
|
+
return undefined;
|
|
903
|
+
return {
|
|
904
|
+
kind: "hooks-refused",
|
|
905
|
+
message: `This conversation has hooks (${described.join(", ")}), and this engine does not run hooks yet. ` +
|
|
906
|
+
"Run it on Stigmer's native engine, or remove the hooks.",
|
|
907
|
+
};
|
|
908
|
+
}
|
|
909
|
+
/**
|
|
910
|
+
* Phase 5a: resolve the turn's hooks for a harness that runs them.
|
|
911
|
+
*
|
|
912
|
+
* The sources, in order: each of the turn's plugins that records hooks (its
|
|
913
|
+
* agent's plugins, then the conversation's, as the blueprint merged them),
|
|
914
|
+
* mounted from its verified archive (`shared/plugin-mount.ts`), then the
|
|
915
|
+
* agent's own block, taken as written. A chat with the built-in assistant
|
|
916
|
+
* gets its plugins' hooks too. Each source keeps the format it is written
|
|
917
|
+
* in, Claude Code's or Cursor's; both run on every engine that runs hooks.
|
|
918
|
+
* Every server is named to a hook as Claude Code names it: a plugin's as
|
|
919
|
+
* `plugin:<plugin>:<server>`, so a plugin's matchers find its tools, and
|
|
920
|
+
* one the agent writes itself by its own name, with `source: "agent"`.
|
|
921
|
+
*
|
|
922
|
+
* A plugin whose archive cannot be fetched or verified refuses the turn
|
|
923
|
+
* (`hooks-refused`), naming it: a hook that does not run as written is a
|
|
924
|
+
* policy that vanished, so this is deliberately stricter than a skill, whose
|
|
925
|
+
* failed download degrades.
|
|
926
|
+
*/
|
|
927
|
+
export async function resolveHooks(deps, args) {
|
|
928
|
+
const plugins = pluginsWithHooks(args.blueprint.plugins);
|
|
929
|
+
const inline = args.blueprint.agent?.spec?.hooks ?? [];
|
|
930
|
+
if (plugins.length === 0 && inline.length === 0)
|
|
931
|
+
return { kind: "ready", hooks: NO_HOOKS };
|
|
932
|
+
deps.enterPhase("resolve_hooks");
|
|
933
|
+
await deps.reportProgress("Resolving hooks");
|
|
934
|
+
const resolved = await hookSources(deps, plugins, inline, args.sessionId);
|
|
935
|
+
if (resolved.kind === "settled")
|
|
936
|
+
return resolved;
|
|
937
|
+
deps.timing.mark("resolve_hooks");
|
|
938
|
+
return { kind: "ready", hooks: { sources: resolved.sources, serverNames: hookServerNamesOf(args.servers) } };
|
|
939
|
+
}
|
|
940
|
+
/**
|
|
941
|
+
* The hook sources of one agent: each plugin that records hooks, mounted
|
|
942
|
+
* from its verified archive, then its own inline block, taken as written.
|
|
943
|
+
* A plugin that cannot be mounted for a reason its owner fixes settles the
|
|
944
|
+
* turn naming it (`hooks-refused`); a transient fault is thrown.
|
|
945
|
+
*/
|
|
946
|
+
async function hookSources(deps, plugins, inline, sessionId) {
|
|
947
|
+
const platformDir = getPlatformDir(sessionId);
|
|
948
|
+
const sources = [];
|
|
949
|
+
for (const plugin of plugins) {
|
|
950
|
+
const hooks = plugin.status.hooks;
|
|
951
|
+
try {
|
|
952
|
+
sources.push({ plugin: await mountPlugin(deps.client, plugin, platformDir), format: formatOf(hooks.format), groups: hooks.groups });
|
|
953
|
+
}
|
|
954
|
+
catch (err) {
|
|
955
|
+
if (!ownersToFix(err))
|
|
956
|
+
throw err;
|
|
957
|
+
return {
|
|
958
|
+
kind: "settled",
|
|
959
|
+
settlement: { kind: "hooks-refused", message: `The hooks of plugin '${plugin.metadata?.name ?? ""}' could not be prepared: ${errorText(err)}` },
|
|
960
|
+
};
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
for (const source of inline) {
|
|
964
|
+
if (source.source.case !== "inline")
|
|
965
|
+
continue;
|
|
966
|
+
sources.push({ plugin: null, format: formatOf(source.source.value.format), groups: source.source.value.groups });
|
|
967
|
+
}
|
|
968
|
+
return { kind: "ready", sources };
|
|
969
|
+
}
|
|
970
|
+
/** Refuses a subagent's server that takes the name of a server already named, from another home. */
|
|
971
|
+
function refuseSharedServerNames(mainServers, servers) {
|
|
972
|
+
for (const server of servers) {
|
|
973
|
+
const main = mainServers.find((candidate) => candidate.slug === server.slug);
|
|
974
|
+
if (main !== undefined && !sameServerHome(main.home, server.home)) {
|
|
975
|
+
throw new DuplicateServerNameError(server.slug, describeServerHome(main.home, main.slug), describeServerHome(server.home, server.slug));
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
/**
|
|
980
|
+
* Phase 5c: each saved agent the turn's agent lists, as an agent of its
|
|
981
|
+
* own ({@link TurnSubagent}), for a harness whose `capabilities.subAgents`
|
|
982
|
+
* is true. The phases the main agent's context came from, run again over
|
|
983
|
+
* the subagent's own definition, with shared caches: a plugin mounts once
|
|
984
|
+
* by digest (`shared/plugin-mount.ts`), a skill once by version hash, and
|
|
985
|
+
* a server the main agent also has resolves to the same slug, which the
|
|
986
|
+
* engine connects once.
|
|
987
|
+
*
|
|
988
|
+
* - Its servers: the ones it writes itself, then its plugins'
|
|
989
|
+
* (`shared/mcp-resolver.ts`), with the run's tool values and the caller
|
|
990
|
+
* identity the main agent's get. None of the
|
|
991
|
+
* platform's own servers: a subagent reports to the main agent, which
|
|
992
|
+
* alone speaks to the person or the channel.
|
|
993
|
+
* - Its skills: its own refs and its plugins', unless its scope hides them.
|
|
994
|
+
* - Its hooks: its plugins', then its own block; the engine runs the
|
|
995
|
+
* conversation's hooks first on its calls.
|
|
996
|
+
* - Its model ({@link subagentModel}) and its values, by its name.
|
|
997
|
+
*
|
|
998
|
+
* A plugin of a subagent whose hooks cannot be prepared settles the turn
|
|
999
|
+
* naming it, as the main agent's do. A subagent's server that would take
|
|
1000
|
+
* the name of a server the main agent or an earlier subagent has, from
|
|
1001
|
+
* another plugin or agent, refuses the turn
|
|
1002
|
+
* (`DuplicateServerNameError`): the engine connects one server per name,
|
|
1003
|
+
* so one would run with the other's values. Run planning refuses two
|
|
1004
|
+
* plugins of one name first; this is the backstop for a plugin that
|
|
1005
|
+
* appeared or changed since.
|
|
1006
|
+
*
|
|
1007
|
+
* Ready, it also returns `loadedSkills`: every subagent's own mounted
|
|
1008
|
+
* skills by id at their version hash, in subagent order, for the run's
|
|
1009
|
+
* record of what it loaded (`loaded-versions.ts`).
|
|
1010
|
+
*/
|
|
1011
|
+
export async function resolveSubagents(deps, args) {
|
|
1012
|
+
const { blueprint, values, sessionId } = args;
|
|
1013
|
+
if (blueprint.subagents.length === 0 || !args.capabilities.subAgents)
|
|
1014
|
+
return { kind: "ready", subagents: [], loadedSkills: [] };
|
|
1015
|
+
deps.enterPhase("resolve_subagents");
|
|
1016
|
+
await deps.reportProgress("Resolving subagents");
|
|
1017
|
+
const transportPosture = resolveMcpTransportPosture(deps.config.mode);
|
|
1018
|
+
const platformValues = turnPlatformValues(blueprint, args.session, sessionId);
|
|
1019
|
+
const options = { sessionId, primaryWorkspaceDir: args.primaryDir };
|
|
1020
|
+
const subagents = [];
|
|
1021
|
+
const loadedSkills = [];
|
|
1022
|
+
// Every server named so far: the main agent's, then each subagent's.
|
|
1023
|
+
const named = [...args.mainServers];
|
|
1024
|
+
for (const subagent of blueprint.subagents) {
|
|
1025
|
+
const { spec } = subagent;
|
|
1026
|
+
const toolScope = savedSubagentScope(subagent.name, spec, args.execution.spec);
|
|
1027
|
+
const servers = resolveTurnServers({
|
|
1028
|
+
agent: { agentId: subagent.agentId, subagent: subagent.name, servers: spec.mcpServers },
|
|
1029
|
+
plugins: subagent.plugins,
|
|
1030
|
+
tools: values.tools,
|
|
1031
|
+
platformValues,
|
|
1032
|
+
transportPosture,
|
|
1033
|
+
platformEndpoints: deps.config,
|
|
1034
|
+
}).resolvedServers;
|
|
1035
|
+
refuseSharedServerNames(named, servers);
|
|
1036
|
+
named.push(...servers);
|
|
1037
|
+
const skills = [];
|
|
1038
|
+
if (!toolScope.hidesSkills) {
|
|
1039
|
+
const own = await resolveSkills(deps.client, spec.skillRefs, options);
|
|
1040
|
+
skills.push(...own.map((skill) => skill.metadata));
|
|
1041
|
+
loadedSkills.push(...own.map((skill) => skill.loaded));
|
|
1042
|
+
for (const plugin of subagent.plugins) {
|
|
1043
|
+
skills.push(...(await mountPluginSkills(deps, plugin, sessionId, args.primaryDir)).values());
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
const hooks = await hookSources(deps, pluginsWithHooks(subagent.plugins), spec.hooks, sessionId);
|
|
1047
|
+
if (hooks.kind === "settled")
|
|
1048
|
+
return hooks;
|
|
1049
|
+
subagents.push({
|
|
1050
|
+
name: subagent.name,
|
|
1051
|
+
description: spec.description,
|
|
1052
|
+
instructions: spec.instructions,
|
|
1053
|
+
model: await subagentModel(spec.runConfig?.modelName ?? "", args.capabilities.harness, spec.harness),
|
|
1054
|
+
toolScope,
|
|
1055
|
+
servers,
|
|
1056
|
+
skills,
|
|
1057
|
+
hooks: hooks.sources,
|
|
1058
|
+
values: values.subagents.get(subagent.name) ?? {},
|
|
1059
|
+
bringsOwn: {
|
|
1060
|
+
plugins: spec.plugins.length > 0,
|
|
1061
|
+
hooks: spec.hooks.length > 0,
|
|
1062
|
+
lists: spec.tools.length > 0 || spec.disallowedTools.length > 0,
|
|
1063
|
+
mcpServers: spec.mcpServers.length > 0,
|
|
1064
|
+
},
|
|
1065
|
+
});
|
|
1066
|
+
}
|
|
1067
|
+
deps.timing.mark("resolve_subagents");
|
|
1068
|
+
return { kind: "ready", subagents, loadedSkills };
|
|
1069
|
+
}
|
|
1070
|
+
/** A recorded hook format as the evaluator names it; an unset format is Claude Code's, as apply fills it. */
|
|
1071
|
+
function formatOf(format) {
|
|
1072
|
+
return format === HookFormat.CURSOR ? "cursor" : "claude-code";
|
|
1073
|
+
}
|
|
1074
|
+
/**
|
|
1075
|
+
* Whether a failure reading or mounting a hook's plugin is the agent owner's
|
|
1076
|
+
* to fix (the plugin is gone, not theirs to read, or its archive does not
|
|
1077
|
+
* verify), and so refuses the turn with a sentence naming it. A transient
|
|
1078
|
+
* fault (the server unreachable, a download that failed in transit) is the
|
|
1079
|
+
* infrastructure's: it is thrown and settles as any other failure there.
|
|
1080
|
+
*/
|
|
1081
|
+
function ownersToFix(err) {
|
|
1082
|
+
if (err instanceof PluginMountError)
|
|
1083
|
+
return err.cause === undefined || isTerminalError(err.cause);
|
|
1084
|
+
return isTerminalError(err);
|
|
1085
|
+
}
|
|
1086
|
+
function errorText(err) {
|
|
1087
|
+
return err instanceof Error ? err.message : String(err);
|
|
1088
|
+
}
|
|
1089
|
+
/**
|
|
1090
|
+
* Phase 5b: resolve the turn's attachments, fail-hard
|
|
1091
|
+
* (they are explicit user inputs; see `shared/attachment-resolver.ts`).
|
|
1092
|
+
* Downloads by storage key through the same artifact storage resolved for
|
|
1093
|
+
* status offload. The vision budget rides along so image attachments are
|
|
1094
|
+
* selected for inline delivery while their bytes are already in hand
|
|
1095
|
+
* (`shared/attachment-vision.ts` owns all policy); it carries the vision
|
|
1096
|
+
* capability of the model the turn will run on: the one the turn's resolved
|
|
1097
|
+
* settings name (`status.run_config`, which the control plane resolved once
|
|
1098
|
+
* at create), or the registry's default when they name none — the model the native
|
|
1099
|
+
* harness builds in that case, so the budget asks about the model that will
|
|
1100
|
+
* actually see the image. Full model validation is not needed for this. The
|
|
1101
|
+
* Cursor harness with no model named builds its own catalog default instead
|
|
1102
|
+
* (`resolveModelId("default")`), so for it this is an approximation: today
|
|
1103
|
+
* both answers read as sighted, and the exact per-harness default is not yet
|
|
1104
|
+
* declared. The vision profile is the harness's
|
|
1105
|
+
* (each engine accepts different image shapes), so it arrives as an
|
|
1106
|
+
* argument.
|
|
1107
|
+
*/
|
|
1108
|
+
export async function resolveTurnAttachments(deps, args) {
|
|
1109
|
+
deps.enterPhase("resolve_attachments");
|
|
1110
|
+
const modelName = args.runConfig?.modelName || (await getDefaultModel());
|
|
1111
|
+
const visionBudget = new VisionBudget(args.visionProfile, {
|
|
1112
|
+
modelVision: await getModelVisionCapability(modelName),
|
|
1113
|
+
});
|
|
1114
|
+
const results = await resolveAttachments(args.spec.attachments, {
|
|
1115
|
+
sessionId: args.sessionId,
|
|
1116
|
+
primaryWorkspaceDir: args.primaryDir,
|
|
1117
|
+
mode: deps.config.mode,
|
|
1118
|
+
storage: deps.artifactStorage,
|
|
1119
|
+
visionBudget,
|
|
1120
|
+
});
|
|
1121
|
+
// Vision facts, derived once from the single resolution result: the
|
|
1122
|
+
// images the model will see inline (in attachment order) and the ones
|
|
1123
|
+
// that degraded to path-only, disclosed in the prompt.
|
|
1124
|
+
const visionImages = results.flatMap((a) => (a.vision ? [a.vision] : []));
|
|
1125
|
+
const visionNotViewable = results.flatMap((a) => a.visionDegraded ? [{ path: a.relativePath, reason: a.visionDegraded }] : []);
|
|
1126
|
+
if (visionImages.length > 0 || visionNotViewable.length > 0) {
|
|
1127
|
+
console.log(`[attachment-vision] execution=${deps.input.executionId} inline=${visionImages.length} ` +
|
|
1128
|
+
`(${visionImages.reduce((n, v) => n + v.byteSize, 0)} bytes) ` +
|
|
1129
|
+
`degraded=${JSON.stringify(visionNotViewable.map((d) => `${d.path}:${d.reason}`))}`);
|
|
1130
|
+
}
|
|
1131
|
+
deps.timing.mark("resolve_attachments");
|
|
1132
|
+
return { results, visionImages, visionNotViewable };
|
|
1133
|
+
}
|
|
1134
|
+
/**
|
|
1135
|
+
* Whether a harness performs an approved call by RE-RUNNING the model, so
|
|
1136
|
+
* the bytes an approved whole-file write lands can differ from the bytes the
|
|
1137
|
+
* user approved unless the runner pins them itself
|
|
1138
|
+
* ({@link applyApprovedWrites}). Keyed on the pause primitive
|
|
1139
|
+
* (`capabilities.ts`): `deny-and-retry` denies the call and re-prompts the
|
|
1140
|
+
* model with grants; `callback` answers "deny, stop" and the resumed session
|
|
1141
|
+
* re-attempts the call — both regenerate. An `interrupt` engine checkpoints
|
|
1142
|
+
* AT the call and applies its exact args on `approve`, so a runner-side
|
|
1143
|
+
* write would land the same bytes twice and pre-empt a row the engine is
|
|
1144
|
+
* about to execute; `none` gates nothing. Until #1096 the phase ran for
|
|
1145
|
+
* every harness — a deny-and-retry mechanism the native harness would have
|
|
1146
|
+
* met on its first deny-gated file approval.
|
|
1147
|
+
*/
|
|
1148
|
+
export function regeneratesApprovedWrites(pausePrimitive) {
|
|
1149
|
+
switch (pausePrimitive) {
|
|
1150
|
+
case "deny-and-retry":
|
|
1151
|
+
case "callback":
|
|
1152
|
+
return true;
|
|
1153
|
+
case "interrupt":
|
|
1154
|
+
case "none":
|
|
1155
|
+
return false;
|
|
1156
|
+
default: {
|
|
1157
|
+
const exhaustive = pausePrimitive;
|
|
1158
|
+
throw new Error(`regeneratesApprovedWrites: unknown pause primitive ${String(exhaustive)}`);
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
/**
|
|
1163
|
+
* Phase 5b3: exact-apply approved whole-file writes
|
|
1164
|
+
* (HITL "what you approve is what gets applied"). A deny-only harness
|
|
1165
|
+
* reinvokes the model, which regenerates content, so a resource grant alone
|
|
1166
|
+
* cannot guarantee the bytes that land match the bytes the user approved.
|
|
1167
|
+
* The runner therefore writes the EXACT approved whole-file content itself
|
|
1168
|
+
* and marks those tool calls COMPLETED; the harness then issues NO grant for
|
|
1169
|
+
* them, so any FURTHER change the model makes to those files is re-gated.
|
|
1170
|
+
* Hunk edits / shell / MCP stay on the grant + reinvocation path, and every
|
|
1171
|
+
* uncertain case degrades to that path, so this can never corrupt a file
|
|
1172
|
+
* (see `shared/exact-apply.ts`).
|
|
1173
|
+
*
|
|
1174
|
+
* Scoped to the harnesses that regenerate ({@link regeneratesApprovedWrites})
|
|
1175
|
+
* and OUT of capture mode, where a file edit flows and is never asked for.
|
|
1176
|
+
*
|
|
1177
|
+
* The caller persists when the returned set is non-empty (the applied state
|
|
1178
|
+
* must be durable before the continuation runs, and the UI reflects it at
|
|
1179
|
+
* once); this phase, like every phase, never persists.
|
|
1180
|
+
*/
|
|
1181
|
+
export async function applyApprovedWrites(deps, args) {
|
|
1182
|
+
const { pausePrimitive, workspace, reinvocation } = args;
|
|
1183
|
+
if (!regeneratesApprovedWrites(pausePrimitive) ||
|
|
1184
|
+
workspace.captureMode ||
|
|
1185
|
+
!reinvocation.isReinvocation ||
|
|
1186
|
+
reinvocation.approvalDecisions.size === 0) {
|
|
1187
|
+
return new Set();
|
|
1188
|
+
}
|
|
1189
|
+
deps.enterPhase("apply_approved_writes");
|
|
1190
|
+
return applyApprovedWholeFileWrites({
|
|
1191
|
+
messages: deps.rows.messages,
|
|
1192
|
+
workspaceBackend: new LocalWorkspaceBackend(workspace.primaryDir),
|
|
1193
|
+
workspaceDirs: workspace.dirs,
|
|
1194
|
+
executionId: deps.input.executionId,
|
|
1195
|
+
});
|
|
1196
|
+
}
|
|
1197
|
+
/**
|
|
1198
|
+
* Phase 6, the harness-agnostic half: the model name the turn runs with, and
|
|
1199
|
+
* the effective service tier and thinking mode. All three come from
|
|
1200
|
+
* `execution.status.run_config`, the settings the control plane resolved
|
|
1201
|
+
* once at create from the message, the agent's defaults and the lane's
|
|
1202
|
+
* operator profile; the request's own `spec.run_config` is one input to that
|
|
1203
|
+
* resolution and is never read here, so a request can never bypass a cap or
|
|
1204
|
+
* a default the resolution applied. UNSPECIFIED → STANDARD (#357) and
|
|
1205
|
+
* UNSPECIFIED → DISABLED (#772) resolve here and nowhere else: the resolved
|
|
1206
|
+
* settings keep "no layer set it" as UNSPECIFIED. Validating the NAME against
|
|
1207
|
+
* a catalog is the harness's (Cursor's `resolveModelId`), so it is not here.
|
|
1208
|
+
*/
|
|
1209
|
+
export function resolveModelPreferences(runConfig) {
|
|
1210
|
+
return {
|
|
1211
|
+
requested: runConfig?.modelName || "default",
|
|
1212
|
+
serviceTier: resolveEffectiveServiceTier(runConfig?.serviceTier),
|
|
1213
|
+
thinkingMode: resolveEffectiveThinkingMode(runConfig?.thinkingMode),
|
|
1214
|
+
};
|
|
1215
|
+
}
|
|
1216
|
+
/** Phase 9b: the structured-output schema this message asks for, if any (a per-message intent on the spec). */
|
|
1217
|
+
export function structuredOutputSchemaOf(spec) {
|
|
1218
|
+
return spec.structuredOutputSchema;
|
|
1219
|
+
}
|
|
1220
|
+
/**
|
|
1221
|
+
* Phase 9c:
|
|
1222
|
+
* the standing context, read once, and the memory selection prepared once.
|
|
1223
|
+
*
|
|
1224
|
+
* Selection runs against the frozen first message's semantics: above the
|
|
1225
|
+
* activation threshold it picks top-k for spec.message, otherwise (and on
|
|
1226
|
+
* any failure) it injects the full candidate set. The outcome report is
|
|
1227
|
+
* stamped on the turn's rows ONCE, written to the log by the next persist
|
|
1228
|
+
* as `stigmer.memory.recalled`; a re-invocation replays the report an
|
|
1229
|
+
* earlier invocation wrote there (`TurnReinvocation.recalledMemoriesReport`)
|
|
1230
|
+
* rather than re-selecting (the written-once rule). Memoized because a
|
|
1231
|
+
* resumed-agent primary send carries no memories, but a mid-send
|
|
1232
|
+
* poisoned-handle failure rebuilds on a FRESH agent whose recovery prompt
|
|
1233
|
+
* does, so every memory-carrying build site awaits this lazily.
|
|
1234
|
+
*/
|
|
1235
|
+
export function resolveStandingContext(deps, args) {
|
|
1236
|
+
const { execution, spec, blueprint, priorReport } = args;
|
|
1237
|
+
let memorySelection;
|
|
1238
|
+
const selectRecalledMemories = () => {
|
|
1239
|
+
memorySelection ??= selectRecalledFacts(execution.status?.recalledMemories, spec.message, {
|
|
1240
|
+
proxyEndpoint: deps.config.proxyEndpoint,
|
|
1241
|
+
stigmerToken: deps.config.stigmerTokenRef.current,
|
|
1242
|
+
executionId: deps.input.executionId,
|
|
1243
|
+
priorReport,
|
|
1244
|
+
}).then((selection) => {
|
|
1245
|
+
if (selection.report !== undefined) {
|
|
1246
|
+
deps.rows.recalledMemoriesReport = selection.report;
|
|
1247
|
+
}
|
|
1248
|
+
return selection.content;
|
|
1249
|
+
});
|
|
1250
|
+
return memorySelection;
|
|
1251
|
+
};
|
|
1252
|
+
return {
|
|
1253
|
+
contextBridge: readContextBridge(blueprint.sessionSpec.metadata),
|
|
1254
|
+
senderIdentity: readSenderIdentity(blueprint.sessionSpec.metadata),
|
|
1255
|
+
sessionContext: readSessionContext(blueprint.sessionSpec.metadata),
|
|
1256
|
+
declaredPreferences: readDeclaredPreferences(execution.status?.declaredPreferences),
|
|
1257
|
+
conversationCatchup: readConversationCatchup(spec.conversationCatchup),
|
|
1258
|
+
selectRecalledMemories,
|
|
1259
|
+
};
|
|
1260
|
+
}
|
|
1261
|
+
/**
|
|
1262
|
+
* Run the phases in order and compose the turn's `TurnInput`, or stop at
|
|
1263
|
+
* the first settlement.
|
|
1264
|
+
*
|
|
1265
|
+
* A reconcile turn (`RunSpec.reconcile_file_review`, no message) takes
|
|
1266
|
+
* {@link resolveReconcileTurn} instead, right after the execution is read:
|
|
1267
|
+
* it never reaches a phase that prepares an engine.
|
|
1268
|
+
*
|
|
1269
|
+
* The order is the orchestrator's, with its harness-specific steps gone
|
|
1270
|
+
* (they run inside `adapter.runTurn`, after this returns): the tool surface,
|
|
1271
|
+
* the skills, the attachments, the exact-apply, then the reads that need no
|
|
1272
|
+
* network.
|
|
1273
|
+
*
|
|
1274
|
+
* The one persist a phase requires — the applied writes must be durable
|
|
1275
|
+
* before the continuation runs — goes through the caller's chokepoint
|
|
1276
|
+
* (`persist`), so the rule that phases never persist holds here too.
|
|
1277
|
+
*/
|
|
1278
|
+
export async function resolveTurnContext(deps, capabilities, frame, persist) {
|
|
1279
|
+
const { execution, spec, sessionId } = await fetchExecution(deps);
|
|
1280
|
+
if (spec.reconcileFileReview)
|
|
1281
|
+
return resolveReconcileTurn(deps, frame, sessionId);
|
|
1282
|
+
const { session, blueprint } = await resolveAgentBlueprint(deps, execution, sessionId);
|
|
1283
|
+
deps.identifyRun({ execution, session, sessionId, blueprint });
|
|
1284
|
+
const unrunnable = refuseUnrunnableHooks(blueprint, capabilities);
|
|
1285
|
+
if (unrunnable !== undefined)
|
|
1286
|
+
return { kind: "settled", settlement: unrunnable };
|
|
1287
|
+
const fetched = await fetchValues(deps);
|
|
1288
|
+
if (fetched.kind === "settled")
|
|
1289
|
+
return { kind: "settled", settlement: fetched.settlement };
|
|
1290
|
+
let { values } = fetched;
|
|
1291
|
+
const provisioned = await provisionWorkspace(deps, {
|
|
1292
|
+
session,
|
|
1293
|
+
sessionId,
|
|
1294
|
+
repositories: values.repositories,
|
|
1295
|
+
review: fileReviewOn(session, spec),
|
|
1296
|
+
});
|
|
1297
|
+
let { workspace } = provisioned;
|
|
1298
|
+
const { writeback } = provisioned;
|
|
1299
|
+
frame.primaryDir = workspace.primaryDir;
|
|
1300
|
+
frame.writeback = writeback;
|
|
1301
|
+
const lock = await acquireWorkspaceTurnLock(deps, workspace.primaryDir);
|
|
1302
|
+
if (lock.kind === "settled")
|
|
1303
|
+
return { kind: "settled", settlement: lock.settlement };
|
|
1304
|
+
frame.releaseWorkspaceLock = lock.release;
|
|
1305
|
+
const finished = await runFinishedWhileWaiting(deps, lock.waited);
|
|
1306
|
+
if (finished !== undefined)
|
|
1307
|
+
return { kind: "settled", settlement: finished };
|
|
1308
|
+
await reconcileOwedUndosPhase(deps, { sessionId, workspace, reconcileTurn: false });
|
|
1309
|
+
const evalCase = await prepareEvalCasePhase(deps, { spec, sessionId, workspace, values });
|
|
1310
|
+
if (evalCase.kind === "settled")
|
|
1311
|
+
return { kind: "settled", settlement: evalCase.settlement };
|
|
1312
|
+
const prepared = evalCase.prepared;
|
|
1313
|
+
if (prepared !== undefined) {
|
|
1314
|
+
workspace = prepared.workspace;
|
|
1315
|
+
values = prepared.values;
|
|
1316
|
+
frame.evalReadFiles = spec.evalCase?.readFiles;
|
|
1317
|
+
}
|
|
1318
|
+
const reinvocation = await reconcileReinvocation(deps, {
|
|
1319
|
+
stateIdSource: capabilities.stateIdSource,
|
|
1320
|
+
execution,
|
|
1321
|
+
sessionId,
|
|
1322
|
+
});
|
|
1323
|
+
frame.runWroteEvents = reinvocation.runWroteEvents;
|
|
1324
|
+
frame.priorAnswer = reinvocation.answerText;
|
|
1325
|
+
const resolvedMcp = await resolveMcpServersAndPolicies(deps, {
|
|
1326
|
+
execution,
|
|
1327
|
+
session,
|
|
1328
|
+
sessionId,
|
|
1329
|
+
blueprint,
|
|
1330
|
+
values,
|
|
1331
|
+
readsToolMarks: capabilities.readsToolMarks,
|
|
1332
|
+
grants: reinvocation.grants,
|
|
1333
|
+
});
|
|
1334
|
+
const mcp = prepared === undefined ? resolvedMcp : await startEvalMocks(deps, { spec, archive: prepared.archive, mcp: resolvedMcp, frame });
|
|
1335
|
+
const mounted = await mountSkills(deps, {
|
|
1336
|
+
blueprint,
|
|
1337
|
+
sessionId,
|
|
1338
|
+
primaryDir: workspace.primaryDir,
|
|
1339
|
+
subAgents: capabilities.subAgents,
|
|
1340
|
+
toolScope: mcp.toolScope,
|
|
1341
|
+
});
|
|
1342
|
+
const hookResolution = await resolveHooks(deps, { blueprint, sessionId, servers: mcp.servers });
|
|
1343
|
+
if (hookResolution.kind === "settled")
|
|
1344
|
+
return hookResolution;
|
|
1345
|
+
const subagentResolution = await resolveSubagents(deps, {
|
|
1346
|
+
execution,
|
|
1347
|
+
session,
|
|
1348
|
+
sessionId,
|
|
1349
|
+
blueprint,
|
|
1350
|
+
values,
|
|
1351
|
+
primaryDir: workspace.primaryDir,
|
|
1352
|
+
capabilities,
|
|
1353
|
+
mainServers: mcp.servers,
|
|
1354
|
+
});
|
|
1355
|
+
if (subagentResolution.kind === "settled")
|
|
1356
|
+
return subagentResolution;
|
|
1357
|
+
const resolvedAttachments = await resolveTurnAttachments(deps, {
|
|
1358
|
+
spec,
|
|
1359
|
+
runConfig: execution.status?.runConfig,
|
|
1360
|
+
sessionId,
|
|
1361
|
+
primaryDir: workspace.primaryDir,
|
|
1362
|
+
visionProfile: capabilities.visionProfile,
|
|
1363
|
+
});
|
|
1364
|
+
const attachments = prepared === undefined || prepared.case.referenceInputs.length === 0
|
|
1365
|
+
? resolvedAttachments
|
|
1366
|
+
: { ...resolvedAttachments, results: [...resolvedAttachments.results, ...prepared.case.referenceInputs] };
|
|
1367
|
+
const appliedToolCallIds = await applyApprovedWrites(deps, {
|
|
1368
|
+
pausePrimitive: capabilities.pausePrimitive,
|
|
1369
|
+
workspace,
|
|
1370
|
+
reinvocation,
|
|
1371
|
+
});
|
|
1372
|
+
if (appliedToolCallIds.size > 0) {
|
|
1373
|
+
// Persist the applied writes (tool calls now COMPLETED with the approved
|
|
1374
|
+
// diff) before reinvocation, so the applied state is durable even if the
|
|
1375
|
+
// continuation fails, and the UI reflects it immediately.
|
|
1376
|
+
await persist();
|
|
1377
|
+
}
|
|
1378
|
+
// What this turn loaded, recorded once it is ready to run; the
|
|
1379
|
+
// adapter's first persist carries it.
|
|
1380
|
+
const loadedVersions = loadedVersionsOf([...mounted.loaded, ...subagentResolution.loadedSkills], blueprint, capabilities.subAgents);
|
|
1381
|
+
if (loadedVersions !== undefined)
|
|
1382
|
+
deps.status.loadedVersions = loadedVersions;
|
|
1383
|
+
return {
|
|
1384
|
+
kind: "ready",
|
|
1385
|
+
input: {
|
|
1386
|
+
executionId: deps.input.executionId,
|
|
1387
|
+
threadId: deps.input.threadId,
|
|
1388
|
+
turnSeq: deps.input.turnSeq,
|
|
1389
|
+
sessionId,
|
|
1390
|
+
approvalDecisions: reinvocation.approvalDecisions,
|
|
1391
|
+
approvalDenyMessages: reinvocation.approvalDenyMessages,
|
|
1392
|
+
approvalAsks: reinvocation.approvalAsks,
|
|
1393
|
+
execution,
|
|
1394
|
+
session,
|
|
1395
|
+
blueprint,
|
|
1396
|
+
values,
|
|
1397
|
+
workspace,
|
|
1398
|
+
mcp,
|
|
1399
|
+
skills: mounted.skills,
|
|
1400
|
+
hooks: hookResolution.hooks,
|
|
1401
|
+
subagents: subagentResolution.subagents,
|
|
1402
|
+
attachments,
|
|
1403
|
+
appliedToolCallIds,
|
|
1404
|
+
model: resolveModelPreferences(execution.status?.runConfig),
|
|
1405
|
+
structuredOutputSchema: structuredOutputSchemaOf(spec),
|
|
1406
|
+
appendSystemPrompt: spec.appendSystemPrompt,
|
|
1407
|
+
standing: resolveStandingContext(deps, { execution, spec, blueprint, priorReport: reinvocation.recalledMemoriesReport }),
|
|
1408
|
+
artifactStorage: deps.artifactStorage,
|
|
1409
|
+
readRunEvents: runEventsReader(deps.client, sessionId, deps.input.executionId),
|
|
1410
|
+
...(prepared?.case.history !== undefined && { resumedHistory: prepared.case.history }),
|
|
1411
|
+
},
|
|
1412
|
+
};
|
|
1413
|
+
}
|
|
1414
|
+
/**
|
|
1415
|
+
* A reconcile turn's whole resolution: the run a person's Undo on an ended
|
|
1416
|
+
* turn starts, with no message and nothing for an engine to do. Only what
|
|
1417
|
+
* putting the files back needs: the session (its workspace entries; no
|
|
1418
|
+
* blueprint is resolved), the run's values (the repository tokens the
|
|
1419
|
+
* write-back pushes with), the workspace and its lock, then the undos owed
|
|
1420
|
+
* (`owed-undos.ts`). No hook, eval case, MCP server, skill, attachment or
|
|
1421
|
+
* engine is touched on any harness, and the session event emitter never
|
|
1422
|
+
* begins; the outcome is written as `stigmer.file_review.reconciled` and the
|
|
1423
|
+
* turn settles `file-review-resolved`, whose settle finalizes the write-back
|
|
1424
|
+
* and completes with stop cause `review_resolved`.
|
|
1425
|
+
*/
|
|
1426
|
+
export async function resolveReconcileTurn(deps, frame, sessionId) {
|
|
1427
|
+
deps.enterPhase("load_session");
|
|
1428
|
+
const session = await deps.client.getSession(sessionId);
|
|
1429
|
+
deps.timing.mark("load_session");
|
|
1430
|
+
const fetched = await fetchValues(deps);
|
|
1431
|
+
if (fetched.kind === "settled")
|
|
1432
|
+
return { kind: "settled", settlement: fetched.settlement };
|
|
1433
|
+
const { workspace, writeback } = await provisionWorkspace(deps, {
|
|
1434
|
+
session,
|
|
1435
|
+
sessionId,
|
|
1436
|
+
repositories: fetched.values.repositories,
|
|
1437
|
+
review: false,
|
|
1438
|
+
});
|
|
1439
|
+
frame.primaryDir = workspace.primaryDir;
|
|
1440
|
+
frame.writeback = writeback;
|
|
1441
|
+
const lock = await acquireWorkspaceTurnLock(deps, workspace.primaryDir);
|
|
1442
|
+
if (lock.kind === "settled")
|
|
1443
|
+
return { kind: "settled", settlement: lock.settlement };
|
|
1444
|
+
frame.releaseWorkspaceLock = lock.release;
|
|
1445
|
+
const outcomes = await reconcileOwedUndosPhase(deps, { sessionId, workspace, reconcileTurn: true });
|
|
1446
|
+
return { kind: "settled", settlement: reconcileTurnSettlement(outcomes) };
|
|
1447
|
+
}
|
|
1448
|
+
//# sourceMappingURL=turn-context.js.map
|