@dxos/plugin-automation 0.8.4-main.67995b8 → 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-IIEI5D2K.mjs +68 -0
- package/dist/lib/browser/AutomationSettings-IIEI5D2K.mjs.map +7 -0
- package/dist/lib/browser/{FunctionsContainer-IOB333TX.mjs → FunctionsContainer-IZTCGNJZ.mjs} +9 -12
- package/dist/lib/browser/FunctionsContainer-IZTCGNJZ.mjs.map +7 -0
- package/dist/lib/browser/{FunctionsPanel-56ZKRVM5.mjs → FunctionsPanel-HFCK3JRB.mjs} +3 -3
- package/dist/lib/browser/{app-graph-builder-ZTAUTFI4.mjs → app-graph-builder-7VKA2GS3.mjs} +12 -11
- package/dist/lib/browser/app-graph-builder-7VKA2GS3.mjs.map +7 -0
- package/dist/lib/browser/chunk-CVYJM6OO.mjs +66 -0
- package/dist/lib/browser/chunk-CVYJM6OO.mjs.map +7 -0
- package/dist/lib/browser/{chunk-LYJVTIVD.mjs → chunk-FHSN7G4H.mjs} +25 -12
- package/dist/lib/browser/chunk-FHSN7G4H.mjs.map +7 -0
- package/dist/lib/browser/chunk-GCGHLQM2.mjs +15 -0
- package/dist/lib/browser/chunk-GCGHLQM2.mjs.map +7 -0
- package/dist/lib/browser/{chunk-FSJZXTS2.mjs → chunk-JW7XSPYW.mjs} +69 -32
- package/dist/lib/browser/chunk-JW7XSPYW.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ERTIGJYE.mjs → chunk-K5YNWESC.mjs} +68 -32
- 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-XXZNGORC.mjs +14 -0
- package/dist/lib/browser/chunk-XXZNGORC.mjs.map +7 -0
- package/dist/lib/browser/{chunk-HN7OHFCB.mjs → chunk-YBPJCY3F.mjs} +3 -3
- package/dist/lib/browser/chunk-YBPJCY3F.mjs.map +7 -0
- package/dist/lib/browser/compute-runtime-PFYRMGN2.mjs +114 -0
- package/dist/lib/browser/compute-runtime-PFYRMGN2.mjs.map +7 -0
- package/dist/lib/browser/hooks/index.mjs +11 -0
- package/dist/lib/browser/index.mjs +44 -19
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/{intent-resolver-U3ZAQEFW.mjs → intent-resolver-5HR7M7T6.mjs} +15 -14
- 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-4DFSM7OX.mjs → react-surface-WPMY3EX2.mjs} +18 -19
- 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-YYUMSK2W.mjs → AutomationPanel-NVEIUIZP.mjs} +4 -4
- package/dist/lib/node-esm/AutomationSettings-VIIEPI2P.mjs +69 -0
- package/dist/lib/node-esm/AutomationSettings-VIIEPI2P.mjs.map +7 -0
- package/dist/lib/node-esm/{FunctionsContainer-DJWB6WFH.mjs → FunctionsContainer-KKRCIXGB.mjs} +9 -12
- package/dist/lib/node-esm/FunctionsContainer-KKRCIXGB.mjs.map +7 -0
- package/dist/lib/node-esm/{FunctionsPanel-KGIOZSPZ.mjs → FunctionsPanel-74ELGR7P.mjs} +3 -3
- package/dist/lib/node-esm/FunctionsPanel-74ELGR7P.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-3FP63ZSG.mjs → app-graph-builder-RTOFJNFV.mjs} +12 -11
- package/dist/lib/node-esm/app-graph-builder-RTOFJNFV.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-3BJ6BR3E.mjs +67 -0
- package/dist/lib/node-esm/chunk-3BJ6BR3E.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-CEVIVRTY.mjs +19 -0
- package/dist/lib/node-esm/chunk-CEVIVRTY.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-OEZNHUL2.mjs → chunk-ECJKIUBO.mjs} +3 -3
- package/dist/lib/node-esm/chunk-ECJKIUBO.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ZGPUV5VS.mjs → chunk-JOCKHLFT.mjs} +25 -12
- package/dist/lib/node-esm/chunk-JOCKHLFT.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-MRYKW5TM.mjs +16 -0
- package/dist/lib/node-esm/chunk-MRYKW5TM.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-U5Q2NI7H.mjs +16 -0
- package/dist/lib/node-esm/chunk-U5Q2NI7H.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-AZH66CED.mjs → chunk-W76WUTZY.mjs} +69 -32
- package/dist/lib/node-esm/chunk-W76WUTZY.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HIMYPGHF.mjs → chunk-Y7PJXFCJ.mjs} +68 -32
- package/dist/lib/node-esm/chunk-Y7PJXFCJ.mjs.map +7 -0
- package/dist/lib/node-esm/compute-runtime-IXCSD3W7.mjs +115 -0
- package/dist/lib/node-esm/compute-runtime-IXCSD3W7.mjs.map +7 -0
- package/dist/lib/node-esm/hooks/index.mjs +12 -0
- package/dist/lib/node-esm/hooks/index.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +44 -19
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/{intent-resolver-3QWXEBPX.mjs → intent-resolver-KDRYB5BC.mjs} +15 -14
- 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-3PNW7NDW.mjs → react-surface-Y2BBJV2I.mjs} +18 -19
- 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 +1 -1
- package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +19 -0
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
- package/dist/types/src/capabilities/compute-runtime.d.ts +5 -0
- package/dist/types/src/capabilities/compute-runtime.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +5 -3
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +6 -5
- package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
- package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +46 -4
- package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
- package/dist/types/src/components/AutomationSettings.d.ts +5 -0
- package/dist/types/src/components/AutomationSettings.d.ts.map +1 -0
- package/dist/types/src/components/FunctionsContainer.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 +47 -4
- package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/TriggerSettings.d.ts +6 -0
- package/dist/types/src/components/TriggerSettings.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +2 -2
- package/dist/types/src/components/index.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/index.d.ts +3 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -0
- package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +8 -0
- package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -0
- package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +11 -0
- package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +3 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +0 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +3 -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 +62 -41
- package/src/AutomationPlugin.tsx +37 -31
- package/src/capabilities/app-graph-builder.ts +12 -11
- package/src/capabilities/capabilities.ts +48 -0
- package/src/capabilities/compute-runtime.ts +138 -0
- package/src/capabilities/index.ts +3 -0
- package/src/capabilities/intent-resolver.ts +11 -11
- package/src/capabilities/react-surface.tsx +13 -14
- package/src/components/AutomationPanel/AutomationPanel.stories.tsx +15 -16
- package/src/components/AutomationPanel/AutomationPanel.tsx +101 -50
- package/src/components/AutomationSettings.tsx +30 -0
- package/src/components/FunctionsContainer.tsx +11 -13
- package/src/components/FunctionsPanel/FunctionsPanel.tsx +26 -14
- package/src/components/TriggerEditor/FunctionInputEditor.tsx +10 -4
- package/src/components/TriggerEditor/SpecSelector.tsx +23 -17
- package/src/components/TriggerEditor/TriggerEditor.stories.tsx +68 -26
- package/src/components/TriggerEditor/TriggerEditor.tsx +45 -25
- package/src/components/TriggerSettings.tsx +25 -0
- package/src/components/index.ts +1 -1
- package/src/events.ts +11 -0
- package/src/hooks/index.ts +6 -0
- package/src/hooks/useComputeRuntimeCallback.ts +32 -0
- package/src/hooks/useTriggerRuntimeControls.ts +52 -0
- package/src/index.ts +3 -0
- package/src/meta.ts +6 -5
- package/src/testing/test-functions.ts +1 -1
- package/src/translations.ts +5 -0
- package/src/types/schema.ts +1 -1
- package/dist/lib/browser/AutomationContainer-VZNV2ZQF.mjs +0 -38
- package/dist/lib/browser/AutomationContainer-VZNV2ZQF.mjs.map +0 -7
- package/dist/lib/browser/AutomationPanel-ZWA6GOFY.mjs +0 -11
- package/dist/lib/browser/FunctionsContainer-IOB333TX.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-ZTAUTFI4.mjs.map +0 -7
- package/dist/lib/browser/chunk-ECSTS2UI.mjs +0 -14
- package/dist/lib/browser/chunk-ECSTS2UI.mjs.map +0 -7
- package/dist/lib/browser/chunk-ERTIGJYE.mjs.map +0 -7
- package/dist/lib/browser/chunk-FSJZXTS2.mjs.map +0 -7
- package/dist/lib/browser/chunk-GW5U2DGT.mjs +0 -15
- package/dist/lib/browser/chunk-GW5U2DGT.mjs.map +0 -7
- package/dist/lib/browser/chunk-HN7OHFCB.mjs.map +0 -7
- package/dist/lib/browser/chunk-LYJVTIVD.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-U3ZAQEFW.mjs.map +0 -7
- package/dist/lib/browser/react-surface-4DFSM7OX.mjs.map +0 -7
- package/dist/lib/node-esm/AutomationContainer-WMIH3F4V.mjs +0 -39
- package/dist/lib/node-esm/AutomationContainer-WMIH3F4V.mjs.map +0 -7
- package/dist/lib/node-esm/FunctionsContainer-DJWB6WFH.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-3FP63ZSG.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-AZH66CED.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HIMYPGHF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NK5N3QKD.mjs +0 -17
- package/dist/lib/node-esm/chunk-NK5N3QKD.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OEZNHUL2.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SGZPTJ47.mjs +0 -16
- package/dist/lib/node-esm/chunk-SGZPTJ47.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ZGPUV5VS.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-3QWXEBPX.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-3PNW7NDW.mjs.map +0 -7
- package/dist/types/src/components/AutomationContainer.d.ts +0 -5
- package/dist/types/src/components/AutomationContainer.d.ts.map +0 -1
- package/src/components/AutomationContainer.tsx +0 -30
- /package/dist/lib/browser/{AutomationPanel-ZWA6GOFY.mjs.map → AutomationPanel-LBXJDM6Z.mjs.map} +0 -0
- /package/dist/lib/browser/{FunctionsPanel-56ZKRVM5.mjs.map → FunctionsPanel-HFCK3JRB.mjs.map} +0 -0
- /package/dist/lib/{node-esm/AutomationPanel-YYUMSK2W.mjs.map → browser/hooks/index.mjs.map} +0 -0
- /package/dist/lib/node-esm/{FunctionsPanel-KGIOZSPZ.mjs.map → AutomationPanel-NVEIUIZP.mjs.map} +0 -0
|
@@ -1,41 +1,59 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
TriggerEditor
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-W76WUTZY.mjs";
|
|
5
5
|
import {
|
|
6
|
-
|
|
7
|
-
} from "./chunk-
|
|
6
|
+
meta
|
|
7
|
+
} from "./chunk-CEVIVRTY.mjs";
|
|
8
8
|
|
|
9
9
|
// src/components/AutomationPanel/AutomationPanel.tsx
|
|
10
10
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
11
|
+
import * as Array from "effect/Array";
|
|
12
|
+
import * as EFn from "effect/Function";
|
|
13
|
+
import * as Match from "effect/Match";
|
|
14
|
+
import * as Schema from "effect/Schema";
|
|
15
|
+
import React, { useMemo, useState } from "react";
|
|
16
|
+
import { Filter, Obj, Tag } from "@dxos/echo";
|
|
17
|
+
import { Function, Script, Trigger } from "@dxos/functions";
|
|
18
|
+
import { useTypeOptions } from "@dxos/plugin-space";
|
|
15
19
|
import { useClient } from "@dxos/react-client";
|
|
16
|
-
import {
|
|
20
|
+
import { getSpace, useQuery } from "@dxos/react-client/echo";
|
|
17
21
|
import { Clipboard, IconButton, Input, Separator, useTranslation } from "@dxos/react-ui";
|
|
18
22
|
import { ControlItem, controlItemClasses } from "@dxos/react-ui-form";
|
|
19
23
|
import { List } from "@dxos/react-ui-list";
|
|
20
24
|
import { ghostHover, mx } from "@dxos/react-ui-theme";
|
|
25
|
+
import { DataType } from "@dxos/schema";
|
|
21
26
|
var grid = "grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]";
|
|
22
|
-
var AutomationPanel = ({ space, object, initialTrigger, onDone }) => {
|
|
27
|
+
var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) => {
|
|
23
28
|
var _effect = _useSignals();
|
|
24
29
|
try {
|
|
25
|
-
const { t } = useTranslation(
|
|
30
|
+
const { t } = useTranslation(meta.id);
|
|
26
31
|
const client = useClient();
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
const
|
|
32
|
+
const functions = useQuery(space, Filter.type(Function.Function));
|
|
33
|
+
const triggers = useQuery(space, Filter.type(Trigger.Trigger));
|
|
34
|
+
const filteredTriggers = useMemo(() => {
|
|
35
|
+
return object ? triggers.filter(triggerMatch(object)) : triggers;
|
|
36
|
+
}, [
|
|
37
|
+
object,
|
|
38
|
+
triggers
|
|
39
|
+
]);
|
|
40
|
+
const tags = useQuery(space, Filter.type(Tag.Tag));
|
|
41
|
+
const types = useTypeOptions({
|
|
42
|
+
space,
|
|
43
|
+
annotation: [
|
|
44
|
+
"dynamic",
|
|
45
|
+
"limited-static",
|
|
46
|
+
"object-form"
|
|
47
|
+
]
|
|
48
|
+
});
|
|
30
49
|
const [trigger, setTrigger] = useState(initialTrigger);
|
|
31
50
|
const [selected, setSelected] = useState();
|
|
32
51
|
const handleSelect = (trigger2) => {
|
|
33
|
-
|
|
34
|
-
setTrigger(values);
|
|
52
|
+
setTrigger(trigger2);
|
|
35
53
|
setSelected(trigger2);
|
|
36
54
|
};
|
|
37
55
|
const handleAdd = () => {
|
|
38
|
-
setTrigger(
|
|
56
|
+
setTrigger(Trigger.make({}));
|
|
39
57
|
setSelected(void 0);
|
|
40
58
|
};
|
|
41
59
|
const handleDelete = (trigger2) => {
|
|
@@ -47,7 +65,7 @@ var AutomationPanel = ({ space, object, initialTrigger, onDone }) => {
|
|
|
47
65
|
if (selected) {
|
|
48
66
|
Object.assign(selected, trigger2);
|
|
49
67
|
} else {
|
|
50
|
-
space.db.add(
|
|
68
|
+
space.db.add(Trigger.make(trigger2));
|
|
51
69
|
}
|
|
52
70
|
setTrigger(void 0);
|
|
53
71
|
setSelected(void 0);
|
|
@@ -63,20 +81,23 @@ var AutomationPanel = ({ space, object, initialTrigger, onDone }) => {
|
|
|
63
81
|
}, /* @__PURE__ */ React.createElement(TriggerEditor, {
|
|
64
82
|
space,
|
|
65
83
|
trigger,
|
|
84
|
+
readonlySpec: Boolean(object),
|
|
85
|
+
tags,
|
|
86
|
+
types,
|
|
66
87
|
onSave: handleSave,
|
|
67
88
|
onCancel: handleCancel
|
|
68
89
|
}));
|
|
69
90
|
}
|
|
70
91
|
return /* @__PURE__ */ React.createElement("div", {
|
|
71
|
-
className: controlItemClasses
|
|
72
|
-
},
|
|
73
|
-
items:
|
|
74
|
-
isItem: Schema.is(
|
|
92
|
+
className: mx(controlItemClasses, classNames)
|
|
93
|
+
}, filteredTriggers.length > 0 && /* @__PURE__ */ React.createElement(List.Root, {
|
|
94
|
+
items: filteredTriggers,
|
|
95
|
+
isItem: Schema.is(Trigger.Trigger),
|
|
75
96
|
getId: (field) => field.id
|
|
76
|
-
}, ({ items:
|
|
97
|
+
}, ({ items: filteredTriggers2 }) => /* @__PURE__ */ React.createElement("div", {
|
|
77
98
|
role: "list",
|
|
78
99
|
className: "flex flex-col w-full"
|
|
79
|
-
},
|
|
100
|
+
}, filteredTriggers2?.map((trigger2) => {
|
|
80
101
|
const copyAction = getCopyAction(client, trigger2);
|
|
81
102
|
return /* @__PURE__ */ React.createElement(List.Item, {
|
|
82
103
|
key: trigger2.id,
|
|
@@ -90,13 +111,13 @@ var AutomationPanel = ({ space, object, initialTrigger, onDone }) => {
|
|
|
90
111
|
}, /* @__PURE__ */ React.createElement(List.ItemTitle, {
|
|
91
112
|
classNames: "px-1 cursor-pointer w-0 shrink truncate",
|
|
92
113
|
onClick: () => handleSelect(trigger2)
|
|
93
|
-
}, getFunctionName(
|
|
114
|
+
}, getFunctionName(functions, trigger2) ?? "\u2205"), copyAction && /* @__PURE__ */ React.createElement(Clipboard.IconButton, {
|
|
94
115
|
label: t(copyAction.translationKey),
|
|
95
116
|
value: copyAction.contentProvider()
|
|
96
117
|
})), /* @__PURE__ */ React.createElement(List.ItemDeleteButton, {
|
|
97
118
|
onClick: () => handleDelete(trigger2)
|
|
98
119
|
}));
|
|
99
|
-
}))),
|
|
120
|
+
}))), filteredTriggers.length > 0 && /* @__PURE__ */ React.createElement(Separator, {
|
|
100
121
|
classNames: "mlb-4"
|
|
101
122
|
}), /* @__PURE__ */ React.createElement(IconButton, {
|
|
102
123
|
icon: "ph--plus--regular",
|
|
@@ -108,13 +129,13 @@ var AutomationPanel = ({ space, object, initialTrigger, onDone }) => {
|
|
|
108
129
|
}
|
|
109
130
|
};
|
|
110
131
|
var getCopyAction = (client, trigger) => {
|
|
111
|
-
if (trigger?.spec?.kind ===
|
|
132
|
+
if (trigger?.spec?.kind === "email") {
|
|
112
133
|
return {
|
|
113
134
|
translationKey: "trigger copy email",
|
|
114
135
|
contentProvider: () => `${getSpace(trigger).id}@dxos.network`
|
|
115
136
|
};
|
|
116
137
|
}
|
|
117
|
-
if (trigger?.spec?.kind ===
|
|
138
|
+
if (trigger?.spec?.kind === "webhook") {
|
|
118
139
|
return {
|
|
119
140
|
translationKey: "trigger copy url",
|
|
120
141
|
contentProvider: () => getWebhookUrl(client, trigger)
|
|
@@ -129,14 +150,29 @@ var getWebhookUrl = (client, trigger) => {
|
|
|
129
150
|
edgeUrl.protocol = isSecure ? "https" : "http";
|
|
130
151
|
return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();
|
|
131
152
|
};
|
|
132
|
-
var getFunctionName = (
|
|
153
|
+
var getFunctionName = (functions, trigger) => {
|
|
133
154
|
const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}\u2026`;
|
|
134
155
|
const functionObject = functions.find((fn) => fn === trigger.function?.target);
|
|
135
|
-
|
|
136
|
-
|
|
156
|
+
return functionObject?.name ?? shortId;
|
|
157
|
+
};
|
|
158
|
+
var scriptMatch = (script) => (trigger) => {
|
|
159
|
+
const fn = trigger.function?.target;
|
|
160
|
+
if (!Obj.instanceOf(Function.Function, fn)) {
|
|
161
|
+
return false;
|
|
137
162
|
}
|
|
138
|
-
return
|
|
163
|
+
return fn.source?.target === script;
|
|
164
|
+
};
|
|
165
|
+
var projectMatch = (project) => {
|
|
166
|
+
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)));
|
|
167
|
+
return (trigger) => {
|
|
168
|
+
const spec = Obj.getSnapshot(trigger).spec;
|
|
169
|
+
if (spec?.kind !== "subscription") {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
return viewQueries.some((query) => JSON.stringify(spec.query) === query);
|
|
173
|
+
};
|
|
139
174
|
};
|
|
175
|
+
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));
|
|
140
176
|
|
|
141
177
|
// src/components/AutomationPanel/index.ts
|
|
142
178
|
var AutomationPanel_default = AutomationPanel;
|
|
@@ -145,4 +181,4 @@ export {
|
|
|
145
181
|
AutomationPanel,
|
|
146
182
|
AutomationPanel_default
|
|
147
183
|
};
|
|
148
|
-
//# sourceMappingURL=chunk-
|
|
184
|
+
//# sourceMappingURL=chunk-Y7PJXFCJ.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,115 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
AutomationCapabilities
|
|
4
|
+
} from "./chunk-MRYKW5TM.mjs";
|
|
5
|
+
import "./chunk-CEVIVRTY.mjs";
|
|
6
|
+
|
|
7
|
+
// src/capabilities/compute-runtime.ts
|
|
8
|
+
import * as Toolkit from "@effect/ai/Toolkit";
|
|
9
|
+
import * as BrowserKeyValueStore from "@effect/platform-browser/BrowserKeyValueStore";
|
|
10
|
+
import * as Effect from "effect/Effect";
|
|
11
|
+
import * as Layer from "effect/Layer";
|
|
12
|
+
import * as ManagedRuntime from "effect/ManagedRuntime";
|
|
13
|
+
import { Capabilities, contributes } from "@dxos/app-framework";
|
|
14
|
+
import { makeToolExecutionServiceFromFunctions, makeToolResolverFromFunctions } from "@dxos/assistant";
|
|
15
|
+
import { Resource } from "@dxos/context";
|
|
16
|
+
import { Query, Ref } from "@dxos/echo";
|
|
17
|
+
import { CredentialsService, DatabaseService, FunctionImplementationResolver, FunctionInvocationService, InvocationTracer, LocalFunctionExecutionService, QueueService, RemoteFunctionExecutionService, TriggerDispatcher } from "@dxos/functions";
|
|
18
|
+
import { TriggerStateStore } from "@dxos/functions";
|
|
19
|
+
import { invariant } from "@dxos/invariant";
|
|
20
|
+
import { ClientCapabilities } from "@dxos/plugin-client";
|
|
21
|
+
import { PropertiesType } from "@dxos/react-client/echo";
|
|
22
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-automation/src/capabilities/compute-runtime.ts";
|
|
23
|
+
var compute_runtime_default = (async (context) => {
|
|
24
|
+
const provider = await new ComputeRuntimeProviderImpl(context).open();
|
|
25
|
+
return contributes(AutomationCapabilities.ComputeRuntime, provider, async () => {
|
|
26
|
+
await provider.close();
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
var ComputeRuntimeProviderImpl = class extends Resource {
|
|
30
|
+
#runtimes = /* @__PURE__ */ new Map();
|
|
31
|
+
#context;
|
|
32
|
+
constructor(context) {
|
|
33
|
+
super();
|
|
34
|
+
this.#context = context;
|
|
35
|
+
}
|
|
36
|
+
async _open() {
|
|
37
|
+
}
|
|
38
|
+
async _close() {
|
|
39
|
+
await Promise.all(Array.from(this.#runtimes.values()).map((rt) => rt.dispose()));
|
|
40
|
+
this.#runtimes.clear();
|
|
41
|
+
}
|
|
42
|
+
getRuntime(spaceId) {
|
|
43
|
+
if (this.#runtimes.has(spaceId)) {
|
|
44
|
+
return this.#runtimes.get(spaceId);
|
|
45
|
+
}
|
|
46
|
+
const layer = Layer.unwrapEffect(Effect.gen(this, function* () {
|
|
47
|
+
const client = this.#context.getCapability(ClientCapabilities.Client);
|
|
48
|
+
const serviceLayer = this.#context.getCapability(Capabilities.AiServiceLayer) ?? Layer.die("AiService not found");
|
|
49
|
+
const functions = this.#context.getCapabilities(Capabilities.Functions);
|
|
50
|
+
const toolkits = this.#context.getCapabilities(Capabilities.Toolkit);
|
|
51
|
+
const handlers = this.#context.getCapabilities(Capabilities.ToolkitHandler);
|
|
52
|
+
const allFunctions = functions.flat();
|
|
53
|
+
const toolkit = Toolkit.merge(...toolkits);
|
|
54
|
+
const handlersLayer = Layer.mergeAll(Layer.empty, ...handlers);
|
|
55
|
+
const space = client.spaces.get(spaceId);
|
|
56
|
+
invariant(space, void 0, {
|
|
57
|
+
F: __dxlog_file,
|
|
58
|
+
L: 79,
|
|
59
|
+
S: this,
|
|
60
|
+
A: [
|
|
61
|
+
"space",
|
|
62
|
+
""
|
|
63
|
+
]
|
|
64
|
+
});
|
|
65
|
+
yield* Effect.promise(() => space.waitUntilReady());
|
|
66
|
+
return Layer.mergeAll(TriggerDispatcher.layer({
|
|
67
|
+
timeControl: "natural"
|
|
68
|
+
})).pipe(Layer.provideMerge(Layer.mergeAll(InvocationTracerLive, TriggerStateStore.layerKv.pipe(Layer.provide(BrowserKeyValueStore.layerLocalStorage)), makeToolResolverFromFunctions(allFunctions, toolkit), makeToolExecutionServiceFromFunctions(toolkit, handlersLayer))), Layer.provideMerge(Layer.mergeAll(FunctionInvocationService.layer.pipe(Layer.provideMerge(LocalFunctionExecutionService.layerLive.pipe(Layer.provideMerge(FunctionImplementationResolver.layerTest({
|
|
69
|
+
functions: allFunctions
|
|
70
|
+
})), Layer.provideMerge(RemoteFunctionExecutionService.fromClient(
|
|
71
|
+
client.edge.baseUrl,
|
|
72
|
+
// If agent is not enabled do not provide spaceId because space context will be unavailable on EDGE.
|
|
73
|
+
client.config.get("runtime.client.edgeFeatures.agents") ? spaceId : void 0
|
|
74
|
+
)), 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)))))));
|
|
75
|
+
}));
|
|
76
|
+
const runtime = ManagedRuntime.make(layer);
|
|
77
|
+
this.#runtimes.set(spaceId, runtime);
|
|
78
|
+
return runtime;
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
var InvocationTracerLive = Layer.unwrapEffect(Effect.gen(function* () {
|
|
82
|
+
const { objects: [properties] } = yield* DatabaseService.runQuery(Query.type(PropertiesType));
|
|
83
|
+
invariant(properties, void 0, {
|
|
84
|
+
F: __dxlog_file,
|
|
85
|
+
L: 129,
|
|
86
|
+
S: this,
|
|
87
|
+
A: [
|
|
88
|
+
"properties",
|
|
89
|
+
""
|
|
90
|
+
]
|
|
91
|
+
});
|
|
92
|
+
if (!properties.invocationTraceQueue) {
|
|
93
|
+
const queue2 = yield* QueueService.createQueue({
|
|
94
|
+
subspaceTag: "trace"
|
|
95
|
+
});
|
|
96
|
+
properties.invocationTraceQueue = Ref.fromDXN(queue2.dxn);
|
|
97
|
+
}
|
|
98
|
+
const queue = properties.invocationTraceQueue.target;
|
|
99
|
+
invariant(queue, void 0, {
|
|
100
|
+
F: __dxlog_file,
|
|
101
|
+
L: 135,
|
|
102
|
+
S: this,
|
|
103
|
+
A: [
|
|
104
|
+
"queue",
|
|
105
|
+
""
|
|
106
|
+
]
|
|
107
|
+
});
|
|
108
|
+
return InvocationTracer.layerLive({
|
|
109
|
+
invocationTraceQueue: queue
|
|
110
|
+
});
|
|
111
|
+
}));
|
|
112
|
+
export {
|
|
113
|
+
compute_runtime_default as default
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=compute-runtime-IXCSD3W7.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
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
useComputeRuntimeCallback,
|
|
4
|
+
useTriggerRuntimeControls
|
|
5
|
+
} from "../chunk-3BJ6BR3E.mjs";
|
|
6
|
+
import "../chunk-MRYKW5TM.mjs";
|
|
7
|
+
import "../chunk-CEVIVRTY.mjs";
|
|
8
|
+
export {
|
|
9
|
+
useComputeRuntimeCallback,
|
|
10
|
+
useTriggerRuntimeControls
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,29 +1,40 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
|
-
AutomationContainer,
|
|
4
3
|
AutomationPanel,
|
|
4
|
+
AutomationSettings,
|
|
5
5
|
FunctionsContainer,
|
|
6
6
|
FunctionsPanel
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-U5Q2NI7H.mjs";
|
|
8
|
+
import {
|
|
9
|
+
AppGraphBuilder,
|
|
10
|
+
ComputeRuntime,
|
|
11
|
+
IntentResolver,
|
|
12
|
+
ReactSurface,
|
|
13
|
+
useComputeRuntimeCallback,
|
|
14
|
+
useTriggerRuntimeControls
|
|
15
|
+
} from "./chunk-3BJ6BR3E.mjs";
|
|
16
|
+
import {
|
|
17
|
+
AutomationCapabilities
|
|
18
|
+
} from "./chunk-MRYKW5TM.mjs";
|
|
8
19
|
import {
|
|
9
20
|
TriggerEditor
|
|
10
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-W76WUTZY.mjs";
|
|
11
22
|
import {
|
|
12
|
-
AUTOMATION_PLUGIN,
|
|
13
23
|
meta
|
|
14
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-CEVIVRTY.mjs";
|
|
25
|
+
|
|
26
|
+
// src/events.ts
|
|
27
|
+
import { defineEvent } from "@dxos/app-framework";
|
|
28
|
+
(function(AutomationEvents2) {
|
|
29
|
+
AutomationEvents2.ComputeRuntimeReady = defineEvent(`${meta.id}/event/compute-runtime-ready`);
|
|
30
|
+
})(AutomationEvents || (AutomationEvents = {}));
|
|
31
|
+
var AutomationEvents;
|
|
15
32
|
|
|
16
33
|
// src/AutomationPlugin.tsx
|
|
17
|
-
import { Capabilities, contributes, defineModule, definePlugin
|
|
18
|
-
import {
|
|
34
|
+
import { Capabilities, Events, contributes, defineModule, definePlugin } from "@dxos/app-framework";
|
|
35
|
+
import { Function, Trigger } from "@dxos/functions";
|
|
19
36
|
import { ClientCapabilities, ClientEvents } from "@dxos/plugin-client";
|
|
20
37
|
|
|
21
|
-
// src/capabilities/index.ts
|
|
22
|
-
import { lazy } from "@dxos/app-framework";
|
|
23
|
-
var AppGraphBuilder = lazy(() => import("./app-graph-builder-3FP63ZSG.mjs"));
|
|
24
|
-
var IntentResolver = lazy(() => import("./intent-resolver-3QWXEBPX.mjs"));
|
|
25
|
-
var ReactSurface = lazy(() => import("./react-surface-3PNW7NDW.mjs"));
|
|
26
|
-
|
|
27
38
|
// src/translations.ts
|
|
28
39
|
var translations = [
|
|
29
40
|
{
|
|
@@ -34,12 +45,15 @@ var translations = [
|
|
|
34
45
|
"script automation label": "Automation",
|
|
35
46
|
"automation verbose label": "Manage automations",
|
|
36
47
|
"automation description": "You can manage all the triggers which automate your space here.",
|
|
48
|
+
"runtime label": "Enable Local Runtime",
|
|
49
|
+
"runtime description": "This will start a trigger dispatcher locally for this space to run triggers on your device while Composer is running.",
|
|
37
50
|
"functions panel label": "Functions",
|
|
38
51
|
"functions verbose label": "Manage deployed functions",
|
|
39
52
|
"functions description": "You can manage all the functions deployed from your space on EDGE here.",
|
|
40
53
|
"function copy id": "Copy Function ID",
|
|
41
54
|
"no functions found": "No functions found",
|
|
42
55
|
"go to function source button label": "Show function source",
|
|
56
|
+
"delete function button label": "Delete function",
|
|
43
57
|
"trigger editor title": "Configure Trigger",
|
|
44
58
|
"new trigger label": "Add Trigger",
|
|
45
59
|
"trigger type timer": "Timer",
|
|
@@ -59,7 +73,7 @@ var translations = [
|
|
|
59
73
|
];
|
|
60
74
|
|
|
61
75
|
// src/AutomationPlugin.tsx
|
|
62
|
-
var AutomationPlugin = () =>
|
|
76
|
+
var AutomationPlugin = definePlugin(meta, () => [
|
|
63
77
|
defineModule({
|
|
64
78
|
id: `${meta.id}/module/translations`,
|
|
65
79
|
activatesOn: Events.SetupTranslations,
|
|
@@ -69,8 +83,8 @@ var AutomationPlugin = () => definePlugin(meta, [
|
|
|
69
83
|
id: `${meta.id}/module/schema`,
|
|
70
84
|
activatesOn: ClientEvents.SetupSchema,
|
|
71
85
|
activate: () => contributes(ClientCapabilities.Schema, [
|
|
72
|
-
|
|
73
|
-
|
|
86
|
+
Function.Function,
|
|
87
|
+
Trigger.Trigger
|
|
74
88
|
])
|
|
75
89
|
}),
|
|
76
90
|
defineModule({
|
|
@@ -87,16 +101,27 @@ var AutomationPlugin = () => definePlugin(meta, [
|
|
|
87
101
|
id: `${meta.id}/module/react-surface`,
|
|
88
102
|
activatesOn: Events.SetupReactSurface,
|
|
89
103
|
activate: ReactSurface
|
|
104
|
+
}),
|
|
105
|
+
defineModule({
|
|
106
|
+
id: `${meta.id}/module/compute-runtime`,
|
|
107
|
+
activatesOn: ClientEvents.ClientReady,
|
|
108
|
+
activatesAfter: [
|
|
109
|
+
AutomationEvents.ComputeRuntimeReady
|
|
110
|
+
],
|
|
111
|
+
activate: ComputeRuntime
|
|
90
112
|
})
|
|
91
113
|
]);
|
|
92
114
|
export {
|
|
93
|
-
|
|
94
|
-
|
|
115
|
+
AutomationCapabilities,
|
|
116
|
+
AutomationEvents,
|
|
95
117
|
AutomationPanel,
|
|
96
118
|
AutomationPlugin,
|
|
119
|
+
AutomationSettings,
|
|
97
120
|
FunctionsContainer,
|
|
98
121
|
FunctionsPanel,
|
|
99
122
|
TriggerEditor,
|
|
100
|
-
meta
|
|
123
|
+
meta,
|
|
124
|
+
useComputeRuntimeCallback,
|
|
125
|
+
useTriggerRuntimeControls
|
|
101
126
|
};
|
|
102
127
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Capabilities, contributes, defineModule, definePlugin
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["
|
|
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
|
}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
AutomationAction
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-ECJKIUBO.mjs";
|
|
5
|
+
import "./chunk-CEVIVRTY.mjs";
|
|
6
6
|
|
|
7
7
|
// src/capabilities/intent-resolver.ts
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
8
|
+
import { Capabilities, LayoutAction, contributes, createIntent, createResolver } from "@dxos/app-framework";
|
|
9
|
+
import { Ref } from "@dxos/echo";
|
|
10
|
+
import { Function, Script, Trigger } from "@dxos/functions";
|
|
11
11
|
import { ATTENDABLE_PATH_SEPARATOR } from "@dxos/plugin-deck/types";
|
|
12
12
|
import { SpaceAction } from "@dxos/plugin-space/types";
|
|
13
13
|
import { Filter } from "@dxos/react-client/echo";
|
|
14
|
-
var intent_resolver_default = (context) => contributes(Capabilities.IntentResolver, [
|
|
14
|
+
var intent_resolver_default = ((context) => contributes(Capabilities.IntentResolver, [
|
|
15
15
|
createResolver({
|
|
16
16
|
intent: AutomationAction.CreateTriggerFromTemplate,
|
|
17
17
|
resolve: async ({ space, template, enabled = false, scriptName, input }) => {
|
|
18
|
-
const trigger =
|
|
18
|
+
const trigger = Trigger.make({
|
|
19
19
|
enabled,
|
|
20
20
|
input
|
|
21
21
|
});
|
|
22
22
|
if (scriptName) {
|
|
23
|
-
const { objects: [script] } = await space.db.query(Filter.type(
|
|
23
|
+
const { objects: [script] } = await space.db.query(Filter.type(Script.Script, {
|
|
24
24
|
name: scriptName
|
|
25
25
|
})).run();
|
|
26
26
|
if (script) {
|
|
27
|
-
const { objects: [fn] } = await space.db.query(Filter.type(
|
|
27
|
+
const { objects: [fn] } = await space.db.query(Filter.type(Function.Function, {
|
|
28
28
|
source: Ref.make(script)
|
|
29
29
|
})).run();
|
|
30
30
|
if (fn) {
|
|
@@ -35,14 +35,14 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
|
|
|
35
35
|
switch (template.type) {
|
|
36
36
|
case "timer": {
|
|
37
37
|
trigger.spec = {
|
|
38
|
-
kind:
|
|
38
|
+
kind: "timer",
|
|
39
39
|
cron: template.cron
|
|
40
40
|
};
|
|
41
41
|
break;
|
|
42
42
|
}
|
|
43
43
|
case "queue": {
|
|
44
44
|
trigger.spec = {
|
|
45
|
-
kind:
|
|
45
|
+
kind: "queue",
|
|
46
46
|
queue: template.queueDXN.toString()
|
|
47
47
|
};
|
|
48
48
|
break;
|
|
@@ -55,7 +55,8 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
|
|
|
55
55
|
intents: [
|
|
56
56
|
createIntent(SpaceAction.AddObject, {
|
|
57
57
|
object: trigger,
|
|
58
|
-
target: space
|
|
58
|
+
target: space,
|
|
59
|
+
hidden: true
|
|
59
60
|
}),
|
|
60
61
|
createIntent(LayoutAction.Open, {
|
|
61
62
|
part: "main",
|
|
@@ -70,8 +71,8 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
|
|
|
70
71
|
};
|
|
71
72
|
}
|
|
72
73
|
})
|
|
73
|
-
]);
|
|
74
|
+
]));
|
|
74
75
|
export {
|
|
75
76
|
intent_resolver_default as default
|
|
76
77
|
};
|
|
77
|
-
//# sourceMappingURL=intent-resolver-
|
|
78
|
+
//# sourceMappingURL=intent-resolver-KDRYB5BC.mjs.map
|