@dxos/plugin-script 0.7.5-labs.e27f9b9 → 0.7.5-labs.f400bbc

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 (231) hide show
  1. package/dist/lib/browser/ScriptContainer-3RFMYKTV.mjs +258 -0
  2. package/dist/lib/browser/ScriptContainer-3RFMYKTV.mjs.map +7 -0
  3. package/dist/lib/browser/artifact-definition-4LWPD3DH.mjs +251 -0
  4. package/dist/lib/browser/artifact-definition-4LWPD3DH.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-SJ4J527G.mjs → chunk-5SXOHNAK.mjs} +4 -4
  6. package/dist/lib/browser/chunk-5SXOHNAK.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-ZM6T4HPR.mjs → chunk-6MOQ4BP3.mjs} +2 -2
  8. package/dist/lib/browser/chunk-FVVCAWNP.mjs +21 -0
  9. package/dist/lib/browser/chunk-FVVCAWNP.mjs.map +7 -0
  10. package/dist/lib/browser/{ScriptContainer-EBER222J.mjs → chunk-G2FYNDU4.mjs} +94 -305
  11. package/dist/lib/browser/chunk-G2FYNDU4.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-XPGBHZ3L.mjs → chunk-N46LE7FS.mjs} +2 -2
  13. package/dist/lib/browser/chunk-PZPYF7M4.mjs +69 -0
  14. package/dist/lib/browser/chunk-PZPYF7M4.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-PEYUXEY6.mjs → chunk-VTWBVFBK.mjs} +5 -7
  16. package/dist/lib/browser/{chunk-PEYUXEY6.mjs.map → chunk-VTWBVFBK.mjs.map} +3 -3
  17. package/dist/lib/browser/{compiler-HT53ILG7.mjs → compiler-YY2XSKHQ.mjs} +4 -6
  18. package/dist/lib/browser/compiler-YY2XSKHQ.mjs.map +7 -0
  19. package/dist/lib/browser/index.mjs +67 -36
  20. package/dist/lib/browser/index.mjs.map +4 -4
  21. package/dist/lib/browser/{intent-resolver-G2REMZHC.mjs → intent-resolver-D6FPY5ZA.mjs} +4 -4
  22. package/dist/lib/browser/meta.json +1 -1
  23. package/dist/lib/browser/{react-surface-GH4LL6CF.mjs → react-surface-G4C2PZ2K.mjs} +26 -10
  24. package/dist/lib/browser/react-surface-G4C2PZ2K.mjs.map +7 -0
  25. package/dist/lib/browser/{settings-YQQEU3DF.mjs → settings-SZCDKHWO.mjs} +3 -3
  26. package/dist/lib/browser/types.mjs +2 -2
  27. package/dist/lib/node/ScriptContainer-G6FZU4AM.cjs +274 -0
  28. package/dist/lib/node/ScriptContainer-G6FZU4AM.cjs.map +7 -0
  29. package/dist/lib/node/artifact-definition-BXQCFPAH.cjs +267 -0
  30. package/dist/lib/node/artifact-definition-BXQCFPAH.cjs.map +7 -0
  31. package/dist/lib/node/{chunk-EFTZN5X7.cjs → chunk-5UH3F7TA.cjs} +8 -5
  32. package/dist/lib/node/chunk-5UH3F7TA.cjs.map +7 -0
  33. package/dist/lib/node/{chunk-A2DI2G4D.cjs → chunk-ALY3N6PW.cjs} +6 -6
  34. package/dist/lib/node/{chunk-6VKZJ4MH.cjs → chunk-DJGLGRQV.cjs} +6 -6
  35. package/dist/lib/node/chunk-ITAJ3WRW.cjs +77 -0
  36. package/dist/lib/node/chunk-ITAJ3WRW.cjs.map +7 -0
  37. package/dist/lib/node/{chunk-DQRAVZM7.cjs → chunk-K3ZZWVXS.cjs} +7 -7
  38. package/dist/lib/node/chunk-K3ZZWVXS.cjs.map +7 -0
  39. package/dist/lib/node/{chunk-UAHKFS7F.cjs → chunk-TOXBGIEI.cjs} +9 -12
  40. package/dist/lib/node/{chunk-UAHKFS7F.cjs.map → chunk-TOXBGIEI.cjs.map} +3 -3
  41. package/dist/lib/node/chunk-XKYJYY3T.cjs +498 -0
  42. package/dist/lib/node/chunk-XKYJYY3T.cjs.map +7 -0
  43. package/dist/lib/node/{compiler-457ZR24G.cjs → compiler-UIBLKJKG.cjs} +9 -9
  44. package/dist/lib/node/compiler-UIBLKJKG.cjs.map +7 -0
  45. package/dist/lib/node/index.cjs +77 -48
  46. package/dist/lib/node/index.cjs.map +4 -4
  47. package/dist/lib/node/{intent-resolver-IWGK77AZ.cjs → intent-resolver-NYJFPD5B.cjs} +9 -9
  48. package/dist/lib/node/meta.json +1 -1
  49. package/dist/lib/node/{react-surface-3JKCVT5O.cjs → react-surface-EGSE3FMN.cjs} +33 -21
  50. package/dist/lib/node/react-surface-EGSE3FMN.cjs.map +7 -0
  51. package/dist/lib/node/{settings-NGHDYAVK.cjs → settings-SZFSMSKM.cjs} +9 -9
  52. package/dist/lib/node/types.cjs +4 -4
  53. package/dist/lib/node/types.cjs.map +1 -1
  54. package/dist/lib/node-esm/ScriptContainer-7FTCFIF3.mjs +259 -0
  55. package/dist/lib/node-esm/ScriptContainer-7FTCFIF3.mjs.map +7 -0
  56. package/dist/lib/node-esm/artifact-definition-KT4DK2LQ.mjs +252 -0
  57. package/dist/lib/node-esm/artifact-definition-KT4DK2LQ.mjs.map +7 -0
  58. package/dist/lib/node-esm/{chunk-XUWS7OTK.mjs → chunk-2AFXX34U.mjs} +4 -4
  59. package/dist/lib/node-esm/chunk-2AFXX34U.mjs.map +7 -0
  60. package/dist/lib/node-esm/{chunk-675XSDRN.mjs → chunk-CP5LXTK5.mjs} +2 -2
  61. package/dist/lib/node-esm/{ScriptContainer-56ES2HQ5.mjs → chunk-NRICF4KE.mjs} +94 -305
  62. package/dist/lib/node-esm/chunk-NRICF4KE.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-BHP545D7.mjs → chunk-P2V2Y5LV.mjs} +5 -2
  64. package/dist/lib/node-esm/chunk-P2V2Y5LV.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-TYGM5YLW.mjs → chunk-S64WSJQK.mjs} +5 -7
  66. package/dist/lib/node-esm/{chunk-TYGM5YLW.mjs.map → chunk-S64WSJQK.mjs.map} +3 -3
  67. package/dist/lib/node-esm/{chunk-JHGOPQVO.mjs → chunk-UNQFIERE.mjs} +2 -2
  68. package/dist/lib/node-esm/chunk-YIWRJ25J.mjs +71 -0
  69. package/dist/lib/node-esm/chunk-YIWRJ25J.mjs.map +7 -0
  70. package/dist/lib/node-esm/{compiler-PEARFTFR.mjs → compiler-XTXFGZJM.mjs} +4 -6
  71. package/dist/lib/node-esm/compiler-XTXFGZJM.mjs.map +7 -0
  72. package/dist/lib/node-esm/index.mjs +67 -36
  73. package/dist/lib/node-esm/index.mjs.map +4 -4
  74. package/dist/lib/node-esm/{intent-resolver-KGADFH3H.mjs → intent-resolver-KLBHSMW4.mjs} +4 -4
  75. package/dist/lib/node-esm/meta.json +1 -1
  76. package/dist/lib/node-esm/{react-surface-JW776PVP.mjs → react-surface-7YSGHZQM.mjs} +26 -10
  77. package/dist/lib/node-esm/react-surface-7YSGHZQM.mjs.map +7 -0
  78. package/dist/lib/node-esm/{settings-XGXDY4NI.mjs → settings-GR4O2WHZ.mjs} +3 -3
  79. package/dist/lib/node-esm/types.mjs +2 -2
  80. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/artifact-definition.d.ts +11 -0
  82. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -0
  83. package/dist/types/src/capabilities/index.d.ts +1 -0
  84. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  86. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts +1 -2
  87. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts.map +1 -1
  88. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts +3 -4
  89. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  90. package/dist/types/src/components/ScriptContainer.d.ts +2 -3
  91. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  92. package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts +1 -2
  93. package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts.map +1 -1
  94. package/dist/types/src/components/ScriptSettingsPanel.d.ts +1 -2
  95. package/dist/types/src/components/ScriptSettingsPanel.d.ts.map +1 -1
  96. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +2 -3
  97. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  98. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +1 -2
  99. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  100. package/dist/types/src/components/index.d.ts +2 -2
  101. package/dist/types/src/components/index.d.ts.map +1 -1
  102. package/dist/types/src/events.d.ts +4 -0
  103. package/dist/types/src/events.d.ts.map +1 -0
  104. package/dist/types/src/hooks/deploy.d.ts.map +1 -0
  105. package/dist/types/src/hooks/format.d.ts.map +1 -0
  106. package/dist/types/src/hooks/index.d.ts +7 -0
  107. package/dist/types/src/hooks/index.d.ts.map +1 -0
  108. package/dist/types/src/{components/ScriptToolbar/templateSelect.d.ts → hooks/template.d.ts} +2 -2
  109. package/dist/types/src/hooks/template.d.ts.map +1 -0
  110. package/dist/types/src/{components/ScriptToolbar → hooks}/useToolbarAction.d.ts +1 -1
  111. package/dist/types/src/hooks/useToolbarAction.d.ts.map +1 -0
  112. package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -0
  113. package/dist/types/src/{components/ScriptToolbar → hooks}/view.d.ts +1 -1
  114. package/dist/types/src/hooks/view.d.ts.map +1 -0
  115. package/dist/types/src/index.d.ts +0 -1
  116. package/dist/types/src/index.d.ts.map +1 -1
  117. package/dist/types/src/meta.d.ts +1 -0
  118. package/dist/types/src/meta.d.ts.map +1 -1
  119. package/dist/types/src/templates/chess.d.ts +1 -4
  120. package/dist/types/src/templates/chess.d.ts.map +1 -1
  121. package/dist/types/src/templates/discord.d.ts +3 -0
  122. package/dist/types/src/templates/discord.d.ts.map +1 -0
  123. package/dist/types/src/templates/forex-effect.d.ts +0 -3
  124. package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
  125. package/dist/types/src/templates/forex.d.ts +0 -3
  126. package/dist/types/src/templates/forex.d.ts.map +1 -1
  127. package/dist/types/src/templates/index.d.ts.map +1 -1
  128. package/dist/types/src/translations.d.ts +3 -0
  129. package/dist/types/src/translations.d.ts.map +1 -1
  130. package/dist/types/src/types.d.ts +1 -1
  131. package/package.json +43 -42
  132. package/src/ScriptPlugin.tsx +40 -15
  133. package/src/capabilities/artifact-definition.ts +224 -0
  134. package/src/capabilities/compiler.ts +1 -1
  135. package/src/capabilities/index.ts +1 -0
  136. package/src/capabilities/react-surface.tsx +11 -4
  137. package/src/components/DebugPanel/DebugPanel.tsx +2 -2
  138. package/src/components/FrameContainer/FrameContainer.tsx +5 -4
  139. package/src/components/ScriptContainer.tsx +10 -5
  140. package/src/components/ScriptSettingsPanel.tsx +2 -2
  141. package/src/components/ScriptToolbar/ScriptToolbar.tsx +8 -6
  142. package/src/components/TypescriptEditor/TypescriptEditor.tsx +2 -2
  143. package/src/components/index.ts +1 -1
  144. package/src/events.ts +11 -0
  145. package/src/{components/ScriptToolbar → hooks}/deploy.ts +16 -5
  146. package/src/{components/ScriptToolbar → hooks}/format.ts +1 -1
  147. package/src/hooks/index.ts +11 -0
  148. package/src/{components/ScriptToolbar/templateSelect.ts → hooks/template.ts} +2 -2
  149. package/src/{components/ScriptToolbar → hooks}/useToolbarAction.ts +1 -1
  150. package/src/{components/ScriptToolbar → hooks}/view.ts +5 -2
  151. package/src/index.ts +0 -1
  152. package/src/meta.ts +3 -1
  153. package/src/templates/chat.ts +4 -4
  154. package/src/templates/chess.ts +42 -35
  155. package/src/templates/discord.ts +103 -0
  156. package/src/templates/forex-effect.ts +16 -17
  157. package/src/templates/forex.ts +2 -3
  158. package/src/templates/index.ts +10 -2
  159. package/src/translations.ts +3 -0
  160. package/dist/lib/browser/AutomationPanel-OOIRJFPJ.mjs +0 -78
  161. package/dist/lib/browser/AutomationPanel-OOIRJFPJ.mjs.map +0 -7
  162. package/dist/lib/browser/ScriptContainer-EBER222J.mjs.map +0 -7
  163. package/dist/lib/browser/chunk-5BU5ERNU.mjs +0 -18
  164. package/dist/lib/browser/chunk-5BU5ERNU.mjs.map +0 -7
  165. package/dist/lib/browser/chunk-SDHKTS6H.mjs +0 -237
  166. package/dist/lib/browser/chunk-SDHKTS6H.mjs.map +0 -7
  167. package/dist/lib/browser/chunk-SJ4J527G.mjs.map +0 -7
  168. package/dist/lib/browser/chunk-VIX22OMB.mjs +0 -60
  169. package/dist/lib/browser/chunk-VIX22OMB.mjs.map +0 -7
  170. package/dist/lib/browser/compiler-HT53ILG7.mjs.map +0 -7
  171. package/dist/lib/browser/react-surface-GH4LL6CF.mjs.map +0 -7
  172. package/dist/lib/node/AutomationPanel-EPRDDR3A.cjs +0 -104
  173. package/dist/lib/node/AutomationPanel-EPRDDR3A.cjs.map +0 -7
  174. package/dist/lib/node/ScriptContainer-UXMQLKDV.cjs +0 -690
  175. package/dist/lib/node/ScriptContainer-UXMQLKDV.cjs.map +0 -7
  176. package/dist/lib/node/chunk-DQRAVZM7.cjs.map +0 -7
  177. package/dist/lib/node/chunk-EFTZN5X7.cjs.map +0 -7
  178. package/dist/lib/node/chunk-PKT5DD3O.cjs +0 -70
  179. package/dist/lib/node/chunk-PKT5DD3O.cjs.map +0 -7
  180. package/dist/lib/node/chunk-T4TXCRN5.cjs +0 -260
  181. package/dist/lib/node/chunk-T4TXCRN5.cjs.map +0 -7
  182. package/dist/lib/node/compiler-457ZR24G.cjs.map +0 -7
  183. package/dist/lib/node/react-surface-3JKCVT5O.cjs.map +0 -7
  184. package/dist/lib/node-esm/AutomationPanel-DMLAGQS5.mjs +0 -79
  185. package/dist/lib/node-esm/AutomationPanel-DMLAGQS5.mjs.map +0 -7
  186. package/dist/lib/node-esm/ScriptContainer-56ES2HQ5.mjs.map +0 -7
  187. package/dist/lib/node-esm/chunk-BHP545D7.mjs.map +0 -7
  188. package/dist/lib/node-esm/chunk-G76M6O46.mjs +0 -239
  189. package/dist/lib/node-esm/chunk-G76M6O46.mjs.map +0 -7
  190. package/dist/lib/node-esm/chunk-NBAL5DXN.mjs +0 -62
  191. package/dist/lib/node-esm/chunk-NBAL5DXN.mjs.map +0 -7
  192. package/dist/lib/node-esm/chunk-XUWS7OTK.mjs.map +0 -7
  193. package/dist/lib/node-esm/compiler-PEARFTFR.mjs.map +0 -7
  194. package/dist/lib/node-esm/react-surface-JW776PVP.mjs.map +0 -7
  195. package/dist/types/src/bundler/bundler.d.ts +0 -39
  196. package/dist/types/src/bundler/bundler.d.ts.map +0 -1
  197. package/dist/types/src/bundler/bundler.test.d.ts +0 -2
  198. package/dist/types/src/bundler/bundler.test.d.ts.map +0 -1
  199. package/dist/types/src/bundler/index.d.ts +0 -2
  200. package/dist/types/src/bundler/index.d.ts.map +0 -1
  201. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +0 -17
  202. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +0 -1
  203. package/dist/types/src/components/AutomationPanel/index.d.ts +0 -4
  204. package/dist/types/src/components/AutomationPanel/index.d.ts.map +0 -1
  205. package/dist/types/src/components/ScriptToolbar/deploy.d.ts.map +0 -1
  206. package/dist/types/src/components/ScriptToolbar/format.d.ts.map +0 -1
  207. package/dist/types/src/components/ScriptToolbar/templateSelect.d.ts.map +0 -1
  208. package/dist/types/src/components/ScriptToolbar/useToolbarAction.d.ts.map +0 -1
  209. package/dist/types/src/components/ScriptToolbar/useToolbarState.d.ts.map +0 -1
  210. package/dist/types/src/components/ScriptToolbar/view.d.ts.map +0 -1
  211. package/src/bundler/bundler.test.ts +0 -55
  212. package/src/bundler/bundler.ts +0 -250
  213. package/src/bundler/index.ts +0 -5
  214. package/src/components/AutomationPanel/AutomationPanel.tsx +0 -104
  215. package/src/components/AutomationPanel/index.ts +0 -9
  216. /package/dist/lib/browser/{chunk-ZM6T4HPR.mjs.map → chunk-6MOQ4BP3.mjs.map} +0 -0
  217. /package/dist/lib/browser/{chunk-XPGBHZ3L.mjs.map → chunk-N46LE7FS.mjs.map} +0 -0
  218. /package/dist/lib/browser/{intent-resolver-G2REMZHC.mjs.map → intent-resolver-D6FPY5ZA.mjs.map} +0 -0
  219. /package/dist/lib/browser/{settings-YQQEU3DF.mjs.map → settings-SZCDKHWO.mjs.map} +0 -0
  220. /package/dist/lib/node/{chunk-A2DI2G4D.cjs.map → chunk-ALY3N6PW.cjs.map} +0 -0
  221. /package/dist/lib/node/{chunk-6VKZJ4MH.cjs.map → chunk-DJGLGRQV.cjs.map} +0 -0
  222. /package/dist/lib/node/{intent-resolver-IWGK77AZ.cjs.map → intent-resolver-NYJFPD5B.cjs.map} +0 -0
  223. /package/dist/lib/node/{settings-NGHDYAVK.cjs.map → settings-SZFSMSKM.cjs.map} +0 -0
  224. /package/dist/lib/node-esm/{chunk-675XSDRN.mjs.map → chunk-CP5LXTK5.mjs.map} +0 -0
  225. /package/dist/lib/node-esm/{chunk-JHGOPQVO.mjs.map → chunk-UNQFIERE.mjs.map} +0 -0
  226. /package/dist/lib/node-esm/{intent-resolver-KGADFH3H.mjs.map → intent-resolver-KLBHSMW4.mjs.map} +0 -0
  227. /package/dist/lib/node-esm/{settings-XGXDY4NI.mjs.map → settings-GR4O2WHZ.mjs.map} +0 -0
  228. /package/dist/types/src/{components/ScriptToolbar → hooks}/deploy.d.ts +0 -0
  229. /package/dist/types/src/{components/ScriptToolbar → hooks}/format.d.ts +0 -0
  230. /package/dist/types/src/{components/ScriptToolbar → hooks}/useToolbarState.d.ts +0 -0
  231. /package/src/{components/ScriptToolbar → hooks}/useToolbarState.ts +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/DebugPanel/DebugPanel.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { forwardRef, useEffect, useRef, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { Avatar, Icon, Input, type ThemedClassName, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { errorText, mx } from '@dxos/react-ui-theme';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\n\ntype State = 'pending' | 'responding';\n\n/**\n * Request or response.\n */\ntype Message = { type: 'request' | 'response'; text?: string; data?: any; error?: Error };\n\nexport type DebugPanelProps = ThemedClassName<{\n functionUrl?: string;\n}>;\n\nexport const DebugPanel = ({ classNames, functionUrl }: DebugPanelProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [input, setInput] = useState('');\n const [result, setResult] = useState('');\n const [state, setState] = useState<State | null>(null);\n\n // TODO(burdon): Persistent history -- at least for session (non-space ECHO data?)\n const [history, setHistory] = useState<Message[]>([]);\n\n const scrollerRef = useRef<HTMLDivElement>(null);\n const handleScroll = () => {\n if (scrollerRef.current) {\n scrollerRef.current.scrollTop = scrollerRef.current.scrollHeight;\n }\n };\n\n const controller = useRef<AbortController>();\n useEffect(() => {\n return () => {\n handleStop();\n };\n }, []);\n\n const handleStop = () => {\n controller.current?.abort('stop');\n controller.current = undefined;\n };\n\n const handleClear = () => {\n handleStop();\n setInput('');\n setResult('');\n setHistory([]);\n inputRef.current?.focus();\n };\n\n const handleResponse = ({ text, data, error }: { text?: string; data?: any; error?: Error } = {}) => {\n controller.current = undefined;\n setHistory((history) => [...history, { type: 'response', text, data, error } satisfies Message]);\n setResult('');\n setState(null);\n handleScroll();\n };\n\n const handleRequest = async (input: string) => {\n // Returns a promise that resolves when a value has been received.\n try {\n setState('pending');\n\n let data = null;\n // Detect JSON input.\n if (input.charAt(0) === '{') {\n try {\n const validJsonString = input.replace(/'/g, '\"').replace(/([{,]\\s*)([a-zA-Z0-9_]+)(\\s*:)/g, '$1\"$2\"$3');\n data = JSON.parse(validJsonString);\n input = JSON.stringify(data, null, 2);\n } catch (err) {\n inputRef.current?.focus();\n return;\n }\n }\n\n setInput('');\n setResult('');\n setHistory((history) => [...history, { type: 'request', text: input }]);\n setTimeout(() => {\n handleScroll();\n });\n\n // Throws DOMException when aborted.\n controller.current = new AbortController();\n const response = await fetch(functionUrl!, {\n signal: controller.current.signal,\n method: 'POST',\n body: input,\n headers: {\n 'Content-Type': data ? 'application/json' : 'text/plain',\n },\n });\n\n // Check for error.\n if (!response.ok) {\n const text = await response.text();\n handleResponse({ error: new Error(text || response.statusText || String(response.status)) });\n return;\n }\n\n // Check for JSON.\n const contentType = response.headers.get('content-type');\n if (contentType === 'application/json') {\n const data = await response.json();\n handleResponse({ data });\n return;\n }\n\n // Text (including streaming).\n setState('responding');\n let text = '';\n const reader = response.body!.getReader();\n const pump = async ({ done, value }: ReadableStreamReadResult<Uint8Array>): Promise<void> => {\n text = text + new TextDecoder().decode(value);\n if (!controller.current || done) {\n handleResponse({ text });\n return;\n }\n\n setResult(text);\n setTimeout(() => {\n handleScroll();\n });\n\n return reader.read().then(pump);\n };\n\n void reader\n .read()\n .then(pump)\n .catch((err) => {\n if (err.name !== 'AbortError') {\n log.catch(err);\n }\n });\n } catch (err: any) {\n if (err !== 'stop') {\n const error = err instanceof Error ? err : new Error(err);\n handleResponse({ error });\n log.catch(err);\n } else {\n handleResponse();\n }\n }\n };\n\n return (\n <div className={mx('flex flex-col h-full overflow-hidden', classNames)}>\n {/* TODO(burdon): Replace with Thread. */}\n <MessageThread ref={scrollerRef} state={state} result={result} history={history} />\n\n <Toolbar.Root classNames='p-1'>\n <Input.Root>\n <Input.TextInput\n ref={inputRef}\n autoFocus\n placeholder={t('function request placeholder')}\n value={input}\n onChange={(ev) => setInput(ev.target.value)}\n onKeyDown={(ev) => ev.key === 'Enter' && handleRequest(input)}\n />\n </Input.Root>\n <Toolbar.Button onClick={() => handleRequest(input)}>\n <Icon icon='ph--play--regular' size={4} />\n </Toolbar.Button>\n <Toolbar.Button onClick={() => (state ? handleStop() : handleClear())}>\n <Icon icon={state ? 'ph--stop--regular' : 'ph--trash--regular'} size={4} />\n </Toolbar.Button>\n </Toolbar.Root>\n </div>\n );\n};\n\n// TODO(burdon): Replace with thread?\n// TODO(burdon): Button to delete individual messages.\n// TODO(burdon): Button to edit/re-run question.\ntype MessageThreadProps = {\n state: State | null;\n history: Message[];\n result: string;\n};\n\nconst MessageThread = forwardRef<HTMLDivElement, MessageThreadProps>(\n ({ state, history, result }: MessageThreadProps, forwardedRef) => {\n if (!history.length && !result.length) {\n return null;\n }\n\n return (\n <div ref={forwardedRef} className='flex flex-col gap-6 h-full p-2 overflow-x-hidden overflow-y-auto'>\n {history.map((message, i) => (\n <div key={i} className='grid grid-cols-[2rem_1fr_2rem]'>\n <div className='p-1'>{message.type === 'response' && <RobotAvatar />}</div>\n <div className='overflow-auto'>\n <MessageItem message={message} />\n </div>\n </div>\n ))}\n\n {result?.length > 0 && (\n <div className='grid grid-cols-[2rem_1fr_2rem]'>\n <div className='p-1'>\n {(state === 'pending' && <Icon icon='ph--spinner--regular' size={6} classNames='animate-spin' />) || (\n <Icon icon='ph--robot--regular' size={6} classNames='animate-[pulse_1s_ease-in-out_infinite]' />\n )}\n </div>\n <div className='overflow-auto'>\n <MessageItem message={{ type: 'response', text: result }} />\n </div>\n </div>\n )}\n </div>\n );\n },\n);\n\nconst MessageItem = ({ classNames, message }: ThemedClassName<{ message: Message }>) => {\n const { type, text, data, error } = message;\n const wrapper = 'p-1 px-2 rounded-lg bg-hoverSurface overflow-auto';\n return (\n <div className={mx('flex', type === 'request' ? 'ml-[1rem] justify-end' : 'mr-[1rem]', classNames)}>\n {error && <div className={mx(wrapper, 'whitespace-pre', errorText)}>{String(error)}</div>}\n\n {text !== undefined && (\n <div className={mx(wrapper, type === 'request' && 'bg-primary-400 dark:bg-primary-600')}>\n {text || '\\u00D8'}\n </div>\n )}\n\n {data && (\n <SyntaxHighlighter language='json' className={mx(wrapper, 'px-8 py-2 text-xs')}>\n {JSON.stringify(data, null, 2)}\n </SyntaxHighlighter>\n )}\n </div>\n );\n};\n\nconst RobotAvatar = () => (\n <Avatar.Root size={6} variant='circle'>\n <Avatar.Frame>\n <Avatar.Icon icon='ph--robot--regular' />\n </Avatar.Frame>\n </Avatar.Root>\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "forwardRef", "useEffect", "useRef", "useState", "log", "Avatar", "Icon", "Input", "Toolbar", "useTranslation", "SyntaxHighlighter", "errorText", "mx", "DebugPanel", "classNames", "functionUrl", "t", "useTranslation", "SCRIPT_PLUGIN", "inputRef", "useRef", "input", "setInput", "useState", "result", "setResult", "state", "setState", "history", "setHistory", "scrollerRef", "handleScroll", "current", "scrollTop", "scrollHeight", "controller", "useEffect", "handleStop", "abort", "undefined", "handleClear", "focus", "handleResponse", "text", "data", "error", "type", "handleRequest", "charAt", "validJsonString", "replace", "JSON", "parse", "stringify", "err", "setTimeout", "AbortController", "response", "fetch", "signal", "method", "body", "headers", "ok", "Error", "statusText", "String", "status", "contentType", "get", "json", "reader", "getReader", "pump", "done", "value", "TextDecoder", "decode", "read", "then", "catch", "name", "log", "div", "className", "mx", "MessageThread", "ref", "Toolbar", "Root", "Input", "TextInput", "autoFocus", "placeholder", "onChange", "ev", "target", "onKeyDown", "key", "Button", "onClick", "Icon", "icon", "size", "forwardRef", "forwardedRef", "length", "map", "message", "i", "RobotAvatar", "MessageItem", "wrapper", "errorText", "SyntaxHighlighter", "language", "Avatar", "variant", "Frame"]
7
+ }
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  SCRIPT_PLUGIN
4
- } from "./chunk-BHP545D7.mjs";
4
+ } from "./chunk-P2V2Y5LV.mjs";
5
5
 
6
6
  // packages/plugins/experimental/plugin-script/src/capabilities/capabilities.ts
7
7
  import { defineCapability } from "@dxos/app-framework";
@@ -13,4 +13,4 @@ var ScriptCapabilities;
13
13
  export {
14
14
  ScriptCapabilities
15
15
  };
16
- //# sourceMappingURL=chunk-675XSDRN.mjs.map
16
+ //# sourceMappingURL=chunk-CP5LXTK5.mjs.map
@@ -1,41 +1,21 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import {
3
- Bundler
4
- } from "./chunk-G76M6O46.mjs";
5
2
  import {
6
3
  templates
7
- } from "./chunk-NBAL5DXN.mjs";
8
- import {
9
- DebugPanel
10
- } from "./chunk-XUWS7OTK.mjs";
4
+ } from "./chunk-YIWRJ25J.mjs";
11
5
  import {
12
6
  SCRIPT_PLUGIN
13
- } from "./chunk-BHP545D7.mjs";
14
-
15
- // packages/plugins/experimental/plugin-script/src/components/ScriptContainer.tsx
16
- import React3, { useMemo as useMemo3 } from "react";
17
- import { createDocAccessor, getSpace as getSpace2 } from "@dxos/react-client/echo";
18
- import { useIdentity } from "@dxos/react-client/halo";
19
- import { createDataExtensions, listener, stackItemContentEditorClassNames } from "@dxos/react-ui-editor";
20
- import { StackItem } from "@dxos/react-ui-stack";
21
- import { mx } from "@dxos/react-ui-theme";
7
+ } from "./chunk-P2V2Y5LV.mjs";
22
8
 
23
- // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/ScriptToolbar.tsx
24
- import React, { useCallback as useCallback5 } from "react";
25
- import { fullyQualifiedId } from "@dxos/react-client/echo";
26
- import { ElevationProvider } from "@dxos/react-ui";
27
- import { stackItemContentToolbarClassNames } from "@dxos/react-ui-editor";
28
- import { createGapSeparator, MenuProvider, ToolbarMenu, useMenuActions } from "@dxos/react-ui-menu";
29
-
30
- // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/deploy.ts
9
+ // packages/plugins/experimental/plugin-script/src/hooks/deploy.ts
31
10
  import { useCallback, useEffect, useMemo } from "react";
32
11
  import { FunctionType, getInvocationUrl, getUserFunctionUrlInMetadata, incrementSemverPatch, setUserFunctionUrlInMetadata, uploadWorkerFunction } from "@dxos/functions";
12
+ import { Bundler } from "@dxos/functions/bundler";
33
13
  import { log } from "@dxos/log";
34
14
  import { useClient } from "@dxos/react-client";
35
15
  import { Filter, create, getMeta, getSpace, makeRef, useQuery } from "@dxos/react-client/echo";
36
16
  import { useTranslation } from "@dxos/react-ui";
37
17
  import { createMenuAction } from "@dxos/react-ui-menu";
38
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/deploy.ts";
18
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/hooks/deploy.ts";
39
19
  var createDeploy = (state) => {
40
20
  const errorItem = createMenuAction("error", {
41
21
  label: state.error ?? [
@@ -150,7 +130,9 @@ var useDeployHandler = ({ state, script }) => {
150
130
  sandboxedModules: [],
151
131
  remoteModules: {}
152
132
  });
153
- const buildResult = await bundler.bundle(script.source.target.content);
133
+ const buildResult = await bundler.bundle({
134
+ source: script.source.target.content
135
+ });
154
136
  if (buildResult.error || !buildResult.bundle) {
155
137
  throw buildResult.error;
156
138
  }
@@ -182,7 +164,20 @@ var useDeployHandler = ({ state, script }) => {
182
164
  source: makeRef(script)
183
165
  }));
184
166
  script.changed = false;
185
- deployedFunction.description = script.description;
167
+ if (script.description !== void 0 && script.description.trim() !== "") {
168
+ deployedFunction.description = script.description;
169
+ } else if (meta.description) {
170
+ deployedFunction.description = meta.description;
171
+ } else {
172
+ log.verbose("no description in function metadata", {
173
+ functionId
174
+ }, {
175
+ F: __dxlog_file,
176
+ L: 138,
177
+ S: void 0,
178
+ C: (f, a) => f(...a)
179
+ });
180
+ }
186
181
  if (meta.inputSchema) {
187
182
  deployedFunction.inputSchema = meta.inputSchema;
188
183
  } else {
@@ -190,7 +185,19 @@ var useDeployHandler = ({ state, script }) => {
190
185
  functionId
191
186
  }, {
192
187
  F: __dxlog_file,
193
- L: 138,
188
+ L: 144,
189
+ S: void 0,
190
+ C: (f, a) => f(...a)
191
+ });
192
+ }
193
+ if (meta.outputSchema) {
194
+ deployedFunction.outputSchema = meta.outputSchema;
195
+ } else {
196
+ log.verbose("no output schema in function metadata", {
197
+ functionId
198
+ }, {
199
+ F: __dxlog_file,
200
+ L: 149,
194
201
  S: void 0,
195
202
  C: (f, a) => f(...a)
196
203
  });
@@ -200,7 +207,7 @@ var useDeployHandler = ({ state, script }) => {
200
207
  } catch (err) {
201
208
  log.catch(err, void 0, {
202
209
  F: __dxlog_file,
203
- L: 145,
210
+ L: 156,
204
211
  S: void 0,
205
212
  C: (f, a) => f(...a)
206
213
  });
@@ -227,14 +234,21 @@ var useCopyHandler = ({ state }) => useCallback(async () => {
227
234
  state.functionUrl
228
235
  ]);
229
236
 
230
- // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/format.ts
237
+ // packages/plugins/experimental/plugin-script/src/hooks/useToolbarState.ts
238
+ import { useMemo as useMemo2 } from "react";
239
+ import { create as create2 } from "@dxos/live-object";
240
+ var useToolbarState = (initialState = {}) => {
241
+ return useMemo2(() => create2(initialState), []);
242
+ };
243
+
244
+ // packages/plugins/experimental/plugin-script/src/hooks/format.ts
231
245
  import { format } from "prettier";
232
246
  import prettierPluginEstree from "prettier/plugins/estree";
233
247
  import prettierPluginTypescript from "prettier/plugins/typescript";
234
248
  import { useCallback as useCallback2 } from "react";
235
249
  import { log as log2 } from "@dxos/log";
236
250
  import { createMenuAction as createMenuAction2 } from "@dxos/react-ui-menu";
237
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/format.ts";
251
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/hooks/format.ts";
238
252
  var createFormat = () => {
239
253
  const formatAction = createMenuAction2("format", {
240
254
  label: [
@@ -283,7 +297,7 @@ var useFormatHandler = ({ script }) => useCallback2(async () => {
283
297
  script.source
284
298
  ]);
285
299
 
286
- // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/templateSelect.ts
300
+ // packages/plugins/experimental/plugin-script/src/hooks/template.ts
287
301
  import { useCallback as useCallback3 } from "react";
288
302
  import { FUNCTIONS_PRESET_META_KEY } from "@dxos/functions";
289
303
  import { getMeta as getMeta2 } from "@dxos/live-object";
@@ -351,49 +365,7 @@ var useTemplateSelectHandler = ({ script }) => {
351
365
  ]);
352
366
  };
353
367
 
354
- // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/useToolbarAction.ts
355
- import { useCallback as useCallback4 } from "react";
356
- import { log as log3 } from "@dxos/log";
357
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/useToolbarAction.ts";
358
- var useToolbarAction = (props) => {
359
- const handleTemplateSelect = useTemplateSelectHandler(props);
360
- const handleFormat = useFormatHandler(props);
361
- const handleDeploy = useDeployHandler(props);
362
- const handleCopy = useCopyHandler(props);
363
- return useCallback4((action) => {
364
- switch (action.properties.type) {
365
- case "template":
366
- handleTemplateSelect(action.properties.value);
367
- break;
368
- case "view":
369
- props.state.view = action.properties.value;
370
- break;
371
- case "format":
372
- void handleFormat();
373
- break;
374
- case "deploy":
375
- void handleDeploy();
376
- break;
377
- case "copy":
378
- void handleCopy();
379
- break;
380
- default:
381
- log3.error("Unknown action type", action, {
382
- F: __dxlog_file3,
383
- L: 49,
384
- S: void 0,
385
- C: (f, a) => f(...a)
386
- });
387
- }
388
- }, [
389
- handleTemplateSelect,
390
- handleFormat,
391
- handleDeploy,
392
- handleCopy
393
- ]);
394
- };
395
-
396
- // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/view.ts
368
+ // packages/plugins/experimental/plugin-script/src/hooks/view.ts
397
369
  import { createMenuAction as createMenuAction4, createMenuItemGroup as createMenuItemGroup2 } from "@dxos/react-ui-menu";
398
370
  var views = {
399
371
  editor: "ph--code--regular",
@@ -450,238 +422,55 @@ var createView = (state) => {
450
422
  };
451
423
  };
452
424
 
453
- // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/ScriptToolbar.tsx
454
- var createToolbar = (state) => {
455
- const templateSelect = createTemplateSelect();
456
- const format2 = createFormat();
457
- const gap = createGapSeparator();
458
- const deploy = createDeploy(state);
459
- const view = createView(state);
460
- return {
461
- nodes: [
462
- ...templateSelect.nodes,
463
- ...format2.nodes,
464
- ...gap.nodes,
465
- ...deploy.nodes,
466
- ...view.nodes
467
- ],
468
- edges: [
469
- ...templateSelect.edges,
470
- ...format2.edges,
471
- ...gap.edges,
472
- ...deploy.edges,
473
- ...view.edges
474
- ]
475
- };
476
- };
477
- var ScriptToolbar = ({ script, role, state, classNames }) => {
478
- const handleAction = useToolbarAction({
479
- state,
480
- script
481
- });
482
- const toolbarCreator = useCallback5(() => createToolbar(state), [
483
- state
484
- ]);
485
- const menu = useMenuActions(toolbarCreator);
486
- return /* @__PURE__ */ React.createElement("div", {
487
- role: "none",
488
- className: stackItemContentToolbarClassNames(role)
489
- }, /* @__PURE__ */ React.createElement(ElevationProvider, {
490
- elevation: role === "section" ? "positioned" : "base"
491
- }, /* @__PURE__ */ React.createElement(MenuProvider, {
492
- ...menu,
493
- onAction: handleAction,
494
- attendableId: fullyQualifiedId(script)
495
- }, /* @__PURE__ */ React.createElement(ToolbarMenu, {
496
- classNames
497
- }))));
498
- };
499
-
500
- // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/useToolbarState.ts
501
- import { useMemo as useMemo2 } from "react";
502
- import { create as create2 } from "@dxos/live-object";
503
- var useToolbarState = (initialState = {}) => {
504
- return useMemo2(() => create2(initialState), []);
505
- };
506
-
507
- // packages/plugins/experimental/plugin-script/src/components/TypescriptEditor/TypescriptEditor.tsx
508
- import { javascript } from "@codemirror/lang-javascript";
509
- import { defaultHighlightStyle } from "@codemirror/language";
510
- import { Prec } from "@codemirror/state";
511
- import { oneDarkHighlightStyle } from "@codemirror/theme-one-dark";
512
- import { keymap } from "@codemirror/view";
513
- import { tags } from "@lezer/highlight";
514
- import { continueKeymap } from "@valtown/codemirror-continue";
515
- import { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover } from "@valtown/codemirror-ts";
516
- import React2 from "react";
517
- import { useThemeContext } from "@dxos/react-ui";
518
- import { autocomplete, createBasicExtensions, createThemeExtensions, editorFullWidth, editorMonospace, EditorView, folding, InputModeExtensions, useTextEditor } from "@dxos/react-ui-editor";
519
- import { nonNullable } from "@dxos/util";
520
- var TypescriptEditor = ({ id, env, className, initialValue, extensions, scrollTo, selection, toolbar, inputMode = "vscode" }) => {
521
- const { themeMode } = useThemeContext();
522
- const { parentRef, focusAttributes } = useTextEditor(() => ({
523
- id,
524
- initialValue,
525
- extensions: [
526
- extensions,
527
- createBasicExtensions({
528
- highlightActiveLine: true,
529
- indentWithTab: true,
530
- lineNumbers: true,
531
- lineWrapping: false,
532
- scrollPastEnd: true
533
- }),
534
- createThemeExtensions({
535
- themeMode,
536
- syntaxHighlighting: true,
537
- slots: {
538
- content: {
539
- className: editorFullWidth
540
- }
541
- }
542
- }),
543
- // NOTE: Not using default editor gutter because folding for code works best right beside text.
544
- EditorView.theme({
545
- ".cm-gutters": {
546
- // Match margin from content.
547
- marginTop: "16px"
548
- }
549
- }),
550
- InputModeExtensions[inputMode],
551
- folding(),
552
- // Continues block comments when you hit Enter.
553
- Prec.high(keymap.of(continueKeymap)),
554
- // TODO(burdon): Factor out.
555
- [
556
- editorMonospace,
557
- javascript({
558
- typescript: true
559
- }),
560
- // https://github.com/val-town/codemirror-ts
561
- autocomplete({
562
- override: env ? [
563
- tsAutocomplete()
564
- ] : []
565
- }),
566
- env ? [
567
- tsFacet.of({
568
- env,
569
- path: `/src/${id}.ts`
570
- }),
571
- tsSync(),
572
- tsLinter(),
573
- tsHover({
574
- renderTooltip: createTooltipRenderer(themeMode)
575
- })
576
- ] : []
577
- ]
578
- ].filter(nonNullable),
579
- selection,
580
- scrollTo
581
- }), [
582
- id,
583
- extensions,
584
- themeMode,
585
- inputMode,
586
- selection,
587
- scrollTo
588
- ]);
589
- return /* @__PURE__ */ React2.createElement("div", {
590
- ref: parentRef,
591
- "data-toolbar": toolbar ? "enabled" : "disabled",
592
- className,
593
- ...focusAttributes
594
- });
595
- };
596
- var createTooltipRenderer = (themeMode) => {
597
- const theme = themeMode === "dark" ? oneDarkHighlightStyle : defaultHighlightStyle;
598
- const classFromKind = (_kind) => {
599
- const kind = _kind.endsWith("Name") ? "name" : _kind;
600
- const validTag = kind in tags;
601
- if (!validTag) {
602
- return "";
603
- }
604
- const tag = tags[kind];
605
- if (typeof tag === "function") {
606
- return "";
607
- }
608
- return theme.style([
609
- tag
610
- ]) ?? "";
611
- };
612
- return (info) => {
613
- const div = document.createElement("div");
614
- div.className = "p-1 rounded border border-separator bg-baseSurface xs:max-w-80 max-w-lg";
615
- if (info.quickInfo?.displayParts) {
616
- for (const part of info.quickInfo.displayParts) {
617
- const span = div.appendChild(document.createElement("span"));
618
- span.className = classFromKind(part.kind);
619
- span.innerText = part.text;
620
- }
425
+ // packages/plugins/experimental/plugin-script/src/hooks/useToolbarAction.ts
426
+ import { useCallback as useCallback4 } from "react";
427
+ import { log as log3 } from "@dxos/log";
428
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/hooks/useToolbarAction.ts";
429
+ var useToolbarAction = (props) => {
430
+ const handleTemplateSelect = useTemplateSelectHandler(props);
431
+ const handleFormat = useFormatHandler(props);
432
+ const handleDeploy = useDeployHandler(props);
433
+ const handleCopy = useCopyHandler(props);
434
+ return useCallback4((action) => {
435
+ switch (action.properties.type) {
436
+ case "template":
437
+ handleTemplateSelect(action.properties.value);
438
+ break;
439
+ case "view":
440
+ props.state.view = action.properties.value;
441
+ break;
442
+ case "format":
443
+ void handleFormat();
444
+ break;
445
+ case "deploy":
446
+ void handleDeploy();
447
+ break;
448
+ case "copy":
449
+ void handleCopy();
450
+ break;
451
+ default:
452
+ log3.error("Unknown action type", action, {
453
+ F: __dxlog_file3,
454
+ L: 49,
455
+ S: void 0,
456
+ C: (f, a) => f(...a)
457
+ });
621
458
  }
622
- return {
623
- dom: div
624
- };
625
- };
626
- };
627
-
628
- // packages/plugins/experimental/plugin-script/src/components/ScriptContainer.tsx
629
- var ScriptContainer = ({ role, classNames, script, settings, env }) => {
630
- const identity = useIdentity();
631
- const space = getSpace2(script);
632
- const extensions = useMemo3(() => [
633
- listener({
634
- onChange: (text) => {
635
- if (script.source.target && script.source.target.content !== text) {
636
- script.changed = true;
637
- }
638
- }
639
- }),
640
- createDataExtensions({
641
- id: script.id,
642
- text: script.source.target && createDocAccessor(script.source.target, [
643
- "content"
644
- ]),
645
- space,
646
- identity
647
- })
648
- ], [
649
- script,
650
- script.source.target,
651
- space,
652
- identity
459
+ }, [
460
+ handleTemplateSelect,
461
+ handleFormat,
462
+ handleDeploy,
463
+ handleCopy
653
464
  ]);
654
- const state = useToolbarState({
655
- view: "split"
656
- });
657
- useDeployState({
658
- state,
659
- script
660
- });
661
- return /* @__PURE__ */ React3.createElement(StackItem.Content, {
662
- toolbar: true
663
- }, /* @__PURE__ */ React3.createElement(ScriptToolbar, {
664
- state,
665
- role,
666
- script
667
- }), /* @__PURE__ */ React3.createElement("div", {
668
- role: "none",
669
- className: mx("flex flex-col w-full overflow-hidden divide-y divide-separator", classNames)
670
- }, state.view !== "debug" && /* @__PURE__ */ React3.createElement(TypescriptEditor, {
671
- id: script.id,
672
- env,
673
- initialValue: script.source?.target?.content,
674
- extensions,
675
- className: stackItemContentEditorClassNames(role),
676
- inputMode: settings.editorInputMode,
677
- toolbar: true
678
- }), state.view !== "editor" && /* @__PURE__ */ React3.createElement(DebugPanel, {
679
- functionUrl: state.functionUrl
680
- })));
681
465
  };
682
- var ScriptContainer_default = ScriptContainer;
466
+
683
467
  export {
684
- ScriptContainer,
685
- ScriptContainer_default as default
468
+ createDeploy,
469
+ useDeployState,
470
+ createFormat,
471
+ createTemplateSelect,
472
+ createView,
473
+ useToolbarAction,
474
+ useToolbarState
686
475
  };
687
- //# sourceMappingURL=ScriptContainer-56ES2HQ5.mjs.map
476
+ //# sourceMappingURL=chunk-NRICF4KE.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/deploy.ts", "../../../src/hooks/useToolbarState.ts", "../../../src/hooks/format.ts", "../../../src/hooks/template.ts", "../../../src/hooks/view.ts", "../../../src/hooks/useToolbarAction.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport {\n FunctionType,\n type ScriptType,\n getInvocationUrl,\n getUserFunctionUrlInMetadata,\n incrementSemverPatch,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n} from '@dxos/functions';\nimport { Bundler } from '@dxos/functions/bundler';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, create, getMeta, getSpace, makeRef, useQuery } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { createMenuAction } from '@dxos/react-ui-menu';\n\nimport { type ViewState } from './view';\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport type DeployActionProperties = { type: 'deploy' } | { type: 'copy' };\n\nexport type DeployState = ViewState & {\n deploying: boolean;\n deployed: boolean;\n functionUrl: string;\n error: string;\n};\n\nexport const createDeploy = (state: Partial<DeployState>) => {\n const errorItem = createMenuAction('error', {\n label: state.error ?? ['no error label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--warning-circle--regular',\n hidden: !state.error,\n });\n\n const deployAction = createMenuAction<DeployActionProperties>('deploy', {\n type: 'deploy',\n label: [state.deploying ? 'pending label' : 'deploy label', { ns: SCRIPT_PLUGIN }],\n icon: state.deploying ? 'ph--spinner-gap--regular' : 'ph--cloud-arrow-up--regular',\n disabled: state.deploying,\n classNames: state.deploying ? '[&_svg]:animate-spin' : '',\n });\n\n const copyAction = createMenuAction<DeployActionProperties>('copy', {\n type: 'copy',\n label: ['copy link label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--link--regular',\n disabled: !state.functionUrl,\n });\n\n return {\n nodes: [errorItem, deployAction, copyAction],\n edges: [\n { source: 'root', target: 'error' },\n { source: 'root', target: 'deploy' },\n { source: 'root', target: 'copy' },\n ],\n };\n};\n\nconst useDeployDeps = ({ state, script }: { state: Partial<DeployState>; script: ScriptType }) => {\n const space = getSpace(script);\n const [fn] = useQuery(space, Filter.schema(FunctionType, { source: script }));\n const client = useClient();\n const existingFunctionUrl = useMemo(() => fn && getUserFunctionUrlInMetadata(getMeta(fn)), [fn]);\n return { space, fn, client, existingFunctionUrl };\n};\n\nexport const useDeployState = ({ state, script }: { state: Partial<DeployState>; script: ScriptType }) => {\n const { space, client, existingFunctionUrl } = useDeployDeps({ state, script });\n useEffect(() => {\n if (!existingFunctionUrl) {\n return;\n }\n\n state.functionUrl = getInvocationUrl(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? '', {\n spaceId: space?.id,\n });\n }, [existingFunctionUrl, space]);\n\n useEffect(() => {\n state.deployed = Boolean(existingFunctionUrl) && !script.changed;\n }, [script.changed, existingFunctionUrl]);\n};\n\nexport const useDeployHandler = ({ state, script }: { state: Partial<DeployState>; script: ScriptType }) => {\n const { space, fn, client, existingFunctionUrl } = useDeployDeps({ state, script });\n const { t } = useTranslation(SCRIPT_PLUGIN);\n\n return useCallback(async () => {\n if (!script.source || !space) {\n return;\n }\n\n state.error = undefined;\n state.deploying = true;\n\n try {\n const existingFunctionId = existingFunctionUrl?.split('/').at(-1);\n\n const bundler = new Bundler({ platform: 'browser', sandboxedModules: [], remoteModules: {} });\n const buildResult = await bundler.bundle({ source: script.source.target!.content });\n if (buildResult.error || !buildResult.bundle) {\n throw buildResult.error;\n }\n\n const { functionId, version, meta } = await uploadWorkerFunction({\n client,\n spaceId: space.id,\n version: fn ? incrementSemverPatch(fn.version) : '0.0.1',\n functionId: existingFunctionId,\n source: buildResult.bundle,\n });\n if (functionId === undefined || version === undefined) {\n throw new Error(`Upload didn't return expected data: functionId=${functionId}, version=${version}`);\n }\n\n log.info('function uploaded', { functionId, version });\n if (fn) {\n fn.version = version;\n }\n\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { name: functionId, version, source: makeRef(script) }));\n\n script.changed = false;\n if (script.description !== undefined && script.description.trim() !== '') {\n deployedFunction.description = script.description;\n } else if (meta.description) {\n deployedFunction.description = meta.description;\n } else {\n log.verbose('no description in function metadata', { functionId });\n }\n\n if (meta.inputSchema) {\n deployedFunction.inputSchema = meta.inputSchema;\n } else {\n log.verbose('no input schema in function metadata', { functionId });\n }\n if (meta.outputSchema) {\n deployedFunction.outputSchema = meta.outputSchema;\n } else {\n log.verbose('no output schema in function metadata', { functionId });\n }\n\n setUserFunctionUrlInMetadata(getMeta(deployedFunction), `/${space.id}/${functionId}`);\n\n state.view = 'split';\n } catch (err: any) {\n log.catch(err);\n state.error = t('upload failed label');\n }\n state.deploying = false;\n }, [fn, client, t, existingFunctionUrl, script, script.name, script.source, space?.id ?? null]);\n};\n\nexport const useCopyHandler = ({ state }: { state: Partial<DeployState> }) =>\n useCallback(async () => {\n if (!state.functionUrl) {\n return;\n }\n await navigator.clipboard.writeText(state.functionUrl);\n }, [state.functionUrl]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { create } from '@dxos/live-object';\n\nimport { type DeployState } from './deploy';\nimport { type ViewState } from './view';\n\nexport type ScriptToolbarState = Partial<DeployState & ViewState>;\n\nexport const useToolbarState = (initialState: ScriptToolbarState = {}) => {\n return useMemo(() => create<ScriptToolbarState>(initialState), []);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { format } from 'prettier';\nimport prettierPluginEstree from 'prettier/plugins/estree';\nimport prettierPluginTypescript from 'prettier/plugins/typescript';\nimport { useCallback } from 'react';\n\nimport { type ScriptType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { createMenuAction } from '@dxos/react-ui-menu';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport type FormatActionProperties = { type: 'format' };\n\nexport const createFormat = () => {\n const formatAction = createMenuAction('format', {\n label: ['format label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--magic-wand--regular',\n });\n\n return {\n nodes: [formatAction],\n edges: [{ source: 'root', target: 'format' }],\n };\n};\n\nexport const useFormatHandler = ({ script }: { script: ScriptType }) =>\n useCallback(async () => {\n if (!script.source) {\n return;\n }\n\n try {\n script.source.target!.content = await format(script.source.target!.content, {\n parser: 'typescript',\n plugins: [prettierPluginEstree, prettierPluginTypescript],\n semi: true,\n singleQuote: true,\n });\n } catch (err: any) {\n // TODO(wittjosiah): Show error in UI.\n log.catch(err);\n }\n }, [script.source]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { FUNCTIONS_PRESET_META_KEY, type ScriptType } from '@dxos/functions';\nimport { getMeta } from '@dxos/live-object';\nimport { createMenuItemGroup, createMenuAction } from '@dxos/react-ui-menu';\n\nimport { SCRIPT_PLUGIN } from '../meta';\nimport { templates } from '../templates';\n\nexport type TemplateActionProperties = { type: 'template'; value: string };\n\nconst createTemplateSelectGroup = () => {\n return createMenuItemGroup('template-select', {\n label: ['template select group label', { ns: SCRIPT_PLUGIN }],\n variant: 'dropdownMenu',\n });\n};\n\nconst createTemplateSelectActions = () => {\n return templates.map((template) => {\n return createMenuAction<TemplateActionProperties>(`template--${template.id}`, {\n label: template.name,\n value: template.id,\n type: 'template',\n });\n });\n};\n\nexport const createTemplateSelect = () => {\n const templateSelectGroup = createTemplateSelectGroup();\n const templateSelectActions = createTemplateSelectActions();\n return {\n nodes: [templateSelectGroup, ...templateSelectActions],\n edges: [\n { source: 'root', target: 'template-select' },\n ...templateSelectActions.map((action) => ({ source: 'template-select', target: action.id })),\n ],\n };\n};\n\nexport const useTemplateSelectHandler = ({ script }: { script: ScriptType }) => {\n return useCallback(\n (templateId: string) => {\n const template = templates.find((template) => template.id === templateId);\n if (template) {\n script.name = template.name;\n script.source!.target!.content = template.source;\n const metaKeys = getMeta(script).keys;\n const oldPresetIndex = metaKeys.findIndex((key) => key.source === FUNCTIONS_PRESET_META_KEY);\n if (oldPresetIndex >= 0) {\n metaKeys.splice(oldPresetIndex, 1);\n }\n if (template.presetId) {\n metaKeys.push({ source: FUNCTIONS_PRESET_META_KEY, id: template.presetId });\n }\n }\n },\n [script],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createMenuAction, createMenuItemGroup } from '@dxos/react-ui-menu';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\n// TODO(wittjosiah): Replace debug with logs.\nexport type ViewType = 'editor' | 'split' | 'debug'; // 'logs';\n\nexport type ViewState = { view: ViewType };\n\nexport type ViewActionProperties = { type: 'view'; value: ViewType };\n\nconst views: Record<ViewType, string> = {\n editor: 'ph--code--regular',\n split: 'ph--square-split-vertical--regular',\n debug: 'ph--bug--regular',\n // TODO(wittjosiah): Replace debug with logs.\n // logs: 'ph--clock-counter-clockwise--regular',\n};\n\nconst createViewGroupItem = (state: Partial<ViewState>) => {\n return createMenuItemGroup('view', {\n label: ['view group label', { ns: SCRIPT_PLUGIN }],\n variant: 'dropdownMenu',\n applyActive: true,\n value: state.view,\n });\n};\n\nconst createViewActions = (state: Partial<ViewState>) => {\n return Object.entries(views).map(([viewType, icon]) => {\n return createMenuAction<ViewActionProperties>(`view--${viewType}`, {\n type: 'view',\n value: viewType as ViewType,\n label: [`view ${viewType} label`, { ns: SCRIPT_PLUGIN }],\n icon,\n checked: state.view === viewType,\n });\n });\n};\n\nexport const createView = (state: Partial<ViewState>) => {\n const viewGroupItem = createViewGroupItem(state);\n const viewActions = createViewActions(state);\n return {\n nodes: [viewGroupItem, ...viewActions],\n edges: [\n { source: 'root', target: 'view' },\n ...viewActions.map((action) => ({ source: 'view', target: action.id })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { type ScriptType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { type MenuAction, type MenuActionHandler } from '@dxos/react-ui-menu';\n\nimport { type DeployActionProperties, useDeployHandler, useCopyHandler } from './deploy';\nimport { type FormatActionProperties, useFormatHandler } from './format';\nimport { type TemplateActionProperties, useTemplateSelectHandler } from './template';\nimport { type ScriptToolbarState } from './useToolbarState';\nimport { type ViewActionProperties } from './view';\n\nexport type ScriptToolbarActionProperties =\n | TemplateActionProperties\n | ViewActionProperties\n | FormatActionProperties\n | DeployActionProperties;\n\nexport type ScriptToolbarAction = MenuAction<ScriptToolbarActionProperties>;\n\nexport const useToolbarAction = (props: { state: ScriptToolbarState; script: ScriptType }) => {\n const handleTemplateSelect = useTemplateSelectHandler(props);\n const handleFormat = useFormatHandler(props);\n const handleDeploy = useDeployHandler(props);\n const handleCopy = useCopyHandler(props);\n return useCallback(\n ((action: ScriptToolbarAction) => {\n switch (action.properties.type) {\n case 'template':\n handleTemplateSelect(action.properties.value);\n break;\n case 'view':\n props.state.view = action.properties.value;\n break;\n case 'format':\n void handleFormat();\n break;\n case 'deploy':\n void handleDeploy();\n break;\n case 'copy':\n void handleCopy();\n break;\n default:\n log.error('Unknown action type', action);\n }\n }) as MenuActionHandler,\n [handleTemplateSelect, handleFormat, handleDeploy, handleCopy],\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["useCallback", "useEffect", "useMemo", "FunctionType", "getInvocationUrl", "getUserFunctionUrlInMetadata", "incrementSemverPatch", "setUserFunctionUrlInMetadata", "uploadWorkerFunction", "Bundler", "log", "useClient", "Filter", "create", "getMeta", "getSpace", "makeRef", "useQuery", "useTranslation", "createMenuAction", "createDeploy", "state", "errorItem", "createMenuAction", "label", "error", "ns", "SCRIPT_PLUGIN", "icon", "hidden", "deployAction", "type", "deploying", "disabled", "classNames", "copyAction", "functionUrl", "nodes", "edges", "source", "target", "useDeployDeps", "script", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "client", "useClient", "existingFunctionUrl", "useMemo", "getUserFunctionUrlInMetadata", "getMeta", "useDeployState", "useEffect", "getInvocationUrl", "config", "values", "runtime", "services", "edge", "url", "spaceId", "id", "deployed", "Boolean", "changed", "useDeployHandler", "t", "useTranslation", "useCallback", "undefined", "existingFunctionId", "split", "at", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "bundle", "content", "functionId", "version", "meta", "uploadWorkerFunction", "incrementSemverPatch", "Error", "log", "info", "deployedFunction", "db", "add", "create", "name", "makeRef", "description", "trim", "verbose", "inputSchema", "outputSchema", "setUserFunctionUrlInMetadata", "view", "err", "catch", "useCopyHandler", "navigator", "clipboard", "writeText", "useMemo", "create", "useToolbarState", "initialState", "useMemo", "create", "format", "prettierPluginEstree", "prettierPluginTypescript", "useCallback", "log", "createMenuAction", "createFormat", "formatAction", "createMenuAction", "label", "ns", "SCRIPT_PLUGIN", "icon", "nodes", "edges", "source", "target", "useFormatHandler", "script", "useCallback", "content", "format", "parser", "plugins", "prettierPluginEstree", "prettierPluginTypescript", "semi", "singleQuote", "err", "log", "catch", "useCallback", "FUNCTIONS_PRESET_META_KEY", "getMeta", "createMenuItemGroup", "createMenuAction", "createTemplateSelectGroup", "createMenuItemGroup", "label", "ns", "SCRIPT_PLUGIN", "variant", "createTemplateSelectActions", "templates", "map", "template", "createMenuAction", "id", "name", "value", "type", "createTemplateSelect", "templateSelectGroup", "templateSelectActions", "nodes", "edges", "source", "target", "action", "useTemplateSelectHandler", "script", "useCallback", "templateId", "find", "content", "metaKeys", "getMeta", "keys", "oldPresetIndex", "findIndex", "key", "FUNCTIONS_PRESET_META_KEY", "splice", "presetId", "push", "createMenuAction", "createMenuItemGroup", "views", "editor", "split", "debug", "createViewGroupItem", "state", "createMenuItemGroup", "label", "ns", "SCRIPT_PLUGIN", "variant", "applyActive", "value", "view", "createViewActions", "Object", "entries", "map", "viewType", "icon", "createMenuAction", "type", "checked", "createView", "viewGroupItem", "viewActions", "nodes", "edges", "source", "target", "action", "id", "useCallback", "log", "useToolbarAction", "props", "handleTemplateSelect", "useTemplateSelectHandler", "handleFormat", "useFormatHandler", "handleDeploy", "useDeployHandler", "handleCopy", "useCopyHandler", "useCallback", "action", "properties", "type", "value", "state", "view", "log", "error"]
7
+ }
@@ -5,11 +5,14 @@ var SCRIPT_PLUGIN = "dxos.org/plugin/script";
5
5
  var meta = {
6
6
  id: SCRIPT_PLUGIN,
7
7
  name: "Scripts",
8
- description: "Distributed functions.",
8
+ description: "Scripts in Composer allow you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API\u2019s or external data inside of Composer.",
9
9
  icon: "ph--code--regular",
10
10
  source: "https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer",
11
11
  tags: [
12
12
  "experimental"
13
+ ],
14
+ screenshots: [
15
+ "https://dxos.network/plugin-details-scripts-dark.png"
13
16
  ]
14
17
  };
15
18
 
@@ -17,4 +20,4 @@ export {
17
20
  SCRIPT_PLUGIN,
18
21
  meta
19
22
  };
20
- //# sourceMappingURL=chunk-BHP545D7.mjs.map
23
+ //# sourceMappingURL=chunk-P2V2Y5LV.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SCRIPT_PLUGIN = 'dxos.org/plugin/script';\n\nexport const meta = {\n id: SCRIPT_PLUGIN,\n name: 'Scripts',\n description:\n 'Scripts in Composer allow you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API’s or external data inside of Composer.',\n icon: 'ph--code--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer',\n tags: ['experimental'],\n screenshots: ['https://dxos.network/plugin-details-scripts-dark.png'],\n} satisfies PluginMeta;\n"],
5
+ "mappings": ";;;AAMO,IAAMA,gBAAgB;AAEtB,IAAMC,OAAO;EAClBC,IAAIF;EACJG,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;",
6
+ "names": ["SCRIPT_PLUGIN", "meta", "id", "name", "description", "icon", "source", "tags", "screenshots"]
7
+ }