@dxos/react-ui-canvas-compute 0.8.4-main.f5c0578 → 0.8.4-main.fcfe5033a5
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 +949 -1120
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +949 -1120
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/compute.stories.d.ts +33 -5
- package/dist/types/src/compute.stories.d.ts.map +1 -1
- package/dist/types/src/graph/controller.d.ts +21 -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 +2 -2
- 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/{Queue.d.ts → Feed.d.ts} +9 -9
- package/dist/types/src/shapes/Feed.d.ts.map +1 -0
- 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/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 +7 -34
- package/dist/types/src/shapes/Trigger.d.ts.map +1 -1
- package/dist/types/src/shapes/common/Box.d.ts +4 -4
- package/dist/types/src/shapes/common/Box.d.ts.map +1 -1
- package/dist/types/src/shapes/common/FunctionBody.d.ts +3 -3
- 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/shapes/index.d.ts +2 -2
- package/dist/types/src/shapes/index.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 +61 -53
- package/src/README.md +0 -3
- package/src/compute-layout.ts +1 -1
- package/src/compute.stories.tsx +97 -123
- package/src/graph/controller.ts +108 -74
- package/src/graph/node-defs.ts +31 -31
- package/src/hooks/useComputeGraphController.ts +1 -1
- package/src/hooks/useComputeNodeState.ts +5 -5
- package/src/hooks/useGraphMonitor.ts +11 -10
- package/src/json.test.ts +4 -4
- package/src/registry.ts +2 -2
- package/src/schema.test.ts +12 -12
- package/src/shapes/Append.tsx +1 -1
- package/src/shapes/Array.tsx +1 -1
- package/src/shapes/Audio.tsx +2 -3
- package/src/shapes/Beacon.tsx +1 -2
- package/src/shapes/Boolean.tsx +2 -2
- package/src/shapes/Chat.tsx +1 -2
- package/src/shapes/Constant.tsx +1 -2
- package/src/shapes/Database.tsx +1 -1
- package/src/shapes/{Queue.tsx → Feed.tsx} +27 -22
- package/src/shapes/Function.tsx +13 -11
- package/src/shapes/Gpt.tsx +7 -3
- package/src/shapes/GptRealtime.tsx +1 -1
- package/src/shapes/Json.tsx +8 -4
- package/src/shapes/Logic.tsx +1 -1
- package/src/shapes/RNG.tsx +6 -3
- package/src/shapes/Scope.tsx +1 -2
- package/src/shapes/Surface.tsx +13 -5
- package/src/shapes/Switch.tsx +1 -2
- package/src/shapes/Table.tsx +4 -4
- package/src/shapes/Template.tsx +2 -3
- package/src/shapes/Text.tsx +1 -2
- package/src/shapes/TextToImage.tsx +1 -1
- package/src/shapes/Thread.tsx +18 -12
- package/src/shapes/Trigger.tsx +44 -56
- package/src/shapes/common/Box.tsx +5 -8
- 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/shapes/index.ts +2 -2
- package/src/testing/circuits.ts +7 -16
- package/dist/types/src/shapes/Queue.d.ts.map +0 -1
|
@@ -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, Trace } 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";
|
|
@@ -74,7 +80,7 @@ var useComputeNodeState = (shape) => {
|
|
|
74
80
|
const { controller } = useComputeContext();
|
|
75
81
|
invariant(controller, void 0, {
|
|
76
82
|
F: __dxlog_file,
|
|
77
|
-
L:
|
|
83
|
+
L: 33,
|
|
78
84
|
S: void 0,
|
|
79
85
|
A: [
|
|
80
86
|
"controller",
|
|
@@ -87,7 +93,7 @@ var useComputeNodeState = (shape) => {
|
|
|
87
93
|
queueMicrotask(async () => {
|
|
88
94
|
invariant(shape.node, "Node not specified", {
|
|
89
95
|
F: __dxlog_file,
|
|
90
|
-
L:
|
|
96
|
+
L: 39,
|
|
91
97
|
S: void 0,
|
|
92
98
|
A: [
|
|
93
99
|
"shape.node",
|
|
@@ -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, (functionTrigger2) => {
|
|
259
|
+
functionTrigger2.function = Ref.make(graph.root);
|
|
260
|
+
functionTrigger2.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) => {
|
|
@@ -298,46 +305,46 @@ var nodeFactory = {
|
|
|
298
305
|
[NODE_INPUT]: () => createNode(NODE_INPUT),
|
|
299
306
|
[NODE_OUTPUT]: () => createNode(NODE_OUTPUT),
|
|
300
307
|
// Extensions.
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
+
"text-to-image": () => createNode("text-to-image"),
|
|
309
|
+
and: () => createNode("and"),
|
|
310
|
+
append: () => createNode("append"),
|
|
311
|
+
audio: () => createNode("audio"),
|
|
312
|
+
beacon: () => createNode("beacon"),
|
|
313
|
+
chat: () => createNode("chat"),
|
|
314
|
+
constant: (shape) => createNode("constant", {
|
|
308
315
|
value: shape.value
|
|
309
316
|
}),
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
317
|
+
"make-queue": () => createNode("make-queue"),
|
|
318
|
+
database: () => createNode("database"),
|
|
319
|
+
gpt: () => createNode("gpt"),
|
|
320
|
+
"gpt-realtime": () => createNode("gpt-realtime"),
|
|
321
|
+
if: () => createNode("if"),
|
|
322
|
+
"if-else": () => createNode("if-else"),
|
|
323
|
+
function: () => createNode("function"),
|
|
324
|
+
json: () => createNode("json"),
|
|
325
|
+
"json-transform": () => createNode("json-transform"),
|
|
326
|
+
not: () => createNode("not"),
|
|
327
|
+
or: () => createNode("or"),
|
|
328
|
+
queue: () => createNode("queue"),
|
|
329
|
+
rng: () => createNode("rng"),
|
|
330
|
+
reducer: () => createNode("reducer"),
|
|
331
|
+
scope: () => createNode("scope"),
|
|
332
|
+
surface: () => createNode("surface"),
|
|
333
|
+
switch: () => createNode("switch"),
|
|
334
|
+
template: (shape) => {
|
|
328
335
|
const node = createNode("template", {
|
|
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
|
-
|
|
336
|
-
|
|
337
|
-
|
|
342
|
+
text: () => createNode("text"),
|
|
343
|
+
thread: () => createNode("thread"),
|
|
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
|
});
|
|
@@ -356,37 +363,37 @@ var AUTO_TRIGGER_NODES = [
|
|
|
356
363
|
"switch",
|
|
357
364
|
"constant"
|
|
358
365
|
];
|
|
359
|
-
var createComputeGraphController = (graph,
|
|
366
|
+
var createComputeGraphController = (graph, computeRuntime) => {
|
|
360
367
|
const computeGraph = createComputeGraph(graph);
|
|
361
|
-
const controller = new ComputeGraphController(
|
|
368
|
+
const controller = new ComputeGraphController(computeRuntime, computeGraph);
|
|
362
369
|
return {
|
|
363
370
|
controller,
|
|
364
371
|
graph
|
|
365
372
|
};
|
|
366
373
|
};
|
|
367
374
|
var ComputeGraphController = class extends Resource {
|
|
368
|
-
|
|
375
|
+
_computeRuntime;
|
|
369
376
|
_graph;
|
|
370
|
-
_executor
|
|
371
|
-
|
|
377
|
+
_executor = new GraphExecutor({
|
|
378
|
+
computeNodeResolver: (node) => resolveComputeNode(node)
|
|
379
|
+
});
|
|
380
|
+
_diagnostics = [];
|
|
372
381
|
/**
|
|
373
382
|
* Canvas force-sets outputs of those nodes.
|
|
374
383
|
*/
|
|
375
|
-
_forcedOutputs;
|
|
384
|
+
_forcedOutputs = {};
|
|
376
385
|
/**
|
|
377
386
|
* Runtime state of the execution graph.
|
|
378
387
|
*/
|
|
379
|
-
_runtimeStateInputs;
|
|
380
|
-
_runtimeStateOutputs;
|
|
388
|
+
_runtimeStateInputs = {};
|
|
389
|
+
_runtimeStateOutputs = {};
|
|
381
390
|
// TODO(burdon): Remove? Make state reactive?
|
|
382
|
-
update;
|
|
391
|
+
update = new Event();
|
|
383
392
|
/** Computed result. */
|
|
384
|
-
output;
|
|
385
|
-
events;
|
|
386
|
-
constructor(
|
|
387
|
-
super(), this.
|
|
388
|
-
computeNodeResolver: (node) => resolveComputeNode(node)
|
|
389
|
-
}), this._diagnostics = [], this._forcedOutputs = {}, this._runtimeStateInputs = {}, this._runtimeStateOutputs = {}, this.update = new Event(), this.output = new Event(), this.events = new Event();
|
|
393
|
+
output = new Event();
|
|
394
|
+
events = new Event();
|
|
395
|
+
constructor(_computeRuntime, _graph) {
|
|
396
|
+
super(), this._computeRuntime = _computeRuntime, this._graph = _graph;
|
|
390
397
|
}
|
|
391
398
|
toJSON() {
|
|
392
399
|
return {
|
|
@@ -456,7 +463,7 @@ var ComputeGraphController = class extends Resource {
|
|
|
456
463
|
} catch (err) {
|
|
457
464
|
log.catch(err, void 0, {
|
|
458
465
|
F: __dxlog_file4,
|
|
459
|
-
L:
|
|
466
|
+
L: 230,
|
|
460
467
|
S: this,
|
|
461
468
|
C: (f, a) => f(...a)
|
|
462
469
|
});
|
|
@@ -478,12 +485,11 @@ var ComputeGraphController = class extends Resource {
|
|
|
478
485
|
for (const [nodeId2, outputs] of Object.entries(this._forcedOutputs)) {
|
|
479
486
|
executor.setOutputs(nodeId2, Effect.succeed(ValueBag.make(outputs)));
|
|
480
487
|
}
|
|
481
|
-
|
|
482
|
-
await Effect.runPromise(Effect.gen(this, function* () {
|
|
488
|
+
unwrapExit(await this._computeRuntime.runPromiseExit(Effect.gen(this, function* () {
|
|
483
489
|
const scope = yield* Scope.make();
|
|
484
490
|
const executable = yield* Effect.promise(() => resolveComputeNode(this._graph.getNode(nodeId)));
|
|
485
491
|
const computingOutputs = executable.exec != null;
|
|
486
|
-
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(Layer.mergeAll(ComputeEventLogger.layerNoop, Trace.writerLayerNoop)), Effect.flatMap(computeValueBag), Effect.withSpan("test"), Effect.tap((values) => {
|
|
487
493
|
for (const [key, value] of Object.entries(values)) {
|
|
488
494
|
if (computingOutputs) {
|
|
489
495
|
this._onOutputComputed(nodeId, key, value);
|
|
@@ -494,7 +500,7 @@ var ComputeGraphController = class extends Resource {
|
|
|
494
500
|
}));
|
|
495
501
|
yield* effect;
|
|
496
502
|
yield* Scope.close(scope, Exit.void);
|
|
497
|
-
}));
|
|
503
|
+
})));
|
|
498
504
|
this.update.emit();
|
|
499
505
|
}
|
|
500
506
|
/**
|
|
@@ -515,13 +521,13 @@ var ComputeGraphController = class extends Resource {
|
|
|
515
521
|
const allAffectedNodes = [
|
|
516
522
|
...new Set(triggerNodes.flatMap((node) => executor.getAllDependantNodes(node.id)))
|
|
517
523
|
];
|
|
518
|
-
await
|
|
524
|
+
unwrapExit(await this._computeRuntime.runPromiseExit(Effect.gen(this, function* () {
|
|
519
525
|
const scope = yield* Scope.make();
|
|
520
526
|
const tasks = [];
|
|
521
527
|
for (const node of allAffectedNodes) {
|
|
522
528
|
const executable = yield* Effect.promise(() => resolveComputeNode(this._graph.getNode(node)));
|
|
523
529
|
const computingOutputs = executable.exec != null;
|
|
524
|
-
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(Layer.mergeAll(ComputeEventLogger.layerNoop, Trace.writerLayerNoop)), Effect.withSpan("test"), Effect.tap((values) => {
|
|
525
531
|
for (const [key, value] of Object.entries(values)) {
|
|
526
532
|
if (computingOutputs) {
|
|
527
533
|
this._onOutputComputed(node, key, value);
|
|
@@ -534,7 +540,7 @@ var ComputeGraphController = class extends Resource {
|
|
|
534
540
|
}
|
|
535
541
|
yield* Effect.all(tasks);
|
|
536
542
|
yield* Scope.close(scope, Exit.void);
|
|
537
|
-
}));
|
|
543
|
+
})));
|
|
538
544
|
this.update.emit();
|
|
539
545
|
}
|
|
540
546
|
_createLogger() {
|
|
@@ -550,7 +556,7 @@ var ComputeGraphController = class extends Resource {
|
|
|
550
556
|
event
|
|
551
557
|
}, {
|
|
552
558
|
F: __dxlog_file4,
|
|
553
|
-
L:
|
|
559
|
+
L: 369,
|
|
554
560
|
S: this,
|
|
555
561
|
C: (f, a) => f(...a)
|
|
556
562
|
});
|
|
@@ -627,88 +633,80 @@ var computeValueBag = (bag) => {
|
|
|
627
633
|
import { noteShape } from "@dxos/react-ui-canvas-editor";
|
|
628
634
|
|
|
629
635
|
// src/shapes/common/Box.tsx
|
|
630
|
-
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
631
636
|
import React, { forwardRef } from "react";
|
|
632
637
|
import { invariant as invariant4 } from "@dxos/invariant";
|
|
633
638
|
import { Icon, IconButton } from "@dxos/react-ui";
|
|
634
639
|
import { useEditorContext, useShapeDef } from "@dxos/react-ui-canvas-editor";
|
|
635
|
-
import { mx } from "@dxos/
|
|
640
|
+
import { mx } from "@dxos/ui-theme";
|
|
636
641
|
var __dxlog_file5 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/shapes/common/Box.tsx";
|
|
637
642
|
var headerHeight = 32;
|
|
638
643
|
var footerHeight = 32;
|
|
639
644
|
var Box = /* @__PURE__ */ forwardRef(({ children, classNames, shape, title, status, open, onAction }, forwardedRef) => {
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
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
|
-
ev.stopPropagation();
|
|
692
|
-
onAction?.(open ? "close" : "open");
|
|
693
|
-
}
|
|
694
|
-
})));
|
|
695
|
-
} finally {
|
|
696
|
-
_effect.f();
|
|
697
|
-
}
|
|
645
|
+
invariant4(shape.type, void 0, {
|
|
646
|
+
F: __dxlog_file5,
|
|
647
|
+
L: 29,
|
|
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 h-full w-full justify-between"
|
|
661
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
662
|
+
className: "flex shrink-0 w-full justify-between items-center h-[32px] bg-input-surface"
|
|
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
|
+
label: "run",
|
|
673
|
+
iconOnly: true,
|
|
674
|
+
onDoubleClick: (ev) => ev.stopPropagation(),
|
|
675
|
+
onClick: (ev) => {
|
|
676
|
+
ev.stopPropagation();
|
|
677
|
+
onAction?.("run");
|
|
678
|
+
}
|
|
679
|
+
})), /* @__PURE__ */ React.createElement("div", {
|
|
680
|
+
className: mx("flex flex-col h-full grow overflow-hidden", classNames)
|
|
681
|
+
}, children), /* @__PURE__ */ React.createElement("div", {
|
|
682
|
+
className: "flex shrink-0 w-full justify-between items-center h-[32px] bg-input-surface"
|
|
683
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
684
|
+
className: "grow px-2 text-sm truncate"
|
|
685
|
+
}, debug ? shape.id : status), openable && /* @__PURE__ */ React.createElement(IconButton, {
|
|
686
|
+
classNames: "p-1",
|
|
687
|
+
variant: "ghost",
|
|
688
|
+
icon: open ? "ph--caret-up--regular" : "ph--caret-down--regular",
|
|
689
|
+
label: open ? "close" : "open",
|
|
690
|
+
iconOnly: true,
|
|
691
|
+
onClick: (ev) => {
|
|
692
|
+
ev.stopPropagation();
|
|
693
|
+
onAction?.(open ? "close" : "open");
|
|
694
|
+
}
|
|
695
|
+
})));
|
|
698
696
|
});
|
|
699
697
|
|
|
700
698
|
// src/shapes/common/FunctionBody.tsx
|
|
701
|
-
import
|
|
702
|
-
import { SchemaAST as SchemaAST2 } from "effect";
|
|
699
|
+
import * as SchemaAST2 from "effect/SchemaAST";
|
|
703
700
|
import React2, { useRef, useState as useState3 } from "react";
|
|
704
701
|
import { VoidInput, VoidOutput } from "@dxos/conductor";
|
|
705
702
|
import { useCanvasContext } from "@dxos/react-ui-canvas";
|
|
706
703
|
import { createAnchors, getParentShapeElement, rowHeight } from "@dxos/react-ui-canvas-editor";
|
|
707
704
|
|
|
708
705
|
// src/shapes/defs.ts
|
|
709
|
-
import
|
|
706
|
+
import * as Schema2 from "effect/Schema";
|
|
707
|
+
import * as SchemaAST from "effect/SchemaAST";
|
|
710
708
|
import { DEFAULT_INPUT as DEFAULT_INPUT2, DEFAULT_OUTPUT as DEFAULT_OUTPUT2 } from "@dxos/conductor";
|
|
711
|
-
import {
|
|
709
|
+
import { Obj as Obj3 } from "@dxos/echo";
|
|
712
710
|
import { Polygon } from "@dxos/react-ui-canvas-editor";
|
|
713
711
|
var getProperties = (ast) => SchemaAST.getPropertySignatures(ast).map(({ name }) => ({
|
|
714
712
|
name: name.toString()
|
|
@@ -726,13 +724,13 @@ var parseAnchorId = (id) => {
|
|
|
726
724
|
};
|
|
727
725
|
var ComputeShape = Schema2.extend(Polygon, Schema2.Struct({
|
|
728
726
|
// TODO(burdon): Rename computeNode?
|
|
729
|
-
node: Schema2.optional(
|
|
727
|
+
node: Schema2.optional(Obj3.ID.annotations({
|
|
730
728
|
description: "Compute node id"
|
|
731
729
|
}))
|
|
732
730
|
}).pipe(Schema2.mutable));
|
|
733
731
|
var createShape = ({ id, ...rest }) => {
|
|
734
732
|
return {
|
|
735
|
-
id: id ??
|
|
733
|
+
id: id ?? Obj3.ID.random(),
|
|
736
734
|
...rest
|
|
737
735
|
};
|
|
738
736
|
};
|
|
@@ -741,70 +739,65 @@ var createShape = ({ id, ...rest }) => {
|
|
|
741
739
|
var bodyPadding = 8;
|
|
742
740
|
var expandedHeight = 200;
|
|
743
741
|
var FunctionBody = ({ shape, name, content, inputSchema = VoidInput, outputSchema = VoidOutput, ...props }) => {
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
setOpen(true);
|
|
759
|
-
break;
|
|
760
|
-
}
|
|
761
|
-
case "close": {
|
|
762
|
-
const el = getParentShapeElement(rootRef.current, shape.id);
|
|
763
|
-
el.style.height = "";
|
|
764
|
-
setOpen(false);
|
|
765
|
-
break;
|
|
766
|
-
}
|
|
767
|
-
}
|
|
768
|
-
};
|
|
769
|
-
const inputs = getProperties(inputSchema.ast);
|
|
770
|
-
const outputs = getProperties(outputSchema.ast);
|
|
771
|
-
const columnCount = inputs.length && outputs.length ? 2 : 1;
|
|
772
|
-
return /* @__PURE__ */ React2.createElement(Box, {
|
|
773
|
-
ref: rootRef,
|
|
774
|
-
shape,
|
|
775
|
-
title: name,
|
|
776
|
-
classNames: "divide-y divide-separator",
|
|
777
|
-
open,
|
|
778
|
-
onAction: handleAction,
|
|
779
|
-
...props
|
|
780
|
-
}, /* @__PURE__ */ React2.createElement("div", {
|
|
781
|
-
className: `grid grid-cols-${columnCount} items-center`,
|
|
782
|
-
style: {
|
|
783
|
-
paddingTop: bodyPadding,
|
|
784
|
-
paddingBottom: bodyPadding
|
|
785
|
-
}
|
|
786
|
-
}, (inputs?.length ?? 0) > 0 && /* @__PURE__ */ React2.createElement("div", {
|
|
787
|
-
className: "flex flex-col"
|
|
788
|
-
}, inputs?.map(({ name: name2 }) => /* @__PURE__ */ React2.createElement("div", {
|
|
789
|
-
key: name2,
|
|
790
|
-
className: "px-2 truncate text-sm font-mono items-center",
|
|
791
|
-
style: {
|
|
792
|
-
height: rowHeight
|
|
742
|
+
const { scale } = useCanvasContext();
|
|
743
|
+
const rootRef = useRef(null);
|
|
744
|
+
const [open, setOpen] = useState3(false);
|
|
745
|
+
const handleAction = (action) => {
|
|
746
|
+
if (!rootRef.current) {
|
|
747
|
+
return;
|
|
748
|
+
}
|
|
749
|
+
switch (action) {
|
|
750
|
+
case "open": {
|
|
751
|
+
const el = getParentShapeElement(rootRef.current, shape.id);
|
|
752
|
+
const { height } = el.getBoundingClientRect();
|
|
753
|
+
el.style.height = `${height / scale + expandedHeight}px`;
|
|
754
|
+
setOpen(true);
|
|
755
|
+
break;
|
|
793
756
|
}
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
style: {
|
|
800
|
-
height: rowHeight
|
|
757
|
+
case "close": {
|
|
758
|
+
const el = getParentShapeElement(rootRef.current, shape.id);
|
|
759
|
+
el.style.height = "";
|
|
760
|
+
setOpen(false);
|
|
761
|
+
break;
|
|
801
762
|
}
|
|
802
|
-
}
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
763
|
+
}
|
|
764
|
+
};
|
|
765
|
+
const inputs = getProperties(inputSchema.ast);
|
|
766
|
+
const outputs = getProperties(outputSchema.ast);
|
|
767
|
+
const columnCount = inputs.length && outputs.length ? 2 : 1;
|
|
768
|
+
return /* @__PURE__ */ React2.createElement(Box, {
|
|
769
|
+
ref: rootRef,
|
|
770
|
+
shape,
|
|
771
|
+
title: name,
|
|
772
|
+
classNames: "divide-y divide-separator",
|
|
773
|
+
open,
|
|
774
|
+
onAction: handleAction,
|
|
775
|
+
...props
|
|
776
|
+
}, /* @__PURE__ */ React2.createElement("div", {
|
|
777
|
+
className: `grid grid-cols-${columnCount} items-center`,
|
|
778
|
+
style: {
|
|
779
|
+
paddingTop: bodyPadding,
|
|
780
|
+
paddingBottom: bodyPadding
|
|
781
|
+
}
|
|
782
|
+
}, (inputs?.length ?? 0) > 0 && /* @__PURE__ */ React2.createElement("div", {
|
|
783
|
+
className: "flex flex-col"
|
|
784
|
+
}, inputs?.map(({ name: name2 }) => /* @__PURE__ */ React2.createElement("div", {
|
|
785
|
+
key: name2,
|
|
786
|
+
className: "px-2 truncate text-sm font-mono items-center",
|
|
787
|
+
style: {
|
|
788
|
+
height: rowHeight
|
|
789
|
+
}
|
|
790
|
+
}, name2))), (outputs?.length ?? 0) > 0 && /* @__PURE__ */ React2.createElement("div", {
|
|
791
|
+
className: "flex flex-col"
|
|
792
|
+
}, outputs?.map(({ name: name2 }) => /* @__PURE__ */ React2.createElement("div", {
|
|
793
|
+
key: name2,
|
|
794
|
+
className: "px-2 truncate text-sm font-mono items-center text-right",
|
|
795
|
+
style: {
|
|
796
|
+
height: rowHeight
|
|
797
|
+
}
|
|
798
|
+
}, name2)))), open && /* @__PURE__ */ React2.createElement("div", {
|
|
799
|
+
className: "flex flex-col grow overflow-hidden"
|
|
800
|
+
}, content));
|
|
808
801
|
};
|
|
809
802
|
var getHeight = (input) => {
|
|
810
803
|
const properties = SchemaAST2.getPropertySignatures(input.ast);
|
|
@@ -825,47 +818,35 @@ var createFunctionAnchors = (shape, input = VoidInput, output = VoidOutput) => {
|
|
|
825
818
|
};
|
|
826
819
|
|
|
827
820
|
// src/shapes/common/TypeSelect.tsx
|
|
828
|
-
import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
|
|
829
821
|
import React3 from "react";
|
|
830
822
|
import { ComputeValueType } from "@dxos/conductor";
|
|
831
823
|
import { Select } from "@dxos/react-ui";
|
|
832
824
|
var TypeSelect = ({ value, onValueChange }) => {
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
value: type
|
|
844
|
-
}, type))), /* @__PURE__ */ React3.createElement(Select.ScrollDownButton, null), /* @__PURE__ */ React3.createElement(Select.Arrow, null))));
|
|
845
|
-
} finally {
|
|
846
|
-
_effect.f();
|
|
847
|
-
}
|
|
825
|
+
return /* @__PURE__ */ React3.createElement(Select.Root, {
|
|
826
|
+
value,
|
|
827
|
+
onValueChange
|
|
828
|
+
}, /* @__PURE__ */ React3.createElement(Select.TriggerButton, {
|
|
829
|
+
variant: "ghost",
|
|
830
|
+
classNames: "w-full px-0!"
|
|
831
|
+
}), /* @__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, {
|
|
832
|
+
key: type,
|
|
833
|
+
value: type
|
|
834
|
+
}, type))), /* @__PURE__ */ React3.createElement(Select.ScrollDownButton, null), /* @__PURE__ */ React3.createElement(Select.Arrow, null))));
|
|
848
835
|
};
|
|
849
836
|
|
|
850
837
|
// src/shapes/Array.tsx
|
|
851
|
-
import
|
|
852
|
-
import { Schema as Schema3 } from "effect";
|
|
838
|
+
import * as Schema3 from "effect/Schema";
|
|
853
839
|
import React4 from "react";
|
|
854
840
|
import { ReducerInput, ReducerOutput } from "@dxos/conductor";
|
|
855
841
|
var ReducerShape = Schema3.extend(ComputeShape, Schema3.Struct({
|
|
856
842
|
type: Schema3.Literal("reducer")
|
|
857
843
|
}));
|
|
858
844
|
var ReducerComponent = ({ shape }) => {
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
outputSchema: ReducerOutput
|
|
865
|
-
});
|
|
866
|
-
} finally {
|
|
867
|
-
_effect.f();
|
|
868
|
-
}
|
|
845
|
+
return /* @__PURE__ */ React4.createElement(FunctionBody, {
|
|
846
|
+
shape,
|
|
847
|
+
inputSchema: ReducerInput,
|
|
848
|
+
outputSchema: ReducerOutput
|
|
849
|
+
});
|
|
869
850
|
};
|
|
870
851
|
var createReducer = ({ id, size = {
|
|
871
852
|
width: 192,
|
|
@@ -885,8 +866,7 @@ var reducerShape = {
|
|
|
885
866
|
};
|
|
886
867
|
|
|
887
868
|
// src/shapes/Append.tsx
|
|
888
|
-
import
|
|
889
|
-
import { Schema as Schema4 } from "effect";
|
|
869
|
+
import * as Schema4 from "effect/Schema";
|
|
890
870
|
import React5 from "react";
|
|
891
871
|
import { AppendInput } from "@dxos/conductor";
|
|
892
872
|
var AppendShape = Schema4.extend(ComputeShape, Schema4.Struct({
|
|
@@ -901,15 +881,10 @@ var createAppend = (props) => createShape({
|
|
|
901
881
|
...props
|
|
902
882
|
});
|
|
903
883
|
var AppendComponent = ({ shape }) => {
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
inputSchema: AppendInput
|
|
909
|
-
});
|
|
910
|
-
} finally {
|
|
911
|
-
_effect.f();
|
|
912
|
-
}
|
|
884
|
+
return /* @__PURE__ */ React5.createElement(FunctionBody, {
|
|
885
|
+
shape,
|
|
886
|
+
inputSchema: AppendInput
|
|
887
|
+
});
|
|
913
888
|
};
|
|
914
889
|
var appendShape = {
|
|
915
890
|
type: "append",
|
|
@@ -921,8 +896,7 @@ var appendShape = {
|
|
|
921
896
|
};
|
|
922
897
|
|
|
923
898
|
// src/shapes/Audio.tsx
|
|
924
|
-
import
|
|
925
|
-
import { Schema as Schema5 } from "effect";
|
|
899
|
+
import * as Schema5 from "effect/Schema";
|
|
926
900
|
import React6, { useEffect as useEffect3, useState as useState4 } from "react";
|
|
927
901
|
import { Icon as Icon2 } from "@dxos/react-ui";
|
|
928
902
|
import { createAnchorMap } from "@dxos/react-ui-canvas-editor";
|
|
@@ -938,29 +912,24 @@ var createAudio = (props) => createShape({
|
|
|
938
912
|
...props
|
|
939
913
|
});
|
|
940
914
|
var AudioComponent = ({ shape }) => {
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
onClick: () => setActive(!active)
|
|
960
|
-
}));
|
|
961
|
-
} finally {
|
|
962
|
-
_effect.f();
|
|
963
|
-
}
|
|
915
|
+
const { node } = useComputeNodeState(shape);
|
|
916
|
+
const [active, setActive] = useState4(false);
|
|
917
|
+
useEffect3(() => {
|
|
918
|
+
node.value = active;
|
|
919
|
+
}, [
|
|
920
|
+
active
|
|
921
|
+
]);
|
|
922
|
+
return /* @__PURE__ */ React6.createElement("div", {
|
|
923
|
+
className: "flex w-full justify-center items-center"
|
|
924
|
+
}, /* @__PURE__ */ React6.createElement(Icon2, {
|
|
925
|
+
icon: active ? "ph--microphone--regular" : "ph--microphone-slash--regular",
|
|
926
|
+
classNames: [
|
|
927
|
+
"transition opacity-20 duration-1000",
|
|
928
|
+
active && "opacity-100 text-error-text"
|
|
929
|
+
],
|
|
930
|
+
size: 8,
|
|
931
|
+
onClick: () => setActive(!active)
|
|
932
|
+
}));
|
|
964
933
|
};
|
|
965
934
|
var audioShape = {
|
|
966
935
|
type: "audio",
|
|
@@ -977,8 +946,7 @@ var audioShape = {
|
|
|
977
946
|
};
|
|
978
947
|
|
|
979
948
|
// src/shapes/Beacon.tsx
|
|
980
|
-
import
|
|
981
|
-
import { Schema as Schema6 } from "effect";
|
|
949
|
+
import * as Schema6 from "effect/Schema";
|
|
982
950
|
import React7 from "react";
|
|
983
951
|
import { DEFAULT_INPUT as DEFAULT_INPUT3, isTruthy } from "@dxos/conductor";
|
|
984
952
|
import { Icon as Icon3 } from "@dxos/react-ui";
|
|
@@ -995,24 +963,19 @@ var createBeacon = (props) => createShape({
|
|
|
995
963
|
...props
|
|
996
964
|
});
|
|
997
965
|
var BeaconComponent = ({ shape }) => {
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
size: 8
|
|
1012
|
-
}));
|
|
1013
|
-
} finally {
|
|
1014
|
-
_effect.f();
|
|
1015
|
-
}
|
|
966
|
+
const { runtime } = useComputeNodeState(shape);
|
|
967
|
+
const input = runtime.inputs[DEFAULT_INPUT3];
|
|
968
|
+
const value = input?.type === "executed" ? input.value : false;
|
|
969
|
+
return /* @__PURE__ */ React7.createElement("div", {
|
|
970
|
+
className: "flex w-full justify-center items-center"
|
|
971
|
+
}, /* @__PURE__ */ React7.createElement(Icon3, {
|
|
972
|
+
icon: "ph--sun--regular",
|
|
973
|
+
classNames: [
|
|
974
|
+
"transition opacity-20 duration-1000",
|
|
975
|
+
isTruthy(value) && "opacity-100 text-yellow-500"
|
|
976
|
+
],
|
|
977
|
+
size: 8
|
|
978
|
+
}));
|
|
1016
979
|
};
|
|
1017
980
|
var beaconShape = {
|
|
1018
981
|
type: "beacon",
|
|
@@ -1029,7 +992,7 @@ var beaconShape = {
|
|
|
1029
992
|
};
|
|
1030
993
|
|
|
1031
994
|
// src/shapes/Boolean.tsx
|
|
1032
|
-
import
|
|
995
|
+
import * as Schema7 from "effect/Schema";
|
|
1033
996
|
import React8 from "react";
|
|
1034
997
|
import { getAnchorPoints } from "@dxos/react-ui-canvas-editor";
|
|
1035
998
|
import { createAnchors as createAnchors2 } from "@dxos/react-ui-canvas-editor";
|
|
@@ -1080,7 +1043,7 @@ var createSymbol = (pathConstructor, inputs) => ({
|
|
|
1080
1043
|
});
|
|
1081
1044
|
return /* @__PURE__ */ React8.createElement("svg", {
|
|
1082
1045
|
viewBox: `0 0 ${width} ${height}`,
|
|
1083
|
-
className: "
|
|
1046
|
+
className: "h-full w-full"
|
|
1084
1047
|
}, getAnchorPoints({
|
|
1085
1048
|
x: 0,
|
|
1086
1049
|
y: centerY
|
|
@@ -1202,8 +1165,7 @@ var notShape = defineShape({
|
|
|
1202
1165
|
});
|
|
1203
1166
|
|
|
1204
1167
|
// src/shapes/Chat.tsx
|
|
1205
|
-
import
|
|
1206
|
-
import { Schema as Schema8 } from "effect";
|
|
1168
|
+
import * as Schema8 from "effect/Schema";
|
|
1207
1169
|
import React9, { useRef as useRef2 } from "react";
|
|
1208
1170
|
import { DEFAULT_OUTPUT as DEFAULT_OUTPUT3 } from "@dxos/conductor";
|
|
1209
1171
|
import { TextBox } from "@dxos/react-ui-canvas-editor";
|
|
@@ -1212,28 +1174,23 @@ var ChatShape = Schema8.extend(ComputeShape, Schema8.Struct({
|
|
|
1212
1174
|
type: Schema8.Literal("chat")
|
|
1213
1175
|
}));
|
|
1214
1176
|
var TextInputComponent = ({ shape, title, ...props }) => {
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
const
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
...props
|
|
1233
|
-
}));
|
|
1234
|
-
} finally {
|
|
1235
|
-
_effect.f();
|
|
1236
|
-
}
|
|
1177
|
+
const { runtime } = useComputeNodeState(shape);
|
|
1178
|
+
const inputRef = useRef2(null);
|
|
1179
|
+
const handleEnter = (text) => {
|
|
1180
|
+
const value = text.trim();
|
|
1181
|
+
if (value.length) {
|
|
1182
|
+
runtime.setOutput(DEFAULT_OUTPUT3, value);
|
|
1183
|
+
inputRef.current?.setText("");
|
|
1184
|
+
}
|
|
1185
|
+
};
|
|
1186
|
+
return /* @__PURE__ */ React9.createElement(Box, {
|
|
1187
|
+
shape,
|
|
1188
|
+
title
|
|
1189
|
+
}, /* @__PURE__ */ React9.createElement(TextBox, {
|
|
1190
|
+
ref: inputRef,
|
|
1191
|
+
onEnter: handleEnter,
|
|
1192
|
+
...props
|
|
1193
|
+
}));
|
|
1237
1194
|
};
|
|
1238
1195
|
var createChat = (props) => createShape({
|
|
1239
1196
|
type: "chat",
|
|
@@ -1263,8 +1220,7 @@ var chatShape = {
|
|
|
1263
1220
|
};
|
|
1264
1221
|
|
|
1265
1222
|
// src/shapes/Constant.tsx
|
|
1266
|
-
import
|
|
1267
|
-
import { Schema as Schema9 } from "effect";
|
|
1223
|
+
import * as Schema9 from "effect/Schema";
|
|
1268
1224
|
import React10, { useCallback as useCallback2, useRef as useRef3, useState as useState5 } from "react";
|
|
1269
1225
|
import { ComputeValueType as ComputeValueType2 } from "@dxos/conductor";
|
|
1270
1226
|
import { Input } from "@dxos/react-ui";
|
|
@@ -1287,57 +1243,52 @@ var inferType = (value) => {
|
|
|
1287
1243
|
}
|
|
1288
1244
|
};
|
|
1289
1245
|
var ConstantComponent = ({ shape, title, chat, ...props }) => {
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
const
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
if (
|
|
1299
|
-
|
|
1300
|
-
if (!isNaN(floatValue)) {
|
|
1301
|
-
node.value = floatValue;
|
|
1302
|
-
}
|
|
1303
|
-
} else if (type === "object") {
|
|
1304
|
-
node.value = safeParseJson(value, {});
|
|
1305
|
-
} else {
|
|
1306
|
-
node.value = value;
|
|
1246
|
+
const { node } = useComputeNodeState(shape);
|
|
1247
|
+
const [type, setType] = useState5(inferType(node.value) ?? ComputeValueType2.literals[0]);
|
|
1248
|
+
const inputRef = useRef3(null);
|
|
1249
|
+
const handleEnter = useCallback2((text) => {
|
|
1250
|
+
const value = text.trim();
|
|
1251
|
+
if (value.length) {
|
|
1252
|
+
if (type === "number") {
|
|
1253
|
+
const floatValue = parseFloat(value);
|
|
1254
|
+
if (!isNaN(floatValue)) {
|
|
1255
|
+
node.value = floatValue;
|
|
1307
1256
|
}
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
type
|
|
1312
|
-
]);
|
|
1313
|
-
return /* @__PURE__ */ React10.createElement(Box, {
|
|
1314
|
-
shape,
|
|
1315
|
-
title,
|
|
1316
|
-
status: /* @__PURE__ */ React10.createElement(TypeSelect, {
|
|
1317
|
-
value: type,
|
|
1318
|
-
onValueChange: setType
|
|
1319
|
-
})
|
|
1320
|
-
}, (type === "string" || type === "number") && /* @__PURE__ */ React10.createElement(TextBox2, {
|
|
1321
|
-
...props,
|
|
1322
|
-
ref: inputRef,
|
|
1323
|
-
value: node.value,
|
|
1324
|
-
onEnter: handleEnter
|
|
1325
|
-
}), type === "object" && /* @__PURE__ */ React10.createElement(TextBox2, {
|
|
1326
|
-
...props,
|
|
1327
|
-
ref: inputRef,
|
|
1328
|
-
value: JSON.stringify(node.value, null, 2),
|
|
1329
|
-
language: "json"
|
|
1330
|
-
}), type === "boolean" && /* @__PURE__ */ React10.createElement("div", {
|
|
1331
|
-
className: "flex grow justify-center items-center"
|
|
1332
|
-
}, /* @__PURE__ */ React10.createElement(Input.Root, null, /* @__PURE__ */ React10.createElement(Input.Switch, {
|
|
1333
|
-
checked: node.value,
|
|
1334
|
-
onCheckedChange: (value) => {
|
|
1257
|
+
} else if (type === "object") {
|
|
1258
|
+
node.value = safeParseJson(value, {});
|
|
1259
|
+
} else {
|
|
1335
1260
|
node.value = value;
|
|
1336
1261
|
}
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1262
|
+
inputRef.current?.focus();
|
|
1263
|
+
}
|
|
1264
|
+
}, [
|
|
1265
|
+
type
|
|
1266
|
+
]);
|
|
1267
|
+
return /* @__PURE__ */ React10.createElement(Box, {
|
|
1268
|
+
shape,
|
|
1269
|
+
title,
|
|
1270
|
+
status: /* @__PURE__ */ React10.createElement(TypeSelect, {
|
|
1271
|
+
value: type,
|
|
1272
|
+
onValueChange: setType
|
|
1273
|
+
})
|
|
1274
|
+
}, (type === "string" || type === "number") && /* @__PURE__ */ React10.createElement(TextBox2, {
|
|
1275
|
+
...props,
|
|
1276
|
+
ref: inputRef,
|
|
1277
|
+
value: node.value,
|
|
1278
|
+
onEnter: handleEnter
|
|
1279
|
+
}), type === "object" && /* @__PURE__ */ React10.createElement(TextBox2, {
|
|
1280
|
+
...props,
|
|
1281
|
+
ref: inputRef,
|
|
1282
|
+
value: JSON.stringify(node.value, null, 2),
|
|
1283
|
+
language: "json"
|
|
1284
|
+
}), type === "boolean" && /* @__PURE__ */ React10.createElement("div", {
|
|
1285
|
+
className: "flex grow justify-center items-center"
|
|
1286
|
+
}, /* @__PURE__ */ React10.createElement(Input.Root, null, /* @__PURE__ */ React10.createElement(Input.Switch, {
|
|
1287
|
+
checked: node.value,
|
|
1288
|
+
onCheckedChange: (value) => {
|
|
1289
|
+
node.value = value;
|
|
1290
|
+
}
|
|
1291
|
+
}))));
|
|
1341
1292
|
};
|
|
1342
1293
|
var createConstant = (props) => createShape({
|
|
1343
1294
|
type: "constant",
|
|
@@ -1366,8 +1317,7 @@ var constantShape = {
|
|
|
1366
1317
|
};
|
|
1367
1318
|
|
|
1368
1319
|
// src/shapes/Database.tsx
|
|
1369
|
-
import
|
|
1370
|
-
import { Schema as Schema10 } from "effect";
|
|
1320
|
+
import * as Schema10 from "effect/Schema";
|
|
1371
1321
|
import React11 from "react";
|
|
1372
1322
|
import { createAnchorMap as createAnchorMap5 } from "@dxos/react-ui-canvas-editor";
|
|
1373
1323
|
var DatabaseShape = Schema10.extend(ComputeShape, Schema10.Struct({
|
|
@@ -1382,14 +1332,9 @@ var createDatabase = (props) => createShape({
|
|
|
1382
1332
|
...props
|
|
1383
1333
|
});
|
|
1384
1334
|
var DatabaseComponent = ({ shape }) => {
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
shape
|
|
1389
|
-
});
|
|
1390
|
-
} finally {
|
|
1391
|
-
_effect.f();
|
|
1392
|
-
}
|
|
1335
|
+
return /* @__PURE__ */ React11.createElement(Box, {
|
|
1336
|
+
shape
|
|
1337
|
+
});
|
|
1393
1338
|
};
|
|
1394
1339
|
var databaseShape = {
|
|
1395
1340
|
type: "database",
|
|
@@ -1405,18 +1350,83 @@ var databaseShape = {
|
|
|
1405
1350
|
})
|
|
1406
1351
|
};
|
|
1407
1352
|
|
|
1353
|
+
// src/shapes/Feed.tsx
|
|
1354
|
+
import * as Schema11 from "effect/Schema";
|
|
1355
|
+
import React12, { Fragment } from "react";
|
|
1356
|
+
import { DEFAULT_OUTPUT as DEFAULT_OUTPUT4, QueueInput, QueueOutput } from "@dxos/conductor";
|
|
1357
|
+
import { ScrollArea } from "@dxos/react-ui";
|
|
1358
|
+
import { mx as mx2 } from "@dxos/ui-theme";
|
|
1359
|
+
var FeedShape = Schema11.extend(ComputeShape, Schema11.Struct({
|
|
1360
|
+
type: Schema11.Literal("queue")
|
|
1361
|
+
}));
|
|
1362
|
+
var createFeed = (props) => createShape({
|
|
1363
|
+
type: "queue",
|
|
1364
|
+
size: {
|
|
1365
|
+
width: 256,
|
|
1366
|
+
height: 512
|
|
1367
|
+
},
|
|
1368
|
+
...props
|
|
1369
|
+
});
|
|
1370
|
+
var FeedComponent = ({ shape }) => {
|
|
1371
|
+
const { runtime } = useComputeNodeState(shape);
|
|
1372
|
+
const items = runtime.outputs[DEFAULT_OUTPUT4]?.type === "executed" ? runtime.outputs[DEFAULT_OUTPUT4].value : [];
|
|
1373
|
+
const handleAction = (action) => {
|
|
1374
|
+
if (action === "run") {
|
|
1375
|
+
runtime.evalNode();
|
|
1376
|
+
}
|
|
1377
|
+
};
|
|
1378
|
+
return /* @__PURE__ */ React12.createElement(Box, {
|
|
1379
|
+
shape,
|
|
1380
|
+
status: `${items.length} items`,
|
|
1381
|
+
onAction: handleAction
|
|
1382
|
+
}, /* @__PURE__ */ React12.createElement(ScrollArea.Root, {
|
|
1383
|
+
orientation: "vertical"
|
|
1384
|
+
}, /* @__PURE__ */ React12.createElement(ScrollArea.Viewport, {
|
|
1385
|
+
classNames: "divide-y divide-separator"
|
|
1386
|
+
}, [
|
|
1387
|
+
...items
|
|
1388
|
+
].map((item, i) => /* @__PURE__ */ React12.createElement(FeedItem, {
|
|
1389
|
+
key: i,
|
|
1390
|
+
classNames: "p-1 px-2",
|
|
1391
|
+
item
|
|
1392
|
+
})))));
|
|
1393
|
+
};
|
|
1394
|
+
var FeedItem = ({ classNames, item }) => {
|
|
1395
|
+
if (typeof item !== "object") {
|
|
1396
|
+
return /* @__PURE__ */ React12.createElement("div", {
|
|
1397
|
+
className: mx2(classNames, "whitespace-pre-wrap")
|
|
1398
|
+
}, item);
|
|
1399
|
+
}
|
|
1400
|
+
return /* @__PURE__ */ React12.createElement("div", {
|
|
1401
|
+
className: mx2("grid grid-cols-[80px_1fr]", classNames)
|
|
1402
|
+
}, Object.entries(item).map(([key, value]) => /* @__PURE__ */ React12.createElement(Fragment, {
|
|
1403
|
+
key
|
|
1404
|
+
}, /* @__PURE__ */ React12.createElement("div", {
|
|
1405
|
+
className: "p-1 text-xs text-subdued"
|
|
1406
|
+
}, key), /* @__PURE__ */ React12.createElement("div", null, typeof value === "string" ? value : JSON.stringify(value)))));
|
|
1407
|
+
};
|
|
1408
|
+
var feedShape = {
|
|
1409
|
+
type: "feed",
|
|
1410
|
+
name: "Feed",
|
|
1411
|
+
icon: "ph--queue--regular",
|
|
1412
|
+
component: FeedComponent,
|
|
1413
|
+
createShape: createFeed,
|
|
1414
|
+
getAnchors: (shape) => createFunctionAnchors(shape, QueueInput, QueueOutput),
|
|
1415
|
+
resizable: true
|
|
1416
|
+
};
|
|
1417
|
+
|
|
1408
1418
|
// src/shapes/Function.tsx
|
|
1409
|
-
import
|
|
1410
|
-
import {
|
|
1411
|
-
import React12, { useCallback as useCallback3, useRef as useRef4 } from "react";
|
|
1419
|
+
import * as Schema12 from "effect/Schema";
|
|
1420
|
+
import React13, { useCallback as useCallback3, useRef as useRef4 } from "react";
|
|
1412
1421
|
import { AnyOutput, FunctionInput } from "@dxos/conductor";
|
|
1413
|
-
import { Ref as Ref2, getSnapshot, isInstanceOf } from "@dxos/echo
|
|
1414
|
-
import {
|
|
1422
|
+
import { Ref as Ref2, getSnapshot, isInstanceOf } from "@dxos/echo/internal";
|
|
1423
|
+
import { Script } from "@dxos/functions";
|
|
1424
|
+
import { Operation } from "@dxos/operation";
|
|
1415
1425
|
import { useClient } from "@dxos/react-client";
|
|
1416
1426
|
import { Filter, parseId } from "@dxos/react-client/echo";
|
|
1417
1427
|
import { TextBox as TextBox3 } from "@dxos/react-ui-canvas-editor";
|
|
1418
|
-
var FunctionShape =
|
|
1419
|
-
type:
|
|
1428
|
+
var FunctionShape = Schema12.extend(ComputeShape, Schema12.Struct({
|
|
1429
|
+
type: Schema12.Literal("function")
|
|
1420
1430
|
}));
|
|
1421
1431
|
var createFunction = (props) => createShape({
|
|
1422
1432
|
type: "function",
|
|
@@ -1427,59 +1437,54 @@ var createFunction = (props) => createShape({
|
|
|
1427
1437
|
...props
|
|
1428
1438
|
});
|
|
1429
1439
|
var TextInputComponent2 = ({ shape, title, ...props }) => {
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
const
|
|
1435
|
-
const
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
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
|
-
onEnter: handleEnter
|
|
1479
|
-
}));
|
|
1480
|
-
} finally {
|
|
1481
|
-
_effect.f();
|
|
1482
|
-
}
|
|
1440
|
+
const client = useClient();
|
|
1441
|
+
const { node, runtime } = useComputeNodeState(shape);
|
|
1442
|
+
const inputRef = useRef4(null);
|
|
1443
|
+
const handleEnter = useCallback3(async (text) => {
|
|
1444
|
+
const value = text.trim();
|
|
1445
|
+
const { spaceId, objectId } = parseId(value);
|
|
1446
|
+
if (!spaceId || !objectId) {
|
|
1447
|
+
return;
|
|
1448
|
+
}
|
|
1449
|
+
const space = client.spaces.get(spaceId);
|
|
1450
|
+
const object = space?.db.getObjectById(objectId);
|
|
1451
|
+
if (!space || !isInstanceOf(Script.Script, object)) {
|
|
1452
|
+
return;
|
|
1453
|
+
}
|
|
1454
|
+
const [fn] = await space.db.query(Filter.type(Operation.PersistentOperation, {
|
|
1455
|
+
source: Ref2.make(object)
|
|
1456
|
+
})).run();
|
|
1457
|
+
if (!fn) {
|
|
1458
|
+
return;
|
|
1459
|
+
}
|
|
1460
|
+
node.value = value;
|
|
1461
|
+
node.function = Ref2.make(fn);
|
|
1462
|
+
node.inputSchema = fn.inputSchema ? getSnapshot(fn.inputSchema) : void 0;
|
|
1463
|
+
node.outputSchema = fn.outputSchema ? getSnapshot(fn.outputSchema) : void 0;
|
|
1464
|
+
}, [
|
|
1465
|
+
client,
|
|
1466
|
+
node
|
|
1467
|
+
]);
|
|
1468
|
+
const handleAction = useCallback3((action) => {
|
|
1469
|
+
if (action !== "run") {
|
|
1470
|
+
return;
|
|
1471
|
+
}
|
|
1472
|
+
runtime.evalNode();
|
|
1473
|
+
}, [
|
|
1474
|
+
runtime
|
|
1475
|
+
]);
|
|
1476
|
+
return /* @__PURE__ */ React13.createElement(Box, {
|
|
1477
|
+
shape,
|
|
1478
|
+
title: "Function",
|
|
1479
|
+
onAction: handleAction
|
|
1480
|
+
}, /* @__PURE__ */ React13.createElement(TextBox3, {
|
|
1481
|
+
...props,
|
|
1482
|
+
ref: inputRef,
|
|
1483
|
+
value: node.value,
|
|
1484
|
+
language: node.valueType === "object" ? "json" : void 0,
|
|
1485
|
+
onBlur: handleEnter,
|
|
1486
|
+
onEnter: handleEnter
|
|
1487
|
+
}));
|
|
1483
1488
|
};
|
|
1484
1489
|
var functionShape = {
|
|
1485
1490
|
type: "function",
|
|
@@ -1491,12 +1496,12 @@ var functionShape = {
|
|
|
1491
1496
|
};
|
|
1492
1497
|
|
|
1493
1498
|
// src/shapes/Gpt.tsx
|
|
1494
|
-
import
|
|
1495
|
-
import {
|
|
1496
|
-
import React13, { useEffect as useEffect4, useState as useState6 } from "react";
|
|
1499
|
+
import * as Schema13 from "effect/Schema";
|
|
1500
|
+
import React14, { useEffect as useEffect4, useState as useState6 } from "react";
|
|
1497
1501
|
import { GptInput, GptOutput } from "@dxos/conductor";
|
|
1498
|
-
|
|
1499
|
-
|
|
1502
|
+
import { ScrollArea as ScrollArea2 } from "@dxos/react-ui";
|
|
1503
|
+
var GptShape = Schema13.extend(ComputeShape, Schema13.Struct({
|
|
1504
|
+
type: Schema13.Literal("gpt")
|
|
1500
1505
|
}));
|
|
1501
1506
|
var createGpt = (props) => createShape({
|
|
1502
1507
|
type: "gpt",
|
|
@@ -1507,54 +1512,50 @@ var createGpt = (props) => createShape({
|
|
|
1507
1512
|
...props
|
|
1508
1513
|
});
|
|
1509
1514
|
var GptComponent = ({ shape }) => {
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
const
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
});
|
|
1534
|
-
break;
|
|
1535
|
-
}
|
|
1515
|
+
const { meta, runtime } = useComputeNodeState(shape);
|
|
1516
|
+
const [text, setText] = useState6("");
|
|
1517
|
+
const [tokens, setTokens] = useState6(0);
|
|
1518
|
+
useEffect4(() => {
|
|
1519
|
+
return runtime.subscribeToEventLog((ev) => {
|
|
1520
|
+
switch (ev.type) {
|
|
1521
|
+
case "begin-compute": {
|
|
1522
|
+
setText("");
|
|
1523
|
+
break;
|
|
1524
|
+
}
|
|
1525
|
+
case "custom": {
|
|
1526
|
+
const token = ev.event;
|
|
1527
|
+
switch (token.type) {
|
|
1528
|
+
case "content_block_delta":
|
|
1529
|
+
switch (token.delta.type) {
|
|
1530
|
+
case "text_delta": {
|
|
1531
|
+
const delta = token.delta.text;
|
|
1532
|
+
setText((prev) => {
|
|
1533
|
+
const text2 = prev + delta;
|
|
1534
|
+
setTokens(text2.split(" ").length);
|
|
1535
|
+
return text2;
|
|
1536
|
+
});
|
|
1537
|
+
break;
|
|
1536
1538
|
}
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
break;
|
|
1539
|
+
}
|
|
1540
|
+
break;
|
|
1540
1541
|
}
|
|
1542
|
+
break;
|
|
1541
1543
|
}
|
|
1542
|
-
}
|
|
1543
|
-
}, [
|
|
1544
|
-
runtime?.subscribeToEventLog
|
|
1545
|
-
]);
|
|
1546
|
-
return /* @__PURE__ */ React13.createElement(FunctionBody, {
|
|
1547
|
-
shape,
|
|
1548
|
-
content: /* @__PURE__ */ React13.createElement("div", {
|
|
1549
|
-
className: "px-2 py-1 overflow-y-scroll"
|
|
1550
|
-
}, text),
|
|
1551
|
-
status: `${tokens} tokens`,
|
|
1552
|
-
inputSchema: meta.input,
|
|
1553
|
-
outputSchema: meta.output
|
|
1544
|
+
}
|
|
1554
1545
|
});
|
|
1555
|
-
}
|
|
1556
|
-
|
|
1557
|
-
|
|
1546
|
+
}, [
|
|
1547
|
+
runtime?.subscribeToEventLog
|
|
1548
|
+
]);
|
|
1549
|
+
return /* @__PURE__ */ React14.createElement(FunctionBody, {
|
|
1550
|
+
shape,
|
|
1551
|
+
content: /* @__PURE__ */ React14.createElement(ScrollArea2.Root, {
|
|
1552
|
+
orientation: "vertical",
|
|
1553
|
+
thin: true
|
|
1554
|
+
}, /* @__PURE__ */ React14.createElement(ScrollArea2.Viewport, null, text)),
|
|
1555
|
+
status: `${tokens} tokens`,
|
|
1556
|
+
inputSchema: meta.input,
|
|
1557
|
+
outputSchema: meta.output
|
|
1558
|
+
});
|
|
1558
1559
|
};
|
|
1559
1560
|
var gptShape = {
|
|
1560
1561
|
type: "gpt",
|
|
@@ -1566,44 +1567,162 @@ var gptShape = {
|
|
|
1566
1567
|
openable: true
|
|
1567
1568
|
};
|
|
1568
1569
|
|
|
1570
|
+
// src/shapes/GptRealtime.tsx
|
|
1571
|
+
import * as Schema14 from "effect/Schema";
|
|
1572
|
+
import React15, { useState as useState7 } from "react";
|
|
1573
|
+
import { log as log2 } from "@dxos/log";
|
|
1574
|
+
import { useConfig } from "@dxos/react-client";
|
|
1575
|
+
import { Icon as Icon4 } from "@dxos/react-ui";
|
|
1576
|
+
var __dxlog_file6 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/shapes/GptRealtime.tsx";
|
|
1577
|
+
var GptRealtimeShape = Schema14.extend(ComputeShape, Schema14.Struct({
|
|
1578
|
+
type: Schema14.Literal("gpt-realtime")
|
|
1579
|
+
}));
|
|
1580
|
+
var createGptRealtime = (props) => createShape({
|
|
1581
|
+
type: "gpt-realtime",
|
|
1582
|
+
size: {
|
|
1583
|
+
width: 256,
|
|
1584
|
+
height: 256
|
|
1585
|
+
},
|
|
1586
|
+
...props
|
|
1587
|
+
});
|
|
1588
|
+
var GptRealtimeComponent = ({ shape }) => {
|
|
1589
|
+
const [isLive, setIsLive] = useState7(false);
|
|
1590
|
+
const [isReady, setIsReady] = useState7(false);
|
|
1591
|
+
const config = useConfig();
|
|
1592
|
+
const start = async () => {
|
|
1593
|
+
setIsLive(true);
|
|
1594
|
+
try {
|
|
1595
|
+
const peerConnection = new RTCPeerConnection();
|
|
1596
|
+
peerConnection.ontrack = (event) => {
|
|
1597
|
+
const audioElement = document.createElement("audio");
|
|
1598
|
+
audioElement.srcObject = event.streams[0];
|
|
1599
|
+
audioElement.autoplay = true;
|
|
1600
|
+
audioElement.controls = false;
|
|
1601
|
+
audioElement.style.display = "none";
|
|
1602
|
+
document.body.appendChild(audioElement);
|
|
1603
|
+
setIsReady(true);
|
|
1604
|
+
};
|
|
1605
|
+
const stream = await navigator.mediaDevices.getUserMedia({
|
|
1606
|
+
audio: true
|
|
1607
|
+
});
|
|
1608
|
+
stream.getTracks().forEach((track) => peerConnection.addTransceiver(track, {
|
|
1609
|
+
direction: "sendrecv"
|
|
1610
|
+
}));
|
|
1611
|
+
const offer = await peerConnection.createOffer();
|
|
1612
|
+
await peerConnection.setLocalDescription(offer);
|
|
1613
|
+
const AiServiceUrl = new URL("/rtc-connect", config.values.runtime?.services?.ai?.server ?? DEFAULT_AI_SERVICE_URL);
|
|
1614
|
+
const response = await fetch(AiServiceUrl, {
|
|
1615
|
+
method: "POST",
|
|
1616
|
+
body: offer.sdp,
|
|
1617
|
+
headers: {
|
|
1618
|
+
"Content-Type": "application/sdp"
|
|
1619
|
+
}
|
|
1620
|
+
});
|
|
1621
|
+
const answer = await response.text();
|
|
1622
|
+
await peerConnection.setRemoteDescription({
|
|
1623
|
+
sdp: answer,
|
|
1624
|
+
type: "answer"
|
|
1625
|
+
});
|
|
1626
|
+
const dataChannel = peerConnection.createDataChannel("response");
|
|
1627
|
+
const configureData = () => {
|
|
1628
|
+
log2.info("Configuring data channel", void 0, {
|
|
1629
|
+
F: __dxlog_file6,
|
|
1630
|
+
L: 87,
|
|
1631
|
+
S: void 0,
|
|
1632
|
+
C: (f, a) => f(...a)
|
|
1633
|
+
});
|
|
1634
|
+
const event = {
|
|
1635
|
+
type: "session.update",
|
|
1636
|
+
session: {
|
|
1637
|
+
modalities: [
|
|
1638
|
+
"text",
|
|
1639
|
+
"audio"
|
|
1640
|
+
],
|
|
1641
|
+
// Provide the tools. Note they match the keys in the `fns` object above
|
|
1642
|
+
tools: []
|
|
1643
|
+
}
|
|
1644
|
+
};
|
|
1645
|
+
dataChannel.send(JSON.stringify(event));
|
|
1646
|
+
};
|
|
1647
|
+
dataChannel.addEventListener("open", (ev) => {
|
|
1648
|
+
log2.info("Opening data channel", {
|
|
1649
|
+
ev
|
|
1650
|
+
}, {
|
|
1651
|
+
F: __dxlog_file6,
|
|
1652
|
+
L: 100,
|
|
1653
|
+
S: void 0,
|
|
1654
|
+
C: (f, a) => f(...a)
|
|
1655
|
+
});
|
|
1656
|
+
configureData();
|
|
1657
|
+
});
|
|
1658
|
+
dataChannel.addEventListener("message", async (ev) => {
|
|
1659
|
+
const msg = JSON.parse(ev.data);
|
|
1660
|
+
if (msg.type === "response.function_call_arguments.done") {
|
|
1661
|
+
}
|
|
1662
|
+
});
|
|
1663
|
+
} catch (error) {
|
|
1664
|
+
log2.error("Error in realtime session:", {
|
|
1665
|
+
error
|
|
1666
|
+
}, {
|
|
1667
|
+
F: __dxlog_file6,
|
|
1668
|
+
L: 140,
|
|
1669
|
+
S: void 0,
|
|
1670
|
+
C: (f, a) => f(...a)
|
|
1671
|
+
});
|
|
1672
|
+
throw error;
|
|
1673
|
+
}
|
|
1674
|
+
};
|
|
1675
|
+
return /* @__PURE__ */ React15.createElement("div", {
|
|
1676
|
+
className: "flex w-full justify-center items-center"
|
|
1677
|
+
}, /* @__PURE__ */ React15.createElement(Icon4, {
|
|
1678
|
+
icon: isReady ? "ph--waveform--regular" : isLive ? "ph--pulse--regular" : "ph--play--regular",
|
|
1679
|
+
size: 16,
|
|
1680
|
+
classNames: !isLive && "cursor-pointer",
|
|
1681
|
+
onClick: start
|
|
1682
|
+
}));
|
|
1683
|
+
};
|
|
1684
|
+
var gptRealtimeShape = {
|
|
1685
|
+
type: "gpt-realtime",
|
|
1686
|
+
name: "GPT Realtime",
|
|
1687
|
+
icon: "ph--pulse--regular",
|
|
1688
|
+
component: GptRealtimeComponent,
|
|
1689
|
+
createShape: createGptRealtime,
|
|
1690
|
+
// TODO(dmaretskyi): Can we fetch the schema dynamically?
|
|
1691
|
+
getAnchors: (shape) => createFunctionAnchors(shape, Schema14.Struct({
|
|
1692
|
+
audio: Schema14.Any
|
|
1693
|
+
}), Schema14.Struct({})),
|
|
1694
|
+
resizable: true
|
|
1695
|
+
};
|
|
1696
|
+
var DEFAULT_AI_SERVICE_URL = "http://localhost:8788";
|
|
1697
|
+
|
|
1569
1698
|
// src/shapes/Json.tsx
|
|
1570
|
-
import
|
|
1571
|
-
import
|
|
1572
|
-
import React14 from "react";
|
|
1699
|
+
import * as Schema15 from "effect/Schema";
|
|
1700
|
+
import React16 from "react";
|
|
1573
1701
|
import { DEFAULT_INPUT as DEFAULT_INPUT4, DefaultOutput, JsonTransformInput } from "@dxos/conductor";
|
|
1574
1702
|
import { createAnchorMap as createAnchorMap6 } from "@dxos/react-ui-canvas-editor";
|
|
1575
|
-
import {
|
|
1576
|
-
var JsonShape =
|
|
1577
|
-
type:
|
|
1703
|
+
import { Json } from "@dxos/react-ui-syntax-highlighter";
|
|
1704
|
+
var JsonShape = Schema15.extend(ComputeShape, Schema15.Struct({
|
|
1705
|
+
type: Schema15.Literal("json")
|
|
1578
1706
|
}));
|
|
1579
|
-
var JsonTransformShape =
|
|
1580
|
-
type:
|
|
1707
|
+
var JsonTransformShape = Schema15.extend(ComputeShape, Schema15.Struct({
|
|
1708
|
+
type: Schema15.Literal("json-transform")
|
|
1581
1709
|
}));
|
|
1582
1710
|
var JsonComponent = ({ shape, ...props }) => {
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
}));
|
|
1594
|
-
} finally {
|
|
1595
|
-
_effect.f();
|
|
1596
|
-
}
|
|
1711
|
+
const { runtime } = useComputeNodeState(shape);
|
|
1712
|
+
const input = runtime.inputs[DEFAULT_INPUT4];
|
|
1713
|
+
const value = input?.type === "executed" ? input.value : void 0;
|
|
1714
|
+
return /* @__PURE__ */ React16.createElement(Box, {
|
|
1715
|
+
shape
|
|
1716
|
+
}, /* @__PURE__ */ React16.createElement(Json.Root, {
|
|
1717
|
+
data: value
|
|
1718
|
+
}, /* @__PURE__ */ React16.createElement(Json.Content, null, /* @__PURE__ */ React16.createElement(Json.Filter, null), /* @__PURE__ */ React16.createElement(Json.Data, {
|
|
1719
|
+
classNames: "text-xs"
|
|
1720
|
+
}))));
|
|
1597
1721
|
};
|
|
1598
1722
|
var JsonTransformComponent = ({ shape, ...props }) => {
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
shape
|
|
1603
|
-
});
|
|
1604
|
-
} finally {
|
|
1605
|
-
_effect.f();
|
|
1606
|
-
}
|
|
1723
|
+
return /* @__PURE__ */ React16.createElement(Box, {
|
|
1724
|
+
shape
|
|
1725
|
+
});
|
|
1607
1726
|
};
|
|
1608
1727
|
var createJson = (props) => createShape({
|
|
1609
1728
|
type: "json",
|
|
@@ -1617,7 +1736,7 @@ var jsonShape = {
|
|
|
1617
1736
|
type: "json",
|
|
1618
1737
|
name: "JSON",
|
|
1619
1738
|
icon: "ph--code--regular",
|
|
1620
|
-
component: (props) => /* @__PURE__ */
|
|
1739
|
+
component: (props) => /* @__PURE__ */ React16.createElement(JsonComponent, props),
|
|
1621
1740
|
createShape: createJson,
|
|
1622
1741
|
getAnchors: (shape) => createAnchorMap6(shape, {
|
|
1623
1742
|
[createAnchorId("input")]: {
|
|
@@ -1643,46 +1762,35 @@ var jsonTransformShape = {
|
|
|
1643
1762
|
type: "json-transform",
|
|
1644
1763
|
name: "Transform",
|
|
1645
1764
|
icon: "ph--shuffle-simple--regular",
|
|
1646
|
-
component: (props) => /* @__PURE__ */
|
|
1765
|
+
component: (props) => /* @__PURE__ */ React16.createElement(JsonTransformComponent, props),
|
|
1647
1766
|
createShape: createJsonTransform,
|
|
1648
1767
|
getAnchors: (shape) => createFunctionAnchors(shape, JsonTransformInput, DefaultOutput),
|
|
1649
1768
|
resizable: true
|
|
1650
1769
|
};
|
|
1651
1770
|
|
|
1652
1771
|
// src/shapes/Logic.tsx
|
|
1653
|
-
import
|
|
1654
|
-
import
|
|
1655
|
-
import React15 from "react";
|
|
1772
|
+
import * as Schema16 from "effect/Schema";
|
|
1773
|
+
import React17 from "react";
|
|
1656
1774
|
import { IfElseInput, IfElseOutput, IfInput, IfOutput } from "@dxos/conductor";
|
|
1657
|
-
var IfShape =
|
|
1658
|
-
type:
|
|
1775
|
+
var IfShape = Schema16.extend(ComputeShape, Schema16.Struct({
|
|
1776
|
+
type: Schema16.Literal("if")
|
|
1659
1777
|
}));
|
|
1660
|
-
var IfElseShape =
|
|
1661
|
-
type:
|
|
1778
|
+
var IfElseShape = Schema16.extend(ComputeShape, Schema16.Struct({
|
|
1779
|
+
type: Schema16.Literal("if-else")
|
|
1662
1780
|
}));
|
|
1663
1781
|
var IfComponent = ({ shape, ...props }) => {
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
outputSchema: IfOutput
|
|
1670
|
-
});
|
|
1671
|
-
} finally {
|
|
1672
|
-
_effect.f();
|
|
1673
|
-
}
|
|
1782
|
+
return /* @__PURE__ */ React17.createElement(FunctionBody, {
|
|
1783
|
+
shape,
|
|
1784
|
+
inputSchema: IfInput,
|
|
1785
|
+
outputSchema: IfOutput
|
|
1786
|
+
});
|
|
1674
1787
|
};
|
|
1675
1788
|
var IfElseComponent = ({ shape, ...props }) => {
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
outputSchema: IfElseOutput
|
|
1682
|
-
});
|
|
1683
|
-
} finally {
|
|
1684
|
-
_effect.f();
|
|
1685
|
-
}
|
|
1789
|
+
return /* @__PURE__ */ React17.createElement(FunctionBody, {
|
|
1790
|
+
shape,
|
|
1791
|
+
inputSchema: IfElseInput,
|
|
1792
|
+
outputSchema: IfElseOutput
|
|
1793
|
+
});
|
|
1686
1794
|
};
|
|
1687
1795
|
var createIf = (props) => createShape({
|
|
1688
1796
|
type: "if",
|
|
@@ -1696,7 +1804,7 @@ var ifShape = {
|
|
|
1696
1804
|
type: "if",
|
|
1697
1805
|
name: "IF",
|
|
1698
1806
|
icon: "ph--arrows-split--regular",
|
|
1699
|
-
component: (props) => /* @__PURE__ */
|
|
1807
|
+
component: (props) => /* @__PURE__ */ React17.createElement(IfComponent, props),
|
|
1700
1808
|
createShape: createIf,
|
|
1701
1809
|
getAnchors: (shape) => createFunctionAnchors(shape, IfInput, IfOutput)
|
|
1702
1810
|
};
|
|
@@ -1712,95 +1820,21 @@ var ifElseShape = {
|
|
|
1712
1820
|
type: "if-else",
|
|
1713
1821
|
name: "IF/ELSE",
|
|
1714
1822
|
icon: "ph--arrows-merge--regular",
|
|
1715
|
-
component: (props) => /* @__PURE__ */
|
|
1823
|
+
component: (props) => /* @__PURE__ */ React17.createElement(IfElseComponent, props),
|
|
1716
1824
|
createShape: createIfElse,
|
|
1717
1825
|
getAnchors: (shape) => createFunctionAnchors(shape, IfElseInput, IfElseOutput)
|
|
1718
1826
|
};
|
|
1719
1827
|
|
|
1720
|
-
// src/shapes/Queue.tsx
|
|
1721
|
-
import { useSignals as _useSignals15 } from "@preact-signals/safe-react/tracking";
|
|
1722
|
-
import { Schema as Schema15 } from "effect";
|
|
1723
|
-
import React16, { Fragment } from "react";
|
|
1724
|
-
import { DEFAULT_OUTPUT as DEFAULT_OUTPUT4, QueueInput, QueueOutput } from "@dxos/conductor";
|
|
1725
|
-
import { mx as mx2 } from "@dxos/react-ui-theme";
|
|
1726
|
-
var QueueShape = Schema15.extend(ComputeShape, Schema15.Struct({
|
|
1727
|
-
type: Schema15.Literal("queue")
|
|
1728
|
-
}));
|
|
1729
|
-
var createQueue = (props) => createShape({
|
|
1730
|
-
type: "queue",
|
|
1731
|
-
size: {
|
|
1732
|
-
width: 256,
|
|
1733
|
-
height: 512
|
|
1734
|
-
},
|
|
1735
|
-
...props
|
|
1736
|
-
});
|
|
1737
|
-
var QueueComponent = ({ shape }) => {
|
|
1738
|
-
var _effect = _useSignals15();
|
|
1739
|
-
try {
|
|
1740
|
-
const { runtime } = useComputeNodeState(shape);
|
|
1741
|
-
const items = runtime.outputs[DEFAULT_OUTPUT4]?.type === "executed" ? runtime.outputs[DEFAULT_OUTPUT4].value : [];
|
|
1742
|
-
const handleAction = (action) => {
|
|
1743
|
-
if (action === "run") {
|
|
1744
|
-
runtime.evalNode();
|
|
1745
|
-
}
|
|
1746
|
-
};
|
|
1747
|
-
return /* @__PURE__ */ React16.createElement(Box, {
|
|
1748
|
-
shape,
|
|
1749
|
-
status: `${items.length} items`,
|
|
1750
|
-
onAction: handleAction
|
|
1751
|
-
}, /* @__PURE__ */ React16.createElement("div", {
|
|
1752
|
-
className: "flex flex-col w-full overflow-y-scroll divide-y divide-separator"
|
|
1753
|
-
}, [
|
|
1754
|
-
...items
|
|
1755
|
-
].map((item, i) => /* @__PURE__ */ React16.createElement(QueueItem, {
|
|
1756
|
-
key: i,
|
|
1757
|
-
classNames: "p-1 px-2",
|
|
1758
|
-
item
|
|
1759
|
-
}))));
|
|
1760
|
-
} finally {
|
|
1761
|
-
_effect.f();
|
|
1762
|
-
}
|
|
1763
|
-
};
|
|
1764
|
-
var QueueItem = ({ classNames, item }) => {
|
|
1765
|
-
var _effect = _useSignals15();
|
|
1766
|
-
try {
|
|
1767
|
-
if (typeof item !== "object") {
|
|
1768
|
-
return /* @__PURE__ */ React16.createElement("div", {
|
|
1769
|
-
className: mx2(classNames, "whitespace-pre-wrap")
|
|
1770
|
-
}, item);
|
|
1771
|
-
}
|
|
1772
|
-
return /* @__PURE__ */ React16.createElement("div", {
|
|
1773
|
-
className: mx2("grid grid-cols-[80px,1fr]", classNames)
|
|
1774
|
-
}, Object.entries(item).map(([key, value]) => /* @__PURE__ */ React16.createElement(Fragment, {
|
|
1775
|
-
key
|
|
1776
|
-
}, /* @__PURE__ */ React16.createElement("div", {
|
|
1777
|
-
className: "p-1 text-xs text-subdued"
|
|
1778
|
-
}, key), /* @__PURE__ */ React16.createElement("div", null, typeof value === "string" ? value : JSON.stringify(value)))));
|
|
1779
|
-
} finally {
|
|
1780
|
-
_effect.f();
|
|
1781
|
-
}
|
|
1782
|
-
};
|
|
1783
|
-
var queueShape = {
|
|
1784
|
-
type: "queue",
|
|
1785
|
-
name: "Queue",
|
|
1786
|
-
icon: "ph--queue--regular",
|
|
1787
|
-
component: QueueComponent,
|
|
1788
|
-
createShape: createQueue,
|
|
1789
|
-
getAnchors: (shape) => createFunctionAnchors(shape, QueueInput, QueueOutput),
|
|
1790
|
-
resizable: true
|
|
1791
|
-
};
|
|
1792
|
-
|
|
1793
1828
|
// src/shapes/RNG.tsx
|
|
1794
|
-
import
|
|
1795
|
-
import {
|
|
1796
|
-
import React17, { useEffect as useEffect5, useState as useState7 } from "react";
|
|
1829
|
+
import * as Schema17 from "effect/Schema";
|
|
1830
|
+
import React18, { useEffect as useEffect5, useState as useState8 } from "react";
|
|
1797
1831
|
import { DEFAULT_OUTPUT as DEFAULT_OUTPUT5 } from "@dxos/conductor";
|
|
1798
|
-
import { Icon as
|
|
1832
|
+
import { Icon as Icon5 } from "@dxos/react-ui";
|
|
1799
1833
|
import { createAnchorMap as createAnchorMap7 } from "@dxos/react-ui-canvas-editor";
|
|
1800
|
-
var RandomShape =
|
|
1801
|
-
type:
|
|
1802
|
-
min:
|
|
1803
|
-
max:
|
|
1834
|
+
var RandomShape = Schema17.extend(ComputeShape, Schema17.Struct({
|
|
1835
|
+
type: Schema17.Literal("rng"),
|
|
1836
|
+
min: Schema17.optional(Schema17.Number),
|
|
1837
|
+
max: Schema17.optional(Schema17.Number)
|
|
1804
1838
|
}));
|
|
1805
1839
|
var createRandom = (props) => createShape({
|
|
1806
1840
|
type: "rng",
|
|
@@ -1820,42 +1854,37 @@ var icons = [
|
|
|
1820
1854
|
];
|
|
1821
1855
|
var pickIcon = () => icons[Math.floor(Math.random() * icons.length)];
|
|
1822
1856
|
var RandomComponent = ({ shape }) => {
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
clearTimeout(t1);
|
|
1838
|
-
clearTimeout(t2);
|
|
1839
|
-
};
|
|
1840
|
-
}, [
|
|
1841
|
-
spin
|
|
1842
|
-
]);
|
|
1843
|
-
const handleClick = (ev) => {
|
|
1844
|
-
ev.stopPropagation();
|
|
1845
|
-
runtime.setOutput(DEFAULT_OUTPUT5, Math.random());
|
|
1846
|
-
setSpin(true);
|
|
1857
|
+
const { runtime } = useComputeNodeState(shape);
|
|
1858
|
+
const [spin, setSpin] = useState8(false);
|
|
1859
|
+
const [icon, setIcon] = useState8(pickIcon());
|
|
1860
|
+
useEffect5(() => {
|
|
1861
|
+
if (!spin) {
|
|
1862
|
+
return;
|
|
1863
|
+
}
|
|
1864
|
+
const i = setInterval(() => setIcon(pickIcon()), 250);
|
|
1865
|
+
const t1 = setTimeout(() => clearInterval(i), 900);
|
|
1866
|
+
const t2 = setTimeout(() => setSpin(false), 1100);
|
|
1867
|
+
return () => {
|
|
1868
|
+
clearInterval(i);
|
|
1869
|
+
clearTimeout(t1);
|
|
1870
|
+
clearTimeout(t2);
|
|
1847
1871
|
};
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
}
|
|
1872
|
+
}, [
|
|
1873
|
+
spin
|
|
1874
|
+
]);
|
|
1875
|
+
const handleClick = (ev) => {
|
|
1876
|
+
ev.stopPropagation();
|
|
1877
|
+
runtime.setOutput(DEFAULT_OUTPUT5, Math.random());
|
|
1878
|
+
setSpin(true);
|
|
1879
|
+
};
|
|
1880
|
+
return /* @__PURE__ */ React18.createElement("div", {
|
|
1881
|
+
className: "flex grow items-center justify-center"
|
|
1882
|
+
}, /* @__PURE__ */ React18.createElement(Icon5, {
|
|
1883
|
+
icon,
|
|
1884
|
+
classNames: spin && "animate-[spin_1s]",
|
|
1885
|
+
size: 10,
|
|
1886
|
+
onClick: handleClick
|
|
1887
|
+
}));
|
|
1859
1888
|
};
|
|
1860
1889
|
var randomShape = {
|
|
1861
1890
|
type: "rng",
|
|
@@ -1872,14 +1901,13 @@ var randomShape = {
|
|
|
1872
1901
|
};
|
|
1873
1902
|
|
|
1874
1903
|
// src/shapes/Scope.tsx
|
|
1875
|
-
import
|
|
1876
|
-
import
|
|
1877
|
-
import React18 from "react";
|
|
1904
|
+
import * as Schema18 from "effect/Schema";
|
|
1905
|
+
import React19 from "react";
|
|
1878
1906
|
import { DEFAULT_INPUT as DEFAULT_INPUT5 } from "@dxos/conductor";
|
|
1879
1907
|
import { createAnchorMap as createAnchorMap8 } from "@dxos/react-ui-canvas-editor";
|
|
1880
1908
|
import { Chaos, shaderPresets, useAudioStream } from "@dxos/react-ui-sfx";
|
|
1881
|
-
var ScopeShape =
|
|
1882
|
-
type:
|
|
1909
|
+
var ScopeShape = Schema18.extend(ComputeShape, Schema18.Struct({
|
|
1910
|
+
type: Schema18.Literal("scope")
|
|
1883
1911
|
}));
|
|
1884
1912
|
var createScope = (props) => createShape({
|
|
1885
1913
|
type: "scope",
|
|
@@ -1891,25 +1919,20 @@ var createScope = (props) => createShape({
|
|
|
1891
1919
|
...props
|
|
1892
1920
|
});
|
|
1893
1921
|
var ScopeComponent = ({ shape }) => {
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
}
|
|
1909
|
-
}));
|
|
1910
|
-
} finally {
|
|
1911
|
-
_effect.f();
|
|
1912
|
-
}
|
|
1922
|
+
const { runtime } = useComputeNodeState(shape);
|
|
1923
|
+
const input = runtime.inputs[DEFAULT_INPUT5];
|
|
1924
|
+
const active = input?.type === "executed" ? input.value : false;
|
|
1925
|
+
const { getAverage } = useAudioStream(active);
|
|
1926
|
+
return /* @__PURE__ */ React19.createElement("div", {
|
|
1927
|
+
className: "flex w-full justify-center items-center bg-black"
|
|
1928
|
+
}, /* @__PURE__ */ React19.createElement(Chaos, {
|
|
1929
|
+
active,
|
|
1930
|
+
getValue: getAverage,
|
|
1931
|
+
options: {
|
|
1932
|
+
...shaderPresets.heptapod,
|
|
1933
|
+
zoom: 1.2
|
|
1934
|
+
}
|
|
1935
|
+
}));
|
|
1913
1936
|
};
|
|
1914
1937
|
var scopeShape = {
|
|
1915
1938
|
type: "scope",
|
|
@@ -1926,14 +1949,15 @@ var scopeShape = {
|
|
|
1926
1949
|
};
|
|
1927
1950
|
|
|
1928
1951
|
// src/shapes/Surface.tsx
|
|
1929
|
-
import
|
|
1930
|
-
import
|
|
1931
|
-
import
|
|
1932
|
-
import {
|
|
1952
|
+
import * as Schema19 from "effect/Schema";
|
|
1953
|
+
import React20 from "react";
|
|
1954
|
+
import { Surface } from "@dxos/app-framework/ui";
|
|
1955
|
+
import { AppSurface } from "@dxos/app-toolkit/ui";
|
|
1933
1956
|
import { DEFAULT_INPUT as DEFAULT_INPUT6 } from "@dxos/conductor";
|
|
1957
|
+
import { Card } from "@dxos/react-ui";
|
|
1934
1958
|
import { createAnchorMap as createAnchorMap9 } from "@dxos/react-ui-canvas-editor";
|
|
1935
|
-
var SurfaceShape =
|
|
1936
|
-
type:
|
|
1959
|
+
var SurfaceShape = Schema19.extend(ComputeShape, Schema19.Struct({
|
|
1960
|
+
type: Schema19.Literal("surface")
|
|
1937
1961
|
}));
|
|
1938
1962
|
var createSurface = (props) => createShape({
|
|
1939
1963
|
type: "surface",
|
|
@@ -1944,29 +1968,24 @@ var createSurface = (props) => createShape({
|
|
|
1944
1968
|
...props
|
|
1945
1969
|
});
|
|
1946
1970
|
var SurfaceComponent = ({ shape }) => {
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
limit: 1
|
|
1966
|
-
}));
|
|
1967
|
-
} finally {
|
|
1968
|
-
_effect.f();
|
|
1969
|
-
}
|
|
1971
|
+
const { runtime } = useComputeNodeState(shape);
|
|
1972
|
+
const input = runtime.inputs[DEFAULT_INPUT6];
|
|
1973
|
+
const value = input?.type === "executed" ? input.value : null;
|
|
1974
|
+
const handleAction = (action) => {
|
|
1975
|
+
if (action === "run") {
|
|
1976
|
+
runtime.evalNode();
|
|
1977
|
+
}
|
|
1978
|
+
};
|
|
1979
|
+
return /* @__PURE__ */ React20.createElement(Box, {
|
|
1980
|
+
shape,
|
|
1981
|
+
onAction: handleAction
|
|
1982
|
+
}, /* @__PURE__ */ React20.createElement(Card.Root, null, value !== null && /* @__PURE__ */ React20.createElement(Surface.Surface, {
|
|
1983
|
+
type: AppSurface.Card,
|
|
1984
|
+
data: {
|
|
1985
|
+
subject: value
|
|
1986
|
+
},
|
|
1987
|
+
limit: 1
|
|
1988
|
+
})));
|
|
1970
1989
|
};
|
|
1971
1990
|
var surfaceShape = {
|
|
1972
1991
|
type: "surface",
|
|
@@ -1984,14 +2003,13 @@ var surfaceShape = {
|
|
|
1984
2003
|
};
|
|
1985
2004
|
|
|
1986
2005
|
// src/shapes/Switch.tsx
|
|
1987
|
-
import
|
|
1988
|
-
import {
|
|
1989
|
-
import React20, { useEffect as useEffect6, useState as useState8 } from "react";
|
|
2006
|
+
import * as Schema20 from "effect/Schema";
|
|
2007
|
+
import React21, { useEffect as useEffect6, useState as useState9 } from "react";
|
|
1990
2008
|
import { DEFAULT_OUTPUT as DEFAULT_OUTPUT6 } from "@dxos/conductor";
|
|
1991
2009
|
import { Input as Input2 } from "@dxos/react-ui";
|
|
1992
2010
|
import { createAnchorMap as createAnchorMap10 } from "@dxos/react-ui-canvas-editor";
|
|
1993
|
-
var SwitchShape =
|
|
1994
|
-
type:
|
|
2011
|
+
var SwitchShape = Schema20.extend(ComputeShape, Schema20.Struct({
|
|
2012
|
+
type: Schema20.Literal("switch")
|
|
1995
2013
|
}));
|
|
1996
2014
|
var createSwitch = (props) => createShape({
|
|
1997
2015
|
type: "switch",
|
|
@@ -2002,25 +2020,20 @@ var createSwitch = (props) => createShape({
|
|
|
2002
2020
|
...props
|
|
2003
2021
|
});
|
|
2004
2022
|
var SwitchComponent = ({ shape }) => {
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
onCheckedChange: (value2) => setValue(value2)
|
|
2020
|
-
})));
|
|
2021
|
-
} finally {
|
|
2022
|
-
_effect.f();
|
|
2023
|
-
}
|
|
2023
|
+
const { runtime } = useComputeNodeState(shape);
|
|
2024
|
+
const [value, setValue] = useState9(false);
|
|
2025
|
+
useEffect6(() => {
|
|
2026
|
+
runtime.setOutput(DEFAULT_OUTPUT6, value);
|
|
2027
|
+
}, [
|
|
2028
|
+
value
|
|
2029
|
+
]);
|
|
2030
|
+
return /* @__PURE__ */ React21.createElement("div", {
|
|
2031
|
+
className: "flex w-full justify-center items-center",
|
|
2032
|
+
onClick: (ev) => ev.stopPropagation()
|
|
2033
|
+
}, /* @__PURE__ */ React21.createElement(Input2.Root, null, /* @__PURE__ */ React21.createElement(Input2.Switch, {
|
|
2034
|
+
checked: value,
|
|
2035
|
+
onCheckedChange: (value2) => setValue(value2)
|
|
2036
|
+
})));
|
|
2024
2037
|
};
|
|
2025
2038
|
var switchShape = {
|
|
2026
2039
|
type: "switch",
|
|
@@ -2037,15 +2050,14 @@ var switchShape = {
|
|
|
2037
2050
|
};
|
|
2038
2051
|
|
|
2039
2052
|
// src/shapes/Table.tsx
|
|
2040
|
-
import
|
|
2041
|
-
import
|
|
2042
|
-
import React21 from "react";
|
|
2053
|
+
import * as Schema21 from "effect/Schema";
|
|
2054
|
+
import React22 from "react";
|
|
2043
2055
|
import { createInputSchema, createOutputSchema } from "@dxos/conductor";
|
|
2044
|
-
import {
|
|
2045
|
-
var InputSchema = createInputSchema(
|
|
2046
|
-
var OutputSchema = createOutputSchema(
|
|
2047
|
-
var TableShape =
|
|
2048
|
-
type:
|
|
2056
|
+
import { Message } from "@dxos/types";
|
|
2057
|
+
var InputSchema = createInputSchema(Message.Message);
|
|
2058
|
+
var OutputSchema = createOutputSchema(Schema21.mutable(Schema21.Array(Message.Message)));
|
|
2059
|
+
var TableShape = Schema21.extend(ComputeShape, Schema21.Struct({
|
|
2060
|
+
type: Schema21.Literal("table")
|
|
2049
2061
|
}));
|
|
2050
2062
|
var createTable = (props) => createShape({
|
|
2051
2063
|
type: "table",
|
|
@@ -2056,14 +2068,9 @@ var createTable = (props) => createShape({
|
|
|
2056
2068
|
...props
|
|
2057
2069
|
});
|
|
2058
2070
|
var TableComponent = ({ shape }) => {
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
shape
|
|
2063
|
-
});
|
|
2064
|
-
} finally {
|
|
2065
|
-
_effect.f();
|
|
2066
|
-
}
|
|
2071
|
+
return /* @__PURE__ */ React22.createElement(Box, {
|
|
2072
|
+
shape
|
|
2073
|
+
});
|
|
2067
2074
|
};
|
|
2068
2075
|
var tableShape = {
|
|
2069
2076
|
type: "table",
|
|
@@ -2076,62 +2083,56 @@ var tableShape = {
|
|
|
2076
2083
|
};
|
|
2077
2084
|
|
|
2078
2085
|
// src/shapes/Template.tsx
|
|
2079
|
-
import
|
|
2080
|
-
import {
|
|
2081
|
-
import React22, { useRef as useRef5 } from "react";
|
|
2086
|
+
import * as Schema22 from "effect/Schema";
|
|
2087
|
+
import React23, { useRef as useRef5 } from "react";
|
|
2082
2088
|
import { ComputeValueType as ComputeValueType3, TemplateOutput, VoidInput as VoidInput2, getTemplateInputSchema as getTemplateInputSchema2 } from "@dxos/conductor";
|
|
2083
|
-
import { toJsonSchema
|
|
2089
|
+
import { toJsonSchema } from "@dxos/echo/internal";
|
|
2084
2090
|
import { invariant as invariant5 } from "@dxos/invariant";
|
|
2085
2091
|
import { TextBox as TextBox4 } from "@dxos/react-ui-canvas-editor";
|
|
2086
|
-
var
|
|
2087
|
-
var TemplateShape =
|
|
2088
|
-
type:
|
|
2089
|
-
valueType:
|
|
2092
|
+
var __dxlog_file7 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/shapes/Template.tsx";
|
|
2093
|
+
var TemplateShape = Schema22.extend(ComputeShape, Schema22.Struct({
|
|
2094
|
+
type: Schema22.Literal("template"),
|
|
2095
|
+
valueType: Schema22.optional(ComputeValueType3)
|
|
2090
2096
|
}));
|
|
2091
2097
|
var TextInputComponent3 = ({ shape, title, ...props }) => {
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
const
|
|
2096
|
-
|
|
2097
|
-
const
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
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
|
-
onEnter: handleEnter
|
|
2131
|
-
}));
|
|
2132
|
-
} finally {
|
|
2133
|
-
_effect.f();
|
|
2134
|
-
}
|
|
2098
|
+
const { node } = useComputeNodeState(shape);
|
|
2099
|
+
const inputRef = useRef5(null);
|
|
2100
|
+
const handleEnter = (text) => {
|
|
2101
|
+
const value = text.trim();
|
|
2102
|
+
if (value.length) {
|
|
2103
|
+
const schema = getTemplateInputSchema2(node);
|
|
2104
|
+
node.value = value;
|
|
2105
|
+
node.inputSchema = toJsonSchema(schema);
|
|
2106
|
+
}
|
|
2107
|
+
};
|
|
2108
|
+
const handleTypeChange = (newType) => {
|
|
2109
|
+
invariant5(Schema22.is(ComputeValueType3)(newType), "Invalid type", {
|
|
2110
|
+
F: __dxlog_file7,
|
|
2111
|
+
L: 58,
|
|
2112
|
+
S: void 0,
|
|
2113
|
+
A: [
|
|
2114
|
+
"Schema.is(ComputeValueType)(newType)",
|
|
2115
|
+
"'Invalid type'"
|
|
2116
|
+
]
|
|
2117
|
+
});
|
|
2118
|
+
node.valueType = newType;
|
|
2119
|
+
node.inputSchema = toJsonSchema(getTemplateInputSchema2(node));
|
|
2120
|
+
};
|
|
2121
|
+
return /* @__PURE__ */ React23.createElement(Box, {
|
|
2122
|
+
shape,
|
|
2123
|
+
title: "Template",
|
|
2124
|
+
status: /* @__PURE__ */ React23.createElement(TypeSelect, {
|
|
2125
|
+
value: node.valueType ?? "string",
|
|
2126
|
+
onValueChange: handleTypeChange
|
|
2127
|
+
})
|
|
2128
|
+
}, /* @__PURE__ */ React23.createElement(TextBox4, {
|
|
2129
|
+
...props,
|
|
2130
|
+
ref: inputRef,
|
|
2131
|
+
value: node.value,
|
|
2132
|
+
language: node.valueType === "object" ? "json" : void 0,
|
|
2133
|
+
onBlur: handleEnter,
|
|
2134
|
+
onEnter: handleEnter
|
|
2135
|
+
}));
|
|
2135
2136
|
};
|
|
2136
2137
|
var createTemplate = (props) => createShape({
|
|
2137
2138
|
type: "template",
|
|
@@ -2145,7 +2146,7 @@ var templateShape = {
|
|
|
2145
2146
|
type: "template",
|
|
2146
2147
|
name: "Template",
|
|
2147
2148
|
icon: "ph--article--regular",
|
|
2148
|
-
component: (props) => /* @__PURE__ */
|
|
2149
|
+
component: (props) => /* @__PURE__ */ React23.createElement(TextInputComponent3, {
|
|
2149
2150
|
...props,
|
|
2150
2151
|
placeholder: "Prompt"
|
|
2151
2152
|
}),
|
|
@@ -2155,14 +2156,13 @@ var templateShape = {
|
|
|
2155
2156
|
};
|
|
2156
2157
|
|
|
2157
2158
|
// src/shapes/Text.tsx
|
|
2158
|
-
import
|
|
2159
|
-
import
|
|
2160
|
-
import React23 from "react";
|
|
2159
|
+
import * as Schema23 from "effect/Schema";
|
|
2160
|
+
import React24 from "react";
|
|
2161
2161
|
import { DEFAULT_INPUT as DEFAULT_INPUT7 } from "@dxos/conductor";
|
|
2162
2162
|
import { TextBox as TextBox5 } from "@dxos/react-ui-canvas-editor";
|
|
2163
2163
|
import { createAnchorMap as createAnchorMap11 } from "@dxos/react-ui-canvas-editor";
|
|
2164
|
-
var TextShape =
|
|
2165
|
-
type:
|
|
2164
|
+
var TextShape = Schema23.extend(ComputeShape, Schema23.Struct({
|
|
2165
|
+
type: Schema23.Literal("text")
|
|
2166
2166
|
}));
|
|
2167
2167
|
var createText = (props) => createShape({
|
|
2168
2168
|
type: "text",
|
|
@@ -2173,25 +2173,20 @@ var createText = (props) => createShape({
|
|
|
2173
2173
|
...props
|
|
2174
2174
|
});
|
|
2175
2175
|
var TextComponent = ({ shape }) => {
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
value
|
|
2191
|
-
}));
|
|
2192
|
-
} finally {
|
|
2193
|
-
_effect.f();
|
|
2194
|
-
}
|
|
2176
|
+
const { runtime } = useComputeNodeState(shape);
|
|
2177
|
+
const input = runtime.inputs[DEFAULT_INPUT7];
|
|
2178
|
+
const value = input?.type === "executed" ? input.value : 0;
|
|
2179
|
+
const handleAction = (action) => {
|
|
2180
|
+
if (action === "run") {
|
|
2181
|
+
runtime.evalNode();
|
|
2182
|
+
}
|
|
2183
|
+
};
|
|
2184
|
+
return /* @__PURE__ */ React24.createElement(Box, {
|
|
2185
|
+
shape,
|
|
2186
|
+
onAction: handleAction
|
|
2187
|
+
}, /* @__PURE__ */ React24.createElement(TextBox5, {
|
|
2188
|
+
value
|
|
2189
|
+
}));
|
|
2195
2190
|
};
|
|
2196
2191
|
var textShape = {
|
|
2197
2192
|
type: "text",
|
|
@@ -2209,16 +2204,16 @@ var textShape = {
|
|
|
2209
2204
|
};
|
|
2210
2205
|
|
|
2211
2206
|
// src/shapes/Thread.tsx
|
|
2212
|
-
import
|
|
2213
|
-
import {
|
|
2214
|
-
import React24, { useEffect as useEffect7, useRef as useRef6 } from "react";
|
|
2207
|
+
import * as Schema24 from "effect/Schema";
|
|
2208
|
+
import React25, { useEffect as useEffect7, useRef as useRef6 } from "react";
|
|
2215
2209
|
import { createInputSchema as createInputSchema2, createOutputSchema as createOutputSchema2 } from "@dxos/conductor";
|
|
2216
|
-
import {
|
|
2217
|
-
import {
|
|
2218
|
-
|
|
2219
|
-
var
|
|
2220
|
-
var
|
|
2221
|
-
|
|
2210
|
+
import { ScrollArea as ScrollArea3 } from "@dxos/react-ui";
|
|
2211
|
+
import { Message as Message2 } from "@dxos/types";
|
|
2212
|
+
import { mx as mx3 } from "@dxos/ui-theme";
|
|
2213
|
+
var InputSchema2 = createInputSchema2(Message2.Message);
|
|
2214
|
+
var OutputSchema2 = createOutputSchema2(Schema24.mutable(Schema24.Array(Message2.Message)));
|
|
2215
|
+
var ThreadShape = Schema24.extend(ComputeShape, Schema24.Struct({
|
|
2216
|
+
type: Schema24.Literal("thread")
|
|
2222
2217
|
}));
|
|
2223
2218
|
var createThread = (props) => createShape({
|
|
2224
2219
|
type: "thread",
|
|
@@ -2229,49 +2224,42 @@ var createThread = (props) => createShape({
|
|
|
2229
2224
|
...props
|
|
2230
2225
|
});
|
|
2231
2226
|
var ThreadComponent = ({ shape }) => {
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
} finally {
|
|
2255
|
-
_effect.f();
|
|
2256
|
-
}
|
|
2227
|
+
const items = [];
|
|
2228
|
+
const scrollRef = useRef6(null);
|
|
2229
|
+
useEffect7(() => {
|
|
2230
|
+
if (scrollRef.current) {
|
|
2231
|
+
scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
|
|
2232
|
+
}
|
|
2233
|
+
}, [
|
|
2234
|
+
items
|
|
2235
|
+
]);
|
|
2236
|
+
return /* @__PURE__ */ React25.createElement(Box, {
|
|
2237
|
+
shape
|
|
2238
|
+
}, /* @__PURE__ */ React25.createElement(ScrollArea3.Root, {
|
|
2239
|
+
orientation: "vertical"
|
|
2240
|
+
}, /* @__PURE__ */ React25.createElement(ScrollArea3.Viewport, {
|
|
2241
|
+
classNames: "gap-2 p-2",
|
|
2242
|
+
ref: scrollRef
|
|
2243
|
+
}, [
|
|
2244
|
+
...items
|
|
2245
|
+
].map((item, i) => /* @__PURE__ */ React25.createElement(ThreadItem, {
|
|
2246
|
+
key: i,
|
|
2247
|
+
item
|
|
2248
|
+
})))));
|
|
2257
2249
|
};
|
|
2258
2250
|
var ThreadItem = ({ classNames, item }) => {
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
}, item);
|
|
2265
|
-
}
|
|
2266
|
-
const { role, message } = item;
|
|
2267
|
-
return /* @__PURE__ */ React24.createElement("div", {
|
|
2268
|
-
className: mx3("flex", classNames, role === "user" && "justify-end")
|
|
2269
|
-
}, /* @__PURE__ */ React24.createElement("div", {
|
|
2270
|
-
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")
|
|
2271
|
-
}, message));
|
|
2272
|
-
} finally {
|
|
2273
|
-
_effect.f();
|
|
2251
|
+
if (typeof item !== "object") {
|
|
2252
|
+
return /* @__PURE__ */ React25.createElement("div", {
|
|
2253
|
+
role: "none",
|
|
2254
|
+
className: mx3(classNames)
|
|
2255
|
+
}, item);
|
|
2274
2256
|
}
|
|
2257
|
+
const { role, message } = item;
|
|
2258
|
+
return /* @__PURE__ */ React25.createElement("div", {
|
|
2259
|
+
className: mx3("flex", classNames, role === "user" && "justify-end")
|
|
2260
|
+
}, /* @__PURE__ */ React25.createElement("div", {
|
|
2261
|
+
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")
|
|
2262
|
+
}, message));
|
|
2275
2263
|
};
|
|
2276
2264
|
var threadShape = {
|
|
2277
2265
|
type: "thread",
|
|
@@ -2284,12 +2272,11 @@ var threadShape = {
|
|
|
2284
2272
|
};
|
|
2285
2273
|
|
|
2286
2274
|
// src/shapes/TextToImage.tsx
|
|
2287
|
-
import
|
|
2288
|
-
import
|
|
2289
|
-
import React25 from "react";
|
|
2275
|
+
import * as Schema25 from "effect/Schema";
|
|
2276
|
+
import React26 from "react";
|
|
2290
2277
|
import { createAnchorMap as createAnchorMap12 } from "@dxos/react-ui-canvas-editor";
|
|
2291
|
-
var TextToImageShape =
|
|
2292
|
-
type:
|
|
2278
|
+
var TextToImageShape = Schema25.extend(ComputeShape, Schema25.Struct({
|
|
2279
|
+
type: Schema25.Literal("text-to-image")
|
|
2293
2280
|
}));
|
|
2294
2281
|
var createTextToImage = (props) => createShape({
|
|
2295
2282
|
type: "text-to-image",
|
|
@@ -2300,14 +2287,9 @@ var createTextToImage = (props) => createShape({
|
|
|
2300
2287
|
...props
|
|
2301
2288
|
});
|
|
2302
2289
|
var TextToImageComponent = ({ shape }) => {
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
shape
|
|
2307
|
-
});
|
|
2308
|
-
} finally {
|
|
2309
|
-
_effect.f();
|
|
2310
|
-
}
|
|
2290
|
+
return /* @__PURE__ */ React26.createElement(Box, {
|
|
2291
|
+
shape
|
|
2292
|
+
});
|
|
2311
2293
|
};
|
|
2312
2294
|
var textToImageShape = {
|
|
2313
2295
|
type: "text-to-image",
|
|
@@ -2324,21 +2306,20 @@ var textToImageShape = {
|
|
|
2324
2306
|
};
|
|
2325
2307
|
|
|
2326
2308
|
// src/shapes/Trigger.tsx
|
|
2327
|
-
import
|
|
2328
|
-
import {
|
|
2329
|
-
import React26, { useEffect as useEffect8 } from "react";
|
|
2309
|
+
import * as Schema26 from "effect/Schema";
|
|
2310
|
+
import React27, { useEffect as useEffect8 } from "react";
|
|
2330
2311
|
import { VoidInput as VoidInput3 } from "@dxos/conductor";
|
|
2331
|
-
import {
|
|
2332
|
-
import {
|
|
2312
|
+
import { Filter as Filter2, Obj as Obj4, Query, Ref as Ref3 } from "@dxos/echo";
|
|
2313
|
+
import { Trigger, TriggerEvent } from "@dxos/functions";
|
|
2333
2314
|
import { DXN, SpaceId } from "@dxos/keys";
|
|
2334
|
-
import {
|
|
2315
|
+
import { useSpaces } from "@dxos/react-client/echo";
|
|
2335
2316
|
import { Select as Select2 } from "@dxos/react-ui";
|
|
2336
|
-
var TriggerShape =
|
|
2337
|
-
type:
|
|
2338
|
-
functionTrigger:
|
|
2317
|
+
var TriggerShape = Schema26.extend(ComputeShape, Schema26.Struct({
|
|
2318
|
+
type: Schema26.Literal("trigger"),
|
|
2319
|
+
functionTrigger: Schema26.optional(Ref3.Ref(Trigger.Trigger))
|
|
2339
2320
|
}));
|
|
2340
2321
|
var createTrigger = (props) => {
|
|
2341
|
-
const functionTrigger =
|
|
2322
|
+
const functionTrigger = Trigger.make({
|
|
2342
2323
|
enabled: true,
|
|
2343
2324
|
spec: createTriggerSpec(props)
|
|
2344
2325
|
});
|
|
@@ -2347,115 +2328,97 @@ var createTrigger = (props) => {
|
|
|
2347
2328
|
functionTrigger: Ref3.make(functionTrigger),
|
|
2348
2329
|
size: {
|
|
2349
2330
|
width: 192,
|
|
2350
|
-
height: getHeight(
|
|
2331
|
+
height: getHeight(TriggerEvent.EmailEvent)
|
|
2351
2332
|
},
|
|
2352
2333
|
...props
|
|
2353
2334
|
});
|
|
2354
2335
|
};
|
|
2355
2336
|
var TriggerComponent = ({ shape }) => {
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
triggerKind: TriggerKind.Email,
|
|
2337
|
+
const [space] = useSpaces();
|
|
2338
|
+
const functionTrigger = shape.functionTrigger?.target;
|
|
2339
|
+
useEffect8(() => {
|
|
2340
|
+
if (functionTrigger && !functionTrigger.spec) {
|
|
2341
|
+
Obj4.change(functionTrigger, (functionTrigger2) => {
|
|
2342
|
+
functionTrigger2.spec = createTriggerSpec({
|
|
2343
|
+
triggerKind: "email",
|
|
2364
2344
|
spaceId: space?.id
|
|
2365
2345
|
});
|
|
2366
|
-
}
|
|
2367
|
-
}
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2346
|
+
});
|
|
2347
|
+
}
|
|
2348
|
+
}, [
|
|
2349
|
+
functionTrigger,
|
|
2350
|
+
functionTrigger?.spec
|
|
2351
|
+
]);
|
|
2352
|
+
useEffect8(() => {
|
|
2353
|
+
shape.size.height = getHeight(getOutputSchema(functionTrigger?.spec?.kind ?? "email"));
|
|
2354
|
+
}, [
|
|
2355
|
+
functionTrigger?.spec?.kind
|
|
2356
|
+
]);
|
|
2357
|
+
const setKind = (kind) => {
|
|
2358
|
+
if (functionTrigger?.spec?.kind !== kind) {
|
|
2359
|
+
Obj4.change(functionTrigger, (obj) => {
|
|
2360
|
+
obj.spec = createTriggerSpec({
|
|
2379
2361
|
triggerKind: kind,
|
|
2380
2362
|
spaceId: space?.id
|
|
2381
2363
|
});
|
|
2382
|
-
}
|
|
2383
|
-
};
|
|
2384
|
-
if (!functionTrigger?.spec) {
|
|
2385
|
-
return;
|
|
2364
|
+
});
|
|
2386
2365
|
}
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
|
|
2390
|
-
value: functionTrigger.spec?.kind,
|
|
2391
|
-
onValueChange: (kind) => setKind(kind)
|
|
2392
|
-
}),
|
|
2393
|
-
inputSchema: VoidInput3,
|
|
2394
|
-
outputSchema: getOutputSchema(functionTrigger.spec.kind)
|
|
2395
|
-
});
|
|
2396
|
-
} finally {
|
|
2397
|
-
_effect.f();
|
|
2366
|
+
};
|
|
2367
|
+
if (!functionTrigger?.spec) {
|
|
2368
|
+
return;
|
|
2398
2369
|
}
|
|
2370
|
+
return /* @__PURE__ */ React27.createElement(FunctionBody, {
|
|
2371
|
+
shape,
|
|
2372
|
+
status: /* @__PURE__ */ React27.createElement(TriggerKindSelect, {
|
|
2373
|
+
value: functionTrigger.spec?.kind,
|
|
2374
|
+
onValueChange: (kind) => setKind(kind)
|
|
2375
|
+
}),
|
|
2376
|
+
inputSchema: VoidInput3,
|
|
2377
|
+
outputSchema: getOutputSchema(functionTrigger.spec.kind)
|
|
2378
|
+
});
|
|
2399
2379
|
};
|
|
2400
2380
|
var TriggerKindSelect = ({ value, onValueChange }) => {
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
|
|
2406
|
-
|
|
2407
|
-
|
|
2408
|
-
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
value: kind
|
|
2412
|
-
}, kind))), /* @__PURE__ */ React26.createElement(Select2.ScrollDownButton, null), /* @__PURE__ */ React26.createElement(Select2.Arrow, null))));
|
|
2413
|
-
} finally {
|
|
2414
|
-
_effect.f();
|
|
2415
|
-
}
|
|
2381
|
+
return /* @__PURE__ */ React27.createElement(Select2.Root, {
|
|
2382
|
+
value,
|
|
2383
|
+
onValueChange
|
|
2384
|
+
}, /* @__PURE__ */ React27.createElement(Select2.TriggerButton, {
|
|
2385
|
+
variant: "ghost",
|
|
2386
|
+
classNames: "w-full px-0!"
|
|
2387
|
+
}), /* @__PURE__ */ React27.createElement(Select2.Portal, null, /* @__PURE__ */ React27.createElement(Select2.Content, null, /* @__PURE__ */ React27.createElement(Select2.ScrollUpButton, null), /* @__PURE__ */ React27.createElement(Select2.Viewport, null, Trigger.Kinds.map((kind) => /* @__PURE__ */ React27.createElement(Select2.Option, {
|
|
2388
|
+
key: kind,
|
|
2389
|
+
value: kind
|
|
2390
|
+
}, kind))), /* @__PURE__ */ React27.createElement(Select2.ScrollDownButton, null), /* @__PURE__ */ React27.createElement(Select2.Arrow, null))));
|
|
2416
2391
|
};
|
|
2417
2392
|
var createTriggerSpec = (props) => {
|
|
2418
|
-
const kind = props.triggerKind ??
|
|
2393
|
+
const kind = props.triggerKind ?? "email";
|
|
2419
2394
|
switch (kind) {
|
|
2420
|
-
case
|
|
2421
|
-
return
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
};
|
|
2425
|
-
case TriggerKind.Webhook:
|
|
2426
|
-
return {
|
|
2427
|
-
kind: TriggerKind.Webhook,
|
|
2395
|
+
case "timer":
|
|
2396
|
+
return Trigger.specTimer("*/10 * * * * *");
|
|
2397
|
+
case "webhook":
|
|
2398
|
+
return Trigger.specWebhook({
|
|
2428
2399
|
method: "POST"
|
|
2429
|
-
};
|
|
2430
|
-
case
|
|
2431
|
-
return
|
|
2432
|
-
|
|
2433
|
-
|
|
2434
|
-
|
|
2435
|
-
case TriggerKind.Email:
|
|
2436
|
-
return {
|
|
2437
|
-
kind: TriggerKind.Email
|
|
2438
|
-
};
|
|
2439
|
-
case TriggerKind.Queue: {
|
|
2400
|
+
});
|
|
2401
|
+
case "subscription":
|
|
2402
|
+
return Trigger.specSubscription(Query.select(Filter2.nothing()));
|
|
2403
|
+
case "email":
|
|
2404
|
+
return Trigger.specEmail();
|
|
2405
|
+
case "queue": {
|
|
2440
2406
|
const dxn = new DXN(DXN.kind.QUEUE, [
|
|
2441
2407
|
"data",
|
|
2442
2408
|
props.spaceId ?? SpaceId.random(),
|
|
2443
|
-
|
|
2409
|
+
Obj4.ID.random()
|
|
2444
2410
|
]).toString();
|
|
2445
|
-
return
|
|
2446
|
-
kind: TriggerKind.Queue,
|
|
2447
|
-
queue: dxn
|
|
2448
|
-
};
|
|
2411
|
+
return Trigger.specQueue(dxn);
|
|
2449
2412
|
}
|
|
2450
2413
|
}
|
|
2451
2414
|
};
|
|
2452
2415
|
var getOutputSchema = (kind) => {
|
|
2453
2416
|
const kindToSchema = {
|
|
2454
|
-
[
|
|
2455
|
-
[
|
|
2456
|
-
[
|
|
2457
|
-
[
|
|
2458
|
-
[
|
|
2417
|
+
["email"]: TriggerEvent.EmailEvent,
|
|
2418
|
+
["subscription"]: TriggerEvent.SubscriptionEvent,
|
|
2419
|
+
["timer"]: TriggerEvent.TimerEvent,
|
|
2420
|
+
["webhook"]: TriggerEvent.WebhookEvent,
|
|
2421
|
+
["queue"]: TriggerEvent.QueueEvent
|
|
2459
2422
|
};
|
|
2460
2423
|
return kindToSchema[kind];
|
|
2461
2424
|
};
|
|
@@ -2465,142 +2428,8 @@ var triggerShape = {
|
|
|
2465
2428
|
icon: "ph--lightning--regular",
|
|
2466
2429
|
component: TriggerComponent,
|
|
2467
2430
|
createShape: createTrigger,
|
|
2468
|
-
getAnchors: (shape) => createFunctionAnchors(shape, VoidInput3, getOutputSchema(shape.functionTrigger?.target?.spec?.kind ??
|
|
2469
|
-
};
|
|
2470
|
-
|
|
2471
|
-
// src/shapes/GptRealtime.tsx
|
|
2472
|
-
import { useSignals as _useSignals26 } from "@preact-signals/safe-react/tracking";
|
|
2473
|
-
import { Schema as Schema26 } from "effect";
|
|
2474
|
-
import React27, { useState as useState9 } from "react";
|
|
2475
|
-
import { log as log2 } from "@dxos/log";
|
|
2476
|
-
import { useConfig } from "@dxos/react-client";
|
|
2477
|
-
import { Icon as Icon5 } from "@dxos/react-ui";
|
|
2478
|
-
var __dxlog_file7 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/shapes/GptRealtime.tsx";
|
|
2479
|
-
var GptRealtimeShape = Schema26.extend(ComputeShape, Schema26.Struct({
|
|
2480
|
-
type: Schema26.Literal("gpt-realtime")
|
|
2481
|
-
}));
|
|
2482
|
-
var createGptRealtime = (props) => createShape({
|
|
2483
|
-
type: "gpt-realtime",
|
|
2484
|
-
size: {
|
|
2485
|
-
width: 256,
|
|
2486
|
-
height: 256
|
|
2487
|
-
},
|
|
2488
|
-
...props
|
|
2489
|
-
});
|
|
2490
|
-
var GptRealtimeComponent = ({ shape }) => {
|
|
2491
|
-
var _effect = _useSignals26();
|
|
2492
|
-
try {
|
|
2493
|
-
const [isLive, setIsLive] = useState9(false);
|
|
2494
|
-
const [isReady, setIsReady] = useState9(false);
|
|
2495
|
-
const config = useConfig();
|
|
2496
|
-
const start = async () => {
|
|
2497
|
-
setIsLive(true);
|
|
2498
|
-
try {
|
|
2499
|
-
const peerConnection = new RTCPeerConnection();
|
|
2500
|
-
peerConnection.ontrack = (event) => {
|
|
2501
|
-
const audioElement = document.createElement("audio");
|
|
2502
|
-
audioElement.srcObject = event.streams[0];
|
|
2503
|
-
audioElement.autoplay = true;
|
|
2504
|
-
audioElement.controls = false;
|
|
2505
|
-
audioElement.style.display = "none";
|
|
2506
|
-
document.body.appendChild(audioElement);
|
|
2507
|
-
setIsReady(true);
|
|
2508
|
-
};
|
|
2509
|
-
const stream = await navigator.mediaDevices.getUserMedia({
|
|
2510
|
-
audio: true
|
|
2511
|
-
});
|
|
2512
|
-
stream.getTracks().forEach((track) => peerConnection.addTransceiver(track, {
|
|
2513
|
-
direction: "sendrecv"
|
|
2514
|
-
}));
|
|
2515
|
-
const offer = await peerConnection.createOffer();
|
|
2516
|
-
await peerConnection.setLocalDescription(offer);
|
|
2517
|
-
const AiServiceUrl = new URL("/rtc-connect", config.values.runtime?.services?.ai?.server ?? DEFAULT_AI_SERVICE_URL);
|
|
2518
|
-
const response = await fetch(AiServiceUrl, {
|
|
2519
|
-
method: "POST",
|
|
2520
|
-
body: offer.sdp,
|
|
2521
|
-
headers: {
|
|
2522
|
-
"Content-Type": "application/sdp"
|
|
2523
|
-
}
|
|
2524
|
-
});
|
|
2525
|
-
const answer = await response.text();
|
|
2526
|
-
await peerConnection.setRemoteDescription({
|
|
2527
|
-
sdp: answer,
|
|
2528
|
-
type: "answer"
|
|
2529
|
-
});
|
|
2530
|
-
const dataChannel = peerConnection.createDataChannel("response");
|
|
2531
|
-
const configureData = () => {
|
|
2532
|
-
log2.info("Configuring data channel", void 0, {
|
|
2533
|
-
F: __dxlog_file7,
|
|
2534
|
-
L: 87,
|
|
2535
|
-
S: void 0,
|
|
2536
|
-
C: (f, a) => f(...a)
|
|
2537
|
-
});
|
|
2538
|
-
const event = {
|
|
2539
|
-
type: "session.update",
|
|
2540
|
-
session: {
|
|
2541
|
-
modalities: [
|
|
2542
|
-
"text",
|
|
2543
|
-
"audio"
|
|
2544
|
-
],
|
|
2545
|
-
// Provide the tools. Note they match the keys in the `fns` object above
|
|
2546
|
-
tools: []
|
|
2547
|
-
}
|
|
2548
|
-
};
|
|
2549
|
-
dataChannel.send(JSON.stringify(event));
|
|
2550
|
-
};
|
|
2551
|
-
dataChannel.addEventListener("open", (ev) => {
|
|
2552
|
-
log2.info("Opening data channel", {
|
|
2553
|
-
ev
|
|
2554
|
-
}, {
|
|
2555
|
-
F: __dxlog_file7,
|
|
2556
|
-
L: 100,
|
|
2557
|
-
S: void 0,
|
|
2558
|
-
C: (f, a) => f(...a)
|
|
2559
|
-
});
|
|
2560
|
-
configureData();
|
|
2561
|
-
});
|
|
2562
|
-
dataChannel.addEventListener("message", async (ev) => {
|
|
2563
|
-
const msg = JSON.parse(ev.data);
|
|
2564
|
-
if (msg.type === "response.function_call_arguments.done") {
|
|
2565
|
-
}
|
|
2566
|
-
});
|
|
2567
|
-
} catch (error) {
|
|
2568
|
-
log2.error("Error in realtime session:", {
|
|
2569
|
-
error
|
|
2570
|
-
}, {
|
|
2571
|
-
F: __dxlog_file7,
|
|
2572
|
-
L: 140,
|
|
2573
|
-
S: void 0,
|
|
2574
|
-
C: (f, a) => f(...a)
|
|
2575
|
-
});
|
|
2576
|
-
throw error;
|
|
2577
|
-
}
|
|
2578
|
-
};
|
|
2579
|
-
return /* @__PURE__ */ React27.createElement("div", {
|
|
2580
|
-
className: "flex w-full justify-center items-center"
|
|
2581
|
-
}, /* @__PURE__ */ React27.createElement(Icon5, {
|
|
2582
|
-
icon: isReady ? "ph--waveform--regular" : isLive ? "ph--pulse--regular" : "ph--play--regular",
|
|
2583
|
-
size: 16,
|
|
2584
|
-
classNames: !isLive && "cursor-pointer",
|
|
2585
|
-
onClick: start
|
|
2586
|
-
}));
|
|
2587
|
-
} finally {
|
|
2588
|
-
_effect.f();
|
|
2589
|
-
}
|
|
2431
|
+
getAnchors: (shape) => createFunctionAnchors(shape, VoidInput3, getOutputSchema(shape.functionTrigger?.target?.spec?.kind ?? "email"))
|
|
2590
2432
|
};
|
|
2591
|
-
var gptRealtimeShape = {
|
|
2592
|
-
type: "gpt-realtime",
|
|
2593
|
-
name: "GPT Realtime",
|
|
2594
|
-
icon: "ph--pulse--regular",
|
|
2595
|
-
component: GptRealtimeComponent,
|
|
2596
|
-
createShape: createGptRealtime,
|
|
2597
|
-
// TODO(dmaretskyi): Can we fetch the schema dynamically?
|
|
2598
|
-
getAnchors: (shape) => createFunctionAnchors(shape, Schema26.Struct({
|
|
2599
|
-
audio: Schema26.Any
|
|
2600
|
-
}), Schema26.Struct({})),
|
|
2601
|
-
resizable: true
|
|
2602
|
-
};
|
|
2603
|
-
var DEFAULT_AI_SERVICE_URL = "http://localhost:8788";
|
|
2604
2433
|
|
|
2605
2434
|
// src/registry.ts
|
|
2606
2435
|
var computeShapes = [
|
|
@@ -2647,7 +2476,7 @@ var computeShapes = [
|
|
|
2647
2476
|
shapes: [
|
|
2648
2477
|
//
|
|
2649
2478
|
jsonShape,
|
|
2650
|
-
|
|
2479
|
+
feedShape,
|
|
2651
2480
|
threadShape,
|
|
2652
2481
|
textShape,
|
|
2653
2482
|
surfaceShape,
|
|
@@ -2666,7 +2495,7 @@ var computeShapes = [
|
|
|
2666
2495
|
|
|
2667
2496
|
// src/compute-layout.ts
|
|
2668
2497
|
import { DefaultInput, DefaultOutput as DefaultOutput2 } from "@dxos/conductor";
|
|
2669
|
-
import { toEffectSchema } from "@dxos/echo
|
|
2498
|
+
import { toEffectSchema } from "@dxos/echo/internal";
|
|
2670
2499
|
import { ShapeLayout } from "@dxos/react-ui-canvas-editor";
|
|
2671
2500
|
var ComputeShapeLayout = class extends ShapeLayout {
|
|
2672
2501
|
_controller;
|
|
@@ -2706,6 +2535,9 @@ export {
|
|
|
2706
2535
|
ConstantShape,
|
|
2707
2536
|
DatabaseComponent,
|
|
2708
2537
|
DatabaseShape,
|
|
2538
|
+
FeedComponent,
|
|
2539
|
+
FeedItem,
|
|
2540
|
+
FeedShape,
|
|
2709
2541
|
FunctionBody,
|
|
2710
2542
|
FunctionShape,
|
|
2711
2543
|
GptComponent,
|
|
@@ -2723,9 +2555,6 @@ export {
|
|
|
2723
2555
|
JsonTransformShape,
|
|
2724
2556
|
NotShape,
|
|
2725
2557
|
OrShape,
|
|
2726
|
-
QueueComponent,
|
|
2727
|
-
QueueItem,
|
|
2728
|
-
QueueShape,
|
|
2729
2558
|
RandomComponent,
|
|
2730
2559
|
RandomShape,
|
|
2731
2560
|
ReducerComponent,
|
|
@@ -2768,6 +2597,7 @@ export {
|
|
|
2768
2597
|
createComputeNode,
|
|
2769
2598
|
createConstant,
|
|
2770
2599
|
createDatabase,
|
|
2600
|
+
createFeed,
|
|
2771
2601
|
createFunction,
|
|
2772
2602
|
createFunctionAnchors,
|
|
2773
2603
|
createGpt,
|
|
@@ -2778,7 +2608,6 @@ export {
|
|
|
2778
2608
|
createJsonTransform,
|
|
2779
2609
|
createNot,
|
|
2780
2610
|
createOr,
|
|
2781
|
-
createQueue,
|
|
2782
2611
|
createRandom,
|
|
2783
2612
|
createReducer,
|
|
2784
2613
|
createScope,
|
|
@@ -2792,6 +2621,7 @@ export {
|
|
|
2792
2621
|
createThread,
|
|
2793
2622
|
createTrigger,
|
|
2794
2623
|
databaseShape,
|
|
2624
|
+
feedShape,
|
|
2795
2625
|
footerHeight,
|
|
2796
2626
|
functionShape,
|
|
2797
2627
|
getHeight,
|
|
@@ -2808,7 +2638,6 @@ export {
|
|
|
2808
2638
|
notShape,
|
|
2809
2639
|
orShape,
|
|
2810
2640
|
parseAnchorId,
|
|
2811
|
-
queueShape,
|
|
2812
2641
|
randomShape,
|
|
2813
2642
|
reducerShape,
|
|
2814
2643
|
resolveComputeNode,
|