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,263 +0,0 @@
1
- (function () {
2
- function clone(x) {
3
- return JSON.parse(JSON.stringify(x));
4
- }
5
-
6
- function replaceNodeInPlace(target, source) {
7
- Object.keys(target).forEach((k) => delete target[k]);
8
- Object.assign(target, clone(source));
9
- }
10
-
11
- function stableNodeString(node) {
12
- return JSON.stringify(node);
13
- }
14
-
15
- function createBoardRuntimeClient(options) {
16
- if (!options || typeof options !== 'object') {
17
- throw new Error('options are required');
18
- }
19
-
20
- const fetchServer = options.fetchServer;
21
- const boardPaths = options.boardPaths;
22
- const buildLiveCardModelsFromArtifacts = options.buildLiveCardModelsFromArtifacts
23
- || (typeof window !== 'undefined' && window.BoardLiveGraph && window.BoardLiveGraph.buildLiveCardModelsFromArtifacts);
24
- const getServerOrigin = options.getServerOrigin;
25
-
26
- if (typeof fetchServer !== 'function') throw new Error('options.fetchServer is required');
27
- if (typeof boardPaths !== 'function') throw new Error('options.boardPaths is required');
28
- if (typeof buildLiveCardModelsFromArtifacts !== 'function') {
29
- throw new Error('options.buildLiveCardModelsFromArtifacts is required (or load board-livegraph-engine.js first)');
30
- }
31
- if (typeof getServerOrigin !== 'function') throw new Error('options.getServerOrigin is required');
32
-
33
- let nodesById = {};
34
- let board = null;
35
- let sse = null;
36
- let currentMode = String(options.initialMode || 'board');
37
- const canvas = options.canvas && typeof options.canvas === 'object'
38
- ? options.canvas
39
- : { height: '72vh', overflow: 'auto' };
40
-
41
- function syncBoardNodes(nextNodes) {
42
- const existingIds = new Set(board ? board.nodes.map((n) => n.id) : []);
43
- const nextById = Object.fromEntries(nextNodes.map((n) => [n.id, n]));
44
- let changed = false;
45
-
46
- if (board) {
47
- for (const id of existingIds) {
48
- if (!nextById[id]) {
49
- board.remove(id);
50
- changed = true;
51
- }
52
- }
53
- }
54
-
55
- for (const nextNode of nextNodes) {
56
- const existing = nodesById[nextNode.id];
57
- if (existing) {
58
- const prevStr = stableNodeString(existing);
59
- const nextStr = stableNodeString(nextNode);
60
- if (prevStr !== nextStr) {
61
- replaceNodeInPlace(existing, nextNode);
62
- changed = true;
63
- }
64
- } else {
65
- nodesById[nextNode.id] = clone(nextNode);
66
- if (board) board.add(nodesById[nextNode.id]);
67
- changed = true;
68
- }
69
- }
70
-
71
- if (board && changed) board.refresh();
72
- }
73
-
74
- async function uploadCardFile(boardId, cardId, file, opts) {
75
- if (!file) return null;
76
- const optionsObj = opts && typeof opts === 'object' ? opts : {};
77
- const inChat = optionsObj.inChat === true;
78
- const fileName = typeof file.name === 'string' ? file.name : 'upload.bin';
79
- const contentType = file.type || 'application/octet-stream';
80
- const paths = boardPaths(boardId);
81
- const uploadPath = inChat
82
- ? `${paths.cardFile(cardId)}?inChat=true`
83
- : paths.cardFile(cardId);
84
-
85
- const upload = await fetchServer(uploadPath, {
86
- method: 'POST',
87
- headers: {
88
- 'content-type': contentType,
89
- 'x-file-name': encodeURIComponent(fileName),
90
- },
91
- body: file,
92
- });
93
-
94
- if (!upload.ok) {
95
- const errText = await upload.text();
96
- throw new Error(`Upload failed (${upload.status}): ${errText || 'unknown error'}`);
97
- }
98
-
99
- const payload = await upload.json();
100
- return payload && payload.file ? payload.file : null;
101
- }
102
-
103
- async function uploadActionFiles(boardId, cardId, actionType, payload) {
104
- if (actionType !== 'chat-send' && actionType !== 'file-upload') return payload || {};
105
- const nextPayload = { ...(payload || {}) };
106
- const rawFiles = Array.isArray(nextPayload.files) ? nextPayload.files : [];
107
- if (!rawFiles.length) {
108
- nextPayload.files = [];
109
- return nextPayload;
110
- }
111
-
112
- const uploaded = [];
113
- for (const file of rawFiles) {
114
- const fileMeta = await uploadCardFile(boardId, cardId, file, { inChat: actionType === 'chat-send' });
115
- if (fileMeta) uploaded.push(fileMeta);
116
- }
117
-
118
- // For chat uploads, server-side file API already records file metadata and emits system chat logs.
119
- nextPayload.files = actionType === 'chat-send' ? [] : uploaded;
120
- return nextPayload;
121
- }
122
-
123
- async function bootstrapBoard(params) {
124
- const p = params && typeof params === 'object' ? params : {};
125
- const boardId = String(p.boardId || 'default');
126
- const taskExecutorPath = typeof p.taskExecutorPath === 'string' ? p.taskExecutorPath.trim() : '';
127
- const mode = String(p.mode || currentMode || 'board');
128
- const rootEl = p.rootElement;
129
- if (!rootEl) throw new Error('bootstrapBoard requires params.rootElement');
130
-
131
- const paths = boardPaths(boardId);
132
-
133
- const initBoardPath = taskExecutorPath
134
- ? `${paths.initBoard}?taskExecutorPath=${encodeURIComponent(taskExecutorPath)}`
135
- : paths.initBoard;
136
- const initBoardRes = await fetchServer(initBoardPath);
137
- if (!initBoardRes.ok) throw new Error(`Server init-board failed (${initBoardRes.status}).`);
138
-
139
- const bootstrapCardsRes = await fetchServer(paths.bootstrapCards);
140
- if (!bootstrapCardsRes.ok) {
141
- throw new Error(`Server bootstrap-cards failed (${bootstrapCardsRes.status}).`);
142
- }
143
-
144
- const payload = await bootstrapCardsRes.json();
145
- const cards = buildLiveCardModelsFromArtifacts(payload);
146
- if (!Array.isArray(cards)) throw new Error('Server payload missing published runtime artifacts');
147
-
148
- nodesById = {};
149
- for (const n of cards) nodesById[n.id] = clone(n);
150
-
151
- const engine = LiveCard.init({
152
- resolve: (id) => nodesById[id],
153
- markdown: (typeof marked !== 'undefined')
154
- ? (text) => marked.parse(text)
155
- : null,
156
- onPatchState: async (id, patch) => {
157
- await fetchServer(paths.patchCard(id), {
158
- method: 'PATCH',
159
- headers: { 'content-type': 'application/json' },
160
- body: JSON.stringify(patch || {}),
161
- });
162
- },
163
- onRefresh: async (id) => {
164
- await fetchServer(paths.patchCard(id), {
165
- method: 'PATCH',
166
- headers: { 'content-type': 'application/json' },
167
- body: JSON.stringify({}),
168
- });
169
- },
170
- onAction: async (id, actionType, actionPayload) => {
171
- const uploadedPayload = await uploadActionFiles(boardId, id, actionType, actionPayload);
172
- await fetchServer(paths.cardAction(id), {
173
- method: 'POST',
174
- headers: { 'content-type': 'application/json' },
175
- body: JSON.stringify({ actionType, payload: uploadedPayload || {} }),
176
- });
177
- },
178
- getChatMessages: async (id) => {
179
- const res = await fetchServer(paths.cardChats(id));
180
- if (!res.ok) return [];
181
- const chatPayload = await res.json();
182
- const items = Array.isArray(chatPayload && chatPayload.messages) ? chatPayload.messages : [];
183
- return items.map((m) => ({
184
- role: m && typeof m.role === 'string' ? m.role : 'system',
185
- text: m && typeof m.text === 'string' ? m.text : '',
186
- files: [],
187
- }));
188
- },
189
- });
190
-
191
- rootEl.innerHTML = '';
192
- board = LiveCard.Board(engine, rootEl, {
193
- nodes: Object.values(nodesById),
194
- mode,
195
- canvas,
196
- });
197
- currentMode = mode;
198
-
199
- const origin = getServerOrigin();
200
- if (!origin) {
201
- throw new Error('Server origin not resolved before SSE start');
202
- }
203
- sse = new EventSource(`${origin}${paths.stream}`);
204
- sse.onmessage = function (evt) {
205
- try {
206
- const update = JSON.parse(evt.data || '{}');
207
- syncBoardNodes(buildLiveCardModelsFromArtifacts(update));
208
- if (board && board.engine && typeof board.engine.onServerSseEvent === 'function') {
209
- board.engine.onServerSseEvent();
210
- } else if (board && board.engine && typeof board.engine.refreshOpenChatModal === 'function') {
211
- board.engine.refreshOpenChatModal();
212
- }
213
- } catch (err) {
214
- console.warn('Bad SSE payload', err);
215
- }
216
- };
217
-
218
- return board;
219
- }
220
-
221
- function dispose() {
222
- if (sse) {
223
- sse.close();
224
- sse = null;
225
- }
226
- board = null;
227
- nodesById = {};
228
- }
229
-
230
- function setMode(mode) {
231
- currentMode = String(mode || 'board');
232
- if (board) board.setMode(currentMode);
233
- }
234
-
235
- function autoLayout() {
236
- if (!board) return;
237
- board.setMode('canvas');
238
- currentMode = 'canvas';
239
- board.autoLayout();
240
- }
241
-
242
- function setDevMode(enabled) {
243
- if (board) board.setDevMode(Boolean(enabled));
244
- }
245
-
246
- function getCurrentMode() {
247
- return currentMode;
248
- }
249
-
250
- return {
251
- bootstrapBoard,
252
- dispose,
253
- setMode,
254
- autoLayout,
255
- setDevMode,
256
- getCurrentMode,
257
- };
258
- }
259
-
260
- window.ReusableBoardRuntimeClient = {
261
- createBoardRuntimeClient,
262
- };
263
- })();