yaml-flow 5.4.2 → 7.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 (252) hide show
  1. package/board-live-cards-cli.js +6 -6
  2. package/browser/asset-integrity.json +10 -0
  3. package/browser/board-livecards-client.js +2 -0
  4. package/browser/board-livecards-client.js.map +1 -0
  5. package/browser/board-livecards-localstorage.js +10 -0
  6. package/browser/board-livecards-localstorage.js.map +1 -0
  7. package/browser/board-livegraph-engine.js +2 -1676
  8. package/browser/board-livegraph-engine.js.map +1 -1
  9. package/browser/card-compute.js +28 -28
  10. package/browser/compute-jsonata.js +5 -0
  11. package/browser/compute-jsonata.js.map +1 -0
  12. package/browser/live-cards.js +561 -129
  13. package/browser/live-cards.schema.json +418 -132
  14. package/card-store.js +37 -0
  15. package/dist/batch/index.cjs +1 -108
  16. package/dist/batch/index.cjs.map +1 -1
  17. package/dist/batch/index.js +1 -106
  18. package/dist/batch/index.js.map +1 -1
  19. package/dist/board-live-cards-lib-Bg6EvCo5.d.cts +136 -0
  20. package/dist/board-live-cards-lib-jM2uYG1v.d.ts +136 -0
  21. package/dist/board-live-cards-public-CW5074xr.d.cts +318 -0
  22. package/dist/board-live-cards-public-hnZo0mAf.d.ts +318 -0
  23. package/dist/board-livegraph-runtime/index.cjs +2 -1671
  24. package/dist/board-livegraph-runtime/index.cjs.map +1 -1
  25. package/dist/board-livegraph-runtime/index.d.cts +12 -11
  26. package/dist/board-livegraph-runtime/index.d.ts +12 -11
  27. package/dist/board-livegraph-runtime/index.js +2 -1662
  28. package/dist/board-livegraph-runtime/index.js.map +1 -1
  29. package/dist/board-livegraph-runtime/jsonata-sync.cjs +7623 -0
  30. package/dist/card-compute/index.cjs +9 -7159
  31. package/dist/card-compute/index.cjs.map +1 -1
  32. package/dist/card-compute/index.d.cts +27 -1
  33. package/dist/card-compute/index.d.ts +27 -1
  34. package/dist/card-compute/index.js +9 -7145
  35. package/dist/card-compute/index.js.map +1 -1
  36. package/dist/card-compute/jsonata-sync.cjs +7623 -0
  37. package/dist/cli/browser-api/board-live-cards-browser-adapter.cjs +3 -0
  38. package/dist/cli/browser-api/board-live-cards-browser-adapter.cjs.map +1 -0
  39. package/dist/cli/browser-api/board-live-cards-browser-adapter.d.cts +37 -0
  40. package/dist/cli/browser-api/board-live-cards-browser-adapter.d.ts +37 -0
  41. package/dist/cli/browser-api/board-live-cards-browser-adapter.js +3 -0
  42. package/dist/cli/browser-api/board-live-cards-browser-adapter.js.map +1 -0
  43. package/dist/cli/browser-api/card-store-browser-api.cjs +2 -0
  44. package/dist/cli/browser-api/card-store-browser-api.cjs.map +1 -0
  45. package/dist/cli/browser-api/card-store-browser-api.d.cts +26 -0
  46. package/dist/cli/browser-api/card-store-browser-api.d.ts +26 -0
  47. package/dist/cli/browser-api/card-store-browser-api.js +2 -0
  48. package/dist/cli/browser-api/card-store-browser-api.js.map +1 -0
  49. package/dist/cli/browser-api/jsonata-sync.cjs +7623 -0
  50. package/dist/cli/node/artifacts-store-cli.cjs +11 -0
  51. package/dist/cli/node/artifacts-store-cli.cjs.map +1 -0
  52. package/dist/cli/node/artifacts-store-cli.d.cts +8 -0
  53. package/dist/cli/node/artifacts-store-cli.d.ts +8 -0
  54. package/dist/cli/node/artifacts-store-cli.js +11 -0
  55. package/dist/cli/node/artifacts-store-cli.js.map +1 -0
  56. package/dist/cli/node/board-live-cards-cli.cjs +15 -0
  57. package/dist/cli/node/board-live-cards-cli.cjs.map +1 -0
  58. package/dist/cli/node/board-live-cards-cli.d.cts +20 -0
  59. package/dist/cli/node/board-live-cards-cli.d.ts +20 -0
  60. package/dist/cli/node/board-live-cards-cli.js +15 -0
  61. package/dist/cli/node/board-live-cards-cli.js.map +1 -0
  62. package/dist/cli/node/card-store-cli.cjs +8 -0
  63. package/dist/cli/node/card-store-cli.cjs.map +1 -0
  64. package/dist/cli/node/card-store-cli.d.cts +15 -0
  65. package/dist/cli/node/card-store-cli.d.ts +15 -0
  66. package/dist/cli/node/card-store-cli.js +8 -0
  67. package/dist/cli/node/card-store-cli.js.map +1 -0
  68. package/dist/cli/node/execution-adapter.cjs +3 -0
  69. package/dist/cli/node/execution-adapter.cjs.map +1 -0
  70. package/dist/cli/node/execution-adapter.d.cts +174 -0
  71. package/dist/cli/node/execution-adapter.d.ts +174 -0
  72. package/dist/cli/node/execution-adapter.js +3 -0
  73. package/dist/cli/node/execution-adapter.js.map +1 -0
  74. package/dist/cli/node/fs-board-adapter.cjs +14 -0
  75. package/dist/cli/node/fs-board-adapter.cjs.map +1 -0
  76. package/dist/cli/node/fs-board-adapter.d.cts +204 -0
  77. package/dist/cli/node/fs-board-adapter.d.ts +204 -0
  78. package/dist/cli/node/fs-board-adapter.js +14 -0
  79. package/dist/cli/node/fs-board-adapter.js.map +1 -0
  80. package/dist/cli/node/jsonata-sync.cjs +7623 -0
  81. package/dist/cli/node/source-cli-task-executor.cjs +11 -0
  82. package/dist/cli/node/source-cli-task-executor.cjs.map +1 -0
  83. package/dist/cli/node/source-cli-task-executor.d.cts +1 -0
  84. package/dist/cli/node/source-cli-task-executor.d.ts +1 -0
  85. package/dist/cli/node/source-cli-task-executor.js +11 -0
  86. package/dist/cli/node/source-cli-task-executor.js.map +1 -0
  87. package/dist/config/index.cjs +1 -79
  88. package/dist/config/index.cjs.map +1 -1
  89. package/dist/config/index.js +1 -76
  90. package/dist/config/index.js.map +1 -1
  91. package/dist/continuous-event-graph/index.cjs +2 -2129
  92. package/dist/continuous-event-graph/index.cjs.map +1 -1
  93. package/dist/continuous-event-graph/index.d.cts +81 -5
  94. package/dist/continuous-event-graph/index.d.ts +81 -5
  95. package/dist/continuous-event-graph/index.js +2 -2088
  96. package/dist/continuous-event-graph/index.js.map +1 -1
  97. package/dist/continuous-event-graph/jsonata-sync.cjs +7623 -0
  98. package/dist/event-graph/index.cjs +22 -8292
  99. package/dist/event-graph/index.cjs.map +1 -1
  100. package/dist/event-graph/index.js +22 -8237
  101. package/dist/event-graph/index.js.map +1 -1
  102. package/dist/execution-refs.cjs +3 -0
  103. package/dist/execution-refs.cjs.map +1 -0
  104. package/dist/execution-refs.d.cts +260 -0
  105. package/dist/execution-refs.d.ts +260 -0
  106. package/dist/execution-refs.js +3 -0
  107. package/dist/execution-refs.js.map +1 -0
  108. package/dist/index.cjs +29 -13221
  109. package/dist/index.cjs.map +1 -1
  110. package/dist/index.d.cts +2 -4
  111. package/dist/index.d.ts +2 -4
  112. package/dist/index.js +29 -13112
  113. package/dist/index.js.map +1 -1
  114. package/dist/inference/index.cjs +5 -617
  115. package/dist/inference/index.cjs.map +1 -1
  116. package/dist/inference/index.js +5 -610
  117. package/dist/inference/index.js.map +1 -1
  118. package/dist/jsonata-sync.cjs +7623 -0
  119. package/dist/{live-cards-bridge-x5XREkXm.d.cts → live-cards-bridge-BXbVTsna.d.cts} +27 -4
  120. package/dist/{live-cards-bridge-EQjytzI_.d.ts → live-cards-bridge-Ds28XR15.d.ts} +27 -4
  121. package/dist/server-runtime/index.cjs +9 -0
  122. package/dist/server-runtime/index.cjs.map +1 -0
  123. package/dist/server-runtime/index.d.cts +31 -0
  124. package/dist/server-runtime/index.d.ts +31 -0
  125. package/dist/server-runtime/index.js +9 -0
  126. package/dist/server-runtime/index.js.map +1 -0
  127. package/dist/server-runtime/jsonata-sync.cjs +7623 -0
  128. package/dist/step-machine/index.cjs +11 -7129
  129. package/dist/step-machine/index.cjs.map +1 -1
  130. package/dist/step-machine/index.js +11 -7113
  131. package/dist/step-machine/index.js.map +1 -1
  132. package/dist/step-machine-public/index.cjs +2 -0
  133. package/dist/step-machine-public/index.cjs.map +1 -0
  134. package/dist/step-machine-public/index.d.cts +159 -0
  135. package/dist/step-machine-public/index.d.ts +159 -0
  136. package/dist/step-machine-public/index.js +2 -0
  137. package/dist/step-machine-public/index.js.map +1 -0
  138. package/dist/step-machine-public/jsonata-sync.cjs +7623 -0
  139. package/dist/storage-refs.cjs +10 -0
  140. package/dist/storage-refs.cjs.map +1 -0
  141. package/dist/storage-refs.d.cts +93 -0
  142. package/dist/storage-refs.d.ts +93 -0
  143. package/dist/storage-refs.js +10 -0
  144. package/dist/storage-refs.js.map +1 -0
  145. package/dist/stores/file.cjs +1 -114
  146. package/dist/stores/file.cjs.map +1 -1
  147. package/dist/stores/file.js +1 -112
  148. package/dist/stores/file.js.map +1 -1
  149. package/dist/stores/index.cjs +1 -231
  150. package/dist/stores/index.cjs.map +1 -1
  151. package/dist/stores/index.js +1 -227
  152. package/dist/stores/index.js.map +1 -1
  153. package/dist/stores/localStorage.cjs +1 -76
  154. package/dist/stores/localStorage.cjs.map +1 -1
  155. package/dist/stores/localStorage.js +1 -74
  156. package/dist/stores/localStorage.js.map +1 -1
  157. package/dist/stores/memory.cjs +1 -47
  158. package/dist/stores/memory.cjs.map +1 -1
  159. package/dist/stores/memory.js +1 -45
  160. package/dist/stores/memory.js.map +1 -1
  161. package/dist/types-B1ZRa4aI.d.ts +147 -0
  162. package/dist/types-BxEFcVK9.d.cts +147 -0
  163. package/examples/browser/boards/portfolio-tracker/portfolio-t4.js +291 -0
  164. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-fetch-prices.js +218 -0
  165. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-fetch-prices.py +201 -0
  166. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-http-test.js +357 -0
  167. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-inference-adapter.js +25 -16
  168. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-public.js +552 -0
  169. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-server.js +300 -0
  170. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-server.py +617 -0
  171. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-sse-worker.js +48 -0
  172. package/examples/browser/boards/portfolio-tracker/portfolio-tracker.py +366 -0
  173. package/examples/cli/step-machine-cli/portfolio-tracker/--base-ref/.runtime-out +1 -0
  174. package/examples/cli/step-machine-cli/portfolio-tracker/--base-ref/board-graph.json +32 -0
  175. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/_board-cli.js +70 -3
  176. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/add-cards-cli.js +16 -11
  177. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/init-board-cli.js +9 -8
  178. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/poll-status-cli.js +49 -0
  179. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/reset-board-dir-cli.js +2 -6
  180. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/retrigger-cli.js +4 -8
  181. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/status-cli.js +3 -7
  182. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/update-holdings-cli.js +9 -8
  183. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/wait-completed-cli.js +12 -17
  184. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/write-prices-cli.js +2 -6
  185. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/_board_pycli.py +107 -0
  186. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/add-cards.py +51 -0
  187. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/init-board.py +45 -0
  188. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/poll-status.py +71 -0
  189. package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/reset-board-dir.py +36 -0
  190. package/examples/cli/step-machine-cli/portfolio-tracker/inline-python-demo.flow.yaml +26 -0
  191. package/examples/cli/step-machine-cli/portfolio-tracker/inline-python-handlers.py +39 -0
  192. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker-pycli.flow.yaml +80 -0
  193. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker.flow.yaml +36 -187
  194. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker.input.json +40 -34
  195. package/examples/cli/step-machine-cli/portfolio-tracker/run-inline-python-demo-pycli.py +43 -0
  196. package/examples/cli/step-machine-cli/portfolio-tracker/run-portfolio-tracker-pycli.py +77 -0
  197. package/examples/cli/step-machine-cli/portfolio-tracker/run-portfolio-tracker.bat +1 -2
  198. package/examples/cli/step-machine-demo/jsonata-init-board-cli.js +8 -13
  199. package/examples/cli/step-machine-demo/jsonata-init-board.flow.yaml +33 -9
  200. package/examples/cli/step-machine-demo/one-step-cli-only.flow.yaml +3 -1
  201. package/examples/cli/step-machine-demo/step2-double-cli.js +6 -12
  202. package/examples/cli/step-machine-demo/two-step-math.flow.yaml +66 -4
  203. package/examples/cli/step-machine-demo/two-step-mixed.flow.yaml +13 -5
  204. package/examples/example-board/agent-instructions.md +11 -5
  205. package/examples/example-board/cards/_index.json +47 -0
  206. package/examples/example-board/cards/card-market-prices.json +33 -9
  207. package/examples/example-board/cards/card-my-identity.json +30 -6
  208. package/examples/example-board/cards/card-portfolio-action.json +24 -6
  209. package/examples/example-board/cards/card-portfolio-intelligence.json +97 -0
  210. package/examples/example-board/cards/card-portfolio-risks.json +24 -6
  211. package/examples/example-board/cards/card-portfolio-value.json +38 -10
  212. package/examples/example-board/cards/card-portfolio.json +57 -13
  213. package/examples/example-board/cards/card-rebalance-impact.json +22 -6
  214. package/examples/example-board/cards/card-rebalance-sim.json +66 -15
  215. package/examples/example-board/demo-chat-handler.js +14 -4
  216. package/examples/example-board/demo-server-config.json +1 -0
  217. package/examples/example-board/demo-server.js +366 -68
  218. package/examples/example-board/demo-shell-localstorage.html +774 -0
  219. package/examples/example-board/demo-shell-with-server.html +20 -37
  220. package/examples/example-board/demo-shell.html +5 -4
  221. package/examples/example-board/demo-task-executor.js +273 -275
  222. package/examples/index.html +0 -14
  223. package/examples/step-machine-cli/portfolio-tracker/handlers/_board-cli.js +0 -1
  224. package/examples/step-machine-cli/portfolio-tracker/run-portfolio-tracker.bat +1 -2
  225. package/package.json +46 -8
  226. package/schema/live-cards.schema.json +418 -132
  227. package/step-machine-cli.js +43 -310
  228. package/board-livecards-server-runtime.js +0 -1574
  229. package/browser/board-livecards-runtime-client.js +0 -263
  230. package/dist/cli/board-live-cards-cli.cjs +0 -10650
  231. package/dist/cli/board-live-cards-cli.cjs.map +0 -1
  232. package/dist/cli/board-live-cards-cli.d.cts +0 -179
  233. package/dist/cli/board-live-cards-cli.d.ts +0 -179
  234. package/dist/cli/board-live-cards-cli.js +0 -10598
  235. package/dist/cli/board-live-cards-cli.js.map +0 -1
  236. package/dist/journal-9HEgs7dU.d.ts +0 -28
  237. package/dist/journal-B-JCfQnh.d.cts +0 -28
  238. package/dist/schedule-Cszq9LYY.d.ts +0 -21
  239. package/dist/schedule-qWNL0RQh.d.cts +0 -21
  240. package/examples/browser/boards/portfolio-tracker/cards/holdings-table.json +0 -22
  241. package/examples/browser/boards/portfolio-tracker/cards/portfolio-form.json +0 -16
  242. package/examples/browser/boards/portfolio-tracker/cards/portfolio-risk-assessment.json +0 -28
  243. package/examples/browser/boards/portfolio-tracker/cards/portfolio-value.json +0 -15
  244. package/examples/browser/boards/portfolio-tracker/cards/price-fetch.json +0 -15
  245. package/examples/browser/boards/portfolio-tracker/cards/rebalancing-strategy.json +0 -28
  246. package/examples/browser/boards/portfolio-tracker/fetch-prices.js +0 -43
  247. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-task-executor.cjs +0 -96
  248. package/examples/browser/boards/portfolio-tracker/portfolio-tracker.bat +0 -7
  249. package/examples/browser/boards/portfolio-tracker/portfolio-tracker.js +0 -351
  250. package/examples/cli/step-machine-demo/two-step-math-handlers.js +0 -32
  251. package/examples/cli/step-machine-demo/two-step-mixed-handlers.js +0 -24
  252. package/examples/example-board/demo-shell-browser.html +0 -674
@@ -1,11 +1,8 @@
1
1
  id: portfolio-tracker-step-machine
2
- handler_vars:
3
- BOARDCLI_CMD: ../../../../board-live-cards-cli.js
4
- TMP_FILE_NAME: tmp_file1
5
2
  settings:
6
3
  start_step: t0_reset_board
7
- max_total_steps: 150
8
- timeout_ms: 300000
4
+ max_total_steps: 30
5
+ timeout_ms: 120000
9
6
 
10
7
  steps:
11
8
  t0_reset_board:
@@ -13,215 +10,67 @@ steps:
13
10
  expects_data: [runtime_root, board_name]
14
11
  produces_data: [board_dir]
15
12
  handler:
16
- cli: node ./handlers/reset-board-dir-cli.js
17
- input-transforms:
18
- BOARD_DIR: runtime_root & "/" & board_name
19
- output-transforms:
20
- board_dir: data.board_dir
13
+ type: ref
14
+ howToRun: local-node
15
+ whatToRun: "::fs-path::./handlers/reset-board-dir-cli.js"
16
+ argsMassaging:
17
+ bodyTemplate: "{ 'BOARD_DIR': runtime_root & '/' & board_name }"
21
18
  transitions:
22
19
  success: t0_init_board
23
20
  failure_transitions:
24
21
  failure: failed_state
25
22
 
26
23
  t0_init_board:
27
- description: Initialize board runtime directory
24
+ description: Initialize board with card-store and outputs-store refs
28
25
  expects_data: [board_dir]
29
26
  produces_data: [board_dir]
30
27
  handler:
31
- cli: node %%BOARDCLI_CMD%% init "%%BOARD_DIR%%"
32
- result-mode: exit-code
33
- input-transforms:
34
- BOARD_DIR: board_dir
35
- output-transforms:
36
- board_dir: BOARD_DIR
28
+ type: ref
29
+ howToRun: local-node
30
+ whatToRun: "::fs-path::./handlers/init-board-cli.js"
31
+ argsMassaging:
32
+ bodyTemplate: "{ 'BOARD_DIR': board_dir }"
37
33
  transitions:
38
- success: t0_add_cards
34
+ success: t1_add_cards
39
35
  failure_transitions:
40
36
  failure: failed_state
41
37
 
42
- t0_add_cards:
43
- description: Add local portfolio cards
44
- expects_data: [board_dir, cards_template_dir]
45
- produces_data: [cards_dir]
38
+ t1_add_cards:
39
+ description: Add 3 cards via card-store set and upsert-card --all
40
+ expects_data: [board_dir, cards]
41
+ produces_data: [cards_added]
46
42
  handler:
47
- cli: node %%BOARDCLI_CMD%% upsert-card --rg "%%BOARD_DIR%%" --card-glob "%%CARDS_GLOB%%"
48
- result-mode: exit-code
49
- input-transforms:
50
- BOARD_DIR: board_dir
51
- CARDS_GLOB: cards_template_dir & "/*.json"
52
- output-transforms:
53
- cards_dir: cards_template_dir
43
+ type: ref
44
+ howToRun: local-node
45
+ whatToRun: "::fs-path::./handlers/add-cards-cli.js"
46
+ argsMassaging:
47
+ bodyTemplate: "{ 'BOARD_DIR': board_dir, 'CARDS': cards }"
54
48
  transitions:
55
- success: t1_write_prices
49
+ success: t2_poll_status
56
50
  failure_transitions:
57
51
  failure: failed_state
58
52
 
59
- t1_write_prices:
60
- description: Write baseline prices
61
- expects_data: [board_dir, prices_t1]
62
- produces_data: [prices_written_t1]
53
+ t2_poll_status:
54
+ description: Poll board status until all 3 cards are completed
55
+ expects_data: [board_dir, expected_card_count]
56
+ produces_data: [all_completed]
63
57
  handler:
64
- cli: node ./handlers/write-prices-cli.js
65
- input-transforms:
66
- BOARD_DIR: board_dir
67
- TMP_FILE_NAME: TMP_FILE_NAME
68
- PRICES: prices_t1
69
- output-transforms:
70
- prices_written_t1: data.wrote
71
- transitions:
72
- success: t1_wait
73
- failure_transitions:
74
- failure: failed_state
75
-
76
- t1_wait:
77
- description: Wait for cards to complete after T1
78
- expects_data: [board_dir, completion_tasks]
79
- produces_data: [t1_done]
80
- handler:
81
- cli: node ./handlers/wait-completed-cli.js
82
- input-transforms:
83
- BOARD_DIR: board_dir
84
- COMPLETION_TASKS: completion_tasks
85
- LABEL: "'T1'"
86
- TIMEOUT_MS: "60000"
87
- POLL_MS: "500"
88
- output-transforms:
89
- t1_done: data.completed
90
- transitions:
91
- success: t2_update_holdings
92
- failure_transitions:
93
- timeout: failed_state
94
- failure: failed_state
95
-
96
- t2_update_holdings:
97
- description: Add GOOG position to holdings
98
- expects_data: [board_dir, cards_dir, holdings_t2]
99
- produces_data: [t2_holdings_saved]
100
- handler:
101
- cli: node ./handlers/update-holdings-cli.js
102
- input-transforms:
103
- BOARD_DIR: board_dir
104
- CARDS_DIR: cards_dir
105
- HOLDINGS: holdings_t2
106
- output-transforms:
107
- t2_holdings_saved: data.saved
108
- transitions:
109
- success: t2_write_prices
110
- failure_transitions:
111
- failure: failed_state
112
-
113
- t2_write_prices:
114
- description: Write prices after T2 holdings update
115
- expects_data: [board_dir, prices_t2]
116
- produces_data: [prices_written_t2]
117
- handler:
118
- cli: node ./handlers/write-prices-cli.js
119
- input-transforms:
120
- BOARD_DIR: board_dir
121
- TMP_FILE_NAME: TMP_FILE_NAME
122
- PRICES: prices_t2
123
- output-transforms:
124
- prices_written_t2: data.wrote
125
- transitions:
126
- success: t2_wait
127
- failure_transitions:
128
- failure: failed_state
129
-
130
- t2_wait:
131
- description: Wait for cards to complete after T2
132
- expects_data: [board_dir, completion_tasks]
133
- produces_data: [t2_done]
134
- handler:
135
- cli: node ./handlers/wait-completed-cli.js
136
- input-transforms:
137
- BOARD_DIR: board_dir
138
- COMPLETION_TASKS: completion_tasks
139
- LABEL: "'T2'"
140
- TIMEOUT_MS: "60000"
141
- POLL_MS: "500"
142
- output-transforms:
143
- t2_done: data.completed
144
- transitions:
145
- success: t3_retrigger
146
- failure_transitions:
147
- timeout: failed_state
148
- failure: failed_state
149
-
150
- t3_retrigger:
151
- description: Retrigger price-fetch task
152
- expects_data: [board_dir, price_fetch_task]
153
- produces_data: [t3_retriggered]
154
- handler:
155
- cli: node %%BOARDCLI_CMD%% retrigger --rg "%%BOARD_DIR%%" --task "%%TASK%%"
156
- result-mode: exit-code
157
- input-transforms:
158
- BOARD_DIR: board_dir
159
- TASK: price_fetch_task
160
- output-transforms:
161
- t3_retriggered: true
162
- transitions:
163
- success: t3_write_prices
164
- failure_transitions:
165
- failure: failed_state
166
-
167
- t3_write_prices:
168
- description: Write final refreshed prices
169
- expects_data: [board_dir, prices_t3]
170
- produces_data: [prices_written_t3]
171
- handler:
172
- cli: node ./handlers/write-prices-cli.js
173
- input-transforms:
174
- BOARD_DIR: board_dir
175
- TMP_FILE_NAME: TMP_FILE_NAME
176
- PRICES: prices_t3
177
- output-transforms:
178
- prices_written_t3: data.wrote
179
- transitions:
180
- success: t3_wait
181
- failure_transitions:
182
- failure: failed_state
183
-
184
- t3_wait:
185
- description: Wait for cards to complete after T3
186
- expects_data: [board_dir, completion_tasks]
187
- produces_data: [t3_done]
188
- handler:
189
- cli: node ./handlers/wait-completed-cli.js
190
- input-transforms:
191
- BOARD_DIR: board_dir
192
- COMPLETION_TASKS: completion_tasks
193
- LABEL: "'T3'"
194
- TIMEOUT_MS: "60000"
195
- POLL_MS: "500"
196
- output-transforms:
197
- t3_done: data.completed
198
- transitions:
199
- success: t4_status
200
- failure_transitions:
201
- timeout: failed_state
202
- failure: failed_state
203
-
204
- t4_status:
205
- description: Capture final board status
206
- expects_data: [board_dir]
207
- produces_data: [final_status]
208
- handler:
209
- cli: node %%BOARDCLI_CMD%% status --rg "%%BOARD_DIR%%"
210
- result-mode: exit-code
211
- input-transforms:
212
- BOARD_DIR: board_dir
213
- output-transforms:
214
- final_status: stdout
58
+ type: ref
59
+ howToRun: local-node
60
+ whatToRun: "::fs-path::./handlers/poll-status-cli.js"
61
+ argsMassaging:
62
+ bodyTemplate: "{ 'BOARD_DIR': board_dir, 'EXPECTED_CARD_COUNT': expected_card_count, 'TIMEOUT_MS': '30000', 'POLL_MS': '500' }"
215
63
  transitions:
216
64
  success: success_state
217
65
  failure_transitions:
66
+ timeout: failed_state
218
67
  failure: failed_state
219
68
 
220
69
  terminal_states:
221
70
  success_state:
222
71
  return_intent: success
223
- return_artifacts: [board_dir, t1_done, t2_done, t3_done, final_status]
72
+ return_artifacts: [board_dir, cards_added, all_completed]
224
73
 
225
74
  failed_state:
226
75
  return_intent: failure
227
- return_artifacts: [error, board_dir, final_status]
76
+ return_artifacts: [error, board_dir]
@@ -1,38 +1,44 @@
1
1
  {
2
2
  "runtime_root": "./runtime",
3
3
  "board_name": "portfolio-tracker-board",
4
- "cards_template_dir": "./cards",
5
- "completion_tasks": [
6
- "portfolio-form",
7
- "price-fetch",
8
- "holdings-table",
9
- "portfolio-value"
10
- ],
11
- "price_fetch_task": "price-fetch",
12
- "prices_t1": {
13
- "AAPL": 198.5,
14
- "MSFT": 425.3,
15
- "GOOG": 178.9,
16
- "AMZN": 192.4,
17
- "TSLA": 168.75
18
- },
19
- "holdings_t2": [
20
- { "symbol": "AAPL", "qty": 50 },
21
- { "symbol": "MSFT", "qty": 30 },
22
- { "symbol": "GOOG", "qty": 100 }
23
- ],
24
- "prices_t2": {
25
- "AAPL": 198.5,
26
- "MSFT": 425.3,
27
- "GOOG": 178.9,
28
- "AMZN": 192.4,
29
- "TSLA": 168.75
30
- },
31
- "prices_t3": {
32
- "AAPL": 205,
33
- "MSFT": 425.3,
34
- "GOOG": 178.9,
35
- "AMZN": 192.4,
36
- "TSLA": 168.75
37
- }
4
+ "expected_card_count": 3,
5
+ "cards": [
6
+ {
7
+ "id": "portfolio-form",
8
+ "meta": { "title": "Portfolio Holdings Form" },
9
+ "provides": [{ "bindTo": "holdings", "ref": "card_data.holdings" }],
10
+ "card_data": {
11
+ "holdings": [
12
+ { "symbol": "AAPL", "qty": 50 },
13
+ { "symbol": "MSFT", "qty": 30 },
14
+ { "symbol": "GOOG", "qty": 100 }
15
+ ]
16
+ }
17
+ },
18
+ {
19
+ "id": "prices-mock",
20
+ "meta": { "title": "Mock Market Prices" },
21
+ "provides": [{ "bindTo": "prices", "ref": "card_data.prices" }],
22
+ "card_data": {
23
+ "prices": {
24
+ "AAPL": 198.5,
25
+ "MSFT": 425.3,
26
+ "GOOG": 178.9
27
+ }
28
+ }
29
+ },
30
+ {
31
+ "id": "portfolio-value",
32
+ "meta": { "title": "Portfolio Total Value" },
33
+ "requires": ["holdings", "prices"],
34
+ "provides": [{ "bindTo": "totalValue", "ref": "computed_values.totalValue" }],
35
+ "card_data": {},
36
+ "compute": [
37
+ {
38
+ "bindTo": "totalValue",
39
+ "expr": "$sum($map(requires.holdings, function($h) { $h.qty * $lookup(requires.prices, $h.symbol) }))"
40
+ }
41
+ ]
42
+ }
43
+ ]
38
44
  }
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import json
5
+ import subprocess
6
+ import sys
7
+ from pathlib import Path
8
+
9
+
10
+ def main() -> int:
11
+ here = Path(__file__).resolve().parent
12
+ repo_root = here.parents[3]
13
+
14
+ pycli = repo_root / "pycli" / "main" / "step_machine_pycli.py"
15
+ flow = here / "inline-python-demo.flow.yaml"
16
+
17
+ initial_data = {
18
+ "name": "Ada",
19
+ "a": 7,
20
+ "b": 5,
21
+ }
22
+
23
+ cmd = [
24
+ sys.executable,
25
+ str(pycli),
26
+ str(flow),
27
+ "--initial-data",
28
+ json.dumps(initial_data, ensure_ascii=True),
29
+ "--store",
30
+ "memory",
31
+ ]
32
+
33
+ proc = subprocess.run(
34
+ cmd,
35
+ cwd=str(here),
36
+ shell=False,
37
+ check=False,
38
+ )
39
+ return proc.returncode
40
+
41
+
42
+ if __name__ == "__main__":
43
+ raise SystemExit(main())
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import argparse
5
+ import json
6
+ import os
7
+ import subprocess
8
+ import sys
9
+ import tempfile
10
+ from pathlib import Path
11
+
12
+
13
+ def _build_parser() -> argparse.ArgumentParser:
14
+ parser = argparse.ArgumentParser(
15
+ description="Run the step-machine portfolio tracker example via step_machine_pycli.py",
16
+ )
17
+ parser.add_argument(
18
+ "action",
19
+ nargs="?",
20
+ choices=["run", "pause", "resume", "status"],
21
+ default="run",
22
+ help="Operation to perform (default: run)",
23
+ )
24
+ return parser
25
+
26
+
27
+ def main() -> int:
28
+ args = _build_parser().parse_args()
29
+
30
+ here = Path(__file__).resolve().parent
31
+ repo_root = here.parents[3]
32
+ pycli = repo_root / "pycli" / "main" / "step_machine_pycli.py"
33
+ flow = here / "portfolio-tracker-pycli.flow.yaml"
34
+ input_json = here / "portfolio-tracker.input.json"
35
+
36
+ temp_root = Path(tempfile.gettempdir()) / "yaml-flow-step-machine-portfolio-tracker"
37
+ store_dir = temp_root / "store"
38
+ runtime_root = temp_root / "runtime"
39
+
40
+ cmd = [
41
+ sys.executable,
42
+ str(pycli),
43
+ "--store",
44
+ "file",
45
+ "--store-dir",
46
+ str(store_dir),
47
+ ]
48
+
49
+ if args.action in ("run", "resume"):
50
+ cmd.insert(2, str(flow))
51
+
52
+ if args.action == "run":
53
+ payload = json.loads(input_json.read_text(encoding="utf-8"))
54
+ payload["runtime_root"] = runtime_root.as_posix()
55
+ cmd.extend(["--initial-data", json.dumps(payload, ensure_ascii=True)])
56
+ elif args.action == "resume":
57
+ cmd.append("--resume")
58
+ elif args.action == "pause":
59
+ cmd.append("--pause")
60
+ elif args.action == "status":
61
+ cmd.append("--status")
62
+
63
+ proc = subprocess.run(
64
+ cmd,
65
+ cwd=str(here),
66
+ shell=False,
67
+ check=False,
68
+ env={
69
+ **os.environ,
70
+ "PATH": str(Path(sys.executable).parent) + os.pathsep + os.environ.get("PATH", ""),
71
+ },
72
+ )
73
+ return proc.returncode
74
+
75
+
76
+ if __name__ == "__main__":
77
+ raise SystemExit(main())
@@ -2,7 +2,6 @@
2
2
  setlocal
3
3
  cd /d "%~dp0"
4
4
 
5
- set "BOARD_LIVE_CARDS_NO_SPAWN=1"
6
5
  set "EXAMPLE_TEMP_ROOT=%TEMP%\yaml-flow-step-machine-portfolio-tracker"
7
6
  set "STORE_DIR=%EXAMPLE_TEMP_ROOT%\store"
8
7
  set "RUNTIME_ROOT=%EXAMPLE_TEMP_ROOT%\runtime"
@@ -25,5 +24,5 @@ node ..\..\..\..\step-machine-cli.js --store file --store-dir "%STORE_DIR%" --st
25
24
  exit /b %ERRORLEVEL%
26
25
 
27
26
  :run
28
- node -e "const fs=require('fs');const cp=require('child_process');const raw=JSON.parse(fs.readFileSync('portfolio-tracker.input.json','utf8'));raw.runtime_root=(process.env.RUNTIME_ROOT||'').replace(/\\/g,'/');const input=JSON.stringify(raw);const r=cp.spawnSync(process.execPath,['..\\..\\..\\..\\step-machine-cli.js','portfolio-tracker.flow.yaml','--store','file','--store-dir',process.env.STORE_DIR,'--initial-data',input],{stdio:'inherit',windowsHide:true,env:{...process.env,BOARD_LIVE_CARDS_NO_SPAWN:'1'}});process.exit(r.status??1);"
27
+ node -e "const fs=require('fs');const cp=require('child_process');const raw=JSON.parse(fs.readFileSync('portfolio-tracker.input.json','utf8'));raw.runtime_root=(process.env.RUNTIME_ROOT||'').replace(/\\/g,'/');const r=cp.spawnSync(process.execPath,['..\\..\\..\\..\\step-machine-cli.js','portfolio-tracker.flow.yaml','--initial-data',JSON.stringify(raw)],{stdio:'inherit',windowsHide:true,cwd:__dirname});process.exit(r.status??1);"
29
28
  exit /b %ERRORLEVEL%
@@ -9,27 +9,22 @@ process.stdin.on('data', (chunk) => {
9
9
  process.stdin.on('end', () => {
10
10
  try {
11
11
  const input = JSON.parse(raw || '{}');
12
- const boardDirFromArg = process.argv[2] ?? '';
13
- const boardDirFromInput = input.BOARD_DIR ?? '';
12
+ const boardDir = input.BOARD_DIR ?? '';
14
13
 
15
- if (!boardDirFromArg || !boardDirFromInput || boardDirFromArg !== boardDirFromInput) {
16
- process.stdout.write(JSON.stringify({
17
- result: 'failure',
18
- error: 'BOARD_DIR missing or mismatch between cli arg and stdin payload',
19
- }));
14
+ if (!boardDir) {
15
+ process.stderr.write('BOARD_DIR missing from input');
16
+ process.exit(1);
20
17
  return;
21
18
  }
22
19
 
23
20
  process.stdout.write(JSON.stringify({
24
- result: 'success',
25
- data: {
26
- message: `initialized ${boardDirFromArg}`,
27
- ignored: 'will be filtered by produces_data',
28
- },
21
+ message: `initialized ${boardDir}`,
22
+ ignored: 'will be filtered by produces_data',
29
23
  }));
30
24
  } catch (error) {
31
25
  const message = error instanceof Error ? error.message : String(error);
32
- process.stdout.write(JSON.stringify({ result: 'failure', error: message }));
26
+ process.stderr.write(message);
27
+ process.exit(1);
33
28
  }
34
29
  });
35
30
 
@@ -1,21 +1,45 @@
1
1
  id: jsonata-init-board-demo
2
2
  settings:
3
- start_step: t0_init_board
3
+ start_step: t0_prepare
4
4
  max_total_steps: 10
5
5
  timeout_ms: 30000
6
6
 
7
7
  steps:
8
- t0_init_board:
9
- description: Build board path with JSONata and invoke CLI with command templating
8
+ t0_prepare:
9
+ description: Build board path from runtime_root and board_name
10
10
  expects_data: [runtime_root, board_name]
11
+ produces_data: [BOARD_DIR]
12
+ handler:
13
+ type: compute-jsonata
14
+ expr:
15
+ - data.BOARD_DIR = expects_data.runtime_root & "/" & expects_data.board_name
16
+ - result = "success"
17
+ transitions:
18
+ success: t1_init_board
19
+ failure: failed_state
20
+
21
+ t1_init_board:
22
+ description: Invoke init-board CLI with BOARD_DIR
23
+ expects_data: [BOARD_DIR]
24
+ produces_data: [board_dir, message]
25
+ handler:
26
+ type: ref
27
+ howToRun: local-node
28
+ whatToRun: "::fs-path::./jsonata-init-board-cli.js"
29
+ transitions:
30
+ success: t2_map_output
31
+ failure: failed_state
32
+
33
+ t2_map_output:
34
+ description: Map CLI output to final field names
35
+ expects_data: [BOARD_DIR, message]
11
36
  produces_data: [board_dir, init_message]
12
37
  handler:
13
- cli: node ./jsonata-init-board-cli.js "%%BOARD_DIR%%"
14
- input-transforms:
15
- BOARD_DIR: runtime_root & "/" & board_name
16
- output-transforms:
17
- board_dir: BOARD_DIR
18
- init_message: data.message
38
+ type: compute-jsonata
39
+ expr:
40
+ - data.board_dir = expects_data.BOARD_DIR
41
+ - data.init_message = expects_data.message
42
+ - result = "success"
19
43
  transitions:
20
44
  success: success_state
21
45
  failure: failed_state
@@ -6,7 +6,9 @@ steps:
6
6
  expects_data: [x]
7
7
  produces_data: [y]
8
8
  handler:
9
- cli: node ./step-cli-echo-y.js
9
+ type: ref
10
+ howToRun: local-node
11
+ whatToRun: "::fs-path::./step-cli-echo-y.js"
10
12
  transitions:
11
13
  success: success_state
12
14
  failure: failed_state
@@ -13,26 +13,20 @@ process.stdin.on('end', () => {
13
13
  const c = Number(input.c);
14
14
 
15
15
  if (!Number.isFinite(c)) {
16
- process.stdout.write(JSON.stringify({
17
- result: 'failure',
18
- error: 'step2_double requires numeric c',
19
- }));
20
- process.exit(0);
16
+ process.stderr.write('step2_double requires numeric c');
17
+ process.exit(1);
21
18
  return;
22
19
  }
23
20
 
24
21
  const d = c * 2;
25
22
  process.stdout.write(JSON.stringify({
26
- status: 'success',
27
- data: {
28
- a: 123,
29
- d,
30
- },
23
+ a: 123,
24
+ d,
31
25
  }));
32
26
  } catch (error) {
33
27
  const message = error instanceof Error ? error.message : String(error);
34
- process.stdout.write(JSON.stringify({ result: 'failure', error: message }));
35
- process.exit(0);
28
+ process.stderr.write(message);
29
+ process.exit(1);
36
30
  }
37
31
  });
38
32