@dxos/plugin-automation 0.8.4-main.a4bbb77 → 0.8.4-main.ae835ea
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-LBXJDM6Z.mjs +11 -0
- package/dist/lib/browser/{AutomationSettings-6XLG2PCK.mjs → AutomationSettings-IIEI5D2K.mjs} +6 -7
- package/dist/lib/{node-esm/AutomationSettings-4IW7RGMN.mjs.map → browser/AutomationSettings-IIEI5D2K.mjs.map} +1 -1
- package/dist/lib/browser/{FunctionsContainer-BQ6VBDIG.mjs → FunctionsContainer-IZTCGNJZ.mjs} +3 -3
- package/dist/lib/browser/{FunctionsPanel-QBTOFFNU.mjs → FunctionsPanel-HFCK3JRB.mjs} +3 -3
- package/dist/lib/browser/{app-graph-builder-6TP6ZNYG.mjs → app-graph-builder-7VKA2GS3.mjs} +8 -7
- package/dist/lib/browser/app-graph-builder-7VKA2GS3.mjs.map +7 -0
- package/dist/lib/browser/{chunk-M2WQCY2T.mjs → chunk-CVYJM6OO.mjs} +19 -6
- package/dist/lib/browser/chunk-CVYJM6OO.mjs.map +7 -0
- package/dist/lib/browser/{chunk-EAQL33PI.mjs → chunk-FHSN7G4H.mjs} +22 -9
- package/dist/lib/browser/chunk-FHSN7G4H.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZTXBAXUT.mjs → chunk-GCGHLQM2.mjs} +2 -2
- package/dist/lib/browser/chunk-GCGHLQM2.mjs.map +7 -0
- package/dist/lib/browser/{chunk-IN2YC7NY.mjs → chunk-JW7XSPYW.mjs} +57 -20
- package/dist/lib/browser/chunk-JW7XSPYW.mjs.map +7 -0
- package/dist/lib/browser/{chunk-LNMCGQC2.mjs → chunk-K5YNWESC.mjs} +60 -20
- package/dist/lib/browser/chunk-K5YNWESC.mjs.map +7 -0
- package/dist/lib/browser/chunk-LZQFZO3B.mjs +17 -0
- package/dist/lib/browser/chunk-LZQFZO3B.mjs.map +7 -0
- package/dist/lib/browser/{chunk-U66KBK53.mjs → chunk-XXZNGORC.mjs} +5 -5
- package/dist/lib/browser/{chunk-F4K5EMWL.mjs → chunk-YBPJCY3F.mjs} +3 -3
- package/dist/lib/browser/chunk-YBPJCY3F.mjs.map +7 -0
- package/dist/lib/browser/{compute-runtime-OFQPXD5I.mjs → compute-runtime-PFYRMGN2.mjs} +27 -71
- package/dist/lib/browser/compute-runtime-PFYRMGN2.mjs.map +7 -0
- package/dist/lib/browser/hooks/index.mjs +3 -4
- package/dist/lib/browser/index.mjs +26 -10
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/{intent-resolver-JXVWRAAH.mjs → intent-resolver-5HR7M7T6.mjs} +8 -8
- package/dist/lib/browser/intent-resolver-5HR7M7T6.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-NG3MJCDH.mjs → react-surface-WPMY3EX2.mjs} +5 -6
- package/dist/lib/browser/react-surface-WPMY3EX2.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/{AutomationPanel-WMVR3IST.mjs → AutomationPanel-NVEIUIZP.mjs} +4 -4
- package/dist/lib/node-esm/{AutomationSettings-4IW7RGMN.mjs → AutomationSettings-VIIEPI2P.mjs} +6 -7
- package/dist/lib/node-esm/{FunctionsContainer-LHUUOLA5.mjs → FunctionsContainer-KKRCIXGB.mjs} +3 -3
- package/dist/lib/node-esm/{FunctionsPanel-SHTQIMDV.mjs → FunctionsPanel-74ELGR7P.mjs} +3 -3
- package/dist/lib/node-esm/{app-graph-builder-3A2NIPR5.mjs → app-graph-builder-RTOFJNFV.mjs} +8 -7
- package/dist/lib/node-esm/app-graph-builder-RTOFJNFV.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-DSEZPWSO.mjs → chunk-3BJ6BR3E.mjs} +19 -6
- package/dist/lib/node-esm/chunk-3BJ6BR3E.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-5MQJPJR2.mjs → chunk-CEVIVRTY.mjs} +6 -2
- package/dist/lib/node-esm/chunk-CEVIVRTY.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-CEWZ2CDM.mjs → chunk-ECJKIUBO.mjs} +3 -3
- package/dist/lib/node-esm/chunk-ECJKIUBO.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-PBULJE4B.mjs → chunk-JOCKHLFT.mjs} +22 -9
- package/dist/lib/node-esm/chunk-JOCKHLFT.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-B6O6UBS7.mjs → chunk-MRYKW5TM.mjs} +2 -2
- package/dist/lib/node-esm/chunk-MRYKW5TM.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-2L2X4JMP.mjs → chunk-U5Q2NI7H.mjs} +5 -5
- package/dist/lib/node-esm/{chunk-N7NES6SZ.mjs → chunk-W76WUTZY.mjs} +57 -20
- package/dist/lib/node-esm/chunk-W76WUTZY.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-MN5S5J4O.mjs → chunk-Y7PJXFCJ.mjs} +60 -20
- package/dist/lib/node-esm/chunk-Y7PJXFCJ.mjs.map +7 -0
- package/dist/lib/node-esm/{compute-runtime-W5UJNSQY.mjs → compute-runtime-IXCSD3W7.mjs} +27 -71
- package/dist/lib/node-esm/compute-runtime-IXCSD3W7.mjs.map +7 -0
- package/dist/lib/node-esm/hooks/index.mjs +3 -4
- package/dist/lib/node-esm/index.mjs +26 -10
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/{intent-resolver-ROEBZXSS.mjs → intent-resolver-KDRYB5BC.mjs} +8 -8
- package/dist/lib/node-esm/intent-resolver-KDRYB5BC.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-A4KTYX6Z.mjs → react-surface-Y2BBJV2I.mjs} +5 -6
- package/dist/lib/node-esm/react-surface-Y2BBJV2I.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.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +3 -2
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/compute-runtime.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +2 -2
- 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/TriggerEditor/FunctionInputEditor.d.ts +2 -2
- package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +7 -5
- package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +4 -2
- package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
- package/dist/types/src/events.d.ts +4 -0
- package/dist/types/src/events.d.ts.map +1 -0
- package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +1 -1
- package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -1
- package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +2 -2
- package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.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/schema.d.ts +1 -1
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +33 -31
- package/src/AutomationPlugin.tsx +4 -2
- package/src/capabilities/app-graph-builder.ts +7 -6
- package/src/capabilities/capabilities.ts +3 -2
- package/src/capabilities/compute-runtime.ts +7 -5
- package/src/capabilities/intent-resolver.ts +5 -5
- package/src/capabilities/react-surface.tsx +2 -3
- package/src/components/AutomationPanel/AutomationPanel.stories.tsx +3 -4
- package/src/components/AutomationPanel/AutomationPanel.tsx +91 -28
- package/src/components/FunctionsPanel/FunctionsPanel.tsx +22 -10
- package/src/components/TriggerEditor/FunctionInputEditor.tsx +10 -4
- package/src/components/TriggerEditor/SpecSelector.tsx +12 -6
- package/src/components/TriggerEditor/TriggerEditor.stories.tsx +58 -17
- package/src/components/TriggerEditor/TriggerEditor.tsx +44 -18
- package/src/events.ts +11 -0
- package/src/hooks/useComputeRuntimeCallback.ts +3 -1
- package/src/hooks/useTriggerRuntimeControls.ts +4 -4
- package/src/index.ts +2 -0
- package/src/meta.ts +5 -2
- package/src/testing/test-functions.ts +1 -1
- package/src/translations.ts +1 -0
- package/src/types/schema.ts +1 -1
- package/dist/lib/browser/AutomationPanel-4QA5G3ZY.mjs +0 -11
- package/dist/lib/browser/app-graph-builder-6TP6ZNYG.mjs.map +0 -7
- package/dist/lib/browser/chunk-BDJPBZGC.mjs +0 -14
- package/dist/lib/browser/chunk-BDJPBZGC.mjs.map +0 -7
- package/dist/lib/browser/chunk-EAQL33PI.mjs.map +0 -7
- package/dist/lib/browser/chunk-F4K5EMWL.mjs.map +0 -7
- package/dist/lib/browser/chunk-IN2YC7NY.mjs.map +0 -7
- package/dist/lib/browser/chunk-LNMCGQC2.mjs.map +0 -7
- package/dist/lib/browser/chunk-M2WQCY2T.mjs.map +0 -7
- package/dist/lib/browser/chunk-WWURMV25.mjs +0 -13
- package/dist/lib/browser/chunk-WWURMV25.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZTXBAXUT.mjs.map +0 -7
- package/dist/lib/browser/compute-runtime-OFQPXD5I.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-JXVWRAAH.mjs.map +0 -7
- package/dist/lib/browser/react-surface-NG3MJCDH.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-3A2NIPR5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5MQJPJR2.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-B6O6UBS7.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CEWZ2CDM.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DSEZPWSO.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-MN5S5J4O.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-N7NES6SZ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PBULJE4B.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UTZIMYCX.mjs +0 -16
- package/dist/lib/node-esm/chunk-UTZIMYCX.mjs.map +0 -7
- package/dist/lib/node-esm/compute-runtime-W5UJNSQY.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-ROEBZXSS.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-A4KTYX6Z.mjs.map +0 -7
- /package/dist/lib/browser/{AutomationPanel-4QA5G3ZY.mjs.map → AutomationPanel-LBXJDM6Z.mjs.map} +0 -0
- /package/dist/lib/browser/{FunctionsContainer-BQ6VBDIG.mjs.map → FunctionsContainer-IZTCGNJZ.mjs.map} +0 -0
- /package/dist/lib/browser/{FunctionsPanel-QBTOFFNU.mjs.map → FunctionsPanel-HFCK3JRB.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-U66KBK53.mjs.map → chunk-XXZNGORC.mjs.map} +0 -0
- /package/dist/lib/node-esm/{AutomationPanel-WMVR3IST.mjs.map → AutomationPanel-NVEIUIZP.mjs.map} +0 -0
- /package/dist/lib/{browser/AutomationSettings-6XLG2PCK.mjs.map → node-esm/AutomationSettings-VIIEPI2P.mjs.map} +0 -0
- /package/dist/lib/node-esm/{FunctionsContainer-LHUUOLA5.mjs.map → FunctionsContainer-KKRCIXGB.mjs.map} +0 -0
- /package/dist/lib/node-esm/{FunctionsPanel-SHTQIMDV.mjs.map → FunctionsPanel-74ELGR7P.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-2L2X4JMP.mjs.map → chunk-U5Q2NI7H.mjs.map} +0 -0
|
@@ -1,31 +1,50 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TriggerEditor
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-JW7XSPYW.mjs";
|
|
4
4
|
import {
|
|
5
5
|
meta
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-LZQFZO3B.mjs";
|
|
7
7
|
|
|
8
8
|
// src/components/AutomationPanel/AutomationPanel.tsx
|
|
9
9
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
10
|
+
import * as Array from "effect/Array";
|
|
11
|
+
import * as EFn from "effect/Function";
|
|
12
|
+
import * as Match from "effect/Match";
|
|
13
|
+
import * as Schema from "effect/Schema";
|
|
14
|
+
import React, { useMemo, useState } from "react";
|
|
15
|
+
import { Filter, Obj, Tag } from "@dxos/echo";
|
|
16
|
+
import { Function, Script, Trigger } from "@dxos/functions";
|
|
17
|
+
import { useTypeOptions } from "@dxos/plugin-space";
|
|
14
18
|
import { useClient } from "@dxos/react-client";
|
|
15
19
|
import { getSpace, useQuery } from "@dxos/react-client/echo";
|
|
16
20
|
import { Clipboard, IconButton, Input, Separator, useTranslation } from "@dxos/react-ui";
|
|
17
21
|
import { ControlItem, controlItemClasses } from "@dxos/react-ui-form";
|
|
18
22
|
import { List } from "@dxos/react-ui-list";
|
|
19
23
|
import { ghostHover, mx } from "@dxos/react-ui-theme";
|
|
24
|
+
import { DataType } from "@dxos/schema";
|
|
20
25
|
var grid = "grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]";
|
|
21
26
|
var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) => {
|
|
22
27
|
var _effect = _useSignals();
|
|
23
28
|
try {
|
|
24
29
|
const { t } = useTranslation(meta.id);
|
|
25
30
|
const client = useClient();
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const
|
|
31
|
+
const functions = useQuery(space, Filter.type(Function.Function));
|
|
32
|
+
const triggers = useQuery(space, Filter.type(Trigger.Trigger));
|
|
33
|
+
const filteredTriggers = useMemo(() => {
|
|
34
|
+
return object ? triggers.filter(triggerMatch(object)) : triggers;
|
|
35
|
+
}, [
|
|
36
|
+
object,
|
|
37
|
+
triggers
|
|
38
|
+
]);
|
|
39
|
+
const tags = useQuery(space, Filter.type(Tag.Tag));
|
|
40
|
+
const types = useTypeOptions({
|
|
41
|
+
space,
|
|
42
|
+
annotation: [
|
|
43
|
+
"dynamic",
|
|
44
|
+
"limited-static",
|
|
45
|
+
"object-form"
|
|
46
|
+
]
|
|
47
|
+
});
|
|
29
48
|
const [trigger, setTrigger] = useState(initialTrigger);
|
|
30
49
|
const [selected, setSelected] = useState();
|
|
31
50
|
const handleSelect = (trigger2) => {
|
|
@@ -33,7 +52,7 @@ var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) =>
|
|
|
33
52
|
setSelected(trigger2);
|
|
34
53
|
};
|
|
35
54
|
const handleAdd = () => {
|
|
36
|
-
setTrigger(
|
|
55
|
+
setTrigger(Trigger.make({}));
|
|
37
56
|
setSelected(void 0);
|
|
38
57
|
};
|
|
39
58
|
const handleDelete = (trigger2) => {
|
|
@@ -45,7 +64,7 @@ var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) =>
|
|
|
45
64
|
if (selected) {
|
|
46
65
|
Object.assign(selected, trigger2);
|
|
47
66
|
} else {
|
|
48
|
-
space.db.add(
|
|
67
|
+
space.db.add(Trigger.make(trigger2));
|
|
49
68
|
}
|
|
50
69
|
setTrigger(void 0);
|
|
51
70
|
setSelected(void 0);
|
|
@@ -61,20 +80,23 @@ var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) =>
|
|
|
61
80
|
}, /* @__PURE__ */ React.createElement(TriggerEditor, {
|
|
62
81
|
space,
|
|
63
82
|
trigger,
|
|
83
|
+
readonlySpec: Boolean(object),
|
|
84
|
+
tags,
|
|
85
|
+
types,
|
|
64
86
|
onSave: handleSave,
|
|
65
87
|
onCancel: handleCancel
|
|
66
88
|
}));
|
|
67
89
|
}
|
|
68
90
|
return /* @__PURE__ */ React.createElement("div", {
|
|
69
91
|
className: mx(controlItemClasses, classNames)
|
|
70
|
-
},
|
|
71
|
-
items:
|
|
72
|
-
isItem: Schema.is(
|
|
92
|
+
}, filteredTriggers.length > 0 && /* @__PURE__ */ React.createElement(List.Root, {
|
|
93
|
+
items: filteredTriggers,
|
|
94
|
+
isItem: Schema.is(Trigger.Trigger),
|
|
73
95
|
getId: (field) => field.id
|
|
74
|
-
}, ({ items:
|
|
96
|
+
}, ({ items: filteredTriggers2 }) => /* @__PURE__ */ React.createElement("div", {
|
|
75
97
|
role: "list",
|
|
76
98
|
className: "flex flex-col w-full"
|
|
77
|
-
},
|
|
99
|
+
}, filteredTriggers2?.map((trigger2) => {
|
|
78
100
|
const copyAction = getCopyAction(client, trigger2);
|
|
79
101
|
return /* @__PURE__ */ React.createElement(List.Item, {
|
|
80
102
|
key: trigger2.id,
|
|
@@ -88,13 +110,13 @@ var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) =>
|
|
|
88
110
|
}, /* @__PURE__ */ React.createElement(List.ItemTitle, {
|
|
89
111
|
classNames: "px-1 cursor-pointer w-0 shrink truncate",
|
|
90
112
|
onClick: () => handleSelect(trigger2)
|
|
91
|
-
}, getFunctionName(
|
|
113
|
+
}, getFunctionName(functions, trigger2) ?? "\u2205"), copyAction && /* @__PURE__ */ React.createElement(Clipboard.IconButton, {
|
|
92
114
|
label: t(copyAction.translationKey),
|
|
93
115
|
value: copyAction.contentProvider()
|
|
94
116
|
})), /* @__PURE__ */ React.createElement(List.ItemDeleteButton, {
|
|
95
117
|
onClick: () => handleDelete(trigger2)
|
|
96
118
|
}));
|
|
97
|
-
}))),
|
|
119
|
+
}))), filteredTriggers.length > 0 && /* @__PURE__ */ React.createElement(Separator, {
|
|
98
120
|
classNames: "mlb-4"
|
|
99
121
|
}), /* @__PURE__ */ React.createElement(IconButton, {
|
|
100
122
|
icon: "ph--plus--regular",
|
|
@@ -127,11 +149,29 @@ var getWebhookUrl = (client, trigger) => {
|
|
|
127
149
|
edgeUrl.protocol = isSecure ? "https" : "http";
|
|
128
150
|
return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();
|
|
129
151
|
};
|
|
130
|
-
var getFunctionName = (
|
|
152
|
+
var getFunctionName = (functions, trigger) => {
|
|
131
153
|
const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}\u2026`;
|
|
132
154
|
const functionObject = functions.find((fn) => fn === trigger.function?.target);
|
|
133
155
|
return functionObject?.name ?? shortId;
|
|
134
156
|
};
|
|
157
|
+
var scriptMatch = (script) => (trigger) => {
|
|
158
|
+
const fn = trigger.function?.target;
|
|
159
|
+
if (!Obj.instanceOf(Function.Function, fn)) {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
return fn.source?.target === script;
|
|
163
|
+
};
|
|
164
|
+
var projectMatch = (project) => {
|
|
165
|
+
const viewQueries = EFn.pipe(project.collections, Array.map((collection) => collection.target), Array.filter(Schema.is(DataType.View)), Array.map((view) => Obj.getSnapshot(view).query.ast), Array.map((ast) => JSON.stringify(ast)));
|
|
166
|
+
return (trigger) => {
|
|
167
|
+
const spec = Obj.getSnapshot(trigger).spec;
|
|
168
|
+
if (spec?.kind !== "subscription") {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
return viewQueries.some((query) => JSON.stringify(spec.query) === query);
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
var triggerMatch = Match.type().pipe(Match.withReturnType(), Match.when((obj) => Obj.instanceOf(Script.Script, obj), (obj) => scriptMatch(obj)), Match.when((obj) => Obj.instanceOf(DataType.Project, obj), (obj) => projectMatch(obj)), Match.orElse((_obj) => () => true));
|
|
135
175
|
|
|
136
176
|
// src/components/AutomationPanel/index.ts
|
|
137
177
|
var AutomationPanel_default = AutomationPanel;
|
|
@@ -140,4 +180,4 @@ export {
|
|
|
140
180
|
AutomationPanel,
|
|
141
181
|
AutomationPanel_default
|
|
142
182
|
};
|
|
143
|
-
//# sourceMappingURL=chunk-
|
|
183
|
+
//# sourceMappingURL=chunk-K5YNWESC.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/AutomationPanel/AutomationPanel.tsx", "../../../src/components/AutomationPanel/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Array from 'effect/Array';\nimport * as EFn from 'effect/Function';\nimport * as Match from 'effect/Match';\nimport * as Schema from 'effect/Schema';\nimport React, { useMemo, useState } from 'react';\n\nimport { Filter, Obj, Tag } from '@dxos/echo';\nimport { Function, Script, Trigger } from '@dxos/functions';\nimport { useTypeOptions } from '@dxos/plugin-space';\nimport { type Client, useClient } from '@dxos/react-client';\nimport { type Space, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { Clipboard, IconButton, Input, Separator, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { ControlItem, controlItemClasses } from '@dxos/react-ui-form';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover, mx } from '@dxos/react-ui-theme';\nimport { DataType } from '@dxos/schema';\n\nimport { meta } from '../../meta';\nimport { TriggerEditor, type TriggerEditorProps } from '../TriggerEditor';\n\nconst grid = 'grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]';\n\nexport type AutomationPanelProps = ThemedClassName<{\n space: Space;\n object?: Obj.Any;\n initialTrigger?: Trigger.Trigger;\n onDone?: () => void;\n}>;\n\n// TODO(burdon): Factor out common layout with ViewEditor.\nexport const AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }: AutomationPanelProps) => {\n const { t } = useTranslation(meta.id);\n const client = useClient();\n const functions = useQuery(space, Filter.type(Function.Function));\n const triggers = useQuery(space, Filter.type(Trigger.Trigger));\n const filteredTriggers = useMemo(() => {\n return object ? triggers.filter(triggerMatch(object)) : triggers;\n }, [object, triggers]);\n const tags = useQuery(space, Filter.type(Tag.Tag));\n const types = useTypeOptions({ space, annotation: ['dynamic', 'limited-static', 'object-form'] });\n\n const [trigger, setTrigger] = useState<Trigger.Trigger | undefined>(initialTrigger);\n const [selected, setSelected] = useState<Trigger.Trigger>();\n\n const handleSelect = (trigger: Trigger.Trigger) => {\n setTrigger(trigger);\n setSelected(trigger);\n };\n\n const handleAdd = () => {\n setTrigger(Trigger.make({}));\n setSelected(undefined);\n };\n\n const handleDelete = (trigger: Trigger.Trigger) => {\n space.db.remove(trigger);\n setTrigger(undefined);\n setSelected(undefined);\n };\n\n const handleSave: TriggerEditorProps['onSave'] = (trigger) => {\n if (selected) {\n Object.assign(selected, trigger);\n } else {\n space.db.add(Trigger.make(trigger));\n }\n\n setTrigger(undefined);\n setSelected(undefined);\n onDone?.();\n };\n\n const handleCancel: TriggerEditorProps['onCancel'] = () => {\n setTrigger(undefined);\n onDone?.();\n };\n\n if (trigger) {\n return (\n <ControlItem title={t('trigger editor title')}>\n <TriggerEditor\n space={space}\n trigger={trigger}\n readonlySpec={Boolean(object)}\n tags={tags}\n types={types}\n onSave={handleSave}\n onCancel={handleCancel}\n />\n </ControlItem>\n );\n }\n\n return (\n <div className={mx(controlItemClasses, classNames)}>\n {filteredTriggers.length > 0 && (\n <List.Root<Trigger.Trigger>\n items={filteredTriggers}\n isItem={Schema.is(Trigger.Trigger)}\n getId={(field) => field.id}\n >\n {({ items: filteredTriggers }) => (\n <div role='list' className='flex flex-col w-full'>\n {filteredTriggers?.map((trigger) => {\n const copyAction = getCopyAction(client, trigger);\n return (\n <List.Item<Trigger.Trigger>\n key={trigger.id}\n item={trigger}\n classNames={mx(grid, ghostHover, 'items-center', 'px-2')}\n >\n <Input.Root>\n <Input.Switch\n checked={trigger.enabled}\n onCheckedChange={(checked) => (trigger.enabled = checked)}\n />\n </Input.Root>\n\n <div className={'flex'}>\n <List.ItemTitle\n classNames='px-1 cursor-pointer w-0 shrink truncate'\n onClick={() => handleSelect(trigger)}\n >\n {getFunctionName(functions, trigger) ?? '∅'}\n </List.ItemTitle>\n\n {/* TODO: a better way to expose copy action */}\n {copyAction && (\n <Clipboard.IconButton\n label={t(copyAction.translationKey)}\n value={copyAction.contentProvider()}\n />\n )}\n </div>\n\n <List.ItemDeleteButton onClick={() => handleDelete(trigger)} />\n </List.Item>\n );\n })}\n </div>\n )}\n </List.Root>\n )}\n {filteredTriggers.length > 0 && <Separator classNames='mlb-4' />}\n <IconButton icon='ph--plus--regular' label={t('new trigger label')} onClick={handleAdd} />\n </div>\n );\n};\n\nconst getCopyAction = (client: Client, trigger: Trigger.Trigger | undefined) => {\n if (trigger?.spec?.kind === 'email') {\n return { translationKey: 'trigger copy email', contentProvider: () => `${getSpace(trigger)!.id}@dxos.network` };\n }\n\n if (trigger?.spec?.kind === 'webhook') {\n return { translationKey: 'trigger copy url', contentProvider: () => getWebhookUrl(client, trigger) };\n }\n\n return undefined;\n};\n\nconst getWebhookUrl = (client: Client, trigger: Trigger.Trigger) => {\n const spaceId = getSpace(trigger)!.id;\n const edgeUrl = new URL(client.config.values.runtime!.services!.edge!.url!);\n const isSecure = edgeUrl.protocol.startsWith('https') || edgeUrl.protocol.startsWith('wss');\n edgeUrl.protocol = isSecure ? 'https' : 'http';\n return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();\n};\n\nconst getFunctionName = (functions: Function.Function[], trigger: Trigger.Trigger) => {\n // TODO(wittjosiah): Truncation should be done in the UI.\n // Warning that the List component is currently a can of worms.\n const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}…`;\n const functionObject = functions.find((fn) => fn === trigger.function?.target);\n return functionObject?.name ?? shortId;\n};\n\nconst scriptMatch = (script: Script.Script) => (trigger: Trigger.Trigger) => {\n const fn = trigger.function?.target;\n if (!Obj.instanceOf(Function.Function, fn)) {\n return false;\n }\n\n return fn.source?.target === script;\n};\n\nconst projectMatch = (project: DataType.Project) => {\n const viewQueries = EFn.pipe(\n project.collections,\n Array.map((collection) => collection.target),\n Array.filter(Schema.is(DataType.View)),\n Array.map((view) => Obj.getSnapshot(view).query.ast),\n Array.map((ast) => JSON.stringify(ast)),\n );\n\n return (trigger: Trigger.Trigger) => {\n const spec = Obj.getSnapshot(trigger).spec;\n if (spec?.kind !== 'subscription') {\n return false;\n }\n\n // TODO(wittjosiah): Implement better way of comparing query ASTs.\n return viewQueries.some((query) => JSON.stringify(spec.query) === query);\n };\n};\n\nconst triggerMatch = Match.type<Obj.Any>().pipe(\n Match.withReturnType<(trigger: Trigger.Trigger) => boolean>(),\n Match.when(\n (obj) => Obj.instanceOf(Script.Script, obj),\n (obj) => scriptMatch(obj),\n ),\n Match.when(\n (obj) => Obj.instanceOf(DataType.Project, obj),\n (obj) => projectMatch(obj),\n ),\n Match.orElse((_obj) => () => true),\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { AutomationPanel } from './AutomationPanel';\n\nexport * from './AutomationPanel';\n\nexport default AutomationPanel;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Array", "EFn", "Match", "Schema", "React", "useMemo", "useState", "Filter", "Obj", "Tag", "Function", "Script", "Trigger", "useTypeOptions", "useClient", "getSpace", "useQuery", "Clipboard", "IconButton", "Input", "Separator", "useTranslation", "ControlItem", "controlItemClasses", "List", "ghostHover", "mx", "DataType", "grid", "AutomationPanel", "classNames", "space", "object", "initialTrigger", "onDone", "t", "useTranslation", "meta", "id", "client", "useClient", "functions", "useQuery", "Filter", "type", "Function", "triggers", "Trigger", "filteredTriggers", "useMemo", "filter", "triggerMatch", "tags", "Tag", "types", "useTypeOptions", "annotation", "trigger", "setTrigger", "useState", "selected", "setSelected", "handleSelect", "handleAdd", "make", "undefined", "handleDelete", "db", "remove", "handleSave", "Object", "assign", "add", "handleCancel", "ControlItem", "title", "TriggerEditor", "readonlySpec", "Boolean", "onSave", "onCancel", "div", "className", "mx", "controlItemClasses", "length", "List", "Root", "items", "isItem", "is", "getId", "field", "role", "map", "copyAction", "getCopyAction", "Item", "key", "item", "ghostHover", "Input", "Switch", "checked", "enabled", "onCheckedChange", "ItemTitle", "onClick", "getFunctionName", "Clipboard", "IconButton", "label", "translationKey", "value", "contentProvider", "ItemDeleteButton", "Separator", "icon", "spec", "kind", "getSpace", "getWebhookUrl", "spaceId", "edgeUrl", "URL", "config", "values", "runtime", "services", "edge", "url", "isSecure", "protocol", "startsWith", "toString", "shortId", "function", "dxn", "slice", "functionObject", "find", "fn", "target", "name", "scriptMatch", "script", "Obj", "instanceOf", "source", "projectMatch", "project", "viewQueries", "pipe", "collections", "collection", "DataType", "View", "view", "getSnapshot", "query", "ast", "JSON", "stringify", "some", "withReturnType", "when", "obj", "Script", "Project", "orElse", "_obj", "AutomationPanel"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// src/meta.ts
|
|
2
|
+
import { trim } from "@dxos/util";
|
|
3
|
+
var meta = {
|
|
4
|
+
id: "dxos.org/plugin/automation",
|
|
5
|
+
name: "Automation",
|
|
6
|
+
description: trim`
|
|
7
|
+
Workflow automation engine that triggers custom actions based on object events and conditions.
|
|
8
|
+
Create automated pipelines that respond to changes and streamline repetitive tasks.
|
|
9
|
+
`,
|
|
10
|
+
icon: "ph--robot--regular",
|
|
11
|
+
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-automation"
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
meta
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=chunk-LZQFZO3B.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/automation',\n name: 'Automation',\n description: trim`\n Workflow automation engine that triggers custom actions based on object events and conditions.\n Create automated pipelines that respond to changes and streamline repetitive tasks.\n `,\n icon: 'ph--robot--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-automation',\n};\n"],
|
|
5
|
+
"mappings": ";AAKA,SAASA,YAAY;AAEd,IAAMC,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;EAIbC,MAAM;EACNC,QAAQ;AACV;",
|
|
6
|
+
"names": ["trim", "meta", "id", "name", "description", "trim", "icon", "source"]
|
|
7
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// src/components/index.ts
|
|
2
2
|
import { lazy } from "react";
|
|
3
|
-
var AutomationPanel = lazy(() => import("./AutomationPanel-
|
|
4
|
-
var AutomationSettings = lazy(() => import("./AutomationSettings-
|
|
5
|
-
var FunctionsContainer = lazy(() => import("./FunctionsContainer-
|
|
6
|
-
var FunctionsPanel = lazy(() => import("./FunctionsPanel-
|
|
3
|
+
var AutomationPanel = lazy(() => import("./AutomationPanel-LBXJDM6Z.mjs"));
|
|
4
|
+
var AutomationSettings = lazy(() => import("./AutomationSettings-IIEI5D2K.mjs"));
|
|
5
|
+
var FunctionsContainer = lazy(() => import("./FunctionsContainer-IZTCGNJZ.mjs"));
|
|
6
|
+
var FunctionsPanel = lazy(() => import("./FunctionsPanel-HFCK3JRB.mjs"));
|
|
7
7
|
|
|
8
8
|
export {
|
|
9
9
|
AutomationPanel,
|
|
@@ -11,4 +11,4 @@ export {
|
|
|
11
11
|
FunctionsContainer,
|
|
12
12
|
FunctionsPanel
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=chunk-
|
|
14
|
+
//# sourceMappingURL=chunk-XXZNGORC.mjs.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
meta
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-LZQFZO3B.mjs";
|
|
4
4
|
|
|
5
5
|
// src/types/schema.ts
|
|
6
|
-
import
|
|
6
|
+
import * as Schema from "effect/Schema";
|
|
7
7
|
import { SpaceSchema } from "@dxos/react-client/echo";
|
|
8
8
|
var TriggerTemplate = Schema.Union(Schema.Struct({
|
|
9
9
|
type: Schema.Literal("timer"),
|
|
@@ -35,4 +35,4 @@ var AutomationAction;
|
|
|
35
35
|
export {
|
|
36
36
|
AutomationAction
|
|
37
37
|
};
|
|
38
|
-
//# sourceMappingURL=chunk-
|
|
38
|
+
//# sourceMappingURL=chunk-YBPJCY3F.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/schema.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { SpaceSchema } from '@dxos/react-client/echo';\n\nimport { meta } from '../meta';\n\nconst TriggerTemplate = Schema.Union(\n Schema.Struct({ type: Schema.Literal('timer'), cron: Schema.String }),\n Schema.Struct({ type: Schema.Literal('queue'), queueDXN: Schema.Any }),\n);\n\nexport namespace AutomationAction {\n export class CreateTriggerFromTemplate extends Schema.TaggedClass<CreateTriggerFromTemplate>()(\n `${meta.id}/action/create-trigger-from-template`,\n {\n input: Schema.Struct({\n space: SpaceSchema,\n template: TriggerTemplate,\n enabled: Schema.optional(Schema.Boolean),\n // TODO(wittjosiah): Improve how this lookup is done.\n scriptName: Schema.optional(Schema.String),\n input: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Any })),\n }),\n output: Schema.Void,\n },\n ) {}\n}\n"],
|
|
5
|
+
"mappings": ";;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,mBAAmB;AAI5B,IAAMC,kBAAyBC,aACtBC,cAAO;EAAEC,MAAaC,eAAQ,OAAA;EAAUC,MAAaC;AAAO,CAAA,GAC5DJ,cAAO;EAAEC,MAAaC,eAAQ,OAAA;EAAUG,UAAiBC;AAAI,CAAA,CAAA;UAGrDC,mBAAAA;EACR,MAAMC,kCAAyCC,mBAAW,EAC/D,GAAGC,KAAKC,EAAE,wCACV;IACEC,OAAcZ,cAAO;MACnBa,OAAOC;MACPC,UAAUjB;MACVkB,SAAgBC,gBAAgBC,cAAO;;MAEvCC,YAAmBF,gBAAgBb,aAAM;MACzCQ,OAAcK,gBAAgBG,cAAO;QAAEC,KAAYjB;QAAQkB,OAAchB;MAAI,CAAA,CAAA;IAC/E,CAAA;IACAiB,QAAeC;EACjB,CAAA,EAAA;EACC;oBAbUhB,4BAAAA;AAcf,GAfiBD,qBAAAA,mBAAAA,CAAAA,EAAAA;;",
|
|
6
|
+
"names": ["Schema", "SpaceSchema", "TriggerTemplate", "Union", "Struct", "type", "Literal", "cron", "String", "queueDXN", "Any", "AutomationAction", "CreateTriggerFromTemplate", "TaggedClass", "meta", "id", "input", "space", "SpaceSchema", "template", "enabled", "optional", "Boolean", "scriptName", "Record", "key", "value", "output", "Void"]
|
|
7
|
+
}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AutomationCapabilities
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-GCGHLQM2.mjs";
|
|
4
|
+
import "./chunk-LZQFZO3B.mjs";
|
|
5
5
|
|
|
6
6
|
// src/capabilities/compute-runtime.ts
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
7
|
+
import * as Toolkit from "@effect/ai/Toolkit";
|
|
8
|
+
import * as BrowserKeyValueStore from "@effect/platform-browser/BrowserKeyValueStore";
|
|
9
|
+
import * as Effect from "effect/Effect";
|
|
10
|
+
import * as Layer from "effect/Layer";
|
|
11
|
+
import * as ManagedRuntime from "effect/ManagedRuntime";
|
|
10
12
|
import { Capabilities, contributes } from "@dxos/app-framework";
|
|
11
13
|
import { makeToolExecutionServiceFromFunctions, makeToolResolverFromFunctions } from "@dxos/assistant";
|
|
12
14
|
import { Resource } from "@dxos/context";
|
|
@@ -16,46 +18,6 @@ import { TriggerStateStore } from "@dxos/functions";
|
|
|
16
18
|
import { invariant } from "@dxos/invariant";
|
|
17
19
|
import { ClientCapabilities } from "@dxos/plugin-client";
|
|
18
20
|
import { PropertiesType } from "@dxos/react-client/echo";
|
|
19
|
-
function _check_private_redeclaration(obj, privateCollection) {
|
|
20
|
-
if (privateCollection.has(obj)) {
|
|
21
|
-
throw new TypeError("Cannot initialize the same private elements twice on an object");
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
function _class_apply_descriptor_get(receiver, descriptor) {
|
|
25
|
-
if (descriptor.get) {
|
|
26
|
-
return descriptor.get.call(receiver);
|
|
27
|
-
}
|
|
28
|
-
return descriptor.value;
|
|
29
|
-
}
|
|
30
|
-
function _class_apply_descriptor_set(receiver, descriptor, value) {
|
|
31
|
-
if (descriptor.set) {
|
|
32
|
-
descriptor.set.call(receiver, value);
|
|
33
|
-
} else {
|
|
34
|
-
if (!descriptor.writable) {
|
|
35
|
-
throw new TypeError("attempted to set read only private field");
|
|
36
|
-
}
|
|
37
|
-
descriptor.value = value;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
function _class_extract_field_descriptor(receiver, privateMap, action) {
|
|
41
|
-
if (!privateMap.has(receiver)) {
|
|
42
|
-
throw new TypeError("attempted to " + action + " private field on non-instance");
|
|
43
|
-
}
|
|
44
|
-
return privateMap.get(receiver);
|
|
45
|
-
}
|
|
46
|
-
function _class_private_field_get(receiver, privateMap) {
|
|
47
|
-
var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
|
|
48
|
-
return _class_apply_descriptor_get(receiver, descriptor);
|
|
49
|
-
}
|
|
50
|
-
function _class_private_field_init(obj, privateMap, value) {
|
|
51
|
-
_check_private_redeclaration(obj, privateMap);
|
|
52
|
-
privateMap.set(obj, value);
|
|
53
|
-
}
|
|
54
|
-
function _class_private_field_set(receiver, privateMap, value) {
|
|
55
|
-
var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
|
|
56
|
-
_class_apply_descriptor_set(receiver, descriptor, value);
|
|
57
|
-
return value;
|
|
58
|
-
}
|
|
59
21
|
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-automation/src/capabilities/compute-runtime.ts";
|
|
60
22
|
var compute_runtime_default = (async (context) => {
|
|
61
23
|
const provider = await new ComputeRuntimeProviderImpl(context).open();
|
|
@@ -63,32 +25,36 @@ var compute_runtime_default = (async (context) => {
|
|
|
63
25
|
await provider.close();
|
|
64
26
|
});
|
|
65
27
|
});
|
|
66
|
-
var _runtimes = /* @__PURE__ */ new WeakMap();
|
|
67
|
-
var _context = /* @__PURE__ */ new WeakMap();
|
|
68
28
|
var ComputeRuntimeProviderImpl = class extends Resource {
|
|
29
|
+
#runtimes = /* @__PURE__ */ new Map();
|
|
30
|
+
#context;
|
|
31
|
+
constructor(context) {
|
|
32
|
+
super();
|
|
33
|
+
this.#context = context;
|
|
34
|
+
}
|
|
69
35
|
async _open() {
|
|
70
36
|
}
|
|
71
37
|
async _close() {
|
|
72
|
-
await Promise.all(Array.from(
|
|
73
|
-
|
|
38
|
+
await Promise.all(Array.from(this.#runtimes.values()).map((rt) => rt.dispose()));
|
|
39
|
+
this.#runtimes.clear();
|
|
74
40
|
}
|
|
75
41
|
getRuntime(spaceId) {
|
|
76
|
-
if (
|
|
77
|
-
return
|
|
42
|
+
if (this.#runtimes.has(spaceId)) {
|
|
43
|
+
return this.#runtimes.get(spaceId);
|
|
78
44
|
}
|
|
79
45
|
const layer = Layer.unwrapEffect(Effect.gen(this, function* () {
|
|
80
|
-
const client =
|
|
81
|
-
const serviceLayer =
|
|
82
|
-
const functions =
|
|
83
|
-
const toolkits =
|
|
84
|
-
const handlers =
|
|
46
|
+
const client = this.#context.getCapability(ClientCapabilities.Client);
|
|
47
|
+
const serviceLayer = this.#context.getCapability(Capabilities.AiServiceLayer) ?? Layer.die("AiService not found");
|
|
48
|
+
const functions = this.#context.getCapabilities(Capabilities.Functions);
|
|
49
|
+
const toolkits = this.#context.getCapabilities(Capabilities.Toolkit);
|
|
50
|
+
const handlers = this.#context.getCapabilities(Capabilities.ToolkitHandler);
|
|
85
51
|
const allFunctions = functions.flat();
|
|
86
52
|
const toolkit = Toolkit.merge(...toolkits);
|
|
87
53
|
const handlersLayer = Layer.mergeAll(Layer.empty, ...handlers);
|
|
88
54
|
const space = client.spaces.get(spaceId);
|
|
89
55
|
invariant(space, void 0, {
|
|
90
56
|
F: __dxlog_file,
|
|
91
|
-
L:
|
|
57
|
+
L: 79,
|
|
92
58
|
S: this,
|
|
93
59
|
A: [
|
|
94
60
|
"space",
|
|
@@ -107,25 +73,15 @@ var ComputeRuntimeProviderImpl = class extends Resource {
|
|
|
107
73
|
)), Layer.provideMerge(serviceLayer), Layer.provideMerge(CredentialsService.layerFromDatabase()), Layer.provideMerge(space ? DatabaseService.layer(space.db) : DatabaseService.notAvailable), Layer.provideMerge(space ? QueueService.layer(space.queues) : QueueService.notAvailable)))))));
|
|
108
74
|
}));
|
|
109
75
|
const runtime = ManagedRuntime.make(layer);
|
|
110
|
-
|
|
76
|
+
this.#runtimes.set(spaceId, runtime);
|
|
111
77
|
return runtime;
|
|
112
78
|
}
|
|
113
|
-
constructor(context) {
|
|
114
|
-
super(), _class_private_field_init(this, _runtimes, {
|
|
115
|
-
writable: true,
|
|
116
|
-
value: /* @__PURE__ */ new Map()
|
|
117
|
-
}), _class_private_field_init(this, _context, {
|
|
118
|
-
writable: true,
|
|
119
|
-
value: void 0
|
|
120
|
-
});
|
|
121
|
-
_class_private_field_set(this, _context, context);
|
|
122
|
-
}
|
|
123
79
|
};
|
|
124
80
|
var InvocationTracerLive = Layer.unwrapEffect(Effect.gen(function* () {
|
|
125
81
|
const { objects: [properties] } = yield* DatabaseService.runQuery(Query.type(PropertiesType));
|
|
126
82
|
invariant(properties, void 0, {
|
|
127
83
|
F: __dxlog_file,
|
|
128
|
-
L:
|
|
84
|
+
L: 129,
|
|
129
85
|
S: this,
|
|
130
86
|
A: [
|
|
131
87
|
"properties",
|
|
@@ -141,7 +97,7 @@ var InvocationTracerLive = Layer.unwrapEffect(Effect.gen(function* () {
|
|
|
141
97
|
const queue = properties.invocationTraceQueue.target;
|
|
142
98
|
invariant(queue, void 0, {
|
|
143
99
|
F: __dxlog_file,
|
|
144
|
-
L:
|
|
100
|
+
L: 135,
|
|
145
101
|
S: this,
|
|
146
102
|
A: [
|
|
147
103
|
"queue",
|
|
@@ -155,4 +111,4 @@ var InvocationTracerLive = Layer.unwrapEffect(Effect.gen(function* () {
|
|
|
155
111
|
export {
|
|
156
112
|
compute_runtime_default as default
|
|
157
113
|
};
|
|
158
|
-
//# sourceMappingURL=compute-runtime-
|
|
114
|
+
//# sourceMappingURL=compute-runtime-PFYRMGN2.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/compute-runtime.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Toolkit from '@effect/ai/Toolkit';\nimport * as BrowserKeyValueStore from '@effect/platform-browser/BrowserKeyValueStore';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as ManagedRuntime from 'effect/ManagedRuntime';\n\nimport { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';\nimport { makeToolExecutionServiceFromFunctions, makeToolResolverFromFunctions } from '@dxos/assistant';\nimport { Resource } from '@dxos/context';\nimport { Query, Ref } from '@dxos/echo';\nimport {\n CredentialsService,\n DatabaseService,\n FunctionImplementationResolver,\n FunctionInvocationService,\n InvocationTracer,\n LocalFunctionExecutionService,\n QueueService,\n RemoteFunctionExecutionService,\n TriggerDispatcher,\n} from '@dxos/functions';\nimport { TriggerStateStore } from '@dxos/functions';\nimport { invariant } from '@dxos/invariant';\nimport { type SpaceId } from '@dxos/keys';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { PropertiesType } from '@dxos/react-client/echo';\n\nimport { AutomationCapabilities } from './capabilities';\n\nexport default async (context: PluginContext) => {\n const provider = await new ComputeRuntimeProviderImpl(context).open();\n return contributes(AutomationCapabilities.ComputeRuntime, provider, async () => {\n await provider.close();\n });\n};\n\nclass ComputeRuntimeProviderImpl extends Resource implements AutomationCapabilities.ComputeRuntimeProvider {\n readonly #runtimes = new Map<SpaceId, AutomationCapabilities.ComputeRuntime>();\n readonly #context: PluginContext;\n\n constructor(context: PluginContext) {\n super();\n this.#context = context;\n }\n\n protected override async _open() {}\n\n protected override async _close() {\n await Promise.all(Array.from(this.#runtimes.values()).map((rt) => rt.dispose()));\n this.#runtimes.clear();\n }\n\n getRuntime(spaceId: SpaceId): AutomationCapabilities.ComputeRuntime {\n if (this.#runtimes.has(spaceId)) {\n return this.#runtimes.get(spaceId)!;\n }\n\n const layer = Layer.unwrapEffect(\n Effect.gen(this, function* () {\n const client = this.#context.getCapability(ClientCapabilities.Client);\n const serviceLayer =\n this.#context.getCapability(Capabilities.AiServiceLayer) ?? Layer.die('AiService not found');\n\n // TODO(dmaretskyi): Make those reactive.\n const functions = this.#context.getCapabilities(Capabilities.Functions);\n const toolkits = this.#context.getCapabilities(Capabilities.Toolkit);\n const handlers = this.#context.getCapabilities(Capabilities.ToolkitHandler);\n\n const allFunctions = functions.flat();\n // TODO(wittjosiah): Don't cast.\n const toolkit = Toolkit.merge(...toolkits) as Toolkit.Toolkit<any>;\n const handlersLayer = Layer.mergeAll(Layer.empty, ...handlers);\n\n const space = client.spaces.get(spaceId);\n invariant(space);\n yield* Effect.promise(() => space.waitUntilReady());\n\n return Layer.mergeAll(TriggerDispatcher.layer({ timeControl: 'natural' })).pipe(\n Layer.provideMerge(\n Layer.mergeAll(\n InvocationTracerLive,\n TriggerStateStore.layerKv.pipe(Layer.provide(BrowserKeyValueStore.layerLocalStorage)),\n makeToolResolverFromFunctions(allFunctions, toolkit),\n makeToolExecutionServiceFromFunctions(toolkit, handlersLayer),\n ),\n ),\n Layer.provideMerge(\n Layer.mergeAll(\n FunctionInvocationService.layer.pipe(\n Layer.provideMerge(\n LocalFunctionExecutionService.layerLive.pipe(\n Layer.provideMerge(FunctionImplementationResolver.layerTest({ functions: allFunctions })),\n Layer.provideMerge(\n RemoteFunctionExecutionService.fromClient(\n client.edge.baseUrl,\n // If agent is not enabled do not provide spaceId because space context will be unavailable on EDGE.\n client.config.get('runtime.client.edgeFeatures.agents') ? spaceId : undefined,\n ),\n ),\n Layer.provideMerge(serviceLayer),\n Layer.provideMerge(CredentialsService.layerFromDatabase()),\n Layer.provideMerge(space ? DatabaseService.layer(space.db) : DatabaseService.notAvailable),\n Layer.provideMerge(space ? QueueService.layer(space.queues) : QueueService.notAvailable),\n ),\n ),\n ),\n ),\n ),\n );\n }),\n );\n\n const runtime = ManagedRuntime.make(layer);\n this.#runtimes.set(spaceId, runtime);\n\n return runtime;\n }\n}\n\nconst InvocationTracerLive = Layer.unwrapEffect(\n Effect.gen(function* () {\n const {\n objects: [properties],\n } = yield* DatabaseService.runQuery(Query.type(PropertiesType));\n invariant(properties);\n if (!properties.invocationTraceQueue) {\n const queue = yield* QueueService.createQueue({ subspaceTag: 'trace' });\n properties.invocationTraceQueue = Ref.fromDXN(queue.dxn);\n }\n const queue = properties.invocationTraceQueue.target;\n invariant(queue);\n return InvocationTracer.layerLive({ invocationTraceQueue: queue });\n }),\n);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Toolkit", "BrowserKeyValueStore", "Effect", "Layer", "ManagedRuntime", "Capabilities", "contributes", "makeToolExecutionServiceFromFunctions", "makeToolResolverFromFunctions", "Resource", "Query", "Ref", "CredentialsService", "DatabaseService", "FunctionImplementationResolver", "FunctionInvocationService", "InvocationTracer", "LocalFunctionExecutionService", "QueueService", "RemoteFunctionExecutionService", "TriggerDispatcher", "TriggerStateStore", "invariant", "ClientCapabilities", "PropertiesType", "context", "provider", "ComputeRuntimeProviderImpl", "open", "contributes", "AutomationCapabilities", "ComputeRuntime", "close", "Resource", "Map", "_open", "_close", "Promise", "all", "Array", "from", "values", "map", "rt", "dispose", "clear", "getRuntime", "spaceId", "has", "get", "layer", "unwrapEffect", "gen", "client", "getCapability", "ClientCapabilities", "Client", "serviceLayer", "Capabilities", "AiServiceLayer", "die", "functions", "getCapabilities", "Functions", "toolkits", "Toolkit", "handlers", "ToolkitHandler", "allFunctions", "flat", "toolkit", "merge", "handlersLayer", "mergeAll", "empty", "space", "spaces", "invariant", "promise", "waitUntilReady", "TriggerDispatcher", "timeControl", "pipe", "provideMerge", "InvocationTracerLive", "TriggerStateStore", "layerKv", "provide", "layerLocalStorage", "makeToolResolverFromFunctions", "makeToolExecutionServiceFromFunctions", "FunctionInvocationService", "LocalFunctionExecutionService", "layerLive", "FunctionImplementationResolver", "layerTest", "RemoteFunctionExecutionService", "fromClient", "edge", "baseUrl", "config", "undefined", "CredentialsService", "layerFromDatabase", "DatabaseService", "db", "notAvailable", "QueueService", "queues", "runtime", "make", "set", "objects", "properties", "runQuery", "Query", "type", "PropertiesType", "invocationTraceQueue", "queue", "createQueue", "subspaceTag", "Ref", "fromDXN", "dxn", "target", "InvocationTracer"]
|
|
7
|
+
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useComputeRuntimeCallback,
|
|
3
3
|
useTriggerRuntimeControls
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
6
|
-
import "../chunk-
|
|
7
|
-
import "../chunk-WWURMV25.mjs";
|
|
4
|
+
} from "../chunk-CVYJM6OO.mjs";
|
|
5
|
+
import "../chunk-GCGHLQM2.mjs";
|
|
6
|
+
import "../chunk-LZQFZO3B.mjs";
|
|
8
7
|
export {
|
|
9
8
|
useComputeRuntimeCallback,
|
|
10
9
|
useTriggerRuntimeControls
|
|
@@ -3,26 +3,35 @@ import {
|
|
|
3
3
|
AutomationSettings,
|
|
4
4
|
FunctionsContainer,
|
|
5
5
|
FunctionsPanel
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-XXZNGORC.mjs";
|
|
7
7
|
import {
|
|
8
8
|
AppGraphBuilder,
|
|
9
9
|
ComputeRuntime,
|
|
10
10
|
IntentResolver,
|
|
11
|
-
ReactSurface
|
|
12
|
-
|
|
11
|
+
ReactSurface,
|
|
12
|
+
useComputeRuntimeCallback,
|
|
13
|
+
useTriggerRuntimeControls
|
|
14
|
+
} from "./chunk-CVYJM6OO.mjs";
|
|
13
15
|
import {
|
|
14
16
|
AutomationCapabilities
|
|
15
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-GCGHLQM2.mjs";
|
|
16
18
|
import {
|
|
17
19
|
TriggerEditor
|
|
18
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-JW7XSPYW.mjs";
|
|
19
21
|
import {
|
|
20
22
|
meta
|
|
21
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-LZQFZO3B.mjs";
|
|
24
|
+
|
|
25
|
+
// src/events.ts
|
|
26
|
+
import { defineEvent } from "@dxos/app-framework";
|
|
27
|
+
(function(AutomationEvents2) {
|
|
28
|
+
AutomationEvents2.ComputeRuntimeReady = defineEvent(`${meta.id}/event/compute-runtime-ready`);
|
|
29
|
+
})(AutomationEvents || (AutomationEvents = {}));
|
|
30
|
+
var AutomationEvents;
|
|
22
31
|
|
|
23
32
|
// src/AutomationPlugin.tsx
|
|
24
33
|
import { Capabilities, Events, contributes, defineModule, definePlugin } from "@dxos/app-framework";
|
|
25
|
-
import {
|
|
34
|
+
import { Function, Trigger } from "@dxos/functions";
|
|
26
35
|
import { ClientCapabilities, ClientEvents } from "@dxos/plugin-client";
|
|
27
36
|
|
|
28
37
|
// src/translations.ts
|
|
@@ -43,6 +52,7 @@ var translations = [
|
|
|
43
52
|
"function copy id": "Copy Function ID",
|
|
44
53
|
"no functions found": "No functions found",
|
|
45
54
|
"go to function source button label": "Show function source",
|
|
55
|
+
"delete function button label": "Delete function",
|
|
46
56
|
"trigger editor title": "Configure Trigger",
|
|
47
57
|
"new trigger label": "Add Trigger",
|
|
48
58
|
"trigger type timer": "Timer",
|
|
@@ -72,8 +82,8 @@ var AutomationPlugin = definePlugin(meta, () => [
|
|
|
72
82
|
id: `${meta.id}/module/schema`,
|
|
73
83
|
activatesOn: ClientEvents.SetupSchema,
|
|
74
84
|
activate: () => contributes(ClientCapabilities.Schema, [
|
|
75
|
-
|
|
76
|
-
|
|
85
|
+
Function.Function,
|
|
86
|
+
Trigger.Trigger
|
|
77
87
|
])
|
|
78
88
|
}),
|
|
79
89
|
defineModule({
|
|
@@ -94,17 +104,23 @@ var AutomationPlugin = definePlugin(meta, () => [
|
|
|
94
104
|
defineModule({
|
|
95
105
|
id: `${meta.id}/module/compute-runtime`,
|
|
96
106
|
activatesOn: ClientEvents.ClientReady,
|
|
107
|
+
activatesAfter: [
|
|
108
|
+
AutomationEvents.ComputeRuntimeReady
|
|
109
|
+
],
|
|
97
110
|
activate: ComputeRuntime
|
|
98
111
|
})
|
|
99
112
|
]);
|
|
100
113
|
export {
|
|
101
114
|
AutomationCapabilities,
|
|
115
|
+
AutomationEvents,
|
|
102
116
|
AutomationPanel,
|
|
103
117
|
AutomationPlugin,
|
|
104
118
|
AutomationSettings,
|
|
105
119
|
FunctionsContainer,
|
|
106
120
|
FunctionsPanel,
|
|
107
121
|
TriggerEditor,
|
|
108
|
-
meta
|
|
122
|
+
meta,
|
|
123
|
+
useComputeRuntimeCallback,
|
|
124
|
+
useTriggerRuntimeControls
|
|
109
125
|
};
|
|
110
126
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/AutomationPlugin.tsx", "../../../src/translations.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Capabilities, Events, contributes, defineModule, definePlugin } from '@dxos/app-framework';\nimport {
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["Capabilities", "Events", "contributes", "defineModule", "definePlugin", "
|
|
3
|
+
"sources": ["../../../src/events.ts", "../../../src/AutomationPlugin.tsx", "../../../src/translations.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineEvent } from '@dxos/app-framework';\n\nimport { meta } from './meta';\n\nexport namespace AutomationEvents {\n export const ComputeRuntimeReady = defineEvent(`${meta.id}/event/compute-runtime-ready`);\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Capabilities, Events, contributes, defineModule, definePlugin } from '@dxos/app-framework';\nimport { Function, Trigger } from '@dxos/functions';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\n\nimport { AppGraphBuilder, ComputeRuntime, IntentResolver, ReactSurface } from './capabilities';\nimport { AutomationEvents } from './events';\nimport { meta } from './meta';\nimport { translations } from './translations';\n\nexport const AutomationPlugin = definePlugin(meta, () => [\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, translations),\n }),\n defineModule({\n id: `${meta.id}/module/schema`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () => contributes(ClientCapabilities.Schema, [Function.Function, Trigger.Trigger]),\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/compute-runtime`,\n activatesOn: ClientEvents.ClientReady,\n activatesAfter: [AutomationEvents.ComputeRuntimeReady],\n activate: ComputeRuntime,\n }),\n]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nimport { meta } from './meta';\n\nexport const translations = [\n {\n 'en-US': {\n [meta.id]: {\n 'plugin name': 'Automation',\n 'automation panel label': 'Automations',\n 'script automation label': 'Automation',\n 'automation verbose label': 'Manage automations',\n 'automation description': 'You can manage all the triggers which automate your space here.',\n\n 'runtime label': 'Enable Local Runtime',\n 'runtime description':\n 'This will start a trigger dispatcher locally for this space to run triggers on your device while Composer is running.',\n\n 'functions panel label': 'Functions',\n 'functions verbose label': 'Manage deployed functions',\n 'functions description': 'You can manage all the functions deployed from your space on EDGE here.',\n 'function copy id': 'Copy Function ID',\n 'no functions found': 'No functions found',\n 'go to function source button label': 'Show function source',\n 'delete function button label': 'Delete function',\n\n 'trigger editor title': 'Configure Trigger',\n 'new trigger label': 'Add Trigger',\n 'trigger type timer': 'Timer',\n 'trigger type webhook': 'Webhook',\n 'trigger type websocket': 'Websocket',\n 'trigger type subscription': 'Subscription',\n 'trigger type email': 'Email',\n 'trigger type queue': 'Queue',\n\n 'trigger copy url': 'Copy URL',\n 'trigger copy email': 'Copy Email',\n\n 'trigger payload add': 'Add',\n 'trigger payload remove': 'Remove',\n 'trigger payload prop name placeholder': 'New payload property name',\n },\n },\n },\n] as const satisfies Resource[];\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,SAASA,mBAAmB;UAIXC,mBAAAA;oBACFC,sBAAsBC,YAAY,GAAGC,KAAKC,EAAE,8BAA8B;AACzF,GAFiBJ,qBAAAA,mBAAAA,CAAAA,EAAAA;;;;ACJjB,SAASK,cAAcC,QAAQC,aAAaC,cAAcC,oBAAoB;AAC9E,SAASC,UAAUC,eAAe;AAClC,SAASC,oBAAoBC,oBAAoB;;;ACE1C,IAAMC,eAAe;EAC1B;IACE,SAAS;MACP,CAACC,KAAKC,EAAE,GAAG;QACT,eAAe;QACf,0BAA0B;QAC1B,2BAA2B;QAC3B,4BAA4B;QAC5B,0BAA0B;QAE1B,iBAAiB;QACjB,uBACE;QAEF,yBAAyB;QACzB,2BAA2B;QAC3B,yBAAyB;QACzB,oBAAoB;QACpB,sBAAsB;QACtB,sCAAsC;QACtC,gCAAgC;QAEhC,wBAAwB;QACxB,qBAAqB;QACrB,sBAAsB;QACtB,wBAAwB;QACxB,0BAA0B;QAC1B,6BAA6B;QAC7B,sBAAsB;QACtB,sBAAsB;QAEtB,oBAAoB;QACpB,sBAAsB;QAEtB,uBAAuB;QACvB,0BAA0B;QAC1B,yCAAyC;MAC3C;IACF;EACF;;;;ADlCK,IAAMC,mBAAmBC,aAAaC,MAAM,MAAM;EACvDC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOC;IACpBC,UAAU,MAAMC,YAAYC,aAAaC,cAAcC,YAAAA;EACzD,CAAA;EACAT,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaQ,aAAaC;IAC1BN,UAAU,MAAMC,YAAYM,mBAAmBC,QAAQ;MAACC,SAASA;MAAUC,QAAQA;KAAQ;EAC7F,CAAA;EACAf,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOa;IACpBX,UAAUY;EACZ,CAAA;EACAjB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOe;IACpBb,UAAUc;EACZ,CAAA;EACAnB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOiB;IACpBf,UAAUgB;EACZ,CAAA;EACArB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaQ,aAAaY;IAC1BC,gBAAgB;MAACC,iBAAiBC;;IAClCpB,UAAUqB;EACZ,CAAA;CACD;",
|
|
6
|
+
"names": ["defineEvent", "AutomationEvents", "ComputeRuntimeReady", "defineEvent", "meta", "id", "Capabilities", "Events", "contributes", "defineModule", "definePlugin", "Function", "Trigger", "ClientCapabilities", "ClientEvents", "translations", "meta", "id", "AutomationPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupTranslations", "activate", "contributes", "Capabilities", "Translations", "translations", "ClientEvents", "SetupSchema", "ClientCapabilities", "Schema", "Function", "Trigger", "SetupAppGraph", "AppGraphBuilder", "SetupIntentResolver", "IntentResolver", "SetupReactSurface", "ReactSurface", "ClientReady", "activatesAfter", "AutomationEvents", "ComputeRuntimeReady", "ComputeRuntime"]
|
|
7
7
|
}
|