yaml-flow 7.0.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) 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 +5 -5
  4. package/browser/live-cards.js +19 -3307
  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/cli/browser-api/board-live-cards-browser-adapter.js +3 -0
  8. package/{dist/cli → cli}/browser-api/card-store-browser-api.d.ts +1 -2
  9. package/{dist/cli → cli}/browser-api/card-store-browser-api.js +1 -1
  10. package/cli/execution-interface-C_A6WCiK.d.ts +284 -0
  11. package/cli/node/artifacts-store-cli.js +11 -0
  12. package/cli/node/batch-runner-cli.js +3 -0
  13. package/cli/node/board-live-cards-cli.js +15 -0
  14. package/cli/node/card-store-cli.js +8 -0
  15. package/{dist/cli → cli}/node/execution-adapter.d.ts +3 -3
  16. package/cli/node/execution-adapter.js +3 -0
  17. package/{dist/cli → cli}/node/fs-board-adapter.d.ts +24 -11
  18. package/cli/node/fs-board-adapter.js +14 -0
  19. package/{dist/cli → cli}/node/source-cli-task-executor.js +2 -2
  20. package/cli/node/step-machine-cli.d.ts +7 -0
  21. package/cli/node/step-machine-cli.js +5 -0
  22. package/{dist/board-live-cards-public-CW5074xr.d.cts → cli/types-CziUxkiv.d.ts} +69 -7
  23. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.config/card-store-ref.json +1 -0
  24. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.config/chat-handler.json +1 -0
  25. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.config/outputs-store-ref.json +1 -0
  26. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.config/task-executor.json +1 -0
  27. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.state-snapshot/board/graph.json +29 -0
  28. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.state-snapshot/board/lastJournalProcessedId.json +1 -0
  29. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime-out/.outputs/status.json +25 -0
  30. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/cards/card-market-prices/computed_values.json +67 -0
  31. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/cards/card-portfolio/computed_values.json +1 -0
  32. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/cards/card-portfolio-value/computed_values.json +52 -0
  33. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/data-objects/holdings.json +22 -0
  34. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/data-objects/positions.json +46 -0
  35. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/data-objects/quotes.json +35 -0
  36. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/status.json +113 -0
  37. package/examples/{example-board/cards/card-market-prices.json → board/cards/cardT-market-prices.json} +2 -2
  38. package/examples/{example-board/cards/card-portfolio.json → board/cards/cardT-portfolio.json} +3 -13
  39. package/examples/{example-board → board}/demo-server-config.json +0 -1
  40. package/examples/{example-board → board}/demo-server.js +70 -72
  41. package/examples/{example-board → board}/demo-shell-with-server.html +3 -3
  42. package/examples/{example-board → board}/demo-task-executor.js +75 -32
  43. package/examples/board/gandalf-cards/card-source-kinds.json +36 -0
  44. package/examples/board/gandalf-cards/cards/_index.json +7 -0
  45. package/examples/board/gandalf-cards/cards/card-source-kinds.json +64 -0
  46. package/examples/board/source-def-flows/copilot.flow.json +33 -0
  47. package/examples/board/source-def-flows/mock.flow.json +35 -0
  48. package/examples/board/source-def-flows/url-list.flow.json +33 -0
  49. package/examples/board/source-def-flows/url.flow.json +33 -0
  50. package/examples/board/source-def-flows/workiq.flow.json +34 -0
  51. package/examples/board/source-def-handlers/copilot-source-handler.js +141 -0
  52. package/examples/board/source-def-handlers/http-source-handler.js +145 -0
  53. package/examples/board/source_def_flows.json +249 -0
  54. package/examples/board/test/demo-http-test.js +317 -0
  55. package/examples/{example-board → board-local}/demo-shell-localstorage.html +4 -4
  56. package/examples/{browser/boards/portfolio-tracker → portfolio-tracker/handlers}/portfolio-tracker-fetch-prices.js +1 -1
  57. package/examples/{browser/boards/portfolio-tracker/portfolio-tracker-public.js → portfolio-tracker/portfolio-tracker.js} +11 -14
  58. package/examples/{browser/boards/portfolio-tracker → portfolio-tracker/test}/portfolio-t4.js +32 -50
  59. package/lib/artifacts-store-lib-public-BABrgFkV.d.ts +119 -0
  60. package/lib/artifacts-store-lib-public-DGa8BpJT.d.cts +119 -0
  61. package/lib/artifacts-store-public.cjs +2 -0
  62. package/lib/artifacts-store-public.d.cts +5 -0
  63. package/lib/artifacts-store-public.d.ts +5 -0
  64. package/lib/artifacts-store-public.js +2 -0
  65. package/lib/board-live-cards-node.cjs +14 -0
  66. package/{dist/cli/node/execution-adapter.d.cts → lib/board-live-cards-node.d.cts} +45 -85
  67. package/lib/board-live-cards-node.d.ts +134 -0
  68. package/lib/board-live-cards-node.js +14 -0
  69. package/lib/board-live-cards-public-BnmRAbQV.d.cts +383 -0
  70. package/{dist/board-live-cards-public-hnZo0mAf.d.ts → lib/board-live-cards-public-CsmYrvpd.d.ts} +142 -77
  71. package/lib/board-live-cards-public.cjs +3 -0
  72. package/lib/board-live-cards-public.d.cts +4 -0
  73. package/lib/board-live-cards-public.d.ts +4 -0
  74. package/lib/board-live-cards-public.js +3 -0
  75. package/lib/board-live-cards-server-runtime.cjs +9 -0
  76. package/lib/board-live-cards-server-runtime.d.cts +6 -0
  77. package/lib/board-live-cards-server-runtime.d.ts +6 -0
  78. package/lib/board-live-cards-server-runtime.js +9 -0
  79. package/lib/board-livegraph-runtime/index.cjs +3 -0
  80. package/{dist → lib}/board-livegraph-runtime/index.d.cts +1 -2
  81. package/{dist → lib}/board-livegraph-runtime/index.d.ts +1 -2
  82. package/lib/board-livegraph-runtime/index.js +3 -0
  83. package/lib/board-worker-adapter.cjs +10 -0
  84. package/{dist/storage-refs.d.cts → lib/board-worker-adapter.d.cts} +5 -5
  85. package/{dist/storage-refs.d.ts → lib/board-worker-adapter.d.ts} +5 -5
  86. package/lib/board-worker-adapter.js +10 -0
  87. package/{dist → lib}/card-compute/index.cjs +1 -1
  88. package/{dist → lib}/card-compute/index.js +1 -1
  89. package/lib/card-store-public.cjs +2 -0
  90. package/lib/card-store-public.d.cts +61 -0
  91. package/lib/card-store-public.d.ts +61 -0
  92. package/lib/card-store-public.js +2 -0
  93. package/lib/card-validation.cjs +10 -0
  94. package/lib/card-validation.d.cts +35 -0
  95. package/lib/card-validation.d.ts +35 -0
  96. package/lib/card-validation.js +10 -0
  97. package/{dist/constants-oCEbNpul.d.ts → lib/constants-BPVLb3Es.d.ts} +1 -1
  98. package/{dist/constants-BzZUyYlp.d.cts → lib/constants-DXxsRN9y.d.cts} +1 -1
  99. package/{dist → lib}/continuous-event-graph/index.cjs +2 -2
  100. package/{dist → lib}/continuous-event-graph/index.d.cts +3 -5
  101. package/{dist → lib}/continuous-event-graph/index.d.ts +3 -5
  102. package/{dist → lib}/continuous-event-graph/index.js +2 -2
  103. package/{dist → lib}/event-graph/index.d.cts +2 -2
  104. package/{dist → lib}/event-graph/index.d.ts +2 -2
  105. package/lib/execution-refs.cjs +3 -0
  106. package/{dist → lib}/execution-refs.d.cts +38 -14
  107. package/{dist → lib}/execution-refs.d.ts +38 -14
  108. package/lib/execution-refs.js +3 -0
  109. package/lib/index.cjs +25 -0
  110. package/{dist → lib}/index.d.cts +7 -8
  111. package/{dist → lib}/index.d.ts +7 -8
  112. package/lib/index.js +25 -0
  113. package/{dist/live-cards-bridge-BXbVTsna.d.cts → lib/live-cards-bridge-DC_ZU0eS.d.ts} +134 -3
  114. package/{dist/live-cards-bridge-Ds28XR15.d.ts → lib/live-cards-bridge-b25aAVvE.d.cts} +134 -3
  115. package/lib/loader-CuuLjxVA.d.cts +42 -0
  116. package/lib/loader-Zborm2pq.d.ts +42 -0
  117. package/lib/server-runtime/index.cjs +9 -0
  118. package/{dist → lib}/server-runtime/index.d.cts +4 -4
  119. package/{dist → lib}/server-runtime/index.d.ts +4 -4
  120. package/lib/server-runtime/index.js +9 -0
  121. package/lib/step-machine/index.d.cts +64 -0
  122. package/lib/step-machine/index.d.ts +64 -0
  123. package/lib/step-machine-public/index.cjs +5 -0
  124. package/{dist → lib}/step-machine-public/index.d.cts +21 -1
  125. package/{dist → lib}/step-machine-public/index.d.ts +21 -1
  126. package/lib/step-machine-public/index.js +5 -0
  127. package/lib/storage-interface-BhAON-gW.d.cts +84 -0
  128. package/lib/storage-interface-BhAON-gW.d.ts +84 -0
  129. package/lib/stores/index.cjs +3 -0
  130. package/lib/stores/index.d.cts +4 -0
  131. package/lib/stores/index.d.ts +4 -0
  132. package/lib/stores/index.js +3 -0
  133. package/lib/stores/kv.cjs +3 -0
  134. package/lib/stores/kv.d.cts +32 -0
  135. package/lib/stores/kv.d.ts +32 -0
  136. package/lib/stores/kv.js +3 -0
  137. package/{dist → lib}/stores/memory.d.cts +1 -1
  138. package/{dist → lib}/stores/memory.d.ts +1 -1
  139. package/{dist/types-B1ZRa4aI.d.ts → lib/types-CBxkYuLY.d.ts} +2 -1
  140. package/{dist/types-ycun84cq.d.cts → lib/types-DQ1bKuB1.d.cts} +11 -0
  141. package/{dist/types-ycun84cq.d.ts → lib/types-DQ1bKuB1.d.ts} +11 -0
  142. package/{dist/types-BxEFcVK9.d.cts → lib/types-DkFvgxwq.d.cts} +2 -1
  143. package/package.json +79 -119
  144. package/board-live-cards-cli.js +0 -37
  145. package/browser/board-livecards-client.js.map +0 -1
  146. package/browser/board-livecards-localstorage.js.map +0 -1
  147. package/browser/board-livegraph-engine.js +0 -3
  148. package/browser/board-livegraph-engine.js.map +0 -1
  149. package/browser/card-compute.js +0 -266
  150. package/browser/compute-jsonata.js.map +0 -1
  151. package/card-store.js +0 -37
  152. package/dist/batch/index.cjs.map +0 -1
  153. package/dist/batch/index.js.map +0 -1
  154. package/dist/board-live-cards-lib-Bg6EvCo5.d.cts +0 -136
  155. package/dist/board-live-cards-lib-jM2uYG1v.d.ts +0 -136
  156. package/dist/board-livegraph-runtime/index.cjs +0 -3
  157. package/dist/board-livegraph-runtime/index.cjs.map +0 -1
  158. package/dist/board-livegraph-runtime/index.js +0 -3
  159. package/dist/board-livegraph-runtime/index.js.map +0 -1
  160. package/dist/card-compute/index.cjs.map +0 -1
  161. package/dist/card-compute/index.js.map +0 -1
  162. package/dist/cli/browser-api/board-live-cards-browser-adapter.cjs +0 -3
  163. package/dist/cli/browser-api/board-live-cards-browser-adapter.cjs.map +0 -1
  164. package/dist/cli/browser-api/board-live-cards-browser-adapter.d.cts +0 -37
  165. package/dist/cli/browser-api/board-live-cards-browser-adapter.js +0 -3
  166. package/dist/cli/browser-api/board-live-cards-browser-adapter.js.map +0 -1
  167. package/dist/cli/browser-api/card-store-browser-api.cjs +0 -2
  168. package/dist/cli/browser-api/card-store-browser-api.cjs.map +0 -1
  169. package/dist/cli/browser-api/card-store-browser-api.d.cts +0 -26
  170. package/dist/cli/browser-api/card-store-browser-api.js.map +0 -1
  171. package/dist/cli/node/artifacts-store-cli.cjs +0 -11
  172. package/dist/cli/node/artifacts-store-cli.cjs.map +0 -1
  173. package/dist/cli/node/artifacts-store-cli.d.cts +0 -8
  174. package/dist/cli/node/artifacts-store-cli.js +0 -11
  175. package/dist/cli/node/artifacts-store-cli.js.map +0 -1
  176. package/dist/cli/node/board-live-cards-cli.cjs +0 -15
  177. package/dist/cli/node/board-live-cards-cli.cjs.map +0 -1
  178. package/dist/cli/node/board-live-cards-cli.d.cts +0 -20
  179. package/dist/cli/node/board-live-cards-cli.js +0 -15
  180. package/dist/cli/node/board-live-cards-cli.js.map +0 -1
  181. package/dist/cli/node/card-store-cli.cjs +0 -8
  182. package/dist/cli/node/card-store-cli.cjs.map +0 -1
  183. package/dist/cli/node/card-store-cli.d.cts +0 -15
  184. package/dist/cli/node/card-store-cli.js +0 -8
  185. package/dist/cli/node/card-store-cli.js.map +0 -1
  186. package/dist/cli/node/execution-adapter.cjs +0 -3
  187. package/dist/cli/node/execution-adapter.cjs.map +0 -1
  188. package/dist/cli/node/execution-adapter.js +0 -3
  189. package/dist/cli/node/execution-adapter.js.map +0 -1
  190. package/dist/cli/node/fs-board-adapter.cjs +0 -14
  191. package/dist/cli/node/fs-board-adapter.cjs.map +0 -1
  192. package/dist/cli/node/fs-board-adapter.d.cts +0 -204
  193. package/dist/cli/node/fs-board-adapter.js +0 -14
  194. package/dist/cli/node/fs-board-adapter.js.map +0 -1
  195. package/dist/cli/node/source-cli-task-executor.cjs +0 -11
  196. package/dist/cli/node/source-cli-task-executor.cjs.map +0 -1
  197. package/dist/cli/node/source-cli-task-executor.js.map +0 -1
  198. package/dist/config/index.cjs.map +0 -1
  199. package/dist/config/index.js.map +0 -1
  200. package/dist/continuous-event-graph/index.cjs.map +0 -1
  201. package/dist/continuous-event-graph/index.js.map +0 -1
  202. package/dist/event-graph/index.cjs.map +0 -1
  203. package/dist/event-graph/index.js.map +0 -1
  204. package/dist/execution-refs.cjs +0 -3
  205. package/dist/execution-refs.cjs.map +0 -1
  206. package/dist/execution-refs.js +0 -3
  207. package/dist/execution-refs.js.map +0 -1
  208. package/dist/index.cjs +0 -30
  209. package/dist/index.cjs.map +0 -1
  210. package/dist/index.js +0 -30
  211. package/dist/index.js.map +0 -1
  212. package/dist/inference/index.cjs +0 -7
  213. package/dist/inference/index.cjs.map +0 -1
  214. package/dist/inference/index.d.cts +0 -229
  215. package/dist/inference/index.d.ts +0 -229
  216. package/dist/inference/index.js +0 -7
  217. package/dist/inference/index.js.map +0 -1
  218. package/dist/server-runtime/index.cjs +0 -9
  219. package/dist/server-runtime/index.cjs.map +0 -1
  220. package/dist/server-runtime/index.js +0 -9
  221. package/dist/server-runtime/index.js.map +0 -1
  222. package/dist/step-machine/index.cjs.map +0 -1
  223. package/dist/step-machine/index.d.cts +0 -102
  224. package/dist/step-machine/index.d.ts +0 -102
  225. package/dist/step-machine/index.js.map +0 -1
  226. package/dist/step-machine-public/index.cjs +0 -2
  227. package/dist/step-machine-public/index.cjs.map +0 -1
  228. package/dist/step-machine-public/index.js +0 -2
  229. package/dist/step-machine-public/index.js.map +0 -1
  230. package/dist/storage-refs.cjs +0 -10
  231. package/dist/storage-refs.cjs.map +0 -1
  232. package/dist/storage-refs.js +0 -10
  233. package/dist/storage-refs.js.map +0 -1
  234. package/dist/stores/file.cjs +0 -2
  235. package/dist/stores/file.cjs.map +0 -1
  236. package/dist/stores/file.d.cts +0 -36
  237. package/dist/stores/file.d.ts +0 -36
  238. package/dist/stores/file.js +0 -2
  239. package/dist/stores/file.js.map +0 -1
  240. package/dist/stores/index.cjs +0 -2
  241. package/dist/stores/index.cjs.map +0 -1
  242. package/dist/stores/index.d.cts +0 -4
  243. package/dist/stores/index.d.ts +0 -4
  244. package/dist/stores/index.js +0 -2
  245. package/dist/stores/index.js.map +0 -1
  246. package/dist/stores/localStorage.cjs +0 -2
  247. package/dist/stores/localStorage.cjs.map +0 -1
  248. package/dist/stores/localStorage.d.cts +0 -34
  249. package/dist/stores/localStorage.d.ts +0 -34
  250. package/dist/stores/localStorage.js +0 -2
  251. package/dist/stores/localStorage.js.map +0 -1
  252. package/dist/stores/memory.cjs.map +0 -1
  253. package/dist/stores/memory.js.map +0 -1
  254. package/dist/types-CHSdoAAA.d.cts +0 -135
  255. package/dist/types-CoW0gQl3.d.ts +0 -135
  256. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-fetch-prices.py +0 -201
  257. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-http-test.js +0 -357
  258. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-inference-adapter.js +0 -196
  259. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-server.js +0 -300
  260. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-server.py +0 -617
  261. package/examples/browser/boards/portfolio-tracker/portfolio-tracker.py +0 -366
  262. package/examples/browser/livecards-browser/index.html +0 -41
  263. package/examples/browser/step-machine-browser/index.html +0 -367
  264. package/examples/cli/step-machine-cli/portfolio-tracker/--base-ref/.runtime-out +0 -1
  265. package/examples/cli/step-machine-cli/portfolio-tracker/--base-ref/board-graph.json +0 -32
  266. package/examples/cli/step-machine-cli/portfolio-tracker/cards/holdings-table.json +0 -22
  267. package/examples/cli/step-machine-cli/portfolio-tracker/cards/portfolio-form.json +0 -43
  268. package/examples/cli/step-machine-cli/portfolio-tracker/cards/portfolio-value.json +0 -15
  269. package/examples/cli/step-machine-cli/portfolio-tracker/cards/price-fetch.json +0 -15
  270. package/examples/cli/step-machine-cli/portfolio-tracker/fetch-prices.js +0 -48
  271. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/_board-cli.js +0 -125
  272. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/add-cards-cli.js +0 -32
  273. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/init-board-cli.js +0 -26
  274. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/poll-status-cli.js +0 -49
  275. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/reset-board-dir-cli.js +0 -25
  276. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/retrigger-cli.js +0 -23
  277. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/status-cli.js +0 -21
  278. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/update-holdings-cli.js +0 -38
  279. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/wait-completed-cli.js +0 -48
  280. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/write-prices-cli.js +0 -31
  281. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/_board_pycli.py +0 -107
  282. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/add-cards.py +0 -51
  283. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/init-board.py +0 -45
  284. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/poll-status.py +0 -71
  285. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/reset-board-dir.py +0 -36
  286. package/examples/cli/step-machine-cli/portfolio-tracker/inline-python-demo.flow.yaml +0 -26
  287. package/examples/cli/step-machine-cli/portfolio-tracker/inline-python-handlers.py +0 -39
  288. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker-pycli.flow.yaml +0 -80
  289. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker.flow.yaml +0 -76
  290. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker.input.json +0 -44
  291. package/examples/cli/step-machine-cli/portfolio-tracker/run-inline-python-demo-pycli.py +0 -43
  292. package/examples/cli/step-machine-cli/portfolio-tracker/run-portfolio-tracker-pycli.py +0 -77
  293. package/examples/cli/step-machine-cli/portfolio-tracker/run-portfolio-tracker.bat +0 -28
  294. package/examples/cli/step-machine-demo/jsonata-init-board-cli.js +0 -31
  295. package/examples/cli/step-machine-demo/jsonata-init-board.flow.yaml +0 -54
  296. package/examples/cli/step-machine-demo/one-step-cli-only.flow.yaml +0 -21
  297. package/examples/cli/step-machine-demo/step-cli-echo-y.js +0 -15
  298. package/examples/cli/step-machine-demo/step2-double-cli.js +0 -33
  299. package/examples/cli/step-machine-demo/two-step-math.flow.yaml +0 -93
  300. package/examples/cli/step-machine-demo/two-step-mixed.flow.yaml +0 -43
  301. package/examples/example-board/agent-instructions-cardlayout.md +0 -56
  302. package/examples/example-board/agent-instructions.md +0 -834
  303. package/examples/example-board/cards/_index.json +0 -47
  304. package/examples/example-board/demo-shell.html +0 -63
  305. package/examples/index.html +0 -785
  306. package/examples/npm-libs/batch/batch-step-machine.ts +0 -121
  307. package/examples/npm-libs/continuous-event-graph/live-cards-board.ts +0 -215
  308. package/examples/npm-libs/continuous-event-graph/live-portfolio-dashboard.ts +0 -555
  309. package/examples/npm-libs/continuous-event-graph/portfolio-tracker.ts +0 -287
  310. package/examples/npm-libs/continuous-event-graph/reactive-monitoring.ts +0 -265
  311. package/examples/npm-libs/continuous-event-graph/reactive-pipeline.ts +0 -168
  312. package/examples/npm-libs/continuous-event-graph/soc-incident-board.ts +0 -287
  313. package/examples/npm-libs/continuous-event-graph/stock-dashboard.ts +0 -229
  314. package/examples/npm-libs/event-graph/ci-cd-pipeline.ts +0 -243
  315. package/examples/npm-libs/event-graph/executor-diamond.ts +0 -165
  316. package/examples/npm-libs/event-graph/executor-pipeline.ts +0 -161
  317. package/examples/npm-libs/event-graph/research-pipeline.ts +0 -137
  318. package/examples/npm-libs/flows/ai-conversation.yaml +0 -116
  319. package/examples/npm-libs/flows/order-processing.yaml +0 -143
  320. package/examples/npm-libs/flows/simple-greeting.yaml +0 -54
  321. package/examples/npm-libs/graph-of-graphs/multi-stage-etl.ts +0 -307
  322. package/examples/npm-libs/graph-of-graphs/url-processing-pipeline.ts +0 -254
  323. package/examples/npm-libs/inference/azure-deployment.ts +0 -149
  324. package/examples/npm-libs/inference/copilot-cli.ts +0 -138
  325. package/examples/npm-libs/inference/data-pipeline.ts +0 -145
  326. package/examples/npm-libs/inference/pluggable-adapters.ts +0 -254
  327. package/examples/npm-libs/node/ai-conversation.ts +0 -195
  328. package/examples/npm-libs/node/simple-greeting.ts +0 -101
  329. package/examples/step-machine-cli/portfolio-tracker/cards/holdings-table.json +0 -22
  330. package/examples/step-machine-cli/portfolio-tracker/cards/portfolio-form.json +0 -43
  331. package/examples/step-machine-cli/portfolio-tracker/cards/portfolio-value.json +0 -15
  332. package/examples/step-machine-cli/portfolio-tracker/cards/price-fetch.json +0 -15
  333. package/examples/step-machine-cli/portfolio-tracker/fetch-prices.js +0 -48
  334. package/examples/step-machine-cli/portfolio-tracker/handlers/_board-cli.js +0 -57
  335. package/examples/step-machine-cli/portfolio-tracker/handlers/add-cards-cli.js +0 -27
  336. package/examples/step-machine-cli/portfolio-tracker/handlers/init-board-cli.js +0 -25
  337. package/examples/step-machine-cli/portfolio-tracker/handlers/reset-board-dir-cli.js +0 -29
  338. package/examples/step-machine-cli/portfolio-tracker/handlers/retrigger-cli.js +0 -27
  339. package/examples/step-machine-cli/portfolio-tracker/handlers/status-cli.js +0 -25
  340. package/examples/step-machine-cli/portfolio-tracker/handlers/update-holdings-cli.js +0 -37
  341. package/examples/step-machine-cli/portfolio-tracker/handlers/wait-completed-cli.js +0 -53
  342. package/examples/step-machine-cli/portfolio-tracker/handlers/write-prices-cli.js +0 -35
  343. package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker-task-executor.cjs +0 -96
  344. package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker.flow.yaml +0 -227
  345. package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker.input.json +0 -38
  346. package/examples/step-machine-cli/portfolio-tracker/run-portfolio-tracker.bat +0 -28
  347. package/step-machine-cli.js +0 -407
  348. /package/{dist/board-livegraph-runtime → cli/browser-api}/jsonata-sync.cjs +0 -0
  349. /package/{dist/cli → cli}/node/artifacts-store-cli.d.ts +0 -0
  350. /package/{dist/cli/node/source-cli-task-executor.d.cts → cli/node/batch-runner-cli.d.ts} +0 -0
  351. /package/{dist/cli → cli}/node/board-live-cards-cli.d.ts +0 -0
  352. /package/{dist/cli → cli}/node/card-store-cli.d.ts +0 -0
  353. /package/{dist/card-compute → cli/node}/jsonata-sync.cjs +0 -0
  354. /package/{dist/cli → cli}/node/source-cli-task-executor.d.ts +0 -0
  355. /package/examples/{example-board → board}/cards/card-concentration.json +0 -0
  356. /package/examples/{example-board → board}/cards/card-my-identity.json +0 -0
  357. /package/examples/{example-board → board}/cards/card-portfolio-action.json +0 -0
  358. /package/examples/{example-board → board}/cards/card-portfolio-intelligence.json +0 -0
  359. /package/examples/{example-board → board}/cards/card-portfolio-risks.json +0 -0
  360. /package/examples/{example-board → board}/cards/card-rebalance-impact.json +0 -0
  361. /package/examples/{example-board → board}/cards/card-rebalance-sim.json +0 -0
  362. /package/examples/{example-board/cards/card-portfolio-value.json → board/cards/cardT-portfolio-value.json} +0 -0
  363. /package/examples/{example-board → board}/demo-chat-handler.js +0 -0
  364. /package/examples/{example-board → board}/scripts/copilot_wrapper.bat +0 -0
  365. /package/examples/{example-board → board}/scripts/copilot_wrapper_helper.ps1 +0 -0
  366. /package/examples/{example-board → board}/scripts/workiq_wrapper.mjs +0 -0
  367. /package/examples/{browser/boards/portfolio-tracker → board/test}/portfolio-tracker-sse-worker.js +0 -0
  368. /package/{dist → lib}/batch/index.cjs +0 -0
  369. /package/{dist → lib}/batch/index.d.cts +0 -0
  370. /package/{dist → lib}/batch/index.d.ts +0 -0
  371. /package/{dist → lib}/batch/index.js +0 -0
  372. /package/{dist/cli/browser-api → lib/board-livegraph-runtime}/jsonata-sync.cjs +0 -0
  373. /package/{dist → lib}/card-compute/index.d.cts +0 -0
  374. /package/{dist → lib}/card-compute/index.d.ts +0 -0
  375. /package/{dist/cli/node → lib/card-compute}/jsonata-sync.cjs +0 -0
  376. /package/{dist → lib}/config/index.cjs +0 -0
  377. /package/{dist → lib}/config/index.d.cts +0 -0
  378. /package/{dist → lib}/config/index.d.ts +0 -0
  379. /package/{dist → lib}/config/index.js +0 -0
  380. /package/{dist → lib}/continuous-event-graph/jsonata-sync.cjs +0 -0
  381. /package/{dist → lib}/event-graph/index.cjs +0 -0
  382. /package/{dist → lib}/event-graph/index.js +0 -0
  383. /package/{dist → lib}/jsonata-sync.cjs +0 -0
  384. /package/{dist → lib}/server-runtime/jsonata-sync.cjs +0 -0
  385. /package/{dist → lib}/step-machine/index.cjs +0 -0
  386. /package/{dist → lib}/step-machine/index.js +0 -0
  387. /package/{dist → lib}/step-machine-public/jsonata-sync.cjs +0 -0
  388. /package/{dist → lib}/stores/memory.cjs +0 -0
  389. /package/{dist → lib}/stores/memory.js +0 -0
  390. /package/{dist → lib}/types-BBhqYGhE.d.cts +0 -0
  391. /package/{dist → lib}/types-BBhqYGhE.d.ts +0 -0
  392. /package/{dist → lib}/validate-BAVzUJWa.d.ts +0 -0
  393. /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 r=new TextEncoder().encode(e),t=globalThis.Buffer,n;if(t)n=t.from(r).toString("base64");else if(typeof btoa=="function"){let o="";for(let a of r)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,r){let t;return /\.m?js$/i.test(e)?t="local-node":/\.py$/i.test(e)?t="local-python":t="local-process",{meta:"task-executor",howToRun:t,whatToRun:i({kind:"fs-path",value:e}),...r?{extra:r}:{}}}function f(e){return JSON.stringify(e)}function d(e){let r;try{r=JSON.parse(e);}catch{throw new Error(`parseExecutionRef: invalid JSON \u2014 ${e}`)}if(typeof r!="object"||r===null||typeof r.howToRun!="string"||typeof r.whatToRun!="string")throw new Error(`parseExecutionRef: missing required fields howToRun/whatToRun \u2014 ${e}`);return r}
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,12 +163,19 @@ 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
  }
@@ -180,12 +199,17 @@ interface ExecutionRef {
180
199
  */
181
200
  howToRun: 'local-node' | 'local-python' | 'local-process' | 'http:post' | 'http:get' | 'built-in' | 'in-browser';
182
201
  /**
183
- * Address of the artifact to run, in KindValueRef wire form (b64:<base64url(json)>).
202
+ * Address of the artifact to run. Two valid forms:
203
+ * - string: must be KindValueRef wire form `b64:<base64url(json)>` (programmatically generated via serializeRef)
204
+ * - object: `{ kind: string; value: string }` plain object (human-authored flow files — normalized by the handler factory)
184
205
  * @example 'b64:<base64url({"kind":"fs-path","value":"/dist/cli/source-cli-task-executor.js"})>'
185
- * @example 'b64:<base64url({"kind":"http-url","value":"https://fn.example.com/api/executor"})>'
186
- * @example 'b64:<base64url({"kind":"built-in","value":"source-cli-task-executor"})>'
206
+ * @example { kind: 'http-url', value: '/api/workiq/ask' }
207
+ * @example { kind: 'fs-path', value: './my-handler.js' }
187
208
  */
188
- whatToRun: string;
209
+ whatToRun: string | {
210
+ kind: string;
211
+ value: string;
212
+ };
189
213
  /**
190
214
  * Optional JSONata-based mapping from logical args → physical call shape.
191
215
  * When omitted, the adapter applies its default protocol for the howToRun kind.
@@ -210,7 +234,7 @@ interface ExecutionRef {
210
234
  /**
211
235
  * Opaque executor-specific configuration.
212
236
  * For local transports, base64-encoded and passed as --extra <base64-json> in the argv.
213
- * For HTTP transports, available in argsMassaging.bodyTemplate as the `extra` binding.
237
+ * For HTTP transports, available in argsMassaging templates as the `extra` binding.
214
238
  * Stored with the ref so it travels as a single unit with the invocation descriptor.
215
239
  */
216
240
  extra?: Record<string, unknown>;
@@ -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,12 +163,19 @@ 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
  }
@@ -180,12 +199,17 @@ interface ExecutionRef {
180
199
  */
181
200
  howToRun: 'local-node' | 'local-python' | 'local-process' | 'http:post' | 'http:get' | 'built-in' | 'in-browser';
182
201
  /**
183
- * Address of the artifact to run, in KindValueRef wire form (b64:<base64url(json)>).
202
+ * Address of the artifact to run. Two valid forms:
203
+ * - string: must be KindValueRef wire form `b64:<base64url(json)>` (programmatically generated via serializeRef)
204
+ * - object: `{ kind: string; value: string }` plain object (human-authored flow files — normalized by the handler factory)
184
205
  * @example 'b64:<base64url({"kind":"fs-path","value":"/dist/cli/source-cli-task-executor.js"})>'
185
- * @example 'b64:<base64url({"kind":"http-url","value":"https://fn.example.com/api/executor"})>'
186
- * @example 'b64:<base64url({"kind":"built-in","value":"source-cli-task-executor"})>'
206
+ * @example { kind: 'http-url', value: '/api/workiq/ask' }
207
+ * @example { kind: 'fs-path', value: './my-handler.js' }
187
208
  */
188
- whatToRun: string;
209
+ whatToRun: string | {
210
+ kind: string;
211
+ value: string;
212
+ };
189
213
  /**
190
214
  * Optional JSONata-based mapping from logical args → physical call shape.
191
215
  * When omitted, the adapter applies its default protocol for the howToRun kind.
@@ -210,7 +234,7 @@ interface ExecutionRef {
210
234
  /**
211
235
  * Opaque executor-specific configuration.
212
236
  * For local transports, base64-encoded and passed as --extra <base64-json> in the argv.
213
- * For HTTP transports, available in argsMassaging.bodyTemplate as the `extra` binding.
237
+ * For HTTP transports, available in argsMassaging templates as the `extra` binding.
214
238
  * Stored with the ref so it travels as a single unit with the invocation descriptor.
215
239
  */
216
240
  extra?: Record<string, unknown>;
@@ -0,0 +1,3 @@
1
+ var s="b64:";function l(e){let r=new TextEncoder().encode(e),t=globalThis.Buffer,n;if(t)n=t.from(r).toString("base64");else if(typeof btoa=="function"){let o="";for(let a of r)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,r){let t;return /\.m?js$/i.test(e)?t="local-node":/\.py$/i.test(e)?t="local-python":t="local-process",{meta:"task-executor",howToRun:t,whatToRun:i({kind:"fs-path",value:e}),...r?{extra:r}:{}}}function f(e){return JSON.stringify(e)}function d(e){let r;try{r=JSON.parse(e);}catch{throw new Error(`parseExecutionRef: invalid JSON \u2014 ${e}`)}if(typeof r!="object"||r===null||typeof r.howToRun!="string"||typeof r.whatToRun!="string")throw new Error(`parseExecutionRef: missing required fields howToRun/whatToRun \u2014 ${e}`);return r}
2
+ export{c as executionRefFromScriptPath,d as parseExecutionRef,f as serializeExecutionRef};//# sourceMappingURL=execution-refs.js.map
3
+ //# sourceMappingURL=execution-refs.js.map