yaml-flow 7.1.0 → 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/browser/asset-integrity.json +8 -4
  2. package/browser/board-livecards-client.js +1 -1
  3. package/browser/board-livecards-localstorage.js +4 -4
  4. package/browser/live-cards.js +19 -3309
  5. package/cli/board-live-cards-lib-tjYsPt5U.d.ts +321 -0
  6. package/{dist/cli → cli}/browser-api/board-live-cards-browser-adapter.d.ts +3 -5
  7. package/{dist/cli → cli}/browser-api/card-store-browser-api.d.ts +1 -2
  8. package/{dist/cli → cli}/browser-api/card-store-browser-api.js +1 -1
  9. package/cli/execution-interface-ftO1W7Po.d.ts +286 -0
  10. package/{dist/cli → cli}/node/artifacts-store-cli.js +2 -2
  11. package/cli/node/batch-runner-cli.js +3 -0
  12. package/cli/node/board-live-cards-cli.js +15 -0
  13. package/{dist/cli → cli}/node/card-store-cli.js +1 -1
  14. package/{dist/cli → cli}/node/execution-adapter.d.ts +49 -4
  15. package/cli/node/execution-adapter.js +3 -0
  16. package/{dist/cli → cli}/node/fs-board-adapter.d.ts +24 -11
  17. package/cli/node/fs-board-adapter.js +14 -0
  18. package/cli/node/step-machine-cli.d.ts +7 -0
  19. package/cli/node/step-machine-cli.js +5 -0
  20. package/{dist/board-live-cards-public-5n1-syA3.d.cts → cli/types-C2YQXFwo.d.ts} +68 -5
  21. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/gandalf-runtime/.config/card-store-ref.json +1 -0
  22. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/gandalf-runtime/.config/chat-handler.json +1 -0
  23. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/gandalf-runtime/.config/outputs-store-ref.json +1 -0
  24. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/gandalf-runtime/.config/task-executor.json +1 -0
  25. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/gandalf-runtime/.state-snapshot/board/graph.json +29 -0
  26. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/gandalf-runtime/.state-snapshot/board/lastJournalProcessedId.json +1 -0
  27. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/gandalf-runtime-out/.outputs/status.json +25 -0
  28. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/runtime-out/.outputs/cards/card-market-prices/computed_values.json +67 -0
  29. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/runtime-out/.outputs/cards/card-portfolio/computed_values.json +1 -0
  30. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/runtime-out/.outputs/cards/card-portfolio-value/computed_values.json +52 -0
  31. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/runtime-out/.outputs/data-objects/holdings.json +22 -0
  32. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/runtime-out/.outputs/data-objects/positions.json +46 -0
  33. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/runtime-out/.outputs/data-objects/quotes.json +35 -0
  34. package/examples/board/.demo-setup/run-1778665078572-3466-a8ay4k/board-default/runtime-out/.outputs/status.json +113 -0
  35. package/examples/{example-board → board}/demo-server-config.json +0 -1
  36. package/examples/{example-board → board}/demo-server.js +23 -48
  37. package/examples/{example-board → board}/demo-shell-with-server.html +3 -3
  38. package/examples/{example-board → board}/demo-task-executor.js +71 -24
  39. package/examples/board/gandalf-cards/card-source-kinds.json +36 -0
  40. package/examples/board/gandalf-cards/cards/_index.json +7 -0
  41. package/examples/board/gandalf-cards/cards/card-source-kinds.json +64 -0
  42. package/examples/board/source-def-flows/copilot.flow.json +33 -0
  43. package/examples/board/source-def-flows/mock.flow.json +35 -0
  44. package/examples/board/source-def-flows/url-list.flow.json +33 -0
  45. package/examples/board/source-def-flows/url.flow.json +33 -0
  46. package/examples/board/source-def-flows/workiq.flow.json +34 -0
  47. package/examples/board/source-def-handlers/copilot-source-handler.js +141 -0
  48. package/examples/board/source-def-handlers/http-source-handler.js +145 -0
  49. package/examples/board/source_def_flows.json +249 -0
  50. package/examples/board/test/demo-http-test.js +317 -0
  51. package/examples/{example-board → board-local}/demo-shell-localstorage.html +4 -4
  52. package/examples/{browser/boards/portfolio-tracker → portfolio-tracker/handlers}/portfolio-tracker-fetch-prices.js +1 -1
  53. package/examples/{browser/boards/portfolio-tracker/portfolio-tracker-public.js → portfolio-tracker/portfolio-tracker.js} +11 -14
  54. package/examples/{browser/boards/portfolio-tracker → portfolio-tracker/test}/portfolio-t4.js +32 -50
  55. package/lib/artifacts-store-lib-public-BABrgFkV.d.ts +119 -0
  56. package/lib/artifacts-store-lib-public-DGa8BpJT.d.cts +119 -0
  57. package/lib/artifacts-store-public.cjs +2 -0
  58. package/lib/artifacts-store-public.d.cts +5 -0
  59. package/lib/artifacts-store-public.d.ts +5 -0
  60. package/lib/artifacts-store-public.js +2 -0
  61. package/lib/board-live-cards-node.cjs +14 -0
  62. package/lib/board-live-cards-node.d.cts +178 -0
  63. package/lib/board-live-cards-node.d.ts +178 -0
  64. package/lib/board-live-cards-node.js +14 -0
  65. package/lib/board-live-cards-public-BnmRAbQV.d.cts +383 -0
  66. package/{dist/board-live-cards-public-CK_J8uv0.d.ts → lib/board-live-cards-public-CsmYrvpd.d.ts} +142 -76
  67. package/lib/board-live-cards-public.cjs +3 -0
  68. package/lib/board-live-cards-public.d.cts +4 -0
  69. package/lib/board-live-cards-public.d.ts +4 -0
  70. package/lib/board-live-cards-public.js +3 -0
  71. package/lib/board-live-cards-server-runtime.cjs +9 -0
  72. package/lib/board-live-cards-server-runtime.d.cts +6 -0
  73. package/lib/board-live-cards-server-runtime.d.ts +6 -0
  74. package/lib/board-live-cards-server-runtime.js +9 -0
  75. package/lib/board-livegraph-runtime/index.cjs +3 -0
  76. package/{dist → lib}/board-livegraph-runtime/index.d.cts +1 -2
  77. package/{dist → lib}/board-livegraph-runtime/index.d.ts +1 -2
  78. package/lib/board-livegraph-runtime/index.js +3 -0
  79. package/{dist/storage-refs.cjs → lib/board-worker-adapter.cjs} +2 -2
  80. package/{dist/storage-refs.d.cts → lib/board-worker-adapter.d.cts} +4 -3
  81. package/{dist/storage-refs.d.ts → lib/board-worker-adapter.d.ts} +4 -3
  82. package/{dist/storage-refs.js → lib/board-worker-adapter.js} +2 -2
  83. package/{dist → lib}/card-compute/index.cjs +1 -1
  84. package/{dist → lib}/card-compute/index.js +1 -1
  85. package/lib/card-store-public.cjs +2 -0
  86. package/lib/card-store-public.d.cts +61 -0
  87. package/lib/card-store-public.d.ts +61 -0
  88. package/lib/card-store-public.js +2 -0
  89. package/lib/card-validation.cjs +10 -0
  90. package/lib/card-validation.d.cts +35 -0
  91. package/lib/card-validation.d.ts +35 -0
  92. package/lib/card-validation.js +10 -0
  93. package/{dist/constants-oCEbNpul.d.ts → lib/constants-BPVLb3Es.d.ts} +1 -1
  94. package/{dist/constants-BzZUyYlp.d.cts → lib/constants-DXxsRN9y.d.cts} +1 -1
  95. package/{dist → lib}/continuous-event-graph/index.cjs +2 -2
  96. package/{dist → lib}/continuous-event-graph/index.d.cts +3 -5
  97. package/{dist → lib}/continuous-event-graph/index.d.ts +3 -5
  98. package/{dist → lib}/continuous-event-graph/index.js +2 -2
  99. package/{dist → lib}/event-graph/index.d.cts +2 -2
  100. package/{dist → lib}/event-graph/index.d.ts +2 -2
  101. package/lib/execution-refs.cjs +3 -0
  102. package/{dist → lib}/execution-refs.d.cts +33 -12
  103. package/{dist → lib}/execution-refs.d.ts +33 -12
  104. package/lib/execution-refs.js +3 -0
  105. package/lib/index.cjs +25 -0
  106. package/{dist → lib}/index.d.cts +7 -8
  107. package/{dist → lib}/index.d.ts +7 -8
  108. package/lib/index.js +25 -0
  109. package/{dist/live-cards-bridge-BXbVTsna.d.cts → lib/live-cards-bridge-DC_ZU0eS.d.ts} +134 -3
  110. package/{dist/live-cards-bridge-Ds28XR15.d.ts → lib/live-cards-bridge-b25aAVvE.d.cts} +134 -3
  111. package/lib/loader-CuuLjxVA.d.cts +42 -0
  112. package/lib/loader-Zborm2pq.d.ts +42 -0
  113. package/lib/server-runtime/index.cjs +9 -0
  114. package/{dist → lib}/server-runtime/index.d.cts +4 -4
  115. package/{dist → lib}/server-runtime/index.d.ts +4 -4
  116. package/lib/server-runtime/index.js +9 -0
  117. package/lib/step-machine/index.d.cts +64 -0
  118. package/lib/step-machine/index.d.ts +64 -0
  119. package/lib/step-machine-public/index.cjs +5 -0
  120. package/{dist → lib}/step-machine-public/index.d.cts +14 -1
  121. package/{dist → lib}/step-machine-public/index.d.ts +14 -1
  122. package/lib/step-machine-public/index.js +5 -0
  123. package/lib/storage-interface-BhAON-gW.d.cts +84 -0
  124. package/lib/storage-interface-BhAON-gW.d.ts +84 -0
  125. package/lib/stores/index.cjs +3 -0
  126. package/lib/stores/index.d.cts +4 -0
  127. package/lib/stores/index.d.ts +4 -0
  128. package/lib/stores/index.js +3 -0
  129. package/lib/stores/kv.cjs +3 -0
  130. package/lib/stores/kv.d.cts +32 -0
  131. package/lib/stores/kv.d.ts +32 -0
  132. package/lib/stores/kv.js +3 -0
  133. package/{dist → lib}/stores/memory.d.cts +1 -1
  134. package/{dist → lib}/stores/memory.d.ts +1 -1
  135. package/{dist/types-HGDTWIun.d.ts → lib/types-CBxkYuLY.d.ts} +2 -1
  136. package/{dist/types-ycun84cq.d.cts → lib/types-DQ1bKuB1.d.cts} +11 -0
  137. package/{dist/types-ycun84cq.d.ts → lib/types-DQ1bKuB1.d.ts} +11 -0
  138. package/{dist/types-CU3DjTKL.d.cts → lib/types-DkFvgxwq.d.cts} +2 -1
  139. package/package.json +79 -119
  140. package/board-live-cards-cli.js +0 -37
  141. package/browser/board-livecards-client.js.map +0 -1
  142. package/browser/board-livecards-localstorage.js.map +0 -1
  143. package/browser/board-livegraph-engine.js +0 -3
  144. package/browser/board-livegraph-engine.js.map +0 -1
  145. package/browser/card-compute.js +0 -266
  146. package/browser/compute-jsonata.js.map +0 -1
  147. package/card-store.js +0 -37
  148. package/dist/batch/index.cjs.map +0 -1
  149. package/dist/batch/index.js.map +0 -1
  150. package/dist/board-live-cards-lib-Bg6EvCo5.d.cts +0 -136
  151. package/dist/board-live-cards-lib-jM2uYG1v.d.ts +0 -136
  152. package/dist/board-livegraph-runtime/index.cjs +0 -3
  153. package/dist/board-livegraph-runtime/index.cjs.map +0 -1
  154. package/dist/board-livegraph-runtime/index.js +0 -3
  155. package/dist/board-livegraph-runtime/index.js.map +0 -1
  156. package/dist/card-compute/index.cjs.map +0 -1
  157. package/dist/card-compute/index.js.map +0 -1
  158. package/dist/cli/browser-api/board-live-cards-browser-adapter.cjs +0 -3
  159. package/dist/cli/browser-api/board-live-cards-browser-adapter.cjs.map +0 -1
  160. package/dist/cli/browser-api/board-live-cards-browser-adapter.d.cts +0 -37
  161. package/dist/cli/browser-api/board-live-cards-browser-adapter.js.map +0 -1
  162. package/dist/cli/browser-api/card-store-browser-api.cjs +0 -2
  163. package/dist/cli/browser-api/card-store-browser-api.cjs.map +0 -1
  164. package/dist/cli/browser-api/card-store-browser-api.d.cts +0 -26
  165. package/dist/cli/browser-api/card-store-browser-api.js.map +0 -1
  166. package/dist/cli/node/artifacts-store-cli.cjs +0 -11
  167. package/dist/cli/node/artifacts-store-cli.cjs.map +0 -1
  168. package/dist/cli/node/artifacts-store-cli.d.cts +0 -8
  169. package/dist/cli/node/artifacts-store-cli.js.map +0 -1
  170. package/dist/cli/node/board-live-cards-cli.cjs +0 -15
  171. package/dist/cli/node/board-live-cards-cli.cjs.map +0 -1
  172. package/dist/cli/node/board-live-cards-cli.d.cts +0 -20
  173. package/dist/cli/node/board-live-cards-cli.js +0 -15
  174. package/dist/cli/node/board-live-cards-cli.js.map +0 -1
  175. package/dist/cli/node/card-store-cli.cjs +0 -8
  176. package/dist/cli/node/card-store-cli.cjs.map +0 -1
  177. package/dist/cli/node/card-store-cli.d.cts +0 -15
  178. package/dist/cli/node/card-store-cli.js.map +0 -1
  179. package/dist/cli/node/execution-adapter.cjs +0 -3
  180. package/dist/cli/node/execution-adapter.cjs.map +0 -1
  181. package/dist/cli/node/execution-adapter.d.cts +0 -174
  182. package/dist/cli/node/execution-adapter.js +0 -3
  183. package/dist/cli/node/execution-adapter.js.map +0 -1
  184. package/dist/cli/node/fs-board-adapter.cjs +0 -14
  185. package/dist/cli/node/fs-board-adapter.cjs.map +0 -1
  186. package/dist/cli/node/fs-board-adapter.d.cts +0 -204
  187. package/dist/cli/node/fs-board-adapter.js +0 -14
  188. package/dist/cli/node/fs-board-adapter.js.map +0 -1
  189. package/dist/cli/node/source-cli-task-executor.cjs +0 -11
  190. package/dist/cli/node/source-cli-task-executor.cjs.map +0 -1
  191. package/dist/cli/node/source-cli-task-executor.js.map +0 -1
  192. package/dist/config/index.cjs.map +0 -1
  193. package/dist/config/index.js.map +0 -1
  194. package/dist/continuous-event-graph/index.cjs.map +0 -1
  195. package/dist/continuous-event-graph/index.js.map +0 -1
  196. package/dist/event-graph/index.cjs.map +0 -1
  197. package/dist/event-graph/index.js.map +0 -1
  198. package/dist/execution-refs.cjs +0 -3
  199. package/dist/execution-refs.cjs.map +0 -1
  200. package/dist/execution-refs.js +0 -3
  201. package/dist/execution-refs.js.map +0 -1
  202. package/dist/index.cjs +0 -30
  203. package/dist/index.cjs.map +0 -1
  204. package/dist/index.js +0 -30
  205. package/dist/index.js.map +0 -1
  206. package/dist/inference/index.cjs +0 -7
  207. package/dist/inference/index.cjs.map +0 -1
  208. package/dist/inference/index.d.cts +0 -229
  209. package/dist/inference/index.d.ts +0 -229
  210. package/dist/inference/index.js +0 -7
  211. package/dist/inference/index.js.map +0 -1
  212. package/dist/server-runtime/index.cjs +0 -9
  213. package/dist/server-runtime/index.cjs.map +0 -1
  214. package/dist/server-runtime/index.js +0 -9
  215. package/dist/server-runtime/index.js.map +0 -1
  216. package/dist/step-machine/index.cjs.map +0 -1
  217. package/dist/step-machine/index.d.cts +0 -102
  218. package/dist/step-machine/index.d.ts +0 -102
  219. package/dist/step-machine/index.js.map +0 -1
  220. package/dist/step-machine-public/index.cjs +0 -3
  221. package/dist/step-machine-public/index.cjs.map +0 -1
  222. package/dist/step-machine-public/index.js +0 -3
  223. package/dist/step-machine-public/index.js.map +0 -1
  224. package/dist/storage-refs.cjs.map +0 -1
  225. package/dist/storage-refs.js.map +0 -1
  226. package/dist/stores/file.cjs +0 -2
  227. package/dist/stores/file.cjs.map +0 -1
  228. package/dist/stores/file.d.cts +0 -36
  229. package/dist/stores/file.d.ts +0 -36
  230. package/dist/stores/file.js +0 -2
  231. package/dist/stores/file.js.map +0 -1
  232. package/dist/stores/index.cjs +0 -2
  233. package/dist/stores/index.cjs.map +0 -1
  234. package/dist/stores/index.d.cts +0 -4
  235. package/dist/stores/index.d.ts +0 -4
  236. package/dist/stores/index.js +0 -2
  237. package/dist/stores/index.js.map +0 -1
  238. package/dist/stores/localStorage.cjs +0 -2
  239. package/dist/stores/localStorage.cjs.map +0 -1
  240. package/dist/stores/localStorage.d.cts +0 -34
  241. package/dist/stores/localStorage.d.ts +0 -34
  242. package/dist/stores/localStorage.js +0 -2
  243. package/dist/stores/localStorage.js.map +0 -1
  244. package/dist/stores/memory.cjs.map +0 -1
  245. package/dist/stores/memory.js.map +0 -1
  246. package/dist/types-CHSdoAAA.d.cts +0 -135
  247. package/dist/types-CoW0gQl3.d.ts +0 -135
  248. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-fetch-prices.py +0 -201
  249. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-http-test.js +0 -370
  250. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-http-test.py +0 -398
  251. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-inference-adapter.js +0 -196
  252. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-server.js +0 -300
  253. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-server.py +0 -617
  254. package/examples/browser/boards/portfolio-tracker/portfolio-tracker.py +0 -366
  255. package/examples/browser/livecards-browser/index.html +0 -41
  256. package/examples/browser/step-machine-browser/index.html +0 -367
  257. package/examples/cli/step-machine-cli/portfolio-tracker/--base-ref/.runtime-out +0 -1
  258. package/examples/cli/step-machine-cli/portfolio-tracker/--base-ref/board-graph.json +0 -32
  259. package/examples/cli/step-machine-cli/portfolio-tracker/cards/holdings-table.json +0 -22
  260. package/examples/cli/step-machine-cli/portfolio-tracker/cards/portfolio-form.json +0 -43
  261. package/examples/cli/step-machine-cli/portfolio-tracker/cards/portfolio-value.json +0 -15
  262. package/examples/cli/step-machine-cli/portfolio-tracker/cards/price-fetch.json +0 -15
  263. package/examples/cli/step-machine-cli/portfolio-tracker/fetch-prices.js +0 -48
  264. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/_board-cli.js +0 -125
  265. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/add-cards-cli.js +0 -32
  266. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/init-board-cli.js +0 -26
  267. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/poll-status-cli.js +0 -49
  268. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/reset-board-dir-cli.js +0 -25
  269. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/retrigger-cli.js +0 -23
  270. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/status-cli.js +0 -21
  271. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/update-holdings-cli.js +0 -38
  272. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/wait-completed-cli.js +0 -48
  273. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/write-prices-cli.js +0 -31
  274. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/_board_pycli.py +0 -107
  275. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/add-cards.py +0 -51
  276. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/init-board.py +0 -45
  277. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/poll-status.py +0 -71
  278. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/reset-board-dir.py +0 -36
  279. package/examples/cli/step-machine-cli/portfolio-tracker/inline-python-demo.flow.yaml +0 -26
  280. package/examples/cli/step-machine-cli/portfolio-tracker/inline-python-handlers.py +0 -39
  281. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker-pycli.flow.yaml +0 -80
  282. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker.flow.yaml +0 -76
  283. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker.input.json +0 -44
  284. package/examples/cli/step-machine-cli/portfolio-tracker/run-inline-python-demo-pycli.py +0 -43
  285. package/examples/cli/step-machine-cli/portfolio-tracker/run-portfolio-tracker-pycli.py +0 -77
  286. package/examples/cli/step-machine-cli/portfolio-tracker/run-portfolio-tracker.bat +0 -28
  287. package/examples/cli/step-machine-demo/jsonata-init-board-cli.js +0 -31
  288. package/examples/cli/step-machine-demo/jsonata-init-board.flow.yaml +0 -54
  289. package/examples/cli/step-machine-demo/one-step-cli-only.flow.yaml +0 -21
  290. package/examples/cli/step-machine-demo/step-cli-echo-y.js +0 -15
  291. package/examples/cli/step-machine-demo/step2-double-cli.js +0 -33
  292. package/examples/cli/step-machine-demo/two-step-math.flow.yaml +0 -93
  293. package/examples/cli/step-machine-demo/two-step-mixed.flow.yaml +0 -43
  294. package/examples/example-board/agent-instructions-cardlayout.md +0 -56
  295. package/examples/example-board/agent-instructions.md +0 -834
  296. package/examples/example-board/demo-shell.html +0 -63
  297. package/examples/index.html +0 -785
  298. package/examples/npm-libs/batch/batch-step-machine.ts +0 -121
  299. package/examples/npm-libs/continuous-event-graph/live-cards-board.ts +0 -215
  300. package/examples/npm-libs/continuous-event-graph/live-portfolio-dashboard.ts +0 -555
  301. package/examples/npm-libs/continuous-event-graph/portfolio-tracker.ts +0 -287
  302. package/examples/npm-libs/continuous-event-graph/reactive-monitoring.ts +0 -265
  303. package/examples/npm-libs/continuous-event-graph/reactive-pipeline.ts +0 -168
  304. package/examples/npm-libs/continuous-event-graph/soc-incident-board.ts +0 -287
  305. package/examples/npm-libs/continuous-event-graph/stock-dashboard.ts +0 -229
  306. package/examples/npm-libs/event-graph/ci-cd-pipeline.ts +0 -243
  307. package/examples/npm-libs/event-graph/executor-diamond.ts +0 -165
  308. package/examples/npm-libs/event-graph/executor-pipeline.ts +0 -161
  309. package/examples/npm-libs/event-graph/research-pipeline.ts +0 -137
  310. package/examples/npm-libs/flows/ai-conversation.yaml +0 -116
  311. package/examples/npm-libs/flows/order-processing.yaml +0 -143
  312. package/examples/npm-libs/flows/simple-greeting.yaml +0 -54
  313. package/examples/npm-libs/graph-of-graphs/multi-stage-etl.ts +0 -307
  314. package/examples/npm-libs/graph-of-graphs/url-processing-pipeline.ts +0 -254
  315. package/examples/npm-libs/inference/azure-deployment.ts +0 -149
  316. package/examples/npm-libs/inference/copilot-cli.ts +0 -138
  317. package/examples/npm-libs/inference/data-pipeline.ts +0 -145
  318. package/examples/npm-libs/inference/pluggable-adapters.ts +0 -254
  319. package/examples/npm-libs/node/ai-conversation.ts +0 -195
  320. package/examples/npm-libs/node/simple-greeting.ts +0 -101
  321. package/examples/step-machine-cli/portfolio-tracker/cards/holdings-table.json +0 -22
  322. package/examples/step-machine-cli/portfolio-tracker/cards/portfolio-form.json +0 -43
  323. package/examples/step-machine-cli/portfolio-tracker/cards/portfolio-value.json +0 -15
  324. package/examples/step-machine-cli/portfolio-tracker/cards/price-fetch.json +0 -15
  325. package/examples/step-machine-cli/portfolio-tracker/fetch-prices.js +0 -48
  326. package/examples/step-machine-cli/portfolio-tracker/handlers/_board-cli.js +0 -57
  327. package/examples/step-machine-cli/portfolio-tracker/handlers/add-cards-cli.js +0 -27
  328. package/examples/step-machine-cli/portfolio-tracker/handlers/init-board-cli.js +0 -25
  329. package/examples/step-machine-cli/portfolio-tracker/handlers/reset-board-dir-cli.js +0 -29
  330. package/examples/step-machine-cli/portfolio-tracker/handlers/retrigger-cli.js +0 -27
  331. package/examples/step-machine-cli/portfolio-tracker/handlers/status-cli.js +0 -25
  332. package/examples/step-machine-cli/portfolio-tracker/handlers/update-holdings-cli.js +0 -37
  333. package/examples/step-machine-cli/portfolio-tracker/handlers/wait-completed-cli.js +0 -53
  334. package/examples/step-machine-cli/portfolio-tracker/handlers/write-prices-cli.js +0 -35
  335. package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker-task-executor.cjs +0 -96
  336. package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker.flow.yaml +0 -227
  337. package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker.input.json +0 -38
  338. package/examples/step-machine-cli/portfolio-tracker/run-portfolio-tracker.bat +0 -28
  339. package/step-machine-cli.js +0 -407
  340. /package/{dist/cli → cli}/browser-api/board-live-cards-browser-adapter.js +0 -0
  341. /package/{dist/board-livegraph-runtime → cli/browser-api}/jsonata-sync.cjs +0 -0
  342. /package/{dist/cli → cli}/node/artifacts-store-cli.d.ts +0 -0
  343. /package/{dist/cli/node/source-cli-task-executor.d.cts → cli/node/batch-runner-cli.d.ts} +0 -0
  344. /package/{dist/cli → cli}/node/board-live-cards-cli.d.ts +0 -0
  345. /package/{dist/cli → cli}/node/card-store-cli.d.ts +0 -0
  346. /package/{dist/card-compute → cli/node}/jsonata-sync.cjs +0 -0
  347. /package/{dist/cli → cli}/node/source-cli-task-executor.d.ts +0 -0
  348. /package/{dist/cli → cli}/node/source-cli-task-executor.js +0 -0
  349. /package/examples/{example-board → board}/cards/card-concentration.json +0 -0
  350. /package/examples/{example-board → board}/cards/card-my-identity.json +0 -0
  351. /package/examples/{example-board → board}/cards/card-portfolio-action.json +0 -0
  352. /package/examples/{example-board → board}/cards/card-portfolio-intelligence.json +0 -0
  353. /package/examples/{example-board → board}/cards/card-portfolio-risks.json +0 -0
  354. /package/examples/{example-board → board}/cards/card-rebalance-impact.json +0 -0
  355. /package/examples/{example-board → board}/cards/card-rebalance-sim.json +0 -0
  356. /package/examples/{example-board → board}/cards/cardT-market-prices.json +0 -0
  357. /package/examples/{example-board → board}/cards/cardT-portfolio-value.json +0 -0
  358. /package/examples/{example-board → board}/cards/cardT-portfolio.json +0 -0
  359. /package/examples/{example-board → board}/demo-chat-handler.js +0 -0
  360. /package/examples/{example-board → board}/scripts/copilot_wrapper.bat +0 -0
  361. /package/examples/{example-board → board}/scripts/copilot_wrapper_helper.ps1 +0 -0
  362. /package/examples/{example-board → board}/scripts/workiq_wrapper.mjs +0 -0
  363. /package/examples/{browser/boards/portfolio-tracker → board/test}/portfolio-tracker-sse-worker.js +0 -0
  364. /package/{dist → lib}/batch/index.cjs +0 -0
  365. /package/{dist → lib}/batch/index.d.cts +0 -0
  366. /package/{dist → lib}/batch/index.d.ts +0 -0
  367. /package/{dist → lib}/batch/index.js +0 -0
  368. /package/{dist/cli/browser-api → lib/board-livegraph-runtime}/jsonata-sync.cjs +0 -0
  369. /package/{dist → lib}/card-compute/index.d.cts +0 -0
  370. /package/{dist → lib}/card-compute/index.d.ts +0 -0
  371. /package/{dist/cli/node → lib/card-compute}/jsonata-sync.cjs +0 -0
  372. /package/{dist → lib}/config/index.cjs +0 -0
  373. /package/{dist → lib}/config/index.d.cts +0 -0
  374. /package/{dist → lib}/config/index.d.ts +0 -0
  375. /package/{dist → lib}/config/index.js +0 -0
  376. /package/{dist → lib}/continuous-event-graph/jsonata-sync.cjs +0 -0
  377. /package/{dist → lib}/event-graph/index.cjs +0 -0
  378. /package/{dist → lib}/event-graph/index.js +0 -0
  379. /package/{dist → lib}/jsonata-sync.cjs +0 -0
  380. /package/{dist → lib}/server-runtime/jsonata-sync.cjs +0 -0
  381. /package/{dist → lib}/step-machine/index.cjs +0 -0
  382. /package/{dist → lib}/step-machine/index.js +0 -0
  383. /package/{dist → lib}/step-machine-public/jsonata-sync.cjs +0 -0
  384. /package/{dist → lib}/stores/memory.cjs +0 -0
  385. /package/{dist → lib}/stores/memory.js +0 -0
  386. /package/{dist → lib}/types-BBhqYGhE.d.cts +0 -0
  387. /package/{dist → lib}/types-BBhqYGhE.d.ts +0 -0
  388. /package/{dist → lib}/validate-BAVzUJWa.d.ts +0 -0
  389. /package/{dist → lib}/validate-Dbu7ygys.d.cts +0 -0
@@ -0,0 +1,5 @@
1
+ import*as m from'fs';import {existsSync}from'fs';import*as v from'path';import {dirname,resolve}from'path';import'ajv-formats';import {createRequire}from'module';import {fileURLToPath}from'url';import {spawn,execFile,execFileSync}from'child_process';import*as Rt from'os';import'net';import {randomUUID}from'crypto';import'proper-lockfile';function K(e,t,n,r){let s=e.steps[n];if(!s)throw new Error(`Step "${n}" not found in flow configuration`);if(r.result==="failure"&&s.retry){let i=t.retryCounts[n]??0;if(i<s.retry.max_attempts)return {newState:{...t,retryCounts:{...t.retryCounts,[n]:i+1},updatedAt:Date.now()},nextStep:n,isTerminal:false,isCircuitBroken:false,shouldRetry:true}}let o=s.failure_transitions?.[r.result]??s.transitions[r.result];if(!o)throw new Error(`No transition defined for result "${r.result}" in step "${n}"`);let a=!!e.terminal_states[o];return {newState:{...t,currentStep:o,stepHistory:[...t.stepHistory,n],retryCounts:{...t.retryCounts,[n]:0},updatedAt:Date.now()},nextStep:o,isTerminal:a,isCircuitBroken:false,shouldRetry:false}}function U(e,t,n){let r=e.steps[n];if(!r?.circuit_breaker)return {broken:false,newState:{...t,iterationCounts:{...t.iterationCounts,[n]:(t.iterationCounts[n]??0)+1},updatedAt:Date.now()}};let s=t.iterationCounts[n]??0;return s>=r.circuit_breaker.max_iterations?{broken:true,redirectStep:r.circuit_breaker.on_open,newState:{...t,currentStep:r.circuit_breaker.on_open,updatedAt:Date.now()}}:{broken:false,newState:{...t,iterationCounts:{...t.iterationCounts,[n]:s+1},updatedAt:Date.now()}}}function q(e,t,n){let r=e.steps[t];if(!r)throw new Error(`Step "${t}" not found`);if(r.expects_data){let s={};for(let o of r.expects_data)s[o]=n[o];return s}return {...n}}function z(e,t){if(e===false||e===void 0)return {};if(typeof e=="string")return {[e]:t[e]};if(Array.isArray(e)){let n={};for(let r of e)n[r]=t[r];return n}return {}}function V(e,t){let n=Date.now();return {runId:t,flowId:e.id??"unnamed",currentStep:e.settings.start_step,status:"running",stepHistory:[],iterationCounts:{},retryCounts:{},startedAt:n,updatedAt:n}}var k=class{runs=new Map;data=new Map;async saveRunState(t,n){this.runs.set(t,{...n});}async loadRunState(t){let n=this.runs.get(t);return n?{...n}:null}async deleteRunState(t){this.runs.delete(t),this.data.delete(t);}async setData(t,n,r){this.data.has(t)||this.data.set(t,{});let s=this.data.get(t);s[n]=r;}async getData(t,n){return this.data.get(t)?.[n]}async getAllData(t){return {...this.data.get(t)??{}}}async clearData(t){this.data.delete(t);}async listRuns(){return Array.from(this.runs.keys())}clear(){this.runs.clear(),this.data.clear();}};function Pt(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return (e==="x"?t:t&3|8).toString(16)})}var O=class{flow;handlers;store;components;options;listeners=new Map;aborted=false;constructor(t,n,r={}){this.flow=t,this.handlers=new Map(Object.entries(n)),this.store=r.store??new k,this.components=r.components??{},this.options=r,r.signal&&r.signal.addEventListener("abort",()=>{this.aborted=true;}),this.validateFlow();}validateFlow(){let{settings:t,steps:n,terminal_states:r}=this.flow;if(!t?.start_step)throw new Error("Flow must have settings.start_step defined");if(!n||Object.keys(n).length===0)throw new Error("Flow must have at least one step defined");if(!r||Object.keys(r).length===0)throw new Error("Flow must have at least one terminal_state defined");if(!n[t.start_step]&&!r[t.start_step])throw new Error(`Start step "${t.start_step}" not found`);for(let[s,o]of Object.entries(n)){for(let[a,i]of Object.entries(o.transitions))if(!n[i]&&!r[i])throw new Error(`Step "${s}" transition "${a}" points to unknown step "${i}"`);if(o.failure_transitions){for(let[a,i]of Object.entries(o.failure_transitions))if(!n[i]&&!r[i])throw new Error(`Step "${s}" failure_transition "${a}" points to unknown step "${i}"`)}}}on(t,n){this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(n);}off(t,n){this.listeners.get(t)?.delete(n);}emit(t){let n=this.listeners.get(t.type);if(n)for(let r of n)try{r(t);}catch{}}sleep(t){return new Promise(n=>setTimeout(n,t))}async run(t){let n=Pt(),r=V(this.flow,n);if(await this.store.saveRunState(n,r),t)for(let[s,o]of Object.entries(t))await this.store.setData(n,s,o);this.emit({type:"flow:start",runId:n,timestamp:r.startedAt,data:{initialData:t??{}}});try{return await this.executeLoop(n,r)}catch(s){let o=s instanceof Error?s:new Error(String(s));return this.emit({type:"flow:error",runId:n,timestamp:Date.now(),data:{error:o.message}}),this.options.onError?.(o),r={...r,status:"failed",updatedAt:Date.now()},await this.store.saveRunState(n,r),{runId:n,status:"failed",data:await this.store.getAllData(n),finalStep:r.currentStep,stepHistory:r.stepHistory,durationMs:Date.now()-r.startedAt,error:o}}}async resume(t){let n=await this.store.loadRunState(t);if(!n)throw new Error(`No run found with ID: ${t}`);if(n.status==="completed"||n.status==="failed")throw new Error(`Cannot resume a ${n.status} run`);let r={...n,status:"running",pausedAt:void 0,updatedAt:Date.now()};return await this.store.saveRunState(t,r),this.emit({type:"flow:resumed",runId:t,timestamp:Date.now(),data:{currentStep:r.currentStep}}),this.executeLoop(t,r)}async pause(t){let n=await this.store.loadRunState(t);if(!n)throw new Error(`No run found with ID: ${t}`);let r={...n,status:"paused",pausedAt:Date.now(),updatedAt:Date.now()};await this.store.saveRunState(t,r),this.emit({type:"flow:paused",runId:t,timestamp:Date.now(),data:{currentStep:r.currentStep}});}async executeLoop(t,n){let r=this.flow.settings.max_total_steps??100,s=this.flow.settings.timeout_ms,o=n,a=0;for(;a<r;){if(this.aborted)return o={...o,status:"cancelled",updatedAt:Date.now()},await this.store.saveRunState(t,o),{runId:t,status:"cancelled",data:await this.store.getAllData(t),finalStep:o.currentStep,stepHistory:o.stepHistory,durationMs:Date.now()-o.startedAt};if(s&&Date.now()-o.startedAt>s)return o={...o,status:"completed",updatedAt:Date.now()},await this.store.saveRunState(t,o),{runId:t,status:"timeout",intent:"timeout",data:await this.store.getAllData(t),finalStep:o.currentStep,stepHistory:o.stepHistory,durationMs:Date.now()-o.startedAt};let i=o.currentStep,u=this.flow.terminal_states[i];if(u){o={...o,status:"completed",updatedAt:Date.now()},await this.store.saveRunState(t,o);let p=await this.store.getAllData(t),g={runId:t,status:"completed",intent:u.return_intent,data:z(u.return_artifacts,p),finalStep:i,stepHistory:o.stepHistory,durationMs:Date.now()-o.startedAt};return this.emit({type:"flow:complete",runId:t,timestamp:Date.now(),data:{...g}}),this.options.onComplete?.(g),g}let c=U(this.flow,o,i);if(c.broken){o=c.newState,await this.store.saveRunState(t,o),a++;continue}o=c.newState;let d=await this.store.getAllData(t),l=q(this.flow,i,d),f={runId:t,stepName:i,components:this.components,store:this.store,signal:this.options.signal,emit:(p,g)=>{this.emit({type:"step:complete",runId:t,timestamp:Date.now(),data:{event:p,payload:g}});}};this.emit({type:"step:start",runId:t,timestamp:Date.now(),data:{step:i,input:l}});let h;try{let p=this.handlers.get(i);if(!p)throw new Error(`No handler registered for step "${i}"`);h=await p(l,f);}catch(p){let g=p instanceof Error?p:new Error(String(p));this.emit({type:"step:error",runId:t,timestamp:Date.now(),data:{step:i,error:g.message}}),h={result:"failure",data:{error:g.message}};}if(h.data)for(let[p,g]of Object.entries(h.data))await this.store.setData(t,p,g);this.emit({type:"step:complete",runId:t,timestamp:Date.now(),data:{step:i,result:h.result}}),this.options.onStep?.(i,h);let w=K(this.flow,o,i,h);if(o=w.newState,w.shouldRetry){await this.store.saveRunState(t,o);let p=this.flow.steps[i];if(p.retry?.delay_ms){let g=o.retryCounts[i]??0,x=p.retry.backoff_multiplier?p.retry.delay_ms*Math.pow(p.retry.backoff_multiplier,g-1):p.retry.delay_ms;await this.sleep(x);}a++;continue}await this.store.saveRunState(t,o),this.emit({type:"transition",runId:t,timestamp:Date.now(),data:{from:i,to:o.currentStep,result:h.result}}),this.options.onTransition?.(i,o.currentStep),a++;}return o={...o,status:"completed",updatedAt:Date.now()},await this.store.saveRunState(t,o),{runId:t,status:"max_iterations",intent:"max_iterations",data:await this.store.getAllData(t),finalStep:o.currentStep,stepHistory:o.stepHistory,durationMs:Date.now()-o.startedAt}}};function H(e,t,n){return new O(e,t,n)}async function W(e){return (await import('yaml')).parse(e)}async function Mt(e){let t=await fetch(e);if(!t.ok)throw new Error(`Failed to load flow from ${e}: ${t.statusText}`);let n=t.headers.get("content-type")??"",r=await t.text();return n.includes("json")||e.endsWith(".json")?JSON.parse(r):W(r)}async function Ot(e){let n=await(await import('fs/promises')).readFile(e,"utf-8");return e.endsWith(".json")?JSON.parse(n):W(n)}function nt(e){let t=[];if(!e||typeof e!="object")return ["Flow must be an object"];let n=e;if(!n.settings||typeof n.settings!="object"?t.push('Flow must have a "settings" object'):typeof n.settings.start_step!="string"&&t.push("settings.start_step must be a string"),!n.steps||typeof n.steps!="object")t.push('Flow must have a "steps" object');else {let r=n.steps;for(let[s,o]of Object.entries(r)){if(!o||typeof o!="object"){t.push(`Step "${s}" must be an object`);continue}let a=o;(!a.transitions||typeof a.transitions!="object")&&t.push(`Step "${s}" must have a "transitions" object`),a.failure_transitions!==void 0&&typeof a.failure_transitions!="object"&&t.push(`Step "${s}" failure_transitions must be an object when provided`);}}if(!n.terminal_states||typeof n.terminal_states!="object")t.push('Flow must have a "terminal_states" object');else {let r=n.terminal_states;for(let[s,o]of Object.entries(r)){if(!o||typeof o!="object"){t.push(`Terminal state "${s}" must be an object`);continue}typeof o.return_intent!="string"&&t.push(`Terminal state "${s}" must have a "return_intent" string`);}}return t}async function I(e){let t;typeof e=="string"?e.startsWith("http://")||e.startsWith("https://")?t=await Mt(e):e.includes("{")?t=JSON.parse(e):t=await Ot(e):t=e;let n=nt(t);if(n.length>0)throw new Error(`Invalid step flow configuration:
2
+ - ${n.join(`
3
+ - `)}`);return t}function G(e){return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function rt(e){return atob(e.replace(/-/g,"+").replace(/_/g,"/"))}var j=class{constructor(t){this.kv=t;}kv;stateKey(t){return `state_${G(t)}`}dataPrefix(t){return `data_${G(t)}_`}dataKey(t,n){return `${this.dataPrefix(t)}${G(n)}`}async saveRunState(t,n){this.kv.write(this.stateKey(t),n);}async loadRunState(t){let n=this.kv.read(this.stateKey(t));return n!=null&&typeof n=="object"?n:null}async deleteRunState(t){this.kv.delete(this.stateKey(t));for(let n of this.kv.listKeys(this.dataPrefix(t)))this.kv.delete(n);}async setData(t,n,r){this.kv.write(this.dataKey(t,n),r);}async getData(t,n){return this.kv.read(this.dataKey(t,n))}async getAllData(t){let n=this.dataPrefix(t),r={};for(let s of this.kv.listKeys(n))r[rt(s.slice(n.length))]=this.kv.read(s);return r}async clearData(t){for(let n of this.kv.listKeys(this.dataPrefix(t)))this.kv.delete(n);}async listRuns(){return this.kv.listKeys("state_").map(t=>rt(t.slice(6)))}};var ot=dirname(fileURLToPath(import.meta.url)),Dt=createRequire(import.meta.url);function Bt(){let e=resolve(ot,"./jsonata-sync.cjs");return existsSync(e)?e:resolve(ot,"../card-compute/jsonata-sync.cjs")}var $=Dt(Bt());function it(e,t){if(!e||typeof e!="object")throw new Error(`[step-machine-public] Step "${t}" returned a non-object result.`);let n=e,r=n.result??n.status;if(typeof r=="string"&&r.trim().length>0){let s=n.data&&typeof n.data=="object"&&!Array.isArray(n.data)?{...n.data}:{},o=typeof n.error=="string"?n.error:void 0;return o&&!("error"in s)&&(s.error=o),{result:r,data:s,...o?{error:o}:{}}}return {result:"success",data:{...n}}}function at(e,t){if(!t||t.length===0)return e;let n={};for(let r of t)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function X(e,t){return async(n,r)=>{let s=await e(n,r),o=it(s,r?.stepName??"unknown");return {result:o.result,data:at(o.data,t),...o.error?{error:o.error}:{}}}}function ct(e,t,n){if(!t||t.length===0)return null;for(let r of t)try{if(!$(r).evaluate(e))return {result:"failure",data:{error:`[${n}] input validation failed: ${r}`}}}catch(s){let o=s instanceof Error?s.message:String(s);return {result:"failure",data:{error:`[${n}] input validation error on "${r}": ${o}`}}}return null}function Y(e,t,n){return !t||t.length===0?e:async(r,s)=>{let o=ct(r,t,n);return o||e(r,s)}}var lt=dirname(fileURLToPath(import.meta.url)),qt=createRequire(import.meta.url);function zt(){let e=resolve(lt,"./jsonata-sync.cjs");return existsSync(e)?e:resolve(lt,"../../card-compute/jsonata-sync.cjs")}var R=qt(zt());function pt(e,t,n){if(!e||typeof e!="object")return {};let r={};if(Array.isArray(e.cmdTemplate)){let s=[];for(let o of e.cmdTemplate)try{s.push(String(R(o).evaluate(t)));}catch(a){let i=a instanceof Error?a.message:String(a);throw new Error(`[${n}] argsMassaging.cmdTemplate failed on "${o}": ${i}`)}r.cmdArgs=s;}if(typeof e.stdinTemplate=="string")try{r.stdin=R(e.stdinTemplate).evaluate(t);}catch(s){let o=s instanceof Error?s.message:String(s);throw new Error(`[${n}] argsMassaging.stdinTemplate failed: ${o}`)}if(typeof e.urlTemplate=="string")try{r.url=String(R(e.urlTemplate).evaluate(t));}catch(s){let o=s instanceof Error?s.message:String(s);throw new Error(`[${n}] argsMassaging.urlTemplate failed: ${o}`)}if(typeof e.headerTemplate=="string")try{let s=R(e.headerTemplate).evaluate(t);if(typeof s!="object"||s===null)throw new Error(`headerTemplate must produce an object, got: ${JSON.stringify(s)}`);r.headers=s;}catch(s){let o=s instanceof Error?s.message:String(s);throw new Error(`[${n}] argsMassaging.headerTemplate failed: ${o}`)}if(typeof e.bodyTemplate=="string")try{r.body=R(e.bodyTemplate).evaluate(t);}catch(s){let o=s instanceof Error?s.message:String(s);throw new Error(`[${n}] argsMassaging.bodyTemplate failed: ${o}`)}return r}function dt(e,t,n){if(!e||typeof e!="object")return t;let r={output:t},s=t.result,o=t.data,a=t.error;if(typeof e.resultExpr=="string")try{let i=R(e.resultExpr).evaluate(r);if(typeof i!="string"||!i.trim())throw new Error(`resultExpr did not produce a non-empty string (got ${JSON.stringify(i)})`);s=i;}catch(i){let u=i instanceof Error?i.message:String(i);throw new Error(`[${n}] outputTransforms.resultExpr failed: ${u}`)}if(typeof e.dataTemplate=="string")try{let i=R(e.dataTemplate).evaluate(r);if(!i||typeof i!="object"||Array.isArray(i))throw new Error(`dataTemplate did not produce an object (got ${JSON.stringify(i)})`);o=i;}catch(i){let u=i instanceof Error?i.message:String(i);throw new Error(`[${n}] outputTransforms.dataTemplate failed: ${u}`)}if(typeof e.errorExpr=="string")try{let i=R(e.errorExpr).evaluate(r);a=i!=null?String(i):void 0;}catch(i){let u=i instanceof Error?i.message:String(i);throw new Error(`[${n}] outputTransforms.errorExpr failed: ${u}`)}return a!==void 0?{result:s,data:o,error:a}:{result:s,data:o}}var _="b64:";function Vt(e){let t=new TextEncoder().encode(e),n=globalThis.Buffer,r;if(n)r=n.from(t).toString("base64");else if(typeof btoa=="function"){let s="";for(let o of t)s+=String.fromCharCode(o);r=btoa(s);}else throw new Error("No base64 encoder available in this runtime");return r.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function Wt(e){let t=e.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-e.length%4)%4),n=globalThis.Buffer;if(n)return n.from(t,"base64").toString("utf8");if(typeof atob=="function"){let r=atob(t),s=new Uint8Array(r.length);for(let o=0;o<r.length;o+=1)s[o]=r.charCodeAt(o);return new TextDecoder().decode(s)}throw new Error("No base64 decoder available in this runtime")}function J(e){return `${_}${Vt(JSON.stringify(e))}`}function D(e){if(!e.startsWith(_))throw new Error(`Invalid ref format (expected ${_}<base64url(json)>): ${e}`);let t;try{t=JSON.parse(Wt(e.slice(_.length)));}catch{throw new Error(`Invalid ref format (malformed base64url/json): ${e}`)}if(!t||typeof t!="object")throw new Error(`Invalid ref format (expected object payload): ${e}`);let n=t;if(typeof n.kind!="string"||typeof n.value!="string")throw new Error(`Invalid ref format (payload must contain string kind/value): ${e}`);return {kind:n.kind,value:n.value}}function ft(e){return !!e&&typeof e=="object"&&e.type==="compute-jsonata"&&Array.isArray(e.expr)&&e.expr.length>0}function gt(e){if(!e||typeof e!="object")return false;let t=e;if(t.type!=="ref"||typeof t.howToRun!="string")return false;if(typeof t.whatToRun=="string")return true;if(t.whatToRun&&typeof t.whatToRun=="object"){let n=t.whatToRun;return typeof n.kind=="string"&&typeof n.value=="string"}return false}function Gt(e){if(typeof e=="string"){let t=e.indexOf("=");if(t<1)throw new Error(`[step-machine-public] Invalid compute expression (missing "="): "${e}"`);return {bindTo:e.slice(0,t).trim(),expr:e.slice(t+1).trim()}}if(e&&typeof e=="object"&&typeof e.bindTo=="string"&&typeof e.expr=="string")return e;throw new Error(`[step-machine-public] Invalid compute step: ${JSON.stringify(e)}`)}function Xt(e,t,n){let r=t.split("."),s=e;for(let o=0;o<r.length-1;o++){let a=r[o];(s[a]==null||typeof s[a]!="object")&&(s[a]={}),s=s[a];}s[r[r.length-1]]=n;}function mt(e,t,n){let r=e.expr.map(Gt);return async s=>{let o=s&&typeof s=="object"&&!Array.isArray(s)?{...s}:{},a={},i={expects_data:o,data:a,...n?{config:n}:{}},u,c;for(let d of r)try{let l=$(d.expr).evaluate(i);if(d.bindTo==="result")u=l!=null?String(l):"success";else if(d.bindTo==="error")c=l!=null?String(l):void 0;else if(d.bindTo.startsWith("data."))Xt(a,d.bindTo.slice(5),l);else return {result:"failure",data:{},error:`[${t}] invalid bindTo "${d.bindTo}": must be "result", "error", or start with "data."`}}catch(l){let f=l instanceof Error?l.message:String(l);return {result:"failure",data:{},error:`[${t}] compute "${d.bindTo}" failed: ${f}`}}return u===void 0?{result:"failure",data:{},error:`[${t}] compute-jsonata: no "result" binding declared \u2014 add '- result = "success"' to expr`}:c?{result:u,data:a,error:c}:{result:u,data:a}}}function ht(e,t,n,r){let{type:s,...o}=e,a={...o,whatToRun:typeof o.whatToRun=="object"?J(o.whatToRun):o.whatToRun};return async i=>{let u=i&&typeof i=="object"&&!Array.isArray(i)?{...i}:{};r&&(u.config=r);try{let c=await n(a,u);if(!e.outputTransforms)return c;try{return dt(e.outputTransforms,c,t)}catch(d){let l=d instanceof Error?d.message:String(d);return {result:"failure",data:{},error:l}}}catch(c){let d=c instanceof Error?c.message:String(c);return {result:"failure",data:{error:`[step-machine-public] step "${t}" invoke threw: ${d}`}}}}}function yt(){return async e=>({result:"success",data:e&&typeof e=="object"&&!Array.isArray(e)?e:{}})}function Yt(e,t,n){return async(r,s)=>{let o=r?.[t.items];if(!Array.isArray(o))return {result:"failure",data:{},error:`[${n}] forEach: "${t.items}" is not an array (got ${typeof o})`};let a=o,i=t.collectAs??`${t.items}_results`;if(a.length===0)return {result:"success",data:{[i]:[]}};let{[t.items]:u,...c}=r,d=Math.max(1,t.concurrency??1),l=new Array(a.length),f=0,h=0,w=0;return await new Promise(p=>{function g(){for(;f<d&&h<a.length;){let x=h++;f++;let P={...c,[t.as]:a[x]};e(P,s).then(S=>{l[x]=S;}).catch(S=>{let y=S instanceof Error?S.message:String(S);l[x]={result:"failure",data:{},error:y};}).finally(()=>{f--,l[x]?.result==="failure"&&w++,h>=a.length&&f===0?p():g();});}f===0&&h>=a.length&&p();}g();}),w>0?{result:"failure",data:{errors:l.filter(g=>g.result==="failure").map(g=>g.error)},error:`[${n}] forEach: ${w}/${a.length} items failed`}:{result:"success",data:{[i]:l.map(p=>p.data)}}}}function wt(e,t,n){let r=Array.isArray(t?.produces_data)?t?.produces_data:void 0,s=Array.isArray(t?.input_validations)?t?.input_validations:void 0,o=t?.config??void 0,a=t?.handler,i;return ft(a)?i=mt(a,e,o):gt(a)?i=ht(a,e,n.invoke,o):i=yt(),t?.forEach&&(i=Yt(i,t.forEach,e)),Y(X(i,r),s,e)}function Q(e,t){let n={};for(let[r,s]of Object.entries(e.steps??{}))n[r]=wt(r,s,t);return n}function ee(e){if(typeof e=="object"&&e!==null){let{command:n,args:r=[],...s}=e,o=xt(n,r);return {...s,command:o.command,args:o.args}}let t=vt(e);if(t.length===0)throw new Error(`Empty command spec: ${JSON.stringify(e)}`);return xt(t[0],t.slice(1))}function xt(e,t){return /^(node|node\.exe)$/i.test(e)?{command:process.execPath,args:t}:/\.m?js$/i.test(e)?{command:process.execPath,args:[e,...t]}:{command:e,args:t}}function vt(e){let t=[],n="",r=null;for(let s of e.trim()){if(r){s===r?r=null:n+=s;continue}if(s==='"'||s==="'"){r=s;continue}if(/\s/.test(s)){n&&(t.push(n),n="");continue}n+=s;}if(r)throw new Error(`Unterminated quote in command: ${e}`);return n&&t.push(n),t}function Z(e){return process.platform==="win32"&&/\.(cmd|bat)$/i.test(e)}function kt(e,t){let{command:n,args:r=[],cwd:s,env:o,timeoutMs:a}=e;return execFileSync(n,r,{shell:Z(n),timeout:a,encoding:t?.encoding??"utf-8",cwd:s,windowsHide:true,env:o?{...process.env,...o}:void 0,input:t?.input})}function ne(e,t){let{command:n,args:r=[],cwd:s,env:o,timeoutMs:a=3e4}=e;execFile(n,r,{shell:Z(n),encoding:"utf8",windowsHide:true,timeout:a,maxBuffer:10*1024*1024,cwd:s,env:o?{...process.env,...o}:void 0},(i,u,c)=>t(i??null,u,c));}v.join(Rt.tmpdir(),".board-live-cards-git-bash-cache.json");function bt(e){let{command:t,args:n=[]}=e;if(process.platform==="win32"){spawn(t,n,{detached:true,stdio:"ignore",windowsHide:true,shell:Z(t)}).unref();return}spawn(t,n,{detached:true,stdio:"ignore"}).unref();}function Et(e,t,n){let r=v.join(e,"board-live-cards-cli.js");if(m.existsSync(r))return {cmd:process.execPath,args:[r,t,...n]};let s=v.join(e,"board-live-cards-cli.ts"),o=v.join(e,"..","..","node_modules","tsx","dist","cli.mjs"),a=v.join(e,"..","..","node_modules",".bin","tsx"),i=m.existsSync(o)?o:a;return m.existsSync(s)&&m.existsSync(i)?{cmd:process.execPath,args:[i,s,t,...n]}:{cmd:process.platform==="win32"?"npx.cmd":"npx",args:["tsx",s,t,...n]}}function At(){return {executeSync(e,t,n){return kt({command:e,args:t,cwd:n?.cwd,timeoutMs:n?.timeout,env:n?.env},{encoding:n?.encoding,input:n?.input})},executeAsync(e,t,n){ne({command:e,args:t},n);},resolveInvocation(e,t){let n=ee({command:e,args:t});return {cmd:n.command,args:n.args??[]}},splitCommand:vt,spawnDetached(e,t){bt({command:e,args:t});}}}function re(e,t){let n=typeof e=="object"?e.value:D(e).value;switch(n){case "source-cli-task-executor":{let r=v.join(t,"source-cli-task-executor.js");if(m.existsSync(r))return {command:process.execPath,args:[r]};let s=v.join(t,"source-cli-task-executor.ts"),o=v.join(t,"..","..","node_modules","tsx","dist","cli.mjs"),a=v.join(t,"..","..","node_modules",".bin","tsx"),i=m.existsSync(o)?o:a;return m.existsSync(s)&&m.existsSync(i)?{command:process.execPath,args:[i,s]}:{command:process.execPath,args:[r]}}case "board-live-cards":{let{cmd:r,args:s}=Et(t,"_",[]);return {command:r,args:s}}default:throw new Error(`resolveBuiltIn: unknown built-in name "${n}". Supported: source-cli-task-executor, board-live-cards`)}}function se(e,t){if(e.howToRun==="built-in"){let{command:r,args:s}=re(e.whatToRun,t);return {command:r,baseArgs:s}}let n=typeof e.whatToRun=="object"?e.whatToRun.value:D(e.whatToRun).value;switch(e.howToRun){case "local-node":return {command:process.execPath,baseArgs:[n]};case "local-python":return {command:process.platform==="win32"?"python":"python3",baseArgs:[n]};case "local-process":return {command:n,baseArgs:[]};default:throw new Error(`resolveBaseInvocation: howToRun "${e.howToRun}" is not a local transport`)}}function oe(e,t){return se(e,t)}function ie(e){let t=e.trim();if(!t)throw new Error("empty stdout");try{return JSON.parse(t)}catch{let n=t.split(/\r?\n/).filter(Boolean),r=n[n.length-1];return JSON.parse(r)}}function ae(e){let t=e.whatToRun;return typeof t=="object"?t.value:D(t).value}function ce(e,t){return {...t,whatToRun:ae(e),...e.extra?{extra:e.extra}:{}}}function ue(e,t,n="invokeExecutionRef"){return pt(e,t,n)}function le(e){return e&&typeof e=="object"&&!Array.isArray(e)&&typeof e.result=="string"&&e.data&&typeof e.data=="object"&&!Array.isArray(e.data)?e:{result:"success",data:e&&typeof e=="object"&&!Array.isArray(e)?e:{stdout:e}}}function N(e){return {result:"failure",data:{error:e}}}function B(e,t,n){let r=n?.label??"invokeExecutionRefSync",s=n?.cliDir??n?.cwd??process.cwd(),o;try{o=ue(e.argsMassaging,ce(e,t),r);}catch(l){let f=l instanceof Error?l.message:String(l);return N(f)}let a;try{a=oe(e,s);}catch(l){let f=l instanceof Error?l.message:String(l);return N(`[${r}] ref resolution failed: ${f}`)}let i=[...a.baseArgs,...o.cmdArgs??[]],u=JSON.stringify(o.stdin??t),c=At(),d;try{d=c.executeSync(a.command,i,{timeout:n?.timeoutMs??3e4,encoding:"utf-8",cwd:n?.cwd,input:u});}catch(l){let f=l,h=(f.stderr?String(f.stderr):"").trim(),w=typeof f.status=="number"?f.status:"unknown",p=h||f.message;return N(`[${r}] ref exited with status ${w}${p?`: ${p}`:""}`)}try{return le(ie(d))}catch{return {result:"success",data:{stdout:d.trim()}}}}var pe={"local-node":B,"local-python":B,"local-process":B,"built-in":B};function de(e,t,n){let r=n?.syncTransports?.[e.howToRun]??pe[e.howToRun];return r?r(e,t,n):N(`[${n?.label??"invokeExecutionRefSync"}] unsupported sync howToRun: ${e.howToRun}`)}function jt(e,t,n){return de(e,t,n)}function ge(e,t){if(process.platform!=="win32"){m.renameSync(e,t);return}let n=[10,20,40,80,160];for(let r=0;r<=n.length;r++)try{m.renameSync(e,t);return}catch(s){let o=s.code;if((o==="EPERM"||o==="EBUSY")&&r<n.length){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,n[r]);continue}throw s}}function Tt(e){function t(r){return v.join(e,...r.split("/"))+".json"}function n(r,s,o,a){if(m.existsSync(r))for(let i of m.readdirSync(r,{withFileTypes:true})){let u=s?`${s}/${i.name}`:i.name;if(i.isDirectory()){n(v.join(r,i.name),u,o,a);continue}if(!i.isFile()||!i.name.endsWith(".json"))continue;let c=u.replace(/\.json$/,"");(!o||c.startsWith(o))&&a.push(c);}}return {read(r){let s=t(r);if(!m.existsSync(s))return null;try{return JSON.parse(m.readFileSync(s,"utf-8"))}catch{return null}},write(r,s){let o=t(r),a=`${o}.${process.pid}.${randomUUID()}.tmp`;m.mkdirSync(v.dirname(o),{recursive:true}),m.writeFileSync(a,JSON.stringify(s,null,2),"utf-8"),ge(a,o);},delete(r){let s=t(r);try{m.existsSync(s)&&m.unlinkSync(s);}catch{}},listKeys(r){let s=[];return n(e,"",r,s),s.sort()}}}var L=class extends Error{constructor(n,r){super(r);this.code=n;this.name="CliExitError";}code},me=".pause";async function qn(e){let t=he(e);if(t.help||e.length===0)throw be(),new L(e.length===0?1:0);let{flowArg:n,dataArg:r,storeArg:s,storeDirArg:o,resumeRequested:a,pauseRequested:i,statusRequested:u}=t;if((i||u)&&(r||a||n))throw new Error("[step-machine-cli] --pause and --status are store-level operations. Do not provide flow, data, or --resume.");if(a&&r)throw new Error("[step-machine-cli] --initial-data cannot be combined with --resume.");let c=ye(s,o);if(u){await xe(c);return}if(i){await we(c);return}if(!n)throw new Error("[step-machine-cli] Flow path is required for run/resume operations.");let d=Ft(n),l=v.dirname(d),f=Re(r),{store:h}=c,w=await I(d),p=ke(w,l);$t(c);let g=new AbortController,x=false,P=H(w,p,{store:h,signal:g.signal,onStep:()=>{!x&&et(c)&&(x=true,g.abort());}}),S;if(a){if(S=await Ct(c),!S){console.warn("[step-machine-cli] No paused run found in store directory."),console.log(JSON.stringify({status:"noop",reason:"no-paused-run"},null,2));return}}else c.storeType==="file"&&!f&&(S=await Ct(c));let y=S?await P.resume(S):await P.run(f);if(x&&y.status==="cancelled"){let M=await Se(h,y.runId);$t(c),console.log(JSON.stringify({runId:y.runId,status:"paused",currentStep:M?.currentStep,pausedAt:M?.pausedAt,stepHistory:y.stepHistory,data:y.data},null,2));return}if(y.status!=="completed"){let M=y.error?.message??y.intent??y.status;throw console.error(`[step-machine-cli] Run failed: ${M}`),new L(1)}console.log(JSON.stringify({runId:y.runId,status:y.status,intent:y.intent,finalStep:y.finalStep,stepHistory:y.stepHistory,data:y.data},null,2));}function he(e){let t=new Set(["--initial-data","--store","--store-dir"]),n={},r=[],s=false,o=false,a=false,i=false;for(let u=0;u<e.length;u++){let c=e[u];if(c==="-h"||c==="--help"){s=true;continue}if(c==="--resume"){o=true;continue}if(c==="--pause"){a=true;continue}if(c==="--status"){i=true;continue}if(t.has(c)){let d=e[u+1];if(!d||d.startsWith("--"))throw new Error(`[step-machine-cli] Missing value for ${c}.`);n[c]=d,u++;continue}if(c.startsWith("--"))throw new Error(`[step-machine-cli] Unknown flag: ${c}`);r.push(c);}if([o,a,i].filter(Boolean).length>1)throw new Error("[step-machine-cli] Use only one of --resume, --pause, or --status at a time.");return {help:s,flowArg:r[0],dataArg:n["--initial-data"],storeArg:String(n["--store"]??"memory").toLowerCase(),storeDirArg:n["--store-dir"],resumeRequested:o,pauseRequested:a,statusRequested:i}}function Ft(e){return v.isAbsolute(e)?e:v.resolve(process.cwd(),e)}function ye(e,t){if(e!=="memory"&&e!=="file")throw new Error(`[step-machine-cli] Invalid --store value "${e}". Expected "memory" or "file".`);if(e==="memory")return {storeType:e,storeDir:void 0,pauseFilePath:void 0,store:new k};if(!t||t.trim().length===0)throw new Error("[step-machine-cli] --store file requires --store-dir <directory>.");let n=Ft(t);return {storeType:e,storeDir:n,pauseFilePath:v.join(n,me),store:new j(Tt(n))}}async function tt(e){if(!e.listRuns)return [];let t=await e.listRuns(),n=[];for(let r of t){let s=await e.loadRunState(r);s&&n.push(s);}return n.sort((r,s)=>(s.updatedAt??s.startedAt??0)-(r.updatedAt??r.startedAt??0)),n}function et(e){return e.storeType!=="file"||!e.pauseFilePath?false:m.existsSync(e.pauseFilePath)}function $t(e){et(e)&&m.unlinkSync(e.pauseFilePath);}async function we(e){if(e.storeType!=="file"||!e.pauseFilePath)throw new Error("[step-machine-cli] --pause requires --store file --store-dir <directory>.");let t=await tt(e.store);if(t.length===0){console.warn("[step-machine-cli] No runs found in store directory. Pause is a no-op."),console.log(JSON.stringify({status:"noop",reason:"no-runs"},null,2));return}if(!t.find(r=>r.status==="running")){console.warn("[step-machine-cli] No running run found. Pause is a no-op."),console.log(JSON.stringify({status:"noop",reason:"no-running-run"},null,2));return}m.mkdirSync(e.storeDir,{recursive:true}),m.writeFileSync(e.pauseFilePath,JSON.stringify({requestedAt:Date.now()}),"utf-8"),console.log(JSON.stringify({status:"pause-requested",storeDir:e.storeDir},null,2));}async function Ct(e){let n=(await tt(e.store)).filter(r=>r.status==="paused");if(n.length!==0)return n.length>1&&console.warn("[step-machine-cli] Multiple paused runs found; resuming the most recently updated run."),n[0].runId}async function Se(e,t){let n=await e.loadRunState(t);if(!n)return null;let r={...n,status:"paused",pausedAt:Date.now(),updatedAt:Date.now()};return await e.saveRunState(t,r),r}async function xe(e){if(e.storeType!=="file")throw new Error("[step-machine-cli] --status requires --store file --store-dir <directory>.");let t=await tt(e.store),n={store:"file",storeDir:e.storeDir,pauseRequested:et(e),totalRuns:t.length,runs:t.map(r=>({runId:r.runId,status:r.status,currentStep:r.currentStep,startedAt:r.startedAt,updatedAt:r.updatedAt,pausedAt:r.pausedAt}))};console.log(JSON.stringify(n,null,2));}function Re(e){if(e)try{let t=JSON.parse(e);if(!t||typeof t!="object"||Array.isArray(t))throw new Error("Initial data must be a JSON object.");return t}catch(t){let n=t instanceof Error?t.message:String(t);throw new Error(`[step-machine-cli] Invalid --initial-data value: ${n}`)}}function ve(e){if(!e||typeof e!="object")return e;let t=e;if(typeof t.whatToRun!="string"||!t.whatToRun.startsWith("b64:"))return e;try{let n=t.whatToRun.slice(4),r=n+"=".repeat((4-n.length%4)%4),s=Buffer.from(r.replace(/-/g,"+").replace(/_/g,"/"),"base64").toString("utf8"),o=JSON.parse(s);return !o||typeof o!="object"||typeof o.value!="string"?e:{...t,whatToRun:o}}catch{return e}}function ke(e,t){return Q(e,{invoke:(r,s)=>jt(ve(r),s,{cliDir:t,cwd:t})})}function be(){console.error("Usage: step-machine-cli <step-flow.yaml> [--initial-data <json>] [--store <memory|file>] [--store-dir <directory>] [--resume]"),console.error(" step-machine-cli --store file --store-dir <directory> --pause"),console.error(" step-machine-cli --store file --store-dir <directory> --status"),console.error(""),console.error("Example:"),console.error(' step-machine-cli examples/cli/step-machine-demo/two-step-math.flow.yaml --initial-data "{"a":3,"b":4}"'),console.error(" step-machine-cli ./flow.yaml --store file --store-dir ./.runs"),console.error(" step-machine-cli ./flow.yaml --store file --store-dir ./.runs --resume"),console.error(" step-machine-cli --store file --store-dir ./.runs --pause"),console.error(" step-machine-cli --store file --store-dir ./.runs --status");}
4
+ export{L as CliExitError,qn as cli};//# sourceMappingURL=step-machine-cli.js.map
5
+ //# sourceMappingURL=step-machine-cli.js.map
@@ -1,5 +1,5 @@
1
- import { ExecutionRef } from './execution-refs.cjs';
2
- import { L as LiveCard, B as BoardStatusObject, J as JournalStorageAdapter, O as OutputStoreEvent } from './board-live-cards-lib-Bg6EvCo5.cjs';
1
+ import { E as ExecutionRef } from './execution-interface-ftO1W7Po.js';
2
+ import { L as LiveCard, B as BoardStatusObject, J as JournalStorageAdapter, O as OutputStoreEvent } from './board-live-cards-lib-tjYsPt5U.js';
3
3
 
4
4
  /**
5
5
  * storage-interface.ts
@@ -266,6 +266,7 @@ interface BoardNonCorePlatformAdapter extends BoardPlatformAdapter {
266
266
  */
267
267
  invokeExecutorSync(ref: ExecutionRef, subcommand: string, args: string[], opts?: {
268
268
  timeout?: number;
269
+ input?: string;
269
270
  }): string;
270
271
  /** Schema-only card validator (no executor invocation). */
271
272
  validateSchema(card: Record<string, unknown>): {
@@ -284,8 +285,8 @@ interface BoardLiveCardsNonCorePublic {
284
285
  isValid: boolean;
285
286
  issues: string[];
286
287
  }>>;
287
- /** body: { "card-content": <card> } — card JSON arrives via stdin */
288
- validateTmpCard(input: CommandInput): CommandResult<{
288
+ /** body: { "card-content": <card> } — card JSON arrives via stdin; validates schema + JSONata + provides refs + source_defs (executor, if configured) */
289
+ validateCardPreflight(input: CommandInput): CommandResult<{
289
290
  cardId: string;
290
291
  isValid: boolean;
291
292
  issues: string[];
@@ -294,6 +295,20 @@ interface BoardLiveCardsNonCorePublic {
294
295
  probeSource(input: CommandInput): CommandResult;
295
296
  /** body: { sourceDef, mockProjections }; params: outRef? */
296
297
  probeTmpSource(input: CommandInput): CommandResult;
298
+ /** body: { "card-content": <card>, "mock-projections"?: {} }; params: sourceIdx, outRef? — card JSON arrives via stdin; no board state needed */
299
+ probeSourcePreflight(input: CommandInput): CommandResult;
300
+ /** body: { "card-content": <card>, "mock-fetched-sources"?: {}, "mock-requires"?: {} } — evaluates compute expressions with supplied data; no board state needed */
301
+ evalCardCompute(input: CommandInput): CommandResult<{
302
+ cardId: string;
303
+ ok: boolean;
304
+ computed_values: Record<string, unknown>;
305
+ errors: Array<{
306
+ bindTo: string;
307
+ error: string;
308
+ }>;
309
+ }>;
310
+ /** body: { "card-content": <card>, "mock-fetched-sources"?: {}, "mock-requires"?: {} } — full cycle: validate → resolve projections → probe sources → compute */
311
+ simulateCardCycle(input: CommandInput): CommandResult;
297
312
  /** no params needed */
298
313
  describeTaskExecutorCapabilities(input: CommandInput): CommandResult;
299
314
  /**
@@ -314,4 +329,52 @@ interface BoardLiveCardsNonCorePublic {
314
329
  }
315
330
  declare function createBoardLiveCardsNonCorePublic(baseRef: KindValueRef, adapter: BoardNonCorePlatformAdapter): BoardLiveCardsNonCorePublic;
316
331
 
317
- export { type BoardPlatformAdapter as B, type CommandInput as C, type KVStorage as K, type BlobStorage as a, type BoardChangeNotification as b, type BoardLiveCardsPublic as c, type CommandResult as d, type KindValueRef as e, type BoardNonCorePlatformAdapter as f, type BoardLiveCardsNonCorePublic as g, createBoardLiveCardsNonCorePublic as h, createBoardLiveCardsPublic as i, parseRef as p, serializeRef as s };
332
+ /**
333
+ * server-runtime/types.ts
334
+ *
335
+ * Platform-free adapter interfaces for the board server runtime.
336
+ *
337
+ * The runtime (index.ts) imports ONLY this file and board-live-cards-public
338
+ * for its dependencies — no node:fs, node:net, node:child_process, etc.
339
+ *
340
+ * Hosts (demo-server, Azure Function, Firebase Function) provide implementations
341
+ * of these interfaces when constructing the runtime.
342
+ */
343
+
344
+ interface InvocationAdapter {
345
+ /**
346
+ * Fire-and-forget invocation of an ExecutionRef with args.
347
+ * Used for chat-handler dispatch, and potentially task-executor / inference-adapter.
348
+ * Returns a promise that resolves when the invocation is dispatched (not completed).
349
+ */
350
+ invoke(ref: ExecutionRef, args: Record<string, unknown>): Promise<{
351
+ dispatched: boolean;
352
+ error?: string;
353
+ }>;
354
+ /**
355
+ * Optional synchronous describe call — asks the target to identify itself.
356
+ * Used for pre-init validation (e.g. confirming a chat-handler reports kind='chat-handler').
357
+ * Hosts that pre-register capabilities at deploy time may omit this.
358
+ */
359
+ describe?(ref: ExecutionRef): Promise<DescribeEnvelope | null>;
360
+ }
361
+ interface NotificationTransport {
362
+ /**
363
+ * Start listening for events on a notification endpoint identified by a kind-ref.
364
+ * The ref kind determines the transport mechanism:
365
+ * ::named-pipe::/tmp/board-x.sock
366
+ * ::firestore-watch::collections/board-x/notifications
367
+ * ::signalr::https://x.service.signalr.net/hub/board-x
368
+ * onEvent is called with parsed JSON notification objects.
369
+ * Returns a teardown function.
370
+ */
371
+ subscribe(ref: KindValueRef, onEvent: (event: unknown) => void): Promise<() => void>;
372
+ }
373
+ interface DescribeEnvelope {
374
+ name: string;
375
+ kind: 'task-executor' | 'chat-handler' | 'inference-adapter';
376
+ protocolVersion: string;
377
+ supports?: string[];
378
+ }
379
+
380
+ export { type BoardPlatformAdapter as B, type CommandInput as C, type DescribeEnvelope as D, type InvocationAdapter as I, type KindValueRef as K, type NotificationTransport as N, type CommandResult as a, type BlobStorage as b, type BoardNonCorePlatformAdapter as c, type BoardLiveCardsNonCorePublic as d, type BoardLiveCardsPublic as e, createBoardLiveCardsNonCorePublic as f, createBoardLiveCardsPublic as g, parseRef as p, serializeRef as s };
@@ -0,0 +1 @@
1
+ "b64:eyJraW5kIjoiZnMtcGF0aCIsInZhbHVlIjoiL2hvbWUvcnVubmVyL3dvcmsveWFtbC1mbG93L3lhbWwtZmxvdy9wdWJsaWMtZXhhbXBsZXMvYm9hcmQvLmRlbW8tc2V0dXAvcnVuLTE3Nzg2NjUwNzg1NzItMzQ2Ni1hOGF5NGsvYm9hcmQtZGVmYXVsdC9nYW5kYWxmLXJ1bnRpbWUvY2FyZHMvc3RvcmUifQ"
@@ -0,0 +1 @@
1
+ "{\"howToRun\":\"local-node\",\"whatToRun\":\"b64:eyJraW5kIjoiZnMtcGF0aCIsInZhbHVlIjoiL2hvbWUvcnVubmVyL3dvcmsveWFtbC1mbG93L3lhbWwtZmxvdy9wdWJsaWMtZXhhbXBsZXMvYm9hcmQvZGVtby1jaGF0LWhhbmRsZXIuanMifQ\",\"meta\":\"chat-handler\"}"
@@ -0,0 +1 @@
1
+ "b64:eyJraW5kIjoiZnMtcGF0aCIsInZhbHVlIjoiL2hvbWUvcnVubmVyL3dvcmsveWFtbC1mbG93L3lhbWwtZmxvdy9wdWJsaWMtZXhhbXBsZXMvYm9hcmQvLmRlbW8tc2V0dXAvcnVuLTE3Nzg2NjUwNzg1NzItMzQ2Ni1hOGF5NGsvYm9hcmQtZGVmYXVsdC9nYW5kYWxmLXJ1bnRpbWUtb3V0Ly5vdXRwdXRzIn0"
@@ -0,0 +1 @@
1
+ "{\"howToRun\":\"local-node\",\"whatToRun\":\"b64:eyJraW5kIjoiZnMtcGF0aCIsInZhbHVlIjoiL2hvbWUvcnVubmVyL3dvcmsveWFtbC1mbG93L3lhbWwtZmxvdy9wdWJsaWMtZXhhbXBsZXMvYm9hcmQvZGVtby10YXNrLWV4ZWN1dG9yLmpzIn0\",\"meta\":\"task-executor\"}"
@@ -0,0 +1,29 @@
1
+ {
2
+ "version": 1,
3
+ "config": {
4
+ "settings": {
5
+ "completion": "manual",
6
+ "refreshStrategy": "data-changed"
7
+ },
8
+ "tasks": {}
9
+ },
10
+ "state": {
11
+ "status": "running",
12
+ "tasks": {},
13
+ "availableOutputs": [],
14
+ "stuckDetection": {
15
+ "is_stuck": false,
16
+ "stuck_description": null,
17
+ "outputs_unresolvable": [],
18
+ "tasks_blocked": []
19
+ },
20
+ "lastUpdated": "2026-05-13T09:37:58.735Z",
21
+ "executionId": "live-1778665078735",
22
+ "executionConfig": {
23
+ "executionMode": "eligibility-mode",
24
+ "conflictStrategy": "alphabetical",
25
+ "completionStrategy": "manual"
26
+ }
27
+ },
28
+ "snapshotAt": "2026-05-13T09:37:58.735Z"
29
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "schema_version": "v1",
3
+ "meta": {
4
+ "board": {
5
+ "path": "b64:eyJraW5kIjoiZnMtcGF0aCIsInZhbHVlIjoiL2hvbWUvcnVubmVyL3dvcmsveWFtbC1mbG93L3lhbWwtZmxvdy9wdWJsaWMtZXhhbXBsZXMvYm9hcmQvLmRlbW8tc2V0dXAvcnVuLTE3Nzg2NjUwNzg1NzItMzQ2Ni1hOGF5NGsvYm9hcmQtZGVmYXVsdC9nYW5kYWxmLXJ1bnRpbWUifQ"
6
+ }
7
+ },
8
+ "summary": {
9
+ "card_count": 0,
10
+ "completed": 0,
11
+ "eligible": 0,
12
+ "pending": 0,
13
+ "blocked": 0,
14
+ "unresolved": 0,
15
+ "failed": 0,
16
+ "in_progress": 0,
17
+ "orphan_cards": 0,
18
+ "topology": {
19
+ "edge_count": 0,
20
+ "max_fan_out_card": null,
21
+ "max_fan_out": 0
22
+ }
23
+ },
24
+ "cards": []
25
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "normalizedQuotes": {
3
+ "quoteResponse": {
4
+ "result": [
5
+ {
6
+ "symbol": "AAPL",
7
+ "shortName": "Apple Inc.",
8
+ "regularMarketPrice": 294.8,
9
+ "regularMarketChange": 2.1200000000000045,
10
+ "regularMarketChangePercent": 0.7243405767391022
11
+ },
12
+ {
13
+ "symbol": "NVDA",
14
+ "shortName": "NVIDIA Corporation",
15
+ "regularMarketPrice": 220.78,
16
+ "regularMarketChange": 1.3400000000000034,
17
+ "regularMarketChangePercent": 0.6106452788917259
18
+ },
19
+ {
20
+ "symbol": "GOOG",
21
+ "shortName": "Alphabet Inc.",
22
+ "regularMarketPrice": 383.82,
23
+ "regularMarketChange": -2.9499999999999886,
24
+ "regularMarketChangePercent": -0.7627272022131987
25
+ },
26
+ {
27
+ "symbol": "MSFT",
28
+ "shortName": "Microsoft Corporation",
29
+ "regularMarketPrice": 407.77,
30
+ "regularMarketChange": -4.890000000000043,
31
+ "regularMarketChangePercent": -1.1849949110648095
32
+ }
33
+ ],
34
+ "error": null
35
+ }
36
+ },
37
+ "prices": [
38
+ {
39
+ "ticker": "AAPL",
40
+ "name": "Apple Inc.",
41
+ "price": 294.8,
42
+ "change": 2.12,
43
+ "chg_pct": 0.72
44
+ },
45
+ {
46
+ "ticker": "NVDA",
47
+ "name": "NVIDIA Corporation",
48
+ "price": 220.78,
49
+ "change": 1.34,
50
+ "chg_pct": 0.61
51
+ },
52
+ {
53
+ "ticker": "GOOG",
54
+ "name": "Alphabet Inc.",
55
+ "price": 383.82,
56
+ "change": -2.95,
57
+ "chg_pct": -0.76
58
+ },
59
+ {
60
+ "ticker": "MSFT",
61
+ "name": "Microsoft Corporation",
62
+ "price": 407.77,
63
+ "change": -4.89,
64
+ "chg_pct": -1.18
65
+ }
66
+ ]
67
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "positions": [
3
+ {
4
+ "ticker": "AAPL",
5
+ "quantity": 10,
6
+ "cost_basis": 150,
7
+ "price": 294.8,
8
+ "value": 2948,
9
+ "gain_$": 1448,
10
+ "gain_%": 96.53,
11
+ "chg_$": 21.2,
12
+ "chg_pct": 0.72
13
+ },
14
+ {
15
+ "ticker": "NVDA",
16
+ "quantity": 5,
17
+ "cost_basis": 310,
18
+ "price": 220.78,
19
+ "value": 1103.9,
20
+ "gain_$": -446.1,
21
+ "gain_%": -28.78,
22
+ "chg_$": 6.7,
23
+ "chg_pct": 0.61
24
+ },
25
+ {
26
+ "ticker": "GOOG",
27
+ "quantity": 3,
28
+ "cost_basis": 33,
29
+ "price": 383.82,
30
+ "value": 1151.46,
31
+ "gain_$": 1052.46,
32
+ "gain_%": 1063.09,
33
+ "chg_$": -8.85,
34
+ "chg_pct": -0.76
35
+ },
36
+ {
37
+ "ticker": "MSFT",
38
+ "quantity": 1,
39
+ "cost_basis": 100,
40
+ "price": 407.77,
41
+ "value": 407.77,
42
+ "gain_$": 307.77,
43
+ "gain_%": 307.77,
44
+ "chg_$": -4.89,
45
+ "chg_pct": -1.18
46
+ }
47
+ ],
48
+ "totalValue": 5611.13,
49
+ "gainers": 2,
50
+ "losers": 2,
51
+ "gainersLosers": "2 up · 2 down"
52
+ }
@@ -0,0 +1,22 @@
1
+ [
2
+ {
3
+ "ticker": "AAPL",
4
+ "quantity": 10,
5
+ "cost_basis": 150
6
+ },
7
+ {
8
+ "ticker": "NVDA",
9
+ "quantity": 5,
10
+ "cost_basis": 310
11
+ },
12
+ {
13
+ "ticker": "GOOG",
14
+ "quantity": 3,
15
+ "cost_basis": 33
16
+ },
17
+ {
18
+ "ticker": "MSFT",
19
+ "quantity": 1,
20
+ "cost_basis": 100
21
+ }
22
+ ]
@@ -0,0 +1,46 @@
1
+ [
2
+ {
3
+ "ticker": "AAPL",
4
+ "quantity": 10,
5
+ "cost_basis": 150,
6
+ "price": 294.8,
7
+ "value": 2948,
8
+ "gain_$": 1448,
9
+ "gain_%": 96.53,
10
+ "chg_$": 21.2,
11
+ "chg_pct": 0.72
12
+ },
13
+ {
14
+ "ticker": "NVDA",
15
+ "quantity": 5,
16
+ "cost_basis": 310,
17
+ "price": 220.78,
18
+ "value": 1103.9,
19
+ "gain_$": -446.1,
20
+ "gain_%": -28.78,
21
+ "chg_$": 6.7,
22
+ "chg_pct": 0.61
23
+ },
24
+ {
25
+ "ticker": "GOOG",
26
+ "quantity": 3,
27
+ "cost_basis": 33,
28
+ "price": 383.82,
29
+ "value": 1151.46,
30
+ "gain_$": 1052.46,
31
+ "gain_%": 1063.09,
32
+ "chg_$": -8.85,
33
+ "chg_pct": -0.76
34
+ },
35
+ {
36
+ "ticker": "MSFT",
37
+ "quantity": 1,
38
+ "cost_basis": 100,
39
+ "price": 407.77,
40
+ "value": 407.77,
41
+ "gain_$": 307.77,
42
+ "gain_%": 307.77,
43
+ "chg_$": -4.89,
44
+ "chg_pct": -1.18
45
+ }
46
+ ]
@@ -0,0 +1,35 @@
1
+ {
2
+ "quoteResponse": {
3
+ "result": [
4
+ {
5
+ "symbol": "AAPL",
6
+ "shortName": "Apple Inc.",
7
+ "regularMarketPrice": 294.8,
8
+ "regularMarketChange": 2.1200000000000045,
9
+ "regularMarketChangePercent": 0.7243405767391022
10
+ },
11
+ {
12
+ "symbol": "NVDA",
13
+ "shortName": "NVIDIA Corporation",
14
+ "regularMarketPrice": 220.78,
15
+ "regularMarketChange": 1.3400000000000034,
16
+ "regularMarketChangePercent": 0.6106452788917259
17
+ },
18
+ {
19
+ "symbol": "GOOG",
20
+ "shortName": "Alphabet Inc.",
21
+ "regularMarketPrice": 383.82,
22
+ "regularMarketChange": -2.9499999999999886,
23
+ "regularMarketChangePercent": -0.7627272022131987
24
+ },
25
+ {
26
+ "symbol": "MSFT",
27
+ "shortName": "Microsoft Corporation",
28
+ "regularMarketPrice": 407.77,
29
+ "regularMarketChange": -4.890000000000043,
30
+ "regularMarketChangePercent": -1.1849949110648095
31
+ }
32
+ ],
33
+ "error": null
34
+ }
35
+ }
@@ -0,0 +1,113 @@
1
+ {
2
+ "schema_version": "v1",
3
+ "meta": {
4
+ "board": {
5
+ "path": "b64:eyJraW5kIjoiZnMtcGF0aCIsInZhbHVlIjoiL2hvbWUvcnVubmVyL3dvcmsveWFtbC1mbG93L3lhbWwtZmxvdy9wdWJsaWMtZXhhbXBsZXMvYm9hcmQvLmRlbW8tc2V0dXAvcnVuLTE3Nzg2NjUwNzg1NzItMzQ2Ni1hOGF5NGsvYm9hcmQtZGVmYXVsdC9ydW50aW1lIn0"
6
+ }
7
+ },
8
+ "summary": {
9
+ "card_count": 3,
10
+ "completed": 3,
11
+ "eligible": 0,
12
+ "pending": 0,
13
+ "blocked": 0,
14
+ "unresolved": 0,
15
+ "failed": 0,
16
+ "in_progress": 0,
17
+ "orphan_cards": 0,
18
+ "topology": {
19
+ "edge_count": 2,
20
+ "max_fan_out_card": "card-portfolio",
21
+ "max_fan_out": 2
22
+ }
23
+ },
24
+ "cards": [
25
+ {
26
+ "name": "card-market-prices",
27
+ "status": "completed",
28
+ "requires": [
29
+ "holdings"
30
+ ],
31
+ "requires_satisfied": [
32
+ "holdings"
33
+ ],
34
+ "requires_missing": [],
35
+ "provides_declared": [
36
+ "quotes"
37
+ ],
38
+ "provides_runtime": [
39
+ "quotes"
40
+ ],
41
+ "blocked_by": [],
42
+ "unblocks": [
43
+ "card-portfolio-value"
44
+ ],
45
+ "runtime": {
46
+ "attempt_count": 2,
47
+ "restart_count": 0,
48
+ "in_progress_since": null,
49
+ "last_transition_at": "2026-05-13T09:38:00.461Z",
50
+ "last_completed_at": "2026-05-13T09:38:00.461Z",
51
+ "last_restarted_at": "2026-05-13T09:37:59.852Z",
52
+ "status_age_ms": 0
53
+ }
54
+ },
55
+ {
56
+ "name": "card-portfolio",
57
+ "status": "completed",
58
+ "requires": [],
59
+ "requires_satisfied": [],
60
+ "requires_missing": [],
61
+ "provides_declared": [
62
+ "holdings"
63
+ ],
64
+ "provides_runtime": [
65
+ "holdings"
66
+ ],
67
+ "blocked_by": [],
68
+ "unblocks": [
69
+ "card-market-prices",
70
+ "card-portfolio-value"
71
+ ],
72
+ "runtime": {
73
+ "attempt_count": 2,
74
+ "restart_count": 0,
75
+ "in_progress_since": null,
76
+ "last_transition_at": "2026-05-13T09:37:59.844Z",
77
+ "last_completed_at": "2026-05-13T09:37:59.844Z",
78
+ "last_restarted_at": "2026-05-13T09:37:59.844Z",
79
+ "status_age_ms": 0
80
+ }
81
+ },
82
+ {
83
+ "name": "card-portfolio-value",
84
+ "status": "completed",
85
+ "requires": [
86
+ "holdings",
87
+ "quotes"
88
+ ],
89
+ "requires_satisfied": [
90
+ "holdings",
91
+ "quotes"
92
+ ],
93
+ "requires_missing": [],
94
+ "provides_declared": [
95
+ "positions"
96
+ ],
97
+ "provides_runtime": [
98
+ "positions"
99
+ ],
100
+ "blocked_by": [],
101
+ "unblocks": [],
102
+ "runtime": {
103
+ "attempt_count": 3,
104
+ "restart_count": 0,
105
+ "in_progress_since": null,
106
+ "last_transition_at": "2026-05-13T09:38:00.466Z",
107
+ "last_completed_at": "2026-05-13T09:38:00.466Z",
108
+ "last_restarted_at": "2026-05-13T09:38:00.466Z",
109
+ "status_age_ms": 0
110
+ }
111
+ }
112
+ ]
113
+ }
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "port": 7799,
3
- "serverMetaStoreRef": "b64:eyJraW5kIjoiZnMtcGF0aCIsInZhbHVlIjoiLi8uc2VydmVyLW1ldGEifQ",
4
3
  "cardsDir": "./cards",
5
4
  "taskExecutorPath": "./demo-task-executor.js",
6
5
  "chatHandlerPath": "./demo-chat-handler.js",