@dxos/plugin-automation 0.8.4-main.ead640a → 0.8.4-main.effb148878

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 (351) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/AutomationPanel-OS3ZWYJK.mjs +12 -0
  4. package/dist/lib/neutral/AutomationPlugin.mjs +10 -0
  5. package/dist/lib/neutral/AutomationPlugin.node.mjs +1118 -0
  6. package/dist/lib/neutral/AutomationPlugin.node.mjs.map +7 -0
  7. package/dist/lib/neutral/AutomationPlugin.workerd.mjs +23 -0
  8. package/dist/lib/neutral/AutomationPlugin.workerd.mjs.map +7 -0
  9. package/dist/lib/neutral/AutomationSettings-CAFY3J7H.mjs +32 -0
  10. package/dist/lib/neutral/AutomationSettings-CAFY3J7H.mjs.map +7 -0
  11. package/dist/lib/neutral/FunctionsContainer-V5AM45ZI.mjs +38 -0
  12. package/dist/lib/neutral/FunctionsContainer-V5AM45ZI.mjs.map +7 -0
  13. package/dist/lib/neutral/FunctionsPanel-L32Z67B7.mjs +97 -0
  14. package/dist/lib/neutral/FunctionsPanel-L32Z67B7.mjs.map +7 -0
  15. package/dist/lib/neutral/FunctionsRegistry-RTCY3LXE.mjs +95 -0
  16. package/dist/lib/neutral/FunctionsRegistry-RTCY3LXE.mjs.map +7 -0
  17. package/dist/lib/neutral/TriggerSettings-XCHIZPOR.mjs +9 -0
  18. package/dist/lib/neutral/app-graph-builder-4QOUKY5L.mjs +75 -0
  19. package/dist/lib/neutral/app-graph-builder-4QOUKY5L.mjs.map +7 -0
  20. package/dist/lib/neutral/capabilities/index.mjs +17 -0
  21. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  22. package/dist/lib/neutral/capabilities/node.mjs +15 -0
  23. package/dist/lib/neutral/capabilities/node.mjs.map +7 -0
  24. package/dist/lib/neutral/chunk-2H6X4VQY.mjs +435 -0
  25. package/dist/lib/neutral/chunk-2H6X4VQY.mjs.map +7 -0
  26. package/dist/lib/neutral/chunk-2JP77CMN.mjs +42 -0
  27. package/dist/lib/neutral/chunk-2JP77CMN.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-33VXVTV4.mjs +38 -0
  29. package/dist/lib/neutral/chunk-33VXVTV4.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-ARUHHM4Q.mjs +12 -0
  31. package/dist/lib/neutral/chunk-ARUHHM4Q.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-CMM3AFHR.mjs +111 -0
  33. package/dist/lib/neutral/chunk-CMM3AFHR.mjs.map +7 -0
  34. package/dist/lib/neutral/chunk-EBSOLOP6.mjs +8 -0
  35. package/dist/lib/neutral/chunk-EBSOLOP6.mjs.map +7 -0
  36. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  37. package/dist/lib/neutral/chunk-KV7RZLFS.mjs +344 -0
  38. package/dist/lib/neutral/chunk-KV7RZLFS.mjs.map +7 -0
  39. package/dist/lib/neutral/chunk-QLBA6Y46.mjs +39 -0
  40. package/dist/lib/neutral/chunk-QLBA6Y46.mjs.map +7 -0
  41. package/dist/lib/neutral/chunk-XC5EPVE3.mjs +76 -0
  42. package/dist/lib/neutral/chunk-XC5EPVE3.mjs.map +7 -0
  43. package/dist/lib/neutral/components/index.mjs +16 -0
  44. package/dist/lib/neutral/containers/index.mjs +13 -0
  45. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  46. package/dist/lib/neutral/create-trigger-from-template-IOQZDDSH.mjs +68 -0
  47. package/dist/lib/neutral/create-trigger-from-template-IOQZDDSH.mjs.map +7 -0
  48. package/dist/lib/neutral/hooks/index.mjs +10 -0
  49. package/dist/lib/neutral/index.mjs +16 -0
  50. package/dist/lib/neutral/layer-specs-B22CIT3U.mjs +160 -0
  51. package/dist/lib/neutral/layer-specs-B22CIT3U.mjs.map +7 -0
  52. package/dist/lib/neutral/meta.json +1 -0
  53. package/dist/lib/neutral/meta.mjs +8 -0
  54. package/dist/lib/neutral/operation-handler-YXGYH5W5.mjs +13 -0
  55. package/dist/lib/neutral/operation-handler-YXGYH5W5.mjs.map +7 -0
  56. package/dist/lib/neutral/operations/index.mjs +8 -0
  57. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  58. package/dist/lib/neutral/plugin.mjs +16 -0
  59. package/dist/lib/neutral/plugin.mjs.map +7 -0
  60. package/dist/lib/neutral/react-surface-3OGMAMKV.mjs +57 -0
  61. package/dist/lib/neutral/react-surface-3OGMAMKV.mjs.map +7 -0
  62. package/dist/lib/neutral/testing.mjs +8 -0
  63. package/dist/lib/neutral/testing.mjs.map +7 -0
  64. package/dist/lib/neutral/translations.mjs +60 -0
  65. package/dist/lib/neutral/translations.mjs.map +7 -0
  66. package/dist/lib/neutral/trigger-runtime-controller-BOEJYGWC.mjs +77 -0
  67. package/dist/lib/neutral/trigger-runtime-controller-BOEJYGWC.mjs.map +7 -0
  68. package/dist/lib/neutral/types/index.mjs +12 -0
  69. package/dist/lib/neutral/types/index.mjs.map +7 -0
  70. package/dist/types/src/AutomationPlugin.d.ts +3 -1
  71. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  72. package/dist/types/src/AutomationPlugin.node.d.ts +4 -0
  73. package/dist/types/src/AutomationPlugin.node.d.ts.map +1 -0
  74. package/dist/types/src/AutomationPlugin.test.d.ts +2 -0
  75. package/dist/types/src/AutomationPlugin.test.d.ts.map +1 -0
  76. package/dist/types/src/AutomationPlugin.workerd.d.ts +4 -0
  77. package/dist/types/src/AutomationPlugin.workerd.d.ts.map +1 -0
  78. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  79. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  80. package/dist/types/src/capabilities/index.d.ts +7 -5
  81. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/layer-specs.d.ts +5 -0
  83. package/dist/types/src/capabilities/layer-specs.d.ts.map +1 -0
  84. package/dist/types/src/capabilities/node.d.ts +7 -0
  85. package/dist/types/src/capabilities/node.d.ts.map +1 -0
  86. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  87. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  88. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  89. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/trigger-runtime-controller.d.ts +5 -0
  91. package/dist/types/src/capabilities/trigger-runtime-controller.d.ts.map +1 -0
  92. package/dist/types/src/capabilities/trigger-runtime-controller.test.d.ts +2 -0
  93. package/dist/types/src/capabilities/trigger-runtime-controller.test.d.ts.map +1 -0
  94. package/dist/types/src/commands/index.d.ts +2 -0
  95. package/dist/types/src/commands/index.d.ts.map +1 -0
  96. package/dist/types/src/commands/trigger/create/index.d.ts +25 -0
  97. package/dist/types/src/commands/trigger/create/index.d.ts.map +1 -0
  98. package/dist/types/src/commands/trigger/create/queue.d.ts +13 -0
  99. package/dist/types/src/commands/trigger/create/queue.d.ts.map +1 -0
  100. package/dist/types/src/commands/trigger/create/subscription.d.ts +15 -0
  101. package/dist/types/src/commands/trigger/create/subscription.d.ts.map +1 -0
  102. package/dist/types/src/commands/trigger/create/timer.d.ts +13 -0
  103. package/dist/types/src/commands/trigger/create/timer.d.ts.map +1 -0
  104. package/dist/types/src/commands/trigger/index.d.ts +57 -0
  105. package/dist/types/src/commands/trigger/index.d.ts.map +1 -0
  106. package/dist/types/src/commands/trigger/list.d.ts +7 -0
  107. package/dist/types/src/commands/trigger/list.d.ts.map +1 -0
  108. package/dist/types/src/commands/trigger/options.d.ts +10 -0
  109. package/dist/types/src/commands/trigger/options.d.ts.map +1 -0
  110. package/dist/types/src/commands/trigger/remove.d.ts +8 -0
  111. package/dist/types/src/commands/trigger/remove.d.ts.map +1 -0
  112. package/dist/types/src/commands/trigger/update/index.d.ts +28 -0
  113. package/dist/types/src/commands/trigger/update/index.d.ts.map +1 -0
  114. package/dist/types/src/commands/trigger/update/queue.d.ts +11 -0
  115. package/dist/types/src/commands/trigger/update/queue.d.ts.map +1 -0
  116. package/dist/types/src/commands/trigger/update/subscription.d.ts +13 -0
  117. package/dist/types/src/commands/trigger/update/subscription.d.ts.map +1 -0
  118. package/dist/types/src/commands/trigger/update/timer.d.ts +11 -0
  119. package/dist/types/src/commands/trigger/update/timer.d.ts.map +1 -0
  120. package/dist/types/src/commands/trigger/util.d.ts +85 -0
  121. package/dist/types/src/commands/trigger/util.d.ts.map +1 -0
  122. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +6 -7
  123. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  124. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +45 -28
  125. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  126. package/dist/types/src/components/AutomationPanel/TriggerEdgeMetadata.d.ts +18 -0
  127. package/dist/types/src/components/AutomationPanel/TriggerEdgeMetadata.d.ts.map +1 -0
  128. package/dist/types/src/components/AutomationPanel/index.d.ts.map +1 -1
  129. package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
  130. package/dist/types/src/components/FunctionsPanel/index.d.ts.map +1 -1
  131. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts +8 -0
  132. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts.map +1 -0
  133. package/dist/types/src/components/FunctionsRegistry/index.d.ts +4 -0
  134. package/dist/types/src/components/FunctionsRegistry/index.d.ts.map +1 -0
  135. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts +12 -9
  136. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
  137. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts +6 -3
  138. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
  139. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +9 -8
  140. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  141. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +118 -30
  142. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  143. package/dist/types/src/components/index.d.ts +3 -4
  144. package/dist/types/src/components/index.d.ts.map +1 -1
  145. package/dist/types/src/containers/AutomationSettings/AutomationSettings.d.ts +6 -0
  146. package/dist/types/src/containers/AutomationSettings/AutomationSettings.d.ts.map +1 -0
  147. package/dist/types/src/containers/AutomationSettings/index.d.ts +2 -0
  148. package/dist/types/src/containers/AutomationSettings/index.d.ts.map +1 -0
  149. package/dist/types/src/containers/FunctionsContainer/FunctionsContainer.d.ts +4 -0
  150. package/dist/types/src/containers/FunctionsContainer/FunctionsContainer.d.ts.map +1 -0
  151. package/dist/types/src/containers/FunctionsContainer/index.d.ts +2 -0
  152. package/dist/types/src/containers/FunctionsContainer/index.d.ts.map +1 -0
  153. package/dist/types/src/containers/TriggerSettings/TriggerSettings.d.ts.map +1 -0
  154. package/dist/types/src/containers/TriggerSettings/index.d.ts +3 -0
  155. package/dist/types/src/containers/TriggerSettings/index.d.ts.map +1 -0
  156. package/dist/types/src/containers/index.d.ts +5 -0
  157. package/dist/types/src/containers/index.d.ts.map +1 -0
  158. package/dist/types/src/hooks/index.d.ts +1 -1
  159. package/dist/types/src/hooks/index.d.ts.map +1 -1
  160. package/dist/types/src/hooks/useEdgeTriggersDispatcherStatus.d.ts +13 -0
  161. package/dist/types/src/hooks/useEdgeTriggersDispatcherStatus.d.ts.map +1 -0
  162. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +6 -5
  163. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -1
  164. package/dist/types/src/index.d.ts +1 -4
  165. package/dist/types/src/index.d.ts.map +1 -1
  166. package/dist/types/src/meta.d.ts +2 -2
  167. package/dist/types/src/meta.d.ts.map +1 -1
  168. package/dist/types/src/operations/create-trigger-from-template.d.ts +5 -0
  169. package/dist/types/src/operations/create-trigger-from-template.d.ts.map +1 -0
  170. package/dist/types/src/operations/index.d.ts +3 -0
  171. package/dist/types/src/operations/index.d.ts.map +1 -0
  172. package/dist/types/src/plugin.d.ts +4 -0
  173. package/dist/types/src/plugin.d.ts.map +1 -0
  174. package/dist/types/src/testing/test-functions.d.ts +204 -3
  175. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  176. package/dist/types/src/testing.d.ts +2 -0
  177. package/dist/types/src/testing.d.ts.map +1 -0
  178. package/dist/types/src/translations.d.ts +45 -29
  179. package/dist/types/src/translations.d.ts.map +1 -1
  180. package/dist/types/src/types/AutomationOperation.d.ts +21 -0
  181. package/dist/types/src/types/AutomationOperation.d.ts.map +1 -0
  182. package/dist/types/src/types/index.d.ts +1 -0
  183. package/dist/types/src/types/index.d.ts.map +1 -1
  184. package/dist/types/src/types/schema.d.ts +13 -5
  185. package/dist/types/src/types/schema.d.ts.map +1 -1
  186. package/dist/types/tsconfig.tsbuildinfo +1 -1
  187. package/package.json +145 -68
  188. package/src/AutomationPlugin.node.ts +32 -0
  189. package/src/AutomationPlugin.test.ts +27 -0
  190. package/src/AutomationPlugin.tsx +24 -38
  191. package/src/AutomationPlugin.workerd.ts +18 -0
  192. package/src/capabilities/app-graph-builder.ts +59 -80
  193. package/src/capabilities/index.ts +13 -7
  194. package/src/capabilities/layer-specs.ts +230 -0
  195. package/src/capabilities/node.ts +17 -0
  196. package/src/capabilities/operation-handler.ts +16 -0
  197. package/src/capabilities/react-surface.tsx +49 -45
  198. package/src/capabilities/trigger-runtime-controller.test.ts +103 -0
  199. package/src/capabilities/trigger-runtime-controller.ts +126 -0
  200. package/src/commands/index.ts +5 -0
  201. package/src/commands/trigger/create/index.ts +14 -0
  202. package/src/commands/trigger/create/queue.ts +87 -0
  203. package/src/commands/trigger/create/subscription.ts +125 -0
  204. package/src/commands/trigger/create/timer.ts +90 -0
  205. package/src/commands/trigger/index.ts +16 -0
  206. package/src/commands/trigger/list.ts +70 -0
  207. package/src/commands/trigger/options.ts +47 -0
  208. package/src/commands/trigger/remove.ts +45 -0
  209. package/src/commands/trigger/update/index.ts +14 -0
  210. package/src/commands/trigger/update/queue.ts +191 -0
  211. package/src/commands/trigger/update/subscription.ts +279 -0
  212. package/src/commands/trigger/update/timer.ts +195 -0
  213. package/src/commands/trigger/util.ts +410 -0
  214. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +13 -7
  215. package/src/components/AutomationPanel/AutomationPanel.tsx +260 -100
  216. package/src/components/AutomationPanel/TriggerEdgeMetadata.tsx +148 -0
  217. package/src/components/FunctionsPanel/FunctionsPanel.tsx +43 -35
  218. package/src/components/FunctionsRegistry/FunctionsRegistry.tsx +119 -0
  219. package/src/components/FunctionsRegistry/index.ts +8 -0
  220. package/src/components/TriggerEditor/FunctionInputEditor.tsx +36 -35
  221. package/src/components/TriggerEditor/SpecSelector.tsx +28 -22
  222. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +94 -40
  223. package/src/components/TriggerEditor/TriggerEditor.tsx +173 -56
  224. package/src/components/index.ts +1 -2
  225. package/src/containers/AutomationSettings/AutomationSettings.tsx +31 -0
  226. package/src/containers/AutomationSettings/index.ts +5 -0
  227. package/src/containers/FunctionsContainer/FunctionsContainer.tsx +33 -0
  228. package/src/containers/FunctionsContainer/index.ts +5 -0
  229. package/src/containers/TriggerSettings/TriggerSettings.tsx +48 -0
  230. package/src/containers/TriggerSettings/index.ts +6 -0
  231. package/src/containers/index.ts +9 -0
  232. package/src/hooks/index.ts +2 -1
  233. package/src/hooks/useEdgeTriggersDispatcherStatus.ts +78 -0
  234. package/src/hooks/useTriggerRuntimeControls.ts +39 -19
  235. package/src/index.ts +1 -5
  236. package/src/meta.ts +28 -6
  237. package/src/operations/create-trigger-from-template.ts +70 -0
  238. package/src/operations/index.ts +7 -0
  239. package/src/plugin.ts +11 -0
  240. package/src/testing/test-functions.ts +12 -9
  241. package/src/testing.ts +7 -0
  242. package/src/translations.ts +53 -34
  243. package/src/types/AutomationOperation.ts +39 -0
  244. package/src/types/index.ts +2 -0
  245. package/src/types/schema.ts +6 -6
  246. package/dist/lib/browser/AutomationPanel-3PHA5FTJ.mjs +0 -11
  247. package/dist/lib/browser/AutomationSettings-OQERZHTG.mjs +0 -69
  248. package/dist/lib/browser/AutomationSettings-OQERZHTG.mjs.map +0 -7
  249. package/dist/lib/browser/FunctionsContainer-V3OM6BFC.mjs +0 -36
  250. package/dist/lib/browser/FunctionsContainer-V3OM6BFC.mjs.map +0 -7
  251. package/dist/lib/browser/FunctionsPanel-PTFCCUTB.mjs +0 -10
  252. package/dist/lib/browser/app-graph-builder-DV5HMFX4.mjs +0 -81
  253. package/dist/lib/browser/app-graph-builder-DV5HMFX4.mjs.map +0 -7
  254. package/dist/lib/browser/chunk-2AOFK5FW.mjs +0 -14
  255. package/dist/lib/browser/chunk-2AOFK5FW.mjs.map +0 -7
  256. package/dist/lib/browser/chunk-5ARH77PV.mjs +0 -15
  257. package/dist/lib/browser/chunk-5ARH77PV.mjs.map +0 -7
  258. package/dist/lib/browser/chunk-DK7R2HNC.mjs +0 -107
  259. package/dist/lib/browser/chunk-DK7R2HNC.mjs.map +0 -7
  260. package/dist/lib/browser/chunk-MVPRI3DB.mjs +0 -53
  261. package/dist/lib/browser/chunk-MVPRI3DB.mjs.map +0 -7
  262. package/dist/lib/browser/chunk-QACR4BJ7.mjs +0 -14
  263. package/dist/lib/browser/chunk-QACR4BJ7.mjs.map +0 -7
  264. package/dist/lib/browser/chunk-SUKAEYF3.mjs +0 -267
  265. package/dist/lib/browser/chunk-SUKAEYF3.mjs.map +0 -7
  266. package/dist/lib/browser/chunk-VGBZKM3O.mjs +0 -38
  267. package/dist/lib/browser/chunk-VGBZKM3O.mjs.map +0 -7
  268. package/dist/lib/browser/chunk-VL3KSDVL.mjs +0 -183
  269. package/dist/lib/browser/chunk-VL3KSDVL.mjs.map +0 -7
  270. package/dist/lib/browser/chunk-WWURMV25.mjs +0 -13
  271. package/dist/lib/browser/chunk-WWURMV25.mjs.map +0 -7
  272. package/dist/lib/browser/compute-runtime-YJREH6WP.mjs +0 -160
  273. package/dist/lib/browser/compute-runtime-YJREH6WP.mjs.map +0 -7
  274. package/dist/lib/browser/hooks/index.mjs +0 -12
  275. package/dist/lib/browser/index.mjs +0 -122
  276. package/dist/lib/browser/index.mjs.map +0 -7
  277. package/dist/lib/browser/intent-resolver-D2OHKQRR.mjs +0 -77
  278. package/dist/lib/browser/intent-resolver-D2OHKQRR.mjs.map +0 -7
  279. package/dist/lib/browser/meta.json +0 -1
  280. package/dist/lib/browser/react-surface-POLPITTD.mjs +0 -63
  281. package/dist/lib/browser/react-surface-POLPITTD.mjs.map +0 -7
  282. package/dist/lib/browser/types/index.mjs +0 -8
  283. package/dist/lib/node-esm/AutomationPanel-EETYIR35.mjs +0 -12
  284. package/dist/lib/node-esm/AutomationSettings-MCB7HK3O.mjs +0 -70
  285. package/dist/lib/node-esm/AutomationSettings-MCB7HK3O.mjs.map +0 -7
  286. package/dist/lib/node-esm/FunctionsContainer-UGODP6YP.mjs +0 -37
  287. package/dist/lib/node-esm/FunctionsContainer-UGODP6YP.mjs.map +0 -7
  288. package/dist/lib/node-esm/FunctionsPanel-JQFBRVOC.mjs +0 -11
  289. package/dist/lib/node-esm/app-graph-builder-TR2WXPX2.mjs +0 -82
  290. package/dist/lib/node-esm/app-graph-builder-TR2WXPX2.mjs.map +0 -7
  291. package/dist/lib/node-esm/chunk-5MQJPJR2.mjs +0 -15
  292. package/dist/lib/node-esm/chunk-5MQJPJR2.mjs.map +0 -7
  293. package/dist/lib/node-esm/chunk-AKHETVIQ.mjs +0 -184
  294. package/dist/lib/node-esm/chunk-AKHETVIQ.mjs.map +0 -7
  295. package/dist/lib/node-esm/chunk-CJUI6AKX.mjs +0 -39
  296. package/dist/lib/node-esm/chunk-CJUI6AKX.mjs.map +0 -7
  297. package/dist/lib/node-esm/chunk-G72KHW5A.mjs +0 -108
  298. package/dist/lib/node-esm/chunk-G72KHW5A.mjs.map +0 -7
  299. package/dist/lib/node-esm/chunk-J3XEBEIE.mjs +0 -268
  300. package/dist/lib/node-esm/chunk-J3XEBEIE.mjs.map +0 -7
  301. package/dist/lib/node-esm/chunk-LB7UQ4SK.mjs +0 -16
  302. package/dist/lib/node-esm/chunk-LB7UQ4SK.mjs.map +0 -7
  303. package/dist/lib/node-esm/chunk-QCA543ZR.mjs +0 -54
  304. package/dist/lib/node-esm/chunk-QCA543ZR.mjs.map +0 -7
  305. package/dist/lib/node-esm/chunk-TXFXIA34.mjs +0 -16
  306. package/dist/lib/node-esm/chunk-TXFXIA34.mjs.map +0 -7
  307. package/dist/lib/node-esm/chunk-WHCSOUNN.mjs +0 -16
  308. package/dist/lib/node-esm/chunk-WHCSOUNN.mjs.map +0 -7
  309. package/dist/lib/node-esm/compute-runtime-CMEPAYND.mjs +0 -161
  310. package/dist/lib/node-esm/compute-runtime-CMEPAYND.mjs.map +0 -7
  311. package/dist/lib/node-esm/hooks/index.mjs +0 -13
  312. package/dist/lib/node-esm/index.mjs +0 -123
  313. package/dist/lib/node-esm/index.mjs.map +0 -7
  314. package/dist/lib/node-esm/intent-resolver-2LGBVXT5.mjs +0 -78
  315. package/dist/lib/node-esm/intent-resolver-2LGBVXT5.mjs.map +0 -7
  316. package/dist/lib/node-esm/meta.json +0 -1
  317. package/dist/lib/node-esm/react-surface-5ULTTXAZ.mjs +0 -64
  318. package/dist/lib/node-esm/react-surface-5ULTTXAZ.mjs.map +0 -7
  319. package/dist/lib/node-esm/types/index.mjs +0 -9
  320. package/dist/types/src/capabilities/capabilities.d.ts +0 -19
  321. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  322. package/dist/types/src/capabilities/compute-runtime.d.ts +0 -5
  323. package/dist/types/src/capabilities/compute-runtime.d.ts.map +0 -1
  324. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  325. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  326. package/dist/types/src/components/AutomationSettings.d.ts +0 -5
  327. package/dist/types/src/components/AutomationSettings.d.ts.map +0 -1
  328. package/dist/types/src/components/FunctionsContainer.d.ts +0 -7
  329. package/dist/types/src/components/FunctionsContainer.d.ts.map +0 -1
  330. package/dist/types/src/components/TriggerSettings.d.ts.map +0 -1
  331. package/dist/types/src/events.d.ts +0 -4
  332. package/dist/types/src/events.d.ts.map +0 -1
  333. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +0 -8
  334. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +0 -1
  335. package/src/capabilities/capabilities.ts +0 -48
  336. package/src/capabilities/compute-runtime.ts +0 -138
  337. package/src/capabilities/intent-resolver.ts +0 -72
  338. package/src/components/AutomationSettings.tsx +0 -30
  339. package/src/components/FunctionsContainer.tsx +0 -29
  340. package/src/components/TriggerSettings.tsx +0 -25
  341. package/src/events.ts +0 -11
  342. package/src/hooks/useComputeRuntimeCallback.ts +0 -30
  343. /package/dist/lib/{browser/AutomationPanel-3PHA5FTJ.mjs.map → neutral/AutomationPanel-OS3ZWYJK.mjs.map} +0 -0
  344. /package/dist/lib/{browser/FunctionsPanel-PTFCCUTB.mjs.map → neutral/AutomationPlugin.mjs.map} +0 -0
  345. /package/dist/lib/{browser/hooks/index.mjs.map → neutral/TriggerSettings-XCHIZPOR.mjs.map} +0 -0
  346. /package/dist/lib/{browser/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  347. /package/dist/lib/{node-esm/hooks → neutral/components}/index.mjs.map +0 -0
  348. /package/dist/lib/{node-esm/types → neutral/hooks}/index.mjs.map +0 -0
  349. /package/dist/lib/{node-esm/AutomationPanel-EETYIR35.mjs.map → neutral/index.mjs.map} +0 -0
  350. /package/dist/lib/{node-esm/FunctionsPanel-JQFBRVOC.mjs.map → neutral/meta.mjs.map} +0 -0
  351. /package/dist/types/src/{components → containers/TriggerSettings}/TriggerSettings.d.ts +0 -0
@@ -0,0 +1,435 @@
1
+ import {
2
+ useEdgeTriggersDispatcherStatus
3
+ } from "./chunk-CMM3AFHR.mjs";
4
+ import {
5
+ TriggerEditor
6
+ } from "./chunk-KV7RZLFS.mjs";
7
+
8
+ // src/components/AutomationPanel/AutomationPanel.tsx
9
+ import * as Array from "effect/Array";
10
+ import * as Effect from "effect/Effect";
11
+ import * as EFn from "effect/Function";
12
+ import * as Match from "effect/Match";
13
+ import * as Schema from "effect/Schema";
14
+ import React2, { useCallback, useMemo as useMemo2, useState } from "react";
15
+ import { useProcessManagerRuntime } from "@dxos/app-framework/ui";
16
+ import { useTypeOptions } from "@dxos/app-toolkit/ui";
17
+ import { Operation, Script, ServiceResolver, Trigger } from "@dxos/compute";
18
+ import { Context } from "@dxos/context";
19
+ import { Filter, Obj, Query, Tag, Type } from "@dxos/echo";
20
+ import { KEY_FEED_CURSOR, TriggerDispatcher } from "@dxos/functions-runtime";
21
+ import { FunctionsServiceClient } from "@dxos/functions-runtime/edge";
22
+ import { log } from "@dxos/log";
23
+ import { useClient } from "@dxos/react-client";
24
+ import { useObject, useQuery } from "@dxos/react-client/echo";
25
+ import { Clipboard, IconButton, Input, Separator, useTranslation as useTranslation2 } from "@dxos/react-ui";
26
+ import { Settings } from "@dxos/react-ui-form";
27
+ import { List } from "@dxos/react-ui-list";
28
+ import { Pipeline } from "@dxos/types";
29
+ import { ghostHover, mx as mx2 } from "@dxos/ui-theme";
30
+ import { isNonNullable } from "@dxos/util";
31
+ import { meta as meta2 } from "#meta";
32
+
33
+ // src/components/AutomationPanel/TriggerEdgeMetadata.tsx
34
+ import React, { useMemo } from "react";
35
+ import { useTranslation } from "@dxos/react-ui";
36
+ import { mx } from "@dxos/ui-theme";
37
+ import { meta } from "#meta";
38
+ var formatTimestamp = (timestamp) => timestamp != null ? new Date(timestamp).toLocaleString() : void 0;
39
+ var formatRemaining = (remainingMs) => {
40
+ if (remainingMs == null) {
41
+ return void 0;
42
+ }
43
+ const totalSeconds = Math.max(0, Math.round(remainingMs / 1e3));
44
+ if (totalSeconds < 60) {
45
+ return `${totalSeconds}s`;
46
+ }
47
+ const minutes = Math.floor(totalSeconds / 60);
48
+ const seconds = totalSeconds % 60;
49
+ return seconds > 0 ? `${minutes}m ${seconds}s` : `${minutes}m`;
50
+ };
51
+ var TriggerDispatcherSummary = ({ status, error, loading, timerTriggers }) => {
52
+ const { t } = useTranslation(meta.id);
53
+ if (loading && !status) {
54
+ return /* @__PURE__ */ React.createElement("div", {
55
+ className: "text-xs text-description px-2 pb-2"
56
+ }, t("edge.trigger.status.loading.message"));
57
+ }
58
+ if (error && !status) {
59
+ return /* @__PURE__ */ React.createElement("div", {
60
+ className: "text-xs text-error-text px-2 pb-2"
61
+ }, t("edge.trigger.status.unavailable.message"));
62
+ }
63
+ if (!status) {
64
+ return null;
65
+ }
66
+ const enabledTimerCount = timerTriggers.filter((trigger) => trigger.enabled).length;
67
+ const registeredEnabledCount = timerTriggers.filter((trigger) => trigger.enabled && status.registeredTriggers.includes(trigger.id)).length;
68
+ const lines = [
69
+ t("edge.trigger.status.dispatcher.label", {
70
+ state: status.isActive ? t("edge.trigger.status.active.label") : t("edge.trigger.status.inactive.label")
71
+ }),
72
+ timerTriggers.length > 0 && t("edge.trigger.status.registered.count.label", {
73
+ registered: registeredEnabledCount,
74
+ total: enabledTimerCount
75
+ }),
76
+ status.nextCronTaskRunTimestamp != null && t("edge.trigger.status.next.cron.label", {
77
+ time: formatTimestamp(status.nextCronTaskRunTimestamp)
78
+ }),
79
+ status.nextAlarmTimestamp != null && t("edge.trigger.status.next.alarm.label", {
80
+ time: formatTimestamp(status.nextAlarmTimestamp)
81
+ }),
82
+ status.remainingMs != null && t("edge.trigger.status.inactivity.label", {
83
+ remaining: formatRemaining(status.remainingMs)
84
+ })
85
+ ].filter((line) => Boolean(line));
86
+ if (lines.length === 0) {
87
+ return null;
88
+ }
89
+ return /* @__PURE__ */ React.createElement("div", {
90
+ className: "flex flex-col gap-0.5 text-xs text-description px-2 pb-2"
91
+ }, lines.map((line) => /* @__PURE__ */ React.createElement("div", {
92
+ key: line
93
+ }, line)));
94
+ };
95
+ var TriggerEdgeMetadata = ({ trigger, edgeStatus }) => {
96
+ const { t } = useTranslation(meta.id);
97
+ const { status, loading, error } = edgeStatus;
98
+ const registration = useMemo(() => {
99
+ if (trigger.spec?.kind !== "timer") {
100
+ return {
101
+ kind: "na"
102
+ };
103
+ }
104
+ if (!status) {
105
+ return {
106
+ kind: "unknown"
107
+ };
108
+ }
109
+ return {
110
+ kind: "cron",
111
+ registered: status.registeredTriggers.includes(trigger.id)
112
+ };
113
+ }, [
114
+ status,
115
+ trigger.id,
116
+ trigger.spec?.kind
117
+ ]);
118
+ if (loading && !status) {
119
+ return /* @__PURE__ */ React.createElement("div", {
120
+ className: "text-xs text-description ml-4 truncate"
121
+ }, t("edge.trigger.status.loading.message"));
122
+ }
123
+ if (error && !status) {
124
+ return null;
125
+ }
126
+ if (!status) {
127
+ return null;
128
+ }
129
+ if (registration.kind === "na") {
130
+ return /* @__PURE__ */ React.createElement("div", {
131
+ className: "text-xs text-description ml-4 truncate"
132
+ }, t("edge.trigger.status.cron.na.label"));
133
+ }
134
+ const enabled = trigger.enabled ?? false;
135
+ const registered = registration.kind === "cron" && registration.registered;
136
+ const label = registered ? t("edge.trigger.status.registered.label") : t("edge.trigger.status.not.registered.label");
137
+ const classNames = mx("text-xs ml-4 truncate", registered ? "text-success-text" : enabled ? "text-warning-text" : "text-description");
138
+ const detail = registration.kind === "cron" && !enabled ? t("edge.trigger.status.disabled.detail.label") : void 0;
139
+ return /* @__PURE__ */ React.createElement("div", {
140
+ className: "flex flex-col gap-0.5 min-w-0"
141
+ }, /* @__PURE__ */ React.createElement("div", {
142
+ className: classNames
143
+ }, label, detail && /* @__PURE__ */ React.createElement("span", {
144
+ className: "text-description"
145
+ }, " \xB7 ", detail)));
146
+ };
147
+
148
+ // src/components/AutomationPanel/AutomationPanel.tsx
149
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-automation/src/components/AutomationPanel/AutomationPanel.tsx";
150
+ var grid = "grid grid-cols-[40px_1fr_32px_32px] min-h-[2.5rem]";
151
+ var AutomationPanel = ({ space, object, initialTrigger, onDone }) => {
152
+ const { t } = useTranslation2(meta2.id);
153
+ const client = useClient();
154
+ const processManagerRuntime = useProcessManagerRuntime();
155
+ const [properties] = useObject(space.properties);
156
+ const computeEnvironment = properties.computeEnvironment ?? "local";
157
+ const edgeDispatcherStatus = useEdgeTriggersDispatcherStatus(space.id, computeEnvironment === "edge");
158
+ const functionsServiceClient = useMemo2(() => FunctionsServiceClient.fromClient(client), [
159
+ client
160
+ ]);
161
+ const functions = useQuery(space.db, Filter.type(Operation.PersistentOperation));
162
+ const triggers = useQuery(space.db, Query.select(Filter.type(Trigger.Trigger)).debugLabel("plugin-automation.AutomationPanel"));
163
+ const filteredTriggers = useMemo2(() => {
164
+ return object ? triggers.filter(triggerMatch(object)) : triggers;
165
+ }, [
166
+ object,
167
+ triggers
168
+ ]);
169
+ const tags = useQuery(space.db, Filter.type(Tag.Tag));
170
+ const types = useTypeOptions({
171
+ db: space.db,
172
+ annotation: {
173
+ location: [
174
+ "database",
175
+ "runtime"
176
+ ],
177
+ kind: [
178
+ "user"
179
+ ]
180
+ }
181
+ });
182
+ const [trigger, setTrigger] = useState(initialTrigger);
183
+ const [selected, setSelected] = useState();
184
+ const handleSelect = (trigger2) => {
185
+ setTrigger(trigger2);
186
+ setSelected(trigger2);
187
+ };
188
+ const handleAdd = () => {
189
+ setTrigger(Trigger.make({}));
190
+ setSelected(void 0);
191
+ };
192
+ const handleDelete = (trigger2) => {
193
+ space.db.remove(trigger2);
194
+ setTrigger(void 0);
195
+ setSelected(void 0);
196
+ };
197
+ const handleSave = (trigger2) => {
198
+ if (selected) {
199
+ Obj.update(selected, (selected2) => {
200
+ Object.assign(selected2, trigger2);
201
+ });
202
+ } else {
203
+ space.db.add(Trigger.make(trigger2));
204
+ }
205
+ setTrigger(void 0);
206
+ setSelected(void 0);
207
+ onDone?.();
208
+ };
209
+ const handleCancel = () => {
210
+ setTrigger(void 0);
211
+ onDone?.();
212
+ };
213
+ const handleForceRunTrigger = async (trigger2) => {
214
+ if (computeEnvironment === "disabled") {
215
+ return;
216
+ }
217
+ if (computeEnvironment === "local") {
218
+ try {
219
+ await processManagerRuntime.runPromise(Effect.gen(function* () {
220
+ const dispatcher = yield* TriggerDispatcher;
221
+ yield* dispatcher.invokeTrigger({
222
+ trigger: trigger2,
223
+ event: {
224
+ tick: Date.now()
225
+ }
226
+ });
227
+ }).pipe(Effect.provide(ServiceResolver.provide({
228
+ space: space.id
229
+ }, TriggerDispatcher))));
230
+ } catch (error) {
231
+ log.catch(error, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 112, S: void 0 });
232
+ }
233
+ return;
234
+ }
235
+ try {
236
+ await functionsServiceClient.forceRunCronTrigger(Context.default(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 117 }), space.id, trigger2.id);
237
+ } catch (error) {
238
+ log.catch(error, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 119, S: void 0 });
239
+ }
240
+ };
241
+ const handleResetCursor = async (trigger2) => {
242
+ Obj.update(trigger2, (trigger3) => {
243
+ Obj.deleteKeys(trigger3, KEY_FEED_CURSOR);
244
+ });
245
+ await space.db.flush({
246
+ indexes: true
247
+ });
248
+ };
249
+ if (trigger) {
250
+ return /* @__PURE__ */ React2.createElement(Settings.Item, {
251
+ title: t("trigger-editor.title"),
252
+ description: t("trigger-editor.description")
253
+ }, /* @__PURE__ */ React2.createElement(TriggerEditor, {
254
+ db: space.db,
255
+ trigger,
256
+ readonlySpec: Boolean(object),
257
+ tags,
258
+ types,
259
+ onSave: handleSave,
260
+ onCancel: handleCancel
261
+ }));
262
+ }
263
+ return /* @__PURE__ */ React2.createElement(Settings.Panel, null, /* @__PURE__ */ React2.createElement(Clipboard.Provider, null, computeEnvironment === "edge" && /* @__PURE__ */ React2.createElement(TriggerDispatcherSummary, {
264
+ status: edgeDispatcherStatus.status,
265
+ error: edgeDispatcherStatus.error,
266
+ loading: edgeDispatcherStatus.loading,
267
+ timerTriggers: filteredTriggers.filter((trigger2) => trigger2.spec?.kind === "timer")
268
+ }), filteredTriggers.length > 0 && /* @__PURE__ */ React2.createElement(List.Root, {
269
+ items: filteredTriggers,
270
+ isItem: Schema.is(Type.getSchema(Trigger.Trigger)),
271
+ getId: (field) => field.id
272
+ }, ({ items: filteredTriggers2 }) => /* @__PURE__ */ React2.createElement("div", {
273
+ role: "list",
274
+ className: "flex flex-col w-full"
275
+ }, filteredTriggers2?.map((trigger2) => /* @__PURE__ */ React2.createElement(TriggerListItem, {
276
+ key: trigger2.id,
277
+ trigger: trigger2,
278
+ functions,
279
+ computeEnvironment,
280
+ edgeDispatcherStatus,
281
+ onSelect: handleSelect,
282
+ onDelete: handleDelete,
283
+ onResetCursor: handleResetCursor,
284
+ onForceRun: handleForceRunTrigger
285
+ })))), filteredTriggers.length > 0 && /* @__PURE__ */ React2.createElement(Separator, {
286
+ classNames: "my-4"
287
+ }), /* @__PURE__ */ React2.createElement(IconButton, {
288
+ icon: "ph--plus--regular",
289
+ label: t("new-trigger.label"),
290
+ onClick: handleAdd
291
+ })));
292
+ };
293
+ var TriggerListItem = ({ trigger, functions, computeEnvironment, edgeDispatcherStatus, onSelect, onDelete, onResetCursor, onForceRun }) => {
294
+ const client = useClient();
295
+ const copyAction = getCopyAction(client, trigger);
296
+ const { t } = useTranslation2(meta2.id);
297
+ const cursor = Obj.getKeys(trigger, KEY_FEED_CURSOR).at(0)?.id;
298
+ const [snapshot, updateTrigger] = useObject(trigger);
299
+ const enabled = snapshot.enabled ?? false;
300
+ const onEnabledChange = (checked) => {
301
+ updateTrigger((trigger2) => {
302
+ trigger2.enabled = checked;
303
+ });
304
+ };
305
+ const handleSelect = useCallback(() => {
306
+ onSelect?.(trigger);
307
+ }, [
308
+ onSelect,
309
+ trigger
310
+ ]);
311
+ const handleDelete = useCallback(() => {
312
+ onDelete?.(trigger);
313
+ }, [
314
+ onDelete,
315
+ trigger
316
+ ]);
317
+ const handleResetCursor = useCallback(() => {
318
+ onResetCursor?.(trigger);
319
+ }, [
320
+ onResetCursor,
321
+ trigger
322
+ ]);
323
+ const handleForceRun = useCallback(() => {
324
+ onForceRun?.(trigger);
325
+ }, [
326
+ onForceRun,
327
+ trigger
328
+ ]);
329
+ const actionProps = useMemo2(() => {
330
+ if (trigger.spec?.kind === "timer" && onForceRun) {
331
+ return {
332
+ disabled: !enabled || computeEnvironment === "disabled",
333
+ icon: "ph--play--regular",
334
+ label: "Force run",
335
+ onClick: handleForceRun
336
+ };
337
+ }
338
+ if (trigger.spec?.kind === "feed" && onResetCursor) {
339
+ return {
340
+ disabled: !cursor,
341
+ icon: "ph--arrow-clockwise--regular",
342
+ label: "Reset cursor",
343
+ onClick: handleResetCursor
344
+ };
345
+ }
346
+ }, [
347
+ computeEnvironment,
348
+ enabled,
349
+ trigger.spec?.kind,
350
+ handleForceRun,
351
+ onResetCursor
352
+ ]);
353
+ return /* @__PURE__ */ React2.createElement(List.Item, {
354
+ key: trigger.id,
355
+ item: snapshot,
356
+ classNames: mx2(grid, ghostHover, "items-center", "px-2")
357
+ }, /* @__PURE__ */ React2.createElement(Input.Root, null, /* @__PURE__ */ React2.createElement(Input.Switch, {
358
+ checked: enabled,
359
+ onCheckedChange: onEnabledChange
360
+ })), /* @__PURE__ */ React2.createElement("div", {
361
+ className: "flex flex-col min-w-0"
362
+ }, /* @__PURE__ */ React2.createElement("div", {
363
+ className: "flex"
364
+ }, /* @__PURE__ */ React2.createElement(List.ItemTitle, {
365
+ classNames: "px-1 cursor-pointer w-0 shrink truncate",
366
+ onClick: handleSelect
367
+ }, getFunctionName(functions, trigger) ?? "\u2205"), copyAction && /* @__PURE__ */ React2.createElement(Clipboard.IconButton, {
368
+ label: t(copyAction.translationKey),
369
+ value: copyAction.contentProvider()
370
+ })), cursor && /* @__PURE__ */ React2.createElement("div", {
371
+ className: "text-xs text-description truncate ml-4"
372
+ }, "Position: ", cursor), computeEnvironment === "edge" && edgeDispatcherStatus && /* @__PURE__ */ React2.createElement(TriggerEdgeMetadata, {
373
+ trigger,
374
+ edgeStatus: edgeDispatcherStatus
375
+ })), actionProps ? /* @__PURE__ */ React2.createElement(List.ItemIconButton, {
376
+ ...actionProps,
377
+ autoHide: false
378
+ }) : /* @__PURE__ */ React2.createElement("div", null), onDelete && /* @__PURE__ */ React2.createElement(List.ItemDeleteButton, {
379
+ onClick: handleDelete
380
+ }));
381
+ };
382
+ var getCopyAction = (client, trigger) => {
383
+ if (trigger?.spec?.kind === "email") {
384
+ return {
385
+ translationKey: "trigger copy email",
386
+ contentProvider: () => `${Obj.getDatabase(trigger).spaceId}@dxos.network`
387
+ };
388
+ }
389
+ if (trigger?.spec?.kind === "webhook") {
390
+ return {
391
+ translationKey: "trigger copy url",
392
+ contentProvider: () => getWebhookUrl(client, trigger)
393
+ };
394
+ }
395
+ return void 0;
396
+ };
397
+ var getWebhookUrl = (client, trigger) => {
398
+ const spaceId = Obj.getDatabase(trigger).spaceId;
399
+ const edgeUrl = new URL(client.config.values.runtime.services.edge.url);
400
+ const isSecure = edgeUrl.protocol.startsWith("https") || edgeUrl.protocol.startsWith("wss");
401
+ edgeUrl.protocol = isSecure ? "https" : "http";
402
+ return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();
403
+ };
404
+ var getFunctionName = (functions, trigger) => {
405
+ const shortId = trigger.function && `${trigger.function.uri.slice(0, 16)}\u2026`;
406
+ const functionObject = functions.find((fn) => fn === trigger.function?.target);
407
+ return functionObject?.name ?? shortId;
408
+ };
409
+ var scriptMatch = (script) => (trigger) => {
410
+ const fn = trigger.function?.target;
411
+ if (!Obj.instanceOf(Operation.PersistentOperation, fn)) {
412
+ return false;
413
+ }
414
+ return fn.source?.target === script;
415
+ };
416
+ var projectMatch = (project) => {
417
+ const viewQueries = EFn.pipe(project.columns, Array.map((column) => column.view.target), Array.filter(isNonNullable), Array.map((view) => Obj.getSnapshot(view).query.ast), Array.map((ast) => JSON.stringify(ast)));
418
+ return (trigger) => {
419
+ const spec = Obj.getSnapshot(trigger).spec;
420
+ if (spec?.kind !== "subscription") {
421
+ return false;
422
+ }
423
+ return viewQueries.some((query) => JSON.stringify(spec.query) === query);
424
+ };
425
+ };
426
+ var triggerMatch = Match.type().pipe(Match.withReturnType(), Match.when((obj) => Obj.instanceOf(Script.Script, obj), (obj) => scriptMatch(obj)), Match.when((obj) => Obj.instanceOf(Pipeline.Pipeline, obj), (obj) => projectMatch(obj)), Match.orElse((_obj) => () => true));
427
+
428
+ // src/components/AutomationPanel/index.ts
429
+ var AutomationPanel_default = AutomationPanel;
430
+
431
+ export {
432
+ AutomationPanel,
433
+ AutomationPanel_default
434
+ };
435
+ //# sourceMappingURL=chunk-2H6X4VQY.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/AutomationPanel/AutomationPanel.tsx", "../../../src/components/AutomationPanel/TriggerEdgeMetadata.tsx", "../../../src/components/AutomationPanel/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Array from 'effect/Array';\nimport * as Effect from 'effect/Effect';\nimport * as EFn from 'effect/Function';\nimport * as Match from 'effect/Match';\nimport * as Schema from 'effect/Schema';\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { useProcessManagerRuntime } from '@dxos/app-framework/ui';\nimport { useTypeOptions } from '@dxos/app-toolkit/ui';\nimport { type ComputeEnvironment } from '@dxos/client-protocol';\nimport { Operation, Script, ServiceResolver, Trigger, TriggerEvent } from '@dxos/compute';\nimport { Context } from '@dxos/context';\nimport { Filter, Obj, Query, Tag, Type } from '@dxos/echo';\nimport { KEY_FEED_CURSOR, TriggerDispatcher } from '@dxos/functions-runtime';\nimport { FunctionsServiceClient } from '@dxos/functions-runtime/edge';\nimport { log } from '@dxos/log';\nimport { type Client, useClient } from '@dxos/react-client';\nimport { type Space, useObject, useQuery } from '@dxos/react-client/echo';\nimport { Clipboard, IconButton, type IconButtonProps, Input, Separator, useTranslation } from '@dxos/react-ui';\nimport { Settings } from '@dxos/react-ui-form';\nimport { List } from '@dxos/react-ui-list';\nimport { Pipeline } from '@dxos/types';\nimport { ghostHover, mx } from '@dxos/ui-theme';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta } from '#meta';\n\nimport { type EdgeTriggersDispatcherStatusState, useEdgeTriggersDispatcherStatus } from '../../hooks';\nimport { TriggerEditor, type TriggerEditorProps } from '../TriggerEditor';\nimport { TriggerDispatcherSummary, TriggerEdgeMetadata } from './TriggerEdgeMetadata';\n\nconst grid = 'grid grid-cols-[40px_1fr_32px_32px] min-h-[2.5rem]';\n\nexport type AutomationPanelProps = {\n space: Space;\n object?: Obj.Unknown;\n initialTrigger?: Trigger.Trigger;\n onDone?: () => void;\n};\n\n// TODO(burdon): Factor out common layout with ViewEditor.\nexport const AutomationPanel = ({ space, object, initialTrigger, onDone }: AutomationPanelProps) => {\n const { t } = useTranslation(meta.id);\n const client = useClient();\n const processManagerRuntime = useProcessManagerRuntime();\n const [properties] = useObject(space.properties);\n const computeEnvironment = properties.computeEnvironment ?? 'local';\n const edgeDispatcherStatus = useEdgeTriggersDispatcherStatus(space.id, computeEnvironment === 'edge');\n const functionsServiceClient = useMemo(() => FunctionsServiceClient.fromClient(client), [client]);\n const functions = useQuery(space.db, Filter.type(Operation.PersistentOperation));\n const triggers = useQuery(\n space.db,\n Query.select(Filter.type(Trigger.Trigger)).debugLabel('plugin-automation.AutomationPanel'),\n );\n const filteredTriggers = useMemo(() => {\n return object ? triggers.filter(triggerMatch(object)) : triggers;\n }, [object, triggers]);\n const tags = useQuery(space.db, Filter.type(Tag.Tag));\n const types = useTypeOptions({\n db: space.db,\n annotation: {\n location: ['database', 'runtime'],\n kind: ['user'],\n },\n });\n\n const [trigger, setTrigger] = useState<Trigger.Trigger | undefined>(initialTrigger);\n const [selected, setSelected] = useState<Trigger.Trigger>();\n\n const handleSelect = (trigger: Trigger.Trigger) => {\n setTrigger(trigger);\n setSelected(trigger);\n };\n\n const handleAdd = () => {\n setTrigger(Trigger.make({}));\n setSelected(undefined);\n };\n\n const handleDelete = (trigger: Trigger.Trigger) => {\n space.db.remove(trigger);\n setTrigger(undefined);\n setSelected(undefined);\n };\n\n const handleSave: TriggerEditorProps['onSave'] = (trigger) => {\n if (selected) {\n Obj.update(selected, (selected) => {\n Object.assign(selected, trigger);\n });\n } else {\n space.db.add(Trigger.make(trigger));\n }\n\n setTrigger(undefined);\n setSelected(undefined);\n onDone?.();\n };\n\n const handleCancel: TriggerEditorProps['onCancel'] = () => {\n setTrigger(undefined);\n onDone?.();\n };\n\n const handleForceRunTrigger = async (trigger: Trigger.Trigger) => {\n if (computeEnvironment === 'disabled') {\n return;\n }\n\n if (computeEnvironment === 'local') {\n try {\n await processManagerRuntime.runPromise(\n Effect.gen(function* () {\n const dispatcher = yield* TriggerDispatcher;\n yield* dispatcher.invokeTrigger({\n trigger,\n event: { tick: Date.now() } satisfies TriggerEvent.TimerEvent,\n });\n }).pipe(Effect.provide(ServiceResolver.provide({ space: space.id }, TriggerDispatcher))),\n );\n } catch (error) {\n log.catch(error);\n }\n return;\n }\n\n try {\n await functionsServiceClient.forceRunCronTrigger(Context.default(), space.id, trigger.id);\n } catch (error) {\n log.catch(error);\n }\n };\n\n const handleResetCursor = async (trigger: Trigger.Trigger) => {\n Obj.update(trigger, (trigger) => {\n Obj.deleteKeys(trigger, KEY_FEED_CURSOR);\n });\n await space.db.flush({ indexes: true });\n };\n\n if (trigger) {\n return (\n <Settings.Item title={t('trigger-editor.title')} description={t('trigger-editor.description')}>\n <TriggerEditor\n db={space.db}\n trigger={trigger}\n readonlySpec={Boolean(object)}\n tags={tags}\n types={types}\n onSave={handleSave}\n onCancel={handleCancel}\n />\n </Settings.Item>\n );\n }\n\n return (\n <Settings.Panel>\n <Clipboard.Provider>\n {computeEnvironment === 'edge' && (\n <TriggerDispatcherSummary\n status={edgeDispatcherStatus.status}\n error={edgeDispatcherStatus.error}\n loading={edgeDispatcherStatus.loading}\n timerTriggers={filteredTriggers.filter((trigger) => trigger.spec?.kind === 'timer')}\n />\n )}\n\n {filteredTriggers.length > 0 && (\n <List.Root<Trigger.Trigger>\n items={filteredTriggers}\n isItem={Schema.is(Type.getSchema(Trigger.Trigger))}\n getId={(field) => field.id}\n >\n {({ items: filteredTriggers }) => (\n <div role='list' className='flex flex-col w-full'>\n {filteredTriggers?.map((trigger) => (\n <TriggerListItem\n key={trigger.id}\n trigger={trigger}\n functions={functions}\n computeEnvironment={computeEnvironment}\n edgeDispatcherStatus={edgeDispatcherStatus}\n onSelect={handleSelect}\n onDelete={handleDelete}\n onResetCursor={handleResetCursor}\n onForceRun={handleForceRunTrigger}\n />\n ))}\n </div>\n )}\n </List.Root>\n )}\n\n {filteredTriggers.length > 0 && <Separator classNames='my-4' />}\n <IconButton icon='ph--plus--regular' label={t('new-trigger.label')} onClick={handleAdd} />\n </Clipboard.Provider>\n </Settings.Panel>\n );\n};\n\nconst TriggerListItem = ({\n trigger,\n functions,\n computeEnvironment,\n edgeDispatcherStatus,\n onSelect,\n onDelete,\n onResetCursor,\n onForceRun,\n}: {\n trigger: Trigger.Trigger;\n functions: Operation.PersistentOperation[];\n computeEnvironment: ComputeEnvironment;\n edgeDispatcherStatus?: EdgeTriggersDispatcherStatusState;\n onSelect?: (trigger: Trigger.Trigger) => void;\n onDelete?: (trigger: Trigger.Trigger) => void;\n onResetCursor?: (trigger: Trigger.Trigger) => void;\n onForceRun?: (trigger: Trigger.Trigger) => void;\n}) => {\n const client = useClient();\n const copyAction = getCopyAction(client, trigger);\n const { t } = useTranslation(meta.id);\n const cursor = Obj.getKeys(trigger, KEY_FEED_CURSOR).at(0)?.id;\n const [snapshot, updateTrigger] = useObject(trigger);\n\n const enabled = snapshot.enabled ?? false;\n const onEnabledChange = (checked: boolean) => {\n updateTrigger((trigger) => {\n trigger.enabled = checked;\n });\n };\n\n const handleSelect = useCallback(() => {\n onSelect?.(trigger);\n }, [onSelect, trigger]);\n\n const handleDelete = useCallback(() => {\n onDelete?.(trigger);\n }, [onDelete, trigger]);\n\n const handleResetCursor = useCallback(() => {\n onResetCursor?.(trigger);\n }, [onResetCursor, trigger]);\n\n const handleForceRun = useCallback(() => {\n onForceRun?.(trigger);\n }, [onForceRun, trigger]);\n\n const actionProps = useMemo<IconButtonProps | undefined>(() => {\n if (trigger.spec?.kind === 'timer' && onForceRun) {\n return {\n disabled: !enabled || computeEnvironment === 'disabled',\n icon: 'ph--play--regular',\n label: 'Force run',\n onClick: handleForceRun,\n };\n }\n\n if (trigger.spec?.kind === 'feed' && onResetCursor) {\n return {\n disabled: !cursor,\n icon: 'ph--arrow-clockwise--regular',\n label: 'Reset cursor',\n onClick: handleResetCursor,\n };\n }\n }, [computeEnvironment, enabled, trigger.spec?.kind, handleForceRun, onResetCursor]);\n\n return (\n <List.Item<Obj.Snapshot<Trigger.Trigger>>\n key={trigger.id}\n item={snapshot}\n classNames={mx(grid, ghostHover, 'items-center', 'px-2')}\n >\n <Input.Root>\n <Input.Switch checked={enabled} onCheckedChange={onEnabledChange} />\n </Input.Root>\n\n <div className='flex flex-col min-w-0'>\n <div className='flex'>\n <List.ItemTitle classNames='px-1 cursor-pointer w-0 shrink truncate' onClick={handleSelect}>\n {getFunctionName(functions, trigger) ?? '∅'}\n </List.ItemTitle>\n\n {copyAction && (\n <Clipboard.IconButton label={t(copyAction.translationKey)} value={copyAction.contentProvider()} />\n )}\n </div>\n\n {cursor && <div className='text-xs text-description truncate ml-4'>Position: {cursor}</div>}\n {computeEnvironment === 'edge' && edgeDispatcherStatus && (\n <TriggerEdgeMetadata trigger={trigger} edgeStatus={edgeDispatcherStatus} />\n )}\n </div>\n\n {actionProps ? <List.ItemIconButton {...actionProps} autoHide={false} /> : <div />}\n\n {onDelete && <List.ItemDeleteButton onClick={handleDelete} />}\n </List.Item>\n );\n};\n\nconst getCopyAction = (client: Client, trigger: Trigger.Trigger | undefined) => {\n if (trigger?.spec?.kind === 'email') {\n return {\n translationKey: 'trigger copy email' as const,\n contentProvider: () => `${Obj.getDatabase(trigger)!.spaceId}@dxos.network`,\n };\n }\n\n if (trigger?.spec?.kind === 'webhook') {\n return {\n translationKey: 'trigger copy url' as const,\n contentProvider: () => getWebhookUrl(client, trigger!),\n };\n }\n\n return undefined;\n};\n\nconst getWebhookUrl = (client: Client, trigger: Trigger.Trigger) => {\n const spaceId = Obj.getDatabase(trigger)!.spaceId;\n const edgeUrl = new URL(client.config.values.runtime!.services!.edge!.url!);\n const isSecure = edgeUrl.protocol.startsWith('https') || edgeUrl.protocol.startsWith('wss');\n edgeUrl.protocol = isSecure ? 'https' : 'http';\n return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();\n};\n\nconst getFunctionName = (functions: Operation.PersistentOperation[], trigger: Trigger.Trigger) => {\n // TODO(wittjosiah): Truncation should be done in the UI.\n // Warning that the List component is currently a can of worms.\n const shortId = trigger.function && `${trigger.function.uri.slice(0, 16)}…`;\n const functionObject = functions.find((fn) => fn === trigger.function?.target);\n return functionObject?.name ?? shortId;\n};\n\nconst scriptMatch = (script: Script.Script) => (trigger: Trigger.Trigger) => {\n const fn = trigger.function?.target;\n if (!Obj.instanceOf(Operation.PersistentOperation, fn)) {\n return false;\n }\n\n return fn.source?.target === script;\n};\n\nconst projectMatch = (project: Pipeline.Pipeline) => {\n const viewQueries = EFn.pipe(\n project.columns,\n Array.map((column) => column.view.target),\n Array.filter(isNonNullable),\n Array.map((view) => Obj.getSnapshot(view).query.ast),\n Array.map((ast) => JSON.stringify(ast)),\n );\n\n return (trigger: Trigger.Trigger) => {\n const spec = Obj.getSnapshot(trigger).spec;\n if (spec?.kind !== 'subscription') {\n return false;\n }\n\n // TODO(wittjosiah): Implement better way of comparing query ASTs.\n return viewQueries.some((query) => JSON.stringify(spec.query) === query);\n };\n};\n\nconst triggerMatch = Match.type<Obj.Unknown>().pipe(\n Match.withReturnType<(trigger: Trigger.Trigger) => boolean>(),\n Match.when(\n (obj) => Obj.instanceOf(Script.Script, obj),\n (obj) => scriptMatch(obj),\n ),\n Match.when(\n (obj) => Obj.instanceOf(Pipeline.Pipeline, obj),\n (obj) => projectMatch(obj),\n ),\n Match.orElse((_obj) => () => true),\n);\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Trigger } from '@dxos/compute';\nimport { type TriggersDispatcherStatus } from '@dxos/edge-client';\nimport { useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { meta } from '#meta';\n\nimport { type EdgeTriggersDispatcherStatusState } from '../../hooks';\n\nconst formatTimestamp = (timestamp?: number): string | undefined =>\n timestamp != null ? new Date(timestamp).toLocaleString() : undefined;\n\nconst formatRemaining = (remainingMs?: number): string | undefined => {\n if (remainingMs == null) {\n return undefined;\n }\n const totalSeconds = Math.max(0, Math.round(remainingMs / 1000));\n if (totalSeconds < 60) {\n return `${totalSeconds}s`;\n }\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n return seconds > 0 ? `${minutes}m ${seconds}s` : `${minutes}m`;\n};\n\nexport type TriggerDispatcherSummaryProps = {\n status: TriggersDispatcherStatus | undefined;\n error: boolean;\n loading: boolean;\n /** Timer triggers shown in the list (used for registered count). */\n timerTriggers: Trigger.Trigger[];\n};\n\nexport const TriggerDispatcherSummary = ({ status, error, loading, timerTriggers }: TriggerDispatcherSummaryProps) => {\n const { t } = useTranslation(meta.id);\n\n if (loading && !status) {\n return <div className='text-xs text-description px-2 pb-2'>{t('edge.trigger.status.loading.message')}</div>;\n }\n\n if (error && !status) {\n return <div className='text-xs text-error-text px-2 pb-2'>{t('edge.trigger.status.unavailable.message')}</div>;\n }\n\n if (!status) {\n return null;\n }\n\n const enabledTimerCount = timerTriggers.filter((trigger) => trigger.enabled).length;\n const registeredEnabledCount = timerTriggers.filter(\n (trigger) => trigger.enabled && status.registeredTriggers.includes(trigger.id),\n ).length;\n\n const lines = [\n t('edge.trigger.status.dispatcher.label', {\n state: status.isActive ? t('edge.trigger.status.active.label') : t('edge.trigger.status.inactive.label'),\n }),\n timerTriggers.length > 0 &&\n t('edge.trigger.status.registered.count.label', {\n registered: registeredEnabledCount,\n total: enabledTimerCount,\n }),\n status.nextCronTaskRunTimestamp != null &&\n t('edge.trigger.status.next.cron.label', { time: formatTimestamp(status.nextCronTaskRunTimestamp) }),\n status.nextAlarmTimestamp != null &&\n t('edge.trigger.status.next.alarm.label', { time: formatTimestamp(status.nextAlarmTimestamp) }),\n status.remainingMs != null &&\n t('edge.trigger.status.inactivity.label', { remaining: formatRemaining(status.remainingMs) }),\n ].filter((line): line is string => Boolean(line));\n\n if (lines.length === 0) {\n return null;\n }\n\n return (\n <div className='flex flex-col gap-0.5 text-xs text-description px-2 pb-2'>\n {lines.map((line) => (\n <div key={line}>{line}</div>\n ))}\n </div>\n );\n};\n\nexport type TriggerEdgeMetadataProps = {\n trigger: Trigger.Trigger;\n edgeStatus: Pick<EdgeTriggersDispatcherStatusState, 'status' | 'loading' | 'error'>;\n};\n\nexport const TriggerEdgeMetadata = ({ trigger, edgeStatus }: TriggerEdgeMetadataProps) => {\n const { t } = useTranslation(meta.id);\n const { status, loading, error } = edgeStatus;\n\n const registration = useMemo(() => {\n if (trigger.spec?.kind !== 'timer') {\n return { kind: 'na' as const };\n }\n if (!status) {\n return { kind: 'unknown' as const };\n }\n return {\n kind: 'cron' as const,\n registered: status.registeredTriggers.includes(trigger.id),\n };\n }, [status, trigger.id, trigger.spec?.kind]);\n\n if (loading && !status) {\n return <div className='text-xs text-description ml-4 truncate'>{t('edge.trigger.status.loading.message')}</div>;\n }\n\n if (error && !status) {\n return null;\n }\n\n if (!status) {\n return null;\n }\n\n if (registration.kind === 'na') {\n return <div className='text-xs text-description ml-4 truncate'>{t('edge.trigger.status.cron.na.label')}</div>;\n }\n\n const enabled = trigger.enabled ?? false;\n const registered = registration.kind === 'cron' && registration.registered;\n\n const label = registered ? t('edge.trigger.status.registered.label') : t('edge.trigger.status.not.registered.label');\n\n const classNames = mx(\n 'text-xs ml-4 truncate',\n registered ? 'text-success-text' : enabled ? 'text-warning-text' : 'text-description',\n );\n\n const detail = registration.kind === 'cron' && !enabled ? t('edge.trigger.status.disabled.detail.label') : undefined;\n\n return (\n <div className='flex flex-col gap-0.5 min-w-0'>\n <div className={classNames}>\n {label}\n {detail && <span className='text-description'> · {detail}</span>}\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { AutomationPanel } from './AutomationPanel';\n\nexport * from './AutomationPanel';\n\nexport default AutomationPanel;\n"],
5
+ "mappings": "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",
6
+ "names": ["Array", "Effect", "EFn", "Match", "Schema", "React", "useCallback", "useMemo", "useState", "useProcessManagerRuntime", "useTypeOptions", "Operation", "Script", "ServiceResolver", "Trigger", "Context", "Filter", "Obj", "Query", "Tag", "Type", "KEY_FEED_CURSOR", "TriggerDispatcher", "FunctionsServiceClient", "log", "useClient", "useObject", "useQuery", "Clipboard", "IconButton", "Input", "Separator", "useTranslation", "Settings", "List", "Pipeline", "ghostHover", "mx", "isNonNullable", "meta", "React", "useMemo", "useTranslation", "mx", "meta", "formatTimestamp", "timestamp", "Date", "toLocaleString", "undefined", "formatRemaining", "remainingMs", "totalSeconds", "Math", "max", "round", "minutes", "floor", "seconds", "TriggerDispatcherSummary", "status", "error", "loading", "timerTriggers", "t", "id", "div", "className", "enabledTimerCount", "filter", "trigger", "enabled", "length", "registeredEnabledCount", "registeredTriggers", "includes", "lines", "state", "isActive", "registered", "total", "nextCronTaskRunTimestamp", "time", "nextAlarmTimestamp", "remaining", "line", "Boolean", "map", "key", "TriggerEdgeMetadata", "edgeStatus", "registration", "spec", "kind", "label", "classNames", "detail", "span", "AutomationPanel", "client", "useClient", "processManagerRuntime", "useProcessManagerRuntime", "properties", "useObject", "computeEnvironment", "edgeDispatcherStatus", "useEdgeTriggersDispatcherStatus", "functionsServiceClient", "useMemo", "FunctionsServiceClient", "filteredTriggers", "object", "triggers", "filter", "triggerMatch", "db", "space", "annotation", "location", "kind", "handleSelect", "trigger", "setTrigger", "setSelected", "handleAdd", "undefined", "handleDelete", "handleSave", "selected", "Object", "onDone", "handleCancel", "handleForceRunTrigger", "runPromise", "invokeTrigger", "event", "Effect", "TriggerDispatcher", "error", "log", "catch", "KEY_FEED_CURSOR", "flush", "title", "React", "readonlySpec", "tags", "types", "onSave", "onCancel", "loading", "timerTriggers", "items", "isItem", "getSchema", "Trigger", "getId", "role", "className", "functions", "onSelect", "onDelete", "onResetCursor", "onForceRun", "classNames", "IconButton", "icon", "onClick", "TriggerListItem", "getCopyAction", "useTranslation", "cursor", "getKeys", "snapshot", "updateTrigger", "enabled", "onEnabledChange", "checked", "disabled", "label", "handleForceRun", "mx", "onCheckedChange", "div", "List", "ItemTitle", "getFunctionName", "copyAction", "contentProvider", "actionProps", "autoHide", "translationKey", "getWebhookUrl", "isSecure", "edgeUrl", "protocol", "startsWith", "spaceId", "toString", "functionObject", "name", "shortId", "scriptMatch", "script", "instanceOf", "Operation", "PersistentOperation", "source", "projectMatch", "project", "getSnapshot", "spec", "AutomationPanel"]
7
+ }
@@ -0,0 +1,42 @@
1
+ // src/containers/TriggerSettings/TriggerSettings.tsx
2
+ import React from "react";
3
+ import { useObject } from "@dxos/echo-react";
4
+ import { DropdownMenu, IconButton, useTranslation } from "@dxos/react-ui";
5
+ import { Settings } from "@dxos/react-ui-form";
6
+ import { meta } from "#meta";
7
+ var TriggersSettings = ({ space }) => {
8
+ const { t } = useTranslation(meta.id);
9
+ const [properties, changeProperties] = useObject(space.properties);
10
+ const selected = properties.computeEnvironment ?? "local";
11
+ const handleUpdate = (option) => {
12
+ changeProperties((draft) => {
13
+ draft.computeEnvironment = option;
14
+ });
15
+ };
16
+ return /* @__PURE__ */ React.createElement("div", {
17
+ className: "grid grid-cols-1 md:grid-cols-[1fr_min-content]"
18
+ }, /* @__PURE__ */ React.createElement(Settings.Item, {
19
+ title: t("runtime.label"),
20
+ description: t("runtime.description")
21
+ }, /* @__PURE__ */ React.createElement(DropdownMenu.Root, null, /* @__PURE__ */ React.createElement(DropdownMenu.Trigger, {
22
+ asChild: true
23
+ }, /* @__PURE__ */ React.createElement(IconButton, {
24
+ iconEnd: true,
25
+ icon: "ph--caret-down--regular",
26
+ size: 4,
27
+ label: t(`runtime.${selected}.label`)
28
+ })), /* @__PURE__ */ React.createElement(DropdownMenu.Portal, null, /* @__PURE__ */ React.createElement(DropdownMenu.Content, {
29
+ side: "bottom"
30
+ }, /* @__PURE__ */ React.createElement(DropdownMenu.Viewport, null, /* @__PURE__ */ React.createElement(DropdownMenu.Item, {
31
+ onClick: () => handleUpdate("disabled")
32
+ }, t(`runtime.disabled.label`)), /* @__PURE__ */ React.createElement(DropdownMenu.Item, {
33
+ onClick: () => handleUpdate("local")
34
+ }, t(`runtime.local.label`)), /* @__PURE__ */ React.createElement(DropdownMenu.Item, {
35
+ onClick: () => handleUpdate("edge")
36
+ }, t(`runtime.edge.label`))))))));
37
+ };
38
+
39
+ export {
40
+ TriggersSettings
41
+ };
42
+ //# sourceMappingURL=chunk-2JP77CMN.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/TriggerSettings/TriggerSettings.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type ComputeEnvironment } from '@dxos/client-protocol';\nimport { useObject } from '@dxos/echo-react';\nimport { type Space } from '@dxos/react-client/echo';\nimport { DropdownMenu, IconButton, useTranslation } from '@dxos/react-ui';\nimport { Settings } from '@dxos/react-ui-form';\n\nimport { meta } from '#meta';\n\nexport const TriggersSettings = ({ space }: { space: Space }) => {\n const { t } = useTranslation(meta.id);\n const [properties, changeProperties] = useObject(space.properties);\n const selected = properties.computeEnvironment ?? 'local';\n\n const handleUpdate = (option: ComputeEnvironment) => {\n changeProperties((draft) => {\n draft.computeEnvironment = option;\n });\n };\n\n return (\n <div className='grid grid-cols-1 md:grid-cols-[1fr_min-content]'>\n <Settings.Item title={t('runtime.label')} description={t('runtime.description')}>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton iconEnd icon='ph--caret-down--regular' size={4} label={t(`runtime.${selected}.label`)} />\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content side='bottom'>\n <DropdownMenu.Viewport>\n <DropdownMenu.Item onClick={() => handleUpdate('disabled')}>\n {t(`runtime.disabled.label`)}\n </DropdownMenu.Item>\n <DropdownMenu.Item onClick={() => handleUpdate('local')}>{t(`runtime.local.label`)}</DropdownMenu.Item>\n <DropdownMenu.Item onClick={() => handleUpdate('edge')}>{t(`runtime.edge.label`)}</DropdownMenu.Item>\n </DropdownMenu.Viewport>\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n </Settings.Item>\n </div>\n );\n};\n"],
5
+ "mappings": ";AAIA,OAAOA,WAAW;AAGlB,SAASC,iBAAiB;AAE1B,SAASC,cAAcC,YAAYC,sBAAsB;AACzD,SAASC,gBAAgB;AAEzB,SAASC,YAAY;AAEd,IAAMC,mBAAmB,CAAC,EAAEC,MAAK,MAAoB;AAC1D,QAAM,EAAEC,EAAC,IAAKL,eAAeE,KAAKI,EAAE;AACpC,QAAM,CAACC,YAAYC,gBAAAA,IAAoBX,UAAUO,MAAMG,UAAU;AACjE,QAAME,WAAWF,WAAWG,sBAAsB;AAElD,QAAMC,eAAe,CAACC,WAAAA;AACpBJ,qBAAiB,CAACK,UAAAA;AAChBA,YAAMH,qBAAqBE;IAC7B,CAAA;EACF;AAEA,SACE,sBAAA,cAACE,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACd,SAASe,MAAI;IAACC,OAAOZ,EAAE,eAAA;IAAkBa,aAAab,EAAE,qBAAA;KACvD,sBAAA,cAACP,aAAaqB,MAAI,MAChB,sBAAA,cAACrB,aAAasB,SAAO;IAACC,SAAAA;KACpB,sBAAA,cAACtB,YAAAA;IAAWuB,SAAAA;IAAQC,MAAK;IAA0BC,MAAM;IAAGC,OAAOpB,EAAE,WAAWI,QAAAA,QAAgB;OAElG,sBAAA,cAACX,aAAa4B,QAAM,MAClB,sBAAA,cAAC5B,aAAa6B,SAAO;IAACC,MAAK;KACzB,sBAAA,cAAC9B,aAAa+B,UAAQ,MACpB,sBAAA,cAAC/B,aAAakB,MAAI;IAACc,SAAS,MAAMnB,aAAa,UAAA;KAC5CN,EAAE,wBAAwB,CAAA,GAE7B,sBAAA,cAACP,aAAakB,MAAI;IAACc,SAAS,MAAMnB,aAAa,OAAA;KAAWN,EAAE,qBAAqB,CAAA,GACjF,sBAAA,cAACP,aAAakB,MAAI;IAACc,SAAS,MAAMnB,aAAa,MAAA;KAAUN,EAAE,oBAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAQ/F;",
6
+ "names": ["React", "useObject", "DropdownMenu", "IconButton", "useTranslation", "Settings", "meta", "TriggersSettings", "space", "t", "id", "properties", "changeProperties", "selected", "computeEnvironment", "handleUpdate", "option", "draft", "div", "className", "Item", "title", "description", "Root", "Trigger", "asChild", "iconEnd", "icon", "size", "label", "Portal", "Content", "side", "Viewport", "onClick"]
7
+ }
@@ -0,0 +1,38 @@
1
+ // src/meta.ts
2
+ import { trim } from "@dxos/util";
3
+ var meta = {
4
+ id: "org.dxos.plugin.automation",
5
+ name: "Automation",
6
+ author: "DXOS",
7
+ description: trim`
8
+ Event-driven workflow automation engine for DXOS Composer.
9
+ Triggers connect ECHO objects, timer schedules, incoming feeds (email, webhook), and data
10
+ subscriptions to persistent compute functions — enabling automated pipelines that react to
11
+ changes in real time without manual intervention.
12
+
13
+ Each trigger references a PersistentOperation (a compiled function derived from a Script or
14
+ a visual ComputeGraph workflow) and carries optional structured input forwarded at invocation.
15
+ A per-space TriggerDispatcher manages execution: running locally in the browser when
16
+ computeEnvironment is "local", or delegating to the DXOS edge for server-side reliability.
17
+
18
+ The AutomationPanel settings surface lets users create, configure, enable, disable, and
19
+ force-run triggers from within any space. The TriggerEditor form supports all spec kinds —
20
+ timer (cron), feed, subscription, email, and webhook — with a query builder for
21
+ subscription-type triggers and a structured input editor for passing data to functions.
22
+
23
+ Operation handlers and blueprints contributed by any plugin in the application are
24
+ automatically merged and made available to every space's OperationRegistry, so new
25
+ capabilities registered by other plugins become instantly invocable from automation triggers.
26
+ `,
27
+ icon: "ph--atom--regular",
28
+ source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-automation",
29
+ spec: "PLUGIN.mdl",
30
+ tags: [
31
+ "system"
32
+ ]
33
+ };
34
+
35
+ export {
36
+ meta
37
+ };
38
+ //# sourceMappingURL=chunk-33VXVTV4.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 Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'org.dxos.plugin.automation',\n name: 'Automation',\n author: 'DXOS',\n description: trim`\n Event-driven workflow automation engine for DXOS Composer.\n Triggers connect ECHO objects, timer schedules, incoming feeds (email, webhook), and data\n subscriptions to persistent compute functions — enabling automated pipelines that react to\n changes in real time without manual intervention.\n\n Each trigger references a PersistentOperation (a compiled function derived from a Script or\n a visual ComputeGraph workflow) and carries optional structured input forwarded at invocation.\n A per-space TriggerDispatcher manages execution: running locally in the browser when\n computeEnvironment is \"local\", or delegating to the DXOS edge for server-side reliability.\n\n The AutomationPanel settings surface lets users create, configure, enable, disable, and\n force-run triggers from within any space. The TriggerEditor form supports all spec kinds —\n timer (cron), feed, subscription, email, and webhook — with a query builder for\n subscription-type triggers and a structured input editor for passing data to functions.\n\n Operation handlers and blueprints contributed by any plugin in the application are\n automatically merged and made available to every space's OperationRegistry, so new\n capabilities registered by other plugins become instantly invocable from automation triggers.\n `,\n icon: 'ph--atom--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-automation',\n spec: 'PLUGIN.mdl',\n tags: ['system'],\n};\n"],
5
+ "mappings": ";AAKA,SAASA,YAAY;AAEd,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,QAAQ;EACRC,aAAaL;;;;;;;;;;;;;;;;;;;;EAoBbM,MAAM;EACNC,QAAQ;EACRC,MAAM;EACNC,MAAM;IAAC;;AACT;",
6
+ "names": ["trim", "meta", "id", "name", "author", "description", "icon", "source", "spec", "tags"]
7
+ }
@@ -0,0 +1,12 @@
1
+ // src/components/index.ts
2
+ import { lazy } from "react";
3
+ var AutomationPanel = lazy(() => import("./AutomationPanel-OS3ZWYJK.mjs"));
4
+ var FunctionsPanel = lazy(() => import("./FunctionsPanel-L32Z67B7.mjs"));
5
+ var FunctionsRegistry = lazy(() => import("./FunctionsRegistry-RTCY3LXE.mjs"));
6
+
7
+ export {
8
+ AutomationPanel,
9
+ FunctionsPanel,
10
+ FunctionsRegistry
11
+ };
12
+ //# sourceMappingURL=chunk-ARUHHM4Q.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './TriggerEditor';\n\nexport const AutomationPanel = lazy(() => import('./AutomationPanel'));\nexport const FunctionsPanel = lazy(() => import('./FunctionsPanel'));\nexport const FunctionsRegistry = lazy(() => import('./FunctionsRegistry'));\n"],
5
+ "mappings": ";AAIA,SAASA,YAAY;AAId,IAAMC,kBAAkBD,KAAK,MAAM,OAAO,gCAAA,CAAA;AAC1C,IAAME,iBAAiBF,KAAK,MAAM,OAAO,+BAAA,CAAA;AACzC,IAAMG,oBAAoBH,KAAK,MAAM,OAAO,kCAAA,CAAA;",
6
+ "names": ["lazy", "AutomationPanel", "FunctionsPanel", "FunctionsRegistry"]
7
+ }