@dxos/react-ui-canvas-compute 0.8.0 → 0.8.1-main.a06ad20

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 (78) hide show
  1. package/dist/lib/browser/index.mjs +81 -30
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +208 -158
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/lib/node-esm/index.mjs +81 -30
  8. package/dist/lib/node-esm/index.mjs.map +4 -4
  9. package/dist/lib/node-esm/meta.json +1 -1
  10. package/dist/types/src/components/DiagnosticOverlay.d.ts +2 -1
  11. package/dist/types/src/components/DiagnosticOverlay.d.ts.map +1 -1
  12. package/dist/types/src/compute.stories.d.ts +2 -1
  13. package/dist/types/src/compute.stories.d.ts.map +1 -1
  14. package/dist/types/src/graph/controller.d.ts +11 -11
  15. package/dist/types/src/graph/controller.d.ts.map +1 -1
  16. package/dist/types/src/hooks/index.d.ts +1 -0
  17. package/dist/types/src/hooks/index.d.ts.map +1 -1
  18. package/dist/types/src/hooks/useComputeGraphController.d.ts +10 -0
  19. package/dist/types/src/hooks/useComputeGraphController.d.ts.map +1 -0
  20. package/dist/types/src/shapes/Append.d.ts +2 -1
  21. package/dist/types/src/shapes/Append.d.ts.map +1 -1
  22. package/dist/types/src/shapes/Array.d.ts +2 -1
  23. package/dist/types/src/shapes/Array.d.ts.map +1 -1
  24. package/dist/types/src/shapes/Audio.d.ts +2 -1
  25. package/dist/types/src/shapes/Audio.d.ts.map +1 -1
  26. package/dist/types/src/shapes/Beacon.d.ts +2 -1
  27. package/dist/types/src/shapes/Beacon.d.ts.map +1 -1
  28. package/dist/types/src/shapes/Boolean.d.ts.map +1 -1
  29. package/dist/types/src/shapes/Chat.d.ts +2 -1
  30. package/dist/types/src/shapes/Chat.d.ts.map +1 -1
  31. package/dist/types/src/shapes/Constant.d.ts +2 -1
  32. package/dist/types/src/shapes/Constant.d.ts.map +1 -1
  33. package/dist/types/src/shapes/Database.d.ts +2 -1
  34. package/dist/types/src/shapes/Database.d.ts.map +1 -1
  35. package/dist/types/src/shapes/Function.d.ts.map +1 -1
  36. package/dist/types/src/shapes/Gpt.d.ts +2 -1
  37. package/dist/types/src/shapes/Gpt.d.ts.map +1 -1
  38. package/dist/types/src/shapes/GptRealtime.d.ts +2 -1
  39. package/dist/types/src/shapes/GptRealtime.d.ts.map +1 -1
  40. package/dist/types/src/shapes/Json.d.ts +3 -2
  41. package/dist/types/src/shapes/Json.d.ts.map +1 -1
  42. package/dist/types/src/shapes/Logic.d.ts +3 -2
  43. package/dist/types/src/shapes/Logic.d.ts.map +1 -1
  44. package/dist/types/src/shapes/Queue.d.ts +3 -2
  45. package/dist/types/src/shapes/Queue.d.ts.map +1 -1
  46. package/dist/types/src/shapes/RNG.d.ts +2 -1
  47. package/dist/types/src/shapes/RNG.d.ts.map +1 -1
  48. package/dist/types/src/shapes/Scope.d.ts +2 -1
  49. package/dist/types/src/shapes/Scope.d.ts.map +1 -1
  50. package/dist/types/src/shapes/Surface.d.ts +2 -1
  51. package/dist/types/src/shapes/Surface.d.ts.map +1 -1
  52. package/dist/types/src/shapes/Switch.d.ts +2 -1
  53. package/dist/types/src/shapes/Switch.d.ts.map +1 -1
  54. package/dist/types/src/shapes/Table.d.ts +2 -1
  55. package/dist/types/src/shapes/Table.d.ts.map +1 -1
  56. package/dist/types/src/shapes/Template.d.ts.map +1 -1
  57. package/dist/types/src/shapes/Text.d.ts +2 -1
  58. package/dist/types/src/shapes/Text.d.ts.map +1 -1
  59. package/dist/types/src/shapes/TextToImage.d.ts +2 -1
  60. package/dist/types/src/shapes/TextToImage.d.ts.map +1 -1
  61. package/dist/types/src/shapes/Thread.d.ts +3 -2
  62. package/dist/types/src/shapes/Thread.d.ts.map +1 -1
  63. package/dist/types/src/shapes/Trigger.d.ts +3 -2
  64. package/dist/types/src/shapes/Trigger.d.ts.map +1 -1
  65. package/dist/types/src/shapes/common/FunctionBody.d.ts +1 -1
  66. package/dist/types/src/shapes/common/FunctionBody.d.ts.map +1 -1
  67. package/dist/types/src/shapes/common/TypeSelect.d.ts +2 -1
  68. package/dist/types/src/shapes/common/TypeSelect.d.ts.map +1 -1
  69. package/dist/types/src/shapes/defs.d.ts +1 -1
  70. package/dist/types/src/shapes/defs.d.ts.map +1 -1
  71. package/dist/types/src/testing/circuits.d.ts +20 -3
  72. package/dist/types/src/testing/circuits.d.ts.map +1 -1
  73. package/package.json +40 -41
  74. package/src/compute.stories.tsx +20 -51
  75. package/src/hooks/index.ts +1 -0
  76. package/src/hooks/useComputeGraphController.ts +65 -0
  77. package/src/shapes/defs.ts +1 -1
  78. package/src/testing/circuits.ts +12 -5
@@ -161,6 +161,7 @@ __export(node_exports, {
161
161
  threadShape: () => threadShape,
162
162
  triggerShape: () => triggerShape,
163
163
  useComputeContext: () => useComputeContext,
164
+ useComputeGraphController: () => useComputeGraphController,
164
165
  useComputeNodeState: () => useComputeNodeState,
165
166
  useGraphMonitor: () => useGraphMonitor
166
167
  });
@@ -178,9 +179,10 @@ var import_invariant = require("@dxos/invariant");
178
179
  var import_react = require("react");
179
180
  var import_debug2 = require("@dxos/debug");
180
181
  var import_react2 = require("react");
182
+ var import_react3 = require("react");
181
183
  var import_echo_schema2 = require("@dxos/echo-schema");
182
184
  var import_invariant2 = require("@dxos/invariant");
183
- var import_react3 = require("react");
185
+ var import_react4 = require("react");
184
186
  var import_conductor3 = require("@dxos/conductor");
185
187
  var import_echo_schema3 = require("@dxos/echo-schema");
186
188
  var import_invariant3 = require("@dxos/invariant");
@@ -188,128 +190,128 @@ var import_keys = require("@dxos/keys");
188
190
  var import_echo = require("@dxos/react-client/echo");
189
191
  var import_util = require("@dxos/util");
190
192
  var import_react_ui_canvas_editor = require("@dxos/react-ui-canvas-editor");
191
- var import_react4 = __toESM(require("react"));
193
+ var import_react5 = __toESM(require("react"));
192
194
  var import_invariant4 = require("@dxos/invariant");
193
195
  var import_react_ui = require("@dxos/react-ui");
194
196
  var import_react_ui_canvas_editor2 = require("@dxos/react-ui-canvas-editor");
195
197
  var import_react_ui_theme = require("@dxos/react-ui-theme");
196
- var import_react5 = __toESM(require("react"));
198
+ var import_react6 = __toESM(require("react"));
197
199
  var import_conductor4 = require("@dxos/conductor");
198
200
  var import_echo_schema4 = require("@dxos/echo-schema");
199
201
  var import_react_ui_canvas = require("@dxos/react-ui-canvas");
200
202
  var import_react_ui_canvas_editor3 = require("@dxos/react-ui-canvas-editor");
201
- var import_schema = require("@effect/schema");
203
+ var import_effect2 = require("effect");
202
204
  var import_conductor5 = require("@dxos/conductor");
203
205
  var import_echo_schema5 = require("@dxos/echo-schema");
204
206
  var import_react_ui_canvas_editor4 = require("@dxos/react-ui-canvas-editor");
205
- var import_react6 = __toESM(require("react"));
207
+ var import_react7 = __toESM(require("react"));
206
208
  var import_conductor6 = require("@dxos/conductor");
207
209
  var import_react_ui2 = require("@dxos/react-ui");
208
- var import_react7 = __toESM(require("react"));
210
+ var import_react8 = __toESM(require("react"));
209
211
  var import_conductor7 = require("@dxos/conductor");
210
212
  var import_echo_schema6 = require("@dxos/echo-schema");
211
- var import_react8 = __toESM(require("react"));
213
+ var import_react9 = __toESM(require("react"));
212
214
  var import_conductor8 = require("@dxos/conductor");
213
215
  var import_echo_schema7 = require("@dxos/echo-schema");
214
- var import_react9 = __toESM(require("react"));
216
+ var import_react10 = __toESM(require("react"));
215
217
  var import_echo_schema8 = require("@dxos/echo-schema");
216
218
  var import_react_ui3 = require("@dxos/react-ui");
217
219
  var import_react_ui_canvas_editor5 = require("@dxos/react-ui-canvas-editor");
218
- var import_react10 = __toESM(require("react"));
220
+ var import_react11 = __toESM(require("react"));
219
221
  var import_conductor9 = require("@dxos/conductor");
220
222
  var import_echo_schema9 = require("@dxos/echo-schema");
221
223
  var import_react_ui4 = require("@dxos/react-ui");
222
224
  var import_react_ui_canvas_editor6 = require("@dxos/react-ui-canvas-editor");
223
225
  var import_react_ui_theme2 = require("@dxos/react-ui-theme");
224
- var import_react11 = __toESM(require("react"));
226
+ var import_react12 = __toESM(require("react"));
225
227
  var import_echo_schema10 = require("@dxos/echo-schema");
226
228
  var import_react_ui_canvas_editor7 = require("@dxos/react-ui-canvas-editor");
227
- var import_react12 = __toESM(require("react"));
229
+ var import_react13 = __toESM(require("react"));
228
230
  var import_conductor10 = require("@dxos/conductor");
229
231
  var import_echo_schema11 = require("@dxos/echo-schema");
230
232
  var import_react_ui_canvas_editor8 = require("@dxos/react-ui-canvas-editor");
231
233
  var import_react_ui_canvas_editor9 = require("@dxos/react-ui-canvas-editor");
232
- var import_react13 = __toESM(require("react"));
234
+ var import_react14 = __toESM(require("react"));
233
235
  var import_conductor11 = require("@dxos/conductor");
234
236
  var import_echo_schema12 = require("@dxos/echo-schema");
235
237
  var import_react_ui5 = require("@dxos/react-ui");
236
238
  var import_react_ui_canvas_editor10 = require("@dxos/react-ui-canvas-editor");
237
239
  var import_react_ui_canvas_editor11 = require("@dxos/react-ui-canvas-editor");
238
240
  var import_util2 = require("@dxos/util");
239
- var import_react14 = __toESM(require("react"));
241
+ var import_react15 = __toESM(require("react"));
240
242
  var import_echo_schema13 = require("@dxos/echo-schema");
241
243
  var import_react_ui_canvas_editor12 = require("@dxos/react-ui-canvas-editor");
242
- var import_react15 = __toESM(require("react"));
244
+ var import_react16 = __toESM(require("react"));
243
245
  var import_conductor12 = require("@dxos/conductor");
244
246
  var import_echo_schema14 = require("@dxos/echo-schema");
245
247
  var import_functions = require("@dxos/functions");
246
248
  var import_react_client = require("@dxos/react-client");
247
249
  var import_echo2 = require("@dxos/react-client/echo");
248
250
  var import_react_ui_canvas_editor13 = require("@dxos/react-ui-canvas-editor");
249
- var import_react16 = __toESM(require("react"));
251
+ var import_react17 = __toESM(require("react"));
250
252
  var import_conductor13 = require("@dxos/conductor");
251
253
  var import_echo_schema15 = require("@dxos/echo-schema");
252
- var import_react17 = __toESM(require("react"));
254
+ var import_react18 = __toESM(require("react"));
253
255
  var import_conductor14 = require("@dxos/conductor");
254
256
  var import_echo_schema16 = require("@dxos/echo-schema");
255
257
  var import_react_ui_canvas_editor14 = require("@dxos/react-ui-canvas-editor");
256
258
  var import_react_ui_syntax_highlighter = require("@dxos/react-ui-syntax-highlighter");
257
- var import_react18 = __toESM(require("react"));
259
+ var import_react19 = __toESM(require("react"));
258
260
  var import_conductor15 = require("@dxos/conductor");
259
261
  var import_echo_schema17 = require("@dxos/echo-schema");
260
- var import_react19 = __toESM(require("react"));
262
+ var import_react20 = __toESM(require("react"));
261
263
  var import_conductor16 = require("@dxos/conductor");
262
264
  var import_echo_schema18 = require("@dxos/echo-schema");
263
265
  var import_react_ui_theme3 = require("@dxos/react-ui-theme");
264
- var import_react20 = __toESM(require("react"));
266
+ var import_react21 = __toESM(require("react"));
265
267
  var import_conductor17 = require("@dxos/conductor");
266
268
  var import_echo_schema19 = require("@dxos/echo-schema");
267
269
  var import_react_ui6 = require("@dxos/react-ui");
268
270
  var import_react_ui_canvas_editor15 = require("@dxos/react-ui-canvas-editor");
269
271
  var import_react_ui_theme4 = require("@dxos/react-ui-theme");
270
- var import_react21 = __toESM(require("react"));
272
+ var import_react22 = __toESM(require("react"));
271
273
  var import_conductor18 = require("@dxos/conductor");
272
274
  var import_echo_schema20 = require("@dxos/echo-schema");
273
275
  var import_react_ui_canvas_editor16 = require("@dxos/react-ui-canvas-editor");
274
276
  var import_react_ui_sfx = require("@dxos/react-ui-sfx");
275
- var import_react22 = __toESM(require("react"));
277
+ var import_react23 = __toESM(require("react"));
276
278
  var import_app_framework = require("@dxos/app-framework");
277
279
  var import_conductor19 = require("@dxos/conductor");
278
280
  var import_echo_schema21 = require("@dxos/echo-schema");
279
281
  var import_react_ui_canvas_editor17 = require("@dxos/react-ui-canvas-editor");
280
- var import_react23 = __toESM(require("react"));
282
+ var import_react24 = __toESM(require("react"));
281
283
  var import_conductor20 = require("@dxos/conductor");
282
284
  var import_echo_schema22 = require("@dxos/echo-schema");
283
285
  var import_react_ui7 = require("@dxos/react-ui");
284
286
  var import_react_ui_canvas_editor18 = require("@dxos/react-ui-canvas-editor");
285
- var import_react24 = __toESM(require("react"));
287
+ var import_react25 = __toESM(require("react"));
286
288
  var import_conductor21 = require("@dxos/conductor");
287
289
  var import_echo_schema23 = require("@dxos/echo-schema");
288
- var import_react25 = __toESM(require("react"));
290
+ var import_react26 = __toESM(require("react"));
289
291
  var import_conductor22 = require("@dxos/conductor");
290
292
  var import_echo_schema24 = require("@dxos/echo-schema");
291
293
  var import_invariant5 = require("@dxos/invariant");
292
294
  var import_react_ui_canvas_editor19 = require("@dxos/react-ui-canvas-editor");
293
- var import_react26 = __toESM(require("react"));
295
+ var import_react27 = __toESM(require("react"));
294
296
  var import_conductor23 = require("@dxos/conductor");
295
297
  var import_echo_schema25 = require("@dxos/echo-schema");
296
298
  var import_react_ui_canvas_editor20 = require("@dxos/react-ui-canvas-editor");
297
299
  var import_react_ui_canvas_editor21 = require("@dxos/react-ui-canvas-editor");
298
- var import_react27 = __toESM(require("react"));
300
+ var import_react28 = __toESM(require("react"));
299
301
  var import_conductor24 = require("@dxos/conductor");
300
302
  var import_echo_schema26 = require("@dxos/echo-schema");
301
303
  var import_react_ui_theme5 = require("@dxos/react-ui-theme");
302
- var import_react28 = __toESM(require("react"));
304
+ var import_react29 = __toESM(require("react"));
303
305
  var import_echo_schema27 = require("@dxos/echo-schema");
304
306
  var import_react_ui_canvas_editor22 = require("@dxos/react-ui-canvas-editor");
305
- var import_react29 = __toESM(require("react"));
307
+ var import_react30 = __toESM(require("react"));
306
308
  var import_conductor25 = require("@dxos/conductor");
307
309
  var import_echo_schema28 = require("@dxos/echo-schema");
308
310
  var import_functions2 = require("@dxos/functions");
309
311
  var import_keys2 = require("@dxos/keys");
310
312
  var import_echo3 = require("@dxos/react-client/echo");
311
313
  var import_react_ui8 = require("@dxos/react-ui");
312
- var import_react30 = __toESM(require("react"));
314
+ var import_react31 = __toESM(require("react"));
313
315
  var import_echo_schema29 = require("@dxos/echo-schema");
314
316
  var import_log2 = require("@dxos/log");
315
317
  var import_react_client2 = require("@dxos/react-client");
@@ -390,6 +392,53 @@ var ComputeContext = (0, import_react.createContext)(null);
390
392
  var useComputeContext = () => {
391
393
  return (0, import_react.useContext)(ComputeContext) ?? (0, import_debug2.raise)(new Error("Missing ComputeContext"));
392
394
  };
395
+ var combine = (...cbs) => {
396
+ return () => {
397
+ for (const cb of cbs) {
398
+ cb();
399
+ }
400
+ };
401
+ };
402
+ var useComputeGraphController = ({ controller, graph, editorRef }) => {
403
+ const [, forceUpdate] = (0, import_react2.useState)({});
404
+ (0, import_react2.useEffect)(() => {
405
+ if (!controller || !graph) {
406
+ return;
407
+ }
408
+ void controller.open();
409
+ const off = combine(
410
+ controller.update.on(() => {
411
+ void editorRef.current?.update();
412
+ forceUpdate({});
413
+ }),
414
+ // TODO(burdon): Every node is called on every update.
415
+ controller.output.on(({ nodeId, property, value }) => {
416
+ if (value.type === "not-executed") {
417
+ return;
418
+ }
419
+ const edge = graph.edges.find((edge2) => {
420
+ const source = graph.getNode(edge2.source);
421
+ return source.node === nodeId && edge2.output === property;
422
+ });
423
+ if (edge) {
424
+ void editorRef.current?.action?.({
425
+ type: "trigger",
426
+ edges: [
427
+ edge
428
+ ]
429
+ });
430
+ }
431
+ })
432
+ );
433
+ return () => {
434
+ void controller.close();
435
+ off();
436
+ };
437
+ }, [
438
+ graph,
439
+ controller
440
+ ]);
441
+ };
393
442
  var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-canvas-compute/src/hooks/useComputeNodeState.ts";
394
443
  var useComputeNodeState = (shape) => {
395
444
  const { controller } = useComputeContext();
@@ -402,8 +451,8 @@ var useComputeNodeState = (shape) => {
402
451
  ""
403
452
  ]
404
453
  });
405
- const [meta, setMeta] = (0, import_react2.useState)();
406
- (0, import_react2.useEffect)(() => {
454
+ const [meta, setMeta] = (0, import_react3.useState)();
455
+ (0, import_react3.useEffect)(() => {
407
456
  let disposed = false;
408
457
  queueMicrotask(async () => {
409
458
  (0, import_invariant2.invariant)(shape.node, "Node not specified", {
@@ -428,12 +477,12 @@ var useComputeNodeState = (shape) => {
428
477
  }, [
429
478
  shape.node
430
479
  ]);
431
- const evalNode = (0, import_react2.useCallback)(() => {
480
+ const evalNode = (0, import_react3.useCallback)(() => {
432
481
  return controller.evalNode(shape.node);
433
482
  }, [
434
483
  shape.node
435
484
  ]);
436
- const subscribeToEventLog = (0, import_react2.useCallback)((cb) => {
485
+ const subscribeToEventLog = (0, import_react3.useCallback)((cb) => {
437
486
  return controller.events.on((ev) => {
438
487
  if (ev.nodeId === shape.node) {
439
488
  cb(ev);
@@ -490,7 +539,7 @@ var mapEdge = (graph, { source, target, output = import_conductor3.DEFAULT_OUTPU
490
539
  };
491
540
  };
492
541
  var useGraphMonitor = (model) => {
493
- return (0, import_react3.useMemo)(() => {
542
+ return (0, import_react4.useMemo)(() => {
494
543
  return {
495
544
  onCreate: ({ node }) => {
496
545
  if (!model) {
@@ -881,7 +930,7 @@ var computeValueBag = (bag) => {
881
930
  var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-canvas-compute/src/shapes/common/Box.tsx";
882
931
  var headerHeight = 32;
883
932
  var footerHeight = 32;
884
- var Box = /* @__PURE__ */ (0, import_react4.forwardRef)(({ children, classNames, shape, title, status, open, onAction }, forwardedRef) => {
933
+ var Box = /* @__PURE__ */ (0, import_react5.forwardRef)(({ children, classNames, shape, title, status, open, onAction }, forwardedRef) => {
885
934
  (0, import_invariant4.invariant)(shape.type, void 0, {
886
935
  F: __dxlog_file5,
887
936
  L: 30,
@@ -895,17 +944,17 @@ var Box = /* @__PURE__ */ (0, import_react4.forwardRef)(({ children, classNames,
895
944
  icon: "ph--placeholder--regular"
896
945
  };
897
946
  const { debug } = (0, import_react_ui_canvas_editor2.useEditorContext)();
898
- return /* @__PURE__ */ import_react4.default.createElement("div", {
947
+ return /* @__PURE__ */ import_react5.default.createElement("div", {
899
948
  ref: forwardedRef,
900
949
  className: "flex flex-col h-full w-full justify-between"
901
- }, /* @__PURE__ */ import_react4.default.createElement("div", {
950
+ }, /* @__PURE__ */ import_react5.default.createElement("div", {
902
951
  className: "flex shrink-0 w-full justify-between items-center h-[32px] bg-hoverSurface"
903
- }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui.Icon, {
952
+ }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui.Icon, {
904
953
  icon,
905
954
  classNames: "mx-2"
906
- }), /* @__PURE__ */ import_react4.default.createElement("div", {
955
+ }), /* @__PURE__ */ import_react5.default.createElement("div", {
907
956
  className: "grow text-sm truncate"
908
- }, debug ? shape.type : name ?? shape.text ?? title), /* @__PURE__ */ import_react4.default.createElement(import_react_ui.IconButton, {
957
+ }, debug ? shape.type : name ?? shape.text ?? title), /* @__PURE__ */ import_react5.default.createElement(import_react_ui.IconButton, {
909
958
  classNames: "p-1 text-green-500",
910
959
  variant: "ghost",
911
960
  icon: "ph--play--regular",
@@ -917,13 +966,13 @@ var Box = /* @__PURE__ */ (0, import_react4.forwardRef)(({ children, classNames,
917
966
  ev.stopPropagation();
918
967
  onAction?.("run");
919
968
  }
920
- })), /* @__PURE__ */ import_react4.default.createElement("div", {
969
+ })), /* @__PURE__ */ import_react5.default.createElement("div", {
921
970
  className: (0, import_react_ui_theme.mx)("flex flex-col h-full grow overflow-hidden", classNames)
922
- }, children), /* @__PURE__ */ import_react4.default.createElement("div", {
971
+ }, children), /* @__PURE__ */ import_react5.default.createElement("div", {
923
972
  className: "flex shrink-0 w-full justify-between items-center h-[32px] bg-hoverSurface"
924
- }, /* @__PURE__ */ import_react4.default.createElement("div", {
973
+ }, /* @__PURE__ */ import_react5.default.createElement("div", {
925
974
  className: "grow px-2 text-sm truncate"
926
- }, debug ? shape.id : status), openable && /* @__PURE__ */ import_react4.default.createElement(import_react_ui.IconButton, {
975
+ }, debug ? shape.id : status), openable && /* @__PURE__ */ import_react5.default.createElement(import_react_ui.IconButton, {
927
976
  classNames: "p-1",
928
977
  variant: "ghost",
929
978
  icon: open ? "ph--caret-up--regular" : "ph--caret-down--regular",
@@ -936,7 +985,7 @@ var Box = /* @__PURE__ */ (0, import_react4.forwardRef)(({ children, classNames,
936
985
  }
937
986
  })));
938
987
  });
939
- var getProperties = (ast) => import_schema.AST.getPropertySignatures(ast).map(({ name }) => ({
988
+ var getProperties = (ast) => import_effect2.SchemaAST.getPropertySignatures(ast).map(({ name }) => ({
940
989
  name: name.toString()
941
990
  }));
942
991
  var createAnchorId = (kind, property = kind === "input" ? import_conductor5.DEFAULT_INPUT : import_conductor5.DEFAULT_OUTPUT) => [
@@ -953,7 +1002,7 @@ var parseAnchorId = (id) => {
953
1002
  var ComputeShape = import_echo_schema5.S.extend(import_react_ui_canvas_editor4.Polygon, import_echo_schema5.S.Struct({
954
1003
  // TODO(burdon): Rename computeNode?
955
1004
  node: import_echo_schema5.S.optional(import_echo_schema5.ObjectId.annotations({
956
- [import_schema.AST.DescriptionAnnotationId]: "Compute node id"
1005
+ [import_effect2.SchemaAST.DescriptionAnnotationId]: "Compute node id"
957
1006
  }))
958
1007
  }).pipe(import_echo_schema5.S.mutable));
959
1008
  var createShape = ({ id, ...rest }) => {
@@ -966,8 +1015,8 @@ var bodyPadding = 8;
966
1015
  var expandedHeight = 200;
967
1016
  var FunctionBody = ({ shape, name, content, inputSchema = import_conductor4.VoidInput, outputSchema = import_conductor4.VoidOutput, ...props }) => {
968
1017
  const { scale } = (0, import_react_ui_canvas.useCanvasContext)();
969
- const rootRef = (0, import_react5.useRef)(null);
970
- const [open, setOpen] = (0, import_react5.useState)(false);
1018
+ const rootRef = (0, import_react6.useRef)(null);
1019
+ const [open, setOpen] = (0, import_react6.useState)(false);
971
1020
  const handleAction = (action) => {
972
1021
  if (!rootRef.current) {
973
1022
  return;
@@ -991,7 +1040,7 @@ var FunctionBody = ({ shape, name, content, inputSchema = import_conductor4.Void
991
1040
  const inputs = getProperties(inputSchema.ast);
992
1041
  const outputs = getProperties(outputSchema.ast);
993
1042
  const columnCount = inputs.length && outputs.length ? 2 : 1;
994
- return /* @__PURE__ */ import_react5.default.createElement(Box, {
1043
+ return /* @__PURE__ */ import_react6.default.createElement(Box, {
995
1044
  ref: rootRef,
996
1045
  shape,
997
1046
  title: name,
@@ -999,29 +1048,29 @@ var FunctionBody = ({ shape, name, content, inputSchema = import_conductor4.Void
999
1048
  open,
1000
1049
  onAction: handleAction,
1001
1050
  ...props
1002
- }, /* @__PURE__ */ import_react5.default.createElement("div", {
1051
+ }, /* @__PURE__ */ import_react6.default.createElement("div", {
1003
1052
  className: `grid grid-cols-${columnCount} items-center`,
1004
1053
  style: {
1005
1054
  paddingTop: bodyPadding,
1006
1055
  paddingBottom: bodyPadding
1007
1056
  }
1008
- }, (inputs?.length ?? 0) > 0 && /* @__PURE__ */ import_react5.default.createElement("div", {
1057
+ }, (inputs?.length ?? 0) > 0 && /* @__PURE__ */ import_react6.default.createElement("div", {
1009
1058
  className: "flex flex-col"
1010
- }, inputs?.map(({ name: name2 }) => /* @__PURE__ */ import_react5.default.createElement("div", {
1059
+ }, inputs?.map(({ name: name2 }) => /* @__PURE__ */ import_react6.default.createElement("div", {
1011
1060
  key: name2,
1012
1061
  className: "px-2 truncate text-sm font-mono items-center",
1013
1062
  style: {
1014
1063
  height: import_react_ui_canvas_editor3.rowHeight
1015
1064
  }
1016
- }, name2))), (outputs?.length ?? 0) > 0 && /* @__PURE__ */ import_react5.default.createElement("div", {
1065
+ }, name2))), (outputs?.length ?? 0) > 0 && /* @__PURE__ */ import_react6.default.createElement("div", {
1017
1066
  className: "flex flex-col"
1018
- }, outputs?.map(({ name: name2 }) => /* @__PURE__ */ import_react5.default.createElement("div", {
1067
+ }, outputs?.map(({ name: name2 }) => /* @__PURE__ */ import_react6.default.createElement("div", {
1019
1068
  key: name2,
1020
1069
  className: "px-2 truncate text-sm font-mono items-center text-right",
1021
1070
  style: {
1022
1071
  height: import_react_ui_canvas_editor3.rowHeight
1023
1072
  }
1024
- }, name2)))), open && /* @__PURE__ */ import_react5.default.createElement("div", {
1073
+ }, name2)))), open && /* @__PURE__ */ import_react6.default.createElement("div", {
1025
1074
  className: "flex flex-col grow overflow-hidden"
1026
1075
  }, content));
1027
1076
  };
@@ -1043,22 +1092,22 @@ var createFunctionAnchors = (shape, input = import_conductor4.VoidInput, output
1043
1092
  });
1044
1093
  };
1045
1094
  var TypeSelect = ({ value, onValueChange }) => {
1046
- return /* @__PURE__ */ import_react6.default.createElement(import_react_ui2.Select.Root, {
1095
+ return /* @__PURE__ */ import_react7.default.createElement(import_react_ui2.Select.Root, {
1047
1096
  value,
1048
1097
  onValueChange
1049
- }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui2.Select.TriggerButton, {
1098
+ }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui2.Select.TriggerButton, {
1050
1099
  variant: "ghost",
1051
1100
  classNames: "w-full !px-0"
1052
- }), /* @__PURE__ */ import_react6.default.createElement(import_react_ui2.Select.Portal, null, /* @__PURE__ */ import_react6.default.createElement(import_react_ui2.Select.Content, null, /* @__PURE__ */ import_react6.default.createElement(import_react_ui2.Select.ScrollUpButton, null), /* @__PURE__ */ import_react6.default.createElement(import_react_ui2.Select.Viewport, null, import_conductor6.ComputeValueType.literals.map((type) => /* @__PURE__ */ import_react6.default.createElement(import_react_ui2.Select.Option, {
1101
+ }), /* @__PURE__ */ import_react7.default.createElement(import_react_ui2.Select.Portal, null, /* @__PURE__ */ import_react7.default.createElement(import_react_ui2.Select.Content, null, /* @__PURE__ */ import_react7.default.createElement(import_react_ui2.Select.ScrollUpButton, null), /* @__PURE__ */ import_react7.default.createElement(import_react_ui2.Select.Viewport, null, import_conductor6.ComputeValueType.literals.map((type) => /* @__PURE__ */ import_react7.default.createElement(import_react_ui2.Select.Option, {
1053
1102
  key: type,
1054
1103
  value: type
1055
- }, type))), /* @__PURE__ */ import_react6.default.createElement(import_react_ui2.Select.ScrollDownButton, null), /* @__PURE__ */ import_react6.default.createElement(import_react_ui2.Select.Arrow, null))));
1104
+ }, type))), /* @__PURE__ */ import_react7.default.createElement(import_react_ui2.Select.ScrollDownButton, null), /* @__PURE__ */ import_react7.default.createElement(import_react_ui2.Select.Arrow, null))));
1056
1105
  };
1057
1106
  var ReducerShape = import_echo_schema6.S.extend(ComputeShape, import_echo_schema6.S.Struct({
1058
1107
  type: import_echo_schema6.S.Literal("reducer")
1059
1108
  }));
1060
1109
  var ReducerComponent = ({ shape }) => {
1061
- return /* @__PURE__ */ import_react7.default.createElement(FunctionBody, {
1110
+ return /* @__PURE__ */ import_react8.default.createElement(FunctionBody, {
1062
1111
  shape,
1063
1112
  inputSchema: import_conductor7.ReducerInput,
1064
1113
  outputSchema: import_conductor7.ReducerOutput
@@ -1076,7 +1125,7 @@ var reducerShape = {
1076
1125
  type: "reducer",
1077
1126
  name: "Reducer",
1078
1127
  icon: "ph--repeat--regular",
1079
- component: (props) => /* @__PURE__ */ import_react7.default.createElement(ReducerComponent, props),
1128
+ component: (props) => /* @__PURE__ */ import_react8.default.createElement(ReducerComponent, props),
1080
1129
  createShape: createReducer,
1081
1130
  getAnchors: (shape) => createFunctionAnchors(shape, import_conductor7.ReducerInput, import_conductor7.ReducerOutput)
1082
1131
  };
@@ -1092,7 +1141,7 @@ var createAppend = (props) => createShape({
1092
1141
  ...props
1093
1142
  });
1094
1143
  var AppendComponent = ({ shape }) => {
1095
- return /* @__PURE__ */ import_react8.default.createElement(FunctionBody, {
1144
+ return /* @__PURE__ */ import_react9.default.createElement(FunctionBody, {
1096
1145
  shape,
1097
1146
  inputSchema: import_conductor8.AppendInput
1098
1147
  });
@@ -1118,15 +1167,15 @@ var createAudio = (props) => createShape({
1118
1167
  });
1119
1168
  var AudioComponent = ({ shape }) => {
1120
1169
  const { node } = useComputeNodeState(shape);
1121
- const [active, setActive] = (0, import_react9.useState)(false);
1122
- (0, import_react9.useEffect)(() => {
1170
+ const [active, setActive] = (0, import_react10.useState)(false);
1171
+ (0, import_react10.useEffect)(() => {
1123
1172
  node.value = active;
1124
1173
  }, [
1125
1174
  active
1126
1175
  ]);
1127
- return /* @__PURE__ */ import_react9.default.createElement("div", {
1176
+ return /* @__PURE__ */ import_react10.default.createElement("div", {
1128
1177
  className: "flex w-full justify-center items-center"
1129
- }, /* @__PURE__ */ import_react9.default.createElement(import_react_ui3.Icon, {
1178
+ }, /* @__PURE__ */ import_react10.default.createElement(import_react_ui3.Icon, {
1130
1179
  icon: active ? "ph--microphone--regular" : "ph--microphone-slash--regular",
1131
1180
  classNames: [
1132
1181
  "transition opacity-20 duration-1000",
@@ -1164,9 +1213,9 @@ var BeaconComponent = ({ shape }) => {
1164
1213
  const { runtime } = useComputeNodeState(shape);
1165
1214
  const input = runtime.inputs[import_conductor9.DEFAULT_INPUT];
1166
1215
  const value = input?.type === "executed" ? input.value : false;
1167
- return /* @__PURE__ */ import_react10.default.createElement("div", {
1216
+ return /* @__PURE__ */ import_react11.default.createElement("div", {
1168
1217
  className: "flex w-full justify-center items-center"
1169
- }, /* @__PURE__ */ import_react10.default.createElement(import_react_ui4.Icon, {
1218
+ }, /* @__PURE__ */ import_react11.default.createElement(import_react_ui4.Icon, {
1170
1219
  icon: "ph--sun--regular",
1171
1220
  classNames: (0, import_react_ui_theme2.mx)("transition opacity-20 duration-1000", (0, import_conductor9.isTruthy)(value) && "opacity-100 text-yellow-500"),
1172
1221
  size: 8
@@ -1196,9 +1245,9 @@ var createGate = (props) => createShape({
1196
1245
  ...props
1197
1246
  });
1198
1247
  var GateComponent = (Symbol22) => () => {
1199
- return /* @__PURE__ */ import_react11.default.createElement("div", {
1248
+ return /* @__PURE__ */ import_react12.default.createElement("div", {
1200
1249
  className: "flex w-full justify-center items-center"
1201
- }, /* @__PURE__ */ import_react11.default.createElement(Symbol22, null));
1250
+ }, /* @__PURE__ */ import_react12.default.createElement(Symbol22, null));
1202
1251
  };
1203
1252
  var defineShape = ({ type, name, icon, Symbol: Symbol22, createShape: createShape2, inputs, outputs = [
1204
1253
  createAnchorId("output")
@@ -1229,13 +1278,13 @@ var Symbol2 = (pathConstructor, inputs) => ({
1229
1278
  endX,
1230
1279
  height
1231
1280
  });
1232
- return /* @__PURE__ */ import_react11.default.createElement("svg", {
1281
+ return /* @__PURE__ */ import_react12.default.createElement("svg", {
1233
1282
  viewBox: `0 0 ${width} ${height}`,
1234
1283
  className: "w-full h-full"
1235
1284
  }, (0, import_react_ui_canvas_editor7.getAnchorPoints)({
1236
1285
  x: 0,
1237
1286
  y: centerY
1238
- }, inputs).map(({ x, y }, i) => /* @__PURE__ */ import_react11.default.createElement("line", {
1287
+ }, inputs).map(({ x, y }, i) => /* @__PURE__ */ import_react12.default.createElement("line", {
1239
1288
  key: i,
1240
1289
  x1: x,
1241
1290
  y1: y,
@@ -1243,14 +1292,14 @@ var Symbol2 = (pathConstructor, inputs) => ({
1243
1292
  y2: y,
1244
1293
  strokeWidth,
1245
1294
  className
1246
- })), /* @__PURE__ */ import_react11.default.createElement("line", {
1295
+ })), /* @__PURE__ */ import_react12.default.createElement("line", {
1247
1296
  x1: endX,
1248
1297
  y1: centerY,
1249
1298
  x2: width,
1250
1299
  y2: centerY,
1251
1300
  strokeWidth,
1252
1301
  className
1253
- }), paths.map((path, i) => /* @__PURE__ */ import_react11.default.createElement("path", {
1302
+ }), paths.map((path, i) => /* @__PURE__ */ import_react12.default.createElement("path", {
1254
1303
  key: i,
1255
1304
  d: path,
1256
1305
  strokeWidth,
@@ -1356,7 +1405,7 @@ var ChatShape = import_echo_schema11.S.extend(ComputeShape, import_echo_schema11
1356
1405
  }));
1357
1406
  var TextInputComponent = ({ shape, title, ...props }) => {
1358
1407
  const { runtime } = useComputeNodeState(shape);
1359
- const inputRef = (0, import_react12.useRef)(null);
1408
+ const inputRef = (0, import_react13.useRef)(null);
1360
1409
  const handleEnter = (text) => {
1361
1410
  const value = text.trim();
1362
1411
  if (value.length) {
@@ -1364,10 +1413,10 @@ var TextInputComponent = ({ shape, title, ...props }) => {
1364
1413
  inputRef.current?.setText("");
1365
1414
  }
1366
1415
  };
1367
- return /* @__PURE__ */ import_react12.default.createElement(Box, {
1416
+ return /* @__PURE__ */ import_react13.default.createElement(Box, {
1368
1417
  shape,
1369
1418
  title
1370
- }, /* @__PURE__ */ import_react12.default.createElement(import_react_ui_canvas_editor8.TextBox, {
1419
+ }, /* @__PURE__ */ import_react13.default.createElement(import_react_ui_canvas_editor8.TextBox, {
1371
1420
  ref: inputRef,
1372
1421
  onEnter: handleEnter,
1373
1422
  ...props
@@ -1385,7 +1434,7 @@ var chatShape = {
1385
1434
  type: "chat",
1386
1435
  name: "Chat",
1387
1436
  icon: "ph--textbox--regular",
1388
- component: (props) => /* @__PURE__ */ import_react12.default.createElement(TextInputComponent, {
1437
+ component: (props) => /* @__PURE__ */ import_react13.default.createElement(TextInputComponent, {
1389
1438
  ...props,
1390
1439
  title: "Prompt",
1391
1440
  placeholder: "Message"
@@ -1416,9 +1465,9 @@ var inferType = (value) => {
1416
1465
  };
1417
1466
  var ConstantComponent = ({ shape, title, chat, ...props }) => {
1418
1467
  const { node } = useComputeNodeState(shape);
1419
- const [type, setType] = (0, import_react13.useState)(inferType(node.value) ?? import_conductor11.ComputeValueType.literals[0]);
1420
- const inputRef = (0, import_react13.useRef)(null);
1421
- const handleEnter = (0, import_react13.useCallback)((text) => {
1468
+ const [type, setType] = (0, import_react14.useState)(inferType(node.value) ?? import_conductor11.ComputeValueType.literals[0]);
1469
+ const inputRef = (0, import_react14.useRef)(null);
1470
+ const handleEnter = (0, import_react14.useCallback)((text) => {
1422
1471
  const value = text.trim();
1423
1472
  if (value.length) {
1424
1473
  if (type === "number") {
@@ -1436,26 +1485,26 @@ var ConstantComponent = ({ shape, title, chat, ...props }) => {
1436
1485
  }, [
1437
1486
  type
1438
1487
  ]);
1439
- return /* @__PURE__ */ import_react13.default.createElement(Box, {
1488
+ return /* @__PURE__ */ import_react14.default.createElement(Box, {
1440
1489
  shape,
1441
1490
  title,
1442
- status: /* @__PURE__ */ import_react13.default.createElement(TypeSelect, {
1491
+ status: /* @__PURE__ */ import_react14.default.createElement(TypeSelect, {
1443
1492
  value: type,
1444
1493
  onValueChange: setType
1445
1494
  })
1446
- }, (type === "string" || type === "number") && /* @__PURE__ */ import_react13.default.createElement(import_react_ui_canvas_editor10.TextBox, {
1495
+ }, (type === "string" || type === "number") && /* @__PURE__ */ import_react14.default.createElement(import_react_ui_canvas_editor10.TextBox, {
1447
1496
  ...props,
1448
1497
  ref: inputRef,
1449
1498
  value: node.value,
1450
1499
  onEnter: handleEnter
1451
- }), type === "object" && /* @__PURE__ */ import_react13.default.createElement(import_react_ui_canvas_editor10.TextBox, {
1500
+ }), type === "object" && /* @__PURE__ */ import_react14.default.createElement(import_react_ui_canvas_editor10.TextBox, {
1452
1501
  ...props,
1453
1502
  ref: inputRef,
1454
1503
  value: JSON.stringify(node.value, null, 2),
1455
1504
  language: "json"
1456
- }), type === "boolean" && /* @__PURE__ */ import_react13.default.createElement("div", {
1505
+ }), type === "boolean" && /* @__PURE__ */ import_react14.default.createElement("div", {
1457
1506
  className: "flex grow justify-center items-center"
1458
- }, /* @__PURE__ */ import_react13.default.createElement(import_react_ui5.Input.Root, null, /* @__PURE__ */ import_react13.default.createElement(import_react_ui5.Input.Switch, {
1507
+ }, /* @__PURE__ */ import_react14.default.createElement(import_react_ui5.Input.Root, null, /* @__PURE__ */ import_react14.default.createElement(import_react_ui5.Input.Switch, {
1459
1508
  checked: node.value,
1460
1509
  onCheckedChange: (value) => {
1461
1510
  node.value = value;
@@ -1474,7 +1523,7 @@ var constantShape = {
1474
1523
  type: "constant",
1475
1524
  name: "Value",
1476
1525
  icon: "ph--dots-three-circle--regular",
1477
- component: (props) => /* @__PURE__ */ import_react13.default.createElement(ConstantComponent, {
1526
+ component: (props) => /* @__PURE__ */ import_react14.default.createElement(ConstantComponent, {
1478
1527
  ...props,
1479
1528
  placeholder: "Constant"
1480
1529
  }),
@@ -1499,7 +1548,7 @@ var createDatabase = (props) => createShape({
1499
1548
  ...props
1500
1549
  });
1501
1550
  var DatabaseComponent = ({ shape }) => {
1502
- return /* @__PURE__ */ import_react14.default.createElement(Box, {
1551
+ return /* @__PURE__ */ import_react15.default.createElement(Box, {
1503
1552
  shape
1504
1553
  });
1505
1554
  };
@@ -1530,8 +1579,8 @@ var createFunction = (props) => createShape({
1530
1579
  var TextInputComponent2 = ({ shape, title, ...props }) => {
1531
1580
  const client = (0, import_react_client.useClient)();
1532
1581
  const { node, runtime } = useComputeNodeState(shape);
1533
- const inputRef = (0, import_react15.useRef)(null);
1534
- const handleEnter = (0, import_react15.useCallback)(async (text) => {
1582
+ const inputRef = (0, import_react16.useRef)(null);
1583
+ const handleEnter = (0, import_react16.useCallback)(async (text) => {
1535
1584
  const value = text.trim();
1536
1585
  const { spaceId, objectId } = (0, import_echo2.parseId)(value);
1537
1586
  if (!spaceId || !objectId) {
@@ -1556,7 +1605,7 @@ var TextInputComponent2 = ({ shape, title, ...props }) => {
1556
1605
  client,
1557
1606
  node
1558
1607
  ]);
1559
- const handleAction = (0, import_react15.useCallback)((action) => {
1608
+ const handleAction = (0, import_react16.useCallback)((action) => {
1560
1609
  if (action !== "run") {
1561
1610
  return;
1562
1611
  }
@@ -1564,11 +1613,11 @@ var TextInputComponent2 = ({ shape, title, ...props }) => {
1564
1613
  }, [
1565
1614
  runtime
1566
1615
  ]);
1567
- return /* @__PURE__ */ import_react15.default.createElement(Box, {
1616
+ return /* @__PURE__ */ import_react16.default.createElement(Box, {
1568
1617
  shape,
1569
1618
  title: "Function",
1570
1619
  onAction: handleAction
1571
- }, /* @__PURE__ */ import_react15.default.createElement(import_react_ui_canvas_editor13.TextBox, {
1620
+ }, /* @__PURE__ */ import_react16.default.createElement(import_react_ui_canvas_editor13.TextBox, {
1572
1621
  ...props,
1573
1622
  ref: inputRef,
1574
1623
  value: node.value,
@@ -1598,9 +1647,9 @@ var createGpt = (props) => createShape({
1598
1647
  });
1599
1648
  var GptComponent = ({ shape }) => {
1600
1649
  const { meta, runtime } = useComputeNodeState(shape);
1601
- const [text, setText] = (0, import_react16.useState)("");
1602
- const [tokens, setTokens] = (0, import_react16.useState)(0);
1603
- (0, import_react16.useEffect)(() => {
1650
+ const [text, setText] = (0, import_react17.useState)("");
1651
+ const [tokens, setTokens] = (0, import_react17.useState)(0);
1652
+ (0, import_react17.useEffect)(() => {
1604
1653
  return runtime.subscribeToEventLog((ev) => {
1605
1654
  switch (ev.type) {
1606
1655
  case "begin-compute": {
@@ -1631,9 +1680,9 @@ var GptComponent = ({ shape }) => {
1631
1680
  }, [
1632
1681
  runtime?.subscribeToEventLog
1633
1682
  ]);
1634
- return /* @__PURE__ */ import_react16.default.createElement(FunctionBody, {
1683
+ return /* @__PURE__ */ import_react17.default.createElement(FunctionBody, {
1635
1684
  shape,
1636
- content: /* @__PURE__ */ import_react16.default.createElement("div", {
1685
+ content: /* @__PURE__ */ import_react17.default.createElement("div", {
1637
1686
  className: "px-2 py-1 overflow-y-scroll"
1638
1687
  }, text),
1639
1688
  status: `${tokens} tokens`,
@@ -1660,15 +1709,15 @@ var JsonComponent = ({ shape, ...props }) => {
1660
1709
  const { runtime } = useComputeNodeState(shape);
1661
1710
  const input = runtime.inputs[import_conductor14.DEFAULT_INPUT];
1662
1711
  const value = input?.type === "executed" ? input.value : void 0;
1663
- return /* @__PURE__ */ import_react17.default.createElement(Box, {
1712
+ return /* @__PURE__ */ import_react18.default.createElement(Box, {
1664
1713
  shape
1665
- }, /* @__PURE__ */ import_react17.default.createElement(import_react_ui_syntax_highlighter.JsonFilter, {
1714
+ }, /* @__PURE__ */ import_react18.default.createElement(import_react_ui_syntax_highlighter.JsonFilter, {
1666
1715
  data: value,
1667
1716
  classNames: "text-xs"
1668
1717
  }));
1669
1718
  };
1670
1719
  var JsonTransformComponent = ({ shape, ...props }) => {
1671
- return /* @__PURE__ */ import_react17.default.createElement(Box, {
1720
+ return /* @__PURE__ */ import_react18.default.createElement(Box, {
1672
1721
  shape
1673
1722
  });
1674
1723
  };
@@ -1684,7 +1733,7 @@ var jsonShape = {
1684
1733
  type: "json",
1685
1734
  name: "JSON",
1686
1735
  icon: "ph--code--regular",
1687
- component: (props) => /* @__PURE__ */ import_react17.default.createElement(JsonComponent, props),
1736
+ component: (props) => /* @__PURE__ */ import_react18.default.createElement(JsonComponent, props),
1688
1737
  createShape: createJson,
1689
1738
  getAnchors: (shape) => (0, import_react_ui_canvas_editor14.createAnchorMap)(shape, {
1690
1739
  [createAnchorId("input")]: {
@@ -1710,7 +1759,7 @@ var jsonTransformShape = {
1710
1759
  type: "json-transform",
1711
1760
  name: "Transform",
1712
1761
  icon: "ph--shuffle-simple--regular",
1713
- component: (props) => /* @__PURE__ */ import_react17.default.createElement(JsonTransformComponent, props),
1762
+ component: (props) => /* @__PURE__ */ import_react18.default.createElement(JsonTransformComponent, props),
1714
1763
  createShape: createJsonTransform,
1715
1764
  getAnchors: (shape) => createFunctionAnchors(shape, import_conductor14.JsonTransformInput, import_conductor14.DefaultOutput),
1716
1765
  resizable: true
@@ -1722,14 +1771,14 @@ var IfElseShape = import_echo_schema17.S.extend(ComputeShape, import_echo_schema
1722
1771
  type: import_echo_schema17.S.Literal("if-else")
1723
1772
  }));
1724
1773
  var IfComponent = ({ shape, ...props }) => {
1725
- return /* @__PURE__ */ import_react18.default.createElement(FunctionBody, {
1774
+ return /* @__PURE__ */ import_react19.default.createElement(FunctionBody, {
1726
1775
  shape,
1727
1776
  inputSchema: import_conductor15.IfInput,
1728
1777
  outputSchema: import_conductor15.IfOutput
1729
1778
  });
1730
1779
  };
1731
1780
  var IfElseComponent = ({ shape, ...props }) => {
1732
- return /* @__PURE__ */ import_react18.default.createElement(FunctionBody, {
1781
+ return /* @__PURE__ */ import_react19.default.createElement(FunctionBody, {
1733
1782
  shape,
1734
1783
  inputSchema: import_conductor15.IfElseInput,
1735
1784
  outputSchema: import_conductor15.IfElseOutput
@@ -1747,7 +1796,7 @@ var ifShape = {
1747
1796
  type: "if",
1748
1797
  name: "IF",
1749
1798
  icon: "ph--arrows-split--regular",
1750
- component: (props) => /* @__PURE__ */ import_react18.default.createElement(IfComponent, props),
1799
+ component: (props) => /* @__PURE__ */ import_react19.default.createElement(IfComponent, props),
1751
1800
  createShape: createIf,
1752
1801
  getAnchors: (shape) => createFunctionAnchors(shape, import_conductor15.IfInput, import_conductor15.IfOutput)
1753
1802
  };
@@ -1763,7 +1812,7 @@ var ifElseShape = {
1763
1812
  type: "if-else",
1764
1813
  name: "IF/ELSE",
1765
1814
  icon: "ph--arrows-merge--regular",
1766
- component: (props) => /* @__PURE__ */ import_react18.default.createElement(IfElseComponent, props),
1815
+ component: (props) => /* @__PURE__ */ import_react19.default.createElement(IfElseComponent, props),
1767
1816
  createShape: createIfElse,
1768
1817
  getAnchors: (shape) => createFunctionAnchors(shape, import_conductor15.IfElseInput, import_conductor15.IfElseOutput)
1769
1818
  };
@@ -1786,15 +1835,15 @@ var QueueComponent = ({ shape }) => {
1786
1835
  runtime.evalNode();
1787
1836
  }
1788
1837
  };
1789
- return /* @__PURE__ */ import_react19.default.createElement(Box, {
1838
+ return /* @__PURE__ */ import_react20.default.createElement(Box, {
1790
1839
  shape,
1791
1840
  status: `${items.length} items`,
1792
1841
  onAction: handleAction
1793
- }, /* @__PURE__ */ import_react19.default.createElement("div", {
1842
+ }, /* @__PURE__ */ import_react20.default.createElement("div", {
1794
1843
  className: "flex flex-col w-full overflow-y-scroll divide-y divide-separator"
1795
1844
  }, [
1796
1845
  ...items
1797
- ].map((item, i) => /* @__PURE__ */ import_react19.default.createElement(QueueItem, {
1846
+ ].map((item, i) => /* @__PURE__ */ import_react20.default.createElement(QueueItem, {
1798
1847
  key: i,
1799
1848
  classNames: "p-1 px-2",
1800
1849
  item
@@ -1802,17 +1851,17 @@ var QueueComponent = ({ shape }) => {
1802
1851
  };
1803
1852
  var QueueItem = ({ classNames, item }) => {
1804
1853
  if (typeof item !== "object") {
1805
- return /* @__PURE__ */ import_react19.default.createElement("div", {
1854
+ return /* @__PURE__ */ import_react20.default.createElement("div", {
1806
1855
  className: (0, import_react_ui_theme3.mx)(classNames, "whitespace-pre-wrap")
1807
1856
  }, item);
1808
1857
  }
1809
- return /* @__PURE__ */ import_react19.default.createElement("div", {
1858
+ return /* @__PURE__ */ import_react20.default.createElement("div", {
1810
1859
  className: (0, import_react_ui_theme3.mx)("grid grid-cols-[80px,1fr]", classNames)
1811
- }, Object.entries(item).map(([key, value]) => /* @__PURE__ */ import_react19.default.createElement(import_react19.Fragment, {
1860
+ }, Object.entries(item).map(([key, value]) => /* @__PURE__ */ import_react20.default.createElement(import_react20.Fragment, {
1812
1861
  key
1813
- }, /* @__PURE__ */ import_react19.default.createElement("div", {
1862
+ }, /* @__PURE__ */ import_react20.default.createElement("div", {
1814
1863
  className: "p-1 text-xs text-subdued"
1815
- }, key), /* @__PURE__ */ import_react19.default.createElement("div", null, typeof value === "string" ? value : JSON.stringify(value)))));
1864
+ }, key), /* @__PURE__ */ import_react20.default.createElement("div", null, typeof value === "string" ? value : JSON.stringify(value)))));
1816
1865
  };
1817
1866
  var queueShape = {
1818
1867
  type: "queue",
@@ -1847,9 +1896,9 @@ var icons = [
1847
1896
  var pickIcon = () => icons[Math.floor(Math.random() * icons.length)];
1848
1897
  var RandomComponent = ({ shape }) => {
1849
1898
  const { runtime } = useComputeNodeState(shape);
1850
- const [spin, setSpin] = (0, import_react20.useState)(false);
1851
- const [icon, setIcon] = (0, import_react20.useState)(pickIcon());
1852
- (0, import_react20.useEffect)(() => {
1899
+ const [spin, setSpin] = (0, import_react21.useState)(false);
1900
+ const [icon, setIcon] = (0, import_react21.useState)(pickIcon());
1901
+ (0, import_react21.useEffect)(() => {
1853
1902
  if (!spin) {
1854
1903
  return;
1855
1904
  }
@@ -1869,9 +1918,9 @@ var RandomComponent = ({ shape }) => {
1869
1918
  runtime.setOutput(import_conductor17.DEFAULT_OUTPUT, Math.random());
1870
1919
  setSpin(true);
1871
1920
  };
1872
- return /* @__PURE__ */ import_react20.default.createElement("div", {
1921
+ return /* @__PURE__ */ import_react21.default.createElement("div", {
1873
1922
  className: "flex grow items-center justify-center"
1874
- }, /* @__PURE__ */ import_react20.default.createElement(import_react_ui6.Icon, {
1923
+ }, /* @__PURE__ */ import_react21.default.createElement(import_react_ui6.Icon, {
1875
1924
  icon,
1876
1925
  classNames: (0, import_react_ui_theme4.mx)(spin && "animate-[spin_1s]"),
1877
1926
  size: 10,
@@ -1908,9 +1957,9 @@ var ScopeComponent = ({ shape }) => {
1908
1957
  const input = runtime.inputs[import_conductor18.DEFAULT_INPUT];
1909
1958
  const active = input?.type === "executed" ? input.value : false;
1910
1959
  const { getAverage } = (0, import_react_ui_sfx.useAudioStream)(active);
1911
- return /* @__PURE__ */ import_react21.default.createElement("div", {
1960
+ return /* @__PURE__ */ import_react22.default.createElement("div", {
1912
1961
  className: "flex w-full justify-center items-center bg-black"
1913
- }, /* @__PURE__ */ import_react21.default.createElement(import_react_ui_sfx.Chaos, {
1962
+ }, /* @__PURE__ */ import_react22.default.createElement(import_react_ui_sfx.Chaos, {
1914
1963
  active,
1915
1964
  getValue: getAverage,
1916
1965
  options: {
@@ -1952,10 +2001,10 @@ var SurfaceComponent = ({ shape }) => {
1952
2001
  runtime.evalNode();
1953
2002
  }
1954
2003
  };
1955
- return /* @__PURE__ */ import_react22.default.createElement(Box, {
2004
+ return /* @__PURE__ */ import_react23.default.createElement(Box, {
1956
2005
  shape,
1957
2006
  onAction: handleAction
1958
- }, value !== null && /* @__PURE__ */ import_react22.default.createElement(import_app_framework.Surface, {
2007
+ }, value !== null && /* @__PURE__ */ import_react23.default.createElement(import_app_framework.Surface, {
1959
2008
  role: "canvas-node",
1960
2009
  data: {
1961
2010
  value
@@ -1990,16 +2039,16 @@ var createSwitch = (props) => createShape({
1990
2039
  });
1991
2040
  var SwitchComponent = ({ shape }) => {
1992
2041
  const { runtime } = useComputeNodeState(shape);
1993
- const [value, setValue] = (0, import_react23.useState)(false);
1994
- (0, import_react23.useEffect)(() => {
2042
+ const [value, setValue] = (0, import_react24.useState)(false);
2043
+ (0, import_react24.useEffect)(() => {
1995
2044
  runtime.setOutput(import_conductor20.DEFAULT_OUTPUT, value);
1996
2045
  }, [
1997
2046
  value
1998
2047
  ]);
1999
- return /* @__PURE__ */ import_react23.default.createElement("div", {
2048
+ return /* @__PURE__ */ import_react24.default.createElement("div", {
2000
2049
  className: "flex w-full justify-center items-center",
2001
2050
  onClick: (ev) => ev.stopPropagation()
2002
- }, /* @__PURE__ */ import_react23.default.createElement(import_react_ui7.Input.Root, null, /* @__PURE__ */ import_react23.default.createElement(import_react_ui7.Input.Switch, {
2051
+ }, /* @__PURE__ */ import_react24.default.createElement(import_react_ui7.Input.Root, null, /* @__PURE__ */ import_react24.default.createElement(import_react_ui7.Input.Switch, {
2003
2052
  checked: value,
2004
2053
  onCheckedChange: (value2) => setValue(value2)
2005
2054
  })));
@@ -2031,7 +2080,7 @@ var createTable = (props) => createShape({
2031
2080
  ...props
2032
2081
  });
2033
2082
  var TableComponent = ({ shape }) => {
2034
- return /* @__PURE__ */ import_react24.default.createElement(Box, {
2083
+ return /* @__PURE__ */ import_react25.default.createElement(Box, {
2035
2084
  shape
2036
2085
  });
2037
2086
  };
@@ -2051,7 +2100,7 @@ var TemplateShape = import_echo_schema24.S.extend(ComputeShape, import_echo_sche
2051
2100
  }));
2052
2101
  var TextInputComponent3 = ({ shape, title, ...props }) => {
2053
2102
  const { node } = useComputeNodeState(shape);
2054
- const inputRef = (0, import_react25.useRef)(null);
2103
+ const inputRef = (0, import_react26.useRef)(null);
2055
2104
  const handleEnter = (text) => {
2056
2105
  const value = text.trim();
2057
2106
  if (value.length) {
@@ -2073,14 +2122,14 @@ var TextInputComponent3 = ({ shape, title, ...props }) => {
2073
2122
  node.valueType = newType;
2074
2123
  node.inputSchema = (0, import_echo_schema24.toJsonSchema)((0, import_conductor22.getTemplateInputSchema)(node));
2075
2124
  };
2076
- return /* @__PURE__ */ import_react25.default.createElement(Box, {
2125
+ return /* @__PURE__ */ import_react26.default.createElement(Box, {
2077
2126
  shape,
2078
2127
  title: "Template",
2079
- status: /* @__PURE__ */ import_react25.default.createElement(TypeSelect, {
2128
+ status: /* @__PURE__ */ import_react26.default.createElement(TypeSelect, {
2080
2129
  value: node.valueType ?? "string",
2081
2130
  onValueChange: handleTypeChange
2082
2131
  })
2083
- }, /* @__PURE__ */ import_react25.default.createElement(import_react_ui_canvas_editor19.TextBox, {
2132
+ }, /* @__PURE__ */ import_react26.default.createElement(import_react_ui_canvas_editor19.TextBox, {
2084
2133
  ...props,
2085
2134
  ref: inputRef,
2086
2135
  value: node.value,
@@ -2101,7 +2150,7 @@ var templateShape = {
2101
2150
  type: "template",
2102
2151
  name: "Template",
2103
2152
  icon: "ph--article--regular",
2104
- component: (props) => /* @__PURE__ */ import_react25.default.createElement(TextInputComponent3, {
2153
+ component: (props) => /* @__PURE__ */ import_react26.default.createElement(TextInputComponent3, {
2105
2154
  ...props,
2106
2155
  placeholder: "Prompt"
2107
2156
  }),
@@ -2129,10 +2178,10 @@ var TextComponent = ({ shape }) => {
2129
2178
  runtime.evalNode();
2130
2179
  }
2131
2180
  };
2132
- return /* @__PURE__ */ import_react26.default.createElement(Box, {
2181
+ return /* @__PURE__ */ import_react27.default.createElement(Box, {
2133
2182
  shape,
2134
2183
  onAction: handleAction
2135
- }, /* @__PURE__ */ import_react26.default.createElement(import_react_ui_canvas_editor20.TextBox, {
2184
+ }, /* @__PURE__ */ import_react27.default.createElement(import_react_ui_canvas_editor20.TextBox, {
2136
2185
  value
2137
2186
  }));
2138
2187
  };
@@ -2165,36 +2214,36 @@ var createThread = (props) => createShape({
2165
2214
  });
2166
2215
  var ThreadComponent = ({ shape }) => {
2167
2216
  const items = [];
2168
- const scrollRef = (0, import_react27.useRef)(null);
2169
- (0, import_react27.useEffect)(() => {
2217
+ const scrollRef = (0, import_react28.useRef)(null);
2218
+ (0, import_react28.useEffect)(() => {
2170
2219
  if (scrollRef.current) {
2171
2220
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
2172
2221
  }
2173
2222
  }, [
2174
2223
  items
2175
2224
  ]);
2176
- return /* @__PURE__ */ import_react27.default.createElement(Box, {
2225
+ return /* @__PURE__ */ import_react28.default.createElement(Box, {
2177
2226
  shape
2178
- }, /* @__PURE__ */ import_react27.default.createElement("div", {
2227
+ }, /* @__PURE__ */ import_react28.default.createElement("div", {
2179
2228
  ref: scrollRef,
2180
2229
  className: "flex flex-col w-full overflow-y-scroll gap-2 p-2"
2181
2230
  }, [
2182
2231
  ...items
2183
- ].map((item, i) => /* @__PURE__ */ import_react27.default.createElement(ThreadItem, {
2232
+ ].map((item, i) => /* @__PURE__ */ import_react28.default.createElement(ThreadItem, {
2184
2233
  key: i,
2185
2234
  item
2186
2235
  }))));
2187
2236
  };
2188
2237
  var ThreadItem = ({ classNames, item }) => {
2189
2238
  if (typeof item !== "object") {
2190
- return /* @__PURE__ */ import_react27.default.createElement("div", {
2239
+ return /* @__PURE__ */ import_react28.default.createElement("div", {
2191
2240
  className: (0, import_react_ui_theme5.mx)(classNames)
2192
2241
  }, item);
2193
2242
  }
2194
2243
  const { role, message } = item;
2195
- return /* @__PURE__ */ import_react27.default.createElement("div", {
2244
+ return /* @__PURE__ */ import_react28.default.createElement("div", {
2196
2245
  className: (0, import_react_ui_theme5.mx)("flex", classNames, role === "user" && "justify-end")
2197
- }, /* @__PURE__ */ import_react27.default.createElement("div", {
2246
+ }, /* @__PURE__ */ import_react28.default.createElement("div", {
2198
2247
  className: (0, import_react_ui_theme5.mx)("block rounded-md p-1 px-2 text-sm", role === "user" ? "bg-blue-100 dark:bg-blue-800" : role === "system" ? "bg-red-100, dark:bg-red-800" : "whitespace-pre-wrap bg-neutral-50 dark:bg-neutral-800")
2199
2248
  }, message));
2200
2249
  };
@@ -2219,7 +2268,7 @@ var createTextToImage = (props) => createShape({
2219
2268
  ...props
2220
2269
  });
2221
2270
  var TextToImageComponent = ({ shape }) => {
2222
- return /* @__PURE__ */ import_react28.default.createElement(Box, {
2271
+ return /* @__PURE__ */ import_react29.default.createElement(Box, {
2223
2272
  shape
2224
2273
  });
2225
2274
  };
@@ -2258,7 +2307,7 @@ var createTrigger = (props) => {
2258
2307
  var TriggerComponent = ({ shape }) => {
2259
2308
  const space = (0, import_echo3.useSpace)();
2260
2309
  const functionTrigger = shape.functionTrigger?.target;
2261
- (0, import_react29.useEffect)(() => {
2310
+ (0, import_react30.useEffect)(() => {
2262
2311
  if (functionTrigger && !functionTrigger.spec) {
2263
2312
  functionTrigger.spec = createTriggerSpec({
2264
2313
  triggerKind: import_functions2.TriggerKind.Email,
@@ -2269,7 +2318,7 @@ var TriggerComponent = ({ shape }) => {
2269
2318
  functionTrigger,
2270
2319
  functionTrigger?.spec
2271
2320
  ]);
2272
- (0, import_react29.useEffect)(() => {
2321
+ (0, import_react30.useEffect)(() => {
2273
2322
  shape.size.height = getHeight(getOutputSchema(functionTrigger?.spec?.type ?? import_functions2.TriggerKind.Email));
2274
2323
  }, [
2275
2324
  functionTrigger?.spec?.type
@@ -2285,9 +2334,9 @@ var TriggerComponent = ({ shape }) => {
2285
2334
  if (!functionTrigger?.spec) {
2286
2335
  return;
2287
2336
  }
2288
- return /* @__PURE__ */ import_react29.default.createElement(FunctionBody, {
2337
+ return /* @__PURE__ */ import_react30.default.createElement(FunctionBody, {
2289
2338
  shape,
2290
- status: /* @__PURE__ */ import_react29.default.createElement(TriggerKindSelect, {
2339
+ status: /* @__PURE__ */ import_react30.default.createElement(TriggerKindSelect, {
2291
2340
  value: functionTrigger.spec?.type,
2292
2341
  onValueChange: (kind) => setKind(kind)
2293
2342
  }),
@@ -2296,16 +2345,16 @@ var TriggerComponent = ({ shape }) => {
2296
2345
  });
2297
2346
  };
2298
2347
  var TriggerKindSelect = ({ value, onValueChange }) => {
2299
- return /* @__PURE__ */ import_react29.default.createElement(import_react_ui8.Select.Root, {
2348
+ return /* @__PURE__ */ import_react30.default.createElement(import_react_ui8.Select.Root, {
2300
2349
  value,
2301
2350
  onValueChange
2302
- }, /* @__PURE__ */ import_react29.default.createElement(import_react_ui8.Select.TriggerButton, {
2351
+ }, /* @__PURE__ */ import_react30.default.createElement(import_react_ui8.Select.TriggerButton, {
2303
2352
  variant: "ghost",
2304
2353
  classNames: "w-full !px-0"
2305
- }), /* @__PURE__ */ import_react29.default.createElement(import_react_ui8.Select.Portal, null, /* @__PURE__ */ import_react29.default.createElement(import_react_ui8.Select.Content, null, /* @__PURE__ */ import_react29.default.createElement(import_react_ui8.Select.ScrollUpButton, null), /* @__PURE__ */ import_react29.default.createElement(import_react_ui8.Select.Viewport, null, Object.values(import_functions2.TriggerKind).map((type) => /* @__PURE__ */ import_react29.default.createElement(import_react_ui8.Select.Option, {
2354
+ }), /* @__PURE__ */ import_react30.default.createElement(import_react_ui8.Select.Portal, null, /* @__PURE__ */ import_react30.default.createElement(import_react_ui8.Select.Content, null, /* @__PURE__ */ import_react30.default.createElement(import_react_ui8.Select.ScrollUpButton, null), /* @__PURE__ */ import_react30.default.createElement(import_react_ui8.Select.Viewport, null, Object.values(import_functions2.TriggerKind).map((type) => /* @__PURE__ */ import_react30.default.createElement(import_react_ui8.Select.Option, {
2306
2355
  key: type,
2307
2356
  value: type
2308
- }, type))), /* @__PURE__ */ import_react29.default.createElement(import_react_ui8.Select.ScrollDownButton, null), /* @__PURE__ */ import_react29.default.createElement(import_react_ui8.Select.Arrow, null))));
2357
+ }, type))), /* @__PURE__ */ import_react30.default.createElement(import_react_ui8.Select.ScrollDownButton, null), /* @__PURE__ */ import_react30.default.createElement(import_react_ui8.Select.Arrow, null))));
2309
2358
  };
2310
2359
  var createTriggerSpec = (props) => {
2311
2360
  const kind = props.triggerKind ?? import_functions2.TriggerKind.Email;
@@ -2373,8 +2422,8 @@ var createGptRealtime = (props) => createShape({
2373
2422
  ...props
2374
2423
  });
2375
2424
  var GptRealtimeComponent = ({ shape }) => {
2376
- const [isLive, setIsLive] = (0, import_react30.useState)(false);
2377
- const [isReady, setIsReady] = (0, import_react30.useState)(false);
2425
+ const [isLive, setIsLive] = (0, import_react31.useState)(false);
2426
+ const [isReady, setIsReady] = (0, import_react31.useState)(false);
2378
2427
  const config = (0, import_react_client2.useConfig)();
2379
2428
  const start = async () => {
2380
2429
  setIsLive(true);
@@ -2459,9 +2508,9 @@ var GptRealtimeComponent = ({ shape }) => {
2459
2508
  throw error;
2460
2509
  }
2461
2510
  };
2462
- return /* @__PURE__ */ import_react30.default.createElement("div", {
2511
+ return /* @__PURE__ */ import_react31.default.createElement("div", {
2463
2512
  className: "flex w-full justify-center items-center"
2464
- }, /* @__PURE__ */ import_react30.default.createElement(import_react_ui9.Icon, {
2513
+ }, /* @__PURE__ */ import_react31.default.createElement(import_react_ui9.Icon, {
2465
2514
  icon: isReady ? "ph--waveform--regular" : isLive ? "ph--pulse--regular" : "ph--play--regular",
2466
2515
  size: 16,
2467
2516
  classNames: !isLive && "cursor-pointer",
@@ -2696,6 +2745,7 @@ var ComputeShapeLayout = class extends import_react_ui_canvas_editor23.ShapeLayo
2696
2745
  threadShape,
2697
2746
  triggerShape,
2698
2747
  useComputeContext,
2748
+ useComputeGraphController,
2699
2749
  useComputeNodeState,
2700
2750
  useGraphMonitor
2701
2751
  });