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