@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.
Files changed (389) hide show
  1. package/dist/adapters/a2a-adapter.d.ts +37 -9
  2. package/dist/adapters/a2a-adapter.d.ts.map +1 -1
  3. package/dist/adapters/a2a-adapter.js +132 -9
  4. package/dist/adapters/a2a-adapter.js.map +1 -1
  5. package/dist/adapters/a2a-adapter.test.d.ts +2 -0
  6. package/dist/adapters/a2a-adapter.test.d.ts.map +1 -0
  7. package/dist/adapters/a2a-adapter.test.js +295 -0
  8. package/dist/adapters/a2a-adapter.test.js.map +1 -0
  9. package/dist/adapters/http-agent-adapter.d.ts +19 -9
  10. package/dist/adapters/http-agent-adapter.d.ts.map +1 -1
  11. package/dist/adapters/http-agent-adapter.js +55 -9
  12. package/dist/adapters/http-agent-adapter.js.map +1 -1
  13. package/dist/adapters/http-agent-adapter.test.d.ts +2 -0
  14. package/dist/adapters/http-agent-adapter.test.d.ts.map +1 -0
  15. package/dist/adapters/http-agent-adapter.test.js +164 -0
  16. package/dist/adapters/http-agent-adapter.test.js.map +1 -0
  17. package/dist/adapters/index.d.ts +8 -8
  18. package/dist/adapters/index.d.ts.map +1 -1
  19. package/dist/adapters/index.js +4 -4
  20. package/dist/adapters/index.js.map +1 -1
  21. package/dist/adapters/mcp-adapter.d.ts +29 -9
  22. package/dist/adapters/mcp-adapter.d.ts.map +1 -1
  23. package/dist/adapters/mcp-adapter.js +43 -8
  24. package/dist/adapters/mcp-adapter.js.map +1 -1
  25. package/dist/adapters/mcp-adapter.test.d.ts +2 -0
  26. package/dist/adapters/mcp-adapter.test.d.ts.map +1 -0
  27. package/dist/adapters/mcp-adapter.test.js +118 -0
  28. package/dist/adapters/mcp-adapter.test.js.map +1 -0
  29. package/dist/adapters/openclaw-adapter.d.ts +34 -8
  30. package/dist/adapters/openclaw-adapter.d.ts.map +1 -1
  31. package/dist/adapters/openclaw-adapter.js +38 -8
  32. package/dist/adapters/openclaw-adapter.js.map +1 -1
  33. package/dist/adapters/openclaw-adapter.test.d.ts +2 -0
  34. package/dist/adapters/openclaw-adapter.test.d.ts.map +1 -0
  35. package/dist/adapters/openclaw-adapter.test.js +77 -0
  36. package/dist/adapters/openclaw-adapter.test.js.map +1 -0
  37. package/dist/agent/agent-registry.test.js +1 -1
  38. package/dist/agent/agent-resolver.d.ts +8 -2
  39. package/dist/agent/agent-resolver.d.ts.map +1 -1
  40. package/dist/agent/agent-resolver.js +7 -1
  41. package/dist/agent/agent-resolver.js.map +1 -1
  42. package/dist/agent/agent-resolver.test.js +21 -3
  43. package/dist/agent/agent-resolver.test.js.map +1 -1
  44. package/dist/agent/delegate.test.js +1 -1
  45. package/dist/agent/execute-agent.d.ts +32 -11
  46. package/dist/agent/execute-agent.d.ts.map +1 -1
  47. package/dist/agent/execute-agent.js +39 -3
  48. package/dist/agent/execute-agent.js.map +1 -1
  49. package/dist/agent/index.d.ts +9 -9
  50. package/dist/agent/index.d.ts.map +1 -1
  51. package/dist/agent/index.js +5 -5
  52. package/dist/agent/index.js.map +1 -1
  53. package/dist/agent/prompt-builder.test.js +1 -1
  54. package/dist/approval/approval-manager.d.ts +19 -0
  55. package/dist/approval/approval-manager.d.ts.map +1 -0
  56. package/dist/approval/approval-manager.js +36 -0
  57. package/dist/approval/approval-manager.js.map +1 -0
  58. package/dist/approval/approval-manager.test.d.ts +2 -0
  59. package/dist/approval/approval-manager.test.d.ts.map +1 -0
  60. package/dist/approval/approval-manager.test.js +239 -0
  61. package/dist/approval/approval-manager.test.js.map +1 -0
  62. package/dist/approval/index.d.ts +3 -0
  63. package/dist/approval/index.d.ts.map +1 -0
  64. package/dist/approval/index.js +2 -0
  65. package/dist/approval/index.js.map +1 -0
  66. package/dist/chat/chat-handler.d.ts +16 -7
  67. package/dist/chat/chat-handler.d.ts.map +1 -1
  68. package/dist/chat/chat-handler.js +68 -20
  69. package/dist/chat/chat-handler.js.map +1 -1
  70. package/dist/chat/chat-handler.test.js +101 -11
  71. package/dist/chat/chat-handler.test.js.map +1 -1
  72. package/dist/chat/index.d.ts +3 -3
  73. package/dist/chat/index.js +2 -2
  74. package/dist/chat/message-utils.d.ts +15 -7
  75. package/dist/chat/message-utils.d.ts.map +1 -1
  76. package/dist/chat/message-utils.js +94 -22
  77. package/dist/chat/message-utils.js.map +1 -1
  78. package/dist/chat/message-utils.test.js +71 -1
  79. package/dist/chat/message-utils.test.js.map +1 -1
  80. package/dist/document/chunk-generator.d.ts +6 -0
  81. package/dist/document/chunk-generator.d.ts.map +1 -0
  82. package/dist/document/chunk-generator.js +107 -0
  83. package/dist/document/chunk-generator.js.map +1 -0
  84. package/dist/document/chunk-generator.test.d.ts +2 -0
  85. package/dist/document/chunk-generator.test.d.ts.map +1 -0
  86. package/dist/document/chunk-generator.test.js +166 -0
  87. package/dist/document/chunk-generator.test.js.map +1 -0
  88. package/dist/document/document-processor.d.ts +27 -0
  89. package/dist/document/document-processor.d.ts.map +1 -0
  90. package/dist/document/document-processor.js +44 -0
  91. package/dist/document/document-processor.js.map +1 -0
  92. package/dist/document/document-processor.test.d.ts +2 -0
  93. package/dist/document/document-processor.test.d.ts.map +1 -0
  94. package/dist/document/document-processor.test.js +197 -0
  95. package/dist/document/document-processor.test.js.map +1 -0
  96. package/dist/document/index.d.ts +5 -0
  97. package/dist/document/index.d.ts.map +1 -0
  98. package/dist/document/index.js +4 -0
  99. package/dist/document/index.js.map +1 -0
  100. package/dist/document/parsers/index.d.ts +2 -0
  101. package/dist/document/parsers/index.d.ts.map +1 -0
  102. package/dist/document/parsers/index.js +2 -0
  103. package/dist/document/parsers/index.js.map +1 -0
  104. package/dist/document/parsers/text-parser.d.ts +4 -0
  105. package/dist/document/parsers/text-parser.d.ts.map +1 -0
  106. package/dist/document/parsers/text-parser.js +23 -0
  107. package/dist/document/parsers/text-parser.js.map +1 -0
  108. package/dist/document/parsers/text-parser.test.d.ts +2 -0
  109. package/dist/document/parsers/text-parser.test.d.ts.map +1 -0
  110. package/dist/document/parsers/text-parser.test.js +64 -0
  111. package/dist/document/parsers/text-parser.test.js.map +1 -0
  112. package/dist/eval/eval-runner.test.js +2 -2
  113. package/dist/eval/index.d.ts +3 -3
  114. package/dist/eval/index.js +2 -2
  115. package/dist/eval/scorers.test.js +1 -1
  116. package/dist/events/event-bus.d.ts +12 -0
  117. package/dist/events/event-bus.d.ts.map +1 -0
  118. package/dist/events/event-bus.js +77 -0
  119. package/dist/events/event-bus.js.map +1 -0
  120. package/dist/events/event-bus.test.d.ts +2 -0
  121. package/dist/events/event-bus.test.d.ts.map +1 -0
  122. package/dist/events/event-bus.test.js +155 -0
  123. package/dist/events/event-bus.test.js.map +1 -0
  124. package/dist/events/index.d.ts +2 -0
  125. package/dist/events/index.d.ts.map +1 -0
  126. package/dist/events/index.js +2 -0
  127. package/dist/events/index.js.map +1 -0
  128. package/dist/guardrail/guardrail-pipeline.test.js +1 -1
  129. package/dist/guardrail/index.d.ts +2 -2
  130. package/dist/guardrail/index.js +1 -1
  131. package/dist/index.d.ts +81 -45
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +55 -27
  134. package/dist/index.js.map +1 -1
  135. package/dist/jobs/in-memory-job-queue.d.ts +20 -0
  136. package/dist/jobs/in-memory-job-queue.d.ts.map +1 -0
  137. package/dist/jobs/in-memory-job-queue.js +120 -0
  138. package/dist/jobs/in-memory-job-queue.js.map +1 -0
  139. package/dist/jobs/in-memory-job-queue.test.d.ts +2 -0
  140. package/dist/jobs/in-memory-job-queue.test.d.ts.map +1 -0
  141. package/dist/jobs/in-memory-job-queue.test.js +146 -0
  142. package/dist/jobs/in-memory-job-queue.test.js.map +1 -0
  143. package/dist/jobs/index.d.ts +4 -0
  144. package/dist/jobs/index.d.ts.map +1 -0
  145. package/dist/jobs/index.js +3 -0
  146. package/dist/jobs/index.js.map +1 -0
  147. package/dist/jobs/job-runner.d.ts +42 -0
  148. package/dist/jobs/job-runner.d.ts.map +1 -0
  149. package/dist/jobs/job-runner.js +119 -0
  150. package/dist/jobs/job-runner.js.map +1 -0
  151. package/dist/jobs/job-runner.test.d.ts +2 -0
  152. package/dist/jobs/job-runner.test.d.ts.map +1 -0
  153. package/dist/jobs/job-runner.test.js +190 -0
  154. package/dist/jobs/job-runner.test.js.map +1 -0
  155. package/dist/memory/index.d.ts +3 -3
  156. package/dist/memory/index.js +2 -2
  157. package/dist/memory/memory-prompt.d.ts +1 -1
  158. package/dist/module/create-runtime.d.ts +21 -6
  159. package/dist/module/create-runtime.d.ts.map +1 -1
  160. package/dist/module/create-runtime.js +7 -7
  161. package/dist/module/create-runtime.js.map +1 -1
  162. package/dist/module/create-runtime.test.js +8 -8
  163. package/dist/module/index.d.ts +5 -4
  164. package/dist/module/index.d.ts.map +1 -1
  165. package/dist/module/index.js +3 -2
  166. package/dist/module/index.js.map +1 -1
  167. package/dist/module/map-supabase-stores.d.ts +33 -0
  168. package/dist/module/map-supabase-stores.d.ts.map +1 -0
  169. package/dist/module/map-supabase-stores.js +28 -0
  170. package/dist/module/map-supabase-stores.js.map +1 -0
  171. package/dist/module/module-loader.d.ts +9 -1
  172. package/dist/module/module-loader.d.ts.map +1 -1
  173. package/dist/module/module-loader.js +40 -1
  174. package/dist/module/module-loader.js.map +1 -1
  175. package/dist/module/module-loader.test.js +38 -1
  176. package/dist/module/module-loader.test.js.map +1 -1
  177. package/dist/notification/digest-scheduler.d.ts +18 -0
  178. package/dist/notification/digest-scheduler.d.ts.map +1 -0
  179. package/dist/notification/digest-scheduler.js +44 -0
  180. package/dist/notification/digest-scheduler.js.map +1 -0
  181. package/dist/notification/digest-scheduler.test.d.ts +2 -0
  182. package/dist/notification/digest-scheduler.test.d.ts.map +1 -0
  183. package/dist/notification/digest-scheduler.test.js +306 -0
  184. package/dist/notification/digest-scheduler.test.js.map +1 -0
  185. package/dist/notification/index.d.ts +5 -0
  186. package/dist/notification/index.d.ts.map +1 -0
  187. package/dist/notification/index.js +3 -0
  188. package/dist/notification/index.js.map +1 -0
  189. package/dist/notification/notification-engine.d.ts +20 -0
  190. package/dist/notification/notification-engine.d.ts.map +1 -0
  191. package/dist/notification/notification-engine.js +78 -0
  192. package/dist/notification/notification-engine.js.map +1 -0
  193. package/dist/notification/notification-engine.test.d.ts +2 -0
  194. package/dist/notification/notification-engine.test.d.ts.map +1 -0
  195. package/dist/notification/notification-engine.test.js +364 -0
  196. package/dist/notification/notification-engine.test.js.map +1 -0
  197. package/dist/providers/index.d.ts +5 -0
  198. package/dist/providers/index.d.ts.map +1 -0
  199. package/dist/providers/index.js +3 -0
  200. package/dist/providers/index.js.map +1 -0
  201. package/dist/providers/model-resolver.d.ts +93 -0
  202. package/dist/providers/model-resolver.d.ts.map +1 -0
  203. package/dist/providers/model-resolver.js +152 -0
  204. package/dist/providers/model-resolver.js.map +1 -0
  205. package/dist/providers/model-resolver.test.d.ts +2 -0
  206. package/dist/providers/model-resolver.test.d.ts.map +1 -0
  207. package/dist/providers/model-resolver.test.js +199 -0
  208. package/dist/providers/model-resolver.test.js.map +1 -0
  209. package/dist/providers/noop-providers.d.ts +6 -0
  210. package/dist/providers/noop-providers.d.ts.map +1 -0
  211. package/dist/providers/noop-providers.js +15 -0
  212. package/dist/providers/noop-providers.js.map +1 -0
  213. package/dist/providers/noop-providers.test.d.ts +2 -0
  214. package/dist/providers/noop-providers.test.d.ts.map +1 -0
  215. package/dist/providers/noop-providers.test.js +63 -0
  216. package/dist/providers/noop-providers.test.js.map +1 -0
  217. package/dist/providers/provider-interfaces.d.ts +65 -0
  218. package/dist/providers/provider-interfaces.d.ts.map +1 -0
  219. package/dist/providers/provider-interfaces.js +2 -0
  220. package/dist/providers/provider-interfaces.js.map +1 -0
  221. package/dist/realtime/index.d.ts +3 -0
  222. package/dist/realtime/index.d.ts.map +1 -0
  223. package/dist/realtime/index.js +2 -0
  224. package/dist/realtime/index.js.map +1 -0
  225. package/dist/realtime/realtime-manager.d.ts +20 -0
  226. package/dist/realtime/realtime-manager.d.ts.map +1 -0
  227. package/dist/realtime/realtime-manager.js +110 -0
  228. package/dist/realtime/realtime-manager.js.map +1 -0
  229. package/dist/realtime/realtime-manager.test.d.ts +2 -0
  230. package/dist/realtime/realtime-manager.test.d.ts.map +1 -0
  231. package/dist/realtime/realtime-manager.test.js +273 -0
  232. package/dist/realtime/realtime-manager.test.js.map +1 -0
  233. package/dist/scoring/compute-score.test.js +1 -1
  234. package/dist/scoring/index.d.ts +2 -2
  235. package/dist/scoring/index.js +1 -1
  236. package/dist/search/cosine-similarity.d.ts +8 -0
  237. package/dist/search/cosine-similarity.d.ts.map +1 -0
  238. package/dist/search/cosine-similarity.js +28 -0
  239. package/dist/search/cosine-similarity.js.map +1 -0
  240. package/dist/search/cosine-similarity.test.d.ts +2 -0
  241. package/dist/search/cosine-similarity.test.d.ts.map +1 -0
  242. package/dist/search/cosine-similarity.test.js +49 -0
  243. package/dist/search/cosine-similarity.test.js.map +1 -0
  244. package/dist/search/hybrid-search.d.ts +47 -0
  245. package/dist/search/hybrid-search.d.ts.map +1 -0
  246. package/dist/search/hybrid-search.js +111 -0
  247. package/dist/search/hybrid-search.js.map +1 -0
  248. package/dist/search/hybrid-search.test.d.ts +2 -0
  249. package/dist/search/hybrid-search.test.d.ts.map +1 -0
  250. package/dist/search/hybrid-search.test.js +238 -0
  251. package/dist/search/hybrid-search.test.js.map +1 -0
  252. package/dist/search/in-memory-search.d.ts +17 -0
  253. package/dist/search/in-memory-search.d.ts.map +1 -0
  254. package/dist/search/in-memory-search.js +59 -0
  255. package/dist/search/in-memory-search.js.map +1 -0
  256. package/dist/search/in-memory-search.test.d.ts +2 -0
  257. package/dist/search/in-memory-search.test.d.ts.map +1 -0
  258. package/dist/search/in-memory-search.test.js +169 -0
  259. package/dist/search/in-memory-search.test.js.map +1 -0
  260. package/dist/search/index.d.ts +6 -0
  261. package/dist/search/index.d.ts.map +1 -0
  262. package/dist/search/index.js +4 -0
  263. package/dist/search/index.js.map +1 -0
  264. package/dist/testing/in-memory-agent-store.d.ts +5 -1
  265. package/dist/testing/in-memory-agent-store.d.ts.map +1 -1
  266. package/dist/testing/in-memory-agent-store.js +19 -0
  267. package/dist/testing/in-memory-agent-store.js.map +1 -1
  268. package/dist/testing/in-memory-agent-store.test.js +1 -1
  269. package/dist/testing/in-memory-chat-store.d.ts +4 -3
  270. package/dist/testing/in-memory-chat-store.d.ts.map +1 -1
  271. package/dist/testing/in-memory-chat-store.js +3 -2
  272. package/dist/testing/in-memory-chat-store.js.map +1 -1
  273. package/dist/testing/in-memory-entity-store.d.ts +5 -1
  274. package/dist/testing/in-memory-entity-store.d.ts.map +1 -1
  275. package/dist/testing/in-memory-entity-store.js +69 -4
  276. package/dist/testing/in-memory-entity-store.js.map +1 -1
  277. package/dist/testing/in-memory-entity-store.test.js +1 -1
  278. package/dist/testing/in-memory-memory-store.d.ts +3 -1
  279. package/dist/testing/in-memory-memory-store.d.ts.map +1 -1
  280. package/dist/testing/in-memory-memory-store.js +20 -0
  281. package/dist/testing/in-memory-memory-store.js.map +1 -1
  282. package/dist/testing/in-memory-tool-store.d.ts +13 -2
  283. package/dist/testing/in-memory-tool-store.d.ts.map +1 -1
  284. package/dist/testing/in-memory-tool-store.js +51 -0
  285. package/dist/testing/in-memory-tool-store.js.map +1 -1
  286. package/dist/testing/index.d.ts +7 -7
  287. package/dist/testing/index.js +7 -7
  288. package/dist/tool/ai-bridge.d.ts +1 -0
  289. package/dist/tool/ai-bridge.d.ts.map +1 -1
  290. package/dist/tool/ai-bridge.js +1 -0
  291. package/dist/tool/ai-bridge.js.map +1 -1
  292. package/dist/tool/ai-bridge.test.js +1 -1
  293. package/dist/tool/catalog.d.ts +19 -0
  294. package/dist/tool/catalog.d.ts.map +1 -0
  295. package/dist/tool/catalog.js +88 -0
  296. package/dist/tool/catalog.js.map +1 -0
  297. package/dist/tool/catalog.test.d.ts +2 -0
  298. package/dist/tool/catalog.test.d.ts.map +1 -0
  299. package/dist/tool/catalog.test.js +129 -0
  300. package/dist/tool/catalog.test.js.map +1 -0
  301. package/dist/tool/entity-tools-factory.d.ts.map +1 -1
  302. package/dist/tool/entity-tools-factory.js +80 -0
  303. package/dist/tool/entity-tools-factory.js.map +1 -1
  304. package/dist/tool/entity-tools-factory.test.js +70 -4
  305. package/dist/tool/entity-tools-factory.test.js.map +1 -1
  306. package/dist/tool/execute-registered-tool.d.ts +17 -0
  307. package/dist/tool/execute-registered-tool.d.ts.map +1 -0
  308. package/dist/tool/execute-registered-tool.js +24 -0
  309. package/dist/tool/execute-registered-tool.js.map +1 -0
  310. package/dist/tool/execute-registered-tool.test.d.ts +2 -0
  311. package/dist/tool/execute-registered-tool.test.d.ts.map +1 -0
  312. package/dist/tool/execute-registered-tool.test.js +73 -0
  313. package/dist/tool/execute-registered-tool.test.js.map +1 -0
  314. package/dist/tool/index.d.ts +11 -7
  315. package/dist/tool/index.d.ts.map +1 -1
  316. package/dist/tool/index.js +7 -5
  317. package/dist/tool/index.js.map +1 -1
  318. package/dist/tool/resolve-tools.d.ts +3 -1
  319. package/dist/tool/resolve-tools.d.ts.map +1 -1
  320. package/dist/tool/resolve-tools.js +1 -1
  321. package/dist/tool/resolve-tools.js.map +1 -1
  322. package/dist/tool/resolve-tools.test.js +1 -1
  323. package/dist/tool/tool-executor.d.ts +3 -2
  324. package/dist/tool/tool-executor.d.ts.map +1 -1
  325. package/dist/tool/tool-executor.js +4 -2
  326. package/dist/tool/tool-executor.js.map +1 -1
  327. package/dist/tool/tool-executor.test.js +2 -2
  328. package/dist/tool/tool-registry.test.js +1 -1
  329. package/dist/tool/zod-to-json-schema.d.ts +7 -0
  330. package/dist/tool/zod-to-json-schema.d.ts.map +1 -0
  331. package/dist/tool/zod-to-json-schema.js +12 -0
  332. package/dist/tool/zod-to-json-schema.js.map +1 -0
  333. package/dist/tool/zod-to-json-schema.test.d.ts +2 -0
  334. package/dist/tool/zod-to-json-schema.test.d.ts.map +1 -0
  335. package/dist/tool/zod-to-json-schema.test.js +127 -0
  336. package/dist/tool/zod-to-json-schema.test.js.map +1 -0
  337. package/dist/webhook/index.d.ts +4 -0
  338. package/dist/webhook/index.d.ts.map +1 -0
  339. package/dist/webhook/index.js +3 -0
  340. package/dist/webhook/index.js.map +1 -0
  341. package/dist/webhook/webhook-delivery.d.ts +12 -0
  342. package/dist/webhook/webhook-delivery.d.ts.map +1 -0
  343. package/dist/webhook/webhook-delivery.js +102 -0
  344. package/dist/webhook/webhook-delivery.js.map +1 -0
  345. package/dist/webhook/webhook-delivery.test.d.ts +2 -0
  346. package/dist/webhook/webhook-delivery.test.d.ts.map +1 -0
  347. package/dist/webhook/webhook-delivery.test.js +284 -0
  348. package/dist/webhook/webhook-delivery.test.js.map +1 -0
  349. package/dist/webhook/webhook-signer.d.ts +14 -0
  350. package/dist/webhook/webhook-signer.d.ts.map +1 -0
  351. package/dist/webhook/webhook-signer.js +31 -0
  352. package/dist/webhook/webhook-signer.js.map +1 -0
  353. package/dist/webhook/webhook-signer.test.d.ts +2 -0
  354. package/dist/webhook/webhook-signer.test.d.ts.map +1 -0
  355. package/dist/webhook/webhook-signer.test.js +74 -0
  356. package/dist/webhook/webhook-signer.test.js.map +1 -0
  357. package/dist/workflow/compile.js +4 -1
  358. package/dist/workflow/compile.js.map +1 -1
  359. package/dist/workflow/compile.test.js +1 -1
  360. package/dist/workflow/evaluate-nodes.d.ts +24 -0
  361. package/dist/workflow/evaluate-nodes.d.ts.map +1 -0
  362. package/dist/workflow/evaluate-nodes.js +126 -0
  363. package/dist/workflow/evaluate-nodes.js.map +1 -0
  364. package/dist/workflow/evaluate-nodes.test.d.ts +2 -0
  365. package/dist/workflow/evaluate-nodes.test.d.ts.map +1 -0
  366. package/dist/workflow/evaluate-nodes.test.js +363 -0
  367. package/dist/workflow/evaluate-nodes.test.js.map +1 -0
  368. package/dist/workflow/index.d.ts +8 -3
  369. package/dist/workflow/index.d.ts.map +1 -1
  370. package/dist/workflow/index.js +4 -2
  371. package/dist/workflow/index.js.map +1 -1
  372. package/dist/workflow/node-executor.d.ts +40 -0
  373. package/dist/workflow/node-executor.d.ts.map +1 -0
  374. package/dist/workflow/node-executor.js +2 -0
  375. package/dist/workflow/node-executor.js.map +1 -0
  376. package/dist/workflow/node-executor.test.d.ts +2 -0
  377. package/dist/workflow/node-executor.test.d.ts.map +1 -0
  378. package/dist/workflow/node-executor.test.js +91 -0
  379. package/dist/workflow/node-executor.test.js.map +1 -0
  380. package/dist/workflow/status.test.js +1 -1
  381. package/dist/workflow/workflow-runner.d.ts +57 -0
  382. package/dist/workflow/workflow-runner.d.ts.map +1 -0
  383. package/dist/workflow/workflow-runner.js +263 -0
  384. package/dist/workflow/workflow-runner.js.map +1 -0
  385. package/dist/workflow/workflow-runner.test.d.ts +2 -0
  386. package/dist/workflow/workflow-runner.test.d.ts.map +1 -0
  387. package/dist/workflow/workflow-runner.test.js +657 -0
  388. package/dist/workflow/workflow-runner.test.js.map +1 -0
  389. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=node-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-executor.js","sourceRoot":"","sources":["../../src/workflow/node-executor.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=node-executor.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=workflow-runner.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-runner.test.d.ts","sourceRoot":"","sources":["../../src/workflow/workflow-runner.test.ts"],"names":[],"mappings":""}