@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,883 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hermetic activity driver — run a REAL runner activity end to end with no
|
|
3
|
+
* network, no credentials, and no live Temporal worker, and read back every
|
|
4
|
+
* status it persisted.
|
|
5
|
+
*
|
|
6
|
+
* Why this exists: the runner's activities (`ExecuteCursor`, `ExecuteDeepAgent`)
|
|
7
|
+
* are the wire contract the control plane's workflow keys on — the phases they
|
|
8
|
+
* persist, the copy they write, whether they RETURN a slim status or THROW
|
|
9
|
+
* `CancelledFailure`. Refactoring them safely needs goldens recorded through the
|
|
10
|
+
* activity whole, not through its modules one at a time. The native harness's
|
|
11
|
+
* earlier activity tests ran their activity hermetically by mocking three
|
|
12
|
+
* modules at the boundary with a hand-written `Context` stand-in and a scripted
|
|
13
|
+
* graph object; this module is that convention made reusable, harness-agnostic,
|
|
14
|
+
* and driven by the framework's own activity environment. Both harnesses now
|
|
15
|
+
* run on it (`execute-cursor/__test-utils__/hermetic-cursor.ts`,
|
|
16
|
+
* `execute-deep-agent/__test-utils__/hermetic-deep-agent.ts`), and the earlier
|
|
17
|
+
* native tests were re-homed onto the native driver (#1096), their assertions
|
|
18
|
+
* carried into `execute-deep-agent/__tests__/hermetic/`.
|
|
19
|
+
*
|
|
20
|
+
* What is generic here and what is not: everything an activity touches that is
|
|
21
|
+
* NOT the vendor SDK — the Temporal `Context`, the control-plane client, the
|
|
22
|
+
* runner-owned `~/.stigmer` tree, artifact storage, the model registry, the
|
|
23
|
+
* clock, the worker-shutdown signal — is set up here. The vendor SDK double
|
|
24
|
+
* belongs to the harness (`activities/execute-cursor/__test-utils__/scripted-*.ts`),
|
|
25
|
+
* the same split as `approval-contract/` (runner-wide kit) + each harness's
|
|
26
|
+
* `gateway-substrate.ts`.
|
|
27
|
+
*
|
|
28
|
+
* Three substitutions, and why each is shaped the way it is:
|
|
29
|
+
*
|
|
30
|
+
* 1. `Context.current()` — `MockActivityEnvironment` from `@temporalio/testing`,
|
|
31
|
+
* ONE PER INVOCATION. It gives the activity a real `Context` (real
|
|
32
|
+
* `cancellationSignal`, real `heartbeat()` surfaced as events, real
|
|
33
|
+
* `CancelledFailure` on throw). The native tests' stand-in mints a fresh
|
|
34
|
+
* `AbortController` on every `Context.current()` call and so cannot drive a
|
|
35
|
+
* pause; production hands each attempt one `Context`, and so does this. The
|
|
36
|
+
* environment's documented caveat — once cancelled it stays cancelled — is
|
|
37
|
+
* why it is per invocation and never shared.
|
|
38
|
+
*
|
|
39
|
+
* 2. `StigmerClient` — the test file mocks the module (`vi.mock` is hoisted and
|
|
40
|
+
* must live in the test file; see {@link hermeticStigmerClientModule}) and
|
|
41
|
+
* the constructor hands back whatever client {@link bindHermeticClient} bound
|
|
42
|
+
* for the current run. The client is `mockStigmerClient` over an
|
|
43
|
+
* {@link ExecutionRecord}: `updateStatus` writes back into the record the way
|
|
44
|
+
* the server would, and `appendSessionEvents` into its modelled log, so a
|
|
45
|
+
* REINVOCATION (`threadId` set) reads what the first invocation wrote —
|
|
46
|
+
* the resume path runs on real data, not on a hand-built status. The
|
|
47
|
+
* runner's rows never cross the wire; the record reads them where the
|
|
48
|
+
* emitter does ({@link ExecutionRecord.persistedRows}), so a test asserts
|
|
49
|
+
* on the rows each write was made from.
|
|
50
|
+
*
|
|
51
|
+
* 3. The environment — a temp `HOME` (the runner-owned `~/.stigmer` tree,
|
|
52
|
+
* `platform-dir.ts` reads `process.env.HOME`), a temp workspace root, local
|
|
53
|
+
* artifact storage in a temp dir, and the HITL fingerprint secret pinned by
|
|
54
|
+
* env var (`fingerprint-secret.ts` falls back to `randomBytes` — the ONE
|
|
55
|
+
* source of randomness on the activity path — and memoizes on first call, so
|
|
56
|
+
* the pin must precede the first invocation in the process).
|
|
57
|
+
*
|
|
58
|
+
* Determinism: the clock is faked for `Date` ONLY (`vi.useFakeTimers({ toFake:
|
|
59
|
+
* ["Date"] })`) and TICKS — the harness double advances it a fixed quantum per
|
|
60
|
+
* script step through {@link ScriptedClock}. Frozen time would make
|
|
61
|
+
* the streaming scheduler's cadence (`Date.now()` against its last send) never
|
|
62
|
+
* elapse and silently skip the mid-stream persist path production always runs;
|
|
63
|
+
* a ticking clock runs the same path and lands on the same instants every run.
|
|
64
|
+
* Timers stay real so the periodic heartbeat and the stall watchdog behave.
|
|
65
|
+
*
|
|
66
|
+
* The live posture (#1097's live-run gate): a `CURSOR_API_KEY`-gated live
|
|
67
|
+
* instrument keeps all three substitutions above — the real `Context`, the
|
|
68
|
+
* record behind the client, the temp environment — and drops only the
|
|
69
|
+
* harness's SDK double, so the REAL activity runs against the REAL vendor SDK
|
|
70
|
+
* with everything the activity persists still readable from the record.
|
|
71
|
+
* Two things differ from a hermetic run and both are the caller's explicit
|
|
72
|
+
* choice: no `ScriptedClock` is installed (the real SDK is not ticked, and a
|
|
73
|
+
* frozen clock would skip the persist cadence production runs), and the
|
|
74
|
+
* environment may name an `eventRecordingDir` so the run leaves a recording.
|
|
75
|
+
* The harness's driver names the entry (`beginLiveCursorScenario`).
|
|
76
|
+
*
|
|
77
|
+
* Not in scope: this module never edits a production module and never
|
|
78
|
+
* normalizes output. If a golden is not byte-stable, the volatile source is
|
|
79
|
+
* controlled at its origin or the surprise is escalated — never redacted here.
|
|
80
|
+
*/
|
|
81
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
82
|
+
import { tmpdir } from "node:os";
|
|
83
|
+
import { join } from "node:path";
|
|
84
|
+
import { vi } from "vitest";
|
|
85
|
+
import { MockActivityEnvironment } from "@temporalio/testing";
|
|
86
|
+
import { CancelledFailure } from "@temporalio/activity";
|
|
87
|
+
import { Code, ConnectError } from "@connectrpc/connect";
|
|
88
|
+
import { clone, create, equals, toJson } from "@bufbuild/protobuf";
|
|
89
|
+
import { RunSchema, RunStatusSchema, } from "@stigmer/apis/ai/stigmer/agentic/run/v1/api_pb";
|
|
90
|
+
import { TurnRowsSchema } from "../gen/turn/ai/stigmer/runner/turn/v1/rows_pb.js";
|
|
91
|
+
import { RunControlSignal, RunPhase, } from "@stigmer/apis/ai/stigmer/agentic/run/v1/enum_pb";
|
|
92
|
+
import { RunSpecSchema } from "@stigmer/apis/ai/stigmer/agentic/run/v1/spec_pb";
|
|
93
|
+
import { UpdateStatusResponseSchema } from "@stigmer/apis/ai/stigmer/agentic/run/v1/io_pb";
|
|
94
|
+
import { SessionEventSchema } from "@stigmer/apis/ai/stigmer/agentic/session/v1/event_pb";
|
|
95
|
+
import { AppendSessionEventsResponseSchema, BindHarnessStateResponseSchema, SessionEventPreviewSchema, } from "@stigmer/apis/ai/stigmer/agentic/session/v1/io_pb";
|
|
96
|
+
import { AgentVersionEntrySchema } from "@stigmer/apis/ai/stigmer/agentic/agent/v1/version_pb";
|
|
97
|
+
import { ExecutionValuesSchema } from "@stigmer/apis/ai/stigmer/agentic/vault/v1/values_pb";
|
|
98
|
+
import { eventTypeOf } from "@stigmer/session-log";
|
|
99
|
+
import { registerWorkerShutdownSignal, signalWorkerShutdown, unregisterWorkerShutdownSignal, } from "../shared/worker-shutdown.js";
|
|
100
|
+
import { SessionEventEmitter } from "../harness/events/emitter.js";
|
|
101
|
+
import { answerEventsFor } from "./approval-log.js";
|
|
102
|
+
import { decideCapturedFileChanges, upsertFileChanges } from "./file-review-projection.js";
|
|
103
|
+
import { mockStigmerClient } from "./mock-client.js";
|
|
104
|
+
import { ToolCallStatus } from "../gen/turn/ai/stigmer/runner/turn/v1/enum_pb.js";
|
|
105
|
+
// ---------------------------------------------------------------------------
|
|
106
|
+
// Goldens: a write's status and the rows it was made from, one file each
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
/** A status write as its golden holds it (`<name>.status.json`): the status fields alone. */
|
|
109
|
+
export function statusGolden(status) {
|
|
110
|
+
return JSON.stringify(toJson(RunStatusSchema, status), null, 2) + "\n";
|
|
111
|
+
}
|
|
112
|
+
/** The rows a write was made from, as their golden holds them (`<name>.rows.json`). */
|
|
113
|
+
export function rowsGolden(rows) {
|
|
114
|
+
return JSON.stringify(toJson(TurnRowsSchema, rows), null, 2) + "\n";
|
|
115
|
+
}
|
|
116
|
+
/** The rows golden beside a status golden: `<name>.status.json` becomes `<name>.rows.json`. */
|
|
117
|
+
export function rowsGoldenPath(statusGoldenPath) {
|
|
118
|
+
if (!statusGoldenPath.endsWith(".status.json"))
|
|
119
|
+
throw new Error(`rowsGoldenPath: '${statusGoldenPath}' is not a status golden (test bug)`);
|
|
120
|
+
return statusGoldenPath.slice(0, -".status.json".length) + ".rows.json";
|
|
121
|
+
}
|
|
122
|
+
// ---------------------------------------------------------------------------
|
|
123
|
+
// The rows tap: the runner's rows as each write was made from them
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
/**
|
|
126
|
+
* The rows the session event emitter read at each run's latest write, by run
|
|
127
|
+
* id, read by the record's status writes of that run. The rows are the
|
|
128
|
+
* runner's own and never cross the wire, so this is where a test sees them:
|
|
129
|
+
* the persist chokepoint hands them to the emitter's `flush` right before the
|
|
130
|
+
* status write (`harness/persist-chokepoint.ts`), and the tap copies them
|
|
131
|
+
* there. Two writes in flight at once (an adapter's unawaited request and the
|
|
132
|
+
* runtime's terminal write) both read the newer rows. Installed once, for
|
|
133
|
+
* every record of the process; a new record of a run starts with none.
|
|
134
|
+
*/
|
|
135
|
+
const flushedRows = new Map();
|
|
136
|
+
const realFlush = SessionEventEmitter.prototype.flush;
|
|
137
|
+
SessionEventEmitter.prototype.flush = function flushThroughTap(rows, opts) {
|
|
138
|
+
const runId = this.deps.runId;
|
|
139
|
+
flushedRows.set(runId, clone(TurnRowsSchema, rows));
|
|
140
|
+
return realFlush.call(this, rows, opts);
|
|
141
|
+
};
|
|
142
|
+
/** The rows a run's latest write was made from; `undefined` when none flushed for this record yet. */
|
|
143
|
+
function takeFlushedRows(runId) {
|
|
144
|
+
return flushedRows.get(runId);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* An in-memory stand-in for the server's execution row, with the THREE merge
|
|
148
|
+
* rules and the ONE control lever the activity depends on, and no others:
|
|
149
|
+
*
|
|
150
|
+
* - A status carrying a setup label is a setup-progress report
|
|
151
|
+
* (`reportSetupProgress`): the server keeps `setup_progress` and leaves the
|
|
152
|
+
* phase alone. Modelled as: record the label, change nothing else.
|
|
153
|
+
* - Any other status replaces the held status wholesale, its phase kept when
|
|
154
|
+
* the write carries none, and its file record upserted by change set id
|
|
155
|
+
* onto the held one (a person's answer is the test answering on the
|
|
156
|
+
* record between invocations, on the log only, as the server's answer
|
|
157
|
+
* core writes it: `decideWaitingToolCalls`).
|
|
158
|
+
* - The fields the server stamps at create and the runner never sends — the
|
|
159
|
+
* agent and version the turn runs, the declared preferences and recalled
|
|
160
|
+
* memories — survive every runner write, as they do in the server's
|
|
161
|
+
* field-by-field merge, so a reinvocation reads the same stamp.
|
|
162
|
+
* - Every `UpdateStatus` answers a control signal ({@link ExecutionRecordInput.controlSignal});
|
|
163
|
+
* the server's STOP is the one instruction that travels back to the runner
|
|
164
|
+
* on this channel, and it is a server decision, so it is modelled here and
|
|
165
|
+
* not by the test hand-writing the client.
|
|
166
|
+
*
|
|
167
|
+
* Every persisted status is also kept in order (`persisted`) so a test can
|
|
168
|
+
* assert the phase sequence the activity wrote, independent of the final state.
|
|
169
|
+
*
|
|
170
|
+
* The session's event log is modelled too, with the server's append rules
|
|
171
|
+
* that the runner's emitter depends on: an id the log holds with the same
|
|
172
|
+
* event is accepted again without a second entry, the same id with another
|
|
173
|
+
* event is ALREADY_EXISTS, and a run whose held phase is finished takes no
|
|
174
|
+
* more events (FAILED_PRECONDITION), which is what proves every event of a
|
|
175
|
+
* turn lands before its terminal status. `listRunSessionEvents` answers
|
|
176
|
+
* from it, so a reinvocation reads back what the first wrote, and
|
|
177
|
+
* `listSessionEvents` pages it newest first by type, the read a turn's start
|
|
178
|
+
* makes for the undos still owed.
|
|
179
|
+
*
|
|
180
|
+
* File review is modelled the way the server's decision core does it:
|
|
181
|
+
* {@link decideCapturedFileChanges} decides the captured files on the held
|
|
182
|
+
* file record and writes each decision into the log as
|
|
183
|
+
* `stigmer.file_review.decided`; {@link startReconcileTurn} creates the
|
|
184
|
+
* reconcile turn an Undo on a finished run starts, a second run of the same
|
|
185
|
+
* session (`RunSpec.reconcile_file_review`, no message) that the client
|
|
186
|
+
* answers by its id.
|
|
187
|
+
*/
|
|
188
|
+
/** The log's type name of an event (`event.proto`'s `event_type`, read through `@stigmer/session-log`'s catalog), what a typed read filters by. */
|
|
189
|
+
function logTypeOf(event) {
|
|
190
|
+
return event.event.case === undefined ? "" : eventTypeOf(event);
|
|
191
|
+
}
|
|
192
|
+
/** The phases the server treats as finished: an append for such a run is refused. */
|
|
193
|
+
const TERMINAL_PHASES = new Set([
|
|
194
|
+
RunPhase.RUN_COMPLETED,
|
|
195
|
+
RunPhase.RUN_FAILED,
|
|
196
|
+
RunPhase.RUN_CANCELLED,
|
|
197
|
+
RunPhase.RUN_TERMINATED,
|
|
198
|
+
]);
|
|
199
|
+
export class ExecutionRecord {
|
|
200
|
+
execution;
|
|
201
|
+
session;
|
|
202
|
+
agent;
|
|
203
|
+
controlSignal;
|
|
204
|
+
skills;
|
|
205
|
+
subagents;
|
|
206
|
+
/** Every `updateStatus` payload, in order, snapshotted at write time. */
|
|
207
|
+
persisted = [];
|
|
208
|
+
/**
|
|
209
|
+
* The rows each `updateStatus` payload was made from, one per entry of
|
|
210
|
+
* {@link persisted} (an empty `TurnRows` for a write that read none, a
|
|
211
|
+
* setup-progress report).
|
|
212
|
+
*/
|
|
213
|
+
persistedRows = [];
|
|
214
|
+
/** Fired after every full-status `applyStatusUpdate`; {@link whenToolCallsSettled} subscribes here. */
|
|
215
|
+
persistListeners = new Set();
|
|
216
|
+
/** Setup-progress labels reported before the stream started, in order. */
|
|
217
|
+
setupProgress = [];
|
|
218
|
+
/** Every `bindHarnessState` call, in order (the `harness_state_id` write-back). */
|
|
219
|
+
harnessBinds = [];
|
|
220
|
+
/** The session's event log as the runner appended it, in order (one entry per distinct id). */
|
|
221
|
+
sessionEvents = [];
|
|
222
|
+
/** Every preview the runner sent, in order. */
|
|
223
|
+
sessionPreviews = [];
|
|
224
|
+
/** Ids the runner sent again although the log held them: a resumed turn that forgot what it wrote. */
|
|
225
|
+
resentEventIds = [];
|
|
226
|
+
/** Every append the log refused, by its reason: a runner defect the emitter would drop silently. */
|
|
227
|
+
refusedAppends = [];
|
|
228
|
+
/** The reconcile turn {@link startReconcileTurn} created, once it has; its status is its own. */
|
|
229
|
+
reconcileRun;
|
|
230
|
+
/** Every status the reconcile turn's runner wrote, in order. */
|
|
231
|
+
reconcilePersisted = [];
|
|
232
|
+
/** The rows each reconcile turn write was made from, one per entry of {@link reconcilePersisted}. */
|
|
233
|
+
reconcilePersistedRows = [];
|
|
234
|
+
constructor(input) {
|
|
235
|
+
this.execution = clone(RunSchema, input.execution);
|
|
236
|
+
flushedRows.delete(this.executionId);
|
|
237
|
+
this.session = input.session;
|
|
238
|
+
this.agent = input.agent;
|
|
239
|
+
this.controlSignal = input.controlSignal ?? (() => RunControlSignal.UNSPECIFIED);
|
|
240
|
+
this.skills = input.skills ?? [];
|
|
241
|
+
this.subagents = input.subagents ?? [];
|
|
242
|
+
}
|
|
243
|
+
get executionId() {
|
|
244
|
+
return this.execution.metadata?.id ?? "";
|
|
245
|
+
}
|
|
246
|
+
/** The status the server would currently hold (what `getExecution` returns). */
|
|
247
|
+
get status() {
|
|
248
|
+
return this.execution.status;
|
|
249
|
+
}
|
|
250
|
+
/** The last FULL status written (phase set), or undefined if none yet. */
|
|
251
|
+
get lastFullStatus() {
|
|
252
|
+
for (let i = this.persisted.length - 1; i >= 0; i--) {
|
|
253
|
+
const s = this.persisted[i];
|
|
254
|
+
if (s.phase !== RunPhase.RUN_PHASE_UNSPECIFIED)
|
|
255
|
+
return s;
|
|
256
|
+
}
|
|
257
|
+
return undefined;
|
|
258
|
+
}
|
|
259
|
+
/** The rows the last FULL status was made from, or undefined if none yet. */
|
|
260
|
+
get lastFullRows() {
|
|
261
|
+
for (let i = this.persisted.length - 1; i >= 0; i--) {
|
|
262
|
+
if (this.persisted[i].phase !== RunPhase.RUN_PHASE_UNSPECIFIED)
|
|
263
|
+
return this.persistedRows[i];
|
|
264
|
+
}
|
|
265
|
+
return undefined;
|
|
266
|
+
}
|
|
267
|
+
/** The rows the latest write that read any was made from: the runner's rows as the log last saw them. */
|
|
268
|
+
get rows() {
|
|
269
|
+
for (let i = this.persistedRows.length - 1; i >= 0; i--) {
|
|
270
|
+
if (this.persisted[i].setupProgress?.currentPhase)
|
|
271
|
+
continue;
|
|
272
|
+
return this.persistedRows[i];
|
|
273
|
+
}
|
|
274
|
+
return undefined;
|
|
275
|
+
}
|
|
276
|
+
/** The rows `status` (an entry of {@link persisted} or {@link reconcilePersisted}) was made from. */
|
|
277
|
+
rowsOf(status) {
|
|
278
|
+
const index = this.persisted.indexOf(status);
|
|
279
|
+
if (index >= 0)
|
|
280
|
+
return this.persistedRows[index];
|
|
281
|
+
const reconcileIndex = this.reconcilePersisted.indexOf(status);
|
|
282
|
+
if (reconcileIndex >= 0)
|
|
283
|
+
return this.reconcilePersistedRows[reconcileIndex];
|
|
284
|
+
throw new Error("ExecutionRecord.rowsOf: not a persisted status (test bug)");
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* The ORDERED, DISTINCT phases the activity persisted — the deterministic
|
|
288
|
+
* shape of the persist cadence. The COUNT of persists depends on the
|
|
289
|
+
* debounce timer and is deliberately not exposed as an assertion surface.
|
|
290
|
+
*/
|
|
291
|
+
get persistedPhases() {
|
|
292
|
+
const out = [];
|
|
293
|
+
for (const s of this.persisted) {
|
|
294
|
+
if (s.phase === RunPhase.RUN_PHASE_UNSPECIFIED)
|
|
295
|
+
continue;
|
|
296
|
+
if (out[out.length - 1] !== s.phase)
|
|
297
|
+
out.push(s.phase);
|
|
298
|
+
}
|
|
299
|
+
return out;
|
|
300
|
+
}
|
|
301
|
+
/** Every tool call on the latest rows (top-level messages), in order. */
|
|
302
|
+
toolCalls() {
|
|
303
|
+
return this.rows?.messages.flatMap((m) => m.toolCalls) ?? [];
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Resolves once every one of `ids` is a SETTLED row (not RUNNING) in a status
|
|
307
|
+
* the activity has persisted — root messages and every sub-agent's alike.
|
|
308
|
+
* Resolves at once for an empty list or when they already are.
|
|
309
|
+
*
|
|
310
|
+
* This is the barrier a real model gives the runtime for free and a
|
|
311
|
+
* scripted one does not: a model that takes 300 ms to answer never starts
|
|
312
|
+
* its next turn before the loop has folded and persisted the tool results
|
|
313
|
+
* it is answering, while `ScriptedModel` answers instantly and LangGraph's
|
|
314
|
+
* producer can run a whole turn ahead of the consumer while the consumer
|
|
315
|
+
* awaits one mid-stream persist (on a git workspace that persist shells out
|
|
316
|
+
* for `file_change_progress`). The stamps the consumer writes at apply time
|
|
317
|
+
* then land on either side of the scripted clock's next tick depending on
|
|
318
|
+
* I/O timing — a golden that flips between `:01` and `:02` on the day. The
|
|
319
|
+
* driver awaits this before it ticks (`hermetic-deep-agent.ts`), so every
|
|
320
|
+
* stamp of turn N precedes turn N+1's instant, run after run.
|
|
321
|
+
*
|
|
322
|
+
* Why "settled" and not "seen": the row's `completedAt` is stamped when the
|
|
323
|
+
* tool's end event is applied, and the producer calls the next model turn
|
|
324
|
+
* right after emitting that event, so a barrier on the row merely existing
|
|
325
|
+
* would still race the completion stamp. The persist that carries the
|
|
326
|
+
* settled row always exists: a tool's finish forces one (the builder's
|
|
327
|
+
* force flag), and a turn followed by another turn always has a tool call.
|
|
328
|
+
*
|
|
329
|
+
* Bounded by real time (timers are real under the scripted clock): a
|
|
330
|
+
* scenario that breaks the fact above — a persist that never carries the
|
|
331
|
+
* row — fails naming the ids still open, never hangs.
|
|
332
|
+
*/
|
|
333
|
+
whenToolCallsSettled(ids, timeoutMs = 10_000) {
|
|
334
|
+
const unsettled = () => {
|
|
335
|
+
const settled = this.settledToolCallIds();
|
|
336
|
+
return ids.filter((id) => !settled.has(id));
|
|
337
|
+
};
|
|
338
|
+
if (unsettled().length === 0)
|
|
339
|
+
return Promise.resolve();
|
|
340
|
+
return new Promise((resolve, reject) => {
|
|
341
|
+
const timer = setTimeout(() => {
|
|
342
|
+
this.persistListeners.delete(check);
|
|
343
|
+
reject(new Error(`ExecutionRecord: tool call(s) ${unsettled().join(", ")} never settled in a persisted status ` +
|
|
344
|
+
`within ${timeoutMs} ms (${this.persisted.length} persists seen). A model turn was asked to ` +
|
|
345
|
+
`wait for the results it answers; the loop never persisted them — a scenario or runtime bug.`));
|
|
346
|
+
}, timeoutMs);
|
|
347
|
+
const check = () => {
|
|
348
|
+
if (unsettled().length > 0)
|
|
349
|
+
return;
|
|
350
|
+
clearTimeout(timer);
|
|
351
|
+
this.persistListeners.delete(check);
|
|
352
|
+
resolve();
|
|
353
|
+
};
|
|
354
|
+
this.persistListeners.add(check);
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Resolves once every one of `ids` is a row, in any state, in a status the
|
|
359
|
+
* activity has persisted. The barrier {@link whenToolCallsSettled} gives
|
|
360
|
+
* a turn that answers results, for a turn that runs beside a call still
|
|
361
|
+
* running (a sub-agent's first turn, inside its parent's call); bounded
|
|
362
|
+
* the same way.
|
|
363
|
+
*/
|
|
364
|
+
whenToolCallsSeen(ids, timeoutMs = 10_000) {
|
|
365
|
+
const unseen = () => {
|
|
366
|
+
const seen = new Set(this.toolCalls().map((tc) => tc.id));
|
|
367
|
+
return ids.filter((id) => !seen.has(id));
|
|
368
|
+
};
|
|
369
|
+
if (unseen().length === 0)
|
|
370
|
+
return Promise.resolve();
|
|
371
|
+
return new Promise((resolve, reject) => {
|
|
372
|
+
const timer = setTimeout(() => {
|
|
373
|
+
this.persistListeners.delete(check);
|
|
374
|
+
reject(new Error(`ExecutionRecord: tool call(s) ${unseen().join(", ")} never appeared in a persisted status within ${timeoutMs} ms`));
|
|
375
|
+
}, timeoutMs);
|
|
376
|
+
const check = () => {
|
|
377
|
+
if (unseen().length > 0)
|
|
378
|
+
return;
|
|
379
|
+
clearTimeout(timer);
|
|
380
|
+
this.persistListeners.delete(check);
|
|
381
|
+
resolve();
|
|
382
|
+
};
|
|
383
|
+
this.persistListeners.add(check);
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
/** The ids of every row not RUNNING in the latest rows, across the root and every sub-agent transcript. */
|
|
387
|
+
settledToolCallIds() {
|
|
388
|
+
const out = new Set();
|
|
389
|
+
const rows = this.rows;
|
|
390
|
+
if (!rows)
|
|
391
|
+
return out;
|
|
392
|
+
const transcripts = [rows.messages, ...rows.subAgentRuns.map((s) => s.messages)];
|
|
393
|
+
for (const messages of transcripts) {
|
|
394
|
+
for (const message of messages) {
|
|
395
|
+
for (const tc of message.toolCalls) {
|
|
396
|
+
if (tc.status !== ToolCallStatus.TOOL_CALL_RUNNING)
|
|
397
|
+
out.add(tc.id);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
return out;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* What a turn recorded on an older runner left on the server, restored in
|
|
405
|
+
* one act: the events its session event emitter wrote for its rows into
|
|
406
|
+
* the log (`harness/events/emitter.ts`, the terminal write), then the
|
|
407
|
+
* status it persisted. A resumed turn learns from the log that the run's
|
|
408
|
+
* engine already worked (`turn-context.ts` `runWroteEngineEvents`) and
|
|
409
|
+
* which calls it asked and still waits on (`transcript/resume-seed.ts`), so a status
|
|
410
|
+
* restored without its events would read as a first turn.
|
|
411
|
+
*/
|
|
412
|
+
async restorePausedTurn(rows, status) {
|
|
413
|
+
const emitter = new SessionEventEmitter({
|
|
414
|
+
client: this.client(),
|
|
415
|
+
runId: this.executionId,
|
|
416
|
+
credential: async () => undefined,
|
|
417
|
+
delay: async () => { },
|
|
418
|
+
});
|
|
419
|
+
await emitter.begin({ sessionId: this.session.metadata?.id ?? "", resumed: false, rows: create(TurnRowsSchema) });
|
|
420
|
+
await emitter.flush(rows, { final: true });
|
|
421
|
+
this.applyStatusUpdate(status);
|
|
422
|
+
}
|
|
423
|
+
/** The tool calls currently paused for a decision. */
|
|
424
|
+
waitingToolCalls() {
|
|
425
|
+
return this.toolCalls().filter((tc) => tc.status === ToolCallStatus.TOOL_CALL_WAITING_APPROVAL);
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* What the server's answer core does when a person answers the calls that
|
|
429
|
+
* asked (`confirmToolUse`, `grantPermission`): append the answer to the
|
|
430
|
+
* session's log (`approval-log.ts`). Nothing is stamped on any row: the
|
|
431
|
+
* resumed turn seeds its asks from the log and copies each answer onto its
|
|
432
|
+
* row (`harness/transcript/resume-seed.ts`, `harness/approval-answers.ts`), so a kit
|
|
433
|
+
* that answered on the row would prove nothing. This is the ONE place a
|
|
434
|
+
* test answers, and the call stays waiting until the resumed turn runs the
|
|
435
|
+
* tool, exactly as in production. `onlyId` answers one of several calls
|
|
436
|
+
* paused in the same round and leaves the rest waiting, as a person
|
|
437
|
+
* answering them one at a time does; a deny may carry `denyMessage`, the
|
|
438
|
+
* reason the model reads. `_decidedAt` is the instant a person answered,
|
|
439
|
+
* which no event carries.
|
|
440
|
+
*/
|
|
441
|
+
decideWaitingToolCalls(action, _decidedAt, onlyId, denyMessage = "") {
|
|
442
|
+
const waiting = this.waitingToolCalls().filter((tc) => onlyId === undefined || tc.id === onlyId);
|
|
443
|
+
for (const tc of waiting) {
|
|
444
|
+
this.sessionEvents.push(...answerEventsFor({ sessionId: this.session.metadata?.id ?? "", runId: this.executionId }, tc, action, denyMessage));
|
|
445
|
+
}
|
|
446
|
+
return waiting.length;
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* What the server's decision core does between invocations: every change
|
|
450
|
+
* of every captured set on the held file record the log holds no decision
|
|
451
|
+
* for gets a per-file verdict, written into the log as
|
|
452
|
+
* `stigmer.file_review.decided` (`file-review-projection.ts`). The runner
|
|
453
|
+
* authors the record; the decisions are the log's — so this is the ONE
|
|
454
|
+
* place a test writes them. Returns how many decisions were written.
|
|
455
|
+
*/
|
|
456
|
+
decideCapturedFileChanges(verdicts, _decidedAt) {
|
|
457
|
+
if (!this.execution.status)
|
|
458
|
+
throw new Error("ExecutionRecord: no status to decide file changes on (test bug)");
|
|
459
|
+
const decided = new Set(this.sessionEvents.flatMap((e) => (e.event.case === "stigmerFileReviewDecided" ? [e.event.value.fileChangeId] : [])));
|
|
460
|
+
const decisions = decideCapturedFileChanges(this.execution.status.fileChanges, decided, verdicts);
|
|
461
|
+
for (const decision of decisions) {
|
|
462
|
+
const id = `sevt_fd_${this.sessionEvents.length}`;
|
|
463
|
+
this.sessionEvents.push(create(SessionEventSchema, {
|
|
464
|
+
sessionId: this.session.metadata?.id ?? "",
|
|
465
|
+
runId: this.executionId,
|
|
466
|
+
event: {
|
|
467
|
+
case: "stigmerFileReviewDecided",
|
|
468
|
+
value: {
|
|
469
|
+
id,
|
|
470
|
+
changeSetId: decision.changeSetId,
|
|
471
|
+
scope: "file",
|
|
472
|
+
fileChangeId: decision.fileChangeId,
|
|
473
|
+
action: decision.action,
|
|
474
|
+
expectedDigest: decision.expectedDigest,
|
|
475
|
+
origin: "person",
|
|
476
|
+
},
|
|
477
|
+
},
|
|
478
|
+
}));
|
|
479
|
+
}
|
|
480
|
+
return decisions.length;
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* The reconcile turn the decision core starts for an Undo on a finished
|
|
484
|
+
* run: a second run of this session with `reconcile_file_review` set and no
|
|
485
|
+
* message, created as the server's create path would (in progress, nothing
|
|
486
|
+
* on its status). The client answers it by its id from then on. Returns its
|
|
487
|
+
* id.
|
|
488
|
+
*/
|
|
489
|
+
startReconcileTurn(runId = `${this.executionId}-reconcile`) {
|
|
490
|
+
flushedRows.delete(runId);
|
|
491
|
+
const spec = clone(RunSpecSchema, this.execution.spec ?? create(RunSpecSchema));
|
|
492
|
+
spec.message = "";
|
|
493
|
+
spec.reconcileFileReview = true;
|
|
494
|
+
this.reconcileRun = create(RunSchema, {
|
|
495
|
+
metadata: { org: this.execution.metadata?.org ?? "", id: runId, name: runId },
|
|
496
|
+
spec,
|
|
497
|
+
status: { phase: RunPhase.RUN_IN_PROGRESS },
|
|
498
|
+
});
|
|
499
|
+
return runId;
|
|
500
|
+
}
|
|
501
|
+
/** The reconcile turn's last full status (phase set), or undefined if it wrote none. */
|
|
502
|
+
get reconcileFinalStatus() {
|
|
503
|
+
return this.reconcilePersisted.filter((s) => s.phase !== RunPhase.RUN_PHASE_UNSPECIFIED).at(-1);
|
|
504
|
+
}
|
|
505
|
+
/** The run a request names: the reconcile turn's id answers it, any other this execution. */
|
|
506
|
+
runNamed(runId) {
|
|
507
|
+
return this.reconcileRun !== undefined && runId === this.reconcileRun.metadata?.id ? this.reconcileRun : this.execution;
|
|
508
|
+
}
|
|
509
|
+
/** A write to the reconcile turn: kept as written, its phase held when the write carries none. */
|
|
510
|
+
applyReconcileStatus(status) {
|
|
511
|
+
const snapshot = clone(RunStatusSchema, status);
|
|
512
|
+
this.reconcilePersistedRows.push(takeFlushedRows(this.reconcileRun?.metadata?.id ?? "") ?? create(TurnRowsSchema));
|
|
513
|
+
this.reconcilePersisted.push(snapshot);
|
|
514
|
+
const run = this.reconcileRun;
|
|
515
|
+
if (snapshot.phase === RunPhase.RUN_PHASE_UNSPECIFIED) {
|
|
516
|
+
snapshot.phase = run.status?.phase ?? RunPhase.RUN_IN_PROGRESS;
|
|
517
|
+
}
|
|
518
|
+
run.status = snapshot;
|
|
519
|
+
return RunControlSignal.UNSPECIFIED;
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* The server's typed read of the log (`listEvents` with `types` and
|
|
523
|
+
* `order`), newest first when asked: one page holds it all. Only the types
|
|
524
|
+
* the runner asks for are named; any other event matches no type.
|
|
525
|
+
*/
|
|
526
|
+
listSessionEventsPage(types, order) {
|
|
527
|
+
const wanted = new Set(types);
|
|
528
|
+
const matching = this.sessionEvents.filter((e) => e.event.case !== undefined && wanted.has(logTypeOf(e)));
|
|
529
|
+
const ordered = order === "desc" ? [...matching].reverse() : matching;
|
|
530
|
+
return ordered.map((e) => clone(SessionEventSchema, e));
|
|
531
|
+
}
|
|
532
|
+
/**
|
|
533
|
+
* Apply one `UpdateStatus` write and answer the control signal the server
|
|
534
|
+
* would. The rows it was made from are the ones the emitter last read for
|
|
535
|
+
* this run, or `written` when a test hands them in itself. A write with no phase never carries a signal (the runner ignores
|
|
536
|
+
* the response there). It is a setup-progress report, or the write an
|
|
537
|
+
* orchestrator stop settles (the runtime writes no phase for it; the
|
|
538
|
+
* workflow does, stigmer#980): the server's merge applies it and leaves
|
|
539
|
+
* the phase to its writers, so the double keeps the held phase.
|
|
540
|
+
*/
|
|
541
|
+
applyStatusUpdate(status, written) {
|
|
542
|
+
const snapshot = clone(RunStatusSchema, status);
|
|
543
|
+
this.persisted.push(snapshot);
|
|
544
|
+
const flushed = takeFlushedRows(this.executionId);
|
|
545
|
+
const rows = written === undefined ? flushed ?? create(TurnRowsSchema) : clone(TurnRowsSchema, written);
|
|
546
|
+
this.persistedRows.push(rows);
|
|
547
|
+
if (snapshot.phase === RunPhase.RUN_PHASE_UNSPECIFIED) {
|
|
548
|
+
if (snapshot.setupProgress?.currentPhase) {
|
|
549
|
+
this.setupProgress.push(snapshot.setupProgress.currentPhase);
|
|
550
|
+
return RunControlSignal.UNSPECIFIED;
|
|
551
|
+
}
|
|
552
|
+
const heldPhase = this.execution.status?.phase ?? RunPhase.RUN_PHASE_UNSPECIFIED;
|
|
553
|
+
this.execution.status = this.keepServerStamp(snapshot);
|
|
554
|
+
this.execution.status.phase = heldPhase;
|
|
555
|
+
for (const listener of [...this.persistListeners])
|
|
556
|
+
listener();
|
|
557
|
+
return RunControlSignal.UNSPECIFIED;
|
|
558
|
+
}
|
|
559
|
+
this.execution.status = this.keepServerStamp(snapshot);
|
|
560
|
+
for (const listener of [...this.persistListeners])
|
|
561
|
+
listener();
|
|
562
|
+
return this.controlSignal(snapshot, rows);
|
|
563
|
+
}
|
|
564
|
+
/** The server's append rules over the modelled log (the class header). */
|
|
565
|
+
appendSessionEvents(runId, events, previews) {
|
|
566
|
+
const phase = this.runNamed(runId).status?.phase ?? RunPhase.RUN_PHASE_UNSPECIFIED;
|
|
567
|
+
if (TERMINAL_PHASES.has(phase)) {
|
|
568
|
+
this.refusedAppends.push(`run '${runId}' is finished`);
|
|
569
|
+
throw new ConnectError(`run '${runId}' is finished; it takes no more events`, Code.FailedPrecondition);
|
|
570
|
+
}
|
|
571
|
+
const fresh = [];
|
|
572
|
+
for (const event of events) {
|
|
573
|
+
const id = event.event.case === undefined ? "" : event.event.value.id;
|
|
574
|
+
const held = [...this.sessionEvents, ...fresh].find((e) => e.event.case !== undefined && e.event.value.id === id);
|
|
575
|
+
if (held !== undefined) {
|
|
576
|
+
if (!equals(SessionEventSchema, held, event)) {
|
|
577
|
+
this.refusedAppends.push(`'${id}' exists with other content`);
|
|
578
|
+
throw new ConnectError(`session event '${id}' already exists with other content`, Code.AlreadyExists);
|
|
579
|
+
}
|
|
580
|
+
this.resentEventIds.push(id);
|
|
581
|
+
continue;
|
|
582
|
+
}
|
|
583
|
+
const own = clone(SessionEventSchema, event);
|
|
584
|
+
own.runId = runId;
|
|
585
|
+
fresh.push(own);
|
|
586
|
+
}
|
|
587
|
+
this.sessionEvents.push(...fresh);
|
|
588
|
+
this.sessionPreviews.push(...previews.map((p) => clone(SessionEventPreviewSchema, p)));
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* The modelled log as a golden: one protobuf JSON object per event, with
|
|
592
|
+
* its envelope's thread, in append order. What the runner sent, before
|
|
593
|
+
* the server stamps a seq or an accepted time. Throws when the runner
|
|
594
|
+
* resent an id the log held or had an append refused, so every golden
|
|
595
|
+
* also proves a resumed turn writes only what is new and that nothing
|
|
596
|
+
* landed after the run finished.
|
|
597
|
+
*/
|
|
598
|
+
eventsGolden() {
|
|
599
|
+
if (this.resentEventIds.length > 0 || this.refusedAppends.length > 0) {
|
|
600
|
+
throw new Error(`the session log saw resent ids [${this.resentEventIds.join(", ")}] and refusals [${this.refusedAppends.join("; ")}]`);
|
|
601
|
+
}
|
|
602
|
+
return JSON.stringify(this.sessionEvents.map((e) => toJson(SessionEventSchema, e, { useProtoFieldName: true })), null, 2) + "\n";
|
|
603
|
+
}
|
|
604
|
+
/** The runner's write with the server-stamped fields of the held status carried over, and its file record upserted. */
|
|
605
|
+
keepServerStamp(snapshot) {
|
|
606
|
+
const next = clone(RunStatusSchema, snapshot);
|
|
607
|
+
const held = this.execution.status;
|
|
608
|
+
if (held === undefined)
|
|
609
|
+
return next;
|
|
610
|
+
next.fileChanges = upsertFileChanges(held.fileChanges, snapshot.fileChanges);
|
|
611
|
+
next.agentId = held.agentId;
|
|
612
|
+
next.agentVersionHash = held.agentVersionHash;
|
|
613
|
+
next.declaredPreferences = held.declaredPreferences;
|
|
614
|
+
next.recalledMemories = held.recalledMemories;
|
|
615
|
+
// The settings the turn runs with and the lane's approval mode are
|
|
616
|
+
// stamped once at create; the server's merge never takes them from a
|
|
617
|
+
// runner write, so every later invocation reads the same resolution.
|
|
618
|
+
next.runConfig = held.runConfig;
|
|
619
|
+
next.approvalMode = held.approvalMode;
|
|
620
|
+
return next;
|
|
621
|
+
}
|
|
622
|
+
/**
|
|
623
|
+
* The control-plane client the activity sees: every read answers from this
|
|
624
|
+
* record; every write lands in it. Reads the activity makes for optional
|
|
625
|
+
* facets (the run's values, channels, skills) answer the everyday shape —
|
|
626
|
+
* no values (a run whose declarations hold none), no channels, no scoped
|
|
627
|
+
* token (the OSS/local posture) — so a scenario opts INTO a facet by
|
|
628
|
+
* overriding.
|
|
629
|
+
*/
|
|
630
|
+
client(overrides = {}) {
|
|
631
|
+
return mockStigmerClient({
|
|
632
|
+
getExecution: vi.fn(async (id) => clone(RunSchema, this.runNamed(id))),
|
|
633
|
+
getSession: vi.fn(async () => this.session),
|
|
634
|
+
getAgent: vi.fn(async () => {
|
|
635
|
+
if (this.agent === undefined) {
|
|
636
|
+
throw new Error("the built-in assistant's record has no agent to read");
|
|
637
|
+
}
|
|
638
|
+
return this.agent;
|
|
639
|
+
}),
|
|
640
|
+
getAgentVersion: vi.fn(async (agentId, versionHash) => {
|
|
641
|
+
if (this.agent === undefined) {
|
|
642
|
+
throw new Error("the built-in assistant's record has no agent version to read");
|
|
643
|
+
}
|
|
644
|
+
if (agentId !== this.agent.metadata?.id || versionHash !== this.execution.status?.agentVersionHash) {
|
|
645
|
+
throw new ConnectError(`agent version not found: ${agentId}@${versionHash}`, Code.NotFound);
|
|
646
|
+
}
|
|
647
|
+
return create(AgentVersionEntrySchema, { versionHash, specSnapshot: this.agent.spec });
|
|
648
|
+
}),
|
|
649
|
+
updateStatus: vi.fn(async (id, status) => {
|
|
650
|
+
// The activity reads only `.signal`; UNSPECIFIED means "keep going".
|
|
651
|
+
const signal = this.runNamed(id) === this.execution ? this.applyStatusUpdate(status) : this.applyReconcileStatus(status);
|
|
652
|
+
return create(UpdateStatusResponseSchema, { signal });
|
|
653
|
+
}),
|
|
654
|
+
bindHarnessState: vi.fn(async (runId, harnessStateId) => {
|
|
655
|
+
this.harnessBinds.push({ runId, harnessStateId });
|
|
656
|
+
return create(BindHarnessStateResponseSchema, { harnessStateId });
|
|
657
|
+
}),
|
|
658
|
+
appendSessionEvents: vi.fn(async (runId, events, previews) => {
|
|
659
|
+
this.appendSessionEvents(runId, events, previews);
|
|
660
|
+
return create(AppendSessionEventsResponseSchema);
|
|
661
|
+
}),
|
|
662
|
+
listRunSessionEvents: vi.fn(async (_sessionId, runId, types = []) => this.sessionEvents
|
|
663
|
+
.filter((e) => e.runId === runId)
|
|
664
|
+
.filter((e) => types.length === 0 || types.includes(logTypeOf(e)))
|
|
665
|
+
.map((e) => clone(SessionEventSchema, e))),
|
|
666
|
+
hasRunSessionEvent: vi.fn(async (_sessionId, runId, types) => this.sessionEvents.some((e) => e.runId === runId && types.includes(logTypeOf(e)))),
|
|
667
|
+
listSessionEvents: vi.fn(async (_sessionId, query) => ({
|
|
668
|
+
events: this.listSessionEventsPage(query.types, query.order),
|
|
669
|
+
nextPageToken: "",
|
|
670
|
+
})),
|
|
671
|
+
// A run whose agent and tools declare nothing: the fetch answers no values.
|
|
672
|
+
fetchExecutionValues: vi.fn(async () => create(ExecutionValuesSchema)),
|
|
673
|
+
getAgentByReference: vi.fn(async (ref) => {
|
|
674
|
+
const agent = this.subagents.find((a) => a.metadata?.slug === ref.slug && (ref.version === "" || a.status?.versionHash === ref.version));
|
|
675
|
+
if (agent === undefined)
|
|
676
|
+
throw new ConnectError(`agent not found: ${ref.slug}@${ref.version}`, Code.NotFound);
|
|
677
|
+
return agent;
|
|
678
|
+
}),
|
|
679
|
+
getSkillByReference: vi.fn(async (ref) => {
|
|
680
|
+
const skill = this.skills.find((s) => s.metadata?.slug === ref.slug);
|
|
681
|
+
if (skill === undefined)
|
|
682
|
+
throw new ConnectError(`skill not found: ${ref.slug}`, Code.NotFound);
|
|
683
|
+
return skill;
|
|
684
|
+
}),
|
|
685
|
+
...overrides,
|
|
686
|
+
});
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
// ---------------------------------------------------------------------------
|
|
690
|
+
// The module-boundary seam for StigmerClient
|
|
691
|
+
// ---------------------------------------------------------------------------
|
|
692
|
+
let boundClient;
|
|
693
|
+
/**
|
|
694
|
+
* Bind the client the mocked `StigmerClient` constructor hands out for the
|
|
695
|
+
* current run. Called by the harness driver immediately before invoking the
|
|
696
|
+
* activity factory (`createCursorActivities(config)` constructs its client
|
|
697
|
+
* inside the factory, so the bind must precede the factory call).
|
|
698
|
+
*/
|
|
699
|
+
export function bindHermeticClient(client) {
|
|
700
|
+
boundClient = client;
|
|
701
|
+
}
|
|
702
|
+
/**
|
|
703
|
+
* The factory a test passes to `vi.mock(".../client/stigmer-client.js", ...)`.
|
|
704
|
+
* `vi.mock` is hoisted and must appear in the test file itself; the factory can
|
|
705
|
+
* `await import()` this module. Usage:
|
|
706
|
+
*
|
|
707
|
+
* ```ts
|
|
708
|
+
* vi.mock("../../../../client/stigmer-client.js", async () =>
|
|
709
|
+
* (await import("../../../../__test-utils__/hermetic-activity.js")).hermeticStigmerClientModule(),
|
|
710
|
+
* );
|
|
711
|
+
* ```
|
|
712
|
+
*/
|
|
713
|
+
export function hermeticStigmerClientModule() {
|
|
714
|
+
return {
|
|
715
|
+
StigmerClient: class {
|
|
716
|
+
constructor() {
|
|
717
|
+
if (!boundClient) {
|
|
718
|
+
throw new Error("hermetic-activity: no StigmerClient bound — call bindHermeticClient(record.client()) " +
|
|
719
|
+
"before constructing the activities");
|
|
720
|
+
}
|
|
721
|
+
return boundClient;
|
|
722
|
+
}
|
|
723
|
+
},
|
|
724
|
+
};
|
|
725
|
+
}
|
|
726
|
+
// ---------------------------------------------------------------------------
|
|
727
|
+
// The environment: temp HOME, temp workspace root, local artifact storage
|
|
728
|
+
// ---------------------------------------------------------------------------
|
|
729
|
+
/**
|
|
730
|
+
* The env-var pins a hermetic run needs, and the reason for each:
|
|
731
|
+
* - `HOME`: `platform-dir.ts` roots the runner-owned `~/.stigmer` tree (HITL
|
|
732
|
+
* gate dir, session dirs, denial ledger) on it.
|
|
733
|
+
* - `ARTIFACT_STORAGE_TYPE=local` + `LOCAL_ARTIFACT_PATH`: a writable local
|
|
734
|
+
* store so capture mode and tool-output offload run the production path
|
|
735
|
+
* (an absent store flips capture off — a different code path).
|
|
736
|
+
* - `STIGMER_RUNNER_HITL_SECRET`: the one randomness source on the activity
|
|
737
|
+
* path, pinned so grant tokens and fingerprints are byte-stable.
|
|
738
|
+
* - `CURSOR_EVENT_RECORD_DIR` cleared: never write recordings from a test —
|
|
739
|
+
* unless the caller names an `eventRecordingDir`, the live instruments'
|
|
740
|
+
* opt-in (below), in which case this environment SETS it. Either way the
|
|
741
|
+
* variable has one owner here, and dispose restores it.
|
|
742
|
+
*/
|
|
743
|
+
const PINNED_ENV = {
|
|
744
|
+
ARTIFACT_STORAGE_TYPE: "local",
|
|
745
|
+
STIGMER_RUNNER_HITL_SECRET: "hermetic-fixture-secret-do-not-use-in-production",
|
|
746
|
+
};
|
|
747
|
+
const CLEARED_ENV = ["STIGMER_PROXY_ENDPOINT", "STIGMER_CLOUD_API_URL"];
|
|
748
|
+
/** The one name the Cursor recorder is switched on by (`turn-settle.ts` reads it). */
|
|
749
|
+
const CURSOR_EVENT_RECORD_DIR = "CURSOR_EVENT_RECORD_DIR";
|
|
750
|
+
/**
|
|
751
|
+
* Create the temp tree and pin the env vars. Call once per test FILE (in
|
|
752
|
+
* `beforeAll`) — the fingerprint secret is memoized per process on first use,
|
|
753
|
+
* and vitest isolates files in forks, so per-file is the natural unit.
|
|
754
|
+
*/
|
|
755
|
+
export function createHermeticEnvironment(options = {}) {
|
|
756
|
+
const root = mkdtempSync(join(tmpdir(), "stigmer-hermetic-"));
|
|
757
|
+
const home = join(root, "home");
|
|
758
|
+
const workspaceRootDir = join(root, "workspaces");
|
|
759
|
+
const artifactPath = join(root, "artifacts");
|
|
760
|
+
const saved = new Map();
|
|
761
|
+
const set = (key, value) => {
|
|
762
|
+
if (!saved.has(key))
|
|
763
|
+
saved.set(key, process.env[key]);
|
|
764
|
+
if (value === undefined)
|
|
765
|
+
delete process.env[key];
|
|
766
|
+
else
|
|
767
|
+
process.env[key] = value;
|
|
768
|
+
};
|
|
769
|
+
set("HOME", home);
|
|
770
|
+
set("LOCAL_ARTIFACT_PATH", artifactPath);
|
|
771
|
+
for (const [k, v] of Object.entries(PINNED_ENV))
|
|
772
|
+
set(k, v);
|
|
773
|
+
for (const k of CLEARED_ENV)
|
|
774
|
+
set(k, undefined);
|
|
775
|
+
set(CURSOR_EVENT_RECORD_DIR, options.eventRecordingDir);
|
|
776
|
+
let disposed = false;
|
|
777
|
+
return {
|
|
778
|
+
home,
|
|
779
|
+
workspaceRootDir,
|
|
780
|
+
artifactPath,
|
|
781
|
+
dispose() {
|
|
782
|
+
if (disposed)
|
|
783
|
+
return;
|
|
784
|
+
disposed = true;
|
|
785
|
+
for (const [k, v] of saved) {
|
|
786
|
+
if (v === undefined)
|
|
787
|
+
delete process.env[k];
|
|
788
|
+
else
|
|
789
|
+
process.env[k] = v;
|
|
790
|
+
}
|
|
791
|
+
rmSync(root, { recursive: true, force: true });
|
|
792
|
+
},
|
|
793
|
+
};
|
|
794
|
+
}
|
|
795
|
+
// ---------------------------------------------------------------------------
|
|
796
|
+
// The clock
|
|
797
|
+
// ---------------------------------------------------------------------------
|
|
798
|
+
/**
|
|
799
|
+
* A deterministic, TICKING clock: `Date` AND `performance` are faked and
|
|
800
|
+
* advance together; timers stay real (the periodic heartbeat, the stall
|
|
801
|
+
* watchdog, `withTimeout` all need them). The harness double calls
|
|
802
|
+
* {@link ScriptedClock.tick} once per script step, so every clock-based
|
|
803
|
+
* decision on the activity path — status timestamps, the builder's row
|
|
804
|
+
* instants, cache TTLs (`Date`); the streaming scheduler's persist cadence
|
|
805
|
+
* (`performance.now()`) — sees the same instants run after run and runs the
|
|
806
|
+
* same branches production runs.
|
|
807
|
+
*
|
|
808
|
+
* Why both (since #1096): until then only `Date` was faked, so the
|
|
809
|
+
* scheduler paced persists on REAL elapsed time and `fileChangeProgress`,
|
|
810
|
+
* which rides persists, could gain or lose a capture under load — a golden
|
|
811
|
+
* flake seen twice while the native adapter moved onto the runtime. One clock,
|
|
812
|
+
* two faces: `tick` advances through
|
|
813
|
+
* the fake clock's own `tick` (`vi.advanceTimersByTime`), which moves both
|
|
814
|
+
* `Date` and `performance.now()`; `vi.setSystemTime` would move `Date` alone
|
|
815
|
+
* (fake-timers keeps `performance` monotonic across a system-time jump), so
|
|
816
|
+
* only {@link reset} uses it — rewinding `Date` to the epoch for a second
|
|
817
|
+
* scenario while `performance` stays monotonic, which is harmless because
|
|
818
|
+
* every turn constructs its scheduler fresh and measures from its own start.
|
|
819
|
+
*
|
|
820
|
+
* Faking `performance` replaces the whole global (`now`, a `timeOrigin` at
|
|
821
|
+
* the epoch, every other method a no-op); nothing on the activity path reads
|
|
822
|
+
* more than `now`, and a module importing from `node:perf_hooks` would bypass
|
|
823
|
+
* the fake (none under `src/` does).
|
|
824
|
+
*/
|
|
825
|
+
export class ScriptedClock {
|
|
826
|
+
/** A fixed epoch: 2026-01-01T00:00:00.000Z. Chosen for readability in goldens. */
|
|
827
|
+
static EPOCH_MS = Date.UTC(2026, 0, 1, 0, 0, 0, 0);
|
|
828
|
+
/** One second per step — well under any stall or cache horizon. */
|
|
829
|
+
static STEP_MS = 1_000;
|
|
830
|
+
nowMs = ScriptedClock.EPOCH_MS;
|
|
831
|
+
install() {
|
|
832
|
+
vi.useFakeTimers({ toFake: ["Date", "performance"], now: this.nowMs });
|
|
833
|
+
}
|
|
834
|
+
tick(ms = ScriptedClock.STEP_MS) {
|
|
835
|
+
this.nowMs += ms;
|
|
836
|
+
// Through the fake clock's own tick, so `performance.now()` advances with
|
|
837
|
+
// `Date`; with no timers faked there is nothing for it to fire.
|
|
838
|
+
vi.advanceTimersByTime(ms);
|
|
839
|
+
}
|
|
840
|
+
/** Back to the epoch — for a second scenario in the same file. `Date` rewinds; `performance` stays monotonic (see the header). */
|
|
841
|
+
reset() {
|
|
842
|
+
this.nowMs = ScriptedClock.EPOCH_MS;
|
|
843
|
+
vi.setSystemTime(this.nowMs);
|
|
844
|
+
}
|
|
845
|
+
uninstall() {
|
|
846
|
+
vi.useRealTimers();
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
/**
|
|
850
|
+
* Run one activity function under a fresh `MockActivityEnvironment` and
|
|
851
|
+
* capture how it ended. `CancelledFailure` is caught like any other throw and
|
|
852
|
+
* reported as `{ kind: "threw" }` — the throw-vs-return table is the thing
|
|
853
|
+
* under test, so the driver never interprets it.
|
|
854
|
+
*/
|
|
855
|
+
export async function runActivityHermetically(activity, args, options = {}) {
|
|
856
|
+
const taskQueue = options.taskQueue ?? "hermetic-test-queue";
|
|
857
|
+
const env = new MockActivityEnvironment({ taskQueue });
|
|
858
|
+
const heartbeats = [];
|
|
859
|
+
env.on("heartbeat", (details) => heartbeats.push(details));
|
|
860
|
+
// The worker-shutdown signal is process-global per queue; register for this
|
|
861
|
+
// invocation and always unregister so no state leaks into the next one.
|
|
862
|
+
registerWorkerShutdownSignal(taskQueue);
|
|
863
|
+
options.onControls?.({
|
|
864
|
+
cancel: () => env.cancel(),
|
|
865
|
+
signalWorkerShutdown: () => signalWorkerShutdown(taskQueue),
|
|
866
|
+
cancelTimedOut: () => env.cancel("TIMED_OUT"),
|
|
867
|
+
});
|
|
868
|
+
try {
|
|
869
|
+
const value = await env.run(activity, ...args);
|
|
870
|
+
return { outcome: { kind: "returned", value }, heartbeats, taskQueue };
|
|
871
|
+
}
|
|
872
|
+
catch (error) {
|
|
873
|
+
return { outcome: { kind: "threw", error }, heartbeats, taskQueue };
|
|
874
|
+
}
|
|
875
|
+
finally {
|
|
876
|
+
unregisterWorkerShutdownSignal(taskQueue);
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
/** True when the outcome is a thrown Temporal `CancelledFailure`. */
|
|
880
|
+
export function threwCancelledFailure(outcome) {
|
|
881
|
+
return outcome.kind === "threw" && outcome.error instanceof CancelledFailure;
|
|
882
|
+
}
|
|
883
|
+
//# sourceMappingURL=hermetic-activity.js.map
|