@dxos/plugin-automation 0.8.4-main.e098934 → 0.8.4-main.e8ec1fe

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.
Files changed (189) hide show
  1. package/dist/lib/browser/AutomationPanel-7OECLR5N.mjs +11 -0
  2. package/dist/lib/browser/AutomationSettings-KCZISXI6.mjs +68 -0
  3. package/dist/lib/browser/AutomationSettings-KCZISXI6.mjs.map +7 -0
  4. package/dist/lib/browser/FunctionsContainer-MIWEISRR.mjs +151 -0
  5. package/dist/lib/browser/FunctionsContainer-MIWEISRR.mjs.map +7 -0
  6. package/dist/lib/browser/{FunctionsPanel-I443Y6KB.mjs → FunctionsPanel-CRW6SJUN.mjs} +3 -3
  7. package/dist/lib/browser/{app-graph-builder-4OFKIRAI.mjs → app-graph-builder-W7LLC6XW.mjs} +12 -11
  8. package/dist/lib/browser/app-graph-builder-W7LLC6XW.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-EPEXQP45.mjs +14 -0
  10. package/dist/lib/browser/chunk-EPEXQP45.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-S4SM663I.mjs → chunk-JW7XSPYW.mjs} +59 -22
  12. package/dist/lib/browser/chunk-JW7XSPYW.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-LZQFZO3B.mjs +17 -0
  14. package/dist/lib/browser/chunk-LZQFZO3B.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-NAPXRXTY.mjs +100 -0
  16. package/dist/lib/browser/chunk-NAPXRXTY.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-4TWQV33E.mjs → chunk-QKFBHAGN.mjs} +66 -25
  18. package/dist/lib/browser/chunk-QKFBHAGN.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-Z5DT4MHW.mjs → chunk-TWWFNOIR.mjs} +30 -15
  20. package/dist/lib/browser/chunk-TWWFNOIR.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-XAKZ4ANY.mjs +15 -0
  22. package/dist/lib/browser/chunk-XAKZ4ANY.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-HN7OHFCB.mjs → chunk-YBPJCY3F.mjs} +3 -3
  24. package/dist/lib/browser/chunk-YBPJCY3F.mjs.map +7 -0
  25. package/dist/lib/browser/compute-runtime-EIQTHJFZ.mjs +113 -0
  26. package/dist/lib/browser/compute-runtime-EIQTHJFZ.mjs.map +7 -0
  27. package/dist/lib/browser/hooks/index.mjs +13 -0
  28. package/dist/lib/browser/index.mjs +47 -18
  29. package/dist/lib/browser/index.mjs.map +4 -4
  30. package/dist/lib/browser/{intent-resolver-4PSYSQQG.mjs → intent-resolver-5HR7M7T6.mjs} +10 -10
  31. package/dist/lib/browser/intent-resolver-5HR7M7T6.mjs.map +7 -0
  32. package/dist/lib/browser/meta.json +1 -1
  33. package/dist/lib/browser/{react-surface-M52XGLXY.mjs → react-surface-YQW7WCFW.mjs} +20 -20
  34. package/dist/lib/browser/react-surface-YQW7WCFW.mjs.map +7 -0
  35. package/dist/lib/browser/types/index.mjs +2 -2
  36. package/dist/lib/node-esm/{AutomationPanel-MKOLA2FE.mjs → AutomationPanel-HCVFNHGQ.mjs} +4 -4
  37. package/dist/lib/node-esm/AutomationSettings-UUUPVNUJ.mjs +69 -0
  38. package/dist/lib/node-esm/AutomationSettings-UUUPVNUJ.mjs.map +7 -0
  39. package/dist/lib/node-esm/FunctionsContainer-6OB3JN5O.mjs +152 -0
  40. package/dist/lib/node-esm/FunctionsContainer-6OB3JN5O.mjs.map +7 -0
  41. package/dist/lib/node-esm/{FunctionsPanel-ELINCXPW.mjs → FunctionsPanel-RVVCS6VH.mjs} +3 -3
  42. package/dist/lib/node-esm/FunctionsPanel-RVVCS6VH.mjs.map +7 -0
  43. package/dist/lib/node-esm/{app-graph-builder-555IHYOB.mjs → app-graph-builder-SLQOO7GH.mjs} +12 -11
  44. package/dist/lib/node-esm/app-graph-builder-SLQOO7GH.mjs.map +7 -0
  45. package/dist/lib/node-esm/{chunk-AONUBWBE.mjs → chunk-6YRKST6M.mjs} +66 -25
  46. package/dist/lib/node-esm/chunk-6YRKST6M.mjs.map +7 -0
  47. package/dist/lib/node-esm/chunk-CEVIVRTY.mjs +19 -0
  48. package/dist/lib/node-esm/chunk-CEVIVRTY.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-CPP35BE6.mjs +16 -0
  50. package/dist/lib/node-esm/chunk-CPP35BE6.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-OEZNHUL2.mjs → chunk-ECJKIUBO.mjs} +3 -3
  52. package/dist/lib/node-esm/chunk-ECJKIUBO.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-KB7NFEYY.mjs +16 -0
  54. package/dist/lib/node-esm/chunk-KB7NFEYY.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-PICJ2REN.mjs +101 -0
  56. package/dist/lib/node-esm/chunk-PICJ2REN.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-CX2AILIS.mjs → chunk-RVK52XGK.mjs} +30 -15
  58. package/dist/lib/node-esm/chunk-RVK52XGK.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-ZOJVKPCA.mjs → chunk-W76WUTZY.mjs} +59 -22
  60. package/dist/lib/node-esm/chunk-W76WUTZY.mjs.map +7 -0
  61. package/dist/lib/node-esm/compute-runtime-URROOC34.mjs +114 -0
  62. package/dist/lib/node-esm/compute-runtime-URROOC34.mjs.map +7 -0
  63. package/dist/lib/node-esm/hooks/index.mjs +14 -0
  64. package/dist/lib/node-esm/hooks/index.mjs.map +7 -0
  65. package/dist/lib/node-esm/index.mjs +47 -18
  66. package/dist/lib/node-esm/index.mjs.map +4 -4
  67. package/dist/lib/node-esm/{intent-resolver-6ZGBUILG.mjs → intent-resolver-KDRYB5BC.mjs} +10 -10
  68. package/dist/lib/node-esm/intent-resolver-KDRYB5BC.mjs.map +7 -0
  69. package/dist/lib/node-esm/meta.json +1 -1
  70. package/dist/lib/node-esm/{react-surface-Y6AOXM75.mjs → react-surface-NNHYNBO6.mjs} +20 -20
  71. package/dist/lib/node-esm/react-surface-NNHYNBO6.mjs.map +7 -0
  72. package/dist/lib/node-esm/types/index.mjs +2 -2
  73. package/dist/types/src/AutomationPlugin.d.ts +1 -1
  74. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  76. package/dist/types/src/capabilities/capabilities.d.ts +20 -0
  77. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  78. package/dist/types/src/capabilities/compute-runtime.d.ts +5 -0
  79. package/dist/types/src/capabilities/compute-runtime.d.ts.map +1 -0
  80. package/dist/types/src/capabilities/index.d.ts +2 -0
  81. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  83. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +2 -2
  84. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  85. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +5 -1
  86. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  87. package/dist/types/src/components/AutomationSettings.d.ts +5 -0
  88. package/dist/types/src/components/AutomationSettings.d.ts.map +1 -0
  89. package/dist/types/src/components/FunctionsContainer.d.ts.map +1 -1
  90. package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
  91. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts +8 -0
  92. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts.map +1 -0
  93. package/dist/types/src/components/FunctionsRegistry/index.d.ts +2 -0
  94. package/dist/types/src/components/FunctionsRegistry/index.d.ts.map +1 -0
  95. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts +2 -2
  96. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
  97. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
  98. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +7 -5
  99. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  100. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +9 -4
  101. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  102. package/dist/types/src/components/TriggerSettings.d.ts +6 -0
  103. package/dist/types/src/components/TriggerSettings.d.ts.map +1 -0
  104. package/dist/types/src/components/index.d.ts +1 -1
  105. package/dist/types/src/components/index.d.ts.map +1 -1
  106. package/dist/types/src/events.d.ts +4 -0
  107. package/dist/types/src/events.d.ts.map +1 -0
  108. package/dist/types/src/hooks/index.d.ts +3 -0
  109. package/dist/types/src/hooks/index.d.ts.map +1 -0
  110. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +12 -0
  111. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -0
  112. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +11 -0
  113. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -0
  114. package/dist/types/src/index.d.ts +3 -0
  115. package/dist/types/src/index.d.ts.map +1 -1
  116. package/dist/types/src/meta.d.ts +0 -1
  117. package/dist/types/src/meta.d.ts.map +1 -1
  118. package/dist/types/src/translations.d.ts +5 -0
  119. package/dist/types/src/translations.d.ts.map +1 -1
  120. package/dist/types/src/types/schema.d.ts +1 -1
  121. package/dist/types/src/types/schema.d.ts.map +1 -1
  122. package/dist/types/tsconfig.tsbuildinfo +1 -1
  123. package/package.json +61 -38
  124. package/src/AutomationPlugin.tsx +36 -30
  125. package/src/capabilities/app-graph-builder.ts +14 -13
  126. package/src/capabilities/capabilities.ts +41 -0
  127. package/src/capabilities/compute-runtime.ts +127 -0
  128. package/src/capabilities/index.ts +3 -0
  129. package/src/capabilities/intent-resolver.ts +5 -5
  130. package/src/capabilities/react-surface.tsx +15 -15
  131. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +7 -11
  132. package/src/components/AutomationPanel/AutomationPanel.tsx +97 -33
  133. package/src/components/{AutomationContainer.tsx → AutomationSettings.tsx} +8 -6
  134. package/src/components/FunctionsContainer.tsx +11 -4
  135. package/src/components/FunctionsPanel/FunctionsPanel.tsx +35 -16
  136. package/src/components/FunctionsRegistry/FunctionsRegistry.tsx +135 -0
  137. package/src/components/FunctionsRegistry/index.ts +5 -0
  138. package/src/components/TriggerEditor/FunctionInputEditor.tsx +10 -4
  139. package/src/components/TriggerEditor/SpecSelector.tsx +14 -8
  140. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +62 -22
  141. package/src/components/TriggerEditor/TriggerEditor.tsx +44 -18
  142. package/src/components/TriggerSettings.tsx +25 -0
  143. package/src/components/index.ts +1 -1
  144. package/src/events.ts +11 -0
  145. package/src/hooks/index.ts +6 -0
  146. package/src/hooks/useComputeRuntimeCallback.ts +68 -0
  147. package/src/hooks/useTriggerRuntimeControls.ts +53 -0
  148. package/src/index.ts +3 -0
  149. package/src/meta.ts +6 -5
  150. package/src/testing/test-functions.ts +1 -1
  151. package/src/translations.ts +7 -0
  152. package/src/types/schema.ts +1 -1
  153. package/dist/lib/browser/AutomationContainer-BRV5AJZ3.mjs +0 -35
  154. package/dist/lib/browser/AutomationContainer-BRV5AJZ3.mjs.map +0 -7
  155. package/dist/lib/browser/AutomationPanel-N5HFJJXW.mjs +0 -11
  156. package/dist/lib/browser/FunctionsContainer-U4HASI4P.mjs +0 -36
  157. package/dist/lib/browser/FunctionsContainer-U4HASI4P.mjs.map +0 -7
  158. package/dist/lib/browser/app-graph-builder-4OFKIRAI.mjs.map +0 -7
  159. package/dist/lib/browser/chunk-4TWQV33E.mjs.map +0 -7
  160. package/dist/lib/browser/chunk-EIY2EUWC.mjs +0 -14
  161. package/dist/lib/browser/chunk-EIY2EUWC.mjs.map +0 -7
  162. package/dist/lib/browser/chunk-GW5U2DGT.mjs +0 -15
  163. package/dist/lib/browser/chunk-GW5U2DGT.mjs.map +0 -7
  164. package/dist/lib/browser/chunk-HN7OHFCB.mjs.map +0 -7
  165. package/dist/lib/browser/chunk-S4SM663I.mjs.map +0 -7
  166. package/dist/lib/browser/chunk-Z5DT4MHW.mjs.map +0 -7
  167. package/dist/lib/browser/intent-resolver-4PSYSQQG.mjs.map +0 -7
  168. package/dist/lib/browser/react-surface-M52XGLXY.mjs.map +0 -7
  169. package/dist/lib/node-esm/AutomationContainer-FYRDTERM.mjs +0 -36
  170. package/dist/lib/node-esm/AutomationContainer-FYRDTERM.mjs.map +0 -7
  171. package/dist/lib/node-esm/FunctionsContainer-VZIVURH6.mjs +0 -37
  172. package/dist/lib/node-esm/FunctionsContainer-VZIVURH6.mjs.map +0 -7
  173. package/dist/lib/node-esm/app-graph-builder-555IHYOB.mjs.map +0 -7
  174. package/dist/lib/node-esm/chunk-AONUBWBE.mjs.map +0 -7
  175. package/dist/lib/node-esm/chunk-CICQ73ZT.mjs +0 -16
  176. package/dist/lib/node-esm/chunk-CICQ73ZT.mjs.map +0 -7
  177. package/dist/lib/node-esm/chunk-CX2AILIS.mjs.map +0 -7
  178. package/dist/lib/node-esm/chunk-NK5N3QKD.mjs +0 -17
  179. package/dist/lib/node-esm/chunk-NK5N3QKD.mjs.map +0 -7
  180. package/dist/lib/node-esm/chunk-OEZNHUL2.mjs.map +0 -7
  181. package/dist/lib/node-esm/chunk-ZOJVKPCA.mjs.map +0 -7
  182. package/dist/lib/node-esm/intent-resolver-6ZGBUILG.mjs.map +0 -7
  183. package/dist/lib/node-esm/react-surface-Y6AOXM75.mjs.map +0 -7
  184. package/dist/types/src/components/AutomationContainer.d.ts +0 -5
  185. package/dist/types/src/components/AutomationContainer.d.ts.map +0 -1
  186. /package/dist/lib/browser/{AutomationPanel-N5HFJJXW.mjs.map → AutomationPanel-7OECLR5N.mjs.map} +0 -0
  187. /package/dist/lib/browser/{FunctionsPanel-I443Y6KB.mjs.map → FunctionsPanel-CRW6SJUN.mjs.map} +0 -0
  188. /package/dist/lib/{node-esm/AutomationPanel-MKOLA2FE.mjs.map → browser/hooks/index.mjs.map} +0 -0
  189. /package/dist/lib/node-esm/{FunctionsPanel-ELINCXPW.mjs.map → AutomationPanel-HCVFNHGQ.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
- AUTOMATION_PLUGIN
4
- } from "./chunk-NK5N3QKD.mjs";
3
+ meta
4
+ } from "./chunk-CEVIVRTY.mjs";
5
5
 
6
6
  // src/components/FunctionsPanel/FunctionsPanel.tsx
7
7
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
8
- import { Schema } from "effect";
8
+ import * as Schema from "effect/Schema";
9
9
  import React, { useCallback, useMemo } from "react";
10
- import { LayoutAction, createIntent, useIntentDispatcher } from "@dxos/app-framework";
11
- import { FunctionType, ScriptType } from "@dxos/functions";
12
- import { Filter, fullyQualifiedId, useQuery } from "@dxos/react-client/echo";
13
- import { Button, useTranslation } from "@dxos/react-ui";
10
+ import { LayoutAction, createIntent } from "@dxos/app-framework";
11
+ import { useIntentDispatcher } from "@dxos/app-framework/react";
12
+ import { Obj } from "@dxos/echo";
13
+ import { Function, Script } from "@dxos/functions";
14
+ import { SpaceAction } from "@dxos/plugin-space/types";
15
+ import { Filter, useQuery } from "@dxos/react-client/echo";
16
+ import { Button, IconButton, useTranslation } from "@dxos/react-ui";
14
17
  import { controlItemClasses } from "@dxos/react-ui-form";
15
18
  import { List } from "@dxos/react-ui-list";
16
19
  import { ghostHover, mx } from "@dxos/react-ui-theme";
@@ -18,9 +21,9 @@ var grid = "grid grid-cols-[1fr_auto] min-bs-[2.5rem]";
18
21
  var FunctionsPanel = ({ space }) => {
19
22
  var _effect = _useSignals();
20
23
  try {
21
- const { t } = useTranslation(AUTOMATION_PLUGIN);
22
- const functions = useQuery(space, Filter.type(FunctionType));
23
- const scripts = useQuery(space, Filter.type(ScriptType));
24
+ const { t } = useTranslation(meta.id);
25
+ const functions = useQuery(space, Filter.type(Function.Function));
26
+ const scripts = useQuery(space, Filter.type(Script.Script));
24
27
  const { dispatchPromise: dispatch } = useIntentDispatcher();
25
28
  const functionToScriptMap = useMemo(() => functions.reduce((map, func) => {
26
29
  const scriptId = func.source?.target?.id;
@@ -47,7 +50,7 @@ var FunctionsPanel = ({ space }) => {
47
50
  void dispatch(createIntent(LayoutAction.Open, {
48
51
  part: "main",
49
52
  subject: [
50
- fullyQualifiedId(script)
53
+ Obj.getDXN(script).toString()
51
54
  ]
52
55
  }));
53
56
  }
@@ -55,16 +58,23 @@ var FunctionsPanel = ({ space }) => {
55
58
  functionToScriptMap,
56
59
  dispatch
57
60
  ]);
61
+ const handleDelete = useCallback((func) => dispatch(createIntent(SpaceAction.RemoveObjects, {
62
+ objects: [
63
+ func
64
+ ]
65
+ })), [
66
+ dispatch
67
+ ]);
58
68
  return /* @__PURE__ */ React.createElement("div", {
59
69
  role: "none",
60
70
  className: mx(controlItemClasses)
61
71
  }, functions.length > 0 && /* @__PURE__ */ React.createElement(List.Root, {
62
72
  items: functions,
63
- isItem: Schema.is(FunctionType),
73
+ isItem: Schema.is(Function.Function),
64
74
  getId: (func) => func.id
65
75
  }, ({ items }) => /* @__PURE__ */ React.createElement("div", {
66
76
  role: "list",
67
- className: "flex flex-col w-full"
77
+ className: "flex flex-col is-full"
68
78
  }, items?.map((func) => /* @__PURE__ */ React.createElement(List.Item, {
69
79
  key: func.id,
70
80
  item: func,
@@ -77,7 +87,12 @@ var FunctionsPanel = ({ space }) => {
77
87
  className: "text-xs text-description truncate"
78
88
  }, getScriptName(func))), functionToScriptMap[func.id] && /* @__PURE__ */ React.createElement(Button, {
79
89
  onClick: () => handleGoToScript(func)
80
- }, t("go to function source button label")))))), functions.length === 0 && /* @__PURE__ */ React.createElement("div", {
90
+ }, t("go to function source button label")), /* @__PURE__ */ React.createElement(IconButton, {
91
+ iconOnly: true,
92
+ icon: "ph--trash--regular",
93
+ label: t("delete function button label"),
94
+ onClick: () => handleDelete(func)
95
+ }))))), functions.length === 0 && /* @__PURE__ */ React.createElement("div", {
81
96
  className: "text-center plb-4 text-gray-500"
82
97
  }, t("no functions found")));
83
98
  } finally {
@@ -92,4 +107,4 @@ export {
92
107
  FunctionsPanel,
93
108
  FunctionsPanel_default
94
109
  };
95
- //# sourceMappingURL=chunk-CX2AILIS.mjs.map
110
+ //# sourceMappingURL=chunk-RVK52XGK.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 } from '@dxos/app-framework';\nimport { useIntentDispatcher } from '@dxos/app-framework/react';\nimport { Obj } from '@dxos/echo';\nimport { Function, Script } from '@dxos/functions';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { Filter, type Space, useQuery } from '@dxos/react-client/echo';\nimport { Button, IconButton, 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(Function.Function));\n const scripts = useQuery(space, Filter.type(Script.Script));\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, Script.Script>,\n ),\n [functions, scripts],\n );\n\n const getScriptName = useCallback(\n (func: Function.Function) => {\n const script = functionToScriptMap[func.id];\n return script?.name;\n },\n [functionToScriptMap],\n );\n\n const handleGoToScript = useCallback(\n (func: Function.Function) => {\n const script = functionToScriptMap[func.id];\n if (script) {\n void dispatch(\n createIntent(LayoutAction.Open, {\n part: 'main',\n subject: [Obj.getDXN(script).toString()],\n }),\n );\n }\n },\n [functionToScriptMap, dispatch],\n );\n\n const handleDelete = useCallback(\n (func: Function.Function) => dispatch(createIntent(SpaceAction.RemoveObjects, { objects: [func] })),\n [dispatch],\n );\n\n return (\n <div role='none' className={mx(controlItemClasses)}>\n {functions.length > 0 && (\n <List.Root<Function.Function> items={functions} isItem={Schema.is(Function.Function)} getId={(func) => func.id}>\n {({ items }) => (\n <div role='list' className='flex flex-col is-full'>\n {items?.map((func) => (\n <List.Item<Function.Function>\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 <IconButton\n iconOnly\n icon='ph--trash--regular'\n label={t('delete function button label')}\n onClick={() => handleDelete(func)}\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": "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",
6
+ "names": ["Schema", "React", "useCallback", "useMemo", "LayoutAction", "createIntent", "useIntentDispatcher", "Obj", "Function", "Script", "SpaceAction", "Filter", "useQuery", "Button", "IconButton", "useTranslation", "controlItemClasses", "List", "ghostHover", "mx", "grid", "FunctionsPanel", "space", "t", "useTranslation", "meta", "id", "functions", "useQuery", "Filter", "type", "Function", "scripts", "Script", "dispatchPromise", "dispatch", "useIntentDispatcher", "functionToScriptMap", "useMemo", "reduce", "map", "func", "scriptId", "source", "target", "script", "find", "s", "getScriptName", "useCallback", "name", "handleGoToScript", "createIntent", "LayoutAction", "Open", "part", "subject", "Obj", "getDXN", "toString", "handleDelete", "SpaceAction", "RemoveObjects", "objects", "div", "role", "className", "mx", "controlItemClasses", "length", "List", "Root", "items", "isItem", "is", "getId", "Item", "key", "item", "classNames", "ghostHover", "ItemTitle", "Button", "onClick", "IconButton", "iconOnly", "icon", "label", "FunctionsPanel"]
7
+ }
@@ -1,16 +1,18 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
- AUTOMATION_PLUGIN
4
- } from "./chunk-NK5N3QKD.mjs";
3
+ meta
4
+ } from "./chunk-CEVIVRTY.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 { FunctionTrigger, FunctionType, ScriptType } from "@dxos/functions";
12
- import { Filter, Ref as Ref2, useQuery } from "@dxos/react-client/echo";
13
- import { Form as Form2, SelectInput as SelectInput2, useRefQueryLookupHandler } from "@dxos/react-ui-form";
11
+ import { Function, Script, Trigger as Trigger2 } from "@dxos/functions";
12
+ import { Filter as Filter2, Ref as Ref2, useQuery } from "@dxos/react-client/echo";
13
+ import { Input } from "@dxos/react-ui";
14
+ import { QueryForm } from "@dxos/react-ui-components";
15
+ import { Form as Form2, InputHeader, SelectInput as SelectInput2, useRefQueryLookupHandler } from "@dxos/react-ui-form";
14
16
 
15
17
  // src/components/TriggerEditor/FunctionInputEditor.tsx
16
18
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
@@ -38,7 +40,12 @@ var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptio
38
40
  useOnTransition(
39
41
  // Clear function parameter input when the function changes.
40
42
  selectedFunctionValue,
41
- (prevValue) => prevValue !== void 0 && prevValue !== selectedFunctionValue,
43
+ (prevValue) => {
44
+ if (!Ref.isRef(prevValue) || !Ref.isRef(selectedFunctionValue)) {
45
+ return false;
46
+ }
47
+ return prevValue.dxn.toString() !== selectedFunctionValue.dxn.toString();
48
+ },
42
49
  (currValue) => currValue !== void 0,
43
50
  () => onValueChange("object", {})
44
51
  );
@@ -77,13 +84,14 @@ var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptio
77
84
  // src/components/TriggerEditor/SpecSelector.tsx
78
85
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
79
86
  import React2, { useCallback as useCallback2, useMemo as useMemo2 } from "react";
80
- import { TriggerKinds } from "@dxos/functions";
87
+ import { Filter, Query } from "@dxos/echo";
88
+ import { Trigger } from "@dxos/functions";
81
89
  import { useTranslation } from "@dxos/react-ui";
82
90
  import { SelectInput, useInputProps } from "@dxos/react-ui-form";
83
91
  var SpecSelector = (props) => {
84
92
  var _effect = _useSignals2();
85
93
  try {
86
- const { t } = useTranslation(AUTOMATION_PLUGIN);
94
+ const { t } = useTranslation(meta.id);
87
95
  const specProps = useInputProps([
88
96
  "spec"
89
97
  ]);
@@ -98,12 +106,14 @@ var SpecSelector = (props) => {
98
106
  case "subscription":
99
107
  return {
100
108
  kind: "subscription",
101
- filter: {}
109
+ query: {
110
+ ast: Query.select(Filter.nothing()).ast
111
+ }
102
112
  };
103
113
  case "queue":
104
114
  return {
105
115
  kind: "queue",
106
- queue: ""
116
+ queue: "dxn:"
107
117
  };
108
118
  case "email":
109
119
  return {
@@ -125,7 +135,7 @@ var SpecSelector = (props) => {
125
135
  }, [
126
136
  specProps
127
137
  ]);
128
- const options = useMemo2(() => TriggerKinds.map((kind) => ({
138
+ const options = useMemo2(() => Trigger.Kinds.map((kind) => ({
129
139
  value: kind,
130
140
  label: t(`trigger type ${kind}`)
131
141
  })), [
@@ -142,20 +152,26 @@ var SpecSelector = (props) => {
142
152
  };
143
153
 
144
154
  // src/components/TriggerEditor/TriggerEditor.tsx
145
- var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
155
+ var TriggerEditor = ({ space, trigger, readonlySpec, types, tags, onSave, onCancel }) => {
146
156
  var _effect = _useSignals3();
147
157
  try {
148
- const handleSave = (values) => {
158
+ const handleSave = ({ id: _, ...values }) => {
149
159
  onSave?.(values);
150
160
  };
151
161
  const handleRefQueryLookup = useRefQueryLookupHandler({
152
162
  space
153
163
  });
154
- const Custom = useCustomInputs(space, handleRefQueryLookup);
164
+ const Custom = useCustomInputs({
165
+ space,
166
+ readonlySpec,
167
+ types,
168
+ tags,
169
+ onQueryRefOptions: handleRefQueryLookup
170
+ });
155
171
  return /* @__PURE__ */ React3.createElement(Form2, {
156
172
  outerSpacing: false,
157
173
  Custom,
158
- schema: FunctionTrigger,
174
+ schema: Trigger2.Trigger,
159
175
  values: trigger,
160
176
  onSave: handleSave,
161
177
  onCancel,
@@ -165,10 +181,10 @@ var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
165
181
  _effect.f();
166
182
  }
167
183
  };
168
- var useCustomInputs = (space, onQueryRefOptions) => {
169
- const functions = useQuery(space, Filter.type(FunctionType));
170
- const workflows = useQuery(space, Filter.type(ComputeGraph));
171
- const scripts = useQuery(space, Filter.type(ScriptType));
184
+ var useCustomInputs = ({ space, readonlySpec, types, tags, onQueryRefOptions }) => {
185
+ const functions = useQuery(space, Filter2.type(Function.Function));
186
+ const workflows = useQuery(space, Filter2.type(ComputeGraph));
187
+ const scripts = useQuery(space, Filter2.type(Script.Script));
172
188
  return useMemo3(() => ({
173
189
  // Function selector.
174
190
  ["function"]: (props) => {
@@ -198,7 +214,27 @@ var useCustomInputs = (space, onQueryRefOptions) => {
198
214
  });
199
215
  },
200
216
  // Spec selector.
201
- ["spec.kind"]: SpecSelector,
217
+ ["spec.kind"]: (props) => /* @__PURE__ */ React3.createElement(SpecSelector, {
218
+ ...props,
219
+ readonly: readonlySpec ? "disabled-input" : false
220
+ }),
221
+ // TODO(wittjosiah): Copied from ViewEditor.
222
+ // Query input editor.
223
+ ["spec.query"]: (props) => {
224
+ const handleChange = useCallback3((query) => props.onValueChange("object", {
225
+ ast: query.ast
226
+ }), [
227
+ props.onValueChange
228
+ ]);
229
+ return /* @__PURE__ */ React3.createElement(Input.Root, null, /* @__PURE__ */ React3.createElement(InputHeader, {
230
+ label: props.label
231
+ }), /* @__PURE__ */ React3.createElement(QueryForm, {
232
+ initialQuery: props.getValue().ast,
233
+ types,
234
+ tags,
235
+ onChange: handleChange
236
+ }));
237
+ },
202
238
  // Function input editor.
203
239
  ["input"]: (props) => /* @__PURE__ */ React3.createElement(FunctionInputEditor, {
204
240
  ...props,
@@ -208,7 +244,8 @@ var useCustomInputs = (space, onQueryRefOptions) => {
208
244
  }), [
209
245
  workflows,
210
246
  scripts,
211
- functions
247
+ functions,
248
+ readonlySpec
212
249
  ]);
213
250
  };
214
251
  var getWorkflowOptions = (graphs) => {
@@ -228,4 +265,4 @@ var getFunctionOptions = (scripts, functions) => {
228
265
  export {
229
266
  TriggerEditor
230
267
  };
231
- //# sourceMappingURL=chunk-ZOJVKPCA.mjs.map
268
+ //# sourceMappingURL=chunk-W76WUTZY.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 Query, Type } from '@dxos/echo';\nimport { Function, Script, Trigger } from '@dxos/functions';\nimport { Filter, Ref, type Space, useQuery } from '@dxos/react-client/echo';\nimport { Input } from '@dxos/react-ui';\nimport { QueryForm, type QueryFormProps } from '@dxos/react-ui-components';\nimport { type CustomInputMap, Form, InputHeader, SelectInput, useRefQueryLookupHandler } from '@dxos/react-ui-form';\n\nimport { FunctionInputEditor, type FunctionInputEditorProps } from './FunctionInputEditor';\nimport { SpecSelector } from './SpecSelector';\n\nexport type TriggerEditorProps = {\n space: Space;\n trigger: Trigger.Trigger;\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<Trigger.Trigger, 'id'>) => void;\n onCancel?: () => void;\n} & Pick<QueryFormProps, 'types' | 'tags'>;\n\nexport const TriggerEditor = ({ space, trigger, readonlySpec, types, tags, onSave, onCancel }: TriggerEditorProps) => {\n const handleSave = ({ id: _, ...values }: Trigger.Trigger) => {\n onSave?.(values);\n };\n\n const handleRefQueryLookup = useRefQueryLookupHandler({ space });\n const Custom = useCustomInputs({ space, readonlySpec, types, tags, onQueryRefOptions: handleRefQueryLookup });\n\n return (\n <Form\n outerSpacing={false}\n Custom={Custom}\n schema={Trigger.Trigger}\n values={trigger}\n onSave={handleSave}\n onCancel={onCancel}\n onQueryRefOptions={handleRefQueryLookup}\n />\n );\n};\n\ntype UseCustomInputsProps = {\n space: Space;\n readonlySpec?: boolean;\n onQueryRefOptions: FunctionInputEditorProps['onQueryRefOptions'];\n} & Pick<QueryFormProps, 'types' | 'tags'>;\n\nconst useCustomInputs = ({ space, readonlySpec, types, tags, onQueryRefOptions }: UseCustomInputsProps) => {\n const functions = useQuery(space, Filter.type(Function.Function));\n const workflows = useQuery(space, Filter.type(ComputeGraph));\n const scripts = useQuery(space, Filter.type(Script.Script));\n\n return useMemo(\n (): CustomInputMap => ({\n // Function selector.\n ['function' satisfies keyof Trigger.Trigger]: (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 handleChange = useCallback(\n (query: Query.Any) => props.onValueChange('object', { ast: query.ast }),\n [props.onValueChange],\n );\n\n return (\n <Input.Root>\n <InputHeader label={props.label} />\n <QueryForm initialQuery={(props.getValue() as any).ast} types={types} tags={tags} onChange={handleChange} />\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: Script.Script[], functions: Function.Function[]) => {\n const getLabel = (fn: Function.Function) => 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 Function } 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: Function.Function[];\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 { Trigger } 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 Trigger.Trigger]);\n\n const handleTypeChange = useCallback(\n (_type: any, value: string): Trigger.Spec | 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 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 Trigger.Kinds.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": ";;;;;;;AAIA,OAAOA,UAASC,eAAAA,cAAaC,WAAAA,gBAAe;AAE5C,SAASC,oBAAoB;AAC7B,SAAqBC,QAAAA,aAAY;AACjC,SAASC,UAAUC,QAAQC,WAAAA,gBAAe;AAC1C,SAASC,UAAAA,SAAQC,OAAAA,MAAiBC,gBAAgB;AAClD,SAASC,aAAa;AACtB,SAASC,iBAAsC;AAC/C,SAA8BC,QAAAA,OAAMC,aAAaC,eAAAA,cAAaC,gCAAgC;;;;ACR9F,OAAOC,SAASC,aAAaC,eAAe;AAE5C,SAASC,KAAKC,YAAY;AAG1B,SAASC,uBAAuB;AAChC,SAASC,MAAsDC,qBAAqB;AAU7E,IAAMC,sBAAsB,CAAC,EAClCC,WACAC,UACAC,eACAC,kBAAiB,MACQ;;;AACzB,UAAMC,wBAAwBC,cAAc;MAAC;KAAuB;AACpE,UAAMC,qBAAqBC,QAAQ,MAAA;AACjC,UAAIC,IAAIC,MAAML,qBAAAA,GAAwB;AACpC,eAAOA,sBAAsBM,IAAIC,SAAQ,EAAGC,MAAM,aAAA,EAAeC,GAAG,CAAA;MACtE;IACF,GAAG;MAACT;KAAsB;AAE1B,UAAMU,mBAAmBP,QACvB,MAAMP,UAAUe,KAAK,CAACC,OAAOA,GAAGC,OAAOX,kBAAAA,GACvC;MAACN;MAAWM;KAAmB;AAGjCY;;MAEEd;MACA,CAACe,cAAAA;AACC,YAAI,CAACX,IAAIC,MAAMU,SAAAA,KAAc,CAACX,IAAIC,MAAML,qBAAAA,GAAwB;AAC9D,iBAAO;QACT;AAEA,eAAOe,UAAUT,IAAIC,SAAQ,MAAOP,sBAAsBM,IAAIC,SAAQ;MACxE;MACA,CAACS,cAAcA,cAAcC;MAC7B,MAAMnB,cAAc,UAAU,CAAC,CAAA;IAAA;AAGjC,UAAMoB,cAAcf,QAAQ,MAAMO,kBAAkBQ,aAAa;MAACR;KAAiB;AACnF,UAAMS,eAAehB,QAAQ,MAAOe,cAAcE,KAAKC,eAAeH,WAAAA,IAAeD,QAAY;MAACC;KAAY;AAC9G,UAAMI,gBAAgBJ,aAAaK,aAAaC,OAAOC,KAAKP,YAAYK,UAAU,EAAEG,SAAS;AAE7F,UAAMC,SAASxB,QAAQ,MAAMN,SAAAA,KAAc,CAAC,GAAG;MAACA;KAAS;AAEzD,UAAM+B,sBAAsBC,YAC1B,CAACF,YAAAA;AACC7B,oBAAc,UAAU6B,OAAAA;IAC1B,GACA;MAAC7B;KAAc;AAGjB,QAAIY,qBAAqBO,UAAaE,iBAAiBF,UAAaK,kBAAkB,GAAG;AACvF,aAAO;IACT;AAEA,WACE,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA,cAACQ,MAAAA;MAAGC,WAAU;OAAU,qBAAA,GAGxB,sBAAA,cAACC,MAAAA;MACCC,QAAQd;MACRQ;MACAO,iBAAiBN;MACjB7B;MACAoC,cAAc;;;;;AAItB;;;;AC/EA,OAAOC,UAASC,eAAAA,cAAaC,WAAAA,gBAAe;AAE5C,SAASC,QAAQC,aAAa;AAC9B,SAASC,eAAe;AACxB,SAASC,sBAAsB;AAC/B,SAA0BC,aAAaC,qBAAqB;AAMrD,IAAMC,eAAe,CAACC,UAAAA;;;AAC3B,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,UAAMC,YAAYC,cAAc;MAAC;KAAuC;AAExE,UAAMC,mBAAmBC,aACvB,CAACC,OAAYC,UAAAA;AACX,YAAMC,wBAAwB,CAACC,SAAAA;AAC7B,gBAAQA,MAAAA;UACN,KAAK;AACH,mBAAO;cAAEA,MAAM;cAASC,MAAM;YAAG;UACnC,KAAK;AACH,mBAAO;cACLD,MAAM;cACNE,OAAO;gBACLC,KAAKC,MAAMC,OAAOC,OAAOC,QAAO,CAAA,EAAIJ;cACtC;YACF;UACF,KAAK;AACH,mBAAO;cAAEH,MAAM;cAASQ,OAAO;YAAO;UACxC,KAAK;AACH,mBAAO;cAAER,MAAM;YAAQ;UACzB,KAAK;AACH,mBAAO;cAAEA,MAAM;YAAU;UAC3B;AACE,mBAAOS;QACX;MACF;AAEA,YAAMC,cAAcX,sBAAsBD,KAAAA;AAC1C,UAAI,CAACY,aAAa;AAChB;MACF;AAGAjB,gBAAUkB,cAAc,UAAUD,WAAAA;IACpC,GACA;MAACjB;KAAU;AAGb,UAAMmB,UAAUC,SACd,MACEC,QAAQC,MAAMC,IAAI,CAAChB,UAAU;MAC3BF,OAAOE;MACPiB,OAAO5B,EAAE,gBAAgBW,IAAAA,EAAM;IACjC,EAAA,GACF;MAACX;KAAE;AAGL,WAAO,gBAAA6B,OAAA,cAACC,aAAAA;MAAa,GAAG/B;MAAOwB;MAAkBD,eAAehB;;;;;AAClE;;;AFtCO,IAAMyB,gBAAgB,CAAC,EAAEC,OAAOC,SAASC,cAAcC,OAAOC,MAAMC,QAAQC,SAAQ,MAAsB;;;AAC/G,UAAMC,aAAa,CAAC,EAAEC,IAAIC,GAAG,GAAGC,OAAAA,MAAyB;AACvDL,eAASK,MAAAA;IACX;AAEA,UAAMC,uBAAuBC,yBAAyB;MAAEZ;IAAM,CAAA;AAC9D,UAAMa,SAASC,gBAAgB;MAAEd;MAAOE;MAAcC;MAAOC;MAAMW,mBAAmBJ;IAAqB,CAAA;AAE3G,WACE,gBAAAK,OAAA,cAACC,OAAAA;MACCC,cAAc;MACdL;MACAM,QAAQC,SAAQA;MAChBV,QAAQT;MACRI,QAAQE;MACRD;MACAS,mBAAmBJ;;;;;AAGzB;AAQA,IAAMG,kBAAkB,CAAC,EAAEd,OAAOE,cAAcC,OAAOC,MAAMW,kBAAiB,MAAwB;AACpG,QAAMM,YAAYC,SAAStB,OAAOuB,QAAOC,KAAKC,SAASA,QAAQ,CAAA;AAC/D,QAAMC,YAAYJ,SAAStB,OAAOuB,QAAOC,KAAKG,YAAAA,CAAAA;AAC9C,QAAMC,UAAUN,SAAStB,OAAOuB,QAAOC,KAAKK,OAAOA,MAAM,CAAA;AAEzD,SAAOC,SACL,OAAuB;;IAErB,CAAC,UAAA,GAA6C,CAACC,UAAAA;AAC7C,YAAMC,WAAWC,aAAY,MAAA;AAC3B,cAAMC,YAAYH,MAAMC,SAAQ;AAChC,YAAIG,KAAIC,MAAMF,SAAAA,GAAY;AACxB,iBAAOA,UAAUG,IAAIC,SAAQ;QAC/B;AACA,eAAOC;MACT,GAAG;QAACR;OAAM;AAEV,YAAMS,sBAAsBP,aAC1B,CAACQ,OAAYC,cAAAA;AACX,cAAML,MAAMM,MAAKC,IAAIC,MAAMH,SAAAA;AAC3B,YAAIL,KAAK;AACP,gBAAMS,MAAMX,KAAIY,QAAQV,GAAAA;AACxBN,gBAAMiB,cAAc,UAAUF,GAAAA;QAChC;MACF,GACA;QAACf,MAAMiB;OAAc;AAGvB,aACE,gBAAAhC,OAAA,cAACiC,cAAAA;QACE,GAAGlB;QACJC;QACAgB,eAAeR;QACfU,SAASC,mBAAmBzB,SAAAA,EAAW0B,OAAOC,mBAAmBzB,SAASP,SAAAA,CAAAA;;IAGhF;;IAGA,CAAC,WAAA,GAAuB,CAACU,UAAU,gBAAAf,OAAA,cAACsC,cAAAA;MAAc,GAAGvB;MAAOwB,UAAUrD,eAAe,mBAAmB;;;;IAIxG,CAAC,YAAA,GAAwB,CAAC6B,UAAAA;AACxB,YAAMyB,eAAevB,aACnB,CAACwB,UAAqB1B,MAAMiB,cAAc,UAAU;QAAEU,KAAKD,MAAMC;MAAI,CAAA,GACrE;QAAC3B,MAAMiB;OAAc;AAGvB,aACE,gBAAAhC,OAAA,cAAC2C,MAAMC,MAAI,MACT,gBAAA5C,OAAA,cAAC6C,aAAAA;QAAYC,OAAO/B,MAAM+B;UAC1B,gBAAA9C,OAAA,cAAC+C,WAAAA;QAAUC,cAAejC,MAAMC,SAAQ,EAAW0B;QAAKvD;QAAcC;QAAY6D,UAAUT;;IAGlG;;IAGA,CAAC,OAAA,GAAmB,CAACzB,UACnB,gBAAAf,OAAA,cAACkD,qBAAAA;MAAqB,GAAGnC;MAAOV;MAAsBN;;EAE1D,IACA;IAACW;IAAWE;IAASP;IAAWnB;GAAa;AAEjD;AAEA,IAAMiD,qBAAqB,CAACgB,WAAAA;AAC1B,SAAOA,OAAOC,IAAI,CAACC,WAAW;IAAEP,OAAO,WAAWO,MAAM7D,EAAE;IAAI8D,OAAO,cAAcD,MAAM7D,EAAE;EAAG,EAAA;AAChG;AAEA,IAAM6C,qBAAqB,CAACzB,SAA0BP,cAAAA;AACpD,QAAMkD,WAAW,CAACC,OAA0B5C,QAAQ6C,KAAK,CAACC,MAAMF,GAAGG,QAAQC,QAAQpE,OAAOkE,EAAElE,EAAE,GAAGqE,QAAQL,GAAGK;AAC5G,SAAOxD,UAAU+C,IAAI,CAACI,QAAQ;IAAEV,OAAOS,SAASC,EAAAA;IAAKF,OAAO,cAAcE,GAAGhE,EAAE;EAAG,EAAA;AACpF;",
6
+ "names": ["React", "useCallback", "useMemo", "ComputeGraph", "Type", "Function", "Script", "Trigger", "Filter", "Ref", "useQuery", "Input", "QueryForm", "Form", "InputHeader", "SelectInput", "useRefQueryLookupHandler", "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", "Trigger", "useTranslation", "SelectInput", "useInputProps", "SpecSelector", "props", "t", "useTranslation", "meta", "id", "specProps", "useInputProps", "handleTypeChange", "useCallback", "_type", "value", "getDefaultTriggerSpec", "kind", "cron", "query", "ast", "Query", "select", "Filter", "nothing", "queue", "undefined", "defaultSpec", "onValueChange", "options", "useMemo", "Trigger", "Kinds", "map", "label", "React", "SelectInput", "TriggerEditor", "space", "trigger", "readonlySpec", "types", "tags", "onSave", "onCancel", "handleSave", "id", "_", "values", "handleRefQueryLookup", "useRefQueryLookupHandler", "Custom", "useCustomInputs", "onQueryRefOptions", "React", "Form", "outerSpacing", "schema", "Trigger", "functions", "useQuery", "Filter", "type", "Function", "workflows", "ComputeGraph", "scripts", "Script", "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", "handleChange", "query", "ast", "Input", "Root", "InputHeader", "label", "QueryForm", "initialQuery", "onChange", "FunctionInputEditor", "graphs", "map", "graph", "value", "getLabel", "fn", "find", "s", "source", "target", "name"]
7
+ }
@@ -0,0 +1,114 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ AutomationCapabilities
4
+ } from "./chunk-KB7NFEYY.mjs";
5
+ import "./chunk-CEVIVRTY.mjs";
6
+
7
+ // src/capabilities/compute-runtime.ts
8
+ import * as BrowserKeyValueStore from "@effect/platform-browser/BrowserKeyValueStore";
9
+ import * as Effect from "effect/Effect";
10
+ import * as Layer from "effect/Layer";
11
+ import * as ManagedRuntime from "effect/ManagedRuntime";
12
+ import { Capabilities, contributes } from "@dxos/app-framework";
13
+ import { GenericToolkit, makeToolExecutionServiceFromFunctions, makeToolResolverFromFunctions } from "@dxos/assistant";
14
+ import { Resource } from "@dxos/context";
15
+ import { Query, Ref } from "@dxos/echo";
16
+ import { CredentialsService, DatabaseService, QueueService } from "@dxos/functions";
17
+ import { FunctionImplementationResolver, FunctionInvocationServiceLayerWithLocalLoopbackExecutor, InvocationTracer, RemoteFunctionExecutionService, TriggerDispatcher } from "@dxos/functions-runtime";
18
+ import { TriggerStateStore } from "@dxos/functions-runtime";
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).flat();
50
+ const toolkits = this.#context.getCapabilities(Capabilities.Toolkit);
51
+ const mergedToolkit = GenericToolkit.merge(...toolkits);
52
+ const toolkit = mergedToolkit.toolkit;
53
+ const toolkitLayer = mergedToolkit.layer;
54
+ const space = client.spaces.get(spaceId);
55
+ invariant(space, void 0, {
56
+ F: __dxlog_file,
57
+ L: 72,
58
+ S: this,
59
+ A: [
60
+ "space",
61
+ ""
62
+ ]
63
+ });
64
+ yield* Effect.promise(() => space.waitUntilReady());
65
+ return Layer.mergeAll(TriggerDispatcher.layer({
66
+ timeControl: "natural"
67
+ })).pipe(Layer.provideMerge(Layer.mergeAll(InvocationTracerLive, TriggerStateStore.layerKv.pipe(Layer.provide(BrowserKeyValueStore.layerLocalStorage)), makeToolResolverFromFunctions(functions, toolkit), makeToolExecutionServiceFromFunctions(toolkit, toolkitLayer))), Layer.provideMerge(Layer.mergeAll(FunctionInvocationServiceLayerWithLocalLoopbackExecutor.pipe(Layer.provideMerge(FunctionImplementationResolver.layerTest({
68
+ functions
69
+ })), Layer.provideMerge(RemoteFunctionExecutionService.fromClient(
70
+ client,
71
+ // If agent is not enabled do not provide spaceId because space context will be unavailable on EDGE.
72
+ client.config.get("runtime.client.edgeFeatures.agents") ? spaceId : void 0
73
+ )), Layer.provideMerge(serviceLayer), Layer.provideMerge(CredentialsService.layerFromDatabase()), Layer.provideMerge(space ? DatabaseService.layer(space.db) : DatabaseService.notAvailable), Layer.provideMerge(space ? QueueService.layer(space.queues) : QueueService.notAvailable)))));
74
+ }));
75
+ const runtime = ManagedRuntime.make(layer);
76
+ this.#runtimes.set(spaceId, runtime);
77
+ return runtime;
78
+ }
79
+ };
80
+ var InvocationTracerLive = Layer.unwrapEffect(Effect.gen(function* () {
81
+ const { objects: [properties] } = yield* DatabaseService.runQuery(Query.type(PropertiesType));
82
+ invariant(properties, void 0, {
83
+ F: __dxlog_file,
84
+ L: 118,
85
+ S: this,
86
+ A: [
87
+ "properties",
88
+ ""
89
+ ]
90
+ });
91
+ if (!properties.invocationTraceQueue) {
92
+ const queue2 = yield* QueueService.createQueue({
93
+ subspaceTag: "trace"
94
+ });
95
+ properties.invocationTraceQueue = Ref.fromDXN(queue2.dxn);
96
+ }
97
+ const queue = properties.invocationTraceQueue.target;
98
+ invariant(queue, void 0, {
99
+ F: __dxlog_file,
100
+ L: 124,
101
+ S: this,
102
+ A: [
103
+ "queue",
104
+ ""
105
+ ]
106
+ });
107
+ return InvocationTracer.layerLive({
108
+ invocationTraceQueue: queue
109
+ });
110
+ }));
111
+ export {
112
+ compute_runtime_default as default
113
+ };
114
+ //# sourceMappingURL=compute-runtime-URROOC34.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 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 { GenericToolkit, makeToolExecutionServiceFromFunctions, makeToolResolverFromFunctions } from '@dxos/assistant';\nimport { Resource } from '@dxos/context';\nimport { Query, Ref } from '@dxos/echo';\nimport { CredentialsService, DatabaseService, QueueService } from '@dxos/functions';\nimport {\n FunctionImplementationResolver,\n FunctionInvocationServiceLayerWithLocalLoopbackExecutor,\n InvocationTracer,\n RemoteFunctionExecutionService,\n TriggerDispatcher,\n} from '@dxos/functions-runtime';\nimport { TriggerStateStore } from '@dxos/functions-runtime';\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 these reactive.\n const functions = this.#context.getCapabilities(Capabilities.Functions).flat();\n const toolkits = this.#context.getCapabilities(Capabilities.Toolkit);\n const mergedToolkit = GenericToolkit.merge(...toolkits);\n const toolkit = mergedToolkit.toolkit;\n const toolkitLayer = mergedToolkit.layer;\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(functions, toolkit),\n makeToolExecutionServiceFromFunctions(toolkit, toolkitLayer),\n ),\n ),\n Layer.provideMerge(\n Layer.mergeAll(\n FunctionInvocationServiceLayerWithLocalLoopbackExecutor.pipe(\n Layer.provideMerge(FunctionImplementationResolver.layerTest({ functions })),\n Layer.provideMerge(\n RemoteFunctionExecutionService.fromClient(\n client,\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 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": ["BrowserKeyValueStore", "Effect", "Layer", "ManagedRuntime", "Capabilities", "contributes", "GenericToolkit", "makeToolExecutionServiceFromFunctions", "makeToolResolverFromFunctions", "Resource", "Query", "Ref", "CredentialsService", "DatabaseService", "QueueService", "FunctionImplementationResolver", "FunctionInvocationServiceLayerWithLocalLoopbackExecutor", "InvocationTracer", "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", "flat", "toolkits", "Toolkit", "mergedToolkit", "GenericToolkit", "merge", "toolkit", "toolkitLayer", "space", "spaces", "invariant", "promise", "waitUntilReady", "mergeAll", "TriggerDispatcher", "timeControl", "pipe", "provideMerge", "InvocationTracerLive", "TriggerStateStore", "layerKv", "provide", "layerLocalStorage", "makeToolResolverFromFunctions", "makeToolExecutionServiceFromFunctions", "FunctionInvocationServiceLayerWithLocalLoopbackExecutor", "FunctionImplementationResolver", "layerTest", "RemoteFunctionExecutionService", "fromClient", "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", "layerLive"]
7
+ }
@@ -0,0 +1,14 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ invokeFunctionWithTracing,
4
+ useComputeRuntimeCallback,
5
+ useTriggerRuntimeControls
6
+ } from "../chunk-PICJ2REN.mjs";
7
+ import "../chunk-KB7NFEYY.mjs";
8
+ import "../chunk-CEVIVRTY.mjs";
9
+ export {
10
+ invokeFunctionWithTracing,
11
+ useComputeRuntimeCallback,
12
+ useTriggerRuntimeControls
13
+ };
14
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -1,29 +1,41 @@
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-CICQ73ZT.mjs";
7
+ } from "./chunk-CPP35BE6.mjs";
8
+ import {
9
+ AppGraphBuilder,
10
+ ComputeRuntime,
11
+ IntentResolver,
12
+ ReactSurface,
13
+ invokeFunctionWithTracing,
14
+ useComputeRuntimeCallback,
15
+ useTriggerRuntimeControls
16
+ } from "./chunk-PICJ2REN.mjs";
17
+ import {
18
+ AutomationCapabilities
19
+ } from "./chunk-KB7NFEYY.mjs";
8
20
  import {
9
21
  TriggerEditor
10
- } from "./chunk-ZOJVKPCA.mjs";
22
+ } from "./chunk-W76WUTZY.mjs";
11
23
  import {
12
- AUTOMATION_PLUGIN,
13
24
  meta
14
- } from "./chunk-NK5N3QKD.mjs";
25
+ } from "./chunk-CEVIVRTY.mjs";
26
+
27
+ // src/events.ts
28
+ import { defineEvent } from "@dxos/app-framework";
29
+ (function(AutomationEvents2) {
30
+ AutomationEvents2.ComputeRuntimeReady = defineEvent(`${meta.id}/event/compute-runtime-ready`);
31
+ })(AutomationEvents || (AutomationEvents = {}));
32
+ var AutomationEvents;
15
33
 
16
34
  // src/AutomationPlugin.tsx
17
35
  import { Capabilities, Events, contributes, defineModule, definePlugin } from "@dxos/app-framework";
18
- import { FunctionTrigger, FunctionType } from "@dxos/functions";
36
+ import { Function, Trigger } from "@dxos/functions";
19
37
  import { ClientCapabilities, ClientEvents } from "@dxos/plugin-client";
20
38
 
21
- // src/capabilities/index.ts
22
- import { lazy } from "@dxos/app-framework";
23
- var AppGraphBuilder = lazy(() => import("./app-graph-builder-555IHYOB.mjs"));
24
- var IntentResolver = lazy(() => import("./intent-resolver-6ZGBUILG.mjs"));
25
- var ReactSurface = lazy(() => import("./react-surface-Y6AOXM75.mjs"));
26
-
27
39
  // src/translations.ts
28
40
  var translations = [
29
41
  {
@@ -34,12 +46,17 @@ var translations = [
34
46
  "script automation label": "Automation",
35
47
  "automation verbose label": "Manage automations",
36
48
  "automation description": "You can manage all the triggers which automate your space here.",
49
+ "runtime label": "Enable Local Runtime",
50
+ "runtime description": "This will start a trigger dispatcher locally for this space to run triggers on your device while Composer is running.",
37
51
  "functions panel label": "Functions",
38
52
  "functions verbose label": "Manage deployed functions",
53
+ "functions registry verbose label": "Functions registry",
54
+ "functions registry description": "Import functions from the registry",
39
55
  "functions description": "You can manage all the functions deployed from your space on EDGE here.",
40
56
  "function copy id": "Copy Function ID",
41
57
  "no functions found": "No functions found",
42
58
  "go to function source button label": "Show function source",
59
+ "delete function button label": "Delete function",
43
60
  "trigger editor title": "Configure Trigger",
44
61
  "new trigger label": "Add Trigger",
45
62
  "trigger type timer": "Timer",
@@ -59,7 +76,7 @@ var translations = [
59
76
  ];
60
77
 
61
78
  // src/AutomationPlugin.tsx
62
- var AutomationPlugin = () => definePlugin(meta, [
79
+ var AutomationPlugin = definePlugin(meta, () => [
63
80
  defineModule({
64
81
  id: `${meta.id}/module/translations`,
65
82
  activatesOn: Events.SetupTranslations,
@@ -69,8 +86,8 @@ var AutomationPlugin = () => definePlugin(meta, [
69
86
  id: `${meta.id}/module/schema`,
70
87
  activatesOn: ClientEvents.SetupSchema,
71
88
  activate: () => contributes(ClientCapabilities.Schema, [
72
- FunctionType,
73
- FunctionTrigger
89
+ Function.Function,
90
+ Trigger.Trigger
74
91
  ])
75
92
  }),
76
93
  defineModule({
@@ -87,16 +104,28 @@ var AutomationPlugin = () => definePlugin(meta, [
87
104
  id: `${meta.id}/module/react-surface`,
88
105
  activatesOn: Events.SetupReactSurface,
89
106
  activate: ReactSurface
107
+ }),
108
+ defineModule({
109
+ id: `${meta.id}/module/compute-runtime`,
110
+ activatesOn: ClientEvents.ClientReady,
111
+ activatesAfter: [
112
+ AutomationEvents.ComputeRuntimeReady
113
+ ],
114
+ activate: ComputeRuntime
90
115
  })
91
116
  ]);
92
117
  export {
93
- AUTOMATION_PLUGIN,
94
- AutomationContainer,
118
+ AutomationCapabilities,
119
+ AutomationEvents,
95
120
  AutomationPanel,
96
121
  AutomationPlugin,
122
+ AutomationSettings,
97
123
  FunctionsContainer,
98
124
  FunctionsPanel,
99
125
  TriggerEditor,
100
- meta
126
+ invokeFunctionWithTracing,
127
+ meta,
128
+ useComputeRuntimeCallback,
129
+ useTriggerRuntimeControls
101
130
  };
102
131
  //# sourceMappingURL=index.mjs.map