@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,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connect backfill for MCP servers without discovered capabilities.
|
|
3
|
+
*
|
|
4
|
+
* When an MCP server has empty discovered_capabilities, triggers the
|
|
5
|
+
* connect RPC to discover tools and classify approval policies via
|
|
6
|
+
* the LLM classifier. The connect RPC starts a Temporal workflow
|
|
7
|
+
* (discover + classify) and blocks until completion (~30 seconds).
|
|
8
|
+
*
|
|
9
|
+
* Backfill trigger: discovered_capabilities is empty or absent.
|
|
10
|
+
*
|
|
11
|
+
* Non-fatal: if connect fails for any server (permissions, timeout,
|
|
12
|
+
* unreachable), the original servers are kept and execution continues
|
|
13
|
+
* with empty policies. All tools from that server will require
|
|
14
|
+
* approval by default (fail-closed).
|
|
15
|
+
*
|
|
16
|
+
* This module is harness-agnostic — both ExecuteCursor and
|
|
17
|
+
* ExecuteDeepAgent use the same backfill logic. Each harness maps
|
|
18
|
+
* the returned ResolvedMcpServer[] into its SDK-specific format.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import type { ResolvedMcpServer } from "./mcp-resolver.js";
|
|
22
|
+
import { resolveMcpServers } from "./mcp-resolver.js";
|
|
23
|
+
import type { StigmerClient } from "../client/stigmer-client.js";
|
|
24
|
+
import type { McpServerUsage } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/spec_pb";
|
|
25
|
+
|
|
26
|
+
const CONNECT_TIMEOUT_MS = 60_000;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* When true, skip connect backfill entirely. The runner discovers
|
|
30
|
+
* tools directly via stdio/HTTP when it connects MCP servers, so
|
|
31
|
+
* the backfill (which routes through the Java service's Temporal
|
|
32
|
+
* workflow) is only needed for LLM-based approval classification.
|
|
33
|
+
* Offline tests set this because no worker polls the stigmer_runner
|
|
34
|
+
* queue that the Connect workflow dispatches to.
|
|
35
|
+
*/
|
|
36
|
+
const SKIP_BACKFILL = process.env.SKIP_MCP_CONNECT_BACKFILL === "true";
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Check whether an MCP server needs a connect backfill.
|
|
40
|
+
*
|
|
41
|
+
* Returns true if the server has never been discovered (empty
|
|
42
|
+
* capabilities). Exported for testing.
|
|
43
|
+
*/
|
|
44
|
+
export function needsBackfill(server: ResolvedMcpServer): boolean {
|
|
45
|
+
if (SKIP_BACKFILL) return false;
|
|
46
|
+
return server.discoveredCapabilitiesEmpty;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Run connect backfill for MCP servers that need it, then re-resolve
|
|
51
|
+
* to pick up the newly populated approval policies.
|
|
52
|
+
*
|
|
53
|
+
* Triggers the connect RPC synchronously for each server with empty
|
|
54
|
+
* discovered_capabilities. The RPC starts a Temporal workflow
|
|
55
|
+
* (discover + classify) and returns the updated McpServer.
|
|
56
|
+
*
|
|
57
|
+
* After at least one successful backfill, re-resolves ALL servers
|
|
58
|
+
* to pick up fresh policies. If no backfills succeed, returns the
|
|
59
|
+
* original servers unchanged.
|
|
60
|
+
*/
|
|
61
|
+
export async function backfillMcpServersIfNeeded(
|
|
62
|
+
client: StigmerClient,
|
|
63
|
+
currentServers: ResolvedMcpServer[],
|
|
64
|
+
usages: McpServerUsage[],
|
|
65
|
+
envVars: Record<string, string>,
|
|
66
|
+
org: string,
|
|
67
|
+
onHeartbeat?: () => void,
|
|
68
|
+
secretKeys?: ReadonlySet<string>,
|
|
69
|
+
): Promise<ResolvedMcpServer[]> {
|
|
70
|
+
const serversNeedingBackfill = currentServers.filter(needsBackfill);
|
|
71
|
+
|
|
72
|
+
if (serversNeedingBackfill.length === 0) {
|
|
73
|
+
return currentServers;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
console.log(
|
|
77
|
+
`[connect-backfill] Backfill needed for ${serversNeedingBackfill.length} MCP server(s): ` +
|
|
78
|
+
serversNeedingBackfill.map((s) => s.slug).join(", "),
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
let anyBackfilled = false;
|
|
82
|
+
|
|
83
|
+
for (const server of serversNeedingBackfill) {
|
|
84
|
+
try {
|
|
85
|
+
const serverRef = usages.find((u) => u.mcpServerRef?.slug === server.slug);
|
|
86
|
+
if (!serverRef?.mcpServerRef) continue;
|
|
87
|
+
|
|
88
|
+
const fullServer = await client.getMcpServerByReference(serverRef.mcpServerRef);
|
|
89
|
+
const serverId = fullServer.metadata?.id;
|
|
90
|
+
if (!serverId) continue;
|
|
91
|
+
|
|
92
|
+
const runtimeEnv = extractRuntimeEnvForServer(fullServer, envVars, secretKeys);
|
|
93
|
+
|
|
94
|
+
console.log(
|
|
95
|
+
`[connect-backfill] Triggering connect for "${server.slug}" (${serverId})`,
|
|
96
|
+
);
|
|
97
|
+
onHeartbeat?.();
|
|
98
|
+
|
|
99
|
+
const updated = await Promise.race([
|
|
100
|
+
client.connectMcpServer(serverId, org, runtimeEnv),
|
|
101
|
+
new Promise<never>((_, reject) =>
|
|
102
|
+
setTimeout(
|
|
103
|
+
() => reject(new Error(
|
|
104
|
+
`Connect timed out after ${CONNECT_TIMEOUT_MS / 1000}s`,
|
|
105
|
+
)),
|
|
106
|
+
CONNECT_TIMEOUT_MS,
|
|
107
|
+
),
|
|
108
|
+
),
|
|
109
|
+
]);
|
|
110
|
+
|
|
111
|
+
const toolCount = updated.status?.discoveredCapabilities?.tools.length ?? 0;
|
|
112
|
+
const approvalCount = updated.status?.toolApprovals?.length ?? 0;
|
|
113
|
+
console.log(
|
|
114
|
+
`[connect-backfill] "${server.slug}" — ` +
|
|
115
|
+
`discovered ${toolCount} tool(s), classified ${approvalCount} approval policy(ies)`,
|
|
116
|
+
);
|
|
117
|
+
anyBackfilled = true;
|
|
118
|
+
onHeartbeat?.();
|
|
119
|
+
} catch (err) {
|
|
120
|
+
console.warn(
|
|
121
|
+
`[connect-backfill] Failed for "${server.slug}": ` +
|
|
122
|
+
`${err instanceof Error ? err.message : err}. ` +
|
|
123
|
+
`Continuing with empty approval policies for this server.`,
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (!anyBackfilled) {
|
|
129
|
+
return currentServers;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const refreshed = await resolveMcpServers(client, usages, envVars);
|
|
133
|
+
return refreshed.resolvedServers;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Extract the MCP server's required env vars from the execution
|
|
138
|
+
* environment. Returns only the keys declared in spec.env that are
|
|
139
|
+
* present in the merged environment.
|
|
140
|
+
*
|
|
141
|
+
* isSecret is derived from the MCP server's env declaration first,
|
|
142
|
+
* then from the execution-level secretKeys set, defaulting to false.
|
|
143
|
+
*/
|
|
144
|
+
export function extractRuntimeEnvForServer(
|
|
145
|
+
server: { spec?: { env?: Record<string, unknown> } },
|
|
146
|
+
mergedEnv: Record<string, string>,
|
|
147
|
+
secretKeys?: ReadonlySet<string>,
|
|
148
|
+
): Record<string, { value: string; isSecret: boolean }> | undefined {
|
|
149
|
+
const envDecls = server.spec?.env;
|
|
150
|
+
if (!envDecls || Object.keys(envDecls).length === 0) return undefined;
|
|
151
|
+
|
|
152
|
+
const runtime: Record<string, { value: string; isSecret: boolean }> = {};
|
|
153
|
+
for (const key of Object.keys(envDecls)) {
|
|
154
|
+
if (key in mergedEnv) {
|
|
155
|
+
const decl = envDecls[key] as { isSecret?: boolean } | undefined;
|
|
156
|
+
const isSecret = decl?.isSecret ?? secretKeys?.has(key) ?? false;
|
|
157
|
+
runtime[key] = { value: mergedEnv[key], isSecret };
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
return Object.keys(runtime).length > 0 ? runtime : undefined;
|
|
162
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract JSON from agent text responses.
|
|
3
|
+
*
|
|
4
|
+
* Three-tier extraction with end-first scanning:
|
|
5
|
+
*
|
|
6
|
+
* Tier 1: JSON.parse on the full trimmed text.
|
|
7
|
+
* Tier 1.5: Code-fence extraction — scan fences last-to-first,
|
|
8
|
+
* only attempt parse when content starts with { or [.
|
|
9
|
+
* Tier 1.75: Last-brace extraction — find the last balanced {...}
|
|
10
|
+
* by scanning backwards from the end of the text.
|
|
11
|
+
*
|
|
12
|
+
* End-first scanning aligns with the prompt injection contract that
|
|
13
|
+
* tells the agent to put JSON as its "final response." When multiple
|
|
14
|
+
* JSON fragments exist (e.g. intermediate debug output followed by
|
|
15
|
+
* the actual result), the last fragment is overwhelmingly the correct
|
|
16
|
+
* one. If the heuristic picks wrong, downstream schema validation
|
|
17
|
+
* catches it and the caller falls through to LLM-based extraction.
|
|
18
|
+
*
|
|
19
|
+
* Trailing-comma repair (stripTrailingCommas) is applied before every
|
|
20
|
+
* JSON.parse attempt across all tiers.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Extract JSON from agent text. Returns the parsed value on success,
|
|
25
|
+
* or undefined so the caller can fall through to LLM-based extraction.
|
|
26
|
+
*/
|
|
27
|
+
export function extractJsonFromText(text: string): unknown | undefined {
|
|
28
|
+
if (!text) return undefined;
|
|
29
|
+
|
|
30
|
+
const trimmed = text.trim();
|
|
31
|
+
|
|
32
|
+
// Tier 1: full text is valid JSON
|
|
33
|
+
const direct = tryParse(trimmed);
|
|
34
|
+
if (direct !== undefined) return direct;
|
|
35
|
+
|
|
36
|
+
// Tier 1.5: JSON inside a code fence
|
|
37
|
+
const fenced = extractFromCodeFences(trimmed);
|
|
38
|
+
if (fenced !== undefined) return fenced;
|
|
39
|
+
|
|
40
|
+
// Tier 1.75: last balanced {...} in the text
|
|
41
|
+
const braced = extractLastJsonObject(trimmed);
|
|
42
|
+
if (braced !== undefined) return braced;
|
|
43
|
+
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// Tier 1.5 — code-fence extraction (last-to-first)
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
|
|
51
|
+
const CODE_FENCE_RE = /```(?:json|JSON)?\s*\n([\s\S]*?)```/g;
|
|
52
|
+
|
|
53
|
+
function extractFromCodeFences(text: string): unknown | undefined {
|
|
54
|
+
const fences: string[] = [];
|
|
55
|
+
let match: RegExpExecArray | null;
|
|
56
|
+
while ((match = CODE_FENCE_RE.exec(text)) !== null) {
|
|
57
|
+
fences.push(match[1]);
|
|
58
|
+
}
|
|
59
|
+
CODE_FENCE_RE.lastIndex = 0;
|
|
60
|
+
|
|
61
|
+
// Scan last-to-first — the final fence is most likely the structured output
|
|
62
|
+
for (let i = fences.length - 1; i >= 0; i--) {
|
|
63
|
+
const content = fences[i].trim();
|
|
64
|
+
if (!content.startsWith("{") && !content.startsWith("[")) continue;
|
|
65
|
+
const result = tryParse(content);
|
|
66
|
+
if (result !== undefined) return result;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
// Tier 1.75 — last balanced brace extraction
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
|
|
76
|
+
function extractLastJsonObject(text: string): unknown | undefined {
|
|
77
|
+
const lastClose = text.lastIndexOf("}");
|
|
78
|
+
if (lastClose === -1) return undefined;
|
|
79
|
+
|
|
80
|
+
// Walk backwards from lastClose to find the matching open brace,
|
|
81
|
+
// respecting nesting and string literals.
|
|
82
|
+
let depth = 0;
|
|
83
|
+
let inString = false;
|
|
84
|
+
let escaped = false;
|
|
85
|
+
|
|
86
|
+
for (let i = lastClose; i >= 0; i--) {
|
|
87
|
+
const ch = text[i];
|
|
88
|
+
|
|
89
|
+
if (inString) {
|
|
90
|
+
if (escaped) {
|
|
91
|
+
escaped = false;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (ch === "\\") {
|
|
95
|
+
escaped = true;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (ch === '"') {
|
|
99
|
+
inString = false;
|
|
100
|
+
}
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (ch === '"') {
|
|
105
|
+
inString = true;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (ch === "}") {
|
|
110
|
+
depth++;
|
|
111
|
+
} else if (ch === "{") {
|
|
112
|
+
depth--;
|
|
113
|
+
if (depth === 0) {
|
|
114
|
+
const candidate = text.slice(i, lastClose + 1);
|
|
115
|
+
return tryParse(candidate);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// ---------------------------------------------------------------------------
|
|
124
|
+
// Shared helpers
|
|
125
|
+
// ---------------------------------------------------------------------------
|
|
126
|
+
|
|
127
|
+
function tryParse(candidate: string): unknown | undefined {
|
|
128
|
+
try {
|
|
129
|
+
return JSON.parse(candidate);
|
|
130
|
+
} catch {
|
|
131
|
+
// fall through
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const repaired = stripTrailingCommas(candidate);
|
|
135
|
+
if (repaired !== candidate) {
|
|
136
|
+
try {
|
|
137
|
+
return JSON.parse(repaired);
|
|
138
|
+
} catch {
|
|
139
|
+
// repair didn't help
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Remove trailing commas before } and ] — a common LLM quirk that
|
|
148
|
+
* produces invalid JSON. Only removes commas that are followed by
|
|
149
|
+
* optional whitespace and a closing delimiter.
|
|
150
|
+
*/
|
|
151
|
+
function stripTrailingCommas(json: string): string {
|
|
152
|
+
return json.replace(/,\s*([}\]])/g, "$1");
|
|
153
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exponential-backoff retry wrapper for gRPC status persistence.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the raw StigmerClient.updateStatus() call with retry logic
|
|
5
|
+
* that classifies gRPC error codes as retryable vs terminal. A failed
|
|
6
|
+
* status update must never crash the streaming loop — on permanent
|
|
7
|
+
* failure, the signal falls back to UNSPECIFIED.
|
|
8
|
+
*
|
|
9
|
+
* Used by the ExecuteDeepAgent streaming loop. The simpler
|
|
10
|
+
* fire-and-forget persistStatus in shared/status.ts is preserved
|
|
11
|
+
* for ExecuteCursor and non-streaming callers.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { ConnectError, Code } from "@connectrpc/connect";
|
|
15
|
+
import { ExecutionControlSignal } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
16
|
+
import type { AgentExecutionStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
17
|
+
import type { StigmerClient } from "../client/stigmer-client.js";
|
|
18
|
+
|
|
19
|
+
export interface RetryOptions {
|
|
20
|
+
/** Base delay before the first retry (ms). Default: 100. */
|
|
21
|
+
readonly baseDelayMs?: number;
|
|
22
|
+
/** Backoff multiplier between retries. Default: 2. */
|
|
23
|
+
readonly backoffFactor?: number;
|
|
24
|
+
/** Maximum number of retry attempts. Default: 3. */
|
|
25
|
+
readonly maxRetries?: number;
|
|
26
|
+
/** Injectable delay function for testing. */
|
|
27
|
+
readonly delayFn?: (ms: number) => Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const RETRYABLE_CODES = new Set<Code>([
|
|
31
|
+
Code.Unavailable,
|
|
32
|
+
Code.DeadlineExceeded,
|
|
33
|
+
]);
|
|
34
|
+
|
|
35
|
+
const TERMINAL_CODES = new Set<Code>([
|
|
36
|
+
Code.InvalidArgument,
|
|
37
|
+
Code.NotFound,
|
|
38
|
+
Code.PermissionDenied,
|
|
39
|
+
]);
|
|
40
|
+
|
|
41
|
+
export function isRetryableError(err: unknown): boolean {
|
|
42
|
+
if (err instanceof ConnectError) {
|
|
43
|
+
return RETRYABLE_CODES.has(err.code);
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function isTerminalError(err: unknown): boolean {
|
|
49
|
+
if (err instanceof ConnectError) {
|
|
50
|
+
return TERMINAL_CODES.has(err.code);
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function defaultDelay(ms: number): Promise<void> {
|
|
56
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Persist execution status with exponential-backoff retry.
|
|
61
|
+
*
|
|
62
|
+
* Returns the ExecutionControlSignal from the server on success.
|
|
63
|
+
* On permanent or exhausted-retry failure, logs the error and
|
|
64
|
+
* returns UNSPECIFIED (never throws).
|
|
65
|
+
*/
|
|
66
|
+
export async function persistWithRetry(
|
|
67
|
+
client: StigmerClient,
|
|
68
|
+
executionId: string,
|
|
69
|
+
status: AgentExecutionStatus,
|
|
70
|
+
options?: RetryOptions,
|
|
71
|
+
): Promise<ExecutionControlSignal> {
|
|
72
|
+
const baseDelay = options?.baseDelayMs ?? 100;
|
|
73
|
+
const factor = options?.backoffFactor ?? 2;
|
|
74
|
+
const maxRetries = options?.maxRetries ?? 3;
|
|
75
|
+
const delay = options?.delayFn ?? defaultDelay;
|
|
76
|
+
|
|
77
|
+
let lastError: unknown;
|
|
78
|
+
|
|
79
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
80
|
+
try {
|
|
81
|
+
const response = await client.updateStatus(executionId, status);
|
|
82
|
+
return response.signal;
|
|
83
|
+
} catch (err: unknown) {
|
|
84
|
+
lastError = err;
|
|
85
|
+
|
|
86
|
+
if (isTerminalError(err)) {
|
|
87
|
+
const code = (err as ConnectError).code;
|
|
88
|
+
console.error(
|
|
89
|
+
`[grpc-retry] Terminal error persisting status for ${executionId}: ` +
|
|
90
|
+
`code=${Code[code]} (attempt ${attempt + 1}/${maxRetries + 1})`,
|
|
91
|
+
);
|
|
92
|
+
return ExecutionControlSignal.UNSPECIFIED;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (!isRetryableError(err) || attempt === maxRetries) {
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const delayMs = baseDelay * Math.pow(factor, attempt);
|
|
100
|
+
console.warn(
|
|
101
|
+
`[grpc-retry] Retryable error for ${executionId}: ` +
|
|
102
|
+
`code=${err instanceof ConnectError ? Code[err.code] : "unknown"} ` +
|
|
103
|
+
`(attempt ${attempt + 1}/${maxRetries + 1}, retry in ${delayMs}ms)`,
|
|
104
|
+
);
|
|
105
|
+
await delay(delayMs);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
console.error(
|
|
110
|
+
`[grpc-retry] All retries exhausted for ${executionId}: ${lastError}`,
|
|
111
|
+
);
|
|
112
|
+
return ExecutionControlSignal.UNSPECIFIED;
|
|
113
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Activity heartbeat utility.
|
|
3
|
+
*
|
|
4
|
+
* Provides a periodic heartbeat loop that activities can start for
|
|
5
|
+
* long-running operations. The loop sends heartbeat details at a
|
|
6
|
+
* configurable interval and stops when cancelled or when the
|
|
7
|
+
* returned abort function is called.
|
|
8
|
+
*
|
|
9
|
+
* Heartbeats serve two purposes:
|
|
10
|
+
* 1. Prevent Temporal from timing out the activity (heartbeatTimeout)
|
|
11
|
+
* 2. Detect parent workflow cancellation (CancelledFailure from heartbeat)
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { Context, CancelledFailure } from "@temporalio/activity";
|
|
15
|
+
|
|
16
|
+
export interface HeartbeatHandle {
|
|
17
|
+
stop(): void;
|
|
18
|
+
readonly cancelled: boolean;
|
|
19
|
+
readonly workerShutdown: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface HeartbeatOptions {
|
|
23
|
+
shutdownSignal?: AbortSignal;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function startHeartbeat(
|
|
27
|
+
intervalMs: number,
|
|
28
|
+
getDetails?: () => Record<string, unknown>,
|
|
29
|
+
options?: HeartbeatOptions,
|
|
30
|
+
): HeartbeatHandle {
|
|
31
|
+
let stopped = false;
|
|
32
|
+
let wasCancelled = false;
|
|
33
|
+
let wasWorkerShutdown = false;
|
|
34
|
+
|
|
35
|
+
const timer = setInterval(() => {
|
|
36
|
+
if (stopped) return;
|
|
37
|
+
try {
|
|
38
|
+
Context.current().heartbeat(getDetails?.());
|
|
39
|
+
} catch (err) {
|
|
40
|
+
if (err instanceof CancelledFailure) {
|
|
41
|
+
if (options?.shutdownSignal?.aborted) {
|
|
42
|
+
wasWorkerShutdown = true;
|
|
43
|
+
} else {
|
|
44
|
+
wasCancelled = true;
|
|
45
|
+
}
|
|
46
|
+
stopped = true;
|
|
47
|
+
clearInterval(timer);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}, intervalMs);
|
|
51
|
+
|
|
52
|
+
return {
|
|
53
|
+
stop() {
|
|
54
|
+
stopped = true;
|
|
55
|
+
clearInterval(timer);
|
|
56
|
+
},
|
|
57
|
+
get cancelled() {
|
|
58
|
+
return wasCancelled;
|
|
59
|
+
},
|
|
60
|
+
get workerShutdown() {
|
|
61
|
+
return wasWorkerShutdown;
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function checkCancellation(): void {
|
|
67
|
+
if (Context.current().cancellationSignal.aborted) {
|
|
68
|
+
throw new CancelledFailure("Activity cancelled by workflow");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert a JSON Schema object to a Zod schema.
|
|
3
|
+
*
|
|
4
|
+
* Used by multiple activity layers (call:llm, ExecuteCursor extraction,
|
|
5
|
+
* ExecuteDeepAgent responseFormat) to produce Zod schemas for
|
|
6
|
+
* `withStructuredOutput()` / function-calling APIs.
|
|
7
|
+
*
|
|
8
|
+
* Handles the subset of JSON Schema used by workflow output schemas:
|
|
9
|
+
* object types with required/optional fields, string/number/boolean/array
|
|
10
|
+
* primitives, enum constraints, and null types.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { z } from "zod";
|
|
14
|
+
|
|
15
|
+
export function jsonSchemaToZod(schema: Record<string, unknown>): z.ZodType {
|
|
16
|
+
const type = schema.type as string | undefined;
|
|
17
|
+
|
|
18
|
+
if (type === "object") {
|
|
19
|
+
const properties = schema.properties as Record<string, Record<string, unknown>> | undefined;
|
|
20
|
+
const required = new Set(schema.required as string[] | undefined ?? []);
|
|
21
|
+
|
|
22
|
+
if (!properties) return z.object({}).passthrough();
|
|
23
|
+
|
|
24
|
+
const shape: Record<string, z.ZodType> = {};
|
|
25
|
+
for (const [key, propSchema] of Object.entries(properties)) {
|
|
26
|
+
let fieldType = jsonSchemaToZod(propSchema);
|
|
27
|
+
if (!required.has(key)) {
|
|
28
|
+
fieldType = fieldType.nullable();
|
|
29
|
+
}
|
|
30
|
+
shape[key] = fieldType;
|
|
31
|
+
}
|
|
32
|
+
return z.object(shape).passthrough();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (type === "array") {
|
|
36
|
+
const items = schema.items as Record<string, unknown> | undefined;
|
|
37
|
+
return z.array(items ? jsonSchemaToZod(items) : z.unknown());
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (type === "string") {
|
|
41
|
+
const enumValues = schema.enum as string[] | undefined;
|
|
42
|
+
if (enumValues && enumValues.length > 0) {
|
|
43
|
+
return z.enum(enumValues as [string, ...string[]]);
|
|
44
|
+
}
|
|
45
|
+
return z.string();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (type === "number" || type === "integer") return z.number();
|
|
49
|
+
if (type === "boolean") return z.boolean();
|
|
50
|
+
if (type === "null") return z.null();
|
|
51
|
+
|
|
52
|
+
return z.unknown();
|
|
53
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM proxy routing utilities — shared between ExecuteDeepAgent and
|
|
3
|
+
* ClassifyToolApprovals (and any future LLM-calling activities).
|
|
4
|
+
*
|
|
5
|
+
* Responsibilities:
|
|
6
|
+
* 1. Infer the LLM provider from a model name string (prefix heuristics).
|
|
7
|
+
* 2. Construct the correct proxy base URL for each provider, matching the
|
|
8
|
+
* path pattern expected by stigmer-cloud's LlmProxyController:
|
|
9
|
+
* - Anthropic: {proxy}/v1/proxy/llm/anthropic
|
|
10
|
+
* - OpenAI: {proxy}/v1/proxy/llm/openai/v1
|
|
11
|
+
* 3. Build authorization and scope headers for proxy requests.
|
|
12
|
+
*
|
|
13
|
+
* These utilities mirror the Python agent-runner's `LLMConfig.build_llm_kwargs`
|
|
14
|
+
* but as composable functions rather than a config class method.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
export type LlmProvider = "anthropic" | "openai";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Provider-specific path suffixes appended to `STIGMER_PROXY_ENDPOINT`.
|
|
21
|
+
*
|
|
22
|
+
* OpenAI's SDK includes `/v1` in its default base URL (https://api.openai.com/v1),
|
|
23
|
+
* so the proxy path includes it: `/v1/proxy/llm/openai/v1`.
|
|
24
|
+
*
|
|
25
|
+
* Anthropic's SDK does NOT include `/v1` in its base URL (https://api.anthropic.com),
|
|
26
|
+
* so the proxy path omits it: `/v1/proxy/llm/anthropic`.
|
|
27
|
+
*/
|
|
28
|
+
const PROXY_PATHS: Readonly<Record<LlmProvider, string>> = {
|
|
29
|
+
anthropic: "/v1/proxy/llm/anthropic",
|
|
30
|
+
openai: "/v1/proxy/llm/openai/v1",
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const OPENAI_PREFIXES = ["gpt", "o1", "o3", "o4", "chatgpt"] as const;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Infer the LLM provider from a model name.
|
|
37
|
+
*
|
|
38
|
+
* Resolution order:
|
|
39
|
+
* 1. Explicit prefix syntax: "provider:model-name" (e.g. "openai:gpt-4.1")
|
|
40
|
+
* 2. Name prefix heuristics (claude → anthropic, gpt/o1/o3/o4 → openai)
|
|
41
|
+
*
|
|
42
|
+
* Throws if the provider cannot be determined — callers should not silently
|
|
43
|
+
* fall back to a default provider when an unknown model is requested.
|
|
44
|
+
*/
|
|
45
|
+
export function inferProvider(modelName: string): LlmProvider {
|
|
46
|
+
if (!modelName) {
|
|
47
|
+
throw new Error("Model name is required but received an empty string");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const colonIdx = modelName.indexOf(":");
|
|
51
|
+
if (colonIdx > 0 && colonIdx < modelName.length - 1) {
|
|
52
|
+
const prefix = modelName.slice(0, colonIdx).toLowerCase();
|
|
53
|
+
if (prefix === "anthropic" || prefix === "openai") {
|
|
54
|
+
return prefix;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const lower = modelName.toLowerCase();
|
|
59
|
+
|
|
60
|
+
if (lower.startsWith("claude")) {
|
|
61
|
+
return "anthropic";
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
for (const prefix of OPENAI_PREFIXES) {
|
|
65
|
+
if (lower.startsWith(prefix)) {
|
|
66
|
+
return "openai";
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
throw new Error(
|
|
71
|
+
`Cannot determine LLM provider for model "${modelName}". ` +
|
|
72
|
+
`Known prefixes: claude* (anthropic), gpt*/o1*/o3*/o4*/chatgpt* (openai). ` +
|
|
73
|
+
`Use explicit prefix syntax "provider:model-name" for non-standard model names.`,
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Strip an explicit "provider:" prefix from the model name, returning
|
|
79
|
+
* just the model ID portion. If no explicit prefix is present, returns
|
|
80
|
+
* the original name unchanged.
|
|
81
|
+
*/
|
|
82
|
+
export function stripProviderPrefix(modelName: string): string {
|
|
83
|
+
const colonIdx = modelName.indexOf(":");
|
|
84
|
+
if (colonIdx > 0 && colonIdx < modelName.length - 1) {
|
|
85
|
+
const prefix = modelName.slice(0, colonIdx).toLowerCase();
|
|
86
|
+
if (prefix === "anthropic" || prefix === "openai") {
|
|
87
|
+
return modelName.slice(colonIdx + 1);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return modelName;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Construct the proxy base URL for a given provider.
|
|
95
|
+
*
|
|
96
|
+
* The returned URL is what gets passed as `baseURL` / `clientOptions.baseURL`
|
|
97
|
+
* to the LangChain model constructor. The LangChain SDK appends provider-
|
|
98
|
+
* specific API paths (e.g. `/v1/messages` for Anthropic, `/chat/completions`
|
|
99
|
+
* for OpenAI).
|
|
100
|
+
*
|
|
101
|
+
* Example:
|
|
102
|
+
* resolveProxyBaseUrl("https://api.stigmer.ai", "openai")
|
|
103
|
+
* → "https://api.stigmer.ai/v1/proxy/llm/openai/v1"
|
|
104
|
+
*/
|
|
105
|
+
export function resolveProxyBaseUrl(
|
|
106
|
+
proxyEndpoint: string,
|
|
107
|
+
provider: LlmProvider,
|
|
108
|
+
): string {
|
|
109
|
+
const base = proxyEndpoint.replace(/\/+$/, "");
|
|
110
|
+
return `${base}${PROXY_PATHS[provider]}`;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Build the HTTP headers for proxy-routed LLM requests.
|
|
115
|
+
*
|
|
116
|
+
* Always includes Bearer authorization. Optionally includes scope headers
|
|
117
|
+
* used by the proxy for FGA authorization and billing attribution.
|
|
118
|
+
*/
|
|
119
|
+
export function buildProxyHeaders(
|
|
120
|
+
token: string,
|
|
121
|
+
options?: { executionId?: string; mcpServerId?: string; workflowExecutionId?: string },
|
|
122
|
+
): Record<string, string> {
|
|
123
|
+
const headers: Record<string, string> = {
|
|
124
|
+
Authorization: `Bearer ${token}`,
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
if (options?.executionId) {
|
|
128
|
+
headers["X-Stigmer-Execution-Id"] = options.executionId;
|
|
129
|
+
}
|
|
130
|
+
if (options?.mcpServerId) {
|
|
131
|
+
headers["X-Stigmer-Mcp-Server-Id"] = options.mcpServerId;
|
|
132
|
+
}
|
|
133
|
+
if (options?.workflowExecutionId) {
|
|
134
|
+
headers["X-Stigmer-Workflow-Execution-Id"] = options.workflowExecutionId;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return headers;
|
|
138
|
+
}
|