yaml-flow 3.1.1 → 4.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 (148) hide show
  1. package/README.md +81 -20
  2. package/board-live-cards-cli.js +37 -0
  3. package/browser/card-compute.js +132 -431
  4. package/browser/live-cards.js +41 -27
  5. package/browser/live-cards.schema.json +59 -77
  6. package/dist/card-compute/index.cjs +135 -415
  7. package/dist/card-compute/index.cjs.map +1 -1
  8. package/dist/card-compute/index.d.cts +52 -49
  9. package/dist/card-compute/index.d.ts +52 -49
  10. package/dist/card-compute/index.js +134 -415
  11. package/dist/card-compute/index.js.map +1 -1
  12. package/dist/cli/board-live-cards-cli.cjs +2379 -0
  13. package/dist/cli/board-live-cards-cli.cjs.map +1 -0
  14. package/dist/cli/board-live-cards-cli.d.cts +213 -0
  15. package/dist/cli/board-live-cards-cli.d.ts +213 -0
  16. package/dist/cli/board-live-cards-cli.js +2332 -0
  17. package/dist/cli/board-live-cards-cli.js.map +1 -0
  18. package/dist/{constants-B2zqu10b.d.ts → constants-DuzE5n03.d.ts} +2 -2
  19. package/dist/{constants-DJZU1pwJ.d.cts → constants-ozjf1Ejw.d.cts} +2 -2
  20. package/dist/continuous-event-graph/index.cjs +201 -448
  21. package/dist/continuous-event-graph/index.cjs.map +1 -1
  22. package/dist/continuous-event-graph/index.d.cts +16 -340
  23. package/dist/continuous-event-graph/index.d.ts +16 -340
  24. package/dist/continuous-event-graph/index.js +198 -448
  25. package/dist/continuous-event-graph/index.js.map +1 -1
  26. package/dist/event-graph/index.cjs +4 -4
  27. package/dist/event-graph/index.cjs.map +1 -1
  28. package/dist/event-graph/index.d.cts +5 -5
  29. package/dist/event-graph/index.d.ts +5 -5
  30. package/dist/event-graph/index.js +4 -4
  31. package/dist/event-graph/index.js.map +1 -1
  32. package/dist/index.cjs +278 -533
  33. package/dist/index.cjs.map +1 -1
  34. package/dist/index.d.cts +8 -7
  35. package/dist/index.d.ts +8 -7
  36. package/dist/index.js +278 -533
  37. package/dist/index.js.map +1 -1
  38. package/dist/inference/index.cjs +138 -19
  39. package/dist/inference/index.cjs.map +1 -1
  40. package/dist/inference/index.d.cts +2 -2
  41. package/dist/inference/index.d.ts +2 -2
  42. package/dist/inference/index.js +138 -19
  43. package/dist/inference/index.js.map +1 -1
  44. package/dist/journal-BJDjWb5Q.d.cts +343 -0
  45. package/dist/journal-B_2JnBMF.d.ts +343 -0
  46. package/dist/step-machine/index.cjs +18 -1
  47. package/dist/step-machine/index.cjs.map +1 -1
  48. package/dist/step-machine/index.d.cts +2 -2
  49. package/dist/step-machine/index.d.ts +2 -2
  50. package/dist/step-machine/index.js +18 -1
  51. package/dist/step-machine/index.js.map +1 -1
  52. package/dist/stores/file.d.cts +1 -1
  53. package/dist/stores/file.d.ts +1 -1
  54. package/dist/stores/index.d.cts +1 -1
  55. package/dist/stores/index.d.ts +1 -1
  56. package/dist/stores/localStorage.d.cts +1 -1
  57. package/dist/stores/localStorage.d.ts +1 -1
  58. package/dist/stores/memory.d.cts +1 -1
  59. package/dist/stores/memory.d.ts +1 -1
  60. package/dist/{types-BwvgvlOO.d.cts → types-BzLD8bjb.d.cts} +1 -1
  61. package/dist/{types-ClRA8hzC.d.ts → types-C2eJ7DAV.d.ts} +1 -1
  62. package/dist/{types-DEj7OakX.d.cts → types-CMFSIjpc.d.cts} +39 -4
  63. package/dist/{types-DEj7OakX.d.ts → types-CMFSIjpc.d.ts} +39 -4
  64. package/dist/{types-FZ_eyErS.d.cts → types-ycun84cq.d.cts} +1 -0
  65. package/dist/{types-FZ_eyErS.d.ts → types-ycun84cq.d.ts} +1 -0
  66. package/dist/{validate-DEZ2Ymdb.d.ts → validate-DJQTQ6bP.d.ts} +1 -1
  67. package/dist/{validate-DqKTZg_o.d.cts → validate-ke92Cleg.d.cts} +1 -1
  68. package/examples/browser/boards/portfolio-tracker/cards/holdings-table.json +22 -0
  69. package/examples/browser/boards/portfolio-tracker/cards/portfolio-form.json +16 -0
  70. package/examples/browser/boards/portfolio-tracker/cards/portfolio-value.json +15 -0
  71. package/examples/browser/boards/portfolio-tracker/cards/price-fetch.json +15 -0
  72. package/examples/browser/boards/portfolio-tracker/fetch-prices.js +43 -0
  73. package/examples/browser/boards/portfolio-tracker/portfolio-tracker.bat +7 -0
  74. package/examples/browser/boards/portfolio-tracker/portfolio-tracker.js +189 -0
  75. package/examples/browser/livecards-browser/index.html +688 -0
  76. package/examples/browser/{index.html → step-machine-browser/index.html} +53 -53
  77. package/examples/cli/step-machine-cli/portfolio-tracker/cards/holdings-table.json +22 -0
  78. package/examples/cli/step-machine-cli/portfolio-tracker/cards/portfolio-form.json +43 -0
  79. package/examples/cli/step-machine-cli/portfolio-tracker/cards/portfolio-value.json +15 -0
  80. package/examples/cli/step-machine-cli/portfolio-tracker/cards/price-fetch.json +15 -0
  81. package/examples/cli/step-machine-cli/portfolio-tracker/fetch-prices.js +48 -0
  82. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/_board-cli.js +58 -0
  83. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/add-cards-cli.js +27 -0
  84. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/init-board-cli.js +25 -0
  85. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/reset-board-dir-cli.js +29 -0
  86. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/retrigger-cli.js +27 -0
  87. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/status-cli.js +25 -0
  88. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/update-holdings-cli.js +37 -0
  89. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/wait-completed-cli.js +53 -0
  90. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/write-prices-cli.js +35 -0
  91. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker.flow.yaml +227 -0
  92. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker.input.json +38 -0
  93. package/examples/cli/step-machine-cli/portfolio-tracker/run-portfolio-tracker.bat +29 -0
  94. package/examples/cli/step-machine-demo/jsonata-init-board-cli.js +36 -0
  95. package/examples/cli/step-machine-demo/jsonata-init-board.flow.yaml +30 -0
  96. package/examples/cli/step-machine-demo/one-step-cli-only.flow.yaml +19 -0
  97. package/examples/cli/step-machine-demo/step-cli-echo-y.js +15 -0
  98. package/examples/cli/step-machine-demo/step2-double-cli.js +39 -0
  99. package/examples/cli/step-machine-demo/two-step-math-handlers.js +32 -0
  100. package/examples/cli/step-machine-demo/two-step-math.flow.yaml +31 -0
  101. package/examples/cli/step-machine-demo/two-step-mixed-handlers.js +24 -0
  102. package/examples/cli/step-machine-demo/two-step-mixed.flow.yaml +35 -0
  103. package/examples/index.html +792 -0
  104. package/examples/{batch → npm-libs/batch}/batch-step-machine.ts +1 -1
  105. package/examples/{continuous-event-graph → npm-libs/continuous-event-graph}/live-cards-board.ts +1 -1
  106. package/examples/{continuous-event-graph → npm-libs/continuous-event-graph}/live-portfolio-dashboard.ts +1 -1
  107. package/examples/{continuous-event-graph → npm-libs/continuous-event-graph}/portfolio-tracker.ts +1 -1
  108. package/examples/{continuous-event-graph → npm-libs/continuous-event-graph}/reactive-monitoring.ts +1 -1
  109. package/examples/{continuous-event-graph → npm-libs/continuous-event-graph}/reactive-pipeline.ts +1 -1
  110. package/examples/{continuous-event-graph → npm-libs/continuous-event-graph}/soc-incident-board.ts +1 -1
  111. package/examples/{continuous-event-graph → npm-libs/continuous-event-graph}/stock-dashboard.ts +1 -1
  112. package/examples/{event-graph → npm-libs/event-graph}/ci-cd-pipeline.ts +1 -1
  113. package/examples/{event-graph → npm-libs/event-graph}/executor-diamond.ts +1 -1
  114. package/examples/{event-graph → npm-libs/event-graph}/executor-pipeline.ts +1 -1
  115. package/examples/{event-graph → npm-libs/event-graph}/research-pipeline.ts +1 -1
  116. package/examples/{graph-of-graphs → npm-libs/graph-of-graphs}/multi-stage-etl.ts +1 -1
  117. package/examples/{graph-of-graphs → npm-libs/graph-of-graphs}/url-processing-pipeline.ts +1 -1
  118. package/examples/{inference → npm-libs/inference}/azure-deployment.ts +1 -1
  119. package/examples/{inference → npm-libs/inference}/copilot-cli.ts +1 -1
  120. package/examples/{inference → npm-libs/inference}/data-pipeline.ts +1 -1
  121. package/examples/{inference → npm-libs/inference}/pluggable-adapters.ts +1 -1
  122. package/examples/{node → npm-libs/node}/ai-conversation.ts +1 -1
  123. package/examples/{node → npm-libs/node}/simple-greeting.ts +2 -2
  124. package/examples/step-machine-cli/portfolio-tracker/cards/holdings-table.json +22 -0
  125. package/examples/step-machine-cli/portfolio-tracker/cards/portfolio-form.json +43 -0
  126. package/examples/step-machine-cli/portfolio-tracker/cards/portfolio-value.json +15 -0
  127. package/examples/step-machine-cli/portfolio-tracker/cards/price-fetch.json +15 -0
  128. package/examples/step-machine-cli/portfolio-tracker/fetch-prices.js +48 -0
  129. package/examples/step-machine-cli/portfolio-tracker/handlers/_board-cli.js +58 -0
  130. package/examples/step-machine-cli/portfolio-tracker/handlers/add-cards-cli.js +27 -0
  131. package/examples/step-machine-cli/portfolio-tracker/handlers/init-board-cli.js +25 -0
  132. package/examples/step-machine-cli/portfolio-tracker/handlers/reset-board-dir-cli.js +29 -0
  133. package/examples/step-machine-cli/portfolio-tracker/handlers/retrigger-cli.js +27 -0
  134. package/examples/step-machine-cli/portfolio-tracker/handlers/status-cli.js +25 -0
  135. package/examples/step-machine-cli/portfolio-tracker/handlers/update-holdings-cli.js +37 -0
  136. package/examples/step-machine-cli/portfolio-tracker/handlers/wait-completed-cli.js +53 -0
  137. package/examples/step-machine-cli/portfolio-tracker/handlers/write-prices-cli.js +35 -0
  138. package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker.flow.yaml +227 -0
  139. package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker.input.json +38 -0
  140. package/examples/step-machine-cli/portfolio-tracker/run-portfolio-tracker.bat +29 -0
  141. package/package.json +12 -1
  142. package/schema/board-status.schema.json +118 -0
  143. package/schema/flow.schema.json +5 -0
  144. package/schema/live-cards.schema.json +59 -77
  145. package/step-machine-cli.js +674 -0
  146. /package/examples/{flows → npm-libs/flows}/ai-conversation.yaml +0 -0
  147. /package/examples/{flows → npm-libs/flows}/order-processing.yaml +0 -0
  148. /package/examples/{flows → npm-libs/flows}/simple-greeting.yaml +0 -0
@@ -7,9 +7,9 @@
7
7
  "definitions": {
8
8
 
9
9
  "bind_ref": {
10
- "description": "A state path reference, e.g. 'state.raw_quotes' or 'state.compute_vars.total'",
10
+ "description": "A state path reference, e.g. 'state.raw_quotes' or 'requires.upstream'",
11
11
  "type": "string",
12
- "pattern": "^state\\."
12
+ "pattern": "^(state|requires|computed_values)\\."
13
13
  },
14
14
 
15
15
  "bind_or_literal": {
@@ -72,39 +72,46 @@
72
72
  }
73
73
  },
74
74
 
75
- "data": {
75
+ "requires": {
76
+ "type": "array",
77
+ "items": { "type": "string" },
78
+ "description": "IDs of upstream nodes this node depends on"
79
+ },
80
+
81
+ "provides": {
82
+ "type": "array",
83
+ "items": {
84
+ "type": "object",
85
+ "required": ["bindTo", "src"],
86
+ "properties": {
87
+ "bindTo": { "type": "string", "description": "Token name published downstream" },
88
+ "src": { "type": "string", "description": "Path to read value from (state.*, requires.*, computed_values.*)" }
89
+ }
90
+ },
91
+ "description": "Explicit bindings exposing computed/state values downstream as named tokens"
92
+ },
93
+
94
+ "compute_step": {
95
+ "description": "A single ordered compute step: reads state.*/requires.*/computed_values.*, writes to computed_values[bindTo]",
76
96
  "type": "object",
97
+ "required": ["bindTo", "expr"],
77
98
  "properties": {
78
- "requires": {
79
- "type": "array",
80
- "items": { "type": "string" },
81
- "description": "IDs of upstream nodes this node depends on"
82
- },
83
- "provides": {
84
- "type": "object",
85
- "description": "Subset of state exposed downstream. Keys are published names, values are bind refs.",
86
- "additionalProperties": { "$ref": "#/definitions/bind_or_literal" }
87
- }
99
+ "bindTo": { "type": "string", "description": "Key in computed_values to write result" },
100
+ "expr": { "type": "string", "description": "JSONata expression evaluated against { state, requires, sources, computed_values }" }
88
101
  }
89
102
  },
90
103
 
91
104
  "source_def": {
105
+ "description": "One source entry. The engine only cares about 'bindTo' (compute namespace key) and 'outputFile' (delivery signal). Every other property is yours — add whatever your task-executor needs: kind, url, headers, mailbox, channel, model, query, etc. The full object is passed verbatim as the --in JSON to the executor.",
92
106
  "type": "object",
93
- "required": ["kind", "bindTo"],
107
+ "required": ["bindTo"],
108
+ "additionalProperties": true,
94
109
  "properties": {
95
- "kind": { "enum": ["api", "websocket", "static", "llm"] },
96
- "bindTo": { "$ref": "#/definitions/bind_ref", "description": "state path to write fetched data into" },
97
- "method": { "enum": ["GET", "POST", "PUT", "DELETE"], "default": "GET" },
98
- "url_template": { "type": "string", "description": "URL with {{var}} placeholders" },
99
- "headers": { "type": "object", "additionalProperties": { "$ref": "#/definitions/bind_or_literal" } },
100
- "body_template": { "type": "object", "description": "Request body with {{var}} placeholders or bind refs" },
101
- "template_vars": {
102
- "type": "object",
103
- "additionalProperties": { "$ref": "#/definitions/bind_or_literal" },
104
- "description": "Variables for url/body templates — static values or bind refs"
105
- },
106
- "poll_interval": { "type": "integer", "minimum": 0, "description": "Auto-refresh in seconds (0 = manual)" },
107
- "transform": { "type": "string", "description": "Dot-path to extract from response, e.g. 'data.items'" }
110
+ "bindTo": { "type": "string", "description": "Key under sources.* available in compute expressions" },
111
+ "outputFile": { "type": "string", "description": "Board-relative path the executor writes its JSON result to. Presence of this file signals delivery." },
112
+ "optionalForCompletionGating": { "type": "boolean", "default": false, "description": "When true this source does not gate card completion. Default false when absent, so sources are completion-gating by default." },
113
+ "timeout": { "type": "integer", "minimum": 0, "default": 120000, "description": "Executor/script timeout in ms. Default: 120 000 (2 min)." },
114
+ "script": { "type": "string", "description": "Legacy direct-run: shell command executed when no .task-executor is registered. stdout is captured as the result." }
108
115
  }
109
116
  },
110
117
 
@@ -209,58 +216,33 @@
209
216
  }
210
217
  },
211
218
 
212
- "oneOf": [
213
- {
214
- "title": "Card",
215
- "description": "A renderable card node with view elements",
216
- "type": "object",
217
- "required": ["id", "type", "view", "state"],
218
- "additionalProperties": false,
219
+ "title": "LiveCard",
220
+ "description": "A unified card node. Behavior depends on which sections are present (sources, compute, view, etc.)",
221
+ "type": "object",
222
+ "required": ["id"],
223
+ "additionalProperties": false,
224
+ "properties": {
225
+ "id": { "type": "string" },
226
+ "requires": { "$ref": "#/definitions/requires" },
227
+ "provides": { "$ref": "#/definitions/provides" },
228
+ "meta": { "$ref": "#/definitions/meta" },
229
+ "view": { "$ref": "#/definitions/view" },
230
+ "state": { "type": "object", "additionalProperties": true,
219
231
  "properties": {
220
- "id": { "type": "string" },
221
- "type": { "const": "card" },
222
- "meta": { "$ref": "#/definitions/meta" },
223
- "data": { "$ref": "#/definitions/data" },
224
- "view": { "$ref": "#/definitions/view" },
225
- "state": { "type": "object", "additionalProperties": true,
226
- "properties": {
227
- "status": { "enum": ["fresh", "stale", "loading", "error"] },
228
- "lastRun": { "type": "string", "format": "date-time" },
229
- "error": { "type": "string" }
230
- }
231
- },
232
- "compute": {
233
- "type": "object",
234
- "description": "Derived state: key = state path to write, value = compute_expr",
235
- "additionalProperties": { "$ref": "#/definitions/compute_expr" }
236
- }
232
+ "status": { "enum": ["fresh", "stale", "loading", "error"] },
233
+ "lastRun": { "type": "string", "format": "date-time" },
234
+ "error": { "type": "string" }
237
235
  }
238
236
  },
239
- {
240
- "title": "ExternalSource",
241
- "description": "A data-only node that fetches from external systems (no view)",
242
- "type": "object",
243
- "required": ["id", "type", "source", "state"],
244
- "additionalProperties": false,
245
- "properties": {
246
- "id": { "type": "string" },
247
- "type": { "const": "source" },
248
- "meta": { "$ref": "#/definitions/meta" },
249
- "data": { "$ref": "#/definitions/data" },
250
- "source": { "$ref": "#/definitions/source_def" },
251
- "state": { "type": "object", "additionalProperties": true,
252
- "properties": {
253
- "status": { "enum": ["fresh", "stale", "loading", "error"] },
254
- "lastRun": { "type": "string", "format": "date-time" },
255
- "error": { "type": "string" }
256
- }
257
- },
258
- "compute": {
259
- "type": "object",
260
- "description": "Derived state: key = state path to write, value = compute_expr",
261
- "additionalProperties": { "$ref": "#/definitions/compute_expr" }
262
- }
263
- }
237
+ "sources": {
238
+ "type": "array",
239
+ "description": "Source entries. Each entry is passed verbatim to the board's .task-executor (registered via init --task-executor) as the --in JSON file. The executor fetches/generates the data and writes JSON to --out. If no executor is registered, the built-in executor runs the entry's 'cli' command directly. Sources gate completion by default. Set optionalForCompletionGating: true for enrichment-only sources that should not block task-completed.",
240
+ "items": { "$ref": "#/definitions/source_def" }
241
+ },
242
+ "compute": {
243
+ "type": "array",
244
+ "description": "Ordered array of compute steps. Each reads state.*/requires.*/sources.*/computed_values.* and writes to ephemeral computed_values[bindTo].",
245
+ "items": { "$ref": "#/definitions/compute_step" }
264
246
  }
265
- ]
247
+ }
266
248
  }