@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.
Files changed (187) hide show
  1. package/dist/lib/browser/AutomationPanel-PNBH5L5C.mjs +11 -0
  2. package/dist/lib/browser/AutomationSettings-3LABN6ER.mjs +69 -0
  3. package/dist/lib/browser/AutomationSettings-3LABN6ER.mjs.map +7 -0
  4. package/dist/lib/browser/{FunctionsContainer-IOB333TX.mjs → FunctionsContainer-HHBMPUOD.mjs} +9 -12
  5. package/dist/lib/browser/FunctionsContainer-HHBMPUOD.mjs.map +7 -0
  6. package/dist/lib/browser/{FunctionsPanel-56ZKRVM5.mjs → FunctionsPanel-NRIKAPQV.mjs} +3 -3
  7. package/dist/lib/browser/{app-graph-builder-ZTAUTFI4.mjs → app-graph-builder-DV5HMFX4.mjs} +11 -10
  8. package/dist/lib/browser/app-graph-builder-DV5HMFX4.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-5ARH77PV.mjs +15 -0
  10. package/dist/lib/browser/chunk-5ARH77PV.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-AY67OUDA.mjs +14 -0
  12. package/dist/lib/browser/chunk-AY67OUDA.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-LYJVTIVD.mjs → chunk-DLLE4FKP.mjs} +6 -6
  14. package/dist/lib/browser/chunk-DLLE4FKP.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-ERTIGJYE.mjs → chunk-LC3QQU47.mjs} +52 -28
  16. package/dist/lib/browser/chunk-LC3QQU47.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-MVPRI3DB.mjs +53 -0
  18. package/dist/lib/browser/chunk-MVPRI3DB.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-FSJZXTS2.mjs → chunk-NIJWEQRD.mjs} +84 -31
  20. package/dist/lib/browser/chunk-NIJWEQRD.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-QT3YWUOT.mjs +14 -0
  22. package/dist/lib/browser/chunk-QT3YWUOT.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-HN7OHFCB.mjs → chunk-VGBZKM3O.mjs} +3 -3
  24. package/dist/lib/browser/chunk-VGBZKM3O.mjs.map +7 -0
  25. package/dist/lib/browser/{chunk-GW5U2DGT.mjs → chunk-WWURMV25.mjs} +2 -4
  26. package/dist/lib/browser/chunk-WWURMV25.mjs.map +7 -0
  27. package/dist/lib/browser/compute-runtime-YJREH6WP.mjs +160 -0
  28. package/dist/lib/browser/compute-runtime-YJREH6WP.mjs.map +7 -0
  29. package/dist/lib/browser/hooks/index.mjs +12 -0
  30. package/dist/lib/browser/index.mjs +36 -16
  31. package/dist/lib/browser/index.mjs.map +4 -4
  32. package/dist/lib/browser/{intent-resolver-U3ZAQEFW.mjs → intent-resolver-D2OHKQRR.mjs} +11 -10
  33. package/dist/lib/browser/intent-resolver-D2OHKQRR.mjs.map +7 -0
  34. package/dist/lib/browser/meta.json +1 -1
  35. package/dist/lib/browser/{react-surface-4DFSM7OX.mjs → react-surface-JXFO46V4.mjs} +18 -19
  36. package/dist/lib/browser/react-surface-JXFO46V4.mjs.map +7 -0
  37. package/dist/lib/browser/types/index.mjs +2 -2
  38. package/dist/lib/node-esm/{AutomationPanel-YYUMSK2W.mjs → AutomationPanel-GHK5UG4K.mjs} +4 -4
  39. package/dist/lib/node-esm/AutomationSettings-XENNIIZM.mjs +70 -0
  40. package/dist/lib/node-esm/AutomationSettings-XENNIIZM.mjs.map +7 -0
  41. package/dist/lib/node-esm/{FunctionsContainer-DJWB6WFH.mjs → FunctionsContainer-ZKVOBUHV.mjs} +9 -12
  42. package/dist/lib/node-esm/FunctionsContainer-ZKVOBUHV.mjs.map +7 -0
  43. package/dist/lib/node-esm/{FunctionsPanel-KGIOZSPZ.mjs → FunctionsPanel-SAMRTELO.mjs} +3 -3
  44. package/dist/lib/node-esm/FunctionsPanel-SAMRTELO.mjs.map +7 -0
  45. package/dist/lib/node-esm/{app-graph-builder-3FP63ZSG.mjs → app-graph-builder-TR2WXPX2.mjs} +11 -10
  46. package/dist/lib/node-esm/app-graph-builder-TR2WXPX2.mjs.map +7 -0
  47. package/dist/lib/node-esm/{chunk-HIMYPGHF.mjs → chunk-3EWMZAU6.mjs} +52 -28
  48. package/dist/lib/node-esm/chunk-3EWMZAU6.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-NK5N3QKD.mjs → chunk-5MQJPJR2.mjs} +2 -4
  50. package/dist/lib/node-esm/chunk-5MQJPJR2.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-OEZNHUL2.mjs → chunk-CJUI6AKX.mjs} +3 -3
  52. package/dist/lib/node-esm/chunk-CJUI6AKX.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-AZH66CED.mjs → chunk-EX74SIDO.mjs} +84 -31
  54. package/dist/lib/node-esm/chunk-EX74SIDO.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-LWASMQIF.mjs +16 -0
  56. package/dist/lib/node-esm/chunk-LWASMQIF.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-QCA543ZR.mjs +54 -0
  58. package/dist/lib/node-esm/chunk-QCA543ZR.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-U7LJXQS4.mjs +16 -0
  60. package/dist/lib/node-esm/chunk-U7LJXQS4.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-WHCSOUNN.mjs +16 -0
  62. package/dist/lib/node-esm/chunk-WHCSOUNN.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-ZGPUV5VS.mjs → chunk-YQXW3JXD.mjs} +6 -6
  64. package/dist/lib/node-esm/chunk-YQXW3JXD.mjs.map +7 -0
  65. package/dist/lib/node-esm/compute-runtime-CMEPAYND.mjs +161 -0
  66. package/dist/lib/node-esm/compute-runtime-CMEPAYND.mjs.map +7 -0
  67. package/dist/lib/node-esm/hooks/index.mjs +13 -0
  68. package/dist/lib/node-esm/hooks/index.mjs.map +7 -0
  69. package/dist/lib/node-esm/index.mjs +36 -16
  70. package/dist/lib/node-esm/index.mjs.map +4 -4
  71. package/dist/lib/node-esm/{intent-resolver-3QWXEBPX.mjs → intent-resolver-2LGBVXT5.mjs} +11 -10
  72. package/dist/lib/node-esm/intent-resolver-2LGBVXT5.mjs.map +7 -0
  73. package/dist/lib/node-esm/meta.json +1 -1
  74. package/dist/lib/node-esm/{react-surface-3PNW7NDW.mjs → react-surface-YDJ43B3N.mjs} +18 -19
  75. package/dist/lib/node-esm/react-surface-YDJ43B3N.mjs.map +7 -0
  76. package/dist/lib/node-esm/types/index.mjs +2 -2
  77. package/dist/types/src/AutomationPlugin.d.ts +1 -1
  78. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  80. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/capabilities.d.ts +19 -0
  82. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  83. package/dist/types/src/capabilities/compute-runtime.d.ts +5 -0
  84. package/dist/types/src/capabilities/compute-runtime.d.ts.map +1 -0
  85. package/dist/types/src/capabilities/index.d.ts +5 -3
  86. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  88. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  90. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  91. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +6 -5
  92. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  93. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +45 -4
  94. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  95. package/dist/types/src/components/AutomationSettings.d.ts +5 -0
  96. package/dist/types/src/components/AutomationSettings.d.ts.map +1 -0
  97. package/dist/types/src/components/FunctionsContainer.d.ts.map +1 -1
  98. package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
  99. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
  100. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
  101. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +4 -3
  102. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  103. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +47 -4
  104. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  105. package/dist/types/src/components/TriggerSettings.d.ts +6 -0
  106. package/dist/types/src/components/TriggerSettings.d.ts.map +1 -0
  107. package/dist/types/src/components/index.d.ts +2 -2
  108. package/dist/types/src/components/index.d.ts.map +1 -1
  109. package/dist/types/src/events.d.ts +4 -0
  110. package/dist/types/src/events.d.ts.map +1 -0
  111. package/dist/types/src/hooks/index.d.ts +3 -0
  112. package/dist/types/src/hooks/index.d.ts.map +1 -0
  113. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +8 -0
  114. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -0
  115. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +11 -0
  116. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -0
  117. package/dist/types/src/index.d.ts +2 -0
  118. package/dist/types/src/index.d.ts.map +1 -1
  119. package/dist/types/src/meta.d.ts +0 -1
  120. package/dist/types/src/meta.d.ts.map +1 -1
  121. package/dist/types/src/translations.d.ts +2 -0
  122. package/dist/types/src/translations.d.ts.map +1 -1
  123. package/dist/types/src/types/schema.d.ts +1 -1
  124. package/dist/types/src/types/schema.d.ts.map +1 -1
  125. package/dist/types/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +59 -37
  127. package/src/AutomationPlugin.tsx +37 -31
  128. package/src/capabilities/app-graph-builder.ts +10 -9
  129. package/src/capabilities/capabilities.ts +48 -0
  130. package/src/capabilities/compute-runtime.ts +138 -0
  131. package/src/capabilities/index.ts +3 -0
  132. package/src/capabilities/intent-resolver.ts +7 -7
  133. package/src/capabilities/react-surface.tsx +13 -14
  134. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +13 -13
  135. package/src/components/AutomationPanel/AutomationPanel.tsx +84 -38
  136. package/src/components/AutomationSettings.tsx +30 -0
  137. package/src/components/FunctionsContainer.tsx +11 -13
  138. package/src/components/FunctionsPanel/FunctionsPanel.tsx +5 -5
  139. package/src/components/TriggerEditor/FunctionInputEditor.tsx +8 -2
  140. package/src/components/TriggerEditor/SpecSelector.tsx +23 -16
  141. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +41 -19
  142. package/src/components/TriggerEditor/TriggerEditor.tsx +68 -18
  143. package/src/components/TriggerSettings.tsx +25 -0
  144. package/src/components/index.ts +1 -1
  145. package/src/events.ts +11 -0
  146. package/src/hooks/index.ts +6 -0
  147. package/src/hooks/useComputeRuntimeCallback.ts +30 -0
  148. package/src/hooks/useTriggerRuntimeControls.ts +52 -0
  149. package/src/index.ts +2 -0
  150. package/src/meta.ts +1 -3
  151. package/src/testing/test-functions.ts +1 -1
  152. package/src/translations.ts +4 -0
  153. package/src/types/schema.ts +1 -1
  154. package/dist/lib/browser/AutomationContainer-VZNV2ZQF.mjs +0 -38
  155. package/dist/lib/browser/AutomationContainer-VZNV2ZQF.mjs.map +0 -7
  156. package/dist/lib/browser/AutomationPanel-ZWA6GOFY.mjs +0 -11
  157. package/dist/lib/browser/FunctionsContainer-IOB333TX.mjs.map +0 -7
  158. package/dist/lib/browser/app-graph-builder-ZTAUTFI4.mjs.map +0 -7
  159. package/dist/lib/browser/chunk-ECSTS2UI.mjs +0 -14
  160. package/dist/lib/browser/chunk-ECSTS2UI.mjs.map +0 -7
  161. package/dist/lib/browser/chunk-ERTIGJYE.mjs.map +0 -7
  162. package/dist/lib/browser/chunk-FSJZXTS2.mjs.map +0 -7
  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-LYJVTIVD.mjs.map +0 -7
  166. package/dist/lib/browser/intent-resolver-U3ZAQEFW.mjs.map +0 -7
  167. package/dist/lib/browser/react-surface-4DFSM7OX.mjs.map +0 -7
  168. package/dist/lib/node-esm/AutomationContainer-WMIH3F4V.mjs +0 -39
  169. package/dist/lib/node-esm/AutomationContainer-WMIH3F4V.mjs.map +0 -7
  170. package/dist/lib/node-esm/FunctionsContainer-DJWB6WFH.mjs.map +0 -7
  171. package/dist/lib/node-esm/app-graph-builder-3FP63ZSG.mjs.map +0 -7
  172. package/dist/lib/node-esm/chunk-AZH66CED.mjs.map +0 -7
  173. package/dist/lib/node-esm/chunk-HIMYPGHF.mjs.map +0 -7
  174. package/dist/lib/node-esm/chunk-NK5N3QKD.mjs.map +0 -7
  175. package/dist/lib/node-esm/chunk-OEZNHUL2.mjs.map +0 -7
  176. package/dist/lib/node-esm/chunk-SGZPTJ47.mjs +0 -16
  177. package/dist/lib/node-esm/chunk-SGZPTJ47.mjs.map +0 -7
  178. package/dist/lib/node-esm/chunk-ZGPUV5VS.mjs.map +0 -7
  179. package/dist/lib/node-esm/intent-resolver-3QWXEBPX.mjs.map +0 -7
  180. package/dist/lib/node-esm/react-surface-3PNW7NDW.mjs.map +0 -7
  181. package/dist/types/src/components/AutomationContainer.d.ts +0 -5
  182. package/dist/types/src/components/AutomationContainer.d.ts.map +0 -1
  183. package/src/components/AutomationContainer.tsx +0 -30
  184. /package/dist/lib/browser/{AutomationPanel-ZWA6GOFY.mjs.map → AutomationPanel-PNBH5L5C.mjs.map} +0 -0
  185. /package/dist/lib/browser/{FunctionsPanel-56ZKRVM5.mjs.map → FunctionsPanel-NRIKAPQV.mjs.map} +0 -0
  186. /package/dist/lib/{node-esm/AutomationPanel-YYUMSK2W.mjs.map → browser/hooks/index.mjs.map} +0 -0
  187. /package/dist/lib/node-esm/{FunctionsPanel-KGIOZSPZ.mjs.map → AutomationPanel-GHK5UG4K.mjs.map} +0 -0
@@ -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
+ }
@@ -1,15 +1,18 @@
1
1
  import {
2
- AUTOMATION_PLUGIN
3
- } from "./chunk-GW5U2DGT.mjs";
2
+ meta
3
+ } from "./chunk-WWURMV25.mjs";
4
4
 
5
5
  // src/components/TriggerEditor/TriggerEditor.tsx
6
6
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
7
7
  import React3, { useCallback as useCallback3, useMemo as useMemo3 } from "react";
8
8
  import { ComputeGraph } from "@dxos/conductor";
9
9
  import { Type as Type2 } from "@dxos/echo";
10
- import { FunctionType, FunctionTriggerSchema, ScriptType } from "@dxos/functions";
11
- import { Filter, Ref as Ref2, useQuery } from "@dxos/react-client/echo";
12
- import { Form as Form2, SelectInput as SelectInput2, useRefQueryLookupHandler } from "@dxos/react-ui-form";
10
+ import { FunctionTrigger, FunctionType, ScriptType } from "@dxos/functions";
11
+ import { Filter as Filter2, Ref as Ref2, useQuery } from "@dxos/react-client/echo";
12
+ import { Input, useDensityContext, useElevationContext, useThemeContext, useTranslation as useTranslation2 } from "@dxos/react-ui";
13
+ import { Editor, createBasicExtensions, createThemeExtensions } from "@dxos/react-ui-editor";
14
+ import { Form as Form2, InputHeader, SelectInput as SelectInput2, useRefQueryLookupHandler } from "@dxos/react-ui-form";
15
+ import { inputTheme, mx } from "@dxos/react-ui-theme";
13
16
 
14
17
  // src/components/TriggerEditor/FunctionInputEditor.tsx
15
18
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
@@ -37,7 +40,12 @@ var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptio
37
40
  useOnTransition(
38
41
  // Clear function parameter input when the function changes.
39
42
  selectedFunctionValue,
40
- (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
+ },
41
49
  (currValue) => currValue !== void 0,
42
50
  () => onValueChange("object", {})
43
51
  );
@@ -76,41 +84,45 @@ var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptio
76
84
  // src/components/TriggerEditor/SpecSelector.tsx
77
85
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
78
86
  import React2, { useCallback as useCallback2, useMemo as useMemo2 } from "react";
79
- import { TriggerKind } from "@dxos/functions";
87
+ import { Filter, Query } from "@dxos/echo";
88
+ import { TriggerKinds } from "@dxos/functions";
80
89
  import { useTranslation } from "@dxos/react-ui";
81
90
  import { SelectInput, useInputProps } from "@dxos/react-ui-form";
82
91
  var SpecSelector = (props) => {
83
92
  var _effect = _useSignals2();
84
93
  try {
85
- const { t } = useTranslation(AUTOMATION_PLUGIN);
94
+ const { t } = useTranslation(meta.id);
86
95
  const specProps = useInputProps([
87
96
  "spec"
88
97
  ]);
89
98
  const handleTypeChange = useCallback2((_type, value) => {
90
99
  const getDefaultTriggerSpec = (kind) => {
91
100
  switch (kind) {
92
- case TriggerKind.Timer:
101
+ case "timer":
93
102
  return {
94
- kind: TriggerKind.Timer,
103
+ kind: "timer",
95
104
  cron: ""
96
105
  };
97
- case TriggerKind.Subscription:
106
+ case "subscription":
98
107
  return {
99
- kind: TriggerKind.Subscription,
100
- filter: {}
108
+ kind: "subscription",
109
+ query: {
110
+ string: "Query.select(Filter.nothing())",
111
+ ast: Query.select(Filter.nothing()).ast
112
+ }
101
113
  };
102
- case TriggerKind.Queue:
114
+ case "queue":
103
115
  return {
104
- kind: TriggerKind.Queue,
105
- queue: ""
116
+ kind: "queue",
117
+ queue: "dxn:"
106
118
  };
107
- case TriggerKind.Email:
119
+ case "email":
108
120
  return {
109
- kind: TriggerKind.Email
121
+ kind: "email"
110
122
  };
111
- case TriggerKind.Webhook:
123
+ case "webhook":
112
124
  return {
113
- kind: TriggerKind.Webhook
125
+ kind: "webhook"
114
126
  };
115
127
  default:
116
128
  return void 0;
@@ -124,7 +136,7 @@ var SpecSelector = (props) => {
124
136
  }, [
125
137
  specProps
126
138
  ]);
127
- const options = useMemo2(() => Object.values(TriggerKind).map((kind) => ({
139
+ const options = useMemo2(() => TriggerKinds.map((kind) => ({
128
140
  value: kind,
129
141
  label: t(`trigger type ${kind}`)
130
142
  })), [
@@ -141,7 +153,7 @@ var SpecSelector = (props) => {
141
153
  };
142
154
 
143
155
  // src/components/TriggerEditor/TriggerEditor.tsx
144
- var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
156
+ var TriggerEditor = ({ space, trigger, readonlySpec, onSave, onCancel }) => {
145
157
  var _effect = _useSignals3();
146
158
  try {
147
159
  const handleSave = (values) => {
@@ -150,11 +162,15 @@ var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
150
162
  const handleRefQueryLookup = useRefQueryLookupHandler({
151
163
  space
152
164
  });
153
- const Custom = useCustomInputs(space, handleRefQueryLookup);
165
+ const Custom = useCustomInputs({
166
+ space,
167
+ readonlySpec,
168
+ onQueryRefOptions: handleRefQueryLookup
169
+ });
154
170
  return /* @__PURE__ */ React3.createElement(Form2, {
155
171
  outerSpacing: false,
156
172
  Custom,
157
- schema: FunctionTriggerSchema,
173
+ schema: FunctionTrigger,
158
174
  values: trigger,
159
175
  onSave: handleSave,
160
176
  onCancel,
@@ -164,10 +180,11 @@ var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
164
180
  _effect.f();
165
181
  }
166
182
  };
167
- var useCustomInputs = (space, onQueryRefOptions) => {
168
- const functions = useQuery(space, Filter.type(FunctionType));
169
- const workflows = useQuery(space, Filter.type(ComputeGraph));
170
- const scripts = useQuery(space, Filter.type(ScriptType));
183
+ var useCustomInputs = ({ space, readonlySpec, onQueryRefOptions }) => {
184
+ const { t } = useTranslation2(meta.id);
185
+ const functions = useQuery(space, Filter2.type(FunctionType));
186
+ const workflows = useQuery(space, Filter2.type(ComputeGraph));
187
+ const scripts = useQuery(space, Filter2.type(ScriptType));
171
188
  return useMemo3(() => ({
172
189
  // Function selector.
173
190
  ["function"]: (props) => {
@@ -197,7 +214,42 @@ var useCustomInputs = (space, onQueryRefOptions) => {
197
214
  });
198
215
  },
199
216
  // Spec selector.
200
- ["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 { themeMode } = useThemeContext();
225
+ const density = useDensityContext();
226
+ const elevation = useElevationContext();
227
+ const value = props.getValue();
228
+ const handleChange = useCallback3((text) => props.onValueChange("object", {
229
+ ...value,
230
+ string: text
231
+ }), []);
232
+ const extensions = useMemo3(() => [
233
+ createBasicExtensions({
234
+ readOnly: readonlySpec,
235
+ placeholder: t("query placeholder")
236
+ }),
237
+ createThemeExtensions({
238
+ themeMode
239
+ })
240
+ ], []);
241
+ return /* @__PURE__ */ React3.createElement(Input.Root, null, /* @__PURE__ */ React3.createElement(InputHeader, {
242
+ label: props.label
243
+ }), /* @__PURE__ */ React3.createElement(Editor, {
244
+ classNames: mx(inputTheme.input({
245
+ density,
246
+ elevation
247
+ }), "flex items-center", "focus-within:bg-focusSurface focus-within:border-separator focus-within:hover:bg-focusSurface"),
248
+ extensions,
249
+ value: value.string,
250
+ onChange: handleChange
251
+ }));
252
+ },
201
253
  // Function input editor.
202
254
  ["input"]: (props) => /* @__PURE__ */ React3.createElement(FunctionInputEditor, {
203
255
  ...props,
@@ -207,7 +259,8 @@ var useCustomInputs = (space, onQueryRefOptions) => {
207
259
  }), [
208
260
  workflows,
209
261
  scripts,
210
- functions
262
+ functions,
263
+ readonlySpec
211
264
  ]);
212
265
  };
213
266
  var getWorkflowOptions = (graphs) => {
@@ -227,4 +280,4 @@ var getFunctionOptions = (scripts, functions) => {
227
280
  export {
228
281
  TriggerEditor
229
282
  };
230
- //# sourceMappingURL=chunk-FSJZXTS2.mjs.map
283
+ //# sourceMappingURL=chunk-NIJWEQRD.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,14 @@
1
+ // src/capabilities/index.ts
2
+ import { lazy } from "@dxos/app-framework";
3
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-DV5HMFX4.mjs"));
4
+ var ComputeRuntime = lazy(() => import("./compute-runtime-YJREH6WP.mjs"));
5
+ var IntentResolver = lazy(() => import("./intent-resolver-D2OHKQRR.mjs"));
6
+ var ReactSurface = lazy(() => import("./react-surface-JXFO46V4.mjs"));
7
+
8
+ export {
9
+ AppGraphBuilder,
10
+ ComputeRuntime,
11
+ IntentResolver,
12
+ ReactSurface
13
+ };
14
+ //# sourceMappingURL=chunk-QT3YWUOT.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
+ }
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  meta
3
- } from "./chunk-GW5U2DGT.mjs";
3
+ } from "./chunk-WWURMV25.mjs";
4
4
 
5
5
  // src/types/schema.ts
6
- import { Schema } from "effect";
6
+ import * as Schema from "effect/Schema";
7
7
  import { SpaceSchema } from "@dxos/react-client/echo";
8
8
  var TriggerTemplate = Schema.Union(Schema.Struct({
9
9
  type: Schema.Literal("timer"),
@@ -35,4 +35,4 @@ var AutomationAction;
35
35
  export {
36
36
  AutomationAction
37
37
  };
38
- //# sourceMappingURL=chunk-HN7OHFCB.mjs.map
38
+ //# sourceMappingURL=chunk-VGBZKM3O.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/schema.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { SpaceSchema } from '@dxos/react-client/echo';\n\nimport { meta } from '../meta';\n\nconst TriggerTemplate = Schema.Union(\n Schema.Struct({ type: Schema.Literal('timer'), cron: Schema.String }),\n Schema.Struct({ type: Schema.Literal('queue'), queueDXN: Schema.Any }),\n);\n\nexport namespace AutomationAction {\n export class CreateTriggerFromTemplate extends Schema.TaggedClass<CreateTriggerFromTemplate>()(\n `${meta.id}/action/create-trigger-from-template`,\n {\n input: Schema.Struct({\n space: SpaceSchema,\n template: TriggerTemplate,\n enabled: Schema.optional(Schema.Boolean),\n // TODO(wittjosiah): Improve how this lookup is done.\n scriptName: Schema.optional(Schema.String),\n input: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Any })),\n }),\n output: Schema.Void,\n },\n ) {}\n}\n"],
5
+ "mappings": ";;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,mBAAmB;AAI5B,IAAMC,kBAAyBC,aACtBC,cAAO;EAAEC,MAAaC,eAAQ,OAAA;EAAUC,MAAaC;AAAO,CAAA,GAC5DJ,cAAO;EAAEC,MAAaC,eAAQ,OAAA;EAAUG,UAAiBC;AAAI,CAAA,CAAA;UAGrDC,mBAAAA;EACR,MAAMC,kCAAyCC,mBAAW,EAC/D,GAAGC,KAAKC,EAAE,wCACV;IACEC,OAAcZ,cAAO;MACnBa,OAAOC;MACPC,UAAUjB;MACVkB,SAAgBC,gBAAgBC,cAAO;;MAEvCC,YAAmBF,gBAAgBb,aAAM;MACzCQ,OAAcK,gBAAgBG,cAAO;QAAEC,KAAYjB;QAAQkB,OAAchB;MAAI,CAAA,CAAA;IAC/E,CAAA;IACAiB,QAAeC;EACjB,CAAA,EAAA;EACC;oBAbUhB,4BAAAA;AAcf,GAfiBD,qBAAAA,mBAAAA,CAAAA,EAAAA;;",
6
+ "names": ["Schema", "SpaceSchema", "TriggerTemplate", "Union", "Struct", "type", "Literal", "cron", "String", "queueDXN", "Any", "AutomationAction", "CreateTriggerFromTemplate", "TaggedClass", "meta", "id", "input", "space", "SpaceSchema", "template", "enabled", "optional", "Boolean", "scriptName", "Record", "key", "value", "output", "Void"]
7
+ }
@@ -1,7 +1,6 @@
1
1
  // src/meta.ts
2
- var AUTOMATION_PLUGIN = "dxos.org/plugin/automation";
3
2
  var meta = {
4
- id: AUTOMATION_PLUGIN,
3
+ id: "dxos.org/plugin/automation",
5
4
  name: "Automation",
6
5
  description: "The Automation tab allows you to trigger pre-defined workflows related to the element you are interacting with inside of Composer.",
7
6
  icon: "ph--robot--regular",
@@ -9,7 +8,6 @@ var meta = {
9
8
  };
10
9
 
11
10
  export {
12
- AUTOMATION_PLUGIN,
13
11
  meta
14
12
  };
15
- //# sourceMappingURL=chunk-GW5U2DGT.mjs.map
13
+ //# sourceMappingURL=chunk-WWURMV25.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/automation',\n name: 'Automation',\n description:\n 'The Automation tab allows you to trigger pre-defined workflows related to the element you are interacting with inside of Composer.',\n icon: 'ph--robot--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-automation',\n};\n"],
5
+ "mappings": ";AAMO,IAAMA,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;AACV;",
6
+ "names": ["meta", "id", "name", "description", "icon", "source"]
7
+ }
@@ -0,0 +1,160 @@
1
+ import {
2
+ AutomationCapabilities
3
+ } from "./chunk-5ARH77PV.mjs";
4
+ import "./chunk-WWURMV25.mjs";
5
+
6
+ // src/capabilities/compute-runtime.ts
7
+ import * as Toolkit from "@effect/ai/Toolkit";
8
+ import * as BrowserKeyValueStore from "@effect/platform-browser/BrowserKeyValueStore";
9
+ import * as Effect from "effect/Effect";
10
+ import * as Layer from "effect/Layer";
11
+ import * as ManagedRuntime from "effect/ManagedRuntime";
12
+ import { Capabilities, contributes } from "@dxos/app-framework";
13
+ import { makeToolExecutionServiceFromFunctions, makeToolResolverFromFunctions } from "@dxos/assistant";
14
+ import { Resource } from "@dxos/context";
15
+ import { Query, Ref } from "@dxos/echo";
16
+ import { CredentialsService, DatabaseService, FunctionImplementationResolver, FunctionInvocationService, InvocationTracer, LocalFunctionExecutionService, QueueService, RemoteFunctionExecutionService, TriggerDispatcher } from "@dxos/functions";
17
+ import { TriggerStateStore } from "@dxos/functions";
18
+ import { invariant } from "@dxos/invariant";
19
+ import { ClientCapabilities } from "@dxos/plugin-client";
20
+ import { PropertiesType } from "@dxos/react-client/echo";
21
+ function _check_private_redeclaration(obj, privateCollection) {
22
+ if (privateCollection.has(obj)) {
23
+ throw new TypeError("Cannot initialize the same private elements twice on an object");
24
+ }
25
+ }
26
+ function _class_apply_descriptor_get(receiver, descriptor) {
27
+ if (descriptor.get) {
28
+ return descriptor.get.call(receiver);
29
+ }
30
+ return descriptor.value;
31
+ }
32
+ function _class_apply_descriptor_set(receiver, descriptor, value) {
33
+ if (descriptor.set) {
34
+ descriptor.set.call(receiver, value);
35
+ } else {
36
+ if (!descriptor.writable) {
37
+ throw new TypeError("attempted to set read only private field");
38
+ }
39
+ descriptor.value = value;
40
+ }
41
+ }
42
+ function _class_extract_field_descriptor(receiver, privateMap, action) {
43
+ if (!privateMap.has(receiver)) {
44
+ throw new TypeError("attempted to " + action + " private field on non-instance");
45
+ }
46
+ return privateMap.get(receiver);
47
+ }
48
+ function _class_private_field_get(receiver, privateMap) {
49
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
50
+ return _class_apply_descriptor_get(receiver, descriptor);
51
+ }
52
+ function _class_private_field_init(obj, privateMap, value) {
53
+ _check_private_redeclaration(obj, privateMap);
54
+ privateMap.set(obj, value);
55
+ }
56
+ function _class_private_field_set(receiver, privateMap, value) {
57
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
58
+ _class_apply_descriptor_set(receiver, descriptor, value);
59
+ return value;
60
+ }
61
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-automation/src/capabilities/compute-runtime.ts";
62
+ var compute_runtime_default = (async (context) => {
63
+ const provider = await new ComputeRuntimeProviderImpl(context).open();
64
+ return contributes(AutomationCapabilities.ComputeRuntime, provider, async () => {
65
+ await provider.close();
66
+ });
67
+ });
68
+ var _runtimes = /* @__PURE__ */ new WeakMap();
69
+ var _context = /* @__PURE__ */ new WeakMap();
70
+ var ComputeRuntimeProviderImpl = class extends Resource {
71
+ async _open() {
72
+ }
73
+ async _close() {
74
+ await Promise.all(Array.from(_class_private_field_get(this, _runtimes).values()).map((rt) => rt.dispose()));
75
+ _class_private_field_get(this, _runtimes).clear();
76
+ }
77
+ getRuntime(spaceId) {
78
+ if (_class_private_field_get(this, _runtimes).has(spaceId)) {
79
+ return _class_private_field_get(this, _runtimes).get(spaceId);
80
+ }
81
+ const layer = Layer.unwrapEffect(Effect.gen(this, function* () {
82
+ const client = _class_private_field_get(this, _context).getCapability(ClientCapabilities.Client);
83
+ const serviceLayer = _class_private_field_get(this, _context).getCapability(Capabilities.AiServiceLayer) ?? Layer.die("AiService not found");
84
+ const functions = _class_private_field_get(this, _context).getCapabilities(Capabilities.Functions);
85
+ const toolkits = _class_private_field_get(this, _context).getCapabilities(Capabilities.Toolkit);
86
+ const handlers = _class_private_field_get(this, _context).getCapabilities(Capabilities.ToolkitHandler);
87
+ const allFunctions = functions.flat();
88
+ const toolkit = Toolkit.merge(...toolkits);
89
+ const handlersLayer = Layer.mergeAll(Layer.empty, ...handlers);
90
+ const space = client.spaces.get(spaceId);
91
+ invariant(space, void 0, {
92
+ F: __dxlog_file,
93
+ L: 79,
94
+ S: this,
95
+ A: [
96
+ "space",
97
+ ""
98
+ ]
99
+ });
100
+ yield* Effect.promise(() => space.waitUntilReady());
101
+ return Layer.mergeAll(TriggerDispatcher.layer({
102
+ timeControl: "natural"
103
+ })).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({
104
+ functions: allFunctions
105
+ })), Layer.provideMerge(RemoteFunctionExecutionService.fromClient(
106
+ client.edge.baseUrl,
107
+ // If agent is not enabled do not provide spaceId because space context will be unavailable on EDGE.
108
+ client.config.get("runtime.client.edgeFeatures.agents") ? spaceId : void 0
109
+ )), 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)))))));
110
+ }));
111
+ const runtime = ManagedRuntime.make(layer);
112
+ _class_private_field_get(this, _runtimes).set(spaceId, runtime);
113
+ return runtime;
114
+ }
115
+ constructor(context) {
116
+ super(), _class_private_field_init(this, _runtimes, {
117
+ writable: true,
118
+ value: /* @__PURE__ */ new Map()
119
+ }), _class_private_field_init(this, _context, {
120
+ writable: true,
121
+ value: void 0
122
+ });
123
+ _class_private_field_set(this, _context, context);
124
+ }
125
+ };
126
+ var InvocationTracerLive = Layer.unwrapEffect(Effect.gen(function* () {
127
+ const { objects: [properties] } = yield* DatabaseService.runQuery(Query.type(PropertiesType));
128
+ invariant(properties, void 0, {
129
+ F: __dxlog_file,
130
+ L: 129,
131
+ S: this,
132
+ A: [
133
+ "properties",
134
+ ""
135
+ ]
136
+ });
137
+ if (!properties.invocationTraceQueue) {
138
+ const queue2 = yield* QueueService.createQueue({
139
+ subspaceTag: "trace"
140
+ });
141
+ properties.invocationTraceQueue = Ref.fromDXN(queue2.dxn);
142
+ }
143
+ const queue = properties.invocationTraceQueue.target;
144
+ invariant(queue, void 0, {
145
+ F: __dxlog_file,
146
+ L: 135,
147
+ S: this,
148
+ A: [
149
+ "queue",
150
+ ""
151
+ ]
152
+ });
153
+ return InvocationTracer.layerLive({
154
+ invocationTraceQueue: queue
155
+ });
156
+ }));
157
+ export {
158
+ compute_runtime_default as default
159
+ };
160
+ //# sourceMappingURL=compute-runtime-YJREH6WP.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/compute-runtime.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Toolkit from '@effect/ai/Toolkit';\nimport * as BrowserKeyValueStore from '@effect/platform-browser/BrowserKeyValueStore';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as ManagedRuntime from 'effect/ManagedRuntime';\n\nimport { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';\nimport { makeToolExecutionServiceFromFunctions, makeToolResolverFromFunctions } from '@dxos/assistant';\nimport { Resource } from '@dxos/context';\nimport { Query, Ref } from '@dxos/echo';\nimport {\n CredentialsService,\n DatabaseService,\n FunctionImplementationResolver,\n FunctionInvocationService,\n InvocationTracer,\n LocalFunctionExecutionService,\n QueueService,\n RemoteFunctionExecutionService,\n TriggerDispatcher,\n} from '@dxos/functions';\nimport { TriggerStateStore } from '@dxos/functions';\nimport { invariant } from '@dxos/invariant';\nimport { type SpaceId } from '@dxos/keys';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { PropertiesType } from '@dxos/react-client/echo';\n\nimport { AutomationCapabilities } from './capabilities';\n\nexport default async (context: PluginContext) => {\n const provider = await new ComputeRuntimeProviderImpl(context).open();\n return contributes(AutomationCapabilities.ComputeRuntime, provider, async () => {\n await provider.close();\n });\n};\n\nclass ComputeRuntimeProviderImpl extends Resource implements AutomationCapabilities.ComputeRuntimeProvider {\n readonly #runtimes = new Map<SpaceId, AutomationCapabilities.ComputeRuntime>();\n readonly #context: PluginContext;\n\n constructor(context: PluginContext) {\n super();\n this.#context = context;\n }\n\n protected override async _open() {}\n\n protected override async _close() {\n await Promise.all(Array.from(this.#runtimes.values()).map((rt) => rt.dispose()));\n this.#runtimes.clear();\n }\n\n getRuntime(spaceId: SpaceId): AutomationCapabilities.ComputeRuntime {\n if (this.#runtimes.has(spaceId)) {\n return this.#runtimes.get(spaceId)!;\n }\n\n const layer = Layer.unwrapEffect(\n Effect.gen(this, function* () {\n const client = this.#context.getCapability(ClientCapabilities.Client);\n const serviceLayer =\n this.#context.getCapability(Capabilities.AiServiceLayer) ?? Layer.die('AiService not found');\n\n // TODO(dmaretskyi): Make those reactive.\n const functions = this.#context.getCapabilities(Capabilities.Functions);\n const toolkits = this.#context.getCapabilities(Capabilities.Toolkit);\n const handlers = this.#context.getCapabilities(Capabilities.ToolkitHandler);\n\n const allFunctions = functions.flat();\n // TODO(wittjosiah): Don't cast.\n const toolkit = Toolkit.merge(...toolkits) as Toolkit.Toolkit<any>;\n const handlersLayer = Layer.mergeAll(Layer.empty, ...handlers);\n\n const space = client.spaces.get(spaceId);\n invariant(space);\n yield* Effect.promise(() => space.waitUntilReady());\n\n return Layer.mergeAll(TriggerDispatcher.layer({ timeControl: 'natural' })).pipe(\n Layer.provideMerge(\n Layer.mergeAll(\n InvocationTracerLive,\n TriggerStateStore.layerKv.pipe(Layer.provide(BrowserKeyValueStore.layerLocalStorage)),\n makeToolResolverFromFunctions(allFunctions, toolkit),\n makeToolExecutionServiceFromFunctions(toolkit, handlersLayer),\n ),\n ),\n Layer.provideMerge(\n Layer.mergeAll(\n FunctionInvocationService.layer.pipe(\n Layer.provideMerge(\n LocalFunctionExecutionService.layerLive.pipe(\n Layer.provideMerge(FunctionImplementationResolver.layerTest({ functions: allFunctions })),\n Layer.provideMerge(\n RemoteFunctionExecutionService.fromClient(\n client.edge.baseUrl,\n // If agent is not enabled do not provide spaceId because space context will be unavailable on EDGE.\n client.config.get('runtime.client.edgeFeatures.agents') ? spaceId : undefined,\n ),\n ),\n Layer.provideMerge(serviceLayer),\n Layer.provideMerge(CredentialsService.layerFromDatabase()),\n Layer.provideMerge(space ? DatabaseService.layer(space.db) : DatabaseService.notAvailable),\n Layer.provideMerge(space ? QueueService.layer(space.queues) : QueueService.notAvailable),\n ),\n ),\n ),\n ),\n ),\n );\n }),\n );\n\n const runtime = ManagedRuntime.make(layer);\n this.#runtimes.set(spaceId, runtime);\n\n return runtime;\n }\n}\n\nconst InvocationTracerLive = Layer.unwrapEffect(\n Effect.gen(function* () {\n const {\n objects: [properties],\n } = yield* DatabaseService.runQuery(Query.type(PropertiesType));\n invariant(properties);\n if (!properties.invocationTraceQueue) {\n const queue = yield* QueueService.createQueue({ subspaceTag: 'trace' });\n properties.invocationTraceQueue = Ref.fromDXN(queue.dxn);\n }\n const queue = properties.invocationTraceQueue.target;\n invariant(queue);\n return InvocationTracer.layerLive({ invocationTraceQueue: queue });\n }),\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["Toolkit", "BrowserKeyValueStore", "Effect", "Layer", "ManagedRuntime", "Capabilities", "contributes", "makeToolExecutionServiceFromFunctions", "makeToolResolverFromFunctions", "Resource", "Query", "Ref", "CredentialsService", "DatabaseService", "FunctionImplementationResolver", "FunctionInvocationService", "InvocationTracer", "LocalFunctionExecutionService", "QueueService", "RemoteFunctionExecutionService", "TriggerDispatcher", "TriggerStateStore", "invariant", "ClientCapabilities", "PropertiesType", "context", "provider", "ComputeRuntimeProviderImpl", "open", "contributes", "AutomationCapabilities", "ComputeRuntime", "close", "Resource", "_open", "_close", "Promise", "all", "Array", "from", "values", "map", "rt", "dispose", "clear", "getRuntime", "spaceId", "has", "get", "layer", "unwrapEffect", "gen", "client", "getCapability", "ClientCapabilities", "Client", "serviceLayer", "Capabilities", "AiServiceLayer", "die", "functions", "getCapabilities", "Functions", "toolkits", "Toolkit", "handlers", "ToolkitHandler", "allFunctions", "flat", "toolkit", "merge", "handlersLayer", "mergeAll", "empty", "space", "spaces", "invariant", "promise", "waitUntilReady", "TriggerDispatcher", "timeControl", "pipe", "provideMerge", "InvocationTracerLive", "TriggerStateStore", "layerKv", "provide", "layerLocalStorage", "makeToolResolverFromFunctions", "makeToolExecutionServiceFromFunctions", "FunctionInvocationService", "LocalFunctionExecutionService", "layerLive", "FunctionImplementationResolver", "layerTest", "RemoteFunctionExecutionService", "fromClient", "edge", "baseUrl", "config", "undefined", "CredentialsService", "layerFromDatabase", "DatabaseService", "db", "notAvailable", "QueueService", "queues", "runtime", "make", "set", "Map", "objects", "properties", "runQuery", "Query", "type", "PropertiesType", "invocationTraceQueue", "queue", "createQueue", "subspaceTag", "Ref", "fromDXN", "dxn", "target", "InvocationTracer"]
7
+ }
@@ -0,0 +1,12 @@
1
+ import {
2
+ useComputeRuntimeCallback,
3
+ useTriggerRuntimeControls
4
+ } from "../chunk-MVPRI3DB.mjs";
5
+ import "../chunk-QT3YWUOT.mjs";
6
+ import "../chunk-5ARH77PV.mjs";
7
+ import "../chunk-WWURMV25.mjs";
8
+ export {
9
+ useComputeRuntimeCallback,
10
+ useTriggerRuntimeControls
11
+ };
12
+ //# sourceMappingURL=index.mjs.map