@dxos/plugin-script 0.8.0 → 0.8.1-main.81238a8

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 (184) hide show
  1. package/dist/lib/browser/{ScriptContainer-3RFMYKTV.mjs → ScriptContainer-7PTOJ4KY.mjs} +18 -21
  2. package/dist/lib/browser/ScriptContainer-7PTOJ4KY.mjs.map +7 -0
  3. package/dist/lib/browser/{artifact-definition-4LWPD3DH.mjs → artifact-definition-GYCZJGR4.mjs} +8 -7
  4. package/dist/lib/browser/artifact-definition-GYCZJGR4.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-FVVCAWNP.mjs → chunk-27LV6ARH.mjs} +1 -1
  6. package/dist/lib/browser/chunk-27LV6ARH.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-PZPYF7M4.mjs → chunk-4SSKJNMZ.mjs} +2 -2
  8. package/dist/lib/browser/chunk-4SSKJNMZ.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-N46LE7FS.mjs → chunk-AJNRPWAA.mjs} +4 -4
  10. package/dist/lib/browser/{chunk-N46LE7FS.mjs.map → chunk-AJNRPWAA.mjs.map} +1 -1
  11. package/dist/lib/browser/{chunk-G2FYNDU4.mjs → chunk-DZB4KWOI.mjs} +96 -49
  12. package/dist/lib/browser/chunk-DZB4KWOI.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-6MOQ4BP3.mjs → chunk-FG66JYON.mjs} +2 -2
  14. package/dist/lib/browser/chunk-QHE53FDV.mjs +467 -0
  15. package/dist/lib/browser/chunk-QHE53FDV.mjs.map +7 -0
  16. package/dist/lib/browser/{compiler-YY2XSKHQ.mjs → compiler-ZQLHHJ5P.mjs} +3 -3
  17. package/dist/lib/browser/index.mjs +21 -18
  18. package/dist/lib/browser/index.mjs.map +3 -3
  19. package/dist/lib/browser/{intent-resolver-D6FPY5ZA.mjs → intent-resolver-3B3Z67FP.mjs} +5 -5
  20. package/dist/lib/browser/{intent-resolver-D6FPY5ZA.mjs.map → intent-resolver-3B3Z67FP.mjs.map} +1 -1
  21. package/dist/lib/browser/meta.json +1 -1
  22. package/dist/lib/browser/{react-surface-G4C2PZ2K.mjs → react-surface-GQD6LJDJ.mjs} +14 -16
  23. package/dist/lib/browser/react-surface-GQD6LJDJ.mjs.map +7 -0
  24. package/dist/lib/browser/{settings-SZCDKHWO.mjs → settings-467GVEBU.mjs} +3 -3
  25. package/dist/lib/browser/types.mjs +2 -2
  26. package/dist/lib/node/{ScriptContainer-G6FZU4AM.cjs → ScriptContainer-VHHYWC3A.cjs} +26 -28
  27. package/dist/lib/node/ScriptContainer-VHHYWC3A.cjs.map +7 -0
  28. package/dist/lib/node/{artifact-definition-BXQCFPAH.cjs → artifact-definition-3SNVJ34V.cjs} +20 -19
  29. package/dist/lib/node/artifact-definition-3SNVJ34V.cjs.map +7 -0
  30. package/dist/lib/node/{chunk-5UH3F7TA.cjs → chunk-2XX4L67K.cjs} +4 -4
  31. package/dist/lib/node/chunk-2XX4L67K.cjs.map +7 -0
  32. package/dist/lib/node/{chunk-ALY3N6PW.cjs → chunk-AOKGOI5J.cjs} +6 -6
  33. package/dist/lib/node/{chunk-XKYJYY3T.cjs → chunk-MSH4SVCN.cjs} +107 -61
  34. package/dist/lib/node/chunk-MSH4SVCN.cjs.map +7 -0
  35. package/dist/lib/node/chunk-W4U3OWKO.cjs +493 -0
  36. package/dist/lib/node/chunk-W4U3OWKO.cjs.map +7 -0
  37. package/dist/lib/node/{chunk-ITAJ3WRW.cjs → chunk-XCQNFRZ6.cjs} +5 -5
  38. package/dist/lib/node/chunk-XCQNFRZ6.cjs.map +7 -0
  39. package/dist/lib/node/{chunk-DJGLGRQV.cjs → chunk-XFB6JL2G.cjs} +10 -10
  40. package/dist/lib/node/chunk-XFB6JL2G.cjs.map +7 -0
  41. package/dist/lib/node/{compiler-UIBLKJKG.cjs → compiler-5ALLTH2B.cjs} +7 -7
  42. package/dist/lib/node/index.cjs +48 -45
  43. package/dist/lib/node/index.cjs.map +3 -3
  44. package/dist/lib/node/{intent-resolver-NYJFPD5B.cjs → intent-resolver-CN5WMMAD.cjs} +11 -11
  45. package/dist/lib/node/intent-resolver-CN5WMMAD.cjs.map +7 -0
  46. package/dist/lib/node/meta.json +1 -1
  47. package/dist/lib/node/{react-surface-EGSE3FMN.cjs → react-surface-VV7J7PQN.cjs} +28 -29
  48. package/dist/lib/node/react-surface-VV7J7PQN.cjs.map +7 -0
  49. package/dist/lib/node/{settings-SZFSMSKM.cjs → settings-WLYT2XQF.cjs} +9 -9
  50. package/dist/lib/node/types.cjs +4 -4
  51. package/dist/lib/node/types.cjs.map +1 -1
  52. package/dist/lib/node-esm/{ScriptContainer-7FTCFIF3.mjs → ScriptContainer-A4J44DZD.mjs} +18 -21
  53. package/dist/lib/node-esm/ScriptContainer-A4J44DZD.mjs.map +7 -0
  54. package/dist/lib/node-esm/{artifact-definition-KT4DK2LQ.mjs → artifact-definition-VAFNV62U.mjs} +8 -7
  55. package/dist/lib/node-esm/artifact-definition-VAFNV62U.mjs.map +7 -0
  56. package/dist/lib/node-esm/chunk-2RKD5MCW.mjs +468 -0
  57. package/dist/lib/node-esm/chunk-2RKD5MCW.mjs.map +7 -0
  58. package/dist/lib/node-esm/{chunk-YIWRJ25J.mjs → chunk-4YUSGXJ2.mjs} +2 -2
  59. package/dist/lib/node-esm/chunk-4YUSGXJ2.mjs.map +7 -0
  60. package/dist/lib/node-esm/{chunk-P2V2Y5LV.mjs → chunk-5S2KBIMH.mjs} +1 -1
  61. package/dist/lib/node-esm/chunk-5S2KBIMH.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-CP5LXTK5.mjs → chunk-MFXRE7ZD.mjs} +2 -2
  63. package/dist/lib/node-esm/{chunk-NRICF4KE.mjs → chunk-QHZ6KA5J.mjs} +96 -49
  64. package/dist/lib/node-esm/chunk-QHZ6KA5J.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-UNQFIERE.mjs → chunk-WQ4YIZ2L.mjs} +4 -4
  66. package/dist/lib/node-esm/{chunk-UNQFIERE.mjs.map → chunk-WQ4YIZ2L.mjs.map} +1 -1
  67. package/dist/lib/node-esm/{compiler-XTXFGZJM.mjs → compiler-K7GYROAO.mjs} +3 -3
  68. package/dist/lib/node-esm/index.mjs +21 -18
  69. package/dist/lib/node-esm/index.mjs.map +3 -3
  70. package/dist/lib/node-esm/{intent-resolver-KLBHSMW4.mjs → intent-resolver-6F7CVQEX.mjs} +5 -5
  71. package/dist/lib/node-esm/{intent-resolver-KLBHSMW4.mjs.map → intent-resolver-6F7CVQEX.mjs.map} +1 -1
  72. package/dist/lib/node-esm/meta.json +1 -1
  73. package/dist/lib/node-esm/{react-surface-7YSGHZQM.mjs → react-surface-RPNDRJVD.mjs} +14 -16
  74. package/dist/lib/node-esm/react-surface-RPNDRJVD.mjs.map +7 -0
  75. package/dist/lib/node-esm/{settings-GR4O2WHZ.mjs → settings-DR3B6GHE.mjs} +3 -3
  76. package/dist/lib/node-esm/types.mjs +2 -2
  77. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  80. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts +2 -1
  81. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts.map +1 -1
  82. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts +2 -1
  83. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  84. package/dist/types/src/components/LogsPanel/LogsPanel.d.ts +8 -0
  85. package/dist/types/src/components/LogsPanel/LogsPanel.d.ts.map +1 -0
  86. package/dist/types/src/components/LogsPanel/index.d.ts +2 -0
  87. package/dist/types/src/components/LogsPanel/index.d.ts.map +1 -0
  88. package/dist/types/src/components/ScriptContainer.d.ts +4 -2
  89. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  90. package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts +2 -1
  91. package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts.map +1 -1
  92. package/dist/types/src/components/ScriptSettingsPanel.d.ts +3 -2
  93. package/dist/types/src/components/ScriptSettingsPanel.d.ts.map +1 -1
  94. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +3 -2
  95. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  96. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +2 -1
  97. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  98. package/dist/types/src/components/index.d.ts +2 -1
  99. package/dist/types/src/components/index.d.ts.map +1 -1
  100. package/dist/types/src/hooks/deploy.d.ts +24 -0
  101. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  102. package/dist/types/src/hooks/format.d.ts +1 -1
  103. package/dist/types/src/hooks/format.d.ts.map +1 -1
  104. package/dist/types/src/hooks/template.d.ts +1 -1
  105. package/dist/types/src/hooks/template.d.ts.map +1 -1
  106. package/dist/types/src/hooks/useToolbarAction.d.ts +1 -1
  107. package/dist/types/src/hooks/useToolbarAction.d.ts.map +1 -1
  108. package/dist/types/src/hooks/useToolbarState.d.ts +2 -8
  109. package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -1
  110. package/dist/types/src/hooks/view.d.ts +3 -15
  111. package/dist/types/src/hooks/view.d.ts.map +1 -1
  112. package/dist/types/src/meta.d.ts +2 -9
  113. package/dist/types/src/meta.d.ts.map +1 -1
  114. package/dist/types/src/templates/discord.d.ts.map +1 -1
  115. package/dist/types/src/templates/index.d.ts.map +1 -1
  116. package/dist/types/src/translations.d.ts +6 -3
  117. package/dist/types/src/translations.d.ts.map +1 -1
  118. package/dist/types/src/types.d.ts +8 -2
  119. package/dist/types/src/types.d.ts.map +1 -1
  120. package/package.json +47 -43
  121. package/src/ScriptPlugin.tsx +3 -2
  122. package/src/capabilities/artifact-definition.ts +2 -1
  123. package/src/capabilities/intent-resolver.ts +1 -1
  124. package/src/capabilities/react-surface.tsx +16 -6
  125. package/src/components/LogsPanel/LogsPanel.tsx +106 -0
  126. package/src/components/LogsPanel/index.ts +5 -0
  127. package/src/components/ScriptContainer.tsx +18 -12
  128. package/src/components/ScriptSettingsPanel.tsx +1 -1
  129. package/src/components/ScriptToolbar/ScriptToolbar.tsx +1 -1
  130. package/src/components/TypescriptEditor/TypescriptEditor.tsx +1 -0
  131. package/src/components/index.ts +1 -0
  132. package/src/hooks/deploy.ts +4 -5
  133. package/src/hooks/format.ts +1 -1
  134. package/src/hooks/template.ts +1 -1
  135. package/src/hooks/useToolbarAction.ts +13 -4
  136. package/src/hooks/useToolbarState.ts +2 -2
  137. package/src/hooks/view.ts +7 -24
  138. package/src/meta.ts +2 -2
  139. package/src/templates/discord.ts +12 -5
  140. package/src/templates/index.ts +0 -7
  141. package/src/translations.ts +3 -4
  142. package/src/types.ts +2 -2
  143. package/src/vite-env.d.ts +20 -0
  144. package/dist/lib/browser/ScriptContainer-3RFMYKTV.mjs.map +0 -7
  145. package/dist/lib/browser/artifact-definition-4LWPD3DH.mjs.map +0 -7
  146. package/dist/lib/browser/chunk-5SXOHNAK.mjs +0 -240
  147. package/dist/lib/browser/chunk-5SXOHNAK.mjs.map +0 -7
  148. package/dist/lib/browser/chunk-FVVCAWNP.mjs.map +0 -7
  149. package/dist/lib/browser/chunk-G2FYNDU4.mjs.map +0 -7
  150. package/dist/lib/browser/chunk-PZPYF7M4.mjs.map +0 -7
  151. package/dist/lib/browser/chunk-VTWBVFBK.mjs +0 -234
  152. package/dist/lib/browser/chunk-VTWBVFBK.mjs.map +0 -7
  153. package/dist/lib/browser/react-surface-G4C2PZ2K.mjs.map +0 -7
  154. package/dist/lib/node/ScriptContainer-G6FZU4AM.cjs.map +0 -7
  155. package/dist/lib/node/artifact-definition-BXQCFPAH.cjs.map +0 -7
  156. package/dist/lib/node/chunk-5UH3F7TA.cjs.map +0 -7
  157. package/dist/lib/node/chunk-DJGLGRQV.cjs.map +0 -7
  158. package/dist/lib/node/chunk-ITAJ3WRW.cjs.map +0 -7
  159. package/dist/lib/node/chunk-K3ZZWVXS.cjs +0 -269
  160. package/dist/lib/node/chunk-K3ZZWVXS.cjs.map +0 -7
  161. package/dist/lib/node/chunk-TOXBGIEI.cjs +0 -261
  162. package/dist/lib/node/chunk-TOXBGIEI.cjs.map +0 -7
  163. package/dist/lib/node/chunk-XKYJYY3T.cjs.map +0 -7
  164. package/dist/lib/node/intent-resolver-NYJFPD5B.cjs.map +0 -7
  165. package/dist/lib/node/react-surface-EGSE3FMN.cjs.map +0 -7
  166. package/dist/lib/node-esm/ScriptContainer-7FTCFIF3.mjs.map +0 -7
  167. package/dist/lib/node-esm/artifact-definition-KT4DK2LQ.mjs.map +0 -7
  168. package/dist/lib/node-esm/chunk-2AFXX34U.mjs +0 -241
  169. package/dist/lib/node-esm/chunk-2AFXX34U.mjs.map +0 -7
  170. package/dist/lib/node-esm/chunk-NRICF4KE.mjs.map +0 -7
  171. package/dist/lib/node-esm/chunk-P2V2Y5LV.mjs.map +0 -7
  172. package/dist/lib/node-esm/chunk-S64WSJQK.mjs +0 -235
  173. package/dist/lib/node-esm/chunk-S64WSJQK.mjs.map +0 -7
  174. package/dist/lib/node-esm/chunk-YIWRJ25J.mjs.map +0 -7
  175. package/dist/lib/node-esm/react-surface-7YSGHZQM.mjs.map +0 -7
  176. /package/dist/lib/browser/{chunk-6MOQ4BP3.mjs.map → chunk-FG66JYON.mjs.map} +0 -0
  177. /package/dist/lib/browser/{compiler-YY2XSKHQ.mjs.map → compiler-ZQLHHJ5P.mjs.map} +0 -0
  178. /package/dist/lib/browser/{settings-SZCDKHWO.mjs.map → settings-467GVEBU.mjs.map} +0 -0
  179. /package/dist/lib/node/{chunk-ALY3N6PW.cjs.map → chunk-AOKGOI5J.cjs.map} +0 -0
  180. /package/dist/lib/node/{compiler-UIBLKJKG.cjs.map → compiler-5ALLTH2B.cjs.map} +0 -0
  181. /package/dist/lib/node/{settings-SZFSMSKM.cjs.map → settings-WLYT2XQF.cjs.map} +0 -0
  182. /package/dist/lib/node-esm/{chunk-CP5LXTK5.mjs.map → chunk-MFXRE7ZD.mjs.map} +0 -0
  183. /package/dist/lib/node-esm/{compiler-XTXFGZJM.mjs.map → compiler-K7GYROAO.mjs.map} +0 -0
  184. /package/dist/lib/node-esm/{settings-GR4O2WHZ.mjs.map → settings-DR3B6GHE.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/DebugPanel/DebugPanel.tsx", "../../../src/components/ScriptSettings/ScriptSettings.tsx", "../../../src/components/ScriptSettingsPanel.tsx", "../../../src/components/index.ts"],
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", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Credential } from '@dxos/protocols/proto/dxos/halo/credentials';\nimport { useClient } from '@dxos/react-client';\nimport { Button, Select, useTranslation } from '@dxos/react-ui';\nimport { type EditorInputMode, EditorInputModes } from '@dxos/react-ui-editor';\nimport { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\nimport { type ScriptSettingsProps } from '../../types';\n\nexport const ScriptSettings = ({ settings }: { settings: ScriptSettingsProps }) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const client = useClient();\n\n // TODO(burdon): Check token.\n const handleAuthenticate = async () => {\n const { identityKey } = client.halo.identity.get()!;\n await client.halo.writeCredentials([\n {\n issuer: identityKey,\n issuanceDate: new Date(),\n subject: {\n id: identityKey,\n assertion: {\n '@type': 'dxos.halo.credentials.ServiceAccess',\n serverName: 'hub.dxos.network',\n serverKey: identityKey,\n identityKey,\n capabilities: ['composer:beta'],\n },\n },\n } satisfies Credential,\n ]);\n };\n\n return (\n <DeprecatedFormContainer>\n {/* TODO(wittjosiah): Hide outside of dev environments. */}\n <DeprecatedFormInput label={t('authenticate action label')}>\n <Button onClick={handleAuthenticate}>{t('authenticate button label')}</Button>\n </DeprecatedFormInput>\n\n <DeprecatedFormInput label={t('editor input mode label')}>\n <Select.Root\n value={settings.editorInputMode ?? 'default'}\n onValueChange={(value) => {\n settings.editorInputMode = value as EditorInputMode;\n }}\n >\n <Select.TriggerButton placeholder={t('select editor input mode placeholder')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {EditorInputModes.map((mode) => (\n <Select.Option key={mode} value={mode}>\n {t(`settings editor input mode ${mode} label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </DeprecatedFormInput>\n </DeprecatedFormContainer>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Octokit } from '@octokit/core';\nimport React, { type ChangeEvent, useCallback, useEffect, useState } from 'react';\n\nimport { createIntent, SettingsAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { FunctionType, type ScriptType, getInvocationUrl, getUserFunctionUrlInMetadata } from '@dxos/functions/types';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, getMeta, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { Button, Clipboard, Input, Separator, useControlledState, useTranslation } from '@dxos/react-ui';\nimport { AccessTokenType } from '@dxos/schema';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\n// TODO(wittjosiah): Factor out.\n// From https://stackoverflow.com/a/67243723/2804332\nconst kebabize = (str: string) => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? '-' : '') + $.toLowerCase());\n\nexport type ScriptSettingsPanelProps = {\n script: ScriptType;\n};\n\nexport const ScriptSettingsPanel = ({ script }: ScriptSettingsPanelProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const client = useClient();\n const space = getSpace(script);\n const [fn] = useQuery(space, Filter.schema(FunctionType, { source: script }));\n const [githubToken] = useQuery(space, Filter.schema(AccessTokenType, { source: 'github.com' }));\n const gistKey = getMeta(script).keys.find(({ source }) => source === 'github.com');\n const [gistUrl, setGistUrl] = useState<string | undefined>();\n\n useEffect(() => {\n const token = githubToken?.token;\n const gistId = gistKey?.id;\n if (!token || !gistId) {\n setGistUrl(undefined);\n return;\n }\n\n const timeout = setTimeout(async () => {\n try {\n const octokit = new Octokit({ auth: githubToken.token });\n const response = await octokit.request('GET /gists/{gist_id}', {\n gist_id: gistId,\n });\n setGistUrl(response.data.html_url);\n } catch (err) {\n log.catch(err);\n setGistUrl(undefined);\n }\n });\n\n return () => clearTimeout(timeout);\n }, [githubToken, gistKey]);\n\n const [binding, setBinding] = useControlledState(fn?.binding ?? '');\n const handleBindingChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n setBinding(event.target.value);\n },\n [setBinding],\n );\n const handleBindingBlur = useCallback(() => {\n fn.binding = binding;\n }, [fn, binding]);\n\n const functionPath = fn && getUserFunctionUrlInMetadata(getMeta(fn));\n const functionUrl =\n functionPath &&\n getInvocationUrl(functionPath, client.config.values.runtime?.services?.edge?.url ?? '', {\n spaceId: space?.id,\n });\n\n const handleOpenTokenManager = useCallback(\n () => dispatch(createIntent(SettingsAction.Open, { plugin: 'dxos.org/plugin/token-manager' })),\n [],\n );\n\n const [publishing, setPublishing] = useState(false);\n const handlePublish = useCallback(async () => {\n setPublishing(true);\n const octokit = new Octokit({ auth: githubToken.token });\n const source = await script.source.load();\n const filename = script.name ? kebabize(script.name) : 'composer-script';\n const files = { [`${filename}.ts`]: { content: source.content } };\n\n try {\n // TODO(wittjosiah): Factor out to intent.\n const meta = getMeta(script);\n const githubKey = meta.keys.find(({ source }) => source === 'github.com');\n const gistId = githubKey?.id;\n if (gistId) {\n await octokit.request('PATCH /gists/{gist_id}', {\n gist_id: gistId,\n files,\n });\n } else {\n const response = await octokit.request('POST /gists', {\n public: true,\n files,\n });\n if (response.data.id) {\n meta.keys.push({ source: 'github.com', id: response.data.id });\n }\n }\n } finally {\n setPublishing(false);\n }\n }, [script, githubToken]);\n\n return (\n <>\n <div role='form' className='flex flex-col w-full p-2 gap-4'>\n <Input.Root>\n <div role='none' className='flex flex-col gap-1'>\n <Input.Label>{t('description label')}</Input.Label>\n <Input.TextInput\n placeholder={t('description placeholder')}\n value={script.description ?? ''}\n onChange={(event) => {\n script.description = event.target.value;\n }}\n />\n </div>\n </Input.Root>\n </div>\n {fn && functionUrl && (\n <>\n <Separator />\n <div role='form' className='flex flex-col w-full p-2 gap-4'>\n <h2>{t('remote function settings heading')}</h2>\n <Input.Root>\n <div role='none' className='flex flex-col gap-1'>\n <Input.Label>{t('function url label')}</Input.Label>\n <div role='none' className='flex gap-1'>\n <Input.TextInput\n disabled\n value={functionUrl}\n onChange={(event) => {\n fn.name = event.target.value;\n }}\n />\n <Clipboard.IconButton value={functionUrl} />\n </div>\n </div>\n </Input.Root>\n <Input.Root>\n <div role='none' className='flex flex-col gap-1'>\n <Input.Label>{t('function binding label')}</Input.Label>\n <Input.TextInput\n placeholder={t('function binding placeholder')}\n value={binding}\n onChange={handleBindingChange}\n onBlur={handleBindingBlur}\n />\n </div>\n </Input.Root>\n </div>\n </>\n )}\n <Separator />\n <div className='flex flex-col w-full p-2 gap-4'>\n <div>\n <h2>{t('script publish settings label')}</h2>\n <p className='text-description text-sm'>{t('script publish settings description')}</p>\n </div>\n {!githubToken && (\n <div className='flex flex-col items-center justify-center gap-2'>\n <span>{t('no github token label')}</span>\n <Button onClick={handleOpenTokenManager}>{t('open token manager label')}</Button>\n </div>\n )}\n {githubToken && (\n <div className='flex justify-end gap-2'>\n {gistUrl && <Clipboard.IconButton value={gistUrl} />}\n <Button disabled={publishing} onClick={handlePublish}>\n {t(publishing ? 'publishing label' : 'publish label')}\n </Button>\n </div>\n )}\n </div>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './DebugPanel';\nexport * from './LogsPanel';\nexport * from './ScriptSettings';\nexport * from './ScriptSettingsPanel';\n\nexport const ScriptContainer = lazy(() => import('./ScriptContainer'));\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_react_ui", "import_log", "import_react_client", "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", "React", "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", "ScriptSettings", "settings", "client", "useClient", "handleAuthenticate", "identityKey", "halo", "identity", "writeCredentials", "issuer", "issuanceDate", "Date", "subject", "id", "assertion", "serverName", "serverKey", "capabilities", "DeprecatedFormContainer", "DeprecatedFormInput", "label", "Select", "editorInputMode", "onValueChange", "TriggerButton", "Portal", "Content", "Viewport", "EditorInputModes", "mode", "Option", "kebabize", "str", "$", "ofs", "toLowerCase", "ScriptSettingsPanel", "script", "dispatchPromise", "dispatch", "useIntentDispatcher", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "source", "githubToken", "AccessTokenType", "gistKey", "getMeta", "keys", "find", "gistUrl", "setGistUrl", "token", "gistId", "timeout", "octokit", "Octokit", "auth", "request", "gist_id", "html_url", "clearTimeout", "binding", "setBinding", "useControlledState", "handleBindingChange", "useCallback", "event", "handleBindingBlur", "functionPath", "getUserFunctionUrlInMetadata", "getInvocationUrl", "config", "values", "runtime", "services", "edge", "url", "spaceId", "handleOpenTokenManager", "createIntent", "SettingsAction", "Open", "plugin", "publishing", "setPublishing", "handlePublish", "load", "filename", "files", "content", "meta", "githubKey", "public", "push", "role", "Label", "description", "Separator", "h2", "disabled", "Clipboard", "IconButton", "onBlur", "p", "span", "ScriptContainer", "lazy"]
7
+ }
@@ -16,14 +16,14 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_ITAJ3WRW_exports = {};
20
- __export(chunk_ITAJ3WRW_exports, {
19
+ var chunk_XCQNFRZ6_exports = {};
20
+ __export(chunk_XCQNFRZ6_exports, {
21
21
  templates: () => templates
22
22
  });
23
- module.exports = __toCommonJS(chunk_ITAJ3WRW_exports);
23
+ module.exports = __toCommonJS(chunk_XCQNFRZ6_exports);
24
24
  var chat_default = "//\n// Copyright 2024 DXOS.org\n//\n\n// @ts-ignore\nimport { transformServerSentEvents } from 'https://esm.sh/@dxos/script-toolbox';\n\n/**\n * Chatbot that answers questions based on the context data.\n */\nexport default async ({\n event: {\n data: { request },\n },\n context: { space, ai },\n}: any) => {\n const textBody = await request.text();\n let parsedRequest: any;\n try {\n parsedRequest = JSON.parse(textBody);\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 ${textBody}\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";
25
25
  var chess_default = "// @ts-ignore\nimport { defineFunction, S } from 'dxos:functions';\n// @ts-ignore\nimport { Chess } from 'https://esm.sh/chess.js@0.13.1';\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 ({\n event: {\n data: { changedObjectId, player = 'b' },\n },\n context: { space },\n }: 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";
26
- var discord_default = "//\n// Copyright 2025 DXOS.org\n//\n\n// @ts-ignore\nimport { createStatic, EchoObject, defineFunction, DXN, Filter, ObjectId, S } from 'dxos:functions';\nimport {\n FetchHttpClient,\n // @ts-ignore\n} from 'https://esm.sh/@effect/platform@0.77.2?deps=effect@3.13.3';\n// @ts-ignore\nimport { DiscordConfig, DiscordREST, DiscordRESTMemoryLive } from 'https://esm.sh/dfx@0.113.0?deps=effect@3.13.3';\n// @ts-ignore\nimport { Effect, Config, Redacted, Ref } from 'https://esm.sh/effect@3.13.3';\n\nconst MessageSchema = S.Struct({\n id: S.String,\n foreignId: S.Any, // bigint?\n from: S.String,\n created: S.String,\n content: S.String,\n}).pipe(EchoObject('example.com/type/Message', '0.1.0'));\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: ({\n event: {\n data: { channelId, queueId, after = DEFAULT_AFTER, pageSize = 5 },\n },\n context: { space },\n }: any) =>\n Effect.gen(function* () {\n const { token } = yield* Effect.tryPromise(() =>\n space.db.query(Filter.typename('dxos.org/type/AccessToken', { source: 'discord.com' })).first(),\n );\n const { objects } = yield* Effect.tryPromise(() => space.queues.queryQueue(DXN.parse(queueId)));\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 createStatic(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(() => space.queues.insertIntoQueue(DXN.parse(queueId), queueMessages));\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";
26
+ var discord_default = "//\n// Copyright 2025 DXOS.org\n//\n\n// @ts-ignore\nimport { createStatic, EchoObject, defineFunction, DXN, Filter, ObjectId, S } from 'dxos:functions';\nimport {\n FetchHttpClient,\n // @ts-ignore\n} from 'https://esm.sh/@effect/platform@0.77.2?deps=effect@3.13.3';\n// @ts-ignore\nimport { DiscordConfig, DiscordREST, DiscordRESTMemoryLive } from 'https://esm.sh/dfx@0.113.0?deps=effect@3.13.3';\n// @ts-ignore\nimport { Effect, Config, Redacted, Ref } from 'https://esm.sh/effect@3.13.3';\n\nconst MessageSchema = S.Struct({\n id: S.String,\n foreignId: S.Any, // bigint?\n from: S.String,\n created: S.String,\n content: S.String,\n}).pipe(EchoObject('example.com/type/Message', '0.1.0'));\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: ({\n event: {\n data: { channelId, queueId, after = DEFAULT_AFTER, pageSize = 5 },\n },\n context: { space },\n }: 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 createStatic(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";
27
27
  var echo_default = "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Echos the request data.\n */\nexport default async ({\n event: {\n data: { request },\n },\n}: any) => {\n const data = await request.json();\n return new Response(JSON.stringify(data ?? {}), {\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n};\n";
28
28
  var email_default = "//\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 ({\n event: {\n data: { request },\n },\n context: { space },\n}: any) => {\n const { data, trigger } = (await request.json()) as RequestPayload;\n\n const documentId = trigger.meta.targetDocumentId;\n const document = await space.db.query({ id: documentId }, { format: 'plain' }).first();\n\n const contentId = document.content['/'].split(':')[3];\n const documentContent = await space.db.query({ id: contentId }, { format: 'plain' }).first();\n const modifiedContent = [\n documentContent.content,\n '',\n '---',\n `**From:** ${data.from}`,\n `**Subject:** ${data.subject}`,\n `**Date:** ${data.created}`,\n '',\n data.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 data: { from: string; subject: string; created: string; body: string };\n trigger: { meta: { targetDocumentId: string } };\n};\n";
29
29
  var forex_effect_default = "//\n// Copyright 2025 DXOS.org\n//\n\n// @ts-ignore\nimport { defineFunction, S } from 'dxos:functions';\nimport {\n HttpClient,\n HttpClientRequest,\n FetchHttpClient,\n // @ts-ignore\n} from 'https://esm.sh/@effect/platform@0.77.2?deps=effect@3.13.3';\n// @ts-ignore\nimport { Effect, Schedule } from 'https://esm.sh/effect@3.13.3';\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 ({\n event: {\n data: { from, to },\n },\n }: 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(1000).pipe(Schedule.compose(Schedule.recurs(3)))),\n Effect.scoped,\n );\n return res.data.rates[to].toString();\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n});\n";
@@ -74,4 +74,4 @@ var templates = [
74
74
  0 && (module.exports = {
75
75
  templates
76
76
  });
77
- //# sourceMappingURL=chunk-ITAJ3WRW.cjs.map
77
+ //# sourceMappingURL=chunk-XCQNFRZ6.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["raw-loader:./chat.ts?raw", "raw-loader:./chess.ts?raw", "raw-loader:./discord.ts?raw", "raw-loader:./echo.ts?raw", "raw-loader:./email.ts?raw", "raw-loader:./forex-effect.ts?raw", "raw-loader:./forex.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';\n\n/**\n * Chatbot that answers questions based on the context data.\n */\nexport default async ({\n event: {\n data: { request },\n },\n context: { space, ai },\n}: any) => {\n const textBody = await request.text();\n let parsedRequest: any;\n try {\n parsedRequest = JSON.parse(textBody);\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 ${textBody}\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", "// @ts-ignore\nimport { defineFunction, S } from 'dxos:functions';\n// @ts-ignore\nimport { Chess } from 'https://esm.sh/chess.js@0.13.1';\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 ({\n event: {\n data: { changedObjectId, player = 'b' },\n },\n context: { space },\n }: 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 { createStatic, EchoObject, defineFunction, DXN, Filter, ObjectId, S } from 'dxos:functions';\nimport {\n FetchHttpClient,\n // @ts-ignore\n} from 'https://esm.sh/@effect/platform@0.77.2?deps=effect@3.13.3';\n// @ts-ignore\nimport { DiscordConfig, DiscordREST, DiscordRESTMemoryLive } from 'https://esm.sh/dfx@0.113.0?deps=effect@3.13.3';\n// @ts-ignore\nimport { Effect, Config, Redacted, Ref } from 'https://esm.sh/effect@3.13.3';\n\nconst MessageSchema = S.Struct({\n id: S.String,\n foreignId: S.Any, // bigint?\n from: S.String,\n created: S.String,\n content: S.String,\n}).pipe(EchoObject('example.com/type/Message', '0.1.0'));\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: ({\n event: {\n data: { channelId, queueId, after = DEFAULT_AFTER, pageSize = 5 },\n },\n context: { space },\n }: 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 createStatic(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 ({\n event: {\n data: { request },\n },\n}: any) => {\n const data = await request.json();\n return new Response(JSON.stringify(data ?? {}), {\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Appends a message to the end of a Document configured through a trigger.\n * Trigger must have a targetDocumentId field set in Meta.\n */\nexport default async ({\n event: {\n data: { request },\n },\n context: { space },\n}: any) => {\n const { data, trigger } = (await request.json()) as RequestPayload;\n\n const documentId = trigger.meta.targetDocumentId;\n const document = await space.db.query({ id: documentId }, { format: 'plain' }).first();\n\n const contentId = document.content['/'].split(':')[3];\n const documentContent = await space.db.query({ id: contentId }, { format: 'plain' }).first();\n const modifiedContent = [\n documentContent.content,\n '',\n '---',\n `**From:** ${data.from}`,\n `**Subject:** ${data.subject}`,\n `**Date:** ${data.created}`,\n '',\n data.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 data: { from: string; subject: string; created: string; body: string };\n trigger: { meta: { targetDocumentId: string } };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @ts-ignore\nimport { defineFunction, S } from 'dxos:functions';\nimport {\n HttpClient,\n HttpClientRequest,\n FetchHttpClient,\n // @ts-ignore\n} from 'https://esm.sh/@effect/platform@0.77.2?deps=effect@3.13.3';\n// @ts-ignore\nimport { Effect, Schedule } from 'https://esm.sh/effect@3.13.3';\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 ({\n event: {\n data: { from, to },\n },\n }: 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(1000).pipe(Schedule.compose(Schedule.recurs(3)))),\n Effect.scoped,\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 { defineFunction, S } 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 ({\n event: {\n data: { from, to },\n },\n }: 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 2024 DXOS.org\n//\n\nimport chat from './chat.ts?raw';\nimport chess from './chess.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';\n\nconst removeHeader = (str: string) => str.split('\\n').slice(4).join('\\n');\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"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,eAAA;ACAA,IAAA,gBAAA;ACAA,IAAA,kBAAA;ACAA,IAAA,eAAA;ACAA,IAAA,gBAAA;ACAA,IAAA,uBAAA;ACAA,IAAA,gBAAA;ACYA,IAAMA,eAAe,CAACC,QAAgBA,IAAIC,MAAM,IAAA,EAAMC,MAAM,CAAA,EAAGC,KAAK,IAAA;AAS7D,IAAMC,YAAwB;EACnC;IACEC,IAAI;IACJC,MAAM;IACNC,QAAQR,aAAaS,YAAAA;EACvB;EACA;IACEH,IAAI;IACJC,MAAM;IACNC,QAAQR,aAAaU,aAAAA;EACvB;EACA;IACEJ,IAAI;IACJC,MAAM;IACNC,QAAQR,aAAaW,oBAAAA;EACvB;EACA;IACEL,IAAI;IACJC,MAAM;IACNC,QAAQR,aAAaY,YAAAA;IACrBC,UAAU;EACZ;EACA;IACEP,IAAI;IACJC,MAAM;IACNC,QAAQR,aAAac,aAAAA;IACrBD,UAAU;EACZ;EACA;IACEP,IAAI;IACJC,MAAM;IACNC,QAAQR,aAAae,aAAAA;IACrBF,UAAU;EACZ;EACA;IACEP,IAAI;IACJC,MAAM;IACNC,QAAQR,aAAagB,eAAAA;IACrBH,UAAU;EACZ;;",
6
+ "names": ["removeHeader", "str", "split", "slice", "join", "templates", "id", "name", "source", "echo", "forex", "forexEffect", "chat", "presetId", "chess", "email", "discord"]
7
+ }
@@ -16,26 +16,26 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_DJGLGRQV_exports = {};
20
- __export(chunk_DJGLGRQV_exports, {
19
+ var chunk_XFB6JL2G_exports = {};
20
+ __export(chunk_XFB6JL2G_exports, {
21
21
  ScriptAction: () => ScriptAction,
22
22
  ScriptSettingsSchema: () => ScriptSettingsSchema
23
23
  });
24
- module.exports = __toCommonJS(chunk_DJGLGRQV_exports);
25
- var import_chunk_5UH3F7TA = require("./chunk-5UH3F7TA.cjs");
26
- var import_AST = require("@effect/schema/AST");
24
+ module.exports = __toCommonJS(chunk_XFB6JL2G_exports);
25
+ var import_chunk_2XX4L67K = require("./chunk-2XX4L67K.cjs");
26
+ var import_SchemaAST = require("effect/SchemaAST");
27
27
  var import_echo = require("@dxos/client/echo");
28
28
  var import_echo_schema = require("@dxos/echo-schema");
29
- var import_functions = require("@dxos/functions");
29
+ var import_types = require("@dxos/functions/types");
30
30
  var import_react_ui_editor = require("@dxos/react-ui-editor");
31
31
  var ScriptAction;
32
32
  (function(ScriptAction2) {
33
- const SCRIPT_ACTION = `${import_chunk_5UH3F7TA.SCRIPT_PLUGIN}/action`;
33
+ const SCRIPT_ACTION = `${import_chunk_2XX4L67K.SCRIPT_PLUGIN}/action`;
34
34
  ScriptAction2.CreateScriptSchema = import_echo_schema.S.Struct({
35
35
  name: import_echo_schema.S.optional(import_echo_schema.S.String),
36
36
  // TODO(wittjosiah): Placeholder annotation?
37
37
  gistUrl: import_echo_schema.S.optional(import_echo_schema.S.String.annotations({
38
- [import_AST.TitleAnnotationId]: "Import from Gist (url)"
38
+ [import_SchemaAST.TitleAnnotationId]: "Import from Gist (url)"
39
39
  }))
40
40
  });
41
41
  class Create extends import_echo_schema.S.TaggedClass()(`${SCRIPT_ACTION}/create`, {
@@ -43,7 +43,7 @@ var ScriptAction;
43
43
  space: import_echo.SpaceSchema
44
44
  })),
45
45
  output: import_echo_schema.S.Struct({
46
- object: import_functions.ScriptType
46
+ object: import_types.ScriptType
47
47
  })
48
48
  }) {
49
49
  }
@@ -57,4 +57,4 @@ var ScriptSettingsSchema = import_echo_schema.S.mutable(import_echo_schema.S.Str
57
57
  ScriptAction,
58
58
  ScriptSettingsSchema
59
59
  });
60
- //# sourceMappingURL=chunk-DJGLGRQV.cjs.map
60
+ //# sourceMappingURL=chunk-XFB6JL2G.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { TitleAnnotationId } from 'effect/SchemaAST';\n\nimport { SpaceSchema } from '@dxos/client/echo';\nimport { S } from '@dxos/echo-schema';\nimport { ScriptType } from '@dxos/functions/types';\nimport { EditorInputMode } from '@dxos/react-ui-editor';\n\nimport { SCRIPT_PLUGIN } from './meta';\n\nexport namespace ScriptAction {\n const SCRIPT_ACTION = `${SCRIPT_PLUGIN}/action`;\n\n export const CreateScriptSchema = S.Struct({\n name: S.optional(S.String),\n // TODO(wittjosiah): Placeholder annotation?\n gistUrl: S.optional(S.String.annotations({ [TitleAnnotationId]: 'Import from Gist (url)' })),\n });\n\n export type CreateScriptProps = S.Schema.Type<typeof CreateScriptSchema>;\n\n export class Create extends S.TaggedClass<Create>()(`${SCRIPT_ACTION}/create`, {\n input: S.extend(CreateScriptSchema, S.Struct({ space: SpaceSchema })),\n output: S.Struct({\n object: ScriptType,\n }),\n }) {}\n}\n\nexport const ScriptSettingsSchema = S.mutable(\n S.Struct({\n editorInputMode: EditorInputMode,\n }),\n);\n\nexport type ScriptSettingsProps = S.Schema.Type<typeof ScriptSettingsSchema>;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,uBAAkC;AAElC,kBAA4B;AAC5B,yBAAkB;AAClB,mBAA2B;AAC3B,6BAAgC;;UAIfA,eAAAA;AACf,QAAMC,gBAAgB,GAAGC,mCAAAA;gBAEZC,qBAAqBC,qBAAEC,OAAO;IACzCC,MAAMF,qBAAEG,SAASH,qBAAEI,MAAM;;IAEzBC,SAASL,qBAAEG,SAASH,qBAAEI,OAAOE,YAAY;MAAE,CAACC,kCAAAA,GAAoB;IAAyB,CAAA,CAAA;EAC3F,CAAA;EAIO,MAAMC,eAAeR,qBAAES,YAAW,EAAW,GAAGZ,aAAAA,WAAwB;IAC7Ea,OAAOV,qBAAEW,OAAMf,cAACG,oBAAoBC,qBAAEC,OAAO;MAAEW,OAAOC;IAAY,CAAA,CAAA;IAClEC,QAAQd,qBAAEC,OAAO;MACfc,QAAQC;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBALSR,SAAAA;AAMf,GAjBiBZ,iBAAAA,eAAAA,CAAAA,EAAAA;AAmBV,IAAMqB,uBAAuBjB,qBAAEkB,QACpClB,qBAAEC,OAAO;EACPkB,iBAAiBC;AACnB,CAAA,CAAA;",
6
+ "names": ["ScriptAction", "SCRIPT_ACTION", "SCRIPT_PLUGIN", "CreateScriptSchema", "S", "Struct", "name", "optional", "String", "gistUrl", "annotations", "TitleAnnotationId", "Create", "TaggedClass", "input", "extend", "space", "SpaceSchema", "output", "object", "ScriptType", "ScriptSettingsSchema", "mutable", "editorInputMode", "EditorInputMode"]
7
+ }
@@ -26,13 +26,13 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var compiler_UIBLKJKG_exports = {};
30
- __export(compiler_UIBLKJKG_exports, {
29
+ var compiler_5ALLTH2B_exports = {};
30
+ __export(compiler_5ALLTH2B_exports, {
31
31
  default: () => compiler_default
32
32
  });
33
- module.exports = __toCommonJS(compiler_UIBLKJKG_exports);
34
- var import_chunk_ALY3N6PW = require("./chunk-ALY3N6PW.cjs");
35
- var import_chunk_5UH3F7TA = require("./chunk-5UH3F7TA.cjs");
33
+ module.exports = __toCommonJS(compiler_5ALLTH2B_exports);
34
+ var import_chunk_AOKGOI5J = require("./chunk-AOKGOI5J.cjs");
35
+ var import_chunk_2XX4L67K = require("./chunk-2XX4L67K.cjs");
36
36
  var import_esbuild = __toESM(require("esbuild-wasm/esbuild.wasm?url"));
37
37
  var import_app_framework = require("@dxos/app-framework");
38
38
  var import_bundler = require("@dxos/functions/bundler");
@@ -99,6 +99,6 @@ var compiler_default = async () => {
99
99
  await (0, import_bundler.initializeBundler)({
100
100
  wasmUrl: import_esbuild.default
101
101
  });
102
- return (0, import_app_framework.contributes)(import_chunk_ALY3N6PW.ScriptCapabilities.Compiler, compiler);
102
+ return (0, import_app_framework.contributes)(import_chunk_AOKGOI5J.ScriptCapabilities.Compiler, compiler);
103
103
  };
104
- //# sourceMappingURL=compiler-UIBLKJKG.cjs.map
104
+ //# sourceMappingURL=compiler-5ALLTH2B.cjs.map
@@ -28,48 +28,51 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var node_exports = {};
30
30
  __export(node_exports, {
31
- DebugPanel: () => import_chunk_K3ZZWVXS.DebugPanel,
32
- SCRIPT_PLUGIN: () => import_chunk_5UH3F7TA.SCRIPT_PLUGIN,
33
- ScriptCapabilities: () => import_chunk_ALY3N6PW.ScriptCapabilities,
34
- ScriptContainer: () => import_chunk_TOXBGIEI.ScriptContainer,
31
+ DebugPanel: () => import_chunk_W4U3OWKO.DebugPanel,
32
+ LogsPanel: () => import_chunk_MSH4SVCN.LogsPanel,
33
+ SCRIPT_PLUGIN: () => import_chunk_2XX4L67K.SCRIPT_PLUGIN,
34
+ ScriptCapabilities: () => import_chunk_AOKGOI5J.ScriptCapabilities,
35
+ ScriptContainer: () => import_chunk_W4U3OWKO.ScriptContainer,
35
36
  ScriptPlugin: () => ScriptPlugin,
36
- ScriptSettings: () => import_chunk_TOXBGIEI.ScriptSettings,
37
- ScriptSettingsPanel: () => import_chunk_TOXBGIEI.ScriptSettingsPanel,
38
- meta: () => import_chunk_5UH3F7TA.meta
37
+ ScriptSettings: () => import_chunk_W4U3OWKO.ScriptSettings,
38
+ ScriptSettingsPanel: () => import_chunk_W4U3OWKO.ScriptSettingsPanel,
39
+ meta: () => import_chunk_2XX4L67K.meta
39
40
  });
40
41
  module.exports = __toCommonJS(node_exports);
41
- var import_chunk_TOXBGIEI = require("./chunk-TOXBGIEI.cjs");
42
- var import_chunk_ALY3N6PW = require("./chunk-ALY3N6PW.cjs");
43
- var import_chunk_K3ZZWVXS = require("./chunk-K3ZZWVXS.cjs");
44
- var import_chunk_DJGLGRQV = require("./chunk-DJGLGRQV.cjs");
45
- var import_chunk_5UH3F7TA = require("./chunk-5UH3F7TA.cjs");
42
+ var import_chunk_W4U3OWKO = require("./chunk-W4U3OWKO.cjs");
43
+ var import_chunk_AOKGOI5J = require("./chunk-AOKGOI5J.cjs");
44
+ var import_chunk_MSH4SVCN = require("./chunk-MSH4SVCN.cjs");
45
+ var import_chunk_XCQNFRZ6 = require("./chunk-XCQNFRZ6.cjs");
46
+ var import_chunk_XFB6JL2G = require("./chunk-XFB6JL2G.cjs");
47
+ var import_chunk_2XX4L67K = require("./chunk-2XX4L67K.cjs");
46
48
  var import_app_framework = require("@dxos/app-framework");
47
49
  var import_app_framework2 = require("@dxos/app-framework");
48
- var import_functions = require("@dxos/functions");
50
+ var import_echo_schema = require("@dxos/echo-schema");
51
+ var import_types = require("@dxos/functions/types");
49
52
  var import_live_object = require("@dxos/live-object");
50
53
  var import_plugin_client = require("@dxos/plugin-client");
51
54
  var import_plugin_deck = require("@dxos/plugin-deck");
52
55
  var import_plugin_space = require("@dxos/plugin-space");
53
- var import_types = require("@dxos/plugin-space/types");
56
+ var import_types2 = require("@dxos/plugin-space/types");
54
57
  var import_echo = require("@dxos/react-client/echo");
55
58
  var import_app_framework3 = require("@dxos/app-framework");
56
- var import_functions2 = require("@dxos/functions");
57
- var Compiler = (0, import_app_framework.lazy)(() => import("./compiler-UIBLKJKG.cjs"));
58
- var IntentResolver = (0, import_app_framework.lazy)(() => import("./intent-resolver-NYJFPD5B.cjs"));
59
- var ReactSurface = (0, import_app_framework.lazy)(() => import("./react-surface-EGSE3FMN.cjs"));
60
- var ScriptSettings2 = (0, import_app_framework.lazy)(() => import("./settings-SZFSMSKM.cjs"));
61
- var ArtifactDefinition = (0, import_app_framework.lazy)(() => import("./artifact-definition-BXQCFPAH.cjs"));
59
+ var import_types3 = require("@dxos/functions/types");
60
+ var Compiler = (0, import_app_framework.lazy)(() => import("./compiler-5ALLTH2B.cjs"));
61
+ var IntentResolver = (0, import_app_framework.lazy)(() => import("./intent-resolver-CN5WMMAD.cjs"));
62
+ var ReactSurface = (0, import_app_framework.lazy)(() => import("./react-surface-VV7J7PQN.cjs"));
63
+ var ScriptSettings2 = (0, import_app_framework.lazy)(() => import("./settings-WLYT2XQF.cjs"));
64
+ var ArtifactDefinition = (0, import_app_framework.lazy)(() => import("./artifact-definition-3SNVJ34V.cjs"));
62
65
  var ScriptEvents;
63
66
  (function(ScriptEvents2) {
64
- ScriptEvents2.SetupCompiler = (0, import_app_framework3.defineEvent)(`${import_chunk_5UH3F7TA.SCRIPT_PLUGIN}/event/setup-compiler`);
67
+ ScriptEvents2.SetupCompiler = (0, import_app_framework3.defineEvent)(`${import_chunk_2XX4L67K.SCRIPT_PLUGIN}/event/setup-compiler`);
65
68
  })(ScriptEvents || (ScriptEvents = {}));
66
69
  var translations_default = [
67
70
  {
68
71
  "en-US": {
69
- [import_functions2.ScriptType.typename]: {
72
+ [import_types3.ScriptType.typename]: {
70
73
  "typename label": "Script"
71
74
  },
72
- [import_chunk_5UH3F7TA.SCRIPT_PLUGIN]: {
75
+ [import_chunk_2XX4L67K.SCRIPT_PLUGIN]: {
73
76
  "plugin name": "Scripts",
74
77
  "object title placeholder": "New script",
75
78
  "create object label": "Create script",
@@ -105,41 +108,40 @@ var translations_default = [
105
108
  "view group label": "View",
106
109
  "view editor label": "Editor",
107
110
  "view split label": "Split",
108
- "view debug label": "Debug",
109
- // TODO(wittjosiah): Replace debug with logs.
110
- // 'view logs label': 'Logs',
111
+ "view logs label": "Logs",
111
112
  "template select group label": "Select template",
112
- "function panel label": "Debug Function"
113
+ "function panel label": "Debug Function",
114
+ "logs plank heading": "Logs"
113
115
  }
114
116
  }
115
117
  }
116
118
  ];
117
- var ScriptPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_5UH3F7TA.meta, [
119
+ var ScriptPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_2XX4L67K.meta, [
118
120
  (0, import_app_framework2.defineModule)({
119
- id: `${import_chunk_5UH3F7TA.meta.id}/module/settings`,
121
+ id: `${import_chunk_2XX4L67K.meta.id}/module/settings`,
120
122
  activatesOn: import_app_framework2.Events.SetupSettings,
121
123
  activate: ScriptSettings2
122
124
  }),
123
125
  (0, import_app_framework2.defineModule)({
124
- id: `${import_chunk_5UH3F7TA.meta.id}/module/compiler`,
126
+ id: `${import_chunk_2XX4L67K.meta.id}/module/compiler`,
125
127
  activatesOn: ScriptEvents.SetupCompiler,
126
128
  activate: Compiler
127
129
  }),
128
130
  (0, import_app_framework2.defineModule)({
129
- id: `${import_chunk_5UH3F7TA.meta.id}/module/translations`,
131
+ id: `${import_chunk_2XX4L67K.meta.id}/module/translations`,
130
132
  activatesOn: import_app_framework2.Events.SetupTranslations,
131
133
  activate: () => (0, import_app_framework2.contributes)(import_app_framework2.Capabilities.Translations, translations_default)
132
134
  }),
133
135
  (0, import_app_framework2.defineModule)({
134
- id: `${import_chunk_5UH3F7TA.meta.id}/module/metadata`,
136
+ id: `${import_chunk_2XX4L67K.meta.id}/module/metadata`,
135
137
  activatesOn: import_app_framework2.Events.SetupMetadata,
136
138
  activate: () => (0, import_app_framework2.contributes)(import_app_framework2.Capabilities.Metadata, {
137
- id: import_functions.ScriptType.typename,
139
+ id: import_types.ScriptType.typename,
138
140
  metadata: {
139
141
  placeholder: [
140
142
  "object title placeholder",
141
143
  {
142
- ns: import_chunk_5UH3F7TA.SCRIPT_PLUGIN
144
+ ns: import_chunk_2XX4L67K.SCRIPT_PLUGIN
143
145
  }
144
146
  ],
145
147
  icon: "ph--code--regular",
@@ -151,35 +153,35 @@ var ScriptPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_5U
151
153
  })
152
154
  }),
153
155
  (0, import_app_framework2.defineModule)({
154
- id: `${import_chunk_5UH3F7TA.meta.id}/module/complementary-panels`,
156
+ id: `${import_chunk_2XX4L67K.meta.id}/module/complementary-panels`,
155
157
  activatesOn: import_plugin_deck.DeckEvents.SetupComplementaryPanels,
156
158
  activate: () => (0, import_app_framework2.contributes)(import_plugin_deck.DeckCapabilities.ComplementaryPanel, {
157
159
  id: "function",
158
160
  label: [
159
161
  "function panel label",
160
162
  {
161
- ns: import_chunk_5UH3F7TA.SCRIPT_PLUGIN
163
+ ns: import_chunk_2XX4L67K.SCRIPT_PLUGIN
162
164
  }
163
165
  ],
164
166
  icon: "ph--terminal--regular",
165
167
  fixed: true,
166
- filter: (node) => node.data instanceof import_functions.ScriptType && !!(0, import_echo.getSpace)(node.data)
168
+ filter: (node) => (0, import_echo_schema.isInstanceOf)(import_types.ScriptType, node.data) && !!(0, import_echo.getSpace)(node.data)
167
169
  })
168
170
  }),
169
171
  (0, import_app_framework2.defineModule)({
170
- id: `${import_chunk_5UH3F7TA.meta.id}/module/object-form`,
172
+ id: `${import_chunk_2XX4L67K.meta.id}/module/object-form`,
171
173
  activatesOn: import_plugin_client.ClientEvents.SetupSchema,
172
- activate: () => (0, import_app_framework2.contributes)(import_plugin_space.SpaceCapabilities.ObjectForm, (0, import_types.defineObjectForm)({
173
- objectSchema: import_functions.ScriptType,
174
- formSchema: import_chunk_DJGLGRQV.ScriptAction.CreateScriptSchema,
175
- getIntent: (props, options) => (0, import_app_framework2.createIntent)(import_chunk_DJGLGRQV.ScriptAction.Create, {
174
+ activate: () => (0, import_app_framework2.contributes)(import_plugin_space.SpaceCapabilities.ObjectForm, (0, import_types2.defineObjectForm)({
175
+ objectSchema: import_types.ScriptType,
176
+ formSchema: import_chunk_XFB6JL2G.ScriptAction.CreateScriptSchema,
177
+ getIntent: (props, options) => (0, import_app_framework2.createIntent)(import_chunk_XFB6JL2G.ScriptAction.Create, {
176
178
  ...props,
177
179
  space: options.space
178
180
  })
179
181
  }))
180
182
  }),
181
183
  (0, import_app_framework2.defineModule)({
182
- id: `${import_chunk_5UH3F7TA.meta.id}/module/react-surface`,
184
+ id: `${import_chunk_2XX4L67K.meta.id}/module/react-surface`,
183
185
  activatesOn: import_app_framework2.Events.SetupReactSurface,
184
186
  // TODO(wittjosiah): Should occur before the script editor is loaded when surfaces activation is more granular.
185
187
  activatesBefore: [
@@ -188,12 +190,12 @@ var ScriptPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_5U
188
190
  activate: ReactSurface
189
191
  }),
190
192
  (0, import_app_framework2.defineModule)({
191
- id: `${import_chunk_5UH3F7TA.meta.id}/module/intent-resolver`,
193
+ id: `${import_chunk_2XX4L67K.meta.id}/module/intent-resolver`,
192
194
  activatesOn: import_app_framework2.Events.SetupIntentResolver,
193
195
  activate: IntentResolver
194
196
  }),
195
197
  (0, import_app_framework2.defineModule)({
196
- id: `${import_chunk_5UH3F7TA.meta.id}/module/artifact-definition`,
198
+ id: `${import_chunk_2XX4L67K.meta.id}/module/artifact-definition`,
197
199
  activatesOn: import_app_framework2.Events.SetupArtifactDefinition,
198
200
  activate: ArtifactDefinition
199
201
  })
@@ -201,6 +203,7 @@ var ScriptPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_5U
201
203
  // Annotate the CommonJS export names for ESM import in node:
202
204
  0 && (module.exports = {
203
205
  DebugPanel,
206
+ LogsPanel,
204
207
  SCRIPT_PLUGIN,
205
208
  ScriptCapabilities,
206
209
  ScriptContainer,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/index.ts", "../../../src/ScriptPlugin.tsx", "../../../src/events.ts", "../../../src/translations.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const Compiler = lazy(() => import('./compiler'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const ScriptSettings = lazy(() => import('./settings'));\nexport const ArtifactDefinition = lazy(() => import('./artifact-definition'));\n\nexport * from './capabilities';\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// @ts-ignore\n\nimport { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';\nimport { ScriptType } from '@dxos/functions';\nimport { RefArray } from '@dxos/live-object';\nimport { ClientEvents } from '@dxos/plugin-client';\nimport { DeckCapabilities, DeckEvents } from '@dxos/plugin-deck';\nimport { SpaceCapabilities } from '@dxos/plugin-space';\nimport { defineObjectForm } from '@dxos/plugin-space/types';\nimport { getSpace } from '@dxos/react-client/echo';\n\nimport { ArtifactDefinition, Compiler, IntentResolver, ReactSurface, ScriptSettings } from './capabilities';\nimport { ScriptEvents } from './events';\nimport { meta, SCRIPT_PLUGIN } from './meta';\nimport translations from './translations';\nimport { ScriptAction } from './types';\n\nexport const ScriptPlugin = () =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/settings`,\n activatesOn: Events.SetupSettings,\n activate: ScriptSettings,\n }),\n defineModule({\n id: `${meta.id}/module/compiler`,\n activatesOn: ScriptEvents.SetupCompiler,\n activate: Compiler,\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, translations),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: () =>\n contributes(Capabilities.Metadata, {\n id: ScriptType.typename,\n metadata: {\n placeholder: ['object title placeholder', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--code--regular',\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: async (script: ScriptType) => await RefArray.loadAll([script.source]),\n },\n }),\n }),\n defineModule({\n id: `${meta.id}/module/complementary-panels`,\n activatesOn: DeckEvents.SetupComplementaryPanels,\n activate: () =>\n contributes(DeckCapabilities.ComplementaryPanel, {\n id: 'function',\n label: ['function panel label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--terminal--regular',\n fixed: true,\n filter: (node) => node.data instanceof ScriptType && !!getSpace(node.data),\n }),\n }),\n defineModule({\n id: `${meta.id}/module/object-form`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () =>\n contributes(\n SpaceCapabilities.ObjectForm,\n defineObjectForm({\n objectSchema: ScriptType,\n formSchema: ScriptAction.CreateScriptSchema,\n getIntent: (props, options) => createIntent(ScriptAction.Create, { ...props, space: options.space }),\n }),\n ),\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n // TODO(wittjosiah): Should occur before the script editor is loaded when surfaces activation is more granular.\n activatesBefore: [ScriptEvents.SetupCompiler],\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/artifact-definition`,\n activatesOn: Events.SetupArtifactDefinition,\n activate: ArtifactDefinition,\n }),\n ]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineEvent } from '@dxos/app-framework';\n\nimport { SCRIPT_PLUGIN } from './meta';\n\nexport namespace ScriptEvents {\n export const SetupCompiler = defineEvent(`${SCRIPT_PLUGIN}/event/setup-compiler`);\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ScriptType } from '@dxos/functions';\n\nimport { SCRIPT_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [ScriptType.typename]: {\n 'typename label': 'Script',\n },\n [SCRIPT_PLUGIN]: {\n 'plugin name': 'Scripts',\n 'object title placeholder': 'New script',\n 'create object label': 'Create script',\n 'create stack section label': 'Create script',\n 'description label': 'Description',\n 'description placeholder': 'Describe what the script does.',\n 'binding placeholder': 'Function name',\n 'function request placeholder': 'Function request',\n 'deploy label': 'Deploy',\n 'deployed label': 'Current version of the script is deployed',\n 'upload failed label': 'Upload failed',\n 'copy link label': 'Copy function link',\n 'format label': 'Format',\n 'toggle details label': 'Toggle details panel',\n 'authenticate action label': 'Authenticate functions service',\n 'authenticate button label': 'Authenticate',\n 'name label': 'Name',\n 'remote function settings heading': 'Remote Function',\n 'function url label': 'Invocation URL',\n 'function binding label': 'Function binding',\n 'function binding placeholder': 'BINDING',\n 'script publish settings label': 'Publishing',\n 'script publish settings description': 'Scripts can be shared publicly as Github gists.',\n 'no github token label': 'This space has no Github access token available.',\n 'open token manager label': 'Open Token Manager',\n 'publish label': 'Publish',\n 'publishing label': 'Publishing',\n 'editor input mode label': 'Editor input mode',\n 'select editor input mode placeholder': 'Select editor input mode…',\n 'settings editor input mode default label': 'Default',\n 'settings editor input mode vim label': 'Vim',\n 'settings editor input mode vscode label': 'VS Code',\n 'view group label': 'View',\n 'view editor label': 'Editor',\n 'view split label': 'Split',\n 'view debug label': 'Debug',\n // TODO(wittjosiah): Replace debug with logs.\n // 'view logs label': 'Logs',\n 'template select group label': 'Select template',\n 'function panel label': 'Debug Function',\n },\n },\n },\n];\n"],
5
- "mappings": "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",
6
- "names": ["import_app_framework", "import_functions", "Compiler", "lazy", "IntentResolver", "ReactSurface", "ScriptSettings", "ArtifactDefinition", "ScriptEvents", "SetupCompiler", "defineEvent", "SCRIPT_PLUGIN", "ScriptType", "typename", "ScriptPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupSettings", "activate", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "SetupMetadata", "Metadata", "metadata", "placeholder", "ns", "icon", "loadReferences", "script", "RefArray", "loadAll", "source", "DeckEvents", "SetupComplementaryPanels", "DeckCapabilities", "ComplementaryPanel", "label", "fixed", "filter", "node", "data", "getSpace", "ClientEvents", "SetupSchema", "SpaceCapabilities", "ObjectForm", "defineObjectForm", "objectSchema", "formSchema", "ScriptAction", "CreateScriptSchema", "getIntent", "props", "options", "createIntent", "Create", "space", "SetupReactSurface", "activatesBefore", "SetupIntentResolver", "SetupArtifactDefinition"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const Compiler = lazy(() => import('./compiler'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const ScriptSettings = lazy(() => import('./settings'));\nexport const ArtifactDefinition = lazy(() => import('./artifact-definition'));\n\nexport * from './capabilities';\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// @ts-ignore\n\nimport { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';\nimport { isInstanceOf } from '@dxos/echo-schema';\nimport { ScriptType } from '@dxos/functions/types';\nimport { RefArray } from '@dxos/live-object';\nimport { ClientEvents } from '@dxos/plugin-client';\nimport { DeckCapabilities, DeckEvents } from '@dxos/plugin-deck';\nimport { SpaceCapabilities } from '@dxos/plugin-space';\nimport { defineObjectForm } from '@dxos/plugin-space/types';\nimport { getSpace } from '@dxos/react-client/echo';\n\nimport { ArtifactDefinition, Compiler, IntentResolver, ReactSurface, ScriptSettings } from './capabilities';\nimport { ScriptEvents } from './events';\nimport { meta, SCRIPT_PLUGIN } from './meta';\nimport translations from './translations';\nimport { ScriptAction } from './types';\n\nexport const ScriptPlugin = () =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/settings`,\n activatesOn: Events.SetupSettings,\n activate: ScriptSettings,\n }),\n defineModule({\n id: `${meta.id}/module/compiler`,\n activatesOn: ScriptEvents.SetupCompiler,\n activate: Compiler,\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, translations),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: () =>\n contributes(Capabilities.Metadata, {\n id: ScriptType.typename,\n metadata: {\n placeholder: ['object title placeholder', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--code--regular',\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: async (script: ScriptType) => await RefArray.loadAll([script.source]),\n },\n }),\n }),\n defineModule({\n id: `${meta.id}/module/complementary-panels`,\n activatesOn: DeckEvents.SetupComplementaryPanels,\n activate: () =>\n contributes(DeckCapabilities.ComplementaryPanel, {\n id: 'function',\n label: ['function panel label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--terminal--regular',\n fixed: true,\n filter: (node) => isInstanceOf(ScriptType, node.data) && !!getSpace(node.data),\n }),\n }),\n defineModule({\n id: `${meta.id}/module/object-form`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () =>\n contributes(\n SpaceCapabilities.ObjectForm,\n defineObjectForm({\n objectSchema: ScriptType,\n formSchema: ScriptAction.CreateScriptSchema,\n getIntent: (props, options) => createIntent(ScriptAction.Create, { ...props, space: options.space }),\n }),\n ),\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n // TODO(wittjosiah): Should occur before the script editor is loaded when surfaces activation is more granular.\n activatesBefore: [ScriptEvents.SetupCompiler],\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/artifact-definition`,\n activatesOn: Events.SetupArtifactDefinition,\n activate: ArtifactDefinition,\n }),\n ]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineEvent } from '@dxos/app-framework';\n\nimport { SCRIPT_PLUGIN } from './meta';\n\nexport namespace ScriptEvents {\n export const SetupCompiler = defineEvent(`${SCRIPT_PLUGIN}/event/setup-compiler`);\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ScriptType } from '@dxos/functions/types';\n\nimport { SCRIPT_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [ScriptType.typename]: {\n 'typename label': 'Script',\n },\n [SCRIPT_PLUGIN]: {\n 'plugin name': 'Scripts',\n 'object title placeholder': 'New script',\n 'create object label': 'Create script',\n 'create stack section label': 'Create script',\n 'description label': 'Description',\n 'description placeholder': 'Describe what the script does.',\n 'binding placeholder': 'Function name',\n 'function request placeholder': 'Function request',\n 'deploy label': 'Deploy',\n 'deployed label': 'Current version of the script is deployed',\n 'upload failed label': 'Upload failed',\n 'copy link label': 'Copy function link',\n 'format label': 'Format',\n 'toggle details label': 'Toggle details panel',\n 'authenticate action label': 'Authenticate functions service',\n 'authenticate button label': 'Authenticate',\n 'name label': 'Name',\n 'remote function settings heading': 'Remote Function',\n 'function url label': 'Invocation URL',\n 'function binding label': 'Function binding',\n 'function binding placeholder': 'BINDING',\n 'script publish settings label': 'Publishing',\n 'script publish settings description': 'Scripts can be shared publicly as Github gists.',\n 'no github token label': 'This space has no Github access token available.',\n 'open token manager label': 'Open Token Manager',\n 'publish label': 'Publish',\n 'publishing label': 'Publishing',\n 'editor input mode label': 'Editor input mode',\n 'select editor input mode placeholder': 'Select editor input mode…',\n 'settings editor input mode default label': 'Default',\n 'settings editor input mode vim label': 'Vim',\n 'settings editor input mode vscode label': 'VS Code',\n 'view group label': 'View',\n 'view editor label': 'Editor',\n 'view split label': 'Split',\n 'view logs label': 'Logs',\n 'template select group label': 'Select template',\n 'function panel label': 'Debug Function',\n 'logs plank heading': 'Logs',\n },\n },\n },\n];\n"],
5
+ "mappings": "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",
6
+ "names": ["import_app_framework", "import_types", "Compiler", "lazy", "IntentResolver", "ReactSurface", "ScriptSettings", "ArtifactDefinition", "ScriptEvents", "SetupCompiler", "defineEvent", "SCRIPT_PLUGIN", "ScriptType", "typename", "ScriptPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupSettings", "activate", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "SetupMetadata", "Metadata", "metadata", "placeholder", "ns", "icon", "loadReferences", "script", "RefArray", "loadAll", "source", "DeckEvents", "SetupComplementaryPanels", "DeckCapabilities", "ComplementaryPanel", "label", "fixed", "filter", "node", "isInstanceOf", "data", "getSpace", "ClientEvents", "SetupSchema", "SpaceCapabilities", "ObjectForm", "defineObjectForm", "objectSchema", "formSchema", "ScriptAction", "CreateScriptSchema", "getIntent", "props", "options", "createIntent", "Create", "space", "SetupReactSurface", "activatesBefore", "SetupIntentResolver", "SetupArtifactDefinition"]
7
7
  }
@@ -16,23 +16,23 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var intent_resolver_NYJFPD5B_exports = {};
20
- __export(intent_resolver_NYJFPD5B_exports, {
19
+ var intent_resolver_CN5WMMAD_exports = {};
20
+ __export(intent_resolver_CN5WMMAD_exports, {
21
21
  default: () => intent_resolver_default
22
22
  });
23
- module.exports = __toCommonJS(intent_resolver_NYJFPD5B_exports);
24
- var import_chunk_ITAJ3WRW = require("./chunk-ITAJ3WRW.cjs");
25
- var import_chunk_DJGLGRQV = require("./chunk-DJGLGRQV.cjs");
26
- var import_chunk_5UH3F7TA = require("./chunk-5UH3F7TA.cjs");
23
+ module.exports = __toCommonJS(intent_resolver_CN5WMMAD_exports);
24
+ var import_chunk_XCQNFRZ6 = require("./chunk-XCQNFRZ6.cjs");
25
+ var import_chunk_XFB6JL2G = require("./chunk-XFB6JL2G.cjs");
26
+ var import_chunk_2XX4L67K = require("./chunk-2XX4L67K.cjs");
27
27
  var import_core = require("@octokit/core");
28
28
  var import_app_framework = require("@dxos/app-framework");
29
- var import_functions = require("@dxos/functions");
29
+ var import_types = require("@dxos/functions/types");
30
30
  var import_live_object = require("@dxos/live-object");
31
31
  var import_schema = require("@dxos/schema");
32
32
  var intent_resolver_default = () => (0, import_app_framework.contributes)(import_app_framework.Capabilities.IntentResolver, (0, import_app_framework.createResolver)({
33
- intent: import_chunk_DJGLGRQV.ScriptAction.Create,
33
+ intent: import_chunk_XFB6JL2G.ScriptAction.Create,
34
34
  resolve: async ({ name, gistUrl }) => {
35
- let content = import_chunk_ITAJ3WRW.templates[0].source;
35
+ let content = import_chunk_XCQNFRZ6.templates[0].source;
36
36
  const gistId = gistUrl?.split("/").at(-1);
37
37
  if (gistId) {
38
38
  const octokit = new import_core.Octokit();
@@ -46,7 +46,7 @@ var intent_resolver_default = () => (0, import_app_framework.contributes)(import
46
46
  }
47
47
  return {
48
48
  data: {
49
- object: (0, import_live_object.create)(import_functions.ScriptType, {
49
+ object: (0, import_live_object.create)(import_types.ScriptType, {
50
50
  name,
51
51
  source: (0, import_live_object.makeRef)((0, import_live_object.create)(import_schema.TextType, {
52
52
  content
@@ -56,4 +56,4 @@ var intent_resolver_default = () => (0, import_app_framework.contributes)(import
56
56
  };
57
57
  }
58
58
  }));
59
- //# sourceMappingURL=intent-resolver-NYJFPD5B.cjs.map
59
+ //# sourceMappingURL=intent-resolver-CN5WMMAD.cjs.map