@dxos/plugin-script 0.8.4-main.937b3ca → 0.8.4-main.abd8ff62ef

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 (536) hide show
  1. package/README.md +15 -13
  2. package/dist/lib/browser/DeploymentDialog-6DBF3V6C.mjs +112 -0
  3. package/dist/lib/browser/DeploymentDialog-6DBF3V6C.mjs.map +7 -0
  4. package/dist/lib/browser/{NotebookContainer-4MM2VAQF.mjs → NotebookContainer-RO4NJRYH.mjs} +59 -144
  5. package/dist/lib/browser/NotebookContainer-RO4NJRYH.mjs.map +7 -0
  6. package/dist/lib/browser/ScriptContainer-2OPBAXFB.mjs +79 -0
  7. package/dist/lib/browser/ScriptContainer-2OPBAXFB.mjs.map +7 -0
  8. package/dist/lib/browser/ScriptProperties-NRXG4PBX.mjs +304 -0
  9. package/dist/lib/browser/ScriptProperties-NRXG4PBX.mjs.map +7 -0
  10. package/dist/lib/browser/TestContainer-JNFPLAJX.mjs +44 -0
  11. package/dist/lib/browser/TestContainer-JNFPLAJX.mjs.map +7 -0
  12. package/dist/lib/browser/access-token-created-MSWZWZCT.mjs +37 -0
  13. package/dist/lib/browser/access-token-created-MSWZWZCT.mjs.map +7 -0
  14. package/dist/lib/browser/blueprints/index.mjs +53 -3
  15. package/dist/lib/browser/blueprints/index.mjs.map +4 -4
  16. package/dist/lib/browser/chunk-KF6H7J5N.mjs +81 -0
  17. package/dist/lib/browser/chunk-KF6H7J5N.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-MI6X5CTJ.mjs +336 -0
  19. package/dist/lib/browser/chunk-MI6X5CTJ.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-UX4GHJ5E.mjs → chunk-NSAF3763.mjs} +29 -29
  21. package/dist/lib/browser/chunk-NSAF3763.mjs.map +7 -0
  22. package/dist/lib/browser/chunk-RQ5LDVFK.mjs +49 -0
  23. package/dist/lib/browser/chunk-RQ5LDVFK.mjs.map +7 -0
  24. package/dist/lib/browser/containers/index.mjs +17 -0
  25. package/dist/lib/browser/containers/index.mjs.map +7 -0
  26. package/dist/lib/browser/create-JDXWBARB.mjs +44 -0
  27. package/dist/lib/browser/create-JDXWBARB.mjs.map +7 -0
  28. package/dist/lib/browser/create-script-Q7B3CFAP.mjs +45 -0
  29. package/dist/lib/browser/create-script-Q7B3CFAP.mjs.map +7 -0
  30. package/dist/lib/browser/delete-PAUWA2QM.mjs +21 -0
  31. package/dist/lib/browser/delete-PAUWA2QM.mjs.map +7 -0
  32. package/dist/lib/browser/deploy-CXVW54JJ.mjs +62 -0
  33. package/dist/lib/browser/deploy-CXVW54JJ.mjs.map +7 -0
  34. package/dist/lib/browser/index.mjs +169 -220
  35. package/dist/lib/browser/index.mjs.map +4 -4
  36. package/dist/lib/browser/inspect-invocations-LEOEP5I2.mjs +59 -0
  37. package/dist/lib/browser/inspect-invocations-LEOEP5I2.mjs.map +7 -0
  38. package/dist/lib/browser/install-function-5N24Q45W.mjs +51 -0
  39. package/dist/lib/browser/install-function-5N24Q45W.mjs.map +7 -0
  40. package/dist/lib/browser/invoke-5QVEZ3X5.mjs +33 -0
  41. package/dist/lib/browser/invoke-5QVEZ3X5.mjs.map +7 -0
  42. package/dist/lib/browser/meta.json +1 -1
  43. package/dist/lib/browser/operations/index.mjs +14 -0
  44. package/dist/lib/browser/operations/index.mjs.map +7 -0
  45. package/dist/lib/browser/query-deployed-functions-FVD7NYPA.mjs +30 -0
  46. package/dist/lib/browser/query-deployed-functions-FVD7NYPA.mjs.map +7 -0
  47. package/dist/lib/browser/read-FFOSK6A3.mjs +26 -0
  48. package/dist/lib/browser/read-FFOSK6A3.mjs.map +7 -0
  49. package/dist/lib/browser/templates/index.mjs +1 -1
  50. package/dist/lib/browser/translations.mjs +104 -0
  51. package/dist/lib/browser/translations.mjs.map +7 -0
  52. package/dist/lib/browser/types/index.mjs +3 -7
  53. package/dist/lib/browser/update-PJS5GG3Y.mjs +63 -0
  54. package/dist/lib/browser/update-PJS5GG3Y.mjs.map +7 -0
  55. package/dist/lib/node-esm/DeploymentDialog-A5BZHUJB.mjs +113 -0
  56. package/dist/lib/node-esm/DeploymentDialog-A5BZHUJB.mjs.map +7 -0
  57. package/dist/lib/node-esm/{NotebookContainer-QLW5ZYGS.mjs → NotebookContainer-DPT65MA7.mjs} +59 -144
  58. package/dist/lib/node-esm/NotebookContainer-DPT65MA7.mjs.map +7 -0
  59. package/dist/lib/node-esm/ScriptContainer-UKD7QORM.mjs +80 -0
  60. package/dist/lib/node-esm/ScriptContainer-UKD7QORM.mjs.map +7 -0
  61. package/dist/lib/node-esm/ScriptProperties-FQXEOJKG.mjs +305 -0
  62. package/dist/lib/node-esm/ScriptProperties-FQXEOJKG.mjs.map +7 -0
  63. package/dist/lib/node-esm/TestContainer-Y4XVV7KQ.mjs +45 -0
  64. package/dist/lib/node-esm/TestContainer-Y4XVV7KQ.mjs.map +7 -0
  65. package/dist/lib/node-esm/access-token-created-DCD6LYQC.mjs +38 -0
  66. package/dist/lib/node-esm/access-token-created-DCD6LYQC.mjs.map +7 -0
  67. package/dist/lib/node-esm/blueprints/index.mjs +53 -3
  68. package/dist/lib/node-esm/blueprints/index.mjs.map +4 -4
  69. package/dist/lib/node-esm/chunk-2DZNF5NG.mjs +82 -0
  70. package/dist/lib/node-esm/chunk-2DZNF5NG.mjs.map +7 -0
  71. package/dist/lib/node-esm/chunk-C55UYWN4.mjs +50 -0
  72. package/dist/lib/node-esm/chunk-C55UYWN4.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-4F5FJZ36.mjs → chunk-EW63XFRQ.mjs} +29 -29
  74. package/dist/lib/node-esm/chunk-EW63XFRQ.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-XFM2BEHY.mjs +338 -0
  76. package/dist/lib/node-esm/chunk-XFM2BEHY.mjs.map +7 -0
  77. package/dist/lib/node-esm/containers/index.mjs +18 -0
  78. package/dist/lib/node-esm/containers/index.mjs.map +7 -0
  79. package/dist/lib/node-esm/create-D2JDNXY6.mjs +45 -0
  80. package/dist/lib/node-esm/create-D2JDNXY6.mjs.map +7 -0
  81. package/dist/lib/node-esm/create-script-4AB4G7GQ.mjs +46 -0
  82. package/dist/lib/node-esm/create-script-4AB4G7GQ.mjs.map +7 -0
  83. package/dist/lib/node-esm/delete-YXLT7J27.mjs +22 -0
  84. package/dist/lib/node-esm/delete-YXLT7J27.mjs.map +7 -0
  85. package/dist/lib/node-esm/deploy-MXVZXAUC.mjs +63 -0
  86. package/dist/lib/node-esm/deploy-MXVZXAUC.mjs.map +7 -0
  87. package/dist/lib/node-esm/index.mjs +169 -220
  88. package/dist/lib/node-esm/index.mjs.map +4 -4
  89. package/dist/lib/node-esm/inspect-invocations-TVAKGYX5.mjs +60 -0
  90. package/dist/lib/node-esm/inspect-invocations-TVAKGYX5.mjs.map +7 -0
  91. package/dist/lib/node-esm/install-function-ST3VABJH.mjs +52 -0
  92. package/dist/lib/node-esm/install-function-ST3VABJH.mjs.map +7 -0
  93. package/dist/lib/node-esm/invoke-64WDU55Y.mjs +34 -0
  94. package/dist/lib/node-esm/invoke-64WDU55Y.mjs.map +7 -0
  95. package/dist/lib/node-esm/meta.json +1 -1
  96. package/dist/lib/node-esm/operations/index.mjs +15 -0
  97. package/dist/lib/node-esm/operations/index.mjs.map +7 -0
  98. package/dist/lib/node-esm/query-deployed-functions-2VCNGQ7X.mjs +31 -0
  99. package/dist/lib/node-esm/query-deployed-functions-2VCNGQ7X.mjs.map +7 -0
  100. package/dist/lib/node-esm/read-PECQUAPS.mjs +27 -0
  101. package/dist/lib/node-esm/read-PECQUAPS.mjs.map +7 -0
  102. package/dist/lib/node-esm/templates/index.mjs +1 -1
  103. package/dist/lib/node-esm/translations.mjs +105 -0
  104. package/dist/lib/node-esm/translations.mjs.map +7 -0
  105. package/dist/lib/node-esm/types/index.mjs +3 -7
  106. package/dist/lib/node-esm/update-XDFTGSPP.mjs +64 -0
  107. package/dist/lib/node-esm/update-XDFTGSPP.mjs.map +7 -0
  108. package/dist/types/src/ScriptPlugin.d.ts +1 -0
  109. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  110. package/dist/types/src/ScriptPlugin.node.d.ts +4 -0
  111. package/dist/types/src/ScriptPlugin.node.d.ts.map +1 -0
  112. package/dist/types/src/ScriptPlugin.test.d.ts +2 -0
  113. package/dist/types/src/ScriptPlugin.test.d.ts.map +1 -0
  114. package/dist/types/src/blueprints/functions/create.d.ts +11 -0
  115. package/dist/types/src/blueprints/functions/create.d.ts.map +1 -0
  116. package/dist/types/src/blueprints/functions/definitions.d.ts +141 -0
  117. package/dist/types/src/blueprints/functions/definitions.d.ts.map +1 -0
  118. package/dist/types/src/blueprints/functions/delete.d.ts +18 -0
  119. package/dist/types/src/blueprints/functions/delete.d.ts.map +1 -0
  120. package/dist/types/src/blueprints/functions/deploy.d.ts +22 -0
  121. package/dist/types/src/blueprints/functions/deploy.d.ts.map +1 -0
  122. package/dist/types/src/blueprints/functions/index.d.ts +4 -0
  123. package/dist/types/src/blueprints/functions/index.d.ts.map +1 -0
  124. package/dist/types/src/blueprints/functions/inspect-invocations.d.ts +29 -0
  125. package/dist/types/src/blueprints/functions/inspect-invocations.d.ts.map +1 -0
  126. package/dist/types/src/blueprints/functions/install-function.d.ts +11 -0
  127. package/dist/types/src/blueprints/functions/install-function.d.ts.map +1 -0
  128. package/dist/types/src/blueprints/functions/invoke.d.ts +22 -0
  129. package/dist/types/src/blueprints/functions/invoke.d.ts.map +1 -0
  130. package/dist/types/src/blueprints/functions/query-deployed-functions.d.ts +13 -0
  131. package/dist/types/src/blueprints/functions/query-deployed-functions.d.ts.map +1 -0
  132. package/dist/types/src/blueprints/functions/read.d.ts +22 -0
  133. package/dist/types/src/blueprints/functions/read.d.ts.map +1 -0
  134. package/dist/types/src/blueprints/functions/update.d.ts +27 -0
  135. package/dist/types/src/blueprints/functions/update.d.ts.map +1 -0
  136. package/dist/types/src/blueprints/index.d.ts +1 -1
  137. package/dist/types/src/blueprints/index.d.ts.map +1 -1
  138. package/dist/types/src/blueprints/script-blueprint.d.ts +3 -21
  139. package/dist/types/src/blueprints/script-blueprint.d.ts.map +1 -1
  140. package/dist/types/src/capabilities/app-graph-builder.d.ts +6 -0
  141. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  142. package/dist/types/src/capabilities/{artifact-definition/artifact-definition.d.ts → artifact-definition.d.ts} +1 -1
  143. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -0
  144. package/dist/types/src/capabilities/blueprint-definition.d.ts +6 -0
  145. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  146. package/dist/types/src/capabilities/compiler.d.ts +6 -0
  147. package/dist/types/src/capabilities/compiler.d.ts.map +1 -0
  148. package/dist/types/src/capabilities/index.d.ts +8 -6
  149. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  150. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  151. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  152. package/dist/types/src/capabilities/react-surface.d.ts +5 -0
  153. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  154. package/dist/types/src/capabilities/settings.d.ts +7 -0
  155. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  156. package/dist/types/src/compiler/compiler.d.ts.map +1 -1
  157. package/dist/types/src/components/{FrameContainer/FrameContainer.d.ts → FramePanel/FramePanel.d.ts} +3 -3
  158. package/dist/types/src/components/FramePanel/FramePanel.d.ts.map +1 -0
  159. package/dist/types/src/components/FramePanel/index.d.ts +2 -0
  160. package/dist/types/src/components/FramePanel/index.d.ts.map +1 -0
  161. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts +1 -1
  162. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts.map +1 -1
  163. package/dist/types/src/components/NotebookStack/NotebookMenu.d.ts +1 -1
  164. package/dist/types/src/components/NotebookStack/NotebookMenu.d.ts.map +1 -1
  165. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts +4 -2
  166. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts.map +1 -1
  167. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts +219 -228
  168. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts.map +1 -1
  169. package/dist/types/src/components/QueryEditor/QueryEditor.d.ts.map +1 -1
  170. package/dist/types/src/components/QueryEditor/QueryEditor.stories.d.ts.map +1 -1
  171. package/dist/types/src/components/ScriptPluginSettings/ScriptPluginSettings.d.ts +8 -0
  172. package/dist/types/src/components/ScriptPluginSettings/ScriptPluginSettings.d.ts.map +1 -0
  173. package/dist/types/src/components/ScriptPluginSettings/ScriptPluginSettings.stories.d.ts +241 -0
  174. package/dist/types/src/components/ScriptPluginSettings/ScriptPluginSettings.stories.d.ts.map +1 -0
  175. package/dist/types/src/components/ScriptPluginSettings/index.d.ts +2 -0
  176. package/dist/types/src/components/ScriptPluginSettings/index.d.ts.map +1 -0
  177. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +7 -5
  178. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  179. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts +219 -228
  180. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts.map +1 -1
  181. package/dist/types/src/components/TestPanel/TestPanel.d.ts +4 -2
  182. package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -1
  183. package/dist/types/src/components/TestPanel/index.d.ts +0 -1
  184. package/dist/types/src/components/TestPanel/index.d.ts.map +1 -1
  185. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +5 -2
  186. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  187. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts +3 -1
  188. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts.map +1 -1
  189. package/dist/types/src/components/index.d.ts +6 -5
  190. package/dist/types/src/components/index.d.ts.map +1 -1
  191. package/dist/types/src/constants.d.ts +2 -0
  192. package/dist/types/src/constants.d.ts.map +1 -0
  193. package/dist/types/src/{components → containers}/DeploymentDialog/DeploymentDialog.d.ts +0 -2
  194. package/dist/types/src/containers/DeploymentDialog/DeploymentDialog.d.ts.map +1 -0
  195. package/dist/types/src/containers/DeploymentDialog/DeploymentDialog.stories.d.ts +240 -0
  196. package/dist/types/src/{components → containers}/DeploymentDialog/DeploymentDialog.stories.d.ts.map +1 -1
  197. package/dist/types/src/containers/DeploymentDialog/index.d.ts +2 -0
  198. package/dist/types/src/containers/DeploymentDialog/index.d.ts.map +1 -0
  199. package/dist/types/src/containers/NotebookContainer/NotebookContainer.d.ts +7 -0
  200. package/dist/types/src/containers/NotebookContainer/NotebookContainer.d.ts.map +1 -0
  201. package/dist/types/src/containers/NotebookContainer/NotebookContainer.stories.d.ts.map +1 -0
  202. package/dist/types/src/containers/NotebookContainer/index.d.ts +2 -0
  203. package/dist/types/src/containers/NotebookContainer/index.d.ts.map +1 -0
  204. package/dist/types/src/containers/ScriptContainer/ScriptContainer.d.ts +10 -0
  205. package/dist/types/src/containers/ScriptContainer/ScriptContainer.d.ts.map +1 -0
  206. package/dist/types/src/containers/ScriptContainer/ScriptContainer.stories.d.ts +242 -0
  207. package/dist/types/src/containers/ScriptContainer/ScriptContainer.stories.d.ts.map +1 -0
  208. package/dist/types/src/containers/ScriptContainer/index.d.ts +2 -0
  209. package/dist/types/src/containers/ScriptContainer/index.d.ts.map +1 -0
  210. package/dist/types/src/containers/ScriptProperties/BlueprintEditor.d.ts +7 -0
  211. package/dist/types/src/containers/ScriptProperties/BlueprintEditor.d.ts.map +1 -0
  212. package/dist/types/src/containers/ScriptProperties/FunctionBinding.d.ts +7 -0
  213. package/dist/types/src/containers/ScriptProperties/FunctionBinding.d.ts.map +1 -0
  214. package/dist/types/src/containers/ScriptProperties/FunctionPublishing.d.ts +7 -0
  215. package/dist/types/src/containers/ScriptProperties/FunctionPublishing.d.ts.map +1 -0
  216. package/dist/types/src/containers/ScriptProperties/ScriptProperties.d.ts +6 -0
  217. package/dist/types/src/containers/ScriptProperties/ScriptProperties.d.ts.map +1 -0
  218. package/dist/types/src/containers/ScriptProperties/ScriptProperties.stories.d.ts +242 -0
  219. package/dist/types/src/containers/ScriptProperties/ScriptProperties.stories.d.ts.map +1 -0
  220. package/dist/types/src/containers/ScriptProperties/index.d.ts +2 -0
  221. package/dist/types/src/containers/ScriptProperties/index.d.ts.map +1 -0
  222. package/dist/types/src/{components/TestPanel → containers/TestContainer}/TestContainer.d.ts +1 -1
  223. package/dist/types/src/containers/TestContainer/TestContainer.d.ts.map +1 -0
  224. package/dist/types/src/containers/TestContainer/index.d.ts +2 -0
  225. package/dist/types/src/containers/TestContainer/index.d.ts.map +1 -0
  226. package/dist/types/src/containers/index.d.ts +7 -0
  227. package/dist/types/src/containers/index.d.ts.map +1 -0
  228. package/dist/types/src/hooks/deploy.d.ts +18 -5
  229. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  230. package/dist/types/src/hooks/format.d.ts +2 -1
  231. package/dist/types/src/hooks/format.d.ts.map +1 -1
  232. package/dist/types/src/hooks/template.d.ts +2 -1
  233. package/dist/types/src/hooks/template.d.ts.map +1 -1
  234. package/dist/types/src/hooks/useCompiler.d.ts.map +1 -1
  235. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
  236. package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -1
  237. package/dist/types/src/index.d.ts +2 -2
  238. package/dist/types/src/index.d.ts.map +1 -1
  239. package/dist/types/src/notebook/compute-graph.d.ts +1 -1
  240. package/dist/types/src/notebook/compute-graph.d.ts.map +1 -1
  241. package/dist/types/src/notebook/eval.d.ts.map +1 -1
  242. package/dist/types/src/notebook/vfs-parser.d.ts.map +1 -1
  243. package/dist/types/src/operations/access-token-created.d.ts +5 -0
  244. package/dist/types/src/operations/access-token-created.d.ts.map +1 -0
  245. package/dist/types/src/operations/create-script.d.ts +5 -0
  246. package/dist/types/src/operations/create-script.d.ts.map +1 -0
  247. package/dist/types/src/operations/definitions.d.ts +29 -0
  248. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  249. package/dist/types/src/operations/index.d.ts +4 -0
  250. package/dist/types/src/operations/index.d.ts.map +1 -0
  251. package/dist/types/src/templates/anthropic.d.ts +4 -5
  252. package/dist/types/src/templates/anthropic.d.ts.map +1 -1
  253. package/dist/types/src/templates/chat.d.ts.map +1 -1
  254. package/dist/types/src/templates/chess-bot.d.ts +7 -5
  255. package/dist/types/src/templates/chess-bot.d.ts.map +1 -1
  256. package/dist/types/src/templates/commentary.d.ts +7 -4
  257. package/dist/types/src/templates/commentary.d.ts.map +1 -1
  258. package/dist/types/src/templates/data-generator.d.ts.map +1 -1
  259. package/dist/types/src/templates/discord.d.ts.map +1 -1
  260. package/dist/types/src/templates/email.d.ts.map +1 -1
  261. package/dist/types/src/templates/forex-effect.d.ts +3 -2
  262. package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
  263. package/dist/types/src/templates/forex.d.ts +3 -2
  264. package/dist/types/src/templates/forex.d.ts.map +1 -1
  265. package/dist/types/src/templates/gmail.d.ts.map +1 -1
  266. package/dist/types/src/templates/index.d.ts +29 -29
  267. package/dist/types/src/templates/index.d.ts.map +1 -1
  268. package/dist/types/src/templates/ping.d.ts +2 -1
  269. package/dist/types/src/templates/ping.d.ts.map +1 -1
  270. package/dist/types/src/testing/index.d.ts +2 -1
  271. package/dist/types/src/testing/index.d.ts.map +1 -1
  272. package/dist/types/src/testing/test-notebook.d.ts +3 -0
  273. package/dist/types/src/testing/test-notebook.d.ts.map +1 -0
  274. package/dist/types/src/testing/test-script.d.ts +7 -0
  275. package/dist/types/src/testing/test-script.d.ts.map +1 -0
  276. package/dist/types/src/translations.d.ts +222 -92
  277. package/dist/types/src/translations.d.ts.map +1 -1
  278. package/dist/types/src/types/Notebook.d.ts +65 -49
  279. package/dist/types/src/types/Notebook.d.ts.map +1 -1
  280. package/dist/types/src/types/Settings.d.ts +7 -0
  281. package/dist/types/src/types/Settings.d.ts.map +1 -0
  282. package/dist/types/src/types/capabilities.d.ts +2 -5
  283. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  284. package/dist/types/src/types/events.d.ts.map +1 -1
  285. package/dist/types/src/types/index.d.ts +0 -1
  286. package/dist/types/src/types/index.d.ts.map +1 -1
  287. package/dist/types/src/types/types.d.ts +1 -5
  288. package/dist/types/src/types/types.d.ts.map +1 -1
  289. package/dist/types/src/util/deploy.d.ts +2 -2
  290. package/dist/types/src/util/deploy.d.ts.map +1 -1
  291. package/dist/types/src/util/functions.d.ts +2 -2
  292. package/dist/types/src/util/functions.d.ts.map +1 -1
  293. package/dist/types/tsconfig.tsbuildinfo +1 -1
  294. package/package.json +121 -99
  295. package/src/ScriptPlugin.node.ts +70 -0
  296. package/src/ScriptPlugin.test.ts +31 -0
  297. package/src/ScriptPlugin.tsx +52 -34
  298. package/src/blueprints/functions/create.ts +47 -0
  299. package/src/blueprints/functions/definitions.ts +323 -0
  300. package/src/blueprints/functions/delete.ts +23 -0
  301. package/src/blueprints/functions/deploy.ts +70 -0
  302. package/src/blueprints/functions/index.ts +19 -0
  303. package/src/blueprints/functions/inspect-invocations.ts +56 -0
  304. package/src/blueprints/functions/install-function.ts +56 -0
  305. package/src/blueprints/functions/invoke.ts +35 -0
  306. package/src/blueprints/functions/query-deployed-functions.ts +31 -0
  307. package/src/blueprints/functions/read.ts +29 -0
  308. package/src/blueprints/functions/update.ts +68 -0
  309. package/src/blueprints/index.ts +1 -1
  310. package/src/blueprints/script-blueprint.ts +40 -9
  311. package/src/capabilities/app-graph-builder.ts +47 -0
  312. package/src/capabilities/{artifact-definition/artifact-definition.ts → artifact-definition.ts} +2 -3
  313. package/src/capabilities/blueprint-definition.ts +19 -0
  314. package/src/capabilities/{compiler/compiler.ts → compiler.ts} +17 -9
  315. package/src/capabilities/index.ts +13 -6
  316. package/src/capabilities/operation-handler.ts +21 -0
  317. package/src/capabilities/react-surface.tsx +130 -0
  318. package/src/capabilities/{settings/settings.ts → settings.ts} +7 -6
  319. package/src/compiler/compiler.ts +8 -1
  320. package/src/components/{FrameContainer/FrameContainer.tsx → FramePanel/FramePanel.tsx} +4 -5
  321. package/src/components/{FrameContainer → FramePanel}/index.ts +1 -1
  322. package/src/components/NotebookStack/NotebookCell.tsx +31 -22
  323. package/src/components/NotebookStack/NotebookMenu.tsx +7 -7
  324. package/src/components/NotebookStack/NotebookStack.stories.tsx +7 -9
  325. package/src/components/NotebookStack/NotebookStack.tsx +27 -16
  326. package/src/components/QueryEditor/QueryEditor.stories.tsx +18 -22
  327. package/src/components/ScriptPluginSettings/ScriptPluginSettings.stories.tsx +32 -0
  328. package/src/components/ScriptPluginSettings/ScriptPluginSettings.tsx +42 -0
  329. package/src/components/ScriptPluginSettings/index.ts +5 -0
  330. package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +8 -9
  331. package/src/components/ScriptToolbar/ScriptToolbar.tsx +24 -26
  332. package/src/components/TestPanel/TestPanel.tsx +110 -194
  333. package/src/components/TestPanel/index.ts +0 -1
  334. package/src/components/TypescriptEditor/TypescriptEditor.stories.tsx +17 -15
  335. package/src/components/TypescriptEditor/TypescriptEditor.tsx +26 -19
  336. package/src/components/index.ts +6 -7
  337. package/src/constants.ts +7 -0
  338. package/src/{components → containers}/DeploymentDialog/DeploymentDialog.stories.tsx +8 -7
  339. package/src/{components → containers}/DeploymentDialog/DeploymentDialog.tsx +33 -37
  340. package/src/containers/DeploymentDialog/index.ts +5 -0
  341. package/src/{components → containers/NotebookContainer}/NotebookContainer.stories.tsx +18 -20
  342. package/src/{components → containers/NotebookContainer}/NotebookContainer.tsx +61 -77
  343. package/src/containers/NotebookContainer/index.ts +5 -0
  344. package/src/containers/ScriptContainer/ScriptContainer.stories.tsx +106 -0
  345. package/src/{components → containers/ScriptContainer}/ScriptContainer.tsx +28 -27
  346. package/src/containers/ScriptContainer/index.ts +5 -0
  347. package/src/containers/ScriptProperties/BlueprintEditor.tsx +101 -0
  348. package/src/containers/ScriptProperties/FunctionBinding.tsx +83 -0
  349. package/src/containers/ScriptProperties/FunctionPublishing.tsx +121 -0
  350. package/src/containers/ScriptProperties/ScriptProperties.stories.tsx +75 -0
  351. package/src/containers/ScriptProperties/ScriptProperties.tsx +24 -0
  352. package/src/containers/ScriptProperties/index.ts +5 -0
  353. package/src/containers/TestContainer/TestContainer.tsx +44 -0
  354. package/src/containers/TestContainer/index.ts +5 -0
  355. package/src/containers/index.ts +11 -0
  356. package/src/e2e/ai.test.ts +7 -6
  357. package/src/e2e/deploy.test.ts +5 -5
  358. package/src/hooks/deploy.ts +15 -13
  359. package/src/hooks/format.ts +6 -5
  360. package/src/hooks/template.ts +9 -8
  361. package/src/hooks/useCompiler.ts +4 -3
  362. package/src/hooks/useCreateAndDeployScriptTemplates.ts +5 -4
  363. package/src/hooks/useToolbarState.ts +7 -6
  364. package/src/index.ts +6 -3
  365. package/src/meta.ts +2 -2
  366. package/src/notebook/compute-graph.test.ts +7 -7
  367. package/src/notebook/compute-graph.ts +1 -1
  368. package/src/notebook/vfs-parser.ts +10 -3
  369. package/src/operations/access-token-created.ts +37 -0
  370. package/src/operations/create-script.ts +46 -0
  371. package/src/operations/definitions.ts +40 -0
  372. package/src/operations/index.ts +12 -0
  373. package/src/templates/anthropic.ts +19 -12
  374. package/src/templates/chat.ts +1 -1
  375. package/src/templates/chess-bot.ts +37 -34
  376. package/src/templates/commentary.ts +178 -162
  377. package/src/templates/data-generator.ts +1 -1
  378. package/src/templates/discord.ts +3 -3
  379. package/src/templates/forex-effect.ts +30 -19
  380. package/src/templates/forex.ts +24 -15
  381. package/src/templates/gmail.ts +4 -4
  382. package/src/templates/index.ts +18 -18
  383. package/src/templates/ping.ts +16 -8
  384. package/src/testing/index.ts +2 -1
  385. package/src/testing/simulator.test.ts +3 -4
  386. package/src/testing/{data.ts → test-notebook.ts} +4 -5
  387. package/src/testing/test-script.ts +29 -0
  388. package/src/translations.ts +86 -87
  389. package/src/types/Notebook.ts +12 -8
  390. package/src/types/Settings.ts +20 -0
  391. package/src/types/capabilities.ts +5 -5
  392. package/src/types/events.ts +2 -2
  393. package/src/types/index.ts +0 -1
  394. package/src/types/types.ts +1 -11
  395. package/src/util/deploy.ts +13 -11
  396. package/src/util/functions.ts +9 -8
  397. package/dist/lib/browser/DeploymentDialog-GXNRUXF6.mjs +0 -14
  398. package/dist/lib/browser/DeploymentDialog-GXNRUXF6.mjs.map +0 -7
  399. package/dist/lib/browser/NotebookContainer-4MM2VAQF.mjs.map +0 -7
  400. package/dist/lib/browser/ScriptContainer-X6GCYZZW.mjs +0 -149
  401. package/dist/lib/browser/ScriptContainer-X6GCYZZW.mjs.map +0 -7
  402. package/dist/lib/browser/app-graph-builder-7VO7AUI6.mjs +0 -68
  403. package/dist/lib/browser/app-graph-builder-7VO7AUI6.mjs.map +0 -7
  404. package/dist/lib/browser/blueprint-definition-OSOUYI7A.mjs +0 -17
  405. package/dist/lib/browser/blueprint-definition-OSOUYI7A.mjs.map +0 -7
  406. package/dist/lib/browser/chunk-3O2DQGCP.mjs +0 -113
  407. package/dist/lib/browser/chunk-3O2DQGCP.mjs.map +0 -7
  408. package/dist/lib/browser/chunk-BTWHM6FH.mjs +0 -270
  409. package/dist/lib/browser/chunk-BTWHM6FH.mjs.map +0 -7
  410. package/dist/lib/browser/chunk-F3QKSKSF.mjs +0 -35
  411. package/dist/lib/browser/chunk-F3QKSKSF.mjs.map +0 -7
  412. package/dist/lib/browser/chunk-I7CSE6T3.mjs +0 -110
  413. package/dist/lib/browser/chunk-I7CSE6T3.mjs.map +0 -7
  414. package/dist/lib/browser/chunk-IQRLM6JK.mjs +0 -137
  415. package/dist/lib/browser/chunk-IQRLM6JK.mjs.map +0 -7
  416. package/dist/lib/browser/chunk-NWSK27QB.mjs +0 -606
  417. package/dist/lib/browser/chunk-NWSK27QB.mjs.map +0 -7
  418. package/dist/lib/browser/chunk-UX4GHJ5E.mjs.map +0 -7
  419. package/dist/lib/browser/chunk-WX2NVNFQ.mjs +0 -557
  420. package/dist/lib/browser/chunk-WX2NVNFQ.mjs.map +0 -7
  421. package/dist/lib/browser/chunk-WYR4QHPE.mjs +0 -31
  422. package/dist/lib/browser/chunk-WYR4QHPE.mjs.map +0 -7
  423. package/dist/lib/browser/compiler-XRBFQFXO.mjs +0 -161
  424. package/dist/lib/browser/compiler-XRBFQFXO.mjs.map +0 -7
  425. package/dist/lib/browser/operation-resolver-MUNR376F.mjs +0 -82
  426. package/dist/lib/browser/operation-resolver-MUNR376F.mjs.map +0 -7
  427. package/dist/lib/browser/react-surface-5TEC66UY.mjs +0 -139
  428. package/dist/lib/browser/react-surface-5TEC66UY.mjs.map +0 -7
  429. package/dist/lib/browser/settings-R4WKREUJ.mjs +0 -35
  430. package/dist/lib/browser/settings-R4WKREUJ.mjs.map +0 -7
  431. package/dist/lib/node-esm/DeploymentDialog-EVFV2VJT.mjs +0 -15
  432. package/dist/lib/node-esm/DeploymentDialog-EVFV2VJT.mjs.map +0 -7
  433. package/dist/lib/node-esm/NotebookContainer-QLW5ZYGS.mjs.map +0 -7
  434. package/dist/lib/node-esm/ScriptContainer-3DZ3BMHW.mjs +0 -150
  435. package/dist/lib/node-esm/ScriptContainer-3DZ3BMHW.mjs.map +0 -7
  436. package/dist/lib/node-esm/app-graph-builder-NVE3EVBG.mjs +0 -69
  437. package/dist/lib/node-esm/app-graph-builder-NVE3EVBG.mjs.map +0 -7
  438. package/dist/lib/node-esm/blueprint-definition-NC7NNJGI.mjs +0 -18
  439. package/dist/lib/node-esm/blueprint-definition-NC7NNJGI.mjs.map +0 -7
  440. package/dist/lib/node-esm/chunk-4F5FJZ36.mjs.map +0 -7
  441. package/dist/lib/node-esm/chunk-5HSJPAK7.mjs +0 -33
  442. package/dist/lib/node-esm/chunk-5HSJPAK7.mjs.map +0 -7
  443. package/dist/lib/node-esm/chunk-KN6SQYUF.mjs +0 -114
  444. package/dist/lib/node-esm/chunk-KN6SQYUF.mjs.map +0 -7
  445. package/dist/lib/node-esm/chunk-MGWKULCD.mjs +0 -558
  446. package/dist/lib/node-esm/chunk-MGWKULCD.mjs.map +0 -7
  447. package/dist/lib/node-esm/chunk-SLU3KRV3.mjs +0 -112
  448. package/dist/lib/node-esm/chunk-SLU3KRV3.mjs.map +0 -7
  449. package/dist/lib/node-esm/chunk-VWOLKNMO.mjs +0 -271
  450. package/dist/lib/node-esm/chunk-VWOLKNMO.mjs.map +0 -7
  451. package/dist/lib/node-esm/chunk-Y3G5NCTP.mjs +0 -36
  452. package/dist/lib/node-esm/chunk-Y3G5NCTP.mjs.map +0 -7
  453. package/dist/lib/node-esm/chunk-YEWLTVBT.mjs +0 -138
  454. package/dist/lib/node-esm/chunk-YEWLTVBT.mjs.map +0 -7
  455. package/dist/lib/node-esm/chunk-ZQGHFNO3.mjs +0 -607
  456. package/dist/lib/node-esm/chunk-ZQGHFNO3.mjs.map +0 -7
  457. package/dist/lib/node-esm/compiler-ORJAXDN7.mjs +0 -162
  458. package/dist/lib/node-esm/compiler-ORJAXDN7.mjs.map +0 -7
  459. package/dist/lib/node-esm/operation-resolver-CLE4ZCC5.mjs +0 -83
  460. package/dist/lib/node-esm/operation-resolver-CLE4ZCC5.mjs.map +0 -7
  461. package/dist/lib/node-esm/react-surface-O3UDMKOQ.mjs +0 -140
  462. package/dist/lib/node-esm/react-surface-O3UDMKOQ.mjs.map +0 -7
  463. package/dist/lib/node-esm/settings-OFIMHU7K.mjs +0 -36
  464. package/dist/lib/node-esm/settings-OFIMHU7K.mjs.map +0 -7
  465. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +0 -6
  466. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +0 -1
  467. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +0 -3
  468. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +0 -1
  469. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts.map +0 -1
  470. package/dist/types/src/capabilities/artifact-definition/index.d.ts +0 -3
  471. package/dist/types/src/capabilities/artifact-definition/index.d.ts.map +0 -1
  472. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +0 -9
  473. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +0 -1
  474. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +0 -3
  475. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +0 -1
  476. package/dist/types/src/capabilities/compiler/compiler.d.ts +0 -6
  477. package/dist/types/src/capabilities/compiler/compiler.d.ts.map +0 -1
  478. package/dist/types/src/capabilities/compiler/index.d.ts +0 -3
  479. package/dist/types/src/capabilities/compiler/index.d.ts.map +0 -1
  480. package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
  481. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
  482. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
  483. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
  484. package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
  485. package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
  486. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +0 -5
  487. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
  488. package/dist/types/src/capabilities/settings/index.d.ts +0 -7
  489. package/dist/types/src/capabilities/settings/index.d.ts.map +0 -1
  490. package/dist/types/src/capabilities/settings/settings.d.ts +0 -9
  491. package/dist/types/src/capabilities/settings/settings.d.ts.map +0 -1
  492. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +0 -1
  493. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts +0 -249
  494. package/dist/types/src/components/DeploymentDialog/index.d.ts +0 -4
  495. package/dist/types/src/components/DeploymentDialog/index.d.ts.map +0 -1
  496. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +0 -1
  497. package/dist/types/src/components/FrameContainer/frame.d.ts +0 -2
  498. package/dist/types/src/components/FrameContainer/frame.d.ts.map +0 -1
  499. package/dist/types/src/components/FrameContainer/index.d.ts +0 -2
  500. package/dist/types/src/components/FrameContainer/index.d.ts.map +0 -1
  501. package/dist/types/src/components/NotebookContainer.d.ts +0 -8
  502. package/dist/types/src/components/NotebookContainer.d.ts.map +0 -1
  503. package/dist/types/src/components/NotebookContainer.stories.d.ts.map +0 -1
  504. package/dist/types/src/components/ScriptContainer.d.ts +0 -11
  505. package/dist/types/src/components/ScriptContainer.d.ts.map +0 -1
  506. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts +0 -8
  507. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +0 -1
  508. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts +0 -8
  509. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +0 -1
  510. package/dist/types/src/components/Settings/index.d.ts +0 -3
  511. package/dist/types/src/components/Settings/index.d.ts.map +0 -1
  512. package/dist/types/src/components/TestPanel/TestContainer.d.ts.map +0 -1
  513. package/dist/types/src/testing/data.d.ts +0 -3
  514. package/dist/types/src/testing/data.d.ts.map +0 -1
  515. package/dist/types/src/types/actions.d.ts +0 -40
  516. package/dist/types/src/types/actions.d.ts.map +0 -1
  517. package/src/capabilities/app-graph-builder/app-graph-builder.ts +0 -55
  518. package/src/capabilities/app-graph-builder/index.ts +0 -7
  519. package/src/capabilities/artifact-definition/index.ts +0 -7
  520. package/src/capabilities/blueprint-definition/blueprint-definition.ts +0 -23
  521. package/src/capabilities/blueprint-definition/index.ts +0 -7
  522. package/src/capabilities/compiler/index.ts +0 -7
  523. package/src/capabilities/operation-resolver/index.ts +0 -7
  524. package/src/capabilities/operation-resolver/operation-resolver.ts +0 -74
  525. package/src/capabilities/react-surface/index.ts +0 -7
  526. package/src/capabilities/react-surface/react-surface.tsx +0 -118
  527. package/src/capabilities/settings/index.ts +0 -7
  528. package/src/components/DeploymentDialog/index.ts +0 -9
  529. package/src/components/FrameContainer/frame.html +0 -25
  530. package/src/components/FrameContainer/frame.tsx +0 -51
  531. package/src/components/Settings/ScriptObjectSettings.tsx +0 -309
  532. package/src/components/Settings/ScriptPluginSettings.tsx +0 -66
  533. package/src/components/Settings/index.ts +0 -6
  534. package/src/components/TestPanel/TestContainer.tsx +0 -27
  535. package/src/types/actions.ts +0 -45
  536. /package/dist/types/src/{components → containers/NotebookContainer}/NotebookContainer.stories.d.ts +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/NotebookContainer.tsx", "../../../src/notebook/compute-graph.ts", "../../../src/notebook/eval.ts", "../../../src/notebook/vfs-parser.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { RegistryContext } from '@effect-atom/atom-react';\nimport * as Cause from 'effect/Cause';\nimport * as Effect from 'effect/Effect';\nimport * as Exit from 'effect/Exit';\nimport React, { useCallback, useContext, useMemo, useState } from 'react';\n\nimport { type SurfaceComponentProps } from '@dxos/app-framework/react';\nimport { Agent } from '@dxos/assistant-toolkit';\nimport { Blueprint, Prompt } from '@dxos/blueprints';\nimport { Filter, Obj, Query, Ref } from '@dxos/echo';\nimport { QueryBuilder } from '@dxos/echo-query';\nimport { type FunctionDefinition, FunctionInvocationService, TracingService } from '@dxos/functions';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { useComputeRuntimeCallback } from '@dxos/plugin-automation';\nimport { Graph } from '@dxos/plugin-explorer/types';\nimport { DropdownMenu, IconButton, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { Layout } from '@dxos/react-ui-mosaic';\nimport { Text, View } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta } from '../meta';\nimport { ComputeGraph } from '../notebook';\nimport { type Notebook } from '../types';\n\nimport { NotebookMenu, NotebookStack, type NotebookStackProps } from './NotebookStack';\nimport { type TypescriptEditorProps } from './TypescriptEditor';\n\nconst INCLUDE_BLUEPRINTS = ['dxos.org/blueprint/assistant', 'dxos.org/blueprint/markdown'];\n\n// TODO(burdon): Support calling named deployed functions (as with sheet).\n\nexport type NotebookContainerProps = SurfaceComponentProps<Notebook.Notebook, Pick<TypescriptEditorProps, 'env'>>;\n\nexport const NotebookContainer = ({ role, subject: notebook, env }: NotebookContainerProps) => {\n const { t } = useTranslation(meta.id);\n const registry = useContext(RegistryContext);\n const db = notebook && Obj.getDatabase(notebook);\n const attendableId = notebook ? Obj.getDXN(notebook).toString() : '';\n const { hasAttention } = useAttention(attendableId);\n\n // TODO(burdon): Consolidate execution and state (with graph).\n // Generalize ComputeGraph evaluation function (using effects).\n const graph = useMemo(() => notebook && new ComputeGraph(notebook, registry), [notebook, registry]);\n\n const [queryValues, setQueryValues] = useState<Record<string, any>>({});\n const handleExecQueries = useCallback(async () => {\n invariant(db);\n\n const builder = new QueryBuilder();\n for (const cell of notebook?.cells ?? []) {\n if (cell.type === 'query') {\n if (cell.source?.target) {\n const source = cell.source.target.content;\n const { name, filter } = builder.build(source);\n if (filter) {\n const ast = Query.select(filter).ast;\n const graph = cell.graph?.target;\n if (!graph) {\n const { view } = await View.makeFromDatabase({ db });\n const newGraph = Graph.make({ query: { ast }, view });\n Obj.change(notebook!, (n) => {\n const c = n.cells.find((c) => c.id === cell.id);\n if (c) {\n c.graph = Ref.make(newGraph);\n c.name = name;\n }\n });\n } else {\n Obj.change(graph, () => {\n graph.query.ast = ast;\n });\n }\n }\n }\n\n if (cell.name && cell.graph?.target) {\n const graph = Obj.getSnapshot(cell.graph?.target);\n const query = Query.fromAst(graph.query.ast);\n const objects = await db.query(query).run();\n const objectIds = objects?.map((obj) => obj.id);\n setQueryValues((prev) => ({ ...prev, [cell.name!]: objectIds }));\n }\n }\n }\n }, [db, notebook, graph]);\n\n const [promptResults, setPromptResults] = useState<Record<string, string>>({});\n const handleExecPrompts = useComputeRuntimeCallback(\n db?.spaceId,\n Effect.fnUntraced(function* () {\n invariant(graph);\n\n const prompts =\n notebook?.cells\n .filter((cell) => cell.type === 'prompt')\n .map((cell) => cell.prompt)\n .filter(isNonNullable) ?? [];\n\n for (const prompt of prompts) {\n yield* runPrompt({\n prompt,\n input: { ...queryValues, ...graph.getValuesByName() },\n onResult: (result) =>\n setPromptResults((prev) => ({\n ...prev,\n [prompt.dxn.toString()]: result,\n })),\n });\n }\n }),\n [notebook, graph, queryValues],\n );\n\n // TODO(burdon): Cache values in context (preserve when switched).\n const handleCompute = useCallback(async () => {\n // TODO(burdon): Generalize executors (dependencies).\n await graph?.evaluate();\n await handleExecQueries();\n await handleExecPrompts();\n }, [graph, handleExecQueries, handleExecPrompts]);\n\n const handleRearrange = useCallback<NonNullable<NotebookStackProps['onRearrange']>>(\n (source, target) => {\n invariant(notebook);\n const from = notebook.cells.findIndex((cell) => cell.id === source.id);\n const to = notebook.cells.findIndex((cell) => cell.id === target.id);\n if (from != null && to != null) {\n Obj.change(notebook, (n) => {\n const cell = n.cells.splice(from, 1)[0];\n if (cell) {\n n.cells.splice(to, 0, cell);\n }\n });\n }\n },\n [notebook],\n );\n\n const handleCellInsert = useCallback<NonNullable<NotebookStackProps['onCellInsert']>>(\n async (type, after) => {\n invariant(notebook);\n const cell: Notebook.Cell = { id: crypto.randomUUID(), type };\n switch (type) {\n case 'markdown':\n case 'script':\n case 'query': {\n cell.source = Ref.make(Text.make());\n break;\n }\n\n case 'prompt': {\n if (db) {\n const objects = await db.query(Query.select(Filter.type(Blueprint.Blueprint))).run();\n const blueprints = objects\n .filter((blueprint) => INCLUDE_BLUEPRINTS.includes(blueprint.key))\n .map((blueprint) => Ref.make(blueprint));\n cell.prompt = Ref.make(Prompt.make({ instructions: '', blueprints }));\n }\n break;\n }\n }\n\n const idx = after ? notebook.cells.findIndex((cell) => cell.id === after) : notebook.cells.length;\n Obj.change(notebook, (n) => {\n n.cells.splice(idx, 0, cell);\n });\n },\n [db, notebook],\n );\n\n const handleCellDelete = useCallback<NonNullable<NotebookStackProps['onCellDelete']>>(\n (id) => {\n invariant(notebook);\n const idx = notebook.cells.findIndex((cell) => cell.id === id);\n if (idx !== -1) {\n Obj.change(notebook, (n) => {\n n.cells.splice(idx, 1);\n });\n }\n },\n [notebook],\n );\n\n return (\n <Layout.Main role={role} toolbar>\n <Toolbar.Root disabled={!hasAttention} textBlockWidth>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton icon='ph--plus--regular' iconOnly label={t('notebook cell insert label')} />\n </DropdownMenu.Trigger>\n <NotebookMenu onCellInsert={handleCellInsert} />\n </DropdownMenu.Root>\n <Toolbar.IconButton\n icon='ph--play--fill'\n iconOnly\n label={t('compute label')}\n classNames='text-green-500'\n onClick={handleCompute}\n />\n </Toolbar.Root>\n <div role='none' className='flex bs-full overflow-hidden -mis-[1px] -mie-[1px]'>\n <NotebookStack\n classNames='container-max-width border-l border-r border-subduedSeparator'\n db={db}\n notebook={notebook}\n graph={graph}\n env={env}\n promptResults={promptResults}\n onRearrange={handleRearrange}\n onCellInsert={handleCellInsert}\n onCellDelete={handleCellDelete}\n />\n </div>\n </Layout.Main>\n );\n};\n\nexport default NotebookContainer;\n\n// TODO(wittjosiah): Factor out. Copied from PromptArticle in plugin-assistant.\nconst runPrompt = Effect.fn(function* ({\n prompt,\n input,\n onResult,\n}: {\n prompt: Ref.Ref<Prompt.Prompt>;\n input: Record<string, any>;\n onResult: (result: string) => void;\n}) {\n const inputData: FunctionDefinition.Input<typeof Agent.prompt> = {\n prompt,\n input,\n };\n const tracer = yield* TracingService;\n const trace = yield* tracer.traceInvocationStart({\n target: undefined,\n payload: {\n data: {},\n },\n });\n\n // Invoke the function.\n const result = yield* FunctionInvocationService.invokeFunction(Agent.prompt, inputData).pipe(\n Effect.provide(trace.invocationTraceQueue ? TracingService.layerInvocation(trace) : TracingService.layerNoop),\n Effect.exit,\n );\n\n Exit.match(result, {\n onFailure: (cause) => {\n const error = Cause.prettyErrors(cause)[0];\n log.error(error.message, error.cause ?? error.stack);\n onResult(error.message);\n },\n onSuccess: (result: any) => {\n onResult(result.note);\n },\n });\n\n yield* tracer.traceInvocationEnd({\n trace,\n // TODO(dmaretskyi): Might miss errors.\n exception: Exit.isFailure(result) ? Cause.prettyErrors(result.cause)[0] : undefined,\n });\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom, type Registry } from '@effect-atom/atom-react';\n\nimport { log } from '@dxos/log';\n\nimport { type Notebook } from '../types';\n\nimport { evalScript } from './eval';\nimport { type ParsedExpression, VirtualTypeScriptParser } from './vfs-parser';\n\n/**\n * Compute graph that evaluates the notebook cells.\n */\n// TODO(burdon): Reconcile with @dxos/conductor.\nexport class ComputeGraph {\n private readonly _parser = new VirtualTypeScriptParser();\n\n private _expressionsAtom = Atom.make<Record<string, ParsedExpression>>({});\n private _valuesByCellIdAtom = Atom.make<Record<string, any>>({});\n private _valuesByNameAtom = Atom.make<Record<string, any>>({});\n\n constructor(\n private readonly _notebook: Notebook.Notebook,\n private readonly _registry: Registry.Registry,\n ) {}\n\n /**\n * Atom for parsed expressions by cell ID.\n */\n get expressions(): Atom.Atom<Record<string, ParsedExpression>> {\n return this._expressionsAtom;\n }\n\n /**\n * Get current expressions by cell ID.\n */\n getExpressions(): Record<string, ParsedExpression> {\n return this._registry.get(this._expressionsAtom);\n }\n\n /**\n * Atom for computed values by cell ID.\n */\n get values(): Atom.Atom<Record<string, any>> {\n return this._valuesByCellIdAtom;\n }\n\n /**\n * Get computed values by cell ID.\n */\n getValues(): Record<string, any> {\n return this._registry.get(this._valuesByCellIdAtom);\n }\n\n /**\n * Atom for computed values by name.\n */\n get valuesByName(): Atom.Atom<Record<string, any>> {\n return this._valuesByNameAtom;\n }\n\n /**\n * Get current values by name.\n */\n getValuesByName(): Record<string, any> {\n return this._registry.get(this._valuesByNameAtom);\n }\n\n /**\n * Get computed value by cell ID.\n */\n getValue(cellId: string): any {\n return this._registry.get(this._valuesByCellIdAtom)[cellId];\n }\n\n /**\n * Compute values.\n */\n async evaluate() {\n // Parse expressions.\n const { expressions, dependencyGraph } = this.parse();\n this._registry.set(this._valuesByCellIdAtom, {});\n this._registry.set(this._valuesByNameAtom, {});\n\n // Create a map of cell IDs to expressions for easy lookup.\n const cellExpressions = new Map<string, ParsedExpression>();\n Object.entries(expressions).forEach(([id, expr]) => {\n cellExpressions.set(id, expr);\n });\n\n // Topological sort to determine evaluation order.\n const evaluationOrder = this.topologicalSort(Object.keys(expressions), dependencyGraph);\n\n // Values by reference name.\n const valuesByName: Record<string, any> = {};\n const valuesByCellId: Record<string, any> = {};\n\n // Evaluate cells in dependency order.\n for (const cellId of evaluationOrder) {\n const expr = cellExpressions.get(cellId);\n if (!expr) {\n log.error('no expression for cell', { cellId });\n continue;\n }\n\n const cellSource = this._notebook.cells.find((cell) => cell.id === cellId)?.source?.target?.content;\n if (!cellSource) {\n log.error('no source for cell', { cellId });\n continue;\n }\n\n try {\n // For assignments or declarations, evaluate and store the value.\n if (expr.name && expr.value !== undefined) {\n // If the parser extracted a literal value, use it directly.\n valuesByName[expr.name] = expr.value;\n valuesByCellId[cellId] = expr.value;\n } else if (expr.name) {\n // For non-literal assignments, we need to evaluate the expression.\n // The parser identifies it's an assignment, so we can extract the RHS.\n const equalIndex = cellSource.indexOf('=');\n if (equalIndex !== -1) {\n // Find the actual assignment operator (not in strings or other contexts).\n let rhs = cellSource.substring(equalIndex + 1).trim();\n\n // Handle semicolon at the end.\n if (rhs.endsWith(';')) {\n rhs = rhs.slice(0, -1).trim();\n }\n\n const result = await this.eval(rhs, valuesByName);\n valuesByName[expr.name] = result;\n if (typeof result !== 'function') {\n valuesByCellId[cellId] = result;\n }\n }\n } else {\n // For expressions without assignment, just evaluate.\n const result = await this.eval(cellSource, valuesByName);\n valuesByCellId[cellId] = result;\n }\n } catch (error) {\n // TODO(burdon): Set error state.\n log.error('error evaluating cell', { cellId, error });\n }\n }\n\n this._registry.set(this._valuesByCellIdAtom, valuesByCellId);\n this._registry.set(this._valuesByNameAtom, valuesByName);\n return valuesByCellId;\n }\n\n private async eval(source: string, values: Record<string, any>) {\n return evalScript(source, values);\n }\n\n /**\n * Parse expressions.\n */\n parse() {\n const expressions = this._notebook.cells\n .filter((cell) => cell.type === 'script')\n .reduce<Record<string, ParsedExpression>>((acc, cell) => {\n const text = cell.source?.target?.content.trim();\n if (text) {\n const parsed = this._parser.parseExpression(text);\n acc[cell.id] = parsed;\n }\n\n return acc;\n }, {});\n\n // Build dependency graph.\n const dependencyGraph = this.buildDependencyGraph(expressions);\n this._registry.set(this._expressionsAtom, expressions);\n return { expressions, dependencyGraph };\n }\n\n private topologicalSort(nodes: string[], dependencies: Record<string, string[]>): string[] {\n const visited = new Set<string>();\n const result: string[] = [];\n\n const visit = (node: string) => {\n if (visited.has(node)) {\n return;\n }\n\n visited.add(node);\n\n // Visit dependencies first.\n const deps = dependencies[node] || [];\n deps.forEach((dep) => visit(dep));\n result.push(node);\n };\n\n // Visit all nodes.\n nodes.forEach((node) => visit(node));\n return result;\n }\n\n private buildDependencyGraph(expressions: Record<string, ParsedExpression>): Record<string, string[]> {\n // Create a map of variable names to their cell IDs.\n const nameToCellId = new Map<string, string>();\n Object.entries(expressions).forEach(([id, expr]) => {\n if (expr.name) {\n nameToCellId.set(expr.name, id);\n }\n });\n\n // Build the dependency graph using cell IDs.\n const graph: Record<string, string[]> = {};\n Object.entries(expressions).forEach(([id, expr]) => {\n if (expr.references && expr.references.length > 0) {\n // Map variable references to cell IDs.\n const dependencyCellIds = expr.references\n .map((ref) => nameToCellId.get(ref))\n .filter((cellId): cellId is string => cellId !== undefined && cellId !== id);\n\n if (dependencyCellIds.length > 0) {\n graph[id] = dependencyCellIds;\n }\n }\n });\n\n return graph;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { trim } from '@dxos/util';\n\n/**\n * Evaluate the script (with dependencies as arguments).\n */\nexport const evalScript = async (code: string, deps: Record<string, any> = {}) => {\n // Create a sandboxed environment that blocks access to window and document.\n const sandbox = {\n ...deps,\n\n // Block access to global objects.\n console: undefined,\n document: undefined,\n global: undefined,\n globalThis: undefined,\n self: undefined,\n window: undefined,\n\n // Allow some safe globals.\n Array,\n Boolean,\n Date,\n Error,\n JSON,\n Map,\n Math,\n Number,\n Object,\n Promise,\n RegExp,\n Set,\n String,\n\n // Functions.\n isFinite,\n isNaN,\n parseFloat,\n parseInt,\n\n // Note: undefined and null are not included as they are keywords, not variables.\n };\n\n // Create function with all sandbox keys as parameters.\n const sandboxKeys = Object.keys(sandbox);\n const sandboxValues = Object.values(sandbox);\n\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n const fn = new Function(\n ...sandboxKeys,\n trim`\n 'use strict';\n return ${code};\n `,\n );\n\n return fn(...sandboxValues);\n};\n\n/**\n * Globals.\n */\nexport const builtIns = new Set([\n // Types.\n 'Array',\n 'Date',\n 'Error',\n 'JSON',\n 'Map',\n 'Math',\n 'Number',\n 'Object',\n 'Promise',\n 'RegExp',\n 'Set',\n 'String',\n\n // Functions.\n 'isFinite',\n 'isNaN',\n 'parseFloat',\n 'parseInt',\n]);\n\n/**\n * Default system definitions.\n */\nexport const systemDefinitions = trim`\n interface Array<T> { length: number; [n: number]: T; }\n interface Boolean {}\n interface Function {}\n interface IArguments {}\n interface Number {}\n interface Object {}\n interface RegExp {}\n interface String { length: number; }\n\n interface CallableFunction extends Function {}\n interface NewableFunction extends Function {}\n\n declare var console: { log(...args: any[]): void };\n`;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createSystem, createVirtualTypeScriptEnvironment } from '@typescript/vfs';\nimport ts from 'typescript';\n\nimport { invariant } from '@dxos/invariant';\n\nimport { builtIns, systemDefinitions } from './eval';\n\n/**\n * Default system definitions.\n */\nconst systemFiles: VirtualFile[] = [\n {\n filename: '/lib.d.ts',\n content: systemDefinitions,\n },\n];\n\nexport type ParsedExpression = {\n name?: string;\n type?: 'function' | 'variable' | 'class' | 'interface';\n value?: any;\n valueType?: string;\n parameters?: Array<{ name: string; type: string }>;\n returnType?: string;\n references?: string[];\n};\n\nexport type VirtualFile = {\n filename: string;\n content: string;\n};\n\n/**\n * TypeScript parser using Virtual File System for browser compatibility.\n * This provides full TypeScript analysis including type information.\n */\nexport class VirtualTypeScriptParser {\n protected compilerOptions: ts.CompilerOptions = {\n target: ts.ScriptTarget.ES2020,\n module: ts.ModuleKind.ESNext,\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n forceConsistentCasingInfilenames: true,\n jsx: ts.JsxEmit.React,\n noLib: true, // Don't automatically include default lib files.\n };\n\n /**\n * Parse a single expression or statement.\n */\n parseExpression(input: string): ParsedExpression {\n invariant(input.trim() !== '', 'input must not be empty');\n const files: VirtualFile[] = [{ filename: '/temp.ts', content: input }];\n const analysis = this.analyzeFiles(files);\n\n // If no declarations found, check for standalone expression references.\n if (analysis.length === 0) {\n const sourcefilename = '/temp.ts';\n const env = this.createEnvironment([{ filename: sourcefilename, content: input }]);\n const sourceFile = env.getSourceFile(sourcefilename);\n const typeChecker = env.languageService.getProgram()?.getTypeChecker();\n\n if (sourceFile && typeChecker) {\n // Check for assignment expressions.\n const assignmentInfo = this.findAssignmentExpression(sourceFile, typeChecker);\n if (assignmentInfo) {\n return assignmentInfo;\n }\n\n const references = this.findAllReferences(sourceFile, typeChecker);\n return { references };\n }\n }\n\n return analysis[0];\n }\n\n /**\n * Analyze multiple files with full type information.\n */\n analyzeFiles(files: VirtualFile[]): ParsedExpression[] {\n const env = this.createEnvironment(files);\n const results: ParsedExpression[] = [];\n const typeChecker = env.languageService.getProgram()?.getTypeChecker();\n\n // Analyze each file.\n files.forEach((file) => {\n const sourceFile = env.getSourceFile(file.filename);\n if (!sourceFile || !typeChecker) return;\n\n const fileResults = this.analyzeSourceFile(sourceFile, typeChecker);\n results.push(...fileResults);\n });\n\n return results;\n }\n\n /**\n * Analyze a source file with type information.\n */\n protected analyzeSourceFile(sourceFile: ts.SourceFile, typeChecker: ts.TypeChecker): ParsedExpression[] {\n const results: ParsedExpression[] = [];\n\n const visit = (node: ts.Node) => {\n // Function declarations.\n if (ts.isFunctionDeclaration(node) && node.name) {\n const symbol = typeChecker.getSymbolAtLocation(node.name);\n const type = symbol && typeChecker.getTypeOfSymbolAtLocation(symbol, node);\n const signature = type && typeChecker.getSignaturesOfType(type, ts.SignatureKind.Call)[0];\n\n results.push({\n name: node.name.text,\n type: 'function',\n parameters: this.extractParameters(signature, typeChecker),\n returnType: signature ? typeChecker.typeToString(signature.getReturnType()) : 'any',\n references: this.findReferences(node, sourceFile, typeChecker),\n });\n }\n\n // Variable declarations.\n else if (ts.isVariableStatement(node)) {\n node.declarationList.declarations.forEach((declaration) => {\n if (ts.isIdentifier(declaration.name)) {\n const symbol = typeChecker.getSymbolAtLocation(declaration.name);\n const type = symbol && typeChecker.getTypeOfSymbolAtLocation(symbol, declaration);\n\n let kind: 'function' | 'variable' = 'variable';\n let parameters: Array<{ name: string; type: string }> | undefined;\n let returnType: string | undefined;\n let value: any;\n\n // Get the type string.\n const typeString = type ? typeChecker.typeToString(type) : 'any';\n\n // Check if it's a function.\n if (declaration.initializer) {\n if (ts.isArrowFunction(declaration.initializer) || ts.isFunctionExpression(declaration.initializer)) {\n kind = 'function';\n const funcType = typeChecker.getTypeAtLocation(declaration.initializer);\n const signature = typeChecker.getSignaturesOfType(funcType, ts.SignatureKind.Call)[0];\n if (signature) {\n parameters = this.extractParameters(signature, typeChecker);\n returnType = typeChecker.typeToString(signature.getReturnType());\n }\n } else {\n // Extract literal values\n if (ts.isNumericLiteral(declaration.initializer)) {\n value = Number(declaration.initializer.text);\n } else if (ts.isStringLiteral(declaration.initializer)) {\n value = declaration.initializer.text;\n }\n }\n }\n\n // Find references in the initializer only.\n const refs = declaration.initializer\n ? this.findReferences(declaration.initializer, sourceFile, typeChecker)\n : [];\n\n results.push({\n name: declaration.name.text,\n type: kind,\n valueType: typeString,\n value,\n parameters,\n returnType,\n references: refs,\n });\n }\n });\n }\n\n // Class declarations.\n else if (ts.isClassDeclaration(node) && node.name) {\n results.push({\n name: node.name.text,\n type: 'class',\n references: this.findReferences(node, sourceFile, typeChecker),\n });\n }\n\n // Interface declarations.\n else if (ts.isInterfaceDeclaration(node)) {\n results.push({\n name: node.name.text,\n type: 'interface',\n references: this.findReferences(node, sourceFile, typeChecker),\n });\n }\n\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return results;\n }\n\n /**\n * Extract parameter information from a signature.\n */\n private extractParameters(\n signature: ts.Signature | undefined,\n typeChecker: ts.TypeChecker,\n ): Array<{ name: string; type: string }> {\n if (!signature) return [];\n\n return signature.parameters.map((param) => ({\n name: param.getName(),\n type: typeChecker.typeToString(typeChecker.getTypeOfSymbolAtLocation(param, param.valueDeclaration!)),\n }));\n }\n\n /**\n * Find all references to variables used in a node.\n */\n private findReferences(node: ts.Node, _sourceFile: ts.SourceFile, _typeChecker: ts.TypeChecker): string[] {\n const references = new Set<string>();\n const localSymbols = new Set<string>();\n\n // First, collect local symbols (parameters, local variables).\n const collectLocalSymbols = (node: ts.Node) => {\n if (ts.isFunctionDeclaration(node) || ts.isArrowFunction(node) || ts.isFunctionExpression(node)) {\n node.parameters.forEach((param) => {\n if (ts.isIdentifier(param.name)) {\n localSymbols.add(param.name.text);\n }\n });\n }\n\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name)) {\n localSymbols.add(node.name.text);\n }\n\n ts.forEachChild(node, collectLocalSymbols);\n };\n\n collectLocalSymbols(node);\n\n // Then find all identifier references.\n const findRefs = (node: ts.Node) => {\n if (ts.isIdentifier(node)) {\n // Skip if it's a local symbol.\n if (!localSymbols.has(node.text)) {\n // Check if it's a reference (not a declaration).\n const parent = node.parent;\n const isDeclaration =\n (ts.isVariableDeclaration(parent) && parent.name === node) ||\n (ts.isFunctionDeclaration(parent) && parent.name === node) ||\n (ts.isParameter(parent) && parent.name === node);\n\n if (!isDeclaration && !this.isBuiltIn(node.text)) {\n references.add(node.text);\n }\n }\n }\n ts.forEachChild(node, findRefs);\n };\n\n findRefs(node);\n return Array.from(references);\n }\n\n /**\n * Check if a name is a built-in global.\n */\n protected isBuiltIn(name: string): boolean {\n return builtIns.has(name);\n }\n\n /**\n * Find assignment expressions in a source file.\n */\n private findAssignmentExpression(sourceFile: ts.SourceFile, typeChecker: ts.TypeChecker): ParsedExpression | null {\n let result: ParsedExpression | null = null;\n\n const visit = (node: ts.Node) => {\n if (ts.isExpressionStatement(node) && ts.isBinaryExpression(node.expression)) {\n const expr = node.expression;\n if (expr.operatorToken.kind === ts.SyntaxKind.EqualsToken && ts.isIdentifier(expr.left)) {\n const type = typeChecker.getTypeAtLocation(expr.right);\n const typeString = typeChecker.typeToString(type);\n\n // Get the literal value if it's a literal.\n let value: any;\n if (ts.isNumericLiteral(expr.right)) {\n value = Number(expr.right.text);\n } else if (ts.isStringLiteral(expr.right)) {\n value = expr.right.text;\n }\n\n // Find references in the right-hand side.\n const references = this.findReferences(expr.right, sourceFile, typeChecker);\n\n result = {\n name: expr.left.text,\n type: 'variable',\n valueType: typeString,\n value,\n references,\n };\n }\n }\n if (!result) {\n ts.forEachChild(node, visit);\n }\n };\n\n visit(sourceFile);\n return result;\n }\n\n /**\n * Find all identifier references in a source file.\n */\n protected findAllReferences(sourceFile: ts.SourceFile, _typeChecker: ts.TypeChecker): string[] {\n const references = new Set<string>();\n\n const visit = (node: ts.Node) => {\n if (ts.isIdentifier(node)) {\n // Skip if it's a declaration.\n const parent = node.parent;\n const isDeclaration =\n (ts.isVariableDeclaration(parent) && parent.name === node) ||\n (ts.isFunctionDeclaration(parent) && parent.name === node) ||\n (ts.isParameter(parent) && parent.name === node);\n\n // Skip if it's the left-hand side of an assignment.\n const isAssignmentTarget =\n ts.isBinaryExpression(parent) &&\n parent.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n parent.left === node;\n\n if (!isDeclaration && !isAssignmentTarget && !this.isBuiltIn(node.text)) {\n references.add(node.text);\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return Array.from(references);\n }\n\n protected createEnvironment(files: VirtualFile[]) {\n const allFiles = [...systemFiles, ...files];\n\n const fileMap = new Map<string, string>();\n allFiles.forEach(({ filename, content }) => {\n fileMap.set(filename, content);\n });\n\n const system = createSystem(fileMap);\n return createVirtualTypeScriptEnvironment(\n system,\n allFiles.map(({ filename }) => filename),\n ts,\n this.compilerOptions,\n );\n }\n}\n\n/**\n * Notebook-specific parser with dependency analysis.\n */\nexport class NotebookVirtualParser extends VirtualTypeScriptParser {\n /**\n * Analyze notebook cells with full type checking.\n */\n analyzeNotebook(cells: Array<{ id: string; code: string }>) {\n // Create cumulative environment where each cell can see previous cells.\n const cumulativeCode: string[] = [];\n const cellAnalysis: Map<\n string,\n {\n exports: ParsedExpression[];\n imports: string[];\n errors: ts.Diagnostic[];\n }\n > = new Map();\n\n cells.forEach((cell) => {\n // Create files for all cells up to current.\n const files: VirtualFile[] = [];\n\n // Add previous cells as context.\n if (cumulativeCode.length > 0) {\n files.push({\n filename: '/context.ts',\n content: cumulativeCode.join('\\n'),\n });\n }\n\n // Add current cell.\n const filename = `/cell/${cell.id}.ts`;\n files.push({\n filename,\n content: cell.code,\n });\n\n // Create environment.\n const env = this.createEnvironment(files);\n\n // Get diagnostics (errors).\n const diagnostics = env.languageService.getSemanticDiagnostics(filename);\n\n // Analyze current cell.\n const sourceFile = env.getSourceFile(filename);\n const typeChecker = env.languageService.getProgram()?.getTypeChecker();\n\n if (sourceFile && typeChecker) {\n const exports = this.analyzeSourceFile(sourceFile, typeChecker);\n\n // Find all references in the current cell.\n const allRefs = new Set<string>();\n exports.forEach((exp) => {\n exp.references?.forEach((ref) => allRefs.add(ref));\n });\n\n // Also check for references not in exports (e.g., console.log(y)).\n const additionalRefs = this.findAllReferences(sourceFile, typeChecker);\n additionalRefs.forEach((ref) => allRefs.add(ref));\n\n // Determine which references are imports from previous cells.\n const previousExports = new Set<string>();\n for (const [_prevCellId, prevAnalysis] of cellAnalysis) {\n prevAnalysis.exports.forEach((exp) => {\n if (exp.name) previousExports.add(exp.name);\n });\n }\n\n const imports = Array.from(allRefs).filter((ref) => previousExports.has(ref));\n\n cellAnalysis.set(cell.id, {\n exports,\n imports,\n errors: diagnostics,\n });\n }\n\n // Add current cell code to cumulative.\n cumulativeCode.push(cell.code);\n });\n\n return cellAnalysis;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["RegistryContext", "Cause", "Effect", "Exit", "React", "useCallback", "useContext", "useMemo", "useState", "Agent", "Blueprint", "Prompt", "Filter", "Obj", "Query", "Ref", "QueryBuilder", "FunctionInvocationService", "TracingService", "invariant", "log", "useComputeRuntimeCallback", "Graph", "DropdownMenu", "IconButton", "Toolbar", "useTranslation", "useAttention", "Layout", "Text", "View", "isNonNullable", "Atom", "log", "trim", "evalScript", "code", "deps", "sandbox", "console", "undefined", "document", "global", "globalThis", "self", "window", "Array", "Boolean", "Date", "Error", "JSON", "Map", "Math", "Number", "Object", "Promise", "RegExp", "Set", "String", "isFinite", "isNaN", "parseFloat", "parseInt", "sandboxKeys", "keys", "sandboxValues", "values", "fn", "Function", "trim", "builtIns", "systemDefinitions", "createSystem", "createVirtualTypeScriptEnvironment", "ts", "invariant", "systemFiles", "filename", "content", "systemDefinitions", "VirtualTypeScriptParser", "compilerOptions", "target", "ts", "ScriptTarget", "ES2020", "module", "ModuleKind", "ESNext", "strict", "esModuleInterop", "skipLibCheck", "forceConsistentCasingInfilenames", "jsx", "JsxEmit", "React", "noLib", "parseExpression", "input", "invariant", "trim", "files", "analysis", "analyzeFiles", "length", "sourcefilename", "env", "createEnvironment", "sourceFile", "getSourceFile", "typeChecker", "languageService", "getProgram", "getTypeChecker", "assignmentInfo", "findAssignmentExpression", "references", "findAllReferences", "results", "forEach", "file", "fileResults", "analyzeSourceFile", "push", "visit", "node", "isFunctionDeclaration", "name", "symbol", "getSymbolAtLocation", "type", "getTypeOfSymbolAtLocation", "signature", "getSignaturesOfType", "SignatureKind", "Call", "text", "parameters", "extractParameters", "returnType", "typeToString", "getReturnType", "findReferences", "isVariableStatement", "declarationList", "declarations", "declaration", "isIdentifier", "kind", "value", "typeString", "initializer", "isArrowFunction", "isFunctionExpression", "funcType", "getTypeAtLocation", "isNumericLiteral", "Number", "isStringLiteral", "refs", "valueType", "isClassDeclaration", "isInterfaceDeclaration", "forEachChild", "map", "param", "getName", "valueDeclaration", "_sourceFile", "_typeChecker", "Set", "localSymbols", "collectLocalSymbols", "add", "isVariableDeclaration", "findRefs", "has", "parent", "isDeclaration", "isParameter", "isBuiltIn", "Array", "from", "builtIns", "result", "isExpressionStatement", "isBinaryExpression", "expression", "expr", "operatorToken", "SyntaxKind", "EqualsToken", "left", "right", "isAssignmentTarget", "allFiles", "fileMap", "Map", "set", "system", "createSystem", "createVirtualTypeScriptEnvironment", "ComputeGraph", "_parser", "VirtualTypeScriptParser", "_expressionsAtom", "Atom", "make", "_valuesByCellIdAtom", "_valuesByNameAtom", "_notebook", "_registry", "expressions", "getExpressions", "get", "values", "getValues", "valuesByName", "getValuesByName", "getValue", "cellId", "evaluate", "dependencyGraph", "parse", "set", "cellExpressions", "Map", "Object", "entries", "forEach", "id", "expr", "evaluationOrder", "topologicalSort", "keys", "valuesByCellId", "log", "error", "cellSource", "cells", "find", "cell", "source", "target", "content", "name", "value", "undefined", "equalIndex", "indexOf", "rhs", "substring", "trim", "endsWith", "slice", "result", "eval", "evalScript", "filter", "type", "reduce", "acc", "text", "parsed", "parseExpression", "buildDependencyGraph", "nodes", "dependencies", "visited", "Set", "visit", "node", "has", "add", "deps", "dep", "push", "nameToCellId", "graph", "references", "length", "dependencyCellIds", "map", "ref", "INCLUDE_BLUEPRINTS", "NotebookContainer", "role", "subject", "notebook", "env", "t", "useTranslation", "meta", "id", "registry", "useContext", "RegistryContext", "db", "Obj", "getDatabase", "attendableId", "getDXN", "toString", "hasAttention", "useAttention", "graph", "useMemo", "ComputeGraph", "queryValues", "setQueryValues", "useState", "handleExecQueries", "useCallback", "invariant", "builder", "QueryBuilder", "cell", "cells", "type", "source", "target", "content", "name", "filter", "build", "ast", "Query", "select", "view", "View", "makeFromDatabase", "newGraph", "Graph", "make", "query", "change", "n", "c", "find", "Ref", "getSnapshot", "fromAst", "objects", "run", "objectIds", "map", "obj", "prev", "promptResults", "setPromptResults", "handleExecPrompts", "useComputeRuntimeCallback", "spaceId", "fnUntraced", "prompts", "prompt", "isNonNullable", "runPrompt", "input", "getValuesByName", "onResult", "result", "dxn", "handleCompute", "evaluate", "handleRearrange", "from", "findIndex", "to", "splice", "handleCellInsert", "after", "crypto", "randomUUID", "Text", "Filter", "Blueprint", "blueprints", "blueprint", "includes", "key", "Prompt", "instructions", "idx", "length", "handleCellDelete", "Layout", "Main", "toolbar", "Toolbar", "Root", "disabled", "textBlockWidth", "DropdownMenu", "Trigger", "asChild", "IconButton", "icon", "iconOnly", "label", "NotebookMenu", "onCellInsert", "classNames", "onClick", "div", "className", "NotebookStack", "onRearrange", "onCellDelete", "fn", "inputData", "tracer", "TracingService", "trace", "traceInvocationStart", "undefined", "payload", "data", "FunctionInvocationService", "invokeFunction", "Agent", "pipe", "provide", "invocationTraceQueue", "layerInvocation", "layerNoop", "exit", "Exit", "match", "onFailure", "cause", "error", "prettyErrors", "log", "message", "stack", "onSuccess", "note", "traceInvocationEnd", "exception", "isFailure"]
7
- }
@@ -1,150 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import {
3
- createDeploy,
4
- createFormat,
5
- createTemplateSelect,
6
- useDeployDeps,
7
- useDeployState,
8
- useToolbarState
9
- } from "./chunk-MGWKULCD.mjs";
10
- import "./chunk-KN6SQYUF.mjs";
11
- import "./chunk-4F5FJZ36.mjs";
12
- import {
13
- TypescriptEditor
14
- } from "./chunk-SLU3KRV3.mjs";
15
- import {
16
- meta
17
- } from "./chunk-5HSJPAK7.mjs";
18
- import "./chunk-HSLMI22Q.mjs";
19
-
20
- // src/components/ScriptContainer.tsx
21
- import React2, { useMemo as useMemo2 } from "react";
22
- import { Obj as Obj2 } from "@dxos/echo";
23
- import { createDocAccessor } from "@dxos/echo-db";
24
- import { getSpace } from "@dxos/react-client/echo";
25
- import { useIdentity } from "@dxos/react-client/halo";
26
- import { Layout } from "@dxos/react-ui-mosaic";
27
- import { createDataExtensions, listener, stackItemContentEditorClassNames } from "@dxos/ui-editor";
28
-
29
- // src/components/ScriptToolbar/ScriptToolbar.tsx
30
- import { Atom } from "@effect-atom/atom-react";
31
- import React, { useMemo } from "react";
32
- import { Obj } from "@dxos/echo";
33
- import { ElevationProvider, useTranslation } from "@dxos/react-ui";
34
- import { MenuProvider, ToolbarMenu, createGapSeparator, useMenuActions } from "@dxos/react-ui-menu";
35
- var ScriptToolbar = ({ script, role, state }) => {
36
- const { t } = useTranslation(meta.id);
37
- const options = useDeployDeps({
38
- script
39
- });
40
- const menu = useMemo(() => createToolbarActions({
41
- state,
42
- script,
43
- t,
44
- ...options
45
- }), [
46
- state,
47
- script,
48
- options,
49
- t
50
- ]);
51
- const actions = useMenuActions(menu);
52
- return /* @__PURE__ */ React.createElement(ElevationProvider, {
53
- elevation: role === "section" ? "positioned" : "base"
54
- }, /* @__PURE__ */ React.createElement(MenuProvider, {
55
- ...actions,
56
- attendableId: Obj.getDXN(script).toString()
57
- }, /* @__PURE__ */ React.createElement(ToolbarMenu, null)));
58
- };
59
- var createToolbarActions = ({ state, script, ...options }) => Atom.make((get) => {
60
- get(state.atom);
61
- const templateSelect = createTemplateSelect(script);
62
- const format = createFormat(script);
63
- const gap = createGapSeparator();
64
- const deploy = createDeploy({
65
- state,
66
- script,
67
- ...options
68
- });
69
- return {
70
- nodes: [
71
- ...templateSelect.nodes,
72
- ...format.nodes,
73
- ...gap.nodes,
74
- ...deploy.nodes
75
- ],
76
- edges: [
77
- ...templateSelect.edges,
78
- ...format.edges,
79
- ...gap.edges,
80
- ...deploy.edges
81
- ]
82
- };
83
- });
84
-
85
- // src/components/ScriptContainer.tsx
86
- var ScriptContainer = ({ role, subject: script, settings = {
87
- editorInputMode: "vscode"
88
- }, env }) => {
89
- const identity = useIdentity();
90
- const space = getSpace(script);
91
- const state = useToolbarState();
92
- useDeployState({
93
- script,
94
- state
95
- });
96
- const extensions = useMemo2(() => {
97
- if (!script.source.target) {
98
- return [];
99
- }
100
- return [
101
- createDataExtensions({
102
- id: script.id,
103
- text: createDocAccessor(script.source.target, [
104
- "content"
105
- ]),
106
- messenger: space,
107
- identity
108
- }),
109
- listener({
110
- onChange: ({ text }) => {
111
- if (script.source.target?.content !== text) {
112
- Obj2.change(script, (s) => {
113
- s.changed = true;
114
- });
115
- }
116
- }
117
- })
118
- ];
119
- }, [
120
- identity,
121
- space,
122
- script,
123
- script.source.target
124
- ]);
125
- if (!extensions.length) {
126
- return null;
127
- }
128
- return /* @__PURE__ */ React2.createElement(Layout.Main, {
129
- role,
130
- toolbar: true
131
- }, /* @__PURE__ */ React2.createElement(ScriptToolbar, {
132
- state,
133
- role,
134
- script
135
- }), /* @__PURE__ */ React2.createElement(TypescriptEditor, {
136
- id: script.id,
137
- env,
138
- initialValue: script.source?.target?.content,
139
- extensions,
140
- classNames: stackItemContentEditorClassNames(role),
141
- inputMode: settings.editorInputMode,
142
- toolbar: true
143
- }));
144
- };
145
- var ScriptContainer_default = ScriptContainer;
146
- export {
147
- ScriptContainer,
148
- ScriptContainer_default as default
149
- };
150
- //# sourceMappingURL=ScriptContainer-3DZ3BMHW.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/ScriptContainer.tsx", "../../../src/components/ScriptToolbar/ScriptToolbar.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type SurfaceComponentProps } from '@dxos/app-framework/react';\nimport { Obj } from '@dxos/echo';\nimport { createDocAccessor } from '@dxos/echo-db';\nimport { type Script } from '@dxos/functions';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Layout } from '@dxos/react-ui-mosaic';\nimport { createDataExtensions, listener, stackItemContentEditorClassNames } from '@dxos/ui-editor';\n\nimport { useDeployState, useToolbarState } from '../hooks';\nimport { type ScriptSettings } from '../types';\n\nimport { ScriptToolbar } from './ScriptToolbar';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\n\nexport type ScriptEditorProps = SurfaceComponentProps<\n Script.Script,\n {\n settings?: ScriptSettings;\n } & Pick<TypescriptEditorProps, 'env'>\n>;\n\nexport const ScriptContainer = ({\n role,\n subject: script,\n settings = { editorInputMode: 'vscode' },\n env,\n}: ScriptEditorProps) => {\n const identity = useIdentity();\n const space = getSpace(script);\n const state = useToolbarState();\n useDeployState({ script, state });\n\n const extensions = useMemo(() => {\n if (!script.source.target) {\n return [];\n }\n\n return [\n createDataExtensions({\n id: script.id,\n text: createDocAccessor(script.source.target, ['content']),\n messenger: space,\n identity,\n }),\n listener({\n onChange: ({ text }) => {\n if (script.source.target?.content !== text) {\n Obj.change(script, (s) => {\n s.changed = true;\n });\n }\n },\n }),\n ];\n }, [identity, space, script, script.source.target]);\n\n if (!extensions.length) {\n return null;\n }\n\n return (\n <Layout.Main role={role} toolbar>\n <ScriptToolbar state={state} role={role} script={script} />\n <TypescriptEditor\n id={script.id}\n env={env}\n initialValue={script.source?.target?.content}\n extensions={extensions}\n classNames={stackItemContentEditorClassNames(role)}\n inputMode={settings.editorInputMode}\n toolbar\n />\n </Layout.Main>\n );\n};\n\nexport default ScriptContainer;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom-react';\nimport React, { useMemo } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { type Script } from '@dxos/functions';\nimport { ElevationProvider, useTranslation } from '@dxos/react-ui';\nimport {\n type ActionGraphProps,\n MenuProvider,\n ToolbarMenu,\n createGapSeparator,\n useMenuActions,\n} from '@dxos/react-ui-menu';\n\nimport {\n type CreateDeployOptions,\n type ScriptToolbarStateStore,\n createDeploy,\n createFormat,\n createTemplateSelect,\n useDeployDeps,\n} from '../../hooks';\nimport { meta } from '../../meta';\n\nexport type ScriptToolbarProps = {\n role?: string;\n script: Script.Script;\n state: ScriptToolbarStateStore;\n};\n\nexport const ScriptToolbar = ({ script, role, state }: ScriptToolbarProps) => {\n const { t } = useTranslation(meta.id);\n const options = useDeployDeps({ script });\n const menu = useMemo(() => createToolbarActions({ state, script, t, ...options }), [state, script, options, t]);\n const actions = useMenuActions(menu);\n\n return (\n <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>\n <MenuProvider {...actions} attendableId={Obj.getDXN(script).toString()}>\n <ToolbarMenu />\n </MenuProvider>\n </ElevationProvider>\n );\n};\n\nconst createToolbarActions = ({ state, script, ...options }: CreateDeployOptions): Atom.Atom<ActionGraphProps> =>\n Atom.make((get) => {\n // Subscribe to state changes.\n get(state.atom);\n const templateSelect = createTemplateSelect(script);\n const format = createFormat(script);\n const gap = createGapSeparator();\n const deploy = createDeploy({ state, script, ...options });\n return {\n nodes: [...templateSelect.nodes, ...format.nodes, ...gap.nodes, ...deploy.nodes],\n edges: [...templateSelect.edges, ...format.edges, ...gap.edges, ...deploy.edges],\n };\n });\n"],
5
- "mappings": "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",
6
- "names": ["React", "useMemo", "Obj", "createDocAccessor", "getSpace", "useIdentity", "Layout", "createDataExtensions", "listener", "stackItemContentEditorClassNames", "Atom", "React", "useMemo", "Obj", "ElevationProvider", "useTranslation", "MenuProvider", "ToolbarMenu", "createGapSeparator", "useMenuActions", "ScriptToolbar", "script", "role", "state", "t", "useTranslation", "meta", "id", "options", "useDeployDeps", "menu", "useMemo", "createToolbarActions", "actions", "useMenuActions", "ElevationProvider", "elevation", "MenuProvider", "attendableId", "Obj", "getDXN", "toString", "ToolbarMenu", "Atom", "make", "get", "atom", "templateSelect", "createTemplateSelect", "format", "createFormat", "gap", "createGapSeparator", "deploy", "createDeploy", "nodes", "edges", "ScriptContainer", "role", "subject", "script", "settings", "editorInputMode", "env", "identity", "useIdentity", "space", "getSpace", "state", "useToolbarState", "useDeployState", "extensions", "useMemo", "source", "target", "createDataExtensions", "id", "text", "createDocAccessor", "messenger", "listener", "onChange", "content", "Obj", "change", "s", "changed", "length", "React", "Layout", "Main", "toolbar", "ScriptToolbar", "TypescriptEditor", "initialValue", "classNames", "stackItemContentEditorClassNames", "inputMode"]
7
- }
@@ -1,69 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import {
3
- meta
4
- } from "./chunk-5HSJPAK7.mjs";
5
- import "./chunk-HSLMI22Q.mjs";
6
-
7
- // src/capabilities/app-graph-builder/app-graph-builder.ts
8
- import * as Effect from "effect/Effect";
9
- import { Capability, Common } from "@dxos/app-framework";
10
- import { Script } from "@dxos/functions";
11
- import { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from "@dxos/plugin-deck/types";
12
- import { GraphBuilder } from "@dxos/plugin-graph";
13
- var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function* () {
14
- const extensions = yield* Effect.all([
15
- GraphBuilder.createTypeExtension({
16
- id: `${meta.id}/execute`,
17
- type: Script.Script,
18
- connector: (script) => Effect.succeed([
19
- {
20
- id: [
21
- script.id,
22
- "execute"
23
- ].join(ATTENDABLE_PATH_SEPARATOR),
24
- type: PLANK_COMPANION_TYPE,
25
- data: "execute",
26
- properties: {
27
- label: [
28
- "script test label",
29
- {
30
- ns: meta.id
31
- }
32
- ],
33
- icon: "ph--terminal--regular",
34
- disposition: "hidden"
35
- }
36
- }
37
- ])
38
- }),
39
- GraphBuilder.createTypeExtension({
40
- id: `${meta.id}/logs`,
41
- type: Script.Script,
42
- connector: (script) => Effect.succeed([
43
- {
44
- id: [
45
- script.id,
46
- "logs"
47
- ].join(ATTENDABLE_PATH_SEPARATOR),
48
- type: PLANK_COMPANION_TYPE,
49
- data: "logs",
50
- properties: {
51
- label: [
52
- "script logs label",
53
- {
54
- ns: meta.id
55
- }
56
- ],
57
- icon: "ph--clock-countdown--regular",
58
- disposition: "hidden"
59
- }
60
- }
61
- ])
62
- })
63
- ]);
64
- return Capability.contributes(Common.Capability.AppGraphBuilder, extensions);
65
- }));
66
- export {
67
- app_graph_builder_default as default
68
- };
69
- //# sourceMappingURL=app-graph-builder-NVE3EVBG.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/app-graph-builder/app-graph-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { Script } from '@dxos/functions';\nimport { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { GraphBuilder } from '@dxos/plugin-graph';\n\nimport { meta } from '../../meta';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const extensions = yield* Effect.all([\n GraphBuilder.createTypeExtension({\n id: `${meta.id}/execute`,\n type: Script.Script,\n connector: (script) =>\n Effect.succeed([\n {\n id: [script.id, 'execute'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'execute',\n properties: {\n label: ['script test label', { ns: meta.id }],\n icon: 'ph--terminal--regular',\n disposition: 'hidden',\n },\n },\n ]),\n }),\n GraphBuilder.createTypeExtension({\n id: `${meta.id}/logs`,\n type: Script.Script,\n connector: (script) =>\n Effect.succeed([\n {\n id: [script.id, 'logs'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'logs',\n properties: {\n label: ['script logs label', { ns: meta.id }],\n icon: 'ph--clock-countdown--regular',\n disposition: 'hidden',\n },\n },\n ]),\n }),\n ]);\n\n return Capability.contributes(Common.Capability.AppGraphBuilder, extensions);\n }),\n);\n"],
5
- "mappings": ";;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,YAAYC,cAAc;AACnC,SAASC,cAAc;AACvB,SAASC,2BAA2BC,4BAA4B;AAChE,SAASC,oBAAoB;AAI7B,IAAA,4BAAeC,WAAWC,WACjBC,kBAAW,aAAA;AAChB,QAAMC,aAAa,OAAcC,WAAI;IACnCC,aAAaC,oBAAoB;MAC/BC,IAAI,GAAGC,KAAKD,EAAE;MACdE,MAAMC,OAAOA;MACbC,WAAW,CAACC,WACHC,eAAQ;QACb;UACEN,IAAI;YAACK,OAAOL;YAAI;YAAWO,KAAKC,yBAAAA;UAChCN,MAAMO;UACNC,MAAM;UACNC,YAAY;YACVC,OAAO;cAAC;cAAqB;gBAAEC,IAAIZ,KAAKD;cAAG;;YAC3Cc,MAAM;YACNC,aAAa;UACf;QACF;OACD;IACL,CAAA;IACAjB,aAAaC,oBAAoB;MAC/BC,IAAI,GAAGC,KAAKD,EAAE;MACdE,MAAMC,OAAOA;MACbC,WAAW,CAACC,WACHC,eAAQ;QACb;UACEN,IAAI;YAACK,OAAOL;YAAI;YAAQO,KAAKC,yBAAAA;UAC7BN,MAAMO;UACNC,MAAM;UACNC,YAAY;YACVC,OAAO;cAAC;cAAqB;gBAAEC,IAAIZ,KAAKD;cAAG;;YAC3Cc,MAAM;YACNC,aAAa;UACf;QACF;OACD;IACL,CAAA;GACD;AAED,SAAOtB,WAAWuB,YAAYC,OAAOxB,WAAWyB,iBAAiBtB,UAAAA;AACnE,CAAA,CAAA;",
6
- "names": ["Effect", "Capability", "Common", "Script", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE", "GraphBuilder", "Capability", "makeModule", "fnUntraced", "extensions", "all", "GraphBuilder", "createTypeExtension", "id", "meta", "type", "Script", "connector", "script", "succeed", "join", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE", "data", "properties", "label", "ns", "icon", "disposition", "contributes", "Common", "AppGraphBuilder"]
7
- }
@@ -1,18 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import {
3
- script_blueprint_exports
4
- } from "./chunk-Y3G5NCTP.mjs";
5
- import "./chunk-HSLMI22Q.mjs";
6
-
7
- // src/capabilities/blueprint-definition/blueprint-definition.ts
8
- import * as Effect from "effect/Effect";
9
- import { Capability, Common } from "@dxos/app-framework";
10
- var blueprintDefinition = Capability.makeModule(() => Effect.succeed([
11
- Capability.contributes(Common.Capability.Functions, script_blueprint_exports.functions),
12
- Capability.contributes(Common.Capability.BlueprintDefinition, script_blueprint_exports.make())
13
- ]));
14
- var blueprint_definition_default = blueprintDefinition;
15
- export {
16
- blueprint_definition_default as default
17
- };
18
- //# sourceMappingURL=blueprint-definition-NC7NNJGI.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/blueprint-definition/blueprint-definition.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability, Common } from '@dxos/app-framework';\n\nimport { ScriptBlueprint } from '../../blueprints';\n\nexport type BlueprintCapabilities = [\n Capability.Capability<typeof Common.Capability.Functions>,\n Capability.Capability<typeof Common.Capability.BlueprintDefinition>,\n];\n\nconst blueprintDefinition = Capability.makeModule<[], BlueprintCapabilities>(() =>\n Effect.succeed([\n Capability.contributes(Common.Capability.Functions, ScriptBlueprint.functions),\n Capability.contributes(Common.Capability.BlueprintDefinition, ScriptBlueprint.make()),\n ]),\n);\n\nexport default blueprintDefinition;\n"],
5
- "mappings": ";;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,YAAYC,cAAc;AASnC,IAAMC,sBAAsBC,WAAWC,WAAsC,MACpEC,eAAQ;EACbF,WAAWG,YAAYC,OAAOJ,WAAWK,WAAWC,yBAAgBC,SAAS;EAC7EP,WAAWG,YAAYC,OAAOJ,WAAWQ,qBAAqBF,yBAAgBG,KAAI,CAAA;CACnF,CAAA;AAGH,IAAA,+BAAeV;",
6
- "names": ["Effect", "Capability", "Common", "blueprintDefinition", "Capability", "makeModule", "succeed", "contributes", "Common", "Functions", "ScriptBlueprint", "functions", "BlueprintDefinition", "make"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["raw-loader:/__w/dxos/dxos/packages/plugins/plugin-script/src/templates/anthropic.ts?raw", "raw-loader:/__w/dxos/dxos/packages/plugins/plugin-script/src/templates/chat.ts?raw", "raw-loader:/__w/dxos/dxos/packages/plugins/plugin-script/src/templates/chess-bot.ts?raw", "raw-loader:/__w/dxos/dxos/packages/plugins/plugin-script/src/templates/commentary.ts?raw", "raw-loader:/__w/dxos/dxos/packages/plugins/plugin-script/src/templates/data-generator.ts?raw", "raw-loader:/__w/dxos/dxos/packages/plugins/plugin-script/src/templates/discord.ts?raw", "raw-loader:/__w/dxos/dxos/packages/plugins/plugin-script/src/templates/email.ts?raw", "raw-loader:/__w/dxos/dxos/packages/plugins/plugin-script/src/templates/forex-effect.ts?raw", "raw-loader:/__w/dxos/dxos/packages/plugins/plugin-script/src/templates/forex.ts?raw", "raw-loader:/__w/dxos/dxos/packages/plugins/plugin-script/src/templates/gmail.ts?raw", "raw-loader:/__w/dxos/dxos/packages/plugins/plugin-script/src/templates/ping.ts?raw", "../../../src/templates/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as LanguageModel from '@effect/ai/LanguageModel';\nimport * as Chunk from 'effect/Chunk';\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\nimport * as Stream from 'effect/Stream';\n\nimport { AiService } from '@dxos/ai';\nimport { defineFunction } from '@dxos/functions';\n\nexport default defineFunction({\n key: 'dxos.org/script/anthropic',\n name: 'Anthropic Chat',\n description: 'Chat with Anthropic',\n inputSchema: Schema.Struct({\n message: Schema.String,\n }),\n services: [AiService.AiService],\n handler: ({ data }) => {\n return Effect.gen(function* () {\n const model = (yield* AiService.AiService).model('@anthropic/claude-sonnet-4-5');\n //\n // Basic example.\n //\n const { text } = yield* LanguageModel.generateText({ prompt: data.message }).pipe(Effect.provide(model));\n\n //\n // Streaming example.\n //\n const parts = yield* LanguageModel.streamText({\n prompt: 'Count from 1 to 5, one number per line.',\n }).pipe(Stream.runCollect, Effect.map(Chunk.toArray), Effect.provide(model));\n const textDeltas = parts.filter((p) => p.type === 'text-delta');\n const fullText = textDeltas.map((p) => (p as { delta: string }).delta).join('');\n\n return { response: text, streamText: fullText };\n });\n },\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// @ts-ignore\nimport { transformServerSentEvents } from 'https://esm.sh/@dxos/script-toolbox?bundle=false';\n\n/**\n * Chatbot that answers questions based on the context data.\n */\nexport default async ({ data: { bodyText }, context: { space, ai } }: any) => {\n let parsedRequest: any;\n try {\n parsedRequest = JSON.parse(bodyText);\n } catch (err) {\n const answer = await ai.run('@cf/meta/llama-3.1-8b-instruct', {\n stream: true,\n prompt: `\n Using only the context data below to answer the user's question.\n If you cannot answer the question from the provided content, then reply with \"I don't know.\"\n\n CONTEXT:\n ${await getContext({ space })}\n\n QUESTION:\n ${bodyText}\n `,\n });\n return new Response(transformServerSentEvents(answer));\n }\n\n const promptId = parsedRequest.trigger.promptId;\n const promptObject = await space.crud.query({ id: promptId }).first();\n\n if (parsedRequest.data.objects.length !== 1) {\n return new Response('Message batches not supported.');\n }\n\n const messageId = parsedRequest.data.objects[0];\n let message;\n try {\n message = await space.crud.query({ id: messageId }).first();\n } catch (err) {\n return new Response('Message not replicated yet.', { status: 409 });\n }\n\n if (message.text.includes('--------')) {\n return new Response('Message was already processed.');\n }\n\n let prompt = promptObject.template;\n for (const input of promptObject.inputs) {\n let value: string | null = null;\n if (input.type === TemplateInputType.VALUE) {\n value = String(input.value);\n } else if (input.type === TemplateInputType.RETRIEVER) {\n value = await getContext({ space });\n } else if (input.type === TemplateInputType.PASS_THROUGH) {\n value = message.text;\n }\n if (value) {\n prompt = prompt.replaceAll(`{${input.name}}`, value);\n }\n }\n\n const answer = await ai.run('@cf/meta/llama-3.1-8b-instruct', {\n stream: false,\n prompt,\n });\n const response = { response: answer.response, prompt, message };\n const textWithAnswer = message.text + '\\n--------\\n\\n' + answer.response;\n await space.crud.update({ id: messageId }, { text: textWithAnswer });\n\n return new Response(JSON.stringify(response));\n};\n\nconst getContext = async ({ space }: any) => {\n let context = '';\n const { objects: docs } = await space.crud.query({ __typename: 'dxos.org/type/Document' }).run();\n for (const doc of docs) {\n const { content } = await space.crud.query({ id: doc.content }).first();\n context += content + '\\n\\n';\n }\n return context;\n};\n\nenum TemplateInputType {\n VALUE = 0,\n PASS_THROUGH = 1,\n RETRIEVER = 2,\n FUNCTION = 3,\n QUERY = 4,\n RESOLVER = 5,\n CONTEXT = 6,\n SCHEMA = 7,\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Chess as ChessJS } from 'chess.js';\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport { Database, Obj, Type } from '@dxos/echo';\nimport { defineFunction } from '@dxos/functions';\nimport { Chess } from '@dxos/plugin-chess/types';\n\nexport default defineFunction({\n key: 'dxos.org/script/chess-bot',\n name: 'Chess Bot',\n description: 'Plays a random move in a chess game.',\n\n inputSchema: Schema.Struct({\n game: Type.Ref(Chess.Game).annotations({\n description: 'The chess game to comment on.',\n }),\n player: Schema.optional(Schema.Literal('white', 'black')).annotations({\n description: 'The player to play the game as.',\n }),\n }),\n\n outputSchema: Schema.Struct({\n state: Schema.String.annotations({\n description: 'The state of the game as an ASCII art board.',\n }),\n }),\n\n types: [Chess.Game],\n services: [Database.Service],\n\n handler: Effect.fnUntraced(function* ({ data: { game, player = 'black' } }) {\n const loadedGame = yield* Database.Service.load(game);\n const chess = new ChessJS();\n chess.loadPgn(loadedGame.pgn ?? '');\n if (chess.turn() !== (player === 'white' ? 'w' : 'b')) {\n return { state: chess.ascii() };\n }\n\n const moves = chess.moves({ verbose: true });\n const move = moves[Math.floor(Math.random() * moves.length)];\n if (!move) {\n return { state: chess.ascii() };\n }\n\n chess.move(move.san);\n const newPgn = chess.pgn();\n Obj.change(loadedGame, (g) => {\n g.pgn = newPgn;\n });\n yield* Database.Service.flush();\n return { state: chess.ascii() };\n }),\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as A from '@automerge/automerge';\nimport { Chess as ChessJS } from 'chess.js';\nimport * as Array from 'effect/Array';\nimport * as Effect from 'effect/Effect';\nimport * as Function from 'effect/Function';\nimport * as Layer from 'effect/Layer';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\n\nimport { AiService, ConsolePrinter, ToolExecutionService, ToolResolverService } from '@dxos/ai';\nimport { AiSession, GenerationObserver } from '@dxos/assistant';\nimport { ArtifactId } from '@dxos/assistant';\nimport { Database, Filter, Obj, Ref, Relation, Type } from '@dxos/echo';\nimport { createDocAccessor } from '@dxos/echo-db';\nimport { TracingService, defineFunction } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { Chess } from '@dxos/plugin-chess/types';\nimport { Markdown } from '@dxos/plugin-markdown/types';\nimport { Collection, Text } from '@dxos/schema';\nimport { HasSubject } from '@dxos/types';\nimport { trim } from '@dxos/util';\n\nexport default defineFunction({\n key: 'dxos.org/function/chess/commentary',\n name: 'Commentary',\n description: 'Adds commentary about the most recent move to a markdown document associated with the chess game.',\n inputSchema: Schema.Struct({\n game: Type.Ref(Chess.Game).annotations({\n description: 'The chess game to comment on.',\n }),\n }),\n outputSchema: Schema.Union(\n Schema.Struct({\n documentId: ArtifactId.annotations({\n description: 'The ID of the markdown document that was updated or created.',\n }),\n commentary: Schema.String.annotations({\n description: 'The commentary that was added.',\n }),\n }),\n Schema.Void.annotations({\n description: 'Function did not find anything to comment on.',\n }),\n ),\n types: [Chess.Game, Markdown.Document, Text.Text, HasSubject.HasSubject, Collection.Collection],\n services: [AiService.AiService, Database.Service],\n handler: Effect.fnUntraced(\n function* ({ data: { game: gameRef } }) {\n // Load the chess game\n log.info('load game', { gameRef });\n const chessGame = yield* Database.Service.load(gameRef);\n\n // Load the chess position from PGN or FEN\n const chess = new ChessJS();\n if (chessGame.pgn) {\n chess.loadPgn(chessGame.pgn);\n } else if (chessGame.fen) {\n chess.load(chessGame.fen);\n } else {\n log.info('Early return: no pgn or fen');\n return;\n }\n\n // Get the most recent move\n const history = chess.history({ verbose: true });\n if (history.length === 0) {\n throw new Error('No moves have been played yet');\n }\n const lastMove = history[history.length - 1];\n const moveNumber = Math.ceil(history.length / 2);\n const isWhiteMove = history.length % 2 === 1;\n const player = isWhiteMove ? 'White' : 'Black';\n const moveNotation = lastMove.san;\n\n // Generate AI commentary about the move\n const result = yield* new AiSession().run({\n prompt:\n `Comment on this chess move as if you're commentating a live match for an audience:\\n\\n` +\n `Move ${moveNumber}: ${player} plays ${moveNotation} (${lastMove.from} to ${lastMove.to})${lastMove.captured ? `, capturing ${lastMove.captured}` : ''}\\n` +\n `Current position: ${chess.fen()}\\n` +\n `${chess.isCheck() ? 'The king is in check! ' : ''}` +\n `${chess.isCheckmate() ? 'CHECKMATE! ' : ''}` +\n `${chess.isStalemate() ? 'STALEMATE! ' : ''}` +\n `\\nGame so far:\\n${chess.pgn()}`,\n system: COMMENTARY_SYSTEM_PROMPT,\n history: [],\n observer: GenerationObserver.fromPrinter(new ConsolePrinter({ tag: 'chess-commentary' })),\n });\n\n const commentaryText = Function.pipe(\n result,\n Array.findLast((msg) => msg.sender.role === 'assistant' && msg.blocks.some((block) => block._tag === 'text')),\n Option.flatMap((msg) =>\n Function.pipe(\n msg.blocks,\n Array.findLast((block) => block._tag === 'text'),\n Option.map((block) => block.text),\n ),\n ),\n Option.getOrThrowWith(() => new Error('No commentary generated')),\n );\n\n const commentary = `## Move ${moveNumber}: ${player} plays ${moveNotation}\\n\\n${commentaryText}\\n\\n`;\n log.info('commentary', { commentary });\n\n // TODO(wittjosiah): Functions currently don't support traversals.\n // const docs = yield* Database.Service.runQuery(\n // Query.select(Filter.id(chessGame.id)).targetOf(HasSubject.HasSubject).source(),\n // ).pipe(Effect.map((objects) => objects.filter((object) => Obj.instanceOf(Markdown.Document, object))));\n const docs = yield* Database.Service.runQuery(Filter.type(HasSubject.HasSubject)).pipe(\n Effect.map((relations) =>\n relations.filter((relation) => {\n // TODO(wittjosiah): This is a workaround for getTarget not handling deleted objects.\n try {\n log.info('relation', {\n source: Obj.getDXN(Relation.getTarget(relation)).toString(),\n game: Obj.getDXN(chessGame).toString(),\n });\n return Obj.getDXN(Relation.getTarget(relation)).toString() === Obj.getDXN(chessGame).toString();\n } catch {\n return false;\n }\n }),\n ),\n Effect.map((relations) =>\n relations\n .map((relation) => {\n // TODO(wittjosiah): This is a workaround for getSource not handling deleted objects.\n try {\n return Relation.getSource(relation);\n } catch {\n return undefined;\n }\n })\n .filter((source) => source !== undefined),\n ),\n Effect.map((sources) => {\n const docs = sources.filter((source) => Obj.instanceOf(Markdown.Document, source));\n log.info('docs', { sources, docs });\n return docs;\n }),\n );\n log.info('docs', { count: docs.length });\n\n let document: Markdown.Document;\n if (docs.length === 0) {\n // TODO(wittjosiah): Deploy fails if `SpaceProperties` schema is imported because its from `client-protocol`.\n const [properties] = yield* Database.Service.runQuery(Filter.typename('dxos.org/type/Properties'));\n const rootCollection = yield* Database.Service.load<Collection.Collection>(\n properties[Collection.Collection.typename],\n );\n\n log.info('rootCollection', { rootCollection });\n\n // Create a new markdown document\n const gameName = chessGame.name || 'Chess Game';\n document = yield* Database.Service.add(\n Markdown.make({\n name: `${gameName} Commentary`,\n content: `# ${gameName} Commentary\\n\\n${commentary}`,\n }),\n );\n\n const documentRef = Ref.make(document);\n Obj.change(rootCollection, (c) => {\n c.objects.push(documentRef);\n });\n\n // Create the HasSubject relation\n yield* Database.Service.add(\n Relation.make(HasSubject.HasSubject, {\n [Relation.Source]: document,\n [Relation.Target]: chessGame,\n completedAt: new Date().toISOString(),\n }),\n );\n } else {\n document = docs[0];\n\n // Load the text content and append the commentary\n const text = yield* Database.Service.load(document.content);\n const accessor = createDocAccessor(text, ['content']);\n accessor.handle.change((doc: A.Doc<Text.Text>) => {\n A.splice(doc, accessor.path.slice(), text.content.length, 0, commentary);\n });\n }\n\n log.info('result', { documentId: Obj.getDXN(document).toString(), commentary });\n\n yield* Database.Service.flush();\n\n return {\n documentId: Obj.getDXN(document).toString(),\n commentary,\n };\n },\n Effect.provide(\n Layer.mergeAll(\n AiService.model('@anthropic/claude-haiku-4-5'),\n ToolResolverService.layerEmpty,\n ToolExecutionService.layerEmpty,\n TracingService.layerNoop,\n ),\n ),\n ),\n});\n\nconst COMMENTARY_SYSTEM_PROMPT = trim`\n You are a professional chess commentator providing live commentary for a chess match.\n\n # Style\n - Write in an engaging, enthusiastic style as if commentating for a live audience\n - Be concise but informative (2-4 sentences)\n - Explain the strategic implications of the move\n - Note any tactical elements (captures, threats, checks)\n - Comment on the position and what it means for the game\n\n # Format\n - Write in plain text (no markdown formatting in the commentary itself)\n - Be natural and conversational\n - Use chess terminology appropriately but keep it accessible\n\n # Special Situations\n - If it's checkmate, express excitement about the conclusion\n - If it's check, note the pressure on the king\n - If a piece is captured, mention the material exchange\n - Comment on the development of pieces and control of key squares when relevant\n`;\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @ts-ignore\nimport { Expando, S, create, defineFunction } from 'dxos:functions';\n// @ts-ignore\nimport { randText } from 'https://esm.sh/@ngneat/falso@7.1.1?bundle=false';\n\nexport default defineFunction({\n key: 'dxos.org/script/data-generator',\n name: 'Data Generator',\n inputSchema: S.Struct({\n documentAmount: S.optional(S.Number),\n textSize: S.optional(S.Number),\n mutationAmount: S.optional(S.Number),\n waitAfterCreation: S.optional(S.Number),\n }),\n\n outputSchema: S.Struct({}),\n\n handler: async ({\n data: { documentAmount = 1, textSize = 10, mutationAmount = 0, waitAfterCreation = 10_000 },\n context: { space },\n }: any) => {\n await space.db.graph.schemaRegistry.register([Expando]);\n const result: Record<string, any> = {};\n const objects: Expando[] = [];\n\n // Create objects.\n for (let i = 0; i < documentAmount; i++) {\n const obj = space.db.add(\n create(Expando, {\n name: 'scriptGenerated',\n content: randText({ charCount: textSize }),\n }),\n );\n objects.push(obj);\n const objectResult: any = {};\n // Mutate the object.\n for (let i = 0; i < mutationAmount; i++) {\n obj.content = randText({ charCount: textSize });\n }\n objectResult.mutations = mutationAmount;\n objectResult.contentLength = obj.content.length;\n result[obj.id] = objectResult;\n }\n\n // Flush and wait for data to propagate.\n await space.db.flush();\n await new Promise((resolve) => setTimeout(resolve, waitAfterCreation));\n return { createdObjects: objects.length };\n },\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @ts-ignore\nimport { DXN, EchoObject, Filter, ObjectId, S, create, defineFunction } from 'dxos:functions';\n// @ts-ignore\nimport { FetchHttpClient } from 'https://esm.sh/@effect/platform@0.89.0?deps=effect@3.17.0&bundle=false';\nimport {\n DiscordConfig,\n DiscordREST,\n DiscordRESTMemoryLive,\n // @ts-ignore\n} from 'https://esm.sh/dfx@0.113.0?deps=effect@3.17.0&bundle=false';\n// @ts-ignore\nimport * as Config from 'https://esm.sh/effect@3.17.0/Config?bundle=false';\n// @ts-ignore\nimport * as Effect from 'https://esm.sh/effect@3.17.0/Effect?bundle=false';\n// @ts-ignore\nimport * as Redacted from 'https://esm.sh/effect@3.17.0/Redacted?bundle=false';\n// @ts-ignore\nimport * as Ref from 'https://esm.sh/effect@3.17.0/Ref?bundle=false';\n\nconst MessageSchema = S.Struct({\n id: ObjectId,\n foreignId: S.Any, // bigint?\n from: S.String,\n created: S.String,\n content: S.String,\n}).pipe(\n EchoObject({\n typename: 'example.com/type/Message',\n version: '0.1.0',\n }),\n);\n\nconst DEFAULT_AFTER = 1704067200; // 2024-01-01\n\nconst generateSnowflake = (unixTimestamp: number): bigint => {\n const discordEpoch = 1420070400000n; // Discord Epoch (ms)\n return (BigInt(unixTimestamp * 1000) - discordEpoch) << 22n;\n};\n\nexport default defineFunction({\n key: 'dxos.org/script/discord',\n name: 'Discord',\n inputSchema: S.Struct({\n // TODO(wittjosiah): Remove. This is used to provide a terminal for a cron trigger.\n tick: S.optional(S.String),\n channelId: S.String,\n after: S.optional(S.Number),\n pageSize: S.optional(S.Number),\n queueId: S.String,\n }),\n\n outputSchema: S.Struct({\n newMessages: S.Number,\n }),\n\n handler: ({ data: { channelId, queueId, after = DEFAULT_AFTER, pageSize = 5 }, context: { space } }: any) =>\n Effect.gen(function* () {\n const { token } = yield* Effect.tryPromise({\n try: () => space.db.query(Filter.typename('dxos.org/type/AccessToken', { source: 'discord.com' })).first(),\n catch: (e: any) => e,\n });\n const { objects } = yield* Effect.tryPromise({\n try: () => space.queues.queryQueue(DXN.parse(queueId)),\n catch: (e: any) => e,\n });\n const backfill = objects.length === 0;\n const newMessages = yield* Ref.make(0);\n const lastMessage = yield* Ref.make(objects.at(-1));\n\n const enqueueMessages = Effect.gen(function* () {\n const rest = yield* DiscordREST;\n\n while (true) {\n const last = yield* Ref.get(lastMessage);\n const options = {\n after: backfill && !last ? `${generateSnowflake(after)}` : last?.foreignId,\n limit: pageSize,\n };\n const messages = yield* rest.getChannelMessages(channelId, options).pipe((res: any) => res.json);\n const queueMessages = messages\n .map((message: any) =>\n create(MessageSchema, {\n id: ObjectId.random(),\n foreignId: message.id,\n from: message.author.username,\n created: message.timestamp,\n content: message.content,\n }),\n )\n .toReversed();\n if (queueMessages.length > 0) {\n yield* Effect.tryPromise({\n try: () => space.queues.insertIntoQueue(DXN.parse(queueId), queueMessages),\n catch: (e: any) => e,\n });\n yield* Ref.update(newMessages, (n: any) => n + queueMessages.length);\n yield* Ref.update(lastMessage, (m: any) => queueMessages.at(-1));\n }\n if (messages.length < pageSize) {\n break;\n }\n }\n }).pipe(\n Effect.provide(DiscordRESTMemoryLive),\n Effect.provide(\n DiscordConfig.layerConfig({\n token: Config.succeed(Redacted.make(token)),\n }),\n ),\n Effect.provide(FetchHttpClient.layer),\n );\n\n yield* enqueueMessages;\n return { newMessages: yield* Ref.get(newMessages) };\n }),\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Appends a message to the end of a Document configured through a trigger.\n * Trigger must have a targetDocumentId field set in Meta.\n */\nexport default async ({ data: { bodyText }, context: { space } }: any) => {\n const { email, targetDocumentId: documentId } = JSON.parse(bodyText) as RequestPayload;\n\n const document = await space.db.query({ id: documentId }).first();\n\n const contentId = document.content['/'].split(':')[3];\n const documentContent = await space.db.query({ id: contentId }).first();\n const modifiedContent = [\n documentContent.content,\n '',\n '---',\n `**From:** ${email.from}`,\n `**Subject:** ${email.subject}`,\n `**Date:** ${email.created}`,\n '',\n email.body,\n ].join('\\n');\n\n await space.db.update({ id: contentId }, { content: modifiedContent });\n\n return new Response(JSON.stringify({ success: true }));\n};\n\ntype RequestPayload = {\n email: { from: string; subject: string; created: string; body: string };\n targetDocumentId: string;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as FetchHttpClient from '@effect/platform/FetchHttpClient';\nimport * as HttpClient from '@effect/platform/HttpClient';\nimport * as HttpClientRequest from '@effect/platform/HttpClientRequest';\nimport * as Effect from 'effect/Effect';\nimport * as Schedule from 'effect/Schedule';\nimport * as Schema from 'effect/Schema';\n\nimport { defineFunction } from '@dxos/functions';\n\nexport default defineFunction({\n key: 'dxos.org/script/forex-effect',\n name: 'Forex Effect',\n description: 'Returns the exchange rate between two currencies.',\n\n inputSchema: Schema.Struct({\n from: Schema.String.annotations({ description: 'The source currency' }),\n to: Schema.String.annotations({ description: 'The target currency' }),\n }),\n\n outputSchema: Schema.String.annotations({ description: 'The exchange rate between the two currencies' }),\n\n handler: Effect.fnUntraced(function* ({ data: { from, to } }) {\n const res = yield* HttpClientRequest.get(`https://free.ratesdb.com/v1/rates?from=${from}&to=${to}`).pipe(\n HttpClient.execute,\n Effect.flatMap((res: any) => res.json),\n Effect.timeout('1 second'),\n Effect.retry(Schedule.exponential(1_000).pipe(Schedule.compose(Schedule.recurs(3)))),\n Effect.scoped,\n );\n\n return (res as any).data.rates[to].toString();\n }, Effect.provide(FetchHttpClient.layer)),\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { defineFunction } from '@dxos/functions';\n\nexport default defineFunction({\n key: 'dxos.org/script/forex',\n name: 'Forex',\n description: 'Returns the exchange rate between two currencies.',\n\n inputSchema: Schema.Struct({\n from: Schema.String.annotations({ description: 'The source currency' }),\n to: Schema.String.annotations({ description: 'The target currency' }),\n }),\n\n handler: async ({ data: { from, to } }) => {\n const res = await fetch(`https://free.ratesdb.com/v1/rates?from=${from}&to=${to}`);\n const {\n data: { rates },\n } = await res.json();\n\n return rates[to].toString();\n },\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @ts-ignore\nimport { EchoObject, Filter, ObjectId, S, create, defineFunction } from 'dxos:functions';\n// @ts-ignore\nimport {\n FetchHttpClient,\n HttpClient,\n HttpClientRequest,\n // @ts-ignore\n} from 'https://esm.sh/@effect/platform@0.89.0?deps=effect@3.17.0&bundle=false';\n// @ts-ignore\nimport { format, subDays } from 'https://esm.sh/date-fns@3.3.1?bundle=false';\n// @ts-ignore\nimport * as Chunk from 'https://esm.sh/effect@3.17.0/Chunk?bundle=false';\n// @ts-ignore\nimport * as Effect from 'https://esm.sh/effect@3.17.0/Effect?bundle=false';\n// @ts-ignore\nimport * as Function from 'https://esm.sh/effect@3.17.0/Function?bundle=false';\n// @ts-ignore\nimport * as Ref from 'https://esm.sh/effect@3.17.0/Ref?bundle=false';\n// @ts-ignore\nimport * as Schedule from 'https://esm.sh/effect@3.17.0/Schedule?bundle=false';\n// @ts-ignore\nimport * as Stream from 'https://esm.sh/effect@3.17.0/Stream?bundle=false';\n\nexport default defineFunction({\n key: 'dxos.org/script/gmail',\n name: 'Gmail',\n inputSchema: S.Struct({\n mailboxId: S.String,\n userId: S.optional(S.String).pipe(S.withDecodingDefault(() => 'me')),\n after: S.optional(S.Union(S.Number, S.String)).pipe(\n S.withDecodingDefault(() => format(subDays(new Date(), 30), 'yyyy-MM-dd')),\n ),\n pageSize: S.optional(S.Number).pipe(S.withDecodingDefault(() => 100)),\n // TODO(wittjosiah): Remove. This is used to provide a terminal for a cron trigger.\n tick: S.optional(S.String),\n }),\n\n outputSchema: S.Struct({\n newMessages: S.Number,\n }),\n\n handler: ({ context: { space }, data: { mailboxId, userId, after, pageSize } }: any) =>\n Effect.gen(function* () {\n const { token } = yield* Effect.tryPromise({\n try: () => space.db.query(Filter.typename('dxos.org/type/AccessToken', { source: 'gmail.com' })).first(),\n catch: (e: any) => e,\n });\n\n // NOTE: Google API bundles size is v. large and caused runtime issues.\n const makeRequest = (url: string) =>\n Function.pipe(\n url,\n HttpClientRequest.get,\n HttpClientRequest.setHeaders({ Authorization: `Bearer ${token}`, Accept: 'application/json' }),\n HttpClient.execute,\n Effect.flatMap((res: any) => res.json),\n Effect.timeout('1 second'),\n Effect.retry(Schedule.exponential(1000).pipe(Schedule.compose(Schedule.recurs(3)))),\n Effect.scoped,\n );\n\n const listMessages = (userId: string, q: string, pageSize: number, pageToken: string | null) =>\n makeRequest(getUrl(userId, undefined, { q, pageSize, pageToken }));\n\n const getMessage = (userId: string, messageId: string) => makeRequest(getUrl(userId, messageId));\n\n const mailbox = yield* Effect.tryPromise({\n try: () => space.db.query({ id: mailboxId }).first(),\n catch: (e: any) => e,\n });\n const { objects } = yield* Effect.tryPromise({\n try: () => space.queues.queryQueue(mailbox.queue.dxn),\n catch: (e: any) => e,\n });\n const newMessages = yield* Ref.make([]);\n const nextPage = yield* Ref.make(null);\n\n do {\n const last = objects.at(-1);\n const q = last\n ? `in:inbox after:${Math.floor(new Date(last.created).getTime() / 1000)}`\n : `in:inbox after:${after}`;\n const pageToken = yield* Ref.get(nextPage);\n const { messages, nextPageToken } = yield* listMessages(userId, q, pageSize, pageToken);\n yield* Ref.update(nextPage, () => nextPageToken);\n for (const message of messages) {\n const messageDetails = yield* getMessage(userId, message.id);\n const created = new Date(parseInt(messageDetails.internalDate)).toISOString();\n const from = messageDetails.payload.headers.find((h: any) => h.name === 'From');\n const sender = from && parseFromHeader(from.value);\n // TODO(wittjosiah): Improve parsing of email contents.\n const content =\n messageDetails.payload.body?.data ??\n messageDetails.payload.parts?.find((p: any) => p.mimeType === 'text/plain')?.body.data;\n // Skip the message if content or sender is missing.\n // Skip the message if it's the same as the last message.\n // TODO(wittjosiah): This comparison should be done via foreignId probably.\n if (!content || !sender || created === last?.created) {\n continue;\n }\n const subject = messageDetails.payload.headers.find((h: any) => h.name === 'Subject')?.value;\n const object = create(MessageType, {\n id: ObjectId.random(),\n created,\n sender,\n blocks: [\n {\n _tag: 'text',\n text: Buffer.from(content, 'base64').toString('utf-8'),\n },\n ],\n properties: {\n subject,\n threadId: message.threadId,\n },\n });\n // TODO(wittjosiah): Set foreignId in object meta.\n yield* Ref.update(newMessages, (n: any) => [object, ...n]);\n }\n } while (yield* Ref.get(nextPage));\n\n const queueMessages = yield* Ref.get(newMessages);\n if (queueMessages.length > 0) {\n yield* Function.pipe(\n queueMessages,\n Stream.fromIterable,\n Stream.grouped(10),\n Stream.flatMap((batch: any) =>\n Effect.tryPromise({\n try: () => space.queues.insertIntoQueue(mailbox.queue.dxn, Chunk.toReadonlyArray(batch)),\n catch: (e: any) => e,\n }),\n ),\n Stream.runDrain,\n );\n }\n\n return { newMessages: queueMessages.length };\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n});\n\nconst getUrl = (userId: string, messageId?: string, params?: Record<string, any>) => {\n const api = new URL(\n [`https://gmail.googleapis.com/gmail/v1/users/${userId}/messages`, messageId].filter(Boolean).join('/'),\n );\n Object.entries(params ?? {})\n .filter(([_, value]) => value != null)\n .forEach(([key, value]) => api.searchParams.set(key, value));\n return api.toString();\n};\n\n/**\n * Parses an email string in the format \"Name <email@example.com>\" into separate name and email components.\n */\nconst parseFromHeader = (value: string): { name?: string; email: string } | undefined => {\n const EMAIL_REGEX = /^([^<]+?)\\s*<([^>]+@[^>]+)>$/;\n const removeOuterQuotes = (str: string) => str.replace(/^['\"]|['\"]$/g, '');\n const match = value.match(EMAIL_REGEX);\n if (match) {\n const [, name, email] = match;\n return {\n name: removeOuterQuotes(name.trim()),\n email: email.trim(),\n };\n }\n};\n\n//\n// Schemas\n// TODO(wittjosiah): These schemas should be imported from @dxos/schema.\n//\n\nconst ActorRole = S.Literal('user', 'assistant');\ntype ActorRole = S.Schema.Type<typeof ActorRole>;\n\nconst ActorSchema = S.Struct({\n identityKey: S.optional(S.String),\n email: S.optional(S.String),\n name: S.optional(S.String),\n role: S.optional(ActorRole),\n});\n\nconst Base = S.Struct({\n pending: S.optional(S.Boolean),\n});\ntype Base = S.Schema.Type<typeof Base>;\nconst Text = S.TaggedStruct('text', {\n mimeType: S.optional(S.String),\n text: S.String,\n ...Base.fields,\n}).pipe(S.mutable);\ninterface Text extends S.Schema.Type<typeof Text> {}\n\nconst MessageType = S.Struct({\n id: ObjectId,\n created: S.String.annotations({\n description: 'ISO date string when the message was sent.',\n }),\n sender: ActorSchema.annotations({\n description: 'Identity of the message sender.',\n }),\n blocks: S.Array(Text).annotations({\n description: 'Contents of the message.',\n }),\n properties: S.optional(\n S.mutable(\n S.Record({ key: S.String, value: S.Any }).annotations({\n description: 'Custom properties for specific message types (e.g. attention context, email subject, etc.).',\n }),\n ),\n ),\n}).pipe(\n EchoObject({\n typename: 'dxos.org/type/Message',\n version: '0.2.0',\n }),\n);\ntype MessageType = S.Schema.Type<typeof MessageType>;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { defineFunction } from '@dxos/functions';\n\nexport default defineFunction({\n key: 'dxos.org/script/ping',\n name: 'Ping',\n inputSchema: Schema.Any,\n\n handler: async ({ data }) => {\n return data;\n },\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport anthropic from './anthropic.ts?raw';\nimport chat from './chat.ts?raw';\nimport chessBot from './chess-bot.ts?raw';\nimport commentary from './commentary.ts?raw';\nimport dataGenerator from './data-generator.ts?raw';\nimport discord from './discord.ts?raw';\nimport email from './email.ts?raw';\nimport forexEffect from './forex-effect.ts?raw';\nimport forex from './forex.ts?raw';\nimport gmail from './gmail.ts?raw';\nimport ping from './ping.ts?raw';\n\nconst removeHeader = (str: string) => str.split('\\n').slice(4).join('\\n');\n\nexport { dataGenerator };\n\nexport type Template = {\n id: string;\n name: string;\n source: string;\n presetId?: string;\n};\n\nexport const templates = [\n {\n id: 'dxos.org/script/ping',\n name: 'Ping',\n source: removeHeader(ping),\n },\n {\n id: 'dxos.org/script/forex',\n name: 'Forex',\n source: removeHeader(forex),\n },\n {\n id: 'dxos.org/script/forex-effect',\n name: 'Forex (Effect)',\n source: removeHeader(forexEffect),\n },\n {\n id: 'dxos.org/script/gpt',\n name: 'Gpt',\n source: removeHeader(chat),\n presetId: 'dxos.org/function/gpt',\n },\n {\n id: 'dxos.org/script/chess-bot',\n name: 'Chess Bot',\n source: removeHeader(chessBot),\n presetId: 'dxos.org/function/chess-bot',\n },\n {\n id: 'dxos.org/script/email',\n name: 'Email',\n source: removeHeader(email),\n presetId: 'dxos.org/function/email',\n },\n {\n id: 'dxos.org/script/discord',\n name: 'Discord',\n source: removeHeader(discord),\n presetId: 'dxos.org/function/discord',\n },\n {\n id: 'dxos.org/script/gmail',\n name: 'Gmail',\n source: removeHeader(gmail),\n presetId: 'dxos.org/function/gmail',\n },\n {\n id: 'dxos.org/script/data-generator',\n name: 'Data Generator',\n source: removeHeader(dataGenerator),\n presetId: 'dxos.org/function/data-generator',\n },\n {\n id: 'dxos.org/script/anthropic',\n name: 'Anthropic',\n source: removeHeader(anthropic),\n },\n {\n id: 'dxos.org/script/commentary',\n name: 'Commentary',\n source: removeHeader(commentary),\n presetId: 'dxos.org/function/chess/commentary',\n },\n] as const;\n"],
5
- "mappings": ";;;AAAA;;;ACAA;;;ACAA;;;ACAA;;;ACAA;;;ACAA;;;ACAA;;;ACAA;;;ACAA;;;ACAA;;;ACAA;;;ACgBA,IAAMA,eAAe,CAACC,QAAgBA,IAAIC,MAAM,IAAA,EAAMC,MAAM,CAAA,EAAGC,KAAK,IAAA;AAW7D,IAAMC,YAAY;EACvB;IACEC,IAAI;IACJC,MAAM;IACNC,QAAQC,aAAaC,YAAAA;EACvB;EACA;IACEJ,IAAI;IACJC,MAAM;IACNC,QAAQC,aAAaE,aAAAA;EACvB;EACA;IACEL,IAAI;IACJC,MAAM;IACNC,QAAQC,aAAaG,oBAAAA;EACvB;EACA;IACEN,IAAI;IACJC,MAAM;IACNC,QAAQC,aAAaI,YAAAA;IACrBC,UAAU;EACZ;EACA;IACER,IAAI;IACJC,MAAM;IACNC,QAAQC,aAAaM,iBAAAA;IACrBD,UAAU;EACZ;EACA;IACER,IAAI;IACJC,MAAM;IACNC,QAAQC,aAAaO,aAAAA;IACrBF,UAAU;EACZ;EACA;IACER,IAAI;IACJC,MAAM;IACNC,QAAQC,aAAaQ,eAAAA;IACrBH,UAAU;EACZ;EACA;IACER,IAAI;IACJC,MAAM;IACNC,QAAQC,aAAaS,aAAAA;IACrBJ,UAAU;EACZ;EACA;IACER,IAAI;IACJC,MAAM;IACNC,QAAQC,aAAaU,sBAAAA;IACrBL,UAAU;EACZ;EACA;IACER,IAAI;IACJC,MAAM;IACNC,QAAQC,aAAaW,iBAAAA;EACvB;EACA;IACEd,IAAI;IACJC,MAAM;IACNC,QAAQC,aAAaY,kBAAAA;IACrBP,UAAU;EACZ;;",
6
- "names": ["removeHeader", "str", "split", "slice", "join", "templates", "id", "name", "source", "removeHeader", "ping", "forex", "forexEffect", "chat", "presetId", "chessBot", "email", "discord", "gmail", "dataGenerator", "anthropic", "commentary"]
7
- }
@@ -1,33 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
-
3
- // src/meta.ts
4
- import { trim } from "@dxos/util";
5
- var meta = {
6
- id: "dxos.org/plugin/script",
7
- name: "Scripts",
8
- description: trim`
9
- Write and deploy custom JavaScript functions that extend your workspace capabilities.
10
- Create AI agent tools, spreadsheet formulas, and automation scripts that integrate seamlessly with other plugins.
11
- `,
12
- icon: "ph--code--regular",
13
- iconHue: "sky",
14
- source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-explorer",
15
- tags: [
16
- "labs"
17
- ],
18
- screenshots: [
19
- "https://dxos.network/plugin-details-scripts-dark.png"
20
- ]
21
- };
22
- var defaultScriptsForIntegration = {
23
- // TODO(wittjosiah): Also include content extraction scripts in the default set.
24
- "gmail.com": [
25
- "dxos.org/script/gmail"
26
- ]
27
- };
28
-
29
- export {
30
- meta,
31
- defaultScriptsForIntegration
32
- };
33
- //# sourceMappingURL=chunk-5HSJPAK7.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'dxos.org/plugin/script',\n name: 'Scripts',\n description: trim`\n Write and deploy custom JavaScript functions that extend your workspace capabilities.\n Create AI agent tools, spreadsheet formulas, and automation scripts that integrate seamlessly with other plugins.\n `,\n icon: 'ph--code--regular',\n iconHue: 'sky',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-explorer',\n tags: ['labs'],\n screenshots: ['https://dxos.network/plugin-details-scripts-dark.png'],\n};\n\n// TODO(ZaymonFC): Configure by scopes?\nexport const defaultScriptsForIntegration: Record<string, string[]> = {\n // TODO(wittjosiah): Also include content extraction scripts in the default set.\n 'gmail.com': ['dxos.org/script/gmail'],\n};\n"],
5
- "mappings": ";;;AAKA,SAASA,YAAY;AAEd,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;EAIbC,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;AAGO,IAAMC,+BAAyD;;EAEpE,aAAa;IAAC;;AAChB;",
6
- "names": ["trim", "meta", "id", "name", "description", "trim", "icon", "iconHue", "source", "tags", "screenshots", "defaultScriptsForIntegration"]
7
- }