@dxos/plugin-automation 0.8.4-main.8360d9e660 → 0.8.4-main.8baae0fced

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 (352) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/AutomationPanel-GQCS4EPU.mjs +11 -0
  4. package/dist/lib/neutral/AutomationPlugin.mjs +10 -0
  5. package/dist/lib/{browser/cli/index.mjs → neutral/AutomationPlugin.node.mjs} +126 -130
  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-F6AZQV74.mjs +31 -0
  10. package/dist/lib/neutral/AutomationSettings-F6AZQV74.mjs.map +7 -0
  11. package/dist/lib/neutral/FunctionsContainer-2ETGQQR2.mjs +38 -0
  12. package/dist/lib/neutral/FunctionsContainer-2ETGQQR2.mjs.map +7 -0
  13. package/dist/lib/{browser/chunk-75XLBFAG.mjs → neutral/FunctionsPanel-SVRKRUXZ.mjs} +22 -22
  14. package/dist/lib/neutral/FunctionsPanel-SVRKRUXZ.mjs.map +7 -0
  15. package/dist/lib/{browser/chunk-FUVAC5EC.mjs → neutral/FunctionsRegistry-7ITCFJCW.mjs} +24 -25
  16. package/dist/lib/neutral/FunctionsRegistry-7ITCFJCW.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 +15 -0
  21. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  22. package/dist/lib/neutral/capabilities/node.mjs +13 -0
  23. package/dist/lib/neutral/capabilities/node.mjs.map +7 -0
  24. package/dist/lib/neutral/chunk-2JP77CMN.mjs +42 -0
  25. package/dist/lib/neutral/chunk-2JP77CMN.mjs.map +7 -0
  26. package/dist/lib/{browser/chunk-EL64ZPPN.mjs → neutral/chunk-4ETZEEYR.mjs} +7 -3
  27. package/dist/lib/neutral/chunk-4ETZEEYR.mjs.map +7 -0
  28. package/dist/lib/{browser/chunk-O23LHDEX.mjs → neutral/chunk-EIIPEUUP.mjs} +60 -26
  29. package/dist/lib/neutral/chunk-EIIPEUUP.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-HRUXURVS.mjs +12 -0
  31. package/dist/lib/neutral/chunk-HRUXURVS.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  33. package/dist/lib/{browser/chunk-BWEKRPFJ.mjs → neutral/chunk-K3C5ZTZA.mjs} +29 -38
  34. package/dist/lib/neutral/chunk-K3C5ZTZA.mjs.map +7 -0
  35. package/dist/lib/neutral/chunk-VCWVO3JE.mjs +8 -0
  36. package/dist/lib/neutral/chunk-VCWVO3JE.mjs.map +7 -0
  37. package/dist/lib/neutral/chunk-VRGWNUVV.mjs +36 -0
  38. package/dist/lib/neutral/chunk-VRGWNUVV.mjs.map +7 -0
  39. package/dist/lib/neutral/chunk-YA2ZTSOH.mjs +73 -0
  40. package/dist/lib/neutral/chunk-YA2ZTSOH.mjs.map +7 -0
  41. package/dist/lib/neutral/components/index.mjs +16 -0
  42. package/dist/lib/neutral/containers/index.mjs +13 -0
  43. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  44. package/dist/lib/neutral/create-trigger-from-template-XAJWHKO2.mjs +68 -0
  45. package/dist/lib/neutral/create-trigger-from-template-XAJWHKO2.mjs.map +7 -0
  46. package/dist/lib/neutral/hooks/index.mjs +47 -0
  47. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  48. package/dist/lib/neutral/index.mjs +16 -0
  49. package/dist/lib/neutral/layer-specs-XLG75KLY.mjs +161 -0
  50. package/dist/lib/neutral/layer-specs-XLG75KLY.mjs.map +7 -0
  51. package/dist/lib/neutral/meta.json +1 -0
  52. package/dist/lib/neutral/meta.mjs +8 -0
  53. package/dist/lib/neutral/operation-handler-YXGYH5W5.mjs +13 -0
  54. package/dist/lib/neutral/operation-handler-YXGYH5W5.mjs.map +7 -0
  55. package/dist/lib/neutral/operations/index.mjs +8 -0
  56. package/dist/lib/neutral/plugin.mjs +16 -0
  57. package/dist/lib/neutral/plugin.mjs.map +7 -0
  58. package/dist/lib/neutral/react-surface-3OGMAMKV.mjs +57 -0
  59. package/dist/lib/neutral/react-surface-3OGMAMKV.mjs.map +7 -0
  60. package/dist/lib/neutral/testing.mjs +8 -0
  61. package/dist/lib/neutral/translations.mjs +47 -0
  62. package/dist/lib/neutral/translations.mjs.map +7 -0
  63. package/dist/lib/neutral/types/index.mjs +12 -0
  64. package/dist/types/src/AutomationPlugin.d.ts +1 -0
  65. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  66. package/dist/types/src/{cli/plugin.d.ts → AutomationPlugin.node.d.ts} +2 -1
  67. package/dist/types/src/AutomationPlugin.node.d.ts.map +1 -0
  68. package/dist/types/src/AutomationPlugin.test.d.ts +2 -0
  69. package/dist/types/src/AutomationPlugin.test.d.ts.map +1 -0
  70. package/dist/types/src/AutomationPlugin.workerd.d.ts +4 -0
  71. package/dist/types/src/AutomationPlugin.workerd.d.ts.map +1 -0
  72. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  73. package/dist/types/src/capabilities/index.d.ts +6 -4
  74. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/layer-specs.d.ts +5 -0
  76. package/dist/types/src/capabilities/layer-specs.d.ts.map +1 -0
  77. package/dist/types/src/capabilities/node.d.ts +6 -0
  78. package/dist/types/src/capabilities/node.d.ts.map +1 -0
  79. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  80. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  81. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  82. package/dist/types/src/commands/index.d.ts.map +1 -0
  83. package/dist/types/src/{cli/commands → commands}/trigger/create/index.d.ts +6 -6
  84. package/dist/types/src/commands/trigger/create/index.d.ts.map +1 -0
  85. package/dist/types/src/{cli/commands → commands}/trigger/create/queue.d.ts +1 -1
  86. package/dist/types/src/commands/trigger/create/queue.d.ts.map +1 -0
  87. package/dist/types/src/{cli/commands → commands}/trigger/create/subscription.d.ts +1 -1
  88. package/dist/types/src/commands/trigger/create/subscription.d.ts.map +1 -0
  89. package/dist/types/src/{cli/commands → commands}/trigger/create/timer.d.ts +1 -1
  90. package/dist/types/src/commands/trigger/create/timer.d.ts.map +1 -0
  91. package/dist/types/src/{cli/commands → commands}/trigger/index.d.ts +7 -7
  92. package/dist/types/src/commands/trigger/index.d.ts.map +1 -0
  93. package/dist/types/src/{cli/commands → commands}/trigger/list.d.ts +1 -1
  94. package/dist/types/src/commands/trigger/list.d.ts.map +1 -0
  95. package/dist/types/src/commands/trigger/options.d.ts.map +1 -0
  96. package/dist/types/src/{cli/commands → commands}/trigger/remove.d.ts +1 -1
  97. package/dist/types/src/commands/trigger/remove.d.ts.map +1 -0
  98. package/dist/types/src/{cli/commands → commands}/trigger/update/index.d.ts +5 -5
  99. package/dist/types/src/commands/trigger/update/index.d.ts.map +1 -0
  100. package/dist/types/src/commands/trigger/update/queue.d.ts.map +1 -0
  101. package/dist/types/src/commands/trigger/update/subscription.d.ts.map +1 -0
  102. package/dist/types/src/commands/trigger/update/timer.d.ts.map +1 -0
  103. package/dist/types/src/{cli/commands → commands}/trigger/util.d.ts +4 -4
  104. package/dist/types/src/commands/trigger/util.d.ts.map +1 -0
  105. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +1 -1
  106. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  107. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +32 -32
  108. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  109. package/dist/types/src/components/AutomationPanel/index.d.ts.map +1 -1
  110. package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
  111. package/dist/types/src/components/FunctionsPanel/index.d.ts.map +1 -1
  112. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts.map +1 -1
  113. package/dist/types/src/components/FunctionsRegistry/index.d.ts.map +1 -1
  114. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts +6 -6
  115. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
  116. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts +4 -4
  117. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
  118. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +1 -1
  119. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  120. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +95 -93
  121. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  122. package/dist/types/src/containers/AutomationSettings/AutomationSettings.d.ts +3 -1
  123. package/dist/types/src/containers/AutomationSettings/AutomationSettings.d.ts.map +1 -1
  124. package/dist/types/src/containers/AutomationSettings/index.d.ts +1 -2
  125. package/dist/types/src/containers/AutomationSettings/index.d.ts.map +1 -1
  126. package/dist/types/src/containers/FunctionsContainer/FunctionsContainer.d.ts +2 -4
  127. package/dist/types/src/containers/FunctionsContainer/FunctionsContainer.d.ts.map +1 -1
  128. package/dist/types/src/containers/FunctionsContainer/index.d.ts +1 -2
  129. package/dist/types/src/containers/FunctionsContainer/index.d.ts.map +1 -1
  130. package/dist/types/src/containers/TriggerSettings/TriggerSettings.d.ts +3 -3
  131. package/dist/types/src/containers/TriggerSettings/TriggerSettings.d.ts.map +1 -1
  132. package/dist/types/src/hooks/index.d.ts +0 -1
  133. package/dist/types/src/hooks/index.d.ts.map +1 -1
  134. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +1 -1
  135. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -1
  136. package/dist/types/src/index.d.ts +0 -3
  137. package/dist/types/src/index.d.ts.map +1 -1
  138. package/dist/types/src/meta.d.ts.map +1 -1
  139. package/dist/types/src/operations/create-trigger-from-template.d.ts +5 -0
  140. package/dist/types/src/operations/create-trigger-from-template.d.ts.map +1 -0
  141. package/dist/types/src/operations/index.d.ts +3 -0
  142. package/dist/types/src/operations/index.d.ts.map +1 -0
  143. package/dist/types/src/plugin.d.ts +4 -0
  144. package/dist/types/src/plugin.d.ts.map +1 -0
  145. package/dist/types/src/testing/test-functions.d.ts +78 -76
  146. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  147. package/dist/types/src/testing.d.ts +2 -0
  148. package/dist/types/src/testing.d.ts.map +1 -0
  149. package/dist/types/src/translations.d.ts +32 -33
  150. package/dist/types/src/translations.d.ts.map +1 -1
  151. package/dist/types/src/types/AutomationOperation.d.ts +19 -0
  152. package/dist/types/src/types/AutomationOperation.d.ts.map +1 -0
  153. package/dist/types/src/types/index.d.ts +1 -2
  154. package/dist/types/src/types/index.d.ts.map +1 -1
  155. package/dist/types/src/types/schema.d.ts +7 -28
  156. package/dist/types/src/types/schema.d.ts.map +1 -1
  157. package/dist/types/tsconfig.tsbuildinfo +1 -1
  158. package/package.json +125 -68
  159. package/src/AutomationPlugin.node.ts +28 -0
  160. package/src/AutomationPlugin.test.ts +27 -0
  161. package/src/AutomationPlugin.tsx +12 -11
  162. package/src/AutomationPlugin.workerd.ts +18 -0
  163. package/src/capabilities/app-graph-builder.ts +66 -0
  164. package/src/capabilities/index.ts +10 -4
  165. package/src/capabilities/layer-specs.ts +231 -0
  166. package/src/capabilities/node.ts +13 -0
  167. package/src/capabilities/operation-handler.ts +16 -0
  168. package/src/capabilities/{react-surface/react-surface.tsx → react-surface.tsx} +17 -15
  169. package/src/{cli/commands → commands}/trigger/create/queue.ts +7 -10
  170. package/src/{cli/commands → commands}/trigger/create/subscription.ts +8 -11
  171. package/src/{cli/commands → commands}/trigger/create/timer.ts +4 -7
  172. package/src/{cli/commands → commands}/trigger/list.ts +7 -4
  173. package/src/{cli/commands → commands}/trigger/remove.ts +2 -3
  174. package/src/{cli/commands → commands}/trigger/update/queue.ts +19 -20
  175. package/src/{cli/commands → commands}/trigger/update/subscription.ts +15 -15
  176. package/src/{cli/commands → commands}/trigger/update/timer.ts +16 -16
  177. package/src/{cli/commands → commands}/trigger/util.ts +25 -17
  178. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +12 -5
  179. package/src/components/AutomationPanel/AutomationPanel.tsx +89 -47
  180. package/src/components/FunctionsPanel/FunctionsPanel.tsx +33 -25
  181. package/src/components/FunctionsRegistry/FunctionsRegistry.tsx +32 -23
  182. package/src/components/TriggerEditor/FunctionInputEditor.tsx +4 -4
  183. package/src/components/TriggerEditor/SpecSelector.tsx +17 -13
  184. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +19 -13
  185. package/src/components/TriggerEditor/TriggerEditor.tsx +13 -17
  186. package/src/containers/AutomationSettings/AutomationSettings.tsx +11 -7
  187. package/src/containers/AutomationSettings/index.ts +1 -3
  188. package/src/containers/FunctionsContainer/FunctionsContainer.tsx +11 -11
  189. package/src/containers/FunctionsContainer/index.ts +1 -3
  190. package/src/containers/TriggerSettings/TriggerSettings.tsx +32 -10
  191. package/src/hooks/index.ts +1 -1
  192. package/src/hooks/useTriggerRuntimeControls.ts +13 -8
  193. package/src/index.ts +0 -4
  194. package/src/meta.ts +3 -1
  195. package/src/operations/create-trigger-from-template.ts +71 -0
  196. package/src/operations/index.ts +7 -0
  197. package/src/plugin.ts +11 -0
  198. package/src/testing/test-functions.ts +6 -3
  199. package/src/testing.ts +7 -0
  200. package/src/translations.ts +38 -39
  201. package/src/types/AutomationOperation.ts +30 -0
  202. package/src/types/index.ts +2 -2
  203. package/src/types/schema.ts +2 -23
  204. package/dist/lib/browser/AutomationPanel-IGLIQY2N.mjs +0 -11
  205. package/dist/lib/browser/AutomationSettings-XGJGVBDD.mjs +0 -37
  206. package/dist/lib/browser/AutomationSettings-XGJGVBDD.mjs.map +0 -7
  207. package/dist/lib/browser/FunctionsContainer-R4ZMYSFJ.mjs +0 -43
  208. package/dist/lib/browser/FunctionsContainer-R4ZMYSFJ.mjs.map +0 -7
  209. package/dist/lib/browser/FunctionsPanel-NMA4RYJL.mjs +0 -10
  210. package/dist/lib/browser/FunctionsRegistry-TMKAEG5E.mjs +0 -10
  211. package/dist/lib/browser/TriggerSettings-GW5OEM2G.mjs +0 -11
  212. package/dist/lib/browser/app-graph-builder-74ILZP25.mjs +0 -83
  213. package/dist/lib/browser/app-graph-builder-74ILZP25.mjs.map +0 -7
  214. package/dist/lib/browser/chunk-5WMYSXEH.mjs +0 -83
  215. package/dist/lib/browser/chunk-5WMYSXEH.mjs.map +0 -7
  216. package/dist/lib/browser/chunk-75XLBFAG.mjs.map +0 -7
  217. package/dist/lib/browser/chunk-BWEKRPFJ.mjs.map +0 -7
  218. package/dist/lib/browser/chunk-EL64ZPPN.mjs.map +0 -7
  219. package/dist/lib/browser/chunk-FUVAC5EC.mjs.map +0 -7
  220. package/dist/lib/browser/chunk-LHJEQVX5.mjs +0 -8
  221. package/dist/lib/browser/chunk-LHJEQVX5.mjs.map +0 -7
  222. package/dist/lib/browser/chunk-O23LHDEX.mjs.map +0 -7
  223. package/dist/lib/browser/chunk-PUYY7B5F.mjs +0 -31
  224. package/dist/lib/browser/chunk-PUYY7B5F.mjs.map +0 -7
  225. package/dist/lib/browser/chunk-ZBEMNWNY.mjs +0 -93
  226. package/dist/lib/browser/chunk-ZBEMNWNY.mjs.map +0 -7
  227. package/dist/lib/browser/cli/index.mjs.map +0 -7
  228. package/dist/lib/browser/compute-runtime-I3I2BIRE.mjs +0 -130
  229. package/dist/lib/browser/compute-runtime-I3I2BIRE.mjs.map +0 -7
  230. package/dist/lib/browser/hooks/index.mjs +0 -13
  231. package/dist/lib/browser/index.mjs +0 -123
  232. package/dist/lib/browser/index.mjs.map +0 -7
  233. package/dist/lib/browser/meta.json +0 -1
  234. package/dist/lib/browser/operation-resolver-NGN4BEWN.mjs +0 -84
  235. package/dist/lib/browser/operation-resolver-NGN4BEWN.mjs.map +0 -7
  236. package/dist/lib/browser/react-surface-SXDIM3RM.mjs +0 -65
  237. package/dist/lib/browser/react-surface-SXDIM3RM.mjs.map +0 -7
  238. package/dist/lib/browser/types/index.mjs +0 -14
  239. package/dist/lib/node-esm/AutomationPanel-O2BCQA7P.mjs +0 -12
  240. package/dist/lib/node-esm/AutomationSettings-W52ZO2XI.mjs +0 -38
  241. package/dist/lib/node-esm/AutomationSettings-W52ZO2XI.mjs.map +0 -7
  242. package/dist/lib/node-esm/FunctionsContainer-GYRPQZM7.mjs +0 -44
  243. package/dist/lib/node-esm/FunctionsContainer-GYRPQZM7.mjs.map +0 -7
  244. package/dist/lib/node-esm/FunctionsPanel-DCXXLSVP.mjs +0 -11
  245. package/dist/lib/node-esm/FunctionsRegistry-7WCHC64E.mjs +0 -11
  246. package/dist/lib/node-esm/FunctionsRegistry-7WCHC64E.mjs.map +0 -7
  247. package/dist/lib/node-esm/TriggerSettings-2GKFPECW.mjs +0 -12
  248. package/dist/lib/node-esm/TriggerSettings-2GKFPECW.mjs.map +0 -7
  249. package/dist/lib/node-esm/app-graph-builder-VDXPOWCH.mjs +0 -84
  250. package/dist/lib/node-esm/app-graph-builder-VDXPOWCH.mjs.map +0 -7
  251. package/dist/lib/node-esm/chunk-6JVB3IHW.mjs +0 -97
  252. package/dist/lib/node-esm/chunk-6JVB3IHW.mjs.map +0 -7
  253. package/dist/lib/node-esm/chunk-BNWZ2NNI.mjs +0 -32
  254. package/dist/lib/node-esm/chunk-BNWZ2NNI.mjs.map +0 -7
  255. package/dist/lib/node-esm/chunk-FPXVLTEY.mjs +0 -270
  256. package/dist/lib/node-esm/chunk-FPXVLTEY.mjs.map +0 -7
  257. package/dist/lib/node-esm/chunk-K7T2MVB7.mjs +0 -98
  258. package/dist/lib/node-esm/chunk-K7T2MVB7.mjs.map +0 -7
  259. package/dist/lib/node-esm/chunk-Q5JSKD6Z.mjs +0 -295
  260. package/dist/lib/node-esm/chunk-Q5JSKD6Z.mjs.map +0 -7
  261. package/dist/lib/node-esm/chunk-V3VUE2NR.mjs +0 -10
  262. package/dist/lib/node-esm/chunk-V3VUE2NR.mjs.map +0 -7
  263. package/dist/lib/node-esm/chunk-WC5AT7B3.mjs +0 -19
  264. package/dist/lib/node-esm/chunk-WC5AT7B3.mjs.map +0 -7
  265. package/dist/lib/node-esm/chunk-XCFO2IXT.mjs +0 -84
  266. package/dist/lib/node-esm/chunk-XCFO2IXT.mjs.map +0 -7
  267. package/dist/lib/node-esm/chunk-XQO3HK62.mjs +0 -94
  268. package/dist/lib/node-esm/chunk-XQO3HK62.mjs.map +0 -7
  269. package/dist/lib/node-esm/cli/index.mjs +0 -1116
  270. package/dist/lib/node-esm/cli/index.mjs.map +0 -7
  271. package/dist/lib/node-esm/compute-runtime-7HCSIYFG.mjs +0 -131
  272. package/dist/lib/node-esm/compute-runtime-7HCSIYFG.mjs.map +0 -7
  273. package/dist/lib/node-esm/hooks/index.mjs +0 -14
  274. package/dist/lib/node-esm/index.mjs +0 -124
  275. package/dist/lib/node-esm/index.mjs.map +0 -7
  276. package/dist/lib/node-esm/meta.json +0 -1
  277. package/dist/lib/node-esm/operation-resolver-ANGACQZG.mjs +0 -85
  278. package/dist/lib/node-esm/operation-resolver-ANGACQZG.mjs.map +0 -7
  279. package/dist/lib/node-esm/react-surface-QVLVDEVW.mjs +0 -66
  280. package/dist/lib/node-esm/react-surface-QVLVDEVW.mjs.map +0 -7
  281. package/dist/lib/node-esm/types/index.mjs +0 -15
  282. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +0 -1
  283. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +0 -3
  284. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +0 -1
  285. package/dist/types/src/capabilities/compute-runtime/compute-runtime.d.ts +0 -6
  286. package/dist/types/src/capabilities/compute-runtime/compute-runtime.d.ts.map +0 -1
  287. package/dist/types/src/capabilities/compute-runtime/index.d.ts +0 -3
  288. package/dist/types/src/capabilities/compute-runtime/index.d.ts.map +0 -1
  289. package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
  290. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
  291. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
  292. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
  293. package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
  294. package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
  295. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
  296. package/dist/types/src/cli/commands/index.d.ts.map +0 -1
  297. package/dist/types/src/cli/commands/trigger/create/index.d.ts.map +0 -1
  298. package/dist/types/src/cli/commands/trigger/create/queue.d.ts.map +0 -1
  299. package/dist/types/src/cli/commands/trigger/create/subscription.d.ts.map +0 -1
  300. package/dist/types/src/cli/commands/trigger/create/timer.d.ts.map +0 -1
  301. package/dist/types/src/cli/commands/trigger/index.d.ts.map +0 -1
  302. package/dist/types/src/cli/commands/trigger/list.d.ts.map +0 -1
  303. package/dist/types/src/cli/commands/trigger/options.d.ts.map +0 -1
  304. package/dist/types/src/cli/commands/trigger/remove.d.ts.map +0 -1
  305. package/dist/types/src/cli/commands/trigger/update/index.d.ts.map +0 -1
  306. package/dist/types/src/cli/commands/trigger/update/queue.d.ts.map +0 -1
  307. package/dist/types/src/cli/commands/trigger/update/subscription.d.ts.map +0 -1
  308. package/dist/types/src/cli/commands/trigger/update/timer.d.ts.map +0 -1
  309. package/dist/types/src/cli/commands/trigger/util.d.ts.map +0 -1
  310. package/dist/types/src/cli/index.d.ts +0 -2
  311. package/dist/types/src/cli/index.d.ts.map +0 -1
  312. package/dist/types/src/cli/plugin.d.ts.map +0 -1
  313. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +0 -12
  314. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +0 -1
  315. package/dist/types/src/types/capabilities.d.ts +0 -23
  316. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  317. package/dist/types/src/types/events.d.ts +0 -5
  318. package/dist/types/src/types/events.d.ts.map +0 -1
  319. package/src/capabilities/app-graph-builder/app-graph-builder.ts +0 -73
  320. package/src/capabilities/app-graph-builder/index.ts +0 -7
  321. package/src/capabilities/compute-runtime/compute-runtime.ts +0 -155
  322. package/src/capabilities/compute-runtime/index.ts +0 -7
  323. package/src/capabilities/operation-resolver/index.ts +0 -7
  324. package/src/capabilities/operation-resolver/operation-resolver.ts +0 -80
  325. package/src/capabilities/react-surface/index.ts +0 -7
  326. package/src/cli/index.ts +0 -5
  327. package/src/cli/plugin.ts +0 -24
  328. package/src/hooks/useComputeRuntimeCallback.ts +0 -67
  329. package/src/types/capabilities.ts +0 -45
  330. package/src/types/events.ts +0 -11
  331. /package/dist/lib/{browser/AutomationPanel-IGLIQY2N.mjs.map → neutral/AutomationPanel-GQCS4EPU.mjs.map} +0 -0
  332. /package/dist/lib/{browser/FunctionsPanel-NMA4RYJL.mjs.map → neutral/AutomationPlugin.mjs.map} +0 -0
  333. /package/dist/lib/{browser/FunctionsRegistry-TMKAEG5E.mjs.map → neutral/TriggerSettings-XCHIZPOR.mjs.map} +0 -0
  334. /package/dist/lib/{browser/TriggerSettings-GW5OEM2G.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  335. /package/dist/lib/{browser/hooks → neutral/components}/index.mjs.map +0 -0
  336. /package/dist/lib/{browser/types → neutral}/index.mjs.map +0 -0
  337. /package/dist/lib/{node-esm/AutomationPanel-O2BCQA7P.mjs.map → neutral/meta.mjs.map} +0 -0
  338. /package/dist/lib/{node-esm/hooks → neutral/operations}/index.mjs.map +0 -0
  339. /package/dist/lib/{node-esm/FunctionsPanel-DCXXLSVP.mjs.map → neutral/testing.mjs.map} +0 -0
  340. /package/dist/lib/{node-esm → neutral}/types/index.mjs.map +0 -0
  341. /package/dist/types/src/capabilities/{app-graph-builder/app-graph-builder.d.ts → app-graph-builder.d.ts} +0 -0
  342. /package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +0 -0
  343. /package/dist/types/src/{cli/commands → commands}/index.d.ts +0 -0
  344. /package/dist/types/src/{cli/commands → commands}/trigger/options.d.ts +0 -0
  345. /package/dist/types/src/{cli/commands → commands}/trigger/update/queue.d.ts +0 -0
  346. /package/dist/types/src/{cli/commands → commands}/trigger/update/subscription.d.ts +0 -0
  347. /package/dist/types/src/{cli/commands → commands}/trigger/update/timer.d.ts +0 -0
  348. /package/src/{cli/commands → commands}/index.ts +0 -0
  349. /package/src/{cli/commands → commands}/trigger/create/index.ts +0 -0
  350. /package/src/{cli/commands → commands}/trigger/index.ts +0 -0
  351. /package/src/{cli/commands → commands}/trigger/options.ts +0 -0
  352. /package/src/{cli/commands → commands}/trigger/update/index.ts +0 -0
@@ -13,8 +13,8 @@ import * as Option from 'effect/Option';
13
13
  import { CommandConfig } from '@dxos/cli-util';
14
14
  import { flushAndSync, print, spaceLayer, withTypes } from '@dxos/cli-util';
15
15
  import { Common } from '@dxos/cli-util';
16
+ import { Operation, Trigger } from '@dxos/compute';
16
17
  import { DXN, Database, Filter, JsonSchema, Obj, Query, Ref } from '@dxos/echo';
17
- import { Function, Trigger } from '@dxos/functions';
18
18
 
19
19
  import { Deep, Delay, Enabled, Input, TriggerId, Typename } from '../options';
20
20
  import { printTrigger, promptForSchemaInput, selectFunction, selectTrigger } from '../util';
@@ -61,7 +61,7 @@ export const subscription = Command.make(
61
61
  ).pipe(
62
62
  Command.withDescription('Update a subscription trigger.'),
63
63
  Command.provide(({ spaceId }) => spaceLayer(spaceId, true)),
64
- Command.provideEffectDiscard(() => withTypes(Function.Function, Trigger.Trigger)),
64
+ Command.provideEffectDiscard(() => withTypes(Operation.PersistentOperation, Trigger.Trigger)),
65
65
  );
66
66
 
67
67
  /**
@@ -95,10 +95,10 @@ const extractCurrentTypename = (spec: Trigger.SubscriptionSpec | undefined): Opt
95
95
  * @returns The current function (either original or newly assigned)
96
96
  */
97
97
  const updateFunction = Effect.fn(function* (trigger: Trigger.Trigger, functionIdOption: Option.Option<string>) {
98
- let currentFn: Function.Function | undefined = trigger.function
98
+ let currentFn: Operation.PersistentOperation | undefined = trigger.function
99
99
  ? yield* Database.load(trigger.function) as any
100
100
  : undefined;
101
- if (currentFn && !Obj.instanceOf(Function.Function, currentFn)) {
101
+ if (currentFn && !Obj.instanceOf(Operation.PersistentOperation, currentFn)) {
102
102
  currentFn = undefined;
103
103
  }
104
104
  const currentFunctionName = currentFn ? (currentFn.name ?? currentFn.id) : undefined;
@@ -115,13 +115,13 @@ const updateFunction = Effect.fn(function* (trigger: Trigger.Trigger, functionId
115
115
  onNone: () => selectFunction(),
116
116
  onSome: (id) => Effect.succeed(id),
117
117
  });
118
- const functions = yield* Database.runQuery(Filter.type(Function.Function));
118
+ const functions = yield* Database.runQuery(Filter.type(Operation.PersistentOperation));
119
119
  const foundFn = functions.find((fn) => fn.id === functionId);
120
- if (!foundFn || !Obj.instanceOf(Function.Function, foundFn)) {
120
+ if (!foundFn || !Obj.instanceOf(Operation.PersistentOperation, foundFn)) {
121
121
  return yield* Effect.fail(new Error(`Function not found: ${functionId}`));
122
122
  }
123
- Obj.change(trigger, (mutableTrigger) => {
124
- mutableTrigger.function = Ref.make(foundFn);
123
+ Obj.update(trigger, (trigger) => {
124
+ trigger.function = Ref.make(foundFn);
125
125
  });
126
126
  currentFn = foundFn;
127
127
  }
@@ -210,8 +210,8 @@ const updateSpec = Effect.fn(function* (
210
210
  subscriptionOptions.delay = delayOptionValue.value;
211
211
  }
212
212
 
213
- Obj.change(trigger, (mutableTrigger) => {
214
- const spec = mutableTrigger.spec;
213
+ Obj.update(trigger, (trigger) => {
214
+ const spec = trigger.spec;
215
215
  if (spec?.kind === 'subscription') {
216
216
  // Cast needed because QueryAST types are deeply readonly but spec.query expects mutable.
217
217
  spec.query = { ast: queryAst } as NonNullable<typeof spec.query>;
@@ -227,7 +227,7 @@ const updateSpec = Effect.fn(function* (
227
227
  */
228
228
  const updateInput = Effect.fn(function* (
229
229
  trigger: Trigger.Trigger,
230
- fn: Function.Function,
230
+ fn: Operation.PersistentOperation,
231
231
  inputOption: Option.Option<Record<string, any>>,
232
232
  ) {
233
233
  const currentInput = trigger.input as Record<string, any> | undefined;
@@ -249,8 +249,8 @@ const updateInput = Effect.fn(function* (
249
249
  promptForSchemaInput(fn.inputSchema ? JsonSchema.toEffectSchema(fn.inputSchema) : undefined, currentInput),
250
250
  onSome: (value) => Effect.succeed(value as Record<string, any>),
251
251
  });
252
- Obj.change(trigger, (mutableTrigger) => {
253
- mutableTrigger.input = inputObj;
252
+ Obj.update(trigger, (trigger) => {
253
+ trigger.input = inputObj;
254
254
  });
255
255
  }
256
256
  });
@@ -272,7 +272,7 @@ const updateEnabled = Effect.fn(function* (
272
272
  }).pipe(Prompt.run),
273
273
  onSome: () => Effect.succeed(enabled),
274
274
  });
275
- Obj.change(trigger, (mutableTrigger) => {
276
- mutableTrigger.enabled = enabledValue;
275
+ Obj.update(trigger, (trigger) => {
276
+ trigger.enabled = enabledValue;
277
277
  });
278
278
  });
@@ -12,8 +12,8 @@ import * as Option from 'effect/Option';
12
12
  import { CommandConfig } from '@dxos/cli-util';
13
13
  import { flushAndSync, print, spaceLayer, withTypes } from '@dxos/cli-util';
14
14
  import { Common } from '@dxos/cli-util';
15
+ import { Operation, Trigger } from '@dxos/compute';
15
16
  import { DXN, Database, Filter, JsonSchema, Obj, Ref } from '@dxos/echo';
16
- import { Function, Trigger } from '@dxos/functions';
17
17
 
18
18
  import { Cron, Enabled, Input, TriggerId } from '../options';
19
19
  import { printTrigger, promptForSchemaInput, selectFunction, selectTrigger } from '../util';
@@ -58,7 +58,7 @@ export const timer = Command.make(
58
58
  ).pipe(
59
59
  Command.withDescription('Update a timer trigger.'),
60
60
  Command.provide(({ spaceId }) => spaceLayer(spaceId, true)),
61
- Command.provideEffectDiscard(() => withTypes(Function.Function, Trigger.Trigger)),
61
+ Command.provideEffectDiscard(() => withTypes(Operation.PersistentOperation, Trigger.Trigger)),
62
62
  );
63
63
 
64
64
  /**
@@ -67,10 +67,10 @@ export const timer = Command.make(
67
67
  * @returns The current function (either original or newly assigned)
68
68
  */
69
69
  const updateFunction = Effect.fn(function* (trigger: Trigger.Trigger, functionIdOption: Option.Option<string>) {
70
- let currentFn: Function.Function | undefined = trigger.function
70
+ let currentFn: Operation.PersistentOperation | undefined = trigger.function
71
71
  ? yield* Database.load(trigger.function) as any
72
72
  : undefined;
73
- if (currentFn && !Obj.instanceOf(Function.Function, currentFn)) {
73
+ if (currentFn && !Obj.instanceOf(Operation.PersistentOperation, currentFn)) {
74
74
  currentFn = undefined;
75
75
  }
76
76
  const currentFunctionName = currentFn ? (currentFn.name ?? currentFn.id) : undefined;
@@ -87,13 +87,13 @@ const updateFunction = Effect.fn(function* (trigger: Trigger.Trigger, functionId
87
87
  onNone: () => selectFunction(),
88
88
  onSome: (id) => Effect.succeed(id),
89
89
  });
90
- const functions = yield* Database.runQuery(Filter.type(Function.Function));
90
+ const functions = yield* Database.runQuery(Filter.type(Operation.PersistentOperation));
91
91
  const foundFn = functions.find((fn) => fn.id === functionId);
92
- if (!foundFn || !Obj.instanceOf(Function.Function, foundFn)) {
92
+ if (!foundFn || !Obj.instanceOf(Operation.PersistentOperation, foundFn)) {
93
93
  return yield* Effect.fail(new Error(`Function not found: ${functionId}`));
94
94
  }
95
- Obj.change(trigger, (mutableTrigger) => {
96
- mutableTrigger.function = Ref.make(foundFn);
95
+ Obj.update(trigger, (trigger) => {
96
+ trigger.function = Ref.make(foundFn);
97
97
  });
98
98
  currentFn = foundFn;
99
99
  }
@@ -128,9 +128,9 @@ const updateCron = Effect.fn(function* (trigger: Trigger.Trigger, cronOption: Op
128
128
  }).pipe(Prompt.run),
129
129
  onSome: (value) => Effect.succeed(value),
130
130
  });
131
- Obj.change(trigger, (mutableTrigger) => {
132
- if (mutableTrigger.spec?.kind === 'timer') {
133
- mutableTrigger.spec.cron = cron;
131
+ Obj.update(trigger, (trigger) => {
132
+ if (trigger.spec?.kind === 'timer') {
133
+ trigger.spec.cron = cron;
134
134
  }
135
135
  });
136
136
  }
@@ -142,7 +142,7 @@ const updateCron = Effect.fn(function* (trigger: Trigger.Trigger, cronOption: Op
142
142
  */
143
143
  const updateInput = Effect.fn(function* (
144
144
  trigger: Trigger.Trigger,
145
- fn: Function.Function,
145
+ fn: Operation.PersistentOperation,
146
146
  inputOption: Option.Option<Record<string, any>>,
147
147
  ) {
148
148
  const currentInput = trigger.input as Record<string, any> | undefined;
@@ -164,8 +164,8 @@ const updateInput = Effect.fn(function* (
164
164
  promptForSchemaInput(fn.inputSchema ? JsonSchema.toEffectSchema(fn.inputSchema) : undefined, currentInput),
165
165
  onSome: (value) => Effect.succeed(value as Record<string, any>),
166
166
  });
167
- Obj.change(trigger, (mutableTrigger) => {
168
- mutableTrigger.input = inputObj;
167
+ Obj.update(trigger, (trigger) => {
168
+ trigger.input = inputObj;
169
169
  });
170
170
  }
171
171
  });
@@ -187,7 +187,7 @@ const updateEnabled = Effect.fn(function* (
187
187
  }).pipe(Prompt.run),
188
188
  onSome: () => Effect.succeed(enabled),
189
189
  });
190
- Obj.change(trigger, (mutableTrigger) => {
191
- mutableTrigger.enabled = enabledValue;
190
+ Obj.update(trigger, (trigger) => {
191
+ trigger.enabled = enabledValue;
192
192
  });
193
193
  });
@@ -12,9 +12,9 @@ import type * as Schema from 'effect/Schema';
12
12
  import * as SchemaAST from 'effect/SchemaAST';
13
13
 
14
14
  import { FormBuilder } from '@dxos/cli-util';
15
- import { Annotation, Database, Entity, Feed, Filter, Obj, Ref, Type } from '@dxos/echo';
15
+ import { Operation, Trigger } from '@dxos/compute';
16
+ import { Annotation, Database, Entity, Feed, Filter, Obj, Query, Ref, Type } from '@dxos/echo';
16
17
  import { getProperties } from '@dxos/effect';
17
- import { Function, Trigger } from '@dxos/functions';
18
18
  import { FeedAnnotation } from '@dxos/schema';
19
19
 
20
20
  export type TriggerRemoteStatus = 'available' | 'not available' | 'n/a';
@@ -60,7 +60,10 @@ export const printTrigger = Effect.fn(function* (trigger: Trigger.Trigger, remot
60
60
  fn,
61
61
  FormBuilder.nest(
62
62
  'function',
63
- FormBuilder.make().pipe(FormBuilder.set('key', fn!.key), FormBuilder.set('dxn', fn!.dxn?.toString())),
63
+ FormBuilder.make().pipe(
64
+ FormBuilder.set('key', Obj.getMeta(fn as Operation.PersistentOperation).key),
65
+ FormBuilder.set('dxn', Obj.getDXN(fn as Obj.Unknown).toString()),
66
+ ),
64
67
  ),
65
68
  ),
66
69
  FormBuilder.nestedOption('spec', Option.fromNullable(trigger.spec).pipe(Option.map(printSpec))),
@@ -272,7 +275,7 @@ export const promptForSchemaInput = Effect.fn(function* (
272
275
  * Queries the database for functions and prompts the user to select one.
273
276
  */
274
277
  export const selectFunction = Effect.fn(function* () {
275
- const functions = yield* Database.runQuery(Filter.type(Function.Function));
278
+ const functions = yield* Database.runQuery(Filter.type(Operation.PersistentOperation));
276
279
 
277
280
  if (functions.length === 0) {
278
281
  return yield* Effect.fail(new Error('No functions available'));
@@ -280,7 +283,7 @@ export const selectFunction = Effect.fn(function* () {
280
283
 
281
284
  const selected = yield* Prompt.select({
282
285
  message: 'Select a function:',
283
- choices: functions.map((fn: Function.Function) => ({
286
+ choices: functions.map((fn: Operation.PersistentOperation) => ({
284
287
  title: fn.name ?? fn.id,
285
288
  value: fn.id,
286
289
  description: fn.description,
@@ -296,7 +299,9 @@ export const selectFunction = Effect.fn(function* () {
296
299
  * Queries the database for triggers and prompts the user to select one.
297
300
  */
298
301
  export const selectTrigger = Effect.fn(function* (kind?: Trigger.Kind) {
299
- const triggers = yield* Database.runQuery(Filter.type(Trigger.Trigger));
302
+ const triggers = yield* Database.runQuery(
303
+ Query.select(Filter.type(Trigger.Trigger)).debugLabel('cli.trigger.selectTrigger'),
304
+ );
300
305
  const filteredTriggers = kind ? triggers.filter((trigger) => trigger.spec?.kind === kind) : triggers;
301
306
 
302
307
  if (filteredTriggers.length === 0) {
@@ -307,7 +312,10 @@ export const selectTrigger = Effect.fn(function* (kind?: Trigger.Kind) {
307
312
  filteredTriggers.map((trigger) =>
308
313
  Effect.gen(function* () {
309
314
  const fn = trigger.function ? yield* Database.load(trigger.function) : undefined;
310
- const functionName = fn && Obj.instanceOf(Function.Function, fn) ? (fn.name ?? fn.key ?? fn.id) : undefined;
315
+ const functionName =
316
+ fn && Obj.instanceOf(Operation.PersistentOperation, fn)
317
+ ? (fn.name ?? Obj.getMeta(fn).key ?? fn.id)
318
+ : undefined;
311
319
  const title = functionName ?? trigger.id;
312
320
  const description = `${trigger.enabled ? 'enabled' : 'disabled'} - ${trigger.spec?.kind ?? 'unknown'}`;
313
321
 
@@ -329,11 +337,11 @@ export const selectTrigger = Effect.fn(function* (kind?: Trigger.Kind) {
329
337
  });
330
338
 
331
339
  /**
332
- * Selects a queue interactively from available queues in the database.
340
+ * Selects a feed interactively from available feeds in the database.
333
341
  * Queries schemas with FeedAnnotation, then queries objects of those types,
334
342
  * and extracts queue DXNs from the objects' feed properties.
335
343
  */
336
- export const selectQueue = Effect.fn(function* () {
344
+ export const selectFeed = Effect.fn(function* () {
337
345
  // Query schema registry for schemas with FeedAnnotation.
338
346
  const schemas = yield* Database.runSchemaQuery({ location: ['database', 'runtime'] });
339
347
 
@@ -347,8 +355,8 @@ export const selectQueue = Effect.fn(function* () {
347
355
  return yield* Effect.fail(new Error('No schemas with Feed annotation found'));
348
356
  }
349
357
 
350
- // Collect all objects with queues.
351
- const queueChoices: Array<{ title: string; value: string; description?: string }> = [];
358
+ // Collect all objects with feeds.
359
+ const feedChoices: Array<{ title: string; value: string; description?: string }> = [];
352
360
 
353
361
  // Process each feed schema, loading the Feed object to extract queue DXN.
354
362
  for (const schema of feedSchemas) {
@@ -368,30 +376,30 @@ export const selectQueue = Effect.fn(function* () {
368
376
  continue;
369
377
  }
370
378
 
371
- const queueDxn = Feed.getQueueDxn(feedObj);
372
- if (!queueDxn) {
379
+ const feedDXN = Feed.getQueueDxn(feedObj);
380
+ if (!feedDXN) {
373
381
  continue;
374
382
  }
375
383
 
376
384
  const label = Obj.getLabel(obj) ?? obj.id;
377
385
  const description = Obj.getTypename(obj);
378
386
 
379
- queueChoices.push({
387
+ feedChoices.push({
380
388
  title: label,
381
- value: queueDxn.toString(),
389
+ value: feedDXN.toString(),
382
390
  description,
383
391
  });
384
392
  }
385
393
  }).pipe(Effect.catchAll(() => Effect.void));
386
394
  }
387
395
 
388
- if (queueChoices.length === 0) {
396
+ if (feedChoices.length === 0) {
389
397
  return yield* Effect.fail(new Error('No objects with queue properties found'));
390
398
  }
391
399
 
392
400
  const selected = yield* Prompt.select({
393
401
  message: 'Select a queue:',
394
- choices: queueChoices,
402
+ choices: feedChoices,
395
403
  });
396
404
 
397
405
  return String(selected);
@@ -5,13 +5,14 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
- import { Function, Trigger } from '@dxos/functions';
8
+ import { Operation, Trigger } from '@dxos/compute';
9
+ import { Obj } from '@dxos/echo';
9
10
  import { useSpaces } from '@dxos/react-client/echo';
10
11
  import { withClientProvider } from '@dxos/react-client/testing';
11
12
  import { withTheme } from '@dxos/react-ui/testing';
12
13
 
13
- import { functions } from '../../testing';
14
- import { translations } from '../../translations';
14
+ import { functions } from '#testing';
15
+ import { translations } from '#translations';
15
16
 
16
17
  import { AutomationPanel } from './AutomationPanel';
17
18
 
@@ -35,10 +36,16 @@ const meta = {
35
36
  withClientProvider({
36
37
  createIdentity: true,
37
38
  createSpace: true,
38
- types: [Function.Function, Trigger.Trigger],
39
+ types: [Operation.PersistentOperation, Trigger.Trigger],
39
40
  onCreateSpace: ({ space }) => {
40
41
  for (const fn of functions) {
41
- space.db.add(Function.make(fn));
42
+ const { key, version, ...data } = fn;
43
+ space.db.add(
44
+ Obj.make(Operation.PersistentOperation, {
45
+ [Obj.Meta]: { key, version: version ?? '0.1.0' },
46
+ ...data,
47
+ }),
48
+ );
42
49
  }
43
50
  },
44
51
  }),
@@ -3,16 +3,21 @@
3
3
  //
4
4
 
5
5
  import * as Array from 'effect/Array';
6
+ import * as Effect from 'effect/Effect';
6
7
  import * as EFn from 'effect/Function';
7
8
  import * as Match from 'effect/Match';
8
9
  import * as Schema from 'effect/Schema';
9
10
  import React, { useCallback, useMemo, useState } from 'react';
10
11
 
11
- import { Filter, Obj, Tag } from '@dxos/echo';
12
- import { Function, Script, Trigger } from '@dxos/functions';
13
- import { KEY_QUEUE_CURSOR } from '@dxos/functions-runtime';
12
+ import { useProcessManagerRuntime } from '@dxos/app-framework/ui';
13
+ import { useTypeOptions } from '@dxos/app-toolkit/ui';
14
+ import { type ComputeEnvironment } from '@dxos/client-protocol';
15
+ import { Operation, Script, ServiceResolver, Trigger, TriggerEvent } from '@dxos/compute';
16
+ import { Context } from '@dxos/context';
17
+ import { Filter, Obj, Query, Tag } from '@dxos/echo';
18
+ import { KEY_QUEUE_CURSOR, TriggerDispatcher } from '@dxos/functions-runtime';
14
19
  import { FunctionsServiceClient } from '@dxos/functions-runtime/edge';
15
- import { useTypeOptions } from '@dxos/plugin-space';
20
+ import { log } from '@dxos/log';
16
21
  import { type Client, useClient } from '@dxos/react-client';
17
22
  import { type Space, useObject, useQuery } from '@dxos/react-client/echo';
18
23
  import { Clipboard, IconButton, type IconButtonProps, Input, Separator, useTranslation } from '@dxos/react-ui';
@@ -22,7 +27,8 @@ import { Pipeline } from '@dxos/types';
22
27
  import { ghostHover, mx } from '@dxos/ui-theme';
23
28
  import { isNonNullable } from '@dxos/util';
24
29
 
25
- import { meta } from '../../meta';
30
+ import { meta } from '#meta';
31
+
26
32
  import { TriggerEditor, type TriggerEditorProps } from '../TriggerEditor';
27
33
 
28
34
  const grid = 'grid grid-cols-[40px_1fr_32px_32px] min-h-[2.5rem]';
@@ -38,15 +44,21 @@ export type AutomationPanelProps = {
38
44
  export const AutomationPanel = ({ space, object, initialTrigger, onDone }: AutomationPanelProps) => {
39
45
  const { t } = useTranslation(meta.id);
40
46
  const client = useClient();
47
+ const processManagerRuntime = useProcessManagerRuntime();
48
+ const [properties] = useObject(space.properties);
49
+ const computeEnvironment = properties.computeEnvironment ?? 'local';
41
50
  const functionsServiceClient = useMemo(() => FunctionsServiceClient.fromClient(client), [client]);
42
- const functions = useQuery(space.db, Filter.type(Function.Function));
43
- const triggers = useQuery(space.db, Filter.type(Trigger.Trigger));
51
+ const functions = useQuery(space.db, Filter.type(Operation.PersistentOperation));
52
+ const triggers = useQuery(
53
+ space.db,
54
+ Query.select(Filter.type(Trigger.Trigger)).debugLabel('plugin-automation.AutomationPanel'),
55
+ );
44
56
  const filteredTriggers = useMemo(() => {
45
57
  return object ? triggers.filter(triggerMatch(object)) : triggers;
46
58
  }, [object, triggers]);
47
59
  const tags = useQuery(space.db, Filter.type(Tag.Tag));
48
60
  const types = useTypeOptions({
49
- space,
61
+ db: space.db,
50
62
  annotation: {
51
63
  location: ['database', 'runtime'],
52
64
  kind: ['user'],
@@ -74,8 +86,8 @@ export const AutomationPanel = ({ space, object, initialTrigger, onDone }: Autom
74
86
 
75
87
  const handleSave: TriggerEditorProps['onSave'] = (trigger) => {
76
88
  if (selected) {
77
- Obj.change(selected, (mutable) => {
78
- Object.assign(mutable, trigger);
89
+ Obj.update(selected, (selected) => {
90
+ Object.assign(selected, trigger);
79
91
  });
80
92
  } else {
81
93
  space.db.add(Trigger.make(trigger));
@@ -92,19 +104,44 @@ export const AutomationPanel = ({ space, object, initialTrigger, onDone }: Autom
92
104
  };
93
105
 
94
106
  const handleForceRunTrigger = async (trigger: Trigger.Trigger) => {
95
- await functionsServiceClient.forceRunCronTrigger(space.id, trigger.id);
107
+ if (computeEnvironment === 'disabled') {
108
+ return;
109
+ }
110
+
111
+ if (computeEnvironment === 'local') {
112
+ try {
113
+ await processManagerRuntime.runPromise(
114
+ Effect.gen(function* () {
115
+ const dispatcher = yield* TriggerDispatcher;
116
+ yield* dispatcher.invokeTrigger({
117
+ trigger,
118
+ event: { tick: Date.now() } satisfies TriggerEvent.TimerEvent,
119
+ });
120
+ }).pipe(Effect.provide(ServiceResolver.provide({ space: space.id }, TriggerDispatcher))),
121
+ );
122
+ } catch (error) {
123
+ log.catch(error);
124
+ }
125
+ return;
126
+ }
127
+
128
+ try {
129
+ await functionsServiceClient.forceRunCronTrigger(Context.default(), space.id, trigger.id);
130
+ } catch (error) {
131
+ log.catch(error);
132
+ }
96
133
  };
97
134
 
98
135
  const handleResetCursor = async (trigger: Trigger.Trigger) => {
99
- Obj.change(trigger, (t) => {
100
- Obj.deleteKeys(t, KEY_QUEUE_CURSOR);
136
+ Obj.update(trigger, (trigger) => {
137
+ Obj.deleteKeys(trigger, KEY_QUEUE_CURSOR);
101
138
  });
102
139
  await space.db.flush({ indexes: true });
103
140
  };
104
141
 
105
142
  if (trigger) {
106
143
  return (
107
- <Settings.Item title={t('trigger editor title')} description={t('trigger editor description')}>
144
+ <Settings.Item title={t('trigger-editor.title')} description={t('trigger-editor.description')}>
108
145
  <TriggerEditor
109
146
  db={space.db}
110
147
  trigger={trigger}
@@ -119,47 +156,52 @@ export const AutomationPanel = ({ space, object, initialTrigger, onDone }: Autom
119
156
  }
120
157
 
121
158
  return (
122
- <Settings.Container>
123
- {filteredTriggers.length > 0 && (
124
- <List.Root<Trigger.Trigger>
125
- items={filteredTriggers}
126
- isItem={Schema.is(Trigger.Trigger)}
127
- getId={(field) => field.id}
128
- >
129
- {({ items: filteredTriggers }) => (
130
- <div role='list' className='flex flex-col w-full'>
131
- {filteredTriggers?.map((trigger) => (
132
- <TriggerListItem
133
- key={trigger.id}
134
- trigger={trigger}
135
- functions={functions}
136
- onSelect={handleSelect}
137
- onDelete={handleDelete}
138
- onResetCursor={handleResetCursor}
139
- onForceRun={handleForceRunTrigger}
140
- />
141
- ))}
142
- </div>
143
- )}
144
- </List.Root>
145
- )}
146
-
147
- {filteredTriggers.length > 0 && <Separator classNames='my-4' />}
148
- <IconButton icon='ph--plus--regular' label={t('new trigger label')} onClick={handleAdd} />
149
- </Settings.Container>
159
+ <Settings.Panel>
160
+ <Clipboard.Provider>
161
+ {filteredTriggers.length > 0 && (
162
+ <List.Root<Trigger.Trigger>
163
+ items={filteredTriggers}
164
+ isItem={Schema.is(Trigger.Trigger)}
165
+ getId={(field) => field.id}
166
+ >
167
+ {({ items: filteredTriggers }) => (
168
+ <div role='list' className='flex flex-col w-full'>
169
+ {filteredTriggers?.map((trigger) => (
170
+ <TriggerListItem
171
+ key={trigger.id}
172
+ trigger={trigger}
173
+ functions={functions}
174
+ computeEnvironment={computeEnvironment}
175
+ onSelect={handleSelect}
176
+ onDelete={handleDelete}
177
+ onResetCursor={handleResetCursor}
178
+ onForceRun={handleForceRunTrigger}
179
+ />
180
+ ))}
181
+ </div>
182
+ )}
183
+ </List.Root>
184
+ )}
185
+
186
+ {filteredTriggers.length > 0 && <Separator classNames='my-4' />}
187
+ <IconButton icon='ph--plus--regular' label={t('new-trigger.label')} onClick={handleAdd} />
188
+ </Clipboard.Provider>
189
+ </Settings.Panel>
150
190
  );
151
191
  };
152
192
 
153
193
  const TriggerListItem = ({
154
194
  trigger,
155
195
  functions,
196
+ computeEnvironment,
156
197
  onSelect,
157
198
  onDelete,
158
199
  onResetCursor,
159
200
  onForceRun,
160
201
  }: {
161
202
  trigger: Trigger.Trigger;
162
- functions: Function.Function[];
203
+ functions: Operation.PersistentOperation[];
204
+ computeEnvironment: ComputeEnvironment;
163
205
  onSelect?: (trigger: Trigger.Trigger) => void;
164
206
  onDelete?: (trigger: Trigger.Trigger) => void;
165
207
  onResetCursor?: (trigger: Trigger.Trigger) => void;
@@ -197,7 +239,7 @@ const TriggerListItem = ({
197
239
  const actionProps = useMemo<IconButtonProps | undefined>(() => {
198
240
  if (trigger.spec?.kind === 'timer' && onForceRun) {
199
241
  return {
200
- disabled: !enabled || trigger.spec?.kind !== 'timer',
242
+ disabled: !enabled || computeEnvironment === 'disabled',
201
243
  icon: 'ph--play--regular',
202
244
  label: 'Force run',
203
245
  onClick: handleForceRun,
@@ -212,7 +254,7 @@ const TriggerListItem = ({
212
254
  onClick: handleResetCursor,
213
255
  };
214
256
  }
215
- }, [enabled, trigger.spec?.kind, handleForceRun]);
257
+ }, [computeEnvironment, enabled, trigger.spec?.kind, handleForceRun, onResetCursor]);
216
258
 
217
259
  return (
218
260
  <List.Item<Obj.Snapshot<Trigger.Trigger>>
@@ -268,7 +310,7 @@ const getWebhookUrl = (client: Client, trigger: Trigger.Trigger) => {
268
310
  return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();
269
311
  };
270
312
 
271
- const getFunctionName = (functions: Function.Function[], trigger: Trigger.Trigger) => {
313
+ const getFunctionName = (functions: Operation.PersistentOperation[], trigger: Trigger.Trigger) => {
272
314
  // TODO(wittjosiah): Truncation should be done in the UI.
273
315
  // Warning that the List component is currently a can of worms.
274
316
  const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}…`;
@@ -278,7 +320,7 @@ const getFunctionName = (functions: Function.Function[], trigger: Trigger.Trigge
278
320
 
279
321
  const scriptMatch = (script: Script.Script) => (trigger: Trigger.Trigger) => {
280
322
  const fn = trigger.function?.target;
281
- if (!Obj.instanceOf(Function.Function, fn)) {
323
+ if (!Obj.instanceOf(Operation.PersistentOperation, fn)) {
282
324
  return false;
283
325
  }
284
326