@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,964 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Cursor harness's setup — what this engine needs before it can be sent
|
|
3
|
+
* a turn, as small named steps over the runtime's resolved `TurnInput`, each
|
|
4
|
+
* returning a typed slice (the `SetupResult` mold, never one long function).
|
|
5
|
+
*
|
|
6
|
+
* Everything harness-agnostic has already happened when these run: the
|
|
7
|
+
* execution, session and blueprint are fetched, the workspace is provisioned
|
|
8
|
+
* and locked, the MCP servers, the approval default and the agent's tool
|
|
9
|
+
* scope are resolved, the skills are mounted, the attachments are resolved.
|
|
10
|
+
* What remains is Cursor's own reading of that record: the cursor mode; the
|
|
11
|
+
* tool-list checks this engine can and cannot honour; the row facts beside the
|
|
12
|
+
* runtime's approval verdicts; the SDK's MCP config and tool restriction; the
|
|
13
|
+
* prompt-shaped view of the attachments; the agent's hooks (the evaluator,
|
|
14
|
+
* the workspace hook files a person's own folder may not carry, the tools
|
|
15
|
+
* a hook would answer for that Cursor never shows one); the HITL gate (hook
|
|
16
|
+
* script, approval state, grants, the hook server, denial watcher, and the
|
|
17
|
+
* hook sidecar bound as the runtime's CAS observations); the catalog
|
|
18
|
+
* validation of the
|
|
19
|
+
* requested model; the credential, the sub-agents, the variant params and
|
|
20
|
+
* the agent itself (parked or resolved); the bind of a new agent's id through
|
|
21
|
+
* the sink; the prompt in one of its four shapes; the vision payload; the
|
|
22
|
+
* pricer; the OTel span.
|
|
23
|
+
*
|
|
24
|
+
* Every step reads `TurnInput` and the sink and nothing else of the runtime's.
|
|
25
|
+
* The `execution_setup` cold-start line is emitted here, once the agent is
|
|
26
|
+
* resolved, over the runtime's timeline (`sink.setupTiming`), so the one
|
|
27
|
+
* timeline reads end to end.
|
|
28
|
+
*
|
|
29
|
+
* Moved from `index.ts` `executeCursorInner` phases 4c to 10c in #1070; the
|
|
30
|
+
* step bodies are the orchestrator's, verbatim where nothing changed.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
import type { SDKUserMessage } from "@cursor/sdk";
|
|
34
|
+
import { InteractionMode } from "@stigmer/apis/ai/stigmer/agentic/run/v1/enum_pb";
|
|
35
|
+
import { CursorMode } from "@stigmer/apis/ai/stigmer/agentic/session/v1/enum_pb";
|
|
36
|
+
|
|
37
|
+
import type { Config } from "../../config.js";
|
|
38
|
+
import type { TurnInput, TurnSink } from "../../harness/types.js";
|
|
39
|
+
import { toCursorImages } from "../../shared/attachment-vision.js";
|
|
40
|
+
import { emitTimingLog } from "../../shared/cold-start-timing.js";
|
|
41
|
+
import { isUnattendedApprovalMode } from "../../shared/approval-policy.js";
|
|
42
|
+
import { excludeAppliedFromGrants } from "../../shared/exact-apply.js";
|
|
43
|
+
import { executionFingerprintKey } from "../../shared/fingerprint-secret.js";
|
|
44
|
+
import { realpath } from "node:fs/promises";
|
|
45
|
+
import { CURSOR_SDK_TOOL_COVERS } from "@stigmer/tool-vocabulary";
|
|
46
|
+
import {
|
|
47
|
+
checkMainToolListResolution,
|
|
48
|
+
claudeToolsOf,
|
|
49
|
+
cursorSdkToolOptions,
|
|
50
|
+
type TurnToolInventory,
|
|
51
|
+
} from "../../shared/tool-lists.js";
|
|
52
|
+
import { declaredServerCount, type ResolvedMcpServer } from "../../shared/mcp-resolver.js";
|
|
53
|
+
import type { McpToolListing } from "../../shared/mcp-tool-listing.js";
|
|
54
|
+
import { ensureHitlDir, getPlatformDir } from "../../shared/workspace/platform-dir.js";
|
|
55
|
+
import type { HookEvaluator } from "../../shared/hooks/evaluate.js";
|
|
56
|
+
import { buildHookEvaluator, HookSetupError, hookPermissionMode } from "../../shared/hooks/setup.js";
|
|
57
|
+
import { stigmerSymlinkPointsAt } from "../../shared/workspace/stigmer-link.js";
|
|
58
|
+
import { compileHookToolScope } from "./hook-scope.js";
|
|
59
|
+
import { computeAgentFingerprint, takeCachedAgent } from "./agent-session-cache.js";
|
|
60
|
+
import {
|
|
61
|
+
buildApprovalGrants,
|
|
62
|
+
buildApprovalState,
|
|
63
|
+
buildPersonRefusals,
|
|
64
|
+
emitCursorGrantReceipts,
|
|
65
|
+
reconstructAdjudicatedApprovals,
|
|
66
|
+
watchDenialLedger,
|
|
67
|
+
type ApprovalGrant,
|
|
68
|
+
} from "./approval-state.js";
|
|
69
|
+
import { startHookServer, type HookDecisionLog } from "./hook-server.js";
|
|
70
|
+
import { toolsHiddenByHooks, withToolsHidden } from "./hook-tool-hiding.js";
|
|
71
|
+
import { CursorEngineToolViews } from "./hook-views.js";
|
|
72
|
+
import { refuseLinkedGateFile, refuseOwnFolderHooks, workspaceFolders } from "./workspace-hook-files.js";
|
|
73
|
+
import { readSidecarSnapshot } from "./cas-observations.js";
|
|
74
|
+
import { CURSOR_CAPABILITIES } from "./cursor-capabilities.js";
|
|
75
|
+
import { declaredServerSlugs, toCursorMcpConfig, validateMcpServerEnv } from "./cursor-mcp-config.js";
|
|
76
|
+
import { determineCursorMode, isCloudMode } from "./cursor-mode.js";
|
|
77
|
+
import { closeProxySessions } from "./http2-interceptor.js";
|
|
78
|
+
import { ensureLoaded as ensurePricingLoaded, resolveModelId } from "./model-pricing.js";
|
|
79
|
+
import {
|
|
80
|
+
appendStructuredOutputDirective,
|
|
81
|
+
buildPrompt,
|
|
82
|
+
isHitlReinvocation,
|
|
83
|
+
primarySendCarriesImages,
|
|
84
|
+
promptCarriesStandingContext,
|
|
85
|
+
type BuildPromptInput,
|
|
86
|
+
} from "./prompt-builder.js";
|
|
87
|
+
import { visionPromptInfoOf } from "../../shared/prompt-sections.js";
|
|
88
|
+
import { resolveServiceTierParams } from "./service-tier.js";
|
|
89
|
+
import {
|
|
90
|
+
createAgent,
|
|
91
|
+
createCloudAgent,
|
|
92
|
+
resolveAgentWithTransportRecovery,
|
|
93
|
+
type AgentResolution,
|
|
94
|
+
type AgentResolutionReason,
|
|
95
|
+
type CreateAgentOptions,
|
|
96
|
+
type CreateCloudAgentOptions,
|
|
97
|
+
} from "./session-lifecycle.js";
|
|
98
|
+
import { readTurnRecoveryDigest } from "./turn-recovery.js";
|
|
99
|
+
import type { TurnStreamState } from "./turn-stream.js";
|
|
100
|
+
import { buildCursorSubAgentDefinitions, subagentNamesInScope, subagentsInScope } from "./subagent-config.js";
|
|
101
|
+
import { CursorUsagePricer } from "./usage-pricing.js";
|
|
102
|
+
import { installHitlGate, MAX_HOOK_TIMEOUT_SECONDS, removeHitlGate, type HitlGateHandle } from "./workspace-setup.js";
|
|
103
|
+
import type { PendingApproval, TurnRows } from "../../gen/turn/ai/stigmer/runner/turn/v1/rows_pb.js";
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* The runner config this harness reads per turn, as a named slice
|
|
107
|
+
* (`shared/workspace/session-provision.ts` `SessionProvisionConfig` is the
|
|
108
|
+
* idiom): taken from a `Config` at boot (`adapter.ts` `resolveCursorConfig`),
|
|
109
|
+
* a test constructs these fields and nothing else.
|
|
110
|
+
*
|
|
111
|
+
* `transport` is where the SDK's traffic goes: in the agent host, always the
|
|
112
|
+
* local proxy's Cursor lane, `null` only for an SDK that calls Cursor
|
|
113
|
+
* itself. `proxyEndpoint` is still the runner's own: whether the Cursor key
|
|
114
|
+
* is the Stigmer platform's, which decides the wording of a billing error.
|
|
115
|
+
* The two were one setting while the harness ran in the runner's process.
|
|
116
|
+
*/
|
|
117
|
+
export type CursorAdapterConfig = Pick<
|
|
118
|
+
Config,
|
|
119
|
+
| "proxyEndpoint"
|
|
120
|
+
| "cursorApiKey"
|
|
121
|
+
| "stigmerTokenRef"
|
|
122
|
+
| "workspaceRootDir"
|
|
123
|
+
| "cloudModeEnabled"
|
|
124
|
+
| "agentResolveTimeoutMs"
|
|
125
|
+
| "cursorStreamStallTimeoutMs"
|
|
126
|
+
> & { readonly transport: string | null };
|
|
127
|
+
|
|
128
|
+
export type CursorAgentMode = "cloud" | "local";
|
|
129
|
+
|
|
130
|
+
/** The row facts the runtime's approval verdicts sit beside (the contract's rule: the adapter reads the ROW for anything else it needs). */
|
|
131
|
+
export interface AdjudicatedRows {
|
|
132
|
+
/** Create-vs-resume, derived from the state id exactly as the runtime derives it. */
|
|
133
|
+
readonly isReinvocation: boolean;
|
|
134
|
+
/** The pending-approval protos the grant builder and the reinvocation prompt render. */
|
|
135
|
+
readonly adjudicatedApprovals: PendingApproval[];
|
|
136
|
+
/** The content digest that authorizes an approved edit by its exact bytes (a sibling edit to the same file re-gates). */
|
|
137
|
+
readonly adjudicatedContentDigests: Map<string, string>;
|
|
138
|
+
/** The approvals a hook asked for, by tool-call id. */
|
|
139
|
+
readonly adjudicatedHookAsks: ReadonlySet<string>;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** The HITL gate as installed for this turn, and what the stream and the boundary read from it. */
|
|
143
|
+
export interface CursorGate {
|
|
144
|
+
/** Session HITL directory (runner-owned, outside the workspace): hook script, approval-state file, denial ledger. */
|
|
145
|
+
readonly hitlDir: string;
|
|
146
|
+
readonly hitlGate: HitlGateHandle;
|
|
147
|
+
readonly approvalGrants: ApprovalGrant[] | undefined;
|
|
148
|
+
/** The hooks' decisions on the calls that may run, for the rows' provenance; absent for an agent without hooks. */
|
|
149
|
+
readonly hookDecisions?: HookDecisionLog;
|
|
150
|
+
/** Closes the denial-ledger watcher; idempotent. */
|
|
151
|
+
readonly stopDenialWatcher: () => void;
|
|
152
|
+
/** Restores the workspace's hook files (issue #173) and stops the hook server; the runtime removes the `.stigmer` link after it. */
|
|
153
|
+
readonly removeGate: () => Promise<void>;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/** The engine this turn runs on: how it was resolved and everything a recovery needs to resolve it again. */
|
|
157
|
+
export interface CursorEngine {
|
|
158
|
+
readonly agentMode: CursorAgentMode;
|
|
159
|
+
readonly cursorMode: CursorMode;
|
|
160
|
+
readonly requestedModel: string;
|
|
161
|
+
readonly validatedModel: string;
|
|
162
|
+
readonly effectiveApiKey: string;
|
|
163
|
+
readonly createOptions: CreateAgentOptions | CreateCloudAgentOptions;
|
|
164
|
+
readonly agentFingerprint: string;
|
|
165
|
+
/** Replaced by a recovery spine when a fresh agent takes over the turn. */
|
|
166
|
+
resolution: AgentResolution;
|
|
167
|
+
readonly modelParams: Awaited<ReturnType<typeof resolveServiceTierParams>>;
|
|
168
|
+
readonly usagePricer: CursorUsagePricer;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/** The prompt this turn sends, and the facts every send site (primary and both recoveries) needs. */
|
|
172
|
+
export interface CursorPrompt {
|
|
173
|
+
readonly effectivePrompt: string;
|
|
174
|
+
/** The turn's full vision payload; a recovery send always carries it (issue #366's vision corollary). */
|
|
175
|
+
readonly turnImages: ReturnType<typeof toCursorImages>;
|
|
176
|
+
/** What the PRIMARY send carries: nothing on a HITL re-invocation of a resumed agent, whose conversation holds the images already. */
|
|
177
|
+
readonly primarySendImages: ReturnType<typeof toCursorImages>;
|
|
178
|
+
readonly toSendMessage: (prompt: string, images: { data: string; mimeType: string }[]) => string | SDKUserMessage;
|
|
179
|
+
readonly promptEstimatedTokens: number;
|
|
180
|
+
/** The fresh-agent recovery prompt, composed at recovery time from the transcript as it then stands. */
|
|
181
|
+
readonly buildRecoveryPrompt: (fresh: AgentResolution) => Promise<string>;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// ── Steps ───────────────────────────────────────────────────────────────────
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Cloud Cursor agents are disabled platform-wide (see determineCursorMode),
|
|
188
|
+
* so every session runs LOCAL. Any persisted cursor_mode is deliberately
|
|
189
|
+
* ignored so a session can never route to the cloud path while it is
|
|
190
|
+
* disabled — even one that was created when cloud was enabled.
|
|
191
|
+
*/
|
|
192
|
+
export function resolveCursorMode(input: TurnInput, config: CursorAdapterConfig): { cursorMode: CursorMode; agentMode: CursorAgentMode } {
|
|
193
|
+
const cursorMode = determineCursorMode(input.blueprint.sessionSpec.workspaceEntries, config.cloudModeEnabled);
|
|
194
|
+
return { cursorMode, agentMode: isCloudMode(cursorMode) ? "cloud" : "local" };
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* A turn this engine refuses because of the agent's tool lists, before
|
|
199
|
+
* anything runs: the fix is the agent author's, so the turn fails with this
|
|
200
|
+
* sentence on the `actionable` surface (`turn.ts` `classifyThrown`), as a
|
|
201
|
+
* `ToolListResolutionError` does on both engines.
|
|
202
|
+
*/
|
|
203
|
+
export class CursorToolListRefusal extends Error {
|
|
204
|
+
constructor(message: string) {
|
|
205
|
+
super(message);
|
|
206
|
+
this.name = "CursorToolListRefusal";
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/** The refusal for a saved subagent that brings what this engine cannot keep to it. */
|
|
211
|
+
export function subagentBringsOwnMessage(name: string): string {
|
|
212
|
+
return (
|
|
213
|
+
`Subagent '${name}' brings its own plugins, hooks, MCP servers or tool lists, which the Cursor engine cannot keep to it: ` +
|
|
214
|
+
"it cannot tell a subagent's tool call from the main agent's. " +
|
|
215
|
+
`Run this agent on the native engine, or remove them from '${name}'.`
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* The agent's tool lists, checked against what this engine can enforce, before
|
|
221
|
+
* anything is installed. Refuses the turn (throws {@link CursorToolListRefusal}
|
|
222
|
+
* or `ToolListResolutionError`, each settling it `failed` with its own
|
|
223
|
+
* sentence) when:
|
|
224
|
+
* - a saved subagent the main agent may start brings its own plugins, hooks,
|
|
225
|
+
* MCP servers or tool lists ({@link subagentBringsOwnMessage}): its definition reaches
|
|
226
|
+
* the SDK as instructions, model and skills, and the hook cannot tell its
|
|
227
|
+
* calls from the main agent's, so they would run unscoped or unhooked;
|
|
228
|
+
* - a plugin subagent the main agent may start carries lists of its own: the hook
|
|
229
|
+
* cannot tell which sub-agent made a call (`preToolUse` carries no
|
|
230
|
+
* sub-agent id), and the SDK's `tools` options restrict only the main
|
|
231
|
+
* loop, so a sub-agent's lists would silently not bind. The native engine
|
|
232
|
+
* enforces them per sub-agent. A sub-agent `Agent(type, …)` excludes is
|
|
233
|
+
* never registered (`subAgentsInScope`) and can never run, so its lists
|
|
234
|
+
* cannot matter and it is not checked. No sub-agent's lists reach the
|
|
235
|
+
* zero-resolution check below either: one with lists never gets past
|
|
236
|
+
* this one;
|
|
237
|
+
* - the agent has lists and the session runs a cloud agent, which takes
|
|
238
|
+
* neither the SDK's `tools` options nor the workspace hook;
|
|
239
|
+
* - the main agent admits `Agent` but limits it to a type list
|
|
240
|
+
* (`Agent(type, …)`): Cursor's built-in sub-agent types start through a
|
|
241
|
+
* `task` call that fires neither `preToolUse` nor `subagentStart` on the
|
|
242
|
+
* 1.0.31 local runtime (live probe, 2026-10-05,
|
|
243
|
+
* `cursor-hook-protocol.live.test.ts`), so nothing could hold one back.
|
|
244
|
+
* The native engine enforces the list; bare `Agent` and an excluded
|
|
245
|
+
* `Agent` need no type check and pass;
|
|
246
|
+
* - a non-empty `tools`, the agent's or the turn's, names nothing this turn
|
|
247
|
+
* has (`checkMainToolListResolution`), as Claude refuses to launch such an
|
|
248
|
+
* agent.
|
|
249
|
+
*/
|
|
250
|
+
export function checkToolScope(input: TurnInput, mode: { agentMode: CursorAgentMode }): void {
|
|
251
|
+
const scope = input.mcp.toolScope;
|
|
252
|
+
const inScope = new Set(subagentNamesInScope(input));
|
|
253
|
+
for (const subagent of input.subagents) {
|
|
254
|
+
const own = subagent.bringsOwn;
|
|
255
|
+
if (inScope.has(subagent.name) && (own.plugins || own.hooks || own.mcpServers || own.lists)) {
|
|
256
|
+
throw new CursorToolListRefusal(subagentBringsOwnMessage(subagent.name));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
const narrowed = input.blueprint.pluginAgents.filter(
|
|
260
|
+
(sa) => inScope.has(sa.name) && (sa.tools.length > 0 || sa.disallowedTools.length > 0),
|
|
261
|
+
);
|
|
262
|
+
if (narrowed.length > 0) {
|
|
263
|
+
const names = narrowed.map((sa) => `'${sa.name}'`).join(", ");
|
|
264
|
+
const one = narrowed.length === 1;
|
|
265
|
+
throw new CursorToolListRefusal(
|
|
266
|
+
`${one ? "Subagent" : "Subagents"} ${names} ${one ? "carries its" : "carry their"} own tool lists ` +
|
|
267
|
+
"(tools / disallowed_tools), which the Cursor engine cannot enforce: it cannot tell a " +
|
|
268
|
+
"subagent's tool call from the main agent's. Run this agent on the native engine, or " +
|
|
269
|
+
`remove the ${one ? "subagent's" : "subagents'"} lists.`,
|
|
270
|
+
);
|
|
271
|
+
}
|
|
272
|
+
if (!scope.restricted) return;
|
|
273
|
+
if (mode.agentMode === "cloud") {
|
|
274
|
+
throw new CursorToolListRefusal(
|
|
275
|
+
`${scope.owner} has tool lists, which a cloud Cursor agent cannot enforce. Run the session locally or on the native engine.`,
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
// Limited to a type list: Agent admitted, yet a type no entry names is not
|
|
279
|
+
// (a bare `Agent` beside a typed one lifts the limit, as in Claude).
|
|
280
|
+
if (scope.allowsClaudeTool("Agent") && !scope.subAgentTypeTable([]).otherTypes) {
|
|
281
|
+
// Each owner whose list types `Agent`: the agent's, the turn's, or both.
|
|
282
|
+
const named = Array.from({ length: scope.depth }, (_, i) => scope.upTo(i + 1))
|
|
283
|
+
.map((layer) => ({
|
|
284
|
+
owner: layer.owner,
|
|
285
|
+
typeLists: layer.ownEntries.tools.filter((e) => e.kind === "builtin" && e.tool === "Agent" && e.agentTypes !== null),
|
|
286
|
+
}))
|
|
287
|
+
.filter((l) => l.typeLists.length > 0)
|
|
288
|
+
.map((l) => `${l.owner} lists ${l.typeLists.map((e) => e.raw).join(", ")}`)
|
|
289
|
+
.join("; ");
|
|
290
|
+
throw new CursorToolListRefusal(
|
|
291
|
+
`${named}, which the Cursor engine cannot enforce: ` +
|
|
292
|
+
"it cannot limit which subagents an agent starts. Run this agent on the native engine, or list Agent without types.",
|
|
293
|
+
);
|
|
294
|
+
}
|
|
295
|
+
checkMainToolListResolution(scope, cursorToolInventory(input.mcp.servers, input.mcp.platformServerSlugs, input.mcp.listing), (line) =>
|
|
296
|
+
console.log(`ExecuteCursor tool lists: execution=${input.executionId}: ${line}`),
|
|
297
|
+
);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* What a Cursor turn has, for the zero-resolution check: every Claude tool the
|
|
302
|
+
* SDK's table covers, and the resolved servers but the platform's own
|
|
303
|
+
* attachments, which no list governs and so no entry can name, exactly as the
|
|
304
|
+
* native engine's `turnToolInventory` counts them.
|
|
305
|
+
*/
|
|
306
|
+
function cursorToolInventory(
|
|
307
|
+
resolved: readonly ResolvedMcpServer[],
|
|
308
|
+
platformServerSlugs: ReadonlySet<string>,
|
|
309
|
+
listing: McpToolListing | undefined,
|
|
310
|
+
): TurnToolInventory {
|
|
311
|
+
const servers = resolved.filter((s) => !platformServerSlugs.has(s.slug));
|
|
312
|
+
const listed = new Map((listing?.listed ?? []).map(({ server, tools }) => [server, tools]));
|
|
313
|
+
return {
|
|
314
|
+
claudeTools: claudeToolsOf(CURSOR_SDK_TOOL_COVERS.keys(), CURSOR_SDK_TOOL_COVERS),
|
|
315
|
+
anyMcp: servers.length > 0,
|
|
316
|
+
hasMcp(slug, tool) {
|
|
317
|
+
const server = servers.find((s) => s.slug === slug);
|
|
318
|
+
if (!server) return false;
|
|
319
|
+
// A server whose tools were not listed cannot prove a tool absent.
|
|
320
|
+
const tools = listed.get(slug);
|
|
321
|
+
return tool === null || tools === undefined || tools.includes(tool);
|
|
322
|
+
},
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/** The agent's hooks on this engine: the evaluator, and the SDK tools the turn hides because a hook would answer for them. */
|
|
327
|
+
export interface CursorHooks {
|
|
328
|
+
readonly evaluator: HookEvaluator;
|
|
329
|
+
readonly hiddenTools: readonly string[];
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* A Cursor turn the workspace's hook files would leave unsafe is refused
|
|
334
|
+
* before any agent exists (`workspace-hook-files.ts` says why): a person's
|
|
335
|
+
* own folder whose `.claude` settings carry hooks, such settings reached
|
|
336
|
+
* through a link, or a gate file that is a link, which the engine would not
|
|
337
|
+
* load. Throws `CursorWorkspaceHooksRefusal`, which settles the turn
|
|
338
|
+
* `failed` on the `actionable` surface.
|
|
339
|
+
*/
|
|
340
|
+
export async function checkWorkspaceHookFiles(input: TurnInput): Promise<void> {
|
|
341
|
+
await refuseLinkedGateFile(input.workspace.primaryDir);
|
|
342
|
+
await refuseOwnFolderHooks(workspaceFolders(input.workspace.dirs, input.workspace.provision.provisionResults));
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* The agent's hooks, built as the native engine builds them
|
|
347
|
+
* (`shared/hooks/setup.ts`) over this engine's views of its calls
|
|
348
|
+
* (`hook-views.ts`); `null` for an agent with none this runner runs. Throws
|
|
349
|
+
* `HookSetupError` when a hook cannot run as written, or when the session
|
|
350
|
+
* runs a cloud agent, which loads no hook of the runner's.
|
|
351
|
+
*/
|
|
352
|
+
export async function prepareHooks(
|
|
353
|
+
input: TurnInput,
|
|
354
|
+
sink: Pick<TurnSink, "stopSignal" | "recordActivity">,
|
|
355
|
+
config: CursorAdapterConfig,
|
|
356
|
+
mode: { agentMode: CursorAgentMode },
|
|
357
|
+
): Promise<CursorHooks | null> {
|
|
358
|
+
const primaryDir = input.workspace.primaryDir;
|
|
359
|
+
const evaluator = await buildHookEvaluator({
|
|
360
|
+
sources: input.hooks.sources,
|
|
361
|
+
runValues: input.values,
|
|
362
|
+
mcpServers: input.mcp.servers,
|
|
363
|
+
views: new CursorEngineToolViews({
|
|
364
|
+
workspaceRoot: primaryDir,
|
|
365
|
+
serverNames: input.hooks.serverNames,
|
|
366
|
+
platformServerSlugs: input.mcp.platformServerSlugs,
|
|
367
|
+
}),
|
|
368
|
+
sessionId: input.sessionId,
|
|
369
|
+
executionId: input.executionId,
|
|
370
|
+
model: input.model.requested,
|
|
371
|
+
workspaceRoot: primaryDir,
|
|
372
|
+
permissionMode: hookPermissionMode(
|
|
373
|
+
input.execution.spec?.interactionMode === InteractionMode.PLAN,
|
|
374
|
+
input.mcp.leases.global,
|
|
375
|
+
),
|
|
376
|
+
leases: input.mcp.leases.hooks,
|
|
377
|
+
signal: sink.stopSignal,
|
|
378
|
+
onActivity: (detail) => sink.recordActivity(detail),
|
|
379
|
+
stallTimeoutMs: config.cursorStreamStallTimeoutMs,
|
|
380
|
+
});
|
|
381
|
+
if (evaluator === null) return null;
|
|
382
|
+
if (mode.agentMode === "cloud") {
|
|
383
|
+
throw new HookSetupError("The agent has hooks, which a cloud Cursor agent cannot run. Run the session locally or on the native engine.");
|
|
384
|
+
}
|
|
385
|
+
if (evaluator.longestTimeoutSeconds > MAX_HOOK_TIMEOUT_SECONDS) {
|
|
386
|
+
throw new HookSetupError(
|
|
387
|
+
`One of the agent's hooks may run for ${evaluator.longestTimeoutSeconds} seconds, longer than the ${MAX_HOOK_TIMEOUT_SECONDS} the Cursor engine allows. ` +
|
|
388
|
+
"Lower its timeout, or run the session on the native engine.",
|
|
389
|
+
);
|
|
390
|
+
}
|
|
391
|
+
const hiddenTools = toolsHiddenByHooks(evaluator.hookSet);
|
|
392
|
+
if (hiddenTools.length > 0) {
|
|
393
|
+
console.log(
|
|
394
|
+
`ExecuteCursor hides ${hiddenTools.join(", ")}: the agent's hooks would answer for them, and Cursor shows them to no hook ` +
|
|
395
|
+
`(execution=${input.executionId})`,
|
|
396
|
+
);
|
|
397
|
+
}
|
|
398
|
+
return { evaluator, hiddenTools };
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* The real path an excluded `Read` may still reach files inside
|
|
403
|
+
* (`HookToolScope.readRoot`): the platform dir's, on a turn whose workspace
|
|
404
|
+
* `.stigmer` is the link to it (`stigmerSymlinkPointsAt`), else "". A turn
|
|
405
|
+
* that mounted no skill and no attachment made no link and has no platform
|
|
406
|
+
* content, so a `.stigmer` there is the repository's own and admits nothing.
|
|
407
|
+
*/
|
|
408
|
+
export async function platformReadRoot(primaryDir: string, platformDir: string): Promise<string> {
|
|
409
|
+
if (!(await stigmerSymlinkPointsAt(primaryDir, platformDir))) return "";
|
|
410
|
+
return realpath(platformDir);
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* The platform dir's real path whatever the link says, for the hidden-skill
|
|
415
|
+
* refusal (`HookToolScope.skillRoot`): a skill an earlier turn mounted stays
|
|
416
|
+
* refused even on a turn that made no link. "" when the dir does not exist,
|
|
417
|
+
* which leaves nothing to refuse.
|
|
418
|
+
*/
|
|
419
|
+
export async function platformRealRoot(platformDir: string): Promise<string> {
|
|
420
|
+
try {
|
|
421
|
+
return await realpath(platformDir);
|
|
422
|
+
} catch {
|
|
423
|
+
return "";
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* What a Cursor agent create or resume that timed out says, by whether the
|
|
429
|
+
* retry on a fresh transport was the last attempt. In the agent host every
|
|
430
|
+
* Cursor call crosses the runner's Cursor lane, so the route it names is the
|
|
431
|
+
* runner's: the platform's proxy, or Cursor directly.
|
|
432
|
+
*/
|
|
433
|
+
export function resolveTimeoutMessage(facts: { readonly resuming: boolean; readonly timeoutSeconds: number; readonly platformProxied: boolean }): (finalAttempt: boolean) => string {
|
|
434
|
+
return (finalAttempt) =>
|
|
435
|
+
`Cursor agent ${facts.resuming ? "resume" : "create"} timed out after ${facts.timeoutSeconds}s ` +
|
|
436
|
+
`(${facts.platformProxied ? "via the Stigmer platform's proxy" : "direct Cursor API connection"}). ` +
|
|
437
|
+
`The transport connection is likely dead. ` +
|
|
438
|
+
(finalAttempt
|
|
439
|
+
? `An automatic retry on a fresh transport connection also timed out. ` +
|
|
440
|
+
`Retry the message later; if this persists, check proxy and network health.`
|
|
441
|
+
: `Resetting the transport and retrying automatically.`);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* The adapter's own read of the adjudicated rows the runtime already turned
|
|
446
|
+
* into verdicts, with what each was asked under: both from the log, as the
|
|
447
|
+
* runtime read it (`input.approvalDecisions`, `input.approvalAsks`); the
|
|
448
|
+
* rows (the asks the runtime seeded from the log, `sink.rows`) give only the
|
|
449
|
+
* set and the calls. Create-vs-resume is the adapter's
|
|
450
|
+
* fact about its ENGINE: a bound agent id (`threadId`, engine-minted) means
|
|
451
|
+
* the Cursor agent already holds this session's conversation, so this turn
|
|
452
|
+
* resumes it — the runtime's `isReinvocation` answers its own question and
|
|
453
|
+
* is not consulted here.
|
|
454
|
+
*/
|
|
455
|
+
export function readAdjudicatedRows(input: TurnInput, rows: Pick<TurnRows, "messages">): AdjudicatedRows {
|
|
456
|
+
const reinvoked = input.threadId !== "";
|
|
457
|
+
const adjudicated = reinvoked
|
|
458
|
+
? reconstructAdjudicatedApprovals(rows.messages, {
|
|
459
|
+
runId: input.executionId,
|
|
460
|
+
decisions: input.approvalDecisions,
|
|
461
|
+
asks: input.approvalAsks,
|
|
462
|
+
})
|
|
463
|
+
: undefined;
|
|
464
|
+
return {
|
|
465
|
+
isReinvocation: reinvoked,
|
|
466
|
+
adjudicatedApprovals: adjudicated?.pendingApprovals ?? [],
|
|
467
|
+
adjudicatedContentDigests: adjudicated?.contentDigests ?? new Map(),
|
|
468
|
+
adjudicatedHookAsks: adjudicated?.hookAsked ?? new Set(),
|
|
469
|
+
};
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* The Cursor SDK config, projected from the runtime's final server list
|
|
474
|
+
* exactly once, plus the MCP env pre-flight (diagnostic, non-blocking).
|
|
475
|
+
*/
|
|
476
|
+
export function projectMcpConfig(input: TurnInput): ReturnType<typeof toCursorMcpConfig> {
|
|
477
|
+
const mcpWarnings = validateMcpServerEnv(input.mcp.servers, declaredServerSlugs(input.blueprint));
|
|
478
|
+
if (mcpWarnings.length > 0) {
|
|
479
|
+
console.warn(
|
|
480
|
+
`ExecuteCursor MCP pre-flight warnings: execution=${input.executionId}\n` +
|
|
481
|
+
mcpWarnings.map((w) => ` - ${w}`).join("\n"),
|
|
482
|
+
);
|
|
483
|
+
}
|
|
484
|
+
return toCursorMcpConfig(input.mcp.servers);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* Install the HITL approval gate BEFORE resolving the agent.
|
|
489
|
+
*
|
|
490
|
+
* The gate's runtime artifacts (hook script, approval-state file, denial
|
|
491
|
+
* ledger) live in the session HITL directory OUTSIDE the workspace; only a
|
|
492
|
+
* minimal, merged, transient .cursor/hooks.json is written into the repo,
|
|
493
|
+
* pointing at the hook script by absolute path. The hook is scoped to this
|
|
494
|
+
* runner's own process so the user's interactive IDE — sharing the same repo
|
|
495
|
+
* hooks.json — is never gated (issue #173). Installing here (rather than
|
|
496
|
+
* after agent create/resume) guarantees the hook is present no matter when
|
|
497
|
+
* the SDK reads hook config, and the adapter's finally restores the repo.
|
|
498
|
+
*
|
|
499
|
+
* On reinvocation, turn the user's approvals into tool-identity grants so
|
|
500
|
+
* the resumed agent's re-attempt (which carries a fresh tool-call id) is
|
|
501
|
+
* allowed through. Exact-applied writes are EXCLUDED from the grants: with no
|
|
502
|
+
* grant, a further write to that file is re-gated (the user sees every change).
|
|
503
|
+
* Capture mode is the runtime's (`harness/capture.ts`: the baseline is pinned
|
|
504
|
+
* before this adapter runs, the candidate captured after it returns); what
|
|
505
|
+
* this gate contributes is the hook's on-disk sidecar of gitignored writes,
|
|
506
|
+
* bound as the runtime's CAS observations.
|
|
507
|
+
*/
|
|
508
|
+
export async function installGate(
|
|
509
|
+
input: TurnInput,
|
|
510
|
+
sink: TurnSink,
|
|
511
|
+
rows: AdjudicatedRows,
|
|
512
|
+
streamState: TurnStreamState,
|
|
513
|
+
hooks: CursorHooks | null,
|
|
514
|
+
): Promise<CursorGate> {
|
|
515
|
+
const { executionId, sessionId, workspace, mcp, approvalDecisions, appliedToolCallIds, artifactStorage } = input;
|
|
516
|
+
const { primaryDir, gitWorkspace, captureMode } = workspace;
|
|
517
|
+
const globalBypass = mcp.leases.global;
|
|
518
|
+
|
|
519
|
+
const hitlDir = await ensureHitlDir(sessionId);
|
|
520
|
+
const grantApprovals = excludeAppliedFromGrants(rows.adjudicatedApprovals, appliedToolCallIds);
|
|
521
|
+
const approvalGrants = approvalDecisions.size > 0
|
|
522
|
+
? buildApprovalGrants(grantApprovals, approvalDecisions, rows.adjudicatedContentDigests)
|
|
523
|
+
: undefined;
|
|
524
|
+
if (approvalGrants && approvalGrants.length > 0 && !globalBypass) {
|
|
525
|
+
emitCursorGrantReceipts(approvalGrants, executionFingerprintKey(executionId), executionId);
|
|
526
|
+
}
|
|
527
|
+
// CAS capture requires artifact storage to persist blobs
|
|
528
|
+
// (captureCandidateToLedger throws without it). In a git tree, captureMode
|
|
529
|
+
// alone governs tracked-file capture (no storage needed) and captureIgnored is
|
|
530
|
+
// the narrower switch (git tree + storage) that also captures gitignored
|
|
531
|
+
// writes. In a non-git workspace ALL capture is CAS, so captureMode already
|
|
532
|
+
// required storage — captureIgnored then equals captureMode. When storage is
|
|
533
|
+
// absent a git tree keeps gating gitignored writes and a non-git workspace
|
|
534
|
+
// falls back to the deny-gate entirely (no regression).
|
|
535
|
+
const captureIgnored = captureMode && !!artifactStorage;
|
|
536
|
+
// Unattended approval mode: approver-less lanes (Slack and WhatsApp
|
|
537
|
+
// channels, chat-link guests) stamp APPROVAL_MODE_UNATTENDED; the hook then records
|
|
538
|
+
// approval denials with the non-pausing "unattended" kind, so the
|
|
539
|
+
// first-denial stop never fires and the turn boundary settles the denied
|
|
540
|
+
// calls as SKIPPED instead of pausing a turn nobody can approve.
|
|
541
|
+
const approvalState = buildApprovalState(
|
|
542
|
+
mcp.mcpDefault,
|
|
543
|
+
globalBypass,
|
|
544
|
+
mcp.leases.categories,
|
|
545
|
+
approvalGrants,
|
|
546
|
+
captureMode,
|
|
547
|
+
captureIgnored,
|
|
548
|
+
gitWorkspace,
|
|
549
|
+
isUnattendedApprovalMode(input.execution),
|
|
550
|
+
// The agent's tool lists, answered for the hook's scope arm, which refuses
|
|
551
|
+
// ahead of every approval bypass. The SDK's `tools` options hide what they
|
|
552
|
+
// can on the main loop (`resolveEngine`); the hook binds every call,
|
|
553
|
+
// sub-agents' and MCP tools' included.
|
|
554
|
+
compileHookToolScope({
|
|
555
|
+
scope: mcp.toolScope,
|
|
556
|
+
servers: mcp.servers,
|
|
557
|
+
listing: mcp.listing,
|
|
558
|
+
platformServerSlugs: mcp.platformServerSlugs,
|
|
559
|
+
readRoot: mcp.toolScope.restricted ? await platformReadRoot(primaryDir, getPlatformDir(sessionId)) : "",
|
|
560
|
+
platformRoot: mcp.toolScope.hidesSkills ? await platformRealRoot(getPlatformDir(sessionId)) : "",
|
|
561
|
+
subAgentTypes: subagentNamesInScope(input),
|
|
562
|
+
}),
|
|
563
|
+
// With the turn's file review off, a built-in write or delete flows
|
|
564
|
+
// unreviewed (the hook's review-off arm); the secret-like block stays.
|
|
565
|
+
workspace.fileReview,
|
|
566
|
+
);
|
|
567
|
+
// The agent's hooks run inside the runner; the gate's script reaches them
|
|
568
|
+
// on a local socket the pointer names (`hook-server.ts`), which closes with
|
|
569
|
+
// the gate. A person's refusal of a call this run binds over a hook's allow.
|
|
570
|
+
const hookServer = hooks === null
|
|
571
|
+
? undefined
|
|
572
|
+
: await startHookServer({
|
|
573
|
+
evaluator: hooks.evaluator,
|
|
574
|
+
captureMode: workspace.captureMode,
|
|
575
|
+
globalBypass,
|
|
576
|
+
refusals: approvalDecisions.size > 0
|
|
577
|
+
? buildPersonRefusals(
|
|
578
|
+
rows.adjudicatedApprovals,
|
|
579
|
+
approvalDecisions,
|
|
580
|
+
rows.adjudicatedContentDigests,
|
|
581
|
+
rows.adjudicatedHookAsks,
|
|
582
|
+
input.approvalDenyMessages,
|
|
583
|
+
)
|
|
584
|
+
: new Map(),
|
|
585
|
+
});
|
|
586
|
+
let hitlGate: HitlGateHandle;
|
|
587
|
+
try {
|
|
588
|
+
hitlGate = await installHitlGate({
|
|
589
|
+
workspaceRoot: primaryDir,
|
|
590
|
+
hitlDir,
|
|
591
|
+
approvalState,
|
|
592
|
+
runnerPid: process.pid,
|
|
593
|
+
...(hookServer !== undefined && hooks !== null
|
|
594
|
+
? {
|
|
595
|
+
hooks: {
|
|
596
|
+
socketPath: hookServer.socketPath,
|
|
597
|
+
token: hookServer.token,
|
|
598
|
+
},
|
|
599
|
+
}
|
|
600
|
+
: {}),
|
|
601
|
+
folders: workspaceFolders(workspace.dirs, workspace.provision.provisionResults),
|
|
602
|
+
});
|
|
603
|
+
} catch (err) {
|
|
604
|
+
await hookServer?.close();
|
|
605
|
+
throw err;
|
|
606
|
+
}
|
|
607
|
+
// Arm the denial watcher as soon as the gate exists. The per-turn ledger
|
|
608
|
+
// reset may flip the flag once before the run starts; the loop's read then
|
|
609
|
+
// sees an empty ledger and clears it — harmless by construction.
|
|
610
|
+
const stopDenialWatcher = watchDenialLedger(hitlDir, () => {
|
|
611
|
+
streamState.denialLedgerDirty = true;
|
|
612
|
+
});
|
|
613
|
+
sink.setupTiming.mark("install_hitl_gate");
|
|
614
|
+
|
|
615
|
+
// What the hook observed touching gitignored (or, in a non-git tree, any)
|
|
616
|
+
// paths this turn — the sidecar it stages under `captureIgnored`. Bound as
|
|
617
|
+
// the runtime's CAS observations; each read is one small directory scan,
|
|
618
|
+
// and the runtime reads it at most once per progress floor and once at the
|
|
619
|
+
// boundary. Bound whenever the gate exists: without storage the runtime
|
|
620
|
+
// ignores it (a gitignored write is deny-gated then, never captured).
|
|
621
|
+
sink.bindCasObservations(() => readSidecarSnapshot(hitlDir));
|
|
622
|
+
|
|
623
|
+
return {
|
|
624
|
+
hitlDir,
|
|
625
|
+
hitlGate,
|
|
626
|
+
approvalGrants,
|
|
627
|
+
...(hookServer !== undefined ? { hookDecisions: hookServer.decisions } : {}),
|
|
628
|
+
stopDenialWatcher,
|
|
629
|
+
removeGate: async () => {
|
|
630
|
+
try {
|
|
631
|
+
await removeHitlGate(hitlGate);
|
|
632
|
+
} finally {
|
|
633
|
+
await hookServer?.close();
|
|
634
|
+
}
|
|
635
|
+
},
|
|
636
|
+
};
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
/**
|
|
640
|
+
* Resolve the Cursor agent (parked, created, resumed, or created after a
|
|
641
|
+
* resume failure), emit the cold-start line, and bind a NEW agent's id
|
|
642
|
+
* through the sink before anything else runs (a rejected bind ends
|
|
643
|
+
* the turn `failed`; the sink rejects and the caller's catch names it).
|
|
644
|
+
*
|
|
645
|
+
* The requested name and the effective tier and thinking mode are the
|
|
646
|
+
* runtime's; validating the NAME against Cursor's catalog is this harness's.
|
|
647
|
+
*/
|
|
648
|
+
export async function resolveEngine(
|
|
649
|
+
input: TurnInput,
|
|
650
|
+
sink: TurnSink,
|
|
651
|
+
config: CursorAdapterConfig,
|
|
652
|
+
mode: { cursorMode: CursorMode; agentMode: CursorAgentMode },
|
|
653
|
+
hooks: CursorHooks | null = null,
|
|
654
|
+
): Promise<CursorEngine> {
|
|
655
|
+
const { executionId, sessionId, threadId, blueprint, workspace, session } = input;
|
|
656
|
+
const { cursorMode, agentMode } = mode;
|
|
657
|
+
const mcpConfig = projectMcpConfig(input);
|
|
658
|
+
|
|
659
|
+
// Phase 5d: Ensure model pricing registry is populated before validation
|
|
660
|
+
await ensurePricingLoaded();
|
|
661
|
+
sink.setupTiming.mark("load_pricing");
|
|
662
|
+
|
|
663
|
+
const requestedModel = input.model.requested;
|
|
664
|
+
const validatedModel = resolveModelId(requestedModel);
|
|
665
|
+
if (validatedModel !== requestedModel) {
|
|
666
|
+
console.log(`ExecuteCursor model resolved: execution=${executionId}, requested="${requestedModel}", using="${validatedModel}"`);
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
await sink.reportProgress("Initializing Cursor agent");
|
|
670
|
+
|
|
671
|
+
// In proxy mode, the SDK's API key is the control-plane credential, read
|
|
672
|
+
// from the ref now (per turn) — the proxy validates it and injects the real
|
|
673
|
+
// Cursor API key server-side. In direct mode, the user's own CURSOR_API_KEY.
|
|
674
|
+
const effectiveApiKey = config.transport
|
|
675
|
+
? config.stigmerTokenRef.current
|
|
676
|
+
: config.cursorApiKey;
|
|
677
|
+
if (!effectiveApiKey || effectiveApiKey === "proxy-managed") {
|
|
678
|
+
const source = config.proxyEndpoint ? "proxy (STIGMER_TOKEN)" : "direct (CURSOR_API_KEY)";
|
|
679
|
+
throw new Error(
|
|
680
|
+
`No Cursor API credential available. Mode=${source}, ` +
|
|
681
|
+
`proxyEndpoint=${config.proxyEndpoint ?? "unset"}, ` +
|
|
682
|
+
`hasStigmerToken=${!!config.stigmerTokenRef.current}`,
|
|
683
|
+
);
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
// Register blueprint sub-agents with the Cursor SDK so the parent can
|
|
687
|
+
// delegate to them by name via the Task tool. Re-supplied on every
|
|
688
|
+
// create/resume (the SDK does not persist agent config across resume).
|
|
689
|
+
// Only the types the agent's `Agent(type, …)` allows are registered.
|
|
690
|
+
const cursorSubAgents = buildCursorSubAgentDefinitions(await subagentsInScope(input));
|
|
691
|
+
if (cursorSubAgents) {
|
|
692
|
+
console.log(
|
|
693
|
+
`ExecuteCursor registering ${Object.keys(cursorSubAgents).length} custom sub-agent(s): ` +
|
|
694
|
+
`execution=${executionId}, names=${Object.keys(cursorSubAgents).join(", ")}`,
|
|
695
|
+
);
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
// Translate the tier + thinking mode into the explicit variant params
|
|
699
|
+
// sent with every create/resume. Never a bare { id }: the catalog's
|
|
700
|
+
// default variant is account-influenced and picks the served variant
|
|
701
|
+
// (#357 fast pricing, #772 thinking).
|
|
702
|
+
const modelParams = await resolveServiceTierParams({
|
|
703
|
+
apiKey: effectiveApiKey,
|
|
704
|
+
modelId: validatedModel,
|
|
705
|
+
tier: input.model.serviceTier,
|
|
706
|
+
thinking: input.model.thinkingMode,
|
|
707
|
+
executionId,
|
|
708
|
+
});
|
|
709
|
+
|
|
710
|
+
const createOptions: CreateAgentOptions | CreateCloudAgentOptions = agentMode === "cloud"
|
|
711
|
+
? {
|
|
712
|
+
apiKey: effectiveApiKey,
|
|
713
|
+
model: validatedModel || undefined,
|
|
714
|
+
modelParams,
|
|
715
|
+
repos: blueprint.cloudRepos,
|
|
716
|
+
sessionId,
|
|
717
|
+
mcpServers: mcpConfig,
|
|
718
|
+
agents: cursorSubAgents,
|
|
719
|
+
}
|
|
720
|
+
: {
|
|
721
|
+
apiKey: effectiveApiKey,
|
|
722
|
+
model: validatedModel,
|
|
723
|
+
modelParams,
|
|
724
|
+
workspaceDirs: [...workspace.dirs],
|
|
725
|
+
sessionId,
|
|
726
|
+
workspaceRootDir: config.workspaceRootDir,
|
|
727
|
+
mcpServers: mcpConfig,
|
|
728
|
+
agents: cursorSubAgents,
|
|
729
|
+
// The main loop's built-ins the lists exclude, hidden by the SDK
|
|
730
|
+
// (`read` and `mcp` never: the hook confines those), and the tools
|
|
731
|
+
// a hook would answer for that Cursor never shows one.
|
|
732
|
+
...withToolsHidden(cursorSdkToolOptions(input.mcp.toolScope, input.mcp.servers.length > 0), hooks?.hiddenTools ?? []),
|
|
733
|
+
};
|
|
734
|
+
|
|
735
|
+
// Agent.create/Agent.resume have no timeout of their own — a degraded
|
|
736
|
+
// transport (dead proxy connection, stale HTTP/2 session) hangs them
|
|
737
|
+
// forever, which the periodic heartbeat would happily keep alive. Each
|
|
738
|
+
// attempt is bounded; on expiry the wrapper resets the proxy transport
|
|
739
|
+
// and retries once, so a stale-session hang recovers without failing the
|
|
740
|
+
// execution. A second expiry propagates a plain Error to the adapter's
|
|
741
|
+
// catch, which settles the turn `failed`.
|
|
742
|
+
const resolveTimeoutSeconds = Math.round(config.agentResolveTimeoutMs / 1000);
|
|
743
|
+
// Close the segment since load_pricing here so the resolve_agent segment
|
|
744
|
+
// below measures the SDK Agent.create/resume call alone, not the
|
|
745
|
+
// progress-report gRPC + options assembly above (issue #209: resolve_agent
|
|
746
|
+
// is the largest user-visible setup segment; this split keeps its
|
|
747
|
+
// historical meaning — the SDK call was already 98%+ of it).
|
|
748
|
+
sink.setupTiming.mark("prepare_agent");
|
|
749
|
+
|
|
750
|
+
// Reuse the previous turn's agent when this session parked one (#215). A
|
|
751
|
+
// checkout hit skips Agent.resume() AND — the real win — keeps the SDK
|
|
752
|
+
// executor lease alive, so agent.send() re-acquires the warm executor
|
|
753
|
+
// instead of re-spawning every stdio MCP server (the measured 2.2–3.2s
|
|
754
|
+
// `send_returned` tax). The fingerprint covers the full acquisition
|
|
755
|
+
// config, so any drift (rotated credential, edited MCP servers, model
|
|
756
|
+
// change) falls through to a fresh resolve.
|
|
757
|
+
const agentFingerprint = computeAgentFingerprint(createOptions as unknown as Record<string, unknown>);
|
|
758
|
+
const parkedAgent = takeCachedAgent(sessionId, agentFingerprint, threadId ?? "");
|
|
759
|
+
let resolution: AgentResolution;
|
|
760
|
+
if (parkedAgent) {
|
|
761
|
+
console.log(`ExecuteCursor reusing parked session agent: execution=${executionId}, session=${sessionId}, agentId=${parkedAgent.agentId}`);
|
|
762
|
+
resolution = {
|
|
763
|
+
agent: parkedAgent as AgentResolution["agent"],
|
|
764
|
+
agentId: parkedAgent.agentId,
|
|
765
|
+
isNew: false,
|
|
766
|
+
resumed: true,
|
|
767
|
+
mode: agentMode,
|
|
768
|
+
// The parked handle IS the live conversation — every consumer of
|
|
769
|
+
// "resumed_successfully" (prompt selection, poisoned-handle
|
|
770
|
+
// recovery eligibility) wants exactly those semantics.
|
|
771
|
+
reason: "resumed_successfully",
|
|
772
|
+
};
|
|
773
|
+
} else {
|
|
774
|
+
resolution = await resolveAgentWithTransportRecovery({
|
|
775
|
+
harnessStateId: threadId,
|
|
776
|
+
createOptions,
|
|
777
|
+
mode: agentMode,
|
|
778
|
+
timeoutMs: config.agentResolveTimeoutMs,
|
|
779
|
+
buildTimeoutMessage: resolveTimeoutMessage({ resuming: !!threadId, timeoutSeconds: resolveTimeoutSeconds, platformProxied: config.proxyEndpoint !== null }),
|
|
780
|
+
resetTransport: closeProxySessions,
|
|
781
|
+
});
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
console.log(
|
|
785
|
+
`ExecuteCursor agent resolved: execution=${executionId}, ` +
|
|
786
|
+
`reason=${resolution.reason}, mode=${resolution.mode}, ` +
|
|
787
|
+
`agentId=${resolution.agentId}, resumed=${resolution.resumed}` +
|
|
788
|
+
(resolution.resumeFailureDetail ? `, failureDetail=${resolution.resumeFailureDetail}` : ""),
|
|
789
|
+
);
|
|
790
|
+
sink.setupTiming.mark("resolve_agent");
|
|
791
|
+
emitTimingLog("execution_setup", {
|
|
792
|
+
execution_id: executionId,
|
|
793
|
+
session_id: sessionId,
|
|
794
|
+
harness: "cursor",
|
|
795
|
+
agent_resumed: resolution.resumed,
|
|
796
|
+
cursor_mode: agentMode,
|
|
797
|
+
mcp_server_count: declaredServerCount(input.mcp.servers),
|
|
798
|
+
skill_count: blueprint.mergedSkillRefs.length,
|
|
799
|
+
workspace_entry_count: session.spec?.workspaceEntries?.length ?? 0,
|
|
800
|
+
}, sink.setupTiming);
|
|
801
|
+
|
|
802
|
+
// A NEW agent's id is bound at once, before anything else runs, so a crash
|
|
803
|
+
// mid-turn still resumes on the next invocation.
|
|
804
|
+
if (resolution.isNew && resolution.agentId) {
|
|
805
|
+
try {
|
|
806
|
+
await sink.bindHarnessState(resolution.agentId);
|
|
807
|
+
} catch (bindErr) {
|
|
808
|
+
// The handle this function just created has no owner yet (the adapter
|
|
809
|
+
// receives the engine only when this returns) and its id was never
|
|
810
|
+
// saved, so no later turn can resume it: close it here, or its executor
|
|
811
|
+
// lease and MCP subprocesses outlive the failed turn with nothing to
|
|
812
|
+
// release them (found by the contract kit in #1070). Then let the
|
|
813
|
+
// rejection settle the turn `failed`, as the contract states.
|
|
814
|
+
try {
|
|
815
|
+
resolution.agent.close();
|
|
816
|
+
} catch {
|
|
817
|
+
/* best effort */
|
|
818
|
+
}
|
|
819
|
+
throw bindErr;
|
|
820
|
+
}
|
|
821
|
+
console.log(`Stored Cursor agentId=${resolution.agentId} as harness_state_id, cursorMode=${CursorMode[cursorMode]} (not stored) on session ${sessionId}`);
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
return {
|
|
825
|
+
agentMode,
|
|
826
|
+
cursorMode,
|
|
827
|
+
requestedModel,
|
|
828
|
+
validatedModel,
|
|
829
|
+
effectiveApiKey,
|
|
830
|
+
createOptions,
|
|
831
|
+
agentFingerprint,
|
|
832
|
+
resolution,
|
|
833
|
+
modelParams,
|
|
834
|
+
usagePricer: new CursorUsagePricer(validatedModel, input.model.serviceTier, modelParams),
|
|
835
|
+
};
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
/** Create a fresh agent for a recovery spine (the same options as the primary resolve). */
|
|
839
|
+
export async function createFreshAgent(engine: CursorEngine): Promise<AgentResolution["agent"]> {
|
|
840
|
+
return engine.agentMode === "cloud"
|
|
841
|
+
? createCloudAgent(engine.createOptions as CreateCloudAgentOptions)
|
|
842
|
+
: createAgent(engine.createOptions as CreateAgentOptions);
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
/**
|
|
846
|
+
* Build the prompt in the shape the resolution calls for (`prompt-builder.ts`
|
|
847
|
+
* `buildPrompt`), with the per-turn directives that ride every send this
|
|
848
|
+
* turn makes (the structured-output contract, the implement-plan directive,
|
|
849
|
+
* the turn's appended system prompt) and the vision payload policy.
|
|
850
|
+
*/
|
|
851
|
+
export async function buildTurnPrompt(input: TurnInput, sink: TurnSink, engine: CursorEngine, rows: AdjudicatedRows): Promise<CursorPrompt> {
|
|
852
|
+
const { executionId, blueprint, standing, attachments, workspace, approvalDecisions, appliedToolCallIds, structuredOutputSchema } = input;
|
|
853
|
+
const spec = input.execution.spec!;
|
|
854
|
+
const interactionMode = spec.interactionMode ?? InteractionMode.UNSPECIFIED;
|
|
855
|
+
const buildFromPlan = spec.buildFromPlan ?? false;
|
|
856
|
+
|
|
857
|
+
const subAgents = await subagentsInScope(input);
|
|
858
|
+
const shared = (): Omit<BuildPromptInput, "resolution" | "recalledMemories" | "turnRecoveryDigest"> => ({
|
|
859
|
+
approvalDecisions,
|
|
860
|
+
approvalDenyMessages: input.approvalDenyMessages,
|
|
861
|
+
instructions: blueprint.instructions,
|
|
862
|
+
userMessage: spec.message,
|
|
863
|
+
skills: input.skills.root,
|
|
864
|
+
channelMessaging: input.mcp.channelMessaging,
|
|
865
|
+
subAgents,
|
|
866
|
+
workspaceDirs: [...workspace.dirs],
|
|
867
|
+
workspaceFileRefs: spec.workspaceFileRefs ?? [],
|
|
868
|
+
attachments: attachments.results,
|
|
869
|
+
vision: visionPromptInfoOf(attachments),
|
|
870
|
+
appendSystemPrompt: input.appendSystemPrompt,
|
|
871
|
+
pendingApprovals: rows.adjudicatedApprovals,
|
|
872
|
+
appliedToolCallIds,
|
|
873
|
+
interactionMode,
|
|
874
|
+
buildFromPlan,
|
|
875
|
+
contextBridge: standing.contextBridge,
|
|
876
|
+
senderIdentity: standing.senderIdentity,
|
|
877
|
+
sessionContext: standing.sessionContext,
|
|
878
|
+
declaredPreferences: standing.declaredPreferences,
|
|
879
|
+
conversationCatchup: standing.conversationCatchup,
|
|
880
|
+
});
|
|
881
|
+
|
|
882
|
+
// The memory selection is the runtime's memoized thunk; whether THIS prompt
|
|
883
|
+
// carries it is decided by how the agent resolved — a successfully resumed
|
|
884
|
+
// agent already holds its standing context. Deliberately NOT decided once
|
|
885
|
+
// here: a mid-send poisoned-handle failure rebuilds on a FRESH agent whose
|
|
886
|
+
// recovery prompt does carry it, so that build site awaits the same thunk.
|
|
887
|
+
const recalledMemories = promptCarriesStandingContext(engine.resolution.reason)
|
|
888
|
+
? await standing.selectRecalledMemories()
|
|
889
|
+
: undefined;
|
|
890
|
+
|
|
891
|
+
// The turn's recorded transcript, read from the run's events in the
|
|
892
|
+
// session's log. Consumed only by the HITL-recovery shape (a HITL
|
|
893
|
+
// reinvocation on a fresh agent, `prompt-builder.ts` `promptShape`), so the
|
|
894
|
+
// log is read only for that shape.
|
|
895
|
+
const recoveryDigest = (reason: AgentResolutionReason): Promise<string | undefined> =>
|
|
896
|
+
isHitlReinvocation(approvalDecisions) && promptCarriesStandingContext(reason)
|
|
897
|
+
? readTurnRecoveryDigest(input.readRunEvents, executionId)
|
|
898
|
+
: Promise.resolve(undefined);
|
|
899
|
+
|
|
900
|
+
const prompt = buildPrompt({
|
|
901
|
+
...shared(),
|
|
902
|
+
resolution: engine.resolution,
|
|
903
|
+
recalledMemories,
|
|
904
|
+
// Reached from HERE when the stored handle failed to resume at
|
|
905
|
+
// resolution time (issue #366 crossing 2).
|
|
906
|
+
turnRecoveryDigest: rows.isReinvocation ? await recoveryDigest(engine.resolution.reason) : undefined,
|
|
907
|
+
});
|
|
908
|
+
|
|
909
|
+
// The structured output instruction is a per-turn directive, so like
|
|
910
|
+
// buildFromPlan it must ride every prompt this turn sends — the primary AND
|
|
911
|
+
// the poisoned-handle recovery rebuild (the transport retry re-sends
|
|
912
|
+
// effectivePrompt and inherits it).
|
|
913
|
+
const effectivePrompt = appendStructuredOutputDirective(prompt, structuredOutputSchema);
|
|
914
|
+
|
|
915
|
+
// The turn's vision payload. The invariant is "images accompany the user's
|
|
916
|
+
// turn message, wherever the conversation does not already hold them"
|
|
917
|
+
// (primarySendCarriesImages): the ONLY send that skips them is a HITL
|
|
918
|
+
// re-invocation of a successfully RESUMED agent, whose native conversation
|
|
919
|
+
// carries the images from the original send. Every send that starts an
|
|
920
|
+
// empty conversation re-delivers them — the ordinary first/fresh-agent
|
|
921
|
+
// primary send, the HITL primary send after a resolution-time resume
|
|
922
|
+
// failure, and both mid-send recovery retries (which always run on a fresh
|
|
923
|
+
// agent, so their sites pass turnImages unconditionally). Attachments
|
|
924
|
+
// re-resolve on every invocation, so the bytes are in hand even on a
|
|
925
|
+
// re-invocation.
|
|
926
|
+
const turnImages = toCursorImages(attachments.visionImages);
|
|
927
|
+
const primarySendImages = primarySendCarriesImages(approvalDecisions, engine.resolution.reason) ? turnImages : [];
|
|
928
|
+
const toSendMessage = (sendPrompt: string, images: { data: string; mimeType: string }[]): string | SDKUserMessage =>
|
|
929
|
+
images.length > 0 ? { text: sendPrompt, images } : sendPrompt;
|
|
930
|
+
|
|
931
|
+
const promptChars = effectivePrompt.length;
|
|
932
|
+
const promptEstimatedTokens = Math.ceil(promptChars / 4);
|
|
933
|
+
console.log(
|
|
934
|
+
`ExecuteCursor prompt built: execution=${executionId}, ` +
|
|
935
|
+
`chars=${promptChars}, estimatedTokens=${promptEstimatedTokens}, ` +
|
|
936
|
+
`resolution=${engine.resolution.reason}, mode=${engine.resolution.mode}`,
|
|
937
|
+
);
|
|
938
|
+
|
|
939
|
+
return {
|
|
940
|
+
effectivePrompt,
|
|
941
|
+
turnImages,
|
|
942
|
+
primarySendImages,
|
|
943
|
+
toSendMessage,
|
|
944
|
+
promptEstimatedTokens,
|
|
945
|
+
// Same per-turn directive rule as buildFromPlan: a structured-output turn
|
|
946
|
+
// keeps its output contract on the rebuilt prompt (the transport retry
|
|
947
|
+
// re-sends effectivePrompt and inherits it without help).
|
|
948
|
+
buildRecoveryPrompt: async (fresh) =>
|
|
949
|
+
appendStructuredOutputDirective(
|
|
950
|
+
buildPrompt({
|
|
951
|
+
...shared(),
|
|
952
|
+
resolution: fresh,
|
|
953
|
+
// Lazily selected: the primary send may have been a resumed-agent
|
|
954
|
+
// shape that carried no memories, but this fresh agent's prompt must.
|
|
955
|
+
recalledMemories: await standing.selectRecalledMemories(),
|
|
956
|
+
// Read fresh: the failed primary stream may have written partial
|
|
957
|
+
// work to the log, and the replacement agent should know it.
|
|
958
|
+
turnRecoveryDigest: await recoveryDigest(fresh.reason),
|
|
959
|
+
}),
|
|
960
|
+
structuredOutputSchema,
|
|
961
|
+
),
|
|
962
|
+
};
|
|
963
|
+
}
|
|
964
|
+
|