@sprinterai/runtime 0.4.1 → 0.6.0
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/dist/adapters/a2a-adapter.d.ts +37 -9
- package/dist/adapters/a2a-adapter.d.ts.map +1 -1
- package/dist/adapters/a2a-adapter.js +132 -9
- package/dist/adapters/a2a-adapter.js.map +1 -1
- package/dist/adapters/a2a-adapter.test.d.ts +2 -0
- package/dist/adapters/a2a-adapter.test.d.ts.map +1 -0
- package/dist/adapters/a2a-adapter.test.js +295 -0
- package/dist/adapters/a2a-adapter.test.js.map +1 -0
- package/dist/adapters/http-agent-adapter.d.ts +19 -9
- package/dist/adapters/http-agent-adapter.d.ts.map +1 -1
- package/dist/adapters/http-agent-adapter.js +55 -9
- package/dist/adapters/http-agent-adapter.js.map +1 -1
- package/dist/adapters/http-agent-adapter.test.d.ts +2 -0
- package/dist/adapters/http-agent-adapter.test.d.ts.map +1 -0
- package/dist/adapters/http-agent-adapter.test.js +164 -0
- package/dist/adapters/http-agent-adapter.test.js.map +1 -0
- package/dist/adapters/index.d.ts +8 -8
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/mcp-adapter.d.ts +29 -9
- package/dist/adapters/mcp-adapter.d.ts.map +1 -1
- package/dist/adapters/mcp-adapter.js +43 -8
- package/dist/adapters/mcp-adapter.js.map +1 -1
- package/dist/adapters/mcp-adapter.test.d.ts +2 -0
- package/dist/adapters/mcp-adapter.test.d.ts.map +1 -0
- package/dist/adapters/mcp-adapter.test.js +118 -0
- package/dist/adapters/mcp-adapter.test.js.map +1 -0
- package/dist/adapters/openclaw-adapter.d.ts +34 -8
- package/dist/adapters/openclaw-adapter.d.ts.map +1 -1
- package/dist/adapters/openclaw-adapter.js +38 -8
- package/dist/adapters/openclaw-adapter.js.map +1 -1
- package/dist/adapters/openclaw-adapter.test.d.ts +2 -0
- package/dist/adapters/openclaw-adapter.test.d.ts.map +1 -0
- package/dist/adapters/openclaw-adapter.test.js +77 -0
- package/dist/adapters/openclaw-adapter.test.js.map +1 -0
- package/dist/agent/agent-registry.test.js +1 -1
- package/dist/agent/agent-resolver.d.ts +8 -2
- package/dist/agent/agent-resolver.d.ts.map +1 -1
- package/dist/agent/agent-resolver.js +7 -1
- package/dist/agent/agent-resolver.js.map +1 -1
- package/dist/agent/agent-resolver.test.js +21 -3
- package/dist/agent/agent-resolver.test.js.map +1 -1
- package/dist/agent/delegate.test.js +1 -1
- package/dist/agent/execute-agent.d.ts +32 -11
- package/dist/agent/execute-agent.d.ts.map +1 -1
- package/dist/agent/execute-agent.js +39 -3
- package/dist/agent/execute-agent.js.map +1 -1
- package/dist/agent/index.d.ts +9 -9
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +5 -5
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/prompt-builder.test.js +1 -1
- package/dist/approval/approval-manager.d.ts +19 -0
- package/dist/approval/approval-manager.d.ts.map +1 -0
- package/dist/approval/approval-manager.js +36 -0
- package/dist/approval/approval-manager.js.map +1 -0
- package/dist/approval/approval-manager.test.d.ts +2 -0
- package/dist/approval/approval-manager.test.d.ts.map +1 -0
- package/dist/approval/approval-manager.test.js +239 -0
- package/dist/approval/approval-manager.test.js.map +1 -0
- package/dist/approval/index.d.ts +3 -0
- package/dist/approval/index.d.ts.map +1 -0
- package/dist/approval/index.js +2 -0
- package/dist/approval/index.js.map +1 -0
- package/dist/chat/chat-handler.d.ts +16 -7
- package/dist/chat/chat-handler.d.ts.map +1 -1
- package/dist/chat/chat-handler.js +68 -20
- package/dist/chat/chat-handler.js.map +1 -1
- package/dist/chat/chat-handler.test.js +101 -11
- package/dist/chat/chat-handler.test.js.map +1 -1
- package/dist/chat/index.d.ts +3 -3
- package/dist/chat/index.js +2 -2
- package/dist/chat/message-utils.d.ts +15 -7
- package/dist/chat/message-utils.d.ts.map +1 -1
- package/dist/chat/message-utils.js +94 -22
- package/dist/chat/message-utils.js.map +1 -1
- package/dist/chat/message-utils.test.js +71 -1
- package/dist/chat/message-utils.test.js.map +1 -1
- package/dist/document/chunk-generator.d.ts +6 -0
- package/dist/document/chunk-generator.d.ts.map +1 -0
- package/dist/document/chunk-generator.js +107 -0
- package/dist/document/chunk-generator.js.map +1 -0
- package/dist/document/chunk-generator.test.d.ts +2 -0
- package/dist/document/chunk-generator.test.d.ts.map +1 -0
- package/dist/document/chunk-generator.test.js +166 -0
- package/dist/document/chunk-generator.test.js.map +1 -0
- package/dist/document/document-processor.d.ts +27 -0
- package/dist/document/document-processor.d.ts.map +1 -0
- package/dist/document/document-processor.js +44 -0
- package/dist/document/document-processor.js.map +1 -0
- package/dist/document/document-processor.test.d.ts +2 -0
- package/dist/document/document-processor.test.d.ts.map +1 -0
- package/dist/document/document-processor.test.js +197 -0
- package/dist/document/document-processor.test.js.map +1 -0
- package/dist/document/index.d.ts +5 -0
- package/dist/document/index.d.ts.map +1 -0
- package/dist/document/index.js +4 -0
- package/dist/document/index.js.map +1 -0
- package/dist/document/parsers/index.d.ts +2 -0
- package/dist/document/parsers/index.d.ts.map +1 -0
- package/dist/document/parsers/index.js +2 -0
- package/dist/document/parsers/index.js.map +1 -0
- package/dist/document/parsers/text-parser.d.ts +4 -0
- package/dist/document/parsers/text-parser.d.ts.map +1 -0
- package/dist/document/parsers/text-parser.js +23 -0
- package/dist/document/parsers/text-parser.js.map +1 -0
- package/dist/document/parsers/text-parser.test.d.ts +2 -0
- package/dist/document/parsers/text-parser.test.d.ts.map +1 -0
- package/dist/document/parsers/text-parser.test.js +64 -0
- package/dist/document/parsers/text-parser.test.js.map +1 -0
- package/dist/eval/eval-runner.test.js +2 -2
- package/dist/eval/index.d.ts +3 -3
- package/dist/eval/index.js +2 -2
- package/dist/eval/scorers.test.js +1 -1
- package/dist/events/event-bus.d.ts +12 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/event-bus.js +77 -0
- package/dist/events/event-bus.js.map +1 -0
- package/dist/events/event-bus.test.d.ts +2 -0
- package/dist/events/event-bus.test.d.ts.map +1 -0
- package/dist/events/event-bus.test.js +155 -0
- package/dist/events/event-bus.test.js.map +1 -0
- package/dist/events/index.d.ts +2 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +2 -0
- package/dist/events/index.js.map +1 -0
- package/dist/guardrail/guardrail-pipeline.test.js +1 -1
- package/dist/guardrail/index.d.ts +2 -2
- package/dist/guardrail/index.js +1 -1
- package/dist/index.d.ts +81 -45
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -27
- package/dist/index.js.map +1 -1
- package/dist/jobs/in-memory-job-queue.d.ts +20 -0
- package/dist/jobs/in-memory-job-queue.d.ts.map +1 -0
- package/dist/jobs/in-memory-job-queue.js +120 -0
- package/dist/jobs/in-memory-job-queue.js.map +1 -0
- package/dist/jobs/in-memory-job-queue.test.d.ts +2 -0
- package/dist/jobs/in-memory-job-queue.test.d.ts.map +1 -0
- package/dist/jobs/in-memory-job-queue.test.js +146 -0
- package/dist/jobs/in-memory-job-queue.test.js.map +1 -0
- package/dist/jobs/index.d.ts +4 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +3 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/job-runner.d.ts +42 -0
- package/dist/jobs/job-runner.d.ts.map +1 -0
- package/dist/jobs/job-runner.js +119 -0
- package/dist/jobs/job-runner.js.map +1 -0
- package/dist/jobs/job-runner.test.d.ts +2 -0
- package/dist/jobs/job-runner.test.d.ts.map +1 -0
- package/dist/jobs/job-runner.test.js +190 -0
- package/dist/jobs/job-runner.test.js.map +1 -0
- package/dist/memory/index.d.ts +3 -3
- package/dist/memory/index.js +2 -2
- package/dist/memory/memory-prompt.d.ts +1 -1
- package/dist/module/create-runtime.d.ts +21 -6
- package/dist/module/create-runtime.d.ts.map +1 -1
- package/dist/module/create-runtime.js +7 -7
- package/dist/module/create-runtime.js.map +1 -1
- package/dist/module/create-runtime.test.js +8 -8
- package/dist/module/index.d.ts +5 -4
- package/dist/module/index.d.ts.map +1 -1
- package/dist/module/index.js +3 -2
- package/dist/module/index.js.map +1 -1
- package/dist/module/map-supabase-stores.d.ts +33 -0
- package/dist/module/map-supabase-stores.d.ts.map +1 -0
- package/dist/module/map-supabase-stores.js +28 -0
- package/dist/module/map-supabase-stores.js.map +1 -0
- package/dist/module/module-loader.d.ts +9 -1
- package/dist/module/module-loader.d.ts.map +1 -1
- package/dist/module/module-loader.js +40 -1
- package/dist/module/module-loader.js.map +1 -1
- package/dist/module/module-loader.test.js +38 -1
- package/dist/module/module-loader.test.js.map +1 -1
- package/dist/notification/digest-scheduler.d.ts +18 -0
- package/dist/notification/digest-scheduler.d.ts.map +1 -0
- package/dist/notification/digest-scheduler.js +44 -0
- package/dist/notification/digest-scheduler.js.map +1 -0
- package/dist/notification/digest-scheduler.test.d.ts +2 -0
- package/dist/notification/digest-scheduler.test.d.ts.map +1 -0
- package/dist/notification/digest-scheduler.test.js +306 -0
- package/dist/notification/digest-scheduler.test.js.map +1 -0
- package/dist/notification/index.d.ts +5 -0
- package/dist/notification/index.d.ts.map +1 -0
- package/dist/notification/index.js +3 -0
- package/dist/notification/index.js.map +1 -0
- package/dist/notification/notification-engine.d.ts +20 -0
- package/dist/notification/notification-engine.d.ts.map +1 -0
- package/dist/notification/notification-engine.js +78 -0
- package/dist/notification/notification-engine.js.map +1 -0
- package/dist/notification/notification-engine.test.d.ts +2 -0
- package/dist/notification/notification-engine.test.d.ts.map +1 -0
- package/dist/notification/notification-engine.test.js +364 -0
- package/dist/notification/notification-engine.test.js.map +1 -0
- package/dist/providers/index.d.ts +5 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +3 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/model-resolver.d.ts +93 -0
- package/dist/providers/model-resolver.d.ts.map +1 -0
- package/dist/providers/model-resolver.js +152 -0
- package/dist/providers/model-resolver.js.map +1 -0
- package/dist/providers/model-resolver.test.d.ts +2 -0
- package/dist/providers/model-resolver.test.d.ts.map +1 -0
- package/dist/providers/model-resolver.test.js +199 -0
- package/dist/providers/model-resolver.test.js.map +1 -0
- package/dist/providers/noop-providers.d.ts +6 -0
- package/dist/providers/noop-providers.d.ts.map +1 -0
- package/dist/providers/noop-providers.js +15 -0
- package/dist/providers/noop-providers.js.map +1 -0
- package/dist/providers/noop-providers.test.d.ts +2 -0
- package/dist/providers/noop-providers.test.d.ts.map +1 -0
- package/dist/providers/noop-providers.test.js +63 -0
- package/dist/providers/noop-providers.test.js.map +1 -0
- package/dist/providers/provider-interfaces.d.ts +65 -0
- package/dist/providers/provider-interfaces.d.ts.map +1 -0
- package/dist/providers/provider-interfaces.js +2 -0
- package/dist/providers/provider-interfaces.js.map +1 -0
- package/dist/realtime/index.d.ts +3 -0
- package/dist/realtime/index.d.ts.map +1 -0
- package/dist/realtime/index.js +2 -0
- package/dist/realtime/index.js.map +1 -0
- package/dist/realtime/realtime-manager.d.ts +20 -0
- package/dist/realtime/realtime-manager.d.ts.map +1 -0
- package/dist/realtime/realtime-manager.js +110 -0
- package/dist/realtime/realtime-manager.js.map +1 -0
- package/dist/realtime/realtime-manager.test.d.ts +2 -0
- package/dist/realtime/realtime-manager.test.d.ts.map +1 -0
- package/dist/realtime/realtime-manager.test.js +273 -0
- package/dist/realtime/realtime-manager.test.js.map +1 -0
- package/dist/scoring/compute-score.test.js +1 -1
- package/dist/scoring/index.d.ts +2 -2
- package/dist/scoring/index.js +1 -1
- package/dist/search/cosine-similarity.d.ts +8 -0
- package/dist/search/cosine-similarity.d.ts.map +1 -0
- package/dist/search/cosine-similarity.js +28 -0
- package/dist/search/cosine-similarity.js.map +1 -0
- package/dist/search/cosine-similarity.test.d.ts +2 -0
- package/dist/search/cosine-similarity.test.d.ts.map +1 -0
- package/dist/search/cosine-similarity.test.js +49 -0
- package/dist/search/cosine-similarity.test.js.map +1 -0
- package/dist/search/hybrid-search.d.ts +47 -0
- package/dist/search/hybrid-search.d.ts.map +1 -0
- package/dist/search/hybrid-search.js +111 -0
- package/dist/search/hybrid-search.js.map +1 -0
- package/dist/search/hybrid-search.test.d.ts +2 -0
- package/dist/search/hybrid-search.test.d.ts.map +1 -0
- package/dist/search/hybrid-search.test.js +238 -0
- package/dist/search/hybrid-search.test.js.map +1 -0
- package/dist/search/in-memory-search.d.ts +17 -0
- package/dist/search/in-memory-search.d.ts.map +1 -0
- package/dist/search/in-memory-search.js +59 -0
- package/dist/search/in-memory-search.js.map +1 -0
- package/dist/search/in-memory-search.test.d.ts +2 -0
- package/dist/search/in-memory-search.test.d.ts.map +1 -0
- package/dist/search/in-memory-search.test.js +169 -0
- package/dist/search/in-memory-search.test.js.map +1 -0
- package/dist/search/index.d.ts +6 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +4 -0
- package/dist/search/index.js.map +1 -0
- package/dist/testing/in-memory-agent-store.d.ts +5 -1
- package/dist/testing/in-memory-agent-store.d.ts.map +1 -1
- package/dist/testing/in-memory-agent-store.js +19 -0
- package/dist/testing/in-memory-agent-store.js.map +1 -1
- package/dist/testing/in-memory-agent-store.test.js +1 -1
- package/dist/testing/in-memory-chat-store.d.ts +4 -3
- package/dist/testing/in-memory-chat-store.d.ts.map +1 -1
- package/dist/testing/in-memory-chat-store.js +3 -2
- package/dist/testing/in-memory-chat-store.js.map +1 -1
- package/dist/testing/in-memory-entity-store.d.ts +5 -1
- package/dist/testing/in-memory-entity-store.d.ts.map +1 -1
- package/dist/testing/in-memory-entity-store.js +69 -4
- package/dist/testing/in-memory-entity-store.js.map +1 -1
- package/dist/testing/in-memory-entity-store.test.js +1 -1
- package/dist/testing/in-memory-memory-store.d.ts +3 -1
- package/dist/testing/in-memory-memory-store.d.ts.map +1 -1
- package/dist/testing/in-memory-memory-store.js +20 -0
- package/dist/testing/in-memory-memory-store.js.map +1 -1
- package/dist/testing/in-memory-tool-store.d.ts +13 -2
- package/dist/testing/in-memory-tool-store.d.ts.map +1 -1
- package/dist/testing/in-memory-tool-store.js +51 -0
- package/dist/testing/in-memory-tool-store.js.map +1 -1
- package/dist/testing/index.d.ts +7 -7
- package/dist/testing/index.js +7 -7
- package/dist/tool/ai-bridge.d.ts +1 -0
- package/dist/tool/ai-bridge.d.ts.map +1 -1
- package/dist/tool/ai-bridge.js +1 -0
- package/dist/tool/ai-bridge.js.map +1 -1
- package/dist/tool/ai-bridge.test.js +1 -1
- package/dist/tool/catalog.d.ts +19 -0
- package/dist/tool/catalog.d.ts.map +1 -0
- package/dist/tool/catalog.js +88 -0
- package/dist/tool/catalog.js.map +1 -0
- package/dist/tool/catalog.test.d.ts +2 -0
- package/dist/tool/catalog.test.d.ts.map +1 -0
- package/dist/tool/catalog.test.js +129 -0
- package/dist/tool/catalog.test.js.map +1 -0
- package/dist/tool/entity-tools-factory.d.ts.map +1 -1
- package/dist/tool/entity-tools-factory.js +80 -0
- package/dist/tool/entity-tools-factory.js.map +1 -1
- package/dist/tool/entity-tools-factory.test.js +70 -4
- package/dist/tool/entity-tools-factory.test.js.map +1 -1
- package/dist/tool/execute-registered-tool.d.ts +17 -0
- package/dist/tool/execute-registered-tool.d.ts.map +1 -0
- package/dist/tool/execute-registered-tool.js +24 -0
- package/dist/tool/execute-registered-tool.js.map +1 -0
- package/dist/tool/execute-registered-tool.test.d.ts +2 -0
- package/dist/tool/execute-registered-tool.test.d.ts.map +1 -0
- package/dist/tool/execute-registered-tool.test.js +73 -0
- package/dist/tool/execute-registered-tool.test.js.map +1 -0
- package/dist/tool/index.d.ts +11 -7
- package/dist/tool/index.d.ts.map +1 -1
- package/dist/tool/index.js +7 -5
- package/dist/tool/index.js.map +1 -1
- package/dist/tool/resolve-tools.d.ts +3 -1
- package/dist/tool/resolve-tools.d.ts.map +1 -1
- package/dist/tool/resolve-tools.js +1 -1
- package/dist/tool/resolve-tools.js.map +1 -1
- package/dist/tool/resolve-tools.test.js +1 -1
- package/dist/tool/tool-executor.d.ts +3 -2
- package/dist/tool/tool-executor.d.ts.map +1 -1
- package/dist/tool/tool-executor.js +4 -2
- package/dist/tool/tool-executor.js.map +1 -1
- package/dist/tool/tool-executor.test.js +2 -2
- package/dist/tool/tool-registry.test.js +1 -1
- package/dist/tool/zod-to-json-schema.d.ts +7 -0
- package/dist/tool/zod-to-json-schema.d.ts.map +1 -0
- package/dist/tool/zod-to-json-schema.js +12 -0
- package/dist/tool/zod-to-json-schema.js.map +1 -0
- package/dist/tool/zod-to-json-schema.test.d.ts +2 -0
- package/dist/tool/zod-to-json-schema.test.d.ts.map +1 -0
- package/dist/tool/zod-to-json-schema.test.js +127 -0
- package/dist/tool/zod-to-json-schema.test.js.map +1 -0
- package/dist/webhook/index.d.ts +4 -0
- package/dist/webhook/index.d.ts.map +1 -0
- package/dist/webhook/index.js +3 -0
- package/dist/webhook/index.js.map +1 -0
- package/dist/webhook/webhook-delivery.d.ts +12 -0
- package/dist/webhook/webhook-delivery.d.ts.map +1 -0
- package/dist/webhook/webhook-delivery.js +102 -0
- package/dist/webhook/webhook-delivery.js.map +1 -0
- package/dist/webhook/webhook-delivery.test.d.ts +2 -0
- package/dist/webhook/webhook-delivery.test.d.ts.map +1 -0
- package/dist/webhook/webhook-delivery.test.js +284 -0
- package/dist/webhook/webhook-delivery.test.js.map +1 -0
- package/dist/webhook/webhook-signer.d.ts +14 -0
- package/dist/webhook/webhook-signer.d.ts.map +1 -0
- package/dist/webhook/webhook-signer.js +31 -0
- package/dist/webhook/webhook-signer.js.map +1 -0
- package/dist/webhook/webhook-signer.test.d.ts +2 -0
- package/dist/webhook/webhook-signer.test.d.ts.map +1 -0
- package/dist/webhook/webhook-signer.test.js +74 -0
- package/dist/webhook/webhook-signer.test.js.map +1 -0
- package/dist/workflow/compile.js +4 -1
- package/dist/workflow/compile.js.map +1 -1
- package/dist/workflow/compile.test.js +1 -1
- package/dist/workflow/evaluate-nodes.d.ts +24 -0
- package/dist/workflow/evaluate-nodes.d.ts.map +1 -0
- package/dist/workflow/evaluate-nodes.js +126 -0
- package/dist/workflow/evaluate-nodes.js.map +1 -0
- package/dist/workflow/evaluate-nodes.test.d.ts +2 -0
- package/dist/workflow/evaluate-nodes.test.d.ts.map +1 -0
- package/dist/workflow/evaluate-nodes.test.js +363 -0
- package/dist/workflow/evaluate-nodes.test.js.map +1 -0
- package/dist/workflow/index.d.ts +8 -3
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +4 -2
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/node-executor.d.ts +40 -0
- package/dist/workflow/node-executor.d.ts.map +1 -0
- package/dist/workflow/node-executor.js +2 -0
- package/dist/workflow/node-executor.js.map +1 -0
- package/dist/workflow/node-executor.test.d.ts +2 -0
- package/dist/workflow/node-executor.test.d.ts.map +1 -0
- package/dist/workflow/node-executor.test.js +91 -0
- package/dist/workflow/node-executor.test.js.map +1 -0
- package/dist/workflow/status.test.js +1 -1
- package/dist/workflow/workflow-runner.d.ts +57 -0
- package/dist/workflow/workflow-runner.d.ts.map +1 -0
- package/dist/workflow/workflow-runner.js +263 -0
- package/dist/workflow/workflow-runner.js.map +1 -0
- package/dist/workflow/workflow-runner.test.d.ts +2 -0
- package/dist/workflow/workflow-runner.test.d.ts.map +1 -0
- package/dist/workflow/workflow-runner.test.js +657 -0
- package/dist/workflow/workflow-runner.test.js.map +1 -0
- package/package.json +9 -4
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { WorkflowNodeRunRecord, WorkflowFieldOverride } from '@sprinterai/core';
|
|
2
|
+
/**
|
|
3
|
+
* Context passed to a node executor function.
|
|
4
|
+
*
|
|
5
|
+
* The executor is responsible for performing the actual work
|
|
6
|
+
* (e.g., calling an AI model, running an extraction prompt).
|
|
7
|
+
*/
|
|
8
|
+
export interface NodeExecutionContext {
|
|
9
|
+
/** The node run record being executed. */
|
|
10
|
+
node: WorkflowNodeRunRecord;
|
|
11
|
+
/** The entity being processed. */
|
|
12
|
+
entityId: string;
|
|
13
|
+
/** Tenant scope. */
|
|
14
|
+
tenantId: string;
|
|
15
|
+
/** Current entity field values (may be partial). */
|
|
16
|
+
entityContent: Record<string, unknown>;
|
|
17
|
+
/** Per-field overrides (custom instructions, parent response IDs). */
|
|
18
|
+
fieldOverrides?: Record<string, WorkflowFieldOverride>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Result returned by a node executor function.
|
|
22
|
+
*/
|
|
23
|
+
export interface NodeExecutionResult {
|
|
24
|
+
/** Whether the node execution succeeded. */
|
|
25
|
+
success: boolean;
|
|
26
|
+
/** Field names that were extracted/populated by this node. */
|
|
27
|
+
fieldsExtracted: string[];
|
|
28
|
+
/** Updated entity content after this node's execution. */
|
|
29
|
+
updatedContent?: Record<string, unknown>;
|
|
30
|
+
/** Error message if the node failed. */
|
|
31
|
+
error?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A function that executes a single workflow node.
|
|
35
|
+
*
|
|
36
|
+
* Injected into the WorkflowRunner — keeps the runner pure and
|
|
37
|
+
* decoupled from AI SDKs, agents, or external services.
|
|
38
|
+
*/
|
|
39
|
+
export type NodeExecutorFn = (context: NodeExecutionContext) => Promise<NodeExecutionResult>;
|
|
40
|
+
//# sourceMappingURL=node-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-executor.d.ts","sourceRoot":"","sources":["../../src/workflow/node-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAErF;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,IAAI,EAAE,qBAAqB,CAAC;IAC5B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CACxD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-executor.js","sourceRoot":"","sources":["../../src/workflow/node-executor.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-executor.test.d.ts","sourceRoot":"","sources":["../../src/workflow/node-executor.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
function makeNodeRun(overrides = {}) {
|
|
3
|
+
return {
|
|
4
|
+
id: 'nr-1',
|
|
5
|
+
workflow_run_id: 'run-1',
|
|
6
|
+
entity_id: 'ent-1',
|
|
7
|
+
tenant_id: 'ten-1',
|
|
8
|
+
node_key: 'agent_task:title',
|
|
9
|
+
node_type: 'agent_task',
|
|
10
|
+
label: 'Extract title',
|
|
11
|
+
field_name: 'title',
|
|
12
|
+
block_id: null,
|
|
13
|
+
output_type: 'field',
|
|
14
|
+
status: 'running',
|
|
15
|
+
assignee_type: 'agent',
|
|
16
|
+
assignee_agent_slug: 'extractor',
|
|
17
|
+
depends_on: null,
|
|
18
|
+
instructions: null,
|
|
19
|
+
metadata: null,
|
|
20
|
+
error_message: null,
|
|
21
|
+
claimed_by: 'worker-1',
|
|
22
|
+
claimed_at: new Date().toISOString(),
|
|
23
|
+
attempt_count: 1,
|
|
24
|
+
started_at: new Date().toISOString(),
|
|
25
|
+
completed_at: null,
|
|
26
|
+
duration_ms: null,
|
|
27
|
+
created_at: new Date().toISOString(),
|
|
28
|
+
...overrides,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
describe('NodeExecutor types', () => {
|
|
32
|
+
it('NodeExecutionContext has required fields', () => {
|
|
33
|
+
const context = {
|
|
34
|
+
node: makeNodeRun(),
|
|
35
|
+
entityId: 'ent-1',
|
|
36
|
+
tenantId: 'ten-1',
|
|
37
|
+
entityContent: {},
|
|
38
|
+
};
|
|
39
|
+
expect(context.node.node_key).toBe('agent_task:title');
|
|
40
|
+
expect(context.entityId).toBe('ent-1');
|
|
41
|
+
expect(context.fieldOverrides).toBeUndefined();
|
|
42
|
+
});
|
|
43
|
+
it('NodeExecutionContext accepts optional fieldOverrides', () => {
|
|
44
|
+
const context = {
|
|
45
|
+
node: makeNodeRun(),
|
|
46
|
+
entityId: 'ent-1',
|
|
47
|
+
tenantId: 'ten-1',
|
|
48
|
+
entityContent: { title: 'existing' },
|
|
49
|
+
fieldOverrides: {
|
|
50
|
+
title: { instructions: 'Be more specific' },
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
expect(context.fieldOverrides?.title?.instructions).toBe('Be more specific');
|
|
54
|
+
});
|
|
55
|
+
it('NodeExecutionResult represents success', () => {
|
|
56
|
+
const result = {
|
|
57
|
+
success: true,
|
|
58
|
+
fieldsExtracted: ['title'],
|
|
59
|
+
updatedContent: { title: 'Extracted Title' },
|
|
60
|
+
};
|
|
61
|
+
expect(result.success).toBe(true);
|
|
62
|
+
expect(result.fieldsExtracted).toEqual(['title']);
|
|
63
|
+
expect(result.error).toBeUndefined();
|
|
64
|
+
});
|
|
65
|
+
it('NodeExecutionResult represents failure', () => {
|
|
66
|
+
const result = {
|
|
67
|
+
success: false,
|
|
68
|
+
fieldsExtracted: [],
|
|
69
|
+
error: 'API timeout',
|
|
70
|
+
};
|
|
71
|
+
expect(result.success).toBe(false);
|
|
72
|
+
expect(result.error).toBe('API timeout');
|
|
73
|
+
expect(result.updatedContent).toBeUndefined();
|
|
74
|
+
});
|
|
75
|
+
it('NodeExecutorFn type is callable', async () => {
|
|
76
|
+
const executor = async (ctx) => ({
|
|
77
|
+
success: true,
|
|
78
|
+
fieldsExtracted: ctx.node.field_name ? [ctx.node.field_name] : [],
|
|
79
|
+
updatedContent: { [ctx.node.field_name ?? '']: 'value' },
|
|
80
|
+
});
|
|
81
|
+
const result = await executor({
|
|
82
|
+
node: makeNodeRun(),
|
|
83
|
+
entityId: 'ent-1',
|
|
84
|
+
tenantId: 'ten-1',
|
|
85
|
+
entityContent: {},
|
|
86
|
+
});
|
|
87
|
+
expect(result.success).toBe(true);
|
|
88
|
+
expect(result.fieldsExtracted).toEqual(['title']);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=node-executor.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-executor.test.js","sourceRoot":"","sources":["../../src/workflow/node-executor.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { computeWorkflowProgress, deriveWorkflowStatus } from './status';
|
|
2
|
+
import { computeWorkflowProgress, deriveWorkflowStatus } from './status.js';
|
|
3
3
|
/** Helper to build a minimal WorkflowNodeRunRecord with a given status. */
|
|
4
4
|
function nodeRun(status, overrides) {
|
|
5
5
|
return {
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { WorkflowDefinition, WorkflowRunStatus, WorkflowTriggerType, WorkflowFieldOverride, WorkflowRunStore, EventBus } from '@sprinterai/core';
|
|
2
|
+
import type { NodeExecutorFn } from './node-executor.js';
|
|
3
|
+
/** Options for running a workflow. */
|
|
4
|
+
export interface RunWorkflowOptions {
|
|
5
|
+
/** Entity being processed. */
|
|
6
|
+
entityId: string;
|
|
7
|
+
/** Tenant scope. */
|
|
8
|
+
tenantId: string;
|
|
9
|
+
/** The workflow DAG to execute. */
|
|
10
|
+
definition: WorkflowDefinition;
|
|
11
|
+
/** Current entity field values. Updated locally as nodes complete. */
|
|
12
|
+
entityContent: Record<string, unknown>;
|
|
13
|
+
/** Store for persisting workflow and node run state. */
|
|
14
|
+
store: WorkflowRunStore;
|
|
15
|
+
/** Function to execute a single node. Injected by the consumer. */
|
|
16
|
+
executeNode: NodeExecutorFn;
|
|
17
|
+
/** Optional event bus for emitting workflow events. */
|
|
18
|
+
eventBus?: EventBus;
|
|
19
|
+
/** How this workflow was triggered. */
|
|
20
|
+
triggerType?: WorkflowTriggerType;
|
|
21
|
+
/** Who triggered this workflow (userId, agentSlug, etc.). */
|
|
22
|
+
triggeredBy?: string;
|
|
23
|
+
/** Subset of fields to process. If empty/undefined, process all. */
|
|
24
|
+
fields?: string[];
|
|
25
|
+
/** Force re-extraction even if fields are already populated. */
|
|
26
|
+
force?: boolean;
|
|
27
|
+
/** Per-field instruction overrides. */
|
|
28
|
+
fieldOverrides?: Record<string, WorkflowFieldOverride>;
|
|
29
|
+
}
|
|
30
|
+
/** Result returned after a workflow run completes. */
|
|
31
|
+
export interface RunWorkflowResult {
|
|
32
|
+
/** The workflow run ID. */
|
|
33
|
+
runId: string;
|
|
34
|
+
/** Final workflow status. */
|
|
35
|
+
status: WorkflowRunStatus;
|
|
36
|
+
/** Field names that were successfully extracted. */
|
|
37
|
+
fieldsExtracted: string[];
|
|
38
|
+
/** Map of node key -> error message for failed nodes. */
|
|
39
|
+
errors: Record<string, string>;
|
|
40
|
+
/** Number of nodes that were claimed and executed. */
|
|
41
|
+
claimedNodeCount: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Run a workflow to completion.
|
|
45
|
+
*
|
|
46
|
+
* The runner:
|
|
47
|
+
* 1. Creates a workflow_run record
|
|
48
|
+
* 2. Seeds node_run records from the definition
|
|
49
|
+
* 3. Enters the execution loop:
|
|
50
|
+
* - Evaluates node statuses based on entity content + dependencies
|
|
51
|
+
* - Claims and executes pending agent_task nodes
|
|
52
|
+
* - Updates entity content after each successful node
|
|
53
|
+
* 4. Derives final status and completes the workflow_run
|
|
54
|
+
* 5. Emits events (if EventBus provided)
|
|
55
|
+
*/
|
|
56
|
+
export declare function runWorkflow(options: RunWorkflowOptions): Promise<RunWorkflowResult>;
|
|
57
|
+
//# sourceMappingURL=workflow-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-runner.d.ts","sourceRoot":"","sources":["../../src/workflow/workflow-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,QAAQ,EACT,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAKtD,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,sEAAsE;IACtE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,wDAAwD;IACxD,KAAK,EAAE,gBAAgB,CAAC;IACxB,mEAAmE;IACnE,WAAW,EAAE,cAAc,CAAC;IAC5B,uDAAuD;IACvD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,uCAAuC;IACvC,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,gEAAgE;IAChE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CACxD;AAED,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,oDAAoD;IACpD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,sDAAsD;IACtD,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAID;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwPzF"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { evaluateNodeStatuses } from './evaluate-nodes.js';
|
|
2
|
+
import { deriveWorkflowStatus } from './status.js';
|
|
3
|
+
// ─── Main Runner ──────────────────────────────────────────────
|
|
4
|
+
/**
|
|
5
|
+
* Run a workflow to completion.
|
|
6
|
+
*
|
|
7
|
+
* The runner:
|
|
8
|
+
* 1. Creates a workflow_run record
|
|
9
|
+
* 2. Seeds node_run records from the definition
|
|
10
|
+
* 3. Enters the execution loop:
|
|
11
|
+
* - Evaluates node statuses based on entity content + dependencies
|
|
12
|
+
* - Claims and executes pending agent_task nodes
|
|
13
|
+
* - Updates entity content after each successful node
|
|
14
|
+
* 4. Derives final status and completes the workflow_run
|
|
15
|
+
* 5. Emits events (if EventBus provided)
|
|
16
|
+
*/
|
|
17
|
+
export async function runWorkflow(options) {
|
|
18
|
+
const { entityId, tenantId, definition, entityContent, store, executeNode, eventBus, triggerType = 'manual', triggeredBy, fields, force, fieldOverrides, } = options;
|
|
19
|
+
const startTime = Date.now();
|
|
20
|
+
const fieldsExtracted = [];
|
|
21
|
+
const errors = {};
|
|
22
|
+
let claimedNodeCount = 0;
|
|
23
|
+
// ── 1. Create workflow run ─────────────────────────────────
|
|
24
|
+
const workflowRun = await store.createWorkflowRun({
|
|
25
|
+
entityId,
|
|
26
|
+
tenantId,
|
|
27
|
+
triggerType,
|
|
28
|
+
metadata: triggeredBy ? { triggeredBy } : undefined,
|
|
29
|
+
});
|
|
30
|
+
// ── 2. Filter and seed node runs ──────────────────────────
|
|
31
|
+
const filteredNodes = filterNodes(definition, fields);
|
|
32
|
+
if (filteredNodes.length > 0) {
|
|
33
|
+
await store.createNodeRuns(filteredNodes.map((node) => ({
|
|
34
|
+
workflowRunId: workflowRun.id,
|
|
35
|
+
entityId,
|
|
36
|
+
tenantId,
|
|
37
|
+
nodeKey: node.key,
|
|
38
|
+
nodeType: node.type,
|
|
39
|
+
label: node.label,
|
|
40
|
+
fieldName: node.fieldName,
|
|
41
|
+
blockId: node.blockId,
|
|
42
|
+
outputType: node.outputType,
|
|
43
|
+
status: 'pending',
|
|
44
|
+
assigneeType: node.assigneeType,
|
|
45
|
+
assigneeAgentSlug: node.assigneeAgentSlug,
|
|
46
|
+
dependsOn: node.dependsOn.length > 0 ? node.dependsOn : undefined,
|
|
47
|
+
instructions: node.instructions,
|
|
48
|
+
})));
|
|
49
|
+
}
|
|
50
|
+
// Emit workflow started event
|
|
51
|
+
await emitWorkflowEvent(eventBus, 'workflow.started', {
|
|
52
|
+
workflowRunId: workflowRun.id,
|
|
53
|
+
entityId,
|
|
54
|
+
tenantId,
|
|
55
|
+
status: 'running',
|
|
56
|
+
triggerType,
|
|
57
|
+
});
|
|
58
|
+
// ── 3. Execution loop ─────────────────────────────────────
|
|
59
|
+
// Local copy of entity content that gets updated as nodes complete
|
|
60
|
+
const localContent = { ...entityContent };
|
|
61
|
+
let iterationCount = 0;
|
|
62
|
+
const maxIterations = filteredNodes.length * 2 + 1; // Safety limit
|
|
63
|
+
while (iterationCount < maxIterations) {
|
|
64
|
+
iterationCount++;
|
|
65
|
+
// Re-fetch node runs (may have been updated by previous iterations)
|
|
66
|
+
const nodeRuns = await store.getNodeRuns(workflowRun.id);
|
|
67
|
+
// Force only applies on the first evaluation pass.
|
|
68
|
+
// After nodes have been executed, they should not be forced back to pending.
|
|
69
|
+
const useForce = force && iterationCount === 1;
|
|
70
|
+
// Evaluate which nodes need status updates
|
|
71
|
+
const statusUpdates = evaluateNodeStatuses(nodeRuns, localContent, useForce);
|
|
72
|
+
// Apply status updates to the store in parallel
|
|
73
|
+
if (statusUpdates.length > 0) {
|
|
74
|
+
await Promise.all(statusUpdates.map((update) => store.updateNodeRun(update.nodeRunId, { status: update.newStatus })));
|
|
75
|
+
}
|
|
76
|
+
// Apply status updates to local node runs (avoids extra DB round-trip)
|
|
77
|
+
const statusMap = new Map(statusUpdates.map((u) => [u.nodeRunId, u.newStatus]));
|
|
78
|
+
const currentNodeRuns = nodeRuns.map((n) => {
|
|
79
|
+
const newStatus = statusMap.get(n.id);
|
|
80
|
+
return newStatus ? { ...n, status: newStatus } : n;
|
|
81
|
+
});
|
|
82
|
+
// Find claimable nodes (pending agent_task nodes)
|
|
83
|
+
const claimableNodes = currentNodeRuns.filter((n) => n.status === 'pending' && n.node_type === 'agent_task');
|
|
84
|
+
if (claimableNodes.length === 0) {
|
|
85
|
+
// No more work to do
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
// Claim and execute each pending node
|
|
89
|
+
let anyExecuted = false;
|
|
90
|
+
for (const node of claimableNodes) {
|
|
91
|
+
const claimed = await store.claimNodeRun(node.id, triggeredBy ?? 'workflow-runner');
|
|
92
|
+
if (!claimed)
|
|
93
|
+
continue;
|
|
94
|
+
anyExecuted = true;
|
|
95
|
+
claimedNodeCount++;
|
|
96
|
+
const nodeStartTime = Date.now();
|
|
97
|
+
try {
|
|
98
|
+
// Mark as running
|
|
99
|
+
await store.updateNodeRun(claimed.id, {
|
|
100
|
+
status: 'running',
|
|
101
|
+
startedAt: new Date().toISOString(),
|
|
102
|
+
attemptCount: (claimed.attempt_count ?? 0) + 1,
|
|
103
|
+
});
|
|
104
|
+
// Execute the node
|
|
105
|
+
const result = await executeNode({
|
|
106
|
+
node: claimed,
|
|
107
|
+
entityId,
|
|
108
|
+
tenantId,
|
|
109
|
+
entityContent: localContent,
|
|
110
|
+
fieldOverrides,
|
|
111
|
+
});
|
|
112
|
+
if (result.success) {
|
|
113
|
+
const nodeDuration = Date.now() - nodeStartTime;
|
|
114
|
+
// Update local content with extracted values
|
|
115
|
+
if (result.updatedContent) {
|
|
116
|
+
Object.assign(localContent, result.updatedContent);
|
|
117
|
+
}
|
|
118
|
+
// Track extracted fields
|
|
119
|
+
fieldsExtracted.push(...result.fieldsExtracted);
|
|
120
|
+
// Mark node completed
|
|
121
|
+
await store.updateNodeRun(claimed.id, {
|
|
122
|
+
status: 'completed',
|
|
123
|
+
completedAt: new Date().toISOString(),
|
|
124
|
+
durationMs: nodeDuration,
|
|
125
|
+
});
|
|
126
|
+
// Emit node completed event
|
|
127
|
+
await emitWorkflowEvent(eventBus, 'workflow.node_completed', {
|
|
128
|
+
workflowRunId: workflowRun.id,
|
|
129
|
+
entityId,
|
|
130
|
+
tenantId,
|
|
131
|
+
status: 'completed',
|
|
132
|
+
nodeKey: claimed.node_key,
|
|
133
|
+
nodeType: claimed.node_type,
|
|
134
|
+
fieldName: claimed.field_name ?? undefined,
|
|
135
|
+
fieldsExtracted: result.fieldsExtracted,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
const nodeDuration = Date.now() - nodeStartTime;
|
|
140
|
+
// Mark node failed
|
|
141
|
+
errors[claimed.node_key] = result.error ?? 'Unknown error';
|
|
142
|
+
await store.updateNodeRun(claimed.id, {
|
|
143
|
+
status: 'failed',
|
|
144
|
+
errorMessage: result.error ?? 'Unknown error',
|
|
145
|
+
completedAt: new Date().toISOString(),
|
|
146
|
+
durationMs: nodeDuration,
|
|
147
|
+
});
|
|
148
|
+
// Emit node failed event
|
|
149
|
+
await emitWorkflowEvent(eventBus, 'workflow.node_failed', {
|
|
150
|
+
workflowRunId: workflowRun.id,
|
|
151
|
+
entityId,
|
|
152
|
+
tenantId,
|
|
153
|
+
status: 'failed',
|
|
154
|
+
nodeKey: claimed.node_key,
|
|
155
|
+
nodeType: claimed.node_type,
|
|
156
|
+
fieldName: claimed.field_name ?? undefined,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
const nodeDuration = Date.now() - nodeStartTime;
|
|
162
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
163
|
+
errors[claimed.node_key] = errorMessage;
|
|
164
|
+
await store.updateNodeRun(claimed.id, {
|
|
165
|
+
status: 'failed',
|
|
166
|
+
errorMessage,
|
|
167
|
+
completedAt: new Date().toISOString(),
|
|
168
|
+
durationMs: nodeDuration,
|
|
169
|
+
});
|
|
170
|
+
await emitWorkflowEvent(eventBus, 'workflow.node_failed', {
|
|
171
|
+
workflowRunId: workflowRun.id,
|
|
172
|
+
entityId,
|
|
173
|
+
tenantId,
|
|
174
|
+
status: 'failed',
|
|
175
|
+
nodeKey: claimed.node_key,
|
|
176
|
+
nodeType: claimed.node_type,
|
|
177
|
+
fieldName: claimed.field_name ?? undefined,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// If no nodes were executed this iteration, break to prevent infinite loops
|
|
182
|
+
if (!anyExecuted)
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
// ── 4. Derive final status ────────────────────────────────
|
|
186
|
+
const finalNodeRuns = await store.getNodeRuns(workflowRun.id);
|
|
187
|
+
const finalStatus = deriveWorkflowStatus(finalNodeRuns);
|
|
188
|
+
const totalDuration = Date.now() - startTime;
|
|
189
|
+
// ── 5. Complete workflow run ───────────────────────────────
|
|
190
|
+
await store.completeWorkflowRun(workflowRun.id, finalStatus, totalDuration);
|
|
191
|
+
// ── 6. Emit final workflow event ──────────────────────────
|
|
192
|
+
const eventType = finalStatus === 'completed' || finalStatus === 'partial'
|
|
193
|
+
? 'workflow.completed'
|
|
194
|
+
: finalStatus === 'failed'
|
|
195
|
+
? 'workflow.failed'
|
|
196
|
+
: 'workflow.completed';
|
|
197
|
+
await emitWorkflowEvent(eventBus, eventType, {
|
|
198
|
+
workflowRunId: workflowRun.id,
|
|
199
|
+
entityId,
|
|
200
|
+
tenantId,
|
|
201
|
+
status: finalStatus,
|
|
202
|
+
triggerType,
|
|
203
|
+
fieldsExtracted,
|
|
204
|
+
errors: Object.keys(errors).length > 0 ? errors : undefined,
|
|
205
|
+
});
|
|
206
|
+
return {
|
|
207
|
+
runId: workflowRun.id,
|
|
208
|
+
status: finalStatus,
|
|
209
|
+
fieldsExtracted,
|
|
210
|
+
errors,
|
|
211
|
+
claimedNodeCount,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
// ─── Helpers ──────────────────────────────────────────────────
|
|
215
|
+
/**
|
|
216
|
+
* Filter workflow definition nodes to only include requested fields.
|
|
217
|
+
* If no fields specified, returns all nodes.
|
|
218
|
+
* Also includes dependency nodes transitively.
|
|
219
|
+
*/
|
|
220
|
+
function filterNodes(definition, fields) {
|
|
221
|
+
if (!fields || fields.length === 0) {
|
|
222
|
+
return definition.nodes;
|
|
223
|
+
}
|
|
224
|
+
const fieldSet = new Set(fields);
|
|
225
|
+
const requiredKeys = new Set();
|
|
226
|
+
// First pass: find nodes matching requested fields
|
|
227
|
+
for (const node of definition.nodes) {
|
|
228
|
+
if (node.fieldName && fieldSet.has(node.fieldName)) {
|
|
229
|
+
requiredKeys.add(node.key);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Transitive pass: include dependencies
|
|
233
|
+
const nodeMap = new Map(definition.nodes.map((n) => [n.key, n]));
|
|
234
|
+
const queue = [...requiredKeys];
|
|
235
|
+
while (queue.length > 0) {
|
|
236
|
+
const key = queue.pop();
|
|
237
|
+
const node = nodeMap.get(key);
|
|
238
|
+
if (!node)
|
|
239
|
+
continue;
|
|
240
|
+
for (const depKey of node.dependsOn) {
|
|
241
|
+
if (!requiredKeys.has(depKey)) {
|
|
242
|
+
requiredKeys.add(depKey);
|
|
243
|
+
queue.push(depKey);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return definition.nodes.filter((n) => requiredKeys.has(n.key));
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Emit a workflow event via the event bus, if present.
|
|
251
|
+
* Failures are silently ignored — events are best-effort.
|
|
252
|
+
*/
|
|
253
|
+
async function emitWorkflowEvent(eventBus, type, data) {
|
|
254
|
+
if (!eventBus)
|
|
255
|
+
return;
|
|
256
|
+
try {
|
|
257
|
+
await eventBus.emit(type, data, { correlationId: data.workflowRunId });
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
// Events are best-effort — swallow failures
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=workflow-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-runner.js","sourceRoot":"","sources":["../../src/workflow/workflow-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-runner.test.d.ts","sourceRoot":"","sources":["../../src/workflow/workflow-runner.test.ts"],"names":[],"mappings":""}
|