yaml-flow 7.1.0 → 8.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.
Files changed (389) hide show
  1. package/browser/asset-integrity.json +8 -4
  2. package/browser/board-livecards-client.js +1 -1
  3. package/browser/board-livecards-localstorage.js +4 -4
  4. package/browser/live-cards.js +19 -3309
  5. package/cli/board-live-cards-lib-tjYsPt5U.d.ts +321 -0
  6. package/{dist/cli → cli}/browser-api/board-live-cards-browser-adapter.d.ts +3 -5
  7. package/{dist/cli → cli}/browser-api/card-store-browser-api.d.ts +1 -2
  8. package/{dist/cli → cli}/browser-api/card-store-browser-api.js +1 -1
  9. package/cli/execution-interface-ftO1W7Po.d.ts +286 -0
  10. package/{dist/cli → cli}/node/artifacts-store-cli.js +2 -2
  11. package/cli/node/batch-runner-cli.js +3 -0
  12. package/cli/node/board-live-cards-cli.js +15 -0
  13. package/{dist/cli → cli}/node/card-store-cli.js +1 -1
  14. package/{dist/cli → cli}/node/execution-adapter.d.ts +49 -4
  15. package/cli/node/execution-adapter.js +3 -0
  16. package/{dist/cli → cli}/node/fs-board-adapter.d.ts +24 -11
  17. package/cli/node/fs-board-adapter.js +14 -0
  18. package/cli/node/step-machine-cli.d.ts +7 -0
  19. package/cli/node/step-machine-cli.js +5 -0
  20. package/{dist/board-live-cards-public-5n1-syA3.d.cts → cli/types-C2YQXFwo.d.ts} +68 -5
  21. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/gandalf-runtime/.config/card-store-ref.json +1 -0
  22. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/gandalf-runtime/.config/chat-handler.json +1 -0
  23. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/gandalf-runtime/.config/outputs-store-ref.json +1 -0
  24. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/gandalf-runtime/.config/task-executor.json +1 -0
  25. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/gandalf-runtime/.state-snapshot/board/graph.json +29 -0
  26. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/gandalf-runtime/.state-snapshot/board/lastJournalProcessedId.json +1 -0
  27. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/gandalf-runtime-out/.outputs/status.json +25 -0
  28. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/runtime-out/.outputs/cards/card-market-prices/computed_values.json +67 -0
  29. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/runtime-out/.outputs/cards/card-portfolio/computed_values.json +1 -0
  30. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/runtime-out/.outputs/cards/card-portfolio-value/computed_values.json +52 -0
  31. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/runtime-out/.outputs/data-objects/holdings.json +22 -0
  32. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/runtime-out/.outputs/data-objects/positions.json +46 -0
  33. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/runtime-out/.outputs/data-objects/quotes.json +35 -0
  34. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/runtime-out/.outputs/status.json +113 -0
  35. package/examples/{example-board → board}/demo-server-config.json +0 -1
  36. package/examples/{example-board → board}/demo-server.js +23 -48
  37. package/examples/{example-board → board}/demo-shell-with-server.html +3 -3
  38. package/examples/{example-board → board}/demo-task-executor.js +71 -24
  39. package/examples/board/gandalf-cards/card-source-kinds.json +36 -0
  40. package/examples/board/gandalf-cards/cards/_index.json +7 -0
  41. package/examples/board/gandalf-cards/cards/card-source-kinds.json +64 -0
  42. package/examples/board/source-def-flows/copilot.flow.json +33 -0
  43. package/examples/board/source-def-flows/mock.flow.json +35 -0
  44. package/examples/board/source-def-flows/url-list.flow.json +33 -0
  45. package/examples/board/source-def-flows/url.flow.json +33 -0
  46. package/examples/board/source-def-flows/workiq.flow.json +34 -0
  47. package/examples/board/source-def-handlers/copilot-source-handler.js +141 -0
  48. package/examples/board/source-def-handlers/http-source-handler.js +145 -0
  49. package/examples/board/source_def_flows.json +249 -0
  50. package/examples/board/test/demo-http-test.js +317 -0
  51. package/examples/{example-board → board-local}/demo-shell-localstorage.html +4 -4
  52. package/examples/{browser/boards/portfolio-tracker → portfolio-tracker/handlers}/portfolio-tracker-fetch-prices.js +1 -1
  53. package/examples/{browser/boards/portfolio-tracker/portfolio-tracker-public.js → portfolio-tracker/portfolio-tracker.js} +11 -14
  54. package/examples/{browser/boards/portfolio-tracker → portfolio-tracker/test}/portfolio-t4.js +32 -50
  55. package/lib/artifacts-store-lib-public-BABrgFkV.d.ts +119 -0
  56. package/lib/artifacts-store-lib-public-DGa8BpJT.d.cts +119 -0
  57. package/lib/artifacts-store-public.cjs +2 -0
  58. package/lib/artifacts-store-public.d.cts +5 -0
  59. package/lib/artifacts-store-public.d.ts +5 -0
  60. package/lib/artifacts-store-public.js +2 -0
  61. package/lib/board-live-cards-node.cjs +14 -0
  62. package/lib/board-live-cards-node.d.cts +178 -0
  63. package/lib/board-live-cards-node.d.ts +178 -0
  64. package/lib/board-live-cards-node.js +14 -0
  65. package/lib/board-live-cards-public-BnmRAbQV.d.cts +383 -0
  66. package/{dist/board-live-cards-public-CK_J8uv0.d.ts → lib/board-live-cards-public-CsmYrvpd.d.ts} +142 -76
  67. package/lib/board-live-cards-public.cjs +3 -0
  68. package/lib/board-live-cards-public.d.cts +4 -0
  69. package/lib/board-live-cards-public.d.ts +4 -0
  70. package/lib/board-live-cards-public.js +3 -0
  71. package/lib/board-live-cards-server-runtime.cjs +9 -0
  72. package/lib/board-live-cards-server-runtime.d.cts +6 -0
  73. package/lib/board-live-cards-server-runtime.d.ts +6 -0
  74. package/lib/board-live-cards-server-runtime.js +9 -0
  75. package/lib/board-livegraph-runtime/index.cjs +3 -0
  76. package/{dist → lib}/board-livegraph-runtime/index.d.cts +1 -2
  77. package/{dist → lib}/board-livegraph-runtime/index.d.ts +1 -2
  78. package/lib/board-livegraph-runtime/index.js +3 -0
  79. package/{dist/storage-refs.cjs → lib/board-worker-adapter.cjs} +2 -2
  80. package/{dist/storage-refs.d.cts → lib/board-worker-adapter.d.cts} +4 -3
  81. package/{dist/storage-refs.d.ts → lib/board-worker-adapter.d.ts} +4 -3
  82. package/{dist/storage-refs.js → lib/board-worker-adapter.js} +2 -2
  83. package/{dist → lib}/card-compute/index.cjs +1 -1
  84. package/{dist → lib}/card-compute/index.js +1 -1
  85. package/lib/card-store-public.cjs +2 -0
  86. package/lib/card-store-public.d.cts +61 -0
  87. package/lib/card-store-public.d.ts +61 -0
  88. package/lib/card-store-public.js +2 -0
  89. package/lib/card-validation.cjs +10 -0
  90. package/lib/card-validation.d.cts +35 -0
  91. package/lib/card-validation.d.ts +35 -0
  92. package/lib/card-validation.js +10 -0
  93. package/{dist/constants-oCEbNpul.d.ts → lib/constants-BPVLb3Es.d.ts} +1 -1
  94. package/{dist/constants-BzZUyYlp.d.cts → lib/constants-DXxsRN9y.d.cts} +1 -1
  95. package/{dist → lib}/continuous-event-graph/index.cjs +2 -2
  96. package/{dist → lib}/continuous-event-graph/index.d.cts +3 -5
  97. package/{dist → lib}/continuous-event-graph/index.d.ts +3 -5
  98. package/{dist → lib}/continuous-event-graph/index.js +2 -2
  99. package/{dist → lib}/event-graph/index.d.cts +2 -2
  100. package/{dist → lib}/event-graph/index.d.ts +2 -2
  101. package/lib/execution-refs.cjs +3 -0
  102. package/{dist → lib}/execution-refs.d.cts +33 -12
  103. package/{dist → lib}/execution-refs.d.ts +33 -12
  104. package/lib/execution-refs.js +3 -0
  105. package/lib/index.cjs +25 -0
  106. package/{dist → lib}/index.d.cts +7 -8
  107. package/{dist → lib}/index.d.ts +7 -8
  108. package/lib/index.js +25 -0
  109. package/{dist/live-cards-bridge-BXbVTsna.d.cts → lib/live-cards-bridge-DC_ZU0eS.d.ts} +134 -3
  110. package/{dist/live-cards-bridge-Ds28XR15.d.ts → lib/live-cards-bridge-b25aAVvE.d.cts} +134 -3
  111. package/lib/loader-CuuLjxVA.d.cts +42 -0
  112. package/lib/loader-Zborm2pq.d.ts +42 -0
  113. package/lib/server-runtime/index.cjs +9 -0
  114. package/{dist → lib}/server-runtime/index.d.cts +4 -4
  115. package/{dist → lib}/server-runtime/index.d.ts +4 -4
  116. package/lib/server-runtime/index.js +9 -0
  117. package/lib/step-machine/index.d.cts +64 -0
  118. package/lib/step-machine/index.d.ts +64 -0
  119. package/lib/step-machine-public/index.cjs +5 -0
  120. package/{dist → lib}/step-machine-public/index.d.cts +14 -1
  121. package/{dist → lib}/step-machine-public/index.d.ts +14 -1
  122. package/lib/step-machine-public/index.js +5 -0
  123. package/lib/storage-interface-BhAON-gW.d.cts +84 -0
  124. package/lib/storage-interface-BhAON-gW.d.ts +84 -0
  125. package/lib/stores/index.cjs +3 -0
  126. package/lib/stores/index.d.cts +4 -0
  127. package/lib/stores/index.d.ts +4 -0
  128. package/lib/stores/index.js +3 -0
  129. package/lib/stores/kv.cjs +3 -0
  130. package/lib/stores/kv.d.cts +32 -0
  131. package/lib/stores/kv.d.ts +32 -0
  132. package/lib/stores/kv.js +3 -0
  133. package/{dist → lib}/stores/memory.d.cts +1 -1
  134. package/{dist → lib}/stores/memory.d.ts +1 -1
  135. package/{dist/types-HGDTWIun.d.ts → lib/types-CBxkYuLY.d.ts} +2 -1
  136. package/{dist/types-ycun84cq.d.cts → lib/types-DQ1bKuB1.d.cts} +11 -0
  137. package/{dist/types-ycun84cq.d.ts → lib/types-DQ1bKuB1.d.ts} +11 -0
  138. package/{dist/types-CU3DjTKL.d.cts → lib/types-DkFvgxwq.d.cts} +2 -1
  139. package/package.json +79 -119
  140. package/board-live-cards-cli.js +0 -37
  141. package/browser/board-livecards-client.js.map +0 -1
  142. package/browser/board-livecards-localstorage.js.map +0 -1
  143. package/browser/board-livegraph-engine.js +0 -3
  144. package/browser/board-livegraph-engine.js.map +0 -1
  145. package/browser/card-compute.js +0 -266
  146. package/browser/compute-jsonata.js.map +0 -1
  147. package/card-store.js +0 -37
  148. package/dist/batch/index.cjs.map +0 -1
  149. package/dist/batch/index.js.map +0 -1
  150. package/dist/board-live-cards-lib-Bg6EvCo5.d.cts +0 -136
  151. package/dist/board-live-cards-lib-jM2uYG1v.d.ts +0 -136
  152. package/dist/board-livegraph-runtime/index.cjs +0 -3
  153. package/dist/board-livegraph-runtime/index.cjs.map +0 -1
  154. package/dist/board-livegraph-runtime/index.js +0 -3
  155. package/dist/board-livegraph-runtime/index.js.map +0 -1
  156. package/dist/card-compute/index.cjs.map +0 -1
  157. package/dist/card-compute/index.js.map +0 -1
  158. package/dist/cli/browser-api/board-live-cards-browser-adapter.cjs +0 -3
  159. package/dist/cli/browser-api/board-live-cards-browser-adapter.cjs.map +0 -1
  160. package/dist/cli/browser-api/board-live-cards-browser-adapter.d.cts +0 -37
  161. package/dist/cli/browser-api/board-live-cards-browser-adapter.js.map +0 -1
  162. package/dist/cli/browser-api/card-store-browser-api.cjs +0 -2
  163. package/dist/cli/browser-api/card-store-browser-api.cjs.map +0 -1
  164. package/dist/cli/browser-api/card-store-browser-api.d.cts +0 -26
  165. package/dist/cli/browser-api/card-store-browser-api.js.map +0 -1
  166. package/dist/cli/node/artifacts-store-cli.cjs +0 -11
  167. package/dist/cli/node/artifacts-store-cli.cjs.map +0 -1
  168. package/dist/cli/node/artifacts-store-cli.d.cts +0 -8
  169. package/dist/cli/node/artifacts-store-cli.js.map +0 -1
  170. package/dist/cli/node/board-live-cards-cli.cjs +0 -15
  171. package/dist/cli/node/board-live-cards-cli.cjs.map +0 -1
  172. package/dist/cli/node/board-live-cards-cli.d.cts +0 -20
  173. package/dist/cli/node/board-live-cards-cli.js +0 -15
  174. package/dist/cli/node/board-live-cards-cli.js.map +0 -1
  175. package/dist/cli/node/card-store-cli.cjs +0 -8
  176. package/dist/cli/node/card-store-cli.cjs.map +0 -1
  177. package/dist/cli/node/card-store-cli.d.cts +0 -15
  178. package/dist/cli/node/card-store-cli.js.map +0 -1
  179. package/dist/cli/node/execution-adapter.cjs +0 -3
  180. package/dist/cli/node/execution-adapter.cjs.map +0 -1
  181. package/dist/cli/node/execution-adapter.d.cts +0 -174
  182. package/dist/cli/node/execution-adapter.js +0 -3
  183. package/dist/cli/node/execution-adapter.js.map +0 -1
  184. package/dist/cli/node/fs-board-adapter.cjs +0 -14
  185. package/dist/cli/node/fs-board-adapter.cjs.map +0 -1
  186. package/dist/cli/node/fs-board-adapter.d.cts +0 -204
  187. package/dist/cli/node/fs-board-adapter.js +0 -14
  188. package/dist/cli/node/fs-board-adapter.js.map +0 -1
  189. package/dist/cli/node/source-cli-task-executor.cjs +0 -11
  190. package/dist/cli/node/source-cli-task-executor.cjs.map +0 -1
  191. package/dist/cli/node/source-cli-task-executor.js.map +0 -1
  192. package/dist/config/index.cjs.map +0 -1
  193. package/dist/config/index.js.map +0 -1
  194. package/dist/continuous-event-graph/index.cjs.map +0 -1
  195. package/dist/continuous-event-graph/index.js.map +0 -1
  196. package/dist/event-graph/index.cjs.map +0 -1
  197. package/dist/event-graph/index.js.map +0 -1
  198. package/dist/execution-refs.cjs +0 -3
  199. package/dist/execution-refs.cjs.map +0 -1
  200. package/dist/execution-refs.js +0 -3
  201. package/dist/execution-refs.js.map +0 -1
  202. package/dist/index.cjs +0 -30
  203. package/dist/index.cjs.map +0 -1
  204. package/dist/index.js +0 -30
  205. package/dist/index.js.map +0 -1
  206. package/dist/inference/index.cjs +0 -7
  207. package/dist/inference/index.cjs.map +0 -1
  208. package/dist/inference/index.d.cts +0 -229
  209. package/dist/inference/index.d.ts +0 -229
  210. package/dist/inference/index.js +0 -7
  211. package/dist/inference/index.js.map +0 -1
  212. package/dist/server-runtime/index.cjs +0 -9
  213. package/dist/server-runtime/index.cjs.map +0 -1
  214. package/dist/server-runtime/index.js +0 -9
  215. package/dist/server-runtime/index.js.map +0 -1
  216. package/dist/step-machine/index.cjs.map +0 -1
  217. package/dist/step-machine/index.d.cts +0 -102
  218. package/dist/step-machine/index.d.ts +0 -102
  219. package/dist/step-machine/index.js.map +0 -1
  220. package/dist/step-machine-public/index.cjs +0 -3
  221. package/dist/step-machine-public/index.cjs.map +0 -1
  222. package/dist/step-machine-public/index.js +0 -3
  223. package/dist/step-machine-public/index.js.map +0 -1
  224. package/dist/storage-refs.cjs.map +0 -1
  225. package/dist/storage-refs.js.map +0 -1
  226. package/dist/stores/file.cjs +0 -2
  227. package/dist/stores/file.cjs.map +0 -1
  228. package/dist/stores/file.d.cts +0 -36
  229. package/dist/stores/file.d.ts +0 -36
  230. package/dist/stores/file.js +0 -2
  231. package/dist/stores/file.js.map +0 -1
  232. package/dist/stores/index.cjs +0 -2
  233. package/dist/stores/index.cjs.map +0 -1
  234. package/dist/stores/index.d.cts +0 -4
  235. package/dist/stores/index.d.ts +0 -4
  236. package/dist/stores/index.js +0 -2
  237. package/dist/stores/index.js.map +0 -1
  238. package/dist/stores/localStorage.cjs +0 -2
  239. package/dist/stores/localStorage.cjs.map +0 -1
  240. package/dist/stores/localStorage.d.cts +0 -34
  241. package/dist/stores/localStorage.d.ts +0 -34
  242. package/dist/stores/localStorage.js +0 -2
  243. package/dist/stores/localStorage.js.map +0 -1
  244. package/dist/stores/memory.cjs.map +0 -1
  245. package/dist/stores/memory.js.map +0 -1
  246. package/dist/types-CHSdoAAA.d.cts +0 -135
  247. package/dist/types-CoW0gQl3.d.ts +0 -135
  248. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-fetch-prices.py +0 -201
  249. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-http-test.js +0 -370
  250. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-http-test.py +0 -398
  251. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-inference-adapter.js +0 -196
  252. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-server.js +0 -300
  253. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-server.py +0 -617
  254. package/examples/browser/boards/portfolio-tracker/portfolio-tracker.py +0 -366
  255. package/examples/browser/livecards-browser/index.html +0 -41
  256. package/examples/browser/step-machine-browser/index.html +0 -367
  257. package/examples/cli/step-machine-cli/portfolio-tracker/--base-ref/.runtime-out +0 -1
  258. package/examples/cli/step-machine-cli/portfolio-tracker/--base-ref/board-graph.json +0 -32
  259. package/examples/cli/step-machine-cli/portfolio-tracker/cards/holdings-table.json +0 -22
  260. package/examples/cli/step-machine-cli/portfolio-tracker/cards/portfolio-form.json +0 -43
  261. package/examples/cli/step-machine-cli/portfolio-tracker/cards/portfolio-value.json +0 -15
  262. package/examples/cli/step-machine-cli/portfolio-tracker/cards/price-fetch.json +0 -15
  263. package/examples/cli/step-machine-cli/portfolio-tracker/fetch-prices.js +0 -48
  264. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/_board-cli.js +0 -125
  265. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/add-cards-cli.js +0 -32
  266. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/init-board-cli.js +0 -26
  267. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/poll-status-cli.js +0 -49
  268. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/reset-board-dir-cli.js +0 -25
  269. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/retrigger-cli.js +0 -23
  270. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/status-cli.js +0 -21
  271. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/update-holdings-cli.js +0 -38
  272. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/wait-completed-cli.js +0 -48
  273. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/write-prices-cli.js +0 -31
  274. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/_board_pycli.py +0 -107
  275. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/add-cards.py +0 -51
  276. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/init-board.py +0 -45
  277. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/poll-status.py +0 -71
  278. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/reset-board-dir.py +0 -36
  279. package/examples/cli/step-machine-cli/portfolio-tracker/inline-python-demo.flow.yaml +0 -26
  280. package/examples/cli/step-machine-cli/portfolio-tracker/inline-python-handlers.py +0 -39
  281. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker-pycli.flow.yaml +0 -80
  282. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker.flow.yaml +0 -76
  283. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker.input.json +0 -44
  284. package/examples/cli/step-machine-cli/portfolio-tracker/run-inline-python-demo-pycli.py +0 -43
  285. package/examples/cli/step-machine-cli/portfolio-tracker/run-portfolio-tracker-pycli.py +0 -77
  286. package/examples/cli/step-machine-cli/portfolio-tracker/run-portfolio-tracker.bat +0 -28
  287. package/examples/cli/step-machine-demo/jsonata-init-board-cli.js +0 -31
  288. package/examples/cli/step-machine-demo/jsonata-init-board.flow.yaml +0 -54
  289. package/examples/cli/step-machine-demo/one-step-cli-only.flow.yaml +0 -21
  290. package/examples/cli/step-machine-demo/step-cli-echo-y.js +0 -15
  291. package/examples/cli/step-machine-demo/step2-double-cli.js +0 -33
  292. package/examples/cli/step-machine-demo/two-step-math.flow.yaml +0 -93
  293. package/examples/cli/step-machine-demo/two-step-mixed.flow.yaml +0 -43
  294. package/examples/example-board/agent-instructions-cardlayout.md +0 -56
  295. package/examples/example-board/agent-instructions.md +0 -834
  296. package/examples/example-board/demo-shell.html +0 -63
  297. package/examples/index.html +0 -785
  298. package/examples/npm-libs/batch/batch-step-machine.ts +0 -121
  299. package/examples/npm-libs/continuous-event-graph/live-cards-board.ts +0 -215
  300. package/examples/npm-libs/continuous-event-graph/live-portfolio-dashboard.ts +0 -555
  301. package/examples/npm-libs/continuous-event-graph/portfolio-tracker.ts +0 -287
  302. package/examples/npm-libs/continuous-event-graph/reactive-monitoring.ts +0 -265
  303. package/examples/npm-libs/continuous-event-graph/reactive-pipeline.ts +0 -168
  304. package/examples/npm-libs/continuous-event-graph/soc-incident-board.ts +0 -287
  305. package/examples/npm-libs/continuous-event-graph/stock-dashboard.ts +0 -229
  306. package/examples/npm-libs/event-graph/ci-cd-pipeline.ts +0 -243
  307. package/examples/npm-libs/event-graph/executor-diamond.ts +0 -165
  308. package/examples/npm-libs/event-graph/executor-pipeline.ts +0 -161
  309. package/examples/npm-libs/event-graph/research-pipeline.ts +0 -137
  310. package/examples/npm-libs/flows/ai-conversation.yaml +0 -116
  311. package/examples/npm-libs/flows/order-processing.yaml +0 -143
  312. package/examples/npm-libs/flows/simple-greeting.yaml +0 -54
  313. package/examples/npm-libs/graph-of-graphs/multi-stage-etl.ts +0 -307
  314. package/examples/npm-libs/graph-of-graphs/url-processing-pipeline.ts +0 -254
  315. package/examples/npm-libs/inference/azure-deployment.ts +0 -149
  316. package/examples/npm-libs/inference/copilot-cli.ts +0 -138
  317. package/examples/npm-libs/inference/data-pipeline.ts +0 -145
  318. package/examples/npm-libs/inference/pluggable-adapters.ts +0 -254
  319. package/examples/npm-libs/node/ai-conversation.ts +0 -195
  320. package/examples/npm-libs/node/simple-greeting.ts +0 -101
  321. package/examples/step-machine-cli/portfolio-tracker/cards/holdings-table.json +0 -22
  322. package/examples/step-machine-cli/portfolio-tracker/cards/portfolio-form.json +0 -43
  323. package/examples/step-machine-cli/portfolio-tracker/cards/portfolio-value.json +0 -15
  324. package/examples/step-machine-cli/portfolio-tracker/cards/price-fetch.json +0 -15
  325. package/examples/step-machine-cli/portfolio-tracker/fetch-prices.js +0 -48
  326. package/examples/step-machine-cli/portfolio-tracker/handlers/_board-cli.js +0 -57
  327. package/examples/step-machine-cli/portfolio-tracker/handlers/add-cards-cli.js +0 -27
  328. package/examples/step-machine-cli/portfolio-tracker/handlers/init-board-cli.js +0 -25
  329. package/examples/step-machine-cli/portfolio-tracker/handlers/reset-board-dir-cli.js +0 -29
  330. package/examples/step-machine-cli/portfolio-tracker/handlers/retrigger-cli.js +0 -27
  331. package/examples/step-machine-cli/portfolio-tracker/handlers/status-cli.js +0 -25
  332. package/examples/step-machine-cli/portfolio-tracker/handlers/update-holdings-cli.js +0 -37
  333. package/examples/step-machine-cli/portfolio-tracker/handlers/wait-completed-cli.js +0 -53
  334. package/examples/step-machine-cli/portfolio-tracker/handlers/write-prices-cli.js +0 -35
  335. package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker-task-executor.cjs +0 -96
  336. package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker.flow.yaml +0 -227
  337. package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker.input.json +0 -38
  338. package/examples/step-machine-cli/portfolio-tracker/run-portfolio-tracker.bat +0 -28
  339. package/step-machine-cli.js +0 -407
  340. /package/{dist/cli → cli}/browser-api/board-live-cards-browser-adapter.js +0 -0
  341. /package/{dist/board-livegraph-runtime → cli/browser-api}/jsonata-sync.cjs +0 -0
  342. /package/{dist/cli → cli}/node/artifacts-store-cli.d.ts +0 -0
  343. /package/{dist/cli/node/source-cli-task-executor.d.cts → cli/node/batch-runner-cli.d.ts} +0 -0
  344. /package/{dist/cli → cli}/node/board-live-cards-cli.d.ts +0 -0
  345. /package/{dist/cli → cli}/node/card-store-cli.d.ts +0 -0
  346. /package/{dist/card-compute → cli/node}/jsonata-sync.cjs +0 -0
  347. /package/{dist/cli → cli}/node/source-cli-task-executor.d.ts +0 -0
  348. /package/{dist/cli → cli}/node/source-cli-task-executor.js +0 -0
  349. /package/examples/{example-board → board}/cards/card-concentration.json +0 -0
  350. /package/examples/{example-board → board}/cards/card-my-identity.json +0 -0
  351. /package/examples/{example-board → board}/cards/card-portfolio-action.json +0 -0
  352. /package/examples/{example-board → board}/cards/card-portfolio-intelligence.json +0 -0
  353. /package/examples/{example-board → board}/cards/card-portfolio-risks.json +0 -0
  354. /package/examples/{example-board → board}/cards/card-rebalance-impact.json +0 -0
  355. /package/examples/{example-board → board}/cards/card-rebalance-sim.json +0 -0
  356. /package/examples/{example-board → board}/cards/cardT-market-prices.json +0 -0
  357. /package/examples/{example-board → board}/cards/cardT-portfolio-value.json +0 -0
  358. /package/examples/{example-board → board}/cards/cardT-portfolio.json +0 -0
  359. /package/examples/{example-board → board}/demo-chat-handler.js +0 -0
  360. /package/examples/{example-board → board}/scripts/copilot_wrapper.bat +0 -0
  361. /package/examples/{example-board → board}/scripts/copilot_wrapper_helper.ps1 +0 -0
  362. /package/examples/{example-board → board}/scripts/workiq_wrapper.mjs +0 -0
  363. /package/examples/{browser/boards/portfolio-tracker → board/test}/portfolio-tracker-sse-worker.js +0 -0
  364. /package/{dist → lib}/batch/index.cjs +0 -0
  365. /package/{dist → lib}/batch/index.d.cts +0 -0
  366. /package/{dist → lib}/batch/index.d.ts +0 -0
  367. /package/{dist → lib}/batch/index.js +0 -0
  368. /package/{dist/cli/browser-api → lib/board-livegraph-runtime}/jsonata-sync.cjs +0 -0
  369. /package/{dist → lib}/card-compute/index.d.cts +0 -0
  370. /package/{dist → lib}/card-compute/index.d.ts +0 -0
  371. /package/{dist/cli/node → lib/card-compute}/jsonata-sync.cjs +0 -0
  372. /package/{dist → lib}/config/index.cjs +0 -0
  373. /package/{dist → lib}/config/index.d.cts +0 -0
  374. /package/{dist → lib}/config/index.d.ts +0 -0
  375. /package/{dist → lib}/config/index.js +0 -0
  376. /package/{dist → lib}/continuous-event-graph/jsonata-sync.cjs +0 -0
  377. /package/{dist → lib}/event-graph/index.cjs +0 -0
  378. /package/{dist → lib}/event-graph/index.js +0 -0
  379. /package/{dist → lib}/jsonata-sync.cjs +0 -0
  380. /package/{dist → lib}/server-runtime/jsonata-sync.cjs +0 -0
  381. /package/{dist → lib}/step-machine/index.cjs +0 -0
  382. /package/{dist → lib}/step-machine/index.js +0 -0
  383. /package/{dist → lib}/step-machine-public/jsonata-sync.cjs +0 -0
  384. /package/{dist → lib}/stores/memory.cjs +0 -0
  385. /package/{dist → lib}/stores/memory.js +0 -0
  386. /package/{dist → lib}/types-BBhqYGhE.d.cts +0 -0
  387. /package/{dist → lib}/types-BBhqYGhE.d.ts +0 -0
  388. /package/{dist → lib}/validate-BAVzUJWa.d.ts +0 -0
  389. /package/{dist → lib}/validate-Dbu7ygys.d.cts +0 -0
@@ -1,9 +1,7 @@
1
- import { L as LiveGraph, N as NodeInfo, b as LiveGraphSnapshot, D as DownstreamResult, U as UnreachableNodesResult, c as UnreachableTokensResult, e as UpstreamResult, a as LiveGraphHealth } from '../types-CoW0gQl3.js';
2
- export { B as BlockedTask, P as PendingTask, S as ScheduleResult, d as UnresolvedDependency } from '../types-CoW0gQl3.js';
1
+ import { d as LiveGraph, N as NodeInfo, f as LiveGraphSnapshot, D as DownstreamResult, U as UnreachableNodesResult, j as UnreachableTokensResult, l as UpstreamResult, e as LiveGraphHealth, R as ReactiveGraph, h as TaskHandlerInput, T as TaskHandlerFn } from '../live-cards-bridge-DC_ZU0eS.js';
2
+ export { B as BlockedTask, L as LiveBoard, a as LiveCard, b as LiveCardsToReactiveOptions, c as LiveCardsToReactiveResult, P as PendingTask, g as ReactiveGraphOptions, S as ScheduleResult, i as TaskHandlerReturn, k as UnresolvedDependency, o as computeDataHash, m as createReactiveGraph, n as liveCardsToReactiveGraph, s as schedule } from '../live-cards-bridge-DC_ZU0eS.js';
3
3
  import { T as TaskConfig, f as GraphEvent, G as GraphConfig } from '../types-BBhqYGhE.js';
4
4
  export { c as ExecutionState, e as GraphEngineStore, g as GraphSettings } from '../types-BBhqYGhE.js';
5
- import { R as ReactiveGraph, e as TaskHandlerInput, T as TaskHandlerFn } from '../live-cards-bridge-Ds28XR15.js';
6
- export { L as LiveBoard, a as LiveCard, b as LiveCardsToReactiveOptions, c as LiveCardsToReactiveResult, d as ReactiveGraphOptions, f as TaskHandlerReturn, h as computeDataHash, g as createReactiveGraph, l as liveCardsToReactiveGraph, s as schedule } from '../live-cards-bridge-Ds28XR15.js';
7
5
  import { a as GraphValidationResult } from '../validate-BAVzUJWa.js';
8
6
 
9
7
  /**
@@ -438,7 +436,7 @@ interface ProcessHandlerOptions extends CommandSpec {
438
436
  * command and each arg string.
439
437
  *
440
438
  * Prefer this over createShellHandler for all programmatic invocations
441
- * (task-executors, source fetchers, inference adapters).
439
+ * (task-executors, source fetchers).
442
440
  *
443
441
  * @example
444
442
  * ```ts
@@ -1,3 +1,3 @@
1
- import {exec,execFile}from'child_process';import {createRequire}from'module';import'ajv-formats';var w={NOT_STARTED:"not-started",RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function x(e){return e?Array.isArray(e.provides)?e.provides:[]:[]}function _(e){return e?Array.isArray(e.requires)?e.requires:[]:[]}function A(e){return e.tasks??{}}function I(e){return e?e.status===w.FAILED||e.status===w.INACTIVATED:false}function oe(e,t){return e.refreshStrategy??t?.refreshStrategy??"data-changed"}function ae(e){return e.maxExecutions}function ie(e,t){let r=new Set;for(let[n,s]of Object.entries(t))if(s.status===w.COMPLETED){let o=e.tasks[n];o&&x(o).forEach(u=>r.add(u));}return Array.from(r)}function ce(e,t){let r={};return e.forEach(n=>{let s=t[n];if(!s)return;x(s).forEach(a=>{r[a]||(r[a]=[]),r[a].push(n);});}),r}function ue(e,t,r){let n=e.tasks[t]??D(),s={};if(r){let a=r.tasks[t],u=_(a);for(let l of u)for(let[i,d]of Object.entries(r.tasks))if(x(d).includes(l)){let c=e.tasks[i];c?.lastDataHash&&(s[l]=c.lastDataHash);break}}let o={...n,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:s};return {...e,tasks:{...e.tasks,[t]:o},lastUpdated:new Date().toISOString()}}function de(e,t,r,n,s,o){let a=e.tasks[r]??D(),u=t.tasks[r];if(!u)throw new Error(`Task "${r}" not found in graph`);let l;n&&u.on&&u.on[n]?l=u.on[n]:l=x(u);let i=a.startConsumedHashes?{...a.startConsumedHashes}:{...a.lastConsumedHashes};if(!a.startConsumedHashes){let g=u.requires??[];for(let f of g)for(let[v,h]of Object.entries(t.tasks))if(x(h).includes(f)){let R=e.tasks[v];R?.lastDataHash&&(i[f]=R.lastDataHash);break}}let d={...a,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:a.executionCount+1,lastEpoch:a.executionCount+1,lastDataHash:s,data:o,lastConsumedHashes:i,error:void 0},c=[...new Set([...e.availableOutputs,...l])];return {...e,tasks:{...e.tasks,[r]:d},availableOutputs:c,lastUpdated:new Date().toISOString()}}function pe(e,t,r,n){let s=e.tasks[r]??D(),o=t.tasks[r];if(o?.retry){let l=s.retryCount+1;if(l<=o.retry.max_attempts){let i={...s,status:"not-started",retryCount:l,lastUpdated:new Date().toISOString(),error:n};return {...e,tasks:{...e.tasks,[r]:i},lastUpdated:new Date().toISOString()}}}let a={...s,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:s.executionCount+1},u=e.availableOutputs;if(o?.on_failure&&o.on_failure.length>0&&(u=[...new Set([...e.availableOutputs,...o.on_failure])]),o?.circuit_breaker&&a.executionCount>=o.circuit_breaker.max_executions){let l=o.circuit_breaker.on_break;u=[...new Set([...u,...l])];}return {...e,tasks:{...e.tasks,[r]:a},availableOutputs:u,lastUpdated:new Date().toISOString()}}function fe(e,t,r,n){let s=e.tasks[t]??D(),o={...s,progress:typeof n=="number"?n:s.progress,messages:[...s.messages??[],...r?[{message:r,timestamp:new Date().toISOString(),status:s.status}]:[]],lastUpdated:new Date().toISOString()};return {...e,tasks:{...e.tasks,[t]:o},lastUpdated:new Date().toISOString()}}function le(e,t){let r=e.tasks[t];if(!r)return e;let n={...r,status:"not-started",startedAt:void 0,completedAt:void 0,failedAt:void 0,error:void 0,data:void 0,progress:null,lastUpdated:new Date().toISOString()};return {...e,tasks:{...e.tasks,[t]:n},lastUpdated:new Date().toISOString()}}function D(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function J(e,t){let r=t??`live-${Date.now()}`,n={};for(let o of Object.keys(e.tasks))n[o]=K();let s={status:"running",tasks:n,availableOutputs:[],stuckDetection:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]},lastUpdated:new Date().toISOString(),executionId:r,executionConfig:{executionMode:e.settings.execution_mode??"eligibility-mode",conflictStrategy:e.settings.conflict_strategy??"alphabetical",completionStrategy:e.settings.completion}};return {config:e,state:s}}function Y(e,t){let{config:r,state:n}=e;if("executionId"in t&&t.executionId&&t.executionId!==n.executionId)return e;switch(t.type){case "task-started":return {config:r,state:ue(n,t.taskName,r)};case "task-completed":return {config:r,state:de(n,r,t.taskName,t.result,t.dataHash,t.data)};case "task-failed":return {config:r,state:pe(n,r,t.taskName,t.error)};case "task-progress":return {config:r,state:fe(n,t.taskName,t.message,t.progress)};case "task-restart":return {config:r,state:le(n,t.taskName)};case "inject-tokens":return {config:r,state:{...n,availableOutputs:[...new Set([...n.availableOutputs,...t.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:r,state:Ee(n,t.action)};case "task-upsert":return P(e,t.taskName,t.taskConfig);case "task-removal":return M(e,t.taskName);case "node-requires-add":return q(e,t.nodeName,t.tokens);case "node-requires-remove":return F(e,t.nodeName,t.tokens);case "node-provides-add":return $(e,t.nodeName,t.tokens);case "node-provides-remove":return U(e,t.nodeName,t.tokens);default:return e}}function L(e,t){return t.reduce((r,n)=>Y(r,n),e)}function P(e,t,r){let n=!!e.config.tasks[t];return {config:{...e.config,tasks:{...e.config.tasks,[t]:r}},state:{...e.state,tasks:{...e.state.tasks,[t]:n?e.state.tasks[t]:K()},lastUpdated:new Date().toISOString()}}}function M(e,t){if(!e.config.tasks[t])return e;let{[t]:r,...n}=e.config.tasks,{[t]:s,...o}=e.state.tasks;return {config:{...e.config,tasks:n},state:{...e.state,tasks:o,lastUpdated:new Date().toISOString()}}}function q(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=_(n),o=r.filter(a=>!s.includes(a));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:[...s,...o]}}},state:e.state}}function F(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=_(n),o=s.filter(a=>!r.includes(a));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:o}}},state:e.state}}function $(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=x(n),o=r.filter(a=>!s.includes(a));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:[...s,...o]}}},state:e.state}}function U(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=x(n),o=s.filter(a=>!r.includes(a));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:o}}},state:e.state}}function X(e,t){return Y(e,{type:"inject-tokens",tokens:t,timestamp:new Date().toISOString()})}function z(e,t){let r=new Set(t),n=e.state.availableOutputs.filter(s=>!r.has(s));return n.length===e.state.availableOutputs.length?e:{config:e.config,state:{...e.state,availableOutputs:n,lastUpdated:new Date().toISOString()}}}function Q(e,t){return !e.config.tasks[t]||!e.state.tasks[t]?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:K()},lastUpdated:new Date().toISOString()}}}function Z(e,t){let r=e.state.tasks[t];return !r||r.status==="inactivated"?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:{...r,status:"inactivated",lastUpdated:new Date().toISOString()}},lastUpdated:new Date().toISOString()}}}function ee(e,t){let r=e.state.tasks[t];return !r||r.status!=="inactivated"?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:{...r,status:"not-started",lastUpdated:new Date().toISOString()}},lastUpdated:new Date().toISOString()}}}function xe(e,t){let r=e.config.tasks[t];if(!r)return;let n=e.state.tasks[t]??K();return {name:t,config:r,state:n}}function te(e){return {version:1,config:e.config,state:e.state,snapshotAt:new Date().toISOString()}}function Ce(e){if(!e||typeof e!="object")throw new Error("Invalid snapshot: expected an object");let t=e;if(!t.config||typeof t.config!="object")throw new Error('Invalid snapshot: missing or invalid "config"');if(!t.state||typeof t.state!="object")throw new Error('Invalid snapshot: missing or invalid "state"');let r=t.config,n=t.state;if(!r.settings||typeof r.settings!="object")throw new Error("Invalid snapshot: config.settings missing");if(!r.tasks||typeof r.tasks!="object")throw new Error("Invalid snapshot: config.tasks missing");if(!n.tasks||typeof n.tasks!="object")throw new Error("Invalid snapshot: state.tasks missing");if(!Array.isArray(n.availableOutputs))throw new Error("Invalid snapshot: state.availableOutputs must be an array");return {config:r,state:n}}function K(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Ee(e,t){let r=new Date().toISOString();switch(t){case "stop":return {...e,status:"stopped",lastUpdated:r};case "pause":return {...e,status:"paused",lastUpdated:r};case "resume":return {...e,status:"running",lastUpdated:r};default:return e}}function V(e){let{config:t,state:r}=e,n=A(t);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let o=_e(n),a=ie(t,r.tasks),u=new Set([...a,...r.availableOutputs]),l=[],i=[],d=[],c=[];for(let[f,v]of Object.entries(n)){let h=r.tasks[f],R=oe(v,t.settings),C=R!=="once";if(h?.status===w.RUNNING||I(h))continue;let p=ae(v);if(p!==void 0&&h&&h.executionCount>=p||v.circuit_breaker&&h&&h.executionCount>=v.circuit_breaker.max_executions||!C&&h?.status===w.COMPLETED)continue;if(C&&h?.status===w.COMPLETED){let y=_(v),S=false;switch(R){case "data-changed":{y.length>0&&y.some(E=>{for(let[G,j]of Object.entries(n))if(x(j).includes(E)){let N=r.tasks[G];if(!N)continue;let we=h.lastConsumedHashes?.[E];return N.lastDataHash==null?N.executionCount>h.lastEpoch:N.lastDataHash!==we}return false})||(S=true);break}case "epoch-changed":{y.length>0&&y.some(E=>{for(let[G,j]of Object.entries(n))if(x(j).includes(E)){let N=r.tasks[G];if(N&&N.executionCount>h.lastEpoch)return true}return false})||(S=true);break}case "time-based":{let O=v.refreshInterval??0;if(O<=0){S=true;break}let E=h.completedAt;if(!E){S=true;break}(Date.now()-Date.parse(E))/1e3<O&&(S=true);break}case "manual":S=true;break}if(S)continue}let m=_(v);if(m.length===0){l.push(f);continue}let b=[],k=[],T=[];for(let y of m){if(u.has(y))continue;let S=o[y]||[];S.length===0?b.push(y):S.every(E=>I(r.tasks[E]))?T.push({token:y,failedProducer:S[0]}):k.push(y);}b.length>0?d.push({taskName:f,missingTokens:b}):T.length>0?c.push({taskName:f,failedTokens:T.map(y=>y.token),failedProducers:[...new Set(T.map(y=>y.failedProducer))]}):k.length>0?i.push({taskName:f,waitingOn:k}):l.push(f);}let g={};if(l.length>1){let f=ce(l,n);for(let[v,h]of Object.entries(f))h.length>1&&(g[v]=h);}return {eligible:l,pending:i,unresolved:d,blocked:c,conflicts:g}}function _e(e){let t={};for(let[r,n]of Object.entries(e)){for(let s of x(n))t[s]||(t[s]=[]),t[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let o of s)t[o]||(t[o]=[]),t[o].includes(r)||t[o].push(r);if(n.on_failure)for(let s of n.on_failure)t[s]||(t[s]=[]),t[s].includes(r)||t[s].push(r);}return t}function Oe(e){let{config:t,state:r}=e,n=A(t),s=Object.keys(n),o=0,a=0,u=0,l=0,i=0,d=0;for(let p of s){let m=r.tasks[p];if(!m||m.status===w.NOT_STARTED)i++;else switch(m.status){case w.RUNNING:o++;break;case w.COMPLETED:a++;break;case w.FAILED:u++;break;case "inactivated":d++;break;default:l++;}}let c={};for(let[p,m]of Object.entries(n)){for(let b of x(m))c[b]||(c[b]=[]),c[b].push(p);if(m.on)for(let b of Object.values(m.on))for(let k of b)c[k]||(c[k]=[]),c[k].includes(p)||c[k].push(p);if(m.on_failure)for(let b of m.on_failure)c[b]||(c[b]=[]),c[b].includes(p)||c[b].push(p);}let g=new Set,f=0,v=0;for(let[p,m]of Object.entries(n)){let b=r.tasks[p];if(b?.status===w.COMPLETED||b?.status===w.RUNNING)continue;let k=false,T=false;for(let y of _(m)){let S=c[y]||[];S.length===0?(g.add(y),k=true):S.every(E=>{let G=r.tasks[E];return G?.status===w.FAILED||G?.status==="inactivated"})&&(T=true);}k&&f++,T&&!k&&v++;}let h=[];for(let[p,m]of Object.entries(c))m.length>1&&h.push(p);let R=Ae(n,c),C=Ge(s,R);return {totalNodes:s.length,running:o,completed:a,failed:u,waiting:l,notStarted:i,disabled:d,unresolvedCount:f,blockedCount:v,openDependencies:[...g],cycles:C,conflictTokens:h}}function Ae(e,t){let r={};for(let[n,s]of Object.entries(e)){r[n]=new Set;for(let o of _(s))for(let a of t[o]||[])a!==n&&r[n].add(a);}return r}function Ge(e,t){let o={},a={},u=[];for(let i of e)o[i]=0,a[i]=null;function l(i){o[i]=1;for(let d of t[i]||[])if(o[d]===1){let c=[d],g=i;for(;g!==d;)c.push(g),g=a[g];c.push(d),c.reverse(),u.push(c);}else o[d]===0&&(a[d]=i,l(d));o[i]=2;}for(let i of e)o[i]===0&&l(i);return u}function ge(e){let t={};for(let[r,n]of Object.entries(e)){for(let s of x(n))t[s]||(t[s]=[]),t[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let o of s)t[o]||(t[o]=[]),t[o].includes(r)||t[o].push(r);if(n.on_failure)for(let s of n.on_failure)t[s]||(t[s]=[]),t[s].includes(r)||t[s].push(r);}return t}function ke(e){let{config:t,state:r}=e,n=A(t),s=ge(n),o=new Set([...r.availableOutputs]);for(let[c,g]of Object.entries(r.tasks))if(g.status==="completed"){let f=n[c];f&&x(f).forEach(v=>o.add(v));}let a=new Set;for(let c of Object.values(n))for(let g of _(c))a.add(g);let u=new Set,l=new Set;for(let c of a){if(o.has(c))continue;(s[c]||[]).length===0&&u.add(c);}let i=true;for(;i;){i=false;for(let[c,g]of Object.entries(n)){if(l.has(c))continue;let f=r.tasks[c];if(f?.status==="completed")continue;let v=I(f),R=_(g).some(C=>u.has(C));(v||R)&&(l.has(c)||(l.add(c),i=true));}for(let c of a){if(u.has(c)||o.has(c))continue;let g=s[c]||[],f=g.length>0&&g.every(v=>l.has(v)||I(r.tasks[v]));(g.length===0||f)&&(u.has(c)||(u.add(c),i=true));}}let d=[];for(let c of u){let g=s[c]||[],f;g.length===0?f="no-producer":f=g.every(h=>I(r.tasks[h]))?"all-producers-failed":"transitive",d.push({token:c,reason:f,producers:g});}return {tokens:d}}function Ne(e){let{config:t,state:r}=e,n=A(t),{tokens:s}=ke(e),o=new Set(s.map(u=>u.token)),a=[];for(let[u,l]of Object.entries(n)){let i=r.tasks[u];if(i?.status==="completed")continue;let c=_(l).filter(g=>o.has(g));c.length>0?a.push({nodeName:u,missingTokens:c}):I(i)&&a.push({nodeName:u,missingTokens:[]});}return {nodes:a}}function Ie(e,t){let r=A(e.config);if(!r[t])return {nodeName:t,nodes:[],tokens:[]};let n=ge(r),s=new Set,o=new Set,a=new Map;function u(i){let d=r[i];if(d)for(let c of _(d)){let g=n[c]||[];for(let f of g)f!==t&&(o.add(c),a.has(f)||a.set(f,new Set),a.get(f).add(c),s.has(f)||(s.add(f),u(f)));}}u(t);let l=[...a.entries()].map(([i,d])=>({nodeName:i,providesTokens:[...d]}));return {nodeName:t,nodes:l,tokens:[...o]}}function je(e,t){let r=A(e.config);if(!r[t])return {nodeName:t,nodes:[],tokens:[]};let n={};for(let[i,d]of Object.entries(r))for(let c of _(d))n[c]||(n[c]=[]),n[c].push(i);let s=new Set,o=new Set,a=new Map;function u(i){let d=r[i];if(d)for(let c of x(d)){let g=n[c]||[];for(let f of g)f!==t&&(o.add(c),a.has(f)||a.set(f,new Set),a.get(f).add(c),s.has(f)||(s.add(f),u(f)));}}u(t);let l=[...a.entries()].map(([i,d])=>({nodeName:i,requiresTokens:[...d]}));return {nodeName:t,nodes:l,tokens:[...o]}}var H=class{buffer=[];append(t){this.buffer.push(t);}drain(){let t=this.buffer;return this.buffer=[],t}get size(){return this.buffer.length}};function B(e){let t=ne(e);return He(t)}function ne(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return "["+e.map(ne).join(",")+"]";let t=e;return "{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+ne(t[n])).join(",")+"}"}function He(e){let t=0xcbf29ce484222325n,r=0x100000001b3n,n=0xffffffffffffffffn;for(let s=0;s<e.length;s++)t^=BigInt(e.charCodeAt(s)),t=t*r&n;return t.toString(16).padStart(16,"0")}function Le(e){if(typeof Buffer<"u")return Buffer.from(e,"utf8").toString("base64url");if(typeof btoa=="function"){let t=new TextEncoder().encode(e),r="";for(let n of t)r+=String.fromCharCode(n);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function De(e){if(typeof Buffer<"u")return Buffer.from(e,"base64url").toString("utf8");if(typeof atob=="function"){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t+"=".repeat((4-t.length%4)%4),n=atob(r),s=new Uint8Array(n.length);for(let o=0;o<n.length;o++)s[o]=n.charCodeAt(o);return new TextDecoder().decode(s)}throw new Error("No base64 decoder available in this runtime")}function me(e){let t=JSON.stringify({t:e,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return Le(t)}function Pe(e){try{let t=JSON.parse(De(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function re(e,t,r){let{handlers:n,onDrain:s}=t,o=new H,a="state"in e&&"config"in e?e:J(e,r),u=false,l=new Set,i=new Map(Object.entries(n)),d=new H,c=false,g=false;function f(){if(!u){if(c){g=true;return}c=true;try{do g=!1,v();while(g)}finally{c=false;}}}function v(){let p=d.drain(),m=o.drain(),b=[...p,...m];b.length>0&&(a=L(a,b));let k=V(a);b.length>0&&s?.(b,a,k);for(let T of k.eligible)C(T);for(let T of b)if(T.type==="task-progress"){let{taskName:y,update:S}=T;if(!a.config.tasks[y])continue;let E=a.state.tasks[y];if(!E||E.status!=="running")continue;let G=me(y),j=R(y,G,S).catch(N=>{u||(d.append({type:"task-failed",taskName:y,error:N.message??String(N),timestamp:new Date().toISOString()}),f());}).finally(()=>{l.delete(j);});l.add(j);}}function h(p){let b=a.config.tasks[p].requires??[],k=new Map;for(let[y,S]of Object.entries(a.config.tasks))for(let O of S.provides??[])k.set(O,y);let T={};for(let y of b){let S=k.get(y);S?T[y]=a.state.tasks[S]?.data:T[y]=void 0;}return T}async function R(p,m,b){let k=a.config.tasks[p],T=k.taskHandlers??[],y=h(p);for(let S of T){let O=i.get(S);if(!O)throw new Error(`Handler '${S}' not found in registry (task '${p}')`);let E={nodeId:p,state:y,taskState:a.state.tasks[p],config:k,callbackToken:m,update:b};if(await O(E)==="task-initiate-failure")throw new Error(`Handler '${S}' returned task-initiate-failure (task '${p}')`)}}function C(p){let b=a.config.tasks[p]?.taskHandlers;if(!b||b.length===0)return;d.append({type:"task-started",taskName:p,timestamp:new Date().toISOString()}),f();let k=me(p),T=R(p,k).catch(y=>{u||(d.append({type:"task-failed",taskName:p,error:y.message??String(y),timestamp:new Date().toISOString()}),f());}).finally(()=>{l.delete(T);});l.add(T);}return {push(p){u||(p.type==="task-completed"&&p.data&&!p.dataHash&&(p={...p,dataHash:B(p.data)}),o.append(p),f());},pushAll(p){if(!u){for(let m of p)m.type==="task-completed"&&m.data&&!m.dataHash?o.append({...m,dataHash:B(m.data)}):o.append(m);f();}},resolveCallback(p,m,b){if(u)return;let k=Pe(p);if(!k)return;let{taskName:T}=k;if(a.config.tasks[T]){if(b&&b.length>0)o.append({type:"task-failed",taskName:T,error:b.join("; "),timestamp:new Date().toISOString()});else {let y=m&&Object.keys(m).length>0?B(m):void 0;o.append({type:"task-completed",taskName:T,data:m,dataHash:y,timestamp:new Date().toISOString()});}f();}},addNode(p,m){u||(o.append({type:"task-upsert",taskName:p,taskConfig:m,timestamp:new Date().toISOString()}),f());},removeNode(p){u||(o.append({type:"task-removal",taskName:p,timestamp:new Date().toISOString()}),f());},addRequires(p,m){u||(o.append({type:"node-requires-add",nodeName:p,tokens:m,timestamp:new Date().toISOString()}),f());},removeRequires(p,m){u||(o.append({type:"node-requires-remove",nodeName:p,tokens:m,timestamp:new Date().toISOString()}),f());},addProvides(p,m){u||(o.append({type:"node-provides-add",nodeName:p,tokens:m,timestamp:new Date().toISOString()}),f());},removeProvides(p,m){u||(o.append({type:"node-provides-remove",nodeName:p,tokens:m,timestamp:new Date().toISOString()}),f());},registerHandler(p,m){i.set(p,m);},unregisterHandler(p){i.delete(p);},retrigger(p){u||a.config.tasks[p]&&(o.append({type:"task-restart",taskName:p,timestamp:new Date().toISOString()}),f());},retriggerAll(p){if(!u){for(let m of p)a.config.tasks[m]&&o.append({type:"task-restart",taskName:m,timestamp:new Date().toISOString()});f();}},snapshot(){return te(a)},getState(){return a},getSchedule(){return V(a)},async waitForHandlers(){l.size>0&&await Promise.allSettled([...l]);},async dispose(p){p?.wait&&l.size>0&&await Promise.allSettled([...l]),u=true;}}}function he(e){let t=[],{config:r,state:n}=e,s=A(r),o=Object.keys(s);for(let i of o)n.tasks[i]||t.push({severity:"error",code:"MISSING_STATE",message:`Task "${i}" exists in config but has no state entry`,tasks:[i]});for(let i of Object.keys(n.tasks))s[i]||t.push({severity:"warning",code:"ORPHAN_STATE",message:`State entry "${i}" has no corresponding task config`,tasks:[i]});for(let i of o){let d=n.tasks[i];d&&(d.status===w.RUNNING&&!d.startedAt&&t.push({severity:"warning",code:"RUNNING_WITHOUT_START",message:`Task "${i}" is running but has no startedAt timestamp`,tasks:[i]}),d.status===w.COMPLETED&&!d.completedAt&&t.push({severity:"warning",code:"COMPLETED_WITHOUT_TIMESTAMP",message:`Task "${i}" is completed but has no completedAt timestamp`,tasks:[i]}),d.status===w.FAILED&&(d.failedAt||t.push({severity:"warning",code:"FAILED_WITHOUT_INFO",message:`Task "${i}" is failed but has no failedAt timestamp`,tasks:[i]}),d.error||t.push({severity:"info",code:"FAILED_WITHOUT_INFO",message:`Task "${i}" is failed but has no error message`,tasks:[i]})));}let a=new Set;for(let i of o)if(n.tasks[i]?.status===w.COMPLETED)for(let c of x(s[i]))a.add(c);let u=new Set(n.availableOutputs),l=new Set;for(let i of Object.values(s)){for(let d of x(i))l.add(d);if(i.on)for(let d of Object.values(i.on))for(let c of d)l.add(c);if(i.on_failure)for(let d of i.on_failure)l.add(d);}for(let i of u)!a.has(i)&&!l.has(i)&&t.push({severity:"info",code:"INJECTED_TOKEN",message:`Token "${i}" is available but no task in the graph can produce it (likely injected)`,tokens:[i]});for(let i of a)u.has(i)||t.push({severity:"warning",code:"MISSING_OUTPUT",message:`Token "${i}" should be available (its producer completed) but is not in availableOutputs`,tokens:[i]});for(let i of o){let d=n.tasks[i];if(!d)continue;d.executionCount<0&&t.push({severity:"error",code:"INVALID_EXECUTION_COUNT",message:`Task "${i}" has negative execution count: ${d.executionCount}`,tasks:[i]});let c=s[i].maxExecutions;c!==void 0&&d.executionCount>c&&t.push({severity:"error",code:"EXCEEDED_MAX_EXECUTIONS",message:`Task "${i}" executed ${d.executionCount} times, exceeding maxExecutions of ${c}`,tasks:[i]});}return ve(t)}function Me(e){let{graph:t,handlers:r}=e,n=t.getState(),s=[],o=A(n.config),a=Object.keys(o),u=new Set(Object.keys(r)),l=new Set;for(let d of a){let c=o[d].taskHandlers;if(c)for(let g of c)l.add(g);}for(let d of a){let c=o[d].taskHandlers;if(c)for(let g of c)r[g]||s.push({severity:"error",code:"MISSING_HANDLER",message:`Task "${d}" references handler "${g}" but it is not in the registry`,tasks:[d]});}for(let d of u)l.has(d)||s.push({severity:"warning",code:"ORPHAN_HANDLER",message:`Handler "${d}" is registered but not referenced by any task's taskHandlers`,tasks:[d]});let i=he(n);return s.push(...i.issues),ve(s)}function ve(e){let t=e.filter(n=>n.severity==="error"),r=e.filter(n=>n.severity==="warning");return {valid:t.length===0,issues:e,errors:t,warnings:r}}function qe(e,t){let r=e;for(let n of t)r=Fe(r,n);return r}function Fe(e,t){switch(t.type){case "add-node":return P(e,t.name,t.config);case "remove-node":return M(e,t.name);case "add-requires":return q(e,t.taskName,t.tokens);case "remove-requires":return F(e,t.taskName,t.tokens);case "add-provides":return $(e,t.taskName,t.tokens);case "remove-provides":return U(e,t.taskName,t.tokens);case "inject-tokens":return X(e,t.tokens);case "drain-tokens":return z(e,t.tokens);case "reset-node":return Q(e,t.name);case "disable-node":return Z(e,t.name);case "enable-node":return ee(e,t.name);case "apply-events":return L(e,t.events);default:throw new Error(`Unknown mutation type: ${t.type}`)}}function Ke(e,t){return async r=>{let{callbackToken:n}=r;return Promise.resolve(e(r)).then(s=>t()(n,s)).catch(s=>t()(n,{},[s instanceof Error?s.message:String(s)])),"task-initiated"}}function Ve(e,t){return async r=>{let{callbackToken:n}=r;return Promise.resolve(e(r)).then(()=>t()(n,{})).catch(()=>t()(n,{})),"task-initiated"}}function Be(e){let{command:t,cwd:r,env:n,timeoutMs:s=3e4,exitCodeMap:o,captureOutput:a=false,getResolve:u}=e;return async l=>{let{callbackToken:i,nodeId:d}=l,c=t.replace(/\$\{taskName\}/g,d);return exec(c,{cwd:r,env:n?{...process.env,...n}:void 0,timeout:s,maxBuffer:10*1024*1024},(g,f,v)=>{let h=g?.code??(g?1:0);if(h!==0&&!o?.[h]){u()(i,{},[`Command exited with code ${h}: ${v||g?.message}`]);return}let R={};a&&(R.stdout=f,R.stderr=v,R.exitCode=h),u()(i,R);}),"task-initiated"}}function ye(e){let{command:t,args:r=[],cwd:n,env:s,timeoutMs:o=3e4,exitCodeMap:a,captureOutput:u=false,getResolve:l}=e;return async i=>{let{callbackToken:d,nodeId:c}=i,g=t.replace(/\$\{taskName\}/g,c),f=r.map(v=>v.replace(/\$\{taskName\}/g,c));return execFile(g,f,{cwd:n,env:s?{...process.env,...s}:void 0,timeout:o,maxBuffer:10*1024*1024,encoding:"utf8",windowsHide:true},(v,h,R)=>{let C=v?.code??(v?1:0);if(C!==0&&!a?.[C]){l()(d,{},[`Process exited with code ${C}: ${R||v?.message}`]);return}let p={};u&&(p.stdout=h,p.stderr=R,p.exitCode=C),l()(d,p);}),"task-initiated"}}function We(e){return e.endsWith(".js")||e.endsWith(".mjs")||e.endsWith(".ts")?"node":e.endsWith(".py")?"python3":(e.endsWith(".sh"),"bash")}function Je(e){let{scriptPath:t,runtime:r,args:n=[],cwd:s,timeoutMs:o=6e4,captureOutput:a=false,getResolve:u}=e,l=r??We(t),i=l==="node"?process.execPath:l;return ye({command:i,args:[t,"${taskName}",...n],cwd:s,timeoutMs:o,captureOutput:a,getResolve:u})}function Ye(e){let{url:t,method:r="POST",headers:n={},timeoutMs:s=3e4,failOnNon2xx:o=true,getResolve:a}=e;return async u=>{let{callbackToken:l,nodeId:i,config:d}=u,c=t.replace(/\$\{taskName\}/g,i),g=JSON.stringify({taskName:i,callbackToken:l,config:d}),f=new AbortController,v=setTimeout(()=>f.abort(),s);return fetch(c,{method:r,headers:{"Content-Type":"application/json",...n},body:g,signal:f.signal}).then(async h=>{if(clearTimeout(v),o&&!h.ok){let C=await h.text().catch(()=>"");a()(l,{},[`HTTP ${h.status}: ${C}`]);return}let R=await h.json().catch(()=>({}));a()(l,R);}).catch(h=>{clearTimeout(v),a()(l,{},[h instanceof Error?h.message:String(h)]);}),"task-initiated"}}function Xe(e,t){return async r=>(e()(r.callbackToken,t??{}),"task-initiated")}var Qe=createRequire(import.meta.url);Qe("./jsonata-sync.cjs");var et=createRequire(import.meta.url),W=et("./jsonata-sync.cjs"),Se=W;function be(e,t){if(!t||!e)return;let r=t.split("."),n=e;for(let s=0;s<r.length;s++){if(n==null)return;n=n[r[s]];}return n}function Re(e,t,r){let n=t.split("."),s=e;for(let o=0;o<n.length-1;o++)(s[n[o]]==null||typeof s[n[o]]!="object")&&(s[n[o]]={}),s=s[n[o]];s[n[n.length-1]]=r;}async function tt(e,t){if(!e?.compute?.length)return e;e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values};for(let s of e.compute)try{let o=await W(s.expr).evaluate(n);Re(e.computed_values,s.bindTo,o),n.computed_values=e.computed_values;}catch(o){console.error(`CardCompute.run error on "${e.id??"?"}.${s.bindTo}":`,o);}return e}function nt(e,t){if(!e?.compute?.length)return {ok:true,node:e};e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values},s=[];for(let o of e.compute)try{let a=Se(o.expr).evaluate(n);Re(e.computed_values,o.bindTo,a),n.computed_values=e.computed_values;}catch(a){let u=a instanceof Error?a.message:String(a);s.push({bindTo:o.bindTo,error:u}),console.error(`CardCompute.runSync error on "${e.id??"?"}.${o.bindTo}":`,a);}return s.length>0?{ok:true,node:e,errors:s}:{ok:true,node:e}}async function rt(e,t,r){let n={...r??{},card_data:t.card_data??{},requires:t.requires??{},fetched_sources:t._sourcesData??{},computed_values:t.computed_values??{}};return W(e).evaluate(n)}function st(e,t){return t.startsWith("fetched_sources.")?be(e._sourcesData??{},t.slice(16)):be(e,t)}var Te=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),ot=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function at(e){let t=[];if(!e||typeof e!="object"||Array.isArray(e))return {ok:false,errors:["Node must be a non-null object"]};let r=e;(typeof r.id!="string"||!r.id)&&t.push("id: required, must be a non-empty string");for(let n of Object.keys(r))ot.has(n)||t.push(`Unknown top-level key: "${n}"`);if((r.card_data==null||typeof r.card_data!="object"||Array.isArray(r.card_data))&&t.push("card_data: required, must be an object"),r.meta!=null)if(typeof r.meta!="object"||Array.isArray(r.meta))t.push("meta: must be an object");else {let n=r.meta;n.title!=null&&typeof n.title!="string"&&t.push("meta.title: must be a string"),n.tags!=null&&!Array.isArray(n.tags)&&t.push("meta.tags: must be an array");}if(r.requires!=null&&!Array.isArray(r.requires)&&t.push("requires: must be an array of strings"),r.provides!=null&&(Array.isArray(r.provides)?r.provides.forEach((n,s)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`provides[${s}]: must be an object with bindTo and ref`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`provides[${s}]: missing required "bindTo" string`),(typeof o.ref!="string"||!o.ref)&&t.push(`provides[${s}]: missing required "ref" string`);}}):t.push("provides: must be an array of { bindTo, ref } bindings")),r.compute!=null&&(Array.isArray(r.compute)?r.compute.forEach((n,s)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`compute[${s}]: must be a compute step object`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`compute[${s}]: missing required "bindTo" property`),(typeof o.expr!="string"||!o.expr)&&t.push(`compute[${s}]: missing required "expr" string (JSONata expression)`);}}):t.push("compute: must be an array of compute steps")),r.source_defs!=null)if(!Array.isArray(r.source_defs))t.push("source_defs: must be an array");else {let n=new Set,s=new Set;r.source_defs.forEach((o,a)=>{if(!o||typeof o!="object"||Array.isArray(o))t.push(`source_defs[${a}]: must be an object`);else {let u=o;typeof u.bindTo!="string"||!u.bindTo?t.push(`source_defs[${a}]: missing required "bindTo" property`):(n.has(u.bindTo)&&t.push(`source_defs[${a}]: bindTo "${u.bindTo}" is not unique across source_defs`),n.add(u.bindTo)),typeof u.outputFile!="string"||!u.outputFile?t.push(`source_defs[${a}]: missing required "outputFile" property`):(s.has(u.outputFile)&&t.push(`source_defs[${a}]: outputFile "${u.outputFile}" is not unique across source_defs`),s.add(u.outputFile)),u.optionalForCompletionGating!=null&&typeof u.optionalForCompletionGating!="boolean"&&t.push(`source_defs[${a}]: optionalForCompletionGating must be a boolean`);}});}if(r.view!=null)if(typeof r.view!="object"||Array.isArray(r.view))t.push("view: must be an object");else {let n=r.view;!Array.isArray(n.elements)||n.elements.length===0?t.push("view.elements: required, must be a non-empty array"):n.elements.forEach((s,o)=>{if(!s||typeof s!="object"){t.push(`view.elements[${o}]: must be an object`);return}!s.kind||typeof s.kind!="string"?t.push(`view.elements[${o}].kind: required, must be a string`):Te.has(s.kind)||t.push(`view.elements[${o}].kind: unknown kind "${s.kind}". Valid: ${[...Te].join(", ")}`),s.data!=null&&(typeof s.data!="object"||Array.isArray(s.data))&&t.push(`view.elements[${o}].data: must be an object`);}),n.layout!=null&&(typeof n.layout!="object"||Array.isArray(n.layout))&&t.push("view.layout: must be an object"),n.features!=null&&(typeof n.features!="object"||Array.isArray(n.features))&&t.push("view.features: must be an object");}return {ok:t.length===0,errors:t}}async function it(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return Promise.all(e.map(async n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[o,a]of Object.entries(n.projections))if(typeof a=="string"&&a.trim().length>0)try{s[o]=await W(a).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}}))}function ct(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return e.map(n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[o,a]of Object.entries(n.projections))if(typeof a=="string"&&a.trim().length>0)try{s[o]=Se(a).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}})}var se={run:tt,runSync:nt,eval:rt,resolve:st,validate:at,enrichSources:it,enrichSourcesSync:ct};function ut(e,t={}){let r,n={},s;if(!Array.isArray(e)&&"nodes"in e){let k=e;r=k.nodes,s=k.id,n=k.settings??{};}else r=e;let{sourceHandlers:o={},defaultSourceHandler:a,cardHandlers:u={},reactiveOptions:l={},graphSettings:i={},executionId:d}=t,c=new Map;for(let k of r){if(c.has(k.id))throw new Error(`Duplicate card ID: "${k.id}"`);c.set(k.id,k);}let g=t.sharedState??new Map,f={},v=new Set,h=new Map;for(let k of r)for(let T of k.provides??[{bindTo:k.id,ref:"card_data"}])v.add(T.bindTo),h.set(T.bindTo,k.id);for(let k of r){let T=k.requires??[];for(let y of T)if(!v.has(y))throw new Error(`Card "${k.id}" requires "${y}" but no card provides that token`);f[k.id]={requires:T.length>0?T:void 0,provides:(k.provides??[{bindTo:k.id,ref:"card_data"}]).map(y=>y.bindTo),taskHandlers:[k.id],description:k.meta?.title??k.id};}let R={id:s??`live-cards-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...n,...i},tasks:f},C={},p=null,m=()=>(k,T,y)=>{p.resolveCallback(k,T,y);};for(let k of r)k.source_defs&&k.source_defs.length>0?C[k.id]=dt(k,o,a,g,m):C[k.id]=pt(k,u,g,c,h,m);let b=re(R,{...l,handlers:C},d);return p=b,{graph:b,config:R,handlers:C,cards:c,sharedState:g}}function dt(e,t,r,n,s){if(t[e.id]){let o=t[e.id];return async a=>o(a)}if(r){let o=r(e);return async a=>o(a)}return async o=>{let a={...e.card_data};return n.set(e.id,a),s()(o.callbackToken,a),"task-initiated"}}function pt(e,t,r,n,s,o){if(t[e.id]){let a=t[e.id];return async u=>a(u)}return async a=>{let u={},l=e.requires??[];for(let g of l){let f=s.get(g)??g,v=r.get(f);v&&(u[g]=v[g]??v);}let i={id:e.id,card_data:{...e.card_data},requires:u,compute:e.compute};await se.run(i);let d;if(e.provides&&e.provides.length>0){d={};for(let{bindTo:g,ref:f}of e.provides)d[g]=se.resolve(i,f);}else d={...i.card_data,...i.computed_values};let c={...i.card_data,...i.computed_values};return r.set(e.id,c),o()(a.callbackToken,d),"task-initiated"}}
2
- export{H as MemoryJournal,P as addNode,$ as addProvides,q as addRequires,Y as applyEvent,L as applyEvents,B as computeDataHash,Ke as createCallbackHandler,Ve as createFireAndForgetHandler,J as createLiveGraph,Xe as createNoopHandler,ye as createProcessHandler,re as createReactiveGraph,Je as createScriptHandler,Be as createShellHandler,Ye as createWebhookHandler,Z as disableNode,z as drainTokens,ee as enableNode,je as getDownstream,xe as getNode,Ne as getUnreachableNodes,ke as getUnreachableTokens,Ie as getUpstream,X as injectTokens,Oe as inspect,ut as liveCardsToReactiveGraph,qe as mutateGraph,M as removeNode,U as removeProvides,F as removeRequires,Q as resetNode,Ce as restore,V as schedule,te as snapshot,he as validateLiveGraph,Me as validateReactiveGraph};//# sourceMappingURL=index.js.map
1
+ import {exec,execFile}from'child_process';import {createRequire}from'module';import'ajv-formats';var w={NOT_STARTED:"not-started",RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function x(e){return e?Array.isArray(e.provides)?e.provides:[]:[]}function _(e){return e?Array.isArray(e.requires)?e.requires:[]:[]}function A(e){return e.tasks??{}}function I(e){return e?e.status===w.FAILED||e.status===w.INACTIVATED:false}function oe(e,t){return e.refreshStrategy??t?.refreshStrategy??"data-changed"}function ae(e){return e.maxExecutions}function ie(e,t){let r=new Set;for(let[n,s]of Object.entries(t))if(s.status===w.COMPLETED){let o=e.tasks[n];o&&x(o).forEach(u=>r.add(u));}return Array.from(r)}function ce(e,t){let r={};return e.forEach(n=>{let s=t[n];if(!s)return;x(s).forEach(a=>{r[a]||(r[a]=[]),r[a].push(n);});}),r}function ue(e,t,r){let n=e.tasks[t]??D(),s={};if(r){let a=r.tasks[t],u=_(a);for(let l of u)for(let[i,d]of Object.entries(r.tasks))if(x(d).includes(l)){let c=e.tasks[i];c?.lastDataHash&&(s[l]=c.lastDataHash);break}}let o={...n,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:s};return {...e,tasks:{...e.tasks,[t]:o},lastUpdated:new Date().toISOString()}}function de(e,t,r,n,s,o){let a=e.tasks[r]??D(),u=t.tasks[r];if(!u)throw new Error(`Task "${r}" not found in graph`);let l;n&&u.on&&u.on[n]?l=u.on[n]:l=x(u);let i=a.startConsumedHashes?{...a.startConsumedHashes}:{...a.lastConsumedHashes};if(!a.startConsumedHashes){let g=u.requires??[];for(let f of g)for(let[v,h]of Object.entries(t.tasks))if(x(h).includes(f)){let R=e.tasks[v];R?.lastDataHash&&(i[f]=R.lastDataHash);break}}let d={...a,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:a.executionCount+1,lastEpoch:a.executionCount+1,lastDataHash:s,data:o,lastConsumedHashes:i,error:void 0},c=[...new Set([...e.availableOutputs,...l])];return {...e,tasks:{...e.tasks,[r]:d},availableOutputs:c,lastUpdated:new Date().toISOString()}}function pe(e,t,r,n){let s=e.tasks[r]??D(),o=t.tasks[r];if(o?.retry){let l=s.retryCount+1;if(l<=o.retry.max_attempts){let i={...s,status:"not-started",retryCount:l,lastUpdated:new Date().toISOString(),error:n};return {...e,tasks:{...e.tasks,[r]:i},lastUpdated:new Date().toISOString()}}}let a={...s,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:s.executionCount+1},u=e.availableOutputs;if(o?.on_failure&&o.on_failure.length>0&&(u=[...new Set([...e.availableOutputs,...o.on_failure])]),o?.circuit_breaker&&a.executionCount>=o.circuit_breaker.max_executions){let l=o.circuit_breaker.on_break;u=[...new Set([...u,...l])];}return {...e,tasks:{...e.tasks,[r]:a},availableOutputs:u,lastUpdated:new Date().toISOString()}}function fe(e,t,r,n){let s=e.tasks[t]??D(),o={...s,progress:typeof n=="number"?n:s.progress,messages:[...s.messages??[],...r?[{message:r,timestamp:new Date().toISOString(),status:s.status}]:[]],lastUpdated:new Date().toISOString()};return {...e,tasks:{...e.tasks,[t]:o},lastUpdated:new Date().toISOString()}}function le(e,t){let r=e.tasks[t];if(!r)return e;let n={...r,status:"not-started",startedAt:void 0,completedAt:void 0,failedAt:void 0,error:void 0,data:void 0,progress:null,lastUpdated:new Date().toISOString()};return {...e,tasks:{...e.tasks,[t]:n},lastUpdated:new Date().toISOString()}}function D(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function J(e,t){let r=t??`live-${Date.now()}`,n={};for(let o of Object.keys(e.tasks))n[o]=K();let s={status:"running",tasks:n,availableOutputs:[],stuckDetection:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]},lastUpdated:new Date().toISOString(),executionId:r,executionConfig:{executionMode:e.settings.execution_mode??"eligibility-mode",conflictStrategy:e.settings.conflict_strategy??"alphabetical",completionStrategy:e.settings.completion}};return {config:e,state:s}}function Y(e,t){let{config:r,state:n}=e;if("executionId"in t&&t.executionId&&t.executionId!==n.executionId)return e;switch(t.type){case "task-started":return {config:r,state:ue(n,t.taskName,r)};case "task-completed":return {config:r,state:de(n,r,t.taskName,t.result,t.dataHash,t.data)};case "task-failed":return {config:r,state:pe(n,r,t.taskName,t.error)};case "task-progress":return {config:r,state:fe(n,t.taskName,t.message,t.progress)};case "task-restart":return {config:r,state:le(n,t.taskName)};case "inject-tokens":return {config:r,state:{...n,availableOutputs:[...new Set([...n.availableOutputs,...t.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:r,state:Ee(n,t.action)};case "task-upsert":return P(e,t.taskName,t.taskConfig);case "task-removal":return M(e,t.taskName);case "node-requires-add":return q(e,t.nodeName,t.tokens);case "node-requires-remove":return F(e,t.nodeName,t.tokens);case "node-provides-add":return U(e,t.nodeName,t.tokens);case "node-provides-remove":return $(e,t.nodeName,t.tokens);default:return e}}function L(e,t){return t.reduce((r,n)=>Y(r,n),e)}function P(e,t,r){let n=!!e.config.tasks[t];return {config:{...e.config,tasks:{...e.config.tasks,[t]:r}},state:{...e.state,tasks:{...e.state.tasks,[t]:n?e.state.tasks[t]:K()},lastUpdated:new Date().toISOString()}}}function M(e,t){if(!e.config.tasks[t])return e;let{[t]:r,...n}=e.config.tasks,{[t]:s,...o}=e.state.tasks;return {config:{...e.config,tasks:n},state:{...e.state,tasks:o,lastUpdated:new Date().toISOString()}}}function q(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=_(n),o=r.filter(a=>!s.includes(a));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:[...s,...o]}}},state:e.state}}function F(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=_(n),o=s.filter(a=>!r.includes(a));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:o}}},state:e.state}}function U(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=x(n),o=r.filter(a=>!s.includes(a));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:[...s,...o]}}},state:e.state}}function $(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=x(n),o=s.filter(a=>!r.includes(a));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:o}}},state:e.state}}function X(e,t){return Y(e,{type:"inject-tokens",tokens:t,timestamp:new Date().toISOString()})}function z(e,t){let r=new Set(t),n=e.state.availableOutputs.filter(s=>!r.has(s));return n.length===e.state.availableOutputs.length?e:{config:e.config,state:{...e.state,availableOutputs:n,lastUpdated:new Date().toISOString()}}}function Q(e,t){return !e.config.tasks[t]||!e.state.tasks[t]?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:K()},lastUpdated:new Date().toISOString()}}}function Z(e,t){let r=e.state.tasks[t];return !r||r.status==="inactivated"?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:{...r,status:"inactivated",lastUpdated:new Date().toISOString()}},lastUpdated:new Date().toISOString()}}}function ee(e,t){let r=e.state.tasks[t];return !r||r.status!=="inactivated"?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:{...r,status:"not-started",lastUpdated:new Date().toISOString()}},lastUpdated:new Date().toISOString()}}}function xe(e,t){let r=e.config.tasks[t];if(!r)return;let n=e.state.tasks[t]??K();return {name:t,config:r,state:n}}function te(e){return {version:1,config:e.config,state:e.state,snapshotAt:new Date().toISOString()}}function Ce(e){if(!e||typeof e!="object")throw new Error("Invalid snapshot: expected an object");let t=e;if(!t.config||typeof t.config!="object")throw new Error('Invalid snapshot: missing or invalid "config"');if(!t.state||typeof t.state!="object")throw new Error('Invalid snapshot: missing or invalid "state"');let r=t.config,n=t.state;if(!r.settings||typeof r.settings!="object")throw new Error("Invalid snapshot: config.settings missing");if(!r.tasks||typeof r.tasks!="object")throw new Error("Invalid snapshot: config.tasks missing");if(!n.tasks||typeof n.tasks!="object")throw new Error("Invalid snapshot: state.tasks missing");if(!Array.isArray(n.availableOutputs))throw new Error("Invalid snapshot: state.availableOutputs must be an array");return {config:r,state:n}}function K(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Ee(e,t){let r=new Date().toISOString();switch(t){case "stop":return {...e,status:"stopped",lastUpdated:r};case "pause":return {...e,status:"paused",lastUpdated:r};case "resume":return {...e,status:"running",lastUpdated:r};default:return e}}function V(e){let{config:t,state:r}=e,n=A(t);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let o=_e(n),a=ie(t,r.tasks),u=new Set([...a,...r.availableOutputs]),l=[],i=[],d=[],c=[];for(let[f,v]of Object.entries(n)){let h=r.tasks[f],R=oe(v,t.settings),C=R!=="once";if(h?.status===w.RUNNING||I(h))continue;let p=ae(v);if(p!==void 0&&h&&h.executionCount>=p||v.circuit_breaker&&h&&h.executionCount>=v.circuit_breaker.max_executions||!C&&h?.status===w.COMPLETED)continue;if(C&&h?.status===w.COMPLETED){let y=_(v),S=false;switch(R){case "data-changed":{y.length>0&&y.some(E=>{for(let[G,j]of Object.entries(n))if(x(j).includes(E)){let N=r.tasks[G];if(!N)continue;let we=h.lastConsumedHashes?.[E];return N.lastDataHash==null?N.executionCount>h.lastEpoch:N.lastDataHash!==we}return false})||(S=true);break}case "epoch-changed":{y.length>0&&y.some(E=>{for(let[G,j]of Object.entries(n))if(x(j).includes(E)){let N=r.tasks[G];if(N&&N.executionCount>h.lastEpoch)return true}return false})||(S=true);break}case "time-based":{let O=v.refreshInterval??0;if(O<=0){S=true;break}let E=h.completedAt;if(!E){S=true;break}(Date.now()-Date.parse(E))/1e3<O&&(S=true);break}case "manual":S=true;break}if(S)continue}let m=_(v);if(m.length===0){l.push(f);continue}let b=[],k=[],T=[];for(let y of m){if(u.has(y))continue;let S=o[y]||[];S.length===0?b.push(y):S.every(E=>I(r.tasks[E]))?T.push({token:y,failedProducer:S[0]}):k.push(y);}b.length>0?d.push({taskName:f,missingTokens:b}):T.length>0?c.push({taskName:f,failedTokens:T.map(y=>y.token),failedProducers:[...new Set(T.map(y=>y.failedProducer))]}):k.length>0?i.push({taskName:f,waitingOn:k}):l.push(f);}let g={};if(l.length>1){let f=ce(l,n);for(let[v,h]of Object.entries(f))h.length>1&&(g[v]=h);}return {eligible:l,pending:i,unresolved:d,blocked:c,conflicts:g}}function _e(e){let t={};for(let[r,n]of Object.entries(e)){for(let s of x(n))t[s]||(t[s]=[]),t[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let o of s)t[o]||(t[o]=[]),t[o].includes(r)||t[o].push(r);if(n.on_failure)for(let s of n.on_failure)t[s]||(t[s]=[]),t[s].includes(r)||t[s].push(r);}return t}function Oe(e){let{config:t,state:r}=e,n=A(t),s=Object.keys(n),o=0,a=0,u=0,l=0,i=0,d=0;for(let p of s){let m=r.tasks[p];if(!m||m.status===w.NOT_STARTED)i++;else switch(m.status){case w.RUNNING:o++;break;case w.COMPLETED:a++;break;case w.FAILED:u++;break;case "inactivated":d++;break;default:l++;}}let c={};for(let[p,m]of Object.entries(n)){for(let b of x(m))c[b]||(c[b]=[]),c[b].push(p);if(m.on)for(let b of Object.values(m.on))for(let k of b)c[k]||(c[k]=[]),c[k].includes(p)||c[k].push(p);if(m.on_failure)for(let b of m.on_failure)c[b]||(c[b]=[]),c[b].includes(p)||c[b].push(p);}let g=new Set,f=0,v=0;for(let[p,m]of Object.entries(n)){let b=r.tasks[p];if(b?.status===w.COMPLETED||b?.status===w.RUNNING)continue;let k=false,T=false;for(let y of _(m)){let S=c[y]||[];S.length===0?(g.add(y),k=true):S.every(E=>{let G=r.tasks[E];return G?.status===w.FAILED||G?.status==="inactivated"})&&(T=true);}k&&f++,T&&!k&&v++;}let h=[];for(let[p,m]of Object.entries(c))m.length>1&&h.push(p);let R=Ae(n,c),C=Ge(s,R);return {totalNodes:s.length,running:o,completed:a,failed:u,waiting:l,notStarted:i,disabled:d,unresolvedCount:f,blockedCount:v,openDependencies:[...g],cycles:C,conflictTokens:h}}function Ae(e,t){let r={};for(let[n,s]of Object.entries(e)){r[n]=new Set;for(let o of _(s))for(let a of t[o]||[])a!==n&&r[n].add(a);}return r}function Ge(e,t){let o={},a={},u=[];for(let i of e)o[i]=0,a[i]=null;function l(i){o[i]=1;for(let d of t[i]||[])if(o[d]===1){let c=[d],g=i;for(;g!==d;)c.push(g),g=a[g];c.push(d),c.reverse(),u.push(c);}else o[d]===0&&(a[d]=i,l(d));o[i]=2;}for(let i of e)o[i]===0&&l(i);return u}function ge(e){let t={};for(let[r,n]of Object.entries(e)){for(let s of x(n))t[s]||(t[s]=[]),t[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let o of s)t[o]||(t[o]=[]),t[o].includes(r)||t[o].push(r);if(n.on_failure)for(let s of n.on_failure)t[s]||(t[s]=[]),t[s].includes(r)||t[s].push(r);}return t}function ke(e){let{config:t,state:r}=e,n=A(t),s=ge(n),o=new Set([...r.availableOutputs]);for(let[c,g]of Object.entries(r.tasks))if(g.status==="completed"){let f=n[c];f&&x(f).forEach(v=>o.add(v));}let a=new Set;for(let c of Object.values(n))for(let g of _(c))a.add(g);let u=new Set,l=new Set;for(let c of a){if(o.has(c))continue;(s[c]||[]).length===0&&u.add(c);}let i=true;for(;i;){i=false;for(let[c,g]of Object.entries(n)){if(l.has(c))continue;let f=r.tasks[c];if(f?.status==="completed")continue;let v=I(f),R=_(g).some(C=>u.has(C));(v||R)&&(l.has(c)||(l.add(c),i=true));}for(let c of a){if(u.has(c)||o.has(c))continue;let g=s[c]||[],f=g.length>0&&g.every(v=>l.has(v)||I(r.tasks[v]));(g.length===0||f)&&(u.has(c)||(u.add(c),i=true));}}let d=[];for(let c of u){let g=s[c]||[],f;g.length===0?f="no-producer":f=g.every(h=>I(r.tasks[h]))?"all-producers-failed":"transitive",d.push({token:c,reason:f,producers:g});}return {tokens:d}}function Ne(e){let{config:t,state:r}=e,n=A(t),{tokens:s}=ke(e),o=new Set(s.map(u=>u.token)),a=[];for(let[u,l]of Object.entries(n)){let i=r.tasks[u];if(i?.status==="completed")continue;let c=_(l).filter(g=>o.has(g));c.length>0?a.push({nodeName:u,missingTokens:c}):I(i)&&a.push({nodeName:u,missingTokens:[]});}return {nodes:a}}function Ie(e,t){let r=A(e.config);if(!r[t])return {nodeName:t,nodes:[],tokens:[]};let n=ge(r),s=new Set,o=new Set,a=new Map;function u(i){let d=r[i];if(d)for(let c of _(d)){let g=n[c]||[];for(let f of g)f!==t&&(o.add(c),a.has(f)||a.set(f,new Set),a.get(f).add(c),s.has(f)||(s.add(f),u(f)));}}u(t);let l=[...a.entries()].map(([i,d])=>({nodeName:i,providesTokens:[...d]}));return {nodeName:t,nodes:l,tokens:[...o]}}function je(e,t){let r=A(e.config);if(!r[t])return {nodeName:t,nodes:[],tokens:[]};let n={};for(let[i,d]of Object.entries(r))for(let c of _(d))n[c]||(n[c]=[]),n[c].push(i);let s=new Set,o=new Set,a=new Map;function u(i){let d=r[i];if(d)for(let c of x(d)){let g=n[c]||[];for(let f of g)f!==t&&(o.add(c),a.has(f)||a.set(f,new Set),a.get(f).add(c),s.has(f)||(s.add(f),u(f)));}}u(t);let l=[...a.entries()].map(([i,d])=>({nodeName:i,requiresTokens:[...d]}));return {nodeName:t,nodes:l,tokens:[...o]}}var H=class{buffer=[];append(t){this.buffer.push(t);}drain(){let t=this.buffer;return this.buffer=[],t}get size(){return this.buffer.length}};function B(e){let t=ne(e);return He(t)}function ne(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return "["+e.map(ne).join(",")+"]";let t=e;return "{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+ne(t[n])).join(",")+"}"}function He(e){let t=0xcbf29ce484222325n,r=0x100000001b3n,n=0xffffffffffffffffn;for(let s=0;s<e.length;s++)t^=BigInt(e.charCodeAt(s)),t=t*r&n;return t.toString(16).padStart(16,"0")}function Le(e){if(typeof Buffer<"u")return Buffer.from(e,"utf8").toString("base64url");if(typeof btoa=="function"){let t=new TextEncoder().encode(e),r="";for(let n of t)r+=String.fromCharCode(n);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function De(e){if(typeof Buffer<"u")return Buffer.from(e,"base64url").toString("utf8");if(typeof atob=="function"){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t+"=".repeat((4-t.length%4)%4),n=atob(r),s=new Uint8Array(n.length);for(let o=0;o<n.length;o++)s[o]=n.charCodeAt(o);return new TextDecoder().decode(s)}throw new Error("No base64 decoder available in this runtime")}function me(e){let t=JSON.stringify({t:e,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return Le(t)}function Pe(e){try{let t=JSON.parse(De(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function re(e,t,r){let{handlers:n,onDrain:s}=t,o=new H,a="state"in e&&"config"in e?e:J(e,r),u=false,l=new Set,i=new Map(Object.entries(n)),d=new H,c=false,g=false;function f(){if(!u){if(c){g=true;return}c=true;try{do g=!1,v();while(g)}finally{c=false;}}}function v(){let p=d.drain(),m=o.drain(),b=[...p,...m];b.length>0&&(a=L(a,b));let k=V(a);b.length>0&&s?.(b,a,k);for(let T of k.eligible)C(T);for(let T of b)if(T.type==="task-progress"){let{taskName:y,update:S}=T;if(!a.config.tasks[y])continue;let E=a.state.tasks[y];if(!E||E.status!=="running")continue;let G=me(y),j=R(y,G,S).catch(N=>{u||(d.append({type:"task-failed",taskName:y,error:N.message??String(N),timestamp:new Date().toISOString()}),f());}).finally(()=>{l.delete(j);});l.add(j);}}function h(p){let b=a.config.tasks[p].requires??[],k=new Map;for(let[y,S]of Object.entries(a.config.tasks))for(let O of S.provides??[])k.set(O,y);let T={};for(let y of b){let S=k.get(y);S?T[y]=a.state.tasks[S]?.data:T[y]=void 0;}return T}async function R(p,m,b){let k=a.config.tasks[p],T=k.taskHandlers??[],y=h(p);for(let S of T){let O=i.get(S);if(!O)throw new Error(`Handler '${S}' not found in registry (task '${p}')`);let E={nodeId:p,state:y,taskState:a.state.tasks[p],config:k,callbackToken:m,update:b};if(await O(E)==="task-initiate-failure")throw new Error(`Handler '${S}' returned task-initiate-failure (task '${p}')`)}}function C(p){let b=a.config.tasks[p]?.taskHandlers;if(!b||b.length===0)return;d.append({type:"task-started",taskName:p,timestamp:new Date().toISOString()}),f();let k=me(p),T=R(p,k).catch(y=>{u||(d.append({type:"task-failed",taskName:p,error:y.message??String(y),timestamp:new Date().toISOString()}),f());}).finally(()=>{l.delete(T);});l.add(T);}return {push(p){u||(p.type==="task-completed"&&p.data&&!p.dataHash&&(p={...p,dataHash:B(p.data)}),o.append(p),f());},pushAll(p){if(!u){for(let m of p)m.type==="task-completed"&&m.data&&!m.dataHash?o.append({...m,dataHash:B(m.data)}):o.append(m);f();}},resolveCallback(p,m,b){if(u)return;let k=Pe(p);if(!k)return;let{taskName:T}=k;if(a.config.tasks[T]){if(b&&b.length>0)o.append({type:"task-failed",taskName:T,error:b.join("; "),timestamp:new Date().toISOString()});else {let y=m&&Object.keys(m).length>0?B(m):void 0;o.append({type:"task-completed",taskName:T,data:m,dataHash:y,timestamp:new Date().toISOString()});}f();}},addNode(p,m){u||(o.append({type:"task-upsert",taskName:p,taskConfig:m,timestamp:new Date().toISOString()}),f());},removeNode(p){u||(o.append({type:"task-removal",taskName:p,timestamp:new Date().toISOString()}),f());},addRequires(p,m){u||(o.append({type:"node-requires-add",nodeName:p,tokens:m,timestamp:new Date().toISOString()}),f());},removeRequires(p,m){u||(o.append({type:"node-requires-remove",nodeName:p,tokens:m,timestamp:new Date().toISOString()}),f());},addProvides(p,m){u||(o.append({type:"node-provides-add",nodeName:p,tokens:m,timestamp:new Date().toISOString()}),f());},removeProvides(p,m){u||(o.append({type:"node-provides-remove",nodeName:p,tokens:m,timestamp:new Date().toISOString()}),f());},registerHandler(p,m){i.set(p,m);},unregisterHandler(p){i.delete(p);},retrigger(p){u||a.config.tasks[p]&&(o.append({type:"task-restart",taskName:p,timestamp:new Date().toISOString()}),f());},retriggerAll(p){if(!u){for(let m of p)a.config.tasks[m]&&o.append({type:"task-restart",taskName:m,timestamp:new Date().toISOString()});f();}},snapshot(){return te(a)},getState(){return a},getSchedule(){return V(a)},async waitForHandlers(){l.size>0&&await Promise.allSettled([...l]);},async dispose(p){p?.wait&&l.size>0&&await Promise.allSettled([...l]),u=true;}}}function he(e){let t=[],{config:r,state:n}=e,s=A(r),o=Object.keys(s);for(let i of o)n.tasks[i]||t.push({severity:"error",code:"MISSING_STATE",message:`Task "${i}" exists in config but has no state entry`,tasks:[i]});for(let i of Object.keys(n.tasks))s[i]||t.push({severity:"warning",code:"ORPHAN_STATE",message:`State entry "${i}" has no corresponding task config`,tasks:[i]});for(let i of o){let d=n.tasks[i];d&&(d.status===w.RUNNING&&!d.startedAt&&t.push({severity:"warning",code:"RUNNING_WITHOUT_START",message:`Task "${i}" is running but has no startedAt timestamp`,tasks:[i]}),d.status===w.COMPLETED&&!d.completedAt&&t.push({severity:"warning",code:"COMPLETED_WITHOUT_TIMESTAMP",message:`Task "${i}" is completed but has no completedAt timestamp`,tasks:[i]}),d.status===w.FAILED&&(d.failedAt||t.push({severity:"warning",code:"FAILED_WITHOUT_INFO",message:`Task "${i}" is failed but has no failedAt timestamp`,tasks:[i]}),d.error||t.push({severity:"info",code:"FAILED_WITHOUT_INFO",message:`Task "${i}" is failed but has no error message`,tasks:[i]})));}let a=new Set;for(let i of o)if(n.tasks[i]?.status===w.COMPLETED)for(let c of x(s[i]))a.add(c);let u=new Set(n.availableOutputs),l=new Set;for(let i of Object.values(s)){for(let d of x(i))l.add(d);if(i.on)for(let d of Object.values(i.on))for(let c of d)l.add(c);if(i.on_failure)for(let d of i.on_failure)l.add(d);}for(let i of u)!a.has(i)&&!l.has(i)&&t.push({severity:"info",code:"INJECTED_TOKEN",message:`Token "${i}" is available but no task in the graph can produce it (likely injected)`,tokens:[i]});for(let i of a)u.has(i)||t.push({severity:"warning",code:"MISSING_OUTPUT",message:`Token "${i}" should be available (its producer completed) but is not in availableOutputs`,tokens:[i]});for(let i of o){let d=n.tasks[i];if(!d)continue;d.executionCount<0&&t.push({severity:"error",code:"INVALID_EXECUTION_COUNT",message:`Task "${i}" has negative execution count: ${d.executionCount}`,tasks:[i]});let c=s[i].maxExecutions;c!==void 0&&d.executionCount>c&&t.push({severity:"error",code:"EXCEEDED_MAX_EXECUTIONS",message:`Task "${i}" executed ${d.executionCount} times, exceeding maxExecutions of ${c}`,tasks:[i]});}return ve(t)}function Me(e){let{graph:t,handlers:r}=e,n=t.getState(),s=[],o=A(n.config),a=Object.keys(o),u=new Set(Object.keys(r)),l=new Set;for(let d of a){let c=o[d].taskHandlers;if(c)for(let g of c)l.add(g);}for(let d of a){let c=o[d].taskHandlers;if(c)for(let g of c)r[g]||s.push({severity:"error",code:"MISSING_HANDLER",message:`Task "${d}" references handler "${g}" but it is not in the registry`,tasks:[d]});}for(let d of u)l.has(d)||s.push({severity:"warning",code:"ORPHAN_HANDLER",message:`Handler "${d}" is registered but not referenced by any task's taskHandlers`,tasks:[d]});let i=he(n);return s.push(...i.issues),ve(s)}function ve(e){let t=e.filter(n=>n.severity==="error"),r=e.filter(n=>n.severity==="warning");return {valid:t.length===0,issues:e,errors:t,warnings:r}}function qe(e,t){let r=e;for(let n of t)r=Fe(r,n);return r}function Fe(e,t){switch(t.type){case "add-node":return P(e,t.name,t.config);case "remove-node":return M(e,t.name);case "add-requires":return q(e,t.taskName,t.tokens);case "remove-requires":return F(e,t.taskName,t.tokens);case "add-provides":return U(e,t.taskName,t.tokens);case "remove-provides":return $(e,t.taskName,t.tokens);case "inject-tokens":return X(e,t.tokens);case "drain-tokens":return z(e,t.tokens);case "reset-node":return Q(e,t.name);case "disable-node":return Z(e,t.name);case "enable-node":return ee(e,t.name);case "apply-events":return L(e,t.events);default:throw new Error(`Unknown mutation type: ${t.type}`)}}function Ke(e,t){return async r=>{let{callbackToken:n}=r;return Promise.resolve(e(r)).then(s=>t()(n,s)).catch(s=>t()(n,{},[s instanceof Error?s.message:String(s)])),"task-initiated"}}function Ve(e,t){return async r=>{let{callbackToken:n}=r;return Promise.resolve(e(r)).then(()=>t()(n,{})).catch(()=>t()(n,{})),"task-initiated"}}function Be(e){let{command:t,cwd:r,env:n,timeoutMs:s=3e4,exitCodeMap:o,captureOutput:a=false,getResolve:u}=e;return async l=>{let{callbackToken:i,nodeId:d}=l,c=t.replace(/\$\{taskName\}/g,d);return exec(c,{cwd:r,env:n?{...process.env,...n}:void 0,timeout:s,maxBuffer:10*1024*1024},(g,f,v)=>{let h=g?.code??(g?1:0);if(h!==0&&!o?.[h]){u()(i,{},[`Command exited with code ${h}: ${v||g?.message}`]);return}let R={};a&&(R.stdout=f,R.stderr=v,R.exitCode=h),u()(i,R);}),"task-initiated"}}function ye(e){let{command:t,args:r=[],cwd:n,env:s,timeoutMs:o=3e4,exitCodeMap:a,captureOutput:u=false,getResolve:l}=e;return async i=>{let{callbackToken:d,nodeId:c}=i,g=t.replace(/\$\{taskName\}/g,c),f=r.map(v=>v.replace(/\$\{taskName\}/g,c));return execFile(g,f,{cwd:n,env:s?{...process.env,...s}:void 0,timeout:o,maxBuffer:10*1024*1024,encoding:"utf8",windowsHide:true},(v,h,R)=>{let C=v?.code??(v?1:0);if(C!==0&&!a?.[C]){l()(d,{},[`Process exited with code ${C}: ${R||v?.message}`]);return}let p={};u&&(p.stdout=h,p.stderr=R,p.exitCode=C),l()(d,p);}),"task-initiated"}}function We(e){return e.endsWith(".js")||e.endsWith(".mjs")||e.endsWith(".ts")?"node":e.endsWith(".py")?"python3":(e.endsWith(".sh"),"bash")}function Je(e){let{scriptPath:t,runtime:r,args:n=[],cwd:s,timeoutMs:o=6e4,captureOutput:a=false,getResolve:u}=e,l=r??We(t),i=l==="node"?process.execPath:l;return ye({command:i,args:[t,"${taskName}",...n],cwd:s,timeoutMs:o,captureOutput:a,getResolve:u})}function Ye(e){let{url:t,method:r="POST",headers:n={},timeoutMs:s=3e4,failOnNon2xx:o=true,getResolve:a}=e;return async u=>{let{callbackToken:l,nodeId:i,config:d}=u,c=t.replace(/\$\{taskName\}/g,i),g=JSON.stringify({taskName:i,callbackToken:l,config:d}),f=new AbortController,v=setTimeout(()=>f.abort(),s);return fetch(c,{method:r,headers:{"Content-Type":"application/json",...n},body:g,signal:f.signal}).then(async h=>{if(clearTimeout(v),o&&!h.ok){let C=await h.text().catch(()=>"");a()(l,{},[`HTTP ${h.status}: ${C}`]);return}let R=await h.json().catch(()=>({}));a()(l,R);}).catch(h=>{clearTimeout(v),a()(l,{},[h instanceof Error?h.message:String(h)]);}),"task-initiated"}}function Xe(e,t){return async r=>(e()(r.callbackToken,t??{}),"task-initiated")}var Qe=createRequire(import.meta.url);Qe("./jsonata-sync.cjs");var et=createRequire(import.meta.url),W=et("./jsonata-sync.cjs"),Se=W;function be(e,t){if(!t||!e)return;let r=t.split("."),n=e;for(let s=0;s<r.length;s++){if(n==null)return;n=n[r[s]];}return n}function Re(e,t,r){let n=t.split("."),s=e;for(let o=0;o<n.length-1;o++)(s[n[o]]==null||typeof s[n[o]]!="object")&&(s[n[o]]={}),s=s[n[o]];s[n[n.length-1]]=r;}async function tt(e,t){if(!e?.compute?.length)return e;e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values};for(let s of e.compute)try{let o=await W(s.expr).evaluate(n);Re(e.computed_values,s.bindTo,o),n.computed_values=e.computed_values;}catch{}return e}function nt(e,t){if(!e?.compute?.length)return {ok:true,node:e};e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values},s=[];for(let o of e.compute)try{let a=Se(o.expr).evaluate(n);Re(e.computed_values,o.bindTo,a),n.computed_values=e.computed_values;}catch(a){let u=a instanceof Error?a.message:String(a);s.push({bindTo:o.bindTo,error:u});}return s.length>0?{ok:true,node:e,errors:s}:{ok:true,node:e}}async function rt(e,t,r){let n={...r??{},card_data:t.card_data??{},requires:t.requires??{},fetched_sources:t._sourcesData??{},computed_values:t.computed_values??{}};return W(e).evaluate(n)}function st(e,t){return t.startsWith("fetched_sources.")?be(e._sourcesData??{},t.slice(16)):be(e,t)}var Te=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),ot=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function at(e){let t=[];if(!e||typeof e!="object"||Array.isArray(e))return {ok:false,errors:["Node must be a non-null object"]};let r=e;(typeof r.id!="string"||!r.id)&&t.push("id: required, must be a non-empty string");for(let n of Object.keys(r))ot.has(n)||t.push(`Unknown top-level key: "${n}"`);if((r.card_data==null||typeof r.card_data!="object"||Array.isArray(r.card_data))&&t.push("card_data: required, must be an object"),r.meta!=null)if(typeof r.meta!="object"||Array.isArray(r.meta))t.push("meta: must be an object");else {let n=r.meta;n.title!=null&&typeof n.title!="string"&&t.push("meta.title: must be a string"),n.tags!=null&&!Array.isArray(n.tags)&&t.push("meta.tags: must be an array");}if(r.requires!=null&&!Array.isArray(r.requires)&&t.push("requires: must be an array of strings"),r.provides!=null&&(Array.isArray(r.provides)?r.provides.forEach((n,s)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`provides[${s}]: must be an object with bindTo and ref`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`provides[${s}]: missing required "bindTo" string`),(typeof o.ref!="string"||!o.ref)&&t.push(`provides[${s}]: missing required "ref" string`);}}):t.push("provides: must be an array of { bindTo, ref } bindings")),r.compute!=null&&(Array.isArray(r.compute)?r.compute.forEach((n,s)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`compute[${s}]: must be a compute step object`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`compute[${s}]: missing required "bindTo" property`),(typeof o.expr!="string"||!o.expr)&&t.push(`compute[${s}]: missing required "expr" string (JSONata expression)`);}}):t.push("compute: must be an array of compute steps")),r.source_defs!=null)if(!Array.isArray(r.source_defs))t.push("source_defs: must be an array");else {let n=new Set,s=new Set;r.source_defs.forEach((o,a)=>{if(!o||typeof o!="object"||Array.isArray(o))t.push(`source_defs[${a}]: must be an object`);else {let u=o;typeof u.bindTo!="string"||!u.bindTo?t.push(`source_defs[${a}]: missing required "bindTo" property`):(n.has(u.bindTo)&&t.push(`source_defs[${a}]: bindTo "${u.bindTo}" is not unique across source_defs`),n.add(u.bindTo)),typeof u.outputFile!="string"||!u.outputFile?t.push(`source_defs[${a}]: missing required "outputFile" property`):(s.has(u.outputFile)&&t.push(`source_defs[${a}]: outputFile "${u.outputFile}" is not unique across source_defs`),s.add(u.outputFile)),u.optionalForCompletionGating!=null&&typeof u.optionalForCompletionGating!="boolean"&&t.push(`source_defs[${a}]: optionalForCompletionGating must be a boolean`);}});}if(r.view!=null)if(typeof r.view!="object"||Array.isArray(r.view))t.push("view: must be an object");else {let n=r.view;!Array.isArray(n.elements)||n.elements.length===0?t.push("view.elements: required, must be a non-empty array"):n.elements.forEach((s,o)=>{if(!s||typeof s!="object"){t.push(`view.elements[${o}]: must be an object`);return}!s.kind||typeof s.kind!="string"?t.push(`view.elements[${o}].kind: required, must be a string`):Te.has(s.kind)||t.push(`view.elements[${o}].kind: unknown kind "${s.kind}". Valid: ${[...Te].join(", ")}`),s.data!=null&&(typeof s.data!="object"||Array.isArray(s.data))&&t.push(`view.elements[${o}].data: must be an object`);}),n.layout!=null&&(typeof n.layout!="object"||Array.isArray(n.layout))&&t.push("view.layout: must be an object"),n.features!=null&&(typeof n.features!="object"||Array.isArray(n.features))&&t.push("view.features: must be an object");}return {ok:t.length===0,errors:t}}async function it(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return Promise.all(e.map(async n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[o,a]of Object.entries(n.projections))if(typeof a=="string"&&a.trim().length>0)try{s[o]=await W(a).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}}))}function ct(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return e.map(n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[o,a]of Object.entries(n.projections))if(typeof a=="string"&&a.trim().length>0)try{s[o]=Se(a).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}})}var se={run:tt,runSync:nt,eval:rt,resolve:st,validate:at,enrichSources:it,enrichSourcesSync:ct};function ut(e,t={}){let r,n={},s;if(!Array.isArray(e)&&"nodes"in e){let k=e;r=k.nodes,s=k.id,n=k.settings??{};}else r=e;let{sourceHandlers:o={},defaultSourceHandler:a,cardHandlers:u={},reactiveOptions:l={},graphSettings:i={},executionId:d}=t,c=new Map;for(let k of r){if(c.has(k.id))throw new Error(`Duplicate card ID: "${k.id}"`);c.set(k.id,k);}let g=t.sharedState??new Map,f={},v=new Set,h=new Map;for(let k of r)for(let T of k.provides??[{bindTo:k.id,ref:"card_data"}])v.add(T.bindTo),h.set(T.bindTo,k.id);for(let k of r){let T=k.requires??[];for(let y of T)if(!v.has(y))throw new Error(`Card "${k.id}" requires "${y}" but no card provides that token`);f[k.id]={requires:T.length>0?T:void 0,provides:(k.provides??[{bindTo:k.id,ref:"card_data"}]).map(y=>y.bindTo),taskHandlers:[k.id],description:k.meta?.title??k.id};}let R={id:s??`live-cards-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...n,...i},tasks:f},C={},p=null,m=()=>(k,T,y)=>{p.resolveCallback(k,T,y);};for(let k of r)k.source_defs&&k.source_defs.length>0?C[k.id]=dt(k,o,a,g,m):C[k.id]=pt(k,u,g,c,h,m);let b=re(R,{...l,handlers:C},d);return p=b,{graph:b,config:R,handlers:C,cards:c,sharedState:g}}function dt(e,t,r,n,s){if(t[e.id]){let o=t[e.id];return async a=>o(a)}if(r){let o=r(e);return async a=>o(a)}return async o=>{let a={...e.card_data};return n.set(e.id,a),s()(o.callbackToken,a),"task-initiated"}}function pt(e,t,r,n,s,o){if(t[e.id]){let a=t[e.id];return async u=>a(u)}return async a=>{let u={},l=e.requires??[];for(let g of l){let f=s.get(g)??g,v=r.get(f);v&&(u[g]=v[g]??v);}let i={id:e.id,card_data:{...e.card_data},requires:u,compute:e.compute};await se.run(i);let d;if(e.provides&&e.provides.length>0){d={};for(let{bindTo:g,ref:f}of e.provides)d[g]=se.resolve(i,f);}else d={...i.card_data,...i.computed_values};let c={...i.card_data,...i.computed_values};return r.set(e.id,c),o()(a.callbackToken,d),"task-initiated"}}
2
+ export{H as MemoryJournal,P as addNode,U as addProvides,q as addRequires,Y as applyEvent,L as applyEvents,B as computeDataHash,Ke as createCallbackHandler,Ve as createFireAndForgetHandler,J as createLiveGraph,Xe as createNoopHandler,ye as createProcessHandler,re as createReactiveGraph,Je as createScriptHandler,Be as createShellHandler,Ye as createWebhookHandler,Z as disableNode,z as drainTokens,ee as enableNode,je as getDownstream,xe as getNode,Ne as getUnreachableNodes,ke as getUnreachableTokens,Ie as getUpstream,X as injectTokens,Oe as inspect,ut as liveCardsToReactiveGraph,qe as mutateGraph,M as removeNode,$ as removeProvides,F as removeRequires,Q as resetNode,Ce as restore,V as schedule,te as snapshot,he as validateLiveGraph,Me as validateReactiveGraph};//# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
@@ -1,8 +1,8 @@
1
- export { C as COMPLETION_STRATEGIES, a as CONFLICT_STRATEGIES, b as CompletionResult, D as DEFAULTS, E as EXECUTION_MODES, c as EXECUTION_STATUS, d as ExecutionPlan, e as ExportOptions, M as MermaidOptions, T as TASK_STATUS, f as addDynamicTask, L as addKeyToProvides, N as addKeyToRequires, g as apply, h as applyAll, i as computeAvailableOutputs, j as createDefaultGraphEngineStore, k as createInitialExecutionState, l as detectStuckState, m as exportGraphConfig, n as exportGraphConfigToFile, o as flowToMermaid, p as getAllTasks, q as getCandidateTasks, r as getMaxExecutions, s as getProvides, t as getRefreshStrategy, u as getRequires, v as getTask, w as graphToMermaid, O as groupTasksByProvides, P as hasOutputConflict, x as hasTask, y as isExecutionComplete, z as isNonActiveTask, A as isRerunnable, B as isTaskCompleted, F as isTaskRunning, G as loadGraphConfig, H as next, I as planExecution, Q as removeKeyFromProvides, R as removeKeyFromRequires, J as validateGraphConfig, K as validateGraphSchema } from '../constants-BzZUyYlp.cjs';
1
+ export { C as COMPLETION_STRATEGIES, a as CONFLICT_STRATEGIES, b as CompletionResult, D as DEFAULTS, E as EXECUTION_MODES, c as EXECUTION_STATUS, d as ExecutionPlan, e as ExportOptions, M as MermaidOptions, T as TASK_STATUS, f as addDynamicTask, L as addKeyToProvides, N as addKeyToRequires, g as apply, h as applyAll, i as computeAvailableOutputs, j as createDefaultGraphEngineStore, k as createInitialExecutionState, l as detectStuckState, m as exportGraphConfig, n as exportGraphConfigToFile, o as flowToMermaid, p as getAllTasks, q as getCandidateTasks, r as getMaxExecutions, s as getProvides, t as getRefreshStrategy, u as getRequires, v as getTask, w as graphToMermaid, O as groupTasksByProvides, P as hasOutputConflict, x as hasTask, y as isExecutionComplete, z as isNonActiveTask, A as isRerunnable, B as isTaskCompleted, F as isTaskRunning, G as loadGraphConfig, H as next, I as planExecution, Q as removeKeyFromProvides, R as removeKeyFromRequires, J as validateGraphConfig, K as validateGraphSchema } from '../constants-DXxsRN9y.cjs';
2
2
  export { G as GraphIssue, a as GraphValidationResult, I as IssueSeverity, v as validateGraph } from '../validate-Dbu7ygys.cjs';
3
3
  import { T as TaskConfig, c as ExecutionState, a as ConflictStrategy, G as GraphConfig } from '../types-BBhqYGhE.cjs';
4
4
  export { A as AgentActionEvent, C as CompletionStrategy, E as ExecutionConfig, b as ExecutionMode, d as ExecutionStatus, e as GraphEngineStore, f as GraphEvent, g as GraphSettings, I as InjectTokensEvent, R as RefreshStrategy, S as SchedulerResult, h as StuckDetection, m as TaskCircuitBreakerConfig, i as TaskCompletedEvent, j as TaskFailedEvent, n as TaskMessage, o as TaskProgressEvent, p as TaskRestartEvent, q as TaskRetryConfig, k as TaskStartedEvent, l as TaskStatus } from '../types-BBhqYGhE.cjs';
5
- import '../types-ycun84cq.cjs';
5
+ import '../types-DQ1bKuB1.cjs';
6
6
 
7
7
  /**
8
8
  * Event Graph — Conflict Resolution Strategies
@@ -1,8 +1,8 @@
1
- export { C as COMPLETION_STRATEGIES, a as CONFLICT_STRATEGIES, b as CompletionResult, D as DEFAULTS, E as EXECUTION_MODES, c as EXECUTION_STATUS, d as ExecutionPlan, e as ExportOptions, M as MermaidOptions, T as TASK_STATUS, f as addDynamicTask, L as addKeyToProvides, N as addKeyToRequires, g as apply, h as applyAll, i as computeAvailableOutputs, j as createDefaultGraphEngineStore, k as createInitialExecutionState, l as detectStuckState, m as exportGraphConfig, n as exportGraphConfigToFile, o as flowToMermaid, p as getAllTasks, q as getCandidateTasks, r as getMaxExecutions, s as getProvides, t as getRefreshStrategy, u as getRequires, v as getTask, w as graphToMermaid, O as groupTasksByProvides, P as hasOutputConflict, x as hasTask, y as isExecutionComplete, z as isNonActiveTask, A as isRerunnable, B as isTaskCompleted, F as isTaskRunning, G as loadGraphConfig, H as next, I as planExecution, Q as removeKeyFromProvides, R as removeKeyFromRequires, J as validateGraphConfig, K as validateGraphSchema } from '../constants-oCEbNpul.js';
1
+ export { C as COMPLETION_STRATEGIES, a as CONFLICT_STRATEGIES, b as CompletionResult, D as DEFAULTS, E as EXECUTION_MODES, c as EXECUTION_STATUS, d as ExecutionPlan, e as ExportOptions, M as MermaidOptions, T as TASK_STATUS, f as addDynamicTask, L as addKeyToProvides, N as addKeyToRequires, g as apply, h as applyAll, i as computeAvailableOutputs, j as createDefaultGraphEngineStore, k as createInitialExecutionState, l as detectStuckState, m as exportGraphConfig, n as exportGraphConfigToFile, o as flowToMermaid, p as getAllTasks, q as getCandidateTasks, r as getMaxExecutions, s as getProvides, t as getRefreshStrategy, u as getRequires, v as getTask, w as graphToMermaid, O as groupTasksByProvides, P as hasOutputConflict, x as hasTask, y as isExecutionComplete, z as isNonActiveTask, A as isRerunnable, B as isTaskCompleted, F as isTaskRunning, G as loadGraphConfig, H as next, I as planExecution, Q as removeKeyFromProvides, R as removeKeyFromRequires, J as validateGraphConfig, K as validateGraphSchema } from '../constants-BPVLb3Es.js';
2
2
  export { G as GraphIssue, a as GraphValidationResult, I as IssueSeverity, v as validateGraph } from '../validate-BAVzUJWa.js';
3
3
  import { T as TaskConfig, c as ExecutionState, a as ConflictStrategy, G as GraphConfig } from '../types-BBhqYGhE.js';
4
4
  export { A as AgentActionEvent, C as CompletionStrategy, E as ExecutionConfig, b as ExecutionMode, d as ExecutionStatus, e as GraphEngineStore, f as GraphEvent, g as GraphSettings, I as InjectTokensEvent, R as RefreshStrategy, S as SchedulerResult, h as StuckDetection, m as TaskCircuitBreakerConfig, i as TaskCompletedEvent, j as TaskFailedEvent, n as TaskMessage, o as TaskProgressEvent, p as TaskRestartEvent, q as TaskRetryConfig, k as TaskStartedEvent, l as TaskStatus } from '../types-BBhqYGhE.js';
5
- import '../types-ycun84cq.js';
5
+ import '../types-DQ1bKuB1.js';
6
6
 
7
7
  /**
8
8
  * Event Graph — Conflict Resolution Strategies
@@ -0,0 +1,3 @@
1
+ 'use strict';var s="b64:";function l(e){let t=new TextEncoder().encode(e),r=globalThis.Buffer,n;if(r)n=r.from(t).toString("base64");else if(typeof btoa=="function"){let o="";for(let a of t)o+=String.fromCharCode(a);n=btoa(o);}else throw new Error("No base64 encoder available in this runtime");return n.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function i(e){return `${s}${l(JSON.stringify(e))}`}function c(e,t){let r;return /\.m?js$/i.test(e)?r="local-node":/\.py$/i.test(e)?r="local-python":r="local-process",{meta:"task-executor",howToRun:r,whatToRun:i({kind:"fs-path",value:e}),...t?{extra:t}:{}}}function f(e){return JSON.stringify(e)}function d(e){let t;try{t=JSON.parse(e);}catch{throw new Error(`parseExecutionRef: invalid JSON \u2014 ${e}`)}if(typeof t!="object"||t===null||typeof t.howToRun!="string"||typeof t.whatToRun!="string")throw new Error(`parseExecutionRef: missing required fields howToRun/whatToRun \u2014 ${e}`);return t}
2
+ exports.executionRefFromScriptPath=c;exports.parseExecutionRef=d;exports.serializeExecutionRef=f;//# sourceMappingURL=execution-refs.cjs.map
3
+ //# sourceMappingURL=execution-refs.cjs.map
@@ -42,9 +42,14 @@
42
42
  * Each field is a JSONata expression evaluated against the caller's logical args object.
43
43
  * If argsMassaging is omitted, the adapter uses its default mapping for the howToRun kind.
44
44
  *
45
- * cmdTemplate — array of JSONata exprs, each producing one argv string (local transports)
46
- * urlTemplate — JSONata expr producing the final URL string (http transports)
47
- * bodyTemplate — JSONata expr producing the request body object (http transports)
45
+ * Local transports (local-node, local-python, local-process):
46
+ * cmdTemplate array of JSONata exprs, each producing one argv string
47
+ * stdinTemplate — JSONata expr producing the stdin payload object
48
+ *
49
+ * HTTP transports (http:post, http:get, azure-function, firebase, etc.):
50
+ * urlTemplate — JSONata expr producing the final URL string
51
+ * headerTemplate — JSONata expr producing the request headers object
52
+ * bodyTemplate — JSONata expr producing the request body object
48
53
  *
49
54
  * ────────────────────────────────────────────────────────────────────────────
50
55
  * SERIALIZATION
@@ -79,7 +84,8 @@
79
84
  * whatToRun: 'b64:<base64url({"kind":"http-url","value":"https://myfn.azurewebsites.net/api/task-executor"})>',
80
85
  * argsMassaging: {
81
86
  * urlTemplate: "whatToRun & '?op=' & subcommand",
82
- * bodyTemplate: "{ 'inRef': inRef, 'outRef': outRef, 'token': token }",
87
+ * headerTemplate: "{ 'Authorization': 'Bearer ' & token }",
88
+ * bodyTemplate: "{ 'inRef': inRef, 'outRef': outRef }",
83
89
  * },
84
90
  * };
85
91
  *
@@ -126,12 +132,10 @@ interface OutputTransforms {
126
132
  */
127
133
  interface ArgsMassaging {
128
134
  /**
129
- * For local transports ('local-node', 'local-python', 'local-process').
130
135
  * Array of JSONata expressions — each evaluates to one argv string.
131
136
  * The resolved strings are appended after the base command.
132
137
  *
133
138
  * @example
134
- * // Standard task-executor protocol:
135
139
  * cmdTemplate: [
136
140
  * "'run-source-fetch'",
137
141
  * "'--in-ref'", "inRef",
@@ -141,7 +145,15 @@ interface ArgsMassaging {
141
145
  */
142
146
  cmdTemplate?: string[];
143
147
  /**
144
- * For http transports ('http:post', 'http:get').
148
+ * JSONata expression that produces the stdin payload object.
149
+ * Evaluated against the logical args.
150
+ * If omitted, `JSON.stringify(args)` is sent on stdin.
151
+ *
152
+ * @example
153
+ * stdinTemplate: "{ 'X': x, 'multiplier': 2 }"
154
+ */
155
+ stdinTemplate?: string;
156
+ /**
145
157
  * JSONata expression that produces the final URL string.
146
158
  * The input context includes 'whatToRun' (the base URL from the ref)
147
159
  * plus all logical args.
@@ -151,15 +163,24 @@ interface ArgsMassaging {
151
163
  */
152
164
  urlTemplate?: string;
153
165
  /**
154
- * For http transports.
166
+ * JSONata expression that produces the request headers object.
167
+ * Merged on top of the default headers (`Content-Type: application/json`).
168
+ *
169
+ * @example
170
+ * headerTemplate: "{ 'Authorization': 'Bearer ' & token }"
171
+ */
172
+ headerTemplate?: string;
173
+ /**
155
174
  * JSONata expression that produces the request body object.
156
175
  * Evaluated against the logical args object.
157
176
  *
158
177
  * @example
159
- * bodyTemplate: "{ 'inRef': inRef, 'outRef': outRef, 'token': token }"
178
+ * bodyTemplate: "{ 'inRef': inRef, 'outRef': outRef }"
160
179
  */
161
180
  bodyTemplate?: string;
162
181
  }
182
+ type KnownExecutionTransport = 'local-node' | 'local-python' | 'local-process' | 'http:post' | 'http:get' | 'built-in' | 'in-browser';
183
+ type ExecutionTransportKind = KnownExecutionTransport | (string & {});
163
184
  /**
164
185
  * Self-contained, serializable descriptor for invoking a target.
165
186
  *
@@ -178,7 +199,7 @@ interface ExecutionRef {
178
199
  * Transport and runtime kind — determines how whatToRun is invoked.
179
200
  * @see module JSDoc for the full list of supported values.
180
201
  */
181
- howToRun: 'local-node' | 'local-python' | 'local-process' | 'http:post' | 'http:get' | 'built-in' | 'in-browser';
202
+ howToRun: ExecutionTransportKind;
182
203
  /**
183
204
  * Address of the artifact to run. Two valid forms:
184
205
  * - string: must be KindValueRef wire form `b64:<base64url(json)>` (programmatically generated via serializeRef)
@@ -215,7 +236,7 @@ interface ExecutionRef {
215
236
  /**
216
237
  * Opaque executor-specific configuration.
217
238
  * For local transports, base64-encoded and passed as --extra <base64-json> in the argv.
218
- * For HTTP transports, available in argsMassaging.bodyTemplate as the `extra` binding.
239
+ * For HTTP transports, available in argsMassaging templates as the `extra` binding.
219
240
  * Stored with the ref so it travels as a single unit with the invocation descriptor.
220
241
  */
221
242
  extra?: Record<string, unknown>;
@@ -262,4 +283,4 @@ declare function serializeExecutionRef(ref: ExecutionRef): string;
262
283
  */
263
284
  declare function parseExecutionRef(s: string): ExecutionRef;
264
285
 
265
- export { type ArgsMassaging, type ExecutionRef, type ExecutionResult, type OutputTransforms, executionRefFromScriptPath, parseExecutionRef, serializeExecutionRef };
286
+ export { type ArgsMassaging, type ExecutionRef, type ExecutionResult, type ExecutionTransportKind, type KnownExecutionTransport, type OutputTransforms, executionRefFromScriptPath, parseExecutionRef, serializeExecutionRef };
@@ -42,9 +42,14 @@
42
42
  * Each field is a JSONata expression evaluated against the caller's logical args object.
43
43
  * If argsMassaging is omitted, the adapter uses its default mapping for the howToRun kind.
44
44
  *
45
- * cmdTemplate — array of JSONata exprs, each producing one argv string (local transports)
46
- * urlTemplate — JSONata expr producing the final URL string (http transports)
47
- * bodyTemplate — JSONata expr producing the request body object (http transports)
45
+ * Local transports (local-node, local-python, local-process):
46
+ * cmdTemplate array of JSONata exprs, each producing one argv string
47
+ * stdinTemplate — JSONata expr producing the stdin payload object
48
+ *
49
+ * HTTP transports (http:post, http:get, azure-function, firebase, etc.):
50
+ * urlTemplate — JSONata expr producing the final URL string
51
+ * headerTemplate — JSONata expr producing the request headers object
52
+ * bodyTemplate — JSONata expr producing the request body object
48
53
  *
49
54
  * ────────────────────────────────────────────────────────────────────────────
50
55
  * SERIALIZATION
@@ -79,7 +84,8 @@
79
84
  * whatToRun: 'b64:<base64url({"kind":"http-url","value":"https://myfn.azurewebsites.net/api/task-executor"})>',
80
85
  * argsMassaging: {
81
86
  * urlTemplate: "whatToRun & '?op=' & subcommand",
82
- * bodyTemplate: "{ 'inRef': inRef, 'outRef': outRef, 'token': token }",
87
+ * headerTemplate: "{ 'Authorization': 'Bearer ' & token }",
88
+ * bodyTemplate: "{ 'inRef': inRef, 'outRef': outRef }",
83
89
  * },
84
90
  * };
85
91
  *
@@ -126,12 +132,10 @@ interface OutputTransforms {
126
132
  */
127
133
  interface ArgsMassaging {
128
134
  /**
129
- * For local transports ('local-node', 'local-python', 'local-process').
130
135
  * Array of JSONata expressions — each evaluates to one argv string.
131
136
  * The resolved strings are appended after the base command.
132
137
  *
133
138
  * @example
134
- * // Standard task-executor protocol:
135
139
  * cmdTemplate: [
136
140
  * "'run-source-fetch'",
137
141
  * "'--in-ref'", "inRef",
@@ -141,7 +145,15 @@ interface ArgsMassaging {
141
145
  */
142
146
  cmdTemplate?: string[];
143
147
  /**
144
- * For http transports ('http:post', 'http:get').
148
+ * JSONata expression that produces the stdin payload object.
149
+ * Evaluated against the logical args.
150
+ * If omitted, `JSON.stringify(args)` is sent on stdin.
151
+ *
152
+ * @example
153
+ * stdinTemplate: "{ 'X': x, 'multiplier': 2 }"
154
+ */
155
+ stdinTemplate?: string;
156
+ /**
145
157
  * JSONata expression that produces the final URL string.
146
158
  * The input context includes 'whatToRun' (the base URL from the ref)
147
159
  * plus all logical args.
@@ -151,15 +163,24 @@ interface ArgsMassaging {
151
163
  */
152
164
  urlTemplate?: string;
153
165
  /**
154
- * For http transports.
166
+ * JSONata expression that produces the request headers object.
167
+ * Merged on top of the default headers (`Content-Type: application/json`).
168
+ *
169
+ * @example
170
+ * headerTemplate: "{ 'Authorization': 'Bearer ' & token }"
171
+ */
172
+ headerTemplate?: string;
173
+ /**
155
174
  * JSONata expression that produces the request body object.
156
175
  * Evaluated against the logical args object.
157
176
  *
158
177
  * @example
159
- * bodyTemplate: "{ 'inRef': inRef, 'outRef': outRef, 'token': token }"
178
+ * bodyTemplate: "{ 'inRef': inRef, 'outRef': outRef }"
160
179
  */
161
180
  bodyTemplate?: string;
162
181
  }
182
+ type KnownExecutionTransport = 'local-node' | 'local-python' | 'local-process' | 'http:post' | 'http:get' | 'built-in' | 'in-browser';
183
+ type ExecutionTransportKind = KnownExecutionTransport | (string & {});
163
184
  /**
164
185
  * Self-contained, serializable descriptor for invoking a target.
165
186
  *
@@ -178,7 +199,7 @@ interface ExecutionRef {
178
199
  * Transport and runtime kind — determines how whatToRun is invoked.
179
200
  * @see module JSDoc for the full list of supported values.
180
201
  */
181
- howToRun: 'local-node' | 'local-python' | 'local-process' | 'http:post' | 'http:get' | 'built-in' | 'in-browser';
202
+ howToRun: ExecutionTransportKind;
182
203
  /**
183
204
  * Address of the artifact to run. Two valid forms:
184
205
  * - string: must be KindValueRef wire form `b64:<base64url(json)>` (programmatically generated via serializeRef)
@@ -215,7 +236,7 @@ interface ExecutionRef {
215
236
  /**
216
237
  * Opaque executor-specific configuration.
217
238
  * For local transports, base64-encoded and passed as --extra <base64-json> in the argv.
218
- * For HTTP transports, available in argsMassaging.bodyTemplate as the `extra` binding.
239
+ * For HTTP transports, available in argsMassaging templates as the `extra` binding.
219
240
  * Stored with the ref so it travels as a single unit with the invocation descriptor.
220
241
  */
221
242
  extra?: Record<string, unknown>;
@@ -262,4 +283,4 @@ declare function serializeExecutionRef(ref: ExecutionRef): string;
262
283
  */
263
284
  declare function parseExecutionRef(s: string): ExecutionRef;
264
285
 
265
- export { type ArgsMassaging, type ExecutionRef, type ExecutionResult, type OutputTransforms, executionRefFromScriptPath, parseExecutionRef, serializeExecutionRef };
286
+ export { type ArgsMassaging, type ExecutionRef, type ExecutionResult, type ExecutionTransportKind, type KnownExecutionTransport, type OutputTransforms, executionRefFromScriptPath, parseExecutionRef, serializeExecutionRef };
@@ -0,0 +1,3 @@
1
+ var s="b64:";function l(e){let t=new TextEncoder().encode(e),r=globalThis.Buffer,n;if(r)n=r.from(t).toString("base64");else if(typeof btoa=="function"){let o="";for(let a of t)o+=String.fromCharCode(a);n=btoa(o);}else throw new Error("No base64 encoder available in this runtime");return n.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function i(e){return `${s}${l(JSON.stringify(e))}`}function c(e,t){let r;return /\.m?js$/i.test(e)?r="local-node":/\.py$/i.test(e)?r="local-python":r="local-process",{meta:"task-executor",howToRun:r,whatToRun:i({kind:"fs-path",value:e}),...t?{extra:t}:{}}}function f(e){return JSON.stringify(e)}function d(e){let t;try{t=JSON.parse(e);}catch{throw new Error(`parseExecutionRef: invalid JSON \u2014 ${e}`)}if(typeof t!="object"||t===null||typeof t.howToRun!="string"||typeof t.whatToRun!="string")throw new Error(`parseExecutionRef: missing required fields howToRun/whatToRun \u2014 ${e}`);return t}
2
+ export{c as executionRefFromScriptPath,d as parseExecutionRef,f as serializeExecutionRef};//# sourceMappingURL=execution-refs.js.map
3
+ //# sourceMappingURL=execution-refs.js.map