@dxos/react-ui-canvas-compute 0.8.1-main.ae460ac → 0.8.1-main.ba2dec9
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 +82 -31
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +231 -181
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +82 -31
- 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 +2 -1
- package/dist/types/src/components/DiagnosticOverlay.d.ts.map +1 -1
- package/dist/types/src/compute.stories.d.ts +1 -1
- package/dist/types/src/compute.stories.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +1 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useComputeGraphController.d.ts +10 -0
- package/dist/types/src/hooks/useComputeGraphController.d.ts.map +1 -0
- package/dist/types/src/shapes/Append.d.ts +2 -1
- package/dist/types/src/shapes/Append.d.ts.map +1 -1
- package/dist/types/src/shapes/Array.d.ts +2 -1
- package/dist/types/src/shapes/Array.d.ts.map +1 -1
- package/dist/types/src/shapes/Audio.d.ts +2 -1
- package/dist/types/src/shapes/Audio.d.ts.map +1 -1
- package/dist/types/src/shapes/Beacon.d.ts +2 -1
- package/dist/types/src/shapes/Beacon.d.ts.map +1 -1
- package/dist/types/src/shapes/Chat.d.ts +2 -1
- package/dist/types/src/shapes/Chat.d.ts.map +1 -1
- package/dist/types/src/shapes/Constant.d.ts +2 -1
- package/dist/types/src/shapes/Constant.d.ts.map +1 -1
- package/dist/types/src/shapes/Database.d.ts +2 -1
- package/dist/types/src/shapes/Database.d.ts.map +1 -1
- package/dist/types/src/shapes/Function.d.ts.map +1 -1
- package/dist/types/src/shapes/Gpt.d.ts +2 -1
- package/dist/types/src/shapes/Gpt.d.ts.map +1 -1
- package/dist/types/src/shapes/GptRealtime.d.ts +2 -1
- package/dist/types/src/shapes/GptRealtime.d.ts.map +1 -1
- package/dist/types/src/shapes/Json.d.ts +3 -2
- package/dist/types/src/shapes/Json.d.ts.map +1 -1
- package/dist/types/src/shapes/Logic.d.ts +3 -2
- package/dist/types/src/shapes/Logic.d.ts.map +1 -1
- package/dist/types/src/shapes/Queue.d.ts +3 -2
- package/dist/types/src/shapes/Queue.d.ts.map +1 -1
- package/dist/types/src/shapes/RNG.d.ts +2 -1
- package/dist/types/src/shapes/RNG.d.ts.map +1 -1
- package/dist/types/src/shapes/Scope.d.ts +2 -1
- package/dist/types/src/shapes/Scope.d.ts.map +1 -1
- package/dist/types/src/shapes/Surface.d.ts +2 -1
- package/dist/types/src/shapes/Surface.d.ts.map +1 -1
- package/dist/types/src/shapes/Switch.d.ts +2 -1
- package/dist/types/src/shapes/Switch.d.ts.map +1 -1
- package/dist/types/src/shapes/Table.d.ts +2 -1
- package/dist/types/src/shapes/Table.d.ts.map +1 -1
- package/dist/types/src/shapes/Text.d.ts +2 -1
- package/dist/types/src/shapes/Text.d.ts.map +1 -1
- package/dist/types/src/shapes/TextToImage.d.ts +2 -1
- package/dist/types/src/shapes/TextToImage.d.ts.map +1 -1
- package/dist/types/src/shapes/Thread.d.ts +3 -2
- package/dist/types/src/shapes/Thread.d.ts.map +1 -1
- package/dist/types/src/shapes/Trigger.d.ts +4 -3
- package/dist/types/src/shapes/Trigger.d.ts.map +1 -1
- package/dist/types/src/shapes/common/FunctionBody.d.ts +1 -1
- package/dist/types/src/shapes/common/FunctionBody.d.ts.map +1 -1
- package/dist/types/src/shapes/common/TypeSelect.d.ts +2 -1
- package/dist/types/src/shapes/common/TypeSelect.d.ts.map +1 -1
- package/dist/types/src/testing/circuits.d.ts +19 -3
- package/dist/types/src/testing/circuits.d.ts.map +1 -1
- package/package.json +40 -40
- package/src/compute.stories.tsx +4 -50
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useComputeGraphController.ts +65 -0
- package/src/shapes/Function.tsx +1 -1
- package/src/shapes/Trigger.tsx +1 -1
- package/src/testing/circuits.ts +4 -1
package/src/compute.stories.tsx
CHANGED
|
@@ -10,7 +10,6 @@ import React, { type PropsWithChildren, useEffect, useMemo, useRef, useState } f
|
|
|
10
10
|
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
11
11
|
import { capabilities, createEdgeServices } from '@dxos/artifact-testing';
|
|
12
12
|
import { OllamaClient } from '@dxos/assistant';
|
|
13
|
-
import { type UnsubscribeCallback } from '@dxos/async';
|
|
14
13
|
import { EdgeGpt, type ComputeGraphModel, type ComputeNode, type GraphDiagnostic } from '@dxos/conductor';
|
|
15
14
|
import { withClientProvider } from '@dxos/react-client/testing';
|
|
16
15
|
import { Select, Toolbar } from '@dxos/react-ui';
|
|
@@ -23,7 +22,7 @@ import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
|
23
22
|
import { DiagnosticOverlay } from './components';
|
|
24
23
|
import { ComputeShapeLayout } from './compute-layout';
|
|
25
24
|
import { type ComputeGraphController } from './graph';
|
|
26
|
-
import { ComputeContext, useGraphMonitor } from './hooks';
|
|
25
|
+
import { ComputeContext, useComputeGraphController, useGraphMonitor } from './hooks';
|
|
27
26
|
import { computeShapes } from './registry';
|
|
28
27
|
import { type ComputeShape } from './shapes';
|
|
29
28
|
import {
|
|
@@ -43,35 +42,24 @@ import {
|
|
|
43
42
|
|
|
44
43
|
const sidebarTypes: NonNullable<RenderProps['sidebar']>[] = ['canvas', 'compute', 'controller', 'selected'] as const;
|
|
45
44
|
|
|
46
|
-
// TODO(burdon): Move to async/context?
|
|
47
|
-
const combine = (...cbs: UnsubscribeCallback[]) => {
|
|
48
|
-
return () => {
|
|
49
|
-
for (const cb of cbs) {
|
|
50
|
-
cb();
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
};
|
|
54
|
-
|
|
55
45
|
type RenderProps = EditorRootProps<ComputeShape> &
|
|
56
46
|
PropsWithChildren<{
|
|
57
47
|
init?: boolean;
|
|
58
48
|
sidebar?: 'canvas' | 'compute' | 'controller' | 'selected';
|
|
59
49
|
computeGraph?: ComputeGraphModel;
|
|
60
|
-
controller?: ComputeGraphController;
|
|
50
|
+
controller?: ComputeGraphController | null;
|
|
61
51
|
}>;
|
|
62
52
|
|
|
63
53
|
const Render = ({
|
|
64
54
|
id = 'test',
|
|
65
55
|
children,
|
|
66
56
|
graph,
|
|
67
|
-
controller,
|
|
57
|
+
controller = null,
|
|
68
58
|
init,
|
|
69
59
|
sidebar: _sidebar,
|
|
70
60
|
registry,
|
|
71
61
|
...props
|
|
72
62
|
}: RenderProps) => {
|
|
73
|
-
const [, forceUpdate] = useState({});
|
|
74
|
-
|
|
75
63
|
const editorRef = useRef<EditorController>(null);
|
|
76
64
|
|
|
77
65
|
// Selection.
|
|
@@ -102,41 +90,7 @@ const Render = ({
|
|
|
102
90
|
}, [graph, controller, sidebar, selected]);
|
|
103
91
|
|
|
104
92
|
// Controller.
|
|
105
|
-
|
|
106
|
-
if (!controller || !graph) {
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
void controller.open();
|
|
111
|
-
const off = combine(
|
|
112
|
-
controller.update.on(() => {
|
|
113
|
-
void editorRef.current?.update();
|
|
114
|
-
forceUpdate({});
|
|
115
|
-
}),
|
|
116
|
-
|
|
117
|
-
// TODO(burdon): Every node is called on every update.
|
|
118
|
-
controller.output.on(({ nodeId, property, value }) => {
|
|
119
|
-
if (value.type === 'not-executed') {
|
|
120
|
-
// If the node didn't execute, don't trigger.
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const edge = graph.edges.find((edge) => {
|
|
125
|
-
const source = graph.getNode(edge.source);
|
|
126
|
-
return (source as ComputeShape).node === nodeId && edge.output === property;
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
if (edge) {
|
|
130
|
-
void editorRef.current?.action?.({ type: 'trigger', edges: [edge] });
|
|
131
|
-
}
|
|
132
|
-
}),
|
|
133
|
-
);
|
|
134
|
-
|
|
135
|
-
return () => {
|
|
136
|
-
void controller.close();
|
|
137
|
-
off();
|
|
138
|
-
};
|
|
139
|
-
}, [graph, controller]);
|
|
93
|
+
useComputeGraphController({ controller, graph, editorRef });
|
|
140
94
|
|
|
141
95
|
// Sync monitor.
|
|
142
96
|
const graphMonitor = useGraphMonitor(controller?.graph);
|
package/src/hooks/index.ts
CHANGED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type RefObject, useEffect, useState } from 'react';
|
|
6
|
+
|
|
7
|
+
import { type UnsubscribeCallback } from '@dxos/async';
|
|
8
|
+
import { type EditorRootProps, type EditorController } from '@dxos/react-ui-canvas-editor';
|
|
9
|
+
|
|
10
|
+
import { type ComputeGraphController } from '../graph';
|
|
11
|
+
import { type ComputeShape } from '../shapes';
|
|
12
|
+
|
|
13
|
+
// TODO(burdon): Move to async/context?
|
|
14
|
+
const combine = (...cbs: UnsubscribeCallback[]) => {
|
|
15
|
+
return () => {
|
|
16
|
+
for (const cb of cbs) {
|
|
17
|
+
cb();
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export type UseComputeGraphControllerOptions = Pick<EditorRootProps<ComputeShape>, 'graph'> & {
|
|
23
|
+
controller: ComputeGraphController | null;
|
|
24
|
+
editorRef: RefObject<EditorController>;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export const useComputeGraphController = ({ controller, graph, editorRef }: UseComputeGraphControllerOptions) => {
|
|
28
|
+
const [, forceUpdate] = useState({});
|
|
29
|
+
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
if (!controller || !graph) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
void controller.open();
|
|
36
|
+
const off = combine(
|
|
37
|
+
controller.update.on(() => {
|
|
38
|
+
void editorRef.current?.update();
|
|
39
|
+
forceUpdate({});
|
|
40
|
+
}),
|
|
41
|
+
|
|
42
|
+
// TODO(burdon): Every node is called on every update.
|
|
43
|
+
controller.output.on(({ nodeId, property, value }) => {
|
|
44
|
+
if (value.type === 'not-executed') {
|
|
45
|
+
// If the node didn't execute, don't trigger.
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const edge = graph.edges.find((edge) => {
|
|
50
|
+
const source = graph.getNode(edge.source);
|
|
51
|
+
return (source as ComputeShape).node === nodeId && edge.output === property;
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
if (edge) {
|
|
55
|
+
void editorRef.current?.action?.({ type: 'trigger', edges: [edge] });
|
|
56
|
+
}
|
|
57
|
+
}),
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
return () => {
|
|
61
|
+
void controller.close();
|
|
62
|
+
off();
|
|
63
|
+
};
|
|
64
|
+
}, [graph, controller]);
|
|
65
|
+
};
|
package/src/shapes/Function.tsx
CHANGED
|
@@ -6,7 +6,7 @@ import React, { useCallback, useRef } from 'react';
|
|
|
6
6
|
|
|
7
7
|
import { AnyOutput, FunctionInput } from '@dxos/conductor';
|
|
8
8
|
import { getSnapshot, S } from '@dxos/echo-schema';
|
|
9
|
-
import { FunctionType, ScriptType } from '@dxos/functions';
|
|
9
|
+
import { FunctionType, ScriptType } from '@dxos/functions/types';
|
|
10
10
|
import { useClient } from '@dxos/react-client';
|
|
11
11
|
import { Filter, makeRef, parseId } from '@dxos/react-client/echo';
|
|
12
12
|
import {
|
package/src/shapes/Trigger.tsx
CHANGED
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
TriggerKind,
|
|
23
23
|
type TriggerType,
|
|
24
24
|
type WebhookTrigger,
|
|
25
|
-
} from '@dxos/functions';
|
|
25
|
+
} from '@dxos/functions/types';
|
|
26
26
|
import { DXN, SpaceId } from '@dxos/keys';
|
|
27
27
|
import { create, makeRef, useSpace } from '@dxos/react-client/echo';
|
|
28
28
|
import { Select, type SelectRootProps } from '@dxos/react-ui';
|
package/src/testing/circuits.ts
CHANGED
|
@@ -37,7 +37,10 @@ import {
|
|
|
37
37
|
createTemplate,
|
|
38
38
|
} from '../shapes';
|
|
39
39
|
|
|
40
|
-
export const createComputeGraphController = (
|
|
40
|
+
export const createComputeGraphController = (
|
|
41
|
+
graph = CanvasGraphModel.create<ComputeShape>(),
|
|
42
|
+
services?: Partial<Services>,
|
|
43
|
+
) => {
|
|
41
44
|
const computeGraph = createComputeGraph(graph);
|
|
42
45
|
const controller = new ComputeGraphController(computeGraph);
|
|
43
46
|
controller.setServices(services ?? {});
|