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,287 +0,0 @@
1
- /**
2
- * Portfolio Tracker — Correct Model
3
- *
4
- * Demonstrates externally-driven tasks, engine-stored data, data-changed
5
- * cascade, and retrigger via task-restart.
6
- *
7
- * Graph topology:
8
- * portfolio-form → price-fetch → holdings-table → portfolio-value
9
- * (external) (handler) (handler) (handler)
10
- *
11
- * Key concepts:
12
- * • portfolio-form has NO handler — it's user-editable.
13
- * The caller pushes `task-completed` with data externally.
14
- * • Engine persists `data` on GraphEngineStore (per-task state).
15
- * • Downstream handlers read upstream data from engine state:
16
- * ctx.live.state.tasks['portfolio-form'].data
17
- * • data-changed refresh: reactive layer auto-hashes the data payload
18
- * on external push. When the hash differs from previous, downstream
19
- * tasks become re-eligible.
20
- * • retrigger('price-fetch') sends a task-restart event through the
21
- * engine, which resets the task and re-triggers the cascade.
22
- *
23
- * Timeline:
24
- * T0: Empty board — graph wired, standing by
25
- * T1: User submits 2 holdings → push task-completed for portfolio-form
26
- * data-changed cascade: price-fetch → holdings-table → portfolio-value
27
- * T2: User adds 3rd holding → push task-completed with new data
28
- * new hash → identical cascade, fresh prices
29
- * T3: Force price refresh without form change → retrigger('price-fetch')
30
- * T4: Quiescent
31
- *
32
- * Run with: npx tsx examples/npm-libs/continuous-event-graph/portfolio-tracker.ts
33
- */
34
-
35
- import type { GraphConfig } from '../../src/event-graph/types.js';
36
- import { createReactiveGraph } from '../../src/continuous-event-graph/reactive.js';
37
- import { validateReactiveGraph } from '../../src/continuous-event-graph/validate.js';
38
- import { createCallbackHandler } from '../../src/continuous-event-graph/handlers.js';
39
- import type { TaskHandlerFn, ReactiveGraph } from '../../src/continuous-event-graph/reactive.js';
40
- import type { ResolveCallbackFn } from '../../src/continuous-event-graph/handlers.js';
41
-
42
- // ============================================================================
43
- // Simulated market data
44
- // ============================================================================
45
-
46
- const marketPrices: Record<string, number> = {
47
- AAPL: 198.50,
48
- MSFT: 425.30,
49
- GOOG: 178.90,
50
- AMZN: 192.40,
51
- TSLA: 168.75,
52
- };
53
-
54
- function fetchPrices(symbols: string[]): Record<string, number> {
55
- const prices: Record<string, number> = {};
56
- for (const sym of symbols) {
57
- prices[sym] = marketPrices[sym] ?? 0;
58
- }
59
- return prices;
60
- }
61
-
62
- // ============================================================================
63
- // 1. Define the graph config
64
- // ============================================================================
65
-
66
- const config: GraphConfig = {
67
- id: 'portfolio-tracker',
68
- settings: {
69
- completion: 'manual',
70
- execution_mode: 'eligibility-mode',
71
- refreshStrategy: 'data-changed',
72
- },
73
- tasks: {
74
- 'portfolio-form': {
75
- // No requires — root node, externally driven
76
- provides: ['portfolio-form'],
77
- description: 'Editable portfolio holdings (no handler — external push)',
78
- },
79
- 'price-fetch': {
80
- requires: ['portfolio-form'],
81
- provides: ['price-fetch'],
82
- taskHandlers: ['price-fetch'],
83
- description: 'Fetch market prices for portfolio symbols',
84
- },
85
- 'holdings-table': {
86
- requires: ['portfolio-form', 'price-fetch'],
87
- provides: ['holdings-table'],
88
- taskHandlers: ['holdings-table'],
89
- description: 'Join holdings × prices → table rows',
90
- },
91
- 'portfolio-value': {
92
- requires: ['holdings-table'],
93
- provides: ['portfolio-value'],
94
- taskHandlers: ['portfolio-value'],
95
- description: 'Sum all holding values → total portfolio value',
96
- },
97
- },
98
- };
99
-
100
- // ============================================================================
101
- // 2. Define handlers (portfolio-form has NONE — it's externally driven)
102
- // ============================================================================
103
-
104
- // Lazy resolver — graph doesn't exist at handler-creation time
105
- let graphRef: ReactiveGraph;
106
- const getResolve = (): ResolveCallbackFn => graphRef.resolveCallback.bind(graphRef);
107
-
108
- const handlers: Record<string, TaskHandlerFn> = {
109
- // price-fetch: reads holdings from upstream state, fetches market prices
110
- 'price-fetch': createCallbackHandler(async ({ state }) => {
111
- const formData = state['portfolio-form'] as
112
- { holdings?: Array<{ symbol: string; qty: number }> } | undefined;
113
- const symbols = (formData?.holdings ?? []).map(h => h.symbol);
114
- console.log(` [price-fetch] Fetching prices for: ${symbols.join(', ') || '(none)'}`);
115
- const prices = fetchPrices(symbols);
116
- return { prices };
117
- }, getResolve),
118
-
119
- // holdings-table: reads form data + prices from upstream state, computes rows
120
- 'holdings-table': createCallbackHandler(async ({ state }) => {
121
- const formData = state['portfolio-form'] as
122
- { holdings?: Array<{ symbol: string; qty: number }> } | undefined;
123
- const priceData = state['price-fetch'] as
124
- { prices?: Record<string, number> } | undefined;
125
-
126
- const holdings = formData?.holdings ?? [];
127
- const prices = priceData?.prices ?? {};
128
-
129
- const rows = holdings.map(h => ({
130
- symbol: h.symbol,
131
- qty: h.qty,
132
- price: prices[h.symbol] ?? 0,
133
- value: h.qty * (prices[h.symbol] ?? 0),
134
- }));
135
- console.log(` [holdings-table] ${rows.length} rows computed`);
136
- rows.forEach(r =>
137
- console.log(` ${r.symbol}: ${r.qty} × $${r.price.toFixed(2)} = $${r.value.toFixed(2)}`),
138
- );
139
- return { rows };
140
- }, getResolve),
141
-
142
- // portfolio-value: reads table rows from upstream state, sums values
143
- 'portfolio-value': createCallbackHandler(async ({ state }) => {
144
- const tableData = state['holdings-table'] as
145
- { rows?: Array<{ value: number }> } | undefined;
146
- const rows = tableData?.rows ?? [];
147
- const totalValue = rows.reduce((sum, r) => sum + r.value, 0);
148
- console.log(` [portfolio-value] Total: $${totalValue.toFixed(2)}`);
149
- return { totalValue };
150
- }, getResolve),
151
- };
152
-
153
- // ============================================================================
154
- // 3. Create the reactive graph
155
- // ============================================================================
156
-
157
- const graph = createReactiveGraph(config, {
158
- handlers,
159
- onDrain: (events, live, result) => {
160
- const done = Object.values(live.state.tasks).filter(t => t.status === 'completed').length;
161
- const total = Object.keys(live.config.tasks).length;
162
- if (events.length > 0) {
163
- console.log(` [drain] ${events.length} events, ${done}/${total} done, eligible: [${result.eligible.join(', ')}]`);
164
- }
165
- },
166
- });
167
- graphRef = graph;
168
-
169
- // ============================================================================
170
- // 4. T0: Empty board
171
- // ============================================================================
172
-
173
- console.log('=== Portfolio Tracker ===');
174
- console.log(`Tasks: ${Object.keys(config.tasks).join(' → ')}`);
175
- console.log(`portfolio-form has NO handler — externally driven\n`);
176
-
177
- console.log('--- T0: Empty board ---');
178
- console.log(' No holdings yet. Standing by.\n');
179
-
180
- // ============================================================================
181
- // 5. T1: User submits 2 holdings → external push for portfolio-form
182
- // ============================================================================
183
-
184
- console.log('--- T1: User adds AAPL (50 shares) and MSFT (30 shares) ---\n');
185
-
186
- // External push — portfolio-form completes with data.
187
- // The reactive layer auto-hashes the data payload.
188
- // data-changed cascade triggers: price-fetch → holdings-table → portfolio-value
189
- graph.push({
190
- type: 'task-completed',
191
- taskName: 'portfolio-form',
192
- data: {
193
- holdings: [
194
- { symbol: 'AAPL', qty: 50 },
195
- { symbol: 'MSFT', qty: 30 },
196
- ],
197
- },
198
- timestamp: new Date().toISOString(),
199
- });
200
-
201
- await sleep(2000);
202
- printState('T1');
203
-
204
- // ============================================================================
205
- // 6. T2: User adds a 3rd holding → new data, new hash → cascade
206
- // ============================================================================
207
-
208
- console.log('\n--- T2: User adds GOOG (100 shares) ---\n');
209
-
210
- // Same task, new data. Auto-hash differs → data-changed re-triggers downstream.
211
- graph.push({
212
- type: 'task-completed',
213
- taskName: 'portfolio-form',
214
- data: {
215
- holdings: [
216
- { symbol: 'AAPL', qty: 50 },
217
- { symbol: 'MSFT', qty: 30 },
218
- { symbol: 'GOOG', qty: 100 },
219
- ],
220
- },
221
- timestamp: new Date().toISOString(),
222
- });
223
-
224
- await sleep(2000);
225
- printState('T2');
226
-
227
- // ============================================================================
228
- // 7. T3: Force price refresh — retrigger without form change
229
- // ============================================================================
230
-
231
- console.log('\n--- T3: Force price refresh via retrigger ---\n');
232
-
233
- // Simulate a price change
234
- marketPrices.AAPL = 205.00;
235
- console.log(' [simulated] AAPL price changed to $205.00');
236
-
237
- // retrigger pushes a task-restart event through the engine
238
- graph.retrigger('price-fetch');
239
-
240
- await sleep(2000);
241
- printState('T3');
242
-
243
- // ============================================================================
244
- // 8. T4: Quiescent
245
- // ============================================================================
246
-
247
- console.log('\n--- T4: No changes — board quiescent ---');
248
- const sched = graph.getSchedule();
249
- console.log(` Eligible tasks: ${sched.eligible.length === 0 ? 'none' : sched.eligible.join(', ')}`);
250
-
251
- // ============================================================================
252
- // 9. Validate
253
- // ============================================================================
254
-
255
- console.log('\n--- Validation ---');
256
- const validation = validateReactiveGraph({ graph, handlers });
257
- console.log(` Valid: ${validation.valid} (${validation.issues.length} issues)`);
258
- for (const issue of validation.issues) {
259
- console.log(` [${issue.severity}] ${issue.code}: ${issue.message}`);
260
- }
261
-
262
- graph.dispose();
263
- console.log('\nDone.');
264
-
265
- // ============================================================================
266
- // Helpers
267
- // ============================================================================
268
-
269
- function printState(label: string): void {
270
- console.log(`\n--- ${label} Result ---`);
271
- const state = graph.getState();
272
- for (const [name, task] of Object.entries(state.state.tasks)) {
273
- const hash = task.lastDataHash ? ` (hash: ${task.lastDataHash.slice(0, 8)}…)` : '';
274
- console.log(` ${name}: ${task.status} (${task.executionCount}x)${hash}`);
275
- }
276
-
277
- // Read portfolio value directly from engine state — no sharedState needed
278
- const valueData = state.state.tasks['portfolio-value']?.data as
279
- { totalValue?: number } | undefined;
280
- if (valueData?.totalValue != null) {
281
- console.log(`\n Portfolio Value: $${valueData.totalValue.toFixed(2)}`);
282
- }
283
- }
284
-
285
- function sleep(ms: number): Promise<void> {
286
- return new Promise(resolve => setTimeout(resolve, ms));
287
- }
@@ -1,265 +0,0 @@
1
- /**
2
- * Reactive Graph Example: Live Monitoring Dashboard
3
- *
4
- * Demonstrates the reactive graph's advanced features:
5
- * - Self-sustaining execution (no loops, no daemon)
6
- * - createCallbackHandler + createFireAndForgetHandler
7
- * - Adding nodes at runtime with handlers
8
- * - Conditional routing (on)
9
- * - Handler failure → core engine on_failure tokens
10
- * - Auto dataHash (no explicit hash in handlers)
11
- * - validateReactiveGraph for handler/dispatch checks
12
- * - Observability via onDrain
13
- * - Journal-based event batching
14
- *
15
- * Scenario: A monitoring system that collects metrics, evaluates alerts,
16
- * and dynamically adds notification channels at runtime.
17
- *
18
- * Run with: npx tsx examples/npm-libs/continuous-event-graph/reactive-monitoring.ts
19
- */
20
-
21
- import {
22
- createReactiveGraph,
23
- MemoryJournal,
24
- createCallbackHandler,
25
- createFireAndForgetHandler,
26
- validateReactiveGraph,
27
- } from '../../src/continuous-event-graph/index.js';
28
- import type { GraphConfig, TaskConfig } from '../../src/continuous-event-graph/types.js';
29
- import type { TaskHandlerFn, ReactiveGraph } from '../../src/continuous-event-graph/reactive.js';
30
- import type { ResolveCallbackFn } from '../../src/continuous-event-graph/handlers.js';
31
-
32
- // ============================================================================
33
- // 1. Define the initial graph
34
- // ============================================================================
35
-
36
- const config: GraphConfig = {
37
- id: 'monitoring-dashboard',
38
- settings: {
39
- completion: 'manual', // continuous — never auto-completes
40
- execution_mode: 'eligibility-mode',
41
- },
42
- tasks: {
43
- collect_cpu: {
44
- provides: ['cpu-metrics'],
45
- taskHandlers: ['collect_cpu'],
46
- description: 'Collect CPU utilization metrics',
47
- },
48
- collect_memory: {
49
- provides: ['memory-metrics'],
50
- taskHandlers: ['collect_memory'],
51
- description: 'Collect memory usage metrics',
52
- },
53
- evaluate_health: {
54
- requires: ['cpu-metrics', 'memory-metrics'],
55
- provides: ['health-status'],
56
- taskHandlers: ['evaluate_health'],
57
- on: {
58
- healthy: ['system-ok'],
59
- degraded: ['system-degraded'],
60
- critical: ['system-critical'],
61
- },
62
- description: 'Evaluate system health from all metrics',
63
- },
64
- alert_oncall: {
65
- requires: ['system-critical'],
66
- provides: ['oncall-notified'],
67
- taskHandlers: ['alert_oncall'],
68
- description: 'Page the on-call engineer',
69
- },
70
- log_status: {
71
- requires: ['system-ok'],
72
- provides: ['status-logged'],
73
- taskHandlers: ['log_status'],
74
- description: 'Log healthy status for audit',
75
- },
76
- scale_up: {
77
- requires: ['system-degraded'],
78
- provides: ['scaled-up'],
79
- taskHandlers: ['scale_up'],
80
- on_failure: ['scale-failed'],
81
- description: 'Auto-scale infrastructure',
82
- },
83
- escalate: {
84
- requires: ['scale-failed'],
85
- provides: ['escalated'],
86
- taskHandlers: ['escalate'],
87
- description: 'Escalate to platform team when auto-scale fails',
88
- },
89
- },
90
- };
91
-
92
- // ============================================================================
93
- // 2. Simulated metrics
94
- // ============================================================================
95
-
96
- let cpuLoad = 45; // start normal
97
- let memoryUsage = 60;
98
-
99
- function simulateMetrics(): { cpu: number; memory: number } {
100
- // Gradually increase load to trigger different paths
101
- cpuLoad = Math.min(99, cpuLoad + Math.floor(Math.random() * 15));
102
- memoryUsage = Math.min(95, memoryUsage + Math.floor(Math.random() * 10));
103
- return { cpu: cpuLoad, memory: memoryUsage };
104
- }
105
-
106
- // ============================================================================
107
- // 3. Create reactive graph
108
- // ============================================================================
109
-
110
- console.log('=== Reactive Monitoring Dashboard ===\n');
111
-
112
- // Lazy resolver — graph doesn't exist at handler-creation time
113
- let graphRef: ReactiveGraph;
114
- const getResolve = (): ResolveCallbackFn => graphRef.resolveCallback.bind(graphRef);
115
-
116
- // Handlers use createCallbackHandler for data-producing tasks and
117
- // createFireAndForgetHandler for side-effect-only tasks.
118
- // No explicit dataHash — the reactive layer auto-computes from data.
119
-
120
- const handlers: Record<string, TaskHandlerFn> = {
121
- // Data-producing handlers — return data and let auto-hash do the rest
122
- collect_cpu: createCallbackHandler(async ({ nodeId }) => {
123
- const { cpu } = simulateMetrics();
124
- console.log(` [${nodeId}] CPU: ${cpu}%`);
125
- return { cpu };
126
- }, getResolve),
127
-
128
- collect_memory: createCallbackHandler(async ({ nodeId }) => {
129
- const { memory } = simulateMetrics();
130
- console.log(` [${nodeId}] Memory: ${memory}%`);
131
- return { memory };
132
- }, getResolve),
133
-
134
- // evaluate_health uses conditional routing (on: { healthy, degraded, critical })
135
- // resolveCallback doesn't support `result`, so we push directly to the graph
136
- evaluate_health: async ({ nodeId, callbackToken }) => {
137
- setTimeout(() => {
138
- let status: string;
139
- if (cpuLoad > 90 || memoryUsage > 90) {
140
- status = 'critical';
141
- } else if (cpuLoad > 70 || memoryUsage > 75) {
142
- status = 'degraded';
143
- } else {
144
- status = 'healthy';
145
- }
146
- console.log(` [${nodeId}] Health: ${status.toUpperCase()} (CPU=${cpuLoad}%, Mem=${memoryUsage}%)`);
147
- // Use graph.push directly for conditional routing (result field)
148
- graphRef.push({
149
- type: 'task-completed',
150
- taskName: nodeId,
151
- result: status,
152
- data: { status, cpu: cpuLoad, memory: memoryUsage },
153
- timestamp: new Date().toISOString(),
154
- });
155
- }, 50);
156
- return 'task-initiated';
157
- },
158
-
159
- // Side-effect-only handlers — fire and forget (logging, alerting)
160
- alert_oncall: createFireAndForgetHandler(async ({ nodeId }) => {
161
- console.log(` [${nodeId}] 🚨 PAGING ON-CALL: System critical!`);
162
- await sleep(100);
163
- }, getResolve),
164
-
165
- log_status: createFireAndForgetHandler(({ nodeId }) => {
166
- console.log(` [${nodeId}] ✅ System healthy — logged.`);
167
- }, getResolve),
168
-
169
- scale_up: createCallbackHandler(async ({ nodeId }) => {
170
- console.log(` [${nodeId}] ⚡ Scaling up infrastructure...`);
171
- await sleep(100);
172
- // Simulate scale failure 50% of the time
173
- if (Math.random() > 0.5) {
174
- throw new Error('Auto-scale service unavailable');
175
- }
176
- console.log(` [${nodeId}] Scaled up successfully.`);
177
- return {};
178
- }, getResolve),
179
-
180
- escalate: createFireAndForgetHandler(({ nodeId }) => {
181
- console.log(` [${nodeId}] 📢 Escalating to platform team — auto-scale failed.`);
182
- }, getResolve),
183
- };
184
-
185
- const rg = createReactiveGraph(config, {
186
- handlers,
187
-
188
- onDrain: (events, live, result) => {
189
- const statuses = Object.entries(live.state.tasks)
190
- .map(([n, s]) => `${n}=${s.status}`)
191
- .join(', ');
192
- console.log(` [drain] ${events.length} events | eligible: [${result.eligible.join(', ')}]`);
193
- },
194
- });
195
- graphRef = rg;
196
-
197
- // ============================================================================
198
- // 4. Kick it off — one push, the graph drives itself
199
- // ============================================================================
200
-
201
- console.log('Phase 1: Initial metrics collection\n');
202
- rg.push({ type: 'inject-tokens', tokens: [], timestamp: new Date().toISOString() });
203
-
204
- await sleep(1000);
205
-
206
- // ============================================================================
207
- // 5. Add a Slack notification node at runtime
208
- // ============================================================================
209
-
210
- console.log('\n--- Adding Slack notification node at runtime ---\n');
211
-
212
- const slackConfig: TaskConfig = {
213
- requires: ['system-degraded'],
214
- provides: ['slack-notified'],
215
- taskHandlers: ['notify_slack'],
216
- description: 'Send alert to #incidents Slack channel',
217
- };
218
-
219
- // Use createFireAndForgetHandler — Slack notification is a side-effect
220
- const slackHandler: TaskHandlerFn = createFireAndForgetHandler(({ nodeId }) => {
221
- console.log(` [${nodeId}] 💬 Slack → #incidents: System degraded, auto-scaling...`);
222
- }, getResolve);
223
-
224
- rg.registerHandler('notify_slack', slackHandler);
225
- rg.addNode('notify_slack', slackConfig);
226
-
227
- await sleep(500);
228
-
229
- // ============================================================================
230
- // 6. Show final state
231
- // ============================================================================
232
-
233
- console.log('\n=== Final State ===\n');
234
-
235
- const state = rg.getState();
236
- for (const [name, task] of Object.entries(state.state.tasks)) {
237
- const hash = task.lastDataHash ? ` (hash: ${task.lastDataHash})` : '';
238
- console.log(` ${name}: ${task.status} [${task.executionCount}x]${hash}`);
239
- }
240
-
241
- console.log(`\n Outputs: [${state.state.availableOutputs.join(', ')}]`);
242
-
243
- // ============================================================================
244
- // 7. Validate reactive graph consistency
245
- // ============================================================================
246
-
247
- console.log('\n=== Validation ===');
248
- const validation = validateReactiveGraph({
249
- graph: rg,
250
- handlers: { ...handlers, notify_slack: slackHandler },
251
- });
252
- console.log(` Valid: ${validation.valid} (${validation.issues.length} issues)`);
253
- for (const issue of validation.issues) {
254
- console.log(` [${issue.severity}] ${issue.code}: ${issue.message}`);
255
- }
256
-
257
- rg.dispose();
258
-
259
- // ============================================================================
260
- // Util
261
- // ============================================================================
262
-
263
- function sleep(ms: number): Promise<void> {
264
- return new Promise(resolve => setTimeout(resolve, ms));
265
- }