@dxos/plugin-automation 0.8.4-main.c1de068 → 0.8.4-main.c4373fc
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-PNBH5L5C.mjs +11 -0
- package/dist/lib/browser/AutomationSettings-3LABN6ER.mjs +69 -0
- package/dist/lib/browser/AutomationSettings-3LABN6ER.mjs.map +7 -0
- package/dist/lib/browser/{FunctionsContainer-IOB333TX.mjs → FunctionsContainer-HHBMPUOD.mjs} +9 -12
- package/dist/lib/browser/FunctionsContainer-HHBMPUOD.mjs.map +7 -0
- package/dist/lib/browser/{FunctionsPanel-56ZKRVM5.mjs → FunctionsPanel-NRIKAPQV.mjs} +3 -3
- package/dist/lib/browser/{app-graph-builder-ZTAUTFI4.mjs → app-graph-builder-DV5HMFX4.mjs} +11 -10
- package/dist/lib/browser/app-graph-builder-DV5HMFX4.mjs.map +7 -0
- package/dist/lib/browser/chunk-5ARH77PV.mjs +15 -0
- package/dist/lib/browser/chunk-5ARH77PV.mjs.map +7 -0
- package/dist/lib/browser/chunk-AY67OUDA.mjs +14 -0
- package/dist/lib/browser/chunk-AY67OUDA.mjs.map +7 -0
- package/dist/lib/browser/{chunk-LYJVTIVD.mjs → chunk-DLLE4FKP.mjs} +6 -6
- package/dist/lib/browser/chunk-DLLE4FKP.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ERTIGJYE.mjs → chunk-LC3QQU47.mjs} +52 -28
- package/dist/lib/browser/chunk-LC3QQU47.mjs.map +7 -0
- package/dist/lib/browser/chunk-MVPRI3DB.mjs +53 -0
- package/dist/lib/browser/chunk-MVPRI3DB.mjs.map +7 -0
- package/dist/lib/browser/{chunk-FSJZXTS2.mjs → chunk-NIJWEQRD.mjs} +84 -31
- package/dist/lib/browser/chunk-NIJWEQRD.mjs.map +7 -0
- package/dist/lib/browser/chunk-QT3YWUOT.mjs +14 -0
- package/dist/lib/browser/chunk-QT3YWUOT.mjs.map +7 -0
- package/dist/lib/browser/{chunk-HN7OHFCB.mjs → chunk-VGBZKM3O.mjs} +3 -3
- package/dist/lib/browser/chunk-VGBZKM3O.mjs.map +7 -0
- package/dist/lib/browser/{chunk-GW5U2DGT.mjs → chunk-WWURMV25.mjs} +2 -4
- package/dist/lib/browser/chunk-WWURMV25.mjs.map +7 -0
- package/dist/lib/browser/compute-runtime-YJREH6WP.mjs +160 -0
- package/dist/lib/browser/compute-runtime-YJREH6WP.mjs.map +7 -0
- package/dist/lib/browser/hooks/index.mjs +12 -0
- package/dist/lib/browser/index.mjs +36 -16
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/{intent-resolver-U3ZAQEFW.mjs → intent-resolver-D2OHKQRR.mjs} +11 -10
- package/dist/lib/browser/intent-resolver-D2OHKQRR.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-4DFSM7OX.mjs → react-surface-JXFO46V4.mjs} +18 -19
- package/dist/lib/browser/react-surface-JXFO46V4.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/{AutomationPanel-YYUMSK2W.mjs → AutomationPanel-GHK5UG4K.mjs} +4 -4
- package/dist/lib/node-esm/AutomationSettings-XENNIIZM.mjs +70 -0
- package/dist/lib/node-esm/AutomationSettings-XENNIIZM.mjs.map +7 -0
- package/dist/lib/node-esm/{FunctionsContainer-DJWB6WFH.mjs → FunctionsContainer-ZKVOBUHV.mjs} +9 -12
- package/dist/lib/node-esm/FunctionsContainer-ZKVOBUHV.mjs.map +7 -0
- package/dist/lib/node-esm/{FunctionsPanel-KGIOZSPZ.mjs → FunctionsPanel-SAMRTELO.mjs} +3 -3
- package/dist/lib/node-esm/FunctionsPanel-SAMRTELO.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-3FP63ZSG.mjs → app-graph-builder-TR2WXPX2.mjs} +11 -10
- package/dist/lib/node-esm/app-graph-builder-TR2WXPX2.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HIMYPGHF.mjs → chunk-3EWMZAU6.mjs} +52 -28
- package/dist/lib/node-esm/chunk-3EWMZAU6.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-NK5N3QKD.mjs → chunk-5MQJPJR2.mjs} +2 -4
- package/dist/lib/node-esm/chunk-5MQJPJR2.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-OEZNHUL2.mjs → chunk-CJUI6AKX.mjs} +3 -3
- package/dist/lib/node-esm/chunk-CJUI6AKX.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-AZH66CED.mjs → chunk-EX74SIDO.mjs} +84 -31
- package/dist/lib/node-esm/chunk-EX74SIDO.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-LWASMQIF.mjs +16 -0
- package/dist/lib/node-esm/chunk-LWASMQIF.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-QCA543ZR.mjs +54 -0
- package/dist/lib/node-esm/chunk-QCA543ZR.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-U7LJXQS4.mjs +16 -0
- package/dist/lib/node-esm/chunk-U7LJXQS4.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-WHCSOUNN.mjs +16 -0
- package/dist/lib/node-esm/chunk-WHCSOUNN.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ZGPUV5VS.mjs → chunk-YQXW3JXD.mjs} +6 -6
- package/dist/lib/node-esm/chunk-YQXW3JXD.mjs.map +7 -0
- package/dist/lib/node-esm/compute-runtime-CMEPAYND.mjs +161 -0
- package/dist/lib/node-esm/compute-runtime-CMEPAYND.mjs.map +7 -0
- package/dist/lib/node-esm/hooks/index.mjs +13 -0
- package/dist/lib/node-esm/hooks/index.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +36 -16
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/{intent-resolver-3QWXEBPX.mjs → intent-resolver-2LGBVXT5.mjs} +11 -10
- package/dist/lib/node-esm/intent-resolver-2LGBVXT5.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-3PNW7NDW.mjs → react-surface-YDJ43B3N.mjs} +18 -19
- package/dist/lib/node-esm/react-surface-YDJ43B3N.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 +45 -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.map +1 -1
- package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +4 -3
- 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 +2 -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 +2 -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 +59 -37
- package/src/AutomationPlugin.tsx +37 -31
- package/src/capabilities/app-graph-builder.ts +10 -9
- 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 +7 -7
- package/src/capabilities/react-surface.tsx +13 -14
- package/src/components/AutomationPanel/AutomationPanel.stories.tsx +13 -13
- package/src/components/AutomationPanel/AutomationPanel.tsx +84 -38
- package/src/components/AutomationSettings.tsx +30 -0
- package/src/components/FunctionsContainer.tsx +11 -13
- package/src/components/FunctionsPanel/FunctionsPanel.tsx +5 -5
- package/src/components/TriggerEditor/FunctionInputEditor.tsx +8 -2
- package/src/components/TriggerEditor/SpecSelector.tsx +23 -16
- package/src/components/TriggerEditor/TriggerEditor.stories.tsx +41 -19
- package/src/components/TriggerEditor/TriggerEditor.tsx +68 -18
- 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 +30 -0
- package/src/hooks/useTriggerRuntimeControls.ts +52 -0
- package/src/index.ts +2 -0
- package/src/meta.ts +1 -3
- package/src/testing/test-functions.ts +1 -1
- package/src/translations.ts +4 -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.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.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-PNBH5L5C.mjs.map} +0 -0
- /package/dist/lib/browser/{FunctionsPanel-56ZKRVM5.mjs.map → FunctionsPanel-NRIKAPQV.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-GHK5UG4K.mjs.map} +0 -0
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
meta
|
|
4
|
+
} from "./chunk-5MQJPJR2.mjs";
|
|
5
5
|
|
|
6
6
|
// src/components/TriggerEditor/TriggerEditor.tsx
|
|
7
7
|
import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
|
|
8
8
|
import React3, { useCallback as useCallback3, useMemo as useMemo3 } from "react";
|
|
9
9
|
import { ComputeGraph } from "@dxos/conductor";
|
|
10
10
|
import { Type as Type2 } from "@dxos/echo";
|
|
11
|
-
import {
|
|
12
|
-
import { Filter, Ref as Ref2, useQuery } from "@dxos/react-client/echo";
|
|
13
|
-
import {
|
|
11
|
+
import { FunctionTrigger, FunctionType, ScriptType } from "@dxos/functions";
|
|
12
|
+
import { Filter as Filter2, Ref as Ref2, useQuery } from "@dxos/react-client/echo";
|
|
13
|
+
import { Input, useDensityContext, useElevationContext, useThemeContext, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
14
|
+
import { Editor, createBasicExtensions, createThemeExtensions } from "@dxos/react-ui-editor";
|
|
15
|
+
import { Form as Form2, InputHeader, SelectInput as SelectInput2, useRefQueryLookupHandler } from "@dxos/react-ui-form";
|
|
16
|
+
import { inputTheme, mx } from "@dxos/react-ui-theme";
|
|
14
17
|
|
|
15
18
|
// src/components/TriggerEditor/FunctionInputEditor.tsx
|
|
16
19
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
@@ -38,7 +41,12 @@ var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptio
|
|
|
38
41
|
useOnTransition(
|
|
39
42
|
// Clear function parameter input when the function changes.
|
|
40
43
|
selectedFunctionValue,
|
|
41
|
-
(prevValue) =>
|
|
44
|
+
(prevValue) => {
|
|
45
|
+
if (!Ref.isRef(prevValue) || !Ref.isRef(selectedFunctionValue)) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
return prevValue.dxn.toString() !== selectedFunctionValue.dxn.toString();
|
|
49
|
+
},
|
|
42
50
|
(currValue) => currValue !== void 0,
|
|
43
51
|
() => onValueChange("object", {})
|
|
44
52
|
);
|
|
@@ -77,41 +85,45 @@ var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptio
|
|
|
77
85
|
// src/components/TriggerEditor/SpecSelector.tsx
|
|
78
86
|
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
79
87
|
import React2, { useCallback as useCallback2, useMemo as useMemo2 } from "react";
|
|
80
|
-
import {
|
|
88
|
+
import { Filter, Query } from "@dxos/echo";
|
|
89
|
+
import { TriggerKinds } from "@dxos/functions";
|
|
81
90
|
import { useTranslation } from "@dxos/react-ui";
|
|
82
91
|
import { SelectInput, useInputProps } from "@dxos/react-ui-form";
|
|
83
92
|
var SpecSelector = (props) => {
|
|
84
93
|
var _effect = _useSignals2();
|
|
85
94
|
try {
|
|
86
|
-
const { t } = useTranslation(
|
|
95
|
+
const { t } = useTranslation(meta.id);
|
|
87
96
|
const specProps = useInputProps([
|
|
88
97
|
"spec"
|
|
89
98
|
]);
|
|
90
99
|
const handleTypeChange = useCallback2((_type, value) => {
|
|
91
100
|
const getDefaultTriggerSpec = (kind) => {
|
|
92
101
|
switch (kind) {
|
|
93
|
-
case
|
|
102
|
+
case "timer":
|
|
94
103
|
return {
|
|
95
|
-
kind:
|
|
104
|
+
kind: "timer",
|
|
96
105
|
cron: ""
|
|
97
106
|
};
|
|
98
|
-
case
|
|
107
|
+
case "subscription":
|
|
99
108
|
return {
|
|
100
|
-
kind:
|
|
101
|
-
|
|
109
|
+
kind: "subscription",
|
|
110
|
+
query: {
|
|
111
|
+
string: "Query.select(Filter.nothing())",
|
|
112
|
+
ast: Query.select(Filter.nothing()).ast
|
|
113
|
+
}
|
|
102
114
|
};
|
|
103
|
-
case
|
|
115
|
+
case "queue":
|
|
104
116
|
return {
|
|
105
|
-
kind:
|
|
106
|
-
queue: ""
|
|
117
|
+
kind: "queue",
|
|
118
|
+
queue: "dxn:"
|
|
107
119
|
};
|
|
108
|
-
case
|
|
120
|
+
case "email":
|
|
109
121
|
return {
|
|
110
|
-
kind:
|
|
122
|
+
kind: "email"
|
|
111
123
|
};
|
|
112
|
-
case
|
|
124
|
+
case "webhook":
|
|
113
125
|
return {
|
|
114
|
-
kind:
|
|
126
|
+
kind: "webhook"
|
|
115
127
|
};
|
|
116
128
|
default:
|
|
117
129
|
return void 0;
|
|
@@ -125,7 +137,7 @@ var SpecSelector = (props) => {
|
|
|
125
137
|
}, [
|
|
126
138
|
specProps
|
|
127
139
|
]);
|
|
128
|
-
const options = useMemo2(() =>
|
|
140
|
+
const options = useMemo2(() => TriggerKinds.map((kind) => ({
|
|
129
141
|
value: kind,
|
|
130
142
|
label: t(`trigger type ${kind}`)
|
|
131
143
|
})), [
|
|
@@ -142,7 +154,7 @@ var SpecSelector = (props) => {
|
|
|
142
154
|
};
|
|
143
155
|
|
|
144
156
|
// src/components/TriggerEditor/TriggerEditor.tsx
|
|
145
|
-
var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
|
|
157
|
+
var TriggerEditor = ({ space, trigger, readonlySpec, onSave, onCancel }) => {
|
|
146
158
|
var _effect = _useSignals3();
|
|
147
159
|
try {
|
|
148
160
|
const handleSave = (values) => {
|
|
@@ -151,11 +163,15 @@ var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
|
|
|
151
163
|
const handleRefQueryLookup = useRefQueryLookupHandler({
|
|
152
164
|
space
|
|
153
165
|
});
|
|
154
|
-
const Custom = useCustomInputs(
|
|
166
|
+
const Custom = useCustomInputs({
|
|
167
|
+
space,
|
|
168
|
+
readonlySpec,
|
|
169
|
+
onQueryRefOptions: handleRefQueryLookup
|
|
170
|
+
});
|
|
155
171
|
return /* @__PURE__ */ React3.createElement(Form2, {
|
|
156
172
|
outerSpacing: false,
|
|
157
173
|
Custom,
|
|
158
|
-
schema:
|
|
174
|
+
schema: FunctionTrigger,
|
|
159
175
|
values: trigger,
|
|
160
176
|
onSave: handleSave,
|
|
161
177
|
onCancel,
|
|
@@ -165,10 +181,11 @@ var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
|
|
|
165
181
|
_effect.f();
|
|
166
182
|
}
|
|
167
183
|
};
|
|
168
|
-
var useCustomInputs = (space, onQueryRefOptions) => {
|
|
169
|
-
const
|
|
170
|
-
const
|
|
171
|
-
const
|
|
184
|
+
var useCustomInputs = ({ space, readonlySpec, onQueryRefOptions }) => {
|
|
185
|
+
const { t } = useTranslation2(meta.id);
|
|
186
|
+
const functions = useQuery(space, Filter2.type(FunctionType));
|
|
187
|
+
const workflows = useQuery(space, Filter2.type(ComputeGraph));
|
|
188
|
+
const scripts = useQuery(space, Filter2.type(ScriptType));
|
|
172
189
|
return useMemo3(() => ({
|
|
173
190
|
// Function selector.
|
|
174
191
|
["function"]: (props) => {
|
|
@@ -198,7 +215,42 @@ var useCustomInputs = (space, onQueryRefOptions) => {
|
|
|
198
215
|
});
|
|
199
216
|
},
|
|
200
217
|
// Spec selector.
|
|
201
|
-
["spec.kind"]: SpecSelector,
|
|
218
|
+
["spec.kind"]: (props) => /* @__PURE__ */ React3.createElement(SpecSelector, {
|
|
219
|
+
...props,
|
|
220
|
+
readonly: readonlySpec ? "disabled-input" : false
|
|
221
|
+
}),
|
|
222
|
+
// TODO(wittjosiah): Copied from ViewEditor.
|
|
223
|
+
// Query input editor.
|
|
224
|
+
["spec.query"]: (props) => {
|
|
225
|
+
const { themeMode } = useThemeContext();
|
|
226
|
+
const density = useDensityContext();
|
|
227
|
+
const elevation = useElevationContext();
|
|
228
|
+
const value = props.getValue();
|
|
229
|
+
const handleChange = useCallback3((text) => props.onValueChange("object", {
|
|
230
|
+
...value,
|
|
231
|
+
string: text
|
|
232
|
+
}), []);
|
|
233
|
+
const extensions = useMemo3(() => [
|
|
234
|
+
createBasicExtensions({
|
|
235
|
+
readOnly: readonlySpec,
|
|
236
|
+
placeholder: t("query placeholder")
|
|
237
|
+
}),
|
|
238
|
+
createThemeExtensions({
|
|
239
|
+
themeMode
|
|
240
|
+
})
|
|
241
|
+
], []);
|
|
242
|
+
return /* @__PURE__ */ React3.createElement(Input.Root, null, /* @__PURE__ */ React3.createElement(InputHeader, {
|
|
243
|
+
label: props.label
|
|
244
|
+
}), /* @__PURE__ */ React3.createElement(Editor, {
|
|
245
|
+
classNames: mx(inputTheme.input({
|
|
246
|
+
density,
|
|
247
|
+
elevation
|
|
248
|
+
}), "flex items-center", "focus-within:bg-focusSurface focus-within:border-separator focus-within:hover:bg-focusSurface"),
|
|
249
|
+
extensions,
|
|
250
|
+
value: value.string,
|
|
251
|
+
onChange: handleChange
|
|
252
|
+
}));
|
|
253
|
+
},
|
|
202
254
|
// Function input editor.
|
|
203
255
|
["input"]: (props) => /* @__PURE__ */ React3.createElement(FunctionInputEditor, {
|
|
204
256
|
...props,
|
|
@@ -208,7 +260,8 @@ var useCustomInputs = (space, onQueryRefOptions) => {
|
|
|
208
260
|
}), [
|
|
209
261
|
workflows,
|
|
210
262
|
scripts,
|
|
211
|
-
functions
|
|
263
|
+
functions,
|
|
264
|
+
readonlySpec
|
|
212
265
|
]);
|
|
213
266
|
};
|
|
214
267
|
var getWorkflowOptions = (graphs) => {
|
|
@@ -228,4 +281,4 @@ var getFunctionOptions = (scripts, functions) => {
|
|
|
228
281
|
export {
|
|
229
282
|
TriggerEditor
|
|
230
283
|
};
|
|
231
|
-
//# sourceMappingURL=chunk-
|
|
284
|
+
//# sourceMappingURL=chunk-EX74SIDO.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/TriggerEditor/TriggerEditor.tsx", "../../../src/components/TriggerEditor/FunctionInputEditor.tsx", "../../../src/components/TriggerEditor/SpecSelector.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { ComputeGraph } from '@dxos/conductor';\nimport { Type } from '@dxos/echo';\nimport { FunctionTrigger, FunctionType, ScriptType } from '@dxos/functions';\nimport { Filter, Ref, type Space, useQuery } from '@dxos/react-client/echo';\nimport { Input, useDensityContext, useElevationContext, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { Editor, createBasicExtensions, createThemeExtensions } from '@dxos/react-ui-editor';\nimport { type CustomInputMap, Form, InputHeader, SelectInput, useRefQueryLookupHandler } from '@dxos/react-ui-form';\nimport { inputTheme, mx } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\n\nimport { FunctionInputEditor, type FunctionInputEditorProps } from './FunctionInputEditor';\nimport { SpecSelector } from './SpecSelector';\n\nexport type TriggerEditorProps = {\n space: Space;\n trigger: FunctionTrigger;\n // TODO(wittjosiah): This needs to apply to whole spec but currently only applies to spec.kind & spec.query.\n readonlySpec?: boolean;\n onSave?: (trigger: Omit<FunctionTrigger, 'id'>) => void;\n onCancel?: () => void;\n};\n\nexport const TriggerEditor = ({ space, trigger, readonlySpec, onSave, onCancel }: TriggerEditorProps) => {\n const handleSave = (values: FunctionTrigger) => {\n onSave?.(values);\n };\n\n const handleRefQueryLookup = useRefQueryLookupHandler({ space });\n const Custom = useCustomInputs({ space, readonlySpec, onQueryRefOptions: handleRefQueryLookup });\n\n return (\n <Form\n outerSpacing={false}\n Custom={Custom}\n schema={FunctionTrigger}\n values={trigger}\n onSave={handleSave}\n onCancel={onCancel}\n onQueryRefOptions={handleRefQueryLookup}\n />\n );\n};\n\nconst useCustomInputs = ({\n space,\n readonlySpec,\n onQueryRefOptions,\n}: {\n space: Space;\n readonlySpec?: boolean;\n onQueryRefOptions: FunctionInputEditorProps['onQueryRefOptions'];\n}) => {\n const { t } = useTranslation(meta.id);\n const functions = useQuery(space, Filter.type(FunctionType));\n const workflows = useQuery(space, Filter.type(ComputeGraph));\n const scripts = useQuery(space, Filter.type(ScriptType));\n\n return useMemo(\n (): CustomInputMap => ({\n // Function selector.\n ['function' satisfies keyof FunctionTrigger]: (props) => {\n const getValue = useCallback(() => {\n const formValue = props.getValue();\n if (Ref.isRef(formValue)) {\n return formValue.dxn.toString() as string;\n }\n return undefined;\n }, [props]);\n\n const handleOnValueChange = useCallback(\n (_type: any, dxnString: string) => {\n const dxn = Type.DXN.parse(dxnString);\n if (dxn) {\n const ref = Ref.fromDXN(dxn);\n props.onValueChange('object', ref);\n }\n },\n [props.onValueChange],\n );\n\n return (\n <SelectInput\n {...props}\n getValue={getValue as any}\n onValueChange={handleOnValueChange}\n options={getWorkflowOptions(workflows).concat(getFunctionOptions(scripts, functions))}\n />\n );\n },\n\n // Spec selector.\n ['spec.kind' as const]: (props) => <SpecSelector {...props} readonly={readonlySpec ? 'disabled-input' : false} />,\n\n // TODO(wittjosiah): Copied from ViewEditor.\n // Query input editor.\n ['spec.query' as const]: (props) => {\n const { themeMode } = useThemeContext();\n const density = useDensityContext();\n const elevation = useElevationContext();\n const value = props.getValue() as any;\n\n // TODO(wittjosiah): Including props.onValueChange in deps causes infinite loop.\n const handleChange = useCallback(\n (text: string) => props.onValueChange('object', { ...value, string: text }),\n [],\n );\n\n const extensions = useMemo(\n () => [\n createBasicExtensions({ readOnly: readonlySpec, placeholder: t('query placeholder') }),\n createThemeExtensions({ themeMode }),\n ],\n [],\n );\n\n // TODO(wittjosiah): This is probably not the right way to do these styles.\n return (\n <Input.Root>\n <InputHeader label={props.label} />\n <Editor\n classNames={mx(\n inputTheme.input({ density, elevation }),\n 'flex items-center',\n 'focus-within:bg-focusSurface focus-within:border-separator focus-within:hover:bg-focusSurface',\n )}\n extensions={extensions}\n value={value.string}\n onChange={handleChange}\n />\n </Input.Root>\n );\n },\n\n // Function input editor.\n ['input' as const]: (props) => (\n <FunctionInputEditor {...props} functions={functions} onQueryRefOptions={onQueryRefOptions} />\n ),\n }),\n [workflows, scripts, functions, readonlySpec],\n );\n};\n\nconst getWorkflowOptions = (graphs: ComputeGraph[]) => {\n return graphs.map((graph) => ({ label: `compute-${graph.id}`, value: `dxn:echo:@:${graph.id}` }));\n};\n\nconst getFunctionOptions = (scripts: ScriptType[], functions: FunctionType[]) => {\n const getLabel = (fn: FunctionType) => scripts.find((s) => fn.source?.target?.id === s.id)?.name ?? fn.name;\n return functions.map((fn) => ({ label: getLabel(fn), value: `dxn:echo:@:${fn.id}` }));\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Ref, Type } from '@dxos/echo';\nimport { type JsonPath } from '@dxos/echo/internal';\nimport { type FunctionType } from '@dxos/functions';\nimport { useOnTransition } from '@dxos/react-ui';\nimport { Form, type FormInputStateProps, type QueryRefOptions, useFormValues } from '@dxos/react-ui-form';\n\nexport type FunctionInputEditorProps = {\n functions: FunctionType[];\n onQueryRefOptions: QueryRefOptions;\n} & FormInputStateProps;\n\n/**\n * Editor component for function input parameters.\n */\nexport const FunctionInputEditor = ({\n functions,\n getValue,\n onValueChange,\n onQueryRefOptions,\n}: FunctionInputEditorProps) => {\n const selectedFunctionValue = useFormValues(['function' as JsonPath]);\n const selectedFunctionId = useMemo(() => {\n if (Ref.isRef(selectedFunctionValue)) {\n return selectedFunctionValue.dxn.toString().split('dxn:echo:@:').at(1);\n }\n }, [selectedFunctionValue]);\n\n const selectedFunction = useMemo(\n () => functions.find((fn) => fn.id === selectedFunctionId),\n [functions, selectedFunctionId],\n );\n\n useOnTransition(\n // Clear function parameter input when the function changes.\n selectedFunctionValue,\n (prevValue) => {\n if (!Ref.isRef(prevValue) || !Ref.isRef(selectedFunctionValue)) {\n return false;\n }\n\n return prevValue.dxn.toString() !== selectedFunctionValue.dxn.toString();\n },\n (currValue) => currValue !== undefined,\n () => onValueChange('object', {}),\n );\n\n const inputSchema = useMemo(() => selectedFunction?.inputSchema, [selectedFunction]);\n const effectSchema = useMemo(() => (inputSchema ? Type.toEffectSchema(inputSchema) : undefined), [inputSchema]);\n const propertyCount = inputSchema?.properties ? Object.keys(inputSchema.properties).length : 0;\n\n const values = useMemo(() => getValue() ?? {}, [getValue]);\n\n const handleValuesChanged = useCallback(\n (values: any) => {\n onValueChange('object', values);\n },\n [onValueChange],\n );\n\n if (selectedFunction === undefined || effectSchema === undefined || propertyCount === 0) {\n return null;\n }\n\n return (\n <>\n <h3 className='text-md'>Function parameters</h3>\n {/* TODO(ZaymonFC): Try using <FormFields /> internal component for this nesting.\n This would allow errors to flow up to the root context. */}\n <Form\n schema={effectSchema}\n values={values}\n onValuesChanged={handleValuesChanged}\n onQueryRefOptions={onQueryRefOptions}\n outerSpacing={false}\n />\n </>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Filter, Query } from '@dxos/echo';\nimport { type FunctionTrigger, TriggerKinds, type TriggerType } from '@dxos/functions';\nimport { useTranslation } from '@dxos/react-ui';\nimport { type InputProps, SelectInput, useInputProps } from '@dxos/react-ui-form';\n\nimport { meta } from '../../meta';\n\nexport type SpecSelectorProps = InputProps;\n\nexport const SpecSelector = (props: SpecSelectorProps) => {\n const { t } = useTranslation(meta.id);\n const specProps = useInputProps(['spec' satisfies keyof FunctionTrigger]);\n\n const handleTypeChange = useCallback(\n (_type: any, value: string): TriggerType | undefined => {\n const getDefaultTriggerSpec = (kind: string) => {\n switch (kind) {\n case 'timer':\n return { kind: 'timer', cron: '' };\n case 'subscription':\n return {\n kind: 'subscription',\n query: {\n string: 'Query.select(Filter.nothing())',\n ast: Query.select(Filter.nothing()).ast,\n },\n };\n case 'queue':\n return { kind: 'queue', queue: 'dxn:' };\n case 'email':\n return { kind: 'email' };\n case 'webhook':\n return { kind: 'webhook' };\n default:\n return undefined;\n }\n };\n\n const defaultSpec = getDefaultTriggerSpec(value);\n if (!defaultSpec) {\n return;\n }\n\n // Update the entire spec object, not just the `spec.kind`.\n specProps.onValueChange('object', defaultSpec);\n },\n [specProps],\n );\n\n const options = useMemo(\n () =>\n TriggerKinds.map((kind) => ({\n value: kind,\n label: t(`trigger type ${kind}`),\n })),\n [t],\n );\n\n return <SelectInput {...props} options={options} onValueChange={handleTypeChange} />;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useCallback", "useMemo", "ComputeGraph", "Type", "FunctionTrigger", "FunctionType", "ScriptType", "Filter", "Ref", "useQuery", "Input", "useDensityContext", "useElevationContext", "useThemeContext", "useTranslation", "Editor", "createBasicExtensions", "createThemeExtensions", "Form", "InputHeader", "SelectInput", "useRefQueryLookupHandler", "inputTheme", "mx", "React", "useCallback", "useMemo", "Ref", "Type", "useOnTransition", "Form", "useFormValues", "FunctionInputEditor", "functions", "getValue", "onValueChange", "onQueryRefOptions", "selectedFunctionValue", "useFormValues", "selectedFunctionId", "useMemo", "Ref", "isRef", "dxn", "toString", "split", "at", "selectedFunction", "find", "fn", "id", "useOnTransition", "prevValue", "currValue", "undefined", "inputSchema", "effectSchema", "Type", "toEffectSchema", "propertyCount", "properties", "Object", "keys", "length", "values", "handleValuesChanged", "useCallback", "h3", "className", "Form", "schema", "onValuesChanged", "outerSpacing", "React", "useCallback", "useMemo", "Filter", "Query", "TriggerKinds", "useTranslation", "SelectInput", "useInputProps", "SpecSelector", "props", "t", "useTranslation", "meta", "id", "specProps", "useInputProps", "handleTypeChange", "useCallback", "_type", "value", "getDefaultTriggerSpec", "kind", "cron", "query", "string", "ast", "Query", "select", "Filter", "nothing", "queue", "undefined", "defaultSpec", "onValueChange", "options", "useMemo", "TriggerKinds", "map", "label", "React", "SelectInput", "TriggerEditor", "space", "trigger", "readonlySpec", "onSave", "onCancel", "handleSave", "values", "handleRefQueryLookup", "useRefQueryLookupHandler", "Custom", "useCustomInputs", "onQueryRefOptions", "React", "Form", "outerSpacing", "schema", "FunctionTrigger", "t", "useTranslation", "meta", "id", "functions", "useQuery", "Filter", "type", "FunctionType", "workflows", "ComputeGraph", "scripts", "ScriptType", "useMemo", "props", "getValue", "useCallback", "formValue", "Ref", "isRef", "dxn", "toString", "undefined", "handleOnValueChange", "_type", "dxnString", "Type", "DXN", "parse", "ref", "fromDXN", "onValueChange", "SelectInput", "options", "getWorkflowOptions", "concat", "getFunctionOptions", "SpecSelector", "readonly", "themeMode", "useThemeContext", "density", "useDensityContext", "elevation", "useElevationContext", "value", "handleChange", "text", "string", "extensions", "createBasicExtensions", "readOnly", "placeholder", "createThemeExtensions", "Input", "Root", "InputHeader", "label", "Editor", "classNames", "mx", "inputTheme", "input", "onChange", "FunctionInputEditor", "graphs", "map", "graph", "getLabel", "fn", "find", "s", "source", "target", "name"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/components/index.ts
|
|
4
|
+
import { lazy } from "react";
|
|
5
|
+
var AutomationPanel = lazy(() => import("./AutomationPanel-GHK5UG4K.mjs"));
|
|
6
|
+
var AutomationSettings = lazy(() => import("./AutomationSettings-XENNIIZM.mjs"));
|
|
7
|
+
var FunctionsContainer = lazy(() => import("./FunctionsContainer-ZKVOBUHV.mjs"));
|
|
8
|
+
var FunctionsPanel = lazy(() => import("./FunctionsPanel-SAMRTELO.mjs"));
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
AutomationPanel,
|
|
12
|
+
AutomationSettings,
|
|
13
|
+
FunctionsContainer,
|
|
14
|
+
FunctionsPanel
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=chunk-LWASMQIF.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './TriggerEditor';\n\nexport const AutomationPanel = lazy(() => import('./AutomationPanel'));\nexport const AutomationSettings = lazy(() => import('./AutomationSettings'));\nexport const FunctionsContainer = lazy(() => import('./FunctionsContainer'));\nexport const FunctionsPanel = lazy(() => import('./FunctionsPanel'));\n"],
|
|
5
|
+
"mappings": ";;;AAIA,SAASA,YAAY;AAId,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,gCAAA,CAAA;AAC1C,IAAMC,qBAAqBD,KAAK,MAAM,OAAO,mCAAA,CAAA;AAC7C,IAAME,qBAAqBF,KAAK,MAAM,OAAO,mCAAA,CAAA;AAC7C,IAAMG,iBAAiBH,KAAK,MAAM,OAAO,+BAAA,CAAA;",
|
|
6
|
+
"names": ["lazy", "AutomationPanel", "lazy", "AutomationSettings", "FunctionsContainer", "FunctionsPanel"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
AutomationCapabilities
|
|
4
|
+
} from "./chunk-WHCSOUNN.mjs";
|
|
5
|
+
|
|
6
|
+
// src/hooks/useComputeRuntimeCallback.ts
|
|
7
|
+
import { useCallback } from "react";
|
|
8
|
+
import { useCapability } from "@dxos/app-framework";
|
|
9
|
+
var useComputeRuntimeCallback = (space, fn, deps) => {
|
|
10
|
+
const computeRuntime = useCapability(AutomationCapabilities.ComputeRuntime);
|
|
11
|
+
const runtime = space !== void 0 ? computeRuntime.getRuntime(space.id) : void 0;
|
|
12
|
+
return useCallback(() => {
|
|
13
|
+
if (!runtime) {
|
|
14
|
+
throw new TypeError("Space not provided to useComputeRuntimeCallback");
|
|
15
|
+
}
|
|
16
|
+
return runtime.runPromise(fn());
|
|
17
|
+
}, [
|
|
18
|
+
runtime,
|
|
19
|
+
...deps ?? []
|
|
20
|
+
]);
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// src/hooks/useTriggerRuntimeControls.ts
|
|
24
|
+
import * as Effect from "effect/Effect";
|
|
25
|
+
import { Filter } from "@dxos/echo";
|
|
26
|
+
import { FunctionTrigger, TriggerDispatcher } from "@dxos/functions";
|
|
27
|
+
import { useQuery } from "@dxos/react-client/echo";
|
|
28
|
+
import { useAsyncState } from "@dxos/react-ui";
|
|
29
|
+
var useTriggerRuntimeControls = (space) => {
|
|
30
|
+
const triggers = useQuery(space, Filter.type(FunctionTrigger));
|
|
31
|
+
const [isRunningState, setIsRunningState] = useAsyncState(useComputeRuntimeCallback(space, () => TriggerDispatcher.pipe(Effect.map((t) => t.running))));
|
|
32
|
+
const start = useComputeRuntimeCallback(space, Effect.fnUntraced(function* () {
|
|
33
|
+
const dispatcher = yield* TriggerDispatcher;
|
|
34
|
+
yield* dispatcher.start();
|
|
35
|
+
setIsRunningState(true);
|
|
36
|
+
}));
|
|
37
|
+
const stop = useComputeRuntimeCallback(space, Effect.fnUntraced(function* () {
|
|
38
|
+
const dispatcher = yield* TriggerDispatcher;
|
|
39
|
+
yield* dispatcher.stop();
|
|
40
|
+
setIsRunningState(false);
|
|
41
|
+
}));
|
|
42
|
+
return {
|
|
43
|
+
triggers,
|
|
44
|
+
isRunning: isRunningState ?? false,
|
|
45
|
+
start: () => void start(),
|
|
46
|
+
stop: () => void stop()
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export {
|
|
51
|
+
useComputeRuntimeCallback,
|
|
52
|
+
useTriggerRuntimeControls
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=chunk-QCA543ZR.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/hooks/useComputeRuntimeCallback.ts", "../../../src/hooks/useTriggerRuntimeControls.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Effect from 'effect/Effect';\nimport { useCallback } from 'react';\n\nimport { useCapability } from '@dxos/app-framework';\nimport type { Space } from '@dxos/react-client/echo';\n\nimport { AutomationCapabilities } from '../capabilities';\n\n/**\n * Create an effectful function that has access to compute services\n */\nexport const useComputeRuntimeCallback = <T>(\n space: Space | undefined,\n fn: () => Effect.Effect<T, any, AutomationCapabilities.ComputeServices>,\n deps?: React.DependencyList,\n): (() => Promise<T>) => {\n const computeRuntime = useCapability(AutomationCapabilities.ComputeRuntime);\n const runtime = space !== undefined ? computeRuntime.getRuntime(space.id) : undefined;\n\n return useCallback(() => {\n if (!runtime) {\n throw new TypeError('Space not provided to useComputeRuntimeCallback');\n }\n return runtime.runPromise(fn());\n }, [runtime, ...(deps ?? [])]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Filter } from '@dxos/echo';\nimport { FunctionTrigger, TriggerDispatcher } from '@dxos/functions';\nimport { type Space, useQuery } from '@dxos/react-client/echo';\nimport { useAsyncState } from '@dxos/react-ui';\n\nimport { useComputeRuntimeCallback } from './useComputeRuntimeCallback';\n\ninterface TriggerRuntimeControls {\n triggers: FunctionTrigger[];\n isRunning: boolean;\n start: () => void;\n stop: () => void;\n}\n\nexport const useTriggerRuntimeControls = (space: Space | undefined): TriggerRuntimeControls => {\n const triggers = useQuery(space, Filter.type(FunctionTrigger));\n\n const [isRunningState, setIsRunningState] = useAsyncState(\n useComputeRuntimeCallback(space, () => TriggerDispatcher.pipe(Effect.map((t) => t.running))),\n );\n\n const start = useComputeRuntimeCallback(\n space,\n Effect.fnUntraced(function* () {\n const dispatcher = yield* TriggerDispatcher;\n yield* dispatcher.start();\n setIsRunningState(true);\n }),\n );\n\n const stop = useComputeRuntimeCallback(\n space,\n Effect.fnUntraced(function* () {\n const dispatcher = yield* TriggerDispatcher;\n yield* dispatcher.stop();\n setIsRunningState(false);\n }),\n );\n\n return {\n triggers,\n isRunning: isRunningState ?? false,\n start: () => void start(),\n stop: () => void stop(),\n };\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;AAKA,SAASA,mBAAmB;AAE5B,SAASC,qBAAqB;AAQvB,IAAMC,4BAA4B,CACvCC,OACAC,IACAC,SAAAA;AAEA,QAAMC,iBAAiBC,cAAcC,uBAAuBC,cAAc;AAC1E,QAAMC,UAAUP,UAAUQ,SAAYL,eAAeM,WAAWT,MAAMU,EAAE,IAAIF;AAE5E,SAAOG,YAAY,MAAA;AACjB,QAAI,CAACJ,SAAS;AACZ,YAAM,IAAIK,UAAU,iDAAA;IACtB;AACA,WAAOL,QAAQM,WAAWZ,GAAAA,CAAAA;EAC5B,GAAG;IAACM;OAAaL,QAAQ,CAAA;GAAI;AAC/B;;;ACzBA,YAAYY,YAAY;AAExB,SAASC,cAAc;AACvB,SAASC,iBAAiBC,yBAAyB;AACnD,SAAqBC,gBAAgB;AACrC,SAASC,qBAAqB;AAWvB,IAAMC,4BAA4B,CAACC,UAAAA;AACxC,QAAMC,WAAWC,SAASF,OAAOG,OAAOC,KAAKC,eAAAA,CAAAA;AAE7C,QAAM,CAACC,gBAAgBC,iBAAAA,IAAqBC,cAC1CC,0BAA0BT,OAAO,MAAMU,kBAAkBC,KAAYC,WAAI,CAACC,MAAMA,EAAEC,OAAO,CAAA,CAAA,CAAA;AAG3F,QAAMC,QAAQN,0BACZT,OACOgB,kBAAW,aAAA;AAChB,UAAMC,aAAa,OAAOP;AAC1B,WAAOO,WAAWF,MAAK;AACvBR,sBAAkB,IAAA;EACpB,CAAA,CAAA;AAGF,QAAMW,OAAOT,0BACXT,OACOgB,kBAAW,aAAA;AAChB,UAAMC,aAAa,OAAOP;AAC1B,WAAOO,WAAWC,KAAI;AACtBX,sBAAkB,KAAA;EACpB,CAAA,CAAA;AAGF,SAAO;IACLN;IACAkB,WAAWb,kBAAkB;IAC7BS,OAAO,MAAM,KAAKA,MAAAA;IAClBG,MAAM,MAAM,KAAKA,KAAAA;EACnB;AACF;",
|
|
6
|
+
"names": ["useCallback", "useCapability", "useComputeRuntimeCallback", "space", "fn", "deps", "computeRuntime", "useCapability", "AutomationCapabilities", "ComputeRuntime", "runtime", "undefined", "getRuntime", "id", "useCallback", "TypeError", "runPromise", "Effect", "Filter", "FunctionTrigger", "TriggerDispatcher", "useQuery", "useAsyncState", "useTriggerRuntimeControls", "space", "triggers", "useQuery", "Filter", "type", "FunctionTrigger", "isRunningState", "setIsRunningState", "useAsyncState", "useComputeRuntimeCallback", "TriggerDispatcher", "pipe", "map", "t", "running", "start", "fnUntraced", "dispatcher", "stop", "isRunning"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/capabilities/index.ts
|
|
4
|
+
import { lazy } from "@dxos/app-framework";
|
|
5
|
+
var AppGraphBuilder = lazy(() => import("./app-graph-builder-TR2WXPX2.mjs"));
|
|
6
|
+
var ComputeRuntime = lazy(() => import("./compute-runtime-CMEPAYND.mjs"));
|
|
7
|
+
var IntentResolver = lazy(() => import("./intent-resolver-2LGBVXT5.mjs"));
|
|
8
|
+
var ReactSurface = lazy(() => import("./react-surface-YDJ43B3N.mjs"));
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
AppGraphBuilder,
|
|
12
|
+
ComputeRuntime,
|
|
13
|
+
IntentResolver,
|
|
14
|
+
ReactSurface
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=chunk-U7LJXQS4.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const ComputeRuntime = lazy(() => import('./compute-runtime'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\n\nexport * from './capabilities';\n"],
|
|
5
|
+
"mappings": ";;;AAIA,SAASA,YAAY;AAEd,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,iBAAiBD,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAME,iBAAiBF,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMG,eAAeH,KAAK,MAAM,OAAO,8BAAA,CAAA;",
|
|
6
|
+
"names": ["lazy", "AppGraphBuilder", "lazy", "ComputeRuntime", "IntentResolver", "ReactSurface"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
meta
|
|
4
|
+
} from "./chunk-5MQJPJR2.mjs";
|
|
5
|
+
|
|
6
|
+
// src/capabilities/capabilities.ts
|
|
7
|
+
import { defineCapability } from "@dxos/app-framework";
|
|
8
|
+
(function(AutomationCapabilities2) {
|
|
9
|
+
AutomationCapabilities2.ComputeRuntime = defineCapability(`${meta.id}/capability/compute-runtime`);
|
|
10
|
+
})(AutomationCapabilities || (AutomationCapabilities = {}));
|
|
11
|
+
var AutomationCapabilities;
|
|
12
|
+
|
|
13
|
+
export {
|
|
14
|
+
AutomationCapabilities
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=chunk-WHCSOUNN.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/capabilities.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as ManagedRuntime from 'effect/ManagedRuntime';\n\nimport { type AiService, type ToolExecutionService, type ToolResolverService } from '@dxos/ai';\nimport { defineCapability } from '@dxos/app-framework';\nimport type {\n CredentialsService,\n DatabaseService,\n FunctionInvocationService,\n InvocationTracer,\n QueueService,\n TriggerDispatcher,\n TriggerStateStore,\n} from '@dxos/functions';\nimport type { SpaceId } from '@dxos/keys';\n\nimport { meta } from '../meta';\n\nexport namespace AutomationCapabilities {\n /**\n * Service stack for executing agents, functions, and triggers.\n */\n export type ComputeServices =\n | TriggerDispatcher\n | AiService.AiService\n | DatabaseService\n | QueueService\n | CredentialsService\n | FunctionInvocationService\n | InvocationTracer\n | TriggerStateStore\n // TODO(dmaretskyi): Those should be provided at AI-chat call site.\n | ToolResolverService\n | ToolExecutionService;\n\n export type ComputeRuntime = ManagedRuntime.ManagedRuntime<AutomationCapabilities.ComputeServices, never>;\n export interface ComputeRuntimeProvider {\n getRuntime(spaceId: SpaceId): ComputeRuntime;\n }\n\n /**\n * Runtime for executing agents, functions, and triggers.\n */\n export const ComputeRuntime = defineCapability<ComputeRuntimeProvider>(`${meta.id}/capability/compute-runtime`);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;AAOA,SAASA,wBAAwB;UAchBC,yBAAAA;0BAyBFC,iBAAiBC,iBAAyC,GAAGC,KAAKC,EAAE,6BAA6B;AAChH,GA1BiBJ,2BAAAA,yBAAAA,CAAAA,EAAAA;;",
|
|
6
|
+
"names": ["defineCapability", "AutomationCapabilities", "ComputeRuntime", "defineCapability", "meta", "id"]
|
|
7
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
meta
|
|
4
|
+
} from "./chunk-5MQJPJR2.mjs";
|
|
5
5
|
|
|
6
6
|
// src/components/FunctionsPanel/FunctionsPanel.tsx
|
|
7
7
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
8
|
-
import
|
|
8
|
+
import * as Schema from "effect/Schema";
|
|
9
9
|
import React, { useCallback, useMemo } from "react";
|
|
10
|
-
import {
|
|
10
|
+
import { LayoutAction, createIntent, useIntentDispatcher } from "@dxos/app-framework";
|
|
11
11
|
import { FunctionType, ScriptType } from "@dxos/functions";
|
|
12
12
|
import { Filter, fullyQualifiedId, useQuery } from "@dxos/react-client/echo";
|
|
13
13
|
import { Button, useTranslation } from "@dxos/react-ui";
|
|
@@ -18,7 +18,7 @@ var grid = "grid grid-cols-[1fr_auto] min-bs-[2.5rem]";
|
|
|
18
18
|
var FunctionsPanel = ({ space }) => {
|
|
19
19
|
var _effect = _useSignals();
|
|
20
20
|
try {
|
|
21
|
-
const { t } = useTranslation(
|
|
21
|
+
const { t } = useTranslation(meta.id);
|
|
22
22
|
const functions = useQuery(space, Filter.type(FunctionType));
|
|
23
23
|
const scripts = useQuery(space, Filter.type(ScriptType));
|
|
24
24
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
@@ -92,4 +92,4 @@ export {
|
|
|
92
92
|
FunctionsPanel,
|
|
93
93
|
FunctionsPanel_default
|
|
94
94
|
};
|
|
95
|
-
//# sourceMappingURL=chunk-
|
|
95
|
+
//# sourceMappingURL=chunk-YQXW3JXD.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/FunctionsPanel/FunctionsPanel.tsx", "../../../src/components/FunctionsPanel/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { FunctionType, ScriptType } from '@dxos/functions';\nimport { Filter, type Space, fullyQualifiedId, useQuery } from '@dxos/react-client/echo';\nimport { Button, useTranslation } from '@dxos/react-ui';\nimport { controlItemClasses } from '@dxos/react-ui-form';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover, mx } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\n\nconst grid = 'grid grid-cols-[1fr_auto] min-bs-[2.5rem]';\n\nexport type FunctionsPanelProps = {\n space: Space;\n};\n\nexport const FunctionsPanel = ({ space }: FunctionsPanelProps) => {\n const { t } = useTranslation(meta.id);\n const functions = useQuery(space, Filter.type(FunctionType));\n const scripts = useQuery(space, Filter.type(ScriptType));\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const functionToScriptMap = useMemo(\n () =>\n functions.reduce(\n (map, func) => {\n const scriptId = func.source?.target?.id;\n if (scriptId) {\n const script = scripts.find((s) => s.id === scriptId);\n if (script) {\n map[func.id] = script;\n }\n }\n return map;\n },\n {} as Record<string, ScriptType>,\n ),\n [functions, scripts],\n );\n\n const getScriptName = useCallback(\n (func: FunctionType) => {\n const script = functionToScriptMap[func.id];\n return script?.name;\n },\n [functionToScriptMap],\n );\n\n const handleGoToScript = useCallback(\n (func: FunctionType) => {\n const script = functionToScriptMap[func.id];\n if (script) {\n void dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [fullyQualifiedId(script)] }));\n }\n },\n [functionToScriptMap, dispatch],\n );\n\n return (\n <div role='none' className={mx(controlItemClasses)}>\n {functions.length > 0 && (\n <List.Root<FunctionType> items={functions} isItem={Schema.is(FunctionType)} getId={(func) => func.id}>\n {({ items }) => (\n <div role='list' className='flex flex-col w-full'>\n {items?.map((func) => (\n <List.Item<FunctionType>\n key={func.id}\n item={func}\n classNames={mx(grid, ghostHover, 'items-center', 'pli-2', 'min-bs-[3rem]')}\n >\n <div className='flex flex-col truncate'>\n <List.ItemTitle classNames='truncate'>{func.name}</List.ItemTitle>\n {getScriptName(func) && (\n <div className='text-xs text-description truncate'>{getScriptName(func)}</div>\n )}\n </div>\n {functionToScriptMap[func.id] && (\n <Button onClick={() => handleGoToScript(func)}>{t('go to function source button label')}</Button>\n )}\n </List.Item>\n ))}\n </div>\n )}\n </List.Root>\n )}\n\n {functions.length === 0 && <div className='text-center plb-4 text-gray-500'>{t('no functions found')}</div>}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { FunctionsPanel } from './FunctionsPanel';\n\nexport * from './FunctionsPanel';\nexport default FunctionsPanel;\n"],
|
|
5
|
+
"mappings": ";;;;;;;AAIA,YAAYA,YAAY;AACxB,OAAOC,SAASC,aAAaC,eAAe;AAE5C,SAASC,cAAcC,cAAcC,2BAA2B;AAChE,SAASC,cAAcC,kBAAkB;AACzC,SAASC,QAAoBC,kBAAkBC,gBAAgB;AAC/D,SAASC,QAAQC,sBAAsB;AACvC,SAASC,0BAA0B;AACnC,SAASC,YAAY;AACrB,SAASC,YAAYC,UAAU;AAI/B,IAAMC,OAAO;AAMN,IAAMC,iBAAiB,CAAC,EAAEC,MAAK,MAAuB;;;AAC3D,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,UAAMC,YAAYC,SAASN,OAAOO,OAAOC,KAAKC,YAAAA,CAAAA;AAC9C,UAAMC,UAAUJ,SAASN,OAAOO,OAAOC,KAAKG,UAAAA,CAAAA;AAC5C,UAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AAEtC,UAAMC,sBAAsBC,QAC1B,MACEX,UAAUY,OACR,CAACC,KAAKC,SAAAA;AACJ,YAAMC,WAAWD,KAAKE,QAAQC,QAAQlB;AACtC,UAAIgB,UAAU;AACZ,cAAMG,SAASb,QAAQc,KAAK,CAACC,MAAMA,EAAErB,OAAOgB,QAAAA;AAC5C,YAAIG,QAAQ;AACVL,cAAIC,KAAKf,EAAE,IAAImB;QACjB;MACF;AACA,aAAOL;IACT,GACA,CAAC,CAAA,GAEL;MAACb;MAAWK;KAAQ;AAGtB,UAAMgB,gBAAgBC,YACpB,CAACR,SAAAA;AACC,YAAMI,SAASR,oBAAoBI,KAAKf,EAAE;AAC1C,aAAOmB,QAAQK;IACjB,GACA;MAACb;KAAoB;AAGvB,UAAMc,mBAAmBF,YACvB,CAACR,SAAAA;AACC,YAAMI,SAASR,oBAAoBI,KAAKf,EAAE;AAC1C,UAAImB,QAAQ;AACV,aAAKV,SAASiB,aAAaC,aAAaC,MAAM;UAAEC,MAAM;UAAQC,SAAS;YAACC,iBAAiBZ,MAAAA;;QAAS,CAAA,CAAA;MACpG;IACF,GACA;MAACR;MAAqBF;KAAS;AAGjC,WACE,sBAAA,cAACuB,OAAAA;MAAIC,MAAK;MAAOC,WAAWC,GAAGC,kBAAAA;OAC5BnC,UAAUoC,SAAS,KAClB,sBAAA,cAACC,KAAKC,MAAI;MAAeC,OAAOvC;MAAWwC,QAAeC,UAAGrC,YAAAA;MAAesC,OAAO,CAAC5B,SAASA,KAAKf;OAC/F,CAAC,EAAEwC,MAAK,MACP,sBAAA,cAACR,OAAAA;MAAIC,MAAK;MAAOC,WAAU;OACxBM,OAAO1B,IAAI,CAACC,SACX,sBAAA,cAACuB,KAAKM,MAAI;MACRC,KAAK9B,KAAKf;MACV8C,MAAM/B;MACNgC,YAAYZ,GAAGzC,MAAMsD,YAAY,gBAAgB,SAAS,eAAA;OAE1D,sBAAA,cAAChB,OAAAA;MAAIE,WAAU;OACb,sBAAA,cAACI,KAAKW,WAAS;MAACF,YAAW;OAAYhC,KAAKS,IAAI,GAC/CF,cAAcP,IAAAA,KACb,sBAAA,cAACiB,OAAAA;MAAIE,WAAU;OAAqCZ,cAAcP,IAAAA,CAAAA,CAAAA,GAGrEJ,oBAAoBI,KAAKf,EAAE,KAC1B,sBAAA,cAACkD,QAAAA;MAAOC,SAAS,MAAM1B,iBAAiBV,IAAAA;OAAQlB,EAAE,oCAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAS/DI,UAAUoC,WAAW,KAAK,sBAAA,cAACL,OAAAA;MAAIE,WAAU;OAAmCrC,EAAE,oBAAA,CAAA,CAAA;;;;AAGrF;;;ACzFA,IAAA,yBAAeuD;",
|
|
6
|
+
"names": ["Schema", "React", "useCallback", "useMemo", "LayoutAction", "createIntent", "useIntentDispatcher", "FunctionType", "ScriptType", "Filter", "fullyQualifiedId", "useQuery", "Button", "useTranslation", "controlItemClasses", "List", "ghostHover", "mx", "grid", "FunctionsPanel", "space", "t", "useTranslation", "meta", "id", "functions", "useQuery", "Filter", "type", "FunctionType", "scripts", "ScriptType", "dispatchPromise", "dispatch", "useIntentDispatcher", "functionToScriptMap", "useMemo", "reduce", "map", "func", "scriptId", "source", "target", "script", "find", "s", "getScriptName", "useCallback", "name", "handleGoToScript", "createIntent", "LayoutAction", "Open", "part", "subject", "fullyQualifiedId", "div", "role", "className", "mx", "controlItemClasses", "length", "List", "Root", "items", "isItem", "is", "getId", "Item", "key", "item", "classNames", "ghostHover", "ItemTitle", "Button", "onClick", "FunctionsPanel"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
AutomationCapabilities
|
|
4
|
+
} from "./chunk-WHCSOUNN.mjs";
|
|
5
|
+
import "./chunk-5MQJPJR2.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
|
+
function _check_private_redeclaration(obj, privateCollection) {
|
|
23
|
+
if (privateCollection.has(obj)) {
|
|
24
|
+
throw new TypeError("Cannot initialize the same private elements twice on an object");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function _class_apply_descriptor_get(receiver, descriptor) {
|
|
28
|
+
if (descriptor.get) {
|
|
29
|
+
return descriptor.get.call(receiver);
|
|
30
|
+
}
|
|
31
|
+
return descriptor.value;
|
|
32
|
+
}
|
|
33
|
+
function _class_apply_descriptor_set(receiver, descriptor, value) {
|
|
34
|
+
if (descriptor.set) {
|
|
35
|
+
descriptor.set.call(receiver, value);
|
|
36
|
+
} else {
|
|
37
|
+
if (!descriptor.writable) {
|
|
38
|
+
throw new TypeError("attempted to set read only private field");
|
|
39
|
+
}
|
|
40
|
+
descriptor.value = value;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function _class_extract_field_descriptor(receiver, privateMap, action) {
|
|
44
|
+
if (!privateMap.has(receiver)) {
|
|
45
|
+
throw new TypeError("attempted to " + action + " private field on non-instance");
|
|
46
|
+
}
|
|
47
|
+
return privateMap.get(receiver);
|
|
48
|
+
}
|
|
49
|
+
function _class_private_field_get(receiver, privateMap) {
|
|
50
|
+
var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
|
|
51
|
+
return _class_apply_descriptor_get(receiver, descriptor);
|
|
52
|
+
}
|
|
53
|
+
function _class_private_field_init(obj, privateMap, value) {
|
|
54
|
+
_check_private_redeclaration(obj, privateMap);
|
|
55
|
+
privateMap.set(obj, value);
|
|
56
|
+
}
|
|
57
|
+
function _class_private_field_set(receiver, privateMap, value) {
|
|
58
|
+
var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
|
|
59
|
+
_class_apply_descriptor_set(receiver, descriptor, value);
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-automation/src/capabilities/compute-runtime.ts";
|
|
63
|
+
var compute_runtime_default = (async (context) => {
|
|
64
|
+
const provider = await new ComputeRuntimeProviderImpl(context).open();
|
|
65
|
+
return contributes(AutomationCapabilities.ComputeRuntime, provider, async () => {
|
|
66
|
+
await provider.close();
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
var _runtimes = /* @__PURE__ */ new WeakMap();
|
|
70
|
+
var _context = /* @__PURE__ */ new WeakMap();
|
|
71
|
+
var ComputeRuntimeProviderImpl = class extends Resource {
|
|
72
|
+
async _open() {
|
|
73
|
+
}
|
|
74
|
+
async _close() {
|
|
75
|
+
await Promise.all(Array.from(_class_private_field_get(this, _runtimes).values()).map((rt) => rt.dispose()));
|
|
76
|
+
_class_private_field_get(this, _runtimes).clear();
|
|
77
|
+
}
|
|
78
|
+
getRuntime(spaceId) {
|
|
79
|
+
if (_class_private_field_get(this, _runtimes).has(spaceId)) {
|
|
80
|
+
return _class_private_field_get(this, _runtimes).get(spaceId);
|
|
81
|
+
}
|
|
82
|
+
const layer = Layer.unwrapEffect(Effect.gen(this, function* () {
|
|
83
|
+
const client = _class_private_field_get(this, _context).getCapability(ClientCapabilities.Client);
|
|
84
|
+
const serviceLayer = _class_private_field_get(this, _context).getCapability(Capabilities.AiServiceLayer) ?? Layer.die("AiService not found");
|
|
85
|
+
const functions = _class_private_field_get(this, _context).getCapabilities(Capabilities.Functions);
|
|
86
|
+
const toolkits = _class_private_field_get(this, _context).getCapabilities(Capabilities.Toolkit);
|
|
87
|
+
const handlers = _class_private_field_get(this, _context).getCapabilities(Capabilities.ToolkitHandler);
|
|
88
|
+
const allFunctions = functions.flat();
|
|
89
|
+
const toolkit = Toolkit.merge(...toolkits);
|
|
90
|
+
const handlersLayer = Layer.mergeAll(Layer.empty, ...handlers);
|
|
91
|
+
const space = client.spaces.get(spaceId);
|
|
92
|
+
invariant(space, void 0, {
|
|
93
|
+
F: __dxlog_file,
|
|
94
|
+
L: 79,
|
|
95
|
+
S: this,
|
|
96
|
+
A: [
|
|
97
|
+
"space",
|
|
98
|
+
""
|
|
99
|
+
]
|
|
100
|
+
});
|
|
101
|
+
yield* Effect.promise(() => space.waitUntilReady());
|
|
102
|
+
return Layer.mergeAll(TriggerDispatcher.layer({
|
|
103
|
+
timeControl: "natural"
|
|
104
|
+
})).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({
|
|
105
|
+
functions: allFunctions
|
|
106
|
+
})), Layer.provideMerge(RemoteFunctionExecutionService.fromClient(
|
|
107
|
+
client.edge.baseUrl,
|
|
108
|
+
// If agent is not enabled do not provide spaceId because space context will be unavailable on EDGE.
|
|
109
|
+
client.config.get("runtime.client.edgeFeatures.agents") ? spaceId : void 0
|
|
110
|
+
)), 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)))))));
|
|
111
|
+
}));
|
|
112
|
+
const runtime = ManagedRuntime.make(layer);
|
|
113
|
+
_class_private_field_get(this, _runtimes).set(spaceId, runtime);
|
|
114
|
+
return runtime;
|
|
115
|
+
}
|
|
116
|
+
constructor(context) {
|
|
117
|
+
super(), _class_private_field_init(this, _runtimes, {
|
|
118
|
+
writable: true,
|
|
119
|
+
value: /* @__PURE__ */ new Map()
|
|
120
|
+
}), _class_private_field_init(this, _context, {
|
|
121
|
+
writable: true,
|
|
122
|
+
value: void 0
|
|
123
|
+
});
|
|
124
|
+
_class_private_field_set(this, _context, context);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
var InvocationTracerLive = Layer.unwrapEffect(Effect.gen(function* () {
|
|
128
|
+
const { objects: [properties] } = yield* DatabaseService.runQuery(Query.type(PropertiesType));
|
|
129
|
+
invariant(properties, void 0, {
|
|
130
|
+
F: __dxlog_file,
|
|
131
|
+
L: 129,
|
|
132
|
+
S: this,
|
|
133
|
+
A: [
|
|
134
|
+
"properties",
|
|
135
|
+
""
|
|
136
|
+
]
|
|
137
|
+
});
|
|
138
|
+
if (!properties.invocationTraceQueue) {
|
|
139
|
+
const queue2 = yield* QueueService.createQueue({
|
|
140
|
+
subspaceTag: "trace"
|
|
141
|
+
});
|
|
142
|
+
properties.invocationTraceQueue = Ref.fromDXN(queue2.dxn);
|
|
143
|
+
}
|
|
144
|
+
const queue = properties.invocationTraceQueue.target;
|
|
145
|
+
invariant(queue, void 0, {
|
|
146
|
+
F: __dxlog_file,
|
|
147
|
+
L: 135,
|
|
148
|
+
S: this,
|
|
149
|
+
A: [
|
|
150
|
+
"queue",
|
|
151
|
+
""
|
|
152
|
+
]
|
|
153
|
+
});
|
|
154
|
+
return InvocationTracer.layerLive({
|
|
155
|
+
invocationTraceQueue: queue
|
|
156
|
+
});
|
|
157
|
+
}));
|
|
158
|
+
export {
|
|
159
|
+
compute_runtime_default as default
|
|
160
|
+
};
|
|
161
|
+
//# sourceMappingURL=compute-runtime-CMEPAYND.mjs.map
|