@dxos/plugin-debug 0.8.4-main.f9ba587 → 0.8.4-staging.60fe92afc8

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 (272) hide show
  1. package/LICENSE +102 -5
  2. package/PLUGIN.mdl +373 -0
  3. package/README.md +1 -1
  4. package/dist/lib/neutral/DebugGraph-G4FWS57E.mjs +15 -0
  5. package/dist/lib/neutral/DebugGraph-G4FWS57E.mjs.map +7 -0
  6. package/dist/lib/neutral/DebugObjectPanel-OS65NC4M.mjs +59 -0
  7. package/dist/lib/neutral/DebugObjectPanel-OS65NC4M.mjs.map +7 -0
  8. package/dist/lib/neutral/DebugPlugin.mjs +59 -0
  9. package/dist/lib/neutral/DebugPlugin.mjs.map +7 -0
  10. package/dist/lib/neutral/DebugPlugin.node.mjs +18 -0
  11. package/dist/lib/neutral/DebugPlugin.node.mjs.map +7 -0
  12. package/dist/lib/neutral/DebugPlugin.workerd.mjs +12 -0
  13. package/dist/lib/neutral/DebugPlugin.workerd.mjs.map +7 -0
  14. package/dist/lib/neutral/DebugSettings-RKYNQIKH.mjs +223 -0
  15. package/dist/lib/neutral/DebugSettings-RKYNQIKH.mjs.map +7 -0
  16. package/dist/lib/neutral/DebugSpaceObjectsPanel-BHOCFWDJ.mjs +34 -0
  17. package/dist/lib/neutral/DebugSpaceObjectsPanel-BHOCFWDJ.mjs.map +7 -0
  18. package/dist/lib/neutral/DebugStatus-H2BAHN26.mjs +122 -0
  19. package/dist/lib/neutral/DebugStatus-H2BAHN26.mjs.map +7 -0
  20. package/dist/lib/neutral/DevtoolsOverviewContainer-YX7Z3D2H.mjs +23 -0
  21. package/dist/lib/neutral/DevtoolsOverviewContainer-YX7Z3D2H.mjs.map +7 -0
  22. package/dist/lib/neutral/GithubPanel-QJKDJRVQ.mjs +177 -0
  23. package/dist/lib/neutral/GithubPanel-QJKDJRVQ.mjs.map +7 -0
  24. package/dist/lib/neutral/RegistryPanel-64GIYJHN.mjs +161 -0
  25. package/dist/lib/neutral/RegistryPanel-64GIYJHN.mjs.map +7 -0
  26. package/dist/lib/neutral/SpaceGenerator-Y35G6DRV.mjs +146 -0
  27. package/dist/lib/neutral/SpaceGenerator-Y35G6DRV.mjs.map +7 -0
  28. package/dist/lib/neutral/Wireframe-WD7S2AUU.mjs +52 -0
  29. package/dist/lib/neutral/Wireframe-WD7S2AUU.mjs.map +7 -0
  30. package/dist/lib/neutral/app-graph-builder-4OJQQLSH.mjs +626 -0
  31. package/dist/lib/neutral/app-graph-builder-4OJQQLSH.mjs.map +7 -0
  32. package/dist/lib/neutral/capabilities/index.mjs +15 -0
  33. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  34. package/dist/lib/neutral/chunk-HOV6MV5B.mjs +43 -0
  35. package/dist/lib/neutral/chunk-HOV6MV5B.mjs.map +7 -0
  36. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  37. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  38. package/dist/lib/{node-esm/chunk-I6XSKQ6D.mjs → neutral/chunk-TAST3Y2C.mjs} +31 -10
  39. package/dist/lib/neutral/chunk-TAST3Y2C.mjs.map +7 -0
  40. package/dist/lib/neutral/components/index.mjs +972 -0
  41. package/dist/lib/neutral/components/index.mjs.map +7 -0
  42. package/dist/lib/neutral/containers/index.mjs +25 -0
  43. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  44. package/dist/lib/neutral/index.mjs +18 -0
  45. package/dist/lib/neutral/index.mjs.map +7 -0
  46. package/dist/lib/neutral/meta.json +1 -0
  47. package/dist/lib/neutral/meta.mjs +8 -0
  48. package/dist/lib/neutral/meta.mjs.map +7 -0
  49. package/dist/lib/neutral/plugin.mjs +12 -0
  50. package/dist/lib/neutral/plugin.mjs.map +7 -0
  51. package/dist/lib/neutral/react-context-MUZ3KVLU.mjs +17 -0
  52. package/dist/lib/neutral/react-context-MUZ3KVLU.mjs.map +7 -0
  53. package/dist/lib/neutral/react-surface-YBC4HK7I.mjs +430 -0
  54. package/dist/lib/neutral/react-surface-YBC4HK7I.mjs.map +7 -0
  55. package/dist/lib/neutral/settings-MPM6YUP4.mjs +28 -0
  56. package/dist/lib/neutral/settings-MPM6YUP4.mjs.map +7 -0
  57. package/dist/lib/neutral/translations.mjs +92 -0
  58. package/dist/lib/neutral/translations.mjs.map +7 -0
  59. package/dist/lib/neutral/types/index.mjs +14 -0
  60. package/dist/lib/neutral/types/index.mjs.map +7 -0
  61. package/dist/types/src/DebugPlugin.d.ts +4 -1
  62. package/dist/types/src/DebugPlugin.d.ts.map +1 -1
  63. package/dist/types/src/DebugPlugin.node.d.ts +5 -0
  64. package/dist/types/src/DebugPlugin.node.d.ts.map +1 -0
  65. package/dist/types/src/DebugPlugin.test.d.ts +2 -0
  66. package/dist/types/src/DebugPlugin.test.d.ts.map +1 -0
  67. package/dist/types/src/DebugPlugin.workerd.d.ts +5 -0
  68. package/dist/types/src/DebugPlugin.workerd.d.ts.map +1 -0
  69. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  70. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  71. package/dist/types/src/capabilities/index.d.ts +8 -5
  72. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/react-context.d.ts +4 -2
  74. package/dist/types/src/capabilities/react-context.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/react-surface.d.ts +7 -2
  76. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  77. package/dist/types/src/capabilities/settings.d.ts +5 -2
  78. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  79. package/dist/types/src/components/DebugSettings/DebugSettings.d.ts +11 -0
  80. package/dist/types/src/components/DebugSettings/DebugSettings.d.ts.map +1 -0
  81. package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts +107 -0
  82. package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts.map +1 -0
  83. package/dist/types/src/components/DebugSettings/index.d.ts +2 -0
  84. package/dist/types/src/components/DebugSettings/index.d.ts.map +1 -0
  85. package/dist/types/src/components/SchemaTable/SchemaTable.d.ts.map +1 -0
  86. package/dist/types/src/components/SchemaTable/index.d.ts +2 -0
  87. package/dist/types/src/components/SchemaTable/index.d.ts.map +1 -0
  88. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts +5 -4
  89. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
  90. package/dist/types/src/components/SpaceGenerator/draw-util.d.ts.map +1 -1
  91. package/dist/types/src/components/SpaceGenerator/index.d.ts +2 -2
  92. package/dist/types/src/components/SpaceGenerator/index.d.ts.map +1 -1
  93. package/dist/types/src/components/SpaceGenerator/presets.d.ts +5 -8
  94. package/dist/types/src/components/SpaceGenerator/presets.d.ts.map +1 -1
  95. package/dist/types/src/components/index.d.ts +4 -9
  96. package/dist/types/src/components/index.d.ts.map +1 -1
  97. package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts +8 -0
  98. package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts.map +1 -0
  99. package/dist/types/src/containers/DebugGraph/index.d.ts +2 -0
  100. package/dist/types/src/containers/DebugGraph/index.d.ts.map +1 -0
  101. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts +6 -0
  102. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts.map +1 -0
  103. package/dist/types/src/containers/DebugObjectPanel/index.d.ts +2 -0
  104. package/dist/types/src/containers/DebugObjectPanel/index.d.ts.map +1 -0
  105. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts +5 -0
  106. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts.map +1 -0
  107. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts +2 -0
  108. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts.map +1 -0
  109. package/dist/types/src/containers/DebugStatus/DebugStatus.d.ts.map +1 -0
  110. package/dist/types/src/containers/DebugStatus/index.d.ts +2 -0
  111. package/dist/types/src/containers/DebugStatus/index.d.ts.map +1 -0
  112. package/dist/types/src/{components → containers/DevtoolsOverviewContainer}/DevtoolsOverviewContainer.d.ts +0 -1
  113. package/dist/types/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.d.ts.map +1 -0
  114. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts +2 -0
  115. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts.map +1 -0
  116. package/dist/types/src/containers/GithubPanel/GithubComponent.d.ts +15 -0
  117. package/dist/types/src/containers/GithubPanel/GithubComponent.d.ts.map +1 -0
  118. package/dist/types/src/containers/GithubPanel/GithubComponent.stories.d.ts +107 -0
  119. package/dist/types/src/containers/GithubPanel/GithubComponent.stories.d.ts.map +1 -0
  120. package/dist/types/src/containers/GithubPanel/GithubPanel.d.ts +3 -0
  121. package/dist/types/src/containers/GithubPanel/GithubPanel.d.ts.map +1 -0
  122. package/dist/types/src/containers/GithubPanel/index.d.ts +2 -0
  123. package/dist/types/src/containers/GithubPanel/index.d.ts.map +1 -0
  124. package/dist/types/src/containers/RegistryPanel/RegistryPanel.d.ts +3 -0
  125. package/dist/types/src/containers/RegistryPanel/RegistryPanel.d.ts.map +1 -0
  126. package/dist/types/src/containers/RegistryPanel/index.d.ts +2 -0
  127. package/dist/types/src/containers/RegistryPanel/index.d.ts.map +1 -0
  128. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts +11 -0
  129. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts.map +1 -0
  130. package/dist/types/src/containers/SpaceGenerator/index.d.ts +2 -0
  131. package/dist/types/src/containers/SpaceGenerator/index.d.ts.map +1 -0
  132. package/dist/types/src/{components → containers/Wireframe}/Wireframe.d.ts +2 -2
  133. package/dist/types/src/containers/Wireframe/Wireframe.d.ts.map +1 -0
  134. package/dist/types/src/containers/Wireframe/index.d.ts +2 -0
  135. package/dist/types/src/containers/Wireframe/index.d.ts.map +1 -0
  136. package/dist/types/src/containers/index.d.ts +11 -0
  137. package/dist/types/src/containers/index.d.ts.map +1 -0
  138. package/dist/types/src/index.d.ts +1 -1
  139. package/dist/types/src/index.d.ts.map +1 -1
  140. package/dist/types/src/meta.d.ts +2 -3
  141. package/dist/types/src/meta.d.ts.map +1 -1
  142. package/dist/types/src/plugin.d.ts +4 -0
  143. package/dist/types/src/plugin.d.ts.map +1 -0
  144. package/dist/types/src/translations.d.ts +88 -57
  145. package/dist/types/src/translations.d.ts.map +1 -1
  146. package/dist/types/src/types/Settings.d.ts +8 -0
  147. package/dist/types/src/types/Settings.d.ts.map +1 -0
  148. package/dist/types/src/types/index.d.ts +71 -0
  149. package/dist/types/src/types/index.d.ts.map +1 -0
  150. package/dist/types/tsconfig.tsbuildinfo +1 -1
  151. package/package.json +126 -78
  152. package/src/DebugPlugin.node.ts +18 -0
  153. package/src/DebugPlugin.test.ts +29 -0
  154. package/src/DebugPlugin.tsx +37 -38
  155. package/src/DebugPlugin.workerd.ts +12 -0
  156. package/src/capabilities/app-graph-builder.ts +397 -412
  157. package/src/capabilities/index.ts +5 -5
  158. package/src/capabilities/react-context.tsx +16 -7
  159. package/src/capabilities/react-surface.tsx +394 -339
  160. package/src/capabilities/settings.ts +24 -12
  161. package/src/components/DebugSettings/DebugSettings.stories.tsx +36 -0
  162. package/src/components/DebugSettings/DebugSettings.tsx +259 -0
  163. package/src/components/DebugSettings/index.ts +5 -0
  164. package/src/components/SchemaTable/index.ts +5 -0
  165. package/src/components/SpaceGenerator/ObjectGenerator.tsx +48 -48
  166. package/src/components/SpaceGenerator/draw-util.ts +13 -13
  167. package/src/components/SpaceGenerator/index.ts +2 -3
  168. package/src/components/SpaceGenerator/presets.ts +528 -265
  169. package/src/components/index.ts +4 -8
  170. package/src/containers/DebugGraph/DebugGraph.tsx +14 -0
  171. package/src/containers/DebugGraph/index.ts +5 -0
  172. package/src/containers/DebugObjectPanel/DebugObjectPanel.tsx +76 -0
  173. package/src/containers/DebugObjectPanel/index.ts +5 -0
  174. package/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx +47 -0
  175. package/src/containers/DebugSpaceObjectsPanel/index.ts +5 -0
  176. package/src/{components → containers/DebugStatus}/DebugStatus.tsx +44 -21
  177. package/src/containers/DebugStatus/index.ts +5 -0
  178. package/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.tsx +25 -0
  179. package/src/containers/DevtoolsOverviewContainer/index.ts +5 -0
  180. package/src/containers/GithubPanel/GithubComponent.stories.tsx +38 -0
  181. package/src/containers/GithubPanel/GithubComponent.tsx +192 -0
  182. package/src/containers/GithubPanel/GithubPanel.tsx +17 -0
  183. package/src/containers/GithubPanel/index.ts +5 -0
  184. package/src/containers/RegistryPanel/RegistryPanel.tsx +150 -0
  185. package/src/containers/RegistryPanel/index.ts +5 -0
  186. package/src/containers/SpaceGenerator/SpaceGenerator.tsx +127 -0
  187. package/src/containers/SpaceGenerator/index.ts +5 -0
  188. package/src/{components → containers/Wireframe}/Wireframe.tsx +8 -12
  189. package/src/containers/Wireframe/index.ts +5 -0
  190. package/src/containers/index.ts +15 -0
  191. package/src/index.ts +1 -1
  192. package/src/meta.ts +29 -8
  193. package/src/plugin.ts +10 -0
  194. package/src/translations.ts +84 -56
  195. package/src/types/Settings.ts +16 -0
  196. package/src/{types.ts → types/index.ts} +22 -11
  197. package/src/vite-env.d.ts +10 -0
  198. package/dist/lib/browser/DebugApp-5JPOASYB.mjs +0 -225
  199. package/dist/lib/browser/DebugApp-5JPOASYB.mjs.map +0 -7
  200. package/dist/lib/browser/DevtoolsOverviewContainer-EPD6EWT5.mjs +0 -25
  201. package/dist/lib/browser/DevtoolsOverviewContainer-EPD6EWT5.mjs.map +0 -7
  202. package/dist/lib/browser/SpaceGenerator-BLFPBKL2.mjs +0 -1238
  203. package/dist/lib/browser/SpaceGenerator-BLFPBKL2.mjs.map +0 -7
  204. package/dist/lib/browser/app-graph-builder-SQXFD2BL.mjs +0 -597
  205. package/dist/lib/browser/app-graph-builder-SQXFD2BL.mjs.map +0 -7
  206. package/dist/lib/browser/chunk-5XPIRNQS.mjs +0 -18
  207. package/dist/lib/browser/chunk-5XPIRNQS.mjs.map +0 -7
  208. package/dist/lib/browser/chunk-AJA6RYN3.mjs +0 -68
  209. package/dist/lib/browser/chunk-AJA6RYN3.mjs.map +0 -7
  210. package/dist/lib/browser/index.mjs +0 -130
  211. package/dist/lib/browser/index.mjs.map +0 -7
  212. package/dist/lib/browser/meta.json +0 -1
  213. package/dist/lib/browser/react-context-NVAGLAJD.mjs +0 -16
  214. package/dist/lib/browser/react-context-NVAGLAJD.mjs.map +0 -7
  215. package/dist/lib/browser/react-surface-EWOX4JS7.mjs +0 -768
  216. package/dist/lib/browser/react-surface-EWOX4JS7.mjs.map +0 -7
  217. package/dist/lib/browser/settings-LSSWLM5I.mjs +0 -22
  218. package/dist/lib/browser/settings-LSSWLM5I.mjs.map +0 -7
  219. package/dist/lib/node-esm/DebugApp-B2TUPIX6.mjs +0 -227
  220. package/dist/lib/node-esm/DebugApp-B2TUPIX6.mjs.map +0 -7
  221. package/dist/lib/node-esm/DevtoolsOverviewContainer-K622ZTH2.mjs +0 -27
  222. package/dist/lib/node-esm/DevtoolsOverviewContainer-K622ZTH2.mjs.map +0 -7
  223. package/dist/lib/node-esm/SpaceGenerator-MJR725EE.mjs +0 -1240
  224. package/dist/lib/node-esm/SpaceGenerator-MJR725EE.mjs.map +0 -7
  225. package/dist/lib/node-esm/app-graph-builder-W26WQYCF.mjs +0 -598
  226. package/dist/lib/node-esm/app-graph-builder-W26WQYCF.mjs.map +0 -7
  227. package/dist/lib/node-esm/chunk-HTJ6Z5U5.mjs +0 -20
  228. package/dist/lib/node-esm/chunk-HTJ6Z5U5.mjs.map +0 -7
  229. package/dist/lib/node-esm/chunk-I6XSKQ6D.mjs.map +0 -7
  230. package/dist/lib/node-esm/index.mjs +0 -131
  231. package/dist/lib/node-esm/index.mjs.map +0 -7
  232. package/dist/lib/node-esm/meta.json +0 -1
  233. package/dist/lib/node-esm/react-context-6ELMAMVB.mjs +0 -17
  234. package/dist/lib/node-esm/react-context-6ELMAMVB.mjs.map +0 -7
  235. package/dist/lib/node-esm/react-surface-HDU56SYC.mjs +0 -769
  236. package/dist/lib/node-esm/react-surface-HDU56SYC.mjs.map +0 -7
  237. package/dist/lib/node-esm/settings-YWFF57TW.mjs +0 -23
  238. package/dist/lib/node-esm/settings-YWFF57TW.mjs.map +0 -7
  239. package/dist/types/src/components/Container.d.ts +0 -5
  240. package/dist/types/src/components/Container.d.ts.map +0 -1
  241. package/dist/types/src/components/DebugApp/DebugApp.d.ts +0 -6
  242. package/dist/types/src/components/DebugApp/DebugApp.d.ts.map +0 -1
  243. package/dist/types/src/components/DebugApp/Tree.d.ts +0 -18
  244. package/dist/types/src/components/DebugApp/Tree.d.ts.map +0 -1
  245. package/dist/types/src/components/DebugApp/index.d.ts +0 -3
  246. package/dist/types/src/components/DebugApp/index.d.ts.map +0 -1
  247. package/dist/types/src/components/DebugObjectPanel.d.ts +0 -7
  248. package/dist/types/src/components/DebugObjectPanel.d.ts.map +0 -1
  249. package/dist/types/src/components/DebugSettings.d.ts +0 -6
  250. package/dist/types/src/components/DebugSettings.d.ts.map +0 -1
  251. package/dist/types/src/components/DebugStatus.d.ts.map +0 -1
  252. package/dist/types/src/components/DevtoolsOverviewContainer.d.ts.map +0 -1
  253. package/dist/types/src/components/SpaceGenerator/SchemaTable.d.ts.map +0 -1
  254. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts +0 -9
  255. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts.map +0 -1
  256. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts +0 -6
  257. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts.map +0 -1
  258. package/dist/types/src/components/Wireframe.d.ts.map +0 -1
  259. package/dist/types/src/types.d.ts +0 -63
  260. package/dist/types/src/types.d.ts.map +0 -1
  261. package/src/components/Container.tsx +0 -15
  262. package/src/components/DebugApp/DebugApp.tsx +0 -77
  263. package/src/components/DebugApp/Tree.tsx +0 -103
  264. package/src/components/DebugApp/index.ts +0 -7
  265. package/src/components/DebugObjectPanel.tsx +0 -35
  266. package/src/components/DebugSettings.tsx +0 -151
  267. package/src/components/DevtoolsOverviewContainer.tsx +0 -20
  268. package/src/components/SpaceGenerator/SpaceGenerator.stories.tsx +0 -52
  269. package/src/components/SpaceGenerator/SpaceGenerator.tsx +0 -179
  270. /package/dist/types/src/components/{SpaceGenerator → SchemaTable}/SchemaTable.d.ts +0 -0
  271. /package/dist/types/src/{components → containers/DebugStatus}/DebugStatus.d.ts +0 -0
  272. /package/src/components/{SpaceGenerator → SchemaTable}/SchemaTable.tsx +0 -0
@@ -2,68 +2,244 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Schema, SchemaAST } from 'effect';
5
+ import * as Schema from 'effect/Schema';
6
6
 
7
+ import { AgentPrompt, WebSearchBlueprint } from '@dxos/assistant-toolkit';
8
+ import { Routine, Trigger, Operation } from '@dxos/compute';
7
9
  import { type ComputeGraphModel, NODE_INPUT } from '@dxos/conductor';
8
- import { DXN, Key, Obj, Ref, Type } from '@dxos/echo';
9
- import { FunctionTrigger, TriggerKind, EmailTriggerOutput, type TriggerType } from '@dxos/functions';
10
+ import { Feed, Filter, JsonSchema, Key, Obj, Query, type QueryAST, Ref, Scope, Tag } from '@dxos/echo';
10
11
  import { invariant } from '@dxos/invariant';
11
- import { Filter, type Space } from '@dxos/react-client/echo';
12
+ import { DXN, EID } from '@dxos/keys';
13
+ import { InboxOperation } from '@dxos/plugin-inbox';
14
+ import { Mailbox } from '@dxos/plugin-inbox';
15
+ import { Markdown } from '@dxos/plugin-markdown';
16
+ import { type Space } from '@dxos/react-client/echo';
12
17
  import {
13
18
  type ComputeShape,
14
19
  createAppend,
15
20
  createChat,
16
21
  createComputeGraph,
17
22
  createConstant,
23
+ createFeed,
18
24
  createFunction,
19
25
  createGpt,
20
- createQueue,
21
- createSurface,
22
26
  createRandom,
27
+ createSurface,
23
28
  createTemplate,
24
29
  createText,
25
30
  createTrigger,
26
31
  } from '@dxos/react-ui-canvas-compute';
27
- import {
28
- CanvasBoardType,
29
- CanvasGraphModel,
30
- pointMultiply,
31
- pointsToRect,
32
- rectToPoints,
33
- } from '@dxos/react-ui-canvas-editor';
34
- import { TableType } from '@dxos/react-ui-table';
35
- import { range } from '@dxos/util';
32
+ import { CanvasBoard, CanvasGraphModel, pointMultiply, pointsToRect, rectToPoints } from '@dxos/react-ui-canvas-editor';
33
+ import { ViewModel } from '@dxos/schema';
34
+ import { Message, Organization, Person, Pipeline } from '@dxos/types';
35
+ import { range, trim } from '@dxos/util';
36
36
 
37
37
  import { type ObjectGenerator } from './ObjectGenerator';
38
38
 
39
39
  export enum PresetName {
40
- EMAIL_TABLE = 'email-table',
40
+ DXOS_TEAM = 'dxos-team',
41
+ ORG_RESEARCH_PROJECT = 'org-research-project',
42
+ // EMAIL_TABLE = 'email-table',
41
43
  GPT_QUEUE = 'webhook-gpt-queue',
42
44
  CHAT_GPT = 'chat-gpt-text',
43
- EMAIL_WITH_SUMMARY = 'email-gptSummary-table',
45
+ // EMAIL_WITH_SUMMARY = 'email-gptSummary-table',
44
46
  OBJECT_CHANGE_QUEUE = 'objectChange-queue',
45
- FOREX_FUNCTION_CALL = 'forex-function-call',
46
47
  TIMER_TICK_QUEUE = 'timerTick-queue',
48
+ FOREX_FUNCTION_CALL = 'forex-function-call',
47
49
  DISCORD_MESSAGES = 'discord-messages',
48
- KANBAN_QUEUE = 'kanban-queue',
50
+ // KANBAN_QUEUE = 'kanban-queue',
49
51
  }
50
52
 
51
53
  export const generator = () => ({
52
- schemas: [CanvasBoardType, FunctionTrigger],
54
+ schemas: [CanvasBoard.CanvasBoard, Trigger.Trigger] as any[],
53
55
  types: Object.values(PresetName).map((name) => ({ typename: name })),
54
56
  items: [
57
+ [
58
+ PresetName.DXOS_TEAM,
59
+ async (space, n, cb) => {
60
+ const objects = range(n, () => {
61
+ const org = space.db.add(
62
+ Obj.make(Organization.Organization, {
63
+ name: 'DXOS',
64
+ website: 'https://dxos.org',
65
+ }),
66
+ );
67
+ const doc = space.db.add(
68
+ Markdown.make({
69
+ name: 'DXOS Research',
70
+ content: 'DXOS builds Composer, an open-source AI-powered malleable application.',
71
+ }),
72
+ );
73
+
74
+ const tag = space.db.add(Tag.make({ label: 'Investor' }));
75
+ const tagRef = Ref.make(tag);
76
+ Obj.update(doc, (doc) => {
77
+ Obj.getMeta(doc).tags = [tagRef];
78
+ });
79
+
80
+ // space.db.add(
81
+ // Relation.make(HasSubject, {
82
+ // [Relation.Source]: doc,
83
+ // [Relation.Target]: org,
84
+ // completedAt: new Date().toISOString(),
85
+ // }),
86
+ // );
87
+
88
+ space.db.add(
89
+ Obj.make(Person.Person, { [Obj.Meta]: { tags: [tagRef] }, fullName: 'Rich', organization: Ref.make(org) }),
90
+ );
91
+ space.db.add(
92
+ Obj.make(Person.Person, {
93
+ fullName: 'Josiah',
94
+ organization: Ref.make(org),
95
+ }),
96
+ );
97
+ space.db.add(
98
+ Obj.make(Person.Person, {
99
+ fullName: 'Dima',
100
+ organization: Ref.make(org),
101
+ }),
102
+ );
103
+ space.db.add(
104
+ Obj.make(Person.Person, {
105
+ fullName: 'Mykola',
106
+ organization: Ref.make(org),
107
+ }),
108
+ );
109
+
110
+ return doc;
111
+ });
112
+ cb?.(objects);
113
+ return objects;
114
+ },
115
+ ],
116
+ [
117
+ PresetName.ORG_RESEARCH_PROJECT,
118
+ async (space, n, cb) => {
119
+ const mailboxes = await space.db.query(Filter.type(Mailbox.Mailbox)).run();
120
+ const mailbox = mailboxes[0];
121
+ invariant(mailbox, 'Mailbox not found');
122
+ const mailboxFeed = await mailbox.feed?.tryLoad();
123
+ invariant(mailboxFeed, 'Mailbox missing feed reference');
124
+ const queueDxn = Feed.getQueueUri(mailboxFeed);
125
+ invariant(queueDxn, 'Mailbox feed missing queue DXN key');
126
+ const tag = await space.db.query(Filter.type(Tag.Tag, { label: 'Investor' })).first();
127
+ const tagUri = Obj.getURI(tag);
128
+
129
+ const objects = range(n, () => {
130
+ const contactsQuery = Query.select(Filter.type(Person.Person)).select(Filter.tag(tagUri));
131
+ const organizationsQuery = Query.select(Filter.type(Organization.Organization)).select(Filter.tag(tagUri));
132
+ const notesQuery = Query.select(Filter.type(Markdown.Document)).select(Filter.tag(tagUri));
133
+
134
+ space.db.add(
135
+ Trigger.make({
136
+ enabled: true,
137
+ spec: Trigger.specTimer('* * * * *'), // Every minute.
138
+ function: Ref.make(Operation.serialize(InboxOperation.GoogleMailSync)),
139
+ input: {
140
+ mailbox: Ref.make(mailbox),
141
+ },
142
+ }),
143
+ );
144
+
145
+ const researchPrompt = space.db.add(
146
+ Routine.make({
147
+ name: 'Research',
148
+ description: 'Research organization',
149
+ input: Schema.Struct({
150
+ org: Schema.Any,
151
+ }),
152
+ output: Schema.Any,
153
+
154
+ // TODO(dmaretskyi): This mocks research (returns pre-baked result), the actual research might take compute minutes.
155
+ // Remove the mock prompt to do the actual research.
156
+ instructions: trim`
157
+ Research the organization provided as input.
158
+ Create a research note for it at the end.
159
+ NOTE: Do mocked reseach (set mockSearch to true).
160
+ `,
161
+ blueprints: [Ref.make(WebSearchBlueprint.make())],
162
+ }),
163
+ );
164
+
165
+ space.db.add(
166
+ Trigger.make({
167
+ enabled: true,
168
+ spec: Trigger.specSubscription(organizationsQuery),
169
+ function: Ref.make(Operation.serialize(AgentPrompt)),
170
+ input: {
171
+ prompt: Ref.make(researchPrompt),
172
+ input: '{{event.subject}}',
173
+ },
174
+ }),
175
+ );
176
+
177
+ const mailboxView = ViewModel.make({
178
+ query: Query.select(
179
+ Filter.type(Message.Message, {
180
+ properties: { labels: Filter.contains('investor') },
181
+ }),
182
+ ).from(Scope.feed(Obj.getURI(mailboxFeed))),
183
+ jsonSchema: JsonSchema.toJsonSchema(Message.Message),
184
+ });
185
+ const contactsView = ViewModel.make({
186
+ query: contactsQuery,
187
+ jsonSchema: JsonSchema.toJsonSchema(Person.Person),
188
+ });
189
+ const organizationsView = ViewModel.make({
190
+ query: organizationsQuery,
191
+ jsonSchema: JsonSchema.toJsonSchema(Organization.Organization),
192
+ });
193
+ const notesView = ViewModel.make({
194
+ query: notesQuery,
195
+ jsonSchema: JsonSchema.toJsonSchema(Markdown.Document),
196
+ });
197
+
198
+ return space.db.add(
199
+ Pipeline.make({
200
+ name: 'Investor Research',
201
+ columns: [
202
+ {
203
+ name: 'Mailbox',
204
+ view: Ref.make(mailboxView),
205
+ order: [],
206
+ },
207
+ {
208
+ name: 'Contacts',
209
+ view: Ref.make(contactsView),
210
+ order: [],
211
+ },
212
+ {
213
+ name: 'Organizations',
214
+ view: Ref.make(organizationsView),
215
+ order: [],
216
+ },
217
+ {
218
+ name: 'Notes',
219
+ view: Ref.make(notesView),
220
+ order: [],
221
+ },
222
+ ],
223
+ }),
224
+ );
225
+ });
226
+
227
+ cb?.(objects.flat());
228
+ return objects.flat();
229
+ },
230
+ ],
55
231
  [
56
232
  PresetName.GPT_QUEUE,
57
233
  async (space, n, cb) => {
58
234
  const objects = range(n, () => {
59
235
  const canvasModel = CanvasGraphModel.create<ComputeShape>();
60
236
 
61
- let functionTrigger: FunctionTrigger | undefined;
237
+ let functionTrigger: Trigger.Trigger | undefined;
62
238
  canvasModel.builder.call((builder) => {
63
239
  const gpt = canvasModel.createNode(createGpt(position({ x: 0, y: -14 })));
64
240
  const triggerShape = createTrigger({
65
241
  spaceId: space.id,
66
- triggerKind: TriggerKind.Webhook,
242
+ triggerKind: 'webhook',
67
243
  ...position({ x: -18, y: -2 }),
68
244
  });
69
245
  const trigger = canvasModel.createNode(triggerShape);
@@ -72,10 +248,24 @@ export const generator = () => ({
72
248
  const append = canvasModel.createNode(createAppend(position({ x: 10, y: 6 })));
73
249
 
74
250
  builder
75
- .createEdge({ source: trigger.id, target: gpt.id, input: 'prompt', output: 'bodyText' })
251
+ .createEdge({
252
+ source: trigger.id,
253
+ target: gpt.id,
254
+ input: 'prompt',
255
+ output: 'bodyText',
256
+ })
76
257
  .createEdge({ source: gpt.id, target: text.id, output: 'text' })
77
- .createEdge({ source: queueId.id, target: append.id, input: 'id' })
78
- .createEdge({ source: gpt.id, target: append.id, output: 'messages', input: 'items' });
258
+ .createEdge({
259
+ source: queueId.id,
260
+ target: append.id,
261
+ input: 'id',
262
+ })
263
+ .createEdge({
264
+ source: gpt.id,
265
+ target: append.id,
266
+ output: 'messages',
267
+ input: 'items',
268
+ });
79
269
 
80
270
  functionTrigger = triggerShape.functionTrigger!.target!;
81
271
  });
@@ -97,8 +287,11 @@ export const generator = () => ({
97
287
  const objects = range(n, () => {
98
288
  const { canvasModel, computeModel } = createQueueSinkPreset(
99
289
  space,
100
- TriggerKind.Subscription,
101
- (triggerSpec) => (triggerSpec.filter = { type: 'dxn:type:dxos.org/type/Chess' }),
290
+ 'subscription',
291
+ (triggerSpec) =>
292
+ (triggerSpec.query = {
293
+ ast: Query.select(Filter.type(DXN.make('org.dxos.type.chess'))).ast as Obj.Mutable<QueryAST.Query>,
294
+ }),
102
295
  'type',
103
296
  );
104
297
  return addToSpace(PresetName.OBJECT_CHANGE_QUEUE, space, canvasModel, computeModel);
@@ -114,7 +307,7 @@ export const generator = () => ({
114
307
  const objects = range(n, () => {
115
308
  const { canvasModel, computeModel } = createQueueSinkPreset(
116
309
  space,
117
- TriggerKind.Timer,
310
+ 'timer',
118
311
  (triggerSpec) => (triggerSpec.cron = '*/5 * * * * *'),
119
312
  'result',
120
313
  );
@@ -125,72 +318,73 @@ export const generator = () => ({
125
318
  },
126
319
  ],
127
320
 
128
- [
129
- PresetName.EMAIL_TABLE,
130
- async (space, n, cb) => {
131
- const objects = range(n, () => {
132
- const canvasModel = CanvasGraphModel.create<ComputeShape>();
133
-
134
- const results = space.db.query(Filter.type(TableType)).runSync();
135
- const emailTable = results.find((r) => r.object?.view?.target?.query?.typename?.endsWith('Email'));
136
- invariant(emailTable, 'Email table not found.');
137
-
138
- const template = canvasModel.createNode(
139
- createTemplate({
140
- valueType: 'object',
141
- ...rawPosition({ centerX: -80, centerY: -64, width: 320, height: 320 }),
142
- }),
143
- );
144
- const templateContent = ['{'];
145
-
146
- let functionTrigger: FunctionTrigger | undefined;
147
- canvasModel.builder.call((builder) => {
148
- const triggerShape = createTrigger({
149
- spaceId: space.id,
150
- triggerKind: TriggerKind.Email,
151
- ...position({ x: -18, y: -2 }),
152
- });
153
- const trigger = canvasModel.createNode(triggerShape);
154
-
155
- const tableId = canvasModel.createNode(
156
- createConstant({
157
- value: DXN.fromLocalObjectId(emailTable.id).toString(),
158
- ...position({ x: -18, y: 5, width: 8, height: 6 }),
159
- }),
160
- );
161
-
162
- const appendToTable = canvasModel.createNode(createAppend(position({ x: 10, y: 6 })));
163
-
164
- const properties = SchemaAST.getPropertySignatures(EmailTriggerOutput.ast);
165
- for (let i = 0; i < properties.length; i++) {
166
- const propName = properties[i].name.toString();
167
- builder.createEdge({ source: trigger.id, target: template.id, input: propName, output: propName });
168
- templateContent.push(` "${propName}": "{{${propName}}}"` + (i === properties.length - 1 ? '' : ','));
169
- }
170
- templateContent.push('}');
171
-
172
- builder
173
- .createEdge({ source: tableId.id, target: appendToTable.id, input: 'id' })
174
- .createEdge({ source: template.id, target: appendToTable.id, input: 'items' });
175
-
176
- functionTrigger = triggerShape.functionTrigger!.target!;
177
- });
178
-
179
- const computeModel = createComputeGraph(canvasModel);
180
-
181
- const templateComputeNode = computeModel.nodes.find((n) => n.id === template.node);
182
- invariant(templateComputeNode, 'Template compute node was not created.');
183
- templateComputeNode.value = templateContent.join('\n');
184
- templateComputeNode.inputSchema = Type.toJsonSchema(EmailTriggerOutput);
185
-
186
- attachTrigger(functionTrigger, computeModel);
187
-
188
- return addToSpace(PresetName.EMAIL_TABLE, space, canvasModel, computeModel);
189
- });
190
- cb?.(objects);
191
- return objects;
192
- },
193
- ],
321
+ // TODO(wittjosiah): Remove?
322
+ // [
323
+ // PresetName.EMAIL_TABLE,
324
+ // async (space, n, cb) => {
325
+ // const objects = range(n, () => {
326
+ // const canvasModel = CanvasGraphModel.create<ComputeShape>();
327
+
328
+ // const results = space.db.query(Filter.type(TableType)).runSync();
329
+ // const emailTable = results.find((r) => r.object?.view?.target?.query?.typename?.endsWith('Email'));
330
+ // invariant(emailTable, 'Email table not found.');
331
+
332
+ // const template = canvasModel.createNode(
333
+ // createTemplate({
334
+ // valueType: 'object',
335
+ // ...rawPosition({ centerX: -80, centerY: -64, width: 320, height: 320 }),
336
+ // }),
337
+ // );
338
+ // const templateContent = ['{'];
339
+
340
+ // let functionTrigger: FunctionTrigger | undefined;
341
+ // canvasModel.builder.call((builder) => {
342
+ // const triggerShape = createTrigger({
343
+ // spaceId: space.id,
344
+ // triggerKind: 'email',
345
+ // ...position({ x: -18, y: -2 }),
346
+ // });
347
+ // const trigger = canvasModel.createNode(triggerShape);
348
+
349
+ // const tableId = canvasModel.createNode(
350
+ // createConstant({
351
+ // value: DXN.fromLocalObjectId(emailTable.id).toString(),
352
+ // ...position({ x: -18, y: 5, width: 8, height: 6 }),
353
+ // }),
354
+ // );
355
+
356
+ // const appendToTable = canvasModel.createNode(createAppend(position({ x: 10, y: 6 })));
357
+
358
+ // const properties = SchemaAST.getPropertySignatures(EmailTriggerOutput.ast);
359
+ // for (let i = 0; i < properties.length; i++) {
360
+ // const propName = properties[i].name.toString();
361
+ // builder.createEdge({ source: trigger.id, target: template.id, input: propName, output: propName });
362
+ // templateContent.push(` "${propName}": "{{${propName}}}"` + (i === properties.length - 1 ? '' : ','));
363
+ // }
364
+ // templateContent.push('}');
365
+
366
+ // builder
367
+ // .createEdge({ source: tableId.id, target: appendToTable.id, input: 'id' })
368
+ // .createEdge({ source: template.id, target: appendToTable.id, input: 'items' });
369
+
370
+ // functionTrigger = triggerShape.functionTrigger!.target!;
371
+ // });
372
+
373
+ // const computeModel = createComputeGraph(canvasModel);
374
+
375
+ // const templateComputeNode = computeModel.nodes.find((n) => n.id === template.node);
376
+ // invariant(templateComputeNode, 'Template compute node was not created.');
377
+ // templateComputeNode.value = templateContent.join('\n');
378
+ // templateComputeNode.inputSchema = JsonSchema.toJsonSchema(EmailTriggerOutput);
379
+
380
+ // attachTrigger(functionTrigger, computeModel);
381
+
382
+ // return addToSpace(PresetName.EMAIL_TABLE, space, canvasModel, computeModel);
383
+ // });
384
+ // cb?.(objects);
385
+ // return objects;
386
+ // },
387
+ // ],
194
388
 
195
389
  [
196
390
  PresetName.CHAT_GPT,
@@ -209,8 +403,17 @@ export const generator = () => ({
209
403
  builder
210
404
  .createEdge({ source: chat.id, target: gpt.id, input: 'prompt' })
211
405
  .createEdge({ source: gpt.id, target: text.id, output: 'text' })
212
- .createEdge({ source: queueId.id, target: append.id, input: 'id' })
213
- .createEdge({ source: gpt.id, target: append.id, output: 'messages', input: 'items' });
406
+ .createEdge({
407
+ source: queueId.id,
408
+ target: append.id,
409
+ input: 'id',
410
+ })
411
+ .createEdge({
412
+ source: gpt.id,
413
+ target: append.id,
414
+ output: 'messages',
415
+ input: 'items',
416
+ });
214
417
  });
215
418
 
216
419
  const computeModel = createComputeGraph(canvasModel);
@@ -222,99 +425,100 @@ export const generator = () => ({
222
425
  },
223
426
  ],
224
427
 
225
- [
226
- PresetName.EMAIL_WITH_SUMMARY,
227
- async (space, n, cb) => {
228
- const objects = range(n, () => {
229
- const canvasModel = CanvasGraphModel.create<ComputeShape>();
230
-
231
- const results = space.db.query(Filter.type(TableType)).runSync();
232
- const emailTable = results.find((r) => r.object?.view?.target?.query?.typename?.endsWith('Email'));
233
- invariant(emailTable, 'Email table not found.');
234
-
235
- const template = canvasModel.createNode(
236
- createTemplate({
237
- valueType: 'object',
238
- ...rawPosition({ centerX: 192, centerY: -176, width: 320, height: 320 }),
239
- }),
240
- );
241
- const templateContent = ['{'];
242
-
243
- let functionTrigger: FunctionTrigger | undefined;
244
- canvasModel.builder.call((builder) => {
245
- const gpt = canvasModel.createNode(
246
- createGpt(rawPosition({ centerX: -400, centerY: -112, width: 256, height: 202 })),
247
- );
248
- const systemPrompt = canvasModel.createNode(
249
- createConstant({
250
- value: "use one word to describe content category. don't write anything else",
251
- ...rawPosition({ centerX: -800, centerY: -160, width: 192, height: 128 }),
252
- }),
253
- );
254
- const triggerShape = createTrigger({
255
- spaceId: space.id,
256
- triggerKind: TriggerKind.Email,
257
- ...rawPosition({ centerX: -736, centerY: -384, width: 182, height: 192 }),
258
- });
259
- const trigger = canvasModel.createNode(triggerShape);
260
-
261
- const { queueId } = setupQueue(space, canvasModel, {
262
- idPosition: { centerX: -720, centerY: 224, width: 192, height: 256 },
263
- queuePosition: { centerX: -144, centerY: 416, width: 320, height: 448 },
264
- });
265
- const appendToQueue = canvasModel.createNode(
266
- createAppend(rawPosition({ centerX: -80, centerY: 96, width: 122, height: 128 })),
267
- );
268
-
269
- const tableId = canvasModel.createNode(
270
- createConstant({
271
- value: DXN.fromLocalObjectId(emailTable.id).toString(),
272
- ...rawPosition({ centerX: -112, centerY: -544, width: 192, height: 256 }),
273
- }),
274
- );
275
-
276
- const appendToTable = canvasModel.createNode(
277
- createAppend(rawPosition({ centerX: 560, centerY: -416, width: 128, height: 122 })),
278
- );
279
-
280
- templateContent.push(' "category": "{{text}}",');
281
- builder.createEdge({ source: gpt.id, target: template.id, input: 'text', output: 'text' });
282
-
283
- const properties = SchemaAST.getPropertySignatures(EmailTriggerOutput.ast);
284
- for (let i = 0; i < properties.length; i++) {
285
- const propName = properties[i].name.toString();
286
- builder.createEdge({ source: trigger.id, target: template.id, input: propName, output: propName });
287
- templateContent.push(` "${propName}": "{{${propName}}}"` + (i === properties.length - 1 ? '' : ','));
288
- }
289
- templateContent.push('}');
290
-
291
- builder
292
- .createEdge({ source: tableId.id, target: appendToTable.id, input: 'id' })
293
- .createEdge({ source: queueId.id, target: appendToQueue.id, input: 'id' })
294
- .createEdge({ source: gpt.id, target: appendToQueue.id, output: 'messages', input: 'items' })
295
- .createEdge({ source: systemPrompt.id, target: gpt.id, input: 'systemPrompt' })
296
- .createEdge({ source: trigger.id, target: gpt.id, input: 'prompt', output: 'body' })
297
- .createEdge({ source: template.id, target: appendToTable.id, input: 'items' });
298
-
299
- functionTrigger = triggerShape.functionTrigger!.target!;
300
- });
301
-
302
- const computeModel = createComputeGraph(canvasModel);
303
-
304
- const templateComputeNode = computeModel.nodes.find((n) => n.id === template.node);
305
- invariant(templateComputeNode, 'Template compute node was not created.');
306
- templateComputeNode.value = templateContent.join('\n');
307
- const extendedSchema = Schema.extend(EmailTriggerOutput, Schema.Struct({ text: Schema.String }));
308
- templateComputeNode.inputSchema = Type.toJsonSchema(extendedSchema);
309
-
310
- attachTrigger(functionTrigger, computeModel);
311
-
312
- return addToSpace(PresetName.EMAIL_WITH_SUMMARY, space, canvasModel, computeModel);
313
- });
314
- cb?.(objects);
315
- return objects;
316
- },
317
- ],
428
+ // TODO(wittjosiah): Remove?
429
+ // [
430
+ // PresetName.EMAIL_WITH_SUMMARY,
431
+ // async (space, n, cb) => {
432
+ // const objects = range(n, () => {
433
+ // const canvasModel = CanvasGraphModel.create<ComputeShape>();
434
+
435
+ // const results = space.db.query(Filter.type(TableType)).runSync();
436
+ // const emailTable = results.find((r) => r.object?.view?.target?.query?.typename?.endsWith('Email'));
437
+ // invariant(emailTable, 'Email table not found.');
438
+
439
+ // const template = canvasModel.createNode(
440
+ // createTemplate({
441
+ // valueType: 'object',
442
+ // ...rawPosition({ centerX: 192, centerY: -176, width: 320, height: 320 }),
443
+ // }),
444
+ // );
445
+ // const templateContent = ['{'];
446
+
447
+ // let functionTrigger: FunctionTrigger | undefined;
448
+ // canvasModel.builder.call((builder) => {
449
+ // const gpt = canvasModel.createNode(
450
+ // createGpt(rawPosition({ centerX: -400, centerY: -112, width: 256, height: 202 })),
451
+ // );
452
+ // const systemPrompt = canvasModel.createNode(
453
+ // createConstant({
454
+ // value: "use one word to describe content category. don't write anything else",
455
+ // ...rawPosition({ centerX: -800, centerY: -160, width: 192, height: 128 }),
456
+ // }),
457
+ // );
458
+ // const triggerShape = createTrigger({
459
+ // spaceId: space.id,
460
+ // triggerKind: 'email',
461
+ // ...rawPosition({ centerX: -736, centerY: -384, width: 182, height: 192 }),
462
+ // });
463
+ // const trigger = canvasModel.createNode(triggerShape);
464
+
465
+ // const { queueId } = setupQueue(space, canvasModel, {
466
+ // idPosition: { centerX: -720, centerY: 224, width: 192, height: 256 },
467
+ // queuePosition: { centerX: -144, centerY: 416, width: 320, height: 448 },
468
+ // });
469
+ // const appendToQueue = canvasModel.createNode(
470
+ // createAppend(rawPosition({ centerX: -80, centerY: 96, width: 122, height: 128 })),
471
+ // );
472
+
473
+ // const tableId = canvasModel.createNode(
474
+ // createConstant({
475
+ // value: DXN.fromLocalObjectId(emailTable.id).toString(),
476
+ // ...rawPosition({ centerX: -112, centerY: -544, width: 192, height: 256 }),
477
+ // }),
478
+ // );
479
+
480
+ // const appendToTable = canvasModel.createNode(
481
+ // createAppend(rawPosition({ centerX: 560, centerY: -416, width: 128, height: 122 })),
482
+ // );
483
+
484
+ // templateContent.push(' "category": "{{text}}",');
485
+ // builder.createEdge({ source: gpt.id, target: template.id, input: 'text', output: 'text' });
486
+
487
+ // const properties = SchemaAST.getPropertySignatures(EmailTriggerOutput.ast);
488
+ // for (let i = 0; i < properties.length; i++) {
489
+ // const propName = properties[i].name.toString();
490
+ // builder.createEdge({ source: trigger.id, target: template.id, input: propName, output: propName });
491
+ // templateContent.push(` "${propName}": "{{${propName}}}"` + (i === properties.length - 1 ? '' : ','));
492
+ // }
493
+ // templateContent.push('}');
494
+
495
+ // builder
496
+ // .createEdge({ source: tableId.id, target: appendToTable.id, input: 'id' })
497
+ // .createEdge({ source: queueId.id, target: appendToQueue.id, input: 'id' })
498
+ // .createEdge({ source: gpt.id, target: appendToQueue.id, output: 'messages', input: 'items' })
499
+ // .createEdge({ source: systemPrompt.id, target: gpt.id, input: 'systemPrompt' })
500
+ // .createEdge({ source: trigger.id, target: gpt.id, input: 'prompt', output: 'body' })
501
+ // .createEdge({ source: template.id, target: appendToTable.id, input: 'items' });
502
+
503
+ // functionTrigger = triggerShape.functionTrigger!.target!;
504
+ // });
505
+
506
+ // const computeModel = createComputeGraph(canvasModel);
507
+
508
+ // const templateComputeNode = computeModel.nodes.find((n) => n.id === template.node);
509
+ // invariant(templateComputeNode, 'Template compute node was not created.');
510
+ // templateComputeNode.value = templateContent.join('\n');
511
+ // const extendedSchema = Schema.extend(EmailTriggerOutput, Schema.Struct({ text: Schema.String }));
512
+ // templateComputeNode.inputSchema = JsonSchema.toJsonSchema(extendedSchema);
513
+
514
+ // attachTrigger(functionTrigger, computeModel);
515
+
516
+ // return addToSpace(PresetName.EMAIL_WITH_SUMMARY, space, canvasModel, computeModel);
517
+ // });
518
+ // cb?.(objects);
519
+ // return objects;
520
+ // },
521
+ // ],
318
522
 
319
523
  [
320
524
  PresetName.FOREX_FUNCTION_CALL,
@@ -333,9 +537,21 @@ export const generator = () => ({
333
537
  const view = canvasModel.createNode(createSurface(position({ x: 12, y: 0 })));
334
538
 
335
539
  builder
336
- .createEdge({ source: sourceCurrency.id, target: converter.id, input: 'from' })
337
- .createEdge({ source: targetCurrency.id, target: converter.id, input: 'to' })
338
- .createEdge({ source: converter.id, target: view.id, output: 'rate' });
540
+ .createEdge({
541
+ source: sourceCurrency.id,
542
+ target: converter.id,
543
+ input: 'from',
544
+ })
545
+ .createEdge({
546
+ source: targetCurrency.id,
547
+ target: converter.id,
548
+ input: 'to',
549
+ })
550
+ .createEdge({
551
+ source: converter.id,
552
+ target: view.id,
553
+ output: 'rate',
554
+ });
339
555
  });
340
556
 
341
557
  const computeModel = createComputeGraph(canvasModel);
@@ -353,34 +569,57 @@ export const generator = () => ({
353
569
  const objects = range(n, () => {
354
570
  const canvasModel = CanvasGraphModel.create<ComputeShape>();
355
571
 
356
- let functionTrigger: FunctionTrigger | undefined;
572
+ let functionTrigger: Trigger.Trigger | undefined;
357
573
  canvasModel.builder.call((builder) => {
358
574
  const triggerShape = createTrigger({
359
575
  spaceId: space.id,
360
- triggerKind: TriggerKind.Timer,
576
+ triggerKind: 'timer',
361
577
  ...position({ x: -10, y: -5 }),
362
578
  });
363
579
  const trigger = canvasModel.createNode(triggerShape);
364
580
  // DXOS dev-null channel.
365
581
  const channelId = canvasModel.createNode(
366
- createConstant({ value: '1088569858767212554', ...position({ x: -10, y: 0 }) }),
582
+ createConstant({
583
+ value: '1088569858767212554',
584
+ ...position({ x: -10, y: 0 }),
585
+ }),
367
586
  );
368
587
  const queueId = canvasModel.createNode(
369
588
  createConstant({
370
- value: new DXN(DXN.kind.QUEUE, ['data', space.id, Key.ObjectId.random()]).toString(),
589
+ value: EID.make({ spaceId: space.id, entityId: Key.EntityId.random() }),
371
590
  ...position({ x: -10, y: 5 }),
372
591
  }),
373
592
  );
374
593
  const converter = canvasModel.createNode(createFunction(position({ x: 0, y: 0 })));
375
594
  const view = canvasModel.createNode(createText(position({ x: 12, y: 0 })));
376
- const queue = canvasModel.createNode(createQueue(position({ x: 0, y: 12 })));
595
+ const queue = canvasModel.createNode(createFeed(position({ x: 0, y: 12 })));
377
596
 
378
597
  builder
379
- .createEdge({ source: trigger.id, target: converter.id, input: 'tick' })
380
- .createEdge({ source: channelId.id, target: converter.id, input: 'channelId' })
381
- .createEdge({ source: queueId.id, target: converter.id, input: 'queueId' })
382
- .createEdge({ source: converter.id, target: view.id, output: 'newMessages' })
383
- .createEdge({ source: queueId.id, target: queue.id, input: 'input' });
598
+ .createEdge({
599
+ source: trigger.id,
600
+ target: converter.id,
601
+ input: 'tick',
602
+ })
603
+ .createEdge({
604
+ source: channelId.id,
605
+ target: converter.id,
606
+ input: 'channelId',
607
+ })
608
+ .createEdge({
609
+ source: queueId.id,
610
+ target: converter.id,
611
+ input: 'queueId',
612
+ })
613
+ .createEdge({
614
+ source: converter.id,
615
+ target: view.id,
616
+ output: 'newMessages',
617
+ })
618
+ .createEdge({
619
+ source: queueId.id,
620
+ target: queue.id,
621
+ input: 'input',
622
+ });
384
623
 
385
624
  functionTrigger = triggerShape.functionTrigger!.target!;
386
625
  });
@@ -395,61 +634,62 @@ export const generator = () => ({
395
634
  },
396
635
  ],
397
636
 
398
- [
399
- PresetName.KANBAN_QUEUE,
400
- async (space, n, cb) => {
401
- const objects = range(n, () => {
402
- const canvasModel = CanvasGraphModel.create<ComputeShape>();
403
-
404
- // TODO(wittjosiah): Integrate directly w/ Kanban.
405
- // const results = space.db.query(Filter.type(KanbanType)).runSync();
406
- // const kanban = results.find((r) => r.object?.cardView?.target?.query?.type?.endsWith('Message'));
407
- // invariant(kanban, 'Kanban not found.');
408
-
409
- const results = space.db.query(Filter.type(TableType)).runSync();
410
- const messages = results.find((r) => r.object?.view?.target?.query?.typename?.endsWith('Message'));
411
- invariant(messages, 'Table not found.');
412
-
413
- let functionTrigger: FunctionTrigger | undefined;
414
- canvasModel.builder.call((builder) => {
415
- const triggerShape = createTrigger({
416
- spaceId: space.id,
417
- triggerKind: TriggerKind.Queue,
418
- ...position({ x: -10, y: -5 }),
419
- });
420
- const trigger = canvasModel.createNode(triggerShape);
421
-
422
- const tableId = canvasModel.createNode(
423
- createConstant({
424
- value: DXN.fromLocalObjectId(messages.id).toString(),
425
- ...position({ x: -10, y: 5 }),
426
- }),
427
- );
428
- const appendToTable = canvasModel.createNode(createAppend(position({ x: 10, y: 0 })));
429
-
430
- builder
431
- .createEdge({ source: tableId.id, target: appendToTable.id, input: 'id' })
432
- .createEdge({ source: trigger.id, target: appendToTable.id, input: 'items', output: 'item' });
433
-
434
- functionTrigger = triggerShape.functionTrigger!.target!;
435
- });
436
-
437
- const computeModel = createComputeGraph(canvasModel);
438
- attachTrigger(functionTrigger, computeModel);
439
-
440
- return addToSpace(PresetName.KANBAN_QUEUE, space, canvasModel, computeModel);
441
- });
442
- cb?.(objects);
443
- return objects;
444
- },
445
- ],
637
+ // TODO(wittjosiah): Remove?
638
+ // [
639
+ // PresetName.KANBAN_QUEUE,
640
+ // async (space, n, cb) => {
641
+ // const objects = range(n, () => {
642
+ // const canvasModel = CanvasGraphModel.create<ComputeShape>();
643
+
644
+ // // TODO(wittjosiah): Integrate directly w/ Kanban.
645
+ // // const results = space.db.query(Filter.type(KanbanType)).runSync();
646
+ // // const kanban = results.find((r) => r.object?.cardView?.target?.query?.type?.endsWith('Message'));
647
+ // // invariant(kanban, 'Kanban not found.');
648
+
649
+ // const results = space.db.query(Filter.type(TableType)).runSync();
650
+ // const messages = results.find((r) => r.object?.view?.target?.query?.typename?.endsWith('Message'));
651
+ // invariant(messages, 'Table not found.');
652
+
653
+ // let functionTrigger: FunctionTrigger | undefined;
654
+ // canvasModel.builder.call((builder) => {
655
+ // const triggerShape = createTrigger({
656
+ // spaceId: space.id,
657
+ // triggerKind: 'queue',
658
+ // ...position({ x: -10, y: -5 }),
659
+ // });
660
+ // const trigger = canvasModel.createNode(triggerShape);
661
+
662
+ // const tableId = canvasModel.createNode(
663
+ // createConstant({
664
+ // value: DXN.fromLocalObjectId(messages.id).toString(),
665
+ // ...position({ x: -10, y: 5 }),
666
+ // }),
667
+ // );
668
+ // const appendToTable = canvasModel.createNode(createAppend(position({ x: 10, y: 0 })));
669
+
670
+ // builder
671
+ // .createEdge({ source: tableId.id, target: appendToTable.id, input: 'id' })
672
+ // .createEdge({ source: trigger.id, target: appendToTable.id, input: 'items', output: 'item' });
673
+
674
+ // functionTrigger = triggerShape.functionTrigger!.target!;
675
+ // });
676
+
677
+ // const computeModel = createComputeGraph(canvasModel);
678
+ // attachTrigger(functionTrigger, computeModel);
679
+
680
+ // return addToSpace(PresetName.KANBAN_QUEUE, space, canvasModel, computeModel);
681
+ // });
682
+ // cb?.(objects);
683
+ // return objects;
684
+ // },
685
+ // ],
446
686
  ] as [PresetName, ObjectGenerator<any>][],
447
687
  });
448
688
 
449
- const createQueueSinkPreset = <SpecType extends TriggerKind>(
689
+ const createQueueSinkPreset = <SpecType extends Trigger.Kind>(
450
690
  space: Space,
451
691
  triggerKind: SpecType,
452
- initSpec: (spec: Extract<TriggerType, { kind: SpecType }>) => void,
692
+ initSpec: (spec: Obj.Mutable<Extract<Trigger.Spec, { kind: SpecType }>>) => void,
453
693
  triggerOutputName: string,
454
694
  ) => {
455
695
  const canvasModel = CanvasGraphModel.create<ComputeShape>();
@@ -461,7 +701,7 @@ const createQueueSinkPreset = <SpecType extends TriggerKind>(
461
701
  }),
462
702
  );
463
703
 
464
- let functionTrigger: FunctionTrigger | undefined;
704
+ let functionTrigger: Trigger.Trigger | undefined;
465
705
  canvasModel.builder.call((builder) => {
466
706
  const triggerShape = createTrigger({
467
707
  spaceId: space.id,
@@ -482,7 +722,12 @@ const createQueueSinkPreset = <SpecType extends TriggerKind>(
482
722
  builder
483
723
  .createEdge({ source: queueId.id, target: append.id, input: 'id' })
484
724
  .createEdge({ source: template.id, target: append.id, input: 'items' })
485
- .createEdge({ source: trigger.id, target: template.id, output: triggerOutputName, input: 'type' })
725
+ .createEdge({
726
+ source: trigger.id,
727
+ target: template.id,
728
+ output: triggerOutputName,
729
+ input: 'type',
730
+ })
486
731
  .createEdge({
487
732
  source: random.id,
488
733
  target: template.id,
@@ -492,15 +737,20 @@ const createQueueSinkPreset = <SpecType extends TriggerKind>(
492
737
  functionTrigger = triggerShape.functionTrigger!.target!;
493
738
  const triggerSpec = functionTrigger.spec;
494
739
  invariant(triggerSpec && triggerSpec.kind === triggerKind, 'No trigger spec.');
495
- initSpec(triggerSpec as any);
740
+ Obj.update(functionTrigger, (functionTrigger) => {
741
+ initSpec(functionTrigger.spec as any);
742
+ });
496
743
  });
497
744
 
498
745
  const computeModel = createComputeGraph(canvasModel);
499
746
 
500
747
  const templateComputeNode = computeModel.nodes.find((n) => n.id === template.node);
501
748
  invariant(templateComputeNode, 'Template compute node was not created.');
749
+ // NOTE: These are plain object mutations during model construction, not ECHO object mutations.
502
750
  templateComputeNode.value = ['{', ' "@type": "{{type}}",', ' "id": "@{{changeId}}"', '}'].join('\n');
503
- templateComputeNode.inputSchema = Type.toJsonSchema(Schema.Struct({ type: Schema.String, changeId: Schema.String }));
751
+ templateComputeNode.inputSchema = JsonSchema.toJsonSchema(
752
+ Schema.Struct({ type: Schema.String, changeId: Schema.String }),
753
+ );
504
754
  attachTrigger(functionTrigger, computeModel);
505
755
 
506
756
  return { canvasModel, computeModel };
@@ -508,7 +758,7 @@ const createQueueSinkPreset = <SpecType extends TriggerKind>(
508
758
 
509
759
  const addToSpace = (name: string, space: Space, canvas: CanvasGraphModel, compute: ComputeGraphModel) => {
510
760
  return space.db.add(
511
- Obj.make(CanvasBoardType, {
761
+ Obj.make(CanvasBoard.CanvasBoard, {
512
762
  name,
513
763
  computeGraph: Ref.make(compute.root),
514
764
  layout: canvas.graph,
@@ -523,12 +773,12 @@ const setupQueue = (
523
773
  ) => {
524
774
  const queueId = canvasModel.createNode(
525
775
  createConstant({
526
- value: new DXN(DXN.kind.QUEUE, ['data', space.id, Key.ObjectId.random()]).toString(),
776
+ value: EID.make({ spaceId: space.id, entityId: Key.EntityId.random() }),
527
777
  ...(args?.idPosition ? rawPosition(args.idPosition) : position({ x: -18, y: 5, width: 8, height: 6 })),
528
778
  }),
529
779
  );
530
780
  const queue = canvasModel.createNode(
531
- createQueue(
781
+ createFeed(
532
782
  args?.queuePosition ? rawPosition(args.queuePosition) : position({ x: -3, y: 3, width: 14, height: 10 }),
533
783
  ),
534
784
  );
@@ -536,17 +786,27 @@ const setupQueue = (
536
786
  return { queue, queueId };
537
787
  };
538
788
 
539
- const attachTrigger = (functionTrigger: FunctionTrigger | undefined, computeModel: ComputeGraphModel) => {
789
+ const attachTrigger = (functionTrigger: Trigger.Trigger | undefined, computeModel: ComputeGraphModel) => {
540
790
  invariant(functionTrigger);
541
- functionTrigger.function = Ref.make(computeModel.root);
542
791
  const inputNode = computeModel.nodes.find((node) => node.type === NODE_INPUT)!;
543
- functionTrigger.inputNodeId = inputNode.id;
792
+ Obj.update(functionTrigger, (functionTrigger) => {
793
+ functionTrigger.function = Ref.make(computeModel.root);
794
+ functionTrigger.inputNodeId = inputNode.id;
795
+ });
544
796
  };
545
797
 
546
- type RawPositionInput = { centerX: number; centerY: number; width: number; height: number };
798
+ type RawPositionInput = {
799
+ centerX: number;
800
+ centerY: number;
801
+ width: number;
802
+ height: number;
803
+ };
547
804
 
548
805
  const rawPosition = (args: RawPositionInput) => {
549
- return { center: { x: args.centerX, y: args.centerY }, size: { width: args.width, height: args.height } };
806
+ return {
807
+ center: { x: args.centerX, y: args.centerY },
808
+ size: { width: args.width, height: args.height },
809
+ };
550
810
  };
551
811
 
552
812
  const position = (rect: { x: number; y: number; width?: number; height?: number }) => {
@@ -554,7 +814,10 @@ const position = (rect: { x: number; y: number; width?: number; height?: number
554
814
  const [center, size] = rectToPoints({ width: 0, height: 0, ...rect });
555
815
  const { x, y, width, height } = pointsToRect([pointMultiply(center, snap), pointMultiply(size, snap)]);
556
816
  if (width && height) {
557
- return { center: { x, y }, size: width && height ? { width, height } : undefined };
817
+ return {
818
+ center: { x, y },
819
+ size: width && height ? { width, height } : undefined,
820
+ };
558
821
  } else {
559
822
  return { center: { x, y } };
560
823
  }