@stigmer/runner 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +212 -0
- package/dist/.build-fingerprint +1 -0
- package/dist/activities/call-agent-status.d.ts +37 -0
- package/dist/activities/call-agent-status.js +91 -0
- package/dist/activities/call-agent-status.js.map +1 -0
- package/dist/activities/call-agent.d.ts +25 -0
- package/dist/activities/call-agent.js +233 -0
- package/dist/activities/call-agent.js.map +1 -0
- package/dist/activities/call-eval.d.ts +50 -0
- package/dist/activities/call-eval.js +244 -0
- package/dist/activities/call-eval.js.map +1 -0
- package/dist/activities/call-function.d.ts +21 -0
- package/dist/activities/call-function.js +54 -0
- package/dist/activities/call-function.js.map +1 -0
- package/dist/activities/call-grpc.d.ts +22 -0
- package/dist/activities/call-grpc.js +101 -0
- package/dist/activities/call-grpc.js.map +1 -0
- package/dist/activities/call-http.d.ts +32 -0
- package/dist/activities/call-http.js +134 -0
- package/dist/activities/call-http.js.map +1 -0
- package/dist/activities/call-llm.d.ts +39 -0
- package/dist/activities/call-llm.js +260 -0
- package/dist/activities/call-llm.js.map +1 -0
- package/dist/activities/call-transform.d.ts +20 -0
- package/dist/activities/call-transform.js +33 -0
- package/dist/activities/call-transform.js.map +1 -0
- package/dist/activities/call-validate.d.ts +41 -0
- package/dist/activities/call-validate.js +163 -0
- package/dist/activities/call-validate.js.map +1 -0
- package/dist/activities/classify-tool-approvals.d.ts +47 -0
- package/dist/activities/classify-tool-approvals.js +207 -0
- package/dist/activities/classify-tool-approvals.js.map +1 -0
- package/dist/activities/discover-mcp-server.d.ts +65 -0
- package/dist/activities/discover-mcp-server.js +269 -0
- package/dist/activities/discover-mcp-server.js.map +1 -0
- package/dist/activities/emit-event.d.ts +46 -0
- package/dist/activities/emit-event.js +125 -0
- package/dist/activities/emit-event.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/evaluate-expressions.d.ts +21 -0
- package/dist/activities/evaluate-expressions.js +39 -0
- package/dist/activities/evaluate-expressions.js.map +1 -0
- package/dist/activities/execute-cursor/approval-policy.d.ts +104 -0
- package/dist/activities/execute-cursor/approval-policy.js +193 -0
- package/dist/activities/execute-cursor/approval-policy.js.map +1 -0
- package/dist/activities/execute-cursor/approval-state.d.ts +157 -0
- package/dist/activities/execute-cursor/approval-state.js +223 -0
- package/dist/activities/execute-cursor/approval-state.js.map +1 -0
- package/dist/activities/execute-cursor/attachment-resolver.d.ts +19 -0
- package/dist/activities/execute-cursor/attachment-resolver.js +52 -0
- package/dist/activities/execute-cursor/attachment-resolver.js.map +1 -0
- package/dist/activities/execute-cursor/blueprint-resolver.d.ts +66 -0
- package/dist/activities/execute-cursor/blueprint-resolver.js +169 -0
- package/dist/activities/execute-cursor/blueprint-resolver.js.map +1 -0
- package/dist/activities/execute-cursor/connect-backfill.d.ts +18 -0
- package/dist/activities/execute-cursor/connect-backfill.js +27 -0
- package/dist/activities/execute-cursor/connect-backfill.js.map +1 -0
- package/dist/activities/execute-cursor/cursor-event-recorder.d.ts +24 -0
- package/dist/activities/execute-cursor/cursor-event-recorder.js +66 -0
- package/dist/activities/execute-cursor/cursor-event-recorder.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/delta-enricher.d.ts +87 -0
- package/dist/activities/execute-cursor/delta-enricher.js +265 -0
- package/dist/activities/execute-cursor/delta-enricher.js.map +1 -0
- package/dist/activities/execute-cursor/env-resolver.d.ts +19 -0
- package/dist/activities/execute-cursor/env-resolver.js +47 -0
- package/dist/activities/execute-cursor/env-resolver.js.map +1 -0
- package/dist/activities/execute-cursor/error-classifier.d.ts +73 -0
- package/dist/activities/execute-cursor/error-classifier.js +185 -0
- package/dist/activities/execute-cursor/error-classifier.js.map +1 -0
- package/dist/activities/execute-cursor/fetch-interceptor.d.ts +59 -0
- package/dist/activities/execute-cursor/fetch-interceptor.js +317 -0
- package/dist/activities/execute-cursor/fetch-interceptor.js.map +1 -0
- package/dist/activities/execute-cursor/hitl-diagnostics.d.ts +32 -0
- package/dist/activities/execute-cursor/hitl-diagnostics.js +73 -0
- package/dist/activities/execute-cursor/hitl-diagnostics.js.map +1 -0
- package/dist/activities/execute-cursor/hook-script.d.ts +47 -0
- package/dist/activities/execute-cursor/hook-script.js +156 -0
- package/dist/activities/execute-cursor/hook-script.js.map +1 -0
- package/dist/activities/execute-cursor/http2-interceptor.d.ts +94 -0
- package/dist/activities/execute-cursor/http2-interceptor.js +209 -0
- package/dist/activities/execute-cursor/http2-interceptor.js.map +1 -0
- package/dist/activities/execute-cursor/index.d.ts +67 -0
- package/dist/activities/execute-cursor/index.js +1176 -0
- package/dist/activities/execute-cursor/index.js.map +1 -0
- package/dist/activities/execute-cursor/mcp-config.d.ts +30 -0
- package/dist/activities/execute-cursor/mcp-config.js +39 -0
- package/dist/activities/execute-cursor/mcp-config.js.map +1 -0
- package/dist/activities/execute-cursor/mcp-resolver.d.ts +91 -0
- package/dist/activities/execute-cursor/mcp-resolver.js +178 -0
- package/dist/activities/execute-cursor/mcp-resolver.js.map +1 -0
- package/dist/activities/execute-cursor/message-translator.d.ts +211 -0
- package/dist/activities/execute-cursor/message-translator.js +786 -0
- package/dist/activities/execute-cursor/message-translator.js.map +1 -0
- package/dist/activities/execute-cursor/model-pricing-data.d.ts +40 -0
- package/dist/activities/execute-cursor/model-pricing-data.js +114 -0
- package/dist/activities/execute-cursor/model-pricing-data.js.map +1 -0
- package/dist/activities/execute-cursor/model-pricing.d.ts +42 -0
- package/dist/activities/execute-cursor/model-pricing.js +141 -0
- package/dist/activities/execute-cursor/model-pricing.js.map +1 -0
- package/dist/activities/execute-cursor/placeholder-resolver.d.ts +34 -0
- package/dist/activities/execute-cursor/placeholder-resolver.js +82 -0
- package/dist/activities/execute-cursor/placeholder-resolver.js.map +1 -0
- package/dist/activities/execute-cursor/prompt-builder.d.ts +80 -0
- package/dist/activities/execute-cursor/prompt-builder.js +280 -0
- package/dist/activities/execute-cursor/prompt-builder.js.map +1 -0
- package/dist/activities/execute-cursor/rejection-capture.d.ts +30 -0
- package/dist/activities/execute-cursor/rejection-capture.js +80 -0
- package/dist/activities/execute-cursor/rejection-capture.js.map +1 -0
- package/dist/activities/execute-cursor/session-lifecycle.d.ts +189 -0
- package/dist/activities/execute-cursor/session-lifecycle.js +285 -0
- package/dist/activities/execute-cursor/session-lifecycle.js.map +1 -0
- package/dist/activities/execute-cursor/skill-resolver.d.ts +29 -0
- package/dist/activities/execute-cursor/skill-resolver.js +134 -0
- package/dist/activities/execute-cursor/skill-resolver.js.map +1 -0
- package/dist/activities/execute-cursor/subagent-config.d.ts +34 -0
- package/dist/activities/execute-cursor/subagent-config.js +55 -0
- package/dist/activities/execute-cursor/subagent-config.js.map +1 -0
- package/dist/activities/execute-cursor/todo-tracker.d.ts +35 -0
- package/dist/activities/execute-cursor/todo-tracker.js +108 -0
- package/dist/activities/execute-cursor/todo-tracker.js.map +1 -0
- package/dist/activities/execute-cursor/usage-accumulator.d.ts +55 -0
- package/dist/activities/execute-cursor/usage-accumulator.js +89 -0
- package/dist/activities/execute-cursor/usage-accumulator.js.map +1 -0
- package/dist/activities/execute-cursor/workspace-provision.d.ts +22 -0
- package/dist/activities/execute-cursor/workspace-provision.js +37 -0
- package/dist/activities/execute-cursor/workspace-provision.js.map +1 -0
- package/dist/activities/execute-cursor/workspace-setup.d.ts +27 -0
- package/dist/activities/execute-cursor/workspace-setup.js +61 -0
- package/dist/activities/execute-cursor/workspace-setup.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.d.ts +71 -0
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js +182 -0
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js.map +1 -0
- package/dist/activities/execute-deep-agent/attachment-injector.d.ts +67 -0
- package/dist/activities/execute-deep-agent/attachment-injector.js +306 -0
- package/dist/activities/execute-deep-agent/attachment-injector.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/environment.d.ts +24 -0
- package/dist/activities/execute-deep-agent/environment.js +50 -0
- package/dist/activities/execute-deep-agent/environment.js.map +1 -0
- package/dist/activities/execute-deep-agent/event-recorder.d.ts +21 -0
- package/dist/activities/execute-deep-agent/event-recorder.js +67 -0
- package/dist/activities/execute-deep-agent/event-recorder.js.map +1 -0
- package/dist/activities/execute-deep-agent/execution-state.d.ts +61 -0
- package/dist/activities/execute-deep-agent/execution-state.js +76 -0
- package/dist/activities/execute-deep-agent/execution-state.js.map +1 -0
- package/dist/activities/execute-deep-agent/execution-status-writer.d.ts +17 -0
- package/dist/activities/execute-deep-agent/execution-status-writer.js +9 -0
- package/dist/activities/execute-deep-agent/execution-status-writer.js.map +1 -0
- package/dist/activities/execute-deep-agent/hitl.d.ts +58 -0
- package/dist/activities/execute-deep-agent/hitl.js +155 -0
- package/dist/activities/execute-deep-agent/hitl.js.map +1 -0
- package/dist/activities/execute-deep-agent/index.d.ts +14 -0
- package/dist/activities/execute-deep-agent/index.js +286 -0
- package/dist/activities/execute-deep-agent/index.js.map +1 -0
- package/dist/activities/execute-deep-agent/inline-publisher.d.ts +36 -0
- package/dist/activities/execute-deep-agent/inline-publisher.js +105 -0
- package/dist/activities/execute-deep-agent/inline-publisher.js.map +1 -0
- package/dist/activities/execute-deep-agent/post-stream.d.ts +23 -0
- package/dist/activities/execute-deep-agent/post-stream.js +71 -0
- package/dist/activities/execute-deep-agent/post-stream.js.map +1 -0
- package/dist/activities/execute-deep-agent/prompt-builder.d.ts +27 -0
- package/dist/activities/execute-deep-agent/prompt-builder.js +200 -0
- package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -0
- package/dist/activities/execute-deep-agent/setup.d.ts +55 -0
- package/dist/activities/execute-deep-agent/setup.js +411 -0
- package/dist/activities/execute-deep-agent/setup.js.map +1 -0
- package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +39 -0
- package/dist/activities/execute-deep-agent/status-builder-shared.js +120 -0
- package/dist/activities/execute-deep-agent/status-builder-shared.js.map +1 -0
- package/dist/activities/execute-deep-agent/status-builder.d.ts +81 -0
- package/dist/activities/execute-deep-agent/status-builder.js +312 -0
- package/dist/activities/execute-deep-agent/status-builder.js.map +1 -0
- package/dist/activities/execute-deep-agent/streaming-scheduler.d.ts +60 -0
- package/dist/activities/execute-deep-agent/streaming-scheduler.js +114 -0
- package/dist/activities/execute-deep-agent/streaming-scheduler.js.map +1 -0
- package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +22 -0
- package/dist/activities/execute-deep-agent/streaming-side-effects.js +83 -0
- package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -0
- package/dist/activities/execute-deep-agent/streaming-terminal.d.ts +12 -0
- package/dist/activities/execute-deep-agent/streaming-terminal.js +71 -0
- package/dist/activities/execute-deep-agent/streaming-terminal.js.map +1 -0
- package/dist/activities/execute-deep-agent/streaming-v3.d.ts +13 -0
- package/dist/activities/execute-deep-agent/streaming-v3.js +170 -0
- package/dist/activities/execute-deep-agent/streaming-v3.js.map +1 -0
- package/dist/activities/execute-deep-agent/streaming.d.ts +66 -0
- package/dist/activities/execute-deep-agent/streaming.js +169 -0
- package/dist/activities/execute-deep-agent/streaming.js.map +1 -0
- package/dist/activities/execute-deep-agent/subagent-tracker.d.ts +90 -0
- package/dist/activities/execute-deep-agent/subagent-tracker.js +364 -0
- package/dist/activities/execute-deep-agent/subagent-tracker.js.map +1 -0
- package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +150 -0
- package/dist/activities/execute-deep-agent/subagent-transformer.js +450 -0
- package/dist/activities/execute-deep-agent/subagent-transformer.js.map +1 -0
- package/dist/activities/execute-deep-agent/subagent-wiring.d.ts +28 -0
- package/dist/activities/execute-deep-agent/subagent-wiring.js +40 -0
- package/dist/activities/execute-deep-agent/subagent-wiring.js.map +1 -0
- package/dist/activities/execute-deep-agent/v3-event-recorder.d.ts +31 -0
- package/dist/activities/execute-deep-agent/v3-event-recorder.js +71 -0
- package/dist/activities/execute-deep-agent/v3-event-recorder.js.map +1 -0
- package/dist/activities/execute-deep-agent/v3-events.d.ts +102 -0
- package/dist/activities/execute-deep-agent/v3-events.js +35 -0
- package/dist/activities/execute-deep-agent/v3-events.js.map +1 -0
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.d.ts +15 -0
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js +235 -0
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js.map +1 -0
- package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +68 -0
- package/dist/activities/execute-deep-agent/v3-status-builder.js +394 -0
- package/dist/activities/execute-deep-agent/v3-status-builder.js.map +1 -0
- package/dist/activities/execute-deep-agent/writeback-coordinator.d.ts +71 -0
- package/dist/activities/execute-deep-agent/writeback-coordinator.js +295 -0
- package/dist/activities/execute-deep-agent/writeback-coordinator.js.map +1 -0
- package/dist/activities/hydrate-workflow-execution.d.ts +32 -0
- package/dist/activities/hydrate-workflow-execution.js +212 -0
- package/dist/activities/hydrate-workflow-execution.js.map +1 -0
- package/dist/activities/notification.d.ts +19 -0
- package/dist/activities/notification.js +47 -0
- package/dist/activities/notification.js.map +1 -0
- package/dist/activities/promote-task-output.d.ts +38 -0
- package/dist/activities/promote-task-output.js +90 -0
- package/dist/activities/promote-task-output.js.map +1 -0
- package/dist/activities/run-command.d.ts +15 -0
- package/dist/activities/run-command.js +123 -0
- package/dist/activities/run-command.js.map +1 -0
- package/dist/activities/workflow-event-activities.d.ts +48 -0
- package/dist/activities/workflow-event-activities.js +415 -0
- package/dist/activities/workflow-event-activities.js.map +1 -0
- package/dist/bootstrap.d.ts +80 -0
- package/dist/bootstrap.js +114 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/budget/index.d.ts +1 -0
- package/dist/budget/index.js +2 -0
- package/dist/budget/index.js.map +1 -0
- package/dist/budget/tracker.d.ts +52 -0
- package/dist/budget/tracker.js +123 -0
- package/dist/budget/tracker.js.map +1 -0
- package/dist/claimcheck/compressor.d.ts +2 -0
- package/dist/claimcheck/compressor.js +8 -0
- package/dist/claimcheck/compressor.js.map +1 -0
- package/dist/claimcheck/config.d.ts +7 -0
- package/dist/claimcheck/config.js +10 -0
- package/dist/claimcheck/config.js.map +1 -0
- package/dist/claimcheck/index.d.ts +3 -0
- package/dist/claimcheck/index.js +4 -0
- package/dist/claimcheck/index.js.map +1 -0
- package/dist/claimcheck/payload-codec.d.ts +23 -0
- package/dist/claimcheck/payload-codec.js +81 -0
- package/dist/claimcheck/payload-codec.js.map +1 -0
- package/dist/client/server-contracts.d.ts +52 -0
- package/dist/client/server-contracts.js +72 -0
- package/dist/client/server-contracts.js.map +1 -0
- package/dist/client/stigmer-client.d.ts +131 -0
- package/dist/client/stigmer-client.js +239 -0
- package/dist/client/stigmer-client.js.map +1 -0
- package/dist/config.d.ts +64 -0
- package/dist/config.js +123 -0
- package/dist/config.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/index.d.ts +43 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptors/workflow-metrics-sink.d.ts +11 -0
- package/dist/interceptors/workflow-metrics-sink.js +51 -0
- package/dist/interceptors/workflow-metrics-sink.js.map +1 -0
- package/dist/ipc-protocol-fixtures.d.ts +32 -0
- package/dist/ipc-protocol-fixtures.js +69 -0
- package/dist/ipc-protocol-fixtures.js.map +1 -0
- package/dist/ipc-protocol.d.ts +60 -0
- package/dist/ipc-protocol.js +19 -0
- package/dist/ipc-protocol.js.map +1 -0
- package/dist/main.d.ts +19 -0
- package/dist/main.js +292 -0
- package/dist/main.js.map +1 -0
- package/dist/middleware/approval-gate.d.ts +30 -0
- package/dist/middleware/approval-gate.js +125 -0
- package/dist/middleware/approval-gate.js.map +1 -0
- package/dist/middleware/cost-cap.d.ts +22 -0
- package/dist/middleware/cost-cap.js +159 -0
- package/dist/middleware/cost-cap.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 +20 -0
- package/dist/middleware/execution-budget.js +151 -0
- package/dist/middleware/execution-budget.js.map +1 -0
- package/dist/middleware/graceful-stop.d.ts +17 -0
- package/dist/middleware/graceful-stop.js +63 -0
- package/dist/middleware/graceful-stop.js.map +1 -0
- package/dist/middleware/index.d.ts +27 -0
- package/dist/middleware/index.js +45 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/loop-detection.d.ts +14 -0
- package/dist/middleware/loop-detection.js +156 -0
- package/dist/middleware/loop-detection.js.map +1 -0
- package/dist/middleware/otel-spans.d.ts +11 -0
- package/dist/middleware/otel-spans.js +177 -0
- package/dist/middleware/otel-spans.js.map +1 -0
- package/dist/middleware/think-tool.d.ts +23 -0
- package/dist/middleware/think-tool.js +33 -0
- package/dist/middleware/think-tool.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 +100 -0
- package/dist/middleware/types.js +9 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/notification/index.d.ts +2 -0
- package/dist/notification/index.js +6 -0
- package/dist/notification/index.js.map +1 -0
- package/dist/notification/provider.d.ts +29 -0
- package/dist/notification/provider.js +25 -0
- package/dist/notification/provider.js.map +1 -0
- package/dist/notification/webhook.d.ts +13 -0
- package/dist/notification/webhook.js +55 -0
- package/dist/notification/webhook.js.map +1 -0
- package/dist/otel-metrics.d.ts +21 -0
- package/dist/otel-metrics.js +54 -0
- package/dist/otel-metrics.js.map +1 -0
- package/dist/otel.d.ts +57 -0
- package/dist/otel.js +164 -0
- package/dist/otel.js.map +1 -0
- package/dist/runner-manager.d.ts +113 -0
- package/dist/runner-manager.js +412 -0
- package/dist/runner-manager.js.map +1 -0
- package/dist/runner-token-coordinator.d.ts +56 -0
- package/dist/runner-token-coordinator.js +84 -0
- package/dist/runner-token-coordinator.js.map +1 -0
- package/dist/runner.d.ts +104 -0
- package/dist/runner.js +234 -0
- package/dist/runner.js.map +1 -0
- package/dist/shared/approval-policy.d.ts +45 -0
- package/dist/shared/approval-policy.js +122 -0
- package/dist/shared/approval-policy.js.map +1 -0
- package/dist/shared/artifact-storage.d.ts +44 -0
- package/dist/shared/artifact-storage.js +162 -0
- package/dist/shared/artifact-storage.js.map +1 -0
- package/dist/shared/checkpointer/factory.d.ts +28 -0
- package/dist/shared/checkpointer/factory.js +55 -0
- package/dist/shared/checkpointer/factory.js.map +1 -0
- package/dist/shared/checkpointer/http-saver.d.ts +34 -0
- package/dist/shared/checkpointer/http-saver.js +274 -0
- package/dist/shared/checkpointer/http-saver.js.map +1 -0
- package/dist/shared/checkpointer/types.d.ts +12 -0
- package/dist/shared/checkpointer/types.js +2 -0
- package/dist/shared/checkpointer/types.js.map +1 -0
- package/dist/shared/connect-backfill.d.ts +58 -0
- package/dist/shared/connect-backfill.js +119 -0
- package/dist/shared/connect-backfill.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/grpc-retry.d.ts +35 -0
- package/dist/shared/grpc-retry.js +78 -0
- package/dist/shared/grpc-retry.js.map +1 -0
- package/dist/shared/heartbeat.d.ts +22 -0
- package/dist/shared/heartbeat.js +55 -0
- package/dist/shared/heartbeat.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-proxy.d.ts +57 -0
- package/dist/shared/llm-proxy.js +116 -0
- package/dist/shared/llm-proxy.js.map +1 -0
- package/dist/shared/mcp-manager.d.ts +47 -0
- package/dist/shared/mcp-manager.js +118 -0
- package/dist/shared/mcp-manager.js.map +1 -0
- package/dist/shared/mcp-resolver.d.ts +41 -0
- package/dist/shared/mcp-resolver.js +96 -0
- package/dist/shared/mcp-resolver.js.map +1 -0
- package/dist/shared/model-pricing-data.d.ts +18 -0
- package/dist/shared/model-pricing-data.js +78 -0
- package/dist/shared/model-pricing-data.js.map +1 -0
- package/dist/shared/model-pricing.d.ts +24 -0
- package/dist/shared/model-pricing.js +58 -0
- package/dist/shared/model-pricing.js.map +1 -0
- package/dist/shared/model-registry.d.ts +55 -0
- package/dist/shared/model-registry.js +178 -0
- package/dist/shared/model-registry.js.map +1 -0
- package/dist/shared/placeholder-resolver.d.ts +27 -0
- package/dist/shared/placeholder-resolver.js +75 -0
- package/dist/shared/placeholder-resolver.js.map +1 -0
- package/dist/shared/plan-artifact.d.ts +56 -0
- package/dist/shared/plan-artifact.js +98 -0
- package/dist/shared/plan-artifact.js.map +1 -0
- package/dist/shared/skill-relevance.d.ts +65 -0
- package/dist/shared/skill-relevance.js +175 -0
- package/dist/shared/skill-relevance.js.map +1 -0
- package/dist/shared/skill-writer.d.ts +73 -0
- package/dist/shared/skill-writer.js +230 -0
- package/dist/shared/skill-writer.js.map +1 -0
- package/dist/shared/status.d.ts +37 -0
- package/dist/shared/status.js +73 -0
- package/dist/shared/status.js.map +1 -0
- package/dist/shared/subagent-gate.d.ts +41 -0
- package/dist/shared/subagent-gate.js +93 -0
- package/dist/shared/subagent-gate.js.map +1 -0
- package/dist/shared/tool-kind.d.ts +22 -0
- package/dist/shared/tool-kind.js +79 -0
- package/dist/shared/tool-kind.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/local-backend.d.ts +41 -0
- package/dist/shared/workspace/local-backend.js +113 -0
- package/dist/shared/workspace/local-backend.js.map +1 -0
- package/dist/shared/workspace/platform-dir.d.ts +25 -0
- package/dist/shared/workspace/platform-dir.js +36 -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 +47 -0
- package/dist/shared/workspace/provisioner.js +84 -0
- package/dist/shared/workspace/provisioner.js.map +1 -0
- package/dist/shared/workspace/sources/empty.d.ts +8 -0
- package/dist/shared/workspace/sources/empty.js +18 -0
- package/dist/shared/workspace/sources/empty.js.map +1 -0
- package/dist/shared/workspace/sources/git.d.ts +22 -0
- package/dist/shared/workspace/sources/git.js +207 -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 +57 -0
- package/dist/shared/workspace/sources/local-path.js.map +1 -0
- package/dist/shared/workspace/types.d.ts +58 -0
- package/dist/shared/workspace/types.js +25 -0
- package/dist/shared/workspace/types.js.map +1 -0
- package/dist/shared/zip-extract.d.ts +30 -0
- package/dist/shared/zip-extract.js +150 -0
- package/dist/shared/zip-extract.js.map +1 -0
- package/dist/worker.d.ts +27 -0
- package/dist/worker.js +65 -0
- package/dist/worker.js.map +1 -0
- package/dist/workflow-engine/clone.d.ts +11 -0
- package/dist/workflow-engine/clone.js +21 -0
- package/dist/workflow-engine/clone.js.map +1 -0
- package/dist/workflow-engine/do-executor.d.ts +27 -0
- package/dist/workflow-engine/do-executor.js +418 -0
- package/dist/workflow-engine/do-executor.js.map +1 -0
- package/dist/workflow-engine/duration.d.ts +12 -0
- package/dist/workflow-engine/duration.js +25 -0
- package/dist/workflow-engine/duration.js.map +1 -0
- package/dist/workflow-engine/error-utils.d.ts +42 -0
- package/dist/workflow-engine/error-utils.js +77 -0
- package/dist/workflow-engine/error-utils.js.map +1 -0
- package/dist/workflow-engine/errors.d.ts +46 -0
- package/dist/workflow-engine/errors.js +105 -0
- package/dist/workflow-engine/errors.js.map +1 -0
- package/dist/workflow-engine/expression-utils.d.ts +60 -0
- package/dist/workflow-engine/expression-utils.js +108 -0
- package/dist/workflow-engine/expression-utils.js.map +1 -0
- package/dist/workflow-engine/expression.d.ts +132 -0
- package/dist/workflow-engine/expression.js +366 -0
- package/dist/workflow-engine/expression.js.map +1 -0
- package/dist/workflow-engine/loader.d.ts +23 -0
- package/dist/workflow-engine/loader.js +429 -0
- package/dist/workflow-engine/loader.js.map +1 -0
- package/dist/workflow-engine/recovery.d.ts +53 -0
- package/dist/workflow-engine/recovery.js +46 -0
- package/dist/workflow-engine/recovery.js.map +1 -0
- package/dist/workflow-engine/resolve.d.ts +83 -0
- package/dist/workflow-engine/resolve.js +257 -0
- package/dist/workflow-engine/resolve.js.map +1 -0
- package/dist/workflow-engine/retry.d.ts +30 -0
- package/dist/workflow-engine/retry.js +97 -0
- package/dist/workflow-engine/retry.js.map +1 -0
- package/dist/workflow-engine/state.d.ts +26 -0
- package/dist/workflow-engine/state.js +49 -0
- package/dist/workflow-engine/state.js.map +1 -0
- package/dist/workflow-engine/task-factory.d.ts +20 -0
- package/dist/workflow-engine/task-factory.js +133 -0
- package/dist/workflow-engine/task-factory.js.map +1 -0
- package/dist/workflow-engine/task-status-accumulator.d.ts +59 -0
- package/dist/workflow-engine/task-status-accumulator.js +164 -0
- package/dist/workflow-engine/task-status-accumulator.js.map +1 -0
- package/dist/workflow-engine/tasks/call-agent-output.d.ts +26 -0
- package/dist/workflow-engine/tasks/call-agent-output.js +109 -0
- package/dist/workflow-engine/tasks/call-agent-output.js.map +1 -0
- package/dist/workflow-engine/tasks/call-agent.d.ts +31 -0
- package/dist/workflow-engine/tasks/call-agent.js +161 -0
- package/dist/workflow-engine/tasks/call-agent.js.map +1 -0
- package/dist/workflow-engine/tasks/call-function.d.ts +19 -0
- package/dist/workflow-engine/tasks/call-function.js +64 -0
- package/dist/workflow-engine/tasks/call-function.js.map +1 -0
- package/dist/workflow-engine/tasks/call-grpc.d.ts +15 -0
- package/dist/workflow-engine/tasks/call-grpc.js +27 -0
- package/dist/workflow-engine/tasks/call-grpc.js.map +1 -0
- package/dist/workflow-engine/tasks/call-http.d.ts +19 -0
- package/dist/workflow-engine/tasks/call-http.js +31 -0
- package/dist/workflow-engine/tasks/call-http.js.map +1 -0
- package/dist/workflow-engine/tasks/for.d.ts +39 -0
- package/dist/workflow-engine/tasks/for.js +154 -0
- package/dist/workflow-engine/tasks/for.js.map +1 -0
- package/dist/workflow-engine/tasks/fork.d.ts +42 -0
- package/dist/workflow-engine/tasks/fork.js +142 -0
- package/dist/workflow-engine/tasks/fork.js.map +1 -0
- package/dist/workflow-engine/tasks/human-input.d.ts +33 -0
- package/dist/workflow-engine/tasks/human-input.js +109 -0
- package/dist/workflow-engine/tasks/human-input.js.map +1 -0
- package/dist/workflow-engine/tasks/listen.d.ts +34 -0
- package/dist/workflow-engine/tasks/listen.js +119 -0
- package/dist/workflow-engine/tasks/listen.js.map +1 -0
- package/dist/workflow-engine/tasks/raise.d.ts +18 -0
- package/dist/workflow-engine/tasks/raise.js +60 -0
- package/dist/workflow-engine/tasks/raise.js.map +1 -0
- package/dist/workflow-engine/tasks/run.d.ts +39 -0
- package/dist/workflow-engine/tasks/run.js +114 -0
- package/dist/workflow-engine/tasks/run.js.map +1 -0
- package/dist/workflow-engine/tasks/set.d.ts +15 -0
- package/dist/workflow-engine/tasks/set.js +31 -0
- package/dist/workflow-engine/tasks/set.js.map +1 -0
- package/dist/workflow-engine/tasks/switch.d.ts +25 -0
- package/dist/workflow-engine/tasks/switch.js +76 -0
- package/dist/workflow-engine/tasks/switch.js.map +1 -0
- package/dist/workflow-engine/tasks/try.d.ts +49 -0
- package/dist/workflow-engine/tasks/try.js +189 -0
- package/dist/workflow-engine/tasks/try.js.map +1 -0
- package/dist/workflow-engine/tasks/wait.d.ts +24 -0
- package/dist/workflow-engine/tasks/wait.js +39 -0
- package/dist/workflow-engine/tasks/wait.js.map +1 -0
- package/dist/workflow-engine/types.d.ts +682 -0
- package/dist/workflow-engine/types.js +47 -0
- package/dist/workflow-engine/types.js.map +1 -0
- package/dist/workflows/call-agent-orchestrator.d.ts +31 -0
- package/dist/workflows/call-agent-orchestrator.js +214 -0
- package/dist/workflows/call-agent-orchestrator.js.map +1 -0
- package/dist/workflows/connect-mcp-server.d.ts +20 -0
- package/dist/workflows/connect-mcp-server.js +113 -0
- package/dist/workflows/connect-mcp-server.js.map +1 -0
- package/dist/workflows/engine-core.d.ts +36 -0
- package/dist/workflows/engine-core.js +272 -0
- package/dist/workflows/engine-core.js.map +1 -0
- package/dist/workflows/execute-from-execution.d.ts +32 -0
- package/dist/workflows/execute-from-execution.js +71 -0
- package/dist/workflows/execute-from-execution.js.map +1 -0
- package/dist/workflows/execute-serverless-workflow.d.ts +32 -0
- package/dist/workflows/execute-serverless-workflow.js +36 -0
- package/dist/workflows/execute-serverless-workflow.js.map +1 -0
- package/dist/workflows/human-input-orchestrator.d.ts +19 -0
- package/dist/workflows/human-input-orchestrator.js +59 -0
- package/dist/workflows/human-input-orchestrator.js.map +1 -0
- package/dist/workflows/index.d.ts +22 -0
- package/dist/workflows/index.js +23 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/listen-orchestrator.d.ts +29 -0
- package/dist/workflows/listen-orchestrator.js +143 -0
- package/dist/workflows/listen-orchestrator.js.map +1 -0
- package/dist/workflows/metrics-sink.d.ts +33 -0
- package/dist/workflows/metrics-sink.js +21 -0
- package/dist/workflows/metrics-sink.js.map +1 -0
- package/dist/workflows/run-orchestrator.d.ts +15 -0
- package/dist/workflows/run-orchestrator.js +27 -0
- package/dist/workflows/run-orchestrator.js.map +1 -0
- package/dist/workflows/types.d.ts +46 -0
- package/dist/workflows/types.js +15 -0
- package/dist/workflows/types.js.map +1 -0
- package/dist/workflows/workflow-signals.d.ts +29 -0
- package/dist/workflows/workflow-signals.js +46 -0
- package/dist/workflows/workflow-signals.js.map +1 -0
- package/package.json +108 -0
- package/src/__test-utils__/__tests__/replay-fetch.test.ts +155 -0
- package/src/__test-utils__/mock-client.ts +44 -0
- package/src/__test-utils__/mock-workspace.ts +28 -0
- package/src/__test-utils__/proto-helpers.ts +41 -0
- package/src/__test-utils__/replay-fetch.ts +523 -0
- package/src/__tests__/bootstrap.test.ts +221 -0
- package/src/__tests__/claimcheck-codec.test.ts +257 -0
- package/src/__tests__/config.test.ts +150 -0
- package/src/__tests__/deterministic-eval-llm.test.ts +269 -0
- package/src/__tests__/deterministic-mcp-hitl.test.ts +405 -0
- package/src/__tests__/golden-e2e.test.ts +250 -0
- package/src/__tests__/ipc-protocol-fixtures.test.ts +66 -0
- package/src/__tests__/ipc-protocol.test.ts +32 -0
- package/src/__tests__/otel-metrics.test.ts +40 -0
- package/src/__tests__/runner-manager.test.ts +55 -0
- package/src/__tests__/runner-token-coordinator.test.ts +166 -0
- package/src/__tests__/runner.test.ts +182 -0
- package/src/__tests__/worker.test.ts +18 -0
- package/src/activities/__tests__/call-agent-contracts.test.ts +483 -0
- package/src/activities/__tests__/call-agent.test.ts +263 -0
- package/src/activities/__tests__/call-function.test.ts +47 -0
- package/src/activities/__tests__/call-grpc.test.ts +39 -0
- package/src/activities/__tests__/call-http.test.ts +288 -0
- package/src/activities/__tests__/call-llm.test.ts +301 -0
- package/src/activities/__tests__/classify-tool-approvals.test.ts +430 -0
- package/src/activities/__tests__/discover-mcp-server.test.ts +641 -0
- package/src/activities/__tests__/ensure-thread.test.ts +96 -0
- package/src/activities/__tests__/error-classifier.test.ts +372 -0
- package/src/activities/__tests__/evaluate-expressions.test.ts +114 -0
- package/src/activities/__tests__/hydrate-workflow-execution.test.ts +321 -0
- package/src/activities/__tests__/notification.test.ts +151 -0
- package/src/activities/__tests__/workflow-event-activities.test.ts +664 -0
- package/src/activities/call-agent-status.ts +130 -0
- package/src/activities/call-agent.ts +302 -0
- package/src/activities/call-eval.ts +333 -0
- package/src/activities/call-function.ts +73 -0
- package/src/activities/call-grpc.ts +140 -0
- package/src/activities/call-http.ts +185 -0
- package/src/activities/call-llm.ts +379 -0
- package/src/activities/call-transform.ts +54 -0
- package/src/activities/call-validate.ts +223 -0
- package/src/activities/classify-tool-approvals.ts +319 -0
- package/src/activities/discover-mcp-server.ts +411 -0
- package/src/activities/emit-event.ts +195 -0
- package/src/activities/ensure-thread.ts +45 -0
- package/src/activities/evaluate-expressions.ts +47 -0
- package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +188 -0
- package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +111 -0
- package/src/activities/execute-cursor/__tests__/cursor-baseurl-routing.test.ts +86 -0
- package/src/activities/execute-cursor/__tests__/cursor-fetch-interceptor-bypass.test.ts +64 -0
- package/src/activities/execute-cursor/__tests__/cursor-mode.test.ts +95 -0
- package/src/activities/execute-cursor/__tests__/cursor-sdk-auth-smoke.test.ts +90 -0
- package/src/activities/execute-cursor/__tests__/delta-enricher.test.ts +242 -0
- package/src/activities/execute-cursor/__tests__/error-classifier-introspection.test.ts +156 -0
- package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +211 -0
- package/src/activities/execute-cursor/__tests__/hitl-ledger.test.ts +298 -0
- package/src/activities/execute-cursor/__tests__/http2-interceptor.test.ts +360 -0
- package/src/activities/execute-cursor/__tests__/message-translator.test.ts +657 -0
- package/src/activities/execute-cursor/__tests__/model-pricing.test.ts +92 -0
- package/src/activities/execute-cursor/__tests__/prompt-builder-delegation.test.ts +101 -0
- package/src/activities/execute-cursor/__tests__/runner-error-regressions.test.ts +144 -0
- package/src/activities/execute-cursor/__tests__/session-lifecycle.test.ts +65 -0
- package/src/activities/execute-cursor/__tests__/skill-resolver.test.ts +265 -0
- package/src/activities/execute-cursor/__tests__/subagent-config.test.ts +107 -0
- package/src/activities/execute-cursor/__tests__/todo-tracker.test.ts +498 -0
- package/src/activities/execute-cursor/__tests__/workspace-provision.test.ts +283 -0
- package/src/activities/execute-cursor/approval-policy.ts +224 -0
- package/src/activities/execute-cursor/approval-state.ts +311 -0
- package/src/activities/execute-cursor/attachment-resolver.ts +78 -0
- package/src/activities/execute-cursor/blueprint-resolver.ts +234 -0
- package/src/activities/execute-cursor/connect-backfill.ts +49 -0
- package/src/activities/execute-cursor/cursor-event-recorder.ts +83 -0
- package/src/activities/execute-cursor/cursor-mode.ts +42 -0
- package/src/activities/execute-cursor/delta-enricher.ts +307 -0
- package/src/activities/execute-cursor/env-resolver.ts +64 -0
- package/src/activities/execute-cursor/error-classifier.ts +247 -0
- package/src/activities/execute-cursor/fetch-interceptor.ts +382 -0
- package/src/activities/execute-cursor/hitl-diagnostics.ts +82 -0
- package/src/activities/execute-cursor/hook-script.ts +159 -0
- package/src/activities/execute-cursor/http2-interceptor.ts +253 -0
- package/src/activities/execute-cursor/index.ts +1439 -0
- package/src/activities/execute-cursor/mcp-config.ts +66 -0
- package/src/activities/execute-cursor/mcp-resolver.ts +271 -0
- package/src/activities/execute-cursor/message-translator.ts +896 -0
- package/src/activities/execute-cursor/model-pricing-data.ts +167 -0
- package/src/activities/execute-cursor/model-pricing.ts +167 -0
- package/src/activities/execute-cursor/placeholder-resolver.ts +109 -0
- package/src/activities/execute-cursor/prompt-builder.ts +349 -0
- package/src/activities/execute-cursor/rejection-capture.ts +100 -0
- package/src/activities/execute-cursor/session-lifecycle.ts +429 -0
- package/src/activities/execute-cursor/skill-resolver.ts +176 -0
- package/src/activities/execute-cursor/subagent-config.ts +62 -0
- package/src/activities/execute-cursor/todo-tracker.ts +133 -0
- package/src/activities/execute-cursor/usage-accumulator.ts +126 -0
- package/src/activities/execute-cursor/workspace-provision.ts +55 -0
- package/src/activities/execute-cursor/workspace-setup.ts +75 -0
- package/src/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.ts +281 -0
- package/src/activities/execute-deep-agent/__tests__/attachment-injector.test.ts +720 -0
- package/src/activities/execute-deep-agent/__tests__/auto-publish.test.ts +146 -0
- package/src/activities/execute-deep-agent/__tests__/environment.test.ts +103 -0
- package/src/activities/execute-deep-agent/__tests__/event-recorder.test.ts +150 -0
- package/src/activities/execute-deep-agent/__tests__/execution-state-extended.test.ts +150 -0
- package/src/activities/execute-deep-agent/__tests__/execution-state.test.ts +157 -0
- package/src/activities/execute-deep-agent/__tests__/hitl-integration.test.ts +223 -0
- package/src/activities/execute-deep-agent/__tests__/hitl.test.ts +244 -0
- package/src/activities/execute-deep-agent/__tests__/index.test.ts +91 -0
- package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +240 -0
- package/src/activities/execute-deep-agent/__tests__/post-stream.test.ts +112 -0
- package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +208 -0
- package/src/activities/execute-deep-agent/__tests__/status-builder.test.ts +1771 -0
- package/src/activities/execute-deep-agent/__tests__/streaming-scheduler.test.ts +199 -0
- package/src/activities/execute-deep-agent/__tests__/streaming-v3.test.ts +527 -0
- package/src/activities/execute-deep-agent/__tests__/streaming.test.ts +508 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-tracker.test.ts +474 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-transformer.test.ts +734 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +71 -0
- package/src/activities/execute-deep-agent/__tests__/summarization-verification.test.ts +323 -0
- package/src/activities/execute-deep-agent/__tests__/v3-event-recorder.test.ts +186 -0
- package/src/activities/execute-deep-agent/__tests__/v3-protocol-normalizer.test.ts +324 -0
- package/src/activities/execute-deep-agent/__tests__/v3-status-builder.test.ts +504 -0
- package/src/activities/execute-deep-agent/__tests__/writeback-coordinator.test.ts +399 -0
- package/src/activities/execute-deep-agent/attachment-injector.ts +470 -0
- package/src/activities/execute-deep-agent/auto-publish.ts +80 -0
- package/src/activities/execute-deep-agent/environment.ts +67 -0
- package/src/activities/execute-deep-agent/event-recorder.ts +95 -0
- package/src/activities/execute-deep-agent/execution-state.ts +87 -0
- package/src/activities/execute-deep-agent/execution-status-writer.ts +19 -0
- package/src/activities/execute-deep-agent/hitl.ts +221 -0
- package/src/activities/execute-deep-agent/index.ts +342 -0
- package/src/activities/execute-deep-agent/inline-publisher.ts +134 -0
- package/src/activities/execute-deep-agent/post-stream.ts +109 -0
- package/src/activities/execute-deep-agent/prompt-builder.ts +264 -0
- package/src/activities/execute-deep-agent/setup.ts +599 -0
- package/src/activities/execute-deep-agent/status-builder-shared.ts +136 -0
- package/src/activities/execute-deep-agent/status-builder.ts +412 -0
- package/src/activities/execute-deep-agent/streaming-scheduler.ts +159 -0
- package/src/activities/execute-deep-agent/streaming-side-effects.ts +89 -0
- package/src/activities/execute-deep-agent/streaming-terminal.ts +96 -0
- package/src/activities/execute-deep-agent/streaming-v3.ts +272 -0
- package/src/activities/execute-deep-agent/streaming.ts +303 -0
- package/src/activities/execute-deep-agent/subagent-tracker.ts +445 -0
- package/src/activities/execute-deep-agent/subagent-transformer.ts +648 -0
- package/src/activities/execute-deep-agent/subagent-wiring.ts +56 -0
- package/src/activities/execute-deep-agent/v3-event-recorder.ts +111 -0
- package/src/activities/execute-deep-agent/v3-events.ts +153 -0
- package/src/activities/execute-deep-agent/v3-protocol-normalizer.ts +264 -0
- package/src/activities/execute-deep-agent/v3-status-builder.ts +490 -0
- package/src/activities/execute-deep-agent/writeback-coordinator.ts +420 -0
- package/src/activities/hydrate-workflow-execution.ts +306 -0
- package/src/activities/notification.ts +71 -0
- package/src/activities/promote-task-output.ts +126 -0
- package/src/activities/run-command.ts +148 -0
- package/src/activities/workflow-event-activities.ts +481 -0
- package/src/bootstrap.ts +173 -0
- package/src/budget/__tests__/tracker.test.ts +293 -0
- package/src/budget/index.ts +9 -0
- package/src/budget/tracker.ts +171 -0
- package/src/claimcheck/compressor.ts +9 -0
- package/src/claimcheck/config.ts +20 -0
- package/src/claimcheck/index.ts +3 -0
- package/src/claimcheck/payload-codec.ts +107 -0
- package/src/client/__tests__/server-contracts.test.ts +149 -0
- package/src/client/__tests__/stigmer-client.test.ts +142 -0
- package/src/client/server-contracts.ts +125 -0
- package/src/client/stigmer-client.ts +339 -0
- package/src/config.ts +185 -0
- package/src/idle-watchdog.ts +28 -0
- package/src/index.ts +48 -0
- package/src/interceptors/workflow-metrics-sink.ts +56 -0
- package/src/ipc-protocol-fixtures.ts +117 -0
- package/src/ipc-protocol.ts +113 -0
- package/src/main.ts +324 -0
- package/src/middleware/__tests__/approval-gate.test.ts +231 -0
- package/src/middleware/__tests__/cost-cap.test.ts +192 -0
- package/src/middleware/__tests__/error-hints.test.ts +90 -0
- package/src/middleware/__tests__/execution-budget.test.ts +138 -0
- package/src/middleware/__tests__/graceful-stop.test.ts +105 -0
- package/src/middleware/__tests__/loop-detection.test.ts +137 -0
- package/src/middleware/__tests__/otel-spans.test.ts +89 -0
- package/src/middleware/__tests__/think-tool.test.ts +26 -0
- package/src/middleware/__tests__/tool-truncation.test.ts +112 -0
- package/src/middleware/approval-gate.ts +179 -0
- package/src/middleware/cost-cap.ts +213 -0
- package/src/middleware/error-hints.ts +136 -0
- package/src/middleware/execution-budget.ts +176 -0
- package/src/middleware/graceful-stop.ts +86 -0
- package/src/middleware/index.ts +70 -0
- package/src/middleware/loop-detection.ts +192 -0
- package/src/middleware/otel-spans.ts +205 -0
- package/src/middleware/think-tool.ts +38 -0
- package/src/middleware/tool-truncation.ts +94 -0
- package/src/middleware/types.ts +114 -0
- package/src/notification/__tests__/provider.test.ts +85 -0
- package/src/notification/__tests__/webhook.test.ts +127 -0
- package/src/notification/index.ts +15 -0
- package/src/notification/provider.ts +52 -0
- package/src/notification/webhook.ts +61 -0
- package/src/otel-metrics.ts +73 -0
- package/src/otel.ts +194 -0
- package/src/runner-manager.ts +652 -0
- package/src/runner-token-coordinator.ts +135 -0
- package/src/runner.ts +380 -0
- package/src/shared/__tests__/approval-policy.test.ts +256 -0
- package/src/shared/__tests__/artifact-storage-extended.test.ts +208 -0
- package/src/shared/__tests__/artifact-storage.test.ts +365 -0
- package/src/shared/__tests__/connect-backfill.test.ts +346 -0
- package/src/shared/__tests__/extract-json.test.ts +153 -0
- package/src/shared/__tests__/grpc-retry-extended.test.ts +176 -0
- package/src/shared/__tests__/grpc-retry.test.ts +172 -0
- package/src/shared/__tests__/json-schema-to-zod.test.ts +227 -0
- package/src/shared/__tests__/llm-proxy.test.ts +179 -0
- package/src/shared/__tests__/mcp-manager.test.ts +154 -0
- package/src/shared/__tests__/model-pricing.test.ts +85 -0
- package/src/shared/__tests__/model-registry.test.ts +197 -0
- package/src/shared/__tests__/placeholder-resolver.test.ts +210 -0
- package/src/shared/__tests__/plan-artifact.test.ts +142 -0
- package/src/shared/__tests__/skill-relevance.test.ts +292 -0
- package/src/shared/__tests__/skill-writer.test.ts +349 -0
- package/src/shared/__tests__/status.test.ts +142 -0
- package/src/shared/__tests__/subagent-gate.test.ts +112 -0
- package/src/shared/__tests__/tool-kind.test.ts +58 -0
- package/src/shared/__tests__/zip-extract.test.ts +204 -0
- package/src/shared/approval-policy.ts +146 -0
- package/src/shared/artifact-storage.ts +207 -0
- package/src/shared/checkpointer/__tests__/factory.test.ts +42 -0
- package/src/shared/checkpointer/__tests__/http-saver.test.ts +176 -0
- package/src/shared/checkpointer/factory.ts +73 -0
- package/src/shared/checkpointer/http-saver.ts +349 -0
- package/src/shared/checkpointer/types.ts +12 -0
- package/src/shared/connect-backfill.ts +162 -0
- package/src/shared/extract-json.ts +153 -0
- package/src/shared/grpc-retry.ts +113 -0
- package/src/shared/heartbeat.ts +70 -0
- package/src/shared/json-schema-to-zod.ts +53 -0
- package/src/shared/llm-proxy.ts +138 -0
- package/src/shared/mcp-manager.ts +150 -0
- package/src/shared/mcp-resolver.ts +150 -0
- package/src/shared/model-pricing-data.ts +109 -0
- package/src/shared/model-pricing.ts +81 -0
- package/src/shared/model-registry.ts +214 -0
- package/src/shared/placeholder-resolver.ts +102 -0
- package/src/shared/plan-artifact.ts +120 -0
- package/src/shared/skill-relevance.ts +222 -0
- package/src/shared/skill-writer.ts +300 -0
- package/src/shared/status.ts +94 -0
- package/src/shared/subagent-gate.ts +117 -0
- package/src/shared/tool-kind.ts +91 -0
- package/src/shared/workspace/__tests__/file-tree.test.ts +210 -0
- package/src/shared/workspace/__tests__/git-source.test.ts +423 -0
- package/src/shared/workspace/__tests__/local-backend-platform.test.ts +259 -0
- package/src/shared/workspace/__tests__/local-backend.test.ts +154 -0
- package/src/shared/workspace/__tests__/platform-mount.test.ts +378 -0
- package/src/shared/workspace/__tests__/provisioner.test.ts +145 -0
- package/src/shared/workspace/file-tree.ts +116 -0
- package/src/shared/workspace/local-backend.ts +140 -0
- package/src/shared/workspace/platform-dir.ts +38 -0
- package/src/shared/workspace/platform-mount.ts +190 -0
- package/src/shared/workspace/provisioner.ts +150 -0
- package/src/shared/workspace/sources/empty.ts +20 -0
- package/src/shared/workspace/sources/git.ts +285 -0
- package/src/shared/workspace/sources/local-path.ts +89 -0
- package/src/shared/workspace/types.ts +69 -0
- package/src/shared/zip-extract.ts +193 -0
- package/src/worker.ts +98 -0
- package/src/workflow-engine/__tests__/do-executor-recovery.test.ts +382 -0
- package/src/workflow-engine/__tests__/do-executor.test.ts +963 -0
- package/src/workflow-engine/__tests__/errors.test.ts +174 -0
- package/src/workflow-engine/__tests__/expression.test.ts +776 -0
- package/src/workflow-engine/__tests__/for.test.ts +575 -0
- package/src/workflow-engine/__tests__/fork.test.ts +838 -0
- package/src/workflow-engine/__tests__/golden-execution.test.ts +1085 -0
- package/src/workflow-engine/__tests__/jq-wasm-spike.test.ts +90 -0
- package/src/workflow-engine/__tests__/loader.test.ts +1393 -0
- package/src/workflow-engine/__tests__/pause-resume.test.ts +267 -0
- package/src/workflow-engine/__tests__/recovery.test.ts +115 -0
- package/src/workflow-engine/__tests__/resolve.test.ts +432 -0
- package/src/workflow-engine/__tests__/retry.test.ts +306 -0
- package/src/workflow-engine/__tests__/state.test.ts +174 -0
- package/src/workflow-engine/__tests__/task-status-accumulator.test.ts +373 -0
- package/src/workflow-engine/__tests__/tasks/call-agent-output.test.ts +120 -0
- package/src/workflow-engine/__tests__/tasks/call-agent.test.ts +816 -0
- package/src/workflow-engine/__tests__/tasks/call-function.test.ts +205 -0
- package/src/workflow-engine/__tests__/tasks/call-grpc.test.ts +133 -0
- package/src/workflow-engine/__tests__/tasks/call-http.test.ts +150 -0
- package/src/workflow-engine/__tests__/tasks/emit-event.test.ts +322 -0
- package/src/workflow-engine/__tests__/tasks/human-input.test.ts +416 -0
- package/src/workflow-engine/__tests__/tasks/listen.test.ts +422 -0
- package/src/workflow-engine/__tests__/tasks/raise.test.ts +166 -0
- package/src/workflow-engine/__tests__/tasks/run.test.ts +272 -0
- package/src/workflow-engine/__tests__/tasks/set.test.ts +127 -0
- package/src/workflow-engine/__tests__/tasks/switch.test.ts +277 -0
- package/src/workflow-engine/__tests__/tasks/try.test.ts +590 -0
- package/src/workflow-engine/__tests__/tasks/wait.test.ts +173 -0
- package/src/workflow-engine/clone.ts +18 -0
- package/src/workflow-engine/do-executor.ts +569 -0
- package/src/workflow-engine/duration.ts +22 -0
- package/src/workflow-engine/error-utils.ts +97 -0
- package/src/workflow-engine/errors.ts +130 -0
- package/src/workflow-engine/expression-utils.ts +129 -0
- package/src/workflow-engine/expression.ts +430 -0
- package/src/workflow-engine/loader.ts +524 -0
- package/src/workflow-engine/recovery.ts +80 -0
- package/src/workflow-engine/resolve.ts +342 -0
- package/src/workflow-engine/retry.ts +109 -0
- package/src/workflow-engine/state.ts +56 -0
- package/src/workflow-engine/task-factory.ts +160 -0
- package/src/workflow-engine/task-status-accumulator.ts +204 -0
- package/src/workflow-engine/tasks/call-agent-output.ts +132 -0
- package/src/workflow-engine/tasks/call-agent.ts +221 -0
- package/src/workflow-engine/tasks/call-function.ts +107 -0
- package/src/workflow-engine/tasks/call-grpc.ts +47 -0
- package/src/workflow-engine/tasks/call-http.ts +51 -0
- package/src/workflow-engine/tasks/for.ts +244 -0
- package/src/workflow-engine/tasks/fork.ts +228 -0
- package/src/workflow-engine/tasks/human-input.ts +147 -0
- package/src/workflow-engine/tasks/listen.ts +166 -0
- package/src/workflow-engine/tasks/raise.ts +81 -0
- package/src/workflow-engine/tasks/run.ts +142 -0
- package/src/workflow-engine/tasks/set.ts +47 -0
- package/src/workflow-engine/tasks/switch.ts +102 -0
- package/src/workflow-engine/tasks/try.ts +274 -0
- package/src/workflow-engine/tasks/wait.ts +53 -0
- package/src/workflow-engine/types.ts +911 -0
- package/src/workflows/__tests__/connect-mcp-server.test.ts +359 -0
- package/src/workflows/__tests__/execute-serverless-workflow.test.ts +277 -0
- package/src/workflows/call-agent-orchestrator.ts +283 -0
- package/src/workflows/connect-mcp-server.ts +152 -0
- package/src/workflows/engine-core.ts +406 -0
- package/src/workflows/execute-from-execution.ts +101 -0
- package/src/workflows/execute-serverless-workflow.ts +60 -0
- package/src/workflows/human-input-orchestrator.ts +76 -0
- package/src/workflows/index.ts +32 -0
- package/src/workflows/listen-orchestrator.ts +200 -0
- package/src/workflows/metrics-sink.ts +48 -0
- package/src/workflows/run-orchestrator.ts +34 -0
- package/src/workflows/types.ts +64 -0
- package/src/workflows/workflow-signals.ts +55 -0
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps Stigmer Session lifecycle to Cursor Agent lifecycle.
|
|
3
|
+
*
|
|
4
|
+
* SessionSpec.harness_state_id stores the Cursor agentId. This module handles
|
|
5
|
+
* creating new agents (first execution), resuming existing agents
|
|
6
|
+
* (subsequent executions), graceful fallback on resume failure, and
|
|
7
|
+
* cleaning up agents (session deletion).
|
|
8
|
+
*
|
|
9
|
+
* Two execution modes:
|
|
10
|
+
*
|
|
11
|
+
* - Local mode: Agent.create({ local: { cwd } }) with explicit
|
|
12
|
+
* platform.workspaceRef/stateRoot for deterministic store keying.
|
|
13
|
+
* Produces agent- prefixed IDs.
|
|
14
|
+
*
|
|
15
|
+
* - Cloud mode (feature-flagged): Agent.create({ cloud: { repos } })
|
|
16
|
+
* for git-backed workspaces. Produces bc- prefixed IDs. No platform
|
|
17
|
+
* options — cloud state lives on Cursor's servers, not local SQLite.
|
|
18
|
+
*
|
|
19
|
+
* Key SDK limitation: mcpServers are NOT persisted across Agent.resume().
|
|
20
|
+
* They must be passed again on every resume call.
|
|
21
|
+
*
|
|
22
|
+
* Platform store keying (local only): The Cursor SDK defaults to
|
|
23
|
+
* process.cwd() for its internal state root lookup. In cloud sandboxes,
|
|
24
|
+
* process.cwd() is the runner's app directory, not the workspace — causing
|
|
25
|
+
* Agent.resume() to fail with "Agent not found". We pass explicit
|
|
26
|
+
* platform.workspaceRef and platform.stateRoot derived from the Stigmer
|
|
27
|
+
* sessionId to ensure deterministic store lookup regardless of process.cwd().
|
|
28
|
+
*
|
|
29
|
+
* Durability model: the SDK's local SQLite store (agent records, runs,
|
|
30
|
+
* checkpoints) is the source of truth for conversation continuation. It is
|
|
31
|
+
* persisted under the durable workspace volume (see resolvePlatformOptions)
|
|
32
|
+
* so Agent.resume() survives pod restart, reschedule, and snapshot restore.
|
|
33
|
+
* When resume nonetheless fails (store lost, corrupted, or agent unknown),
|
|
34
|
+
* this module creates a fresh agent and the caller starts a new turn from
|
|
35
|
+
* the user message plus re-injected instructions — there is no separate
|
|
36
|
+
* continuation store.
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
import { mkdirSync } from "node:fs";
|
|
40
|
+
import { join } from "node:path";
|
|
41
|
+
|
|
42
|
+
import { Agent } from "@cursor/sdk";
|
|
43
|
+
import type { SDKAgent, CursorAgentPlatformOptions, AgentDefinition } from "@cursor/sdk";
|
|
44
|
+
import type { CursorMcpServerConfig } from "./mcp-resolver.js";
|
|
45
|
+
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// Constants
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
|
|
50
|
+
const CURSOR_SDK_STATE_DIR = ".stigmer/cursor-sdk-state";
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Cursor SDK setting sources loaded for LOCAL agents.
|
|
54
|
+
*
|
|
55
|
+
* The Stigmer HITL approval gate is a `.cursor/hooks.json` preToolUse hook
|
|
56
|
+
* written into the workspace (see workspace-setup.ts). The Cursor SDK only
|
|
57
|
+
* loads workspace ("project") hooks when the "project" setting source is
|
|
58
|
+
* enabled — internally `includeProjectHooks = settingSources.includes("project")`
|
|
59
|
+
* (and the hooks subsystem itself is only constructed when a project/user
|
|
60
|
+
* source is present). The SDK default is `[]` ("inline config only"), which
|
|
61
|
+
* silently drops the hook and disables the entire approval gate. We must opt
|
|
62
|
+
* in to "project" so the hook loads and tool calls are actually gated.
|
|
63
|
+
*
|
|
64
|
+
* Side effect: this also loads other workspace `.cursor/*` config (rules,
|
|
65
|
+
* mcp.json, commands). For runner-provisioned workspaces that is inert; for
|
|
66
|
+
* sessions running on a user's own repo their project config is now honored.
|
|
67
|
+
*
|
|
68
|
+
* Cloud agents always load project settings server-side, so this is local-only.
|
|
69
|
+
*/
|
|
70
|
+
const LOCAL_SETTING_SOURCES = ["project"] as const;
|
|
71
|
+
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
// Public types — local mode
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
|
|
76
|
+
export interface CreateAgentOptions {
|
|
77
|
+
apiKey: string;
|
|
78
|
+
model: string;
|
|
79
|
+
workspaceDirs: string[];
|
|
80
|
+
sessionId: string;
|
|
81
|
+
/** Durable workspace volume root; the SDK state store lives under it. */
|
|
82
|
+
workspaceRootDir: string;
|
|
83
|
+
mcpServers?: Record<string, CursorMcpServerConfig>;
|
|
84
|
+
/**
|
|
85
|
+
* Custom sub-agents registered with the Cursor SDK so the parent can delegate
|
|
86
|
+
* to them by name via the Task tool. Not persisted across resume, so it must
|
|
87
|
+
* be re-supplied on every create/resume (mirrors mcpServers).
|
|
88
|
+
*/
|
|
89
|
+
agents?: Record<string, AgentDefinition>;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export interface ResumeAgentOptions {
|
|
93
|
+
apiKey: string;
|
|
94
|
+
agentId: string;
|
|
95
|
+
sessionId: string;
|
|
96
|
+
/** Durable workspace volume root; the SDK state store lives under it. */
|
|
97
|
+
workspaceRootDir: string;
|
|
98
|
+
model?: string;
|
|
99
|
+
mcpServers?: Record<string, CursorMcpServerConfig>;
|
|
100
|
+
/** Custom sub-agents — see {@link CreateAgentOptions.agents}. */
|
|
101
|
+
agents?: Record<string, AgentDefinition>;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
// Public types — cloud mode
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
|
|
108
|
+
export interface CloudRepo {
|
|
109
|
+
url: string;
|
|
110
|
+
startingRef?: string;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export interface CreateCloudAgentOptions {
|
|
114
|
+
apiKey: string;
|
|
115
|
+
model?: string;
|
|
116
|
+
repos: CloudRepo[];
|
|
117
|
+
sessionId: string;
|
|
118
|
+
mcpServers?: Record<string, CursorMcpServerConfig>;
|
|
119
|
+
/** Custom sub-agents — see {@link CreateAgentOptions.agents}. */
|
|
120
|
+
agents?: Record<string, AgentDefinition>;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export interface ResumeCloudAgentOptions {
|
|
124
|
+
apiKey: string;
|
|
125
|
+
agentId: string;
|
|
126
|
+
model?: string;
|
|
127
|
+
mcpServers?: Record<string, CursorMcpServerConfig>;
|
|
128
|
+
/** Custom sub-agents — see {@link CreateAgentOptions.agents}. */
|
|
129
|
+
agents?: Record<string, AgentDefinition>;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
// Public types — resolution result
|
|
134
|
+
// ---------------------------------------------------------------------------
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Discriminated reason explaining how the agent was resolved.
|
|
138
|
+
*
|
|
139
|
+
* Drives prompt selection in execute-cursor.ts:
|
|
140
|
+
* - created_first_execution: first turn, fresh agent
|
|
141
|
+
* - resumed_successfully: subsequent turn, agent alive (native context)
|
|
142
|
+
* - created_after_resume_failure: agent unknown/lost, fresh agent (no prior context)
|
|
143
|
+
*/
|
|
144
|
+
export type AgentResolutionReason =
|
|
145
|
+
| "created_first_execution"
|
|
146
|
+
| "resumed_successfully"
|
|
147
|
+
| "created_after_resume_failure";
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Result of resolveAgent() — carries the agent handle plus metadata that
|
|
151
|
+
* downstream phases use for prompt selection, harness_state_id persistence, and
|
|
152
|
+
* diagnostic logging.
|
|
153
|
+
*/
|
|
154
|
+
export interface AgentResolution {
|
|
155
|
+
agent: SDKAgent;
|
|
156
|
+
agentId: string;
|
|
157
|
+
isNew: boolean;
|
|
158
|
+
resumed: boolean;
|
|
159
|
+
mode: "local" | "cloud";
|
|
160
|
+
reason: AgentResolutionReason;
|
|
161
|
+
/** Non-empty only when reason is "created_after_resume_failure". */
|
|
162
|
+
resumeFailureDetail?: string;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// ---------------------------------------------------------------------------
|
|
166
|
+
// Local agent functions
|
|
167
|
+
// ---------------------------------------------------------------------------
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Compute deterministic platform options for a Stigmer session.
|
|
171
|
+
*
|
|
172
|
+
* workspaceRef is a synthetic identifier (not a filesystem path) that
|
|
173
|
+
* ensures the SDK's platform cache key is stable across activity
|
|
174
|
+
* invocations regardless of process.cwd().
|
|
175
|
+
*
|
|
176
|
+
* stateRoot is a session-isolated directory under the durable workspace
|
|
177
|
+
* volume ({workspaceRootDir}/.stigmer/cursor-sdk-state/{sessionId}) where
|
|
178
|
+
* the SDK persists its SQLite stores (agent records, runs, checkpoints).
|
|
179
|
+
* Placing it on the workspace volume (rather than $HOME) makes native
|
|
180
|
+
* Agent.resume() survive pod restart/reschedule and snapshot restore, and
|
|
181
|
+
* keys it by sessionId so sessions sharing one volume (e.g. the child agent
|
|
182
|
+
* executions of a workflow sandbox) never collide. Created eagerly to
|
|
183
|
+
* prevent ENOENT on first SDK write.
|
|
184
|
+
*
|
|
185
|
+
* Both inputs are required and must be non-empty: the stateRoot is keyed by
|
|
186
|
+
* sessionId, so an empty sessionId would collapse every session sharing the
|
|
187
|
+
* volume onto the same store and corrupt their conversation state.
|
|
188
|
+
*/
|
|
189
|
+
export function resolvePlatformOptions(
|
|
190
|
+
sessionId: string,
|
|
191
|
+
workspaceRootDir: string,
|
|
192
|
+
): CursorAgentPlatformOptions {
|
|
193
|
+
if (!sessionId) {
|
|
194
|
+
throw new Error(
|
|
195
|
+
"resolvePlatformOptions: sessionId is required but was empty. The Cursor SDK " +
|
|
196
|
+
"state store is keyed by sessionId; an empty value would collide across sessions " +
|
|
197
|
+
"sharing a workspace volume (e.g. a workflow sandbox's child agent executions).",
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
if (!workspaceRootDir) {
|
|
201
|
+
throw new Error(
|
|
202
|
+
"resolvePlatformOptions: workspaceRootDir is required but was empty. The Cursor " +
|
|
203
|
+
"SDK state store must live on the durable workspace volume to survive restarts.",
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
const stateRoot = join(workspaceRootDir, CURSOR_SDK_STATE_DIR, sessionId);
|
|
207
|
+
mkdirSync(stateRoot, { recursive: true });
|
|
208
|
+
return {
|
|
209
|
+
workspaceRef: `stigmer-session:${sessionId}`,
|
|
210
|
+
stateRoot,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Create a new local Cursor Agent for the first execution in a session.
|
|
216
|
+
*
|
|
217
|
+
* Supports multi-workspace: passes string[] when multiple dirs, string when single.
|
|
218
|
+
*/
|
|
219
|
+
export async function createAgent(options: CreateAgentOptions): Promise<SDKAgent> {
|
|
220
|
+
const cwd = options.workspaceDirs.length === 1
|
|
221
|
+
? options.workspaceDirs[0]
|
|
222
|
+
: options.workspaceDirs;
|
|
223
|
+
|
|
224
|
+
const platform = resolvePlatformOptions(options.sessionId, options.workspaceRootDir);
|
|
225
|
+
console.log(
|
|
226
|
+
`createAgent: sessionId=${options.sessionId}, workspaceRef=${platform.workspaceRef}, ` +
|
|
227
|
+
`stateRoot=${platform.stateRoot}, process.cwd=${process.cwd()}`,
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
return Agent.create({
|
|
231
|
+
apiKey: options.apiKey,
|
|
232
|
+
model: { id: options.model },
|
|
233
|
+
local: { cwd, settingSources: [...LOCAL_SETTING_SOURCES] },
|
|
234
|
+
mcpServers: options.mcpServers as Record<string, any>,
|
|
235
|
+
agents: options.agents,
|
|
236
|
+
platform,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Resume an existing local Cursor Agent for subsequent executions.
|
|
242
|
+
*
|
|
243
|
+
* Throws on failure — the caller (resolveAgent) decides whether to
|
|
244
|
+
* propagate or fall back to a fresh agent with continuation context.
|
|
245
|
+
*/
|
|
246
|
+
export async function resumeAgent(options: ResumeAgentOptions): Promise<SDKAgent> {
|
|
247
|
+
const platform = resolvePlatformOptions(options.sessionId, options.workspaceRootDir);
|
|
248
|
+
console.log(
|
|
249
|
+
`resumeAgent: agentId=${options.agentId}, sessionId=${options.sessionId}, ` +
|
|
250
|
+
`workspaceRef=${platform.workspaceRef}, stateRoot=${platform.stateRoot}, ` +
|
|
251
|
+
`process.cwd=${process.cwd()}`,
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
return Agent.resume(options.agentId, {
|
|
255
|
+
apiKey: options.apiKey,
|
|
256
|
+
model: options.model ? { id: options.model } : undefined,
|
|
257
|
+
// settingSources are not persisted across resume, so the "project" source
|
|
258
|
+
// (which loads the HITL approval hook) must be re-supplied every turn.
|
|
259
|
+
local: { settingSources: [...LOCAL_SETTING_SOURCES] },
|
|
260
|
+
mcpServers: options.mcpServers as Record<string, any>,
|
|
261
|
+
agents: options.agents,
|
|
262
|
+
platform,
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// ---------------------------------------------------------------------------
|
|
267
|
+
// Cloud agent functions
|
|
268
|
+
// ---------------------------------------------------------------------------
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Create a new cloud Cursor Agent for git-backed sessions.
|
|
272
|
+
*
|
|
273
|
+
* Cloud agents (bc- prefix) run on Cursor's servers with cloned repos.
|
|
274
|
+
* No platform options — cloud state lives server-side, not in local SQLite.
|
|
275
|
+
* Model is optional — Cursor resolves the caller's configured default
|
|
276
|
+
* when omitted.
|
|
277
|
+
*/
|
|
278
|
+
export async function createCloudAgent(options: CreateCloudAgentOptions): Promise<SDKAgent> {
|
|
279
|
+
console.log(
|
|
280
|
+
`createCloudAgent: sessionId=${options.sessionId}, ` +
|
|
281
|
+
`repos=${options.repos.map((r) => r.url).join(", ")}`,
|
|
282
|
+
);
|
|
283
|
+
|
|
284
|
+
return Agent.create({
|
|
285
|
+
apiKey: options.apiKey,
|
|
286
|
+
model: options.model ? { id: options.model } : undefined,
|
|
287
|
+
cloud: { repos: options.repos },
|
|
288
|
+
mcpServers: options.mcpServers as Record<string, any>,
|
|
289
|
+
agents: options.agents,
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Resume an existing cloud Cursor Agent for subsequent executions.
|
|
295
|
+
*
|
|
296
|
+
* Throws on failure — the caller (resolveAgent) decides whether to
|
|
297
|
+
* propagate or fall back to a fresh cloud agent with continuation context.
|
|
298
|
+
* No platform options — cloud state lives server-side.
|
|
299
|
+
*/
|
|
300
|
+
export async function resumeCloudAgent(options: ResumeCloudAgentOptions): Promise<SDKAgent> {
|
|
301
|
+
console.log(
|
|
302
|
+
`resumeCloudAgent: agentId=${options.agentId}`,
|
|
303
|
+
);
|
|
304
|
+
|
|
305
|
+
return Agent.resume(options.agentId, {
|
|
306
|
+
apiKey: options.apiKey,
|
|
307
|
+
model: options.model ? { id: options.model } : undefined,
|
|
308
|
+
mcpServers: options.mcpServers as Record<string, any>,
|
|
309
|
+
agents: options.agents,
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// ---------------------------------------------------------------------------
|
|
314
|
+
// Unified resolution
|
|
315
|
+
// ---------------------------------------------------------------------------
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Resolve a Cursor Agent for execution: resume if possible, create with
|
|
319
|
+
* graceful fallback if resume fails.
|
|
320
|
+
*
|
|
321
|
+
* The mode parameter determines which create/resume functions are used:
|
|
322
|
+
* - "local": createAgent / resumeAgent (with platform options)
|
|
323
|
+
* - "cloud": createCloudAgent / resumeCloudAgent (no platform options)
|
|
324
|
+
*
|
|
325
|
+
* When harnessStateId is non-empty (subsequent execution):
|
|
326
|
+
* 1. Attempt Agent.resume with mode-appropriate options.
|
|
327
|
+
* 2. On success: return { resumed: true, reason: "resumed_successfully" }.
|
|
328
|
+
* 3. On failure: log warning, create a fresh agent, return
|
|
329
|
+
* { resumed: false, reason: "created_after_resume_failure" }.
|
|
330
|
+
* The fresh agent has no prior conversation context; the caller
|
|
331
|
+
* starts a new turn from the user message and re-injected instructions.
|
|
332
|
+
*
|
|
333
|
+
* When harnessStateId is empty (first execution):
|
|
334
|
+
* Create a new agent; return { reason: "created_first_execution" }.
|
|
335
|
+
*
|
|
336
|
+
* Agent creation failures always propagate — if we cannot create an agent
|
|
337
|
+
* at all, that is an unrecoverable infrastructure error.
|
|
338
|
+
*/
|
|
339
|
+
export async function resolveAgent(
|
|
340
|
+
harnessStateId: string,
|
|
341
|
+
options: CreateAgentOptions | CreateCloudAgentOptions,
|
|
342
|
+
mode: "local" | "cloud" = "local",
|
|
343
|
+
): Promise<AgentResolution> {
|
|
344
|
+
if (harnessStateId) {
|
|
345
|
+
try {
|
|
346
|
+
const agent = mode === "cloud"
|
|
347
|
+
? await resumeCloudAgent({
|
|
348
|
+
apiKey: options.apiKey,
|
|
349
|
+
agentId: harnessStateId,
|
|
350
|
+
model: options.model,
|
|
351
|
+
mcpServers: options.mcpServers,
|
|
352
|
+
agents: options.agents,
|
|
353
|
+
})
|
|
354
|
+
: await resumeAgent({
|
|
355
|
+
apiKey: options.apiKey,
|
|
356
|
+
agentId: harnessStateId,
|
|
357
|
+
sessionId: (options as CreateAgentOptions).sessionId,
|
|
358
|
+
workspaceRootDir: (options as CreateAgentOptions).workspaceRootDir,
|
|
359
|
+
model: options.model,
|
|
360
|
+
mcpServers: options.mcpServers,
|
|
361
|
+
agents: options.agents,
|
|
362
|
+
});
|
|
363
|
+
|
|
364
|
+
return {
|
|
365
|
+
agent,
|
|
366
|
+
agentId: agent.agentId,
|
|
367
|
+
isNew: false,
|
|
368
|
+
resumed: true,
|
|
369
|
+
mode,
|
|
370
|
+
reason: "resumed_successfully",
|
|
371
|
+
};
|
|
372
|
+
} catch (err) {
|
|
373
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
374
|
+
console.warn(
|
|
375
|
+
`resolveAgent: resume failed for ${mode} agent "${harnessStateId}", ` +
|
|
376
|
+
`creating fresh agent (no prior context). ` +
|
|
377
|
+
`sessionId=${options.sessionId}, error: ${detail}`,
|
|
378
|
+
);
|
|
379
|
+
|
|
380
|
+
const agent = mode === "cloud"
|
|
381
|
+
? await createCloudAgent(options as CreateCloudAgentOptions)
|
|
382
|
+
: await createAgent(options as CreateAgentOptions);
|
|
383
|
+
|
|
384
|
+
console.log(
|
|
385
|
+
`resolveAgent: fallback ${mode} agent created. ` +
|
|
386
|
+
`oldAgentId=${harnessStateId}, newAgentId=${agent.agentId}, ` +
|
|
387
|
+
`sessionId=${options.sessionId}`,
|
|
388
|
+
);
|
|
389
|
+
|
|
390
|
+
return {
|
|
391
|
+
agent,
|
|
392
|
+
agentId: agent.agentId,
|
|
393
|
+
isNew: true,
|
|
394
|
+
resumed: false,
|
|
395
|
+
mode,
|
|
396
|
+
reason: "created_after_resume_failure",
|
|
397
|
+
resumeFailureDetail: detail,
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
const agent = mode === "cloud"
|
|
403
|
+
? await createCloudAgent(options as CreateCloudAgentOptions)
|
|
404
|
+
: await createAgent(options as CreateAgentOptions);
|
|
405
|
+
|
|
406
|
+
return {
|
|
407
|
+
agent,
|
|
408
|
+
agentId: agent.agentId,
|
|
409
|
+
isNew: true,
|
|
410
|
+
resumed: false,
|
|
411
|
+
mode,
|
|
412
|
+
reason: "created_first_execution",
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Dispose a Cursor Agent when a session is deleted.
|
|
418
|
+
* Best-effort: logs and swallows errors.
|
|
419
|
+
*/
|
|
420
|
+
export async function disposeAgent(agentId: string, apiKey: string): Promise<void> {
|
|
421
|
+
try {
|
|
422
|
+
await Agent.archive(agentId, { apiKey });
|
|
423
|
+
} catch (err) {
|
|
424
|
+
console.warn(
|
|
425
|
+
`Failed to archive Cursor agent ${agentId}:`,
|
|
426
|
+
err instanceof Error ? err.message : err,
|
|
427
|
+
);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves skill resources and writes them to the platform-managed directory.
|
|
3
|
+
*
|
|
4
|
+
* - Fetches skills via gRPC (by reference)
|
|
5
|
+
* - Writes SKILL.md to .stigmer/skills/{name}/SKILL.md
|
|
6
|
+
* - Downloads and extracts ZIP artifacts (references/, scripts/, etc.)
|
|
7
|
+
* - Uses a platform-managed directory outside the workspace
|
|
8
|
+
* - Creates a symlink from the workspace to the platform dir
|
|
9
|
+
* - Returns metadata for prompt injection
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { mkdir, writeFile, symlink, readlink, unlink, rm } from "node:fs/promises";
|
|
13
|
+
import { join, dirname } from "node:path";
|
|
14
|
+
import type { StigmerClient } from "../../client/stigmer-client.js";
|
|
15
|
+
import type { Skill } from "@stigmer/protos/ai/stigmer/agentic/skill/v1/api_pb";
|
|
16
|
+
import type { ApiResourceReference } from "@stigmer/protos/ai/stigmer/commons/apiresource/io_pb";
|
|
17
|
+
import type { SkillMetadata } from "./prompt-builder.js";
|
|
18
|
+
import { getPlatformDir } from "../../shared/workspace/platform-dir.js";
|
|
19
|
+
import { extractZipFileEntries } from "../../shared/zip-extract.js";
|
|
20
|
+
|
|
21
|
+
const STIGMER_LOCAL_STATE_DIR = ".stigmer";
|
|
22
|
+
const SKILLS_SUBDIR = "skills";
|
|
23
|
+
|
|
24
|
+
export interface SkillResolverOptions {
|
|
25
|
+
sessionId: string;
|
|
26
|
+
primaryWorkspaceDir: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Resolve skill references into written SKILL.md files and prompt metadata.
|
|
31
|
+
*
|
|
32
|
+
* Platform mount pattern: skills are written to
|
|
33
|
+
* ~/.stigmer/sessions/{sessionId}/platform/skills/{name}/SKILL.md
|
|
34
|
+
* with a symlink from {workspace}/.stigmer -> the platform dir.
|
|
35
|
+
*/
|
|
36
|
+
export async function resolveSkills(
|
|
37
|
+
client: StigmerClient,
|
|
38
|
+
skillRefs: ApiResourceReference[],
|
|
39
|
+
options: SkillResolverOptions,
|
|
40
|
+
): Promise<SkillMetadata[]> {
|
|
41
|
+
console.log(
|
|
42
|
+
`[resolveSkills] sessionId=${options.sessionId}, ` +
|
|
43
|
+
`primaryWorkspaceDir=${options.primaryWorkspaceDir ?? "(undefined)"}, ` +
|
|
44
|
+
`skillRefCount=${skillRefs.length}, ` +
|
|
45
|
+
`refs=[${skillRefs.map(r => `${r.org || "(default)"}/${r.slug}`).join(", ")}]`,
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
if (skillRefs.length === 0) return [];
|
|
49
|
+
|
|
50
|
+
const platformDir = getPlatformDir(options.sessionId);
|
|
51
|
+
const skillsDir = join(platformDir, SKILLS_SUBDIR);
|
|
52
|
+
await mkdir(skillsDir, { recursive: true });
|
|
53
|
+
|
|
54
|
+
await ensureStigmerSymlink(options.primaryWorkspaceDir, platformDir);
|
|
55
|
+
console.log(
|
|
56
|
+
`[resolveSkills] symlink created: ${join(options.primaryWorkspaceDir, STIGMER_LOCAL_STATE_DIR)} -> ${platformDir}`,
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
const results: SkillMetadata[] = [];
|
|
60
|
+
|
|
61
|
+
for (const ref of skillRefs) {
|
|
62
|
+
try {
|
|
63
|
+
const skill = await client.getSkillByReference(ref);
|
|
64
|
+
|
|
65
|
+
let artifactBytes: Uint8Array | undefined;
|
|
66
|
+
if (skill.status?.artifactStorageKey) {
|
|
67
|
+
try {
|
|
68
|
+
const resp = await client.getSkillArtifact(skill.status.artifactStorageKey);
|
|
69
|
+
if (resp.artifact && resp.artifact.length > 0) {
|
|
70
|
+
artifactBytes = resp.artifact;
|
|
71
|
+
}
|
|
72
|
+
} catch (err) {
|
|
73
|
+
console.warn(
|
|
74
|
+
`[resolveSkills] artifact download failed for ${ref.slug}, ` +
|
|
75
|
+
`falling back to SKILL.md only: ${err instanceof Error ? err.message : err}`,
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const meta = await writeSkill(skill, skillsDir, options.primaryWorkspaceDir, artifactBytes);
|
|
81
|
+
if (meta) {
|
|
82
|
+
results.push(meta);
|
|
83
|
+
console.log(`[resolveSkills] wrote skill: ${meta.name} -> ${meta.path}`);
|
|
84
|
+
} else {
|
|
85
|
+
console.warn(`[resolveSkills] skill ${ref.org}/${ref.slug} fetched but had no skillMd content`);
|
|
86
|
+
}
|
|
87
|
+
} catch (err) {
|
|
88
|
+
console.warn(
|
|
89
|
+
`[resolveSkills] failed to resolve skill ${ref.org}/${ref.slug}: ${err instanceof Error ? err.message : err}`,
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
console.log(
|
|
95
|
+
`[resolveSkills] completed: ${results.length}/${skillRefs.length} skills resolved`,
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
return results;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
async function writeSkill(
|
|
102
|
+
skill: Skill,
|
|
103
|
+
skillsDir: string,
|
|
104
|
+
workspaceDir: string,
|
|
105
|
+
artifactBytes?: Uint8Array,
|
|
106
|
+
): Promise<SkillMetadata | null> {
|
|
107
|
+
const spec = skill.spec;
|
|
108
|
+
if (!spec?.skillMd) return null;
|
|
109
|
+
|
|
110
|
+
const name = spec.name || skill.metadata?.slug || "unknown";
|
|
111
|
+
const skillDir = join(skillsDir, name);
|
|
112
|
+
await mkdir(skillDir, { recursive: true });
|
|
113
|
+
|
|
114
|
+
const skillMdPath = join(skillDir, "SKILL.md");
|
|
115
|
+
await writeFile(skillMdPath, spec.skillMd, "utf-8");
|
|
116
|
+
|
|
117
|
+
if (artifactBytes && artifactBytes.length > 0) {
|
|
118
|
+
const entries = await extractZipFileEntries(artifactBytes, { exclude: ["SKILL.md"] });
|
|
119
|
+
for (const entry of entries) {
|
|
120
|
+
const filePath = join(skillDir, entry.path);
|
|
121
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
122
|
+
await writeFile(filePath, entry.content, "utf-8");
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const relativePath = join(STIGMER_LOCAL_STATE_DIR, SKILLS_SUBDIR, name, "SKILL.md");
|
|
127
|
+
|
|
128
|
+
return {
|
|
129
|
+
name,
|
|
130
|
+
description: spec.description || `Skill: ${name}`,
|
|
131
|
+
path: relativePath,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Ensure .stigmer symlink in the workspace points to the platform dir.
|
|
137
|
+
*
|
|
138
|
+
* The Cursor SDK reads files from the workspace CWD, so we need the
|
|
139
|
+
* .stigmer directory to be accessible there. Unlike the Python runner
|
|
140
|
+
* which intercepts file paths, Cursor reads directly from the filesystem.
|
|
141
|
+
*/
|
|
142
|
+
async function ensureStigmerSymlink(
|
|
143
|
+
workspaceDir: string,
|
|
144
|
+
platformDir: string,
|
|
145
|
+
): Promise<void> {
|
|
146
|
+
const linkPath = join(workspaceDir, STIGMER_LOCAL_STATE_DIR);
|
|
147
|
+
|
|
148
|
+
try {
|
|
149
|
+
const existing = await readlink(linkPath);
|
|
150
|
+
if (existing === platformDir) return;
|
|
151
|
+
await unlink(linkPath);
|
|
152
|
+
} catch (err: any) {
|
|
153
|
+
if (err.code === "ENOENT") {
|
|
154
|
+
// No existing symlink
|
|
155
|
+
} else if (err.code === "EINVAL") {
|
|
156
|
+
// Exists but is not a symlink — remove the directory
|
|
157
|
+
await rm(linkPath, { recursive: true, force: true });
|
|
158
|
+
} else {
|
|
159
|
+
throw err;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
await symlink(platformDir, linkPath, "dir");
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Clean up platform-managed skill directory for a session.
|
|
168
|
+
*/
|
|
169
|
+
export async function cleanupSkills(sessionId: string): Promise<void> {
|
|
170
|
+
const platformDir = getPlatformDir(sessionId);
|
|
171
|
+
try {
|
|
172
|
+
await rm(platformDir, { recursive: true, force: true });
|
|
173
|
+
} catch {
|
|
174
|
+
// best-effort
|
|
175
|
+
}
|
|
176
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps Stigmer SubAgent blueprints to Cursor SDK custom sub-agent definitions.
|
|
3
|
+
*
|
|
4
|
+
* The Cursor SDK registers custom sub-agents via `AgentOptions.agents`
|
|
5
|
+
* (`Record<name, AgentDefinition>`). Once registered, the parent agent can
|
|
6
|
+
* delegate to them by name through the Task tool. This is the capability that
|
|
7
|
+
* makes blueprint sub-agents actually invokable on the Cursor harness — parity
|
|
8
|
+
* with the native deepagents harness, which compiles them into the graph.
|
|
9
|
+
*
|
|
10
|
+
* Known limitations (Cursor SDK, not Stigmer):
|
|
11
|
+
* - Per-sub-agent MCP tool filtering is NOT supported: custom sub-agents
|
|
12
|
+
* inherit the parent agent's MCP config (`SDKCustomSubagentDefinition` has no
|
|
13
|
+
* `mcpServers` field). A blueprint's `mcp_access` is therefore surfaced only
|
|
14
|
+
* as advisory prompt context, not enforced as an isolation boundary.
|
|
15
|
+
* - Built-in kinds (`explore`, `shell`, `generalPurpose`) are provided by
|
|
16
|
+
* Cursor's own runtime and must NOT be registered here — doing so would
|
|
17
|
+
* shadow the native ones. They are encouraged via prompt guidance instead.
|
|
18
|
+
*
|
|
19
|
+
* Because the SDK does not persist agent configuration across `Agent.resume()`
|
|
20
|
+
* (the same constraint that applies to `mcpServers`), the result of this
|
|
21
|
+
* mapper must be supplied on every create AND resume call so the delegation
|
|
22
|
+
* capability survives across turns.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import type { AgentDefinition } from "@cursor/sdk";
|
|
26
|
+
import type { SubAgent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/spec_pb";
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Build the Cursor SDK `agents` map from blueprint sub-agents.
|
|
30
|
+
*
|
|
31
|
+
* Returns `undefined` (rather than an empty object) when there are no usable
|
|
32
|
+
* entries, so callers can omit the `agents` option entirely.
|
|
33
|
+
*
|
|
34
|
+
* @param subAgents Blueprint sub-agents from `Agent.spec.sub_agents`.
|
|
35
|
+
*/
|
|
36
|
+
export function buildCursorSubAgentDefinitions(
|
|
37
|
+
subAgents: readonly SubAgent[],
|
|
38
|
+
): Record<string, AgentDefinition> | undefined {
|
|
39
|
+
if (subAgents.length === 0) return undefined;
|
|
40
|
+
|
|
41
|
+
const agents: Record<string, AgentDefinition> = {};
|
|
42
|
+
for (const sa of subAgents) {
|
|
43
|
+
const name = sa.name?.trim();
|
|
44
|
+
// The name is the SDK registration key and the handle the model uses to
|
|
45
|
+
// delegate. Skip entries without one rather than register an unaddressable
|
|
46
|
+
// sub-agent.
|
|
47
|
+
if (!name) continue;
|
|
48
|
+
|
|
49
|
+
// instructions is the sub-agent's system prompt. The proto requires it
|
|
50
|
+
// (min_len 10), but fall back defensively so a malformed blueprint still
|
|
51
|
+
// produces an invokable sub-agent instead of being silently dropped.
|
|
52
|
+
const prompt = sa.instructions?.trim() || sa.description?.trim() || name;
|
|
53
|
+
|
|
54
|
+
agents[name] = {
|
|
55
|
+
description: sa.description ?? "",
|
|
56
|
+
prompt,
|
|
57
|
+
model: sa.modelOverride ? { id: sa.modelOverride } : "inherit",
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return Object.keys(agents).length > 0 ? agents : undefined;
|
|
62
|
+
}
|