@dxos/plugin-script 0.8.2-staging.7ac8446 → 0.8.3-main.672df60

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 (254) hide show
  1. package/dist/lib/browser/DeploymentDialog-NLWQHNKE.mjs +12 -0
  2. package/dist/lib/browser/ScriptContainer-NDMTQG2N.mjs +271 -0
  3. package/dist/lib/browser/ScriptContainer-NDMTQG2N.mjs.map +7 -0
  4. package/dist/lib/browser/{app-graph-builder-RRLY67QC.mjs → app-graph-builder-V3HPXJAD.mjs} +10 -10
  5. package/dist/lib/browser/app-graph-builder-V3HPXJAD.mjs.map +7 -0
  6. package/dist/lib/browser/{artifact-definition-WXFYD2V5.mjs → artifact-definition-L3AIY4XA.mjs} +45 -48
  7. package/dist/lib/browser/artifact-definition-L3AIY4XA.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-MQZQB5VD.mjs → chunk-6T64VQHF.mjs} +10 -10
  9. package/dist/lib/browser/chunk-6T64VQHF.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-WSK3YQXI.mjs → chunk-6ZHHWU6S.mjs} +4 -3
  11. package/dist/lib/browser/{chunk-WSK3YQXI.mjs.map → chunk-6ZHHWU6S.mjs.map} +2 -2
  12. package/dist/lib/browser/chunk-BMVT3XMV.mjs +557 -0
  13. package/dist/lib/browser/chunk-BMVT3XMV.mjs.map +7 -0
  14. package/dist/lib/browser/chunk-BTEFFA4C.mjs +153 -0
  15. package/dist/lib/browser/chunk-BTEFFA4C.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-SH4MI7PU.mjs +364 -0
  17. package/dist/lib/browser/chunk-SH4MI7PU.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-WB3X5Z7Q.mjs +40 -0
  19. package/dist/lib/browser/chunk-WB3X5Z7Q.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-4VD3K3PY.mjs → chunk-YSQMXTYO.mjs} +3 -3
  21. package/dist/lib/{node-esm/chunk-EB5DSAD4.mjs.map → browser/chunk-YSQMXTYO.mjs.map} +1 -1
  22. package/dist/lib/browser/{compiler-56LTBEQB.mjs → compiler-W4BYJYTL.mjs} +3 -3
  23. package/dist/lib/browser/compiler-W4BYJYTL.mjs.map +7 -0
  24. package/dist/lib/browser/index.mjs +20 -16
  25. package/dist/lib/browser/index.mjs.map +3 -3
  26. package/dist/lib/browser/{intent-resolver-WCVXKRBR.mjs → intent-resolver-BIJLOJU3.mjs} +14 -14
  27. package/dist/lib/browser/intent-resolver-BIJLOJU3.mjs.map +7 -0
  28. package/dist/lib/browser/meta.json +1 -1
  29. package/dist/lib/browser/{react-surface-WXZVPNGI.mjs → react-surface-ZBCIYBGH.mjs} +16 -28
  30. package/dist/lib/browser/react-surface-ZBCIYBGH.mjs.map +7 -0
  31. package/dist/lib/browser/{settings-Z7B37V2I.mjs → settings-FU7NTENS.mjs} +5 -5
  32. package/dist/lib/browser/settings-FU7NTENS.mjs.map +7 -0
  33. package/dist/lib/browser/types.mjs +2 -2
  34. package/dist/lib/node/{DeploymentDialog-O4MU4OMF.cjs → DeploymentDialog-PC5AL3BB.cjs} +10 -10
  35. package/dist/lib/node/DeploymentDialog-PC5AL3BB.cjs.map +7 -0
  36. package/dist/lib/node/ScriptContainer-CLW7YCIP.cjs +288 -0
  37. package/dist/lib/node/ScriptContainer-CLW7YCIP.cjs.map +7 -0
  38. package/dist/lib/node/{app-graph-builder-6I2BWD46.cjs → app-graph-builder-YE4OM4OC.cjs} +17 -17
  39. package/dist/lib/node/app-graph-builder-YE4OM4OC.cjs.map +7 -0
  40. package/dist/lib/node/{artifact-definition-6NVXEHJD.cjs → artifact-definition-6BD6CVOV.cjs} +55 -58
  41. package/dist/lib/node/artifact-definition-6BD6CVOV.cjs.map +7 -0
  42. package/dist/lib/node/{chunk-XFZPWFEG.cjs → chunk-HCRW6T3G.cjs} +19 -20
  43. package/dist/lib/node/chunk-HCRW6T3G.cjs.map +7 -0
  44. package/dist/lib/node/chunk-Q44SJXEN.cjs +369 -0
  45. package/dist/lib/node/chunk-Q44SJXEN.cjs.map +7 -0
  46. package/dist/lib/node/chunk-QCAKVK6S.cjs +580 -0
  47. package/dist/lib/node/chunk-QCAKVK6S.cjs.map +7 -0
  48. package/dist/lib/node/{chunk-YJQZHKKA.cjs → chunk-QG2X6J74.cjs} +7 -6
  49. package/dist/lib/node/{chunk-YJQZHKKA.cjs.map → chunk-QG2X6J74.cjs.map} +2 -2
  50. package/dist/lib/node/chunk-RARNZD62.cjs +179 -0
  51. package/dist/lib/node/chunk-RARNZD62.cjs.map +7 -0
  52. package/dist/lib/node/{chunk-VYBEBLDO.cjs → chunk-V6L73D7S.cjs} +14 -14
  53. package/dist/lib/node/chunk-V6L73D7S.cjs.map +7 -0
  54. package/dist/lib/node/{chunk-JICWAOWZ.cjs → chunk-ZEV3VARQ.cjs} +7 -7
  55. package/dist/lib/node/{chunk-JICWAOWZ.cjs.map → chunk-ZEV3VARQ.cjs.map} +1 -1
  56. package/dist/lib/node/{compiler-W2RU3M7U.cjs → compiler-TFSJRLL4.cjs} +7 -7
  57. package/dist/lib/node/{compiler-W2RU3M7U.cjs.map → compiler-TFSJRLL4.cjs.map} +3 -3
  58. package/dist/lib/node/index.cjs +49 -45
  59. package/dist/lib/node/index.cjs.map +3 -3
  60. package/dist/lib/node/{intent-resolver-J4NBDNFH.cjs → intent-resolver-QKBCESXR.cjs} +21 -21
  61. package/dist/lib/node/intent-resolver-QKBCESXR.cjs.map +7 -0
  62. package/dist/lib/node/meta.json +1 -1
  63. package/dist/lib/node/{react-surface-27KTUBIZ.cjs → react-surface-HZJOZHHG.cjs} +38 -47
  64. package/dist/lib/node/react-surface-HZJOZHHG.cjs.map +7 -0
  65. package/dist/lib/node/{settings-EI6VPNKN.cjs → settings-RRCQ7ZQD.cjs} +9 -9
  66. package/dist/lib/node/settings-RRCQ7ZQD.cjs.map +7 -0
  67. package/dist/lib/node/types.cjs +5 -5
  68. package/dist/lib/node/types.cjs.map +1 -1
  69. package/dist/lib/node-esm/{DeploymentDialog-SSQSWLHX.mjs → DeploymentDialog-QHB2BGNJ.mjs} +5 -5
  70. package/dist/lib/node-esm/ScriptContainer-PMRP7AJ5.mjs +272 -0
  71. package/dist/lib/node-esm/ScriptContainer-PMRP7AJ5.mjs.map +7 -0
  72. package/dist/lib/node-esm/{app-graph-builder-H5XLRVX3.mjs → app-graph-builder-4CN7URJQ.mjs} +10 -10
  73. package/dist/lib/node-esm/app-graph-builder-4CN7URJQ.mjs.map +7 -0
  74. package/dist/lib/node-esm/{artifact-definition-KQ64AYBP.mjs → artifact-definition-PPV2XKU7.mjs} +45 -48
  75. package/dist/lib/node-esm/artifact-definition-PPV2XKU7.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-25GOLUXY.mjs +154 -0
  77. package/dist/lib/node-esm/chunk-25GOLUXY.mjs.map +7 -0
  78. package/dist/lib/node-esm/{chunk-EB5DSAD4.mjs → chunk-2KJYPUQD.mjs} +3 -3
  79. package/dist/lib/{browser/chunk-4VD3K3PY.mjs.map → node-esm/chunk-2KJYPUQD.mjs.map} +1 -1
  80. package/dist/lib/node-esm/{chunk-F4HA5C34.mjs → chunk-47MABIVX.mjs} +10 -10
  81. package/dist/lib/node-esm/chunk-47MABIVX.mjs.map +7 -0
  82. package/dist/lib/node-esm/{chunk-FDEAVT67.mjs → chunk-AEB5TPEW.mjs} +4 -3
  83. package/dist/lib/node-esm/{chunk-FDEAVT67.mjs.map → chunk-AEB5TPEW.mjs.map} +2 -2
  84. package/dist/lib/node-esm/chunk-IIPL3OKN.mjs +558 -0
  85. package/dist/lib/node-esm/chunk-IIPL3OKN.mjs.map +7 -0
  86. package/dist/lib/node-esm/chunk-JFCZ3L27.mjs +365 -0
  87. package/dist/lib/node-esm/chunk-JFCZ3L27.mjs.map +7 -0
  88. package/dist/lib/node-esm/chunk-UESZKXLR.mjs +41 -0
  89. package/dist/lib/node-esm/chunk-UESZKXLR.mjs.map +7 -0
  90. package/dist/lib/node-esm/{compiler-VT5C2Z3T.mjs → compiler-7PQ4D43R.mjs} +3 -3
  91. package/dist/lib/{browser/compiler-56LTBEQB.mjs.map → node-esm/compiler-7PQ4D43R.mjs.map} +3 -3
  92. package/dist/lib/node-esm/index.mjs +20 -16
  93. package/dist/lib/node-esm/index.mjs.map +3 -3
  94. package/dist/lib/node-esm/{intent-resolver-PDZ2A26X.mjs → intent-resolver-UWYXAPLZ.mjs} +14 -14
  95. package/dist/lib/node-esm/intent-resolver-UWYXAPLZ.mjs.map +7 -0
  96. package/dist/lib/node-esm/meta.json +1 -1
  97. package/dist/lib/node-esm/{react-surface-UCUVDVSH.mjs → react-surface-MHCPAP55.mjs} +16 -28
  98. package/dist/lib/node-esm/react-surface-MHCPAP55.mjs.map +7 -0
  99. package/dist/lib/node-esm/{settings-HU5UEFRF.mjs → settings-NKNC32QC.mjs} +5 -5
  100. package/dist/lib/node-esm/settings-NKNC32QC.mjs.map +7 -0
  101. package/dist/lib/node-esm/types.mjs +2 -2
  102. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/app-graph-builder.d.ts +2 -179
  104. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/index.d.ts +1 -177
  107. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  109. package/dist/types/src/compiler/compiler.d.ts.map +1 -1
  110. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts +2 -2
  111. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
  112. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  113. package/dist/types/src/components/ScriptContainer.d.ts +1 -1
  114. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  115. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +1 -1
  116. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  117. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts +1 -1
  118. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
  119. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
  120. package/dist/types/src/components/TestPanel/TestContainer.d.ts +7 -0
  121. package/dist/types/src/components/TestPanel/TestContainer.d.ts.map +1 -0
  122. package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -1
  123. package/dist/types/src/components/TestPanel/index.d.ts +1 -0
  124. package/dist/types/src/components/TestPanel/index.d.ts.map +1 -1
  125. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  126. package/dist/types/src/components/index.d.ts +1 -1
  127. package/dist/types/src/hooks/deploy.d.ts +22 -19
  128. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  129. package/dist/types/src/hooks/format.d.ts +2 -5
  130. package/dist/types/src/hooks/format.d.ts.map +1 -1
  131. package/dist/types/src/hooks/index.d.ts +0 -1
  132. package/dist/types/src/hooks/index.d.ts.map +1 -1
  133. package/dist/types/src/hooks/template.d.ts +2 -5
  134. package/dist/types/src/hooks/template.d.ts.map +1 -1
  135. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
  136. package/dist/types/src/hooks/useToolbarState.d.ts +1 -1
  137. package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -1
  138. package/dist/types/src/meta.d.ts.map +1 -1
  139. package/dist/types/src/templates/chat.d.ts +1 -1
  140. package/dist/types/src/templates/chat.d.ts.map +1 -1
  141. package/dist/types/src/templates/chess.d.ts.map +1 -1
  142. package/dist/types/src/templates/data-generator.d.ts +0 -7
  143. package/dist/types/src/templates/data-generator.d.ts.map +1 -1
  144. package/dist/types/src/templates/discord.d.ts.map +1 -1
  145. package/dist/types/src/templates/echo.d.ts +1 -1
  146. package/dist/types/src/templates/echo.d.ts.map +1 -1
  147. package/dist/types/src/templates/email.d.ts +1 -1
  148. package/dist/types/src/templates/email.d.ts.map +1 -1
  149. package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
  150. package/dist/types/src/templates/forex.d.ts.map +1 -1
  151. package/dist/types/src/templates/gmail.d.ts.map +1 -1
  152. package/dist/types/src/translations.d.ts +2 -110
  153. package/dist/types/src/translations.d.ts.map +1 -1
  154. package/dist/types/src/types.d.ts +27 -26
  155. package/dist/types/src/types.d.ts.map +1 -1
  156. package/dist/types/src/util/deploy.d.ts.map +1 -1
  157. package/dist/types/src/util/functions.d.ts.map +1 -1
  158. package/dist/types/tsconfig.tsbuildinfo +1 -1
  159. package/package.json +59 -53
  160. package/src/ScriptPlugin.tsx +4 -2
  161. package/src/capabilities/app-graph-builder.ts +46 -29
  162. package/src/capabilities/artifact-definition.ts +40 -38
  163. package/src/capabilities/intent-resolver.ts +7 -7
  164. package/src/capabilities/react-surface.tsx +7 -17
  165. package/src/capabilities/settings.ts +2 -2
  166. package/src/compiler/compiler.ts +3 -3
  167. package/src/components/DeploymentDialog/DeploymentDialog.stories.tsx +1 -1
  168. package/src/components/DeploymentDialog/DeploymentDialog.tsx +2 -2
  169. package/src/components/ScriptContainer.tsx +2 -2
  170. package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +1 -1
  171. package/src/components/ScriptToolbar/ScriptToolbar.tsx +27 -18
  172. package/src/components/Settings/ScriptObjectSettings.tsx +5 -5
  173. package/src/components/TestPanel/TestContainer.tsx +21 -0
  174. package/src/components/TestPanel/index.ts +1 -0
  175. package/src/components/TypescriptEditor/TypescriptEditor.tsx +0 -6
  176. package/src/hooks/deploy.ts +61 -55
  177. package/src/hooks/format.ts +26 -26
  178. package/src/hooks/index.ts +0 -1
  179. package/src/hooks/template.ts +24 -32
  180. package/src/hooks/useToolbarState.ts +2 -2
  181. package/src/meta.ts +3 -2
  182. package/src/templates/chat.ts +4 -10
  183. package/src/templates/chess.ts +2 -7
  184. package/src/templates/data-generator.ts +20 -45
  185. package/src/templates/discord.ts +17 -15
  186. package/src/templates/echo.ts +1 -12
  187. package/src/templates/email.ts +8 -14
  188. package/src/templates/forex-effect.ts +4 -8
  189. package/src/templates/forex.ts +1 -5
  190. package/src/templates/gmail.ts +37 -28
  191. package/src/translations.ts +1 -1
  192. package/src/types.ts +13 -14
  193. package/src/util/deploy.ts +6 -10
  194. package/dist/lib/browser/DeploymentDialog-AEPYJKPO.mjs +0 -12
  195. package/dist/lib/browser/ScriptContainer-R25PRK2D.mjs +0 -248
  196. package/dist/lib/browser/ScriptContainer-R25PRK2D.mjs.map +0 -7
  197. package/dist/lib/browser/app-graph-builder-RRLY67QC.mjs.map +0 -7
  198. package/dist/lib/browser/artifact-definition-WXFYD2V5.mjs.map +0 -7
  199. package/dist/lib/browser/chunk-2CGZFDCR.mjs +0 -480
  200. package/dist/lib/browser/chunk-2CGZFDCR.mjs.map +0 -7
  201. package/dist/lib/browser/chunk-CSZXPLYY.mjs +0 -147
  202. package/dist/lib/browser/chunk-CSZXPLYY.mjs.map +0 -7
  203. package/dist/lib/browser/chunk-KLEOGVXY.mjs +0 -352
  204. package/dist/lib/browser/chunk-KLEOGVXY.mjs.map +0 -7
  205. package/dist/lib/browser/chunk-MQZQB5VD.mjs.map +0 -7
  206. package/dist/lib/browser/chunk-R2CHVWJ2.mjs +0 -41
  207. package/dist/lib/browser/chunk-R2CHVWJ2.mjs.map +0 -7
  208. package/dist/lib/browser/chunk-SUCBNCEQ.mjs +0 -87
  209. package/dist/lib/browser/chunk-SUCBNCEQ.mjs.map +0 -7
  210. package/dist/lib/browser/intent-resolver-WCVXKRBR.mjs.map +0 -7
  211. package/dist/lib/browser/react-surface-WXZVPNGI.mjs.map +0 -7
  212. package/dist/lib/browser/settings-Z7B37V2I.mjs.map +0 -7
  213. package/dist/lib/node/DeploymentDialog-O4MU4OMF.cjs.map +0 -7
  214. package/dist/lib/node/ScriptContainer-5KY6ZOQD.cjs +0 -267
  215. package/dist/lib/node/ScriptContainer-5KY6ZOQD.cjs.map +0 -7
  216. package/dist/lib/node/app-graph-builder-6I2BWD46.cjs.map +0 -7
  217. package/dist/lib/node/artifact-definition-6NVXEHJD.cjs.map +0 -7
  218. package/dist/lib/node/chunk-65MIJR3Q.cjs +0 -173
  219. package/dist/lib/node/chunk-65MIJR3Q.cjs.map +0 -7
  220. package/dist/lib/node/chunk-F4DP7WON.cjs +0 -372
  221. package/dist/lib/node/chunk-F4DP7WON.cjs.map +0 -7
  222. package/dist/lib/node/chunk-SLDJM45C.cjs +0 -507
  223. package/dist/lib/node/chunk-SLDJM45C.cjs.map +0 -7
  224. package/dist/lib/node/chunk-VYBEBLDO.cjs.map +0 -7
  225. package/dist/lib/node/chunk-X7MHLHHS.cjs +0 -91
  226. package/dist/lib/node/chunk-X7MHLHHS.cjs.map +0 -7
  227. package/dist/lib/node/chunk-XFZPWFEG.cjs.map +0 -7
  228. package/dist/lib/node/intent-resolver-J4NBDNFH.cjs.map +0 -7
  229. package/dist/lib/node/react-surface-27KTUBIZ.cjs.map +0 -7
  230. package/dist/lib/node/settings-EI6VPNKN.cjs.map +0 -7
  231. package/dist/lib/node-esm/ScriptContainer-W2F4FGDV.mjs +0 -249
  232. package/dist/lib/node-esm/ScriptContainer-W2F4FGDV.mjs.map +0 -7
  233. package/dist/lib/node-esm/app-graph-builder-H5XLRVX3.mjs.map +0 -7
  234. package/dist/lib/node-esm/artifact-definition-KQ64AYBP.mjs.map +0 -7
  235. package/dist/lib/node-esm/chunk-4MTPYMV2.mjs +0 -481
  236. package/dist/lib/node-esm/chunk-4MTPYMV2.mjs.map +0 -7
  237. package/dist/lib/node-esm/chunk-F4HA5C34.mjs.map +0 -7
  238. package/dist/lib/node-esm/chunk-MU3JKVL2.mjs +0 -148
  239. package/dist/lib/node-esm/chunk-MU3JKVL2.mjs.map +0 -7
  240. package/dist/lib/node-esm/chunk-PBGVTGL2.mjs +0 -353
  241. package/dist/lib/node-esm/chunk-PBGVTGL2.mjs.map +0 -7
  242. package/dist/lib/node-esm/chunk-QDYGTY4L.mjs +0 -89
  243. package/dist/lib/node-esm/chunk-QDYGTY4L.mjs.map +0 -7
  244. package/dist/lib/node-esm/chunk-RW2APVMV.mjs +0 -42
  245. package/dist/lib/node-esm/chunk-RW2APVMV.mjs.map +0 -7
  246. package/dist/lib/node-esm/compiler-VT5C2Z3T.mjs.map +0 -7
  247. package/dist/lib/node-esm/intent-resolver-PDZ2A26X.mjs.map +0 -7
  248. package/dist/lib/node-esm/react-surface-UCUVDVSH.mjs.map +0 -7
  249. package/dist/lib/node-esm/settings-HU5UEFRF.mjs.map +0 -7
  250. package/dist/types/src/hooks/useToolbarAction.d.ts +0 -13
  251. package/dist/types/src/hooks/useToolbarAction.d.ts.map +0 -1
  252. package/src/hooks/useToolbarAction.ts +0 -50
  253. /package/dist/lib/browser/{DeploymentDialog-AEPYJKPO.mjs.map → DeploymentDialog-NLWQHNKE.mjs.map} +0 -0
  254. /package/dist/lib/node-esm/{DeploymentDialog-SSQSWLHX.mjs.map → DeploymentDialog-QHB2BGNJ.mjs.map} +0 -0
@@ -2,46 +2,63 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';
5
+ import { Rx } from '@effect-rx/rx-react';
6
+ import { Option, pipe } from 'effect';
7
+
8
+ import { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';
6
9
  import { isInstanceOf } from '@dxos/echo-schema';
7
10
  import { ScriptType } from '@dxos/functions';
8
11
  import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';
9
- import { createExtension, type Node } from '@dxos/plugin-graph';
12
+ import { createExtension } from '@dxos/plugin-graph';
10
13
 
11
14
  import { meta } from '../meta';
12
15
 
13
- export default (context: PluginsContext) =>
16
+ export default (context: PluginContext) =>
14
17
  contributes(Capabilities.AppGraphBuilder, [
15
18
  createExtension({
16
19
  id: `${meta.id}/execute`,
17
- filter: (node): node is Node<ScriptType> => isInstanceOf(ScriptType, node.data),
18
- connector: ({ node }) => [
19
- {
20
- id: [node.id, 'execute'].join(ATTENDABLE_PATH_SEPARATOR),
21
- type: PLANK_COMPANION_TYPE,
22
- data: 'execute',
23
- properties: {
24
- label: ['script test label', { ns: meta.id }],
25
- icon: 'ph--terminal--regular',
26
- disposition: 'hidden',
27
- },
28
- },
29
- ],
20
+ connector: (node) =>
21
+ Rx.make((get) =>
22
+ pipe(
23
+ get(node),
24
+ Option.flatMap((node) => (isInstanceOf(ScriptType, node.data) ? Option.some(node) : Option.none())),
25
+ Option.map((node) => [
26
+ {
27
+ id: [node.id, 'execute'].join(ATTENDABLE_PATH_SEPARATOR),
28
+ type: PLANK_COMPANION_TYPE,
29
+ data: 'execute',
30
+ properties: {
31
+ label: ['script test label', { ns: meta.id }],
32
+ icon: 'ph--terminal--regular',
33
+ disposition: 'hidden',
34
+ },
35
+ },
36
+ ]),
37
+ Option.getOrElse(() => []),
38
+ ),
39
+ ),
30
40
  }),
31
41
  createExtension({
32
42
  id: `${meta.id}/logs`,
33
- filter: (node): node is Node<ScriptType> => isInstanceOf(ScriptType, node.data),
34
- connector: ({ node }) => [
35
- {
36
- id: [node.id, 'logs'].join(ATTENDABLE_PATH_SEPARATOR),
37
- type: PLANK_COMPANION_TYPE,
38
- data: 'logs',
39
- properties: {
40
- label: ['script logs label', { ns: meta.id }],
41
- icon: 'ph--clock-countdown--regular',
42
- disposition: 'hidden',
43
- },
44
- },
45
- ],
43
+ connector: (node) =>
44
+ Rx.make((get) =>
45
+ pipe(
46
+ get(node),
47
+ Option.flatMap((node) => (isInstanceOf(ScriptType, node.data) ? Option.some(node) : Option.none())),
48
+ Option.map((node) => [
49
+ {
50
+ id: [node.id, 'logs'].join(ATTENDABLE_PATH_SEPARATOR),
51
+ type: PLANK_COMPANION_TYPE,
52
+ data: 'logs',
53
+ properties: {
54
+ label: ['script logs label', { ns: meta.id }],
55
+ icon: 'ph--clock-countdown--regular',
56
+ disposition: 'hidden',
57
+ },
58
+ },
59
+ ]),
60
+ Option.getOrElse(() => []),
61
+ ),
62
+ ),
46
63
  }),
47
64
  ]);
@@ -2,15 +2,17 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import { Schema } from 'effect';
6
+
7
+ import { createTool, ToolResult } from '@dxos/ai';
5
8
  import { Capabilities, contributes, createIntent, type PromiseIntentDispatcher } from '@dxos/app-framework';
6
- import { defineArtifact, defineTool, ToolResult } from '@dxos/artifact';
9
+ import { ArtifactId, defineArtifact } from '@dxos/artifact';
7
10
  import { createArtifactElement } from '@dxos/assistant';
8
- import { ObjectId, S } from '@dxos/echo-schema';
9
- import { ScriptType } from '@dxos/functions/types';
11
+ import { ScriptType } from '@dxos/functions';
10
12
  import { invariant } from '@dxos/invariant';
11
13
  import { SpaceAction } from '@dxos/plugin-space/types';
12
- import { create, makeRef, type Space } from '@dxos/react-client/echo';
13
- import { TextType } from '@dxos/schema';
14
+ import { Filter, live, makeRef, type Space } from '@dxos/react-client/echo';
15
+ import { DataType } from '@dxos/schema';
14
16
 
15
17
  import { meta } from '../meta';
16
18
  // TODO(burdon): Factor out.
@@ -71,28 +73,28 @@ export default () => {
71
73
  <apis>
72
74
  export function defineFunction(params: {
73
75
  description: string,
74
- inputSchema: S.Schema,
75
- outputSchema: S.Schema,
76
+ inputSchema: Schema.Schema,
77
+ outputSchema: Schema.Schema,
76
78
  handler: (params: { event: { data: TInput } }) => Promise<TOutput>
77
79
  }): FunctionDefinition
78
80
  /**
79
81
  * Effect Schema
80
82
  */
81
- export const S;
83
+ export const Schema;
82
84
 
83
85
  // Examples:
84
86
 
85
- S.String
86
- S.Number
87
- S.Boolean
88
- S.Struct({
89
- from: S.String.annotations({ description: 'The source currency' }),
90
- to: S.String.annotations({ description: 'The target currency' }),
87
+ Schema.String
88
+ Schema.Number
89
+ Schema.Boolean
90
+ Schema.Struct({
91
+ from: Schema.String.annotations({ description: 'The source currency' }),
92
+ to: Schema.String.annotations({ description: 'The target currency' }),
91
93
  })
92
- S.Array(S.String)
93
- S.Union(S.String, S.Number)
94
- S.optional(S.String)
95
- S.String.annotations({ description: 'The source currency' })
94
+ Schema.Array(Schema.String)
95
+ Schema.Union(Schema.String, Schema.Number)
96
+ Schema.optional(Schema.String)
97
+ Schema.String.annotations({ description: 'The source currency' })
96
98
  </apis>
97
99
 
98
100
  <handler_function>
@@ -113,13 +115,13 @@ export default () => {
113
115
  export default defineFunction({
114
116
  description: 'Returns the exchange rate between two currencies.',
115
117
 
116
- inputSchema: S.Struct({
117
- from: S.String.annotations({ description: 'The source currency' }),
118
- to: S.String.annotations({ description: 'The target currency' }),
118
+ inputSchema: Schema.Struct({
119
+ from: Schema.String.annotations({ description: 'The source currency' }),
120
+ to: Schema.String.annotations({ description: 'The target currency' }),
119
121
  }),
120
122
 
121
- outputSchema: S.Struct({
122
- rate: S.String.annotations({ description: 'The exchange rate' }),
123
+ outputSchema: Schema.Struct({
124
+ rate: Schema.String.annotations({ description: 'The exchange rate' }),
123
125
  }),
124
126
 
125
127
  handler: async ({
@@ -139,23 +141,23 @@ export default () => {
139
141
  `,
140
142
  schema: ScriptType,
141
143
  tools: [
142
- defineTool(meta.id, {
144
+ createTool(meta.id, {
143
145
  name: 'create',
144
146
  description: 'Create a new script. Returns the artifact definition for the script',
145
147
  caption: 'Creating script...',
146
- schema: S.Struct({
147
- name: S.String.annotations({ description: 'The name of the script' }),
148
- code: S.String.annotations({
148
+ schema: Schema.Struct({
149
+ name: Schema.String.annotations({ description: 'The name of the script' }),
150
+ code: Schema.String.annotations({
149
151
  description: 'The full code of the script in JavaScript or TypeScript. Must be valid executable code.',
150
152
  }),
151
153
  }),
152
154
  execute: async ({ name, code }, { extensions }) => {
153
155
  invariant(extensions?.space, 'No space');
154
156
  invariant(extensions?.dispatch, 'No intent dispatcher');
155
- const script = create(ScriptType, {
157
+ const script = live(ScriptType, {
156
158
  name,
157
159
  source: makeRef(
158
- create(TextType, {
160
+ live(DataType.Text, {
159
161
  content: code,
160
162
  }),
161
163
  ),
@@ -172,17 +174,17 @@ export default () => {
172
174
  return ToolResult.Success(createArtifactElement(script.id));
173
175
  },
174
176
  }),
175
- defineTool(meta.id, {
177
+ createTool(meta.id, {
176
178
  name: 'inspect',
177
179
  description: 'Inspect a script. Returns the artifact definition for the script',
178
180
  caption: 'Inspecting script...',
179
- schema: S.Struct({
180
- id: ObjectId,
181
+ schema: Schema.Struct({
182
+ id: ArtifactId,
181
183
  }),
182
184
  execute: async ({ id }, { extensions }) => {
183
185
  invariant(extensions?.space, 'No space');
184
186
 
185
- const script = (await extensions.space.db.query({ id }).first()) as ScriptType;
187
+ const script = (await extensions.space.db.query(Filter.ids(id)).first()) as ScriptType;
186
188
  const { content } = await script.source.load();
187
189
 
188
190
  return ToolResult.Success({
@@ -191,20 +193,20 @@ export default () => {
191
193
  });
192
194
  },
193
195
  }),
194
- defineTool(meta.id, {
196
+ createTool(meta.id, {
195
197
  name: 'update',
196
198
  description: 'Update a script. Returns the artifact definition for the script',
197
199
  caption: 'Updating script...',
198
- schema: S.Struct({
199
- id: ObjectId,
200
- code: S.String.annotations({
200
+ schema: Schema.Struct({
201
+ id: ArtifactId,
202
+ code: Schema.String.annotations({
201
203
  description: 'The full code of the script in JavaScript or TypeScript. Must be valid executable code.',
202
204
  }),
203
205
  }),
204
206
  execute: async ({ id, code }, { extensions }) => {
205
207
  invariant(extensions?.space, 'No space');
206
208
 
207
- const script = (await extensions.space.db.query({ id }).first()) as ScriptType;
209
+ const script = (await extensions.space.db.query(Filter.ids(id)).first()) as ScriptType;
208
210
  const source = await script.source.load();
209
211
  if (!source) {
210
212
  return ToolResult.Error('Script not found');
@@ -3,13 +3,13 @@
3
3
  //
4
4
 
5
5
  import { Octokit } from '@octokit/core';
6
- import { isNotNullable } from 'effect/Predicate';
6
+ import { Predicate } from 'effect';
7
7
 
8
8
  import { contributes, Capabilities, createResolver, createIntent, LayoutAction } from '@dxos/app-framework';
9
- import { ScriptType } from '@dxos/functions/types';
10
- import { create, makeRef } from '@dxos/live-object';
9
+ import { ScriptType } from '@dxos/functions';
10
+ import { live, makeRef } from '@dxos/live-object';
11
11
  import { TokenManagerAction } from '@dxos/plugin-token-manager/types';
12
- import { TextType } from '@dxos/schema';
12
+ import { DataType } from '@dxos/schema';
13
13
 
14
14
  import { DEPLOYMENT_DIALOG } from '../components';
15
15
  import { defaultScriptsForIntegration } from '../meta';
@@ -47,9 +47,9 @@ export default () =>
47
47
 
48
48
  return {
49
49
  data: {
50
- object: create(ScriptType, {
50
+ object: live(ScriptType, {
51
51
  name,
52
- source: makeRef(create(TextType, { content })),
52
+ source: makeRef(live(DataType.Text, { content })),
53
53
  }),
54
54
  },
55
55
  };
@@ -60,7 +60,7 @@ export default () =>
60
60
  resolve: async ({ accessToken }) => {
61
61
  const scriptTemplates = (defaultScriptsForIntegration[accessToken.source] ?? [])
62
62
  .map((id) => templates.find((t) => t.id === id))
63
- .filter(isNotNullable);
63
+ .filter(Predicate.isNotNullable);
64
64
 
65
65
  if (scriptTemplates.length > 0) {
66
66
  return {
@@ -5,25 +5,24 @@
5
5
  import React from 'react';
6
6
 
7
7
  import { Capabilities, contributes, createSurface, useCapability } from '@dxos/app-framework';
8
- import { InvocationTracePanel } from '@dxos/devtools';
8
+ import { InvocationTraceContainer } from '@dxos/devtools';
9
9
  import { isInstanceOf } from '@dxos/echo-schema';
10
- import { ScriptType } from '@dxos/functions/types';
10
+ import { ScriptType } from '@dxos/functions';
11
11
  import { SettingsStore } from '@dxos/local-storage';
12
12
  import { getSpace } from '@dxos/react-client/echo';
13
13
  import { StackItem } from '@dxos/react-ui-stack';
14
- import { type AccessTokenType } from '@dxos/schema';
14
+ import { type DataType } from '@dxos/schema';
15
15
 
16
16
  import { ScriptCapabilities } from './capabilities';
17
17
  import {
18
18
  ScriptContainer,
19
19
  ScriptPluginSettings,
20
20
  ScriptObjectSettings,
21
- TestPanel,
22
21
  ScriptProperties,
23
22
  DeploymentDialog,
24
23
  DEPLOYMENT_DIALOG,
24
+ TestContainer,
25
25
  } from '../components';
26
- import { useDeployState, useToolbarState } from '../hooks';
27
26
  import { meta } from '../meta';
28
27
  import { type ScriptSettingsProps } from '../types';
29
28
 
@@ -64,16 +63,7 @@ export default () =>
64
63
  role: 'article',
65
64
  filter: (data): data is { companionTo: ScriptType } =>
66
65
  isInstanceOf(ScriptType, data.companionTo) && data.subject === 'execute',
67
- component: ({ data, role }) => {
68
- // TODO(wittjosiah): Decouple hooks from toolbar state.
69
- const state = useToolbarState();
70
- useDeployState({ state, script: data.companionTo });
71
- return (
72
- <StackItem.Content role={role}>
73
- <TestPanel functionUrl={state.functionUrl} />
74
- </StackItem.Content>
75
- );
76
- },
66
+ component: ({ data, role }) => <TestContainer script={data.companionTo} role={role} />,
77
67
  }),
78
68
  createSurface({
79
69
  id: `${meta.id}/companion/logs`,
@@ -84,7 +74,7 @@ export default () =>
84
74
  const space = getSpace(data.companionTo);
85
75
  return (
86
76
  <StackItem.Content role={role}>
87
- <InvocationTracePanel space={space} script={data.companionTo} detailAxis='block' />
77
+ <InvocationTraceContainer space={space} script={data.companionTo} detailAxis='block' />
88
78
  </StackItem.Content>
89
79
  );
90
80
  },
@@ -92,7 +82,7 @@ export default () =>
92
82
  createSurface({
93
83
  id: DEPLOYMENT_DIALOG,
94
84
  role: 'dialog',
95
- filter: (data): data is { props: { accessToken: AccessTokenType; scriptTemplates: any } } =>
85
+ filter: (data): data is { props: { accessToken: DataType.AccessToken; scriptTemplates: any } } =>
96
86
  data.component === DEPLOYMENT_DIALOG,
97
87
  component: ({ data }) => <DeploymentDialog {...data.props} />,
98
88
  }),
@@ -3,12 +3,12 @@
3
3
  //
4
4
 
5
5
  import { Capabilities, contributes } from '@dxos/app-framework';
6
- import { create } from '@dxos/live-object';
6
+ import { live } from '@dxos/live-object';
7
7
 
8
8
  import { meta } from '../meta';
9
9
  import { ScriptSettingsSchema } from '../types';
10
10
 
11
11
  export default () => {
12
- const settings = create(ScriptSettingsSchema, { editorInputMode: 'vscode' });
12
+ const settings = live(ScriptSettingsSchema, { editorInputMode: 'vscode' });
13
13
  return contributes(Capabilities.Settings, { schema: ScriptSettingsSchema, prefix: meta.id, value: settings });
14
14
  };
@@ -23,7 +23,7 @@ export class Compiler {
23
23
 
24
24
  constructor(private readonly _options: ts.CompilerOptions = defaultOptions) {}
25
25
 
26
- async initialize() {
26
+ async initialize(): Promise<void> {
27
27
  if (this._env) {
28
28
  return;
29
29
  }
@@ -40,12 +40,12 @@ export class Compiler {
40
40
  return this._env;
41
41
  }
42
42
 
43
- setFile(fileName: string, content: string) {
43
+ setFile(fileName: string, content: string): void {
44
44
  invariant(this._fsMap, 'File system map not initialized.');
45
45
  this.environment.createFile(fileName, content);
46
46
  }
47
47
 
48
- compile(fileName: string) {
48
+ compile(fileName: string): ts.EmitOutput {
49
49
  return this.environment.languageService.getEmitOutput(fileName);
50
50
  }
51
51
  }
@@ -33,7 +33,7 @@ const meta: Meta = {
33
33
  title: 'plugins/plugin-script/DeploymentDialog',
34
34
  component: DeploymentDialog,
35
35
  parameters: { translations },
36
- decorators: [withTheme, withLayout({ tooltips: true })],
36
+ decorators: [withTheme, withLayout()],
37
37
  };
38
38
 
39
39
  export default meta;
@@ -7,7 +7,7 @@ import React, { useEffect, useMemo } from 'react';
7
7
  import { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';
8
8
  import { getSpace } from '@dxos/react-client/echo';
9
9
  import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
10
- import { type AccessTokenType } from '@dxos/schema';
10
+ import { type DataType } from '@dxos/schema';
11
11
 
12
12
  import { useCreateAndDeployScriptTemplates } from '../../hooks/useCreateAndDeployScriptTemplates';
13
13
  import { SCRIPT_PLUGIN } from '../../meta';
@@ -21,7 +21,7 @@ export const DEPLOYMENT_DIALOG = `${SCRIPT_PLUGIN}/deployment/dialog`;
21
21
  // - Pending / onError states.
22
22
 
23
23
  type DeploymentDialogProps = {
24
- accessToken: AccessTokenType;
24
+ accessToken: DataType.AccessToken;
25
25
  scriptTemplates: Template[];
26
26
  };
27
27
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React, { useMemo } from 'react';
6
6
 
7
- import { type ScriptType } from '@dxos/functions/types';
7
+ import { type ScriptType } from '@dxos/functions';
8
8
  import { createDocAccessor, getSpace } from '@dxos/react-client/echo';
9
9
  import { useIdentity } from '@dxos/react-client/halo';
10
10
  import { type ThemedClassName } from '@dxos/react-ui';
@@ -57,7 +57,7 @@ export const ScriptContainer = ({
57
57
  );
58
58
 
59
59
  return (
60
- <StackItem.Content toolbar classNames='divide-y divide-separator'>
60
+ <StackItem.Content toolbar>
61
61
  <ScriptToolbar state={state} role={role} script={script} />
62
62
  <TypescriptEditor
63
63
  id={script.id}
@@ -24,7 +24,7 @@ export const Default = {
24
24
  const meta: Meta = {
25
25
  title: 'plugins/plugin-script/Toolbar',
26
26
  component: ScriptToolbar,
27
- decorators: [withTheme, withLayout({ tooltips: true })],
27
+ decorators: [withTheme, withLayout()],
28
28
  };
29
29
 
30
30
  export default meta;
@@ -2,21 +2,24 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import React, { useCallback } from 'react';
5
+ import { Rx } from '@effect-rx/rx-react';
6
+ import React, { useMemo } from 'react';
6
7
 
7
- import { type ScriptType } from '@dxos/functions/types';
8
+ import { type ScriptType } from '@dxos/functions';
8
9
  import { fullyQualifiedId } from '@dxos/react-client/echo';
9
- import { ElevationProvider, type ThemedClassName } from '@dxos/react-ui';
10
+ import { ElevationProvider, useTranslation, type ThemedClassName } from '@dxos/react-ui';
10
11
  import { stackItemContentToolbarClassNames } from '@dxos/react-ui-editor';
11
- import { createGapSeparator, MenuProvider, ToolbarMenu, useMenuActions } from '@dxos/react-ui-menu';
12
+ import { createGapSeparator, MenuProvider, rxFromSignal, ToolbarMenu, useMenuActions } from '@dxos/react-ui-menu';
12
13
 
13
14
  import {
15
+ type CreateDeployOptions,
14
16
  type ScriptToolbarState,
15
17
  createDeploy,
16
18
  createFormat,
17
19
  createTemplateSelect,
18
- useToolbarAction,
20
+ useDeployDeps,
19
21
  } from '../../hooks';
22
+ import { SCRIPT_PLUGIN } from '../../meta';
20
23
 
21
24
  export type ScriptToolbarProps = ThemedClassName<{
22
25
  role?: string;
@@ -24,26 +27,32 @@ export type ScriptToolbarProps = ThemedClassName<{
24
27
  state: ScriptToolbarState;
25
28
  }>;
26
29
 
27
- const createToolbar = (state: ScriptToolbarState) => {
28
- const templateSelect = createTemplateSelect();
29
- const format = createFormat();
30
- const gap = createGapSeparator();
31
- const deploy = createDeploy(state);
32
- return {
33
- nodes: [...templateSelect.nodes, ...format.nodes, ...gap.nodes, ...deploy.nodes],
34
- edges: [...templateSelect.edges, ...format.edges, ...gap.edges, ...deploy.edges],
35
- };
36
- };
30
+ const createToolbar = ({ state, script, ...options }: CreateDeployOptions) =>
31
+ Rx.make((get) =>
32
+ get(
33
+ rxFromSignal(() => {
34
+ const templateSelect = createTemplateSelect(script);
35
+ const format = createFormat(script);
36
+ const gap = createGapSeparator();
37
+ const deploy = createDeploy({ state, script, ...options });
38
+ return {
39
+ nodes: [...templateSelect.nodes, ...format.nodes, ...gap.nodes, ...deploy.nodes],
40
+ edges: [...templateSelect.edges, ...format.edges, ...gap.edges, ...deploy.edges],
41
+ };
42
+ }),
43
+ ),
44
+ );
37
45
 
38
46
  export const ScriptToolbar = ({ script, role, state, classNames }: ScriptToolbarProps) => {
39
- const handleAction = useToolbarAction({ state, script });
40
- const toolbarCreator = useCallback(() => createToolbar(state), [state]);
47
+ const { t } = useTranslation(SCRIPT_PLUGIN);
48
+ const options = useDeployDeps({ script });
49
+ const toolbarCreator = useMemo(() => createToolbar({ state, script, t, ...options }), [state, script, options, t]);
41
50
  const menu = useMenuActions(toolbarCreator);
42
51
 
43
52
  return (
44
53
  <div role='none' className={stackItemContentToolbarClassNames(role)}>
45
54
  <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>
46
- <MenuProvider {...menu} onAction={handleAction} attendableId={fullyQualifiedId(script)}>
55
+ <MenuProvider {...menu} attendableId={fullyQualifiedId(script)}>
47
56
  <ToolbarMenu classNames={classNames} />
48
57
  </MenuProvider>
49
58
  </ElevationProvider>
@@ -6,12 +6,12 @@ import { Octokit } from '@octokit/core';
6
6
  import React, { type ChangeEvent, useCallback, useEffect, useState } from 'react';
7
7
 
8
8
  import { createIntent, SettingsAction, useIntentDispatcher } from '@dxos/app-framework';
9
- import { FunctionType, type ScriptType, getInvocationUrl, getUserFunctionUrlInMetadata } from '@dxos/functions/types';
9
+ import { FunctionType, type ScriptType, getInvocationUrl, getUserFunctionUrlInMetadata } from '@dxos/functions';
10
10
  import { log } from '@dxos/log';
11
11
  import { useClient } from '@dxos/react-client';
12
- import { Filter, getMeta, getSpace, useQuery } from '@dxos/react-client/echo';
12
+ import { Filter, getMeta, getSpace, Ref, useQuery } from '@dxos/react-client/echo';
13
13
  import { Button, Clipboard, Input, useControlledState, useTranslation } from '@dxos/react-ui';
14
- import { AccessTokenType } from '@dxos/schema';
14
+ import { DataType } from '@dxos/schema';
15
15
 
16
16
  import { SCRIPT_PLUGIN } from '../../meta';
17
17
 
@@ -48,7 +48,7 @@ const Binding = ({ object }: ScriptObjectSettingsProps) => {
48
48
  const { t } = useTranslation(SCRIPT_PLUGIN);
49
49
  const client = useClient();
50
50
  const space = getSpace(object);
51
- const [fn] = useQuery(space, Filter.schema(FunctionType, { source: object }));
51
+ const [fn] = useQuery(space, Filter.type(FunctionType, { source: Ref.make(object) }));
52
52
 
53
53
  const functionPath = fn && getUserFunctionUrlInMetadata(getMeta(fn));
54
54
  const functionUrl =
@@ -112,7 +112,7 @@ const Publishing = ({ object }: ScriptObjectSettingsProps) => {
112
112
  const { t } = useTranslation(SCRIPT_PLUGIN);
113
113
  const { dispatchPromise: dispatch } = useIntentDispatcher();
114
114
  const space = getSpace(object);
115
- const [githubToken] = useQuery(space, Filter.schema(AccessTokenType, { source: 'github.com' }));
115
+ const [githubToken] = useQuery(space, Filter.type(DataType.AccessToken, { source: 'github.com' }));
116
116
  const gistKey = getMeta(object).keys.find(({ source }) => source === 'github.com');
117
117
  const [gistUrl, setGistUrl] = useState<string | undefined>();
118
118
 
@@ -0,0 +1,21 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { type ScriptType } from '@dxos/functions';
8
+ import { StackItem } from '@dxos/react-ui-stack';
9
+
10
+ import { TestPanel } from './TestPanel';
11
+ import { useDeployState, useToolbarState } from '../../hooks';
12
+
13
+ export const TestContainer = ({ script, role }: { script: ScriptType; role: string }) => {
14
+ const state = useToolbarState();
15
+ useDeployState({ state, script });
16
+ return (
17
+ <StackItem.Content role={role}>
18
+ <TestPanel functionUrl={state.functionUrl} />
19
+ </StackItem.Content>
20
+ );
21
+ };
@@ -2,4 +2,5 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ export * from './TestContainer';
5
6
  export * from './TestPanel';
@@ -18,7 +18,6 @@ import {
18
18
  autocomplete,
19
19
  createBasicExtensions,
20
20
  createThemeExtensions,
21
- editorFullWidth,
22
21
  type EditorInputMode,
23
22
  editorMonospace,
24
23
  EditorView,
@@ -64,15 +63,10 @@ export const TypescriptEditor = ({
64
63
  createThemeExtensions({
65
64
  themeMode,
66
65
  syntaxHighlighting: true,
67
- slots: {
68
- content: { className: editorFullWidth },
69
- },
70
66
  }),
71
67
  // NOTE: Not using default editor gutter because folding for code works best right beside text.
72
68
  EditorView.theme({
73
69
  '.cm-gutters': {
74
- // Match margin from content.
75
- marginTop: '16px',
76
70
  background: 'var(--dx-baseSurface)',
77
71
  },
78
72
  }),