@dxos/react-ui-canvas-compute 0.8.4-main.f9ba587 → 0.8.4-main.fcc0d83b33
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 +1013 -1228
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +1013 -1228
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/components/DiagnosticOverlay.d.ts.map +1 -1
- package/dist/types/src/compute-layout.d.ts.map +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 +45 -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 -4
- package/dist/types/src/hooks/useComputeNodeState.d.ts.map +1 -1
- package/dist/types/src/hooks/useGraphMonitor.d.ts +2 -2
- package/dist/types/src/hooks/useGraphMonitor.d.ts.map +1 -1
- package/dist/types/src/json.test.d.ts +1 -1
- package/dist/types/src/json.test.d.ts.map +1 -1
- package/dist/types/src/shapes/Append.d.ts +2 -2
- package/dist/types/src/shapes/Append.d.ts.map +1 -1
- package/dist/types/src/shapes/Array.d.ts +2 -2
- package/dist/types/src/shapes/Array.d.ts.map +1 -1
- package/dist/types/src/shapes/Audio.d.ts +2 -2
- package/dist/types/src/shapes/Audio.d.ts.map +1 -1
- package/dist/types/src/shapes/Beacon.d.ts +2 -2
- package/dist/types/src/shapes/Beacon.d.ts.map +1 -1
- package/dist/types/src/shapes/Boolean.d.ts +8 -8
- package/dist/types/src/shapes/Boolean.d.ts.map +1 -1
- package/dist/types/src/shapes/Chat.d.ts +2 -2
- package/dist/types/src/shapes/Chat.d.ts.map +1 -1
- package/dist/types/src/shapes/Constant.d.ts +2 -2
- package/dist/types/src/shapes/Constant.d.ts.map +1 -1
- package/dist/types/src/shapes/Database.d.ts +2 -2
- package/dist/types/src/shapes/Database.d.ts.map +1 -1
- package/dist/types/src/shapes/{Queue.d.ts → Feed.d.ts} +10 -10
- package/dist/types/src/shapes/Feed.d.ts.map +1 -0
- package/dist/types/src/shapes/Function.d.ts +2 -2
- package/dist/types/src/shapes/Function.d.ts.map +1 -1
- package/dist/types/src/shapes/Gpt.d.ts +2 -2
- package/dist/types/src/shapes/Gpt.d.ts.map +1 -1
- package/dist/types/src/shapes/GptRealtime.d.ts +2 -2
- package/dist/types/src/shapes/GptRealtime.d.ts.map +1 -1
- package/dist/types/src/shapes/Json.d.ts +3 -3
- package/dist/types/src/shapes/Json.d.ts.map +1 -1
- package/dist/types/src/shapes/Logic.d.ts +3 -3
- package/dist/types/src/shapes/Logic.d.ts.map +1 -1
- package/dist/types/src/shapes/RNG.d.ts +3 -3
- package/dist/types/src/shapes/RNG.d.ts.map +1 -1
- package/dist/types/src/shapes/Scope.d.ts +2 -2
- package/dist/types/src/shapes/Scope.d.ts.map +1 -1
- package/dist/types/src/shapes/Surface.d.ts +2 -2
- package/dist/types/src/shapes/Surface.d.ts.map +1 -1
- package/dist/types/src/shapes/Switch.d.ts +2 -2
- package/dist/types/src/shapes/Switch.d.ts.map +1 -1
- package/dist/types/src/shapes/Table.d.ts +2 -2
- package/dist/types/src/shapes/Table.d.ts.map +1 -1
- package/dist/types/src/shapes/Template.d.ts +3 -3
- package/dist/types/src/shapes/Template.d.ts.map +1 -1
- package/dist/types/src/shapes/Text.d.ts +2 -2
- package/dist/types/src/shapes/Text.d.ts.map +1 -1
- package/dist/types/src/shapes/TextToImage.d.ts +2 -2
- package/dist/types/src/shapes/TextToImage.d.ts.map +1 -1
- package/dist/types/src/shapes/Thread.d.ts +2 -2
- package/dist/types/src/shapes/Thread.d.ts.map +1 -1
- package/dist/types/src/shapes/Trigger.d.ts +8 -35
- package/dist/types/src/shapes/Trigger.d.ts.map +1 -1
- package/dist/types/src/shapes/common/Box.d.ts +4 -4
- package/dist/types/src/shapes/common/Box.d.ts.map +1 -1
- package/dist/types/src/shapes/common/FunctionBody.d.ts +3 -3
- package/dist/types/src/shapes/common/FunctionBody.d.ts.map +1 -1
- package/dist/types/src/shapes/common/TypeSelect.d.ts +1 -1
- package/dist/types/src/shapes/common/TypeSelect.d.ts.map +1 -1
- package/dist/types/src/shapes/defs.d.ts +3 -2
- package/dist/types/src/shapes/defs.d.ts.map +1 -1
- package/dist/types/src/shapes/index.d.ts +2 -2
- package/dist/types/src/shapes/index.d.ts.map +1 -1
- package/dist/types/src/testing/circuits.d.ts +18 -24
- package/dist/types/src/testing/circuits.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +60 -56
- package/src/README.md +0 -3
- package/src/compute-layout.ts +1 -1
- package/src/compute.stories.tsx +104 -140
- package/src/graph/controller.ts +153 -81
- package/src/graph/node-defs.ts +34 -34
- package/src/hooks/useComputeGraphController.ts +2 -2
- package/src/hooks/useComputeNodeState.ts +9 -8
- package/src/hooks/useGraphMonitor.ts +11 -10
- package/src/json.test.ts +4 -4
- package/src/registry.ts +4 -4
- package/src/schema.test.ts +13 -13
- package/src/shapes/Append.tsx +3 -3
- package/src/shapes/Array.tsx +3 -3
- package/src/shapes/Audio.tsx +4 -4
- package/src/shapes/Beacon.tsx +4 -5
- package/src/shapes/Boolean.tsx +4 -4
- package/src/shapes/Chat.tsx +3 -3
- package/src/shapes/Constant.tsx +3 -3
- package/src/shapes/Database.tsx +2 -2
- package/src/shapes/{Queue.tsx → Feed.tsx} +29 -23
- package/src/shapes/Function.tsx +17 -14
- package/src/shapes/Gpt.tsx +12 -6
- package/src/shapes/GptRealtime.tsx +2 -2
- package/src/shapes/Json.tsx +12 -5
- package/src/shapes/Logic.tsx +3 -3
- package/src/shapes/RNG.tsx +9 -6
- package/src/shapes/Scope.tsx +4 -4
- package/src/shapes/Surface.tsx +15 -6
- package/src/shapes/Switch.tsx +3 -3
- package/src/shapes/Table.tsx +6 -6
- package/src/shapes/Template.tsx +5 -5
- package/src/shapes/Text.tsx +4 -4
- package/src/shapes/TextToImage.tsx +2 -2
- package/src/shapes/Thread.tsx +20 -14
- package/src/shapes/Trigger.tsx +46 -58
- package/src/shapes/common/Box.tsx +7 -10
- 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/shapes/index.ts +2 -2
- package/src/testing/circuits.ts +10 -19
- package/dist/types/src/shapes/Queue.d.ts.map +0 -1
|
@@ -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
|
-
import {
|
|
10
|
+
import { Trace } from "@dxos/compute";
|
|
11
|
+
import { ComputeBeginEvent, ComputeCustomEvent, ComputeEndEvent, ComputeInputEvent, ComputeNodeContext, ComputeOutputEvent, GraphExecutor, ValueBag, isNotExecuted } from "@dxos/conductor";
|
|
7
12
|
import { Resource } from "@dxos/context";
|
|
13
|
+
import { unwrapExit } from "@dxos/effect";
|
|
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,34 +72,18 @@ 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: __dxlog_file2,
|
|
153
|
-
L: 32,
|
|
154
|
-
S: void 0,
|
|
155
|
-
A: [
|
|
156
|
-
"controller",
|
|
157
|
-
""
|
|
158
|
-
]
|
|
159
|
-
});
|
|
81
|
+
invariant(controller, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 12, S: void 0, A: ["controller", ""] });
|
|
160
82
|
const [meta, setMeta] = useState2();
|
|
161
83
|
useEffect2(() => {
|
|
162
84
|
let disposed = false;
|
|
163
85
|
queueMicrotask(async () => {
|
|
164
|
-
|
|
165
|
-
F: __dxlog_file2,
|
|
166
|
-
L: 38,
|
|
167
|
-
S: void 0,
|
|
168
|
-
A: [
|
|
169
|
-
"shape.node",
|
|
170
|
-
"'Node not specified'"
|
|
171
|
-
]
|
|
172
|
-
});
|
|
86
|
+
invariant(shape.node, "Node not specified", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 17, S: void 0, A: ["shape.node", "'Node not specified'"] });
|
|
173
87
|
const node = controller.getComputeNode(shape.node);
|
|
174
88
|
const meta2 = await controller.getMeta(node);
|
|
175
89
|
if (disposed) {
|
|
@@ -218,34 +132,17 @@ var useComputeNodeState = (shape) => {
|
|
|
218
132
|
// src/hooks/useGraphMonitor.ts
|
|
219
133
|
import { useMemo } from "react";
|
|
220
134
|
import { ComputeGraphModel, DEFAULT_INPUT, DEFAULT_OUTPUT } from "@dxos/conductor";
|
|
221
|
-
import {
|
|
222
|
-
import { invariant as
|
|
223
|
-
import { getSpace } from "@dxos/react-client/echo";
|
|
135
|
+
import { Obj, Ref } from "@dxos/echo";
|
|
136
|
+
import { invariant as invariant2 } from "@dxos/invariant";
|
|
224
137
|
import { isNonNullable } from "@dxos/util";
|
|
225
|
-
var
|
|
138
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/hooks/useGraphMonitor.ts";
|
|
226
139
|
var mapEdge = (graph, { source, target, output = DEFAULT_OUTPUT, input = DEFAULT_INPUT }) => {
|
|
227
140
|
const sourceNode = graph.findNode(source);
|
|
228
141
|
const targetNode = graph.findNode(target);
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
L: 26,
|
|
232
|
-
S: void 0,
|
|
233
|
-
A: [
|
|
234
|
-
"sourceNode?.node",
|
|
235
|
-
""
|
|
236
|
-
]
|
|
237
|
-
});
|
|
238
|
-
invariant3(targetNode?.node, void 0, {
|
|
239
|
-
F: __dxlog_file3,
|
|
240
|
-
L: 27,
|
|
241
|
-
S: void 0,
|
|
242
|
-
A: [
|
|
243
|
-
"targetNode?.node",
|
|
244
|
-
""
|
|
245
|
-
]
|
|
246
|
-
});
|
|
142
|
+
invariant2(sourceNode?.node, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 15, S: void 0, A: ["sourceNode?.node", ""] });
|
|
143
|
+
invariant2(targetNode?.node, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 16, S: void 0, A: ["targetNode?.node", ""] });
|
|
247
144
|
return {
|
|
248
|
-
id:
|
|
145
|
+
id: Obj.ID.random(),
|
|
249
146
|
source: sourceNode.node,
|
|
250
147
|
target: targetNode.node,
|
|
251
148
|
output,
|
|
@@ -259,15 +156,7 @@ var useGraphMonitor = (model) => {
|
|
|
259
156
|
if (!model) {
|
|
260
157
|
return;
|
|
261
158
|
}
|
|
262
|
-
|
|
263
|
-
F: __dxlog_file3,
|
|
264
|
-
L: 52,
|
|
265
|
-
S: void 0,
|
|
266
|
-
A: [
|
|
267
|
-
"node.type",
|
|
268
|
-
""
|
|
269
|
-
]
|
|
270
|
-
});
|
|
159
|
+
invariant2(node.type, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 37, S: void 0, A: ["node.type", ""] });
|
|
271
160
|
if (!isValidComputeNode(node.type)) {
|
|
272
161
|
return;
|
|
273
162
|
}
|
|
@@ -317,58 +206,138 @@ var createComputeGraph = (graph) => {
|
|
|
317
206
|
};
|
|
318
207
|
var linkTriggerToCompute = (graph, computeNode, triggerData) => {
|
|
319
208
|
const functionTrigger = triggerData.functionTrigger?.target;
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
A: [
|
|
325
|
-
"functionTrigger",
|
|
326
|
-
""
|
|
327
|
-
]
|
|
209
|
+
invariant2(functionTrigger, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 88, S: void 0, A: ["functionTrigger", ""] });
|
|
210
|
+
Obj.update(functionTrigger, (functionTrigger2) => {
|
|
211
|
+
functionTrigger2.function = Ref.make(graph.root);
|
|
212
|
+
functionTrigger2.inputNodeId = computeNode.id;
|
|
328
213
|
});
|
|
329
|
-
functionTrigger.function = Ref.make(graph.root);
|
|
330
|
-
functionTrigger.inputNodeId = computeNode.id;
|
|
331
214
|
};
|
|
332
215
|
var deleteTriggerObjects = (computeGraph, deleted) => {
|
|
333
|
-
const
|
|
334
|
-
if (!
|
|
216
|
+
const db = Obj.getDatabase(computeGraph.root);
|
|
217
|
+
if (!db) {
|
|
335
218
|
return;
|
|
336
219
|
}
|
|
337
220
|
for (const node of deleted.nodes) {
|
|
338
221
|
if (node.type === "trigger") {
|
|
339
222
|
const trigger = node;
|
|
340
|
-
|
|
223
|
+
db.remove(trigger.functionTrigger.target);
|
|
341
224
|
}
|
|
342
225
|
}
|
|
343
226
|
};
|
|
344
227
|
|
|
228
|
+
// src/graph/node-defs.ts
|
|
229
|
+
import { NODE_INPUT, NODE_OUTPUT, getTemplateInputSchema, registry } from "@dxos/conductor";
|
|
230
|
+
import { raise as raise2 } from "@dxos/debug";
|
|
231
|
+
import { JsonSchema, Obj as Obj2 } from "@dxos/echo";
|
|
232
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
|
233
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/graph/node-defs.ts";
|
|
234
|
+
var resolveComputeNode = async (node) => {
|
|
235
|
+
const impl = registry[node.type];
|
|
236
|
+
invariant3(impl, `Unknown node type: ${node.type}`, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 10, S: void 0, A: ["impl", "`Unknown node type: ${node.type}`"] });
|
|
237
|
+
return impl;
|
|
238
|
+
};
|
|
239
|
+
var isValidComputeNode = (type) => {
|
|
240
|
+
return nodeFactory[type] !== void 0;
|
|
241
|
+
};
|
|
242
|
+
var createComputeNode = (shape) => {
|
|
243
|
+
const type = shape.type ?? raise2(new Error("Type not specified"));
|
|
244
|
+
const factory = nodeFactory[type] ?? raise2(new Error(`Unknown shape type: ${type}`));
|
|
245
|
+
return factory(shape);
|
|
246
|
+
};
|
|
247
|
+
var nodeFactory = {
|
|
248
|
+
// System.
|
|
249
|
+
[NODE_INPUT]: () => createNode(NODE_INPUT),
|
|
250
|
+
[NODE_OUTPUT]: () => createNode(NODE_OUTPUT),
|
|
251
|
+
// Extensions.
|
|
252
|
+
"text-to-image": () => createNode("text-to-image"),
|
|
253
|
+
and: () => createNode("and"),
|
|
254
|
+
append: () => createNode("append"),
|
|
255
|
+
audio: () => createNode("audio"),
|
|
256
|
+
beacon: () => createNode("beacon"),
|
|
257
|
+
chat: () => createNode("chat"),
|
|
258
|
+
constant: (shape) => createNode("constant", {
|
|
259
|
+
value: shape.value
|
|
260
|
+
}),
|
|
261
|
+
"make-queue": () => createNode("make-queue"),
|
|
262
|
+
database: () => createNode("database"),
|
|
263
|
+
gpt: () => createNode("gpt"),
|
|
264
|
+
"gpt-realtime": () => createNode("gpt-realtime"),
|
|
265
|
+
if: () => createNode("if"),
|
|
266
|
+
"if-else": () => createNode("if-else"),
|
|
267
|
+
function: () => createNode("function"),
|
|
268
|
+
json: () => createNode("json"),
|
|
269
|
+
"json-transform": () => createNode("json-transform"),
|
|
270
|
+
not: () => createNode("not"),
|
|
271
|
+
or: () => createNode("or"),
|
|
272
|
+
queue: () => createNode("queue"),
|
|
273
|
+
rng: () => createNode("rng"),
|
|
274
|
+
reducer: () => createNode("reducer"),
|
|
275
|
+
scope: () => createNode("scope"),
|
|
276
|
+
surface: () => createNode("surface"),
|
|
277
|
+
switch: () => createNode("switch"),
|
|
278
|
+
template: (shape) => {
|
|
279
|
+
const node = createNode("template", {
|
|
280
|
+
valueType: shape.valueType,
|
|
281
|
+
value: shape.text
|
|
282
|
+
});
|
|
283
|
+
node.inputSchema = JsonSchema.toJsonSchema(getTemplateInputSchema(node));
|
|
284
|
+
return node;
|
|
285
|
+
},
|
|
286
|
+
text: () => createNode("text"),
|
|
287
|
+
thread: () => createNode("thread"),
|
|
288
|
+
trigger: () => createNode(NODE_INPUT)
|
|
289
|
+
};
|
|
290
|
+
var createNode = (type, props) => ({
|
|
291
|
+
id: Obj2.ID.random(),
|
|
292
|
+
type,
|
|
293
|
+
...props
|
|
294
|
+
});
|
|
295
|
+
|
|
345
296
|
// src/graph/controller.ts
|
|
297
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/graph/controller.ts";
|
|
346
298
|
function _ts_decorate(decorators, target, key, desc) {
|
|
347
299
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
348
300
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
349
301
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
350
302
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
351
303
|
}
|
|
352
|
-
var __dxlog_file4 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/graph/controller.ts";
|
|
353
304
|
var InvalidStateError = Error;
|
|
354
305
|
var AUTO_TRIGGER_NODES = [
|
|
355
306
|
"chat",
|
|
356
307
|
"switch",
|
|
357
308
|
"constant"
|
|
358
309
|
];
|
|
359
|
-
var createComputeGraphController = (graph,
|
|
310
|
+
var createComputeGraphController = (graph, computeRuntime) => {
|
|
360
311
|
const computeGraph = createComputeGraph(graph);
|
|
361
|
-
const controller = new ComputeGraphController(
|
|
312
|
+
const controller = new ComputeGraphController(computeRuntime, computeGraph);
|
|
362
313
|
return {
|
|
363
314
|
controller,
|
|
364
315
|
graph
|
|
365
316
|
};
|
|
366
317
|
};
|
|
367
318
|
var ComputeGraphController = class extends Resource {
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
319
|
+
_computeRuntime;
|
|
320
|
+
_graph;
|
|
321
|
+
_executor = new GraphExecutor({
|
|
322
|
+
computeNodeResolver: (node) => resolveComputeNode(node)
|
|
323
|
+
});
|
|
324
|
+
_diagnostics = [];
|
|
325
|
+
/**
|
|
326
|
+
* Canvas force-sets outputs of those nodes.
|
|
327
|
+
*/
|
|
328
|
+
_forcedOutputs = {};
|
|
329
|
+
/**
|
|
330
|
+
* Runtime state of the execution graph.
|
|
331
|
+
*/
|
|
332
|
+
_runtimeStateInputs = {};
|
|
333
|
+
_runtimeStateOutputs = {};
|
|
334
|
+
// TODO(burdon): Remove? Make state reactive?
|
|
335
|
+
update = new Event();
|
|
336
|
+
/** Computed result. */
|
|
337
|
+
output = new Event();
|
|
338
|
+
events = new Event();
|
|
339
|
+
constructor(_computeRuntime, _graph) {
|
|
340
|
+
super(), this._computeRuntime = _computeRuntime, this._graph = _graph;
|
|
372
341
|
}
|
|
373
342
|
toJSON() {
|
|
374
343
|
return {
|
|
@@ -436,12 +405,7 @@ var ComputeGraphController = class extends Resource {
|
|
|
436
405
|
try {
|
|
437
406
|
await this.exec(nodeId);
|
|
438
407
|
} catch (err) {
|
|
439
|
-
log.catch(err, void 0, {
|
|
440
|
-
F: __dxlog_file4,
|
|
441
|
-
L: 199,
|
|
442
|
-
S: this,
|
|
443
|
-
C: (f, a) => f(...a)
|
|
444
|
-
});
|
|
408
|
+
log.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 128, S: this });
|
|
445
409
|
}
|
|
446
410
|
});
|
|
447
411
|
}
|
|
@@ -460,12 +424,11 @@ var ComputeGraphController = class extends Resource {
|
|
|
460
424
|
for (const [nodeId2, outputs] of Object.entries(this._forcedOutputs)) {
|
|
461
425
|
executor.setOutputs(nodeId2, Effect.succeed(ValueBag.make(outputs)));
|
|
462
426
|
}
|
|
463
|
-
|
|
464
|
-
await Effect.runPromise(Effect.gen(this, function* () {
|
|
427
|
+
unwrapExit(await this._computeRuntime.runPromiseExit(Effect.gen(this, function* () {
|
|
465
428
|
const scope = yield* Scope.make();
|
|
466
429
|
const executable = yield* Effect.promise(() => resolveComputeNode(this._graph.getNode(nodeId)));
|
|
467
430
|
const computingOutputs = executable.exec != null;
|
|
468
|
-
const effect = (computingOutputs ? executor.computeOutputs(nodeId) : executor.computeInputs(nodeId)).pipe(Effect.withSpan("runGraph"), Scope.extend(scope), Effect.
|
|
431
|
+
const effect = (computingOutputs ? executor.computeOutputs(nodeId) : executor.computeInputs(nodeId)).pipe(Effect.withSpan("runGraph"), Scope.extend(scope), Effect.provide(Layer.mergeAll(Layer.succeed(Trace.TraceService, this._createTraceWriter()), ComputeNodeContext.layerNoop)), Effect.flatMap(computeValueBag), Effect.withSpan("test"), Effect.tap((values) => {
|
|
469
432
|
for (const [key, value] of Object.entries(values)) {
|
|
470
433
|
if (computingOutputs) {
|
|
471
434
|
this._onOutputComputed(nodeId, key, value);
|
|
@@ -476,7 +439,7 @@ var ComputeGraphController = class extends Resource {
|
|
|
476
439
|
}));
|
|
477
440
|
yield* effect;
|
|
478
441
|
yield* Scope.close(scope, Exit.void);
|
|
479
|
-
}));
|
|
442
|
+
})));
|
|
480
443
|
this.update.emit();
|
|
481
444
|
}
|
|
482
445
|
/**
|
|
@@ -497,13 +460,13 @@ var ComputeGraphController = class extends Resource {
|
|
|
497
460
|
const allAffectedNodes = [
|
|
498
461
|
...new Set(triggerNodes.flatMap((node) => executor.getAllDependantNodes(node.id)))
|
|
499
462
|
];
|
|
500
|
-
await
|
|
463
|
+
unwrapExit(await this._computeRuntime.runPromiseExit(Effect.gen(this, function* () {
|
|
501
464
|
const scope = yield* Scope.make();
|
|
502
465
|
const tasks = [];
|
|
503
466
|
for (const node of allAffectedNodes) {
|
|
504
467
|
const executable = yield* Effect.promise(() => resolveComputeNode(this._graph.getNode(node)));
|
|
505
468
|
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(
|
|
469
|
+
const effect = (computingOutputs ? executor.computeOutputs(node) : executor.computeInputs(node)).pipe(Effect.withSpan("runGraph"), Scope.extend(scope), Effect.flatMap(computeValueBag), Effect.provide(Layer.mergeAll(Layer.succeed(Trace.TraceService, this._createTraceWriter()), ComputeNodeContext.layerNoop)), Effect.withSpan("test"), Effect.tap((values) => {
|
|
507
470
|
for (const [key, value] of Object.entries(values)) {
|
|
508
471
|
if (computingOutputs) {
|
|
509
472
|
this._onOutputComputed(node, key, value);
|
|
@@ -516,26 +479,23 @@ var ComputeGraphController = class extends Resource {
|
|
|
516
479
|
}
|
|
517
480
|
yield* Effect.all(tasks);
|
|
518
481
|
yield* Scope.close(scope, Exit.void);
|
|
519
|
-
}));
|
|
482
|
+
})));
|
|
520
483
|
this.update.emit();
|
|
521
484
|
}
|
|
522
|
-
|
|
485
|
+
_createTraceWriter() {
|
|
523
486
|
return {
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
487
|
+
write: (eventType, payload) => {
|
|
488
|
+
const event = traceEventToComputeEvent(eventType.key, payload);
|
|
489
|
+
if (event) {
|
|
490
|
+
this._handleEvent(event);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
528
493
|
};
|
|
529
494
|
}
|
|
530
495
|
_handleEvent(event) {
|
|
531
496
|
log("handleEvent", {
|
|
532
497
|
event
|
|
533
|
-
}, {
|
|
534
|
-
F: __dxlog_file4,
|
|
535
|
-
L: 335,
|
|
536
|
-
S: this,
|
|
537
|
-
C: (f, a) => f(...a)
|
|
538
|
-
});
|
|
498
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 223, S: this });
|
|
539
499
|
switch (event.type) {
|
|
540
500
|
case "compute-input": {
|
|
541
501
|
this._onInputComputed(event.nodeId, event.property, {
|
|
@@ -574,6 +534,37 @@ _ts_decorate([
|
|
|
574
534
|
_ts_decorate([
|
|
575
535
|
synchronized
|
|
576
536
|
], ComputeGraphController.prototype, "exec", null);
|
|
537
|
+
var traceEventToComputeEvent = (key, payload) => {
|
|
538
|
+
switch (key) {
|
|
539
|
+
case ComputeBeginEvent.key:
|
|
540
|
+
return {
|
|
541
|
+
type: "begin-compute",
|
|
542
|
+
...payload
|
|
543
|
+
};
|
|
544
|
+
case ComputeEndEvent.key:
|
|
545
|
+
return {
|
|
546
|
+
type: "end-compute",
|
|
547
|
+
...payload
|
|
548
|
+
};
|
|
549
|
+
case ComputeInputEvent.key:
|
|
550
|
+
return {
|
|
551
|
+
type: "compute-input",
|
|
552
|
+
...payload
|
|
553
|
+
};
|
|
554
|
+
case ComputeOutputEvent.key:
|
|
555
|
+
return {
|
|
556
|
+
type: "compute-output",
|
|
557
|
+
...payload
|
|
558
|
+
};
|
|
559
|
+
case ComputeCustomEvent.key:
|
|
560
|
+
return {
|
|
561
|
+
type: "custom",
|
|
562
|
+
...payload
|
|
563
|
+
};
|
|
564
|
+
default:
|
|
565
|
+
return void 0;
|
|
566
|
+
}
|
|
567
|
+
};
|
|
577
568
|
var computeValueBag = (bag) => {
|
|
578
569
|
return Effect.all(Object.entries(bag.values).map(([key, eff]) => Effect.either(eff).pipe(Effect.map((value) => {
|
|
579
570
|
if (Either.isLeft(value)) {
|
|
@@ -609,88 +600,72 @@ var computeValueBag = (bag) => {
|
|
|
609
600
|
import { noteShape } from "@dxos/react-ui-canvas-editor";
|
|
610
601
|
|
|
611
602
|
// src/shapes/common/Box.tsx
|
|
612
|
-
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
613
603
|
import React, { forwardRef } from "react";
|
|
614
604
|
import { invariant as invariant4 } from "@dxos/invariant";
|
|
615
605
|
import { Icon, IconButton } from "@dxos/react-ui";
|
|
616
606
|
import { useEditorContext, useShapeDef } from "@dxos/react-ui-canvas-editor";
|
|
617
|
-
import { mx } from "@dxos/
|
|
607
|
+
import { mx } from "@dxos/ui-theme";
|
|
618
608
|
var __dxlog_file5 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/shapes/common/Box.tsx";
|
|
619
609
|
var headerHeight = 32;
|
|
620
610
|
var footerHeight = 32;
|
|
621
611
|
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
|
-
}, debug ? shape.id : status), openable && /* @__PURE__ */ React.createElement(IconButton, {
|
|
666
|
-
classNames: "p-1",
|
|
667
|
-
variant: "ghost",
|
|
668
|
-
icon: open ? "ph--caret-up--regular" : "ph--caret-down--regular",
|
|
669
|
-
size: 4,
|
|
670
|
-
label: open ? "close" : "open",
|
|
671
|
-
iconOnly: true,
|
|
672
|
-
onClick: (ev) => {
|
|
673
|
-
ev.stopPropagation();
|
|
674
|
-
onAction?.(open ? "close" : "open");
|
|
675
|
-
}
|
|
676
|
-
})));
|
|
677
|
-
} finally {
|
|
678
|
-
_effect.f();
|
|
679
|
-
}
|
|
612
|
+
invariant4(shape.type, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 12, S: void 0, A: ["shape.type", ""] });
|
|
613
|
+
const { icon, name, openable } = useShapeDef(shape.type) ?? {
|
|
614
|
+
icon: "ph--placeholder--regular"
|
|
615
|
+
};
|
|
616
|
+
const { debug } = useEditorContext();
|
|
617
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
618
|
+
ref: forwardedRef,
|
|
619
|
+
className: "flex flex-col h-full w-full justify-between"
|
|
620
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
621
|
+
className: "flex shrink-0 w-full justify-between items-center h-[32px] bg-input-surface"
|
|
622
|
+
}, /* @__PURE__ */ React.createElement(Icon, {
|
|
623
|
+
icon,
|
|
624
|
+
classNames: "mx-2"
|
|
625
|
+
}), /* @__PURE__ */ React.createElement("div", {
|
|
626
|
+
className: "grow text-sm truncate"
|
|
627
|
+
}, debug ? shape.type : name ?? shape.text ?? title), /* @__PURE__ */ React.createElement(IconButton, {
|
|
628
|
+
classNames: "p-1 text-green-500",
|
|
629
|
+
variant: "ghost",
|
|
630
|
+
icon: "ph--play--regular",
|
|
631
|
+
label: "run",
|
|
632
|
+
iconOnly: true,
|
|
633
|
+
onDoubleClick: (ev) => ev.stopPropagation(),
|
|
634
|
+
onClick: (ev) => {
|
|
635
|
+
ev.stopPropagation();
|
|
636
|
+
onAction?.("run");
|
|
637
|
+
}
|
|
638
|
+
})), /* @__PURE__ */ React.createElement("div", {
|
|
639
|
+
className: mx("flex flex-col h-full grow overflow-hidden", classNames)
|
|
640
|
+
}, children), /* @__PURE__ */ React.createElement("div", {
|
|
641
|
+
className: "flex shrink-0 w-full justify-between items-center h-[32px] bg-input-surface"
|
|
642
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
643
|
+
className: "grow px-2 text-sm truncate"
|
|
644
|
+
}, debug ? shape.id : status), openable && /* @__PURE__ */ React.createElement(IconButton, {
|
|
645
|
+
classNames: "p-1",
|
|
646
|
+
variant: "ghost",
|
|
647
|
+
icon: open ? "ph--caret-up--regular" : "ph--caret-down--regular",
|
|
648
|
+
label: open ? "close" : "open",
|
|
649
|
+
iconOnly: true,
|
|
650
|
+
onClick: (ev) => {
|
|
651
|
+
ev.stopPropagation();
|
|
652
|
+
onAction?.(open ? "close" : "open");
|
|
653
|
+
}
|
|
654
|
+
})));
|
|
680
655
|
});
|
|
681
656
|
|
|
682
657
|
// src/shapes/common/FunctionBody.tsx
|
|
683
|
-
import
|
|
684
|
-
import { SchemaAST as SchemaAST2 } from "effect";
|
|
658
|
+
import * as SchemaAST2 from "effect/SchemaAST";
|
|
685
659
|
import React2, { useRef, useState as useState3 } from "react";
|
|
686
660
|
import { VoidInput, VoidOutput } from "@dxos/conductor";
|
|
687
661
|
import { useCanvasContext } from "@dxos/react-ui-canvas";
|
|
688
|
-
import {
|
|
662
|
+
import { createAnchors, getParentShapeElement, rowHeight } from "@dxos/react-ui-canvas-editor";
|
|
689
663
|
|
|
690
664
|
// src/shapes/defs.ts
|
|
691
|
-
import
|
|
665
|
+
import * as Schema2 from "effect/Schema";
|
|
666
|
+
import * as SchemaAST from "effect/SchemaAST";
|
|
692
667
|
import { DEFAULT_INPUT as DEFAULT_INPUT2, DEFAULT_OUTPUT as DEFAULT_OUTPUT2 } from "@dxos/conductor";
|
|
693
|
-
import {
|
|
668
|
+
import { Obj as Obj3 } from "@dxos/echo";
|
|
694
669
|
import { Polygon } from "@dxos/react-ui-canvas-editor";
|
|
695
670
|
var getProperties = (ast) => SchemaAST.getPropertySignatures(ast).map(({ name }) => ({
|
|
696
671
|
name: name.toString()
|
|
@@ -708,13 +683,13 @@ var parseAnchorId = (id) => {
|
|
|
708
683
|
};
|
|
709
684
|
var ComputeShape = Schema2.extend(Polygon, Schema2.Struct({
|
|
710
685
|
// TODO(burdon): Rename computeNode?
|
|
711
|
-
node: Schema2.optional(
|
|
686
|
+
node: Schema2.optional(Obj3.ID.annotations({
|
|
712
687
|
description: "Compute node id"
|
|
713
688
|
}))
|
|
714
689
|
}).pipe(Schema2.mutable));
|
|
715
690
|
var createShape = ({ id, ...rest }) => {
|
|
716
691
|
return {
|
|
717
|
-
id: id ??
|
|
692
|
+
id: id ?? Obj3.ID.random(),
|
|
718
693
|
...rest
|
|
719
694
|
};
|
|
720
695
|
};
|
|
@@ -723,70 +698,65 @@ var createShape = ({ id, ...rest }) => {
|
|
|
723
698
|
var bodyPadding = 8;
|
|
724
699
|
var expandedHeight = 200;
|
|
725
700
|
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
|
|
701
|
+
const { scale } = useCanvasContext();
|
|
702
|
+
const rootRef = useRef(null);
|
|
703
|
+
const [open, setOpen] = useState3(false);
|
|
704
|
+
const handleAction = (action) => {
|
|
705
|
+
if (!rootRef.current) {
|
|
706
|
+
return;
|
|
707
|
+
}
|
|
708
|
+
switch (action) {
|
|
709
|
+
case "open": {
|
|
710
|
+
const el = getParentShapeElement(rootRef.current, shape.id);
|
|
711
|
+
const { height } = el.getBoundingClientRect();
|
|
712
|
+
el.style.height = `${height / scale + expandedHeight}px`;
|
|
713
|
+
setOpen(true);
|
|
714
|
+
break;
|
|
775
715
|
}
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
style: {
|
|
782
|
-
height: rowHeight
|
|
716
|
+
case "close": {
|
|
717
|
+
const el = getParentShapeElement(rootRef.current, shape.id);
|
|
718
|
+
el.style.height = "";
|
|
719
|
+
setOpen(false);
|
|
720
|
+
break;
|
|
783
721
|
}
|
|
784
|
-
}
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
722
|
+
}
|
|
723
|
+
};
|
|
724
|
+
const inputs = getProperties(inputSchema.ast);
|
|
725
|
+
const outputs = getProperties(outputSchema.ast);
|
|
726
|
+
const columnCount = inputs.length && outputs.length ? 2 : 1;
|
|
727
|
+
return /* @__PURE__ */ React2.createElement(Box, {
|
|
728
|
+
ref: rootRef,
|
|
729
|
+
shape,
|
|
730
|
+
title: name,
|
|
731
|
+
classNames: "divide-y divide-separator",
|
|
732
|
+
open,
|
|
733
|
+
onAction: handleAction,
|
|
734
|
+
...props
|
|
735
|
+
}, /* @__PURE__ */ React2.createElement("div", {
|
|
736
|
+
className: `grid grid-cols-${columnCount} items-center`,
|
|
737
|
+
style: {
|
|
738
|
+
paddingTop: bodyPadding,
|
|
739
|
+
paddingBottom: bodyPadding
|
|
740
|
+
}
|
|
741
|
+
}, (inputs?.length ?? 0) > 0 && /* @__PURE__ */ React2.createElement("div", {
|
|
742
|
+
className: "flex flex-col"
|
|
743
|
+
}, inputs?.map(({ name: name2 }) => /* @__PURE__ */ React2.createElement("div", {
|
|
744
|
+
key: name2,
|
|
745
|
+
className: "px-2 truncate text-sm font-mono items-center",
|
|
746
|
+
style: {
|
|
747
|
+
height: rowHeight
|
|
748
|
+
}
|
|
749
|
+
}, name2))), (outputs?.length ?? 0) > 0 && /* @__PURE__ */ React2.createElement("div", {
|
|
750
|
+
className: "flex flex-col"
|
|
751
|
+
}, outputs?.map(({ name: name2 }) => /* @__PURE__ */ React2.createElement("div", {
|
|
752
|
+
key: name2,
|
|
753
|
+
className: "px-2 truncate text-sm font-mono items-center text-right",
|
|
754
|
+
style: {
|
|
755
|
+
height: rowHeight
|
|
756
|
+
}
|
|
757
|
+
}, name2)))), open && /* @__PURE__ */ React2.createElement("div", {
|
|
758
|
+
className: "flex flex-col grow overflow-hidden"
|
|
759
|
+
}, content));
|
|
790
760
|
};
|
|
791
761
|
var getHeight = (input) => {
|
|
792
762
|
const properties = SchemaAST2.getPropertySignatures(input.ast);
|
|
@@ -807,47 +777,35 @@ var createFunctionAnchors = (shape, input = VoidInput, output = VoidOutput) => {
|
|
|
807
777
|
};
|
|
808
778
|
|
|
809
779
|
// src/shapes/common/TypeSelect.tsx
|
|
810
|
-
import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
|
|
811
780
|
import React3 from "react";
|
|
812
781
|
import { ComputeValueType } from "@dxos/conductor";
|
|
813
782
|
import { Select } from "@dxos/react-ui";
|
|
814
783
|
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
|
-
}
|
|
784
|
+
return /* @__PURE__ */ React3.createElement(Select.Root, {
|
|
785
|
+
value,
|
|
786
|
+
onValueChange
|
|
787
|
+
}, /* @__PURE__ */ React3.createElement(Select.TriggerButton, {
|
|
788
|
+
variant: "ghost",
|
|
789
|
+
classNames: "w-full px-0!"
|
|
790
|
+
}), /* @__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, {
|
|
791
|
+
key: type,
|
|
792
|
+
value: type
|
|
793
|
+
}, type))), /* @__PURE__ */ React3.createElement(Select.ScrollDownButton, null), /* @__PURE__ */ React3.createElement(Select.Arrow, null))));
|
|
830
794
|
};
|
|
831
795
|
|
|
832
796
|
// src/shapes/Array.tsx
|
|
833
|
-
import
|
|
834
|
-
import { Schema as Schema3 } from "effect";
|
|
797
|
+
import * as Schema3 from "effect/Schema";
|
|
835
798
|
import React4 from "react";
|
|
836
799
|
import { ReducerInput, ReducerOutput } from "@dxos/conductor";
|
|
837
800
|
var ReducerShape = Schema3.extend(ComputeShape, Schema3.Struct({
|
|
838
801
|
type: Schema3.Literal("reducer")
|
|
839
802
|
}));
|
|
840
803
|
var ReducerComponent = ({ shape }) => {
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
outputSchema: ReducerOutput
|
|
847
|
-
});
|
|
848
|
-
} finally {
|
|
849
|
-
_effect.f();
|
|
850
|
-
}
|
|
804
|
+
return /* @__PURE__ */ React4.createElement(FunctionBody, {
|
|
805
|
+
shape,
|
|
806
|
+
inputSchema: ReducerInput,
|
|
807
|
+
outputSchema: ReducerOutput
|
|
808
|
+
});
|
|
851
809
|
};
|
|
852
810
|
var createReducer = ({ id, size = {
|
|
853
811
|
width: 192,
|
|
@@ -867,8 +825,7 @@ var reducerShape = {
|
|
|
867
825
|
};
|
|
868
826
|
|
|
869
827
|
// src/shapes/Append.tsx
|
|
870
|
-
import
|
|
871
|
-
import { Schema as Schema4 } from "effect";
|
|
828
|
+
import * as Schema4 from "effect/Schema";
|
|
872
829
|
import React5 from "react";
|
|
873
830
|
import { AppendInput } from "@dxos/conductor";
|
|
874
831
|
var AppendShape = Schema4.extend(ComputeShape, Schema4.Struct({
|
|
@@ -883,15 +840,10 @@ var createAppend = (props) => createShape({
|
|
|
883
840
|
...props
|
|
884
841
|
});
|
|
885
842
|
var AppendComponent = ({ shape }) => {
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
inputSchema: AppendInput
|
|
891
|
-
});
|
|
892
|
-
} finally {
|
|
893
|
-
_effect.f();
|
|
894
|
-
}
|
|
843
|
+
return /* @__PURE__ */ React5.createElement(FunctionBody, {
|
|
844
|
+
shape,
|
|
845
|
+
inputSchema: AppendInput
|
|
846
|
+
});
|
|
895
847
|
};
|
|
896
848
|
var appendShape = {
|
|
897
849
|
type: "append",
|
|
@@ -903,8 +855,7 @@ var appendShape = {
|
|
|
903
855
|
};
|
|
904
856
|
|
|
905
857
|
// src/shapes/Audio.tsx
|
|
906
|
-
import
|
|
907
|
-
import { Schema as Schema5 } from "effect";
|
|
858
|
+
import * as Schema5 from "effect/Schema";
|
|
908
859
|
import React6, { useEffect as useEffect3, useState as useState4 } from "react";
|
|
909
860
|
import { Icon as Icon2 } from "@dxos/react-ui";
|
|
910
861
|
import { createAnchorMap } from "@dxos/react-ui-canvas-editor";
|
|
@@ -920,29 +871,24 @@ var createAudio = (props) => createShape({
|
|
|
920
871
|
...props
|
|
921
872
|
});
|
|
922
873
|
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
|
-
}
|
|
874
|
+
const { node } = useComputeNodeState(shape);
|
|
875
|
+
const [active, setActive] = useState4(false);
|
|
876
|
+
useEffect3(() => {
|
|
877
|
+
node.value = active;
|
|
878
|
+
}, [
|
|
879
|
+
active
|
|
880
|
+
]);
|
|
881
|
+
return /* @__PURE__ */ React6.createElement("div", {
|
|
882
|
+
className: "flex w-full justify-center items-center"
|
|
883
|
+
}, /* @__PURE__ */ React6.createElement(Icon2, {
|
|
884
|
+
icon: active ? "ph--microphone--regular" : "ph--microphone-slash--regular",
|
|
885
|
+
classNames: [
|
|
886
|
+
"transition opacity-20 duration-1000",
|
|
887
|
+
active && "opacity-100 text-error-text"
|
|
888
|
+
],
|
|
889
|
+
size: 8,
|
|
890
|
+
onClick: () => setActive(!active)
|
|
891
|
+
}));
|
|
946
892
|
};
|
|
947
893
|
var audioShape = {
|
|
948
894
|
type: "audio",
|
|
@@ -959,13 +905,11 @@ var audioShape = {
|
|
|
959
905
|
};
|
|
960
906
|
|
|
961
907
|
// src/shapes/Beacon.tsx
|
|
962
|
-
import
|
|
963
|
-
import { Schema as Schema6 } from "effect";
|
|
908
|
+
import * as Schema6 from "effect/Schema";
|
|
964
909
|
import React7 from "react";
|
|
965
910
|
import { DEFAULT_INPUT as DEFAULT_INPUT3, isTruthy } from "@dxos/conductor";
|
|
966
911
|
import { Icon as Icon3 } from "@dxos/react-ui";
|
|
967
912
|
import { createAnchorMap as createAnchorMap2 } from "@dxos/react-ui-canvas-editor";
|
|
968
|
-
import { mx as mx2 } from "@dxos/react-ui-theme";
|
|
969
913
|
var BeaconShape = Schema6.extend(ComputeShape, Schema6.Struct({
|
|
970
914
|
type: Schema6.Literal("beacon")
|
|
971
915
|
}));
|
|
@@ -978,21 +922,19 @@ var createBeacon = (props) => createShape({
|
|
|
978
922
|
...props
|
|
979
923
|
});
|
|
980
924
|
var BeaconComponent = ({ shape }) => {
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
}
|
|
994
|
-
_effect.f();
|
|
995
|
-
}
|
|
925
|
+
const { runtime } = useComputeNodeState(shape);
|
|
926
|
+
const input = runtime.inputs[DEFAULT_INPUT3];
|
|
927
|
+
const value = input?.type === "executed" ? input.value : false;
|
|
928
|
+
return /* @__PURE__ */ React7.createElement("div", {
|
|
929
|
+
className: "flex w-full justify-center items-center"
|
|
930
|
+
}, /* @__PURE__ */ React7.createElement(Icon3, {
|
|
931
|
+
icon: "ph--sun--regular",
|
|
932
|
+
classNames: [
|
|
933
|
+
"transition opacity-20 duration-1000",
|
|
934
|
+
isTruthy(value) && "opacity-100 text-yellow-500"
|
|
935
|
+
],
|
|
936
|
+
size: 8
|
|
937
|
+
}));
|
|
996
938
|
};
|
|
997
939
|
var beaconShape = {
|
|
998
940
|
type: "beacon",
|
|
@@ -1009,7 +951,7 @@ var beaconShape = {
|
|
|
1009
951
|
};
|
|
1010
952
|
|
|
1011
953
|
// src/shapes/Boolean.tsx
|
|
1012
|
-
import
|
|
954
|
+
import * as Schema7 from "effect/Schema";
|
|
1013
955
|
import React8 from "react";
|
|
1014
956
|
import { getAnchorPoints } from "@dxos/react-ui-canvas-editor";
|
|
1015
957
|
import { createAnchors as createAnchors2 } from "@dxos/react-ui-canvas-editor";
|
|
@@ -1060,7 +1002,7 @@ var createSymbol = (pathConstructor, inputs) => ({
|
|
|
1060
1002
|
});
|
|
1061
1003
|
return /* @__PURE__ */ React8.createElement("svg", {
|
|
1062
1004
|
viewBox: `0 0 ${width} ${height}`,
|
|
1063
|
-
className: "
|
|
1005
|
+
className: "h-full w-full"
|
|
1064
1006
|
}, getAnchorPoints({
|
|
1065
1007
|
x: 0,
|
|
1066
1008
|
y: centerY
|
|
@@ -1182,8 +1124,7 @@ var notShape = defineShape({
|
|
|
1182
1124
|
});
|
|
1183
1125
|
|
|
1184
1126
|
// src/shapes/Chat.tsx
|
|
1185
|
-
import
|
|
1186
|
-
import { Schema as Schema8 } from "effect";
|
|
1127
|
+
import * as Schema8 from "effect/Schema";
|
|
1187
1128
|
import React9, { useRef as useRef2 } from "react";
|
|
1188
1129
|
import { DEFAULT_OUTPUT as DEFAULT_OUTPUT3 } from "@dxos/conductor";
|
|
1189
1130
|
import { TextBox } from "@dxos/react-ui-canvas-editor";
|
|
@@ -1192,28 +1133,23 @@ var ChatShape = Schema8.extend(ComputeShape, Schema8.Struct({
|
|
|
1192
1133
|
type: Schema8.Literal("chat")
|
|
1193
1134
|
}));
|
|
1194
1135
|
var TextInputComponent = ({ shape, title, ...props }) => {
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
const
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
...props
|
|
1213
|
-
}));
|
|
1214
|
-
} finally {
|
|
1215
|
-
_effect.f();
|
|
1216
|
-
}
|
|
1136
|
+
const { runtime } = useComputeNodeState(shape);
|
|
1137
|
+
const inputRef = useRef2(null);
|
|
1138
|
+
const handleEnter = (text) => {
|
|
1139
|
+
const value = text.trim();
|
|
1140
|
+
if (value.length) {
|
|
1141
|
+
runtime.setOutput(DEFAULT_OUTPUT3, value);
|
|
1142
|
+
inputRef.current?.setText("");
|
|
1143
|
+
}
|
|
1144
|
+
};
|
|
1145
|
+
return /* @__PURE__ */ React9.createElement(Box, {
|
|
1146
|
+
shape,
|
|
1147
|
+
title
|
|
1148
|
+
}, /* @__PURE__ */ React9.createElement(TextBox, {
|
|
1149
|
+
ref: inputRef,
|
|
1150
|
+
onEnter: handleEnter,
|
|
1151
|
+
...props
|
|
1152
|
+
}));
|
|
1217
1153
|
};
|
|
1218
1154
|
var createChat = (props) => createShape({
|
|
1219
1155
|
type: "chat",
|
|
@@ -1243,8 +1179,7 @@ var chatShape = {
|
|
|
1243
1179
|
};
|
|
1244
1180
|
|
|
1245
1181
|
// src/shapes/Constant.tsx
|
|
1246
|
-
import
|
|
1247
|
-
import { Schema as Schema9 } from "effect";
|
|
1182
|
+
import * as Schema9 from "effect/Schema";
|
|
1248
1183
|
import React10, { useCallback as useCallback2, useRef as useRef3, useState as useState5 } from "react";
|
|
1249
1184
|
import { ComputeValueType as ComputeValueType2 } from "@dxos/conductor";
|
|
1250
1185
|
import { Input } from "@dxos/react-ui";
|
|
@@ -1267,57 +1202,52 @@ var inferType = (value) => {
|
|
|
1267
1202
|
}
|
|
1268
1203
|
};
|
|
1269
1204
|
var ConstantComponent = ({ shape, title, chat, ...props }) => {
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
const
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
if (
|
|
1279
|
-
|
|
1280
|
-
if (!isNaN(floatValue)) {
|
|
1281
|
-
node.value = floatValue;
|
|
1282
|
-
}
|
|
1283
|
-
} else if (type === "object") {
|
|
1284
|
-
node.value = safeParseJson(value, {});
|
|
1285
|
-
} else {
|
|
1286
|
-
node.value = value;
|
|
1205
|
+
const { node } = useComputeNodeState(shape);
|
|
1206
|
+
const [type, setType] = useState5(inferType(node.value) ?? ComputeValueType2.literals[0]);
|
|
1207
|
+
const inputRef = useRef3(null);
|
|
1208
|
+
const handleEnter = useCallback2((text) => {
|
|
1209
|
+
const value = text.trim();
|
|
1210
|
+
if (value.length) {
|
|
1211
|
+
if (type === "number") {
|
|
1212
|
+
const floatValue = parseFloat(value);
|
|
1213
|
+
if (!isNaN(floatValue)) {
|
|
1214
|
+
node.value = floatValue;
|
|
1287
1215
|
}
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
type
|
|
1292
|
-
]);
|
|
1293
|
-
return /* @__PURE__ */ React10.createElement(Box, {
|
|
1294
|
-
shape,
|
|
1295
|
-
title,
|
|
1296
|
-
status: /* @__PURE__ */ React10.createElement(TypeSelect, {
|
|
1297
|
-
value: type,
|
|
1298
|
-
onValueChange: setType
|
|
1299
|
-
})
|
|
1300
|
-
}, (type === "string" || type === "number") && /* @__PURE__ */ React10.createElement(TextBox2, {
|
|
1301
|
-
...props,
|
|
1302
|
-
ref: inputRef,
|
|
1303
|
-
value: node.value,
|
|
1304
|
-
onEnter: handleEnter
|
|
1305
|
-
}), type === "object" && /* @__PURE__ */ React10.createElement(TextBox2, {
|
|
1306
|
-
...props,
|
|
1307
|
-
ref: inputRef,
|
|
1308
|
-
value: JSON.stringify(node.value, null, 2),
|
|
1309
|
-
language: "json"
|
|
1310
|
-
}), type === "boolean" && /* @__PURE__ */ React10.createElement("div", {
|
|
1311
|
-
className: "flex grow justify-center items-center"
|
|
1312
|
-
}, /* @__PURE__ */ React10.createElement(Input.Root, null, /* @__PURE__ */ React10.createElement(Input.Switch, {
|
|
1313
|
-
checked: node.value,
|
|
1314
|
-
onCheckedChange: (value) => {
|
|
1216
|
+
} else if (type === "object") {
|
|
1217
|
+
node.value = safeParseJson(value, {});
|
|
1218
|
+
} else {
|
|
1315
1219
|
node.value = value;
|
|
1316
1220
|
}
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1221
|
+
inputRef.current?.focus();
|
|
1222
|
+
}
|
|
1223
|
+
}, [
|
|
1224
|
+
type
|
|
1225
|
+
]);
|
|
1226
|
+
return /* @__PURE__ */ React10.createElement(Box, {
|
|
1227
|
+
shape,
|
|
1228
|
+
title,
|
|
1229
|
+
status: /* @__PURE__ */ React10.createElement(TypeSelect, {
|
|
1230
|
+
value: type,
|
|
1231
|
+
onValueChange: setType
|
|
1232
|
+
})
|
|
1233
|
+
}, (type === "string" || type === "number") && /* @__PURE__ */ React10.createElement(TextBox2, {
|
|
1234
|
+
...props,
|
|
1235
|
+
ref: inputRef,
|
|
1236
|
+
value: node.value,
|
|
1237
|
+
onEnter: handleEnter
|
|
1238
|
+
}), type === "object" && /* @__PURE__ */ React10.createElement(TextBox2, {
|
|
1239
|
+
...props,
|
|
1240
|
+
ref: inputRef,
|
|
1241
|
+
value: JSON.stringify(node.value, null, 2),
|
|
1242
|
+
language: "json"
|
|
1243
|
+
}), type === "boolean" && /* @__PURE__ */ React10.createElement("div", {
|
|
1244
|
+
className: "flex grow justify-center items-center"
|
|
1245
|
+
}, /* @__PURE__ */ React10.createElement(Input.Root, null, /* @__PURE__ */ React10.createElement(Input.Switch, {
|
|
1246
|
+
checked: node.value,
|
|
1247
|
+
onCheckedChange: (value) => {
|
|
1248
|
+
node.value = value;
|
|
1249
|
+
}
|
|
1250
|
+
}))));
|
|
1321
1251
|
};
|
|
1322
1252
|
var createConstant = (props) => createShape({
|
|
1323
1253
|
type: "constant",
|
|
@@ -1346,8 +1276,7 @@ var constantShape = {
|
|
|
1346
1276
|
};
|
|
1347
1277
|
|
|
1348
1278
|
// src/shapes/Database.tsx
|
|
1349
|
-
import
|
|
1350
|
-
import { Schema as Schema10 } from "effect";
|
|
1279
|
+
import * as Schema10 from "effect/Schema";
|
|
1351
1280
|
import React11 from "react";
|
|
1352
1281
|
import { createAnchorMap as createAnchorMap5 } from "@dxos/react-ui-canvas-editor";
|
|
1353
1282
|
var DatabaseShape = Schema10.extend(ComputeShape, Schema10.Struct({
|
|
@@ -1362,14 +1291,9 @@ var createDatabase = (props) => createShape({
|
|
|
1362
1291
|
...props
|
|
1363
1292
|
});
|
|
1364
1293
|
var DatabaseComponent = ({ shape }) => {
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
shape
|
|
1369
|
-
});
|
|
1370
|
-
} finally {
|
|
1371
|
-
_effect.f();
|
|
1372
|
-
}
|
|
1294
|
+
return /* @__PURE__ */ React11.createElement(Box, {
|
|
1295
|
+
shape
|
|
1296
|
+
});
|
|
1373
1297
|
};
|
|
1374
1298
|
var databaseShape = {
|
|
1375
1299
|
type: "database",
|
|
@@ -1385,18 +1309,83 @@ var databaseShape = {
|
|
|
1385
1309
|
})
|
|
1386
1310
|
};
|
|
1387
1311
|
|
|
1312
|
+
// src/shapes/Feed.tsx
|
|
1313
|
+
import * as Schema11 from "effect/Schema";
|
|
1314
|
+
import React12, { Fragment } from "react";
|
|
1315
|
+
import { DEFAULT_OUTPUT as DEFAULT_OUTPUT4, QueueInput, QueueOutput } from "@dxos/conductor";
|
|
1316
|
+
import { ScrollArea } from "@dxos/react-ui";
|
|
1317
|
+
import { mx as mx2 } from "@dxos/ui-theme";
|
|
1318
|
+
var FeedShape = Schema11.extend(ComputeShape, Schema11.Struct({
|
|
1319
|
+
type: Schema11.Literal("queue")
|
|
1320
|
+
}));
|
|
1321
|
+
var createFeed = (props) => createShape({
|
|
1322
|
+
type: "queue",
|
|
1323
|
+
size: {
|
|
1324
|
+
width: 256,
|
|
1325
|
+
height: 512
|
|
1326
|
+
},
|
|
1327
|
+
...props
|
|
1328
|
+
});
|
|
1329
|
+
var FeedComponent = ({ shape }) => {
|
|
1330
|
+
const { runtime } = useComputeNodeState(shape);
|
|
1331
|
+
const items = runtime.outputs[DEFAULT_OUTPUT4]?.type === "executed" ? runtime.outputs[DEFAULT_OUTPUT4].value : [];
|
|
1332
|
+
const handleAction = (action) => {
|
|
1333
|
+
if (action === "run") {
|
|
1334
|
+
runtime.evalNode();
|
|
1335
|
+
}
|
|
1336
|
+
};
|
|
1337
|
+
return /* @__PURE__ */ React12.createElement(Box, {
|
|
1338
|
+
shape,
|
|
1339
|
+
status: `${items.length} items`,
|
|
1340
|
+
onAction: handleAction
|
|
1341
|
+
}, /* @__PURE__ */ React12.createElement(ScrollArea.Root, {
|
|
1342
|
+
orientation: "vertical"
|
|
1343
|
+
}, /* @__PURE__ */ React12.createElement(ScrollArea.Viewport, {
|
|
1344
|
+
classNames: "divide-y divide-separator"
|
|
1345
|
+
}, [
|
|
1346
|
+
...items
|
|
1347
|
+
].map((item, i) => /* @__PURE__ */ React12.createElement(FeedItem, {
|
|
1348
|
+
key: i,
|
|
1349
|
+
classNames: "p-1 px-2",
|
|
1350
|
+
item
|
|
1351
|
+
})))));
|
|
1352
|
+
};
|
|
1353
|
+
var FeedItem = ({ classNames, item }) => {
|
|
1354
|
+
if (typeof item !== "object") {
|
|
1355
|
+
return /* @__PURE__ */ React12.createElement("div", {
|
|
1356
|
+
className: mx2(classNames, "whitespace-pre-wrap")
|
|
1357
|
+
}, item);
|
|
1358
|
+
}
|
|
1359
|
+
return /* @__PURE__ */ React12.createElement("div", {
|
|
1360
|
+
className: mx2("grid grid-cols-[80px_1fr]", classNames)
|
|
1361
|
+
}, Object.entries(item).map(([key, value]) => /* @__PURE__ */ React12.createElement(Fragment, {
|
|
1362
|
+
key
|
|
1363
|
+
}, /* @__PURE__ */ React12.createElement("div", {
|
|
1364
|
+
className: "p-1 text-xs text-subdued"
|
|
1365
|
+
}, key), /* @__PURE__ */ React12.createElement("div", null, typeof value === "string" ? value : JSON.stringify(value)))));
|
|
1366
|
+
};
|
|
1367
|
+
var feedShape = {
|
|
1368
|
+
type: "feed",
|
|
1369
|
+
name: "Feed",
|
|
1370
|
+
icon: "ph--queue--regular",
|
|
1371
|
+
component: FeedComponent,
|
|
1372
|
+
createShape: createFeed,
|
|
1373
|
+
getAnchors: (shape) => createFunctionAnchors(shape, QueueInput, QueueOutput),
|
|
1374
|
+
resizable: true
|
|
1375
|
+
};
|
|
1376
|
+
|
|
1388
1377
|
// src/shapes/Function.tsx
|
|
1389
|
-
import
|
|
1390
|
-
import {
|
|
1391
|
-
import
|
|
1378
|
+
import * as Schema12 from "effect/Schema";
|
|
1379
|
+
import React13, { useCallback as useCallback3, useRef as useRef4 } from "react";
|
|
1380
|
+
import { Script } from "@dxos/compute";
|
|
1381
|
+
import { Operation } from "@dxos/compute";
|
|
1392
1382
|
import { AnyOutput, FunctionInput } from "@dxos/conductor";
|
|
1393
|
-
import {
|
|
1394
|
-
import { FunctionType, ScriptType } from "@dxos/functions";
|
|
1383
|
+
import { Ref as Ref2, getSnapshot, isInstanceOf } from "@dxos/echo/internal";
|
|
1395
1384
|
import { useClient } from "@dxos/react-client";
|
|
1396
1385
|
import { Filter, parseId } from "@dxos/react-client/echo";
|
|
1397
1386
|
import { TextBox as TextBox3 } from "@dxos/react-ui-canvas-editor";
|
|
1398
|
-
var FunctionShape =
|
|
1399
|
-
type:
|
|
1387
|
+
var FunctionShape = Schema12.extend(ComputeShape, Schema12.Struct({
|
|
1388
|
+
type: Schema12.Literal("function")
|
|
1400
1389
|
}));
|
|
1401
1390
|
var createFunction = (props) => createShape({
|
|
1402
1391
|
type: "function",
|
|
@@ -1407,59 +1396,54 @@ var createFunction = (props) => createShape({
|
|
|
1407
1396
|
...props
|
|
1408
1397
|
});
|
|
1409
1398
|
var TextInputComponent2 = ({ shape, title, ...props }) => {
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
const
|
|
1415
|
-
const
|
|
1416
|
-
|
|
1417
|
-
|
|
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
|
-
onEnter: handleEnter
|
|
1459
|
-
}));
|
|
1460
|
-
} finally {
|
|
1461
|
-
_effect.f();
|
|
1462
|
-
}
|
|
1399
|
+
const client = useClient();
|
|
1400
|
+
const { node, runtime } = useComputeNodeState(shape);
|
|
1401
|
+
const inputRef = useRef4(null);
|
|
1402
|
+
const handleEnter = useCallback3(async (text) => {
|
|
1403
|
+
const value = text.trim();
|
|
1404
|
+
const { spaceId, objectId } = parseId(value);
|
|
1405
|
+
if (!spaceId || !objectId) {
|
|
1406
|
+
return;
|
|
1407
|
+
}
|
|
1408
|
+
const space = client.spaces.get(spaceId);
|
|
1409
|
+
const object = space?.db.getObjectById(objectId);
|
|
1410
|
+
if (!space || !isInstanceOf(Script.Script, object)) {
|
|
1411
|
+
return;
|
|
1412
|
+
}
|
|
1413
|
+
const [fn] = await space.db.query(Filter.type(Operation.PersistentOperation, {
|
|
1414
|
+
source: Ref2.make(object)
|
|
1415
|
+
})).run();
|
|
1416
|
+
if (!fn) {
|
|
1417
|
+
return;
|
|
1418
|
+
}
|
|
1419
|
+
node.value = value;
|
|
1420
|
+
node.function = Ref2.make(fn);
|
|
1421
|
+
node.inputSchema = fn.inputSchema ? getSnapshot(fn.inputSchema) : void 0;
|
|
1422
|
+
node.outputSchema = fn.outputSchema ? getSnapshot(fn.outputSchema) : void 0;
|
|
1423
|
+
}, [
|
|
1424
|
+
client,
|
|
1425
|
+
node
|
|
1426
|
+
]);
|
|
1427
|
+
const handleAction = useCallback3((action) => {
|
|
1428
|
+
if (action !== "run") {
|
|
1429
|
+
return;
|
|
1430
|
+
}
|
|
1431
|
+
runtime.evalNode();
|
|
1432
|
+
}, [
|
|
1433
|
+
runtime
|
|
1434
|
+
]);
|
|
1435
|
+
return /* @__PURE__ */ React13.createElement(Box, {
|
|
1436
|
+
shape,
|
|
1437
|
+
title: "Function",
|
|
1438
|
+
onAction: handleAction
|
|
1439
|
+
}, /* @__PURE__ */ React13.createElement(TextBox3, {
|
|
1440
|
+
...props,
|
|
1441
|
+
ref: inputRef,
|
|
1442
|
+
value: node.value,
|
|
1443
|
+
language: node.valueType === "object" ? "json" : void 0,
|
|
1444
|
+
onBlur: handleEnter,
|
|
1445
|
+
onEnter: handleEnter
|
|
1446
|
+
}));
|
|
1463
1447
|
};
|
|
1464
1448
|
var functionShape = {
|
|
1465
1449
|
type: "function",
|
|
@@ -1471,12 +1455,12 @@ var functionShape = {
|
|
|
1471
1455
|
};
|
|
1472
1456
|
|
|
1473
1457
|
// src/shapes/Gpt.tsx
|
|
1474
|
-
import
|
|
1475
|
-
import {
|
|
1476
|
-
import React13, { useEffect as useEffect4, useState as useState6 } from "react";
|
|
1458
|
+
import * as Schema13 from "effect/Schema";
|
|
1459
|
+
import React14, { useEffect as useEffect4, useState as useState6 } from "react";
|
|
1477
1460
|
import { GptInput, GptOutput } from "@dxos/conductor";
|
|
1478
|
-
|
|
1479
|
-
|
|
1461
|
+
import { ScrollArea as ScrollArea2 } from "@dxos/react-ui";
|
|
1462
|
+
var GptShape = Schema13.extend(ComputeShape, Schema13.Struct({
|
|
1463
|
+
type: Schema13.Literal("gpt")
|
|
1480
1464
|
}));
|
|
1481
1465
|
var createGpt = (props) => createShape({
|
|
1482
1466
|
type: "gpt",
|
|
@@ -1487,54 +1471,50 @@ var createGpt = (props) => createShape({
|
|
|
1487
1471
|
...props
|
|
1488
1472
|
});
|
|
1489
1473
|
var GptComponent = ({ shape }) => {
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
const
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
});
|
|
1514
|
-
break;
|
|
1515
|
-
}
|
|
1474
|
+
const { meta, runtime } = useComputeNodeState(shape);
|
|
1475
|
+
const [text, setText] = useState6("");
|
|
1476
|
+
const [tokens, setTokens] = useState6(0);
|
|
1477
|
+
useEffect4(() => {
|
|
1478
|
+
return runtime.subscribeToEventLog((ev) => {
|
|
1479
|
+
switch (ev.type) {
|
|
1480
|
+
case "begin-compute": {
|
|
1481
|
+
setText("");
|
|
1482
|
+
break;
|
|
1483
|
+
}
|
|
1484
|
+
case "custom": {
|
|
1485
|
+
const token = ev.event;
|
|
1486
|
+
switch (token.type) {
|
|
1487
|
+
case "content_block_delta":
|
|
1488
|
+
switch (token.delta.type) {
|
|
1489
|
+
case "text_delta": {
|
|
1490
|
+
const delta = token.delta.text;
|
|
1491
|
+
setText((prev) => {
|
|
1492
|
+
const text2 = prev + delta;
|
|
1493
|
+
setTokens(text2.split(" ").length);
|
|
1494
|
+
return text2;
|
|
1495
|
+
});
|
|
1496
|
+
break;
|
|
1516
1497
|
}
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
break;
|
|
1498
|
+
}
|
|
1499
|
+
break;
|
|
1520
1500
|
}
|
|
1501
|
+
break;
|
|
1521
1502
|
}
|
|
1522
|
-
}
|
|
1523
|
-
}, [
|
|
1524
|
-
runtime?.subscribeToEventLog
|
|
1525
|
-
]);
|
|
1526
|
-
return /* @__PURE__ */ React13.createElement(FunctionBody, {
|
|
1527
|
-
shape,
|
|
1528
|
-
content: /* @__PURE__ */ React13.createElement("div", {
|
|
1529
|
-
className: "px-2 py-1 overflow-y-scroll"
|
|
1530
|
-
}, text),
|
|
1531
|
-
status: `${tokens} tokens`,
|
|
1532
|
-
inputSchema: meta.input,
|
|
1533
|
-
outputSchema: meta.output
|
|
1503
|
+
}
|
|
1534
1504
|
});
|
|
1535
|
-
}
|
|
1536
|
-
|
|
1537
|
-
|
|
1505
|
+
}, [
|
|
1506
|
+
runtime?.subscribeToEventLog
|
|
1507
|
+
]);
|
|
1508
|
+
return /* @__PURE__ */ React14.createElement(FunctionBody, {
|
|
1509
|
+
shape,
|
|
1510
|
+
content: /* @__PURE__ */ React14.createElement(ScrollArea2.Root, {
|
|
1511
|
+
orientation: "vertical",
|
|
1512
|
+
thin: true
|
|
1513
|
+
}, /* @__PURE__ */ React14.createElement(ScrollArea2.Viewport, null, text)),
|
|
1514
|
+
status: `${tokens} tokens`,
|
|
1515
|
+
inputSchema: meta.input,
|
|
1516
|
+
outputSchema: meta.output
|
|
1517
|
+
});
|
|
1538
1518
|
};
|
|
1539
1519
|
var gptShape = {
|
|
1540
1520
|
type: "gpt",
|
|
@@ -1546,44 +1526,147 @@ var gptShape = {
|
|
|
1546
1526
|
openable: true
|
|
1547
1527
|
};
|
|
1548
1528
|
|
|
1529
|
+
// src/shapes/GptRealtime.tsx
|
|
1530
|
+
import * as Schema14 from "effect/Schema";
|
|
1531
|
+
import React15, { useState as useState7 } from "react";
|
|
1532
|
+
import { log as log2 } from "@dxos/log";
|
|
1533
|
+
import { useConfig } from "@dxos/react-client";
|
|
1534
|
+
import { Icon as Icon4 } from "@dxos/react-ui";
|
|
1535
|
+
var __dxlog_file6 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/shapes/GptRealtime.tsx";
|
|
1536
|
+
var GptRealtimeShape = Schema14.extend(ComputeShape, Schema14.Struct({
|
|
1537
|
+
type: Schema14.Literal("gpt-realtime")
|
|
1538
|
+
}));
|
|
1539
|
+
var createGptRealtime = (props) => createShape({
|
|
1540
|
+
type: "gpt-realtime",
|
|
1541
|
+
size: {
|
|
1542
|
+
width: 256,
|
|
1543
|
+
height: 256
|
|
1544
|
+
},
|
|
1545
|
+
...props
|
|
1546
|
+
});
|
|
1547
|
+
var GptRealtimeComponent = ({ shape }) => {
|
|
1548
|
+
const [isLive, setIsLive] = useState7(false);
|
|
1549
|
+
const [isReady, setIsReady] = useState7(false);
|
|
1550
|
+
const config = useConfig();
|
|
1551
|
+
const start = async () => {
|
|
1552
|
+
setIsLive(true);
|
|
1553
|
+
try {
|
|
1554
|
+
const peerConnection = new RTCPeerConnection();
|
|
1555
|
+
peerConnection.ontrack = (event) => {
|
|
1556
|
+
const audioElement = document.createElement("audio");
|
|
1557
|
+
audioElement.srcObject = event.streams[0];
|
|
1558
|
+
audioElement.autoplay = true;
|
|
1559
|
+
audioElement.controls = false;
|
|
1560
|
+
audioElement.style.display = "none";
|
|
1561
|
+
document.body.appendChild(audioElement);
|
|
1562
|
+
setIsReady(true);
|
|
1563
|
+
};
|
|
1564
|
+
const stream = await navigator.mediaDevices.getUserMedia({
|
|
1565
|
+
audio: true
|
|
1566
|
+
});
|
|
1567
|
+
stream.getTracks().forEach((track) => peerConnection.addTransceiver(track, {
|
|
1568
|
+
direction: "sendrecv"
|
|
1569
|
+
}));
|
|
1570
|
+
const offer = await peerConnection.createOffer();
|
|
1571
|
+
await peerConnection.setLocalDescription(offer);
|
|
1572
|
+
const AiServiceUrl = new URL("/rtc-connect", config.values.runtime?.services?.ai?.server ?? DEFAULT_AI_SERVICE_URL);
|
|
1573
|
+
const response = await fetch(AiServiceUrl, {
|
|
1574
|
+
method: "POST",
|
|
1575
|
+
body: offer.sdp,
|
|
1576
|
+
headers: {
|
|
1577
|
+
"Content-Type": "application/sdp"
|
|
1578
|
+
}
|
|
1579
|
+
});
|
|
1580
|
+
const answer = await response.text();
|
|
1581
|
+
await peerConnection.setRemoteDescription({
|
|
1582
|
+
sdp: answer,
|
|
1583
|
+
type: "answer"
|
|
1584
|
+
});
|
|
1585
|
+
const dataChannel = peerConnection.createDataChannel("response");
|
|
1586
|
+
const configureData = () => {
|
|
1587
|
+
log2.info("Configuring data channel", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 69, S: void 0 });
|
|
1588
|
+
const event = {
|
|
1589
|
+
type: "session.update",
|
|
1590
|
+
session: {
|
|
1591
|
+
modalities: [
|
|
1592
|
+
"text",
|
|
1593
|
+
"audio"
|
|
1594
|
+
],
|
|
1595
|
+
// Provide the tools. Note they match the keys in the `fns` object above
|
|
1596
|
+
tools: []
|
|
1597
|
+
}
|
|
1598
|
+
};
|
|
1599
|
+
dataChannel.send(JSON.stringify(event));
|
|
1600
|
+
};
|
|
1601
|
+
dataChannel.addEventListener("open", (ev) => {
|
|
1602
|
+
log2.info("Opening data channel", {
|
|
1603
|
+
ev
|
|
1604
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 84, S: void 0 });
|
|
1605
|
+
configureData();
|
|
1606
|
+
});
|
|
1607
|
+
dataChannel.addEventListener("message", async (ev) => {
|
|
1608
|
+
const msg = JSON.parse(ev.data);
|
|
1609
|
+
if (msg.type === "response.function_call_arguments.done") {
|
|
1610
|
+
}
|
|
1611
|
+
});
|
|
1612
|
+
} catch (error) {
|
|
1613
|
+
log2.error("Error in realtime session:", {
|
|
1614
|
+
error
|
|
1615
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 124, S: void 0 });
|
|
1616
|
+
throw error;
|
|
1617
|
+
}
|
|
1618
|
+
};
|
|
1619
|
+
return /* @__PURE__ */ React15.createElement("div", {
|
|
1620
|
+
className: "flex w-full justify-center items-center"
|
|
1621
|
+
}, /* @__PURE__ */ React15.createElement(Icon4, {
|
|
1622
|
+
icon: isReady ? "ph--waveform--regular" : isLive ? "ph--pulse--regular" : "ph--play--regular",
|
|
1623
|
+
size: 16,
|
|
1624
|
+
classNames: !isLive && "cursor-pointer",
|
|
1625
|
+
onClick: start
|
|
1626
|
+
}));
|
|
1627
|
+
};
|
|
1628
|
+
var gptRealtimeShape = {
|
|
1629
|
+
type: "gpt-realtime",
|
|
1630
|
+
name: "GPT Realtime",
|
|
1631
|
+
icon: "ph--pulse--regular",
|
|
1632
|
+
component: GptRealtimeComponent,
|
|
1633
|
+
createShape: createGptRealtime,
|
|
1634
|
+
// TODO(dmaretskyi): Can we fetch the schema dynamically?
|
|
1635
|
+
getAnchors: (shape) => createFunctionAnchors(shape, Schema14.Struct({
|
|
1636
|
+
audio: Schema14.Any
|
|
1637
|
+
}), Schema14.Struct({})),
|
|
1638
|
+
resizable: true
|
|
1639
|
+
};
|
|
1640
|
+
var DEFAULT_AI_SERVICE_URL = "http://localhost:8788";
|
|
1641
|
+
|
|
1549
1642
|
// src/shapes/Json.tsx
|
|
1550
|
-
import
|
|
1551
|
-
import
|
|
1552
|
-
import React14 from "react";
|
|
1643
|
+
import * as Schema15 from "effect/Schema";
|
|
1644
|
+
import React16 from "react";
|
|
1553
1645
|
import { DEFAULT_INPUT as DEFAULT_INPUT4, DefaultOutput, JsonTransformInput } from "@dxos/conductor";
|
|
1554
1646
|
import { createAnchorMap as createAnchorMap6 } from "@dxos/react-ui-canvas-editor";
|
|
1555
|
-
import {
|
|
1556
|
-
var JsonShape =
|
|
1557
|
-
type:
|
|
1647
|
+
import { Syntax } from "@dxos/react-ui-syntax-highlighter";
|
|
1648
|
+
var JsonShape = Schema15.extend(ComputeShape, Schema15.Struct({
|
|
1649
|
+
type: Schema15.Literal("json")
|
|
1558
1650
|
}));
|
|
1559
|
-
var JsonTransformShape =
|
|
1560
|
-
type:
|
|
1651
|
+
var JsonTransformShape = Schema15.extend(ComputeShape, Schema15.Struct({
|
|
1652
|
+
type: Schema15.Literal("json-transform")
|
|
1561
1653
|
}));
|
|
1562
1654
|
var JsonComponent = ({ shape, ...props }) => {
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
}));
|
|
1574
|
-
} finally {
|
|
1575
|
-
_effect.f();
|
|
1576
|
-
}
|
|
1655
|
+
const { runtime } = useComputeNodeState(shape);
|
|
1656
|
+
const input = runtime.inputs[DEFAULT_INPUT4];
|
|
1657
|
+
const value = input?.type === "executed" ? input.value : void 0;
|
|
1658
|
+
return /* @__PURE__ */ React16.createElement(Box, {
|
|
1659
|
+
shape
|
|
1660
|
+
}, /* @__PURE__ */ React16.createElement(Syntax.Root, {
|
|
1661
|
+
data: value
|
|
1662
|
+
}, /* @__PURE__ */ React16.createElement(Syntax.Content, null, /* @__PURE__ */ React16.createElement(Syntax.Filter, null), /* @__PURE__ */ React16.createElement(Syntax.Viewport, null, /* @__PURE__ */ React16.createElement(Syntax.Code, {
|
|
1663
|
+
classNames: "text-xs"
|
|
1664
|
+
})))));
|
|
1577
1665
|
};
|
|
1578
1666
|
var JsonTransformComponent = ({ shape, ...props }) => {
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
shape
|
|
1583
|
-
});
|
|
1584
|
-
} finally {
|
|
1585
|
-
_effect.f();
|
|
1586
|
-
}
|
|
1667
|
+
return /* @__PURE__ */ React16.createElement(Box, {
|
|
1668
|
+
shape
|
|
1669
|
+
});
|
|
1587
1670
|
};
|
|
1588
1671
|
var createJson = (props) => createShape({
|
|
1589
1672
|
type: "json",
|
|
@@ -1597,7 +1680,7 @@ var jsonShape = {
|
|
|
1597
1680
|
type: "json",
|
|
1598
1681
|
name: "JSON",
|
|
1599
1682
|
icon: "ph--code--regular",
|
|
1600
|
-
component: (props) => /* @__PURE__ */
|
|
1683
|
+
component: (props) => /* @__PURE__ */ React16.createElement(JsonComponent, props),
|
|
1601
1684
|
createShape: createJson,
|
|
1602
1685
|
getAnchors: (shape) => createAnchorMap6(shape, {
|
|
1603
1686
|
[createAnchorId("input")]: {
|
|
@@ -1623,46 +1706,35 @@ var jsonTransformShape = {
|
|
|
1623
1706
|
type: "json-transform",
|
|
1624
1707
|
name: "Transform",
|
|
1625
1708
|
icon: "ph--shuffle-simple--regular",
|
|
1626
|
-
component: (props) => /* @__PURE__ */
|
|
1709
|
+
component: (props) => /* @__PURE__ */ React16.createElement(JsonTransformComponent, props),
|
|
1627
1710
|
createShape: createJsonTransform,
|
|
1628
1711
|
getAnchors: (shape) => createFunctionAnchors(shape, JsonTransformInput, DefaultOutput),
|
|
1629
1712
|
resizable: true
|
|
1630
1713
|
};
|
|
1631
1714
|
|
|
1632
1715
|
// src/shapes/Logic.tsx
|
|
1633
|
-
import
|
|
1634
|
-
import
|
|
1635
|
-
import React15 from "react";
|
|
1716
|
+
import * as Schema16 from "effect/Schema";
|
|
1717
|
+
import React17 from "react";
|
|
1636
1718
|
import { IfElseInput, IfElseOutput, IfInput, IfOutput } from "@dxos/conductor";
|
|
1637
|
-
var IfShape =
|
|
1638
|
-
type:
|
|
1719
|
+
var IfShape = Schema16.extend(ComputeShape, Schema16.Struct({
|
|
1720
|
+
type: Schema16.Literal("if")
|
|
1639
1721
|
}));
|
|
1640
|
-
var IfElseShape =
|
|
1641
|
-
type:
|
|
1722
|
+
var IfElseShape = Schema16.extend(ComputeShape, Schema16.Struct({
|
|
1723
|
+
type: Schema16.Literal("if-else")
|
|
1642
1724
|
}));
|
|
1643
1725
|
var IfComponent = ({ shape, ...props }) => {
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
outputSchema: IfOutput
|
|
1650
|
-
});
|
|
1651
|
-
} finally {
|
|
1652
|
-
_effect.f();
|
|
1653
|
-
}
|
|
1726
|
+
return /* @__PURE__ */ React17.createElement(FunctionBody, {
|
|
1727
|
+
shape,
|
|
1728
|
+
inputSchema: IfInput,
|
|
1729
|
+
outputSchema: IfOutput
|
|
1730
|
+
});
|
|
1654
1731
|
};
|
|
1655
1732
|
var IfElseComponent = ({ shape, ...props }) => {
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
outputSchema: IfElseOutput
|
|
1662
|
-
});
|
|
1663
|
-
} finally {
|
|
1664
|
-
_effect.f();
|
|
1665
|
-
}
|
|
1733
|
+
return /* @__PURE__ */ React17.createElement(FunctionBody, {
|
|
1734
|
+
shape,
|
|
1735
|
+
inputSchema: IfElseInput,
|
|
1736
|
+
outputSchema: IfElseOutput
|
|
1737
|
+
});
|
|
1666
1738
|
};
|
|
1667
1739
|
var createIf = (props) => createShape({
|
|
1668
1740
|
type: "if",
|
|
@@ -1676,7 +1748,7 @@ var ifShape = {
|
|
|
1676
1748
|
type: "if",
|
|
1677
1749
|
name: "IF",
|
|
1678
1750
|
icon: "ph--arrows-split--regular",
|
|
1679
|
-
component: (props) => /* @__PURE__ */
|
|
1751
|
+
component: (props) => /* @__PURE__ */ React17.createElement(IfComponent, props),
|
|
1680
1752
|
createShape: createIf,
|
|
1681
1753
|
getAnchors: (shape) => createFunctionAnchors(shape, IfInput, IfOutput)
|
|
1682
1754
|
};
|
|
@@ -1692,96 +1764,21 @@ var ifElseShape = {
|
|
|
1692
1764
|
type: "if-else",
|
|
1693
1765
|
name: "IF/ELSE",
|
|
1694
1766
|
icon: "ph--arrows-merge--regular",
|
|
1695
|
-
component: (props) => /* @__PURE__ */
|
|
1767
|
+
component: (props) => /* @__PURE__ */ React17.createElement(IfElseComponent, props),
|
|
1696
1768
|
createShape: createIfElse,
|
|
1697
1769
|
getAnchors: (shape) => createFunctionAnchors(shape, IfElseInput, IfElseOutput)
|
|
1698
1770
|
};
|
|
1699
1771
|
|
|
1700
|
-
// src/shapes/Queue.tsx
|
|
1701
|
-
import { useSignals as _useSignals15 } from "@preact-signals/safe-react/tracking";
|
|
1702
|
-
import { Schema as Schema15 } from "effect";
|
|
1703
|
-
import React16, { Fragment } from "react";
|
|
1704
|
-
import { DEFAULT_OUTPUT as DEFAULT_OUTPUT4, QueueInput, QueueOutput } from "@dxos/conductor";
|
|
1705
|
-
import { mx as mx3 } from "@dxos/react-ui-theme";
|
|
1706
|
-
var QueueShape = Schema15.extend(ComputeShape, Schema15.Struct({
|
|
1707
|
-
type: Schema15.Literal("queue")
|
|
1708
|
-
}));
|
|
1709
|
-
var createQueue = (props) => createShape({
|
|
1710
|
-
type: "queue",
|
|
1711
|
-
size: {
|
|
1712
|
-
width: 256,
|
|
1713
|
-
height: 512
|
|
1714
|
-
},
|
|
1715
|
-
...props
|
|
1716
|
-
});
|
|
1717
|
-
var QueueComponent = ({ shape }) => {
|
|
1718
|
-
var _effect = _useSignals15();
|
|
1719
|
-
try {
|
|
1720
|
-
const { runtime } = useComputeNodeState(shape);
|
|
1721
|
-
const items = runtime.outputs[DEFAULT_OUTPUT4]?.type === "executed" ? runtime.outputs[DEFAULT_OUTPUT4].value : [];
|
|
1722
|
-
const handleAction = (action) => {
|
|
1723
|
-
if (action === "run") {
|
|
1724
|
-
runtime.evalNode();
|
|
1725
|
-
}
|
|
1726
|
-
};
|
|
1727
|
-
return /* @__PURE__ */ React16.createElement(Box, {
|
|
1728
|
-
shape,
|
|
1729
|
-
status: `${items.length} items`,
|
|
1730
|
-
onAction: handleAction
|
|
1731
|
-
}, /* @__PURE__ */ React16.createElement("div", {
|
|
1732
|
-
className: "flex flex-col w-full overflow-y-scroll divide-y divide-separator"
|
|
1733
|
-
}, [
|
|
1734
|
-
...items
|
|
1735
|
-
].map((item, i) => /* @__PURE__ */ React16.createElement(QueueItem, {
|
|
1736
|
-
key: i,
|
|
1737
|
-
classNames: "p-1 px-2",
|
|
1738
|
-
item
|
|
1739
|
-
}))));
|
|
1740
|
-
} finally {
|
|
1741
|
-
_effect.f();
|
|
1742
|
-
}
|
|
1743
|
-
};
|
|
1744
|
-
var QueueItem = ({ classNames, item }) => {
|
|
1745
|
-
var _effect = _useSignals15();
|
|
1746
|
-
try {
|
|
1747
|
-
if (typeof item !== "object") {
|
|
1748
|
-
return /* @__PURE__ */ React16.createElement("div", {
|
|
1749
|
-
className: mx3(classNames, "whitespace-pre-wrap")
|
|
1750
|
-
}, item);
|
|
1751
|
-
}
|
|
1752
|
-
return /* @__PURE__ */ React16.createElement("div", {
|
|
1753
|
-
className: mx3("grid grid-cols-[80px,1fr]", classNames)
|
|
1754
|
-
}, Object.entries(item).map(([key, value]) => /* @__PURE__ */ React16.createElement(Fragment, {
|
|
1755
|
-
key
|
|
1756
|
-
}, /* @__PURE__ */ React16.createElement("div", {
|
|
1757
|
-
className: "p-1 text-xs text-subdued"
|
|
1758
|
-
}, key), /* @__PURE__ */ React16.createElement("div", null, typeof value === "string" ? value : JSON.stringify(value)))));
|
|
1759
|
-
} finally {
|
|
1760
|
-
_effect.f();
|
|
1761
|
-
}
|
|
1762
|
-
};
|
|
1763
|
-
var queueShape = {
|
|
1764
|
-
type: "queue",
|
|
1765
|
-
name: "Queue",
|
|
1766
|
-
icon: "ph--queue--regular",
|
|
1767
|
-
component: QueueComponent,
|
|
1768
|
-
createShape: createQueue,
|
|
1769
|
-
getAnchors: (shape) => createFunctionAnchors(shape, QueueInput, QueueOutput),
|
|
1770
|
-
resizable: true
|
|
1771
|
-
};
|
|
1772
|
-
|
|
1773
1772
|
// src/shapes/RNG.tsx
|
|
1774
|
-
import
|
|
1775
|
-
import {
|
|
1776
|
-
import React17, { useEffect as useEffect5, useState as useState7 } from "react";
|
|
1773
|
+
import * as Schema17 from "effect/Schema";
|
|
1774
|
+
import React18, { useEffect as useEffect5, useState as useState8 } from "react";
|
|
1777
1775
|
import { DEFAULT_OUTPUT as DEFAULT_OUTPUT5 } from "@dxos/conductor";
|
|
1778
|
-
import { Icon as
|
|
1776
|
+
import { Icon as Icon5 } from "@dxos/react-ui";
|
|
1779
1777
|
import { createAnchorMap as createAnchorMap7 } from "@dxos/react-ui-canvas-editor";
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
max: Schema16.optional(Schema16.Number)
|
|
1778
|
+
var RandomShape = Schema17.extend(ComputeShape, Schema17.Struct({
|
|
1779
|
+
type: Schema17.Literal("rng"),
|
|
1780
|
+
min: Schema17.optional(Schema17.Number),
|
|
1781
|
+
max: Schema17.optional(Schema17.Number)
|
|
1785
1782
|
}));
|
|
1786
1783
|
var createRandom = (props) => createShape({
|
|
1787
1784
|
type: "rng",
|
|
@@ -1801,42 +1798,37 @@ var icons = [
|
|
|
1801
1798
|
];
|
|
1802
1799
|
var pickIcon = () => icons[Math.floor(Math.random() * icons.length)];
|
|
1803
1800
|
var RandomComponent = ({ shape }) => {
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
clearTimeout(t1);
|
|
1819
|
-
clearTimeout(t2);
|
|
1820
|
-
};
|
|
1821
|
-
}, [
|
|
1822
|
-
spin
|
|
1823
|
-
]);
|
|
1824
|
-
const handleClick = (ev) => {
|
|
1825
|
-
ev.stopPropagation();
|
|
1826
|
-
runtime.setOutput(DEFAULT_OUTPUT5, Math.random());
|
|
1827
|
-
setSpin(true);
|
|
1801
|
+
const { runtime } = useComputeNodeState(shape);
|
|
1802
|
+
const [spin, setSpin] = useState8(false);
|
|
1803
|
+
const [icon, setIcon] = useState8(pickIcon());
|
|
1804
|
+
useEffect5(() => {
|
|
1805
|
+
if (!spin) {
|
|
1806
|
+
return;
|
|
1807
|
+
}
|
|
1808
|
+
const i = setInterval(() => setIcon(pickIcon()), 250);
|
|
1809
|
+
const t1 = setTimeout(() => clearInterval(i), 900);
|
|
1810
|
+
const t2 = setTimeout(() => setSpin(false), 1100);
|
|
1811
|
+
return () => {
|
|
1812
|
+
clearInterval(i);
|
|
1813
|
+
clearTimeout(t1);
|
|
1814
|
+
clearTimeout(t2);
|
|
1828
1815
|
};
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
}
|
|
1816
|
+
}, [
|
|
1817
|
+
spin
|
|
1818
|
+
]);
|
|
1819
|
+
const handleClick = (ev) => {
|
|
1820
|
+
ev.stopPropagation();
|
|
1821
|
+
runtime.setOutput(DEFAULT_OUTPUT5, Math.random());
|
|
1822
|
+
setSpin(true);
|
|
1823
|
+
};
|
|
1824
|
+
return /* @__PURE__ */ React18.createElement("div", {
|
|
1825
|
+
className: "flex grow items-center justify-center"
|
|
1826
|
+
}, /* @__PURE__ */ React18.createElement(Icon5, {
|
|
1827
|
+
icon,
|
|
1828
|
+
classNames: spin && "animate-[spin_1s]",
|
|
1829
|
+
size: 10,
|
|
1830
|
+
onClick: handleClick
|
|
1831
|
+
}));
|
|
1840
1832
|
};
|
|
1841
1833
|
var randomShape = {
|
|
1842
1834
|
type: "rng",
|
|
@@ -1853,14 +1845,13 @@ var randomShape = {
|
|
|
1853
1845
|
};
|
|
1854
1846
|
|
|
1855
1847
|
// src/shapes/Scope.tsx
|
|
1856
|
-
import
|
|
1857
|
-
import
|
|
1858
|
-
import React18 from "react";
|
|
1848
|
+
import * as Schema18 from "effect/Schema";
|
|
1849
|
+
import React19 from "react";
|
|
1859
1850
|
import { DEFAULT_INPUT as DEFAULT_INPUT5 } from "@dxos/conductor";
|
|
1860
1851
|
import { createAnchorMap as createAnchorMap8 } from "@dxos/react-ui-canvas-editor";
|
|
1861
|
-
import {
|
|
1862
|
-
var ScopeShape =
|
|
1863
|
-
type:
|
|
1852
|
+
import { Chaos, shaderPresets, useAudioStream } from "@dxos/react-ui-sfx";
|
|
1853
|
+
var ScopeShape = Schema18.extend(ComputeShape, Schema18.Struct({
|
|
1854
|
+
type: Schema18.Literal("scope")
|
|
1864
1855
|
}));
|
|
1865
1856
|
var createScope = (props) => createShape({
|
|
1866
1857
|
type: "scope",
|
|
@@ -1872,25 +1863,20 @@ var createScope = (props) => createShape({
|
|
|
1872
1863
|
...props
|
|
1873
1864
|
});
|
|
1874
1865
|
var ScopeComponent = ({ shape }) => {
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
}
|
|
1890
|
-
}));
|
|
1891
|
-
} finally {
|
|
1892
|
-
_effect.f();
|
|
1893
|
-
}
|
|
1866
|
+
const { runtime } = useComputeNodeState(shape);
|
|
1867
|
+
const input = runtime.inputs[DEFAULT_INPUT5];
|
|
1868
|
+
const active = input?.type === "executed" ? input.value : false;
|
|
1869
|
+
const { getAverage } = useAudioStream(active);
|
|
1870
|
+
return /* @__PURE__ */ React19.createElement("div", {
|
|
1871
|
+
className: "flex w-full justify-center items-center bg-black"
|
|
1872
|
+
}, /* @__PURE__ */ React19.createElement(Chaos, {
|
|
1873
|
+
active,
|
|
1874
|
+
getValue: getAverage,
|
|
1875
|
+
options: {
|
|
1876
|
+
...shaderPresets.heptapod,
|
|
1877
|
+
zoom: 1.2
|
|
1878
|
+
}
|
|
1879
|
+
}));
|
|
1894
1880
|
};
|
|
1895
1881
|
var scopeShape = {
|
|
1896
1882
|
type: "scope",
|
|
@@ -1907,14 +1893,15 @@ var scopeShape = {
|
|
|
1907
1893
|
};
|
|
1908
1894
|
|
|
1909
1895
|
// src/shapes/Surface.tsx
|
|
1910
|
-
import
|
|
1911
|
-
import
|
|
1912
|
-
import
|
|
1913
|
-
import {
|
|
1896
|
+
import * as Schema19 from "effect/Schema";
|
|
1897
|
+
import React20 from "react";
|
|
1898
|
+
import { Surface } from "@dxos/app-framework/ui";
|
|
1899
|
+
import { AppSurface } from "@dxos/app-toolkit/ui";
|
|
1914
1900
|
import { DEFAULT_INPUT as DEFAULT_INPUT6 } from "@dxos/conductor";
|
|
1901
|
+
import { Card } from "@dxos/react-ui";
|
|
1915
1902
|
import { createAnchorMap as createAnchorMap9 } from "@dxos/react-ui-canvas-editor";
|
|
1916
|
-
var SurfaceShape =
|
|
1917
|
-
type:
|
|
1903
|
+
var SurfaceShape = Schema19.extend(ComputeShape, Schema19.Struct({
|
|
1904
|
+
type: Schema19.Literal("surface")
|
|
1918
1905
|
}));
|
|
1919
1906
|
var createSurface = (props) => createShape({
|
|
1920
1907
|
type: "surface",
|
|
@@ -1925,29 +1912,24 @@ var createSurface = (props) => createShape({
|
|
|
1925
1912
|
...props
|
|
1926
1913
|
});
|
|
1927
1914
|
var SurfaceComponent = ({ shape }) => {
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
limit: 1
|
|
1947
|
-
}));
|
|
1948
|
-
} finally {
|
|
1949
|
-
_effect.f();
|
|
1950
|
-
}
|
|
1915
|
+
const { runtime } = useComputeNodeState(shape);
|
|
1916
|
+
const input = runtime.inputs[DEFAULT_INPUT6];
|
|
1917
|
+
const value = input?.type === "executed" ? input.value : null;
|
|
1918
|
+
const handleAction = (action) => {
|
|
1919
|
+
if (action === "run") {
|
|
1920
|
+
runtime.evalNode();
|
|
1921
|
+
}
|
|
1922
|
+
};
|
|
1923
|
+
return /* @__PURE__ */ React20.createElement(Box, {
|
|
1924
|
+
shape,
|
|
1925
|
+
onAction: handleAction
|
|
1926
|
+
}, /* @__PURE__ */ React20.createElement(Card.Root, null, value !== null && /* @__PURE__ */ React20.createElement(Surface.Surface, {
|
|
1927
|
+
type: AppSurface.Card,
|
|
1928
|
+
data: {
|
|
1929
|
+
subject: value
|
|
1930
|
+
},
|
|
1931
|
+
limit: 1
|
|
1932
|
+
})));
|
|
1951
1933
|
};
|
|
1952
1934
|
var surfaceShape = {
|
|
1953
1935
|
type: "surface",
|
|
@@ -1965,14 +1947,13 @@ var surfaceShape = {
|
|
|
1965
1947
|
};
|
|
1966
1948
|
|
|
1967
1949
|
// src/shapes/Switch.tsx
|
|
1968
|
-
import
|
|
1969
|
-
import {
|
|
1970
|
-
import React20, { useEffect as useEffect6, useState as useState8 } from "react";
|
|
1950
|
+
import * as Schema20 from "effect/Schema";
|
|
1951
|
+
import React21, { useEffect as useEffect6, useState as useState9 } from "react";
|
|
1971
1952
|
import { DEFAULT_OUTPUT as DEFAULT_OUTPUT6 } from "@dxos/conductor";
|
|
1972
1953
|
import { Input as Input2 } from "@dxos/react-ui";
|
|
1973
1954
|
import { createAnchorMap as createAnchorMap10 } from "@dxos/react-ui-canvas-editor";
|
|
1974
|
-
var SwitchShape =
|
|
1975
|
-
type:
|
|
1955
|
+
var SwitchShape = Schema20.extend(ComputeShape, Schema20.Struct({
|
|
1956
|
+
type: Schema20.Literal("switch")
|
|
1976
1957
|
}));
|
|
1977
1958
|
var createSwitch = (props) => createShape({
|
|
1978
1959
|
type: "switch",
|
|
@@ -1983,25 +1964,20 @@ var createSwitch = (props) => createShape({
|
|
|
1983
1964
|
...props
|
|
1984
1965
|
});
|
|
1985
1966
|
var SwitchComponent = ({ shape }) => {
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
onCheckedChange: (value2) => setValue(value2)
|
|
2001
|
-
})));
|
|
2002
|
-
} finally {
|
|
2003
|
-
_effect.f();
|
|
2004
|
-
}
|
|
1967
|
+
const { runtime } = useComputeNodeState(shape);
|
|
1968
|
+
const [value, setValue] = useState9(false);
|
|
1969
|
+
useEffect6(() => {
|
|
1970
|
+
runtime.setOutput(DEFAULT_OUTPUT6, value);
|
|
1971
|
+
}, [
|
|
1972
|
+
value
|
|
1973
|
+
]);
|
|
1974
|
+
return /* @__PURE__ */ React21.createElement("div", {
|
|
1975
|
+
className: "flex w-full justify-center items-center",
|
|
1976
|
+
onClick: (ev) => ev.stopPropagation()
|
|
1977
|
+
}, /* @__PURE__ */ React21.createElement(Input2.Root, null, /* @__PURE__ */ React21.createElement(Input2.Switch, {
|
|
1978
|
+
checked: value,
|
|
1979
|
+
onCheckedChange: (value2) => setValue(value2)
|
|
1980
|
+
})));
|
|
2005
1981
|
};
|
|
2006
1982
|
var switchShape = {
|
|
2007
1983
|
type: "switch",
|
|
@@ -2018,15 +1994,14 @@ var switchShape = {
|
|
|
2018
1994
|
};
|
|
2019
1995
|
|
|
2020
1996
|
// src/shapes/Table.tsx
|
|
2021
|
-
import
|
|
2022
|
-
import
|
|
2023
|
-
import React21 from "react";
|
|
2024
|
-
import { Message } from "@dxos/ai";
|
|
1997
|
+
import * as Schema21 from "effect/Schema";
|
|
1998
|
+
import React22 from "react";
|
|
2025
1999
|
import { createInputSchema, createOutputSchema } from "@dxos/conductor";
|
|
2026
|
-
|
|
2027
|
-
var
|
|
2028
|
-
var
|
|
2029
|
-
|
|
2000
|
+
import { Message } from "@dxos/types";
|
|
2001
|
+
var InputSchema = createInputSchema(Message.Message);
|
|
2002
|
+
var OutputSchema = createOutputSchema(Schema21.mutable(Schema21.Array(Message.Message)));
|
|
2003
|
+
var TableShape = Schema21.extend(ComputeShape, Schema21.Struct({
|
|
2004
|
+
type: Schema21.Literal("table")
|
|
2030
2005
|
}));
|
|
2031
2006
|
var createTable = (props) => createShape({
|
|
2032
2007
|
type: "table",
|
|
@@ -2037,14 +2012,9 @@ var createTable = (props) => createShape({
|
|
|
2037
2012
|
...props
|
|
2038
2013
|
});
|
|
2039
2014
|
var TableComponent = ({ shape }) => {
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
shape
|
|
2044
|
-
});
|
|
2045
|
-
} finally {
|
|
2046
|
-
_effect.f();
|
|
2047
|
-
}
|
|
2015
|
+
return /* @__PURE__ */ React22.createElement(Box, {
|
|
2016
|
+
shape
|
|
2017
|
+
});
|
|
2048
2018
|
};
|
|
2049
2019
|
var tableShape = {
|
|
2050
2020
|
type: "table",
|
|
@@ -2057,62 +2027,48 @@ var tableShape = {
|
|
|
2057
2027
|
};
|
|
2058
2028
|
|
|
2059
2029
|
// src/shapes/Template.tsx
|
|
2060
|
-
import
|
|
2061
|
-
import {
|
|
2062
|
-
import
|
|
2063
|
-
import {
|
|
2064
|
-
import { toJsonSchema as toJsonSchema2 } from "@dxos/echo-schema";
|
|
2030
|
+
import * as Schema22 from "effect/Schema";
|
|
2031
|
+
import React23, { useRef as useRef5 } from "react";
|
|
2032
|
+
import { ComputeValueType as ComputeValueType3, TemplateOutput, VoidInput as VoidInput2, getTemplateInputSchema as getTemplateInputSchema2 } from "@dxos/conductor";
|
|
2033
|
+
import { toJsonSchema } from "@dxos/echo/internal";
|
|
2065
2034
|
import { invariant as invariant5 } from "@dxos/invariant";
|
|
2066
2035
|
import { TextBox as TextBox4 } from "@dxos/react-ui-canvas-editor";
|
|
2067
|
-
var
|
|
2068
|
-
var TemplateShape =
|
|
2069
|
-
type:
|
|
2070
|
-
valueType:
|
|
2036
|
+
var __dxlog_file7 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/shapes/Template.tsx";
|
|
2037
|
+
var TemplateShape = Schema22.extend(ComputeShape, Schema22.Struct({
|
|
2038
|
+
type: Schema22.Literal("template"),
|
|
2039
|
+
valueType: Schema22.optional(ComputeValueType3)
|
|
2071
2040
|
}));
|
|
2072
2041
|
var TextInputComponent3 = ({ shape, title, ...props }) => {
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
const
|
|
2077
|
-
|
|
2078
|
-
const
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
};
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
onValueChange: handleTypeChange
|
|
2104
|
-
})
|
|
2105
|
-
}, /* @__PURE__ */ React22.createElement(TextBox4, {
|
|
2106
|
-
...props,
|
|
2107
|
-
ref: inputRef,
|
|
2108
|
-
value: node.value,
|
|
2109
|
-
language: node.valueType === "object" ? "json" : void 0,
|
|
2110
|
-
onBlur: handleEnter,
|
|
2111
|
-
onEnter: handleEnter
|
|
2112
|
-
}));
|
|
2113
|
-
} finally {
|
|
2114
|
-
_effect.f();
|
|
2115
|
-
}
|
|
2042
|
+
const { node } = useComputeNodeState(shape);
|
|
2043
|
+
const inputRef = useRef5(null);
|
|
2044
|
+
const handleEnter = (text) => {
|
|
2045
|
+
const value = text.trim();
|
|
2046
|
+
if (value.length) {
|
|
2047
|
+
const schema = getTemplateInputSchema2(node);
|
|
2048
|
+
node.value = value;
|
|
2049
|
+
node.inputSchema = toJsonSchema(schema);
|
|
2050
|
+
}
|
|
2051
|
+
};
|
|
2052
|
+
const handleTypeChange = (newType) => {
|
|
2053
|
+
invariant5(Schema22.is(ComputeValueType3)(newType), "Invalid type", { "~LogMeta": "~LogMeta", F: __dxlog_file7, L: 32, S: void 0, A: ["Schema.is(ComputeValueType)(newType)", "'Invalid type'"] });
|
|
2054
|
+
node.valueType = newType;
|
|
2055
|
+
node.inputSchema = toJsonSchema(getTemplateInputSchema2(node));
|
|
2056
|
+
};
|
|
2057
|
+
return /* @__PURE__ */ React23.createElement(Box, {
|
|
2058
|
+
shape,
|
|
2059
|
+
title: "Template",
|
|
2060
|
+
status: /* @__PURE__ */ React23.createElement(TypeSelect, {
|
|
2061
|
+
value: node.valueType ?? "string",
|
|
2062
|
+
onValueChange: handleTypeChange
|
|
2063
|
+
})
|
|
2064
|
+
}, /* @__PURE__ */ React23.createElement(TextBox4, {
|
|
2065
|
+
...props,
|
|
2066
|
+
ref: inputRef,
|
|
2067
|
+
value: node.value,
|
|
2068
|
+
language: node.valueType === "object" ? "json" : void 0,
|
|
2069
|
+
onBlur: handleEnter,
|
|
2070
|
+
onEnter: handleEnter
|
|
2071
|
+
}));
|
|
2116
2072
|
};
|
|
2117
2073
|
var createTemplate = (props) => createShape({
|
|
2118
2074
|
type: "template",
|
|
@@ -2126,7 +2082,7 @@ var templateShape = {
|
|
|
2126
2082
|
type: "template",
|
|
2127
2083
|
name: "Template",
|
|
2128
2084
|
icon: "ph--article--regular",
|
|
2129
|
-
component: (props) => /* @__PURE__ */
|
|
2085
|
+
component: (props) => /* @__PURE__ */ React23.createElement(TextInputComponent3, {
|
|
2130
2086
|
...props,
|
|
2131
2087
|
placeholder: "Prompt"
|
|
2132
2088
|
}),
|
|
@@ -2136,14 +2092,13 @@ var templateShape = {
|
|
|
2136
2092
|
};
|
|
2137
2093
|
|
|
2138
2094
|
// src/shapes/Text.tsx
|
|
2139
|
-
import
|
|
2140
|
-
import
|
|
2141
|
-
import React23 from "react";
|
|
2095
|
+
import * as Schema23 from "effect/Schema";
|
|
2096
|
+
import React24 from "react";
|
|
2142
2097
|
import { DEFAULT_INPUT as DEFAULT_INPUT7 } from "@dxos/conductor";
|
|
2143
2098
|
import { TextBox as TextBox5 } from "@dxos/react-ui-canvas-editor";
|
|
2144
2099
|
import { createAnchorMap as createAnchorMap11 } from "@dxos/react-ui-canvas-editor";
|
|
2145
|
-
var TextShape =
|
|
2146
|
-
type:
|
|
2100
|
+
var TextShape = Schema23.extend(ComputeShape, Schema23.Struct({
|
|
2101
|
+
type: Schema23.Literal("text")
|
|
2147
2102
|
}));
|
|
2148
2103
|
var createText = (props) => createShape({
|
|
2149
2104
|
type: "text",
|
|
@@ -2154,25 +2109,20 @@ var createText = (props) => createShape({
|
|
|
2154
2109
|
...props
|
|
2155
2110
|
});
|
|
2156
2111
|
var TextComponent = ({ shape }) => {
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
value
|
|
2172
|
-
}));
|
|
2173
|
-
} finally {
|
|
2174
|
-
_effect.f();
|
|
2175
|
-
}
|
|
2112
|
+
const { runtime } = useComputeNodeState(shape);
|
|
2113
|
+
const input = runtime.inputs[DEFAULT_INPUT7];
|
|
2114
|
+
const value = input?.type === "executed" ? input.value : 0;
|
|
2115
|
+
const handleAction = (action) => {
|
|
2116
|
+
if (action === "run") {
|
|
2117
|
+
runtime.evalNode();
|
|
2118
|
+
}
|
|
2119
|
+
};
|
|
2120
|
+
return /* @__PURE__ */ React24.createElement(Box, {
|
|
2121
|
+
shape,
|
|
2122
|
+
onAction: handleAction
|
|
2123
|
+
}, /* @__PURE__ */ React24.createElement(TextBox5, {
|
|
2124
|
+
value
|
|
2125
|
+
}));
|
|
2176
2126
|
};
|
|
2177
2127
|
var textShape = {
|
|
2178
2128
|
type: "text",
|
|
@@ -2190,16 +2140,16 @@ var textShape = {
|
|
|
2190
2140
|
};
|
|
2191
2141
|
|
|
2192
2142
|
// src/shapes/Thread.tsx
|
|
2193
|
-
import
|
|
2194
|
-
import {
|
|
2195
|
-
import React24, { useEffect as useEffect7, useRef as useRef6 } from "react";
|
|
2196
|
-
import { Message as Message2 } from "@dxos/ai";
|
|
2143
|
+
import * as Schema24 from "effect/Schema";
|
|
2144
|
+
import React25, { useEffect as useEffect7, useRef as useRef6 } from "react";
|
|
2197
2145
|
import { createInputSchema as createInputSchema2, createOutputSchema as createOutputSchema2 } from "@dxos/conductor";
|
|
2198
|
-
import {
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
var
|
|
2202
|
-
|
|
2146
|
+
import { ScrollArea as ScrollArea3 } from "@dxos/react-ui";
|
|
2147
|
+
import { Message as Message2 } from "@dxos/types";
|
|
2148
|
+
import { mx as mx3 } from "@dxos/ui-theme";
|
|
2149
|
+
var InputSchema2 = createInputSchema2(Message2.Message);
|
|
2150
|
+
var OutputSchema2 = createOutputSchema2(Schema24.mutable(Schema24.Array(Message2.Message)));
|
|
2151
|
+
var ThreadShape = Schema24.extend(ComputeShape, Schema24.Struct({
|
|
2152
|
+
type: Schema24.Literal("thread")
|
|
2203
2153
|
}));
|
|
2204
2154
|
var createThread = (props) => createShape({
|
|
2205
2155
|
type: "thread",
|
|
@@ -2210,49 +2160,42 @@ var createThread = (props) => createShape({
|
|
|
2210
2160
|
...props
|
|
2211
2161
|
});
|
|
2212
2162
|
var ThreadComponent = ({ shape }) => {
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
} finally {
|
|
2236
|
-
_effect.f();
|
|
2237
|
-
}
|
|
2163
|
+
const items = [];
|
|
2164
|
+
const scrollRef = useRef6(null);
|
|
2165
|
+
useEffect7(() => {
|
|
2166
|
+
if (scrollRef.current) {
|
|
2167
|
+
scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
|
|
2168
|
+
}
|
|
2169
|
+
}, [
|
|
2170
|
+
items
|
|
2171
|
+
]);
|
|
2172
|
+
return /* @__PURE__ */ React25.createElement(Box, {
|
|
2173
|
+
shape
|
|
2174
|
+
}, /* @__PURE__ */ React25.createElement(ScrollArea3.Root, {
|
|
2175
|
+
orientation: "vertical"
|
|
2176
|
+
}, /* @__PURE__ */ React25.createElement(ScrollArea3.Viewport, {
|
|
2177
|
+
classNames: "gap-2 p-2",
|
|
2178
|
+
ref: scrollRef
|
|
2179
|
+
}, [
|
|
2180
|
+
...items
|
|
2181
|
+
].map((item, i) => /* @__PURE__ */ React25.createElement(ThreadItem, {
|
|
2182
|
+
key: i,
|
|
2183
|
+
item
|
|
2184
|
+
})))));
|
|
2238
2185
|
};
|
|
2239
2186
|
var ThreadItem = ({ classNames, item }) => {
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
}, item);
|
|
2246
|
-
}
|
|
2247
|
-
const { role, message } = item;
|
|
2248
|
-
return /* @__PURE__ */ React24.createElement("div", {
|
|
2249
|
-
className: mx5("flex", classNames, role === "user" && "justify-end")
|
|
2250
|
-
}, /* @__PURE__ */ React24.createElement("div", {
|
|
2251
|
-
className: mx5("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")
|
|
2252
|
-
}, message));
|
|
2253
|
-
} finally {
|
|
2254
|
-
_effect.f();
|
|
2187
|
+
if (typeof item !== "object") {
|
|
2188
|
+
return /* @__PURE__ */ React25.createElement("div", {
|
|
2189
|
+
role: "none",
|
|
2190
|
+
className: mx3(classNames)
|
|
2191
|
+
}, item);
|
|
2255
2192
|
}
|
|
2193
|
+
const { role, message } = item;
|
|
2194
|
+
return /* @__PURE__ */ React25.createElement("div", {
|
|
2195
|
+
className: mx3("flex", classNames, role === "user" && "justify-end")
|
|
2196
|
+
}, /* @__PURE__ */ React25.createElement("div", {
|
|
2197
|
+
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")
|
|
2198
|
+
}, message));
|
|
2256
2199
|
};
|
|
2257
2200
|
var threadShape = {
|
|
2258
2201
|
type: "thread",
|
|
@@ -2265,12 +2208,11 @@ var threadShape = {
|
|
|
2265
2208
|
};
|
|
2266
2209
|
|
|
2267
2210
|
// src/shapes/TextToImage.tsx
|
|
2268
|
-
import
|
|
2269
|
-
import
|
|
2270
|
-
import React25 from "react";
|
|
2211
|
+
import * as Schema25 from "effect/Schema";
|
|
2212
|
+
import React26 from "react";
|
|
2271
2213
|
import { createAnchorMap as createAnchorMap12 } from "@dxos/react-ui-canvas-editor";
|
|
2272
|
-
var TextToImageShape =
|
|
2273
|
-
type:
|
|
2214
|
+
var TextToImageShape = Schema25.extend(ComputeShape, Schema25.Struct({
|
|
2215
|
+
type: Schema25.Literal("text-to-image")
|
|
2274
2216
|
}));
|
|
2275
2217
|
var createTextToImage = (props) => createShape({
|
|
2276
2218
|
type: "text-to-image",
|
|
@@ -2281,14 +2223,9 @@ var createTextToImage = (props) => createShape({
|
|
|
2281
2223
|
...props
|
|
2282
2224
|
});
|
|
2283
2225
|
var TextToImageComponent = ({ shape }) => {
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
shape
|
|
2288
|
-
});
|
|
2289
|
-
} finally {
|
|
2290
|
-
_effect.f();
|
|
2291
|
-
}
|
|
2226
|
+
return /* @__PURE__ */ React26.createElement(Box, {
|
|
2227
|
+
shape
|
|
2228
|
+
});
|
|
2292
2229
|
};
|
|
2293
2230
|
var textToImageShape = {
|
|
2294
2231
|
type: "text-to-image",
|
|
@@ -2305,21 +2242,20 @@ var textToImageShape = {
|
|
|
2305
2242
|
};
|
|
2306
2243
|
|
|
2307
2244
|
// src/shapes/Trigger.tsx
|
|
2308
|
-
import
|
|
2309
|
-
import {
|
|
2310
|
-
import
|
|
2245
|
+
import * as Schema26 from "effect/Schema";
|
|
2246
|
+
import React27, { useEffect as useEffect8 } from "react";
|
|
2247
|
+
import { Trigger, TriggerEvent } from "@dxos/compute";
|
|
2311
2248
|
import { VoidInput as VoidInput3 } from "@dxos/conductor";
|
|
2312
|
-
import {
|
|
2313
|
-
import { EmailTriggerOutput, FunctionTrigger, QueueTriggerOutput, TriggerKind, SubscriptionTriggerOutput, TimerTriggerOutput, WebhookTriggerOutput } from "@dxos/functions";
|
|
2249
|
+
import { Filter as Filter2, Obj as Obj4, Query, Ref as Ref3 } from "@dxos/echo";
|
|
2314
2250
|
import { DXN, SpaceId } from "@dxos/keys";
|
|
2315
|
-
import {
|
|
2251
|
+
import { useSpaces } from "@dxos/react-client/echo";
|
|
2316
2252
|
import { Select as Select2 } from "@dxos/react-ui";
|
|
2317
|
-
var TriggerShape =
|
|
2318
|
-
type:
|
|
2319
|
-
functionTrigger:
|
|
2253
|
+
var TriggerShape = Schema26.extend(ComputeShape, Schema26.Struct({
|
|
2254
|
+
type: Schema26.Literal("trigger"),
|
|
2255
|
+
functionTrigger: Schema26.optional(Ref3.Ref(Trigger.Trigger))
|
|
2320
2256
|
}));
|
|
2321
2257
|
var createTrigger = (props) => {
|
|
2322
|
-
const functionTrigger =
|
|
2258
|
+
const functionTrigger = Trigger.make({
|
|
2323
2259
|
enabled: true,
|
|
2324
2260
|
spec: createTriggerSpec(props)
|
|
2325
2261
|
});
|
|
@@ -2328,115 +2264,97 @@ var createTrigger = (props) => {
|
|
|
2328
2264
|
functionTrigger: Ref3.make(functionTrigger),
|
|
2329
2265
|
size: {
|
|
2330
2266
|
width: 192,
|
|
2331
|
-
height: getHeight(
|
|
2267
|
+
height: getHeight(TriggerEvent.EmailEvent)
|
|
2332
2268
|
},
|
|
2333
2269
|
...props
|
|
2334
2270
|
});
|
|
2335
2271
|
};
|
|
2336
2272
|
var TriggerComponent = ({ shape }) => {
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
triggerKind: TriggerKind.Email,
|
|
2273
|
+
const [space] = useSpaces();
|
|
2274
|
+
const functionTrigger = shape.functionTrigger?.target;
|
|
2275
|
+
useEffect8(() => {
|
|
2276
|
+
if (functionTrigger && !functionTrigger.spec) {
|
|
2277
|
+
Obj4.update(functionTrigger, (functionTrigger2) => {
|
|
2278
|
+
functionTrigger2.spec = createTriggerSpec({
|
|
2279
|
+
triggerKind: "email",
|
|
2345
2280
|
spaceId: space?.id
|
|
2346
2281
|
});
|
|
2347
|
-
}
|
|
2348
|
-
}
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
|
|
2282
|
+
});
|
|
2283
|
+
}
|
|
2284
|
+
}, [
|
|
2285
|
+
functionTrigger,
|
|
2286
|
+
functionTrigger?.spec
|
|
2287
|
+
]);
|
|
2288
|
+
useEffect8(() => {
|
|
2289
|
+
shape.size.height = getHeight(getOutputSchema(functionTrigger?.spec?.kind ?? "email"));
|
|
2290
|
+
}, [
|
|
2291
|
+
functionTrigger?.spec?.kind
|
|
2292
|
+
]);
|
|
2293
|
+
const setKind = (kind) => {
|
|
2294
|
+
if (functionTrigger?.spec?.kind !== kind) {
|
|
2295
|
+
Obj4.update(functionTrigger, (obj) => {
|
|
2296
|
+
obj.spec = createTriggerSpec({
|
|
2360
2297
|
triggerKind: kind,
|
|
2361
2298
|
spaceId: space?.id
|
|
2362
2299
|
});
|
|
2363
|
-
}
|
|
2364
|
-
};
|
|
2365
|
-
if (!functionTrigger?.spec) {
|
|
2366
|
-
return;
|
|
2300
|
+
});
|
|
2367
2301
|
}
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
value: functionTrigger.spec?.kind,
|
|
2372
|
-
onValueChange: (kind) => setKind(kind)
|
|
2373
|
-
}),
|
|
2374
|
-
inputSchema: VoidInput3,
|
|
2375
|
-
outputSchema: getOutputSchema(functionTrigger.spec.kind)
|
|
2376
|
-
});
|
|
2377
|
-
} finally {
|
|
2378
|
-
_effect.f();
|
|
2302
|
+
};
|
|
2303
|
+
if (!functionTrigger?.spec) {
|
|
2304
|
+
return;
|
|
2379
2305
|
}
|
|
2306
|
+
return /* @__PURE__ */ React27.createElement(FunctionBody, {
|
|
2307
|
+
shape,
|
|
2308
|
+
status: /* @__PURE__ */ React27.createElement(TriggerKindSelect, {
|
|
2309
|
+
value: functionTrigger.spec?.kind,
|
|
2310
|
+
onValueChange: (kind) => setKind(kind)
|
|
2311
|
+
}),
|
|
2312
|
+
inputSchema: VoidInput3,
|
|
2313
|
+
outputSchema: getOutputSchema(functionTrigger.spec.kind)
|
|
2314
|
+
});
|
|
2380
2315
|
};
|
|
2381
2316
|
var TriggerKindSelect = ({ value, onValueChange }) => {
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
value: kind
|
|
2393
|
-
}, kind))), /* @__PURE__ */ React26.createElement(Select2.ScrollDownButton, null), /* @__PURE__ */ React26.createElement(Select2.Arrow, null))));
|
|
2394
|
-
} finally {
|
|
2395
|
-
_effect.f();
|
|
2396
|
-
}
|
|
2317
|
+
return /* @__PURE__ */ React27.createElement(Select2.Root, {
|
|
2318
|
+
value,
|
|
2319
|
+
onValueChange
|
|
2320
|
+
}, /* @__PURE__ */ React27.createElement(Select2.TriggerButton, {
|
|
2321
|
+
variant: "ghost",
|
|
2322
|
+
classNames: "w-full px-0!"
|
|
2323
|
+
}), /* @__PURE__ */ React27.createElement(Select2.Portal, null, /* @__PURE__ */ React27.createElement(Select2.Content, null, /* @__PURE__ */ React27.createElement(Select2.ScrollUpButton, null), /* @__PURE__ */ React27.createElement(Select2.Viewport, null, Trigger.Kinds.map((kind) => /* @__PURE__ */ React27.createElement(Select2.Option, {
|
|
2324
|
+
key: kind,
|
|
2325
|
+
value: kind
|
|
2326
|
+
}, kind))), /* @__PURE__ */ React27.createElement(Select2.ScrollDownButton, null), /* @__PURE__ */ React27.createElement(Select2.Arrow, null))));
|
|
2397
2327
|
};
|
|
2398
2328
|
var createTriggerSpec = (props) => {
|
|
2399
|
-
const kind = props.triggerKind ??
|
|
2329
|
+
const kind = props.triggerKind ?? "email";
|
|
2400
2330
|
switch (kind) {
|
|
2401
|
-
case
|
|
2402
|
-
return
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
};
|
|
2406
|
-
case TriggerKind.Webhook:
|
|
2407
|
-
return {
|
|
2408
|
-
kind: TriggerKind.Webhook,
|
|
2331
|
+
case "timer":
|
|
2332
|
+
return Trigger.specTimer("*/10 * * * * *");
|
|
2333
|
+
case "webhook":
|
|
2334
|
+
return Trigger.specWebhook({
|
|
2409
2335
|
method: "POST"
|
|
2410
|
-
};
|
|
2411
|
-
case
|
|
2412
|
-
return
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
case TriggerKind.Email:
|
|
2417
|
-
return {
|
|
2418
|
-
kind: TriggerKind.Email
|
|
2419
|
-
};
|
|
2420
|
-
case TriggerKind.Queue: {
|
|
2336
|
+
});
|
|
2337
|
+
case "subscription":
|
|
2338
|
+
return Trigger.specSubscription(Query.select(Filter2.nothing()));
|
|
2339
|
+
case "email":
|
|
2340
|
+
return Trigger.specEmail();
|
|
2341
|
+
case "queue": {
|
|
2421
2342
|
const dxn = new DXN(DXN.kind.QUEUE, [
|
|
2422
2343
|
"data",
|
|
2423
2344
|
props.spaceId ?? SpaceId.random(),
|
|
2424
|
-
|
|
2345
|
+
Obj4.ID.random()
|
|
2425
2346
|
]).toString();
|
|
2426
|
-
return
|
|
2427
|
-
kind: TriggerKind.Queue,
|
|
2428
|
-
queue: dxn
|
|
2429
|
-
};
|
|
2347
|
+
return Trigger.specQueue(dxn);
|
|
2430
2348
|
}
|
|
2431
2349
|
}
|
|
2432
2350
|
};
|
|
2433
2351
|
var getOutputSchema = (kind) => {
|
|
2434
2352
|
const kindToSchema = {
|
|
2435
|
-
[
|
|
2436
|
-
[
|
|
2437
|
-
[
|
|
2438
|
-
[
|
|
2439
|
-
[
|
|
2353
|
+
["email"]: TriggerEvent.EmailEvent,
|
|
2354
|
+
["subscription"]: TriggerEvent.SubscriptionEvent,
|
|
2355
|
+
["timer"]: TriggerEvent.TimerEvent,
|
|
2356
|
+
["webhook"]: TriggerEvent.WebhookEvent,
|
|
2357
|
+
["queue"]: TriggerEvent.QueueEvent
|
|
2440
2358
|
};
|
|
2441
2359
|
return kindToSchema[kind];
|
|
2442
2360
|
};
|
|
@@ -2446,142 +2364,8 @@ var triggerShape = {
|
|
|
2446
2364
|
icon: "ph--lightning--regular",
|
|
2447
2365
|
component: TriggerComponent,
|
|
2448
2366
|
createShape: createTrigger,
|
|
2449
|
-
getAnchors: (shape) => createFunctionAnchors(shape, VoidInput3, getOutputSchema(shape.functionTrigger?.target?.spec?.kind ??
|
|
2450
|
-
};
|
|
2451
|
-
|
|
2452
|
-
// src/shapes/GptRealtime.tsx
|
|
2453
|
-
import { useSignals as _useSignals26 } from "@preact-signals/safe-react/tracking";
|
|
2454
|
-
import { Schema as Schema26 } from "effect";
|
|
2455
|
-
import React27, { useState as useState9 } from "react";
|
|
2456
|
-
import { log as log2 } from "@dxos/log";
|
|
2457
|
-
import { useConfig } from "@dxos/react-client";
|
|
2458
|
-
import { Icon as Icon5 } from "@dxos/react-ui";
|
|
2459
|
-
var __dxlog_file7 = "/__w/dxos/dxos/packages/ui/react-ui-canvas-compute/src/shapes/GptRealtime.tsx";
|
|
2460
|
-
var GptRealtimeShape = Schema26.extend(ComputeShape, Schema26.Struct({
|
|
2461
|
-
type: Schema26.Literal("gpt-realtime")
|
|
2462
|
-
}));
|
|
2463
|
-
var createGptRealtime = (props) => createShape({
|
|
2464
|
-
type: "gpt-realtime",
|
|
2465
|
-
size: {
|
|
2466
|
-
width: 256,
|
|
2467
|
-
height: 256
|
|
2468
|
-
},
|
|
2469
|
-
...props
|
|
2470
|
-
});
|
|
2471
|
-
var GptRealtimeComponent = ({ shape }) => {
|
|
2472
|
-
var _effect = _useSignals26();
|
|
2473
|
-
try {
|
|
2474
|
-
const [isLive, setIsLive] = useState9(false);
|
|
2475
|
-
const [isReady, setIsReady] = useState9(false);
|
|
2476
|
-
const config = useConfig();
|
|
2477
|
-
const start = async () => {
|
|
2478
|
-
setIsLive(true);
|
|
2479
|
-
try {
|
|
2480
|
-
const peerConnection = new RTCPeerConnection();
|
|
2481
|
-
peerConnection.ontrack = (event) => {
|
|
2482
|
-
const audioElement = document.createElement("audio");
|
|
2483
|
-
audioElement.srcObject = event.streams[0];
|
|
2484
|
-
audioElement.autoplay = true;
|
|
2485
|
-
audioElement.controls = false;
|
|
2486
|
-
audioElement.style.display = "none";
|
|
2487
|
-
document.body.appendChild(audioElement);
|
|
2488
|
-
setIsReady(true);
|
|
2489
|
-
};
|
|
2490
|
-
const stream = await navigator.mediaDevices.getUserMedia({
|
|
2491
|
-
audio: true
|
|
2492
|
-
});
|
|
2493
|
-
stream.getTracks().forEach((track) => peerConnection.addTransceiver(track, {
|
|
2494
|
-
direction: "sendrecv"
|
|
2495
|
-
}));
|
|
2496
|
-
const offer = await peerConnection.createOffer();
|
|
2497
|
-
await peerConnection.setLocalDescription(offer);
|
|
2498
|
-
const AiServiceUrl = new URL("/rtc-connect", config.values.runtime?.services?.ai?.server ?? DEFAULT_AI_SERVICE_URL);
|
|
2499
|
-
const response = await fetch(AiServiceUrl, {
|
|
2500
|
-
method: "POST",
|
|
2501
|
-
body: offer.sdp,
|
|
2502
|
-
headers: {
|
|
2503
|
-
"Content-Type": "application/sdp"
|
|
2504
|
-
}
|
|
2505
|
-
});
|
|
2506
|
-
const answer = await response.text();
|
|
2507
|
-
await peerConnection.setRemoteDescription({
|
|
2508
|
-
sdp: answer,
|
|
2509
|
-
type: "answer"
|
|
2510
|
-
});
|
|
2511
|
-
const dataChannel = peerConnection.createDataChannel("response");
|
|
2512
|
-
const configureData = () => {
|
|
2513
|
-
log2.info("Configuring data channel", void 0, {
|
|
2514
|
-
F: __dxlog_file7,
|
|
2515
|
-
L: 87,
|
|
2516
|
-
S: void 0,
|
|
2517
|
-
C: (f, a) => f(...a)
|
|
2518
|
-
});
|
|
2519
|
-
const event = {
|
|
2520
|
-
type: "session.update",
|
|
2521
|
-
session: {
|
|
2522
|
-
modalities: [
|
|
2523
|
-
"text",
|
|
2524
|
-
"audio"
|
|
2525
|
-
],
|
|
2526
|
-
// Provide the tools. Note they match the keys in the `fns` object above
|
|
2527
|
-
tools: []
|
|
2528
|
-
}
|
|
2529
|
-
};
|
|
2530
|
-
dataChannel.send(JSON.stringify(event));
|
|
2531
|
-
};
|
|
2532
|
-
dataChannel.addEventListener("open", (ev) => {
|
|
2533
|
-
log2.info("Opening data channel", {
|
|
2534
|
-
ev
|
|
2535
|
-
}, {
|
|
2536
|
-
F: __dxlog_file7,
|
|
2537
|
-
L: 100,
|
|
2538
|
-
S: void 0,
|
|
2539
|
-
C: (f, a) => f(...a)
|
|
2540
|
-
});
|
|
2541
|
-
configureData();
|
|
2542
|
-
});
|
|
2543
|
-
dataChannel.addEventListener("message", async (ev) => {
|
|
2544
|
-
const msg = JSON.parse(ev.data);
|
|
2545
|
-
if (msg.type === "response.function_call_arguments.done") {
|
|
2546
|
-
}
|
|
2547
|
-
});
|
|
2548
|
-
} catch (error) {
|
|
2549
|
-
log2.error("Error in realtime session:", {
|
|
2550
|
-
error
|
|
2551
|
-
}, {
|
|
2552
|
-
F: __dxlog_file7,
|
|
2553
|
-
L: 140,
|
|
2554
|
-
S: void 0,
|
|
2555
|
-
C: (f, a) => f(...a)
|
|
2556
|
-
});
|
|
2557
|
-
throw error;
|
|
2558
|
-
}
|
|
2559
|
-
};
|
|
2560
|
-
return /* @__PURE__ */ React27.createElement("div", {
|
|
2561
|
-
className: "flex w-full justify-center items-center"
|
|
2562
|
-
}, /* @__PURE__ */ React27.createElement(Icon5, {
|
|
2563
|
-
icon: isReady ? "ph--waveform--regular" : isLive ? "ph--pulse--regular" : "ph--play--regular",
|
|
2564
|
-
size: 16,
|
|
2565
|
-
classNames: !isLive && "cursor-pointer",
|
|
2566
|
-
onClick: start
|
|
2567
|
-
}));
|
|
2568
|
-
} finally {
|
|
2569
|
-
_effect.f();
|
|
2570
|
-
}
|
|
2571
|
-
};
|
|
2572
|
-
var gptRealtimeShape = {
|
|
2573
|
-
type: "gpt-realtime",
|
|
2574
|
-
name: "GPT Realtime",
|
|
2575
|
-
icon: "ph--pulse--regular",
|
|
2576
|
-
component: GptRealtimeComponent,
|
|
2577
|
-
createShape: createGptRealtime,
|
|
2578
|
-
// TODO(dmaretskyi): Can we fetch the schema dynamically?
|
|
2579
|
-
getAnchors: (shape) => createFunctionAnchors(shape, Schema26.Struct({
|
|
2580
|
-
audio: Schema26.Any
|
|
2581
|
-
}), Schema26.Struct({})),
|
|
2582
|
-
resizable: true
|
|
2367
|
+
getAnchors: (shape) => createFunctionAnchors(shape, VoidInput3, getOutputSchema(shape.functionTrigger?.target?.spec?.kind ?? "email"))
|
|
2583
2368
|
};
|
|
2584
|
-
var DEFAULT_AI_SERVICE_URL = "http://localhost:8788";
|
|
2585
2369
|
|
|
2586
2370
|
// src/registry.ts
|
|
2587
2371
|
var computeShapes = [
|
|
@@ -2628,7 +2412,7 @@ var computeShapes = [
|
|
|
2628
2412
|
shapes: [
|
|
2629
2413
|
//
|
|
2630
2414
|
jsonShape,
|
|
2631
|
-
|
|
2415
|
+
feedShape,
|
|
2632
2416
|
threadShape,
|
|
2633
2417
|
textShape,
|
|
2634
2418
|
surfaceShape,
|
|
@@ -2647,9 +2431,10 @@ var computeShapes = [
|
|
|
2647
2431
|
|
|
2648
2432
|
// src/compute-layout.ts
|
|
2649
2433
|
import { DefaultInput, DefaultOutput as DefaultOutput2 } from "@dxos/conductor";
|
|
2650
|
-
import { toEffectSchema } from "@dxos/echo
|
|
2434
|
+
import { toEffectSchema } from "@dxos/echo/internal";
|
|
2651
2435
|
import { ShapeLayout } from "@dxos/react-ui-canvas-editor";
|
|
2652
2436
|
var ComputeShapeLayout = class extends ShapeLayout {
|
|
2437
|
+
_controller;
|
|
2653
2438
|
constructor(_controller, registry2) {
|
|
2654
2439
|
super(registry2), this._controller = _controller;
|
|
2655
2440
|
}
|
|
@@ -2686,6 +2471,9 @@ export {
|
|
|
2686
2471
|
ConstantShape,
|
|
2687
2472
|
DatabaseComponent,
|
|
2688
2473
|
DatabaseShape,
|
|
2474
|
+
FeedComponent,
|
|
2475
|
+
FeedItem,
|
|
2476
|
+
FeedShape,
|
|
2689
2477
|
FunctionBody,
|
|
2690
2478
|
FunctionShape,
|
|
2691
2479
|
GptComponent,
|
|
@@ -2703,9 +2491,6 @@ export {
|
|
|
2703
2491
|
JsonTransformShape,
|
|
2704
2492
|
NotShape,
|
|
2705
2493
|
OrShape,
|
|
2706
|
-
QueueComponent,
|
|
2707
|
-
QueueItem,
|
|
2708
|
-
QueueShape,
|
|
2709
2494
|
RandomComponent,
|
|
2710
2495
|
RandomShape,
|
|
2711
2496
|
ReducerComponent,
|
|
@@ -2748,6 +2533,7 @@ export {
|
|
|
2748
2533
|
createComputeNode,
|
|
2749
2534
|
createConstant,
|
|
2750
2535
|
createDatabase,
|
|
2536
|
+
createFeed,
|
|
2751
2537
|
createFunction,
|
|
2752
2538
|
createFunctionAnchors,
|
|
2753
2539
|
createGpt,
|
|
@@ -2758,7 +2544,6 @@ export {
|
|
|
2758
2544
|
createJsonTransform,
|
|
2759
2545
|
createNot,
|
|
2760
2546
|
createOr,
|
|
2761
|
-
createQueue,
|
|
2762
2547
|
createRandom,
|
|
2763
2548
|
createReducer,
|
|
2764
2549
|
createScope,
|
|
@@ -2772,6 +2557,7 @@ export {
|
|
|
2772
2557
|
createThread,
|
|
2773
2558
|
createTrigger,
|
|
2774
2559
|
databaseShape,
|
|
2560
|
+
feedShape,
|
|
2775
2561
|
footerHeight,
|
|
2776
2562
|
functionShape,
|
|
2777
2563
|
getHeight,
|
|
@@ -2788,7 +2574,6 @@ export {
|
|
|
2788
2574
|
notShape,
|
|
2789
2575
|
orShape,
|
|
2790
2576
|
parseAnchorId,
|
|
2791
|
-
queueShape,
|
|
2792
2577
|
randomShape,
|
|
2793
2578
|
reducerShape,
|
|
2794
2579
|
resolveComputeNode,
|