@dxos/plugin-automation 0.8.4-main.74a063c4e0 → 0.8.4-main.765dc60934

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 (278) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/AutomationPanel-HI63JQ2X.mjs +11 -0
  4. package/dist/lib/neutral/AutomationPlugin.mjs +10 -0
  5. package/dist/lib/{browser/cli/index.mjs → neutral/AutomationPlugin.node.mjs} +102 -112
  6. package/dist/lib/neutral/AutomationPlugin.node.mjs.map +7 -0
  7. package/dist/lib/neutral/AutomationSettings-LM5GSR4H.mjs +31 -0
  8. package/dist/lib/neutral/AutomationSettings-LM5GSR4H.mjs.map +7 -0
  9. package/dist/lib/neutral/FunctionsContainer-CEMKJIGV.mjs +38 -0
  10. package/dist/lib/neutral/FunctionsContainer-CEMKJIGV.mjs.map +7 -0
  11. package/dist/lib/neutral/FunctionsPanel-SVRKRUXZ.mjs +97 -0
  12. package/dist/lib/neutral/FunctionsPanel-SVRKRUXZ.mjs.map +7 -0
  13. package/dist/lib/neutral/FunctionsRegistry-7ITCFJCW.mjs +95 -0
  14. package/dist/lib/neutral/FunctionsRegistry-7ITCFJCW.mjs.map +7 -0
  15. package/dist/lib/neutral/TriggerSettings-XCHIZPOR.mjs +9 -0
  16. package/dist/lib/neutral/app-graph-builder-GDCGRYEP.mjs +75 -0
  17. package/dist/lib/neutral/app-graph-builder-GDCGRYEP.mjs.map +7 -0
  18. package/dist/lib/neutral/capabilities/index.mjs +15 -0
  19. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  20. package/dist/lib/neutral/capabilities/node.mjs +13 -0
  21. package/dist/lib/neutral/capabilities/node.mjs.map +7 -0
  22. package/dist/lib/neutral/chunk-2JP77CMN.mjs +42 -0
  23. package/dist/lib/neutral/chunk-2JP77CMN.mjs.map +7 -0
  24. package/dist/lib/neutral/chunk-6CKX6RIL.mjs +270 -0
  25. package/dist/lib/neutral/chunk-6CKX6RIL.mjs.map +7 -0
  26. package/dist/lib/neutral/chunk-ATECY555.mjs +20 -0
  27. package/dist/lib/neutral/chunk-ATECY555.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-CNFKEN7S.mjs +37 -0
  29. package/dist/lib/neutral/chunk-CNFKEN7S.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-DSCOLDT5.mjs +93 -0
  31. package/dist/lib/neutral/chunk-DSCOLDT5.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-K3C5ZTZA.mjs +285 -0
  33. package/dist/lib/neutral/chunk-K3C5ZTZA.mjs.map +7 -0
  34. package/dist/lib/neutral/chunk-M3TIHFXN.mjs +8 -0
  35. package/dist/lib/neutral/chunk-M3TIHFXN.mjs.map +7 -0
  36. package/dist/lib/neutral/chunk-YV7TKOVL.mjs +12 -0
  37. package/dist/lib/neutral/chunk-YV7TKOVL.mjs.map +7 -0
  38. package/dist/lib/neutral/components/index.mjs +16 -0
  39. package/dist/lib/neutral/components/index.mjs.map +7 -0
  40. package/dist/lib/neutral/compute-runtime-D7MPZJ4R.mjs +222 -0
  41. package/dist/lib/neutral/compute-runtime-D7MPZJ4R.mjs.map +7 -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/{browser/create-trigger-from-template-JPF5BFMX.mjs → neutral/create-trigger-from-template-7K3OYOHQ.mjs} +13 -22
  45. package/dist/lib/neutral/create-trigger-from-template-7K3OYOHQ.mjs.map +7 -0
  46. package/dist/lib/neutral/hooks/index.mjs +129 -0
  47. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  48. package/dist/lib/neutral/index.mjs +20 -0
  49. package/dist/lib/neutral/index.mjs.map +7 -0
  50. package/dist/lib/neutral/meta.json +1 -0
  51. package/dist/lib/neutral/meta.mjs +8 -0
  52. package/dist/lib/neutral/meta.mjs.map +7 -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/operations/index.mjs.map +7 -0
  57. package/dist/lib/neutral/plugin.mjs +16 -0
  58. package/dist/lib/neutral/plugin.mjs.map +7 -0
  59. package/dist/lib/neutral/react-surface-3OGMAMKV.mjs +57 -0
  60. package/dist/lib/neutral/react-surface-3OGMAMKV.mjs.map +7 -0
  61. package/dist/lib/neutral/testing.mjs +8 -0
  62. package/dist/lib/neutral/testing.mjs.map +7 -0
  63. package/dist/lib/neutral/translations.mjs +47 -0
  64. package/dist/lib/neutral/translations.mjs.map +7 -0
  65. package/dist/lib/neutral/types/index.mjs +16 -0
  66. package/dist/lib/neutral/types/index.mjs.map +7 -0
  67. package/dist/types/src/AutomationPlugin.d.ts +1 -0
  68. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  69. package/dist/types/src/{cli/plugin.d.ts → AutomationPlugin.node.d.ts} +2 -1
  70. package/dist/types/src/AutomationPlugin.node.d.ts.map +1 -0
  71. package/dist/types/src/AutomationPlugin.test.d.ts +2 -0
  72. package/dist/types/src/AutomationPlugin.test.d.ts.map +1 -0
  73. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/compute-runtime.d.ts +8 -0
  75. package/dist/types/src/capabilities/compute-runtime.d.ts.map +1 -1
  76. package/dist/types/src/capabilities/index.d.ts +2 -2
  77. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/node.d.ts +4 -1
  79. package/dist/types/src/capabilities/node.d.ts.map +1 -1
  80. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  81. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  83. package/dist/types/src/commands/index.d.ts.map +1 -0
  84. package/dist/types/src/{cli/commands → commands}/trigger/create/index.d.ts +6 -6
  85. package/dist/types/src/commands/trigger/create/index.d.ts.map +1 -0
  86. package/dist/types/src/{cli/commands → commands}/trigger/create/queue.d.ts +1 -1
  87. package/dist/types/src/commands/trigger/create/queue.d.ts.map +1 -0
  88. package/dist/types/src/{cli/commands → commands}/trigger/create/subscription.d.ts +1 -1
  89. package/dist/types/src/commands/trigger/create/subscription.d.ts.map +1 -0
  90. package/dist/types/src/{cli/commands → commands}/trigger/create/timer.d.ts +1 -1
  91. package/dist/types/src/commands/trigger/create/timer.d.ts.map +1 -0
  92. package/dist/types/src/{cli/commands → commands}/trigger/index.d.ts +7 -7
  93. package/dist/types/src/commands/trigger/index.d.ts.map +1 -0
  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 -29
  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 +5 -5
  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 -90
  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/FunctionsContainer/FunctionsContainer.d.ts +2 -4
  125. package/dist/types/src/containers/FunctionsContainer/FunctionsContainer.d.ts.map +1 -1
  126. package/dist/types/src/containers/TriggerSettings/TriggerSettings.d.ts +3 -3
  127. package/dist/types/src/containers/TriggerSettings/TriggerSettings.d.ts.map +1 -1
  128. package/dist/types/src/hooks/useComputeRuntime.d.ts +1 -0
  129. package/dist/types/src/hooks/useComputeRuntime.d.ts.map +1 -1
  130. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +1 -1
  131. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -1
  132. package/dist/types/src/hooks/useComputeRuntimeService.d.ts +14 -2
  133. package/dist/types/src/hooks/useComputeRuntimeService.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 +2 -2
  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 +3 -3
  140. package/dist/types/src/operations/create-trigger-from-template.d.ts.map +1 -1
  141. package/dist/types/src/operations/index.d.ts +1 -2
  142. package/dist/types/src/operations/index.d.ts.map +1 -1
  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 +77 -77
  146. package/dist/types/src/testing.d.ts +2 -0
  147. package/dist/types/src/testing.d.ts.map +1 -0
  148. package/dist/types/src/translations.d.ts +32 -30
  149. package/dist/types/src/translations.d.ts.map +1 -1
  150. package/dist/types/src/types/AutomationCapabilities.d.ts +22 -0
  151. package/dist/types/src/types/AutomationCapabilities.d.ts.map +1 -0
  152. package/dist/types/src/types/AutomationEvents.d.ts +3 -0
  153. package/dist/types/src/types/AutomationEvents.d.ts.map +1 -0
  154. package/dist/types/src/{operations/definitions.d.ts → types/AutomationOperation.d.ts} +5 -5
  155. package/dist/types/src/types/AutomationOperation.d.ts.map +1 -0
  156. package/dist/types/src/types/index.d.ts +3 -2
  157. package/dist/types/src/types/index.d.ts.map +1 -1
  158. package/dist/types/src/types/schema.d.ts.map +1 -1
  159. package/dist/types/tsconfig.tsbuildinfo +1 -1
  160. package/package.json +113 -82
  161. package/src/AutomationPlugin.node.ts +29 -0
  162. package/src/AutomationPlugin.test.ts +27 -0
  163. package/src/AutomationPlugin.tsx +7 -7
  164. package/src/capabilities/app-graph-builder.ts +10 -6
  165. package/src/capabilities/compute-runtime.ts +218 -138
  166. package/src/capabilities/index.ts +1 -1
  167. package/src/capabilities/node.ts +6 -0
  168. package/src/capabilities/operation-handler.ts +1 -1
  169. package/src/capabilities/react-surface.tsx +6 -6
  170. package/src/{cli/commands → commands}/trigger/create/queue.ts +5 -9
  171. package/src/{cli/commands → commands}/trigger/create/subscription.ts +6 -10
  172. package/src/{cli/commands → commands}/trigger/create/timer.ts +2 -6
  173. package/src/{cli/commands → commands}/trigger/list.ts +5 -3
  174. package/src/{cli/commands → commands}/trigger/remove.ts +2 -3
  175. package/src/{cli/commands → commands}/trigger/update/queue.ts +13 -14
  176. package/src/{cli/commands → commands}/trigger/update/subscription.ts +9 -10
  177. package/src/{cli/commands → commands}/trigger/update/timer.ts +10 -11
  178. package/src/{cli/commands → commands}/trigger/util.ts +19 -16
  179. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +9 -4
  180. package/src/components/AutomationPanel/AutomationPanel.tsx +40 -35
  181. package/src/components/FunctionsPanel/FunctionsPanel.tsx +4 -4
  182. package/src/components/FunctionsRegistry/FunctionsRegistry.tsx +14 -9
  183. package/src/components/TriggerEditor/FunctionInputEditor.tsx +1 -1
  184. package/src/components/TriggerEditor/SpecSelector.tsx +6 -11
  185. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +12 -7
  186. package/src/components/TriggerEditor/TriggerEditor.tsx +8 -9
  187. package/src/containers/AutomationSettings/AutomationSettings.tsx +5 -2
  188. package/src/containers/FunctionsContainer/FunctionsContainer.tsx +3 -4
  189. package/src/containers/TriggerSettings/TriggerSettings.tsx +29 -7
  190. package/src/hooks/useComputeRuntime.ts +17 -3
  191. package/src/hooks/useComputeRuntimeCallback.ts +2 -3
  192. package/src/hooks/useComputeRuntimeService.ts +49 -9
  193. package/src/hooks/useTriggerRuntimeControls.ts +6 -3
  194. package/src/index.ts +2 -2
  195. package/src/meta.ts +2 -1
  196. package/src/operations/create-trigger-from-template.ts +51 -55
  197. package/src/operations/index.ts +1 -3
  198. package/src/plugin.ts +11 -0
  199. package/src/testing/test-functions.ts +6 -6
  200. package/src/testing.ts +7 -0
  201. package/src/translations.ts +8 -6
  202. package/src/types/AutomationCapabilities.ts +48 -0
  203. package/src/types/AutomationEvents.ts +11 -0
  204. package/src/{operations/definitions.ts → types/AutomationOperation.ts} +4 -2
  205. package/src/types/index.ts +4 -2
  206. package/dist/lib/browser/chunk-POEIL4RN.mjs +0 -44
  207. package/dist/lib/browser/chunk-POEIL4RN.mjs.map +0 -7
  208. package/dist/lib/browser/chunk-WQLEMRPU.mjs +0 -54
  209. package/dist/lib/browser/chunk-WQLEMRPU.mjs.map +0 -7
  210. package/dist/lib/browser/cli/index.mjs.map +0 -7
  211. package/dist/lib/browser/create-trigger-from-template-JPF5BFMX.mjs.map +0 -7
  212. package/dist/lib/browser/hooks/index.mjs +0 -85
  213. package/dist/lib/browser/hooks/index.mjs.map +0 -7
  214. package/dist/lib/browser/index.mjs +0 -90
  215. package/dist/lib/browser/index.mjs.map +0 -7
  216. package/dist/lib/browser/meta.json +0 -1
  217. package/dist/lib/browser/operations/index.mjs +0 -14
  218. package/dist/lib/browser/operations/index.mjs.map +0 -7
  219. package/dist/lib/browser/types/index.mjs +0 -14
  220. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  221. package/dist/lib/node-esm/chunk-JWZAVQLF.mjs +0 -56
  222. package/dist/lib/node-esm/chunk-JWZAVQLF.mjs.map +0 -7
  223. package/dist/lib/node-esm/chunk-SP3P4OUI.mjs +0 -45
  224. package/dist/lib/node-esm/chunk-SP3P4OUI.mjs.map +0 -7
  225. package/dist/lib/node-esm/cli/index.mjs +0 -1123
  226. package/dist/lib/node-esm/cli/index.mjs.map +0 -7
  227. package/dist/lib/node-esm/create-trigger-from-template-FT75A4SF.mjs +0 -78
  228. package/dist/lib/node-esm/create-trigger-from-template-FT75A4SF.mjs.map +0 -7
  229. package/dist/lib/node-esm/hooks/index.mjs +0 -86
  230. package/dist/lib/node-esm/hooks/index.mjs.map +0 -7
  231. package/dist/lib/node-esm/index.mjs +0 -91
  232. package/dist/lib/node-esm/index.mjs.map +0 -7
  233. package/dist/lib/node-esm/meta.json +0 -1
  234. package/dist/lib/node-esm/operations/index.mjs +0 -15
  235. package/dist/lib/node-esm/operations/index.mjs.map +0 -7
  236. package/dist/lib/node-esm/types/index.mjs +0 -15
  237. package/dist/types/src/cli/commands/index.d.ts.map +0 -1
  238. package/dist/types/src/cli/commands/trigger/create/index.d.ts.map +0 -1
  239. package/dist/types/src/cli/commands/trigger/create/queue.d.ts.map +0 -1
  240. package/dist/types/src/cli/commands/trigger/create/subscription.d.ts.map +0 -1
  241. package/dist/types/src/cli/commands/trigger/create/timer.d.ts.map +0 -1
  242. package/dist/types/src/cli/commands/trigger/index.d.ts.map +0 -1
  243. package/dist/types/src/cli/commands/trigger/list.d.ts.map +0 -1
  244. package/dist/types/src/cli/commands/trigger/options.d.ts.map +0 -1
  245. package/dist/types/src/cli/commands/trigger/remove.d.ts.map +0 -1
  246. package/dist/types/src/cli/commands/trigger/update/index.d.ts.map +0 -1
  247. package/dist/types/src/cli/commands/trigger/update/queue.d.ts.map +0 -1
  248. package/dist/types/src/cli/commands/trigger/update/subscription.d.ts.map +0 -1
  249. package/dist/types/src/cli/commands/trigger/update/timer.d.ts.map +0 -1
  250. package/dist/types/src/cli/commands/trigger/util.d.ts.map +0 -1
  251. package/dist/types/src/cli/index.d.ts +0 -2
  252. package/dist/types/src/cli/index.d.ts.map +0 -1
  253. package/dist/types/src/cli/plugin.d.ts.map +0 -1
  254. package/dist/types/src/operations/definitions.d.ts.map +0 -1
  255. package/dist/types/src/types/capabilities.d.ts +0 -25
  256. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  257. package/dist/types/src/types/events.d.ts +0 -5
  258. package/dist/types/src/types/events.d.ts.map +0 -1
  259. package/src/cli/index.ts +0 -5
  260. package/src/cli/plugin.ts +0 -23
  261. package/src/types/capabilities.ts +0 -56
  262. package/src/types/events.ts +0 -11
  263. /package/dist/lib/{browser/chunk-J5LGTIGS.mjs.map → neutral/AutomationPanel-HI63JQ2X.mjs.map} +0 -0
  264. /package/dist/lib/{browser/types/index.mjs.map → neutral/AutomationPlugin.mjs.map} +0 -0
  265. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/TriggerSettings-XCHIZPOR.mjs.map} +0 -0
  266. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  267. /package/dist/lib/{node-esm/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  268. /package/dist/types/src/{cli/commands → commands}/index.d.ts +0 -0
  269. /package/dist/types/src/{cli/commands → commands}/trigger/list.d.ts +0 -0
  270. /package/dist/types/src/{cli/commands → commands}/trigger/options.d.ts +0 -0
  271. /package/dist/types/src/{cli/commands → commands}/trigger/update/queue.d.ts +0 -0
  272. /package/dist/types/src/{cli/commands → commands}/trigger/update/subscription.d.ts +0 -0
  273. /package/dist/types/src/{cli/commands → commands}/trigger/update/timer.d.ts +0 -0
  274. /package/src/{cli/commands → commands}/index.ts +0 -0
  275. /package/src/{cli/commands → commands}/trigger/create/index.ts +0 -0
  276. /package/src/{cli/commands → commands}/trigger/index.ts +0 -0
  277. /package/src/{cli/commands → commands}/trigger/options.ts +0 -0
  278. /package/src/{cli/commands → commands}/trigger/update/index.ts +0 -0
@@ -7,33 +7,38 @@ import * as BrowserKeyValueStore from '@effect/platform-browser/BrowserKeyValueS
7
7
  import * as KeyValueStore from '@effect/platform/KeyValueStore';
8
8
  import * as Context from 'effect/Context';
9
9
  import * as Effect from 'effect/Effect';
10
+ import * as Fiber from 'effect/Fiber';
10
11
  import * as Layer from 'effect/Layer';
11
12
  import * as ManagedRuntime from 'effect/ManagedRuntime';
12
13
 
13
- import { AiService, GenericToolkit } from '@dxos/ai';
14
+ import { AiService, OpaqueToolkit } from '@dxos/ai';
14
15
  import { Capabilities, Capability, type CapabilityManager } from '@dxos/app-framework';
15
16
  import { AppCapabilities } from '@dxos/app-toolkit';
16
- import {
17
- AgentService,
18
- AiContextBinder,
19
- AiContextService,
20
- AiConversation,
21
- AiConversationService,
22
- ToolExecutionServices,
23
- } from '@dxos/assistant';
24
- import { Blueprint } from '@dxos/blueprints';
17
+ import { AiContext, AiSession } from '@dxos/assistant';
18
+ import { McpServer } from '@dxos/assistant-toolkit';
25
19
  import { ClientService } from '@dxos/client';
26
- import { SpaceProperties } from '@dxos/client/echo';
20
+ import { SpaceProperties } from '@dxos/client-protocol';
21
+ import {
22
+ Blueprint,
23
+ Credential,
24
+ Operation,
25
+ OperationHandlerSet,
26
+ OperationRegistry,
27
+ ServiceNotAvailableError,
28
+ Trace,
29
+ } from '@dxos/compute';
27
30
  import { Resource } from '@dxos/context';
28
- import { Database, DXN, Feed, Obj, Query, Ref } from '@dxos/echo';
31
+ import { Database, DXN, Feed, Filter, Obj } from '@dxos/echo';
32
+ import { AtomObj } from '@dxos/echo-atom';
29
33
  import { createFeedServiceLayer } from '@dxos/echo-db';
30
- import { acquireReleaseResource } from '@dxos/effect';
34
+ import { acquireReleaseResource, asyncTaskTaggingLayer } from '@dxos/effect';
31
35
  import {
32
- CredentialsService,
36
+ FunctionInvocationService,
33
37
  feedServiceFromQueueServiceLayer,
34
38
  QueueService,
35
- ServiceNotAvailableError,
39
+ credentialsLayerFromDatabase,
36
40
  } from '@dxos/functions';
41
+ import { AgentService } from '@dxos/functions-runtime';
37
42
  import {
38
43
  FeedTraceSink,
39
44
  FunctionImplementationResolver,
@@ -41,14 +46,13 @@ import {
41
46
  ProcessManager,
42
47
  RemoteFunctionExecutionService,
43
48
  ServiceResolver,
44
- TracingServiceExt,
45
49
  TriggerDispatcher,
46
50
  TriggerStateStore,
47
51
  } from '@dxos/functions-runtime';
48
52
  import { invariant } from '@dxos/invariant';
49
53
  import { type SpaceId } from '@dxos/keys';
50
- import { OperationHandlerSet, OperationRegistry } from '@dxos/operation';
51
- import { ClientCapabilities } from '@dxos/plugin-client/types';
54
+ import { log } from '@dxos/log';
55
+ import { ClientCapabilities } from '@dxos/plugin-client';
52
56
 
53
57
  import { AutomationCapabilities } from '#types';
54
58
 
@@ -62,11 +66,30 @@ export default Capability.makeModule(
62
66
  }),
63
67
  );
64
68
 
69
+ declare global {
70
+ interface ImportMeta {
71
+ env: ImportMetaEnv;
72
+ }
73
+
74
+ interface ImportMetaEnv {
75
+ DEV: boolean;
76
+ }
77
+ }
78
+
79
+ const isDev = import.meta.env.DEV ?? false;
80
+
81
+ /** Node / test environments have no `localStorage`; browser keeps persistent trigger state. */
82
+ const triggerStateStoreLayer =
83
+ typeof globalThis.localStorage !== 'undefined'
84
+ ? TriggerStateStore.layerKv.pipe(Layer.provide(BrowserKeyValueStore.layerLocalStorage))
85
+ : TriggerStateStore.layerMemory;
86
+
65
87
  /**
66
88
  * Adapts plugin capabilities to runtime layers.
67
89
  */
68
90
  class ComputeRuntimeProviderImpl extends Resource implements AutomationCapabilities.ComputeRuntimeProvider {
69
91
  readonly #runtimes = new Map<SpaceId, AutomationCapabilities.ComputeRuntime>();
92
+ readonly #subscriptions = new Map<SpaceId, () => void>();
70
93
  readonly #capabilities: CapabilityManager.CapabilityManager;
71
94
 
72
95
  constructor(capabilities: CapabilityManager.CapabilityManager) {
@@ -77,17 +100,24 @@ class ComputeRuntimeProviderImpl extends Resource implements AutomationCapabilit
77
100
  protected override async _open() {}
78
101
 
79
102
  protected override async _close() {
103
+ for (const unsubscribe of this.#subscriptions.values()) {
104
+ unsubscribe();
105
+ }
106
+ this.#subscriptions.clear();
80
107
  await Promise.all(Array.from(this.#runtimes.values()).map((rt) => rt.dispose()));
81
108
  this.#runtimes.clear();
82
109
  }
83
110
 
84
111
  getRuntime(spaceId: SpaceId): AutomationCapabilities.ComputeRuntime {
85
112
  if (this.#runtimes.has(spaceId)) {
113
+ log('getRuntime cache hit', { spaceId });
86
114
  return this.#runtimes.get(spaceId)!;
87
115
  }
116
+ log('getRuntime building', { spaceId });
88
117
 
89
- const layer = Layer.unwrapEffect(
118
+ const layer = Layer.unwrapScoped(
90
119
  Effect.gen(this, function* () {
120
+ log('compute runtime layer build: start', { spaceId });
91
121
  const client = this.#capabilities.get(ClientCapabilities.Client);
92
122
  const aiServiceLayer =
93
123
  this.#capabilities.get(AppCapabilities.AiServiceLayer) ?? Layer.die('AiService not found');
@@ -98,10 +128,10 @@ class ComputeRuntimeProviderImpl extends Resource implements AutomationCapabilit
98
128
  ...this.#capabilities.getAll(Capabilities.OperationHandler),
99
129
  );
100
130
 
101
- const genericToolkitProvider = Layer.succeed(GenericToolkit.GenericToolkitProvider, {
131
+ const opaqueToolkitProvider = Layer.succeed(OpaqueToolkit.OpaqueToolkitProvider, {
102
132
  getToolkit: () => {
103
133
  const toolkits = this.#capabilities.getAll(AppCapabilities.Toolkit);
104
- return GenericToolkit.merge(...toolkits);
134
+ return OpaqueToolkit.merge(...toolkits);
105
135
  },
106
136
  });
107
137
 
@@ -111,136 +141,186 @@ class ComputeRuntimeProviderImpl extends Resource implements AutomationCapabilit
111
141
 
112
142
  const space = client.spaces.get(spaceId);
113
143
  invariant(space, `Invalid space: ${spaceId}`);
144
+ log('compute runtime layer build: waiting for space ready', { spaceId });
145
+ const waitStarted = Date.now();
114
146
  yield* Effect.promise(() => space.waitUntilReady());
147
+ log('compute runtime layer build: space ready', { spaceId, waitMs: Date.now() - waitStarted });
148
+
149
+ // Maintain a live query of space-level MCP server configs.
150
+ const mcpQuery = space.db.query(Filter.type(McpServer.McpServer));
151
+ this.#subscriptions.set(spaceId, mcpQuery.subscribe());
115
152
 
116
- return Layer.mergeAll(
117
- TriggerDispatcher.layer({ timeControl: 'natural' }),
118
- Layer.succeed(Blueprint.RegistryService, new Blueprint.Registry(blueprints)),
119
- ).pipe(
120
- Layer.provideMerge(AgentService.layer()),
121
- Layer.provideMerge(ProcessManager.ProcessOperationInvoker.layer),
122
- Layer.provideMerge(ProcessManager.layer()),
123
- // TODO(dmaretskyi): Duped in assistant testing layer.
124
- Layer.provideMerge(
125
- // TODO(dmaretskyi): Refactor to be able to merge resovler layers, also consider service mesh achitecture.
126
- Layer.effect(
127
- ServiceResolver.ServiceResolver,
128
- Effect.gen(function* () {
129
- const services = yield* Effect.context<Database.Service | Feed.FeedService>().pipe(
130
- Effect.map(Context.pick(Database.Service, Feed.FeedService)),
131
- Effect.map(Layer.succeedContext),
132
- );
133
- // AiContextBinder.
134
- return ServiceResolver.compose(
135
- ServiceResolver.succeed(AiContextService, (context) =>
136
- Effect.gen(function* () {
137
- if (!context.conversation) {
138
- return yield* Effect.fail(new ServiceNotAvailableError(AiContextService.key));
139
- }
140
- const feed = yield* Database.resolve(DXN.parse(context.conversation), Feed.Feed).pipe(
141
- Effect.orDie,
142
- );
143
- const runtime = yield* Effect.runtime<Feed.FeedService>();
144
- const binder = yield* acquireReleaseResource(
145
- () =>
146
- new AiContextBinder({
147
- feed,
148
- runtime,
149
- }),
150
- );
151
- return { binder };
152
- }).pipe(Effect.provide(services)),
153
- ),
154
- // AiConversationService.
155
- ServiceResolver.succeed(AiConversationService, (context) =>
156
- Effect.gen(function* () {
157
- if (!context.conversation) {
158
- return yield* Effect.fail(new ServiceNotAvailableError(AiConversationService.key));
159
- }
160
- const feed = yield* Database.resolve(DXN.parse(context.conversation), Feed.Feed).pipe(
161
- Effect.orDie,
162
- );
163
- const runtime = yield* Effect.runtime<Feed.FeedService>();
164
- const conversation = yield* acquireReleaseResource(
165
- () =>
166
- new AiConversation({
167
- feed,
168
- runtime,
169
- }),
170
- );
171
- return conversation;
172
- }).pipe(Effect.provide(services)),
173
- ),
174
- yield* ServiceResolver.fromRequirements(
175
- Database.Service,
176
- GenericToolkit.GenericToolkitProvider,
177
- Feed.FeedService,
178
- AiService.AiService,
179
- OperationRegistry.Service,
180
- Blueprint.RegistryService,
181
- ),
182
- );
153
+ log('compute runtime layer build: composing inner layer', { spaceId });
154
+ return Layer.scopedDiscard(
155
+ Effect.gen(function* () {
156
+ log('compute runtime inner layer: acquiring services', { spaceId });
157
+ const registry = yield* Registry.AtomRegistry;
158
+ const triggerDispatcher = yield* TriggerDispatcher;
159
+ log('compute runtime inner layer: services acquired', { spaceId });
160
+ // Track the in-flight start/stop so a new transition cancels the previous one
161
+ // (preserving ordering on rapid toggles) and surfaces failures via the Effect logger.
162
+ let inFlight: Fiber.RuntimeFiber<unknown, unknown> | undefined;
163
+ const transition = (effect: Effect.Effect<unknown, unknown>) => {
164
+ if (inFlight) {
165
+ Effect.runFork(Fiber.interrupt(inFlight));
166
+ }
167
+ inFlight = Effect.runFork(
168
+ effect.pipe(
169
+ Effect.tapErrorCause((cause) => Effect.logError('trigger dispatcher transition failed', cause)),
170
+ ),
171
+ );
172
+ };
173
+ const unsubscribe = registry.subscribe(
174
+ AtomObj.make(space.properties),
175
+ (properties: Obj.Snapshot<SpaceProperties>) => {
176
+ const computeEnvironment = properties.computeEnvironment ?? 'local';
177
+ transition(computeEnvironment === 'local' ? triggerDispatcher.start() : triggerDispatcher.stop());
178
+ },
179
+ { immediate: true },
180
+ );
181
+ yield* Effect.addFinalizer(() =>
182
+ Effect.sync(() => {
183
+ log('compute runtime inner layer: finalize', { spaceId });
184
+ unsubscribe();
185
+ if (inFlight) {
186
+ Effect.runFork(Fiber.interrupt(inFlight));
187
+ }
188
+ }),
189
+ );
190
+ log('compute runtime inner layer: acquire complete', { spaceId });
191
+ }),
192
+ )
193
+ .pipe(
194
+ Layer.provideMerge(TriggerDispatcher.layer({ timeControl: 'natural' })),
195
+ Layer.provideMerge(
196
+ AgentService.layer({
197
+ getMcpServers: () =>
198
+ mcpQuery.results
199
+ .filter(Obj.instanceOf(McpServer.McpServer))
200
+ .filter((server) => server.enabled !== false)
201
+ .map(({ url, protocol, apiKey }) => ({ url, protocol, apiKey })),
183
202
  }),
184
203
  ),
185
- ),
186
- Layer.provideMerge(Layer.succeed(Blueprint.RegistryService, new Blueprint.Registry(blueprints))),
187
- Layer.provideMerge(OperationRegistry.layer),
188
- Layer.provideMerge(Layer.succeed(Capability.Service, this.#capabilities)),
189
- Layer.provideMerge(Layer.succeed(Registry.AtomRegistry, registry)),
190
- Layer.provideMerge(
191
- Layer.mergeAll(
192
- TracingServiceLive,
193
- FeedTraceSink.layerLive,
194
- TriggerStateStore.layerKv.pipe(Layer.provide(BrowserKeyValueStore.layerLocalStorage)),
195
- ToolExecutionServices,
196
- KeyValueStore.layerMemory,
204
+ Layer.provideMerge(ProcessManager.ProcessOperationInvoker.layer),
205
+ Layer.provideMerge(ProcessManager.layer({ runtimeName: Trace.CommonRuntimeName.local })),
206
+ // TODO(dmaretskyi): Duped in assistant testing layer.
207
+ Layer.provideMerge(
208
+ // TODO(dmaretskyi): Refactor to be able to merge resovler layers, also consider service mesh achitecture.
209
+ Layer.effect(
210
+ ServiceResolver.ServiceResolver,
211
+ Effect.gen(function* () {
212
+ const services = yield* Effect.context<Database.Service | Feed.FeedService>().pipe(
213
+ Effect.map(Context.pick(Database.Service, Feed.FeedService)),
214
+ Effect.map(Layer.succeedContext),
215
+ );
216
+ // AiContext.Binder.
217
+ return ServiceResolver.compose(
218
+ ServiceResolver.succeed(AiContext.Service, (context) =>
219
+ Effect.gen(function* () {
220
+ if (!context.conversation) {
221
+ return yield* Effect.fail(new ServiceNotAvailableError(AiContext.Service.key));
222
+ }
223
+ const feed = yield* Database.resolve(DXN.parse(context.conversation), Feed.Feed).pipe(
224
+ Effect.orDie,
225
+ );
226
+ const runtime = yield* Effect.runtime<Feed.FeedService>();
227
+ const binder = yield* acquireReleaseResource(
228
+ () =>
229
+ new AiContext.Binder({
230
+ feed,
231
+ runtime,
232
+ }),
233
+ );
234
+ return { binder };
235
+ }).pipe(Effect.provide(services)),
236
+ ),
237
+ // AiSession.Service.
238
+ ServiceResolver.succeed(AiSession.Service, (context) =>
239
+ Effect.gen(function* () {
240
+ if (!context.conversation) {
241
+ return yield* Effect.fail(new ServiceNotAvailableError(AiSession.Service.key));
242
+ }
243
+ const feed = yield* Database.resolve(DXN.parse(context.conversation), Feed.Feed).pipe(
244
+ Effect.orDie,
245
+ );
246
+ const runtime = yield* Effect.runtime<Feed.FeedService>();
247
+ const session = yield* acquireReleaseResource(
248
+ () =>
249
+ new AiSession.Session({
250
+ feed,
251
+ runtime,
252
+ }),
253
+ );
254
+ return session;
255
+ }).pipe(Effect.provide(services)),
256
+ ),
257
+ yield* ServiceResolver.fromRequirements(
258
+ Database.Service,
259
+ OpaqueToolkit.OpaqueToolkitProvider,
260
+ Feed.FeedService,
261
+ QueueService,
262
+ AiService.AiService,
263
+ OperationRegistry.Service,
264
+ Blueprint.RegistryService,
265
+ Credential.CredentialsService,
266
+ ),
267
+ );
268
+ }),
269
+ ),
270
+ ),
271
+ Layer.provideMerge(Layer.succeed(Blueprint.RegistryService, new Blueprint.Registry(blueprints))),
272
+ Layer.provideMerge(Layer.succeed(Capability.Service, this.#capabilities)),
273
+ Layer.provideMerge(Layer.succeed(Registry.AtomRegistry, registry)),
274
+ Layer.provideMerge(
275
+ Layer.mergeAll(FeedTraceSink.layerLive, triggerStateStoreLayer, KeyValueStore.layerMemory),
276
+ ),
277
+ Layer.provideMerge(OperationRegistry.layer),
278
+ Layer.provideMerge(feedServiceFromQueueServiceLayer),
279
+ Layer.provideMerge(OperationHandlerSet.provide(operationHandlers)),
280
+ Layer.provideMerge(
281
+ Layer.effect(
282
+ Operation.Service,
283
+ Effect.gen(function* () {
284
+ const fis = yield* FunctionInvocationService;
285
+ return {
286
+ invoke: (op: any, ...args: any[]) => (fis.invokeFunction as any)(op, args[0]),
287
+ schedule: (op: any, ...args: any[]) =>
288
+ (fis.invokeFunction as any)(op, args[0]).pipe(Effect.fork, Effect.asVoid),
289
+ invokePromise: async () => ({ error: new Error('Not implemented') }),
290
+ } as unknown as Operation.OperationService;
291
+ }),
292
+ ),
197
293
  ),
198
- ),
199
- Layer.provideMerge(feedServiceFromQueueServiceLayer),
200
- Layer.provideMerge(OperationHandlerSet.provide(operationHandlers)),
201
- Layer.provideMerge(
202
- FunctionInvocationServiceLayerWithLocalLoopbackExecutor.pipe(
203
- Layer.provideMerge(genericToolkitProvider),
204
- Layer.provideMerge(FunctionImplementationResolver.layerTest({ functions: operationHandlers })),
205
- Layer.provideMerge(
206
- RemoteFunctionExecutionService.fromClient(
207
- client,
208
- client.config.get('runtime.client.edgeFeatures.agents') ? spaceId : undefined,
294
+ Layer.provideMerge(
295
+ FunctionInvocationServiceLayerWithLocalLoopbackExecutor.pipe(
296
+ Layer.provideMerge(FunctionImplementationResolver.layerTest({ functions: operationHandlers })),
297
+ Layer.provideMerge(
298
+ client.config.values.runtime?.services?.edge?.url
299
+ ? RemoteFunctionExecutionService.fromClient(
300
+ client,
301
+ client.config.get('runtime.client.edgeFeatures.agents') ? spaceId : undefined,
302
+ )
303
+ : RemoteFunctionExecutionService.layerMock,
209
304
  ),
210
305
  ),
211
- Layer.provideMerge(aiServiceLayer),
212
- Layer.provideMerge(CredentialsService.layerFromDatabase()),
213
- Layer.provideMerge(ClientService.fromClient(client)),
214
- Layer.provideMerge(space ? Database.layer(space.db) : Database.notAvailable),
215
- Layer.provideMerge(space ? QueueService.layer(space.queues) : QueueService.notAvailable),
216
- Layer.provideMerge(space ? createFeedServiceLayer(space.queues) : Feed.notAvailable),
217
306
  ),
218
- ),
219
- );
307
+ Layer.provideMerge(opaqueToolkitProvider),
308
+ Layer.provideMerge(aiServiceLayer),
309
+ Layer.provideMerge(credentialsLayerFromDatabase()),
310
+ Layer.provideMerge(ClientService.fromClient(client)),
311
+ Layer.provideMerge(space ? Database.layer(space.db) : Database.notAvailable),
312
+ )
313
+ .pipe(
314
+ Layer.provideMerge(space ? QueueService.layer(space.queues) : QueueService.notAvailable),
315
+ Layer.provideMerge(space ? createFeedServiceLayer(space.queues) : Feed.notAvailable),
316
+ Layer.provideMerge(isDev ? asyncTaskTaggingLayer() : Layer.empty),
317
+ );
220
318
  }),
221
319
  );
222
320
 
223
321
  const runtime = ManagedRuntime.make(layer);
322
+ log('getRuntime ready (managed runtime created)', { spaceId });
224
323
  this.#runtimes.set(spaceId, runtime);
225
324
  return runtime;
226
325
  }
227
326
  }
228
-
229
- const TracingServiceLive = Layer.unwrapEffect(
230
- Effect.gen(function* () {
231
- const objects = yield* Database.runQuery(Query.type(SpaceProperties));
232
- const [properties] = objects;
233
- invariant(properties);
234
- // TODO(burdon): Check ref target has loaded?
235
- if (!properties.invocationTraceQueue || !properties.invocationTraceQueue.target) {
236
- const queue = yield* QueueService.createQueue({ subspaceTag: 'trace' });
237
- Obj.change(properties, (obj) => {
238
- obj.invocationTraceQueue = Ref.fromDXN(queue.dxn);
239
- });
240
- }
241
-
242
- const queue = properties.invocationTraceQueue!.target;
243
- invariant(queue);
244
- return TracingServiceExt.layerInvocationsQueue({ invocationTraceQueue: queue });
245
- }),
246
- );
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import { Capability } from '@dxos/app-framework';
6
- import { OperationHandlerSet } from '@dxos/operation';
6
+ import { OperationHandlerSet } from '@dxos/compute';
7
7
 
8
8
  export const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));
9
9
  export const ComputeRuntime = Capability.lazy('ComputeRuntime', () => import('./compute-runtime'));
@@ -3,5 +3,11 @@
3
3
  //
4
4
 
5
5
  import { Capability } from '@dxos/app-framework';
6
+ import { OperationHandlerSet } from '@dxos/compute';
6
7
 
8
+ export const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));
7
9
  export const ComputeRuntime = Capability.lazy('ComputeRuntime', () => import('./compute-runtime'));
10
+ export const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(
11
+ 'OperationHandler',
12
+ () => import('./operation-handler'),
13
+ );
@@ -5,7 +5,7 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capabilities, Capability } from '@dxos/app-framework';
8
- import type { OperationHandlerSet } from '@dxos/operation';
8
+ import type { OperationHandlerSet } from '@dxos/compute';
9
9
 
10
10
  import { AutomationOperationHandlerSet } from '#operations';
11
11
 
@@ -18,8 +18,7 @@ export default Capability.makeModule(() =>
18
18
  Capability.contributes(Capabilities.ReactSurface, [
19
19
  Surface.create({
20
20
  id: 'space-settings-functions',
21
- role: 'article',
22
- filter: AppSurface.literalSection(`${meta.id}.space-settings-functions`),
21
+ filter: AppSurface.literal(AppSurface.Article, `${meta.id}.space-settings-functions`),
23
22
  component: () => {
24
23
  const space = useActiveSpace();
25
24
  if (!space) {
@@ -31,8 +30,7 @@ export default Capability.makeModule(() =>
31
30
  }),
32
31
  Surface.create({
33
32
  id: 'space-settings-automation',
34
- role: 'article',
35
- filter: AppSurface.literalSection(`${meta.id}.space-settings-automation`),
33
+ filter: AppSurface.literal(AppSurface.Article, `${meta.id}.space-settings-automation`),
36
34
  component: () => {
37
35
  const space = useActiveSpace();
38
36
  if (!space) {
@@ -44,8 +42,10 @@ export default Capability.makeModule(() =>
44
42
  }),
45
43
  Surface.create({
46
44
  id: 'companion.automation',
47
- role: 'article',
48
- filter: AppSurface.and(AppSurface.literalArticle('automation'), AppSurface.companionArticle()),
45
+ filter: AppSurface.allOf(
46
+ AppSurface.literal(AppSurface.Article, 'automation'),
47
+ AppSurface.companion(AppSurface.Article),
48
+ ),
49
49
  component: ({ data }) => {
50
50
  const space = getSpace(data.companionTo);
51
51
  if (!space) {
@@ -13,12 +13,11 @@ 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 { Database, Filter, JsonSchema, Ref } from '@dxos/echo';
17
- import { Trigger } from '@dxos/functions';
18
- import { Operation } from '@dxos/operation';
19
18
 
20
19
  import { Enabled, Input, Queue } from '../options';
21
- import { printTrigger, promptForSchemaInput, selectFunction, selectQueue } from '../util';
20
+ import { printTrigger, promptForSchemaInput, selectFunction, selectFeed } from '../util';
22
21
 
23
22
  export const queue = Command.make(
24
23
  'queue',
@@ -43,8 +42,8 @@ export const queue = Command.make(
43
42
  return yield* Effect.fail(new Error(`Function not found: ${functionId}`));
44
43
  }
45
44
 
46
- const queueDxn = yield* Option.match(options.queue, {
47
- onNone: () => selectQueue(),
45
+ const queueDXN = yield* Option.match(options.queue, {
46
+ onNone: () => selectFeed(),
48
47
  onSome: (dxn) => Effect.succeed(dxn.toString()),
49
48
  });
50
49
 
@@ -66,10 +65,7 @@ export const queue = Command.make(
66
65
  const trigger = Trigger.make({
67
66
  function: Ref.make(fn),
68
67
  enabled,
69
- spec: {
70
- kind: 'queue',
71
- queue: queueDxn,
72
- },
68
+ spec: Trigger.specQueue(queueDXN),
73
69
  input,
74
70
  });
75
71
 
@@ -13,9 +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 { Database, Filter, JsonSchema, Query, Ref } from '@dxos/echo';
17
- import { Trigger } from '@dxos/functions';
18
- import { Operation } from '@dxos/operation';
19
18
 
20
19
  import { Deep, Delay, Enabled, Input, Typename } from '../options';
21
20
  import { printTrigger, promptForSchemaInput, selectFunction } from '../util';
@@ -52,7 +51,7 @@ export const subscription = Command.make(
52
51
  }).pipe(Prompt.run),
53
52
  onSome: (value) => Effect.succeed(value),
54
53
  });
55
- const queryAst = Query.select(Filter.type(typename)).ast;
54
+ const subscriptionQuery = Query.select(Filter.type(typename));
56
55
 
57
56
  const deepOption = yield* Option.match(options.deep, {
58
57
  onNone: () =>
@@ -103,13 +102,10 @@ export const subscription = Command.make(
103
102
  const trigger = Trigger.make({
104
103
  function: Ref.make(fn),
105
104
  enabled,
106
- spec: {
107
- kind: 'subscription',
108
- query: {
109
- ast: queryAst,
110
- },
111
- options: Object.keys(subscriptionOptions).length > 0 ? subscriptionOptions : undefined,
112
- },
105
+ spec: Trigger.specSubscription(
106
+ subscriptionQuery,
107
+ Object.keys(subscriptionOptions).length > 0 ? subscriptionOptions : undefined,
108
+ ),
113
109
  input,
114
110
  });
115
111
  yield* Database.add(trigger);
@@ -13,9 +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 { Database, Filter, JsonSchema, Ref } from '@dxos/echo';
17
- import { Trigger } from '@dxos/functions';
18
- import { Operation } from '@dxos/operation';
19
18
 
20
19
  import { Cron, Enabled, Input } from '../options';
21
20
  import { printTrigger, promptForSchemaInput, selectFunction } from '../util';
@@ -70,10 +69,7 @@ export const timer = Command.make(
70
69
  const trigger = Trigger.make({
71
70
  function: Ref.make(fn),
72
71
  enabled,
73
- spec: {
74
- kind: 'timer',
75
- cron,
76
- },
72
+ spec: Trigger.specTimer(cron),
77
73
  input,
78
74
  });
79
75
 
@@ -9,9 +9,9 @@ import * as Effect from 'effect/Effect';
9
9
 
10
10
  import { CommandConfig, Common, printList, spaceIdWithDefault, spaceLayer } from '@dxos/cli-util';
11
11
  import { ClientService } from '@dxos/client';
12
+ import { Trigger } from '@dxos/compute';
12
13
  import { Context } from '@dxos/context';
13
- import { Database, Filter } from '@dxos/echo';
14
- import { Trigger } from '@dxos/functions';
14
+ import { Database, Filter, Query } from '@dxos/echo';
15
15
 
16
16
  import { getTriggerRemoteStatus, printTrigger } from './util';
17
17
 
@@ -24,7 +24,9 @@ export const list = Command.make(
24
24
  const { json } = yield* CommandConfig;
25
25
 
26
26
  // Fetch local triggers
27
- const triggers = yield* Database.runQuery(Filter.type(Trigger.Trigger));
27
+ const triggers = yield* Database.runQuery(
28
+ Query.select(Filter.type(Trigger.Trigger)).debugLabel('cli.trigger.list'),
29
+ );
28
30
 
29
31
  // Fetch remote cron triggers to check availability
30
32
  const remoteCronIds = yield* Effect.gen(function* () {
@@ -9,9 +9,8 @@ import * as Effect from 'effect/Effect';
9
9
  import * as Option from 'effect/Option';
10
10
 
11
11
  import { CommandConfig, Common, print, spaceLayer, withTypes } from '@dxos/cli-util';
12
- import { DXN } from '@dxos/echo';
13
- import { Database } from '@dxos/echo';
14
- import { Trigger } from '@dxos/functions';
12
+ import { Trigger } from '@dxos/compute';
13
+ import { Database, DXN } from '@dxos/echo';
15
14
 
16
15
  import { TriggerId } from './options';
17
16
  import { printTriggerRemoved, selectTrigger } from './util';