@dxos/react-ui-canvas-compute 0.8.4-main.ae835ea → 0.8.4-main.bc2380dfbc
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/LICENSE +102 -5
- package/dist/lib/browser/index.mjs +916 -1158
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +916 -1158
- 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 +22 -1
- package/dist/types/src/compute.stories.d.ts.map +1 -1
- package/dist/types/src/graph/controller.d.ts +40 -35
- 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.map +1 -1
- package/dist/types/src/hooks/useComputeNodeState.d.ts +4 -5
- 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/shapes/Append.d.ts +1 -1
- package/dist/types/src/shapes/Append.d.ts.map +1 -1
- package/dist/types/src/shapes/Array.d.ts +1 -1
- package/dist/types/src/shapes/Array.d.ts.map +1 -1
- package/dist/types/src/shapes/Audio.d.ts +1 -1
- package/dist/types/src/shapes/Audio.d.ts.map +1 -1
- package/dist/types/src/shapes/Beacon.d.ts +1 -1
- package/dist/types/src/shapes/Beacon.d.ts.map +1 -1
- package/dist/types/src/shapes/Boolean.d.ts +7 -7
- package/dist/types/src/shapes/Boolean.d.ts.map +1 -1
- package/dist/types/src/shapes/Chat.d.ts +1 -1
- package/dist/types/src/shapes/Chat.d.ts.map +1 -1
- package/dist/types/src/shapes/Constant.d.ts +1 -1
- package/dist/types/src/shapes/Constant.d.ts.map +1 -1
- package/dist/types/src/shapes/Database.d.ts +1 -1
- package/dist/types/src/shapes/Database.d.ts.map +1 -1
- package/dist/types/src/shapes/{Queue.d.ts → Feed.d.ts} +9 -9
- package/dist/types/src/shapes/Feed.d.ts.map +1 -0
- package/dist/types/src/shapes/Function.d.ts +1 -1
- package/dist/types/src/shapes/Function.d.ts.map +1 -1
- package/dist/types/src/shapes/Gpt.d.ts +1 -1
- package/dist/types/src/shapes/Gpt.d.ts.map +1 -1
- package/dist/types/src/shapes/GptRealtime.d.ts +1 -1
- package/dist/types/src/shapes/GptRealtime.d.ts.map +1 -1
- package/dist/types/src/shapes/Json.d.ts +2 -2
- package/dist/types/src/shapes/Json.d.ts.map +1 -1
- package/dist/types/src/shapes/Logic.d.ts +2 -2
- package/dist/types/src/shapes/Logic.d.ts.map +1 -1
- package/dist/types/src/shapes/RNG.d.ts +2 -2
- package/dist/types/src/shapes/RNG.d.ts.map +1 -1
- package/dist/types/src/shapes/Scope.d.ts +1 -1
- package/dist/types/src/shapes/Scope.d.ts.map +1 -1
- package/dist/types/src/shapes/Surface.d.ts +1 -1
- package/dist/types/src/shapes/Surface.d.ts.map +1 -1
- package/dist/types/src/shapes/Switch.d.ts +1 -1
- package/dist/types/src/shapes/Switch.d.ts.map +1 -1
- package/dist/types/src/shapes/Table.d.ts +1 -1
- package/dist/types/src/shapes/Table.d.ts.map +1 -1
- package/dist/types/src/shapes/Template.d.ts +2 -2
- package/dist/types/src/shapes/Template.d.ts.map +1 -1
- package/dist/types/src/shapes/Text.d.ts +1 -1
- package/dist/types/src/shapes/Text.d.ts.map +1 -1
- package/dist/types/src/shapes/TextToImage.d.ts +1 -1
- package/dist/types/src/shapes/TextToImage.d.ts.map +1 -1
- package/dist/types/src/shapes/Thread.d.ts +1 -1
- package/dist/types/src/shapes/Thread.d.ts.map +1 -1
- package/dist/types/src/shapes/Trigger.d.ts +6 -4
- 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 +2 -2
- 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 +1 -1
- package/dist/types/src/shapes/defs.d.ts.map +1 -1
- package/dist/types/src/shapes/index.d.ts +2 -2
- package/dist/types/src/shapes/index.d.ts.map +1 -1
- package/dist/types/src/testing/circuits.d.ts +18 -24
- package/dist/types/src/testing/circuits.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +61 -58
- package/src/README.md +0 -3
- package/src/compute.stories.tsx +89 -114
- package/src/graph/controller.ts +139 -78
- package/src/graph/node-defs.ts +31 -31
- package/src/hooks/useComputeNodeState.ts +7 -8
- package/src/hooks/useGraphMonitor.ts +11 -10
- package/src/json.test.ts +3 -3
- package/src/registry.ts +2 -2
- package/src/schema.test.ts +11 -11
- package/src/shapes/Audio.tsx +1 -2
- package/src/shapes/Beacon.tsx +0 -1
- package/src/shapes/Boolean.tsx +1 -1
- package/src/shapes/Chat.tsx +0 -1
- package/src/shapes/Constant.tsx +0 -1
- package/src/shapes/{Queue.tsx → Feed.tsx} +26 -21
- package/src/shapes/Function.tsx +12 -9
- package/src/shapes/Gpt.tsx +6 -2
- package/src/shapes/Json.tsx +9 -3
- package/src/shapes/RNG.tsx +5 -2
- package/src/shapes/Scope.tsx +0 -1
- package/src/shapes/Surface.tsx +12 -4
- package/src/shapes/Switch.tsx +0 -1
- package/src/shapes/Table.tsx +3 -3
- package/src/shapes/Template.tsx +0 -1
- package/src/shapes/Text.tsx +0 -1
- package/src/shapes/Thread.tsx +12 -10
- package/src/shapes/Trigger.tsx +21 -21
- package/src/shapes/common/Box.tsx +5 -8
- package/src/shapes/common/FunctionBody.tsx +2 -2
- package/src/shapes/common/TypeSelect.tsx +1 -1
- package/src/shapes/defs.ts +3 -3
- package/src/shapes/index.ts +2 -2
- package/src/testing/circuits.ts +7 -16
- package/dist/types/src/shapes/Queue.d.ts.map +0 -1
|
@@ -6,31 +6,34 @@ import * as Schema from 'effect/Schema';
|
|
|
6
6
|
import React, { Fragment } from 'react';
|
|
7
7
|
|
|
8
8
|
import { DEFAULT_OUTPUT, QueueInput, QueueOutput } from '@dxos/conductor';
|
|
9
|
-
import { type ThemedClassName } from '@dxos/react-ui';
|
|
9
|
+
import { ScrollArea, type ThemedClassName } from '@dxos/react-ui';
|
|
10
10
|
import { type ShapeComponentProps, type ShapeDef } from '@dxos/react-ui-canvas-editor';
|
|
11
|
-
import { mx } from '@dxos/
|
|
11
|
+
import { mx } from '@dxos/ui-theme';
|
|
12
12
|
|
|
13
13
|
import { useComputeNodeState } from '../hooks';
|
|
14
|
-
|
|
15
14
|
import { createFunctionAnchors } from './common';
|
|
16
15
|
import { Box, type BoxActionHandler } from './common';
|
|
17
16
|
import { ComputeShape, type CreateShapeProps, createShape } from './defs';
|
|
18
17
|
|
|
19
|
-
export const
|
|
18
|
+
export const FeedShape = Schema.extend(
|
|
20
19
|
ComputeShape,
|
|
21
20
|
Schema.Struct({
|
|
22
21
|
type: Schema.Literal('queue'),
|
|
23
22
|
}),
|
|
24
23
|
);
|
|
25
24
|
|
|
26
|
-
export type
|
|
25
|
+
export type FeedShape = Schema.Schema.Type<typeof FeedShape>;
|
|
27
26
|
|
|
28
|
-
export type
|
|
27
|
+
export type CreateFeedProps = CreateShapeProps<FeedShape>;
|
|
29
28
|
|
|
30
|
-
export const
|
|
31
|
-
createShape<
|
|
29
|
+
export const createFeed = (props: CreateFeedProps) =>
|
|
30
|
+
createShape<FeedShape>({
|
|
31
|
+
type: 'queue',
|
|
32
|
+
size: { width: 256, height: 512 },
|
|
33
|
+
...props,
|
|
34
|
+
});
|
|
32
35
|
|
|
33
|
-
export const
|
|
36
|
+
export const FeedComponent = ({ shape }: ShapeComponentProps<FeedShape>) => {
|
|
34
37
|
const { runtime } = useComputeNodeState(shape);
|
|
35
38
|
const items = runtime.outputs[DEFAULT_OUTPUT]?.type === 'executed' ? runtime.outputs[DEFAULT_OUTPUT].value : [];
|
|
36
39
|
|
|
@@ -42,22 +45,24 @@ export const QueueComponent = ({ shape }: ShapeComponentProps<QueueShape>) => {
|
|
|
42
45
|
|
|
43
46
|
return (
|
|
44
47
|
<Box shape={shape} status={`${items.length} items`} onAction={handleAction}>
|
|
45
|
-
<
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
<ScrollArea.Root orientation='vertical'>
|
|
49
|
+
<ScrollArea.Viewport classNames='divide-y divide-separator'>
|
|
50
|
+
{[...items].map((item, i) => (
|
|
51
|
+
<FeedItem key={i} classNames='p-1 px-2' item={item} />
|
|
52
|
+
))}
|
|
53
|
+
</ScrollArea.Viewport>
|
|
54
|
+
</ScrollArea.Root>
|
|
50
55
|
</Box>
|
|
51
56
|
);
|
|
52
57
|
};
|
|
53
58
|
|
|
54
|
-
export const
|
|
59
|
+
export const FeedItem = ({ classNames, item }: ThemedClassName<{ item: any }>) => {
|
|
55
60
|
if (typeof item !== 'object') {
|
|
56
61
|
return <div className={mx(classNames, 'whitespace-pre-wrap')}>{item}</div>;
|
|
57
62
|
}
|
|
58
63
|
|
|
59
64
|
return (
|
|
60
|
-
<div className={mx('grid grid-cols-[
|
|
65
|
+
<div className={mx('grid grid-cols-[80px_1fr]', classNames)}>
|
|
61
66
|
{Object.entries(item).map(([key, value]) => (
|
|
62
67
|
<Fragment key={key}>
|
|
63
68
|
<div className='p-1 text-xs text-subdued'>{key}</div>
|
|
@@ -68,12 +73,12 @@ export const QueueItem = ({ classNames, item }: ThemedClassName<{ item: any }>)
|
|
|
68
73
|
);
|
|
69
74
|
};
|
|
70
75
|
|
|
71
|
-
export const
|
|
72
|
-
type: '
|
|
73
|
-
name: '
|
|
76
|
+
export const feedShape: ShapeDef<FeedShape> = {
|
|
77
|
+
type: 'feed',
|
|
78
|
+
name: 'Feed',
|
|
74
79
|
icon: 'ph--queue--regular',
|
|
75
|
-
component:
|
|
76
|
-
createShape:
|
|
80
|
+
component: FeedComponent,
|
|
81
|
+
createShape: createFeed,
|
|
77
82
|
getAnchors: (shape) => createFunctionAnchors(shape, QueueInput, QueueOutput),
|
|
78
83
|
resizable: true,
|
|
79
84
|
};
|
package/src/shapes/Function.tsx
CHANGED
|
@@ -5,11 +5,13 @@
|
|
|
5
5
|
import * as Schema from 'effect/Schema';
|
|
6
6
|
import React, { useCallback, useRef } from 'react';
|
|
7
7
|
|
|
8
|
+
import { Script } from '@dxos/compute';
|
|
9
|
+
import { Operation } from '@dxos/compute';
|
|
8
10
|
import { AnyOutput, FunctionInput } from '@dxos/conductor';
|
|
11
|
+
import { Filter } from '@dxos/echo';
|
|
9
12
|
import { Ref, getSnapshot, isInstanceOf } from '@dxos/echo/internal';
|
|
10
|
-
import {
|
|
13
|
+
import { parseId } from '@dxos/keys';
|
|
11
14
|
import { useClient } from '@dxos/react-client';
|
|
12
|
-
import { Filter, parseId } from '@dxos/react-client/echo';
|
|
13
15
|
import {
|
|
14
16
|
type ShapeComponentProps,
|
|
15
17
|
type ShapeDef,
|
|
@@ -19,7 +21,6 @@ import {
|
|
|
19
21
|
} from '@dxos/react-ui-canvas-editor';
|
|
20
22
|
|
|
21
23
|
import { useComputeNodeState } from '../hooks';
|
|
22
|
-
|
|
23
24
|
import { Box, createFunctionAnchors } from './common';
|
|
24
25
|
import { ComputeShape, type CreateShapeProps, createShape } from './defs';
|
|
25
26
|
|
|
@@ -35,7 +36,11 @@ export type FunctionShape = Schema.Schema.Type<typeof FunctionShape>;
|
|
|
35
36
|
export type CreateFunctionProps = CreateShapeProps<FunctionShape>;
|
|
36
37
|
|
|
37
38
|
export const createFunction = (props: CreateFunctionProps) =>
|
|
38
|
-
createShape<FunctionShape>({
|
|
39
|
+
createShape<FunctionShape>({
|
|
40
|
+
type: 'function',
|
|
41
|
+
size: { width: 256, height: 192 },
|
|
42
|
+
...props,
|
|
43
|
+
});
|
|
39
44
|
|
|
40
45
|
//
|
|
41
46
|
// Component
|
|
@@ -62,17 +67,15 @@ const TextInputComponent = ({ shape, title, ...props }: TextInputComponentProps)
|
|
|
62
67
|
return;
|
|
63
68
|
}
|
|
64
69
|
|
|
65
|
-
const {
|
|
66
|
-
objects: [fn],
|
|
67
|
-
} = await space.db.query(Filter.type(Function.Function, { source: Ref.make(object) })).run();
|
|
70
|
+
const [fn] = await space.db.query(Filter.type(Operation.PersistentOperation, { source: Ref.make(object) })).run();
|
|
68
71
|
if (!fn) {
|
|
69
72
|
return;
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
node.value = value;
|
|
73
76
|
node.function = Ref.make(fn);
|
|
74
|
-
node.inputSchema = getSnapshot(fn.inputSchema);
|
|
75
|
-
node.outputSchema = getSnapshot(fn.outputSchema);
|
|
77
|
+
node.inputSchema = fn.inputSchema ? getSnapshot(fn.inputSchema) : undefined;
|
|
78
|
+
node.outputSchema = fn.outputSchema ? getSnapshot(fn.outputSchema) : undefined;
|
|
76
79
|
},
|
|
77
80
|
[client, node],
|
|
78
81
|
);
|
package/src/shapes/Gpt.tsx
CHANGED
|
@@ -6,10 +6,10 @@ import * as Schema from 'effect/Schema';
|
|
|
6
6
|
import React, { useEffect, useState } from 'react';
|
|
7
7
|
|
|
8
8
|
import { GptInput, GptOutput } from '@dxos/conductor';
|
|
9
|
+
import { ScrollArea } from '@dxos/react-ui';
|
|
9
10
|
import { type ShapeComponentProps, type ShapeDef } from '@dxos/react-ui-canvas-editor';
|
|
10
11
|
|
|
11
12
|
import { useComputeNodeState } from '../hooks';
|
|
12
|
-
|
|
13
13
|
import { FunctionBody, createFunctionAnchors, getHeight } from './common';
|
|
14
14
|
import { ComputeShape, type CreateShapeProps, createShape } from './defs';
|
|
15
15
|
|
|
@@ -74,7 +74,11 @@ export const GptComponent = ({ shape }: ShapeComponentProps<GptShape>) => {
|
|
|
74
74
|
return (
|
|
75
75
|
<FunctionBody
|
|
76
76
|
shape={shape}
|
|
77
|
-
content={
|
|
77
|
+
content={
|
|
78
|
+
<ScrollArea.Root orientation='vertical' thin>
|
|
79
|
+
<ScrollArea.Viewport>{text}</ScrollArea.Viewport>
|
|
80
|
+
</ScrollArea.Root>
|
|
81
|
+
}
|
|
78
82
|
status={`${tokens} tokens`}
|
|
79
83
|
inputSchema={meta.input}
|
|
80
84
|
outputSchema={meta.output}
|
package/src/shapes/Json.tsx
CHANGED
|
@@ -8,10 +8,9 @@ import React from 'react';
|
|
|
8
8
|
import { DEFAULT_INPUT, DefaultOutput, JsonTransformInput } from '@dxos/conductor';
|
|
9
9
|
import { type ShapeComponentProps, type ShapeDef } from '@dxos/react-ui-canvas-editor';
|
|
10
10
|
import { createAnchorMap } from '@dxos/react-ui-canvas-editor';
|
|
11
|
-
import {
|
|
11
|
+
import { Syntax } from '@dxos/react-ui-syntax-highlighter';
|
|
12
12
|
|
|
13
13
|
import { useComputeNodeState } from '../hooks';
|
|
14
|
-
|
|
15
14
|
import { Box, createFunctionAnchors, getHeight } from './common';
|
|
16
15
|
import { ComputeShape, type CreateShapeProps, createAnchorId, createShape } from './defs';
|
|
17
16
|
|
|
@@ -50,7 +49,14 @@ export const JsonComponent = ({ shape, ...props }: JsonComponentProps) => {
|
|
|
50
49
|
|
|
51
50
|
return (
|
|
52
51
|
<Box shape={shape}>
|
|
53
|
-
<
|
|
52
|
+
<Syntax.Root data={value}>
|
|
53
|
+
<Syntax.Content>
|
|
54
|
+
<Syntax.Filter />
|
|
55
|
+
<Syntax.Viewport>
|
|
56
|
+
<Syntax.Code classNames='text-xs' />
|
|
57
|
+
</Syntax.Viewport>
|
|
58
|
+
</Syntax.Content>
|
|
59
|
+
</Syntax.Root>
|
|
54
60
|
</Box>
|
|
55
61
|
);
|
|
56
62
|
};
|
package/src/shapes/RNG.tsx
CHANGED
|
@@ -10,7 +10,6 @@ import { Icon, type IconProps } from '@dxos/react-ui';
|
|
|
10
10
|
import { type ShapeComponentProps, type ShapeDef, createAnchorMap } from '@dxos/react-ui-canvas-editor';
|
|
11
11
|
|
|
12
12
|
import { useComputeNodeState } from '../hooks';
|
|
13
|
-
|
|
14
13
|
import { ComputeShape, type CreateShapeProps, createAnchorId, createShape } from './defs';
|
|
15
14
|
|
|
16
15
|
export const RandomShape = Schema.extend(
|
|
@@ -27,7 +26,11 @@ export type RandomShape = Schema.Schema.Type<typeof RandomShape>;
|
|
|
27
26
|
export type CreateRandomProps = CreateShapeProps<RandomShape>;
|
|
28
27
|
|
|
29
28
|
export const createRandom = (props: CreateRandomProps) =>
|
|
30
|
-
createShape<RandomShape>({
|
|
29
|
+
createShape<RandomShape>({
|
|
30
|
+
type: 'rng',
|
|
31
|
+
size: { width: 64, height: 64 },
|
|
32
|
+
...props,
|
|
33
|
+
});
|
|
31
34
|
|
|
32
35
|
const icons = [
|
|
33
36
|
'ph--dice-one--regular',
|
package/src/shapes/Scope.tsx
CHANGED
|
@@ -10,7 +10,6 @@ import { type ShapeComponentProps, type ShapeDef, createAnchorMap } from '@dxos/
|
|
|
10
10
|
import { Chaos, shaderPresets, useAudioStream } from '@dxos/react-ui-sfx';
|
|
11
11
|
|
|
12
12
|
import { useComputeNodeState } from '../hooks';
|
|
13
|
-
|
|
14
13
|
import { ComputeShape, type CreateShapeProps, createAnchorId, createShape } from './defs';
|
|
15
14
|
|
|
16
15
|
export const ScopeShape = Schema.extend(
|
package/src/shapes/Surface.tsx
CHANGED
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
import * as Schema from 'effect/Schema';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
|
|
8
|
-
import { Surface } from '@dxos/app-framework';
|
|
8
|
+
import { Surface } from '@dxos/app-framework/ui';
|
|
9
|
+
import { AppSurface } from '@dxos/app-toolkit/ui';
|
|
9
10
|
import { DEFAULT_INPUT } from '@dxos/conductor';
|
|
11
|
+
import { Card } from '@dxos/react-ui';
|
|
10
12
|
import { type ShapeComponentProps, type ShapeDef } from '@dxos/react-ui-canvas-editor';
|
|
11
13
|
import { createAnchorMap } from '@dxos/react-ui-canvas-editor';
|
|
12
14
|
|
|
13
15
|
import { useComputeNodeState } from '../hooks';
|
|
14
|
-
|
|
15
16
|
import { Box, type BoxActionHandler } from './common';
|
|
16
17
|
import { ComputeShape, type CreateShapeProps, createAnchorId, createShape } from './defs';
|
|
17
18
|
|
|
@@ -27,7 +28,11 @@ export type SurfaceShape = Schema.Schema.Type<typeof SurfaceShape>;
|
|
|
27
28
|
export type CreateSurfaceProps = CreateShapeProps<SurfaceShape>;
|
|
28
29
|
|
|
29
30
|
export const createSurface = (props: CreateSurfaceProps) =>
|
|
30
|
-
createShape<SurfaceShape>({
|
|
31
|
+
createShape<SurfaceShape>({
|
|
32
|
+
type: 'surface',
|
|
33
|
+
size: { width: 384, height: 384 },
|
|
34
|
+
...props,
|
|
35
|
+
});
|
|
31
36
|
|
|
32
37
|
export const SurfaceComponent = ({ shape }: ShapeComponentProps<SurfaceShape>) => {
|
|
33
38
|
const { runtime } = useComputeNodeState(shape);
|
|
@@ -40,9 +45,12 @@ export const SurfaceComponent = ({ shape }: ShapeComponentProps<SurfaceShape>) =
|
|
|
40
45
|
}
|
|
41
46
|
};
|
|
42
47
|
|
|
48
|
+
// TODO(burdon): Subject property?
|
|
43
49
|
return (
|
|
44
50
|
<Box shape={shape} onAction={handleAction}>
|
|
45
|
-
|
|
51
|
+
<Card.Root>
|
|
52
|
+
{value !== null && <Surface.Surface type={AppSurface.Card} data={{ subject: value }} limit={1} />}
|
|
53
|
+
</Card.Root>
|
|
46
54
|
</Box>
|
|
47
55
|
);
|
|
48
56
|
};
|
package/src/shapes/Switch.tsx
CHANGED
|
@@ -10,7 +10,6 @@ import { Input } from '@dxos/react-ui';
|
|
|
10
10
|
import { type ShapeComponentProps, type ShapeDef, createAnchorMap } from '@dxos/react-ui-canvas-editor';
|
|
11
11
|
|
|
12
12
|
import { useComputeNodeState } from '../hooks';
|
|
13
|
-
|
|
14
13
|
import { ComputeShape, type CreateShapeProps, createAnchorId, createShape } from './defs';
|
|
15
14
|
|
|
16
15
|
export const SwitchShape = Schema.extend(
|
package/src/shapes/Table.tsx
CHANGED
|
@@ -7,13 +7,13 @@ import React from 'react';
|
|
|
7
7
|
|
|
8
8
|
import { createInputSchema, createOutputSchema } from '@dxos/conductor';
|
|
9
9
|
import { type ShapeComponentProps, type ShapeDef } from '@dxos/react-ui-canvas-editor';
|
|
10
|
-
import {
|
|
10
|
+
import { Message } from '@dxos/types';
|
|
11
11
|
|
|
12
12
|
import { Box, createFunctionAnchors } from './common';
|
|
13
13
|
import { ComputeShape, type CreateShapeProps, createShape } from './defs';
|
|
14
14
|
|
|
15
|
-
const InputSchema = createInputSchema(
|
|
16
|
-
const OutputSchema = createOutputSchema(Schema.mutable(Schema.Array(
|
|
15
|
+
const InputSchema = createInputSchema(Message.Message);
|
|
16
|
+
const OutputSchema = createOutputSchema(Schema.mutable(Schema.Array(Message.Message)));
|
|
17
17
|
|
|
18
18
|
export const TableShape = Schema.extend(
|
|
19
19
|
ComputeShape,
|
package/src/shapes/Template.tsx
CHANGED
package/src/shapes/Text.tsx
CHANGED
|
@@ -10,7 +10,6 @@ import { type ShapeComponentProps, type ShapeDef, TextBox } from '@dxos/react-ui
|
|
|
10
10
|
import { createAnchorMap } from '@dxos/react-ui-canvas-editor';
|
|
11
11
|
|
|
12
12
|
import { useComputeNodeState } from '../hooks';
|
|
13
|
-
|
|
14
13
|
import { Box, type BoxActionHandler } from './common';
|
|
15
14
|
import { ComputeShape, type CreateShapeProps, createAnchorId, createShape } from './defs';
|
|
16
15
|
|
package/src/shapes/Thread.tsx
CHANGED
|
@@ -6,16 +6,16 @@ import * as Schema from 'effect/Schema';
|
|
|
6
6
|
import React, { useEffect, useRef } from 'react';
|
|
7
7
|
|
|
8
8
|
import { createInputSchema, createOutputSchema } from '@dxos/conductor';
|
|
9
|
-
import { type ThemedClassName } from '@dxos/react-ui';
|
|
9
|
+
import { ScrollArea, type ThemedClassName } from '@dxos/react-ui';
|
|
10
10
|
import { type ShapeComponentProps, type ShapeDef } from '@dxos/react-ui-canvas-editor';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
11
|
+
import { Message } from '@dxos/types';
|
|
12
|
+
import { mx } from '@dxos/ui-theme';
|
|
13
13
|
|
|
14
14
|
import { Box, createFunctionAnchors } from './common';
|
|
15
15
|
import { ComputeShape, type CreateShapeProps, createShape } from './defs';
|
|
16
16
|
|
|
17
|
-
const InputSchema = createInputSchema(
|
|
18
|
-
const OutputSchema = createOutputSchema(Schema.mutable(Schema.Array(
|
|
17
|
+
const InputSchema = createInputSchema(Message.Message);
|
|
18
|
+
const OutputSchema = createOutputSchema(Schema.mutable(Schema.Array(Message.Message)));
|
|
19
19
|
|
|
20
20
|
export const ThreadShape = Schema.extend(
|
|
21
21
|
ComputeShape,
|
|
@@ -42,11 +42,13 @@ export const ThreadComponent = ({ shape }: ShapeComponentProps<ThreadShape>) =>
|
|
|
42
42
|
|
|
43
43
|
return (
|
|
44
44
|
<Box shape={shape}>
|
|
45
|
-
<
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
<ScrollArea.Root orientation='vertical'>
|
|
46
|
+
<ScrollArea.Viewport classNames='gap-2 p-2' ref={scrollRef}>
|
|
47
|
+
{[...items].map((item, i) => (
|
|
48
|
+
<ThreadItem key={i} item={item} />
|
|
49
|
+
))}
|
|
50
|
+
</ScrollArea.Viewport>
|
|
51
|
+
</ScrollArea.Root>
|
|
50
52
|
</Box>
|
|
51
53
|
);
|
|
52
54
|
};
|
package/src/shapes/Trigger.tsx
CHANGED
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
import * as Schema from 'effect/Schema';
|
|
6
6
|
import React, { useEffect } from 'react';
|
|
7
7
|
|
|
8
|
+
import { Trigger, TriggerEvent } from '@dxos/compute';
|
|
8
9
|
import { VoidInput } from '@dxos/conductor';
|
|
9
|
-
import { Filter, Query } from '@dxos/echo';
|
|
10
|
-
import {
|
|
11
|
-
import { Trigger, TriggerEvent } from '@dxos/functions';
|
|
10
|
+
import { Filter, Obj, Query, Ref } from '@dxos/echo';
|
|
11
|
+
import { type Mutable } from '@dxos/echo/internal';
|
|
12
12
|
import { DXN, SpaceId } from '@dxos/keys';
|
|
13
|
-
import {
|
|
13
|
+
import { useSpaces } from '@dxos/react-client/echo';
|
|
14
14
|
import { Select, type SelectRootProps } from '@dxos/react-ui';
|
|
15
15
|
import { type ShapeComponentProps, type ShapeDef } from '@dxos/react-ui-canvas-editor';
|
|
16
16
|
|
|
@@ -21,10 +21,11 @@ export const TriggerShape = Schema.extend(
|
|
|
21
21
|
ComputeShape,
|
|
22
22
|
Schema.Struct({
|
|
23
23
|
type: Schema.Literal('trigger'),
|
|
24
|
-
functionTrigger: Schema.optional(Ref(Trigger.Trigger)),
|
|
24
|
+
functionTrigger: Schema.optional(Ref.Ref(Trigger.Trigger)),
|
|
25
25
|
}),
|
|
26
26
|
);
|
|
27
|
-
|
|
27
|
+
|
|
28
|
+
export interface TriggerShape extends Schema.Schema.Type<typeof TriggerShape> {}
|
|
28
29
|
|
|
29
30
|
export type CreateTriggerProps = CreateShapeProps<Omit<TriggerShape, 'functionTrigger'>> & {
|
|
30
31
|
spaceId?: SpaceId;
|
|
@@ -47,12 +48,14 @@ export const createTrigger = (props: CreateTriggerProps): TriggerShape => {
|
|
|
47
48
|
export type TriggerComponentProps = ShapeComponentProps<TriggerShape>;
|
|
48
49
|
|
|
49
50
|
export const TriggerComponent = ({ shape }: TriggerComponentProps) => {
|
|
50
|
-
const space =
|
|
51
|
+
const [space] = useSpaces();
|
|
51
52
|
const functionTrigger = shape.functionTrigger?.target;
|
|
52
53
|
|
|
53
54
|
useEffect(() => {
|
|
54
55
|
if (functionTrigger && !functionTrigger.spec) {
|
|
55
|
-
|
|
56
|
+
Obj.update(functionTrigger, (functionTrigger) => {
|
|
57
|
+
functionTrigger.spec = createTriggerSpec({ triggerKind: 'email', spaceId: space?.id }) as Mutable<Trigger.Spec>;
|
|
58
|
+
});
|
|
56
59
|
}
|
|
57
60
|
}, [functionTrigger, functionTrigger?.spec]);
|
|
58
61
|
|
|
@@ -62,7 +65,9 @@ export const TriggerComponent = ({ shape }: TriggerComponentProps) => {
|
|
|
62
65
|
|
|
63
66
|
const setKind = (kind: Trigger.Kind) => {
|
|
64
67
|
if (functionTrigger?.spec?.kind !== kind) {
|
|
65
|
-
functionTrigger
|
|
68
|
+
Obj.update(functionTrigger!, (obj) => {
|
|
69
|
+
obj.spec = createTriggerSpec({ triggerKind: kind, spaceId: space?.id }) as Mutable<Trigger.Spec>;
|
|
70
|
+
});
|
|
66
71
|
}
|
|
67
72
|
};
|
|
68
73
|
|
|
@@ -86,7 +91,7 @@ export const TriggerComponent = ({ shape }: TriggerComponentProps) => {
|
|
|
86
91
|
const TriggerKindSelect = ({ value, onValueChange }: Pick<SelectRootProps, 'value' | 'onValueChange'>) => {
|
|
87
92
|
return (
|
|
88
93
|
<Select.Root value={value} onValueChange={onValueChange}>
|
|
89
|
-
<Select.TriggerButton variant='ghost' classNames='w-full
|
|
94
|
+
<Select.TriggerButton variant='ghost' classNames='w-full px-0!' />
|
|
90
95
|
<Select.Portal>
|
|
91
96
|
<Select.Content>
|
|
92
97
|
<Select.ScrollUpButton />
|
|
@@ -109,21 +114,16 @@ const createTriggerSpec = (props: { triggerKind?: Trigger.Kind; spaceId?: SpaceI
|
|
|
109
114
|
const kind = props.triggerKind ?? 'email';
|
|
110
115
|
switch (kind) {
|
|
111
116
|
case 'timer':
|
|
112
|
-
return
|
|
117
|
+
return Trigger.specTimer('*/10 * * * * *');
|
|
113
118
|
case 'webhook':
|
|
114
|
-
return {
|
|
119
|
+
return Trigger.specWebhook({ method: 'POST' });
|
|
115
120
|
case 'subscription':
|
|
116
|
-
return
|
|
117
|
-
kind: 'subscription',
|
|
118
|
-
query: {
|
|
119
|
-
ast: Query.select(Filter.nothing()).ast,
|
|
120
|
-
},
|
|
121
|
-
} satisfies Trigger.SubscriptionSpec;
|
|
121
|
+
return Trigger.specSubscription(Query.select(Filter.nothing()));
|
|
122
122
|
case 'email':
|
|
123
|
-
return
|
|
123
|
+
return Trigger.specEmail();
|
|
124
124
|
case 'queue': {
|
|
125
|
-
const dxn = new DXN(DXN.kind.QUEUE, ['data', props.spaceId ?? SpaceId.random(),
|
|
126
|
-
return
|
|
125
|
+
const dxn = new DXN(DXN.kind.QUEUE, ['data', props.spaceId ?? SpaceId.random(), Obj.ID.random()]).toString();
|
|
126
|
+
return Trigger.specQueue(dxn);
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
};
|
|
@@ -6,9 +6,8 @@ import React, { type PropsWithChildren, type ReactNode, forwardRef } from 'react
|
|
|
6
6
|
|
|
7
7
|
import { invariant } from '@dxos/invariant';
|
|
8
8
|
import { Icon, IconButton, type ThemedClassName } from '@dxos/react-ui';
|
|
9
|
-
import { useEditorContext, useShapeDef } from '@dxos/react-ui-canvas-editor';
|
|
10
|
-
import {
|
|
11
|
-
import { mx } from '@dxos/react-ui-theme';
|
|
9
|
+
import { type CanvasBoard, useEditorContext, useShapeDef } from '@dxos/react-ui-canvas-editor';
|
|
10
|
+
import { mx } from '@dxos/ui-theme';
|
|
12
11
|
|
|
13
12
|
export const headerHeight = 32;
|
|
14
13
|
export const footerHeight = 32;
|
|
@@ -17,7 +16,7 @@ export type BoxActionHandler = (action: 'run' | 'open' | 'close') => void;
|
|
|
17
16
|
|
|
18
17
|
export type BoxProps = PropsWithChildren<
|
|
19
18
|
ThemedClassName<{
|
|
20
|
-
shape: Shape;
|
|
19
|
+
shape: CanvasBoard.Shape;
|
|
21
20
|
title?: string;
|
|
22
21
|
status?: string | ReactNode;
|
|
23
22
|
open?: boolean;
|
|
@@ -33,14 +32,13 @@ export const Box = forwardRef<HTMLDivElement, BoxProps>(
|
|
|
33
32
|
|
|
34
33
|
return (
|
|
35
34
|
<div ref={forwardedRef} className='flex flex-col h-full w-full justify-between'>
|
|
36
|
-
<div className='flex shrink-0 w-full justify-between items-center h-[32px] bg-
|
|
35
|
+
<div className='flex shrink-0 w-full justify-between items-center h-[32px] bg-input-surface'>
|
|
37
36
|
<Icon icon={icon} classNames='mx-2' />
|
|
38
37
|
<div className='grow text-sm truncate'>{debug ? shape.type : (name ?? shape.text ?? title)}</div>
|
|
39
38
|
<IconButton
|
|
40
39
|
classNames='p-1 text-green-500'
|
|
41
40
|
variant='ghost'
|
|
42
41
|
icon='ph--play--regular'
|
|
43
|
-
size={4}
|
|
44
42
|
label='run'
|
|
45
43
|
iconOnly
|
|
46
44
|
onDoubleClick={(ev) => ev.stopPropagation()}
|
|
@@ -51,14 +49,13 @@ export const Box = forwardRef<HTMLDivElement, BoxProps>(
|
|
|
51
49
|
/>
|
|
52
50
|
</div>
|
|
53
51
|
<div className={mx('flex flex-col h-full grow overflow-hidden', classNames)}>{children}</div>
|
|
54
|
-
<div className='flex shrink-0 w-full justify-between items-center h-[32px] bg-
|
|
52
|
+
<div className='flex shrink-0 w-full justify-between items-center h-[32px] bg-input-surface'>
|
|
55
53
|
<div className='grow px-2 text-sm truncate'>{debug ? shape.id : status}</div>
|
|
56
54
|
{openable && (
|
|
57
55
|
<IconButton
|
|
58
56
|
classNames='p-1'
|
|
59
57
|
variant='ghost'
|
|
60
58
|
icon={open ? 'ph--caret-up--regular' : 'ph--caret-down--regular'}
|
|
61
|
-
size={4}
|
|
62
59
|
label={open ? 'close' : 'open'}
|
|
63
60
|
iconOnly
|
|
64
61
|
onClick={(ev) => {
|
|
@@ -8,7 +8,7 @@ import React, { type JSX, useRef, useState } from 'react';
|
|
|
8
8
|
|
|
9
9
|
import { VoidInput, VoidOutput } from '@dxos/conductor';
|
|
10
10
|
import { useCanvasContext } from '@dxos/react-ui-canvas';
|
|
11
|
-
import { type
|
|
11
|
+
import { type CanvasBoard, type Polygon } from '@dxos/react-ui-canvas-editor';
|
|
12
12
|
import { createAnchors, getParentShapeElement, rowHeight } from '@dxos/react-ui-canvas-editor';
|
|
13
13
|
|
|
14
14
|
import { Box, type BoxProps, footerHeight, headerHeight } from '../common';
|
|
@@ -18,7 +18,7 @@ const bodyPadding = 8;
|
|
|
18
18
|
const expandedHeight = 200;
|
|
19
19
|
|
|
20
20
|
export type FunctionBodyProps = {
|
|
21
|
-
shape: Shape;
|
|
21
|
+
shape: CanvasBoard.Shape;
|
|
22
22
|
name?: string;
|
|
23
23
|
content?: JSX.Element;
|
|
24
24
|
inputSchema?: Schema.Schema.Any;
|
|
@@ -11,7 +11,7 @@ import { Select, type SelectRootProps } from '@dxos/react-ui';
|
|
|
11
11
|
export const TypeSelect = ({ value, onValueChange }: Pick<SelectRootProps, 'value' | 'onValueChange'>) => {
|
|
12
12
|
return (
|
|
13
13
|
<Select.Root value={value} onValueChange={onValueChange}>
|
|
14
|
-
<Select.TriggerButton variant='ghost' classNames='w-full
|
|
14
|
+
<Select.TriggerButton variant='ghost' classNames='w-full px-0!' />
|
|
15
15
|
<Select.Portal>
|
|
16
16
|
<Select.Content>
|
|
17
17
|
<Select.ScrollUpButton />
|
package/src/shapes/defs.ts
CHANGED
|
@@ -6,7 +6,7 @@ import * as Schema from 'effect/Schema';
|
|
|
6
6
|
import * as SchemaAST from 'effect/SchemaAST';
|
|
7
7
|
|
|
8
8
|
import { DEFAULT_INPUT, DEFAULT_OUTPUT } from '@dxos/conductor';
|
|
9
|
-
import {
|
|
9
|
+
import { Obj } from '@dxos/echo';
|
|
10
10
|
import { Polygon } from '@dxos/react-ui-canvas-editor';
|
|
11
11
|
import { type MakeOptional } from '@dxos/util';
|
|
12
12
|
|
|
@@ -37,7 +37,7 @@ export const ComputeShape = Schema.extend(
|
|
|
37
37
|
Polygon,
|
|
38
38
|
Schema.Struct({
|
|
39
39
|
// TODO(burdon): Rename computeNode?
|
|
40
|
-
node: Schema.optional(
|
|
40
|
+
node: Schema.optional(Obj.ID.annotations({ description: 'Compute node id' })),
|
|
41
41
|
}).pipe(Schema.mutable),
|
|
42
42
|
);
|
|
43
43
|
|
|
@@ -45,7 +45,7 @@ export type ComputeShape = Schema.Schema.Type<typeof ComputeShape>;
|
|
|
45
45
|
|
|
46
46
|
export const createShape = <S extends ComputeShape>({ id, ...rest }: CreateShapeProps<S> & { type: string }): S => {
|
|
47
47
|
return {
|
|
48
|
-
id: id ??
|
|
48
|
+
id: id ?? Obj.ID.random(),
|
|
49
49
|
...rest,
|
|
50
50
|
} as S;
|
|
51
51
|
};
|
package/src/shapes/index.ts
CHANGED
|
@@ -13,11 +13,12 @@ export * from './Boolean';
|
|
|
13
13
|
export * from './Chat';
|
|
14
14
|
export * from './Constant';
|
|
15
15
|
export * from './Database';
|
|
16
|
+
export * from './Feed';
|
|
16
17
|
export * from './Function';
|
|
17
18
|
export * from './Gpt';
|
|
19
|
+
export * from './GptRealtime';
|
|
18
20
|
export * from './Json';
|
|
19
21
|
export * from './Logic';
|
|
20
|
-
export * from './Queue';
|
|
21
22
|
export * from './RNG';
|
|
22
23
|
export * from './Scope';
|
|
23
24
|
export * from './Surface';
|
|
@@ -28,4 +29,3 @@ export * from './Text';
|
|
|
28
29
|
export * from './Thread';
|
|
29
30
|
export * from './TextToImage';
|
|
30
31
|
export * from './Trigger';
|
|
31
|
-
export * from './GptRealtime';
|
package/src/testing/circuits.ts
CHANGED
|
@@ -3,14 +3,10 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { createSystemPrompt } from '@dxos/assistant';
|
|
6
|
-
import { ObjectId } from '@dxos/
|
|
7
|
-
import { type ServiceContainer } from '@dxos/functions';
|
|
8
|
-
import { DXN, SpaceId } from '@dxos/keys';
|
|
6
|
+
import { DXN, ObjectId, SpaceId } from '@dxos/keys';
|
|
9
7
|
import { type Dimension, type Point } from '@dxos/react-ui-canvas';
|
|
10
8
|
import { CanvasGraphModel, createNote, pointMultiply, pointsToRect, rectToPoints } from '@dxos/react-ui-canvas-editor';
|
|
11
9
|
|
|
12
|
-
import { ComputeGraphController } from '../graph';
|
|
13
|
-
import { createComputeGraph } from '../hooks';
|
|
14
10
|
import {
|
|
15
11
|
type ComputeShape,
|
|
16
12
|
createAnd,
|
|
@@ -28,7 +24,7 @@ import {
|
|
|
28
24
|
createJsonTransform,
|
|
29
25
|
createNot,
|
|
30
26
|
createOr,
|
|
31
|
-
|
|
27
|
+
createFeed,
|
|
32
28
|
createRandom,
|
|
33
29
|
createScope,
|
|
34
30
|
createSurface,
|
|
@@ -38,19 +34,14 @@ import {
|
|
|
38
34
|
createTextToImage,
|
|
39
35
|
} from '../shapes';
|
|
40
36
|
|
|
41
|
-
export const createComputeGraphController = (
|
|
42
|
-
graph: CanvasGraphModel<ComputeShape>,
|
|
43
|
-
serviceContainer: ServiceContainer,
|
|
44
|
-
) => {
|
|
45
|
-
const computeGraph = createComputeGraph(graph);
|
|
46
|
-
const controller = new ComputeGraphController(serviceContainer, computeGraph);
|
|
47
|
-
return { controller, graph };
|
|
48
|
-
};
|
|
49
|
-
|
|
50
37
|
//
|
|
51
38
|
// Circuits
|
|
52
39
|
//
|
|
53
40
|
|
|
41
|
+
export const createEmptyCircuit = () => {
|
|
42
|
+
return CanvasGraphModel.create<ComputeShape>();
|
|
43
|
+
};
|
|
44
|
+
|
|
54
45
|
export const createBasicCircuit = () => {
|
|
55
46
|
const model = CanvasGraphModel.create<ComputeShape>();
|
|
56
47
|
model.builder.call(({ model }) => {
|
|
@@ -250,7 +241,7 @@ export const createGptCircuit = (options: {
|
|
|
250
241
|
}),
|
|
251
242
|
);
|
|
252
243
|
|
|
253
|
-
const thread = model.createNode(
|
|
244
|
+
const thread = model.createNode(createFeed(position({ x: -3, y: 3, width: 14, height: 10 })));
|
|
254
245
|
const append = model.createNode(createAppend(position({ x: 10, y: 6 })));
|
|
255
246
|
|
|
256
247
|
builder
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../../../../src/shapes/Queue.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAOvF,OAAO,EAAgB,KAAK,gBAAgB,EAAe,MAAM,QAAQ,CAAC;AAE1E,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;GAKtB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,UAAU,CAAC,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAE5D,eAAO,MAAM,WAAW,GAAI,OAAO,gBAAgB;;;;;;;;;;;;;;;;;;;CACsC,CAAC;AAE1F,eAAO,MAAM,cAAc,GAAI,WAAW,mBAAmB,CAAC,UAAU,CAAC,sBAmBxE,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,sBAAsB,eAAe,CAAC;IAAE,IAAI,EAAE,GAAG,CAAA;CAAE,CAAC,sBAe7E,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,UAAU,CAQ3C,CAAC"}
|