@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.
- package/dist/lib/browser/index.mjs +779 -966
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +779 -966
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/compute.stories.d.ts +25 -2
- package/dist/types/src/compute.stories.d.ts.map +1 -1
- package/dist/types/src/graph/controller.d.ts +20 -33
- package/dist/types/src/graph/controller.d.ts.map +1 -1
- package/dist/types/src/hooks/useComputeGraphController.d.ts +1 -1
- package/dist/types/src/hooks/useComputeGraphController.d.ts.map +1 -1
- package/dist/types/src/hooks/useComputeNodeState.d.ts +2 -2
- package/dist/types/src/hooks/useComputeNodeState.d.ts.map +1 -1
- package/dist/types/src/hooks/useGraphMonitor.d.ts.map +1 -1
- package/dist/types/src/json.test.d.ts +1 -1
- package/dist/types/src/json.test.d.ts.map +1 -1
- package/dist/types/src/shapes/Append.d.ts +1 -1
- package/dist/types/src/shapes/Append.d.ts.map +1 -1
- package/dist/types/src/shapes/Array.d.ts +1 -1
- package/dist/types/src/shapes/Array.d.ts.map +1 -1
- package/dist/types/src/shapes/Audio.d.ts +1 -1
- package/dist/types/src/shapes/Audio.d.ts.map +1 -1
- package/dist/types/src/shapes/Beacon.d.ts +1 -1
- package/dist/types/src/shapes/Beacon.d.ts.map +1 -1
- package/dist/types/src/shapes/Boolean.d.ts +1 -1
- package/dist/types/src/shapes/Boolean.d.ts.map +1 -1
- package/dist/types/src/shapes/Chat.d.ts +1 -1
- package/dist/types/src/shapes/Chat.d.ts.map +1 -1
- package/dist/types/src/shapes/Constant.d.ts +2 -2
- package/dist/types/src/shapes/Constant.d.ts.map +1 -1
- package/dist/types/src/shapes/Database.d.ts +1 -1
- package/dist/types/src/shapes/Database.d.ts.map +1 -1
- package/dist/types/src/shapes/Function.d.ts +1 -1
- package/dist/types/src/shapes/Function.d.ts.map +1 -1
- package/dist/types/src/shapes/Gpt.d.ts +1 -1
- package/dist/types/src/shapes/Gpt.d.ts.map +1 -1
- package/dist/types/src/shapes/GptRealtime.d.ts +1 -1
- package/dist/types/src/shapes/GptRealtime.d.ts.map +1 -1
- package/dist/types/src/shapes/Json.d.ts +1 -1
- package/dist/types/src/shapes/Json.d.ts.map +1 -1
- package/dist/types/src/shapes/Logic.d.ts +1 -1
- package/dist/types/src/shapes/Logic.d.ts.map +1 -1
- package/dist/types/src/shapes/Queue.d.ts +1 -1
- package/dist/types/src/shapes/Queue.d.ts.map +1 -1
- package/dist/types/src/shapes/RNG.d.ts +1 -1
- package/dist/types/src/shapes/RNG.d.ts.map +1 -1
- package/dist/types/src/shapes/Scope.d.ts +1 -1
- package/dist/types/src/shapes/Scope.d.ts.map +1 -1
- package/dist/types/src/shapes/Surface.d.ts +1 -1
- package/dist/types/src/shapes/Surface.d.ts.map +1 -1
- package/dist/types/src/shapes/Switch.d.ts +1 -1
- package/dist/types/src/shapes/Switch.d.ts.map +1 -1
- package/dist/types/src/shapes/Table.d.ts +1 -1
- package/dist/types/src/shapes/Table.d.ts.map +1 -1
- package/dist/types/src/shapes/Template.d.ts +1 -1
- package/dist/types/src/shapes/Template.d.ts.map +1 -1
- package/dist/types/src/shapes/Text.d.ts +1 -1
- package/dist/types/src/shapes/Text.d.ts.map +1 -1
- package/dist/types/src/shapes/TextToImage.d.ts +1 -1
- package/dist/types/src/shapes/TextToImage.d.ts.map +1 -1
- package/dist/types/src/shapes/Thread.d.ts +1 -1
- package/dist/types/src/shapes/Thread.d.ts.map +1 -1
- package/dist/types/src/shapes/Trigger.d.ts +6 -5
- package/dist/types/src/shapes/Trigger.d.ts.map +1 -1
- package/dist/types/src/shapes/common/Box.d.ts +1 -1
- package/dist/types/src/shapes/common/FunctionBody.d.ts +1 -1
- package/dist/types/src/shapes/common/FunctionBody.d.ts.map +1 -1
- package/dist/types/src/shapes/defs.d.ts +2 -1
- package/dist/types/src/shapes/defs.d.ts.map +1 -1
- package/dist/types/src/testing/circuits.d.ts +18 -24
- package/dist/types/src/testing/circuits.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +56 -52
- package/src/compute-layout.ts +1 -1
- package/src/compute.stories.tsx +71 -115
- package/src/graph/controller.ts +114 -73
- package/src/graph/node-defs.ts +3 -3
- package/src/hooks/useComputeGraphController.ts +1 -1
- package/src/hooks/useComputeNodeState.ts +5 -4
- package/src/hooks/useGraphMonitor.ts +9 -8
- package/src/json.test.ts +4 -4
- package/src/schema.test.ts +9 -9
- package/src/shapes/Append.tsx +1 -1
- package/src/shapes/Array.tsx +1 -1
- package/src/shapes/Audio.tsx +2 -2
- package/src/shapes/Beacon.tsx +2 -2
- package/src/shapes/Boolean.tsx +3 -3
- package/src/shapes/Chat.tsx +1 -1
- package/src/shapes/Constant.tsx +1 -1
- package/src/shapes/Database.tsx +1 -1
- package/src/shapes/Function.tsx +12 -10
- package/src/shapes/Gpt.tsx +2 -2
- package/src/shapes/GptRealtime.tsx +2 -2
- package/src/shapes/Json.tsx +1 -1
- package/src/shapes/Logic.tsx +1 -1
- package/src/shapes/Queue.tsx +9 -5
- package/src/shapes/RNG.tsx +6 -2
- package/src/shapes/Scope.tsx +2 -2
- package/src/shapes/Surface.tsx +7 -3
- package/src/shapes/Switch.tsx +2 -2
- package/src/shapes/Table.tsx +4 -4
- package/src/shapes/Template.tsx +2 -2
- package/src/shapes/Text.tsx +1 -1
- package/src/shapes/TextToImage.tsx +1 -1
- package/src/shapes/Thread.tsx +7 -7
- package/src/shapes/Trigger.tsx +39 -44
- package/src/shapes/common/Box.tsx +6 -6
- package/src/shapes/common/FunctionBody.tsx +4 -3
- package/src/shapes/common/TypeSelect.tsx +1 -1
- package/src/shapes/defs.ts +5 -4
- 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
|
|
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
|
|
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 {
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
251
|
+
L: 114,
|
|
247
252
|
S: void 0,
|
|
248
253
|
A: [
|
|
249
254
|
"functionTrigger",
|
|
250
255
|
""
|
|
251
256
|
]
|
|
252
257
|
});
|
|
253
|
-
functionTrigger
|
|
254
|
-
|
|
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
|
|
258
|
-
if (!
|
|
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
|
-
|
|
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 {
|
|
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:
|
|
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,
|
|
366
|
+
var createComputeGraphController = (graph, computeRuntime) => {
|
|
373
367
|
const computeGraph = createComputeGraph(graph);
|
|
374
|
-
const controller = new ComputeGraphController(
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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.
|
|
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
|
|
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(
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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/
|
|
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
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
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
|
|
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
|
|
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 {
|
|
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(
|
|
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 ??
|
|
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
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
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
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
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
|
-
}
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
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
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
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
|
|
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
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
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
|
|
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
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
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
|
|
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
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
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
|
|
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
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
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
|
|
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
|
|
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: "
|
|
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
|
|
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
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
const
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
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
|
|
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
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
const
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
if (
|
|
1305
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1345
|
-
|
|
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
|
|
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
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
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
|
|
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
|
|
1420
|
-
import {
|
|
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
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
const
|
|
1441
|
-
const
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
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
|
|
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
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
const
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
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
|
-
|
|
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
|
-
}
|
|
1562
|
-
|
|
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
|
|
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
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
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
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
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
|
|
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
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
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
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
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
|
|
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/
|
|
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
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
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
|
-
|
|
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("
|
|
1780
|
-
},
|
|
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
|
|
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
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
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
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
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
|
|
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
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
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
|
|
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
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
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
|
|
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
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
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
|
|
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 {
|
|
2051
|
-
var InputSchema = createInputSchema(
|
|
2052
|
-
var OutputSchema = createOutputSchema(Schema20.mutable(Schema20.Array(
|
|
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
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
const
|
|
2102
|
-
|
|
2103
|
-
const
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
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
|
|
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
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
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
|
|
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 {
|
|
2223
|
-
import {
|
|
2224
|
-
var InputSchema2 = createInputSchema2(
|
|
2225
|
-
var OutputSchema2 = createOutputSchema2(Schema23.mutable(Schema23.Array(
|
|
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
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
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
|
-
|
|
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(
|
|
2275
|
-
},
|
|
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
|
|
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
|
-
|
|
2310
|
-
|
|
2311
|
-
|
|
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
|
|
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 {
|
|
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(
|
|
2180
|
+
functionTrigger: Schema25.optional(Type.Ref(Trigger.Trigger))
|
|
2346
2181
|
}));
|
|
2347
2182
|
var createTrigger = (props) => {
|
|
2348
|
-
const 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(
|
|
2192
|
+
height: getHeight(TriggerEvent.EmailEvent)
|
|
2358
2193
|
},
|
|
2359
2194
|
...props
|
|
2360
2195
|
});
|
|
2361
2196
|
};
|
|
2362
2197
|
var TriggerComponent = ({ shape }) => {
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
|
|
2367
|
-
|
|
2368
|
-
|
|
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
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
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
|
-
|
|
2395
|
-
|
|
2396
|
-
|
|
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
|
-
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
|
|
2417
|
-
|
|
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:
|
|
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
|
-
|
|
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"]:
|
|
2462
|
-
["subscription"]:
|
|
2463
|
-
["timer"]:
|
|
2464
|
-
["webhook"]:
|
|
2465
|
-
["queue"]:
|
|
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
|
|
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
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
const
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
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
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
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.
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
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:
|
|
2391
|
+
L: 100,
|
|
2580
2392
|
S: void 0,
|
|
2581
2393
|
C: (f, a) => f(...a)
|
|
2582
2394
|
});
|
|
2583
|
-
|
|
2584
|
-
}
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
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
|
|
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,
|