@dxos/plugin-automation 0.8.4-main.69d29f4 → 0.8.4-main.6fa680abb7
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/AutomationPanel-GH5TMGD6.mjs +11 -0
- package/dist/lib/browser/AutomationSettings-M6VFFEWK.mjs +37 -0
- package/dist/lib/browser/AutomationSettings-M6VFFEWK.mjs.map +7 -0
- package/dist/lib/browser/FunctionsContainer-R4ZMYSFJ.mjs +43 -0
- package/dist/lib/browser/FunctionsContainer-R4ZMYSFJ.mjs.map +7 -0
- package/dist/lib/browser/{FunctionsPanel-ZX4J75UM.mjs → FunctionsPanel-NMA4RYJL.mjs} +3 -3
- package/dist/lib/browser/FunctionsRegistry-TMKAEG5E.mjs +10 -0
- package/dist/lib/browser/TriggerSettings-56AIMOEC.mjs +11 -0
- package/dist/lib/browser/{app-graph-builder-LAQMEBMH.mjs → app-graph-builder-74ILZP25.mjs} +19 -20
- package/dist/lib/browser/app-graph-builder-74ILZP25.mjs.map +7 -0
- package/dist/lib/browser/{chunk-QW3EM35H.mjs → chunk-24ZULVVT.mjs} +60 -15
- package/dist/lib/browser/chunk-24ZULVVT.mjs.map +7 -0
- package/dist/lib/browser/{chunk-BFUIVUQH.mjs → chunk-75XLBFAG.mjs} +11 -16
- package/dist/lib/browser/chunk-75XLBFAG.mjs.map +7 -0
- package/dist/lib/browser/{chunk-YWLEY2FD.mjs → chunk-7HT7OLB5.mjs} +119 -50
- package/dist/lib/browser/chunk-7HT7OLB5.mjs.map +7 -0
- package/dist/lib/browser/{chunk-PZNBEKO5.mjs → chunk-EL64ZPPN.mjs} +2 -2
- package/dist/lib/browser/{chunk-PZNBEKO5.mjs.map → chunk-EL64ZPPN.mjs.map} +1 -1
- package/dist/lib/browser/{FunctionsContainer-6QLC7JP4.mjs → chunk-FUVAC5EC.mjs} +15 -48
- package/dist/lib/browser/chunk-FUVAC5EC.mjs.map +7 -0
- package/dist/lib/browser/{chunk-JOXPQ27I.mjs → chunk-GVHAETEQ.mjs} +7 -7
- package/dist/lib/browser/chunk-GVHAETEQ.mjs.map +7 -0
- package/dist/lib/browser/chunk-H2MV4XE6.mjs +31 -0
- package/dist/lib/browser/chunk-H2MV4XE6.mjs.map +7 -0
- package/dist/lib/browser/{chunk-RAF2FJST.mjs → chunk-OAZ2JYXV.mjs} +19 -12
- package/dist/lib/browser/chunk-OAZ2JYXV.mjs.map +7 -0
- package/dist/lib/browser/{chunk-BKFQBKYO.mjs → chunk-Z7F7X2C5.mjs} +2 -2
- package/dist/lib/browser/cli/index.mjs +62 -54
- package/dist/lib/browser/cli/index.mjs.map +3 -3
- package/dist/lib/browser/{compute-runtime-WTWLQ67J.mjs → compute-runtime-F3UMRKCL.mjs} +28 -18
- package/dist/lib/browser/compute-runtime-F3UMRKCL.mjs.map +7 -0
- package/dist/lib/browser/hooks/index.mjs +3 -3
- package/dist/lib/browser/index.mjs +26 -25
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{operation-resolver-Q3MWOR7K.mjs → operation-resolver-IRC2DZU7.mjs} +11 -9
- package/dist/lib/browser/operation-resolver-IRC2DZU7.mjs.map +7 -0
- package/dist/lib/browser/react-surface-RCVPEK2V.mjs +65 -0
- package/dist/lib/browser/react-surface-RCVPEK2V.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/{AutomationPanel-B7NAGDFA.mjs → AutomationPanel-7LW44A5O.mjs} +4 -4
- package/dist/lib/node-esm/AutomationPanel-7LW44A5O.mjs.map +7 -0
- package/dist/lib/node-esm/AutomationSettings-EYJ4YLYT.mjs +38 -0
- package/dist/lib/node-esm/AutomationSettings-EYJ4YLYT.mjs.map +7 -0
- package/dist/lib/node-esm/FunctionsContainer-GYRPQZM7.mjs +44 -0
- package/dist/lib/node-esm/FunctionsContainer-GYRPQZM7.mjs.map +7 -0
- package/dist/lib/node-esm/{FunctionsPanel-SS6GIVNU.mjs → FunctionsPanel-DCXXLSVP.mjs} +3 -3
- package/dist/lib/node-esm/FunctionsPanel-DCXXLSVP.mjs.map +7 -0
- package/dist/lib/node-esm/FunctionsRegistry-7WCHC64E.mjs +11 -0
- package/dist/lib/node-esm/FunctionsRegistry-7WCHC64E.mjs.map +7 -0
- package/dist/lib/node-esm/TriggerSettings-ONY5ZUKW.mjs +12 -0
- package/dist/lib/node-esm/TriggerSettings-ONY5ZUKW.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-4UCMXHYY.mjs → app-graph-builder-VDXPOWCH.mjs} +19 -20
- package/dist/lib/node-esm/app-graph-builder-VDXPOWCH.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HQLVREIX.mjs → chunk-2UF55HSG.mjs} +19 -12
- package/dist/lib/node-esm/chunk-2UF55HSG.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-2CKVH7JC.mjs → chunk-37CFAD4Y.mjs} +119 -50
- package/dist/lib/node-esm/chunk-37CFAD4Y.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-RX52VKI2.mjs → chunk-6B4WZRVH.mjs} +7 -7
- package/dist/lib/node-esm/chunk-6B4WZRVH.mjs.map +7 -0
- package/dist/lib/node-esm/{FunctionsContainer-J4O2ULWR.mjs → chunk-6JVB3IHW.mjs} +15 -48
- package/dist/lib/node-esm/chunk-6JVB3IHW.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-JVUE5PMI.mjs +32 -0
- package/dist/lib/node-esm/chunk-JVUE5PMI.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-KWKWOGS5.mjs → chunk-K7T2MVB7.mjs} +11 -16
- package/dist/lib/node-esm/chunk-K7T2MVB7.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-LJAXQ6CX.mjs → chunk-QUJ4MTMR.mjs} +60 -15
- package/dist/lib/node-esm/chunk-QUJ4MTMR.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-K7GCM342.mjs → chunk-R5YEWJCG.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-5FXNN3MV.mjs → chunk-WC5AT7B3.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-5FXNN3MV.mjs.map → chunk-WC5AT7B3.mjs.map} +1 -1
- package/dist/lib/node-esm/cli/index.mjs +62 -54
- package/dist/lib/node-esm/cli/index.mjs.map +3 -3
- package/dist/lib/node-esm/{compute-runtime-ZHROOBLY.mjs → compute-runtime-AMFVJMF2.mjs} +28 -18
- package/dist/lib/node-esm/compute-runtime-AMFVJMF2.mjs.map +7 -0
- package/dist/lib/node-esm/hooks/index.mjs +3 -3
- package/dist/lib/node-esm/index.mjs +26 -25
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{operation-resolver-R5GA4YNO.mjs → operation-resolver-CBLQHL4N.mjs} +11 -9
- package/dist/lib/node-esm/operation-resolver-CBLQHL4N.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-S6VZJCEZ.mjs → react-surface-X4ZKOBC3.mjs} +25 -25
- package/dist/lib/node-esm/react-surface-X4ZKOBC3.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +2 -2
- package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/compute-runtime/compute-runtime.d.ts +1 -1
- package/dist/types/src/capabilities/compute-runtime/compute-runtime.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +1 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
- package/dist/types/src/cli/commands/trigger/update/queue.d.ts.map +1 -1
- package/dist/types/src/cli/commands/trigger/util.d.ts +2 -2
- package/dist/types/src/cli/commands/trigger/util.d.ts.map +1 -1
- package/dist/types/src/cli/plugin.d.ts.map +1 -1
- package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +3 -4
- package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
- package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +1 -0
- package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
- package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
- package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts.map +1 -1
- package/dist/types/src/components/FunctionsRegistry/index.d.ts +3 -1
- package/dist/types/src/components/FunctionsRegistry/index.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +2 -0
- package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +3 -4
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/AutomationSettings/AutomationSettings.d.ts +4 -0
- package/dist/types/src/containers/AutomationSettings/AutomationSettings.d.ts.map +1 -0
- package/dist/types/src/containers/AutomationSettings/index.d.ts +3 -0
- package/dist/types/src/containers/AutomationSettings/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers/FunctionsContainer}/FunctionsContainer.d.ts +0 -1
- package/dist/types/src/containers/FunctionsContainer/FunctionsContainer.d.ts.map +1 -0
- package/dist/types/src/containers/FunctionsContainer/index.d.ts +3 -0
- package/dist/types/src/containers/FunctionsContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/TriggerSettings/TriggerSettings.d.ts.map +1 -0
- package/dist/types/src/containers/TriggerSettings/index.d.ts +3 -0
- package/dist/types/src/containers/TriggerSettings/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +5 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +2 -1
- package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +1 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/capabilities.d.ts +2 -2
- package/dist/types/src/types/capabilities.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +3 -3
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +50 -46
- package/src/AutomationPlugin.tsx +7 -6
- package/src/capabilities/app-graph-builder/app-graph-builder.ts +17 -15
- package/src/capabilities/compute-runtime/compute-runtime.ts +26 -13
- package/src/capabilities/operation-resolver/operation-resolver.ts +7 -6
- package/src/capabilities/react-surface/react-surface.tsx +16 -19
- package/src/cli/commands/trigger/create/queue.ts +4 -4
- package/src/cli/commands/trigger/create/subscription.ts +4 -4
- package/src/cli/commands/trigger/create/timer.ts +4 -4
- package/src/cli/commands/trigger/list.ts +2 -2
- package/src/cli/commands/trigger/remove.ts +2 -2
- package/src/cli/commands/trigger/update/queue.ts +5 -5
- package/src/cli/commands/trigger/update/subscription.ts +5 -5
- package/src/cli/commands/trigger/update/timer.ts +5 -5
- package/src/cli/commands/trigger/util.ts +34 -25
- package/src/cli/plugin.ts +3 -2
- package/src/components/AutomationPanel/AutomationPanel.stories.tsx +3 -3
- package/src/components/AutomationPanel/AutomationPanel.tsx +137 -69
- package/src/components/FunctionsPanel/FunctionsPanel.tsx +9 -11
- package/src/components/FunctionsRegistry/FunctionsRegistry.tsx +9 -10
- package/src/components/FunctionsRegistry/index.ts +4 -1
- package/src/components/TriggerEditor/FunctionInputEditor.tsx +13 -4
- package/src/components/TriggerEditor/SpecSelector.tsx +1 -1
- package/src/components/TriggerEditor/TriggerEditor.stories.tsx +46 -4
- package/src/components/TriggerEditor/TriggerEditor.tsx +37 -6
- package/src/components/index.ts +1 -2
- package/src/{components → containers/AutomationSettings}/AutomationSettings.tsx +8 -11
- package/src/containers/AutomationSettings/index.ts +7 -0
- package/src/{components → containers/FunctionsContainer}/FunctionsContainer.tsx +10 -13
- package/src/containers/FunctionsContainer/index.ts +7 -0
- package/src/containers/TriggerSettings/TriggerSettings.tsx +26 -0
- package/src/containers/TriggerSettings/index.ts +6 -0
- package/src/containers/index.ts +9 -0
- package/src/hooks/useComputeRuntimeCallback.ts +1 -1
- package/src/hooks/useTriggerRuntimeControls.ts +22 -8
- package/src/meta.ts +1 -1
- package/src/testing/test-functions.ts +5 -5
- package/src/translations.ts +2 -0
- package/src/types/capabilities.ts +3 -2
- package/src/types/events.ts +1 -1
- package/src/types/schema.ts +3 -3
- package/dist/lib/browser/AutomationPanel-FAS6ADCW.mjs +0 -11
- package/dist/lib/browser/AutomationSettings-XN2OIYWL.mjs +0 -56
- package/dist/lib/browser/AutomationSettings-XN2OIYWL.mjs.map +0 -7
- package/dist/lib/browser/FunctionsContainer-6QLC7JP4.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-LAQMEBMH.mjs.map +0 -7
- package/dist/lib/browser/chunk-54PANILA.mjs +0 -14
- package/dist/lib/browser/chunk-54PANILA.mjs.map +0 -7
- package/dist/lib/browser/chunk-BFUIVUQH.mjs.map +0 -7
- package/dist/lib/browser/chunk-JOXPQ27I.mjs.map +0 -7
- package/dist/lib/browser/chunk-QW3EM35H.mjs.map +0 -7
- package/dist/lib/browser/chunk-RAF2FJST.mjs.map +0 -7
- package/dist/lib/browser/chunk-YWLEY2FD.mjs.map +0 -7
- package/dist/lib/browser/compute-runtime-WTWLQ67J.mjs.map +0 -7
- package/dist/lib/browser/operation-resolver-Q3MWOR7K.mjs.map +0 -7
- package/dist/lib/browser/react-surface-EV3AC62F.mjs +0 -65
- package/dist/lib/browser/react-surface-EV3AC62F.mjs.map +0 -7
- package/dist/lib/node-esm/AutomationSettings-M5PMZJ6P.mjs +0 -57
- package/dist/lib/node-esm/AutomationSettings-M5PMZJ6P.mjs.map +0 -7
- package/dist/lib/node-esm/FunctionsContainer-J4O2ULWR.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-4UCMXHYY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2CKVH7JC.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-7QRUPEHH.mjs +0 -16
- package/dist/lib/node-esm/chunk-7QRUPEHH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HQLVREIX.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-KWKWOGS5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-LJAXQ6CX.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-RX52VKI2.mjs.map +0 -7
- package/dist/lib/node-esm/compute-runtime-ZHROOBLY.mjs.map +0 -7
- package/dist/lib/node-esm/operation-resolver-R5GA4YNO.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-S6VZJCEZ.mjs.map +0 -7
- package/dist/types/src/components/AutomationSettings.d.ts +0 -5
- package/dist/types/src/components/AutomationSettings.d.ts.map +0 -1
- package/dist/types/src/components/FunctionsContainer.d.ts.map +0 -1
- package/dist/types/src/components/TriggerSettings.d.ts.map +0 -1
- package/src/components/TriggerSettings.tsx +0 -25
- /package/dist/lib/browser/{AutomationPanel-FAS6ADCW.mjs.map → AutomationPanel-GH5TMGD6.mjs.map} +0 -0
- /package/dist/lib/browser/{FunctionsPanel-ZX4J75UM.mjs.map → FunctionsPanel-NMA4RYJL.mjs.map} +0 -0
- /package/dist/lib/{node-esm/AutomationPanel-B7NAGDFA.mjs.map → browser/FunctionsRegistry-TMKAEG5E.mjs.map} +0 -0
- /package/dist/lib/{node-esm/FunctionsPanel-SS6GIVNU.mjs.map → browser/TriggerSettings-56AIMOEC.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-BKFQBKYO.mjs.map → chunk-Z7F7X2C5.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-K7GCM342.mjs.map → chunk-R5YEWJCG.mjs.map} +0 -0
- /package/dist/types/src/{components → containers/TriggerSettings}/TriggerSettings.d.ts +0 -0
|
@@ -10,15 +10,14 @@ import { Function } from '@dxos/functions';
|
|
|
10
10
|
import { getDeployedFunctions } from '@dxos/functions-runtime/edge';
|
|
11
11
|
import { useClient } from '@dxos/react-client';
|
|
12
12
|
import { Filter, Query, type Space, useQuery } from '@dxos/react-client/echo';
|
|
13
|
-
import { useAsyncEffect } from '@dxos/react-ui';
|
|
14
|
-
import {
|
|
15
|
-
import { controlItemClasses } from '@dxos/react-ui-form';
|
|
13
|
+
import { IconButton, useAsyncEffect, useTranslation } from '@dxos/react-ui';
|
|
14
|
+
import { Settings } from '@dxos/react-ui-form';
|
|
16
15
|
import { List } from '@dxos/react-ui-list';
|
|
17
16
|
import { ghostHover, mx } from '@dxos/ui-theme';
|
|
18
17
|
|
|
19
18
|
import { meta } from '../../meta';
|
|
20
19
|
|
|
21
|
-
const grid = 'grid grid-cols-[1fr_1fr_auto] min-
|
|
20
|
+
const grid = 'grid grid-cols-[1fr_1fr_auto] min-h-[2.5rem]';
|
|
22
21
|
|
|
23
22
|
type FunctionsRegistryProps = {
|
|
24
23
|
space: Space;
|
|
@@ -64,16 +63,16 @@ export const FunctionsRegistry = ({ space }: FunctionsRegistryProps) => {
|
|
|
64
63
|
);
|
|
65
64
|
|
|
66
65
|
return (
|
|
67
|
-
<
|
|
66
|
+
<Settings.Container>
|
|
68
67
|
{functions.length > 0 && (
|
|
69
68
|
<List.Root<Function.Function> items={functions} isItem={Schema.is(Function.Function)} getId={(func) => func.id}>
|
|
70
69
|
{({ items }) => (
|
|
71
|
-
<div role='list' className='flex flex-col
|
|
70
|
+
<div role='list' className='flex flex-col w-full'>
|
|
72
71
|
{items?.map((func) => (
|
|
73
72
|
<List.Item<Function.Function>
|
|
74
73
|
key={func.id}
|
|
75
74
|
item={func}
|
|
76
|
-
classNames={mx(grid, ghostHover, 'items-center', '
|
|
75
|
+
classNames={mx(grid, ghostHover, 'items-center', 'px-2', 'min-h-[3rem]')}
|
|
77
76
|
>
|
|
78
77
|
<div className='flex flex-col truncate'>
|
|
79
78
|
<List.ItemTitle classNames='truncate'>{func.name}</List.ItemTitle>
|
|
@@ -103,9 +102,9 @@ export const FunctionsRegistry = ({ space }: FunctionsRegistryProps) => {
|
|
|
103
102
|
)}
|
|
104
103
|
|
|
105
104
|
{functions.length === 0 && !loading && (
|
|
106
|
-
<div className='text-center
|
|
105
|
+
<div className='text-center py-4 text-gray-500'>{t('no functions found')}</div>
|
|
107
106
|
)}
|
|
108
|
-
{loading && <div className='text-center
|
|
109
|
-
</
|
|
107
|
+
{loading && <div className='text-center py-4 text-gray-500'>{t('loading functions')}</div>}
|
|
108
|
+
</Settings.Container>
|
|
110
109
|
);
|
|
111
110
|
};
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type * as SchemaAST from 'effect/SchemaAST';
|
|
6
6
|
import React, { useCallback, useMemo } from 'react';
|
|
7
7
|
|
|
8
|
-
import { type Database,
|
|
8
|
+
import { type Database, JsonSchema, Obj, Ref } from '@dxos/echo';
|
|
9
9
|
import { type JsonPath } from '@dxos/echo/internal';
|
|
10
10
|
import { type Function } from '@dxos/functions';
|
|
11
11
|
import { useOnTransition, useTranslation } from '@dxos/react-ui';
|
|
@@ -48,9 +48,12 @@ export const FunctionInputEditor = ({ type, functions, db, getValue, onValueChan
|
|
|
48
48
|
);
|
|
49
49
|
|
|
50
50
|
const inputSchema = useMemo(() => selectedFunction?.inputSchema, [selectedFunction]);
|
|
51
|
-
const effectSchema = useMemo(() => (inputSchema ?
|
|
51
|
+
const effectSchema = useMemo(() => (inputSchema ? JsonSchema.toEffectSchema(inputSchema) : undefined), [inputSchema]);
|
|
52
52
|
const propertyCount = inputSchema?.properties ? Object.keys(inputSchema.properties).length : 0;
|
|
53
|
-
const
|
|
53
|
+
const defaultValues = useMemo(() => {
|
|
54
|
+
const raw = getValue() ?? {};
|
|
55
|
+
return Obj.isObject(raw) ? { ...Obj.getSnapshot(raw) } : { ...raw };
|
|
56
|
+
}, [getValue]);
|
|
54
57
|
|
|
55
58
|
const handleValuesChanged = useCallback<NonNullable<FormRootProps['onValuesChanged']>>(
|
|
56
59
|
(values) => {
|
|
@@ -66,7 +69,13 @@ export const FunctionInputEditor = ({ type, functions, db, getValue, onValueChan
|
|
|
66
69
|
return (
|
|
67
70
|
<>
|
|
68
71
|
<Form.Label label={t('function parameters label')} asChild />
|
|
69
|
-
<Form.Root
|
|
72
|
+
<Form.Root
|
|
73
|
+
key={selectedFunction.id}
|
|
74
|
+
schema={effectSchema}
|
|
75
|
+
defaultValues={defaultValues}
|
|
76
|
+
db={db}
|
|
77
|
+
onValuesChanged={handleValuesChanged}
|
|
78
|
+
>
|
|
70
79
|
<Form.FieldSet />
|
|
71
80
|
</Form.Root>
|
|
72
81
|
</>
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
6
|
import React, { useState } from 'react';
|
|
7
|
+
import { expect, userEvent, within } from 'storybook/test';
|
|
7
8
|
|
|
8
9
|
import { Filter, Obj, Ref, Tag, Type } from '@dxos/echo';
|
|
9
10
|
import { Function, Trigger } from '@dxos/functions';
|
|
@@ -14,7 +15,7 @@ import { TestSchema, useClientStory, withClientProvider } from '@dxos/react-clie
|
|
|
14
15
|
import { useAsyncEffect } from '@dxos/react-ui';
|
|
15
16
|
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
16
17
|
import { translations as formTranslations } from '@dxos/react-ui-form';
|
|
17
|
-
import { Employer, Organization, Person,
|
|
18
|
+
import { Employer, Organization, Person, Pipeline } from '@dxos/types';
|
|
18
19
|
|
|
19
20
|
import { functions } from '../../testing';
|
|
20
21
|
import { translations } from '../../translations';
|
|
@@ -25,7 +26,7 @@ const types = [
|
|
|
25
26
|
// TODO(burdon): Get label from annotation.
|
|
26
27
|
{ value: Organization.Organization.typename, label: 'Organization' },
|
|
27
28
|
{ value: Person.Person.typename, label: 'Person' },
|
|
28
|
-
{ value: Type.getTypename(
|
|
29
|
+
{ value: Type.getTypename(Pipeline.Pipeline), label: 'Project' },
|
|
29
30
|
{ value: Employer.Employer.typename, label: 'Employer' },
|
|
30
31
|
];
|
|
31
32
|
|
|
@@ -72,11 +73,11 @@ const DefaultStory = (props: Partial<TriggerEditorProps>) => {
|
|
|
72
73
|
};
|
|
73
74
|
|
|
74
75
|
const meta = {
|
|
75
|
-
title: 'plugins/plugin-automation/TriggerEditor',
|
|
76
|
+
title: 'plugins/plugin-automation/components/TriggerEditor',
|
|
76
77
|
component: TriggerEditor as any,
|
|
77
78
|
render: DefaultStory,
|
|
78
79
|
decorators: [
|
|
79
|
-
withTheme,
|
|
80
|
+
withTheme(),
|
|
80
81
|
withLayout({ layout: 'column' }),
|
|
81
82
|
withClientProvider({
|
|
82
83
|
createIdentity: true,
|
|
@@ -122,3 +123,44 @@ export const ReadonlySpec: Story = {
|
|
|
122
123
|
readonlySpec: true,
|
|
123
124
|
},
|
|
124
125
|
};
|
|
126
|
+
|
|
127
|
+
export const Spec: Story = {
|
|
128
|
+
play: async ({ canvasElement }) => {
|
|
129
|
+
const canvas = within(canvasElement);
|
|
130
|
+
const webhookText = await canvas.findByText('Webhook', {}, { timeout: 10_000 });
|
|
131
|
+
const combobox = webhookText.closest('[role="combobox"]') as HTMLElement;
|
|
132
|
+
await expect(combobox).not.toBeDisabled();
|
|
133
|
+
|
|
134
|
+
// Helper to switch to a kind via keyboard.
|
|
135
|
+
// TODO(wittjosiah): Radix Select in popper mode doesn't close on click.
|
|
136
|
+
// Use keyboard navigation: open, type first letter to jump, Enter to select.
|
|
137
|
+
const selectKind = async (combobox: HTMLElement, firstLetter: string) => {
|
|
138
|
+
combobox.focus();
|
|
139
|
+
await userEvent.keyboard('{Enter}');
|
|
140
|
+
await userEvent.keyboard(firstLetter);
|
|
141
|
+
await userEvent.keyboard('{Enter}');
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
// Timer — should show "Cron" field.
|
|
145
|
+
await selectKind(combobox, 't');
|
|
146
|
+
await expect(canvas.findByLabelText('Cron')).resolves.toBeInTheDocument();
|
|
147
|
+
|
|
148
|
+
// Email — no extra fields; Cron should be gone.
|
|
149
|
+
await selectKind(combobox, 'e');
|
|
150
|
+
await expect(combobox).not.toBeDisabled();
|
|
151
|
+
await expect(canvas.queryByLabelText('Cron')).not.toBeInTheDocument();
|
|
152
|
+
|
|
153
|
+
// Webhook — should show "Method" field.
|
|
154
|
+
await selectKind(combobox, 'w');
|
|
155
|
+
await expect(canvas.findByLabelText('Method')).resolves.toBeInTheDocument();
|
|
156
|
+
|
|
157
|
+
// Subscription — should show query editor.
|
|
158
|
+
await selectKind(combobox, 's');
|
|
159
|
+
await expect(combobox).not.toBeDisabled();
|
|
160
|
+
await expect(canvas.queryByLabelText('Method')).not.toBeInTheDocument();
|
|
161
|
+
|
|
162
|
+
// Queue — should show DXN field (the queue address). DXN is a combobox, not an input, so use getByText.
|
|
163
|
+
await selectKind(combobox, 'q');
|
|
164
|
+
await expect(canvas.findByText('DXN')).resolves.toBeInTheDocument();
|
|
165
|
+
},
|
|
166
|
+
};
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import React, { useCallback, useMemo } from 'react';
|
|
6
6
|
|
|
7
7
|
import { ComputeGraph } from '@dxos/conductor';
|
|
8
|
-
import { DXN, type Database, type Query } from '@dxos/echo';
|
|
8
|
+
import { DXN, type Database, Entity, Feed, Obj, type Query } from '@dxos/echo';
|
|
9
9
|
import { Function, Script, Trigger } from '@dxos/functions';
|
|
10
10
|
import { Filter, Ref, useQuery } from '@dxos/react-client/echo';
|
|
11
11
|
import { Input } from '@dxos/react-ui';
|
|
@@ -43,13 +43,28 @@ export const TriggerEditor = ({ db, types, tags, readonlySpec, trigger, ...formP
|
|
|
43
43
|
readonlySpec,
|
|
44
44
|
});
|
|
45
45
|
|
|
46
|
+
const handleValuesChanged = useCallback(
|
|
47
|
+
(newValues: Partial<TriggerFormSchema>) => {
|
|
48
|
+
Obj.change(trigger, (t) => {
|
|
49
|
+
Object.assign(t, newValues);
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
[trigger],
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
const defaultValues = useMemo(() => {
|
|
56
|
+
const { id: _, ...values } = trigger;
|
|
57
|
+
return values;
|
|
58
|
+
}, [trigger]);
|
|
59
|
+
|
|
46
60
|
return (
|
|
47
61
|
<Form.Root<TriggerFormSchema>
|
|
48
62
|
{...formProps}
|
|
49
63
|
schema={omitId(Trigger.Trigger)}
|
|
50
|
-
|
|
64
|
+
defaultValues={defaultValues}
|
|
51
65
|
db={db}
|
|
52
66
|
fieldMap={fieldMap}
|
|
67
|
+
onValuesChanged={handleValuesChanged}
|
|
53
68
|
>
|
|
54
69
|
<Form.Viewport>
|
|
55
70
|
<Form.Content>
|
|
@@ -70,6 +85,7 @@ const useCustomInputs = ({ db, readonlySpec, types, tags }: UseCustomInputsProps
|
|
|
70
85
|
const functions = useQuery(db, Filter.type(Function.Function));
|
|
71
86
|
const workflows = useQuery(db, Filter.type(ComputeGraph));
|
|
72
87
|
const scripts = useQuery(db, Filter.type(Script.Script));
|
|
88
|
+
const feeds = useQuery(db, Filter.type(Feed.Feed));
|
|
73
89
|
|
|
74
90
|
return useMemo(
|
|
75
91
|
(): FormFieldMap => ({
|
|
@@ -105,11 +121,14 @@ const useCustomInputs = ({ db, readonlySpec, types, tags }: UseCustomInputsProps
|
|
|
105
121
|
},
|
|
106
122
|
|
|
107
123
|
// Spec selector.
|
|
108
|
-
|
|
124
|
+
'spec.kind': (props) => <SpecSelector {...props} readonly={readonlySpec} />,
|
|
125
|
+
|
|
126
|
+
// Queue feed selector with parent labels.
|
|
127
|
+
'spec.queue': (props) => <SelectField {...props} options={getFeedQueueOptions(feeds)} />,
|
|
109
128
|
|
|
110
129
|
// TODO(wittjosiah): Copied from ViewEditor.
|
|
111
130
|
// Query input editor.
|
|
112
|
-
|
|
131
|
+
'spec.query': (props) => {
|
|
113
132
|
const handleChange = useCallback(
|
|
114
133
|
(query: Query.Any) => props.onValueChange(props.type, { ast: query.ast }),
|
|
115
134
|
[props.type, props.onValueChange],
|
|
@@ -124,9 +143,9 @@ const useCustomInputs = ({ db, readonlySpec, types, tags }: UseCustomInputsProps
|
|
|
124
143
|
},
|
|
125
144
|
|
|
126
145
|
// Function input editor.
|
|
127
|
-
|
|
146
|
+
input: (props) => <FunctionInputEditor {...props} functions={functions} db={db} />,
|
|
128
147
|
}),
|
|
129
|
-
[workflows, scripts, functions, readonlySpec],
|
|
148
|
+
[workflows, scripts, functions, feeds, readonlySpec],
|
|
130
149
|
);
|
|
131
150
|
};
|
|
132
151
|
|
|
@@ -138,3 +157,15 @@ const getFunctionOptions = (scripts: Script.Script[], functions: Function.Functi
|
|
|
138
157
|
const getLabel = (fn: Function.Function) => scripts.find((s) => fn.source?.target?.id === s.id)?.name ?? fn.name;
|
|
139
158
|
return functions.map((fn) => ({ label: getLabel(fn), value: `dxn:echo:@:${fn.id}` }));
|
|
140
159
|
};
|
|
160
|
+
|
|
161
|
+
const getFeedQueueOptions = (feeds: Feed.Feed[]) => {
|
|
162
|
+
return feeds.flatMap((feed) => {
|
|
163
|
+
const queueDxn = Feed.getQueueDxn(feed);
|
|
164
|
+
if (!queueDxn) {
|
|
165
|
+
return [];
|
|
166
|
+
}
|
|
167
|
+
const parent = Obj.getParent(feed);
|
|
168
|
+
const label = parent ? Entity.getLabel(parent) : Entity.getLabel(feed);
|
|
169
|
+
return [{ label: label ?? feed.id, value: queueDxn.toString() }];
|
|
170
|
+
});
|
|
171
|
+
};
|
package/src/components/index.ts
CHANGED
|
@@ -7,6 +7,5 @@ import { lazy } from 'react';
|
|
|
7
7
|
export * from './TriggerEditor';
|
|
8
8
|
|
|
9
9
|
export const AutomationPanel = lazy(() => import('./AutomationPanel'));
|
|
10
|
-
export const AutomationSettings = lazy(() => import('./AutomationSettings'));
|
|
11
|
-
export const FunctionsContainer = lazy(() => import('./FunctionsContainer'));
|
|
12
10
|
export const FunctionsPanel = lazy(() => import('./FunctionsPanel'));
|
|
11
|
+
export const FunctionsRegistry = lazy(() => import('./FunctionsRegistry'));
|
|
@@ -5,26 +5,23 @@
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
7
|
import { useTranslation } from '@dxos/react-ui';
|
|
8
|
-
import {
|
|
8
|
+
import { Settings } from '@dxos/react-ui-form';
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
import {
|
|
13
|
-
import { TriggersSettings } from './TriggerSettings';
|
|
10
|
+
import { AutomationPanel, type AutomationPanelProps } from '../../components/AutomationPanel';
|
|
11
|
+
import { meta } from '../../meta';
|
|
12
|
+
import { TriggersSettings } from '../TriggerSettings';
|
|
14
13
|
|
|
15
14
|
export const AutomationSettings = (props: AutomationPanelProps) => {
|
|
16
15
|
const { t } = useTranslation(meta.id);
|
|
17
16
|
return (
|
|
18
|
-
<
|
|
19
|
-
<
|
|
17
|
+
<Settings.Root>
|
|
18
|
+
<Settings.Section
|
|
20
19
|
title={t('automation verbose label', { ns: meta.id })}
|
|
21
20
|
description={t('automation description', { ns: meta.id })}
|
|
22
21
|
>
|
|
23
22
|
<AutomationPanel {...props} />
|
|
24
23
|
<TriggersSettings db={props.space.db} />
|
|
25
|
-
</
|
|
26
|
-
</
|
|
24
|
+
</Settings.Section>
|
|
25
|
+
</Settings.Root>
|
|
27
26
|
);
|
|
28
27
|
};
|
|
29
|
-
|
|
30
|
-
export default AutomationSettings;
|
|
@@ -6,31 +6,28 @@ import React from 'react';
|
|
|
6
6
|
|
|
7
7
|
import { type Space } from '@dxos/react-client/echo';
|
|
8
8
|
import { useTranslation } from '@dxos/react-ui';
|
|
9
|
-
import {
|
|
9
|
+
import { Settings } from '@dxos/react-ui-form';
|
|
10
10
|
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
import {
|
|
14
|
-
import { FunctionsRegistry } from './FunctionsRegistry';
|
|
11
|
+
import { FunctionsPanel } from '../../components/FunctionsPanel';
|
|
12
|
+
import { FunctionsRegistry } from '../../components/FunctionsRegistry';
|
|
13
|
+
import { meta } from '../../meta';
|
|
15
14
|
|
|
16
15
|
export const FunctionsContainer = ({ space }: { space: Space }) => {
|
|
17
16
|
const { t } = useTranslation(meta.id);
|
|
18
17
|
return (
|
|
19
|
-
<
|
|
20
|
-
<
|
|
18
|
+
<Settings.Root>
|
|
19
|
+
<Settings.Section
|
|
21
20
|
title={t('functions verbose label', { ns: meta.id })}
|
|
22
21
|
description={t('functions description', { ns: meta.id })}
|
|
23
22
|
>
|
|
24
23
|
<FunctionsPanel space={space} />
|
|
25
|
-
</
|
|
26
|
-
<
|
|
24
|
+
</Settings.Section>
|
|
25
|
+
<Settings.Section
|
|
27
26
|
title={t('functions registry verbose label', { ns: meta.id })}
|
|
28
27
|
description={t('functions registry description', { ns: meta.id })}
|
|
29
28
|
>
|
|
30
29
|
<FunctionsRegistry space={space} />
|
|
31
|
-
</
|
|
32
|
-
</
|
|
30
|
+
</Settings.Section>
|
|
31
|
+
</Settings.Root>
|
|
33
32
|
);
|
|
34
33
|
};
|
|
35
|
-
|
|
36
|
-
export default FunctionsContainer;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React from 'react';
|
|
6
|
+
|
|
7
|
+
import { type Database } from '@dxos/echo';
|
|
8
|
+
import { Input, useTranslation } from '@dxos/react-ui';
|
|
9
|
+
import { Settings } from '@dxos/react-ui-form';
|
|
10
|
+
|
|
11
|
+
import { useTriggerRuntimeControls } from '../../hooks';
|
|
12
|
+
import { meta } from '../../meta';
|
|
13
|
+
|
|
14
|
+
export const TriggersSettings = ({ db }: { db: Database.Database }) => {
|
|
15
|
+
const { state, start, stop } = useTriggerRuntimeControls(db);
|
|
16
|
+
const isRunning = state?.enabled ?? false;
|
|
17
|
+
const { t } = useTranslation(meta.id);
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<div className='grid grid-cols-1 md:grid-cols-[1fr_min-content]'>
|
|
21
|
+
<Settings.ItemInput title={t('runtime label')} description={t('runtime description')}>
|
|
22
|
+
<Input.Switch classNames='justify-self-end' checked={isRunning} onCheckedChange={isRunning ? stop : start} />
|
|
23
|
+
</Settings.ItemInput>
|
|
24
|
+
</div>
|
|
25
|
+
);
|
|
26
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type ComponentType, lazy } from 'react';
|
|
6
|
+
|
|
7
|
+
export const AutomationSettings: ComponentType<any> = lazy(() => import('./AutomationSettings'));
|
|
8
|
+
export const FunctionsContainer: ComponentType<any> = lazy(() => import('./FunctionsContainer'));
|
|
9
|
+
export const TriggerSettings: ComponentType<any> = lazy(() => import('./TriggerSettings'));
|
|
@@ -7,7 +7,7 @@ import * as Effect from 'effect/Effect';
|
|
|
7
7
|
import * as Exit from 'effect/Exit';
|
|
8
8
|
import { type DependencyList, useCallback } from 'react';
|
|
9
9
|
|
|
10
|
-
import { useCapability } from '@dxos/app-framework/
|
|
10
|
+
import { useCapability } from '@dxos/app-framework/ui';
|
|
11
11
|
import { type Key } from '@dxos/echo';
|
|
12
12
|
import { type FunctionDefinition, FunctionInvocationService, TracingService } from '@dxos/functions';
|
|
13
13
|
import { log } from '@dxos/log';
|
|
@@ -2,19 +2,23 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import { Atom, useAtomValue } from '@effect-atom/atom-react';
|
|
6
|
+
import type * as Context from 'effect/Context';
|
|
5
7
|
import * as Effect from 'effect/Effect';
|
|
8
|
+
import { useEffect, useState } from 'react';
|
|
6
9
|
|
|
7
10
|
import { type Database, Filter } from '@dxos/echo';
|
|
8
11
|
import { Trigger } from '@dxos/functions';
|
|
9
|
-
import { TriggerDispatcher } from '@dxos/functions-runtime';
|
|
12
|
+
import { TriggerDispatcher, type TriggerDispatcherState } from '@dxos/functions-runtime';
|
|
10
13
|
import { useQuery } from '@dxos/react-client/echo';
|
|
11
|
-
import { useAsyncState } from '@dxos/react-ui';
|
|
12
14
|
|
|
13
15
|
import { useComputeRuntimeCallback } from './useComputeRuntimeCallback';
|
|
14
16
|
|
|
15
17
|
interface TriggerRuntimeControls {
|
|
16
18
|
triggers: Trigger.Trigger[];
|
|
17
|
-
|
|
19
|
+
|
|
20
|
+
state: TriggerDispatcherState | undefined;
|
|
21
|
+
|
|
18
22
|
start: () => void;
|
|
19
23
|
stop: () => void;
|
|
20
24
|
}
|
|
@@ -22,16 +26,27 @@ interface TriggerRuntimeControls {
|
|
|
22
26
|
export const useTriggerRuntimeControls = (db: Database.Database | undefined): TriggerRuntimeControls => {
|
|
23
27
|
const triggers = useQuery(db, Filter.type(Trigger.Trigger));
|
|
24
28
|
|
|
25
|
-
const [
|
|
26
|
-
|
|
29
|
+
const [dispatcher, setDispatcher] = useState<Context.Tag.Service<TriggerDispatcher> | undefined>(undefined);
|
|
30
|
+
|
|
31
|
+
const init = useComputeRuntimeCallback(
|
|
32
|
+
db?.spaceId,
|
|
33
|
+
Effect.fnUntraced(function* () {
|
|
34
|
+
const dispatcher = yield* TriggerDispatcher;
|
|
35
|
+
setDispatcher(dispatcher);
|
|
36
|
+
}),
|
|
27
37
|
);
|
|
28
38
|
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
void init();
|
|
41
|
+
}, []);
|
|
42
|
+
|
|
43
|
+
const state = useAtomValue(dispatcher?.state ?? Atom.make(undefined));
|
|
44
|
+
|
|
29
45
|
const start = useComputeRuntimeCallback(
|
|
30
46
|
db?.spaceId,
|
|
31
47
|
Effect.fnUntraced(function* () {
|
|
32
48
|
const dispatcher = yield* TriggerDispatcher;
|
|
33
49
|
yield* dispatcher.start();
|
|
34
|
-
setIsRunningState(true);
|
|
35
50
|
}),
|
|
36
51
|
);
|
|
37
52
|
|
|
@@ -40,13 +55,12 @@ export const useTriggerRuntimeControls = (db: Database.Database | undefined): Tr
|
|
|
40
55
|
Effect.fnUntraced(function* () {
|
|
41
56
|
const dispatcher = yield* TriggerDispatcher;
|
|
42
57
|
yield* dispatcher.stop();
|
|
43
|
-
setIsRunningState(false);
|
|
44
58
|
}),
|
|
45
59
|
);
|
|
46
60
|
|
|
47
61
|
return {
|
|
48
62
|
triggers,
|
|
49
|
-
|
|
63
|
+
state,
|
|
50
64
|
start: () => void start(),
|
|
51
65
|
stop: () => void stop(),
|
|
52
66
|
};
|
package/src/meta.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { type Plugin } from '@dxos/app-framework';
|
|
|
6
6
|
import { trim } from '@dxos/util';
|
|
7
7
|
|
|
8
8
|
export const meta: Plugin.Meta = {
|
|
9
|
-
id: 'dxos.
|
|
9
|
+
id: 'org.dxos.plugin.automation',
|
|
10
10
|
name: 'Automation',
|
|
11
11
|
description: trim`
|
|
12
12
|
Workflow automation engine that triggers custom actions based on object events and conditions.
|
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
import * as Schema from 'effect/Schema';
|
|
6
6
|
|
|
7
7
|
import { TestSchema } from '@dxos/client/testing';
|
|
8
|
-
import {
|
|
8
|
+
import { JsonSchema, Ref } from '@dxos/echo';
|
|
9
9
|
|
|
10
10
|
export const functions = [
|
|
11
11
|
{
|
|
12
12
|
name: 'example.com/function/chess',
|
|
13
13
|
version: '0.1.0',
|
|
14
|
-
inputSchema:
|
|
14
|
+
inputSchema: JsonSchema.toJsonSchema(
|
|
15
15
|
Schema.Struct({
|
|
16
16
|
level: Schema.Number.annotations({
|
|
17
17
|
title: 'Level',
|
|
@@ -23,7 +23,7 @@ export const functions = [
|
|
|
23
23
|
name: 'example.com/function/forex',
|
|
24
24
|
version: '0.1.0',
|
|
25
25
|
binding: 'FOREX',
|
|
26
|
-
inputSchema:
|
|
26
|
+
inputSchema: JsonSchema.toJsonSchema(
|
|
27
27
|
Schema.Struct({
|
|
28
28
|
from: Schema.String.annotations({ title: 'Currency from' }),
|
|
29
29
|
to: Schema.String.annotations({ title: 'Currency to' }),
|
|
@@ -33,9 +33,9 @@ export const functions = [
|
|
|
33
33
|
{
|
|
34
34
|
name: 'example.com/function/ping-contact',
|
|
35
35
|
version: '0.0.1',
|
|
36
|
-
inputSchema:
|
|
36
|
+
inputSchema: JsonSchema.toJsonSchema(
|
|
37
37
|
Schema.Struct({
|
|
38
|
-
contact:
|
|
38
|
+
contact: Ref.Ref(TestSchema.ContactType).annotations({ title: 'Contact' }),
|
|
39
39
|
}),
|
|
40
40
|
),
|
|
41
41
|
},
|
package/src/translations.ts
CHANGED
|
@@ -33,6 +33,8 @@ export const translations = [
|
|
|
33
33
|
'function parameters label': 'Function parameters',
|
|
34
34
|
|
|
35
35
|
'trigger editor title': 'Configure Trigger',
|
|
36
|
+
'trigger editor description':
|
|
37
|
+
'Triggers are used to run functions at specific times or when specific events occur.',
|
|
36
38
|
'new trigger label': 'Add Trigger',
|
|
37
39
|
'trigger type timer': 'Timer',
|
|
38
40
|
'trigger type webhook': 'Webhook',
|
|
@@ -6,7 +6,7 @@ import type * as ManagedRuntime from 'effect/ManagedRuntime';
|
|
|
6
6
|
|
|
7
7
|
import { type AiService, type ToolExecutionService, type ToolResolverService } from '@dxos/ai';
|
|
8
8
|
import { Capability } from '@dxos/app-framework';
|
|
9
|
-
import { type Database } from '@dxos/echo';
|
|
9
|
+
import { type Database, type Feed } from '@dxos/echo';
|
|
10
10
|
import type { CredentialsService, FunctionInvocationService, QueueService, TracingService } from '@dxos/functions';
|
|
11
11
|
import type { TriggerDispatcher, TriggerStateStore } from '@dxos/functions-runtime';
|
|
12
12
|
import type { SpaceId } from '@dxos/keys';
|
|
@@ -22,6 +22,7 @@ export namespace AutomationCapabilities {
|
|
|
22
22
|
| TriggerStateStore
|
|
23
23
|
| AiService.AiService
|
|
24
24
|
| Database.Service
|
|
25
|
+
| Feed.Service
|
|
25
26
|
| QueueService
|
|
26
27
|
| CredentialsService
|
|
27
28
|
| FunctionInvocationService
|
|
@@ -38,5 +39,5 @@ export namespace AutomationCapabilities {
|
|
|
38
39
|
/**
|
|
39
40
|
* Runtime for executing agents, functions, and triggers.
|
|
40
41
|
*/
|
|
41
|
-
export const ComputeRuntime = Capability.make<ComputeRuntimeProvider>(`${meta.id}
|
|
42
|
+
export const ComputeRuntime = Capability.make<ComputeRuntimeProvider>(`${meta.id}.capability.compute-runtime`);
|
|
42
43
|
}
|
package/src/types/events.ts
CHANGED
|
@@ -7,5 +7,5 @@ import { ActivationEvent } from '@dxos/app-framework';
|
|
|
7
7
|
import { meta } from '../meta';
|
|
8
8
|
|
|
9
9
|
export namespace AutomationEvents {
|
|
10
|
-
export const ComputeRuntimeReady = ActivationEvent.make(`${meta.id}
|
|
10
|
+
export const ComputeRuntimeReady = ActivationEvent.make(`${meta.id}.event.compute-runtime-ready`);
|
|
11
11
|
}
|
package/src/types/schema.ts
CHANGED
|
@@ -17,7 +17,7 @@ const TriggerTemplate = Schema.Union(
|
|
|
17
17
|
|
|
18
18
|
export namespace AutomationAction {
|
|
19
19
|
export class CreateTriggerFromTemplate extends Schema.TaggedClass<CreateTriggerFromTemplate>()(
|
|
20
|
-
`${meta.id}
|
|
20
|
+
`${meta.id}.action.create-trigger-from-template`,
|
|
21
21
|
{
|
|
22
22
|
input: Schema.Struct({
|
|
23
23
|
db: Database.Database,
|
|
@@ -32,11 +32,11 @@ export namespace AutomationAction {
|
|
|
32
32
|
) {}
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
const AUTOMATION_OPERATION = `${meta.id}
|
|
35
|
+
const AUTOMATION_OPERATION = `${meta.id}.operation`;
|
|
36
36
|
|
|
37
37
|
export namespace AutomationOperation {
|
|
38
38
|
export const CreateTriggerFromTemplate = Operation.make({
|
|
39
|
-
meta: { key: `${AUTOMATION_OPERATION}
|
|
39
|
+
meta: { key: `${AUTOMATION_OPERATION}.create-trigger-from-template`, name: 'Create Trigger From Template' },
|
|
40
40
|
services: [Capability.Service],
|
|
41
41
|
schema: {
|
|
42
42
|
input: Schema.Struct({
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AutomationPanel,
|
|
3
|
-
AutomationPanel_default
|
|
4
|
-
} from "./chunk-YWLEY2FD.mjs";
|
|
5
|
-
import "./chunk-QW3EM35H.mjs";
|
|
6
|
-
import "./chunk-PZNBEKO5.mjs";
|
|
7
|
-
export {
|
|
8
|
-
AutomationPanel,
|
|
9
|
-
AutomationPanel_default as default
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=AutomationPanel-FAS6ADCW.mjs.map
|