yaml-flow 5.1.0 → 5.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/{examples/example-board/reusable-server-runtime.js → board-livecards-server-runtime.js} +42 -20
  2. package/{examples/example-board/reusable-board-runtime-client.js → browser/board-livecards-runtime-client.js} +6 -2
  3. package/browser/{board-livegraph-runtime.js → board-livegraph-engine.js} +212 -16
  4. package/browser/board-livegraph-engine.js.map +1 -0
  5. package/browser/live-cards.js +362 -38
  6. package/browser/live-cards.schema.json +20 -4
  7. package/dist/board-livegraph-runtime/index.cjs +210 -14
  8. package/dist/board-livegraph-runtime/index.cjs.map +1 -1
  9. package/dist/board-livegraph-runtime/index.d.cts +49 -5
  10. package/dist/board-livegraph-runtime/index.d.ts +49 -5
  11. package/dist/board-livegraph-runtime/index.js +209 -15
  12. package/dist/board-livegraph-runtime/index.js.map +1 -1
  13. package/dist/card-compute/index.cjs +63 -7
  14. package/dist/card-compute/index.cjs.map +1 -1
  15. package/dist/card-compute/index.d.cts +2 -2
  16. package/dist/card-compute/index.d.ts +2 -2
  17. package/dist/card-compute/index.js +63 -7
  18. package/dist/card-compute/index.js.map +1 -1
  19. package/dist/cli/board-live-cards-cli.cjs +664 -75
  20. package/dist/cli/board-live-cards-cli.cjs.map +1 -1
  21. package/dist/cli/board-live-cards-cli.d.cts +33 -5
  22. package/dist/cli/board-live-cards-cli.d.ts +33 -5
  23. package/dist/cli/board-live-cards-cli.js +661 -76
  24. package/dist/cli/board-live-cards-cli.js.map +1 -1
  25. package/dist/{constants-ozjf1Ejw.d.cts → constants-BzZUyYlp.d.cts} +1 -1
  26. package/dist/{constants-DuzE5n03.d.ts → constants-oCEbNpul.d.ts} +1 -1
  27. package/dist/continuous-event-graph/index.cjs +47 -14
  28. package/dist/continuous-event-graph/index.cjs.map +1 -1
  29. package/dist/continuous-event-graph/index.d.cts +9 -9
  30. package/dist/continuous-event-graph/index.d.ts +9 -9
  31. package/dist/continuous-event-graph/index.js +47 -14
  32. package/dist/continuous-event-graph/index.js.map +1 -1
  33. package/dist/event-graph/index.cjs +29 -12
  34. package/dist/event-graph/index.cjs.map +1 -1
  35. package/dist/event-graph/index.d.cts +5 -5
  36. package/dist/event-graph/index.d.ts +5 -5
  37. package/dist/event-graph/index.js +29 -12
  38. package/dist/event-graph/index.js.map +1 -1
  39. package/dist/index.cjs +93 -20
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.d.cts +7 -7
  42. package/dist/index.d.ts +7 -7
  43. package/dist/index.js +93 -20
  44. package/dist/index.js.map +1 -1
  45. package/dist/inference/index.cjs +29 -12
  46. package/dist/inference/index.cjs.map +1 -1
  47. package/dist/inference/index.d.cts +2 -2
  48. package/dist/inference/index.d.ts +2 -2
  49. package/dist/inference/index.js +29 -12
  50. package/dist/inference/index.js.map +1 -1
  51. package/dist/{journal-NLYuqege.d.ts → journal-9HEgs7dU.d.ts} +1 -1
  52. package/dist/{journal-DRfJiheM.d.cts → journal-B-JCfQnh.d.cts} +1 -1
  53. package/dist/{live-cards-bridge-Or7fdEJV.d.ts → live-cards-bridge-CeNxiVcm.d.ts} +6 -2
  54. package/dist/{live-cards-bridge-vGJ6tMzN.d.cts → live-cards-bridge-z_rJCSbi.d.cts} +6 -2
  55. package/dist/{schedule-CMcZe5Ny.d.ts → schedule-Cszq9LYY.d.ts} +1 -1
  56. package/dist/{schedule-CiucyCan.d.cts → schedule-qWNL0RQh.d.cts} +1 -1
  57. package/dist/{types-CMFSIjpc.d.cts → types-BBhqYGhE.d.cts} +4 -0
  58. package/dist/{types-CMFSIjpc.d.ts → types-BBhqYGhE.d.ts} +4 -0
  59. package/dist/{types-BzLD8bjb.d.cts → types-CHSdoAAA.d.cts} +1 -1
  60. package/dist/{types-C2eJ7DAV.d.ts → types-CoW0gQl3.d.ts} +1 -1
  61. package/dist/{validate-DJQTQ6bP.d.ts → validate-BAVzUJWa.d.ts} +1 -1
  62. package/dist/{validate-ke92Cleg.d.cts → validate-Dbu7ygys.d.cts} +1 -1
  63. package/examples/browser/boards/portfolio-tracker/cards/portfolio-risk-assessment.json +28 -0
  64. package/examples/browser/boards/portfolio-tracker/cards/rebalancing-strategy.json +28 -0
  65. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-inference-adapter.js +187 -0
  66. package/examples/browser/boards/portfolio-tracker/portfolio-tracker.js +139 -5
  67. package/examples/example-board/agent-instructions-cardlayout.md +28 -0
  68. package/examples/example-board/agent-instructions.md +603 -0
  69. package/examples/example-board/cards/card-concentration.json +42 -0
  70. package/examples/example-board/cards/card-market-prices.json +51 -0
  71. package/examples/example-board/cards/card-portfolio-action.json +19 -0
  72. package/examples/example-board/cards/card-portfolio-risks.json +19 -0
  73. package/examples/example-board/cards/card-portfolio-value.json +62 -0
  74. package/examples/example-board/cards/card-portfolio.json +44 -0
  75. package/examples/example-board/demo-chat-handler.js +373 -33
  76. package/examples/example-board/demo-server-config.json +0 -2
  77. package/examples/example-board/demo-server.js +46 -7
  78. package/examples/example-board/demo-shell-browser.html +75 -207
  79. package/examples/example-board/demo-shell-with-server.html +15 -9
  80. package/examples/example-board/demo-shell.html +1 -1
  81. package/examples/example-board/demo-task-executor.js +259 -41
  82. package/package.json +6 -2
  83. package/schema/live-cards.schema.json +20 -4
  84. package/browser/board-livegraph-runtime.js.map +0 -1
  85. package/examples/example-board/board.yaml +0 -23
  86. package/examples/example-board/bootstrap_payload.json +0 -1
  87. package/examples/example-board/cards/card-chain-region-alert.json +0 -39
  88. package/examples/example-board/cards/card-chain-region-totals.json +0 -26
  89. package/examples/example-board/cards/card-chain-top-region.json +0 -24
  90. package/examples/example-board/cards/card-ex-actions.json +0 -32
  91. package/examples/example-board/cards/card-ex-chart.json +0 -30
  92. package/examples/example-board/cards/card-ex-filter.json +0 -36
  93. package/examples/example-board/cards/card-ex-filtered-by-preference.json +0 -59
  94. package/examples/example-board/cards/card-ex-form.json +0 -91
  95. package/examples/example-board/cards/card-ex-list.json +0 -22
  96. package/examples/example-board/cards/card-ex-markdown.json +0 -17
  97. package/examples/example-board/cards/card-ex-metric.json +0 -19
  98. package/examples/example-board/cards/card-ex-narrative.json +0 -36
  99. package/examples/example-board/cards/card-ex-source-http.json +0 -28
  100. package/examples/example-board/cards/card-ex-source.json +0 -21
  101. package/examples/example-board/cards/card-ex-status.json +0 -35
  102. package/examples/example-board/cards/card-ex-table.json +0 -30
  103. package/examples/example-board/cards/card-ex-todo.json +0 -29
  104. package/examples/example-board/mock.db +0 -15
  105. package/examples/example-board/reusable-runtime-artifacts-adapter.js +0 -233
@@ -1,4 +1,4 @@
1
- import { G as GraphConfig, c as ExecutionState, S as SchedulerResult, f as GraphEvent, T as TaskConfig, e as GraphEngineStore, R as RefreshStrategy, h as StuckDetection, C as CompletionStrategy, a as ConflictStrategy, b as ExecutionMode, d as ExecutionStatus, l as TaskStatus } from './types-CMFSIjpc.cjs';
1
+ import { G as GraphConfig, c as ExecutionState, S as SchedulerResult, f as GraphEvent, T as TaskConfig, e as GraphEngineStore, R as RefreshStrategy, h as StuckDetection, C as CompletionStrategy, a as ConflictStrategy, b as ExecutionMode, d as ExecutionStatus, l as TaskStatus } from './types-BBhqYGhE.cjs';
2
2
  import { e as StepFlowConfig } from './types-ycun84cq.cjs';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { G as GraphConfig, c as ExecutionState, S as SchedulerResult, f as GraphEvent, T as TaskConfig, e as GraphEngineStore, R as RefreshStrategy, h as StuckDetection, C as CompletionStrategy, a as ConflictStrategy, b as ExecutionMode, d as ExecutionStatus, l as TaskStatus } from './types-CMFSIjpc.js';
1
+ import { G as GraphConfig, c as ExecutionState, S as SchedulerResult, f as GraphEvent, T as TaskConfig, e as GraphEngineStore, R as RefreshStrategy, h as StuckDetection, C as CompletionStrategy, a as ConflictStrategy, b as ExecutionMode, d as ExecutionStatus, l as TaskStatus } from './types-BBhqYGhE.js';
2
2
  import { e as StepFlowConfig } from './types-ycun84cq.js';
3
3
 
4
4
  /**
@@ -71,15 +71,30 @@ function groupTasksByProvides(candidateTaskNames, tasks) {
71
71
  }
72
72
 
73
73
  // src/event-graph/task-transitions.ts
74
- function applyTaskStart(state, taskName) {
74
+ function applyTaskStart(state, taskName, graph) {
75
75
  const existingTask = state.tasks[taskName] ?? createDefaultGraphEngineStore();
76
+ const startConsumedHashes = {};
77
+ if (graph) {
78
+ const taskConfig = graph.tasks[taskName];
79
+ const requires = getRequires(taskConfig);
80
+ for (const token of requires) {
81
+ for (const [otherName, otherConfig] of Object.entries(graph.tasks)) {
82
+ if (getProvides(otherConfig).includes(token)) {
83
+ const otherState = state.tasks[otherName];
84
+ if (otherState?.lastDataHash) startConsumedHashes[token] = otherState.lastDataHash;
85
+ break;
86
+ }
87
+ }
88
+ }
89
+ }
76
90
  const updatedTask = {
77
91
  ...existingTask,
78
92
  status: "running",
79
93
  startedAt: (/* @__PURE__ */ new Date()).toISOString(),
80
94
  lastUpdated: (/* @__PURE__ */ new Date()).toISOString(),
81
95
  progress: 0,
82
- error: void 0
96
+ error: void 0,
97
+ startConsumedHashes
83
98
  };
84
99
  return {
85
100
  ...state,
@@ -99,16 +114,18 @@ function applyTaskCompletion(state, graph, taskName, result, dataHash, data) {
99
114
  } else {
100
115
  outputTokens = getProvides(taskConfig);
101
116
  }
102
- const lastConsumedHashes = { ...existingTask.lastConsumedHashes };
103
- const requires = taskConfig.requires ?? [];
104
- for (const token of requires) {
105
- for (const [otherName, otherConfig] of Object.entries(graph.tasks)) {
106
- if (getProvides(otherConfig).includes(token)) {
107
- const otherState = state.tasks[otherName];
108
- if (otherState?.lastDataHash) {
109
- lastConsumedHashes[token] = otherState.lastDataHash;
117
+ const lastConsumedHashes = existingTask.startConsumedHashes ? { ...existingTask.startConsumedHashes } : { ...existingTask.lastConsumedHashes };
118
+ if (!existingTask.startConsumedHashes) {
119
+ const requires = taskConfig.requires ?? [];
120
+ for (const token of requires) {
121
+ for (const [otherName, otherConfig] of Object.entries(graph.tasks)) {
122
+ if (getProvides(otherConfig).includes(token)) {
123
+ const otherState = state.tasks[otherName];
124
+ if (otherState?.lastDataHash) {
125
+ lastConsumedHashes[token] = otherState.lastDataHash;
126
+ }
127
+ break;
110
128
  }
111
- break;
112
129
  }
113
130
  }
114
131
  }
@@ -253,7 +270,7 @@ function applyEvent(live, event) {
253
270
  switch (event.type) {
254
271
  // --- Execution state transitions ---
255
272
  case "task-started":
256
- return { config, state: applyTaskStart(state, event.taskName) };
273
+ return { config, state: applyTaskStart(state, event.taskName, config) };
257
274
  case "task-completed":
258
275
  return { config, state: applyTaskCompletion(state, config, event.taskName, event.result, event.dataHash, event.data) };
259
276
  case "task-failed":
@@ -1824,13 +1841,29 @@ function validateNode(node) {
1824
1841
  if (!Array.isArray(n.sources)) {
1825
1842
  errors.push("sources: must be an array");
1826
1843
  } else {
1844
+ const bindTos = /* @__PURE__ */ new Set();
1845
+ const outputFiles = /* @__PURE__ */ new Set();
1827
1846
  n.sources.forEach((src, i) => {
1828
1847
  if (!src || typeof src !== "object" || Array.isArray(src)) {
1829
1848
  errors.push(`sources[${i}]: must be an object`);
1830
1849
  } else {
1831
1850
  const s = src;
1832
- if (typeof s.bindTo !== "string" || !s.bindTo) errors.push(`sources[${i}]: missing required "bindTo" property`);
1833
- if (s.outputFile != null && typeof s.outputFile !== "string") errors.push(`sources[${i}]: outputFile must be a string`);
1851
+ if (typeof s.bindTo !== "string" || !s.bindTo) {
1852
+ errors.push(`sources[${i}]: missing required "bindTo" property`);
1853
+ } else {
1854
+ if (bindTos.has(s.bindTo)) {
1855
+ errors.push(`sources[${i}]: bindTo "${s.bindTo}" is not unique across sources`);
1856
+ }
1857
+ bindTos.add(s.bindTo);
1858
+ }
1859
+ if (typeof s.outputFile !== "string" || !s.outputFile) {
1860
+ errors.push(`sources[${i}]: missing required "outputFile" property`);
1861
+ } else {
1862
+ if (outputFiles.has(s.outputFile)) {
1863
+ errors.push(`sources[${i}]: outputFile "${s.outputFile}" is not unique across sources`);
1864
+ }
1865
+ outputFiles.add(s.outputFile);
1866
+ }
1834
1867
  if (s.optionalForCompletionGating != null && typeof s.optionalForCompletionGating !== "boolean") {
1835
1868
  errors.push(`sources[${i}]: optionalForCompletionGating must be a boolean`);
1836
1869
  }