@dxos/react-ui-canvas-compute 0.8.3 → 0.8.4-main.03d5cd7b56
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 +1053 -1266
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +1053 -1266
- 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 +61 -54
- 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 -33
- 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 +19 -16
- 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 +7 -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 +16 -13
- package/src/shapes/Trigger.tsx +47 -59
- 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/lib/node/index.cjs +0 -2896
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
- package/dist/types/src/shapes/Queue.d.ts.map +0 -1
package/src/shapes/Switch.tsx
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
6
|
import React, { useEffect, useState } from 'react';
|
|
7
7
|
|
|
8
8
|
import { DEFAULT_OUTPUT } from '@dxos/conductor';
|
|
9
9
|
import { Input } from '@dxos/react-ui';
|
|
10
|
-
import {
|
|
10
|
+
import { type ShapeComponentProps, type ShapeDef, createAnchorMap } from '@dxos/react-ui-canvas-editor';
|
|
11
11
|
|
|
12
|
-
import { ComputeShape, createAnchorId, createShape, type CreateShapeProps } from './defs';
|
|
13
12
|
import { useComputeNodeState } from '../hooks';
|
|
13
|
+
import { ComputeShape, type CreateShapeProps, createAnchorId, createShape } from './defs';
|
|
14
14
|
|
|
15
15
|
export const SwitchShape = Schema.extend(
|
|
16
16
|
ComputeShape,
|
package/src/shapes/Table.tsx
CHANGED
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
|
|
8
|
-
import { createInputSchema, createOutputSchema
|
|
8
|
+
import { createInputSchema, createOutputSchema } from '@dxos/conductor';
|
|
9
9
|
import { type ShapeComponentProps, type ShapeDef } from '@dxos/react-ui-canvas-editor';
|
|
10
|
+
import { Message } from '@dxos/types';
|
|
10
11
|
|
|
11
|
-
import {
|
|
12
|
-
import { ComputeShape,
|
|
12
|
+
import { Box, createFunctionAnchors } from './common';
|
|
13
|
+
import { ComputeShape, type CreateShapeProps, createShape } from './defs';
|
|
13
14
|
|
|
14
|
-
const InputSchema = createInputSchema(
|
|
15
|
-
const OutputSchema = createOutputSchema(Schema.mutable(Schema.Array(
|
|
15
|
+
const InputSchema = createInputSchema(Message.Message);
|
|
16
|
+
const OutputSchema = createOutputSchema(Schema.mutable(Schema.Array(Message.Message)));
|
|
16
17
|
|
|
17
18
|
export const TableShape = Schema.extend(
|
|
18
19
|
ComputeShape,
|
package/src/shapes/Template.tsx
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
6
|
import React, { useRef } from 'react';
|
|
7
7
|
|
|
8
|
-
import { ComputeValueType,
|
|
9
|
-
import { toJsonSchema } from '@dxos/echo
|
|
8
|
+
import { ComputeValueType, TemplateOutput, VoidInput, getTemplateInputSchema } from '@dxos/conductor';
|
|
9
|
+
import { toJsonSchema } from '@dxos/echo/internal';
|
|
10
10
|
import { invariant } from '@dxos/invariant';
|
|
11
11
|
import {
|
|
12
12
|
type ShapeComponentProps,
|
|
@@ -16,9 +16,9 @@ import {
|
|
|
16
16
|
type TextBoxProps,
|
|
17
17
|
} from '@dxos/react-ui-canvas-editor';
|
|
18
18
|
|
|
19
|
-
import { Box, createFunctionAnchors, TypeSelect } from './common';
|
|
20
|
-
import { ComputeShape, createShape, type CreateShapeProps } from './defs';
|
|
21
19
|
import { useComputeNodeState } from '../hooks';
|
|
20
|
+
import { Box, TypeSelect, createFunctionAnchors } from './common';
|
|
21
|
+
import { ComputeShape, type CreateShapeProps, createShape } from './defs';
|
|
22
22
|
|
|
23
23
|
//
|
|
24
24
|
// Data
|
package/src/shapes/Text.tsx
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
|
|
8
8
|
import { DEFAULT_INPUT } from '@dxos/conductor';
|
|
9
|
-
import {
|
|
9
|
+
import { type ShapeComponentProps, type ShapeDef, TextBox } from '@dxos/react-ui-canvas-editor';
|
|
10
10
|
import { createAnchorMap } from '@dxos/react-ui-canvas-editor';
|
|
11
11
|
|
|
12
|
-
import { Box, type BoxActionHandler } from './common';
|
|
13
|
-
import { ComputeShape, createAnchorId, createShape, type CreateShapeProps } from './defs';
|
|
14
12
|
import { useComputeNodeState } from '../hooks';
|
|
13
|
+
import { Box, type BoxActionHandler } from './common';
|
|
14
|
+
import { ComputeShape, type CreateShapeProps, createAnchorId, createShape } from './defs';
|
|
15
15
|
|
|
16
16
|
export const TextShape = Schema.extend(
|
|
17
17
|
ComputeShape,
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
|
|
8
8
|
import { type ShapeComponentProps, type ShapeDef } from '@dxos/react-ui-canvas-editor';
|
|
9
9
|
import { createAnchorMap } from '@dxos/react-ui-canvas-editor';
|
|
10
10
|
|
|
11
11
|
import { Box } from './common';
|
|
12
|
-
import { ComputeShape, createAnchorId, createShape
|
|
12
|
+
import { ComputeShape, type CreateShapeProps, createAnchorId, createShape } from './defs';
|
|
13
13
|
|
|
14
14
|
export const TextToImageShape = Schema.extend(
|
|
15
15
|
ComputeShape,
|
package/src/shapes/Thread.tsx
CHANGED
|
@@ -2,19 +2,20 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
6
|
import React, { useEffect, useRef } from 'react';
|
|
7
7
|
|
|
8
|
-
import { createInputSchema, createOutputSchema
|
|
9
|
-
import { type ThemedClassName } from '@dxos/react-ui';
|
|
8
|
+
import { createInputSchema, createOutputSchema } from '@dxos/conductor';
|
|
9
|
+
import { ScrollArea, type ThemedClassName } from '@dxos/react-ui';
|
|
10
10
|
import { type ShapeComponentProps, type ShapeDef } from '@dxos/react-ui-canvas-editor';
|
|
11
|
-
import {
|
|
11
|
+
import { Message } from '@dxos/types';
|
|
12
|
+
import { mx } from '@dxos/ui-theme';
|
|
12
13
|
|
|
13
|
-
import {
|
|
14
|
-
import { ComputeShape,
|
|
14
|
+
import { Box, createFunctionAnchors } from './common';
|
|
15
|
+
import { ComputeShape, type CreateShapeProps, createShape } from './defs';
|
|
15
16
|
|
|
16
|
-
const InputSchema = createInputSchema(
|
|
17
|
-
const OutputSchema = createOutputSchema(Schema.mutable(Schema.Array(
|
|
17
|
+
const InputSchema = createInputSchema(Message.Message);
|
|
18
|
+
const OutputSchema = createOutputSchema(Schema.mutable(Schema.Array(Message.Message)));
|
|
18
19
|
|
|
19
20
|
export const ThreadShape = Schema.extend(
|
|
20
21
|
ComputeShape,
|
|
@@ -41,11 +42,13 @@ export const ThreadComponent = ({ shape }: ShapeComponentProps<ThreadShape>) =>
|
|
|
41
42
|
|
|
42
43
|
return (
|
|
43
44
|
<Box shape={shape}>
|
|
44
|
-
<
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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>
|
|
49
52
|
</Box>
|
|
50
53
|
);
|
|
51
54
|
};
|
package/src/shapes/Trigger.tsx
CHANGED
|
@@ -2,57 +2,45 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
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 {
|
|
10
|
-
import {
|
|
11
|
-
type EmailTrigger,
|
|
12
|
-
FunctionTrigger,
|
|
13
|
-
type QueueTrigger,
|
|
14
|
-
type SubscriptionTrigger,
|
|
15
|
-
type TimerTrigger,
|
|
16
|
-
TriggerKind,
|
|
17
|
-
type TriggerType,
|
|
18
|
-
type WebhookTrigger,
|
|
19
|
-
EmailTriggerOutput,
|
|
20
|
-
QueueTriggerOutput,
|
|
21
|
-
SubscriptionTriggerOutput,
|
|
22
|
-
TimerTriggerOutput,
|
|
23
|
-
WebhookTriggerOutput,
|
|
24
|
-
} from '@dxos/functions';
|
|
10
|
+
import { Filter, Obj, Query, Ref } from '@dxos/echo';
|
|
11
|
+
import { type Mutable } from '@dxos/echo/internal';
|
|
25
12
|
import { DXN, SpaceId } from '@dxos/keys';
|
|
26
|
-
import {
|
|
13
|
+
import { useSpaces } from '@dxos/react-client/echo';
|
|
27
14
|
import { Select, type SelectRootProps } from '@dxos/react-ui';
|
|
28
15
|
import { type ShapeComponentProps, type ShapeDef } from '@dxos/react-ui-canvas-editor';
|
|
29
16
|
|
|
30
|
-
import {
|
|
31
|
-
import { ComputeShape,
|
|
17
|
+
import { FunctionBody, createFunctionAnchors, getHeight } from './common';
|
|
18
|
+
import { ComputeShape, type CreateShapeProps, createShape } from './defs';
|
|
32
19
|
|
|
33
20
|
export const TriggerShape = Schema.extend(
|
|
34
21
|
ComputeShape,
|
|
35
22
|
Schema.Struct({
|
|
36
23
|
type: Schema.Literal('trigger'),
|
|
37
|
-
functionTrigger: Schema.optional(Ref(
|
|
24
|
+
functionTrigger: Schema.optional(Ref.Ref(Trigger.Trigger)),
|
|
38
25
|
}),
|
|
39
26
|
);
|
|
40
|
-
|
|
27
|
+
|
|
28
|
+
export interface TriggerShape extends Schema.Schema.Type<typeof TriggerShape> {}
|
|
41
29
|
|
|
42
30
|
export type CreateTriggerProps = CreateShapeProps<Omit<TriggerShape, 'functionTrigger'>> & {
|
|
43
31
|
spaceId?: SpaceId;
|
|
44
|
-
triggerKind?:
|
|
32
|
+
triggerKind?: Trigger.Kind;
|
|
45
33
|
};
|
|
46
34
|
|
|
47
35
|
export const createTrigger = (props: CreateTriggerProps): TriggerShape => {
|
|
48
|
-
const functionTrigger =
|
|
36
|
+
const functionTrigger = Trigger.make({
|
|
49
37
|
enabled: true,
|
|
50
38
|
spec: createTriggerSpec(props),
|
|
51
39
|
});
|
|
52
40
|
return createShape<TriggerShape>({
|
|
53
41
|
type: 'trigger',
|
|
54
|
-
functionTrigger:
|
|
55
|
-
size: { width: 192, height: getHeight(
|
|
42
|
+
functionTrigger: Ref.make(functionTrigger),
|
|
43
|
+
size: { width: 192, height: getHeight(TriggerEvent.EmailEvent) },
|
|
56
44
|
...props,
|
|
57
45
|
});
|
|
58
46
|
};
|
|
@@ -60,22 +48,26 @@ export const createTrigger = (props: CreateTriggerProps): TriggerShape => {
|
|
|
60
48
|
export type TriggerComponentProps = ShapeComponentProps<TriggerShape>;
|
|
61
49
|
|
|
62
50
|
export const TriggerComponent = ({ shape }: TriggerComponentProps) => {
|
|
63
|
-
const space =
|
|
51
|
+
const [space] = useSpaces();
|
|
64
52
|
const functionTrigger = shape.functionTrigger?.target;
|
|
65
53
|
|
|
66
54
|
useEffect(() => {
|
|
67
55
|
if (functionTrigger && !functionTrigger.spec) {
|
|
68
|
-
|
|
56
|
+
Obj.update(functionTrigger, (functionTrigger) => {
|
|
57
|
+
functionTrigger.spec = createTriggerSpec({ triggerKind: 'email', spaceId: space?.id }) as Mutable<Trigger.Spec>;
|
|
58
|
+
});
|
|
69
59
|
}
|
|
70
60
|
}, [functionTrigger, functionTrigger?.spec]);
|
|
71
61
|
|
|
72
62
|
useEffect(() => {
|
|
73
|
-
shape.size.height = getHeight(getOutputSchema(functionTrigger?.spec?.kind ??
|
|
63
|
+
shape.size.height = getHeight(getOutputSchema(functionTrigger?.spec?.kind ?? 'email'));
|
|
74
64
|
}, [functionTrigger?.spec?.kind]);
|
|
75
65
|
|
|
76
|
-
const setKind = (kind:
|
|
66
|
+
const setKind = (kind: Trigger.Kind) => {
|
|
77
67
|
if (functionTrigger?.spec?.kind !== kind) {
|
|
78
|
-
functionTrigger
|
|
68
|
+
Obj.update(functionTrigger!, (obj) => {
|
|
69
|
+
obj.spec = createTriggerSpec({ triggerKind: kind, spaceId: space?.id }) as Mutable<Trigger.Spec>;
|
|
70
|
+
});
|
|
79
71
|
}
|
|
80
72
|
};
|
|
81
73
|
|
|
@@ -87,7 +79,7 @@ export const TriggerComponent = ({ shape }: TriggerComponentProps) => {
|
|
|
87
79
|
<FunctionBody
|
|
88
80
|
shape={shape}
|
|
89
81
|
status={
|
|
90
|
-
<TriggerKindSelect value={functionTrigger.spec?.kind} onValueChange={(kind) => setKind(kind as
|
|
82
|
+
<TriggerKindSelect value={functionTrigger.spec?.kind} onValueChange={(kind) => setKind(kind as Trigger.Kind)} />
|
|
91
83
|
}
|
|
92
84
|
inputSchema={VoidInput}
|
|
93
85
|
outputSchema={getOutputSchema(functionTrigger.spec!.kind!)}
|
|
@@ -99,12 +91,12 @@ export const TriggerComponent = ({ shape }: TriggerComponentProps) => {
|
|
|
99
91
|
const TriggerKindSelect = ({ value, onValueChange }: Pick<SelectRootProps, 'value' | 'onValueChange'>) => {
|
|
100
92
|
return (
|
|
101
93
|
<Select.Root value={value} onValueChange={onValueChange}>
|
|
102
|
-
<Select.TriggerButton variant='ghost' classNames='w-full
|
|
94
|
+
<Select.TriggerButton variant='ghost' classNames='w-full px-0!' />
|
|
103
95
|
<Select.Portal>
|
|
104
96
|
<Select.Content>
|
|
105
97
|
<Select.ScrollUpButton />
|
|
106
98
|
<Select.Viewport>
|
|
107
|
-
{
|
|
99
|
+
{Trigger.Kinds.map((kind) => (
|
|
108
100
|
<Select.Option key={kind} value={kind}>
|
|
109
101
|
{kind}
|
|
110
102
|
</Select.Option>
|
|
@@ -118,31 +110,31 @@ const TriggerKindSelect = ({ value, onValueChange }: Pick<SelectRootProps, 'valu
|
|
|
118
110
|
);
|
|
119
111
|
};
|
|
120
112
|
|
|
121
|
-
const createTriggerSpec = (props: { triggerKind?:
|
|
122
|
-
const kind = props.triggerKind ??
|
|
113
|
+
const createTriggerSpec = (props: { triggerKind?: Trigger.Kind; spaceId?: SpaceId }): Trigger.Spec => {
|
|
114
|
+
const kind = props.triggerKind ?? 'email';
|
|
123
115
|
switch (kind) {
|
|
124
|
-
case
|
|
125
|
-
return
|
|
126
|
-
case
|
|
127
|
-
return {
|
|
128
|
-
case
|
|
129
|
-
return
|
|
130
|
-
case
|
|
131
|
-
return
|
|
132
|
-
case
|
|
133
|
-
const dxn = new DXN(DXN.kind.QUEUE, ['data', props.spaceId ?? SpaceId.random(),
|
|
134
|
-
return
|
|
116
|
+
case 'timer':
|
|
117
|
+
return Trigger.specTimer('*/10 * * * * *');
|
|
118
|
+
case 'webhook':
|
|
119
|
+
return Trigger.specWebhook({ method: 'POST' });
|
|
120
|
+
case 'subscription':
|
|
121
|
+
return Trigger.specSubscription(Query.select(Filter.nothing()));
|
|
122
|
+
case 'email':
|
|
123
|
+
return Trigger.specEmail();
|
|
124
|
+
case 'queue': {
|
|
125
|
+
const dxn = new DXN(DXN.kind.QUEUE, ['data', props.spaceId ?? SpaceId.random(), Obj.ID.random()]).toString();
|
|
126
|
+
return Trigger.specQueue(dxn);
|
|
135
127
|
}
|
|
136
128
|
}
|
|
137
129
|
};
|
|
138
130
|
|
|
139
|
-
const getOutputSchema = (kind:
|
|
140
|
-
const kindToSchema: Record<
|
|
141
|
-
[
|
|
142
|
-
[
|
|
143
|
-
[
|
|
144
|
-
[
|
|
145
|
-
[
|
|
131
|
+
const getOutputSchema = (kind: Trigger.Kind) => {
|
|
132
|
+
const kindToSchema: Record<Trigger.Kind, Schema.Schema<any>> = {
|
|
133
|
+
['email']: TriggerEvent.EmailEvent,
|
|
134
|
+
['subscription']: TriggerEvent.SubscriptionEvent,
|
|
135
|
+
['timer']: TriggerEvent.TimerEvent,
|
|
136
|
+
['webhook']: TriggerEvent.WebhookEvent,
|
|
137
|
+
['queue']: TriggerEvent.QueueEvent,
|
|
146
138
|
};
|
|
147
139
|
return kindToSchema[kind];
|
|
148
140
|
};
|
|
@@ -154,9 +146,5 @@ export const triggerShape: ShapeDef<TriggerShape> = {
|
|
|
154
146
|
component: TriggerComponent,
|
|
155
147
|
createShape: createTrigger,
|
|
156
148
|
getAnchors: (shape) =>
|
|
157
|
-
createFunctionAnchors(
|
|
158
|
-
shape,
|
|
159
|
-
VoidInput,
|
|
160
|
-
getOutputSchema(shape.functionTrigger?.target?.spec?.kind ?? TriggerKind.Email),
|
|
161
|
-
),
|
|
149
|
+
createFunctionAnchors(shape, VoidInput, getOutputSchema(shape.functionTrigger?.target?.spec?.kind ?? 'email')),
|
|
162
150
|
};
|
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import React, {
|
|
5
|
+
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
|
-
<div className='grow text-sm truncate'>{debug ? shape.type : name ?? shape.text ?? title}</div>
|
|
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) => {
|
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import type * as Schema from 'effect/Schema';
|
|
6
|
+
import * as SchemaAST from 'effect/SchemaAST';
|
|
6
7
|
import React, { type JSX, useRef, useState } from 'react';
|
|
7
8
|
|
|
8
9
|
import { VoidInput, VoidOutput } from '@dxos/conductor';
|
|
9
10
|
import { useCanvasContext } from '@dxos/react-ui-canvas';
|
|
10
|
-
import { type
|
|
11
|
-
import {
|
|
11
|
+
import { type CanvasBoard, type Polygon } from '@dxos/react-ui-canvas-editor';
|
|
12
|
+
import { createAnchors, getParentShapeElement, rowHeight } from '@dxos/react-ui-canvas-editor';
|
|
12
13
|
|
|
13
14
|
import { Box, type BoxProps, footerHeight, headerHeight } from '../common';
|
|
14
15
|
import { createAnchorId, getProperties } from '../defs';
|
|
@@ -17,7 +18,7 @@ const bodyPadding = 8;
|
|
|
17
18
|
const expandedHeight = 200;
|
|
18
19
|
|
|
19
20
|
export type FunctionBodyProps = {
|
|
20
|
-
shape: Shape;
|
|
21
|
+
shape: CanvasBoard.Shape;
|
|
21
22
|
name?: string;
|
|
22
23
|
content?: JSX.Element;
|
|
23
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
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
|
+
import * as SchemaAST from 'effect/SchemaAST';
|
|
6
7
|
|
|
7
8
|
import { DEFAULT_INPUT, DEFAULT_OUTPUT } from '@dxos/conductor';
|
|
8
|
-
import {
|
|
9
|
+
import { Obj } from '@dxos/echo';
|
|
9
10
|
import { Polygon } from '@dxos/react-ui-canvas-editor';
|
|
10
11
|
import { type MakeOptional } from '@dxos/util';
|
|
11
12
|
|
|
@@ -36,7 +37,7 @@ export const ComputeShape = Schema.extend(
|
|
|
36
37
|
Polygon,
|
|
37
38
|
Schema.Struct({
|
|
38
39
|
// TODO(burdon): Rename computeNode?
|
|
39
|
-
node: Schema.optional(
|
|
40
|
+
node: Schema.optional(Obj.ID.annotations({ description: 'Compute node id' })),
|
|
40
41
|
}).pipe(Schema.mutable),
|
|
41
42
|
);
|
|
42
43
|
|
|
@@ -44,7 +45,7 @@ export type ComputeShape = Schema.Schema.Type<typeof ComputeShape>;
|
|
|
44
45
|
|
|
45
46
|
export const createShape = <S extends ComputeShape>({ id, ...rest }: CreateShapeProps<S> & { type: string }): S => {
|
|
46
47
|
return {
|
|
47
|
-
id: id ??
|
|
48
|
+
id: id ?? Obj.ID.random(),
|
|
48
49
|
...rest,
|
|
49
50
|
} as S;
|
|
50
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
|
@@ -2,15 +2,11 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { createSystemPrompt } from '@dxos/
|
|
6
|
-
import { ObjectId } from '@dxos/
|
|
7
|
-
import type { ServiceContainer } from '@dxos/functions';
|
|
8
|
-
import { DXN, SpaceId } from '@dxos/keys';
|
|
5
|
+
import { createSystemPrompt } from '@dxos/assistant';
|
|
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 }) => {
|
|
@@ -207,7 +198,7 @@ export const createArtifactCircuit = () => {
|
|
|
207
198
|
model.builder.call((builder) => {
|
|
208
199
|
const prompt = model.createNode(
|
|
209
200
|
createTemplate({
|
|
210
|
-
text: createSystemPrompt(),
|
|
201
|
+
text: createSystemPrompt({}),
|
|
211
202
|
...position({ x: -10, y: -5, width: 8, height: 18 }),
|
|
212
203
|
}),
|
|
213
204
|
);
|
|
@@ -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
|
|
@@ -262,7 +253,7 @@ export const createGptCircuit = (options: {
|
|
|
262
253
|
if (options.instructions) {
|
|
263
254
|
const prompt = model.createNode(
|
|
264
255
|
createTemplate({
|
|
265
|
-
text: createSystemPrompt(),
|
|
256
|
+
text: createSystemPrompt({}),
|
|
266
257
|
...position({ x: -18, y: -12, width: 8, height: 10 }),
|
|
267
258
|
}),
|
|
268
259
|
);
|