@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,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkflowError — typed, serializable error following the CNCF
|
|
3
|
+
* Serverless Workflow error shape (type, status, title, detail, instance).
|
|
4
|
+
*
|
|
5
|
+
* Used by:
|
|
6
|
+
* - `raise` tasks to throw structured errors
|
|
7
|
+
* - `try` executor to normalize caught errors
|
|
8
|
+
* - `catch.errors.with` to filter errors by type/status
|
|
9
|
+
* - `catch.as` to bind error details into state for jq expressions
|
|
10
|
+
*
|
|
11
|
+
* Sandbox-safe: zero dependencies, no Node.js or Temporal imports.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type { CatchErrors } from "./types.js";
|
|
15
|
+
|
|
16
|
+
const RUNTIME_ERROR_TYPE =
|
|
17
|
+
"https://serverlessworkflow.io/spec/1.0.0/errors/runtime";
|
|
18
|
+
|
|
19
|
+
export class WorkflowError extends Error {
|
|
20
|
+
readonly type: string;
|
|
21
|
+
readonly status: number;
|
|
22
|
+
readonly title: string;
|
|
23
|
+
readonly detail: string;
|
|
24
|
+
readonly instance: string;
|
|
25
|
+
|
|
26
|
+
constructor(fields: {
|
|
27
|
+
type: string;
|
|
28
|
+
status: number;
|
|
29
|
+
title?: string;
|
|
30
|
+
detail?: string;
|
|
31
|
+
instance?: string;
|
|
32
|
+
}) {
|
|
33
|
+
const message =
|
|
34
|
+
fields.title ?? fields.detail ?? `WorkflowError [${fields.type}]`;
|
|
35
|
+
super(message);
|
|
36
|
+
this.name = "WorkflowError";
|
|
37
|
+
this.type = fields.type;
|
|
38
|
+
this.status = fields.status;
|
|
39
|
+
this.title = fields.title ?? "";
|
|
40
|
+
this.detail = fields.detail ?? "";
|
|
41
|
+
this.instance = fields.instance ?? "";
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Serializes to a plain object for binding into workflow state
|
|
46
|
+
* via `catch.as`. The shape matches the CNCF error definition,
|
|
47
|
+
* making it accessible to jq expressions like `${ .error.type }`.
|
|
48
|
+
*/
|
|
49
|
+
toJSON(): Record<string, unknown> {
|
|
50
|
+
return {
|
|
51
|
+
type: this.type,
|
|
52
|
+
status: this.status,
|
|
53
|
+
title: this.title,
|
|
54
|
+
detail: this.detail,
|
|
55
|
+
instance: this.instance,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Wraps any caught value into a WorkflowError with a consistent
|
|
61
|
+
* CNCF shape. WorkflowError instances pass through unchanged.
|
|
62
|
+
*/
|
|
63
|
+
static fromUnknown(err: unknown): WorkflowError {
|
|
64
|
+
if (err instanceof WorkflowError) {
|
|
65
|
+
return err;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (err instanceof Error) {
|
|
69
|
+
return new WorkflowError({
|
|
70
|
+
type: RUNTIME_ERROR_TYPE,
|
|
71
|
+
status: 500,
|
|
72
|
+
title: err.name,
|
|
73
|
+
detail: err.message,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (typeof err === "string") {
|
|
78
|
+
return new WorkflowError({
|
|
79
|
+
type: RUNTIME_ERROR_TYPE,
|
|
80
|
+
status: 500,
|
|
81
|
+
title: "Error",
|
|
82
|
+
detail: err,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (err !== null && typeof err === "object") {
|
|
87
|
+
const obj = err as Record<string, unknown>;
|
|
88
|
+
return new WorkflowError({
|
|
89
|
+
type: typeof obj.type === "string" ? obj.type : RUNTIME_ERROR_TYPE,
|
|
90
|
+
status: typeof obj.status === "number" ? obj.status : 500,
|
|
91
|
+
title: typeof obj.title === "string" ? obj.title : "",
|
|
92
|
+
detail: typeof obj.detail === "string" ? obj.detail : "",
|
|
93
|
+
instance: typeof obj.instance === "string" ? obj.instance : "",
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return new WorkflowError({
|
|
98
|
+
type: RUNTIME_ERROR_TYPE,
|
|
99
|
+
status: 500,
|
|
100
|
+
title: "Unknown error",
|
|
101
|
+
detail: String(err),
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Tests whether an error matches a `catch.errors.with` filter.
|
|
107
|
+
* Returns true if the error satisfies ALL specified filter fields
|
|
108
|
+
* (AND semantics). An empty or undefined filter matches all errors.
|
|
109
|
+
*
|
|
110
|
+
* Matching is exact equality: `type` by string, `status` by number.
|
|
111
|
+
*/
|
|
112
|
+
static matches(
|
|
113
|
+
error: WorkflowError,
|
|
114
|
+
filter: CatchErrors | undefined,
|
|
115
|
+
): boolean {
|
|
116
|
+
if (!filter?.with) return true;
|
|
117
|
+
|
|
118
|
+
const conditions = filter.with;
|
|
119
|
+
|
|
120
|
+
if ("type" in conditions && conditions.type !== error.type) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if ("status" in conditions && conditions.status !== error.status) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure expression-parsing utilities safe for the Temporal workflow sandbox.
|
|
3
|
+
*
|
|
4
|
+
* These functions perform only synchronous string manipulation with zero
|
|
5
|
+
* external dependencies — no Node.js built-ins, no Wasm, no I/O. They
|
|
6
|
+
* can be imported from workflow-side code (inside the deterministic V8
|
|
7
|
+
* isolate) without violating sandbox constraints.
|
|
8
|
+
*
|
|
9
|
+
* Activity-only evaluation logic (jq-wasm, crypto) remains in
|
|
10
|
+
* `expression.ts` which must NOT be imported from workflow code.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
14
|
+
// Expression Detection
|
|
15
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Checks if a string is a strict runtime expression: `${ ... }`.
|
|
19
|
+
* Matches Go's `model.IsStrictExpr` — requires the entire string to
|
|
20
|
+
* be wrapped, with a space after `${`.
|
|
21
|
+
*/
|
|
22
|
+
export function isStrictExpr(str: string): boolean {
|
|
23
|
+
return str.startsWith("${ ") && str.endsWith(" }");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Strips the `${ ` prefix and ` }` suffix from a strict expression.
|
|
28
|
+
* Matches Go's `model.SanitizeExpr`.
|
|
29
|
+
*/
|
|
30
|
+
export function sanitizeExpr(str: string): string {
|
|
31
|
+
return str.slice(3, -2);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
35
|
+
// Embedded Expression Extraction (brace-depth tracking)
|
|
36
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
37
|
+
|
|
38
|
+
export interface EmbeddedExpression {
|
|
39
|
+
/** Byte offset of the opening `$` in the source string. */
|
|
40
|
+
start: number;
|
|
41
|
+
/** Byte offset one past the closing `}`. */
|
|
42
|
+
end: number;
|
|
43
|
+
/** The raw jq expression between `${ ` and ` }`. */
|
|
44
|
+
expr: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const EMBEDDED_MARKER = "${ ";
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Scans a string for embedded `${ ... }` expressions using
|
|
51
|
+
* brace-depth tracking. Returns an empty array when:
|
|
52
|
+
* - The string contains no `${ ` markers
|
|
53
|
+
* - The entire string IS a strict expression (handled separately)
|
|
54
|
+
*
|
|
55
|
+
* Brace-depth tracking correctly handles nested braces in jq object
|
|
56
|
+
* construction (e.g. `${ { key: .value } }`), unlike a naive regex
|
|
57
|
+
* which would stop at the first `}`.
|
|
58
|
+
*
|
|
59
|
+
* Known limitation: braces inside jq string literals (e.g. `${ "}" }`)
|
|
60
|
+
* are counted structurally — the parser does not track quoted context.
|
|
61
|
+
* This is acceptable because jq string literals containing literal
|
|
62
|
+
* braces are not a realistic pattern in workflow config values.
|
|
63
|
+
*
|
|
64
|
+
* Runtime placeholders (`${.secrets.KEY}`, `${.env_vars.KEY}`) are
|
|
65
|
+
* never matched because they lack the space after `${`.
|
|
66
|
+
*/
|
|
67
|
+
export function extractEmbeddedExpressions(str: string): EmbeddedExpression[] {
|
|
68
|
+
if (isStrictExpr(str)) return [];
|
|
69
|
+
|
|
70
|
+
const results: EmbeddedExpression[] = [];
|
|
71
|
+
let searchFrom = 0;
|
|
72
|
+
|
|
73
|
+
while (searchFrom < str.length) {
|
|
74
|
+
const markerIdx = str.indexOf(EMBEDDED_MARKER, searchFrom);
|
|
75
|
+
if (markerIdx === -1) break;
|
|
76
|
+
|
|
77
|
+
const exprStart = markerIdx + EMBEDDED_MARKER.length;
|
|
78
|
+
let depth = 1;
|
|
79
|
+
let pos = exprStart;
|
|
80
|
+
|
|
81
|
+
while (pos < str.length && depth > 0) {
|
|
82
|
+
if (str[pos] === "{") depth++;
|
|
83
|
+
else if (str[pos] === "}") depth--;
|
|
84
|
+
if (depth > 0) pos++;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (depth !== 0) {
|
|
88
|
+
searchFrom = exprStart;
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const rawExpr = str.slice(exprStart, pos);
|
|
93
|
+
const expr = rawExpr.endsWith(" ") ? rawExpr.slice(0, -1) : rawExpr;
|
|
94
|
+
|
|
95
|
+
results.push({
|
|
96
|
+
start: markerIdx,
|
|
97
|
+
end: pos + 1,
|
|
98
|
+
expr,
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
searchFrom = pos + 1;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return results;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Checks whether a string contains embedded `${ ... }` expressions
|
|
109
|
+
* that are NOT strict (the entire value is one expression) and NOT
|
|
110
|
+
* runtime placeholders (`${.secrets.*}`).
|
|
111
|
+
*/
|
|
112
|
+
export function hasEmbeddedExpressions(str: string): boolean {
|
|
113
|
+
if (isStrictExpr(str)) return false;
|
|
114
|
+
return str.includes(EMBEDDED_MARKER);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
118
|
+
// Interpolation Helpers
|
|
119
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Converts an evaluated expression result to a string for embedding
|
|
123
|
+
* into a larger template string.
|
|
124
|
+
*/
|
|
125
|
+
export function stringifyInterpolatedValue(value: unknown): string {
|
|
126
|
+
if (value === null || value === undefined) return "";
|
|
127
|
+
if (typeof value === "string") return value;
|
|
128
|
+
return JSON.stringify(value);
|
|
129
|
+
}
|
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expression evaluation engine for CNCF Serverless Workflow runtime
|
|
3
|
+
* expressions. Runs OUTSIDE the Temporal workflow sandbox (in a local
|
|
4
|
+
* activity) using jq-wasm for evaluation.
|
|
5
|
+
*
|
|
6
|
+
* Supports:
|
|
7
|
+
* - Strict expression detection: `${ .some.path }`
|
|
8
|
+
* - Embedded expression interpolation: `"Hello ${ .name }!"`
|
|
9
|
+
* - Expression sanitization: strips `${` and `}` wrapper
|
|
10
|
+
* - Single expression evaluation via jq-wasm
|
|
11
|
+
* - Recursive tree traversal for evaluating expressions in nested objects
|
|
12
|
+
* - Conditional (if-statement) evaluation
|
|
13
|
+
* - uuid() preprocessing (jq-wasm has no custom function support)
|
|
14
|
+
* - Single-quote normalization (YAML ergonomic: `'approve'` → `"approve"`)
|
|
15
|
+
*
|
|
16
|
+
* NOTE: This module requires Node.js built-ins (crypto) and jq-wasm.
|
|
17
|
+
* It must ONLY be imported from activity code running outside the
|
|
18
|
+
* Temporal sandbox. Workflow-side code should import sandbox-safe
|
|
19
|
+
* utilities from `./expression-utils.js` instead.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import * as jq from "jq-wasm";
|
|
23
|
+
import { randomUUID } from "node:crypto";
|
|
24
|
+
|
|
25
|
+
import {
|
|
26
|
+
extractEmbeddedExpressions,
|
|
27
|
+
hasEmbeddedExpressions,
|
|
28
|
+
isStrictExpr,
|
|
29
|
+
sanitizeExpr,
|
|
30
|
+
stringifyInterpolatedValue,
|
|
31
|
+
} from "./expression-utils.js";
|
|
32
|
+
|
|
33
|
+
export type { EmbeddedExpression } from "./expression-utils.js";
|
|
34
|
+
export {
|
|
35
|
+
extractEmbeddedExpressions,
|
|
36
|
+
hasEmbeddedExpressions,
|
|
37
|
+
isStrictExpr,
|
|
38
|
+
sanitizeExpr,
|
|
39
|
+
stringifyInterpolatedValue,
|
|
40
|
+
} from "./expression-utils.js";
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Interpolates all embedded `${ ... }` expressions within a string.
|
|
44
|
+
* Each expression is evaluated via jq and substituted in place.
|
|
45
|
+
*
|
|
46
|
+
* - `null` / `undefined` results become `""` (consistent with
|
|
47
|
+
* `resolveRuntimePlaceholders` in resolve.ts).
|
|
48
|
+
* - Non-string results (objects, arrays, numbers) are JSON-stringified.
|
|
49
|
+
* - String results are inserted directly.
|
|
50
|
+
*/
|
|
51
|
+
export async function interpolateString(
|
|
52
|
+
str: string,
|
|
53
|
+
input: unknown,
|
|
54
|
+
stateVars: Record<string, unknown>,
|
|
55
|
+
): Promise<string> {
|
|
56
|
+
const expressions = extractEmbeddedExpressions(str);
|
|
57
|
+
if (expressions.length === 0) return str;
|
|
58
|
+
|
|
59
|
+
let result = "";
|
|
60
|
+
let lastEnd = 0;
|
|
61
|
+
|
|
62
|
+
for (const embedded of expressions) {
|
|
63
|
+
result += str.slice(lastEnd, embedded.start);
|
|
64
|
+
const value = await evaluateExpression(embedded.expr, input, stateVars);
|
|
65
|
+
result += stringifyInterpolatedValue(value);
|
|
66
|
+
lastEnd = embedded.end;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
result += str.slice(lastEnd);
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
74
|
+
// Single-Quote Normalization
|
|
75
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Converts single-quoted string literals in a jq expression to
|
|
79
|
+
* double-quoted literals with proper JSON/jq escaping.
|
|
80
|
+
*
|
|
81
|
+
* jq only supports double-quoted strings (JSON-style). Single quotes
|
|
82
|
+
* have zero valid meaning in jq syntax. However, YAML workflow authors
|
|
83
|
+
* naturally write `'approve'` inside double-quoted YAML values because
|
|
84
|
+
* escaping double quotes in YAML is awkward:
|
|
85
|
+
*
|
|
86
|
+
* when: "${ $context.outcome == 'approve' }" ← natural
|
|
87
|
+
* when: "${ $context.outcome == \"approve\" }" ← ugly
|
|
88
|
+
*
|
|
89
|
+
* This function bridges that gap using a jq-aware lexer with four
|
|
90
|
+
* states (CODE, IN_DOUBLE_QUOTE, IN_SINGLE_QUOTE, COMMENT) to ensure:
|
|
91
|
+
*
|
|
92
|
+
* - Single quotes inside double-quoted jq strings are NOT converted
|
|
93
|
+
* (e.g., `"it's"` is valid jq and remains unchanged)
|
|
94
|
+
* - Characters inside single-quoted content are treated as literal
|
|
95
|
+
* (shell-style: `\` is a literal backslash, not an escape prefix)
|
|
96
|
+
* - Double quotes inside single-quoted content are escaped (`\"`)
|
|
97
|
+
* - Unclosed single quotes pass through unchanged (let jq report the
|
|
98
|
+
* actual syntax error rather than masking it)
|
|
99
|
+
* - jq `#` comments are left alone
|
|
100
|
+
*
|
|
101
|
+
* Must run BEFORE preprocessUuid so that `'uuid'` becomes `"uuid"`
|
|
102
|
+
* (a quoted string literal) and is not matched by the uuid
|
|
103
|
+
* word-boundary pattern.
|
|
104
|
+
*/
|
|
105
|
+
export function normalizeSingleQuotedStrings(expr: string): string {
|
|
106
|
+
if (!expr.includes("'")) return expr;
|
|
107
|
+
|
|
108
|
+
const out: string[] = [];
|
|
109
|
+
let i = 0;
|
|
110
|
+
const len = expr.length;
|
|
111
|
+
|
|
112
|
+
while (i < len) {
|
|
113
|
+
const ch = expr[i]!;
|
|
114
|
+
|
|
115
|
+
if (ch === "#") {
|
|
116
|
+
// COMMENT: copy everything until end of line
|
|
117
|
+
while (i < len && expr[i] !== "\n") {
|
|
118
|
+
out.push(expr[i]!);
|
|
119
|
+
i++;
|
|
120
|
+
}
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (ch === '"') {
|
|
125
|
+
// IN_DOUBLE_QUOTE: copy verbatim until unescaped closing "
|
|
126
|
+
out.push(ch);
|
|
127
|
+
i++;
|
|
128
|
+
while (i < len) {
|
|
129
|
+
const dqch = expr[i]!;
|
|
130
|
+
if (dqch === "\\") {
|
|
131
|
+
out.push(dqch);
|
|
132
|
+
i++;
|
|
133
|
+
if (i < len) {
|
|
134
|
+
out.push(expr[i]!);
|
|
135
|
+
i++;
|
|
136
|
+
}
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
out.push(dqch);
|
|
140
|
+
i++;
|
|
141
|
+
if (dqch === '"') break;
|
|
142
|
+
}
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (ch === "'") {
|
|
147
|
+
// IN_SINGLE_QUOTE: collect content until closing '
|
|
148
|
+
i++;
|
|
149
|
+
let content = "";
|
|
150
|
+
let closed = false;
|
|
151
|
+
while (i < len) {
|
|
152
|
+
if (expr[i] === "'") {
|
|
153
|
+
closed = true;
|
|
154
|
+
i++;
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
content += expr[i];
|
|
158
|
+
i++;
|
|
159
|
+
}
|
|
160
|
+
if (!closed) {
|
|
161
|
+
// Unclosed single quote — pass through unchanged for jq to report
|
|
162
|
+
out.push("'");
|
|
163
|
+
out.push(content);
|
|
164
|
+
} else {
|
|
165
|
+
out.push(escapeForJqDoubleQuoted(content));
|
|
166
|
+
}
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// CODE: pass through
|
|
171
|
+
out.push(ch);
|
|
172
|
+
i++;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return out.join("");
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Encodes a raw string as a jq/JSON double-quoted literal. All
|
|
180
|
+
* characters are treated as literal (shell-style single-quote
|
|
181
|
+
* semantics): backslashes, double quotes, and control characters
|
|
182
|
+
* are escaped for jq compatibility.
|
|
183
|
+
*/
|
|
184
|
+
function escapeForJqDoubleQuoted(content: string): string {
|
|
185
|
+
let out = '"';
|
|
186
|
+
for (const ch of content) {
|
|
187
|
+
switch (ch) {
|
|
188
|
+
case '"': out += '\\"'; break;
|
|
189
|
+
case "\\": out += "\\\\"; break;
|
|
190
|
+
case "\n": out += "\\n"; break;
|
|
191
|
+
case "\r": out += "\\r"; break;
|
|
192
|
+
case "\t": out += "\\t"; break;
|
|
193
|
+
case "\b": out += "\\b"; break;
|
|
194
|
+
case "\f": out += "\\f"; break;
|
|
195
|
+
default: {
|
|
196
|
+
const code = ch.charCodeAt(0);
|
|
197
|
+
if (code < 0x20) {
|
|
198
|
+
out += "\\u" + code.toString(16).padStart(4, "0");
|
|
199
|
+
} else {
|
|
200
|
+
out += ch;
|
|
201
|
+
}
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return out + '"';
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
210
|
+
// UUID Preprocessing
|
|
211
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
212
|
+
|
|
213
|
+
const UUID_PATTERN = /\buuid\b/g;
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Replaces all occurrences of `uuid` in a jq expression with a
|
|
217
|
+
* generated UUID string literal. jq-wasm doesn't support custom
|
|
218
|
+
* function registration (Go uses `gojq.WithFunction("uuid", ...)`),
|
|
219
|
+
* so we pre-process before evaluation.
|
|
220
|
+
*/
|
|
221
|
+
export function preprocessUuid(expr: string): { expr: string; hadUuid: boolean } {
|
|
222
|
+
let hadUuid = false;
|
|
223
|
+
const processed = expr.replace(UUID_PATTERN, () => {
|
|
224
|
+
hadUuid = true;
|
|
225
|
+
return `"${randomUUID()}"`;
|
|
226
|
+
});
|
|
227
|
+
return { expr: processed, hadUuid };
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
231
|
+
// Single Expression Evaluation
|
|
232
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Evaluates a single jq expression against an input value, with
|
|
236
|
+
* state variables available as jq `$variable` bindings.
|
|
237
|
+
*
|
|
238
|
+
* The state variables map provides `$context`, `$data`, `$env`,
|
|
239
|
+
* `$input`, `$output` — matching the workflow state model.
|
|
240
|
+
*
|
|
241
|
+
* @param expr - Raw jq expression (already sanitized, no `${ }` wrapper)
|
|
242
|
+
* @param input - The jq input value (`.` in jq)
|
|
243
|
+
* @param stateVars - Map of `$variable` → value for jq variable bindings
|
|
244
|
+
*/
|
|
245
|
+
export async function evaluateExpression(
|
|
246
|
+
expr: string,
|
|
247
|
+
input: unknown,
|
|
248
|
+
stateVars: Record<string, unknown>,
|
|
249
|
+
): Promise<unknown> {
|
|
250
|
+
const normalized = normalizeSingleQuotedStrings(expr);
|
|
251
|
+
const { expr: processedExpr } = preprocessUuid(normalized);
|
|
252
|
+
|
|
253
|
+
const wrappedExpr = buildVariableBindingExpr(processedExpr, stateVars);
|
|
254
|
+
const jqInput = buildJqInput(input, stateVars);
|
|
255
|
+
|
|
256
|
+
const result = await jq.json(jqInput, wrappedExpr);
|
|
257
|
+
return result;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Wraps a jq expression with variable bindings by constructing a
|
|
262
|
+
* combined input object and piping through `.as $var` assignments.
|
|
263
|
+
*
|
|
264
|
+
* For state vars `{ $context: {...}, $data: {...} }`, produces:
|
|
265
|
+
* ```
|
|
266
|
+
* .__vars__.$context as $context | .__vars__.$data as $data | ... | .__body__ | <expr>
|
|
267
|
+
* ```
|
|
268
|
+
*
|
|
269
|
+
* The actual jq input becomes `{ __body__: <original input>, __vars__: <stateVars> }`.
|
|
270
|
+
*/
|
|
271
|
+
function buildVariableBindingExpr(
|
|
272
|
+
expr: string,
|
|
273
|
+
stateVars: Record<string, unknown>,
|
|
274
|
+
): string {
|
|
275
|
+
const varNames = Object.keys(stateVars);
|
|
276
|
+
if (varNames.length === 0) return expr;
|
|
277
|
+
|
|
278
|
+
const bindings = varNames
|
|
279
|
+
.map((name) => `.__vars__.["${name}"] as ${name}`)
|
|
280
|
+
.join(" | ");
|
|
281
|
+
|
|
282
|
+
return `${bindings} | .__body__ | ${expr}`;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Wraps the input value with state variables for jq evaluation.
|
|
287
|
+
* The jq expression produced by `buildVariableBindingExpr` expects
|
|
288
|
+
* this shape.
|
|
289
|
+
*/
|
|
290
|
+
export function buildJqInput(
|
|
291
|
+
input: unknown,
|
|
292
|
+
stateVars: Record<string, unknown>,
|
|
293
|
+
): object {
|
|
294
|
+
if (Object.keys(stateVars).length === 0) return (input ?? {}) as object;
|
|
295
|
+
|
|
296
|
+
return {
|
|
297
|
+
__body__: input ?? {},
|
|
298
|
+
__vars__: stateVars,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
303
|
+
// Batch Expression Evaluation
|
|
304
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Evaluates multiple expressions in a single call. Each expression
|
|
308
|
+
* is evaluated independently against the same input and state.
|
|
309
|
+
*
|
|
310
|
+
* Used by the local activity to batch-evaluate all expressions
|
|
311
|
+
* needed by a task in one round-trip.
|
|
312
|
+
*/
|
|
313
|
+
export async function evaluateExpressionBatch(
|
|
314
|
+
expressions: Record<string, string>,
|
|
315
|
+
input: unknown,
|
|
316
|
+
stateVars: Record<string, unknown>,
|
|
317
|
+
): Promise<Record<string, unknown>> {
|
|
318
|
+
const results: Record<string, unknown> = {};
|
|
319
|
+
const entries = Object.entries(expressions);
|
|
320
|
+
|
|
321
|
+
for (const [key, expr] of entries) {
|
|
322
|
+
results[key] = await evaluateExpression(expr, input, stateVars);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
return results;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
329
|
+
// String Evaluation (detect + evaluate if expression)
|
|
330
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Evaluates a string value using a three-step chain:
|
|
334
|
+
*
|
|
335
|
+
* 1. **Strict**: If the entire string is `${ expr }`, evaluate via
|
|
336
|
+
* jq and return the result (may be any type — object, number, etc.).
|
|
337
|
+
* 2. **Embedded**: If the string contains `${ expr }` fragments within
|
|
338
|
+
* larger text, interpolate each fragment and return a string.
|
|
339
|
+
* 3. **Passthrough**: Return the string unchanged.
|
|
340
|
+
*
|
|
341
|
+
* The CNCF Serverless Workflow 1.0.0 spec demonstrates embedded
|
|
342
|
+
* expressions in multi-line strings (e.g., HTTP body templates).
|
|
343
|
+
*/
|
|
344
|
+
export async function evaluateString(
|
|
345
|
+
str: string,
|
|
346
|
+
input: unknown,
|
|
347
|
+
stateVars: Record<string, unknown>,
|
|
348
|
+
): Promise<unknown> {
|
|
349
|
+
if (isStrictExpr(str)) {
|
|
350
|
+
return evaluateExpression(sanitizeExpr(str), input, stateVars);
|
|
351
|
+
}
|
|
352
|
+
if (hasEmbeddedExpressions(str)) {
|
|
353
|
+
return interpolateString(str, input, stateVars);
|
|
354
|
+
}
|
|
355
|
+
return str;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
359
|
+
// Recursive Tree Traversal
|
|
360
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Recursively walks a value tree, evaluating any string expression
|
|
364
|
+
* (`${ ... }`) found at any depth. Maps and arrays are traversed
|
|
365
|
+
* recursively; strings are checked for expressions; all other types
|
|
366
|
+
* pass through unchanged.
|
|
367
|
+
*
|
|
368
|
+
* Originally ported from Go's `utils.TraverseAndEvaluateObj` (now deleted).
|
|
369
|
+
*
|
|
370
|
+
* IMPORTANT: Mutates the input object in place (maps and arrays).
|
|
371
|
+
* Clone before calling if you need the original preserved.
|
|
372
|
+
*/
|
|
373
|
+
export async function traverseAndEvaluate(
|
|
374
|
+
node: unknown,
|
|
375
|
+
input: unknown,
|
|
376
|
+
stateVars: Record<string, unknown>,
|
|
377
|
+
): Promise<unknown> {
|
|
378
|
+
if (node === null || node === undefined) return node;
|
|
379
|
+
|
|
380
|
+
if (typeof node === "string") {
|
|
381
|
+
return evaluateString(node, input, stateVars);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
if (Array.isArray(node)) {
|
|
385
|
+
for (let i = 0; i < node.length; i++) {
|
|
386
|
+
node[i] = await traverseAndEvaluate(node[i], input, stateVars);
|
|
387
|
+
}
|
|
388
|
+
return node;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
if (typeof node === "object") {
|
|
392
|
+
const obj = node as Record<string, unknown>;
|
|
393
|
+
for (const key of Object.keys(obj)) {
|
|
394
|
+
obj[key] = await traverseAndEvaluate(obj[key], input, stateVars);
|
|
395
|
+
}
|
|
396
|
+
return obj;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
return node;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
403
|
+
// Conditional (If-Statement) Evaluation
|
|
404
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Evaluates a task's `if` condition. Returns true if:
|
|
408
|
+
* - No condition is specified (task always runs)
|
|
409
|
+
* - The expression evaluates to `true` (boolean)
|
|
410
|
+
* - The expression evaluates to "TRUE" (case-insensitive string)
|
|
411
|
+
* - The expression evaluates to "1"
|
|
412
|
+
*
|
|
413
|
+
* Originally ported from Go's `utils.CheckIfStatement` (now deleted).
|
|
414
|
+
*/
|
|
415
|
+
export async function checkIfStatement(
|
|
416
|
+
ifExpr: string | undefined,
|
|
417
|
+
input: unknown,
|
|
418
|
+
stateVars: Record<string, unknown>,
|
|
419
|
+
): Promise<boolean> {
|
|
420
|
+
if (ifExpr === undefined || ifExpr === null) return true;
|
|
421
|
+
|
|
422
|
+
const result = await evaluateString(ifExpr, input, stateVars);
|
|
423
|
+
|
|
424
|
+
if (typeof result === "boolean") return result;
|
|
425
|
+
if (typeof result === "string") {
|
|
426
|
+
return result.toUpperCase() === "TRUE" || result === "1";
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
return false;
|
|
430
|
+
}
|