@dxos/plugin-script 0.8.3 → 0.8.4-main.1da679c

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 (233) hide show
  1. package/dist/lib/browser/DeploymentDialog-QZSTVNIS.mjs +12 -0
  2. package/dist/lib/browser/{ScriptContainer-RSN52NH7.mjs → ScriptContainer-IA7YJMFR.mjs} +20 -16
  3. package/dist/lib/browser/ScriptContainer-IA7YJMFR.mjs.map +7 -0
  4. package/dist/lib/browser/{app-graph-builder-5Z3MUX4N.mjs → app-graph-builder-5NIA7SLT.mjs} +6 -6
  5. package/dist/lib/{node-esm/app-graph-builder-IOOUTHV2.mjs.map → browser/app-graph-builder-5NIA7SLT.mjs.map} +3 -3
  6. package/dist/lib/browser/blueprint-definition-ET5KZ46I.mjs +28 -0
  7. package/dist/lib/browser/blueprint-definition-ET5KZ46I.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-4AUQEB2I.mjs +88 -0
  9. package/dist/lib/browser/chunk-4AUQEB2I.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-YSQMXTYO.mjs → chunk-5TVBECWH.mjs} +3 -3
  11. package/dist/lib/browser/{chunk-3JLR2SHJ.mjs → chunk-B5QYN3AG.mjs} +52 -53
  12. package/dist/lib/browser/chunk-B5QYN3AG.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-WB3X5Z7Q.mjs → chunk-IS4OG2UW.mjs} +5 -6
  14. package/dist/lib/browser/chunk-IS4OG2UW.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-KLGK77UK.mjs +283 -0
  16. package/dist/lib/browser/chunk-KLGK77UK.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-QJH7I2UV.mjs → chunk-NXKU3BNX.mjs} +40 -51
  18. package/dist/lib/browser/chunk-NXKU3BNX.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-6ZHHWU6S.mjs → chunk-QYAREHGH.mjs} +2 -2
  20. package/dist/lib/browser/{chunk-LA66DQGU.mjs → chunk-YCZPTTFO.mjs} +6 -6
  21. package/dist/lib/browser/chunk-YCZPTTFO.mjs.map +7 -0
  22. package/dist/lib/browser/{compiler-W4BYJYTL.mjs → compiler-O7MNN3XT.mjs} +28 -12
  23. package/dist/lib/browser/compiler-O7MNN3XT.mjs.map +7 -0
  24. package/dist/lib/browser/index.mjs +34 -31
  25. package/dist/lib/browser/index.mjs.map +3 -3
  26. package/dist/lib/browser/{intent-resolver-JOJNH4UX.mjs → intent-resolver-GGGTXYMB.mjs} +13 -14
  27. package/dist/lib/browser/intent-resolver-GGGTXYMB.mjs.map +7 -0
  28. package/dist/lib/browser/meta.json +1 -1
  29. package/dist/lib/browser/{react-surface-7BKUWL2U.mjs → react-surface-C4ZTW4QA.mjs} +15 -16
  30. package/dist/lib/browser/react-surface-C4ZTW4QA.mjs.map +7 -0
  31. package/dist/lib/browser/{settings-Z22D6JVJ.mjs → settings-A4E4R7VL.mjs} +6 -6
  32. package/dist/lib/browser/{settings-Z22D6JVJ.mjs.map → settings-A4E4R7VL.mjs.map} +1 -1
  33. package/dist/lib/browser/templates/index.mjs +9 -0
  34. package/dist/lib/browser/types/index.mjs +10 -0
  35. package/dist/lib/node-esm/{DeploymentDialog-IA4CH6WZ.mjs → DeploymentDialog-G6EHEPXN.mjs} +5 -5
  36. package/dist/lib/node-esm/{ScriptContainer-4IOOIPBF.mjs → ScriptContainer-6AVJSLU4.mjs} +20 -16
  37. package/dist/lib/node-esm/ScriptContainer-6AVJSLU4.mjs.map +7 -0
  38. package/dist/lib/node-esm/{app-graph-builder-IOOUTHV2.mjs → app-graph-builder-V7QF54LT.mjs} +6 -6
  39. package/dist/lib/{browser/app-graph-builder-5Z3MUX4N.mjs.map → node-esm/app-graph-builder-V7QF54LT.mjs.map} +3 -3
  40. package/dist/lib/node-esm/blueprint-definition-AIYFOT7Q.mjs +30 -0
  41. package/dist/lib/node-esm/blueprint-definition-AIYFOT7Q.mjs.map +7 -0
  42. package/dist/lib/node-esm/{chunk-2KJYPUQD.mjs → chunk-35M3CHYE.mjs} +3 -3
  43. package/dist/lib/node-esm/chunk-5OGRMRLA.mjs +90 -0
  44. package/dist/lib/node-esm/chunk-5OGRMRLA.mjs.map +7 -0
  45. package/dist/lib/node-esm/{chunk-AEB5TPEW.mjs → chunk-AHXJ6NQU.mjs} +2 -2
  46. package/dist/lib/node-esm/{chunk-UESZKXLR.mjs → chunk-JIPFLBYA.mjs} +5 -6
  47. package/dist/lib/node-esm/chunk-JIPFLBYA.mjs.map +7 -0
  48. package/dist/lib/node-esm/{chunk-MJJQBUOL.mjs → chunk-M642JUOZ.mjs} +40 -51
  49. package/dist/lib/node-esm/chunk-M642JUOZ.mjs.map +7 -0
  50. package/dist/lib/node-esm/{chunk-B4TP3LSZ.mjs → chunk-MPN2DI4P.mjs} +52 -53
  51. package/dist/lib/node-esm/chunk-MPN2DI4P.mjs.map +7 -0
  52. package/dist/lib/node-esm/chunk-WXKOIREL.mjs +284 -0
  53. package/dist/lib/node-esm/chunk-WXKOIREL.mjs.map +7 -0
  54. package/dist/lib/node-esm/{chunk-T7XDCUTF.mjs → chunk-ZA36GO4T.mjs} +6 -6
  55. package/dist/lib/node-esm/chunk-ZA36GO4T.mjs.map +7 -0
  56. package/dist/lib/node-esm/{compiler-7PQ4D43R.mjs → compiler-TZUZ7I6H.mjs} +28 -12
  57. package/dist/lib/node-esm/compiler-TZUZ7I6H.mjs.map +7 -0
  58. package/dist/lib/node-esm/index.mjs +34 -31
  59. package/dist/lib/node-esm/index.mjs.map +3 -3
  60. package/dist/lib/node-esm/{intent-resolver-HTM5PSRZ.mjs → intent-resolver-DUJWXCRR.mjs} +13 -14
  61. package/dist/lib/{browser/intent-resolver-JOJNH4UX.mjs.map → node-esm/intent-resolver-DUJWXCRR.mjs.map} +3 -3
  62. package/dist/lib/node-esm/meta.json +1 -1
  63. package/dist/lib/node-esm/{react-surface-6UO64YOS.mjs → react-surface-5CM3KXFE.mjs} +15 -16
  64. package/dist/lib/node-esm/react-surface-5CM3KXFE.mjs.map +7 -0
  65. package/dist/lib/node-esm/{settings-KZEGCDYX.mjs → settings-FZ25DUX4.mjs} +6 -6
  66. package/dist/lib/node-esm/{settings-KZEGCDYX.mjs.map → settings-FZ25DUX4.mjs.map} +1 -1
  67. package/dist/lib/node-esm/templates/index.mjs +10 -0
  68. package/dist/lib/node-esm/templates/index.mjs.map +7 -0
  69. package/dist/lib/node-esm/{types.mjs → types/index.mjs} +3 -6
  70. package/dist/lib/node-esm/types/index.mjs.map +7 -0
  71. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  72. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/artifact-definition.d.ts +1 -1
  74. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  76. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  77. package/dist/types/src/capabilities/compiler.d.ts +1 -1
  78. package/dist/types/src/capabilities/compiler.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/index.d.ts +6 -6
  80. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  82. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  84. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/settings.d.ts +1 -1
  86. package/dist/types/src/compiler/compiler.d.ts.map +1 -1
  87. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts +1 -1
  88. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
  89. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts +139 -12
  90. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts.map +1 -1
  91. package/dist/types/src/components/DeploymentDialog/index.d.ts +1 -1
  92. package/dist/types/src/components/DeploymentDialog/index.d.ts.map +1 -1
  93. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  94. package/dist/types/src/components/ScriptContainer.d.ts +3 -3
  95. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  96. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  97. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts +7 -10
  98. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts.map +1 -1
  99. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
  100. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
  101. package/dist/types/src/components/TestPanel/TestContainer.d.ts +4 -3
  102. package/dist/types/src/components/TestPanel/TestContainer.d.ts.map +1 -1
  103. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  104. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts +10 -3
  105. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts.map +1 -1
  106. package/dist/types/src/components/index.d.ts +1 -4
  107. package/dist/types/src/components/index.d.ts.map +1 -1
  108. package/dist/types/src/hooks/deploy.d.ts +4 -3
  109. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  110. package/dist/types/src/hooks/template.d.ts.map +1 -1
  111. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
  112. package/dist/types/src/templates/data-generator.d.ts.map +1 -1
  113. package/dist/types/src/templates/index.d.ts +2 -0
  114. package/dist/types/src/templates/index.d.ts.map +1 -1
  115. package/dist/types/src/translations.d.ts +68 -176
  116. package/dist/types/src/translations.d.ts.map +1 -1
  117. package/dist/types/src/types/index.d.ts +2 -0
  118. package/dist/types/src/types/index.d.ts.map +1 -0
  119. package/dist/types/src/{types.d.ts → types/schema.d.ts} +3 -5
  120. package/dist/types/src/types/schema.d.ts.map +1 -0
  121. package/dist/types/src/util/deploy.d.ts +3 -3
  122. package/dist/types/src/util/deploy.d.ts.map +1 -1
  123. package/dist/types/src/util/functions.d.ts.map +1 -1
  124. package/dist/types/tsconfig.tsbuildinfo +1 -1
  125. package/package.json +79 -70
  126. package/src/ScriptPlugin.tsx +7 -7
  127. package/src/capabilities/app-graph-builder.ts +2 -2
  128. package/src/capabilities/artifact-definition.ts +9 -12
  129. package/src/capabilities/blueprint-definition.ts +30 -0
  130. package/src/capabilities/compiler.ts +2 -1
  131. package/src/capabilities/index.ts +1 -1
  132. package/src/capabilities/intent-resolver.ts +2 -5
  133. package/src/capabilities/react-surface.tsx +6 -5
  134. package/src/compiler/compiler.ts +1 -1
  135. package/src/components/DeploymentDialog/DeploymentDialog.stories.tsx +29 -17
  136. package/src/components/DeploymentDialog/DeploymentDialog.tsx +5 -5
  137. package/src/components/DeploymentDialog/index.ts +1 -1
  138. package/src/components/FrameContainer/FrameContainer.tsx +3 -2
  139. package/src/components/FrameContainer/frame.tsx +1 -1
  140. package/src/components/ScriptContainer.tsx +6 -4
  141. package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +19 -14
  142. package/src/components/ScriptToolbar/ScriptToolbar.tsx +14 -4
  143. package/src/components/Settings/ScriptObjectSettings.tsx +19 -23
  144. package/src/components/Settings/ScriptPluginSettings.tsx +33 -28
  145. package/src/components/TestPanel/TestContainer.tsx +9 -3
  146. package/src/components/TestPanel/TestPanel.tsx +1 -1
  147. package/src/components/TypescriptEditor/TypescriptEditor.stories.tsx +9 -16
  148. package/src/components/TypescriptEditor/TypescriptEditor.tsx +6 -4
  149. package/src/hooks/deploy.ts +11 -11
  150. package/src/hooks/template.ts +3 -3
  151. package/src/hooks/useCreateAndDeployScriptTemplates.ts +1 -0
  152. package/src/templates/chess.ts +1 -1
  153. package/src/templates/data-generator.ts +8 -4
  154. package/src/templates/discord.ts +4 -4
  155. package/src/templates/email.ts +2 -2
  156. package/src/templates/forex-effect.ts +3 -3
  157. package/src/templates/forex.ts +1 -1
  158. package/src/templates/gmail.ts +14 -55
  159. package/src/templates/index.ts +2 -0
  160. package/src/translations.ts +9 -6
  161. package/src/types/index.ts +5 -0
  162. package/src/{types.ts → types/schema.ts} +2 -7
  163. package/src/util/deploy.ts +20 -33
  164. package/src/util/functions.ts +4 -4
  165. package/dist/lib/browser/DeploymentDialog-RPPPWEEL.mjs +0 -12
  166. package/dist/lib/browser/ScriptContainer-RSN52NH7.mjs.map +0 -7
  167. package/dist/lib/browser/artifact-definition-A4TBQL75.mjs +0 -249
  168. package/dist/lib/browser/artifact-definition-A4TBQL75.mjs.map +0 -7
  169. package/dist/lib/browser/chunk-3FU4QZVP.mjs +0 -364
  170. package/dist/lib/browser/chunk-3FU4QZVP.mjs.map +0 -7
  171. package/dist/lib/browser/chunk-3JLR2SHJ.mjs.map +0 -7
  172. package/dist/lib/browser/chunk-LA66DQGU.mjs.map +0 -7
  173. package/dist/lib/browser/chunk-QJH7I2UV.mjs.map +0 -7
  174. package/dist/lib/browser/chunk-WB3X5Z7Q.mjs.map +0 -7
  175. package/dist/lib/browser/compiler-W4BYJYTL.mjs.map +0 -7
  176. package/dist/lib/browser/react-surface-7BKUWL2U.mjs.map +0 -7
  177. package/dist/lib/browser/types.mjs +0 -13
  178. package/dist/lib/node/DeploymentDialog-C3EEYGRH.cjs +0 -33
  179. package/dist/lib/node/DeploymentDialog-C3EEYGRH.cjs.map +0 -7
  180. package/dist/lib/node/ScriptContainer-CAC7AISY.cjs +0 -278
  181. package/dist/lib/node/ScriptContainer-CAC7AISY.cjs.map +0 -7
  182. package/dist/lib/node/app-graph-builder-25OOTBW4.cjs +0 -80
  183. package/dist/lib/node/app-graph-builder-25OOTBW4.cjs.map +0 -7
  184. package/dist/lib/node/artifact-definition-QKZI6PTO.cjs +0 -265
  185. package/dist/lib/node/artifact-definition-QKZI6PTO.cjs.map +0 -7
  186. package/dist/lib/node/chunk-AU2FOE26.cjs +0 -369
  187. package/dist/lib/node/chunk-AU2FOE26.cjs.map +0 -7
  188. package/dist/lib/node/chunk-BUOBOT3V.cjs +0 -179
  189. package/dist/lib/node/chunk-BUOBOT3V.cjs.map +0 -7
  190. package/dist/lib/node/chunk-HCRW6T3G.cjs +0 -60
  191. package/dist/lib/node/chunk-HCRW6T3G.cjs.map +0 -7
  192. package/dist/lib/node/chunk-OSBMUJ4T.cjs +0 -580
  193. package/dist/lib/node/chunk-OSBMUJ4T.cjs.map +0 -7
  194. package/dist/lib/node/chunk-QG2X6J74.cjs +0 -52
  195. package/dist/lib/node/chunk-QG2X6J74.cjs.map +0 -7
  196. package/dist/lib/node/chunk-YO5W2IPQ.cjs +0 -251
  197. package/dist/lib/node/chunk-YO5W2IPQ.cjs.map +0 -7
  198. package/dist/lib/node/chunk-ZEV3VARQ.cjs +0 -34
  199. package/dist/lib/node/chunk-ZEV3VARQ.cjs.map +0 -7
  200. package/dist/lib/node/compiler-TFSJRLL4.cjs +0 -104
  201. package/dist/lib/node/compiler-TFSJRLL4.cjs.map +0 -7
  202. package/dist/lib/node/index.cjs +0 -225
  203. package/dist/lib/node/index.cjs.map +0 -7
  204. package/dist/lib/node/intent-resolver-BQ2NKEM7.cjs +0 -100
  205. package/dist/lib/node/intent-resolver-BQ2NKEM7.cjs.map +0 -7
  206. package/dist/lib/node/meta.json +0 -1
  207. package/dist/lib/node/react-surface-EUKPDFU3.cjs +0 -120
  208. package/dist/lib/node/react-surface-EUKPDFU3.cjs.map +0 -7
  209. package/dist/lib/node/settings-WO53FLYZ.cjs +0 -38
  210. package/dist/lib/node/settings-WO53FLYZ.cjs.map +0 -7
  211. package/dist/lib/node/types.cjs +0 -34
  212. package/dist/lib/node/types.cjs.map +0 -7
  213. package/dist/lib/node-esm/ScriptContainer-4IOOIPBF.mjs.map +0 -7
  214. package/dist/lib/node-esm/artifact-definition-4XRYAP54.mjs +0 -250
  215. package/dist/lib/node-esm/artifact-definition-4XRYAP54.mjs.map +0 -7
  216. package/dist/lib/node-esm/chunk-B4TP3LSZ.mjs.map +0 -7
  217. package/dist/lib/node-esm/chunk-MJJQBUOL.mjs.map +0 -7
  218. package/dist/lib/node-esm/chunk-T7XDCUTF.mjs.map +0 -7
  219. package/dist/lib/node-esm/chunk-UESZKXLR.mjs.map +0 -7
  220. package/dist/lib/node-esm/chunk-W2DAXWHA.mjs +0 -365
  221. package/dist/lib/node-esm/chunk-W2DAXWHA.mjs.map +0 -7
  222. package/dist/lib/node-esm/compiler-7PQ4D43R.mjs.map +0 -7
  223. package/dist/lib/node-esm/intent-resolver-HTM5PSRZ.mjs.map +0 -7
  224. package/dist/lib/node-esm/react-surface-6UO64YOS.mjs.map +0 -7
  225. package/dist/types/src/types.d.ts.map +0 -1
  226. /package/dist/lib/browser/{DeploymentDialog-RPPPWEEL.mjs.map → DeploymentDialog-QZSTVNIS.mjs.map} +0 -0
  227. /package/dist/lib/browser/{chunk-YSQMXTYO.mjs.map → chunk-5TVBECWH.mjs.map} +0 -0
  228. /package/dist/lib/browser/{chunk-6ZHHWU6S.mjs.map → chunk-QYAREHGH.mjs.map} +0 -0
  229. /package/dist/lib/browser/{types.mjs.map → templates/index.mjs.map} +0 -0
  230. /package/dist/lib/{node-esm/DeploymentDialog-IA4CH6WZ.mjs.map → browser/types/index.mjs.map} +0 -0
  231. /package/dist/lib/node-esm/{types.mjs.map → DeploymentDialog-G6EHEPXN.mjs.map} +0 -0
  232. /package/dist/lib/node-esm/{chunk-2KJYPUQD.mjs.map → chunk-35M3CHYE.mjs.map} +0 -0
  233. /package/dist/lib/node-esm/{chunk-AEB5TPEW.mjs.map → chunk-AHXJ6NQU.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["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.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/echo.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", "../../../src/templates/index.ts"],
4
+ "sourcesContent": ["//\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\n// @ts-ignore\nimport { S, defineFunction } from 'dxos:functions';\n// @ts-ignore\nimport { Chess } from 'https://esm.sh/chess.js@0.13.1?bundle=false';\n\nexport default defineFunction({\n description: 'Plays a random move in a chess game.',\n\n inputSchema: S.Struct({\n changedObjectId: S.String.annotations({\n description: 'The objects to play the game on.',\n }),\n player: S.optional(S.Literal('w', 'b')).annotations({\n description: 'The player to play the game as.',\n }),\n }),\n\n outputSchema: S.Struct({\n state: S.String.annotations({\n description: 'The state of the game as an ASCII art board.',\n }),\n }),\n\n handler: async ({ data: { changedObjectId, player = 'b' }, context: { space } }: any) => {\n const { pgn } = await space.db.query({ id: changedObjectId }).first();\n const game = new Chess();\n game.load_pgn(pgn);\n if (game.turn() !== player) {\n return new Response('Invalid turn', { status: 409 });\n }\n\n const moves = game.moves();\n const move = moves[Math.floor(Math.random() * moves.length)];\n if (!move) {\n return new Response('No legal moves', { status: 406 });\n }\n\n game.move(move);\n const newPgn = game.pgn();\n await space.db.update({ id: changedObjectId }, { pgn: newPgn, fen: game.fen() });\n return { state: game.ascii() };\n },\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 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.addSchema([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 { Config, Effect, Redacted, Ref } from 'https://esm.sh/effect@3.17.0?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 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 * Echos the request data.\n */\nexport default async ({ data }: any) => data;\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\n// @ts-ignore\nimport { S, defineFunction } from 'dxos:functions';\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 { Effect, Schedule } from 'https://esm.sh/effect@3.17.0?bundle=false';\n\nexport default defineFunction({\n description: 'Returns the exchange rate between two currencies.',\n\n inputSchema: S.Struct({\n from: S.String.annotations({ description: 'The source currency' }),\n to: S.String.annotations({ description: 'The target currency' }),\n }),\n\n outputSchema: S.String.annotations({ description: 'The exchange rate between the two currencies' }),\n\n handler: async ({ data: { from, to } }: any) =>\n Effect.gen(function* () {\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.data.rates[to].toString();\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @ts-ignore\nimport { S, defineFunction } from 'dxos:functions';\n\nexport default defineFunction({\n description: 'Returns the exchange rate between two currencies.',\n\n inputSchema: S.Struct({\n from: S.String.annotations({ description: 'The source currency' }),\n to: S.String.annotations({ description: 'The target currency' }),\n }),\n\n handler: async ({ data: { from, to } }: any) => {\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 { Chunk, Effect, Ref, Schedule, Stream, pipe } from 'https://esm.sh/effect@3.17.0?bundle=false';\n\nexport default defineFunction({\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 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 && parseEmailString(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* 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 parseEmailString = (emailString: string): { name?: string; email: string } | undefined => {\n const match = emailString.match(/^([^<]+?)\\s*<([^>]+@[^>]+)>$/);\n if (match) {\n const [, name, email] = match;\n return {\n name: name.trim(),\n email: email.trim(),\n };\n }\n\n return undefined;\n};\n\n//\n// Schemas\n// TODO(wittjosiah): These schemas should be imported from @dxos/schema.\n//\n\nconst ActorRoles = ['user', 'assistant'] as const;\nconst ActorRole = S.Literal(...ActorRoles);\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 2024 DXOS.org\n//\n\nimport chat from './chat.ts?raw';\nimport chess from './chess.ts?raw';\nimport dataGenerator from './data-generator.ts?raw';\nimport discord from './discord.ts?raw';\nimport echo from './echo.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';\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: Template[] = [\n {\n id: 'dxos.org/script/echo',\n name: 'Echo',\n source: removeHeader(echo),\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',\n name: 'Chess',\n source: removeHeader(chess),\n presetId: 'dxos.org/function/chess',\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"],
5
+ "mappings": ";;;AAAA;;;ACAA;;;ACAA;;;ACAA;;;ACAA;;;ACAA;;;ACAA;;;ACAA;;;ACAA;;;ACcA,IAAMA,eAAe,CAACC,QAAgBA,IAAIC,MAAM,IAAA,EAAMC,MAAM,CAAA,EAAGC,KAAK,IAAA;AAW7D,IAAMC,YAAwB;EACnC;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,aAAAA;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;;",
6
+ "names": ["removeHeader", "str", "split", "slice", "join", "templates", "id", "name", "source", "removeHeader", "echo", "forex", "forexEffect", "chat", "presetId", "chess", "email", "discord", "gmail", "dataGenerator"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
 
3
- // packages/plugins/plugin-script/src/meta.ts
3
+ // src/meta.ts
4
4
  var SCRIPT_PLUGIN = "dxos.org/plugin/script";
5
5
  var meta = {
6
6
  id: SCRIPT_PLUGIN,
@@ -27,4 +27,4 @@ export {
27
27
  meta,
28
28
  defaultScriptsForIntegration
29
29
  };
30
- //# sourceMappingURL=chunk-AEB5TPEW.mjs.map
30
+ //# sourceMappingURL=chunk-AHXJ6NQU.mjs.map
@@ -1,15 +1,14 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
- SCRIPT_PLUGIN
4
- } from "./chunk-AEB5TPEW.mjs";
3
+ meta
4
+ } from "./chunk-AHXJ6NQU.mjs";
5
5
 
6
- // packages/plugins/plugin-script/src/types.ts
6
+ // src/types/schema.ts
7
7
  import { Schema } from "effect";
8
8
  import { SpaceSchema } from "@dxos/client/echo";
9
9
  import { ScriptType } from "@dxos/functions";
10
10
  import { EditorInputMode } from "@dxos/react-ui-editor";
11
11
  (function(ScriptAction2) {
12
- const SCRIPT_ACTION = `${SCRIPT_PLUGIN}/action`;
13
12
  ScriptAction2.CreateScriptSchema = Schema.Struct({
14
13
  name: Schema.optional(Schema.String),
15
14
  // TODO(wittjosiah): Placeholder annotation?
@@ -18,7 +17,7 @@ import { EditorInputMode } from "@dxos/react-ui-editor";
18
17
  })),
19
18
  initialTemplateId: Schema.optional(Schema.String)
20
19
  });
21
- class Create extends Schema.TaggedClass()(`${SCRIPT_ACTION}/create`, {
20
+ class Create extends Schema.TaggedClass()(`${meta.id}/action/create`, {
22
21
  input: Schema.extend(ScriptAction2.CreateScriptSchema, Schema.Struct({
23
22
  space: SpaceSchema
24
23
  })),
@@ -38,4 +37,4 @@ export {
38
37
  ScriptSettingsSchema,
39
38
  ScriptAction
40
39
  };
41
- //# sourceMappingURL=chunk-UESZKXLR.mjs.map
40
+ //# sourceMappingURL=chunk-JIPFLBYA.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/schema.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { SpaceSchema } from '@dxos/client/echo';\nimport { ScriptType } from '@dxos/functions';\nimport { EditorInputMode } from '@dxos/react-ui-editor';\n\nimport { meta } from '../meta';\n\nexport namespace ScriptAction {\n export const CreateScriptSchema = Schema.Struct({\n name: Schema.optional(Schema.String),\n // TODO(wittjosiah): Placeholder annotation?\n gistUrl: Schema.optional(Schema.String.annotations({ title: 'Import from Gist (url)' })),\n initialTemplateId: Schema.optional(Schema.String),\n });\n\n export type CreateScriptProps = Schema.Schema.Type<typeof CreateScriptSchema>;\n\n export class Create extends Schema.TaggedClass<Create>()(`${meta.id}/action/create`, {\n input: Schema.extend(CreateScriptSchema, Schema.Struct({ space: SpaceSchema })),\n output: Schema.Struct({\n object: ScriptType,\n }),\n }) {}\n}\n\nexport const ScriptSettingsSchema = Schema.mutable(\n Schema.Struct({\n editorInputMode: EditorInputMode,\n }),\n);\n\nexport type ScriptSettingsProps = Schema.Schema.Type<typeof ScriptSettingsSchema>;\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,cAAc;AAEvB,SAASC,mBAAmB;AAC5B,SAASC,kBAAkB;AAC3B,SAASC,uBAAuB;UAIfC,eAAAA;gBACFC,qBAAqBC,OAAOC,OAAO;IAC9CC,MAAMF,OAAOG,SAASH,OAAOI,MAAM;;IAEnCC,SAASL,OAAOG,SAASH,OAAOI,OAAOE,YAAY;MAAEC,OAAO;IAAyB,CAAA,CAAA;IACrFC,mBAAmBR,OAAOG,SAASH,OAAOI,MAAM;EAClD,CAAA;EAIO,MAAMK,eAAeT,OAAOU,YAAW,EAAW,GAAGC,KAAKC,EAAE,kBAAkB;IACnFC,OAAOb,OAAOc,OAAMhB,cAACC,oBAAoBC,OAAOC,OAAO;MAAEc,OAAOC;IAAY,CAAA,CAAA;IAC5EC,QAAQjB,OAAOC,OAAO;MACpBiB,QAAQC;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBALSV,SAAAA;AAMf,GAhBiBX,iBAAAA,eAAAA,CAAAA,EAAAA;AAkBV,IAAMsB,uBAAuBpB,OAAOqB,QACzCrB,OAAOC,OAAO;EACZqB,iBAAiBC;AACnB,CAAA,CAAA;;",
6
+ "names": ["Schema", "SpaceSchema", "ScriptType", "EditorInputMode", "ScriptAction", "CreateScriptSchema", "Schema", "Struct", "name", "optional", "String", "gistUrl", "annotations", "title", "initialTemplateId", "Create", "TaggedClass", "meta", "id", "input", "extend", "space", "SpaceSchema", "output", "object", "ScriptType", "ScriptSettingsSchema", "mutable", "editorInputMode", "EditorInputMode"]
7
+ }
@@ -1,20 +1,20 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  ScriptAction
4
- } from "./chunk-UESZKXLR.mjs";
4
+ } from "./chunk-JIPFLBYA.mjs";
5
5
 
6
- // packages/plugins/plugin-script/src/util/functions.ts
7
- import { getInvocationUrl, getUserFunctionUrlInMetadata } from "@dxos/functions";
6
+ // src/util/functions.ts
7
+ import { getInvocationUrl, getUserFunctionIdInMetadata } from "@dxos/functions";
8
8
  import { log } from "@dxos/log";
9
9
  import { getMeta, getSpace } from "@dxos/react-client/echo";
10
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/util/functions.ts";
10
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-script/src/util/functions.ts";
11
11
  var getFunctionUrl = ({ script, fn, edgeUrl }) => {
12
12
  const space = getSpace(script);
13
- const existingFunctionUrl = fn && getUserFunctionUrlInMetadata(getMeta(fn));
14
- if (!existingFunctionUrl) {
13
+ const existingFunctionId = fn && getUserFunctionIdInMetadata(getMeta(fn));
14
+ if (!existingFunctionId) {
15
15
  return void 0;
16
16
  }
17
- return getInvocationUrl(existingFunctionUrl, edgeUrl, {
17
+ return getInvocationUrl(existingFunctionId, edgeUrl, {
18
18
  spaceId: space?.id
19
19
  });
20
20
  };
@@ -59,18 +59,18 @@ var updateFunctionMetadata = (script, storedFunction, meta, functionId) => {
59
59
  }
60
60
  };
61
61
 
62
- // packages/plugins/plugin-script/src/util/deploy.ts
62
+ // src/util/deploy.ts
63
63
  import { Obj, Ref } from "@dxos/echo";
64
- import { FunctionType, getUserFunctionUrlInMetadata as getUserFunctionUrlInMetadata2, makeFunctionUrl, setUserFunctionUrlInMetadata } from "@dxos/functions";
64
+ import { FunctionType, getUserFunctionIdInMetadata as getUserFunctionIdInMetadata2, setUserFunctionIdInMetadata } from "@dxos/functions";
65
65
  import { Bundler } from "@dxos/functions/bundler";
66
66
  import { incrementSemverPatch, uploadWorkerFunction } from "@dxos/functions/edge";
67
67
  import { log as log2 } from "@dxos/log";
68
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/util/deploy.ts";
68
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-script/src/util/deploy.ts";
69
69
  var isScriptDeployed = ({ script, fn }) => {
70
- const existingFunctionUrl = fn && getUserFunctionUrlInMetadata2(Obj.getMeta(fn));
71
- return Boolean(existingFunctionUrl) && !script.changed;
70
+ const existingFunctionId = fn && getUserFunctionIdInMetadata2(Obj.getMeta(fn));
71
+ return Boolean(existingFunctionId) && !script.changed;
72
72
  };
73
- var deployScript = async ({ script, client, space, fn, existingFunctionUrl }) => {
73
+ var deployScript = async ({ script, client, space, fn, existingFunctionId }) => {
74
74
  const validationError = validateDeployInputs(script, space);
75
75
  if (validationError) {
76
76
  return {
@@ -79,17 +79,26 @@ var deployScript = async ({ script, client, space, fn, existingFunctionUrl }) =>
79
79
  };
80
80
  }
81
81
  try {
82
- const existingFunctionId = extractFunctionId(existingFunctionUrl);
83
- const { bundle, error } = await bundleScript(script.source.target.content);
84
- if (error || !bundle) {
85
- throw error || new Error("Bundle creation failed");
82
+ const bundler = new Bundler({
83
+ platform: "browser",
84
+ sandboxedModules: [],
85
+ remoteModules: {}
86
+ });
87
+ const buildResult = await bundler.bundle({
88
+ source: script.source.target.content
89
+ });
90
+ if ("error" in buildResult) {
91
+ throw buildResult.error || new Error("Bundle creation failed");
86
92
  }
87
93
  const { functionId, version, meta } = await uploadWorkerFunction({
88
94
  client,
89
95
  ownerPublicKey: space.key,
90
96
  version: fn ? incrementSemverPatch(fn.version) : "0.0.1",
91
97
  functionId: existingFunctionId,
92
- source: bundle
98
+ entryPoint: buildResult.entryPoint,
99
+ assets: {
100
+ [buildResult.entryPoint]: buildResult.asset
101
+ }
93
102
  });
94
103
  if (functionId === void 0 || version === void 0) {
95
104
  throw new Error(`Upload didn't return expected data: ${JSON.stringify({
@@ -100,18 +109,15 @@ var deployScript = async ({ script, client, space, fn, existingFunctionUrl }) =>
100
109
  const storedFunction = createOrUpdateFunctionInSpace(space, fn, script, functionId, version);
101
110
  script.changed = false;
102
111
  updateFunctionMetadata(script, storedFunction, meta, functionId);
103
- const functionUrl = makeFunctionUrl({
104
- functionId
105
- });
106
- setUserFunctionUrlInMetadata(Obj.getMeta(storedFunction), functionUrl);
112
+ setUserFunctionIdInMetadata(Obj.getMeta(storedFunction), functionId);
107
113
  return {
108
114
  success: true,
109
- functionUrl
115
+ functionId
110
116
  };
111
117
  } catch (err) {
112
118
  log2.catch(err, void 0, {
113
119
  F: __dxlog_file2,
114
- L: 80,
120
+ L: 78,
115
121
  S: void 0,
116
122
  C: (f, a) => f(...a)
117
123
  });
@@ -127,41 +133,24 @@ var validateDeployInputs = (script, space) => {
127
133
  }
128
134
  return null;
129
135
  };
130
- var extractFunctionId = (functionUrl) => {
131
- return functionUrl?.split("/").at(-1);
132
- };
133
- var bundleScript = async (source) => {
134
- const bundler = new Bundler({
135
- platform: "browser",
136
- sandboxedModules: [],
137
- remoteModules: {}
138
- });
139
- const buildResult = await bundler.bundle({
140
- source
141
- });
142
- if (buildResult.error || !buildResult.bundle) {
143
- return {
144
- error: buildResult.error || new Error("Bundle creation failed")
145
- };
146
- }
147
- return {
148
- bundle: buildResult.bundle
149
- };
150
- };
151
136
  var createOrUpdateFunctionInSpace = (space, fn, script, functionId, version) => {
152
137
  if (fn) {
138
+ fn.name = script.name ?? "New Function";
153
139
  fn.version = version;
154
140
  return fn;
155
141
  } else {
156
- return space.db.add(Obj.make(FunctionType, {
157
- name: functionId,
142
+ const fn2 = Obj.make(FunctionType, {
143
+ name: script.name ?? "New Function",
158
144
  version,
159
145
  source: Ref.make(script)
160
- }));
146
+ });
147
+ space.db.add(fn2);
148
+ setUserFunctionIdInMetadata(Obj.getMeta(fn2), functionId);
149
+ return fn2;
161
150
  }
162
151
  };
163
152
 
164
- // packages/plugins/plugin-script/src/hooks/useCreateAndDeployScriptTemplates.ts
153
+ // src/hooks/useCreateAndDeployScriptTemplates.ts
165
154
  import { pipe } from "effect/Function";
166
155
  import { useCallback, useState } from "react";
167
156
  import { chain, createIntent, useIntentDispatcher } from "@dxos/app-framework";
@@ -170,7 +159,7 @@ import { ScriptType } from "@dxos/functions";
170
159
  import { invariant } from "@dxos/invariant";
171
160
  import { SpaceAction } from "@dxos/plugin-space/types";
172
161
  import { useClient } from "@dxos/react-client";
173
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/hooks/useCreateAndDeployScriptTemplates.ts";
162
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-script/src/hooks/useCreateAndDeployScriptTemplates.ts";
174
163
  var useCreateAndDeployScriptTemplates = (space, scriptTemplates) => {
175
164
  const { dispatchPromise: dispatch } = useIntentDispatcher();
176
165
  const client = useClient();
@@ -231,4 +220,4 @@ export {
231
220
  deployScript,
232
221
  useCreateAndDeployScriptTemplates
233
222
  };
234
- //# sourceMappingURL=chunk-MJJQBUOL.mjs.map
223
+ //# sourceMappingURL=chunk-M642JUOZ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/util/functions.ts", "../../../src/util/deploy.ts", "../../../src/hooks/useCreateAndDeployScriptTemplates.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ScriptType, getInvocationUrl, getUserFunctionIdInMetadata } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { getMeta, getSpace } from '@dxos/react-client/echo';\n\n/**\n * Get the function URL for a given script and client configuration\n */\nexport const getFunctionUrl = ({\n script,\n fn,\n edgeUrl,\n}: {\n script: ScriptType;\n fn: any;\n edgeUrl: string;\n}): string | undefined => {\n const space = getSpace(script);\n const existingFunctionId = fn && getUserFunctionIdInMetadata(getMeta(fn));\n\n if (!existingFunctionId) {\n return undefined;\n }\n\n return getInvocationUrl(existingFunctionId, edgeUrl, {\n spaceId: space?.id,\n });\n};\n\nexport const updateFunctionMetadata = (script: ScriptType, storedFunction: any, meta: any, functionId: string) => {\n if (script.description !== undefined && script.description.trim() !== '') {\n storedFunction.description = script.description;\n } else if (meta.description) {\n storedFunction.description = meta.description;\n } else {\n log.verbose('no description in function metadata', { functionId });\n }\n\n if (meta.inputSchema) {\n storedFunction.inputSchema = meta.inputSchema;\n } else {\n log.verbose('no input schema in function metadata', { functionId });\n }\n\n if (meta.outputSchema) {\n storedFunction.outputSchema = meta.outputSchema;\n } else {\n log.verbose('no output schema in function metadata', { functionId });\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Client } from '@dxos/client';\nimport { Obj, Ref } from '@dxos/echo';\nimport {\n FunctionType,\n type ScriptType,\n getUserFunctionIdInMetadata,\n setUserFunctionIdInMetadata,\n} from '@dxos/functions';\nimport { Bundler } from '@dxos/functions/bundler';\nimport { incrementSemverPatch, uploadWorkerFunction } from '@dxos/functions/edge';\nimport { log } from '@dxos/log';\nimport { type Space } from '@dxos/react-client/echo';\n\nimport { updateFunctionMetadata } from './functions';\n\nexport const isScriptDeployed = ({ script, fn }: { script: ScriptType; fn: any }): boolean => {\n const existingFunctionId = fn && getUserFunctionIdInMetadata(Obj.getMeta(fn));\n return Boolean(existingFunctionId) && !script.changed;\n};\n\ntype DeployScriptProps = {\n script: ScriptType;\n client: Client;\n space: Space;\n fn?: FunctionType;\n existingFunctionId?: string;\n};\n\ntype DeployScriptResult = { success: boolean; error?: Error; functionId?: string };\n\n/**\n * Deploy a script to a space, handling bundling and uploading to the FaaS infrastructure.\n */\nexport const deployScript = async ({\n script,\n client,\n space,\n fn,\n existingFunctionId,\n}: DeployScriptProps): Promise<DeployScriptResult> => {\n const validationError = validateDeployInputs(script, space);\n if (validationError) {\n return { success: false, error: validationError };\n }\n\n try {\n const bundler = new Bundler({ platform: 'browser', sandboxedModules: [], remoteModules: {} });\n const buildResult = await bundler.bundle({ source: script.source!.target!.content });\n if ('error' in buildResult) {\n throw buildResult.error || new Error('Bundle creation failed');\n }\n\n const { functionId, version, meta } = await uploadWorkerFunction({\n client,\n ownerPublicKey: space.key,\n version: fn ? incrementSemverPatch(fn.version) : '0.0.1',\n functionId: existingFunctionId,\n entryPoint: buildResult.entryPoint,\n assets: { [buildResult.entryPoint]: buildResult.asset },\n });\n\n if (functionId === undefined || version === undefined) {\n throw new Error(`Upload didn't return expected data: ${JSON.stringify({ functionId, version })}`);\n }\n\n const storedFunction = createOrUpdateFunctionInSpace(space, fn, script, functionId, version);\n script.changed = false;\n updateFunctionMetadata(script, storedFunction, meta, functionId);\n\n setUserFunctionIdInMetadata(Obj.getMeta(storedFunction), functionId);\n\n return { success: true, functionId };\n } catch (err: any) {\n log.catch(err);\n return { success: false, error: err };\n }\n};\n\n/**\n * Validate inputs for script deployment.\n */\nconst validateDeployInputs = (script: ScriptType, space: Space): Error | null => {\n if (!script.source || !space) {\n return new Error('Script source or space not available');\n }\n return null;\n};\n\nconst createOrUpdateFunctionInSpace = (\n space: Space,\n fn: FunctionType | undefined,\n script: ScriptType,\n functionId: string,\n version: string,\n): FunctionType => {\n if (fn) {\n fn.name = script.name ?? 'New Function';\n fn.version = version;\n return fn;\n } else {\n const fn = Obj.make(FunctionType, { name: script.name ?? 'New Function', version, source: Ref.make(script) });\n space.db.add(fn);\n setUserFunctionIdInMetadata(Obj.getMeta(fn), functionId);\n return fn;\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { pipe } from 'effect/Function';\nimport { useCallback, useState } from 'react';\n\nimport { chain, createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { ScriptType } from '@dxos/functions';\nimport { invariant } from '@dxos/invariant';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { useClient } from '@dxos/react-client';\nimport { type Space } from '@dxos/react-client/echo';\n\nimport { type Template } from '../templates';\nimport { ScriptAction } from '../types';\nimport { deployScript } from '../util';\n\ntype DeploymentStatus = 'idle' | 'pending' | 'success' | 'error';\n\n/**\n * Hook for creating and deploying multiple script templates concurrently.\n *\n * Takes a space and an array of script template IDs, then provides a callback\n * function that creates each script from its template and deploys it to the space.\n * All creation / deployment operations run concurrently for improved performance.\n */\nexport const useCreateAndDeployScriptTemplates = (space: Space | undefined, scriptTemplates: Template[]) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const client = useClient();\n const [status, setStatus] = useState<DeploymentStatus>('idle');\n const [error, setError] = useState<Error | undefined>(undefined);\n\n const handleCreateAndDeployScripts = useCallback(async () => {\n invariant(space);\n setStatus('pending');\n setError(undefined);\n\n const deploymentResults = await Promise.all(\n scriptTemplates.map(async (template) => {\n const result = await dispatch(\n pipe(\n createIntent(ScriptAction.Create, { space, initialTemplateId: template.id }),\n chain(SpaceAction.AddObject, { target: space }),\n ),\n );\n invariant(Obj.instanceOf(ScriptType, result.data?.object));\n\n return deployScript({ space, client, script: result.data.object });\n }),\n );\n\n const hasErrors = deploymentResults.some((result) => !result.success);\n setStatus(hasErrors ? 'error' : 'success');\n }, [space, dispatch, client, scriptTemplates]);\n\n // TODO(burdon): Return onCreateAndDeployScripts.\n return { handleCreateAndDeployScripts, status, error };\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["getInvocationUrl", "getUserFunctionIdInMetadata", "log", "getMeta", "getSpace", "getFunctionUrl", "script", "fn", "edgeUrl", "space", "existingFunctionId", "undefined", "spaceId", "id", "updateFunctionMetadata", "storedFunction", "meta", "functionId", "description", "trim", "verbose", "inputSchema", "outputSchema", "Obj", "Ref", "FunctionType", "getUserFunctionIdInMetadata", "setUserFunctionIdInMetadata", "Bundler", "incrementSemverPatch", "uploadWorkerFunction", "log", "isScriptDeployed", "script", "fn", "existingFunctionId", "getUserFunctionIdInMetadata", "Obj", "getMeta", "Boolean", "changed", "deployScript", "client", "space", "validationError", "validateDeployInputs", "success", "error", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "bundle", "source", "target", "content", "Error", "functionId", "version", "meta", "uploadWorkerFunction", "ownerPublicKey", "key", "incrementSemverPatch", "entryPoint", "assets", "asset", "undefined", "JSON", "stringify", "storedFunction", "createOrUpdateFunctionInSpace", "updateFunctionMetadata", "setUserFunctionIdInMetadata", "err", "log", "catch", "name", "make", "FunctionType", "Ref", "db", "add", "pipe", "useCallback", "useState", "chain", "createIntent", "useIntentDispatcher", "Obj", "ScriptType", "invariant", "SpaceAction", "useClient", "useCreateAndDeployScriptTemplates", "space", "scriptTemplates", "dispatchPromise", "dispatch", "useIntentDispatcher", "client", "useClient", "status", "setStatus", "useState", "error", "setError", "undefined", "handleCreateAndDeployScripts", "useCallback", "invariant", "deploymentResults", "Promise", "all", "map", "template", "result", "pipe", "createIntent", "ScriptAction", "Create", "initialTemplateId", "id", "chain", "SpaceAction", "AddObject", "target", "Obj", "instanceOf", "ScriptType", "data", "object", "deployScript", "script", "hasErrors", "some", "success"]
7
+ }
@@ -2,24 +2,24 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
  import {
3
3
  useDeployState,
4
4
  useToolbarState
5
- } from "./chunk-W2DAXWHA.mjs";
5
+ } from "./chunk-WXKOIREL.mjs";
6
6
  import {
7
7
  SCRIPT_PLUGIN,
8
8
  meta
9
- } from "./chunk-AEB5TPEW.mjs";
9
+ } from "./chunk-AHXJ6NQU.mjs";
10
10
 
11
- // packages/plugins/plugin-script/src/components/Settings/ScriptObjectSettings.tsx
11
+ // src/components/Settings/ScriptObjectSettings.tsx
12
12
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
13
13
  import { Octokit } from "@octokit/core";
14
- import React, { useCallback, useEffect, useState } from "react";
15
- import { createIntent, SettingsAction, useIntentDispatcher } from "@dxos/app-framework";
16
- import { FunctionType, getInvocationUrl, getUserFunctionUrlInMetadata } from "@dxos/functions";
14
+ import React, { useCallback, useState } from "react";
15
+ import { SettingsAction, createIntent, useIntentDispatcher } from "@dxos/app-framework";
16
+ import { FunctionType, getInvocationUrl, getUserFunctionIdInMetadata } from "@dxos/functions";
17
17
  import { log } from "@dxos/log";
18
18
  import { useClient } from "@dxos/react-client";
19
- import { Filter, getMeta, getSpace, Ref, useQuery } from "@dxos/react-client/echo";
20
- import { Button, Clipboard, Input, useControlledState, useTranslation } from "@dxos/react-ui";
19
+ import { Filter, Ref, getMeta, getSpace, useQuery } from "@dxos/react-client/echo";
20
+ import { Button, Clipboard, Input, useAsyncEffect, useControlledState, useTranslation } from "@dxos/react-ui";
21
21
  import { DataType } from "@dxos/schema";
22
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/components/Settings/ScriptObjectSettings.tsx";
22
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-script/src/components/Settings/ScriptObjectSettings.tsx";
23
23
  var ScriptObjectSettings = ({ object }) => {
24
24
  var _effect = _useSignals();
25
25
  try {
@@ -56,8 +56,8 @@ var Binding = ({ object }) => {
56
56
  const [fn] = useQuery(space, Filter.type(FunctionType, {
57
57
  source: Ref.make(object)
58
58
  }));
59
- const functionPath = fn && getUserFunctionUrlInMetadata(getMeta(fn));
60
- const functionUrl = functionPath && getInvocationUrl(functionPath, client.config.values.runtime?.services?.edge?.url ?? "", {
59
+ const functionId = fn && getUserFunctionIdInMetadata(getMeta(fn));
60
+ const functionUrl = functionId && getInvocationUrl(functionId, client.config.values.runtime?.services?.edge?.url ?? "", {
61
61
  spaceId: space?.id
62
62
  });
63
63
  const [binding, setBinding] = useControlledState(fn?.binding ?? "");
@@ -116,33 +116,30 @@ var Publishing = ({ object }) => {
116
116
  }));
117
117
  const gistKey = getMeta(object).keys.find(({ source }) => source === "github.com");
118
118
  const [gistUrl, setGistUrl] = useState();
119
- useEffect(() => {
119
+ useAsyncEffect(async () => {
120
120
  const token = githubToken?.token;
121
121
  const gistId = gistKey?.id;
122
122
  if (!token || !gistId) {
123
123
  setGistUrl(void 0);
124
124
  return;
125
125
  }
126
- const timeout = setTimeout(async () => {
127
- try {
128
- const octokit = new Octokit({
129
- auth: githubToken.token
130
- });
131
- const response = await octokit.request("GET /gists/{gist_id}", {
132
- gist_id: gistId
133
- });
134
- setGistUrl(response.data.html_url);
135
- } catch (err) {
136
- log.catch(err, void 0, {
137
- F: __dxlog_file,
138
- L: 135,
139
- S: void 0,
140
- C: (f, a) => f(...a)
141
- });
142
- setGistUrl(void 0);
143
- }
144
- });
145
- return () => clearTimeout(timeout);
126
+ try {
127
+ const octokit = new Octokit({
128
+ auth: githubToken.token
129
+ });
130
+ const response = await octokit.request("GET /gists/{gist_id}", {
131
+ gist_id: gistId
132
+ });
133
+ setGistUrl(response.data.html_url);
134
+ } catch (err) {
135
+ log.catch(err, void 0, {
136
+ F: __dxlog_file,
137
+ L: 134,
138
+ S: void 0,
139
+ C: (f, a) => f(...a)
140
+ });
141
+ setGistUrl(void 0);
142
+ }
146
143
  }, [
147
144
  githubToken,
148
145
  gistKey
@@ -213,13 +210,13 @@ var Publishing = ({ object }) => {
213
210
  };
214
211
  var kebabize = (str) => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? "-" : "") + $.toLowerCase());
215
212
 
216
- // packages/plugins/plugin-script/src/components/Settings/ScriptPluginSettings.tsx
213
+ // src/components/Settings/ScriptPluginSettings.tsx
217
214
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
218
215
  import React2 from "react";
219
216
  import { useClient as useClient2 } from "@dxos/react-client";
220
217
  import { Button as Button2, Select, useTranslation as useTranslation2 } from "@dxos/react-ui";
221
218
  import { EditorInputModes } from "@dxos/react-ui-editor";
222
- import { DeprecatedFormContainer, DeprecatedFormInput } from "@dxos/react-ui-form";
219
+ import { ControlGroup, ControlItemInput, ControlPage, ControlSection } from "@dxos/react-ui-form";
223
220
  var ScriptPluginSettings = ({ settings }) => {
224
221
  var _effect = _useSignals2();
225
222
  try {
@@ -246,12 +243,16 @@ var ScriptPluginSettings = ({ settings }) => {
246
243
  }
247
244
  ]);
248
245
  };
249
- return /* @__PURE__ */ React2.createElement(DeprecatedFormContainer, null, /* @__PURE__ */ React2.createElement(DeprecatedFormInput, {
250
- label: t("authenticate action label")
246
+ return /* @__PURE__ */ React2.createElement(ControlPage, null, /* @__PURE__ */ React2.createElement(ControlSection, {
247
+ title: t("settings title", {
248
+ ns: meta.id
249
+ })
250
+ }, /* @__PURE__ */ React2.createElement(ControlGroup, null, /* @__PURE__ */ React2.createElement(ControlItemInput, {
251
+ title: t("authenticate action label")
251
252
  }, /* @__PURE__ */ React2.createElement(Button2, {
252
253
  onClick: handleAuthenticate
253
- }, t("authenticate button label"))), /* @__PURE__ */ React2.createElement(DeprecatedFormInput, {
254
- label: t("editor input mode label")
254
+ }, t("authenticate button label"))), /* @__PURE__ */ React2.createElement(ControlItemInput, {
255
+ title: t("editor input mode label")
255
256
  }, /* @__PURE__ */ React2.createElement(Select.Root, {
256
257
  value: settings.editorInputMode ?? "default",
257
258
  onValueChange: (value) => {
@@ -262,20 +263,20 @@ var ScriptPluginSettings = ({ settings }) => {
262
263
  }), /* @__PURE__ */ React2.createElement(Select.Portal, null, /* @__PURE__ */ React2.createElement(Select.Content, null, /* @__PURE__ */ React2.createElement(Select.Viewport, null, EditorInputModes.map((mode) => /* @__PURE__ */ React2.createElement(Select.Option, {
263
264
  key: mode,
264
265
  value: mode
265
- }, t(`settings editor input mode ${mode} label`)))))))));
266
+ }, t(`settings editor input mode ${mode} label`)))), /* @__PURE__ */ React2.createElement(Select.Arrow, null))))))));
266
267
  } finally {
267
268
  _effect.f();
268
269
  }
269
270
  };
270
271
 
271
- // packages/plugins/plugin-script/src/components/TestPanel/TestPanel.tsx
272
+ // src/components/TestPanel/TestPanel.tsx
272
273
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
273
- import React3, { forwardRef, useEffect as useEffect2, useRef, useState as useState2 } from "react";
274
+ import React3, { forwardRef, useEffect, useRef, useState as useState2 } from "react";
274
275
  import { log as log2 } from "@dxos/log";
275
276
  import { Avatar, Icon, Input as Input2, Toolbar, useTranslation as useTranslation3 } from "@dxos/react-ui";
276
277
  import { SyntaxHighlighter } from "@dxos/react-ui-syntax-highlighter";
277
278
  import { errorText, mx } from "@dxos/react-ui-theme";
278
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/components/TestPanel/TestPanel.tsx";
279
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-script/src/components/TestPanel/TestPanel.tsx";
279
280
  var TestPanel = ({ classNames, functionUrl }) => {
280
281
  var _effect = _useSignals3();
281
282
  try {
@@ -292,7 +293,7 @@ var TestPanel = ({ classNames, functionUrl }) => {
292
293
  }
293
294
  };
294
295
  const controller = useRef();
295
- useEffect2(() => {
296
+ useEffect(() => {
296
297
  return () => {
297
298
  handleStop();
298
299
  };
@@ -500,7 +501,7 @@ var MessageItem = ({ classNames, message }) => {
500
501
  className: mx(wrapper, type === "request" && "bg-primary-400 dark:bg-primary-600")
501
502
  }, text || "\xD8"), data && /* @__PURE__ */ React3.createElement(SyntaxHighlighter, {
502
503
  language: "json",
503
- className: mx(wrapper, "px-8 py-2 text-xs")
504
+ className: mx(wrapper, "text-xs")
504
505
  }, JSON.stringify(data, null, 2)));
505
506
  } finally {
506
507
  _effect.f();
@@ -519,11 +520,11 @@ var RobotAvatar = () => {
519
520
  }
520
521
  };
521
522
 
522
- // packages/plugins/plugin-script/src/components/TestPanel/TestContainer.tsx
523
+ // src/components/TestPanel/TestContainer.tsx
523
524
  import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
524
525
  import React4 from "react";
525
526
  import { StackItem } from "@dxos/react-ui-stack";
526
- var TestContainer = ({ script, role }) => {
527
+ var TestContainer = ({ script }) => {
527
528
  var _effect = _useSignals4();
528
529
  try {
529
530
  const state = useToolbarState();
@@ -531,9 +532,7 @@ var TestContainer = ({ script, role }) => {
531
532
  state,
532
533
  script
533
534
  });
534
- return /* @__PURE__ */ React4.createElement(StackItem.Content, {
535
- role
536
- }, /* @__PURE__ */ React4.createElement(TestPanel, {
535
+ return /* @__PURE__ */ React4.createElement(StackItem.Content, null, /* @__PURE__ */ React4.createElement(TestPanel, {
537
536
  functionUrl: state.functionUrl
538
537
  }));
539
538
  } finally {
@@ -541,10 +540,10 @@ var TestContainer = ({ script, role }) => {
541
540
  }
542
541
  };
543
542
 
544
- // packages/plugins/plugin-script/src/components/index.ts
543
+ // src/components/index.ts
545
544
  import { lazy } from "react";
546
- var ScriptContainer = lazy(() => import("./ScriptContainer-4IOOIPBF.mjs"));
547
- var DeploymentDialog = lazy(() => import("./DeploymentDialog-IA4CH6WZ.mjs"));
545
+ var ScriptContainer = lazy(() => import("./ScriptContainer-6AVJSLU4.mjs"));
546
+ var DeploymentDialog = lazy(() => import("./DeploymentDialog-G6EHEPXN.mjs"));
548
547
 
549
548
  export {
550
549
  ScriptObjectSettings,
@@ -555,4 +554,4 @@ export {
555
554
  ScriptContainer,
556
555
  DeploymentDialog
557
556
  };
558
- //# sourceMappingURL=chunk-B4TP3LSZ.mjs.map
557
+ //# sourceMappingURL=chunk-MPN2DI4P.mjs.map