@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
@@ -4,13 +4,14 @@
4
4
 
5
5
  import { useEffect, useMemo } from 'react';
6
6
 
7
- import { FunctionType, type ScriptType, getUserFunctionIdInMetadata } from '@dxos/functions';
7
+ import { Obj, Query, Ref } from '@dxos/echo';
8
+ import { Function, type Script, getUserFunctionIdInMetadata } from '@dxos/functions';
8
9
  import { log } from '@dxos/log';
9
10
  import { type Client, useClient } from '@dxos/react-client';
10
- import { Query, Ref, type Space, getMeta, getSpace, useQuery } from '@dxos/react-client/echo';
11
+ import { type Space, getSpace, useQuery } from '@dxos/react-client/echo';
11
12
  import { type TFunction } from '@dxos/react-ui';
12
13
  import { createMenuAction } from '@dxos/react-ui-menu';
13
- import { errorMessageColors } from '@dxos/react-ui-theme';
14
+ import { errorMessageColors } from '@dxos/ui-theme';
14
15
 
15
16
  import { meta } from '../meta';
16
17
  import { deployScript, getFunctionUrl, isScriptDeployed } from '../util';
@@ -24,10 +25,12 @@ export type DeployState = {
24
25
  error: string;
25
26
  };
26
27
 
28
+ import { type ScriptToolbarStateStore } from './useToolbarState';
29
+
27
30
  export type CreateDeployOptions = {
28
- state: Partial<DeployState>;
29
- script: ScriptType;
30
- fn: FunctionType;
31
+ state: ScriptToolbarStateStore;
32
+ script: Script.Script;
33
+ fn: Function.Function;
31
34
  space?: Space;
32
35
  existingFunctionId?: string;
33
36
  client: Client;
@@ -35,12 +38,14 @@ export type CreateDeployOptions = {
35
38
  };
36
39
 
37
40
  export const createDeploy = ({ state, script, space, fn, client, existingFunctionId, t }: CreateDeployOptions) => {
41
+ const { value } = state;
42
+
38
43
  // TODO(wittjosiah): Should this be an action?
39
44
  const errorItem = createMenuAction('error', () => {}, {
40
- label: state.error ?? ['no error label', { ns: meta.id }],
45
+ label: value.error ?? ['no error label', { ns: meta.id }],
41
46
  icon: 'ph--warning-circle--regular',
42
- hidden: !state.error,
43
- classNames: state.error && errorMessageColors,
47
+ hidden: !value.error,
48
+ classNames: value.error && errorMessageColors,
44
49
  });
45
50
 
46
51
  const deployAction = createMenuAction<DeployActionProperties>(
@@ -50,39 +55,39 @@ export const createDeploy = ({ state, script, space, fn, client, existingFunctio
50
55
  return;
51
56
  }
52
57
 
53
- state.error = undefined;
54
- state.deploying = true;
58
+ state.set('error', undefined);
59
+ state.set('deploying', true);
55
60
 
56
61
  const result = await deployScript({ script, client, space, fn, existingFunctionId });
57
62
 
58
63
  if (!result.success) {
59
64
  log.catch(result.error);
60
- state.error = t('upload failed label');
65
+ state.set('error', t('upload failed label'));
61
66
  }
62
67
 
63
- state.deploying = false;
68
+ state.set('deploying', false);
64
69
  },
65
70
  {
66
71
  type: 'deploy',
67
- label: [state.deploying ? 'publishing label' : 'deploy label', { ns: meta.id }],
68
- icon: state.deploying ? 'ph--spinner-gap--regular' : 'ph--cloud-arrow-up--regular',
69
- disabled: state.deploying,
70
- classNames: state.deploying ? '[&_svg]:animate-spin' : '',
72
+ label: [value.deploying ? 'publishing label' : 'deploy label', { ns: meta.id }],
73
+ icon: value.deploying ? 'ph--spinner-gap--regular' : 'ph--cloud-arrow-up--regular',
74
+ disabled: value.deploying,
75
+ classNames: value.deploying ? '[&_svg]:animate-spin' : '',
71
76
  },
72
77
  );
73
78
 
74
79
  const copyAction = createMenuAction<DeployActionProperties>(
75
80
  'copy',
76
81
  async () => {
77
- if (state.functionUrl) {
78
- await navigator.clipboard.writeText(state.functionUrl);
82
+ if (value.functionUrl) {
83
+ await navigator.clipboard.writeText(value.functionUrl);
79
84
  }
80
85
  },
81
86
  {
82
87
  type: 'copy',
83
88
  label: ['copy link label', { ns: meta.id }],
84
89
  icon: 'ph--link--regular',
85
- disabled: !state.functionUrl,
90
+ disabled: !value.functionUrl,
86
91
  },
87
92
  );
88
93
 
@@ -96,29 +101,32 @@ export const createDeploy = ({ state, script, space, fn, client, existingFunctio
96
101
  };
97
102
  };
98
103
 
99
- export const useDeployState = ({ state, script }: { state: Partial<DeployState>; script: ScriptType }) => {
104
+ export const useDeployState = ({ state, script }: { state: ScriptToolbarStateStore; script: Script.Script }) => {
100
105
  const { space, client, fn, existingFunctionId } = useDeployDeps({ script });
101
106
  useEffect(() => {
102
107
  if (!existingFunctionId) {
103
108
  return;
104
109
  }
105
110
 
106
- state.functionUrl = getFunctionUrl({
107
- script,
108
- fn,
109
- edgeUrl: client.config.values.runtime?.services?.edge?.url ?? '',
110
- });
111
- }, [existingFunctionId, space, fn, script, client.config.values.runtime?.services?.edge?.url]);
111
+ state.set(
112
+ 'functionUrl',
113
+ getFunctionUrl({
114
+ script,
115
+ fn,
116
+ edgeUrl: client.config.values.runtime?.services?.edge?.url ?? '',
117
+ }),
118
+ );
119
+ }, [existingFunctionId, space, fn, script, client.config.values.runtime?.services?.edge?.url, state]);
112
120
 
113
121
  useEffect(() => {
114
- state.deployed = isScriptDeployed({ script, fn });
115
- }, [script.changed, existingFunctionId, fn, script]);
122
+ state.set('deployed', isScriptDeployed({ script, fn }));
123
+ }, [script.changed, existingFunctionId, fn, script, state]);
116
124
  };
117
125
 
118
- export const useDeployDeps = ({ script }: { script: ScriptType }) => {
126
+ export const useDeployDeps = ({ script }: { script: Script.Script }) => {
119
127
  const client = useClient();
120
128
  const space = getSpace(script);
121
- const [fn] = useQuery(space, Query.type(FunctionType, { source: Ref.make(script) }));
122
- const existingFunctionId = useMemo(() => fn && getUserFunctionIdInMetadata(getMeta(fn)), [fn]);
129
+ const [fn] = useQuery(space?.db, Query.type(Function.Function, { source: Ref.make(script) }));
130
+ const existingFunctionId = useMemo(() => fn && getUserFunctionIdInMetadata(Obj.getMeta(fn)), [fn]);
123
131
  return { client, space, fn, existingFunctionId };
124
132
  };
@@ -6,7 +6,8 @@ import { format } from 'prettier';
6
6
  import prettierPluginEstree from 'prettier/plugins/estree';
7
7
  import prettierPluginTypescript from 'prettier/plugins/typescript';
8
8
 
9
- import { type ScriptType } from '@dxos/functions';
9
+ import { Obj } from '@dxos/echo';
10
+ import { type Script } from '@dxos/functions';
10
11
  import { log } from '@dxos/log';
11
12
  import { createMenuAction } from '@dxos/react-ui-menu';
12
13
 
@@ -14,7 +15,7 @@ import { meta } from '../meta';
14
15
 
15
16
  export type FormatActionProperties = { type: 'format' };
16
17
 
17
- export const createFormat = (script: ScriptType) => {
18
+ export const createFormat = (script: Script.Script) => {
18
19
  const formatAction = createMenuAction(
19
20
  'format',
20
21
  async () => {
@@ -23,12 +24,15 @@ export const createFormat = (script: ScriptType) => {
23
24
  }
24
25
 
25
26
  try {
26
- script.source.target!.content = await format(script.source.target!.content, {
27
+ const formatted = await format(script.source.target!.content, {
27
28
  parser: 'typescript',
28
29
  plugins: [prettierPluginEstree, prettierPluginTypescript],
29
30
  semi: true,
30
31
  singleQuote: true,
31
32
  });
33
+ Obj.change(script.source.target!, (s) => {
34
+ s.content = formatted;
35
+ });
32
36
  } catch (err: any) {
33
37
  // TODO(wittjosiah): Show error in UI.
34
38
  log.catch(err);
@@ -8,3 +8,4 @@ export * from './template';
8
8
 
9
9
  export * from './useCreateAndDeployScriptTemplates';
10
10
  export * from './useToolbarState';
11
+ export * from './useCompiler';
@@ -3,36 +3,33 @@
3
3
  //
4
4
 
5
5
  import { Obj } from '@dxos/echo';
6
- import { FUNCTIONS_PRESET_META_KEY, type ScriptType } from '@dxos/functions';
7
- import { createMenuAction, createMenuItemGroup } from '@dxos/react-ui-menu';
6
+ import { FUNCTIONS_PRESET_META_KEY, type Script } from '@dxos/functions';
7
+ import { createMenuAction } from '@dxos/react-ui-menu';
8
8
 
9
- import { meta } from '../meta';
10
9
  import { templates } from '../templates';
11
10
 
12
11
  export type TemplateActionProperties = { type: 'template'; value: string };
13
12
 
14
- const createTemplateSelectGroup = () => {
15
- // TODO(burdon): This should not be in the toolbar (move to create Object dialog).
16
- return createMenuItemGroup('template-select', {
17
- label: ['template select group label', { ns: meta.id }],
18
- variant: 'dropdownMenu',
19
- });
20
- };
21
-
22
- const createTemplateSelectActions = (script: ScriptType) => {
13
+ const createTemplateSelectActions = (script: Script.Script) => {
23
14
  return templates.map((template) => {
24
15
  return createMenuAction<TemplateActionProperties>(
25
16
  `template--${template.id}`,
26
17
  () => {
27
- script.name = template.name;
28
- script.source!.target!.content = template.source;
29
- const metaKeys = Obj.getMeta(script).keys;
30
- const oldPresetIndex = metaKeys.findIndex((key) => key.source === FUNCTIONS_PRESET_META_KEY);
31
- if (oldPresetIndex >= 0) {
32
- metaKeys.splice(oldPresetIndex, 1);
33
- }
34
- if ('presetId' in template) {
35
- metaKeys.push({ source: FUNCTIONS_PRESET_META_KEY, id: template.presetId });
18
+ Obj.change(script, (s) => {
19
+ s.name = template.name;
20
+ const meta = Obj.getMeta(s);
21
+ const oldPresetIndex = meta.keys.findIndex((key) => key.source === FUNCTIONS_PRESET_META_KEY);
22
+ if (oldPresetIndex >= 0) {
23
+ meta.keys.splice(oldPresetIndex, 1);
24
+ }
25
+ if ('presetId' in template) {
26
+ meta.keys.push({ source: FUNCTIONS_PRESET_META_KEY, id: template.presetId });
27
+ }
28
+ });
29
+ if (script.source?.target) {
30
+ Obj.change(script.source.target, (s) => {
31
+ s.content = template.source;
32
+ });
36
33
  }
37
34
  },
38
35
  {
@@ -44,11 +41,10 @@ const createTemplateSelectActions = (script: ScriptType) => {
44
41
  });
45
42
  };
46
43
 
47
- export const createTemplateSelect = (script: ScriptType) => {
48
- const templateSelectGroup = createTemplateSelectGroup();
44
+ export const createTemplateSelect = (script: Script.Script) => {
49
45
  const templateSelectActions = createTemplateSelectActions(script);
50
46
  return {
51
- nodes: [templateSelectGroup, ...templateSelectActions],
47
+ nodes: [...templateSelectActions],
52
48
  edges: [
53
49
  { source: 'root', target: 'template-select' },
54
50
  ...templateSelectActions.map((action) => ({ source: 'template-select', target: action.id })),
@@ -0,0 +1,24 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { useCapabilities, usePluginManager } from '@dxos/app-framework/ui';
6
+ import { runAndForwardErrors } from '@dxos/effect';
7
+ import { useAsyncEffect } from '@dxos/react-ui';
8
+
9
+ import type { Compiler } from '../compiler';
10
+ import { ScriptEvents } from '../types';
11
+ import { ScriptCapabilities } from '../types';
12
+
13
+ /**
14
+ * Asynchronously sets up the compiler and returns it.
15
+ * @returns The compiler instance or undefined if it is not ready.
16
+ */
17
+ export const useCompiler = (): Compiler | undefined => {
18
+ const manager = usePluginManager();
19
+ useAsyncEffect(async () => {
20
+ await manager.activate(ScriptEvents.SetupCompiler).pipe(runAndForwardErrors);
21
+ }, [manager]);
22
+ const [compiler] = useCapabilities(ScriptCapabilities.Compiler);
23
+ return compiler;
24
+ };
@@ -2,19 +2,18 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import * as Function from 'effect/Function';
6
5
  import { useCallback, useState } from 'react';
7
6
 
8
- import { chain, createIntent, useIntentDispatcher } from '@dxos/app-framework';
7
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
9
8
  import { Obj } from '@dxos/echo';
10
- import { ScriptType } from '@dxos/functions';
9
+ import { Script } from '@dxos/functions';
11
10
  import { invariant } from '@dxos/invariant';
12
- import { SpaceAction } from '@dxos/plugin-space/types';
11
+ import { SpaceOperation } from '@dxos/plugin-space/types';
13
12
  import { useClient } from '@dxos/react-client';
14
13
  import { type Space } from '@dxos/react-client/echo';
15
14
 
16
15
  import { type Template } from '../templates';
17
- import { ScriptAction } from '../types';
16
+ import { ScriptOperation } from '../types';
18
17
  import { deployScript } from '../util';
19
18
 
20
19
  type DeploymentStatus = 'idle' | 'pending' | 'success' | 'error';
@@ -27,7 +26,7 @@ type DeploymentStatus = 'idle' | 'pending' | 'success' | 'error';
27
26
  * All creation / deployment operations run concurrently for improved performance.
28
27
  */
29
28
  export const useCreateAndDeployScriptTemplates = (space: Space | undefined, scriptTemplates: Template[]) => {
30
- const { dispatchPromise: dispatch } = useIntentDispatcher();
29
+ const { invokePromise } = useOperationInvoker();
31
30
  const client = useClient();
32
31
  const [status, setStatus] = useState<DeploymentStatus>('idle');
33
32
  const [error, setError] = useState<Error | undefined>(undefined);
@@ -39,21 +38,20 @@ export const useCreateAndDeployScriptTemplates = (space: Space | undefined, scri
39
38
 
40
39
  const deploymentResults = await Promise.all(
41
40
  scriptTemplates.map(async (template) => {
42
- const result = await dispatch(
43
- Function.pipe(
44
- createIntent(ScriptAction.CreateScript, { space, initialTemplateId: template.id as any }),
45
- chain(SpaceAction.AddObject, { target: space }),
46
- ),
47
- );
48
- invariant(Obj.instanceOf(ScriptType, result.data?.object));
49
-
50
- return deployScript({ space, client, script: result.data.object });
41
+ const createResult = await invokePromise(ScriptOperation.CreateScript, {
42
+ db: space.db,
43
+ initialTemplateId: template.id as any,
44
+ });
45
+ invariant(Obj.instanceOf(Script.Script, createResult.data?.object));
46
+ await invokePromise(SpaceOperation.AddObject, { target: space.db, object: createResult.data.object });
47
+
48
+ return deployScript({ space, client, script: createResult.data.object });
51
49
  }),
52
50
  );
53
51
 
54
52
  const hasErrors = deploymentResults.some((result) => !result.success);
55
53
  setStatus(hasErrors ? 'error' : 'success');
56
- }, [space, dispatch, client, scriptTemplates]);
54
+ }, [space, invokePromise, client, scriptTemplates]);
57
55
 
58
56
  // TODO(burdon): Return onCreateAndDeployScripts.
59
57
  return { handleCreateAndDeployScripts, status, error };
@@ -2,15 +2,40 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import { Atom } from '@effect-atom/atom-react';
5
6
  import { useMemo } from 'react';
6
7
 
7
- import { live } from '@dxos/live-object';
8
+ import { Capabilities } from '@dxos/app-framework';
9
+ import { useCapability } from '@dxos/app-framework/ui';
8
10
 
9
11
  import { type DeployState } from './deploy';
10
12
 
11
13
  export type ScriptToolbarState = Partial<DeployState>;
12
14
 
13
- // TODO(burdon): Replace with context provider?
14
- export const useToolbarState = (initialState: ScriptToolbarState = {}) => {
15
- return useMemo(() => live<ScriptToolbarState>(initialState), []);
15
+ export type ScriptToolbarStateStore = {
16
+ atom: Atom.Writable<ScriptToolbarState>;
17
+ get value(): ScriptToolbarState;
18
+ update: (updater: (current: ScriptToolbarState) => ScriptToolbarState) => void;
19
+ set: <K extends keyof ScriptToolbarState>(key: K, value: ScriptToolbarState[K]) => void;
20
+ };
21
+
22
+ export const useToolbarState = (initialState: ScriptToolbarState = {}): ScriptToolbarStateStore => {
23
+ const registry = useCapability(Capabilities.AtomRegistry);
24
+ const atom = useMemo(() => Atom.make<ScriptToolbarState>(initialState), []);
25
+
26
+ return useMemo(
27
+ () => ({
28
+ atom,
29
+ get value() {
30
+ return registry.get(atom);
31
+ },
32
+ update: (updater: (current: ScriptToolbarState) => ScriptToolbarState) => {
33
+ registry.set(atom, updater(registry.get(atom)));
34
+ },
35
+ set: <K extends keyof ScriptToolbarState>(key: K, v: ScriptToolbarState[K]) => {
36
+ registry.set(atom, { ...registry.get(atom), [key]: v });
37
+ },
38
+ }),
39
+ [atom, registry],
40
+ );
16
41
  };
package/src/index.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export { ScriptCapabilities } from './capabilities';
5
+ export { ScriptCapabilities, ScriptEvents } from './types';
6
6
  export * from './components';
7
7
  export * from './meta';
8
8
  export * from './util';
package/src/meta.ts CHANGED
@@ -2,14 +2,18 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type PluginMeta } from '@dxos/app-framework';
5
+ import { type Plugin } from '@dxos/app-framework';
6
+ import { trim } from '@dxos/util';
6
7
 
7
- export const meta: PluginMeta = {
8
+ export const meta: Plugin.Meta = {
8
9
  id: 'dxos.org/plugin/script',
9
10
  name: 'Scripts',
10
- description:
11
- 'Scripts enable you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API’s or external data inside of Composer.',
11
+ description: trim`
12
+ Write and deploy custom JavaScript functions that extend your workspace capabilities.
13
+ Create AI agent tools, spreadsheet formulas, and automation scripts that integrate seamlessly with other plugins.
14
+ `,
12
15
  icon: 'ph--code--regular',
16
+ iconHue: 'sky',
13
17
  source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-explorer',
14
18
  tags: ['labs'],
15
19
  screenshots: ['https://dxos.network/plugin-details-scripts-dark.png'],
@@ -2,17 +2,21 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import { Registry } from '@effect-atom/atom-react';
5
6
  import { describe, expect, test } from 'vitest';
6
7
 
8
+ import { Obj } from '@dxos/echo';
9
+
7
10
  import { createNotebook } from '../testing';
8
11
 
9
- import { ComputeGraph } from './notebook';
12
+ import { ComputeGraph } from './compute-graph';
10
13
 
11
14
  describe('notebook', () => {
12
- test('parse dependency graph', () => {
15
+ test('parse dependency graph', async () => {
16
+ const registry = Registry.make();
13
17
  const notebook = createNotebook();
14
- const computer = new ComputeGraph(notebook);
15
- const result = computer.parse();
18
+ const graph = new ComputeGraph(notebook, registry);
19
+ const result = graph.parse();
16
20
 
17
21
  const getId = (i: number) => notebook.cells[i].id;
18
22
 
@@ -24,7 +28,7 @@ describe('notebook', () => {
24
28
  });
25
29
 
26
30
  // Compute values.
27
- const values = computer.evaluate();
31
+ const values = await graph.evaluate();
28
32
  expect(values).toEqual({
29
33
  [getId(0)]: 300,
30
34
  [getId(2)]: 200,
@@ -33,36 +37,44 @@ describe('notebook', () => {
33
37
  });
34
38
  });
35
39
 
36
- test('evalScript blocks access to window and document', () => {
40
+ test('evalScript blocks access to window and document', async () => {
41
+ const registry = Registry.make();
37
42
  const notebook = createNotebook();
38
43
  // Replace one of the cells with code that tries to access window/document.
39
- if (notebook.cells[2].script?.target) {
40
- notebook.cells[2].script.target.content = 'b = typeof window';
44
+ const sourceTarget = notebook.cells[2].source?.target;
45
+ if (sourceTarget) {
46
+ Obj.change(sourceTarget, (t) => {
47
+ t.content = 'b = typeof window';
48
+ });
41
49
  }
42
50
 
43
- const computer = new ComputeGraph(notebook);
44
- computer.parse();
45
- const values = computer.evaluate();
51
+ const graph = new ComputeGraph(notebook, registry);
52
+ graph.parse();
53
+ const values = await graph.evaluate();
46
54
 
47
55
  // Should evaluate to 'undefined' since window is blocked.
48
56
  expect(values[notebook.cells[2].id]).toBe('undefined');
49
57
 
50
58
  // Test document access.
51
- if (notebook.cells[2].script?.target) {
52
- notebook.cells[2].script.target.content = 'b = typeof document';
59
+ if (sourceTarget) {
60
+ Obj.change(sourceTarget, (t) => {
61
+ t.content = 'b = typeof document';
62
+ });
53
63
  }
54
- computer.parse();
55
- const values2 = computer.evaluate();
64
+ graph.parse();
65
+ const values2 = await graph.evaluate();
56
66
 
57
67
  // Should evaluate to 'undefined' since document is blocked.
58
68
  expect(values2[notebook.cells[2].id]).toBe('undefined');
59
69
 
60
70
  // Test that safe globals still work.
61
- if (notebook.cells[2].script?.target) {
62
- notebook.cells[2].script.target.content = 'b = Math.max(100, 200)';
71
+ if (sourceTarget) {
72
+ Obj.change(sourceTarget, (t) => {
73
+ t.content = 'b = Math.max(100, 200)';
74
+ });
63
75
  }
64
- computer.parse();
65
- const values3 = computer.evaluate();
76
+ graph.parse();
77
+ const values3 = await graph.evaluate();
66
78
 
67
79
  // Should evaluate correctly.
68
80
  expect(values3[notebook.cells[2].id]).toBe(200);