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,366 +0,0 @@
1
- #!/usr/bin/env python3
2
- """portfolio-tracker.py — E2E orchestrator for the portfolio board demo.
3
-
4
- Black-box CLI client. All board and card-store operations are performed by
5
- shelling out to board-live-cards-cli and card-store-cli. No env vars. No
6
- fallbacks or defaults.
7
- """
8
-
9
- import copy
10
- import base64
11
- import json
12
- import os
13
- import shutil
14
- import subprocess
15
- import sys
16
- import tempfile
17
- import time
18
- import argparse
19
-
20
-
21
- def serialize_ref(ref: dict[str, str]) -> str:
22
- payload = json.dumps({"kind": ref.get("kind", ""), "value": ref.get("value", "")}, separators=(",", ":")).encode("utf-8")
23
- return "b64:" + base64.urlsafe_b64encode(payload).decode("ascii").rstrip("=")
24
-
25
-
26
- _CLI_PARSER = argparse.ArgumentParser()
27
- _MODE_GROUP = _CLI_PARSER.add_mutually_exclusive_group()
28
- _MODE_GROUP.add_argument('--run-pycli', action='store_true', help='Use pycli for board/card operations (default)')
29
- _MODE_GROUP.add_argument('--run-nodecli', action='store_true', help='Use node cli for board/card operations')
30
- _CLI_ARGS = _CLI_PARSER.parse_args()
31
- RUN_PYCLI = not _CLI_ARGS.run_nodecli
32
-
33
- # ── Path resolution ────────────────────────────────────────────────────────────
34
- _HERE = os.path.dirname(os.path.abspath(__file__))
35
- _REPO_ROOT = os.path.normpath(os.path.join(_HERE, '..', '..', '..', '..'))
36
-
37
- NODE = shutil.which('node')
38
- if not NODE:
39
- print('[ERROR] node not found on PATH', file=sys.stderr)
40
- sys.exit(1)
41
-
42
- BOARD_CLI = os.path.join(_REPO_ROOT, 'board-live-cards-cli.js')
43
- CARD_STORE_CLI = os.path.join(_REPO_ROOT, 'card-store.js')
44
- FETCH_PRICES_PY = os.path.join(_HERE, 'portfolio-tracker-fetch-prices.py')
45
-
46
- PYTHON = shutil.which('python')
47
- if not PYTHON:
48
- print('[ERROR] python not found on PATH (required for portfolio-tracker-fetch-prices.py)', file=sys.stderr)
49
- sys.exit(1)
50
-
51
- PYTHON_RUNNER = sys.executable or PYTHON
52
-
53
- BOARD_PYCLI = os.path.join(_REPO_ROOT, 'pycli', 'main', 'board_live_cards_pycli.py')
54
- CARD_STORE_PYCLI = os.path.join(_REPO_ROOT, 'pycli', 'main', 'card_store_pycli.py')
55
-
56
- if RUN_PYCLI:
57
- if not os.path.exists(BOARD_PYCLI):
58
- print(f'[ERROR] pycli entry not found: {BOARD_PYCLI}', file=sys.stderr)
59
- sys.exit(1)
60
- if not os.path.exists(CARD_STORE_PYCLI):
61
- print(f'[ERROR] pycli entry not found: {CARD_STORE_PYCLI}', file=sys.stderr)
62
- sys.exit(1)
63
-
64
- if RUN_PYCLI:
65
- ACTIVE_BOARD_BIN = [PYTHON_RUNNER, BOARD_PYCLI]
66
- ACTIVE_CARD_STORE_BIN = [PYTHON_RUNNER, CARD_STORE_PYCLI]
67
- ACTIVE_BOARD_SUFFIX = []
68
- else:
69
- ACTIVE_BOARD_BIN = [NODE, BOARD_CLI]
70
- ACTIVE_CARD_STORE_BIN = [NODE, CARD_STORE_CLI]
71
- ACTIVE_BOARD_SUFFIX = []
72
-
73
- # ── Runtime directories (under os.tmpdir()/experiment/) ───────────────────────
74
- _TMP_BASE = tempfile.mkdtemp(prefix='experiment-')
75
- CARDSTORE_DIR = os.path.join(_TMP_BASE, 'cardstore')
76
- BOARDRUNTIME_DIR = os.path.join(_TMP_BASE, 'boardruntime')
77
- OUTPUTS_DIR = os.path.join(_TMP_BASE, 'outputs')
78
-
79
- CARDSTORE_REF = serialize_ref({'kind': 'fs-path', 'value': CARDSTORE_DIR})
80
- BOARDRUNTIME_REF = serialize_ref({'kind': 'fs-path', 'value': BOARDRUNTIME_DIR})
81
- OUTPUTS_REF = serialize_ref({'kind': 'fs-path', 'value': OUTPUTS_DIR})
82
-
83
- # ── Inline card definitions ────────────────────────────────────────────────────
84
- CARD_PORTFOLIO_FORM = {
85
- "id": "portfolio-form",
86
- "meta": {"title": "Portfolio Holdings Form"},
87
- "provides": [{"bindTo": "holdings", "ref": "card_data.holdings"}],
88
- "card_data": {"holdings": []},
89
- "view": {
90
- "elements": [
91
- {"kind": "table", "label": "Holdings",
92
- "data": {"bind": "card_data.holdings", "columns": ["symbol", "qty"]}}
93
- ]
94
- }
95
- }
96
-
97
- CARD_PRICE_FETCH = {
98
- "id": "price-fetch",
99
- "meta": {"title": "Fetch Market Prices"},
100
- "requires": ["holdings"],
101
- "provides": [{"bindTo": "prices", "ref": "fetched_sources.prices"}],
102
- "card_data": {},
103
- "source_defs": [{
104
- "kind": "mock-quotes",
105
- "bindTo": "prices",
106
- "outputFile": "prices.json",
107
- "projections": {"tickers": "requires.holdings.symbol"}
108
- }],
109
- "view": {
110
- "elements": [
111
- {"kind": "table", "label": "Market Prices",
112
- "data": {"bind": "fetched_sources.prices"}}
113
- ]
114
- }
115
- }
116
-
117
- CARD_HOLDINGS_TABLE = {
118
- "id": "holdings-table",
119
- "meta": {"title": "Holdings Table"},
120
- "requires": ["holdings", "prices"],
121
- "provides": [{"bindTo": "table", "ref": "computed_values.table"}],
122
- "card_data": {},
123
- "compute": [{
124
- "bindTo": "table",
125
- "expr": (
126
- '{ "rows": $map(requires.holdings, function($h) { '
127
- '{ "symbol": $h.symbol, "qty": $h.qty, '
128
- '"price": $lookup(requires.prices, $h.symbol), '
129
- '"value": $h.qty * $lookup(requires.prices, $h.symbol) } }) }'
130
- )
131
- }],
132
- "view": {
133
- "elements": [
134
- {"kind": "table", "label": "Portfolio Positions",
135
- "data": {"bind": "computed_values.table.rows",
136
- "columns": ["symbol", "qty", "price", "value"]}}
137
- ]
138
- }
139
- }
140
-
141
- CARD_PORTFOLIO_VALUE = {
142
- "id": "portfolio-value",
143
- "meta": {"title": "Portfolio Total Value"},
144
- "requires": ["table"],
145
- "provides": [{"bindTo": "totalValue", "ref": "computed_values.totalValue"}],
146
- "card_data": {},
147
- "compute": [
148
- {"bindTo": "totalValue", "expr": "$sum(requires.table.rows.value)"}
149
- ],
150
- "view": {
151
- "elements": [
152
- {"kind": "metric", "label": "Total Portfolio Value",
153
- "data": {"bind": "computed_values.totalValue"}}
154
- ]
155
- }
156
- }
157
-
158
- # ── Helpers ────────────────────────────────────────────────────────────────────
159
- def set_holdings(card_json: dict, holdings: dict) -> dict:
160
- card = copy.deepcopy(card_json)
161
- card["card_data"]["holdings"] = [
162
- {"symbol": symbol, "qty": qty}
163
- for symbol, qty in holdings.items()
164
- ]
165
- return card
166
-
167
-
168
- def run_board(*args):
169
- subprocess.run([*ACTIVE_BOARD_BIN, *args, *ACTIVE_BOARD_SUFFIX], check=True, shell=False)
170
-
171
-
172
- def run_board_with_input(*args, input_json: str):
173
- subprocess.run(
174
- [*ACTIVE_BOARD_BIN, *args, *ACTIVE_BOARD_SUFFIX],
175
- input=input_json, check=True, shell=False, text=True,
176
- )
177
-
178
-
179
- def run_board_capture(*args) -> str:
180
- result = subprocess.run(
181
- [*ACTIVE_BOARD_BIN, *args, *ACTIVE_BOARD_SUFFIX],
182
- check=True, shell=False, capture_output=True, text=True,
183
- )
184
- return result.stdout
185
-
186
-
187
- def run_card_store_set(card: dict):
188
- subprocess.run(
189
- [*ACTIVE_CARD_STORE_BIN, 'set', '--store-ref', CARDSTORE_REF],
190
- input=json.dumps(card),
191
- check=True,
192
- shell=False,
193
- text=True,
194
- )
195
-
196
-
197
- def read_json(path: str):
198
- with open(path, encoding='utf-8') as f:
199
- return json.load(f)
200
-
201
-
202
- def wait_for_completed(label: str, timeout_s: float = 10.0, poll_s: float = 0.5):
203
- required_names = {'portfolio-form', 'price-fetch', 'holdings-table', 'portfolio-value'}
204
- deadline = time.monotonic() + timeout_s
205
- while time.monotonic() < deadline:
206
- raw = run_board_capture('status', '--base-ref', BOARDRUNTIME_REF)
207
- data = json.loads(raw).get('data', {})
208
- cards = data.get('cards', [])
209
- completed = {c['name'] for c in cards if c.get('status') == 'completed'}
210
- if required_names.issubset(completed):
211
- print(f'[{label}] all cards completed.')
212
- return
213
- time.sleep(poll_s)
214
- # timed out — print status and exit
215
- raw = run_board_capture('status', '--base-ref', BOARDRUNTIME_REF)
216
- print(f'[ERROR] {label}: timed out waiting for all cards to complete.', file=sys.stderr)
217
- print(raw, file=sys.stderr)
218
- sys.exit(1)
219
-
220
-
221
- # ── T0a — Create runtime directories ──────────────────────────────────────────
222
- print('\n=== T0a: Create runtime directories ===')
223
- for d in (CARDSTORE_DIR, BOARDRUNTIME_DIR, OUTPUTS_DIR):
224
- os.makedirs(d)
225
- print(f' created: {d}')
226
-
227
- # ── T0b — Init board ───────────────────────────────────────────────────────────
228
- print('\n=== T0b: Init board ===')
229
- _task_executor_body = json.dumps({
230
- 'task-executor-ref': {
231
- 'meta': 'task-executor',
232
- 'howToRun': 'local-python',
233
- 'whatToRun': serialize_ref({'kind': 'fs-path', 'value': FETCH_PRICES_PY}),
234
- }
235
- })
236
- run_board_with_input(
237
- 'init',
238
- '--base-ref', BOARDRUNTIME_REF,
239
- '--card-store-ref', CARDSTORE_REF,
240
- '--outputs-store-ref', OUTPUTS_REF,
241
- input_json=_task_executor_body,
242
- )
243
-
244
- # ── T0c — Set all cards into card store ────────────────────────────────────────
245
- print('\n=== T0c: Set all cards into card store ===')
246
- run_card_store_set(set_holdings(CARD_PORTFOLIO_FORM, {"AAPL": 50, "MSFT": 30}))
247
- run_card_store_set(CARD_PRICE_FETCH)
248
- run_card_store_set(CARD_HOLDINGS_TABLE)
249
- run_card_store_set(CARD_PORTFOLIO_VALUE)
250
-
251
- # ── T0d — Upsert cards to board ────────────────────────────────────────────────
252
- print('\n=== T0d: Upsert cards to board ===')
253
- for _card_id in ('portfolio-form', 'price-fetch', 'holdings-table', 'portfolio-value'):
254
- run_board('upsert-card', '--base-ref', BOARDRUNTIME_REF, '--card-id', _card_id)
255
-
256
- # ── T1 — Wait for all cards completed ──────────────────────────────────────────
257
- print('\n=== T1: Wait for all cards completed ===')
258
- wait_for_completed('T1')
259
-
260
- _prices_path = os.path.join(OUTPUTS_DIR, 'data-objects', 'prices.json')
261
- _prices_t1 = read_json(_prices_path)
262
- assert isinstance(_prices_t1, dict) and len(_prices_t1) > 0, \
263
- 'T1: prices.json is empty or not an object'
264
- assert set(_prices_t1.keys()) == {'AAPL', 'MSFT'}, \
265
- f'T1: expected keys {{AAPL, MSFT}}, got {set(_prices_t1.keys())}'
266
- assert all(isinstance(v, (int, float)) for v in _prices_t1.values()), \
267
- 'T1: all price values must be numbers'
268
- print('[T1] assertion passed: prices.json has AAPL, MSFT with numeric values.')
269
-
270
- # ── T2a — Update holdings (GOOG added) ────────────────────────────────────────
271
- print('\n=== T2a: Update holdings (GOOG added) ===')
272
- run_card_store_set(set_holdings(CARD_PORTFOLIO_FORM, {"AAPL": 50, "MSFT": 30, "GOOG": 100}))
273
-
274
- # ── T2b — Upsert portfolio-form with --restart ─────────────────────────────────
275
- print('\n=== T2b: Upsert portfolio-form --restart ===')
276
- run_board('upsert-card', '--base-ref', BOARDRUNTIME_REF,
277
- '--card-id', 'portfolio-form', '--restart')
278
-
279
- # ── T2c — Wait and assert ──────────────────────────────────────────────────────
280
- print('\n=== T2c: Wait for all cards completed ===')
281
- wait_for_completed('T2c')
282
-
283
- _prices_t2c = read_json(_prices_path)
284
- assert set(_prices_t2c.keys()) == {'AAPL', 'MSFT', 'GOOG'}, \
285
- f'T2c: expected keys {{AAPL, MSFT, GOOG}}, got {set(_prices_t2c.keys())}'
286
-
287
- _ht_cv_path = os.path.join(OUTPUTS_DIR, 'cards', 'holdings-table', 'computed_values.json')
288
- _ht_cv_t2c = read_json(_ht_cv_path)
289
- assert len(_ht_cv_t2c['table']['rows']) == 3, \
290
- f'T2c: expected 3 rows in holdings-table, got {len(_ht_cv_t2c["table"]["rows"])}'
291
- print('[T2c] assertions passed: 3 tickers in prices, 3 rows in holdings-table.')
292
-
293
- # ── T3 — Retrigger price-fetch, wait ──────────────────────────────────────────
294
- print('\n=== T3: Retrigger price-fetch ===')
295
- run_board('retrigger', '--base-ref', BOARDRUNTIME_REF, '--id', 'price-fetch')
296
- wait_for_completed('T3')
297
-
298
- _prices_t3 = read_json(_prices_path)
299
- assert set(_prices_t3.keys()) == {'AAPL', 'MSFT', 'GOOG'}, \
300
- f'T3: expected 3 tickers, got {set(_prices_t3.keys())}'
301
- assert _prices_t3 != _prices_t2c, \
302
- 'T3: prices must differ from T2c values after retrigger (random regeneration)'
303
- print('[T3] assertions passed: 3 tickers, prices differ from T2c.')
304
-
305
- # ── T4 — Rapid 5× portfolio-form updates (queue stress test) ──────────────────
306
- print('\n=== T4: Rapid 5x portfolio-form updates ===')
307
- for _holdings in [
308
- {"AAPL": 50, "MSFT": 30, "GOOG": 100, "AMZN": 40}, # V3
309
- {"AAPL": 45, "MSFT": 30, "GOOG": 110, "AMZN": 40, "TSLA": 60}, # V4
310
- {"AAPL": 45, "MSFT": 30, "GOOG": 110, "AMZN": 100}, # V4a
311
- {"AAPL": 45, "MSFT": 30, "GOOG": 110, "AMZN": 140, "TSLA": 60}, # V4b
312
- {"AAPL": 40, "MSFT": 35, "GOOG": 120, "TSLA": 70}, # V5
313
- ]:
314
- run_card_store_set(set_holdings(CARD_PORTFOLIO_FORM, _holdings))
315
- run_board('upsert-card', '--base-ref', BOARDRUNTIME_REF,
316
- '--card-id', 'portfolio-form', '--restart')
317
-
318
- wait_for_completed('T4')
319
-
320
- _prices_t4 = read_json(_prices_path)
321
- assert set(_prices_t4.keys()) == {'AAPL', 'MSFT', 'GOOG', 'TSLA'}, \
322
- f'T4: expected keys {{AAPL, MSFT, GOOG, TSLA}}, got {set(_prices_t4.keys())}'
323
- assert 'AMZN' not in _prices_t4, \
324
- 'T4: AMZN must not be present (board must have settled on V5 holdings)'
325
- print('[T4] assertions passed: V5 tickers only, AMZN absent.')
326
-
327
- # ── T5 — Print final status and cross-check ────────────────────────────────────
328
- print('\n=== T5: Print final status and cross-check ===')
329
-
330
- # Step 1: Wait for all cards completed (stable state before any assertions)
331
- wait_for_completed('T5')
332
-
333
- # Step 2: Capture live CLI status
334
- _cli_raw = run_board_capture('status', '--base-ref', BOARDRUNTIME_REF)
335
- _cli_status = json.loads(_cli_raw)['data']
336
-
337
- # Step 3: Read status.json from outputs store
338
- _file_status = read_json(os.path.join(OUTPUTS_DIR, 'status.json'))
339
-
340
- # Step 4: Cross-check CLI vs file status
341
- assert json.dumps(_cli_status, sort_keys=True) == json.dumps(_file_status, sort_keys=True), \
342
- 'T5: CLI status does not match status.json snapshot'
343
- print('[T5] cross-check passed: CLI status matches status.json.')
344
-
345
- # Step 5: Print holdings-table computed values
346
- _ht_cv = read_json(_ht_cv_path)
347
- print('\nFinal portfolio positions table:')
348
- print(json.dumps(_ht_cv['table'], indent=2))
349
-
350
- # Step 6: Totals cross-verify: holdings × prices == totalValue
351
- V5_HOLDINGS = {"AAPL": 40, "MSFT": 35, "GOOG": 120, "TSLA": 70}
352
- _prices_final = read_json(_prices_path)
353
- _pv_cv = read_json(
354
- os.path.join(OUTPUTS_DIR, 'cards', 'portfolio-value', 'computed_values.json')
355
- )
356
- _total_value = _pv_cv['totalValue']
357
- _expected = sum(qty * _prices_final[sym] for sym, qty in V5_HOLDINGS.items())
358
- assert round(_expected, 2) == round(_total_value, 2), \
359
- f'T5: totals mismatch: expected={round(_expected, 2)}, got={round(_total_value, 2)}'
360
- print(f'[T5] totals assertion passed: expected={round(_expected, 2)}, totalValue={round(_total_value, 2)}')
361
-
362
- # Step 7: Print full CLI status
363
- print('\nFinal board status:')
364
- print(json.dumps(_cli_status, indent=2))
365
-
366
- print('\n=== portfolio-tracker completed successfully ===')
@@ -1,41 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1" />
6
- <title>LiveCards Browser Demo Moved</title>
7
- <meta http-equiv="refresh" content="0; url=../../example-board/demo-shell.html" />
8
- <style>
9
- body {
10
- font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
11
- background: #f5f1e8;
12
- color: #1f2937;
13
- margin: 0;
14
- min-height: 100vh;
15
- display: grid;
16
- place-items: center;
17
- padding: 24px;
18
- }
19
-
20
- main {
21
- max-width: 680px;
22
- background: #fffdf8;
23
- border: 1px solid #d6cdbd;
24
- border-radius: 16px;
25
- padding: 28px;
26
- box-shadow: 0 20px 50px rgba(56, 46, 33, 0.08);
27
- }
28
-
29
- a {
30
- color: #8a3b12;
31
- }
32
- </style>
33
- </head>
34
- <body>
35
- <main>
36
- <h1>LiveCards browser demo moved</h1>
37
- <p>The maintained browser demo is now the example-board shell so there is a single LiveCards example path to keep current.</p>
38
- <p><a href="../../example-board/demo-shell.html">Open the example-board demo shell</a></p>
39
- </main>
40
- </body>
41
- </html>