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