@dxos/react-ui-canvas-compute 0.8.4-main.1da679c → 0.8.4-main.21d9917

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 (112) hide show
  1. package/dist/lib/browser/index.mjs +779 -966
  2. package/dist/lib/browser/index.mjs.map +3 -3
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +779 -966
  5. package/dist/lib/node-esm/index.mjs.map +3 -3
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/compute.stories.d.ts +25 -2
  8. package/dist/types/src/compute.stories.d.ts.map +1 -1
  9. package/dist/types/src/graph/controller.d.ts +20 -33
  10. package/dist/types/src/graph/controller.d.ts.map +1 -1
  11. package/dist/types/src/hooks/useComputeGraphController.d.ts +1 -1
  12. package/dist/types/src/hooks/useComputeGraphController.d.ts.map +1 -1
  13. package/dist/types/src/hooks/useComputeNodeState.d.ts +2 -2
  14. package/dist/types/src/hooks/useComputeNodeState.d.ts.map +1 -1
  15. package/dist/types/src/hooks/useGraphMonitor.d.ts.map +1 -1
  16. package/dist/types/src/json.test.d.ts +1 -1
  17. package/dist/types/src/json.test.d.ts.map +1 -1
  18. package/dist/types/src/shapes/Append.d.ts +1 -1
  19. package/dist/types/src/shapes/Append.d.ts.map +1 -1
  20. package/dist/types/src/shapes/Array.d.ts +1 -1
  21. package/dist/types/src/shapes/Array.d.ts.map +1 -1
  22. package/dist/types/src/shapes/Audio.d.ts +1 -1
  23. package/dist/types/src/shapes/Audio.d.ts.map +1 -1
  24. package/dist/types/src/shapes/Beacon.d.ts +1 -1
  25. package/dist/types/src/shapes/Beacon.d.ts.map +1 -1
  26. package/dist/types/src/shapes/Boolean.d.ts +1 -1
  27. package/dist/types/src/shapes/Boolean.d.ts.map +1 -1
  28. package/dist/types/src/shapes/Chat.d.ts +1 -1
  29. package/dist/types/src/shapes/Chat.d.ts.map +1 -1
  30. package/dist/types/src/shapes/Constant.d.ts +2 -2
  31. package/dist/types/src/shapes/Constant.d.ts.map +1 -1
  32. package/dist/types/src/shapes/Database.d.ts +1 -1
  33. package/dist/types/src/shapes/Database.d.ts.map +1 -1
  34. package/dist/types/src/shapes/Function.d.ts +1 -1
  35. package/dist/types/src/shapes/Function.d.ts.map +1 -1
  36. package/dist/types/src/shapes/Gpt.d.ts +1 -1
  37. package/dist/types/src/shapes/Gpt.d.ts.map +1 -1
  38. package/dist/types/src/shapes/GptRealtime.d.ts +1 -1
  39. package/dist/types/src/shapes/GptRealtime.d.ts.map +1 -1
  40. package/dist/types/src/shapes/Json.d.ts +1 -1
  41. package/dist/types/src/shapes/Json.d.ts.map +1 -1
  42. package/dist/types/src/shapes/Logic.d.ts +1 -1
  43. package/dist/types/src/shapes/Logic.d.ts.map +1 -1
  44. package/dist/types/src/shapes/Queue.d.ts +1 -1
  45. package/dist/types/src/shapes/Queue.d.ts.map +1 -1
  46. package/dist/types/src/shapes/RNG.d.ts +1 -1
  47. package/dist/types/src/shapes/RNG.d.ts.map +1 -1
  48. package/dist/types/src/shapes/Scope.d.ts +1 -1
  49. package/dist/types/src/shapes/Scope.d.ts.map +1 -1
  50. package/dist/types/src/shapes/Surface.d.ts +1 -1
  51. package/dist/types/src/shapes/Surface.d.ts.map +1 -1
  52. package/dist/types/src/shapes/Switch.d.ts +1 -1
  53. package/dist/types/src/shapes/Switch.d.ts.map +1 -1
  54. package/dist/types/src/shapes/Table.d.ts +1 -1
  55. package/dist/types/src/shapes/Table.d.ts.map +1 -1
  56. package/dist/types/src/shapes/Template.d.ts +1 -1
  57. package/dist/types/src/shapes/Template.d.ts.map +1 -1
  58. package/dist/types/src/shapes/Text.d.ts +1 -1
  59. package/dist/types/src/shapes/Text.d.ts.map +1 -1
  60. package/dist/types/src/shapes/TextToImage.d.ts +1 -1
  61. package/dist/types/src/shapes/TextToImage.d.ts.map +1 -1
  62. package/dist/types/src/shapes/Thread.d.ts +1 -1
  63. package/dist/types/src/shapes/Thread.d.ts.map +1 -1
  64. package/dist/types/src/shapes/Trigger.d.ts +6 -5
  65. package/dist/types/src/shapes/Trigger.d.ts.map +1 -1
  66. package/dist/types/src/shapes/common/Box.d.ts +1 -1
  67. package/dist/types/src/shapes/common/FunctionBody.d.ts +1 -1
  68. package/dist/types/src/shapes/common/FunctionBody.d.ts.map +1 -1
  69. package/dist/types/src/shapes/defs.d.ts +2 -1
  70. package/dist/types/src/shapes/defs.d.ts.map +1 -1
  71. package/dist/types/src/testing/circuits.d.ts +18 -24
  72. package/dist/types/src/testing/circuits.d.ts.map +1 -1
  73. package/dist/types/tsconfig.tsbuildinfo +1 -1
  74. package/package.json +56 -52
  75. package/src/compute-layout.ts +1 -1
  76. package/src/compute.stories.tsx +71 -115
  77. package/src/graph/controller.ts +114 -73
  78. package/src/graph/node-defs.ts +3 -3
  79. package/src/hooks/useComputeGraphController.ts +1 -1
  80. package/src/hooks/useComputeNodeState.ts +5 -4
  81. package/src/hooks/useGraphMonitor.ts +9 -8
  82. package/src/json.test.ts +4 -4
  83. package/src/schema.test.ts +9 -9
  84. package/src/shapes/Append.tsx +1 -1
  85. package/src/shapes/Array.tsx +1 -1
  86. package/src/shapes/Audio.tsx +2 -2
  87. package/src/shapes/Beacon.tsx +2 -2
  88. package/src/shapes/Boolean.tsx +3 -3
  89. package/src/shapes/Chat.tsx +1 -1
  90. package/src/shapes/Constant.tsx +1 -1
  91. package/src/shapes/Database.tsx +1 -1
  92. package/src/shapes/Function.tsx +12 -10
  93. package/src/shapes/Gpt.tsx +2 -2
  94. package/src/shapes/GptRealtime.tsx +2 -2
  95. package/src/shapes/Json.tsx +1 -1
  96. package/src/shapes/Logic.tsx +1 -1
  97. package/src/shapes/Queue.tsx +9 -5
  98. package/src/shapes/RNG.tsx +6 -2
  99. package/src/shapes/Scope.tsx +2 -2
  100. package/src/shapes/Surface.tsx +7 -3
  101. package/src/shapes/Switch.tsx +2 -2
  102. package/src/shapes/Table.tsx +4 -4
  103. package/src/shapes/Template.tsx +2 -2
  104. package/src/shapes/Text.tsx +1 -1
  105. package/src/shapes/TextToImage.tsx +1 -1
  106. package/src/shapes/Thread.tsx +7 -7
  107. package/src/shapes/Trigger.tsx +39 -44
  108. package/src/shapes/common/Box.tsx +6 -6
  109. package/src/shapes/common/FunctionBody.tsx +4 -3
  110. package/src/shapes/common/TypeSelect.tsx +1 -1
  111. package/src/shapes/defs.ts +5 -4
  112. package/src/testing/circuits.ts +5 -14
@@ -1,10 +1,16 @@
1
1
  import "@dxos/node-std/globals";
2
2
 
3
3
  // src/graph/controller.ts
4
- import { Effect, Either, Exit, Scope } from "effect";
4
+ import * as Effect from "effect/Effect";
5
+ import * as Either from "effect/Either";
6
+ import * as Exit from "effect/Exit";
7
+ import * as Layer from "effect/Layer";
8
+ import * as Scope from "effect/Scope";
5
9
  import { Event, synchronized } from "@dxos/async";
6
10
  import { GraphExecutor, ValueBag, isNotExecuted } from "@dxos/conductor";
7
11
  import { Resource } from "@dxos/context";
12
+ import { unwrapExit } from "@dxos/effect";
13
+ import { ComputeEventLogger, TracingService } from "@dxos/functions";
8
14
  import { log } from "@dxos/log";
9
15
 
10
16
  // src/hooks/compute-context.ts
@@ -66,7 +72,7 @@ var useComputeGraphController = ({ controller, graph, editorRef }) => {
66
72
  };
67
73
 
68
74
  // src/hooks/useComputeNodeState.ts
69
- import { Schema } from "effect";
75
+ import * as Schema from "effect/Schema";
70
76
  import { useCallback, useEffect as useEffect2, useState as useState2 } from "react";
71
77
  import { invariant } from "@dxos/invariant";
72
78
  var __dxlog_file = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/hooks/useComputeNodeState.ts";
@@ -142,9 +148,8 @@ var useComputeNodeState = (shape) => {
142
148
  // src/hooks/useGraphMonitor.ts
143
149
  import { useMemo } from "react";
144
150
  import { ComputeGraphModel, DEFAULT_INPUT, DEFAULT_OUTPUT } from "@dxos/conductor";
145
- import { ObjectId, Ref } from "@dxos/echo-schema";
151
+ import { Obj, Ref } from "@dxos/echo";
146
152
  import { invariant as invariant2 } from "@dxos/invariant";
147
- import { getSpace } from "@dxos/react-client/echo";
148
153
  import { isNonNullable } from "@dxos/util";
149
154
  var __dxlog_file2 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/hooks/useGraphMonitor.ts";
150
155
  var mapEdge = (graph, { source, target, output = DEFAULT_OUTPUT, input = DEFAULT_INPUT }) => {
@@ -152,7 +157,7 @@ var mapEdge = (graph, { source, target, output = DEFAULT_OUTPUT, input = DEFAULT
152
157
  const targetNode = graph.findNode(target);
153
158
  invariant2(sourceNode?.node, void 0, {
154
159
  F: __dxlog_file2,
155
- L: 26,
160
+ L: 25,
156
161
  S: void 0,
157
162
  A: [
158
163
  "sourceNode?.node",
@@ -161,7 +166,7 @@ var mapEdge = (graph, { source, target, output = DEFAULT_OUTPUT, input = DEFAULT
161
166
  });
162
167
  invariant2(targetNode?.node, void 0, {
163
168
  F: __dxlog_file2,
164
- L: 27,
169
+ L: 26,
165
170
  S: void 0,
166
171
  A: [
167
172
  "targetNode?.node",
@@ -169,7 +174,7 @@ var mapEdge = (graph, { source, target, output = DEFAULT_OUTPUT, input = DEFAULT
169
174
  ]
170
175
  });
171
176
  return {
172
- id: ObjectId.random(),
177
+ id: Obj.ID.random(),
173
178
  source: sourceNode.node,
174
179
  target: targetNode.node,
175
180
  output,
@@ -185,7 +190,7 @@ var useGraphMonitor = (model) => {
185
190
  }
186
191
  invariant2(node.type, void 0, {
187
192
  F: __dxlog_file2,
188
- L: 52,
193
+ L: 51,
189
194
  S: void 0,
190
195
  A: [
191
196
  "node.type",
@@ -243,25 +248,27 @@ var linkTriggerToCompute = (graph, computeNode, triggerData) => {
243
248
  const functionTrigger = triggerData.functionTrigger?.target;
244
249
  invariant2(functionTrigger, void 0, {
245
250
  F: __dxlog_file2,
246
- L: 115,
251
+ L: 114,
247
252
  S: void 0,
248
253
  A: [
249
254
  "functionTrigger",
250
255
  ""
251
256
  ]
252
257
  });
253
- functionTrigger.function = Ref.make(graph.root);
254
- functionTrigger.inputNodeId = computeNode.id;
258
+ Obj.change(functionTrigger, (t) => {
259
+ t.function = Ref.make(graph.root);
260
+ t.inputNodeId = computeNode.id;
261
+ });
255
262
  };
256
263
  var deleteTriggerObjects = (computeGraph, deleted) => {
257
- const space = getSpace(computeGraph.root);
258
- if (!space) {
264
+ const db = Obj.getDatabase(computeGraph.root);
265
+ if (!db) {
259
266
  return;
260
267
  }
261
268
  for (const node of deleted.nodes) {
262
269
  if (node.type === "trigger") {
263
270
  const trigger = node;
264
- space.db.remove(trigger.functionTrigger.target);
271
+ db.remove(trigger.functionTrigger.target);
265
272
  }
266
273
  }
267
274
  };
@@ -269,7 +276,7 @@ var deleteTriggerObjects = (computeGraph, deleted) => {
269
276
  // src/graph/node-defs.ts
270
277
  import { NODE_INPUT, NODE_OUTPUT, getTemplateInputSchema, registry } from "@dxos/conductor";
271
278
  import { raise as raise2 } from "@dxos/debug";
272
- import { ObjectId as ObjectId2, toJsonSchema } from "@dxos/echo-schema";
279
+ import { JsonSchema, Obj as Obj2 } from "@dxos/echo";
273
280
  import { invariant as invariant3 } from "@dxos/invariant";
274
281
  var __dxlog_file3 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/graph/node-defs.ts";
275
282
  var resolveComputeNode = async (node) => {
@@ -329,7 +336,7 @@ var nodeFactory = {
329
336
  valueType: shape.valueType,
330
337
  value: shape.text
331
338
  });
332
- node.inputSchema = toJsonSchema(getTemplateInputSchema(node));
339
+ node.inputSchema = JsonSchema.toJsonSchema(getTemplateInputSchema(node));
333
340
  return node;
334
341
  },
335
342
  ["text"]: () => createNode("text"),
@@ -337,25 +344,12 @@ var nodeFactory = {
337
344
  ["trigger"]: () => createNode(NODE_INPUT)
338
345
  };
339
346
  var createNode = (type, props) => ({
340
- id: ObjectId2.random(),
347
+ id: Obj2.ID.random(),
341
348
  type,
342
349
  ...props
343
350
  });
344
351
 
345
352
  // src/graph/controller.ts
346
- function _define_property(obj, key, value) {
347
- if (key in obj) {
348
- Object.defineProperty(obj, key, {
349
- value,
350
- enumerable: true,
351
- configurable: true,
352
- writable: true
353
- });
354
- } else {
355
- obj[key] = value;
356
- }
357
- return obj;
358
- }
359
353
  function _ts_decorate(decorators, target, key, desc) {
360
354
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
361
355
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -369,15 +363,38 @@ var AUTO_TRIGGER_NODES = [
369
363
  "switch",
370
364
  "constant"
371
365
  ];
372
- var createComputeGraphController = (graph, serviceContainer) => {
366
+ var createComputeGraphController = (graph, computeRuntime) => {
373
367
  const computeGraph = createComputeGraph(graph);
374
- const controller = new ComputeGraphController(serviceContainer, computeGraph);
368
+ const controller = new ComputeGraphController(computeRuntime, computeGraph);
375
369
  return {
376
370
  controller,
377
371
  graph
378
372
  };
379
373
  };
380
374
  var ComputeGraphController = class extends Resource {
375
+ _computeRuntime;
376
+ _graph;
377
+ _executor = new GraphExecutor({
378
+ computeNodeResolver: (node) => resolveComputeNode(node)
379
+ });
380
+ _diagnostics = [];
381
+ /**
382
+ * Canvas force-sets outputs of those nodes.
383
+ */
384
+ _forcedOutputs = {};
385
+ /**
386
+ * Runtime state of the execution graph.
387
+ */
388
+ _runtimeStateInputs = {};
389
+ _runtimeStateOutputs = {};
390
+ // TODO(burdon): Remove? Make state reactive?
391
+ update = new Event();
392
+ /** Computed result. */
393
+ output = new Event();
394
+ events = new Event();
395
+ constructor(_computeRuntime, _graph) {
396
+ super(), this._computeRuntime = _computeRuntime, this._graph = _graph;
397
+ }
381
398
  toJSON() {
382
399
  return {
383
400
  graph: this._graph,
@@ -438,8 +455,7 @@ var ComputeGraphController = class extends Resource {
438
455
  return this._runtimeStateOutputs[nodeId] ?? {};
439
456
  }
440
457
  setOutput(nodeId, property, value) {
441
- var _this__forcedOutputs, _nodeId;
442
- (_this__forcedOutputs = this._forcedOutputs)[_nodeId = nodeId] ?? (_this__forcedOutputs[_nodeId] = {});
458
+ this._forcedOutputs[nodeId] ??= {};
443
459
  this._forcedOutputs[nodeId][property] = value;
444
460
  queueMicrotask(async () => {
445
461
  try {
@@ -447,7 +463,7 @@ var ComputeGraphController = class extends Resource {
447
463
  } catch (err) {
448
464
  log.catch(err, void 0, {
449
465
  F: __dxlog_file4,
450
- L: 199,
466
+ L: 229,
451
467
  S: this,
452
468
  C: (f, a) => f(...a)
453
469
  });
@@ -469,12 +485,11 @@ var ComputeGraphController = class extends Resource {
469
485
  for (const [nodeId2, outputs] of Object.entries(this._forcedOutputs)) {
470
486
  executor.setOutputs(nodeId2, Effect.succeed(ValueBag.make(outputs)));
471
487
  }
472
- const serviceLayer = this._serviceContainer.createLayer();
473
- await Effect.runPromise(Effect.gen(this, function* () {
488
+ unwrapExit(await this._computeRuntime.runPromiseExit(Effect.gen(this, function* () {
474
489
  const scope = yield* Scope.make();
475
490
  const executable = yield* Effect.promise(() => resolveComputeNode(this._graph.getNode(nodeId)));
476
491
  const computingOutputs = executable.exec != null;
477
- const effect = (computingOutputs ? executor.computeOutputs(nodeId) : executor.computeInputs(nodeId)).pipe(Effect.withSpan("runGraph"), Scope.extend(scope), Effect.flatMap(computeValueBag), Effect.provide(serviceLayer), Effect.withSpan("test"), Effect.tap((values) => {
492
+ const effect = (computingOutputs ? executor.computeOutputs(nodeId) : executor.computeInputs(nodeId)).pipe(Effect.withSpan("runGraph"), Scope.extend(scope), Effect.provide(ComputeEventLogger.layerFromTracing.pipe(Layer.provideMerge(TracingService.layerNoop))), Effect.flatMap(computeValueBag), Effect.withSpan("test"), Effect.tap((values) => {
478
493
  for (const [key, value] of Object.entries(values)) {
479
494
  if (computingOutputs) {
480
495
  this._onOutputComputed(nodeId, key, value);
@@ -485,7 +500,7 @@ var ComputeGraphController = class extends Resource {
485
500
  }));
486
501
  yield* effect;
487
502
  yield* Scope.close(scope, Exit.void);
488
- }));
503
+ })));
489
504
  this.update.emit();
490
505
  }
491
506
  /**
@@ -506,13 +521,13 @@ var ComputeGraphController = class extends Resource {
506
521
  const allAffectedNodes = [
507
522
  ...new Set(triggerNodes.flatMap((node) => executor.getAllDependantNodes(node.id)))
508
523
  ];
509
- await Effect.runPromise(Effect.gen(this, function* () {
524
+ unwrapExit(await this._computeRuntime.runPromiseExit(Effect.gen(this, function* () {
510
525
  const scope = yield* Scope.make();
511
526
  const tasks = [];
512
527
  for (const node of allAffectedNodes) {
513
528
  const executable = yield* Effect.promise(() => resolveComputeNode(this._graph.getNode(node)));
514
529
  const computingOutputs = executable.exec != null;
515
- const effect = (computingOutputs ? executor.computeOutputs(node) : executor.computeInputs(node)).pipe(Effect.withSpan("runGraph"), Scope.extend(scope), Effect.flatMap(computeValueBag), Effect.provide(this._serviceContainer.createLayer()), Effect.withSpan("test"), Effect.tap((values) => {
530
+ const effect = (computingOutputs ? executor.computeOutputs(node) : executor.computeInputs(node)).pipe(Effect.withSpan("runGraph"), Scope.extend(scope), Effect.flatMap(computeValueBag), Effect.provide(ComputeEventLogger.layerFromTracing.pipe(Layer.provideMerge(TracingService.layerNoop))), Effect.withSpan("test"), Effect.tap((values) => {
516
531
  for (const [key, value] of Object.entries(values)) {
517
532
  if (computingOutputs) {
518
533
  this._onOutputComputed(node, key, value);
@@ -525,7 +540,7 @@ var ComputeGraphController = class extends Resource {
525
540
  }
526
541
  yield* Effect.all(tasks);
527
542
  yield* Scope.close(scope, Exit.void);
528
- }));
543
+ })));
529
544
  this.update.emit();
530
545
  }
531
546
  _createLogger() {
@@ -541,7 +556,7 @@ var ComputeGraphController = class extends Resource {
541
556
  event
542
557
  }, {
543
558
  F: __dxlog_file4,
544
- L: 335,
559
+ L: 376,
545
560
  S: this,
546
561
  C: (f, a) => f(...a)
547
562
  });
@@ -564,13 +579,11 @@ var ComputeGraphController = class extends Resource {
564
579
  this.events.emit(event);
565
580
  }
566
581
  _onInputComputed(nodeId, property, value) {
567
- var _this__runtimeStateInputs, _nodeId;
568
- (_this__runtimeStateInputs = this._runtimeStateInputs)[_nodeId = nodeId] ?? (_this__runtimeStateInputs[_nodeId] = {});
582
+ this._runtimeStateInputs[nodeId] ??= {};
569
583
  this._runtimeStateInputs[nodeId][property] = value;
570
584
  }
571
585
  _onOutputComputed(nodeId, property, value) {
572
- var _this__runtimeStateOutputs, _nodeId;
573
- (_this__runtimeStateOutputs = this._runtimeStateOutputs)[_nodeId = nodeId] ?? (_this__runtimeStateOutputs[_nodeId] = {});
586
+ this._runtimeStateOutputs[nodeId] ??= {};
574
587
  this._runtimeStateOutputs[nodeId][property] = value;
575
588
  this.output.emit({
576
589
  nodeId,
@@ -578,19 +591,6 @@ var ComputeGraphController = class extends Resource {
578
591
  value
579
592
  });
580
593
  }
581
- constructor(_serviceContainer, _graph) {
582
- super(), _define_property(this, "_serviceContainer", void 0), _define_property(this, "_graph", void 0), _define_property(this, "_executor", void 0), _define_property(this, "_diagnostics", void 0), /**
583
- * Canvas force-sets outputs of those nodes.
584
- */
585
- _define_property(this, "_forcedOutputs", void 0), /**
586
- * Runtime state of the execution graph.
587
- */
588
- _define_property(this, "_runtimeStateInputs", void 0), _define_property(this, "_runtimeStateOutputs", void 0), // TODO(burdon): Remove? Make state reactive?
589
- _define_property(this, "update", void 0), /** Computed result. */
590
- _define_property(this, "output", void 0), _define_property(this, "events", void 0), this._serviceContainer = _serviceContainer, this._graph = _graph, this._executor = new GraphExecutor({
591
- computeNodeResolver: (node) => resolveComputeNode(node)
592
- }), this._diagnostics = [], this._forcedOutputs = {}, this._runtimeStateInputs = {}, this._runtimeStateOutputs = {}, this.update = new Event(), this.output = new Event(), this.events = new Event();
593
- }
594
594
  };
595
595
  _ts_decorate([
596
596
  synchronized
@@ -633,88 +633,82 @@ var computeValueBag = (bag) => {
633
633
  import { noteShape } from "@dxos/react-ui-canvas-editor";
634
634
 
635
635
  // src/shapes/common/Box.tsx
636
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
637
636
  import React, { forwardRef } from "react";
638
637
  import { invariant as invariant4 } from "@dxos/invariant";
639
638
  import { Icon, IconButton } from "@dxos/react-ui";
640
639
  import { useEditorContext, useShapeDef } from "@dxos/react-ui-canvas-editor";
641
- import { mx } from "@dxos/react-ui-theme";
640
+ import { mx } from "@dxos/ui-theme";
642
641
  var __dxlog_file5 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/shapes/common/Box.tsx";
643
642
  var headerHeight = 32;
644
643
  var footerHeight = 32;
645
644
  var Box = /* @__PURE__ */ forwardRef(({ children, classNames, shape, title, status, open, onAction }, forwardedRef) => {
646
- var _effect = _useSignals();
647
- try {
648
- invariant4(shape.type, void 0, {
649
- F: __dxlog_file5,
650
- L: 30,
651
- S: void 0,
652
- A: [
653
- "shape.type",
654
- ""
655
- ]
656
- });
657
- const { icon, name, openable } = useShapeDef(shape.type) ?? {
658
- icon: "ph--placeholder--regular"
659
- };
660
- const { debug } = useEditorContext();
661
- return /* @__PURE__ */ React.createElement("div", {
662
- ref: forwardedRef,
663
- className: "flex flex-col h-full w-full justify-between"
664
- }, /* @__PURE__ */ React.createElement("div", {
665
- className: "flex shrink-0 w-full justify-between items-center h-[32px] bg-hoverSurface"
666
- }, /* @__PURE__ */ React.createElement(Icon, {
667
- icon,
668
- classNames: "mx-2"
669
- }), /* @__PURE__ */ React.createElement("div", {
670
- className: "grow text-sm truncate"
671
- }, debug ? shape.type : name ?? shape.text ?? title), /* @__PURE__ */ React.createElement(IconButton, {
672
- classNames: "p-1 text-green-500",
673
- variant: "ghost",
674
- icon: "ph--play--regular",
675
- size: 4,
676
- label: "run",
677
- iconOnly: true,
678
- onDoubleClick: (ev) => ev.stopPropagation(),
679
- onClick: (ev) => {
680
- ev.stopPropagation();
681
- onAction?.("run");
682
- }
683
- })), /* @__PURE__ */ React.createElement("div", {
684
- className: mx("flex flex-col h-full grow overflow-hidden", classNames)
685
- }, children), /* @__PURE__ */ React.createElement("div", {
686
- className: "flex shrink-0 w-full justify-between items-center h-[32px] bg-hoverSurface"
687
- }, /* @__PURE__ */ React.createElement("div", {
688
- className: "grow px-2 text-sm truncate"
689
- }, debug ? shape.id : status), openable && /* @__PURE__ */ React.createElement(IconButton, {
690
- classNames: "p-1",
691
- variant: "ghost",
692
- icon: open ? "ph--caret-up--regular" : "ph--caret-down--regular",
693
- size: 4,
694
- label: open ? "close" : "open",
695
- iconOnly: true,
696
- onClick: (ev) => {
697
- ev.stopPropagation();
698
- onAction?.(open ? "close" : "open");
699
- }
700
- })));
701
- } finally {
702
- _effect.f();
703
- }
645
+ invariant4(shape.type, void 0, {
646
+ F: __dxlog_file5,
647
+ L: 30,
648
+ S: void 0,
649
+ A: [
650
+ "shape.type",
651
+ ""
652
+ ]
653
+ });
654
+ const { icon, name, openable } = useShapeDef(shape.type) ?? {
655
+ icon: "ph--placeholder--regular"
656
+ };
657
+ const { debug } = useEditorContext();
658
+ return /* @__PURE__ */ React.createElement("div", {
659
+ ref: forwardedRef,
660
+ className: "flex flex-col bs-full is-full justify-between"
661
+ }, /* @__PURE__ */ React.createElement("div", {
662
+ className: "flex shrink-0 is-full justify-between items-center bs-[32px] bg-hoverSurface"
663
+ }, /* @__PURE__ */ React.createElement(Icon, {
664
+ icon,
665
+ classNames: "mx-2"
666
+ }), /* @__PURE__ */ React.createElement("div", {
667
+ className: "grow text-sm truncate"
668
+ }, debug ? shape.type : name ?? shape.text ?? title), /* @__PURE__ */ React.createElement(IconButton, {
669
+ classNames: "p-1 text-green-500",
670
+ variant: "ghost",
671
+ icon: "ph--play--regular",
672
+ size: 4,
673
+ label: "run",
674
+ iconOnly: true,
675
+ onDoubleClick: (ev) => ev.stopPropagation(),
676
+ onClick: (ev) => {
677
+ ev.stopPropagation();
678
+ onAction?.("run");
679
+ }
680
+ })), /* @__PURE__ */ React.createElement("div", {
681
+ className: mx("flex flex-col bs-full grow overflow-hidden", classNames)
682
+ }, children), /* @__PURE__ */ React.createElement("div", {
683
+ className: "flex shrink-0 is-full justify-between items-center bs-[32px] bg-hoverSurface"
684
+ }, /* @__PURE__ */ React.createElement("div", {
685
+ className: "grow pli-2 text-sm truncate"
686
+ }, debug ? shape.id : status), openable && /* @__PURE__ */ React.createElement(IconButton, {
687
+ classNames: "p-1",
688
+ variant: "ghost",
689
+ icon: open ? "ph--caret-up--regular" : "ph--caret-down--regular",
690
+ size: 4,
691
+ label: open ? "close" : "open",
692
+ iconOnly: true,
693
+ onClick: (ev) => {
694
+ ev.stopPropagation();
695
+ onAction?.(open ? "close" : "open");
696
+ }
697
+ })));
704
698
  });
705
699
 
706
700
  // src/shapes/common/FunctionBody.tsx
707
- import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
708
- import { SchemaAST as SchemaAST2 } from "effect";
701
+ import * as SchemaAST2 from "effect/SchemaAST";
709
702
  import React2, { useRef, useState as useState3 } from "react";
710
703
  import { VoidInput, VoidOutput } from "@dxos/conductor";
711
704
  import { useCanvasContext } from "@dxos/react-ui-canvas";
712
705
  import { createAnchors, getParentShapeElement, rowHeight } from "@dxos/react-ui-canvas-editor";
713
706
 
714
707
  // src/shapes/defs.ts
715
- import { Schema as Schema2, SchemaAST } from "effect";
708
+ import * as Schema2 from "effect/Schema";
709
+ import * as SchemaAST from "effect/SchemaAST";
716
710
  import { DEFAULT_INPUT as DEFAULT_INPUT2, DEFAULT_OUTPUT as DEFAULT_OUTPUT2 } from "@dxos/conductor";
717
- import { ObjectId as ObjectId3 } from "@dxos/echo-schema";
711
+ import { Obj as Obj3 } from "@dxos/echo";
718
712
  import { Polygon } from "@dxos/react-ui-canvas-editor";
719
713
  var getProperties = (ast) => SchemaAST.getPropertySignatures(ast).map(({ name }) => ({
720
714
  name: name.toString()
@@ -732,13 +726,13 @@ var parseAnchorId = (id) => {
732
726
  };
733
727
  var ComputeShape = Schema2.extend(Polygon, Schema2.Struct({
734
728
  // TODO(burdon): Rename computeNode?
735
- node: Schema2.optional(ObjectId3.annotations({
729
+ node: Schema2.optional(Obj3.ID.annotations({
736
730
  description: "Compute node id"
737
731
  }))
738
732
  }).pipe(Schema2.mutable));
739
733
  var createShape = ({ id, ...rest }) => {
740
734
  return {
741
- id: id ?? ObjectId3.random(),
735
+ id: id ?? Obj3.ID.random(),
742
736
  ...rest
743
737
  };
744
738
  };
@@ -747,70 +741,65 @@ var createShape = ({ id, ...rest }) => {
747
741
  var bodyPadding = 8;
748
742
  var expandedHeight = 200;
749
743
  var FunctionBody = ({ shape, name, content, inputSchema = VoidInput, outputSchema = VoidOutput, ...props }) => {
750
- var _effect = _useSignals2();
751
- try {
752
- const { scale } = useCanvasContext();
753
- const rootRef = useRef(null);
754
- const [open, setOpen] = useState3(false);
755
- const handleAction = (action) => {
756
- if (!rootRef.current) {
757
- return;
758
- }
759
- switch (action) {
760
- case "open": {
761
- const el = getParentShapeElement(rootRef.current, shape.id);
762
- const { height } = el.getBoundingClientRect();
763
- el.style.height = `${height / scale + expandedHeight}px`;
764
- setOpen(true);
765
- break;
766
- }
767
- case "close": {
768
- const el = getParentShapeElement(rootRef.current, shape.id);
769
- el.style.height = "";
770
- setOpen(false);
771
- break;
772
- }
773
- }
774
- };
775
- const inputs = getProperties(inputSchema.ast);
776
- const outputs = getProperties(outputSchema.ast);
777
- const columnCount = inputs.length && outputs.length ? 2 : 1;
778
- return /* @__PURE__ */ React2.createElement(Box, {
779
- ref: rootRef,
780
- shape,
781
- title: name,
782
- classNames: "divide-y divide-separator",
783
- open,
784
- onAction: handleAction,
785
- ...props
786
- }, /* @__PURE__ */ React2.createElement("div", {
787
- className: `grid grid-cols-${columnCount} items-center`,
788
- style: {
789
- paddingTop: bodyPadding,
790
- paddingBottom: bodyPadding
791
- }
792
- }, (inputs?.length ?? 0) > 0 && /* @__PURE__ */ React2.createElement("div", {
793
- className: "flex flex-col"
794
- }, inputs?.map(({ name: name2 }) => /* @__PURE__ */ React2.createElement("div", {
795
- key: name2,
796
- className: "px-2 truncate text-sm font-mono items-center",
797
- style: {
798
- height: rowHeight
744
+ const { scale } = useCanvasContext();
745
+ const rootRef = useRef(null);
746
+ const [open, setOpen] = useState3(false);
747
+ const handleAction = (action) => {
748
+ if (!rootRef.current) {
749
+ return;
750
+ }
751
+ switch (action) {
752
+ case "open": {
753
+ const el = getParentShapeElement(rootRef.current, shape.id);
754
+ const { height } = el.getBoundingClientRect();
755
+ el.style.height = `${height / scale + expandedHeight}px`;
756
+ setOpen(true);
757
+ break;
799
758
  }
800
- }, name2))), (outputs?.length ?? 0) > 0 && /* @__PURE__ */ React2.createElement("div", {
801
- className: "flex flex-col"
802
- }, outputs?.map(({ name: name2 }) => /* @__PURE__ */ React2.createElement("div", {
803
- key: name2,
804
- className: "px-2 truncate text-sm font-mono items-center text-right",
805
- style: {
806
- height: rowHeight
759
+ case "close": {
760
+ const el = getParentShapeElement(rootRef.current, shape.id);
761
+ el.style.height = "";
762
+ setOpen(false);
763
+ break;
807
764
  }
808
- }, name2)))), open && /* @__PURE__ */ React2.createElement("div", {
809
- className: "flex flex-col grow overflow-hidden"
810
- }, content));
811
- } finally {
812
- _effect.f();
813
- }
765
+ }
766
+ };
767
+ const inputs = getProperties(inputSchema.ast);
768
+ const outputs = getProperties(outputSchema.ast);
769
+ const columnCount = inputs.length && outputs.length ? 2 : 1;
770
+ return /* @__PURE__ */ React2.createElement(Box, {
771
+ ref: rootRef,
772
+ shape,
773
+ title: name,
774
+ classNames: "divide-y divide-separator",
775
+ open,
776
+ onAction: handleAction,
777
+ ...props
778
+ }, /* @__PURE__ */ React2.createElement("div", {
779
+ className: `grid grid-cols-${columnCount} items-center`,
780
+ style: {
781
+ paddingTop: bodyPadding,
782
+ paddingBottom: bodyPadding
783
+ }
784
+ }, (inputs?.length ?? 0) > 0 && /* @__PURE__ */ React2.createElement("div", {
785
+ className: "flex flex-col"
786
+ }, inputs?.map(({ name: name2 }) => /* @__PURE__ */ React2.createElement("div", {
787
+ key: name2,
788
+ className: "pli-2 truncate text-sm font-mono items-center",
789
+ style: {
790
+ height: rowHeight
791
+ }
792
+ }, name2))), (outputs?.length ?? 0) > 0 && /* @__PURE__ */ React2.createElement("div", {
793
+ className: "flex flex-col"
794
+ }, outputs?.map(({ name: name2 }) => /* @__PURE__ */ React2.createElement("div", {
795
+ key: name2,
796
+ className: "pli-2 truncate text-sm font-mono items-center text-right",
797
+ style: {
798
+ height: rowHeight
799
+ }
800
+ }, name2)))), open && /* @__PURE__ */ React2.createElement("div", {
801
+ className: "flex flex-col grow overflow-hidden"
802
+ }, content));
814
803
  };
815
804
  var getHeight = (input) => {
816
805
  const properties = SchemaAST2.getPropertySignatures(input.ast);
@@ -831,47 +820,35 @@ var createFunctionAnchors = (shape, input = VoidInput, output = VoidOutput) => {
831
820
  };
832
821
 
833
822
  // src/shapes/common/TypeSelect.tsx
834
- import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
835
823
  import React3 from "react";
836
824
  import { ComputeValueType } from "@dxos/conductor";
837
825
  import { Select } from "@dxos/react-ui";
838
826
  var TypeSelect = ({ value, onValueChange }) => {
839
- var _effect = _useSignals3();
840
- try {
841
- return /* @__PURE__ */ React3.createElement(Select.Root, {
842
- value,
843
- onValueChange
844
- }, /* @__PURE__ */ React3.createElement(Select.TriggerButton, {
845
- variant: "ghost",
846
- classNames: "w-full !px-0"
847
- }), /* @__PURE__ */ React3.createElement(Select.Portal, null, /* @__PURE__ */ React3.createElement(Select.Content, null, /* @__PURE__ */ React3.createElement(Select.ScrollUpButton, null), /* @__PURE__ */ React3.createElement(Select.Viewport, null, ComputeValueType.literals.map((type) => /* @__PURE__ */ React3.createElement(Select.Option, {
848
- key: type,
849
- value: type
850
- }, type))), /* @__PURE__ */ React3.createElement(Select.ScrollDownButton, null), /* @__PURE__ */ React3.createElement(Select.Arrow, null))));
851
- } finally {
852
- _effect.f();
853
- }
827
+ return /* @__PURE__ */ React3.createElement(Select.Root, {
828
+ value,
829
+ onValueChange
830
+ }, /* @__PURE__ */ React3.createElement(Select.TriggerButton, {
831
+ variant: "ghost",
832
+ classNames: "is-full !pli-0"
833
+ }), /* @__PURE__ */ React3.createElement(Select.Portal, null, /* @__PURE__ */ React3.createElement(Select.Content, null, /* @__PURE__ */ React3.createElement(Select.ScrollUpButton, null), /* @__PURE__ */ React3.createElement(Select.Viewport, null, ComputeValueType.literals.map((type) => /* @__PURE__ */ React3.createElement(Select.Option, {
834
+ key: type,
835
+ value: type
836
+ }, type))), /* @__PURE__ */ React3.createElement(Select.ScrollDownButton, null), /* @__PURE__ */ React3.createElement(Select.Arrow, null))));
854
837
  };
855
838
 
856
839
  // src/shapes/Array.tsx
857
- import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
858
- import { Schema as Schema3 } from "effect";
840
+ import * as Schema3 from "effect/Schema";
859
841
  import React4 from "react";
860
842
  import { ReducerInput, ReducerOutput } from "@dxos/conductor";
861
843
  var ReducerShape = Schema3.extend(ComputeShape, Schema3.Struct({
862
844
  type: Schema3.Literal("reducer")
863
845
  }));
864
846
  var ReducerComponent = ({ shape }) => {
865
- var _effect = _useSignals4();
866
- try {
867
- return /* @__PURE__ */ React4.createElement(FunctionBody, {
868
- shape,
869
- inputSchema: ReducerInput,
870
- outputSchema: ReducerOutput
871
- });
872
- } finally {
873
- _effect.f();
874
- }
847
+ return /* @__PURE__ */ React4.createElement(FunctionBody, {
848
+ shape,
849
+ inputSchema: ReducerInput,
850
+ outputSchema: ReducerOutput
851
+ });
875
852
  };
876
853
  var createReducer = ({ id, size = {
877
854
  width: 192,
@@ -891,8 +868,7 @@ var reducerShape = {
891
868
  };
892
869
 
893
870
  // src/shapes/Append.tsx
894
- import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
895
- import { Schema as Schema4 } from "effect";
871
+ import * as Schema4 from "effect/Schema";
896
872
  import React5 from "react";
897
873
  import { AppendInput } from "@dxos/conductor";
898
874
  var AppendShape = Schema4.extend(ComputeShape, Schema4.Struct({
@@ -907,15 +883,10 @@ var createAppend = (props) => createShape({
907
883
  ...props
908
884
  });
909
885
  var AppendComponent = ({ shape }) => {
910
- var _effect = _useSignals5();
911
- try {
912
- return /* @__PURE__ */ React5.createElement(FunctionBody, {
913
- shape,
914
- inputSchema: AppendInput
915
- });
916
- } finally {
917
- _effect.f();
918
- }
886
+ return /* @__PURE__ */ React5.createElement(FunctionBody, {
887
+ shape,
888
+ inputSchema: AppendInput
889
+ });
919
890
  };
920
891
  var appendShape = {
921
892
  type: "append",
@@ -927,8 +898,7 @@ var appendShape = {
927
898
  };
928
899
 
929
900
  // src/shapes/Audio.tsx
930
- import { useSignals as _useSignals6 } from "@preact-signals/safe-react/tracking";
931
- import { Schema as Schema5 } from "effect";
901
+ import * as Schema5 from "effect/Schema";
932
902
  import React6, { useEffect as useEffect3, useState as useState4 } from "react";
933
903
  import { Icon as Icon2 } from "@dxos/react-ui";
934
904
  import { createAnchorMap } from "@dxos/react-ui-canvas-editor";
@@ -944,29 +914,24 @@ var createAudio = (props) => createShape({
944
914
  ...props
945
915
  });
946
916
  var AudioComponent = ({ shape }) => {
947
- var _effect = _useSignals6();
948
- try {
949
- const { node } = useComputeNodeState(shape);
950
- const [active, setActive] = useState4(false);
951
- useEffect3(() => {
952
- node.value = active;
953
- }, [
954
- active
955
- ]);
956
- return /* @__PURE__ */ React6.createElement("div", {
957
- className: "flex w-full justify-center items-center"
958
- }, /* @__PURE__ */ React6.createElement(Icon2, {
959
- icon: active ? "ph--microphone--regular" : "ph--microphone-slash--regular",
960
- classNames: [
961
- "transition opacity-20 duration-1000",
962
- active && "opacity-100 text-red-500"
963
- ],
964
- size: 8,
965
- onClick: () => setActive(!active)
966
- }));
967
- } finally {
968
- _effect.f();
969
- }
917
+ const { node } = useComputeNodeState(shape);
918
+ const [active, setActive] = useState4(false);
919
+ useEffect3(() => {
920
+ node.value = active;
921
+ }, [
922
+ active
923
+ ]);
924
+ return /* @__PURE__ */ React6.createElement("div", {
925
+ className: "flex is-full justify-center items-center"
926
+ }, /* @__PURE__ */ React6.createElement(Icon2, {
927
+ icon: active ? "ph--microphone--regular" : "ph--microphone-slash--regular",
928
+ classNames: [
929
+ "transition opacity-20 duration-1000",
930
+ active && "opacity-100 text-red-500"
931
+ ],
932
+ size: 8,
933
+ onClick: () => setActive(!active)
934
+ }));
970
935
  };
971
936
  var audioShape = {
972
937
  type: "audio",
@@ -983,8 +948,7 @@ var audioShape = {
983
948
  };
984
949
 
985
950
  // src/shapes/Beacon.tsx
986
- import { useSignals as _useSignals7 } from "@preact-signals/safe-react/tracking";
987
- import { Schema as Schema6 } from "effect";
951
+ import * as Schema6 from "effect/Schema";
988
952
  import React7 from "react";
989
953
  import { DEFAULT_INPUT as DEFAULT_INPUT3, isTruthy } from "@dxos/conductor";
990
954
  import { Icon as Icon3 } from "@dxos/react-ui";
@@ -1001,24 +965,19 @@ var createBeacon = (props) => createShape({
1001
965
  ...props
1002
966
  });
1003
967
  var BeaconComponent = ({ shape }) => {
1004
- var _effect = _useSignals7();
1005
- try {
1006
- const { runtime } = useComputeNodeState(shape);
1007
- const input = runtime.inputs[DEFAULT_INPUT3];
1008
- const value = input?.type === "executed" ? input.value : false;
1009
- return /* @__PURE__ */ React7.createElement("div", {
1010
- className: "flex w-full justify-center items-center"
1011
- }, /* @__PURE__ */ React7.createElement(Icon3, {
1012
- icon: "ph--sun--regular",
1013
- classNames: [
1014
- "transition opacity-20 duration-1000",
1015
- isTruthy(value) && "opacity-100 text-yellow-500"
1016
- ],
1017
- size: 8
1018
- }));
1019
- } finally {
1020
- _effect.f();
1021
- }
968
+ const { runtime } = useComputeNodeState(shape);
969
+ const input = runtime.inputs[DEFAULT_INPUT3];
970
+ const value = input?.type === "executed" ? input.value : false;
971
+ return /* @__PURE__ */ React7.createElement("div", {
972
+ className: "flex is-full justify-center items-center"
973
+ }, /* @__PURE__ */ React7.createElement(Icon3, {
974
+ icon: "ph--sun--regular",
975
+ classNames: [
976
+ "transition opacity-20 duration-1000",
977
+ isTruthy(value) && "opacity-100 text-yellow-500"
978
+ ],
979
+ size: 8
980
+ }));
1022
981
  };
1023
982
  var beaconShape = {
1024
983
  type: "beacon",
@@ -1035,7 +994,7 @@ var beaconShape = {
1035
994
  };
1036
995
 
1037
996
  // src/shapes/Boolean.tsx
1038
- import { Schema as Schema7 } from "effect";
997
+ import * as Schema7 from "effect/Schema";
1039
998
  import React8 from "react";
1040
999
  import { getAnchorPoints } from "@dxos/react-ui-canvas-editor";
1041
1000
  import { createAnchors as createAnchors2 } from "@dxos/react-ui-canvas-editor";
@@ -1059,7 +1018,7 @@ var defineShape = ({ type, name, icon, symbol: Symbol, createShape: createShape2
1059
1018
  // Be careful not to name component factories with a capital letter.
1060
1019
  component: () => {
1061
1020
  return /* @__PURE__ */ React8.createElement("div", {
1062
- className: "flex w-full justify-center items-center"
1021
+ className: "flex is-full justify-center items-center"
1063
1022
  }, /* @__PURE__ */ React8.createElement(Symbol, null));
1064
1023
  },
1065
1024
  createShape: createShape2,
@@ -1086,7 +1045,7 @@ var createSymbol = (pathConstructor, inputs) => ({
1086
1045
  });
1087
1046
  return /* @__PURE__ */ React8.createElement("svg", {
1088
1047
  viewBox: `0 0 ${width} ${height}`,
1089
- className: "w-full h-full"
1048
+ className: "is-full bs-full"
1090
1049
  }, getAnchorPoints({
1091
1050
  x: 0,
1092
1051
  y: centerY
@@ -1208,8 +1167,7 @@ var notShape = defineShape({
1208
1167
  });
1209
1168
 
1210
1169
  // src/shapes/Chat.tsx
1211
- import { useSignals as _useSignals8 } from "@preact-signals/safe-react/tracking";
1212
- import { Schema as Schema8 } from "effect";
1170
+ import * as Schema8 from "effect/Schema";
1213
1171
  import React9, { useRef as useRef2 } from "react";
1214
1172
  import { DEFAULT_OUTPUT as DEFAULT_OUTPUT3 } from "@dxos/conductor";
1215
1173
  import { TextBox } from "@dxos/react-ui-canvas-editor";
@@ -1218,28 +1176,23 @@ var ChatShape = Schema8.extend(ComputeShape, Schema8.Struct({
1218
1176
  type: Schema8.Literal("chat")
1219
1177
  }));
1220
1178
  var TextInputComponent = ({ shape, title, ...props }) => {
1221
- var _effect = _useSignals8();
1222
- try {
1223
- const { runtime } = useComputeNodeState(shape);
1224
- const inputRef = useRef2(null);
1225
- const handleEnter = (text) => {
1226
- const value = text.trim();
1227
- if (value.length) {
1228
- runtime.setOutput(DEFAULT_OUTPUT3, value);
1229
- inputRef.current?.setText("");
1230
- }
1231
- };
1232
- return /* @__PURE__ */ React9.createElement(Box, {
1233
- shape,
1234
- title
1235
- }, /* @__PURE__ */ React9.createElement(TextBox, {
1236
- ref: inputRef,
1237
- onEnter: handleEnter,
1238
- ...props
1239
- }));
1240
- } finally {
1241
- _effect.f();
1242
- }
1179
+ const { runtime } = useComputeNodeState(shape);
1180
+ const inputRef = useRef2(null);
1181
+ const handleEnter = (text) => {
1182
+ const value = text.trim();
1183
+ if (value.length) {
1184
+ runtime.setOutput(DEFAULT_OUTPUT3, value);
1185
+ inputRef.current?.setText("");
1186
+ }
1187
+ };
1188
+ return /* @__PURE__ */ React9.createElement(Box, {
1189
+ shape,
1190
+ title
1191
+ }, /* @__PURE__ */ React9.createElement(TextBox, {
1192
+ ref: inputRef,
1193
+ onEnter: handleEnter,
1194
+ ...props
1195
+ }));
1243
1196
  };
1244
1197
  var createChat = (props) => createShape({
1245
1198
  type: "chat",
@@ -1269,8 +1222,7 @@ var chatShape = {
1269
1222
  };
1270
1223
 
1271
1224
  // src/shapes/Constant.tsx
1272
- import { useSignals as _useSignals9 } from "@preact-signals/safe-react/tracking";
1273
- import { Schema as Schema9 } from "effect";
1225
+ import * as Schema9 from "effect/Schema";
1274
1226
  import React10, { useCallback as useCallback2, useRef as useRef3, useState as useState5 } from "react";
1275
1227
  import { ComputeValueType as ComputeValueType2 } from "@dxos/conductor";
1276
1228
  import { Input } from "@dxos/react-ui";
@@ -1293,57 +1245,52 @@ var inferType = (value) => {
1293
1245
  }
1294
1246
  };
1295
1247
  var ConstantComponent = ({ shape, title, chat, ...props }) => {
1296
- var _effect = _useSignals9();
1297
- try {
1298
- const { node } = useComputeNodeState(shape);
1299
- const [type, setType] = useState5(inferType(node.value) ?? ComputeValueType2.literals[0]);
1300
- const inputRef = useRef3(null);
1301
- const handleEnter = useCallback2((text) => {
1302
- const value = text.trim();
1303
- if (value.length) {
1304
- if (type === "number") {
1305
- const floatValue = parseFloat(value);
1306
- if (!isNaN(floatValue)) {
1307
- node.value = floatValue;
1308
- }
1309
- } else if (type === "object") {
1310
- node.value = safeParseJson(value, {});
1311
- } else {
1312
- node.value = value;
1248
+ const { node } = useComputeNodeState(shape);
1249
+ const [type, setType] = useState5(inferType(node.value) ?? ComputeValueType2.literals[0]);
1250
+ const inputRef = useRef3(null);
1251
+ const handleEnter = useCallback2((text) => {
1252
+ const value = text.trim();
1253
+ if (value.length) {
1254
+ if (type === "number") {
1255
+ const floatValue = parseFloat(value);
1256
+ if (!isNaN(floatValue)) {
1257
+ node.value = floatValue;
1313
1258
  }
1314
- inputRef.current?.focus();
1315
- }
1316
- }, [
1317
- type
1318
- ]);
1319
- return /* @__PURE__ */ React10.createElement(Box, {
1320
- shape,
1321
- title,
1322
- status: /* @__PURE__ */ React10.createElement(TypeSelect, {
1323
- value: type,
1324
- onValueChange: setType
1325
- })
1326
- }, (type === "string" || type === "number") && /* @__PURE__ */ React10.createElement(TextBox2, {
1327
- ...props,
1328
- ref: inputRef,
1329
- value: node.value,
1330
- onEnter: handleEnter
1331
- }), type === "object" && /* @__PURE__ */ React10.createElement(TextBox2, {
1332
- ...props,
1333
- ref: inputRef,
1334
- value: JSON.stringify(node.value, null, 2),
1335
- language: "json"
1336
- }), type === "boolean" && /* @__PURE__ */ React10.createElement("div", {
1337
- className: "flex grow justify-center items-center"
1338
- }, /* @__PURE__ */ React10.createElement(Input.Root, null, /* @__PURE__ */ React10.createElement(Input.Switch, {
1339
- checked: node.value,
1340
- onCheckedChange: (value) => {
1259
+ } else if (type === "object") {
1260
+ node.value = safeParseJson(value, {});
1261
+ } else {
1341
1262
  node.value = value;
1342
1263
  }
1343
- }))));
1344
- } finally {
1345
- _effect.f();
1346
- }
1264
+ inputRef.current?.focus();
1265
+ }
1266
+ }, [
1267
+ type
1268
+ ]);
1269
+ return /* @__PURE__ */ React10.createElement(Box, {
1270
+ shape,
1271
+ title,
1272
+ status: /* @__PURE__ */ React10.createElement(TypeSelect, {
1273
+ value: type,
1274
+ onValueChange: setType
1275
+ })
1276
+ }, (type === "string" || type === "number") && /* @__PURE__ */ React10.createElement(TextBox2, {
1277
+ ...props,
1278
+ ref: inputRef,
1279
+ value: node.value,
1280
+ onEnter: handleEnter
1281
+ }), type === "object" && /* @__PURE__ */ React10.createElement(TextBox2, {
1282
+ ...props,
1283
+ ref: inputRef,
1284
+ value: JSON.stringify(node.value, null, 2),
1285
+ language: "json"
1286
+ }), type === "boolean" && /* @__PURE__ */ React10.createElement("div", {
1287
+ className: "flex grow justify-center items-center"
1288
+ }, /* @__PURE__ */ React10.createElement(Input.Root, null, /* @__PURE__ */ React10.createElement(Input.Switch, {
1289
+ checked: node.value,
1290
+ onCheckedChange: (value) => {
1291
+ node.value = value;
1292
+ }
1293
+ }))));
1347
1294
  };
1348
1295
  var createConstant = (props) => createShape({
1349
1296
  type: "constant",
@@ -1372,8 +1319,7 @@ var constantShape = {
1372
1319
  };
1373
1320
 
1374
1321
  // src/shapes/Database.tsx
1375
- import { useSignals as _useSignals10 } from "@preact-signals/safe-react/tracking";
1376
- import { Schema as Schema10 } from "effect";
1322
+ import * as Schema10 from "effect/Schema";
1377
1323
  import React11 from "react";
1378
1324
  import { createAnchorMap as createAnchorMap5 } from "@dxos/react-ui-canvas-editor";
1379
1325
  var DatabaseShape = Schema10.extend(ComputeShape, Schema10.Struct({
@@ -1388,14 +1334,9 @@ var createDatabase = (props) => createShape({
1388
1334
  ...props
1389
1335
  });
1390
1336
  var DatabaseComponent = ({ shape }) => {
1391
- var _effect = _useSignals10();
1392
- try {
1393
- return /* @__PURE__ */ React11.createElement(Box, {
1394
- shape
1395
- });
1396
- } finally {
1397
- _effect.f();
1398
- }
1337
+ return /* @__PURE__ */ React11.createElement(Box, {
1338
+ shape
1339
+ });
1399
1340
  };
1400
1341
  var databaseShape = {
1401
1342
  type: "database",
@@ -1412,12 +1353,11 @@ var databaseShape = {
1412
1353
  };
1413
1354
 
1414
1355
  // src/shapes/Function.tsx
1415
- import { useSignals as _useSignals11 } from "@preact-signals/safe-react/tracking";
1416
- import { Schema as Schema11 } from "effect";
1356
+ import * as Schema11 from "effect/Schema";
1417
1357
  import React12, { useCallback as useCallback3, useRef as useRef4 } from "react";
1418
1358
  import { AnyOutput, FunctionInput } from "@dxos/conductor";
1419
- import { Ref as Ref2, getSnapshot, isInstanceOf } from "@dxos/echo-schema";
1420
- import { FunctionType, ScriptType } from "@dxos/functions";
1359
+ import { Ref as Ref2, getSnapshot, isInstanceOf } from "@dxos/echo/internal";
1360
+ import { Function, Script } from "@dxos/functions";
1421
1361
  import { useClient } from "@dxos/react-client";
1422
1362
  import { Filter, parseId } from "@dxos/react-client/echo";
1423
1363
  import { TextBox as TextBox3 } from "@dxos/react-ui-canvas-editor";
@@ -1433,59 +1373,54 @@ var createFunction = (props) => createShape({
1433
1373
  ...props
1434
1374
  });
1435
1375
  var TextInputComponent2 = ({ shape, title, ...props }) => {
1436
- var _effect = _useSignals11();
1437
- try {
1438
- const client = useClient();
1439
- const { node, runtime } = useComputeNodeState(shape);
1440
- const inputRef = useRef4(null);
1441
- const handleEnter = useCallback3(async (text) => {
1442
- const value = text.trim();
1443
- const { spaceId, objectId } = parseId(value);
1444
- if (!spaceId || !objectId) {
1445
- return;
1446
- }
1447
- const space = client.spaces.get(spaceId);
1448
- const object = space?.db.getObjectById(objectId);
1449
- if (!space || !isInstanceOf(ScriptType, object)) {
1450
- return;
1451
- }
1452
- const { objects: [fn] } = await space.db.query(Filter.type(FunctionType, {
1453
- source: Ref2.make(object)
1454
- })).run();
1455
- if (!fn) {
1456
- return;
1457
- }
1458
- node.value = value;
1459
- node.function = Ref2.make(fn);
1460
- node.inputSchema = getSnapshot(fn.inputSchema);
1461
- node.outputSchema = getSnapshot(fn.outputSchema);
1462
- }, [
1463
- client,
1464
- node
1465
- ]);
1466
- const handleAction = useCallback3((action) => {
1467
- if (action !== "run") {
1468
- return;
1469
- }
1470
- runtime.evalNode();
1471
- }, [
1472
- runtime
1473
- ]);
1474
- return /* @__PURE__ */ React12.createElement(Box, {
1475
- shape,
1476
- title: "Function",
1477
- onAction: handleAction
1478
- }, /* @__PURE__ */ React12.createElement(TextBox3, {
1479
- ...props,
1480
- ref: inputRef,
1481
- value: node.value,
1482
- language: node.valueType === "object" ? "json" : void 0,
1483
- onBlur: handleEnter,
1484
- onEnter: handleEnter
1485
- }));
1486
- } finally {
1487
- _effect.f();
1488
- }
1376
+ const client = useClient();
1377
+ const { node, runtime } = useComputeNodeState(shape);
1378
+ const inputRef = useRef4(null);
1379
+ const handleEnter = useCallback3(async (text) => {
1380
+ const value = text.trim();
1381
+ const { spaceId, objectId } = parseId(value);
1382
+ if (!spaceId || !objectId) {
1383
+ return;
1384
+ }
1385
+ const space = client.spaces.get(spaceId);
1386
+ const object = space?.db.getObjectById(objectId);
1387
+ if (!space || !isInstanceOf(Script.Script, object)) {
1388
+ return;
1389
+ }
1390
+ const [fn] = await space.db.query(Filter.type(Function.Function, {
1391
+ source: Ref2.make(object)
1392
+ })).run();
1393
+ if (!fn) {
1394
+ return;
1395
+ }
1396
+ node.value = value;
1397
+ node.function = Ref2.make(fn);
1398
+ node.inputSchema = fn.inputSchema ? getSnapshot(fn.inputSchema) : void 0;
1399
+ node.outputSchema = fn.outputSchema ? getSnapshot(fn.outputSchema) : void 0;
1400
+ }, [
1401
+ client,
1402
+ node
1403
+ ]);
1404
+ const handleAction = useCallback3((action) => {
1405
+ if (action !== "run") {
1406
+ return;
1407
+ }
1408
+ runtime.evalNode();
1409
+ }, [
1410
+ runtime
1411
+ ]);
1412
+ return /* @__PURE__ */ React12.createElement(Box, {
1413
+ shape,
1414
+ title: "Function",
1415
+ onAction: handleAction
1416
+ }, /* @__PURE__ */ React12.createElement(TextBox3, {
1417
+ ...props,
1418
+ ref: inputRef,
1419
+ value: node.value,
1420
+ language: node.valueType === "object" ? "json" : void 0,
1421
+ onBlur: handleEnter,
1422
+ onEnter: handleEnter
1423
+ }));
1489
1424
  };
1490
1425
  var functionShape = {
1491
1426
  type: "function",
@@ -1497,8 +1432,7 @@ var functionShape = {
1497
1432
  };
1498
1433
 
1499
1434
  // src/shapes/Gpt.tsx
1500
- import { useSignals as _useSignals12 } from "@preact-signals/safe-react/tracking";
1501
- import { Schema as Schema12 } from "effect";
1435
+ import * as Schema12 from "effect/Schema";
1502
1436
  import React13, { useEffect as useEffect4, useState as useState6 } from "react";
1503
1437
  import { GptInput, GptOutput } from "@dxos/conductor";
1504
1438
  var GptShape = Schema12.extend(ComputeShape, Schema12.Struct({
@@ -1513,54 +1447,49 @@ var createGpt = (props) => createShape({
1513
1447
  ...props
1514
1448
  });
1515
1449
  var GptComponent = ({ shape }) => {
1516
- var _effect = _useSignals12();
1517
- try {
1518
- const { meta, runtime } = useComputeNodeState(shape);
1519
- const [text, setText] = useState6("");
1520
- const [tokens, setTokens] = useState6(0);
1521
- useEffect4(() => {
1522
- return runtime.subscribeToEventLog((ev) => {
1523
- switch (ev.type) {
1524
- case "begin-compute": {
1525
- setText("");
1526
- break;
1527
- }
1528
- case "custom": {
1529
- const token = ev.event;
1530
- switch (token.type) {
1531
- case "content_block_delta":
1532
- switch (token.delta.type) {
1533
- case "text_delta": {
1534
- const delta = token.delta.text;
1535
- setText((prev) => {
1536
- const text2 = prev + delta;
1537
- setTokens(text2.split(" ").length);
1538
- return text2;
1539
- });
1540
- break;
1541
- }
1450
+ const { meta, runtime } = useComputeNodeState(shape);
1451
+ const [text, setText] = useState6("");
1452
+ const [tokens, setTokens] = useState6(0);
1453
+ useEffect4(() => {
1454
+ return runtime.subscribeToEventLog((ev) => {
1455
+ switch (ev.type) {
1456
+ case "begin-compute": {
1457
+ setText("");
1458
+ break;
1459
+ }
1460
+ case "custom": {
1461
+ const token = ev.event;
1462
+ switch (token.type) {
1463
+ case "content_block_delta":
1464
+ switch (token.delta.type) {
1465
+ case "text_delta": {
1466
+ const delta = token.delta.text;
1467
+ setText((prev) => {
1468
+ const text2 = prev + delta;
1469
+ setTokens(text2.split(" ").length);
1470
+ return text2;
1471
+ });
1472
+ break;
1542
1473
  }
1543
- break;
1544
- }
1545
- break;
1474
+ }
1475
+ break;
1546
1476
  }
1477
+ break;
1547
1478
  }
1548
- });
1549
- }, [
1550
- runtime?.subscribeToEventLog
1551
- ]);
1552
- return /* @__PURE__ */ React13.createElement(FunctionBody, {
1553
- shape,
1554
- content: /* @__PURE__ */ React13.createElement("div", {
1555
- className: "px-2 py-1 overflow-y-scroll"
1556
- }, text),
1557
- status: `${tokens} tokens`,
1558
- inputSchema: meta.input,
1559
- outputSchema: meta.output
1479
+ }
1560
1480
  });
1561
- } finally {
1562
- _effect.f();
1563
- }
1481
+ }, [
1482
+ runtime?.subscribeToEventLog
1483
+ ]);
1484
+ return /* @__PURE__ */ React13.createElement(FunctionBody, {
1485
+ shape,
1486
+ content: /* @__PURE__ */ React13.createElement("div", {
1487
+ className: "pli-2 plb-1 overflow-y-auto"
1488
+ }, text),
1489
+ status: `${tokens} tokens`,
1490
+ inputSchema: meta.input,
1491
+ outputSchema: meta.output
1492
+ });
1564
1493
  };
1565
1494
  var gptShape = {
1566
1495
  type: "gpt",
@@ -1573,8 +1502,7 @@ var gptShape = {
1573
1502
  };
1574
1503
 
1575
1504
  // src/shapes/Json.tsx
1576
- import { useSignals as _useSignals13 } from "@preact-signals/safe-react/tracking";
1577
- import { Schema as Schema13 } from "effect";
1505
+ import * as Schema13 from "effect/Schema";
1578
1506
  import React14 from "react";
1579
1507
  import { DEFAULT_INPUT as DEFAULT_INPUT4, DefaultOutput, JsonTransformInput } from "@dxos/conductor";
1580
1508
  import { createAnchorMap as createAnchorMap6 } from "@dxos/react-ui-canvas-editor";
@@ -1586,30 +1514,20 @@ var JsonTransformShape = Schema13.extend(ComputeShape, Schema13.Struct({
1586
1514
  type: Schema13.Literal("json-transform")
1587
1515
  }));
1588
1516
  var JsonComponent = ({ shape, ...props }) => {
1589
- var _effect = _useSignals13();
1590
- try {
1591
- const { runtime } = useComputeNodeState(shape);
1592
- const input = runtime.inputs[DEFAULT_INPUT4];
1593
- const value = input?.type === "executed" ? input.value : void 0;
1594
- return /* @__PURE__ */ React14.createElement(Box, {
1595
- shape
1596
- }, /* @__PURE__ */ React14.createElement(JsonFilter, {
1597
- data: value,
1598
- classNames: "text-xs"
1599
- }));
1600
- } finally {
1601
- _effect.f();
1602
- }
1517
+ const { runtime } = useComputeNodeState(shape);
1518
+ const input = runtime.inputs[DEFAULT_INPUT4];
1519
+ const value = input?.type === "executed" ? input.value : void 0;
1520
+ return /* @__PURE__ */ React14.createElement(Box, {
1521
+ shape
1522
+ }, /* @__PURE__ */ React14.createElement(JsonFilter, {
1523
+ data: value,
1524
+ classNames: "text-xs"
1525
+ }));
1603
1526
  };
1604
1527
  var JsonTransformComponent = ({ shape, ...props }) => {
1605
- var _effect = _useSignals13();
1606
- try {
1607
- return /* @__PURE__ */ React14.createElement(Box, {
1608
- shape
1609
- });
1610
- } finally {
1611
- _effect.f();
1612
- }
1528
+ return /* @__PURE__ */ React14.createElement(Box, {
1529
+ shape
1530
+ });
1613
1531
  };
1614
1532
  var createJson = (props) => createShape({
1615
1533
  type: "json",
@@ -1656,8 +1574,7 @@ var jsonTransformShape = {
1656
1574
  };
1657
1575
 
1658
1576
  // src/shapes/Logic.tsx
1659
- import { useSignals as _useSignals14 } from "@preact-signals/safe-react/tracking";
1660
- import { Schema as Schema14 } from "effect";
1577
+ import * as Schema14 from "effect/Schema";
1661
1578
  import React15 from "react";
1662
1579
  import { IfElseInput, IfElseOutput, IfInput, IfOutput } from "@dxos/conductor";
1663
1580
  var IfShape = Schema14.extend(ComputeShape, Schema14.Struct({
@@ -1667,28 +1584,18 @@ var IfElseShape = Schema14.extend(ComputeShape, Schema14.Struct({
1667
1584
  type: Schema14.Literal("if-else")
1668
1585
  }));
1669
1586
  var IfComponent = ({ shape, ...props }) => {
1670
- var _effect = _useSignals14();
1671
- try {
1672
- return /* @__PURE__ */ React15.createElement(FunctionBody, {
1673
- shape,
1674
- inputSchema: IfInput,
1675
- outputSchema: IfOutput
1676
- });
1677
- } finally {
1678
- _effect.f();
1679
- }
1587
+ return /* @__PURE__ */ React15.createElement(FunctionBody, {
1588
+ shape,
1589
+ inputSchema: IfInput,
1590
+ outputSchema: IfOutput
1591
+ });
1680
1592
  };
1681
1593
  var IfElseComponent = ({ shape, ...props }) => {
1682
- var _effect = _useSignals14();
1683
- try {
1684
- return /* @__PURE__ */ React15.createElement(FunctionBody, {
1685
- shape,
1686
- inputSchema: IfElseInput,
1687
- outputSchema: IfElseOutput
1688
- });
1689
- } finally {
1690
- _effect.f();
1691
- }
1594
+ return /* @__PURE__ */ React15.createElement(FunctionBody, {
1595
+ shape,
1596
+ inputSchema: IfElseInput,
1597
+ outputSchema: IfElseOutput
1598
+ });
1692
1599
  };
1693
1600
  var createIf = (props) => createShape({
1694
1601
  type: "if",
@@ -1724,11 +1631,10 @@ var ifElseShape = {
1724
1631
  };
1725
1632
 
1726
1633
  // src/shapes/Queue.tsx
1727
- import { useSignals as _useSignals15 } from "@preact-signals/safe-react/tracking";
1728
- import { Schema as Schema15 } from "effect";
1634
+ import * as Schema15 from "effect/Schema";
1729
1635
  import React16, { Fragment } from "react";
1730
1636
  import { DEFAULT_OUTPUT as DEFAULT_OUTPUT4, QueueInput, QueueOutput } from "@dxos/conductor";
1731
- import { mx as mx2 } from "@dxos/react-ui-theme";
1637
+ import { mx as mx2 } from "@dxos/ui-theme";
1732
1638
  var QueueShape = Schema15.extend(ComputeShape, Schema15.Struct({
1733
1639
  type: Schema15.Literal("queue")
1734
1640
  }));
@@ -1741,50 +1647,40 @@ var createQueue = (props) => createShape({
1741
1647
  ...props
1742
1648
  });
1743
1649
  var QueueComponent = ({ shape }) => {
1744
- var _effect = _useSignals15();
1745
- try {
1746
- const { runtime } = useComputeNodeState(shape);
1747
- const items = runtime.outputs[DEFAULT_OUTPUT4]?.type === "executed" ? runtime.outputs[DEFAULT_OUTPUT4].value : [];
1748
- const handleAction = (action) => {
1749
- if (action === "run") {
1750
- runtime.evalNode();
1751
- }
1752
- };
1753
- return /* @__PURE__ */ React16.createElement(Box, {
1754
- shape,
1755
- status: `${items.length} items`,
1756
- onAction: handleAction
1757
- }, /* @__PURE__ */ React16.createElement("div", {
1758
- className: "flex flex-col w-full overflow-y-scroll divide-y divide-separator"
1759
- }, [
1760
- ...items
1761
- ].map((item, i) => /* @__PURE__ */ React16.createElement(QueueItem, {
1762
- key: i,
1763
- classNames: "p-1 px-2",
1764
- item
1765
- }))));
1766
- } finally {
1767
- _effect.f();
1768
- }
1650
+ const { runtime } = useComputeNodeState(shape);
1651
+ const items = runtime.outputs[DEFAULT_OUTPUT4]?.type === "executed" ? runtime.outputs[DEFAULT_OUTPUT4].value : [];
1652
+ const handleAction = (action) => {
1653
+ if (action === "run") {
1654
+ runtime.evalNode();
1655
+ }
1656
+ };
1657
+ return /* @__PURE__ */ React16.createElement(Box, {
1658
+ shape,
1659
+ status: `${items.length} items`,
1660
+ onAction: handleAction
1661
+ }, /* @__PURE__ */ React16.createElement("div", {
1662
+ className: "flex flex-col is-full overflow-y-auto divide-y divide-separator"
1663
+ }, [
1664
+ ...items
1665
+ ].map((item, i) => /* @__PURE__ */ React16.createElement(QueueItem, {
1666
+ key: i,
1667
+ classNames: "p-1 pli-2",
1668
+ item
1669
+ }))));
1769
1670
  };
1770
1671
  var QueueItem = ({ classNames, item }) => {
1771
- var _effect = _useSignals15();
1772
- try {
1773
- if (typeof item !== "object") {
1774
- return /* @__PURE__ */ React16.createElement("div", {
1775
- className: mx2(classNames, "whitespace-pre-wrap")
1776
- }, item);
1777
- }
1672
+ if (typeof item !== "object") {
1778
1673
  return /* @__PURE__ */ React16.createElement("div", {
1779
- className: mx2("grid grid-cols-[80px,1fr]", classNames)
1780
- }, Object.entries(item).map(([key, value]) => /* @__PURE__ */ React16.createElement(Fragment, {
1781
- key
1782
- }, /* @__PURE__ */ React16.createElement("div", {
1783
- className: "p-1 text-xs text-subdued"
1784
- }, key), /* @__PURE__ */ React16.createElement("div", null, typeof value === "string" ? value : JSON.stringify(value)))));
1785
- } finally {
1786
- _effect.f();
1674
+ className: mx2(classNames, "whitespace-pre-wrap")
1675
+ }, item);
1787
1676
  }
1677
+ return /* @__PURE__ */ React16.createElement("div", {
1678
+ className: mx2("grid grid-cols-[80px,1fr]", classNames)
1679
+ }, Object.entries(item).map(([key, value]) => /* @__PURE__ */ React16.createElement(Fragment, {
1680
+ key
1681
+ }, /* @__PURE__ */ React16.createElement("div", {
1682
+ className: "p-1 text-xs text-subdued"
1683
+ }, key), /* @__PURE__ */ React16.createElement("div", null, typeof value === "string" ? value : JSON.stringify(value)))));
1788
1684
  };
1789
1685
  var queueShape = {
1790
1686
  type: "queue",
@@ -1797,8 +1693,7 @@ var queueShape = {
1797
1693
  };
1798
1694
 
1799
1695
  // src/shapes/RNG.tsx
1800
- import { useSignals as _useSignals16 } from "@preact-signals/safe-react/tracking";
1801
- import { Schema as Schema16 } from "effect";
1696
+ import * as Schema16 from "effect/Schema";
1802
1697
  import React17, { useEffect as useEffect5, useState as useState7 } from "react";
1803
1698
  import { DEFAULT_OUTPUT as DEFAULT_OUTPUT5 } from "@dxos/conductor";
1804
1699
  import { Icon as Icon4 } from "@dxos/react-ui";
@@ -1826,42 +1721,37 @@ var icons = [
1826
1721
  ];
1827
1722
  var pickIcon = () => icons[Math.floor(Math.random() * icons.length)];
1828
1723
  var RandomComponent = ({ shape }) => {
1829
- var _effect = _useSignals16();
1830
- try {
1831
- const { runtime } = useComputeNodeState(shape);
1832
- const [spin, setSpin] = useState7(false);
1833
- const [icon, setIcon] = useState7(pickIcon());
1834
- useEffect5(() => {
1835
- if (!spin) {
1836
- return;
1837
- }
1838
- const i = setInterval(() => setIcon(pickIcon()), 250);
1839
- const t1 = setTimeout(() => clearInterval(i), 900);
1840
- const t2 = setTimeout(() => setSpin(false), 1100);
1841
- return () => {
1842
- clearInterval(i);
1843
- clearTimeout(t1);
1844
- clearTimeout(t2);
1845
- };
1846
- }, [
1847
- spin
1848
- ]);
1849
- const handleClick = (ev) => {
1850
- ev.stopPropagation();
1851
- runtime.setOutput(DEFAULT_OUTPUT5, Math.random());
1852
- setSpin(true);
1724
+ const { runtime } = useComputeNodeState(shape);
1725
+ const [spin, setSpin] = useState7(false);
1726
+ const [icon, setIcon] = useState7(pickIcon());
1727
+ useEffect5(() => {
1728
+ if (!spin) {
1729
+ return;
1730
+ }
1731
+ const i = setInterval(() => setIcon(pickIcon()), 250);
1732
+ const t1 = setTimeout(() => clearInterval(i), 900);
1733
+ const t2 = setTimeout(() => setSpin(false), 1100);
1734
+ return () => {
1735
+ clearInterval(i);
1736
+ clearTimeout(t1);
1737
+ clearTimeout(t2);
1853
1738
  };
1854
- return /* @__PURE__ */ React17.createElement("div", {
1855
- className: "flex grow items-center justify-center"
1856
- }, /* @__PURE__ */ React17.createElement(Icon4, {
1857
- icon,
1858
- classNames: spin && "animate-[spin_1s]",
1859
- size: 10,
1860
- onClick: handleClick
1861
- }));
1862
- } finally {
1863
- _effect.f();
1864
- }
1739
+ }, [
1740
+ spin
1741
+ ]);
1742
+ const handleClick = (ev) => {
1743
+ ev.stopPropagation();
1744
+ runtime.setOutput(DEFAULT_OUTPUT5, Math.random());
1745
+ setSpin(true);
1746
+ };
1747
+ return /* @__PURE__ */ React17.createElement("div", {
1748
+ className: "flex grow items-center justify-center"
1749
+ }, /* @__PURE__ */ React17.createElement(Icon4, {
1750
+ icon,
1751
+ classNames: spin && "animate-[spin_1s]",
1752
+ size: 10,
1753
+ onClick: handleClick
1754
+ }));
1865
1755
  };
1866
1756
  var randomShape = {
1867
1757
  type: "rng",
@@ -1878,8 +1768,7 @@ var randomShape = {
1878
1768
  };
1879
1769
 
1880
1770
  // src/shapes/Scope.tsx
1881
- import { useSignals as _useSignals17 } from "@preact-signals/safe-react/tracking";
1882
- import { Schema as Schema17 } from "effect";
1771
+ import * as Schema17 from "effect/Schema";
1883
1772
  import React18 from "react";
1884
1773
  import { DEFAULT_INPUT as DEFAULT_INPUT5 } from "@dxos/conductor";
1885
1774
  import { createAnchorMap as createAnchorMap8 } from "@dxos/react-ui-canvas-editor";
@@ -1897,25 +1786,20 @@ var createScope = (props) => createShape({
1897
1786
  ...props
1898
1787
  });
1899
1788
  var ScopeComponent = ({ shape }) => {
1900
- var _effect = _useSignals17();
1901
- try {
1902
- const { runtime } = useComputeNodeState(shape);
1903
- const input = runtime.inputs[DEFAULT_INPUT5];
1904
- const active = input?.type === "executed" ? input.value : false;
1905
- const { getAverage } = useAudioStream(active);
1906
- return /* @__PURE__ */ React18.createElement("div", {
1907
- className: "flex w-full justify-center items-center bg-black"
1908
- }, /* @__PURE__ */ React18.createElement(Chaos, {
1909
- active,
1910
- getValue: getAverage,
1911
- options: {
1912
- ...shaderPresets.heptapod,
1913
- zoom: 1.2
1914
- }
1915
- }));
1916
- } finally {
1917
- _effect.f();
1918
- }
1789
+ const { runtime } = useComputeNodeState(shape);
1790
+ const input = runtime.inputs[DEFAULT_INPUT5];
1791
+ const active = input?.type === "executed" ? input.value : false;
1792
+ const { getAverage } = useAudioStream(active);
1793
+ return /* @__PURE__ */ React18.createElement("div", {
1794
+ className: "flex is-full justify-center items-center bg-black"
1795
+ }, /* @__PURE__ */ React18.createElement(Chaos, {
1796
+ active,
1797
+ getValue: getAverage,
1798
+ options: {
1799
+ ...shaderPresets.heptapod,
1800
+ zoom: 1.2
1801
+ }
1802
+ }));
1919
1803
  };
1920
1804
  var scopeShape = {
1921
1805
  type: "scope",
@@ -1932,10 +1816,9 @@ var scopeShape = {
1932
1816
  };
1933
1817
 
1934
1818
  // src/shapes/Surface.tsx
1935
- import { useSignals as _useSignals18 } from "@preact-signals/safe-react/tracking";
1936
- import { Schema as Schema18 } from "effect";
1819
+ import * as Schema18 from "effect/Schema";
1937
1820
  import React19 from "react";
1938
- import { Surface } from "@dxos/app-framework";
1821
+ import { Surface } from "@dxos/app-framework/react";
1939
1822
  import { DEFAULT_INPUT as DEFAULT_INPUT6 } from "@dxos/conductor";
1940
1823
  import { createAnchorMap as createAnchorMap9 } from "@dxos/react-ui-canvas-editor";
1941
1824
  var SurfaceShape = Schema18.extend(ComputeShape, Schema18.Struct({
@@ -1950,29 +1833,24 @@ var createSurface = (props) => createShape({
1950
1833
  ...props
1951
1834
  });
1952
1835
  var SurfaceComponent = ({ shape }) => {
1953
- var _effect = _useSignals18();
1954
- try {
1955
- const { runtime } = useComputeNodeState(shape);
1956
- const input = runtime.inputs[DEFAULT_INPUT6];
1957
- const value = input?.type === "executed" ? input.value : null;
1958
- const handleAction = (action) => {
1959
- if (action === "run") {
1960
- runtime.evalNode();
1961
- }
1962
- };
1963
- return /* @__PURE__ */ React19.createElement(Box, {
1964
- shape,
1965
- onAction: handleAction
1966
- }, value !== null && /* @__PURE__ */ React19.createElement(Surface, {
1967
- role: "card--extrinsic",
1968
- data: {
1969
- value
1970
- },
1971
- limit: 1
1972
- }));
1973
- } finally {
1974
- _effect.f();
1975
- }
1836
+ const { runtime } = useComputeNodeState(shape);
1837
+ const input = runtime.inputs[DEFAULT_INPUT6];
1838
+ const value = input?.type === "executed" ? input.value : null;
1839
+ const handleAction = (action) => {
1840
+ if (action === "run") {
1841
+ runtime.evalNode();
1842
+ }
1843
+ };
1844
+ return /* @__PURE__ */ React19.createElement(Box, {
1845
+ shape,
1846
+ onAction: handleAction
1847
+ }, value !== null && /* @__PURE__ */ React19.createElement(Surface, {
1848
+ role: "card--extrinsic",
1849
+ data: {
1850
+ value
1851
+ },
1852
+ limit: 1
1853
+ }));
1976
1854
  };
1977
1855
  var surfaceShape = {
1978
1856
  type: "surface",
@@ -1990,8 +1868,7 @@ var surfaceShape = {
1990
1868
  };
1991
1869
 
1992
1870
  // src/shapes/Switch.tsx
1993
- import { useSignals as _useSignals19 } from "@preact-signals/safe-react/tracking";
1994
- import { Schema as Schema19 } from "effect";
1871
+ import * as Schema19 from "effect/Schema";
1995
1872
  import React20, { useEffect as useEffect6, useState as useState8 } from "react";
1996
1873
  import { DEFAULT_OUTPUT as DEFAULT_OUTPUT6 } from "@dxos/conductor";
1997
1874
  import { Input as Input2 } from "@dxos/react-ui";
@@ -2008,25 +1885,20 @@ var createSwitch = (props) => createShape({
2008
1885
  ...props
2009
1886
  });
2010
1887
  var SwitchComponent = ({ shape }) => {
2011
- var _effect = _useSignals19();
2012
- try {
2013
- const { runtime } = useComputeNodeState(shape);
2014
- const [value, setValue] = useState8(false);
2015
- useEffect6(() => {
2016
- runtime.setOutput(DEFAULT_OUTPUT6, value);
2017
- }, [
2018
- value
2019
- ]);
2020
- return /* @__PURE__ */ React20.createElement("div", {
2021
- className: "flex w-full justify-center items-center",
2022
- onClick: (ev) => ev.stopPropagation()
2023
- }, /* @__PURE__ */ React20.createElement(Input2.Root, null, /* @__PURE__ */ React20.createElement(Input2.Switch, {
2024
- checked: value,
2025
- onCheckedChange: (value2) => setValue(value2)
2026
- })));
2027
- } finally {
2028
- _effect.f();
2029
- }
1888
+ const { runtime } = useComputeNodeState(shape);
1889
+ const [value, setValue] = useState8(false);
1890
+ useEffect6(() => {
1891
+ runtime.setOutput(DEFAULT_OUTPUT6, value);
1892
+ }, [
1893
+ value
1894
+ ]);
1895
+ return /* @__PURE__ */ React20.createElement("div", {
1896
+ className: "flex is-full justify-center items-center",
1897
+ onClick: (ev) => ev.stopPropagation()
1898
+ }, /* @__PURE__ */ React20.createElement(Input2.Root, null, /* @__PURE__ */ React20.createElement(Input2.Switch, {
1899
+ checked: value,
1900
+ onCheckedChange: (value2) => setValue(value2)
1901
+ })));
2030
1902
  };
2031
1903
  var switchShape = {
2032
1904
  type: "switch",
@@ -2043,13 +1915,12 @@ var switchShape = {
2043
1915
  };
2044
1916
 
2045
1917
  // src/shapes/Table.tsx
2046
- import { useSignals as _useSignals20 } from "@preact-signals/safe-react/tracking";
2047
- import { Schema as Schema20 } from "effect";
1918
+ import * as Schema20 from "effect/Schema";
2048
1919
  import React21 from "react";
2049
1920
  import { createInputSchema, createOutputSchema } from "@dxos/conductor";
2050
- import { DataType } from "@dxos/schema";
2051
- var InputSchema = createInputSchema(DataType.Message);
2052
- var OutputSchema = createOutputSchema(Schema20.mutable(Schema20.Array(DataType.Message)));
1921
+ import { Message } from "@dxos/types";
1922
+ var InputSchema = createInputSchema(Message.Message);
1923
+ var OutputSchema = createOutputSchema(Schema20.mutable(Schema20.Array(Message.Message)));
2053
1924
  var TableShape = Schema20.extend(ComputeShape, Schema20.Struct({
2054
1925
  type: Schema20.Literal("table")
2055
1926
  }));
@@ -2062,14 +1933,9 @@ var createTable = (props) => createShape({
2062
1933
  ...props
2063
1934
  });
2064
1935
  var TableComponent = ({ shape }) => {
2065
- var _effect = _useSignals20();
2066
- try {
2067
- return /* @__PURE__ */ React21.createElement(Box, {
2068
- shape
2069
- });
2070
- } finally {
2071
- _effect.f();
2072
- }
1936
+ return /* @__PURE__ */ React21.createElement(Box, {
1937
+ shape
1938
+ });
2073
1939
  };
2074
1940
  var tableShape = {
2075
1941
  type: "table",
@@ -2082,11 +1948,10 @@ var tableShape = {
2082
1948
  };
2083
1949
 
2084
1950
  // src/shapes/Template.tsx
2085
- import { useSignals as _useSignals21 } from "@preact-signals/safe-react/tracking";
2086
- import { Schema as Schema21 } from "effect";
1951
+ import * as Schema21 from "effect/Schema";
2087
1952
  import React22, { useRef as useRef5 } from "react";
2088
1953
  import { ComputeValueType as ComputeValueType3, TemplateOutput, VoidInput as VoidInput2, getTemplateInputSchema as getTemplateInputSchema2 } from "@dxos/conductor";
2089
- import { toJsonSchema as toJsonSchema2 } from "@dxos/echo-schema";
1954
+ import { toJsonSchema } from "@dxos/echo/internal";
2090
1955
  import { invariant as invariant5 } from "@dxos/invariant";
2091
1956
  import { TextBox as TextBox4 } from "@dxos/react-ui-canvas-editor";
2092
1957
  var __dxlog_file6 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/shapes/Template.tsx";
@@ -2095,49 +1960,44 @@ var TemplateShape = Schema21.extend(ComputeShape, Schema21.Struct({
2095
1960
  valueType: Schema21.optional(ComputeValueType3)
2096
1961
  }));
2097
1962
  var TextInputComponent3 = ({ shape, title, ...props }) => {
2098
- var _effect = _useSignals21();
2099
- try {
2100
- const { node } = useComputeNodeState(shape);
2101
- const inputRef = useRef5(null);
2102
- const handleEnter = (text) => {
2103
- const value = text.trim();
2104
- if (value.length) {
2105
- const schema = getTemplateInputSchema2(node);
2106
- node.value = value;
2107
- node.inputSchema = toJsonSchema2(schema);
2108
- }
2109
- };
2110
- const handleTypeChange = (newType) => {
2111
- invariant5(Schema21.is(ComputeValueType3)(newType), "Invalid type", {
2112
- F: __dxlog_file6,
2113
- L: 59,
2114
- S: void 0,
2115
- A: [
2116
- "Schema.is(ComputeValueType)(newType)",
2117
- "'Invalid type'"
2118
- ]
2119
- });
2120
- node.valueType = newType;
2121
- node.inputSchema = toJsonSchema2(getTemplateInputSchema2(node));
2122
- };
2123
- return /* @__PURE__ */ React22.createElement(Box, {
2124
- shape,
2125
- title: "Template",
2126
- status: /* @__PURE__ */ React22.createElement(TypeSelect, {
2127
- value: node.valueType ?? "string",
2128
- onValueChange: handleTypeChange
2129
- })
2130
- }, /* @__PURE__ */ React22.createElement(TextBox4, {
2131
- ...props,
2132
- ref: inputRef,
2133
- value: node.value,
2134
- language: node.valueType === "object" ? "json" : void 0,
2135
- onBlur: handleEnter,
2136
- onEnter: handleEnter
2137
- }));
2138
- } finally {
2139
- _effect.f();
2140
- }
1963
+ const { node } = useComputeNodeState(shape);
1964
+ const inputRef = useRef5(null);
1965
+ const handleEnter = (text) => {
1966
+ const value = text.trim();
1967
+ if (value.length) {
1968
+ const schema = getTemplateInputSchema2(node);
1969
+ node.value = value;
1970
+ node.inputSchema = toJsonSchema(schema);
1971
+ }
1972
+ };
1973
+ const handleTypeChange = (newType) => {
1974
+ invariant5(Schema21.is(ComputeValueType3)(newType), "Invalid type", {
1975
+ F: __dxlog_file6,
1976
+ L: 59,
1977
+ S: void 0,
1978
+ A: [
1979
+ "Schema.is(ComputeValueType)(newType)",
1980
+ "'Invalid type'"
1981
+ ]
1982
+ });
1983
+ node.valueType = newType;
1984
+ node.inputSchema = toJsonSchema(getTemplateInputSchema2(node));
1985
+ };
1986
+ return /* @__PURE__ */ React22.createElement(Box, {
1987
+ shape,
1988
+ title: "Template",
1989
+ status: /* @__PURE__ */ React22.createElement(TypeSelect, {
1990
+ value: node.valueType ?? "string",
1991
+ onValueChange: handleTypeChange
1992
+ })
1993
+ }, /* @__PURE__ */ React22.createElement(TextBox4, {
1994
+ ...props,
1995
+ ref: inputRef,
1996
+ value: node.value,
1997
+ language: node.valueType === "object" ? "json" : void 0,
1998
+ onBlur: handleEnter,
1999
+ onEnter: handleEnter
2000
+ }));
2141
2001
  };
2142
2002
  var createTemplate = (props) => createShape({
2143
2003
  type: "template",
@@ -2161,8 +2021,7 @@ var templateShape = {
2161
2021
  };
2162
2022
 
2163
2023
  // src/shapes/Text.tsx
2164
- import { useSignals as _useSignals22 } from "@preact-signals/safe-react/tracking";
2165
- import { Schema as Schema22 } from "effect";
2024
+ import * as Schema22 from "effect/Schema";
2166
2025
  import React23 from "react";
2167
2026
  import { DEFAULT_INPUT as DEFAULT_INPUT7 } from "@dxos/conductor";
2168
2027
  import { TextBox as TextBox5 } from "@dxos/react-ui-canvas-editor";
@@ -2179,25 +2038,20 @@ var createText = (props) => createShape({
2179
2038
  ...props
2180
2039
  });
2181
2040
  var TextComponent = ({ shape }) => {
2182
- var _effect = _useSignals22();
2183
- try {
2184
- const { runtime } = useComputeNodeState(shape);
2185
- const input = runtime.inputs[DEFAULT_INPUT7];
2186
- const value = input?.type === "executed" ? input.value : 0;
2187
- const handleAction = (action) => {
2188
- if (action === "run") {
2189
- runtime.evalNode();
2190
- }
2191
- };
2192
- return /* @__PURE__ */ React23.createElement(Box, {
2193
- shape,
2194
- onAction: handleAction
2195
- }, /* @__PURE__ */ React23.createElement(TextBox5, {
2196
- value
2197
- }));
2198
- } finally {
2199
- _effect.f();
2200
- }
2041
+ const { runtime } = useComputeNodeState(shape);
2042
+ const input = runtime.inputs[DEFAULT_INPUT7];
2043
+ const value = input?.type === "executed" ? input.value : 0;
2044
+ const handleAction = (action) => {
2045
+ if (action === "run") {
2046
+ runtime.evalNode();
2047
+ }
2048
+ };
2049
+ return /* @__PURE__ */ React23.createElement(Box, {
2050
+ shape,
2051
+ onAction: handleAction
2052
+ }, /* @__PURE__ */ React23.createElement(TextBox5, {
2053
+ value
2054
+ }));
2201
2055
  };
2202
2056
  var textShape = {
2203
2057
  type: "text",
@@ -2215,14 +2069,13 @@ var textShape = {
2215
2069
  };
2216
2070
 
2217
2071
  // src/shapes/Thread.tsx
2218
- import { useSignals as _useSignals23 } from "@preact-signals/safe-react/tracking";
2219
- import { Schema as Schema23 } from "effect";
2072
+ import * as Schema23 from "effect/Schema";
2220
2073
  import React24, { useEffect as useEffect7, useRef as useRef6 } from "react";
2221
2074
  import { createInputSchema as createInputSchema2, createOutputSchema as createOutputSchema2 } from "@dxos/conductor";
2222
- import { mx as mx3 } from "@dxos/react-ui-theme";
2223
- import { DataType as DataType2 } from "@dxos/schema";
2224
- var InputSchema2 = createInputSchema2(DataType2.Message);
2225
- var OutputSchema2 = createOutputSchema2(Schema23.mutable(Schema23.Array(DataType2.Message)));
2075
+ import { Message as Message2 } from "@dxos/types";
2076
+ import { mx as mx3 } from "@dxos/ui-theme";
2077
+ var InputSchema2 = createInputSchema2(Message2.Message);
2078
+ var OutputSchema2 = createOutputSchema2(Schema23.mutable(Schema23.Array(Message2.Message)));
2226
2079
  var ThreadShape = Schema23.extend(ComputeShape, Schema23.Struct({
2227
2080
  type: Schema23.Literal("thread")
2228
2081
  }));
@@ -2235,49 +2088,39 @@ var createThread = (props) => createShape({
2235
2088
  ...props
2236
2089
  });
2237
2090
  var ThreadComponent = ({ shape }) => {
2238
- var _effect = _useSignals23();
2239
- try {
2240
- const items = [];
2241
- const scrollRef = useRef6(null);
2242
- useEffect7(() => {
2243
- if (scrollRef.current) {
2244
- scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
2245
- }
2246
- }, [
2247
- items
2248
- ]);
2249
- return /* @__PURE__ */ React24.createElement(Box, {
2250
- shape
2251
- }, /* @__PURE__ */ React24.createElement("div", {
2252
- ref: scrollRef,
2253
- className: "flex flex-col w-full overflow-y-scroll gap-2 p-2"
2254
- }, [
2255
- ...items
2256
- ].map((item, i) => /* @__PURE__ */ React24.createElement(ThreadItem, {
2257
- key: i,
2258
- item
2259
- }))));
2260
- } finally {
2261
- _effect.f();
2262
- }
2091
+ const items = [];
2092
+ const scrollRef = useRef6(null);
2093
+ useEffect7(() => {
2094
+ if (scrollRef.current) {
2095
+ scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
2096
+ }
2097
+ }, [
2098
+ items
2099
+ ]);
2100
+ return /* @__PURE__ */ React24.createElement(Box, {
2101
+ shape
2102
+ }, /* @__PURE__ */ React24.createElement("div", {
2103
+ ref: scrollRef,
2104
+ className: "flex flex-col is-full overflow-y-auto gap-2 p-2"
2105
+ }, [
2106
+ ...items
2107
+ ].map((item, i) => /* @__PURE__ */ React24.createElement(ThreadItem, {
2108
+ key: i,
2109
+ item
2110
+ }))));
2263
2111
  };
2264
2112
  var ThreadItem = ({ classNames, item }) => {
2265
- var _effect = _useSignals23();
2266
- try {
2267
- if (typeof item !== "object") {
2268
- return /* @__PURE__ */ React24.createElement("div", {
2269
- className: mx3(classNames)
2270
- }, item);
2271
- }
2272
- const { role, message } = item;
2113
+ if (typeof item !== "object") {
2273
2114
  return /* @__PURE__ */ React24.createElement("div", {
2274
- className: mx3("flex", classNames, role === "user" && "justify-end")
2275
- }, /* @__PURE__ */ React24.createElement("div", {
2276
- className: mx3("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")
2277
- }, message));
2278
- } finally {
2279
- _effect.f();
2115
+ className: mx3(classNames)
2116
+ }, item);
2280
2117
  }
2118
+ const { role, message } = item;
2119
+ return /* @__PURE__ */ React24.createElement("div", {
2120
+ className: mx3("flex", classNames, role === "user" && "justify-end")
2121
+ }, /* @__PURE__ */ React24.createElement("div", {
2122
+ className: mx3("block rounded-md p-1 pli-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")
2123
+ }, message));
2281
2124
  };
2282
2125
  var threadShape = {
2283
2126
  type: "thread",
@@ -2290,8 +2133,7 @@ var threadShape = {
2290
2133
  };
2291
2134
 
2292
2135
  // src/shapes/TextToImage.tsx
2293
- import { useSignals as _useSignals24 } from "@preact-signals/safe-react/tracking";
2294
- import { Schema as Schema24 } from "effect";
2136
+ import * as Schema24 from "effect/Schema";
2295
2137
  import React25 from "react";
2296
2138
  import { createAnchorMap as createAnchorMap12 } from "@dxos/react-ui-canvas-editor";
2297
2139
  var TextToImageShape = Schema24.extend(ComputeShape, Schema24.Struct({
@@ -2306,14 +2148,9 @@ var createTextToImage = (props) => createShape({
2306
2148
  ...props
2307
2149
  });
2308
2150
  var TextToImageComponent = ({ shape }) => {
2309
- var _effect = _useSignals24();
2310
- try {
2311
- return /* @__PURE__ */ React25.createElement(Box, {
2312
- shape
2313
- });
2314
- } finally {
2315
- _effect.f();
2316
- }
2151
+ return /* @__PURE__ */ React25.createElement(Box, {
2152
+ shape
2153
+ });
2317
2154
  };
2318
2155
  var textToImageShape = {
2319
2156
  type: "text-to-image",
@@ -2330,22 +2167,20 @@ var textToImageShape = {
2330
2167
  };
2331
2168
 
2332
2169
  // src/shapes/Trigger.tsx
2333
- import { useSignals as _useSignals25 } from "@preact-signals/safe-react/tracking";
2334
- import { Schema as Schema25 } from "effect";
2170
+ import * as Schema25 from "effect/Schema";
2335
2171
  import React26, { useEffect as useEffect8 } from "react";
2336
2172
  import { VoidInput as VoidInput3 } from "@dxos/conductor";
2337
- import { Filter as Filter2, Obj, Query } from "@dxos/echo";
2338
- import { ObjectId as ObjectId4, Ref as Ref3 } from "@dxos/echo-schema";
2339
- import { EmailTriggerOutput, FunctionTrigger, QueueTriggerOutput, SubscriptionTriggerOutput, TimerTriggerOutput, TriggerKinds, WebhookTriggerOutput } from "@dxos/functions";
2173
+ import { Filter as Filter2, Obj as Obj4, Query, Ref as Ref3, Type } from "@dxos/echo";
2174
+ import { Trigger, TriggerEvent } from "@dxos/functions";
2340
2175
  import { DXN, SpaceId } from "@dxos/keys";
2341
2176
  import { useSpace } from "@dxos/react-client/echo";
2342
2177
  import { Select as Select2 } from "@dxos/react-ui";
2343
2178
  var TriggerShape = Schema25.extend(ComputeShape, Schema25.Struct({
2344
2179
  type: Schema25.Literal("trigger"),
2345
- functionTrigger: Schema25.optional(Ref3(FunctionTrigger))
2180
+ functionTrigger: Schema25.optional(Type.Ref(Trigger.Trigger))
2346
2181
  }));
2347
2182
  var createTrigger = (props) => {
2348
- const functionTrigger = Obj.make(FunctionTrigger, {
2183
+ const functionTrigger = Trigger.make({
2349
2184
  enabled: true,
2350
2185
  spec: createTriggerSpec(props)
2351
2186
  });
@@ -2354,72 +2189,66 @@ var createTrigger = (props) => {
2354
2189
  functionTrigger: Ref3.make(functionTrigger),
2355
2190
  size: {
2356
2191
  width: 192,
2357
- height: getHeight(EmailTriggerOutput)
2192
+ height: getHeight(TriggerEvent.EmailEvent)
2358
2193
  },
2359
2194
  ...props
2360
2195
  });
2361
2196
  };
2362
2197
  var TriggerComponent = ({ shape }) => {
2363
- var _effect = _useSignals25();
2364
- try {
2365
- const space = useSpace();
2366
- const functionTrigger = shape.functionTrigger?.target;
2367
- useEffect8(() => {
2368
- if (functionTrigger && !functionTrigger.spec) {
2369
- functionTrigger.spec = createTriggerSpec({
2198
+ const space = useSpace();
2199
+ const functionTrigger = shape.functionTrigger?.target;
2200
+ useEffect8(() => {
2201
+ if (functionTrigger && !functionTrigger.spec) {
2202
+ Obj4.change(functionTrigger, (t) => {
2203
+ t.spec = createTriggerSpec({
2370
2204
  triggerKind: "email",
2371
2205
  spaceId: space?.id
2372
2206
  });
2373
- }
2374
- }, [
2375
- functionTrigger,
2376
- functionTrigger?.spec
2377
- ]);
2378
- useEffect8(() => {
2379
- shape.size.height = getHeight(getOutputSchema(functionTrigger?.spec?.kind ?? "email"));
2380
- }, [
2381
- functionTrigger?.spec?.kind
2382
- ]);
2383
- const setKind = (kind) => {
2384
- if (functionTrigger?.spec?.kind !== kind) {
2385
- functionTrigger.spec = createTriggerSpec({
2207
+ });
2208
+ }
2209
+ }, [
2210
+ functionTrigger,
2211
+ functionTrigger?.spec
2212
+ ]);
2213
+ useEffect8(() => {
2214
+ shape.size.height = getHeight(getOutputSchema(functionTrigger?.spec?.kind ?? "email"));
2215
+ }, [
2216
+ functionTrigger?.spec?.kind
2217
+ ]);
2218
+ const setKind = (kind) => {
2219
+ if (functionTrigger?.spec?.kind !== kind) {
2220
+ Obj4.change(functionTrigger, (t) => {
2221
+ t.spec = createTriggerSpec({
2386
2222
  triggerKind: kind,
2387
2223
  spaceId: space?.id
2388
2224
  });
2389
- }
2390
- };
2391
- if (!functionTrigger?.spec) {
2392
- return;
2225
+ });
2393
2226
  }
2394
- return /* @__PURE__ */ React26.createElement(FunctionBody, {
2395
- shape,
2396
- status: /* @__PURE__ */ React26.createElement(TriggerKindSelect, {
2397
- value: functionTrigger.spec?.kind,
2398
- onValueChange: (kind) => setKind(kind)
2399
- }),
2400
- inputSchema: VoidInput3,
2401
- outputSchema: getOutputSchema(functionTrigger.spec.kind)
2402
- });
2403
- } finally {
2404
- _effect.f();
2227
+ };
2228
+ if (!functionTrigger?.spec) {
2229
+ return;
2405
2230
  }
2231
+ return /* @__PURE__ */ React26.createElement(FunctionBody, {
2232
+ shape,
2233
+ status: /* @__PURE__ */ React26.createElement(TriggerKindSelect, {
2234
+ value: functionTrigger.spec?.kind,
2235
+ onValueChange: (kind) => setKind(kind)
2236
+ }),
2237
+ inputSchema: VoidInput3,
2238
+ outputSchema: getOutputSchema(functionTrigger.spec.kind)
2239
+ });
2406
2240
  };
2407
2241
  var TriggerKindSelect = ({ value, onValueChange }) => {
2408
- var _effect = _useSignals25();
2409
- try {
2410
- return /* @__PURE__ */ React26.createElement(Select2.Root, {
2411
- value,
2412
- onValueChange
2413
- }, /* @__PURE__ */ React26.createElement(Select2.TriggerButton, {
2414
- variant: "ghost",
2415
- classNames: "w-full !px-0"
2416
- }), /* @__PURE__ */ React26.createElement(Select2.Portal, null, /* @__PURE__ */ React26.createElement(Select2.Content, null, /* @__PURE__ */ React26.createElement(Select2.ScrollUpButton, null), /* @__PURE__ */ React26.createElement(Select2.Viewport, null, TriggerKinds.map((kind) => /* @__PURE__ */ React26.createElement(Select2.Option, {
2417
- key: kind,
2418
- value: kind
2419
- }, kind))), /* @__PURE__ */ React26.createElement(Select2.ScrollDownButton, null), /* @__PURE__ */ React26.createElement(Select2.Arrow, null))));
2420
- } finally {
2421
- _effect.f();
2422
- }
2242
+ return /* @__PURE__ */ React26.createElement(Select2.Root, {
2243
+ value,
2244
+ onValueChange
2245
+ }, /* @__PURE__ */ React26.createElement(Select2.TriggerButton, {
2246
+ variant: "ghost",
2247
+ classNames: "is-full !pli-0"
2248
+ }), /* @__PURE__ */ React26.createElement(Select2.Portal, null, /* @__PURE__ */ React26.createElement(Select2.Content, null, /* @__PURE__ */ React26.createElement(Select2.ScrollUpButton, null), /* @__PURE__ */ React26.createElement(Select2.Viewport, null, Trigger.Kinds.map((kind) => /* @__PURE__ */ React26.createElement(Select2.Option, {
2249
+ key: kind,
2250
+ value: kind
2251
+ }, kind))), /* @__PURE__ */ React26.createElement(Select2.ScrollDownButton, null), /* @__PURE__ */ React26.createElement(Select2.Arrow, null))));
2423
2252
  };
2424
2253
  var createTriggerSpec = (props) => {
2425
2254
  const kind = props.triggerKind ?? "email";
@@ -2437,7 +2266,9 @@ var createTriggerSpec = (props) => {
2437
2266
  case "subscription":
2438
2267
  return {
2439
2268
  kind: "subscription",
2440
- query: Query.select(Filter2.nothing()).ast
2269
+ query: {
2270
+ ast: Query.select(Filter2.nothing()).ast
2271
+ }
2441
2272
  };
2442
2273
  case "email":
2443
2274
  return {
@@ -2447,7 +2278,7 @@ var createTriggerSpec = (props) => {
2447
2278
  const dxn = new DXN(DXN.kind.QUEUE, [
2448
2279
  "data",
2449
2280
  props.spaceId ?? SpaceId.random(),
2450
- ObjectId4.random()
2281
+ Obj4.ID.random()
2451
2282
  ]).toString();
2452
2283
  return {
2453
2284
  kind: "queue",
@@ -2458,11 +2289,11 @@ var createTriggerSpec = (props) => {
2458
2289
  };
2459
2290
  var getOutputSchema = (kind) => {
2460
2291
  const kindToSchema = {
2461
- ["email"]: EmailTriggerOutput,
2462
- ["subscription"]: SubscriptionTriggerOutput,
2463
- ["timer"]: TimerTriggerOutput,
2464
- ["webhook"]: WebhookTriggerOutput,
2465
- ["queue"]: QueueTriggerOutput
2292
+ ["email"]: TriggerEvent.EmailEvent,
2293
+ ["subscription"]: TriggerEvent.SubscriptionEvent,
2294
+ ["timer"]: TriggerEvent.TimerEvent,
2295
+ ["webhook"]: TriggerEvent.WebhookEvent,
2296
+ ["queue"]: TriggerEvent.QueueEvent
2466
2297
  };
2467
2298
  return kindToSchema[kind];
2468
2299
  };
@@ -2476,8 +2307,7 @@ var triggerShape = {
2476
2307
  };
2477
2308
 
2478
2309
  // src/shapes/GptRealtime.tsx
2479
- import { useSignals as _useSignals26 } from "@preact-signals/safe-react/tracking";
2480
- import { Schema as Schema26 } from "effect";
2310
+ import * as Schema26 from "effect/Schema";
2481
2311
  import React27, { useState as useState9 } from "react";
2482
2312
  import { log as log2 } from "@dxos/log";
2483
2313
  import { useConfig } from "@dxos/react-client";
@@ -2495,105 +2325,100 @@ var createGptRealtime = (props) => createShape({
2495
2325
  ...props
2496
2326
  });
2497
2327
  var GptRealtimeComponent = ({ shape }) => {
2498
- var _effect = _useSignals26();
2499
- try {
2500
- const [isLive, setIsLive] = useState9(false);
2501
- const [isReady, setIsReady] = useState9(false);
2502
- const config = useConfig();
2503
- const start = async () => {
2504
- setIsLive(true);
2505
- try {
2506
- const peerConnection = new RTCPeerConnection();
2507
- peerConnection.ontrack = (event) => {
2508
- const audioElement = document.createElement("audio");
2509
- audioElement.srcObject = event.streams[0];
2510
- audioElement.autoplay = true;
2511
- audioElement.controls = false;
2512
- audioElement.style.display = "none";
2513
- document.body.appendChild(audioElement);
2514
- setIsReady(true);
2515
- };
2516
- const stream = await navigator.mediaDevices.getUserMedia({
2517
- audio: true
2328
+ const [isLive, setIsLive] = useState9(false);
2329
+ const [isReady, setIsReady] = useState9(false);
2330
+ const config = useConfig();
2331
+ const start = async () => {
2332
+ setIsLive(true);
2333
+ try {
2334
+ const peerConnection = new RTCPeerConnection();
2335
+ peerConnection.ontrack = (event) => {
2336
+ const audioElement = document.createElement("audio");
2337
+ audioElement.srcObject = event.streams[0];
2338
+ audioElement.autoplay = true;
2339
+ audioElement.controls = false;
2340
+ audioElement.style.display = "none";
2341
+ document.body.appendChild(audioElement);
2342
+ setIsReady(true);
2343
+ };
2344
+ const stream = await navigator.mediaDevices.getUserMedia({
2345
+ audio: true
2346
+ });
2347
+ stream.getTracks().forEach((track) => peerConnection.addTransceiver(track, {
2348
+ direction: "sendrecv"
2349
+ }));
2350
+ const offer = await peerConnection.createOffer();
2351
+ await peerConnection.setLocalDescription(offer);
2352
+ const AiServiceUrl = new URL("/rtc-connect", config.values.runtime?.services?.ai?.server ?? DEFAULT_AI_SERVICE_URL);
2353
+ const response = await fetch(AiServiceUrl, {
2354
+ method: "POST",
2355
+ body: offer.sdp,
2356
+ headers: {
2357
+ "Content-Type": "application/sdp"
2358
+ }
2359
+ });
2360
+ const answer = await response.text();
2361
+ await peerConnection.setRemoteDescription({
2362
+ sdp: answer,
2363
+ type: "answer"
2364
+ });
2365
+ const dataChannel = peerConnection.createDataChannel("response");
2366
+ const configureData = () => {
2367
+ log2.info("Configuring data channel", void 0, {
2368
+ F: __dxlog_file7,
2369
+ L: 87,
2370
+ S: void 0,
2371
+ C: (f, a) => f(...a)
2518
2372
  });
2519
- stream.getTracks().forEach((track) => peerConnection.addTransceiver(track, {
2520
- direction: "sendrecv"
2521
- }));
2522
- const offer = await peerConnection.createOffer();
2523
- await peerConnection.setLocalDescription(offer);
2524
- const AiServiceUrl = new URL("/rtc-connect", config.values.runtime?.services?.ai?.server ?? DEFAULT_AI_SERVICE_URL);
2525
- const response = await fetch(AiServiceUrl, {
2526
- method: "POST",
2527
- body: offer.sdp,
2528
- headers: {
2529
- "Content-Type": "application/sdp"
2373
+ const event = {
2374
+ type: "session.update",
2375
+ session: {
2376
+ modalities: [
2377
+ "text",
2378
+ "audio"
2379
+ ],
2380
+ // Provide the tools. Note they match the keys in the `fns` object above
2381
+ tools: []
2530
2382
  }
2531
- });
2532
- const answer = await response.text();
2533
- await peerConnection.setRemoteDescription({
2534
- sdp: answer,
2535
- type: "answer"
2536
- });
2537
- const dataChannel = peerConnection.createDataChannel("response");
2538
- const configureData = () => {
2539
- log2.info("Configuring data channel", void 0, {
2540
- F: __dxlog_file7,
2541
- L: 87,
2542
- S: void 0,
2543
- C: (f, a) => f(...a)
2544
- });
2545
- const event = {
2546
- type: "session.update",
2547
- session: {
2548
- modalities: [
2549
- "text",
2550
- "audio"
2551
- ],
2552
- // Provide the tools. Note they match the keys in the `fns` object above
2553
- tools: []
2554
- }
2555
- };
2556
- dataChannel.send(JSON.stringify(event));
2557
2383
  };
2558
- dataChannel.addEventListener("open", (ev) => {
2559
- log2.info("Opening data channel", {
2560
- ev
2561
- }, {
2562
- F: __dxlog_file7,
2563
- L: 100,
2564
- S: void 0,
2565
- C: (f, a) => f(...a)
2566
- });
2567
- configureData();
2568
- });
2569
- dataChannel.addEventListener("message", async (ev) => {
2570
- const msg = JSON.parse(ev.data);
2571
- if (msg.type === "response.function_call_arguments.done") {
2572
- }
2573
- });
2574
- } catch (error) {
2575
- log2.error("Error in realtime session:", {
2576
- error
2384
+ dataChannel.send(JSON.stringify(event));
2385
+ };
2386
+ dataChannel.addEventListener("open", (ev) => {
2387
+ log2.info("Opening data channel", {
2388
+ ev
2577
2389
  }, {
2578
2390
  F: __dxlog_file7,
2579
- L: 140,
2391
+ L: 100,
2580
2392
  S: void 0,
2581
2393
  C: (f, a) => f(...a)
2582
2394
  });
2583
- throw error;
2584
- }
2585
- };
2586
- return /* @__PURE__ */ React27.createElement("div", {
2587
- className: "flex w-full justify-center items-center"
2588
- }, /* @__PURE__ */ React27.createElement(Icon5, {
2589
- icon: isReady ? "ph--waveform--regular" : isLive ? "ph--pulse--regular" : "ph--play--regular",
2590
- size: 16,
2591
- classNames: !isLive && "cursor-pointer",
2592
- onClick: start
2593
- }));
2594
- } finally {
2595
- _effect.f();
2596
- }
2395
+ configureData();
2396
+ });
2397
+ dataChannel.addEventListener("message", async (ev) => {
2398
+ const msg = JSON.parse(ev.data);
2399
+ if (msg.type === "response.function_call_arguments.done") {
2400
+ }
2401
+ });
2402
+ } catch (error) {
2403
+ log2.error("Error in realtime session:", {
2404
+ error
2405
+ }, {
2406
+ F: __dxlog_file7,
2407
+ L: 140,
2408
+ S: void 0,
2409
+ C: (f, a) => f(...a)
2410
+ });
2411
+ throw error;
2412
+ }
2413
+ };
2414
+ return /* @__PURE__ */ React27.createElement("div", {
2415
+ className: "flex is-full justify-center items-center"
2416
+ }, /* @__PURE__ */ React27.createElement(Icon5, {
2417
+ icon: isReady ? "ph--waveform--regular" : isLive ? "ph--pulse--regular" : "ph--play--regular",
2418
+ size: 16,
2419
+ classNames: !isLive && "cursor-pointer",
2420
+ onClick: start
2421
+ }));
2597
2422
  };
2598
2423
  var gptRealtimeShape = {
2599
2424
  type: "gpt-realtime",
@@ -2673,22 +2498,13 @@ var computeShapes = [
2673
2498
 
2674
2499
  // src/compute-layout.ts
2675
2500
  import { DefaultInput, DefaultOutput as DefaultOutput2 } from "@dxos/conductor";
2676
- import { toEffectSchema } from "@dxos/echo-schema";
2501
+ import { toEffectSchema } from "@dxos/echo/internal";
2677
2502
  import { ShapeLayout } from "@dxos/react-ui-canvas-editor";
2678
- function _define_property2(obj, key, value) {
2679
- if (key in obj) {
2680
- Object.defineProperty(obj, key, {
2681
- value,
2682
- enumerable: true,
2683
- configurable: true,
2684
- writable: true
2685
- });
2686
- } else {
2687
- obj[key] = value;
2688
- }
2689
- return obj;
2690
- }
2691
2503
  var ComputeShapeLayout = class extends ShapeLayout {
2504
+ _controller;
2505
+ constructor(_controller, registry2) {
2506
+ super(registry2), this._controller = _controller;
2507
+ }
2692
2508
  // TODO(burdon): Doesn't update.
2693
2509
  getAnchors(shape) {
2694
2510
  const shapeDef = this._registry.getShapeDef(shape.type);
@@ -2703,9 +2519,6 @@ var ComputeShapeLayout = class extends ShapeLayout {
2703
2519
  }
2704
2520
  return anchors;
2705
2521
  }
2706
- constructor(_controller, registry2) {
2707
- super(registry2), _define_property2(this, "_controller", void 0), this._controller = _controller;
2708
- }
2709
2522
  };
2710
2523
  export {
2711
2524
  AndShape,