@dxos/plugin-script 0.8.4-main.406dc2a → 0.8.4-main.52d7546f51

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 (415) hide show
  1. package/dist/lib/browser/DeploymentDialog-XUAFCNI7.mjs +14 -0
  2. package/dist/lib/browser/{NotebookContainer-LVGRPFY3.mjs → NotebookContainer-UQ4I24R6.mjs} +357 -195
  3. package/dist/lib/browser/NotebookContainer-UQ4I24R6.mjs.map +7 -0
  4. package/dist/lib/browser/ScriptContainer-NB76645V.mjs +149 -0
  5. package/dist/lib/browser/ScriptContainer-NB76645V.mjs.map +7 -0
  6. package/dist/lib/browser/app-graph-builder-66ZDI72K.mjs +69 -0
  7. package/dist/lib/browser/app-graph-builder-66ZDI72K.mjs.map +7 -0
  8. package/dist/lib/browser/blueprint-definition-5RFKE7VK.mjs +18 -0
  9. package/dist/lib/browser/blueprint-definition-5RFKE7VK.mjs.map +7 -0
  10. package/dist/lib/browser/blueprints/index.mjs +8 -0
  11. package/dist/lib/browser/chunk-3BSF5BIA.mjs +113 -0
  12. package/dist/lib/browser/chunk-3BSF5BIA.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-ST3ACVUC.mjs → chunk-4N5TLXEJ.mjs} +29 -12
  14. package/dist/lib/browser/chunk-4N5TLXEJ.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-BKGEAUUH.mjs +270 -0
  16. package/dist/lib/browser/chunk-BKGEAUUH.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-BU6CGVU2.mjs +137 -0
  18. package/dist/lib/browser/chunk-BU6CGVU2.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-F3QKSKSF.mjs +35 -0
  20. package/dist/lib/browser/chunk-F3QKSKSF.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-I7CSE6T3.mjs +110 -0
  22. package/dist/lib/browser/chunk-I7CSE6T3.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  24. package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-LYMPME7J.mjs +609 -0
  26. package/dist/lib/browser/chunk-LYMPME7J.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-WWCDIB6Z.mjs +557 -0
  28. package/dist/lib/browser/chunk-WWCDIB6Z.mjs.map +7 -0
  29. package/dist/lib/browser/{chunk-EZVXV6DA.mjs → chunk-WYR4QHPE.mjs} +7 -2
  30. package/dist/lib/browser/chunk-WYR4QHPE.mjs.map +7 -0
  31. package/dist/lib/browser/compiler-VPUVTFQD.mjs +161 -0
  32. package/dist/lib/browser/compiler-VPUVTFQD.mjs.map +7 -0
  33. package/dist/lib/browser/index.mjs +103 -137
  34. package/dist/lib/browser/index.mjs.map +4 -4
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/operation-resolver-NYDY7GDT.mjs +83 -0
  37. package/dist/lib/browser/operation-resolver-NYDY7GDT.mjs.map +7 -0
  38. package/dist/lib/browser/react-surface-FYOQSC6S.mjs +140 -0
  39. package/dist/lib/browser/react-surface-FYOQSC6S.mjs.map +7 -0
  40. package/dist/lib/browser/settings-5SF77MRH.mjs +36 -0
  41. package/dist/lib/browser/settings-5SF77MRH.mjs.map +7 -0
  42. package/dist/lib/browser/templates/index.mjs +2 -1
  43. package/dist/lib/browser/types/index.mjs +12 -7
  44. package/dist/lib/node-esm/DeploymentDialog-GGWDQMEB.mjs +15 -0
  45. package/dist/lib/node-esm/DeploymentDialog-GGWDQMEB.mjs.map +7 -0
  46. package/dist/lib/node-esm/{NotebookContainer-QY5NJGJI.mjs → NotebookContainer-DQGZ6QHI.mjs} +357 -195
  47. package/dist/lib/node-esm/NotebookContainer-DQGZ6QHI.mjs.map +7 -0
  48. package/dist/lib/node-esm/ScriptContainer-PCNJFUWX.mjs +150 -0
  49. package/dist/lib/node-esm/ScriptContainer-PCNJFUWX.mjs.map +7 -0
  50. package/dist/lib/node-esm/app-graph-builder-IGAZTJ45.mjs +70 -0
  51. package/dist/lib/node-esm/app-graph-builder-IGAZTJ45.mjs.map +7 -0
  52. package/dist/lib/node-esm/blueprint-definition-EYL5GNDC.mjs +19 -0
  53. package/dist/lib/node-esm/blueprint-definition-EYL5GNDC.mjs.map +7 -0
  54. package/dist/lib/node-esm/blueprints/index.mjs +9 -0
  55. package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
  56. package/dist/lib/node-esm/chunk-3CKQUF55.mjs +610 -0
  57. package/dist/lib/node-esm/chunk-3CKQUF55.mjs.map +7 -0
  58. package/dist/lib/node-esm/chunk-3QBXN6QC.mjs +271 -0
  59. package/dist/lib/node-esm/chunk-3QBXN6QC.mjs.map +7 -0
  60. package/dist/lib/node-esm/{chunk-OG2SIKHE.mjs → chunk-5HSJPAK7.mjs} +7 -2
  61. package/dist/lib/node-esm/chunk-5HSJPAK7.mjs.map +7 -0
  62. package/dist/lib/node-esm/chunk-ECRSTVR6.mjs +558 -0
  63. package/dist/lib/node-esm/chunk-ECRSTVR6.mjs.map +7 -0
  64. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  65. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-KRVL7UYI.mjs +114 -0
  67. package/dist/lib/node-esm/chunk-KRVL7UYI.mjs.map +7 -0
  68. package/dist/lib/node-esm/chunk-SLU3KRV3.mjs +112 -0
  69. package/dist/lib/node-esm/chunk-SLU3KRV3.mjs.map +7 -0
  70. package/dist/lib/node-esm/chunk-U6PXM2HT.mjs +138 -0
  71. package/dist/lib/node-esm/chunk-U6PXM2HT.mjs.map +7 -0
  72. package/dist/lib/node-esm/{chunk-2GVTWESW.mjs → chunk-V37R7KB5.mjs} +29 -12
  73. package/dist/lib/node-esm/chunk-V37R7KB5.mjs.map +7 -0
  74. package/dist/lib/node-esm/chunk-Y3G5NCTP.mjs +36 -0
  75. package/dist/lib/node-esm/chunk-Y3G5NCTP.mjs.map +7 -0
  76. package/dist/lib/node-esm/compiler-WUOSY6MS.mjs +162 -0
  77. package/dist/lib/node-esm/compiler-WUOSY6MS.mjs.map +7 -0
  78. package/dist/lib/node-esm/index.mjs +103 -137
  79. package/dist/lib/node-esm/index.mjs.map +4 -4
  80. package/dist/lib/node-esm/meta.json +1 -1
  81. package/dist/lib/node-esm/operation-resolver-AJNJXGCE.mjs +84 -0
  82. package/dist/lib/node-esm/operation-resolver-AJNJXGCE.mjs.map +7 -0
  83. package/dist/lib/node-esm/react-surface-LREMOVNJ.mjs +141 -0
  84. package/dist/lib/node-esm/react-surface-LREMOVNJ.mjs.map +7 -0
  85. package/dist/lib/node-esm/settings-ILI762CY.mjs +37 -0
  86. package/dist/lib/node-esm/settings-ILI762CY.mjs.map +7 -0
  87. package/dist/lib/node-esm/templates/index.mjs +2 -1
  88. package/dist/lib/node-esm/types/index.mjs +12 -7
  89. package/dist/types/src/ScriptPlugin.d.ts +2 -1
  90. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  91. package/dist/types/src/blueprints/index.d.ts +2 -0
  92. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  93. package/dist/types/src/blueprints/script-blueprint.d.ts +22 -0
  94. package/dist/types/src/blueprints/script-blueprint.d.ts.map +1 -0
  95. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  96. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  98. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts +12 -0
  100. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/artifact-definition/index.d.ts +3 -0
  102. package/dist/types/src/capabilities/artifact-definition/index.d.ts.map +1 -0
  103. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +10 -0
  104. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
  106. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/compiler/compiler.d.ts +6 -0
  108. package/dist/types/src/capabilities/compiler/compiler.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/compiler/index.d.ts +3 -0
  110. package/dist/types/src/capabilities/compiler/index.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/index.d.ts +6 -7
  112. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  114. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  116. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  117. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  118. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  120. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/settings/index.d.ts +7 -0
  122. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  123. package/dist/types/src/capabilities/settings/settings.d.ts +10 -0
  124. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  125. package/dist/types/src/compiler/compiler.d.ts +1 -1
  126. package/dist/types/src/compiler/compiler.d.ts.map +1 -1
  127. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts +2 -2
  128. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
  129. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts +4 -6
  130. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts +1 -1
  132. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  133. package/dist/types/src/components/NotebookContainer.d.ts +3 -5
  134. package/dist/types/src/components/NotebookContainer.d.ts.map +1 -1
  135. package/dist/types/src/components/NotebookContainer.stories.d.ts +3 -244
  136. package/dist/types/src/components/NotebookContainer.stories.d.ts.map +1 -1
  137. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts +4 -3
  138. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts.map +1 -1
  139. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts +1 -1
  140. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts.map +1 -1
  141. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts +5 -4
  142. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts.map +1 -1
  143. package/dist/types/src/components/QueryEditor/QueryEditor.d.ts +5 -0
  144. package/dist/types/src/components/QueryEditor/QueryEditor.d.ts.map +1 -0
  145. package/dist/types/src/components/QueryEditor/QueryEditor.stories.d.ts +13 -0
  146. package/dist/types/src/components/QueryEditor/QueryEditor.stories.d.ts.map +1 -0
  147. package/dist/types/src/components/QueryEditor/index.d.ts +2 -0
  148. package/dist/types/src/components/QueryEditor/index.d.ts.map +1 -0
  149. package/dist/types/src/components/ScriptContainer.d.ts +5 -6
  150. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  151. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +7 -8
  152. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  153. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts +5 -4
  154. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts.map +1 -1
  155. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts +2 -2
  156. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
  157. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts +4 -2
  158. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
  159. package/dist/types/src/components/TestPanel/TestContainer.d.ts +3 -3
  160. package/dist/types/src/components/TestPanel/TestContainer.d.ts.map +1 -1
  161. package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -1
  162. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +3 -2
  163. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  164. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts +1 -1
  165. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/index.d.ts +2 -2
  167. package/dist/types/src/components/index.d.ts.map +1 -1
  168. package/dist/types/src/e2e/ai.test.d.ts +2 -0
  169. package/dist/types/src/e2e/ai.test.d.ts.map +1 -0
  170. package/dist/types/src/e2e/deploy.test.d.ts +2 -0
  171. package/dist/types/src/e2e/deploy.test.d.ts.map +1 -0
  172. package/dist/types/src/hooks/deploy.d.ts +15 -30
  173. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  174. package/dist/types/src/hooks/format.d.ts +4 -4
  175. package/dist/types/src/hooks/format.d.ts.map +1 -1
  176. package/dist/types/src/hooks/index.d.ts +1 -0
  177. package/dist/types/src/hooks/index.d.ts.map +1 -1
  178. package/dist/types/src/hooks/template.d.ts +6 -16
  179. package/dist/types/src/hooks/template.d.ts.map +1 -1
  180. package/dist/types/src/hooks/useCompiler.d.ts +7 -0
  181. package/dist/types/src/hooks/useCompiler.d.ts.map +1 -0
  182. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
  183. package/dist/types/src/hooks/useToolbarState.d.ts +8 -1
  184. package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -1
  185. package/dist/types/src/index.d.ts +1 -1
  186. package/dist/types/src/index.d.ts.map +1 -1
  187. package/dist/types/src/meta.d.ts +2 -2
  188. package/dist/types/src/meta.d.ts.map +1 -1
  189. package/dist/types/src/notebook/compute-graph.d.ts +58 -0
  190. package/dist/types/src/notebook/compute-graph.d.ts.map +1 -0
  191. package/dist/types/src/notebook/compute-graph.test.d.ts +2 -0
  192. package/dist/types/src/notebook/compute-graph.test.d.ts.map +1 -0
  193. package/dist/types/src/notebook/eval.d.ts +1 -1
  194. package/dist/types/src/notebook/eval.d.ts.map +1 -1
  195. package/dist/types/src/notebook/index.d.ts +1 -1
  196. package/dist/types/src/notebook/index.d.ts.map +1 -1
  197. package/dist/types/src/templates/anthropic.d.ts +8 -0
  198. package/dist/types/src/templates/anthropic.d.ts.map +1 -0
  199. package/dist/types/src/templates/chess-bot.d.ts +16 -0
  200. package/dist/types/src/templates/chess-bot.d.ts.map +1 -0
  201. package/dist/types/src/templates/commentary.d.ts +16 -0
  202. package/dist/types/src/templates/commentary.d.ts.map +1 -0
  203. package/dist/types/src/templates/forex-effect.d.ts +4 -1
  204. package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
  205. package/dist/types/src/templates/forex.d.ts +4 -1
  206. package/dist/types/src/templates/forex.d.ts.map +1 -1
  207. package/dist/types/src/templates/index.d.ts +12 -3
  208. package/dist/types/src/templates/index.d.ts.map +1 -1
  209. package/dist/types/src/templates/ping.d.ts +1 -4
  210. package/dist/types/src/templates/ping.d.ts.map +1 -1
  211. package/dist/types/src/testing/data.d.ts +2 -18
  212. package/dist/types/src/testing/data.d.ts.map +1 -1
  213. package/dist/types/src/testing/simulator.test.d.ts +2 -0
  214. package/dist/types/src/testing/simulator.test.d.ts.map +1 -0
  215. package/dist/types/src/translations.d.ts +4 -3
  216. package/dist/types/src/translations.d.ts.map +1 -1
  217. package/dist/types/src/types/Notebook.d.ts +100 -0
  218. package/dist/types/src/types/Notebook.d.ts.map +1 -0
  219. package/dist/types/src/types/actions.d.ts +30 -56
  220. package/dist/types/src/types/actions.d.ts.map +1 -1
  221. package/dist/types/src/types/capabilities.d.ts +12 -0
  222. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  223. package/dist/types/src/types/events.d.ts +5 -0
  224. package/dist/types/src/types/events.d.ts.map +1 -0
  225. package/dist/types/src/types/index.d.ts +4 -1
  226. package/dist/types/src/types/index.d.ts.map +1 -1
  227. package/dist/types/src/types/types.d.ts +6 -0
  228. package/dist/types/src/types/types.d.ts.map +1 -0
  229. package/dist/types/src/util/deploy.d.ts +4 -4
  230. package/dist/types/src/util/deploy.d.ts.map +1 -1
  231. package/dist/types/src/util/functions.d.ts +3 -3
  232. package/dist/types/src/util/functions.d.ts.map +1 -1
  233. package/dist/types/tsconfig.tsbuildinfo +1 -1
  234. package/package.json +114 -82
  235. package/src/ScriptPlugin.tsx +45 -87
  236. package/src/blueprints/index.ts +5 -0
  237. package/src/blueprints/script-blueprint.ts +24 -0
  238. package/src/capabilities/app-graph-builder/app-graph-builder.ts +56 -0
  239. package/src/capabilities/app-graph-builder/index.ts +7 -0
  240. package/src/capabilities/{artifact-definition.ts → artifact-definition/artifact-definition.ts} +97 -95
  241. package/src/capabilities/artifact-definition/index.ts +7 -0
  242. package/src/capabilities/blueprint-definition/blueprint-definition.ts +24 -0
  243. package/src/capabilities/blueprint-definition/index.ts +7 -0
  244. package/src/capabilities/compiler/compiler.ts +103 -0
  245. package/src/capabilities/compiler/index.ts +7 -0
  246. package/src/capabilities/index.ts +6 -10
  247. package/src/capabilities/operation-resolver/index.ts +7 -0
  248. package/src/capabilities/operation-resolver/operation-resolver.ts +75 -0
  249. package/src/capabilities/react-surface/index.ts +7 -0
  250. package/src/capabilities/react-surface/react-surface.tsx +119 -0
  251. package/src/capabilities/settings/index.ts +7 -0
  252. package/src/capabilities/settings/settings.ts +33 -0
  253. package/src/compiler/compiler.ts +10 -3
  254. package/src/components/DeploymentDialog/DeploymentDialog.stories.tsx +33 -24
  255. package/src/components/DeploymentDialog/DeploymentDialog.tsx +38 -41
  256. package/src/components/FrameContainer/FrameContainer.tsx +6 -4
  257. package/src/components/NotebookContainer.stories.tsx +60 -5
  258. package/src/components/NotebookContainer.tsx +179 -32
  259. package/src/components/NotebookStack/NotebookCell.tsx +84 -84
  260. package/src/components/NotebookStack/NotebookStack.stories.tsx +32 -9
  261. package/src/components/NotebookStack/NotebookStack.tsx +13 -6
  262. package/src/components/QueryEditor/QueryEditor.stories.tsx +100 -0
  263. package/src/components/QueryEditor/QueryEditor.tsx +47 -0
  264. package/src/components/QueryEditor/index.ts +5 -0
  265. package/src/components/ScriptContainer.tsx +49 -34
  266. package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +42 -19
  267. package/src/components/ScriptToolbar/ScriptToolbar.tsx +25 -28
  268. package/src/components/Settings/ScriptObjectSettings.tsx +55 -32
  269. package/src/components/Settings/ScriptPluginSettings.tsx +19 -14
  270. package/src/components/TestPanel/TestContainer.tsx +7 -7
  271. package/src/components/TestPanel/TestPanel.tsx +60 -35
  272. package/src/components/TypescriptEditor/TypescriptEditor.stories.tsx +14 -9
  273. package/src/components/TypescriptEditor/TypescriptEditor.tsx +69 -73
  274. package/src/e2e/ai.test.ts +92 -0
  275. package/src/e2e/deploy.test.ts +64 -0
  276. package/src/hooks/deploy.ts +40 -32
  277. package/src/hooks/format.ts +7 -3
  278. package/src/hooks/index.ts +1 -0
  279. package/src/hooks/template.ts +20 -24
  280. package/src/hooks/useCompiler.ts +24 -0
  281. package/src/hooks/useCreateAndDeployScriptTemplates.ts +14 -16
  282. package/src/hooks/useToolbarState.ts +29 -4
  283. package/src/index.ts +1 -1
  284. package/src/meta.ts +8 -4
  285. package/src/notebook/{notebook.test.ts → compute-graph.test.ts} +31 -19
  286. package/src/notebook/{notebook.ts → compute-graph.ts} +65 -18
  287. package/src/notebook/eval.ts +1 -1
  288. package/src/notebook/index.ts +1 -1
  289. package/src/templates/anthropic.ts +42 -0
  290. package/src/templates/chess-bot.ts +58 -0
  291. package/src/templates/commentary.ts +230 -0
  292. package/src/templates/data-generator.ts +1 -1
  293. package/src/templates/forex-effect.ts +22 -27
  294. package/src/templates/forex.ts +7 -6
  295. package/src/templates/gmail.ts +1 -2
  296. package/src/templates/index.ts +18 -5
  297. package/src/templates/ping.ts +14 -5
  298. package/src/testing/data.ts +34 -9
  299. package/src/testing/simulator.test.ts +40 -0
  300. package/src/translations.ts +4 -3
  301. package/src/types/Notebook.ts +41 -0
  302. package/src/types/actions.ts +18 -26
  303. package/src/types/capabilities.ts +17 -0
  304. package/src/types/events.ts +11 -0
  305. package/src/types/index.ts +4 -1
  306. package/src/types/types.ts +15 -0
  307. package/src/util/deploy.ts +30 -40
  308. package/src/util/functions.ts +32 -28
  309. package/src/vite-env.d.ts +2 -0
  310. package/dist/lib/browser/DeploymentDialog-65TWT6S5.mjs +0 -13
  311. package/dist/lib/browser/NotebookContainer-LVGRPFY3.mjs.map +0 -7
  312. package/dist/lib/browser/ScriptContainer-LRTRN7JW.mjs +0 -149
  313. package/dist/lib/browser/ScriptContainer-LRTRN7JW.mjs.map +0 -7
  314. package/dist/lib/browser/app-graph-builder-DPYULSME.mjs +0 -65
  315. package/dist/lib/browser/app-graph-builder-DPYULSME.mjs.map +0 -7
  316. package/dist/lib/browser/blueprint-definition-ET5KZ46I.mjs +0 -28
  317. package/dist/lib/browser/blueprint-definition-ET5KZ46I.mjs.map +0 -7
  318. package/dist/lib/browser/chunk-5CYLWXRH.mjs +0 -89
  319. package/dist/lib/browser/chunk-5CYLWXRH.mjs.map +0 -7
  320. package/dist/lib/browser/chunk-75LH4EUR.mjs +0 -326
  321. package/dist/lib/browser/chunk-75LH4EUR.mjs.map +0 -7
  322. package/dist/lib/browser/chunk-E7DXDICD.mjs +0 -282
  323. package/dist/lib/browser/chunk-E7DXDICD.mjs.map +0 -7
  324. package/dist/lib/browser/chunk-EZVXV6DA.mjs.map +0 -7
  325. package/dist/lib/browser/chunk-I3QSGUFJ.mjs +0 -646
  326. package/dist/lib/browser/chunk-I3QSGUFJ.mjs.map +0 -7
  327. package/dist/lib/browser/chunk-JO2O7W6J.mjs +0 -254
  328. package/dist/lib/browser/chunk-JO2O7W6J.mjs.map +0 -7
  329. package/dist/lib/browser/chunk-N6M34EUC.mjs +0 -112
  330. package/dist/lib/browser/chunk-N6M34EUC.mjs.map +0 -7
  331. package/dist/lib/browser/chunk-NM4WQS4F.mjs +0 -153
  332. package/dist/lib/browser/chunk-NM4WQS4F.mjs.map +0 -7
  333. package/dist/lib/browser/chunk-OKXN2N7M.mjs +0 -15
  334. package/dist/lib/browser/chunk-OKXN2N7M.mjs.map +0 -7
  335. package/dist/lib/browser/chunk-ST3ACVUC.mjs.map +0 -7
  336. package/dist/lib/browser/compiler-G2N2CG63.mjs +0 -98
  337. package/dist/lib/browser/compiler-G2N2CG63.mjs.map +0 -7
  338. package/dist/lib/browser/intent-resolver-JLU7DVLQ.mjs +0 -105
  339. package/dist/lib/browser/intent-resolver-JLU7DVLQ.mjs.map +0 -7
  340. package/dist/lib/browser/react-surface-76SDTUYG.mjs +0 -127
  341. package/dist/lib/browser/react-surface-76SDTUYG.mjs.map +0 -7
  342. package/dist/lib/browser/settings-ERFKVNUK.mjs +0 -25
  343. package/dist/lib/browser/settings-ERFKVNUK.mjs.map +0 -7
  344. package/dist/lib/node-esm/DeploymentDialog-I63ZC2HH.mjs +0 -14
  345. package/dist/lib/node-esm/NotebookContainer-QY5NJGJI.mjs.map +0 -7
  346. package/dist/lib/node-esm/ScriptContainer-SVXCSLNH.mjs +0 -150
  347. package/dist/lib/node-esm/ScriptContainer-SVXCSLNH.mjs.map +0 -7
  348. package/dist/lib/node-esm/app-graph-builder-UXJGHXSL.mjs +0 -66
  349. package/dist/lib/node-esm/app-graph-builder-UXJGHXSL.mjs.map +0 -7
  350. package/dist/lib/node-esm/blueprint-definition-AIYFOT7Q.mjs +0 -30
  351. package/dist/lib/node-esm/blueprint-definition-AIYFOT7Q.mjs.map +0 -7
  352. package/dist/lib/node-esm/chunk-2GVTWESW.mjs.map +0 -7
  353. package/dist/lib/node-esm/chunk-4X375PGY.mjs +0 -90
  354. package/dist/lib/node-esm/chunk-4X375PGY.mjs.map +0 -7
  355. package/dist/lib/node-esm/chunk-67OVZHI3.mjs +0 -327
  356. package/dist/lib/node-esm/chunk-67OVZHI3.mjs.map +0 -7
  357. package/dist/lib/node-esm/chunk-C2ORIPKH.mjs +0 -154
  358. package/dist/lib/node-esm/chunk-C2ORIPKH.mjs.map +0 -7
  359. package/dist/lib/node-esm/chunk-NUXZQQ6P.mjs +0 -16
  360. package/dist/lib/node-esm/chunk-NUXZQQ6P.mjs.map +0 -7
  361. package/dist/lib/node-esm/chunk-OG2SIKHE.mjs.map +0 -7
  362. package/dist/lib/node-esm/chunk-SMFPSKQT.mjs +0 -647
  363. package/dist/lib/node-esm/chunk-SMFPSKQT.mjs.map +0 -7
  364. package/dist/lib/node-esm/chunk-VRSDE4CI.mjs +0 -114
  365. package/dist/lib/node-esm/chunk-VRSDE4CI.mjs.map +0 -7
  366. package/dist/lib/node-esm/chunk-VZAFGLD7.mjs +0 -283
  367. package/dist/lib/node-esm/chunk-VZAFGLD7.mjs.map +0 -7
  368. package/dist/lib/node-esm/chunk-YW36TZ7K.mjs +0 -255
  369. package/dist/lib/node-esm/chunk-YW36TZ7K.mjs.map +0 -7
  370. package/dist/lib/node-esm/compiler-PLDAZ5GJ.mjs +0 -99
  371. package/dist/lib/node-esm/compiler-PLDAZ5GJ.mjs.map +0 -7
  372. package/dist/lib/node-esm/intent-resolver-SFGTIFOG.mjs +0 -106
  373. package/dist/lib/node-esm/intent-resolver-SFGTIFOG.mjs.map +0 -7
  374. package/dist/lib/node-esm/react-surface-SHEBNW4R.mjs +0 -128
  375. package/dist/lib/node-esm/react-surface-SHEBNW4R.mjs.map +0 -7
  376. package/dist/lib/node-esm/settings-5TYXQ42N.mjs +0 -26
  377. package/dist/lib/node-esm/settings-5TYXQ42N.mjs.map +0 -7
  378. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  379. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  380. package/dist/types/src/capabilities/artifact-definition.d.ts +0 -11
  381. package/dist/types/src/capabilities/artifact-definition.d.ts.map +0 -1
  382. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -5
  383. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  384. package/dist/types/src/capabilities/capabilities.d.ts +0 -5
  385. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  386. package/dist/types/src/capabilities/compiler.d.ts +0 -4
  387. package/dist/types/src/capabilities/compiler.d.ts.map +0 -1
  388. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  389. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  390. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  391. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  392. package/dist/types/src/capabilities/settings.d.ts +0 -4
  393. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  394. package/dist/types/src/events.d.ts +0 -4
  395. package/dist/types/src/events.d.ts.map +0 -1
  396. package/dist/types/src/notebook/notebook.d.ts +0 -35
  397. package/dist/types/src/notebook/notebook.d.ts.map +0 -1
  398. package/dist/types/src/notebook/notebook.test.d.ts +0 -2
  399. package/dist/types/src/notebook/notebook.test.d.ts.map +0 -1
  400. package/dist/types/src/templates/chess.d.ts +0 -3
  401. package/dist/types/src/templates/chess.d.ts.map +0 -1
  402. package/dist/types/src/types/schema.d.ts +0 -61
  403. package/dist/types/src/types/schema.d.ts.map +0 -1
  404. package/src/capabilities/app-graph-builder.ts +0 -65
  405. package/src/capabilities/blueprint-definition.ts +0 -30
  406. package/src/capabilities/capabilities.ts +0 -12
  407. package/src/capabilities/compiler.ts +0 -34
  408. package/src/capabilities/intent-resolver.ts +0 -87
  409. package/src/capabilities/react-surface.tsx +0 -102
  410. package/src/capabilities/settings.ts +0 -21
  411. package/src/events.ts +0 -11
  412. package/src/templates/chess.ts +0 -49
  413. package/src/types/schema.ts +0 -48
  414. /package/dist/lib/browser/{DeploymentDialog-65TWT6S5.mjs.map → DeploymentDialog-XUAFCNI7.mjs.map} +0 -0
  415. /package/dist/lib/{node-esm/DeploymentDialog-I63ZC2HH.mjs.map → browser/blueprints/index.mjs.map} +0 -0
@@ -6,14 +6,19 @@ import React from 'react';
6
6
 
7
7
  import { useClient } from '@dxos/react-client';
8
8
  import { Button, Select, useTranslation } from '@dxos/react-ui';
9
- import { type EditorInputMode, EditorInputModes } from '@dxos/react-ui-editor';
10
- import { ControlGroup, ControlItemInput, ControlPage, ControlSection } from '@dxos/react-ui-form';
9
+ import { Settings } from '@dxos/react-ui-form';
10
+ import { type EditorInputMode, EditorInputModes } from '@dxos/ui-editor';
11
11
 
12
12
  import { meta } from '../../meta';
13
13
  import { type ScriptSettings } from '../../types';
14
14
  import { getAccessCredential } from '../../util';
15
15
 
16
- export const ScriptPluginSettings = ({ settings }: { settings: ScriptSettings }) => {
16
+ export type ScriptPluginSettingsComponentProps = {
17
+ settings: ScriptSettings;
18
+ onSettingsChange: (fn: (current: ScriptSettings) => ScriptSettings) => void;
19
+ };
20
+
21
+ export const ScriptPluginSettings = ({ settings, onSettingsChange }: ScriptPluginSettingsComponentProps) => {
17
22
  const { t } = useTranslation(meta.id);
18
23
  const client = useClient();
19
24
 
@@ -24,19 +29,19 @@ export const ScriptPluginSettings = ({ settings }: { settings: ScriptSettings })
24
29
  };
25
30
 
26
31
  return (
27
- <ControlPage>
28
- <ControlSection title={t('settings title', { ns: meta.id })}>
29
- <ControlGroup>
32
+ <Settings.Root>
33
+ <Settings.Section title={t('settings title', { ns: meta.id })}>
34
+ <Settings.Group>
30
35
  {/* TODO(wittjosiah): Hide outside of dev environments. */}
31
- <ControlItemInput title={t('authenticate action label')}>
36
+ <Settings.ItemInput title={t('authenticate action label')}>
32
37
  <Button onClick={handleAuthenticate}>{t('authenticate button label')}</Button>
33
- </ControlItemInput>
38
+ </Settings.ItemInput>
34
39
 
35
- <ControlItemInput title={t('editor input mode label')}>
40
+ <Settings.ItemInput title={t('editor input mode label')}>
36
41
  <Select.Root
37
42
  value={settings.editorInputMode ?? 'default'}
38
43
  onValueChange={(value) => {
39
- settings.editorInputMode = value as EditorInputMode;
44
+ onSettingsChange((s) => ({ ...s, editorInputMode: value as EditorInputMode }));
40
45
  }}
41
46
  >
42
47
  <Select.TriggerButton placeholder={t('select editor input mode placeholder')} />
@@ -53,9 +58,9 @@ export const ScriptPluginSettings = ({ settings }: { settings: ScriptSettings })
53
58
  </Select.Content>
54
59
  </Select.Portal>
55
60
  </Select.Root>
56
- </ControlItemInput>
57
- </ControlGroup>
58
- </ControlSection>
59
- </ControlPage>
61
+ </Settings.ItemInput>
62
+ </Settings.Group>
63
+ </Settings.Section>
64
+ </Settings.Root>
60
65
  );
61
66
  };
@@ -4,8 +4,8 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { type ScriptType } from '@dxos/functions';
8
- import { StackItem } from '@dxos/react-ui-stack';
7
+ import { type Script } from '@dxos/functions';
8
+ import { Layout } from '@dxos/react-ui';
9
9
 
10
10
  import { useDeployState, useToolbarState } from '../../hooks';
11
11
 
@@ -13,15 +13,15 @@ import { TestPanel } from './TestPanel';
13
13
 
14
14
  export type TestContainerProps = {
15
15
  role: string;
16
- script: ScriptType;
16
+ script: Script.Script;
17
17
  };
18
18
 
19
- export const TestContainer = ({ script }: TestContainerProps) => {
19
+ export const TestContainer = ({ role, script }: TestContainerProps) => {
20
20
  const state = useToolbarState();
21
21
  useDeployState({ state, script });
22
22
  return (
23
- <StackItem.Content>
24
- <TestPanel functionUrl={state.functionUrl} />
25
- </StackItem.Content>
23
+ <Layout.Main role={role}>
24
+ <TestPanel functionUrl={state.value.functionUrl} />
25
+ </Layout.Main>
26
26
  );
27
27
  };
@@ -5,9 +5,9 @@
5
5
  import React, { forwardRef, useEffect, useRef, useState } from 'react';
6
6
 
7
7
  import { log } from '@dxos/log';
8
- import { Avatar, Icon, Input, type ThemedClassName, Toolbar, useTranslation } from '@dxos/react-ui';
8
+ import { Avatar, Icon, Input, ScrollArea, type ThemedClassName, Toolbar, useTranslation } from '@dxos/react-ui';
9
9
  import { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';
10
- import { errorText, mx } from '@dxos/react-ui-theme';
10
+ import { errorText, mx } from '@dxos/ui-theme';
11
11
 
12
12
  import { meta } from '../../meta';
13
13
 
@@ -16,7 +16,12 @@ type State = 'pending' | 'responding';
16
16
  /**
17
17
  * Request or response.
18
18
  */
19
- type Message = { type: 'request' | 'response'; text?: string; data?: any; error?: Error };
19
+ type Message = {
20
+ type: 'request' | 'response';
21
+ text?: string;
22
+ data?: any;
23
+ error?: Error;
24
+ };
20
25
 
21
26
  export type TestPanelProps = ThemedClassName<{
22
27
  functionUrl?: string;
@@ -61,7 +66,15 @@ export const TestPanel = ({ classNames, functionUrl }: TestPanelProps) => {
61
66
  inputRef.current?.focus();
62
67
  };
63
68
 
64
- const handleResponse = ({ text, data, error }: { text?: string; data?: any; error?: Error } = {}) => {
69
+ const handleResponse = ({
70
+ text,
71
+ data,
72
+ error,
73
+ }: {
74
+ text?: string;
75
+ data?: any;
76
+ error?: Error;
77
+ } = {}) => {
65
78
  controller.current = null;
66
79
  setHistory((history) => [...history, { type: 'response', text, data, error } satisfies Message]);
67
80
  setResult('');
@@ -108,7 +121,9 @@ export const TestPanel = ({ classNames, functionUrl }: TestPanelProps) => {
108
121
  // Check for error.
109
122
  if (!response.ok) {
110
123
  const text = await response.text();
111
- handleResponse({ error: new Error(text || response.statusText || String(response.status)) });
124
+ handleResponse({
125
+ error: new Error(text || response.statusText || String(response.status)),
126
+ });
112
127
  return;
113
128
  }
114
129
 
@@ -159,11 +174,11 @@ export const TestPanel = ({ classNames, functionUrl }: TestPanelProps) => {
159
174
  };
160
175
 
161
176
  return (
162
- <div className={mx('flex flex-col h-full overflow-hidden', classNames)}>
177
+ <div className={mx('flex flex-col bs-full overflow-hidden', classNames)}>
163
178
  {/* TODO(burdon): Replace with Thread. */}
164
179
  <MessageThread ref={scrollerRef} state={state} result={result} history={history} />
165
180
  {/* TODO(burdon): Replace with Form based on the function's input schema. */}
166
- <Toolbar.Root classNames='p-2'>
181
+ <Toolbar.Root>
167
182
  <Input.Root>
168
183
  <Input.TextInput
169
184
  ref={inputRef}
@@ -174,12 +189,20 @@ export const TestPanel = ({ classNames, functionUrl }: TestPanelProps) => {
174
189
  onKeyDown={(ev) => ev.key === 'Enter' && handleRequest(input)}
175
190
  />
176
191
  </Input.Root>
177
- <Toolbar.Button onClick={() => handleRequest(input)}>
178
- <Icon icon='ph--play--regular' size={4} />
179
- </Toolbar.Button>
180
- <Toolbar.Button onClick={() => (state ? handleStop() : handleClear())}>
181
- <Icon icon={state ? 'ph--stop--regular' : 'ph--trash--regular'} size={4} />
182
- </Toolbar.Button>
192
+ <Toolbar.IconButton
193
+ icon='ph--play--regular'
194
+ size={4}
195
+ label='Execute'
196
+ iconOnly
197
+ onClick={() => handleRequest(input)}
198
+ />
199
+ <Toolbar.IconButton
200
+ icon={state ? 'ph--stop--regular' : 'ph--trash--regular'}
201
+ size={4}
202
+ label={state ? 'Stop' : 'Clear'}
203
+ iconOnly
204
+ onClick={() => (state ? handleStop() : handleClear())}
205
+ />
183
206
  </Toolbar.Root>
184
207
  </div>
185
208
  );
@@ -196,36 +219,38 @@ type MessageThreadProps = {
196
219
  const MessageThread = forwardRef<HTMLDivElement, MessageThreadProps>(
197
220
  ({ state, history, result }: MessageThreadProps, forwardedRef) => {
198
221
  return (
199
- <div ref={forwardedRef} className='flex flex-col gap-6 h-full p-2 overflow-x-hidden overflow-y-auto'>
200
- {history.map((message, i) => (
201
- <div key={i} className='grid grid-cols-[2rem_1fr_2rem]'>
202
- <div className='p-1'>{message.type === 'response' && <RobotAvatar />}</div>
203
- <div className='overflow-auto'>
204
- <MessageItem message={message} />
205
- </div>
206
- </div>
207
- ))}
208
-
209
- {result?.length > 0 && (
210
- <div className='grid grid-cols-[2rem_1fr_2rem]'>
211
- <div className='p-1'>
212
- {(state === 'pending' && <Icon icon='ph--spinner--regular' size={6} classNames='animate-spin' />) || (
213
- <Icon icon='ph--robot--regular' size={6} classNames='animate-[pulse_1s_ease-in-out_infinite]' />
214
- )}
222
+ <ScrollArea.Root orientation='vertical' classNames='bs-full' ref={forwardedRef}>
223
+ <ScrollArea.Viewport classNames='gap-6 p-2'>
224
+ {history.map((message, i) => (
225
+ <div key={i} className='grid grid-cols-[2rem_1fr_2rem]'>
226
+ <div className='p-1'>{message.type === 'response' && <RobotAvatar />}</div>
227
+ <div className='overflow-auto'>
228
+ <MessageItem message={message} />
229
+ </div>
215
230
  </div>
216
- <div className='overflow-auto'>
217
- <MessageItem message={{ type: 'response', text: result }} />
231
+ ))}
232
+
233
+ {result?.length > 0 && (
234
+ <div className='grid grid-cols-[2rem_1fr_2rem]'>
235
+ <div className='p-1'>
236
+ {(state === 'pending' && <Icon icon='ph--spinner--regular' size={6} classNames='animate-spin' />) || (
237
+ <Icon icon='ph--robot--regular' size={6} classNames='animate-[pulse_1s_ease-in-out_infinite]' />
238
+ )}
239
+ </div>
240
+ <div className='overflow-auto'>
241
+ <MessageItem message={{ type: 'response', text: result }} />
242
+ </div>
218
243
  </div>
219
- </div>
220
- )}
221
- </div>
244
+ )}
245
+ </ScrollArea.Viewport>
246
+ </ScrollArea.Root>
222
247
  );
223
248
  },
224
249
  );
225
250
 
226
251
  const MessageItem = ({ classNames, message }: ThemedClassName<{ message: Message }>) => {
227
252
  const { type, text, data, error } = message;
228
- const wrapper = 'p-1 px-2 rounded-md bg-hoverSurface overflow-auto';
253
+ const wrapper = 'p-1 pli-2 rounded-md bg-hoverSurface overflow-auto';
229
254
  return (
230
255
  <div className={mx('flex', type === 'request' ? 'ml-[1rem] justify-end' : 'mr-[1rem]', classNames)}>
231
256
  {error && <div className={mx(wrapper, 'whitespace-pre', errorText)}>{String(error)}</div>}
@@ -5,13 +5,13 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React, { useCallback, useMemo, useState } from 'react';
7
7
 
8
- import { createDocAccessor } from '@dxos/react-client/echo';
8
+ import { createDocAccessor } from '@dxos/echo-db';
9
9
  import { createObject } from '@dxos/react-client/echo';
10
10
  import { Toolbar } from '@dxos/react-ui';
11
+ import { Layout } from '@dxos/react-ui';
11
12
  import { withLayout, withTheme } from '@dxos/react-ui/testing';
12
- import { createDataExtensions } from '@dxos/react-ui-editor';
13
- import { StackItem } from '@dxos/react-ui-stack';
14
13
  import { Json } from '@dxos/react-ui-syntax-highlighter';
14
+ import { createDataExtensions } from '@dxos/ui-editor';
15
15
  import { trim } from '@dxos/util';
16
16
 
17
17
  import { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';
@@ -25,7 +25,7 @@ const DefaultStory = (props: TypescriptEditorProps) => {
25
25
  const [result, setResult] = useState<object | undefined>({});
26
26
 
27
27
  // TODO(burdon): Make this work.
28
- // const object = useMemo(() => DataType.makeText(templates[1].source), []);
28
+ // const object = useMemo(() => Text.make(templates[1].source), []);
29
29
  // const script = useMemo(
30
30
  // () =>
31
31
  // Obj.make(ScriptType, {
@@ -35,7 +35,12 @@ const DefaultStory = (props: TypescriptEditorProps) => {
35
35
  // );
36
36
 
37
37
  const extensions = useMemo(
38
- () => [createDataExtensions({ id: object.id, text: createDocAccessor(object, ['content']) })],
38
+ () => [
39
+ createDataExtensions({
40
+ id: object.id,
41
+ text: createDocAccessor(object, ['content']),
42
+ }),
43
+ ],
39
44
  [],
40
45
  );
41
46
 
@@ -61,16 +66,16 @@ const DefaultStory = (props: TypescriptEditorProps) => {
61
66
  }, [object]);
62
67
 
63
68
  return (
64
- <StackItem.Content toolbar>
69
+ <Layout.Main toolbar>
65
70
  {/* <ScriptToolbar script={script} state={{}} /> */}
66
71
  <Toolbar.Root>
67
72
  <Toolbar.Button onClick={handleRun}>Run</Toolbar.Button>
68
73
  </Toolbar.Root>
69
74
  <div role='none' className='grid grid-rows-[1fr_min-content] bs-full overflow-hidden text-sm'>
70
75
  <TypescriptEditor {...props} initialValue={object.content} extensions={extensions} />
71
- <Json data={result} classNames='shrink-0 p-2 border-t border-subduedSeparator' />
76
+ <Json data={result} classNames='shrink-0 p-2 border-bs border-subduedSeparator' />
72
77
  </div>
73
- </StackItem.Content>
78
+ </Layout.Main>
74
79
  );
75
80
  };
76
81
 
@@ -78,7 +83,7 @@ const meta = {
78
83
  title: 'plugins/plugin-script/TypescriptEditor',
79
84
  component: TypescriptEditor,
80
85
  render: DefaultStory,
81
- decorators: [withTheme, withLayout({ container: 'column', classNames: 'is-prose' })],
86
+ decorators: [withTheme(), withLayout({ layout: 'column', classNames: 'is-proseMaxWidth' })],
82
87
  } satisfies Meta<typeof DefaultStory>;
83
88
 
84
89
  export default meta;
@@ -12,20 +12,20 @@ import { tags } from '@lezer/highlight';
12
12
  import { type VirtualTypeScriptEnvironment } from '@typescript/vfs';
13
13
  import { continueKeymap } from '@valtown/codemirror-continue';
14
14
  import { type HoverInfo, tsAutocomplete, tsFacet, tsHover, tsLinter, tsSync } from '@valtown/codemirror-ts';
15
- import React from 'react';
15
+ import React, { memo } from 'react';
16
16
 
17
- import { Domino, type ThemeMode, type ThemedClassName, useThemeContext } from '@dxos/react-ui';
17
+ import { type ThemeMode, type ThemedClassName, useThemeContext } from '@dxos/react-ui';
18
+ import { type UseTextEditorProps, useTextEditor } from '@dxos/react-ui-editor';
19
+ import { Domino } from '@dxos/ui';
18
20
  import {
19
21
  type BasicExtensionsOptions,
20
22
  type EditorInputMode,
21
23
  InputModeExtensions,
22
- type UseTextEditorProps,
23
24
  createBasicExtensions,
24
25
  createThemeExtensions,
25
26
  defaultStyles,
26
- useTextEditor,
27
- } from '@dxos/react-ui-editor';
28
- import { mx } from '@dxos/react-ui-theme';
27
+ } from '@dxos/ui-editor';
28
+ import { mx } from '@dxos/ui-theme';
29
29
  import { isNonNullable } from '@dxos/util';
30
30
 
31
31
  export type TypescriptEditorProps = ThemedClassName<
@@ -39,71 +39,68 @@ export type TypescriptEditorProps = ThemedClassName<
39
39
  } & Pick<UseTextEditorProps, 'initialValue' | 'extensions' | 'scrollTo' | 'selection'>
40
40
  >;
41
41
 
42
- export const TypescriptEditor = ({
43
- classNames,
44
- id,
45
- role = 'article',
46
- inputMode = 'vscode',
47
- toolbar,
48
- env,
49
- options,
50
- initialValue,
51
- extensions,
52
- scrollTo,
53
- selection,
54
- }: TypescriptEditorProps) => {
55
- const { themeMode } = useThemeContext();
56
- const { parentRef, focusAttributes } = useTextEditor(
57
- () => ({
58
- id,
59
- initialValue,
60
- selection,
61
- scrollTo,
62
- extensions: [
63
- extensions,
64
- createBasicExtensions({
65
- highlightActiveLine: true,
66
- indentWithTab: true,
67
- lineNumbers: true,
68
- lineWrapping: false,
69
- monospace: true,
70
- scrollPastEnd: role !== 'section',
71
- search: true,
72
- ...options,
73
- }),
74
- createThemeExtensions({ themeMode, syntaxHighlighting: true }),
75
- InputModeExtensions[inputMode],
42
+ export const TypescriptEditor = memo(
43
+ ({
44
+ classNames,
45
+ id,
46
+ role = 'article',
47
+ inputMode = 'vscode',
48
+ env,
49
+ options,
50
+ initialValue,
51
+ extensions,
52
+ scrollTo,
53
+ selection,
54
+ }: TypescriptEditorProps) => {
55
+ const { themeMode } = useThemeContext();
56
+ const { parentRef, focusAttributes } = useTextEditor(
57
+ () => ({
58
+ id,
59
+ initialValue,
60
+ selection,
61
+ scrollTo,
62
+ extensions: [
63
+ extensions,
64
+ createBasicExtensions({
65
+ highlightActiveLine: true,
66
+ indentWithTab: true,
67
+ lineNumbers: true,
68
+ lineWrapping: false,
69
+ scrollPastEnd: role !== 'section',
70
+ search: true,
71
+ ...options,
72
+ }),
73
+ createThemeExtensions({
74
+ monospace: true,
75
+ themeMode,
76
+ syntaxHighlighting: true,
77
+ }),
76
78
 
77
- javascript({ typescript: true }),
78
- autocompletion({ override: env ? [tsAutocomplete()] : undefined }),
79
+ InputModeExtensions[inputMode],
80
+ javascript({ typescript: true }),
81
+ autocompletion({ override: env ? [tsAutocomplete()] : undefined }),
79
82
 
80
- // Continues block comments when pressing Enter.
81
- Prec.high(keymap.of(continueKeymap)),
82
- keymap.of(completionKeymap),
83
- keymap.of(lintKeymap),
83
+ // Continues block comments when pressing Enter.
84
+ Prec.high(keymap.of(continueKeymap)),
85
+ keymap.of(completionKeymap),
86
+ keymap.of(lintKeymap),
84
87
 
85
- // https://github.com/val-town/codemirror-ts
86
- env && [
87
- tsFacet.of({ env, path: `/src/${id}.ts` }),
88
- tsSync(),
89
- tsLinter(),
90
- tsHover({ renderTooltip: createTooltipRenderer(themeMode) }),
91
- ],
92
- ].filter(isNonNullable),
93
- }),
94
- [id, extensions, themeMode, inputMode, selection, scrollTo],
95
- );
88
+ // https://github.com/val-town/codemirror-ts
89
+ env && [
90
+ // TODO(burdon): Fix type.
91
+ tsFacet.of({ env: env as any, path: `./src/${id}.ts` }),
92
+ tsSync(),
93
+ tsLinter(),
94
+ tsHover({ renderTooltip: createTooltipRenderer(themeMode) }),
95
+ ],
96
+ ].filter(isNonNullable),
97
+ }),
98
+ [themeMode, id, extensions, inputMode, selection, scrollTo, env],
99
+ );
96
100
 
97
- // TODO(brudon): Use react-ui-editor's Editor component.
98
- return (
99
- <div
100
- ref={parentRef}
101
- data-toolbar={toolbar ? 'enabled' : 'disabled'}
102
- className={mx(classNames)}
103
- {...focusAttributes}
104
- />
105
- );
106
- };
101
+ return <div ref={parentRef} className={mx(classNames)} {...focusAttributes} />;
102
+ },
103
+ );
107
104
 
108
105
  // TODO(burdon): Factor out (react-ui-editor).
109
106
  const createTooltipRenderer = (themeMode: ThemeMode) => {
@@ -126,15 +123,14 @@ const createTooltipRenderer = (themeMode: ThemeMode) => {
126
123
  };
127
124
 
128
125
  return (info: HoverInfo) => {
126
+ const children =
127
+ info.quickInfo?.displayParts?.map(({ kind, text }) =>
128
+ Domino.of('span').classNames(classFromKind(kind)).text(text),
129
+ ) ?? [];
129
130
  return {
130
131
  dom: Domino.of('div')
131
132
  .classNames('xs:max-is-80 max-is-lg p-1 bg-baseSurface rounded border border-separator')
132
- .children(
133
- ...(info.quickInfo?.displayParts?.map(({ kind, text }) =>
134
- Domino.of('span').classNames(classFromKind(kind)).text(text),
135
- ) ?? []),
136
- )
137
- .build(),
133
+ .children(...children).root,
138
134
  };
139
135
  };
140
136
  };
@@ -0,0 +1,92 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { describe } from '@effect/vitest';
6
+ import { test } from 'vitest';
7
+
8
+ import { Client } from '@dxos/client';
9
+ import { type Space } from '@dxos/client-protocol';
10
+ import { configPreset } from '@dxos/config';
11
+ import { Function } from '@dxos/functions';
12
+ import { FunctionsServiceClient } from '@dxos/functions-runtime/edge';
13
+ import { bundleFunction } from '@dxos/functions-runtime/native';
14
+ import { FunctionRuntimeKind } from '@dxos/protocols';
15
+ import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
16
+
17
+ // To heavy to run in CI.
18
+ describe.runIf(process.env.DX_TEST_TAGS?.includes('functions-e2e')).skip('Function', () => {
19
+ const config = configPreset({ edge: 'local' });
20
+
21
+ test('bundle anthropic function', { timeout: 120_000 }, async () => {
22
+ await bundleFunction({
23
+ entryPoint: new URL('../templates/anthropic.ts', import.meta.url).pathname,
24
+ verbose: true,
25
+ });
26
+ });
27
+
28
+ test('deploy empty function', { timeout: 120_000 }, async () => {
29
+ const { space, functionsServiceClient } = await setup();
30
+
31
+ await sync(space);
32
+ const func = await deployFunction(
33
+ space,
34
+ functionsServiceClient,
35
+ new URL('../templates/ping.ts', import.meta.url).pathname,
36
+ );
37
+ console.log(func);
38
+ throw new Error('test');
39
+ });
40
+
41
+ test('deploy and invoke anthropic function', { timeout: 120_000 }, async () => {
42
+ const { space, functionsServiceClient } = await setup();
43
+ await sync(space);
44
+ const func = await deployFunction(
45
+ space,
46
+ functionsServiceClient,
47
+ new URL('../templates/anthropic.ts', import.meta.url).pathname,
48
+ );
49
+
50
+ const result = await functionsServiceClient.invoke(func, {
51
+ message: 'Hello, world!',
52
+ });
53
+ console.log(result);
54
+ });
55
+
56
+ const setup = async () => {
57
+ const client = await new Client({ config, types: [Function.Function] }).initialize();
58
+ await client.halo.createIdentity();
59
+
60
+ const space = await client.spaces.create();
61
+ await space.waitUntilReady();
62
+ await space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED);
63
+
64
+ const functionsServiceClient = FunctionsServiceClient.fromClient(client);
65
+ return { client, space, functionsServiceClient };
66
+ };
67
+
68
+ const sync = async (space: Space) => {
69
+ await space.db.flush({ indexes: true });
70
+ await space.internal.syncToEdge({
71
+ onProgress: (state) =>
72
+ console.log(state ? `${state.unsyncedDocumentCount} documents syncing...` : 'connecting to edge...'),
73
+ });
74
+ };
75
+
76
+ const deployFunction = async (space: Space, functionsServiceClient: FunctionsServiceClient, entryPoint: string) => {
77
+ const artifact = await bundleFunction({
78
+ entryPoint,
79
+ verbose: true,
80
+ });
81
+ const func = await functionsServiceClient.deploy({
82
+ version: '0.0.1',
83
+ ownerPublicKey: space.key,
84
+ entryPoint: artifact.entryPoint,
85
+ assets: artifact.assets,
86
+ runtime: FunctionRuntimeKind.enums.WORKER_LOADER,
87
+ });
88
+
89
+ space.db.add(func);
90
+ return func;
91
+ };
92
+ });
@@ -0,0 +1,64 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { readFile } from 'node:fs/promises';
6
+
7
+ import { describe, expect, test } from 'vitest';
8
+
9
+ import { Client, type Config } from '@dxos/client';
10
+ import { createEdgeIdentity } from '@dxos/client/edge';
11
+ import { configPreset } from '@dxos/config';
12
+ import { bundleFunction } from '@dxos/functions-runtime/bundler';
13
+ import { FunctionsServiceClient } from '@dxos/functions-runtime/edge';
14
+ import { invariant } from '@dxos/invariant';
15
+ import { log } from '@dxos/log';
16
+
17
+ describe.runIf(process.env.DX_TEST_TAGS?.includes('functions-e2e'))('Functions deployment', () => {
18
+ test('deploys FOREX (effect) function and invokes it via EDGE (main)', { timeout: 120_000 }, async () => {
19
+ const config = configPreset({ edge: 'main' });
20
+ await testDeploy(config);
21
+ });
22
+
23
+ test('deploys FOREX (effect) function and invokes it via EDGE (production)', { timeout: 120_000 }, async () => {
24
+ const config = configPreset({ edge: 'production' });
25
+ await testDeploy(config);
26
+ });
27
+
28
+ const testDeploy = async (config: Config) => {
29
+ await using client = await new Client({ config }).initialize();
30
+ await client.halo.createIdentity();
31
+
32
+ const space = await client.spaces.create();
33
+ await space.waitUntilReady();
34
+
35
+ // Inline echo function source.
36
+ const source = await readFile(new URL('../templates/forex-effect.ts', import.meta.url), 'utf-8');
37
+
38
+ // Bundle and upload.
39
+ const buildResult = await bundleFunction({ source });
40
+ if ('error' in buildResult) {
41
+ throw buildResult.error ?? new Error('Bundle creation failed');
42
+ }
43
+ const functionsServiceClient = FunctionsServiceClient.fromClient(client);
44
+
45
+ const func = await functionsServiceClient.deploy({
46
+ ownerPublicKey: space.key,
47
+ version: '0.0.1',
48
+ entryPoint: buildResult.entryPoint,
49
+ assets: buildResult.assets,
50
+ });
51
+
52
+ // Invoke deployed function via EDGE directly.
53
+ const edgeClient = client.edge;
54
+ invariant(edgeClient, 'edgeClient is required');
55
+ edgeClient.setIdentity(createEdgeIdentity(client));
56
+
57
+ const input = { from: 'USD', to: 'EUR' };
58
+ const result = await functionsServiceClient.invoke(func, input);
59
+ log.info('>>> result', { result, func });
60
+ const resultNumber = Number(result);
61
+ expect(resultNumber).toBeGreaterThan(0);
62
+ expect(resultNumber).toBeLessThan(100);
63
+ };
64
+ });