@dxos/plugin-script 0.8.2-main.f11618f → 0.8.2-main.fbd8ed0

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 (206) hide show
  1. package/dist/lib/browser/{DeploymentDialog-QEKJ54ZB.mjs → DeploymentDialog-W7PY33VN.mjs} +4 -4
  2. package/dist/lib/browser/{ScriptContainer-ATBYTIFH.mjs → ScriptContainer-6DYV7D65.mjs} +31 -19
  3. package/dist/lib/browser/ScriptContainer-6DYV7D65.mjs.map +7 -0
  4. package/dist/lib/browser/{app-graph-builder-2GIBRQLV.mjs → app-graph-builder-BFBTQPSP.mjs} +9 -9
  5. package/dist/lib/browser/app-graph-builder-BFBTQPSP.mjs.map +7 -0
  6. package/dist/lib/browser/{artifact-definition-OEDM2SCN.mjs → artifact-definition-PD4UAAQZ.mjs} +41 -35
  7. package/dist/lib/browser/artifact-definition-PD4UAAQZ.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-6MLJJI73.mjs +40 -0
  9. package/dist/lib/browser/chunk-6MLJJI73.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-QNXJNXQZ.mjs → chunk-BONEXAIK.mjs} +9 -9
  11. package/dist/lib/browser/chunk-BONEXAIK.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-EGDYE5MW.mjs → chunk-FFDJENAN.mjs} +84 -153
  13. package/dist/lib/browser/chunk-FFDJENAN.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-SXS6PUU5.mjs → chunk-INL55MFV.mjs} +7 -6
  15. package/dist/lib/browser/chunk-INL55MFV.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-RTVU4RZW.mjs +87 -0
  17. package/dist/lib/browser/chunk-RTVU4RZW.mjs.map +7 -0
  18. package/dist/lib/browser/{chunk-OZEMT3NO.mjs → chunk-YNOCAJYT.mjs} +2 -2
  19. package/dist/lib/browser/chunk-YNOCAJYT.mjs.map +7 -0
  20. package/dist/lib/browser/index.mjs +13 -13
  21. package/dist/lib/browser/index.mjs.map +3 -3
  22. package/dist/lib/browser/{intent-resolver-C5D6TNPC.mjs → intent-resolver-SXO6X6XQ.mjs} +11 -11
  23. package/dist/lib/browser/intent-resolver-SXO6X6XQ.mjs.map +7 -0
  24. package/dist/lib/browser/meta.json +1 -1
  25. package/dist/lib/browser/{react-surface-XJCN7XXF.mjs → react-surface-TZGE7EGC.mjs} +10 -10
  26. package/dist/lib/browser/react-surface-TZGE7EGC.mjs.map +7 -0
  27. package/dist/lib/browser/{settings-NK4XVS2E.mjs → settings-EOKSUGB6.mjs} +2 -2
  28. package/dist/lib/browser/types.mjs +1 -1
  29. package/dist/lib/node/{DeploymentDialog-NUKZNILK.cjs → DeploymentDialog-43SI7XFL.cjs} +9 -9
  30. package/dist/lib/node/{DeploymentDialog-NUKZNILK.cjs.map → DeploymentDialog-43SI7XFL.cjs.map} +2 -2
  31. package/dist/lib/node/{ScriptContainer-OHHMLPUE.cjs → ScriptContainer-H56OW5FC.cjs} +31 -21
  32. package/dist/lib/node/ScriptContainer-H56OW5FC.cjs.map +7 -0
  33. package/dist/lib/node/{app-graph-builder-LNI22TZF.cjs → app-graph-builder-IKOX7GHW.cjs} +12 -12
  34. package/dist/lib/node/app-graph-builder-IKOX7GHW.cjs.map +7 -0
  35. package/dist/lib/node/{artifact-definition-SEGATFNH.cjs → artifact-definition-C644EAYM.cjs} +47 -41
  36. package/dist/lib/node/artifact-definition-C644EAYM.cjs.map +7 -0
  37. package/dist/lib/node/{chunk-UUGLBCMY.cjs → chunk-7NNN3IUQ.cjs} +87 -154
  38. package/dist/lib/node/chunk-7NNN3IUQ.cjs.map +7 -0
  39. package/dist/lib/node/{chunk-ZZ4HK5KM.cjs → chunk-HPBQHRM3.cjs} +12 -12
  40. package/dist/lib/node/chunk-HPBQHRM3.cjs.map +7 -0
  41. package/dist/lib/node/{chunk-DSFCLQ5F.cjs → chunk-K7PPLRVQ.cjs} +12 -11
  42. package/dist/lib/node/chunk-K7PPLRVQ.cjs.map +7 -0
  43. package/dist/lib/node/{chunk-PGEGRJP3.cjs → chunk-SXJGHLK6.cjs} +16 -17
  44. package/dist/lib/node/chunk-SXJGHLK6.cjs.map +7 -0
  45. package/dist/lib/node/{chunk-PMGWL64F.cjs → chunk-VHSIOCS5.cjs} +6 -6
  46. package/dist/lib/node/chunk-VHSIOCS5.cjs.map +7 -0
  47. package/dist/lib/node/chunk-VNSZBEJW.cjs +91 -0
  48. package/dist/lib/node/chunk-VNSZBEJW.cjs.map +7 -0
  49. package/dist/lib/node/index.cjs +25 -25
  50. package/dist/lib/node/index.cjs.map +3 -3
  51. package/dist/lib/node/{intent-resolver-BQPBRVHM.cjs → intent-resolver-PDSMZM2T.cjs} +20 -20
  52. package/dist/lib/node/intent-resolver-PDSMZM2T.cjs.map +7 -0
  53. package/dist/lib/node/meta.json +1 -1
  54. package/dist/lib/node/{react-surface-5XHS5WYW.cjs → react-surface-BHHJQZ7P.cjs} +27 -27
  55. package/dist/lib/node/react-surface-BHHJQZ7P.cjs.map +7 -0
  56. package/dist/lib/node/{settings-7PVJBWC4.cjs → settings-425QHVGC.cjs} +7 -7
  57. package/dist/lib/node/types.cjs +3 -3
  58. package/dist/lib/node/types.cjs.map +1 -1
  59. package/dist/lib/node-esm/{DeploymentDialog-BIXZ5Q57.mjs → DeploymentDialog-2RRUJEBC.mjs} +4 -4
  60. package/dist/lib/node-esm/{ScriptContainer-4YWGWPY7.mjs → ScriptContainer-762FHDZ4.mjs} +31 -19
  61. package/dist/lib/node-esm/ScriptContainer-762FHDZ4.mjs.map +7 -0
  62. package/dist/lib/node-esm/{app-graph-builder-NNUXXXMZ.mjs → app-graph-builder-KZGKGSP6.mjs} +9 -9
  63. package/dist/lib/node-esm/app-graph-builder-KZGKGSP6.mjs.map +7 -0
  64. package/dist/lib/node-esm/{artifact-definition-5UHIXXHW.mjs → artifact-definition-J6UM6BQF.mjs} +41 -35
  65. package/dist/lib/node-esm/artifact-definition-J6UM6BQF.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-4ISQLIIH.mjs → chunk-A3TXZHGD.mjs} +9 -9
  67. package/dist/lib/node-esm/chunk-A3TXZHGD.mjs.map +7 -0
  68. package/dist/lib/node-esm/{chunk-TN35DSTF.mjs → chunk-F47OE6ZM.mjs} +7 -6
  69. package/dist/lib/node-esm/chunk-F47OE6ZM.mjs.map +7 -0
  70. package/dist/lib/node-esm/{chunk-NNQXJQBG.mjs → chunk-NYA7KDN6.mjs} +84 -153
  71. package/dist/lib/node-esm/chunk-NYA7KDN6.mjs.map +7 -0
  72. package/dist/lib/node-esm/{chunk-GR4VTXVM.mjs → chunk-V733VFCJ.mjs} +2 -2
  73. package/dist/lib/node-esm/chunk-V733VFCJ.mjs.map +7 -0
  74. package/dist/lib/node-esm/{chunk-KGYTIL33.mjs → chunk-VMQPOPKV.mjs} +12 -13
  75. package/dist/lib/node-esm/chunk-VMQPOPKV.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-YCTECQLY.mjs +89 -0
  77. package/dist/lib/node-esm/chunk-YCTECQLY.mjs.map +7 -0
  78. package/dist/lib/node-esm/index.mjs +13 -13
  79. package/dist/lib/node-esm/index.mjs.map +3 -3
  80. package/dist/lib/node-esm/{intent-resolver-PPJKPHUQ.mjs → intent-resolver-WSAVLQY5.mjs} +11 -11
  81. package/dist/lib/node-esm/intent-resolver-WSAVLQY5.mjs.map +7 -0
  82. package/dist/lib/node-esm/meta.json +1 -1
  83. package/dist/lib/node-esm/{react-surface-7ELFL7IO.mjs → react-surface-W7BM4PDK.mjs} +10 -10
  84. package/dist/lib/node-esm/react-surface-W7BM4PDK.mjs.map +7 -0
  85. package/dist/lib/node-esm/{settings-SJYC4JLT.mjs → settings-BWSKKIVQ.mjs} +2 -2
  86. package/dist/lib/node-esm/types.mjs +1 -1
  87. package/dist/types/src/capabilities/app-graph-builder.d.ts +2 -179
  88. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/index.d.ts +1 -177
  91. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  92. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts +2 -2
  93. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
  94. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  95. package/dist/types/src/components/ScriptContainer.d.ts +1 -1
  96. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  97. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +1 -1
  98. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  99. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts +1 -1
  100. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
  101. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
  102. package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -1
  103. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  104. package/dist/types/src/components/index.d.ts +1 -1
  105. package/dist/types/src/hooks/deploy.d.ts +22 -19
  106. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  107. package/dist/types/src/hooks/format.d.ts +2 -5
  108. package/dist/types/src/hooks/format.d.ts.map +1 -1
  109. package/dist/types/src/hooks/index.d.ts +0 -1
  110. package/dist/types/src/hooks/index.d.ts.map +1 -1
  111. package/dist/types/src/hooks/template.d.ts +2 -5
  112. package/dist/types/src/hooks/template.d.ts.map +1 -1
  113. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
  114. package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -1
  115. package/dist/types/src/templates/chat.d.ts +1 -1
  116. package/dist/types/src/templates/chat.d.ts.map +1 -1
  117. package/dist/types/src/templates/chess.d.ts.map +1 -1
  118. package/dist/types/src/templates/data-generator.d.ts.map +1 -1
  119. package/dist/types/src/templates/discord.d.ts.map +1 -1
  120. package/dist/types/src/templates/echo.d.ts +1 -1
  121. package/dist/types/src/templates/echo.d.ts.map +1 -1
  122. package/dist/types/src/templates/email.d.ts +1 -1
  123. package/dist/types/src/templates/email.d.ts.map +1 -1
  124. package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
  125. package/dist/types/src/templates/forex.d.ts.map +1 -1
  126. package/dist/types/src/templates/gmail.d.ts.map +1 -1
  127. package/dist/types/src/translations.d.ts +2 -110
  128. package/dist/types/src/translations.d.ts.map +1 -1
  129. package/dist/types/src/types.d.ts +27 -26
  130. package/dist/types/src/types.d.ts.map +1 -1
  131. package/dist/types/src/util/deploy.d.ts.map +1 -1
  132. package/dist/types/src/util/functions.d.ts.map +1 -1
  133. package/dist/types/tsconfig.tsbuildinfo +1 -1
  134. package/package.json +56 -50
  135. package/src/ScriptPlugin.tsx +3 -3
  136. package/src/capabilities/app-graph-builder.ts +46 -29
  137. package/src/capabilities/artifact-definition.ts +33 -30
  138. package/src/capabilities/intent-resolver.ts +5 -5
  139. package/src/capabilities/react-surface.tsx +5 -5
  140. package/src/components/DeploymentDialog/DeploymentDialog.stories.tsx +1 -1
  141. package/src/components/DeploymentDialog/DeploymentDialog.tsx +2 -2
  142. package/src/components/ScriptContainer.tsx +2 -2
  143. package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +1 -1
  144. package/src/components/ScriptToolbar/ScriptToolbar.tsx +16 -10
  145. package/src/components/Settings/ScriptObjectSettings.tsx +5 -5
  146. package/src/hooks/deploy.ts +61 -55
  147. package/src/hooks/format.ts +26 -26
  148. package/src/hooks/index.ts +0 -1
  149. package/src/hooks/template.ts +24 -32
  150. package/src/templates/chat.ts +3 -9
  151. package/src/templates/chess.ts +1 -6
  152. package/src/templates/data-generator.ts +1 -6
  153. package/src/templates/discord.ts +9 -9
  154. package/src/templates/echo.ts +1 -12
  155. package/src/templates/email.ts +8 -14
  156. package/src/templates/forex-effect.ts +2 -6
  157. package/src/templates/forex.ts +1 -5
  158. package/src/templates/gmail.ts +31 -24
  159. package/src/translations.ts +1 -1
  160. package/src/types.ts +13 -14
  161. package/src/util/deploy.ts +3 -4
  162. package/dist/lib/browser/ScriptContainer-ATBYTIFH.mjs.map +0 -7
  163. package/dist/lib/browser/app-graph-builder-2GIBRQLV.mjs.map +0 -7
  164. package/dist/lib/browser/artifact-definition-OEDM2SCN.mjs.map +0 -7
  165. package/dist/lib/browser/chunk-EGDYE5MW.mjs.map +0 -7
  166. package/dist/lib/browser/chunk-OZEMT3NO.mjs.map +0 -7
  167. package/dist/lib/browser/chunk-QNXJNXQZ.mjs.map +0 -7
  168. package/dist/lib/browser/chunk-SXS6PUU5.mjs.map +0 -7
  169. package/dist/lib/browser/chunk-XEPVXV72.mjs +0 -87
  170. package/dist/lib/browser/chunk-XEPVXV72.mjs.map +0 -7
  171. package/dist/lib/browser/chunk-ZFTDU4WS.mjs +0 -41
  172. package/dist/lib/browser/chunk-ZFTDU4WS.mjs.map +0 -7
  173. package/dist/lib/browser/intent-resolver-C5D6TNPC.mjs.map +0 -7
  174. package/dist/lib/browser/react-surface-XJCN7XXF.mjs.map +0 -7
  175. package/dist/lib/node/ScriptContainer-OHHMLPUE.cjs.map +0 -7
  176. package/dist/lib/node/app-graph-builder-LNI22TZF.cjs.map +0 -7
  177. package/dist/lib/node/artifact-definition-SEGATFNH.cjs.map +0 -7
  178. package/dist/lib/node/chunk-4K23KEYT.cjs +0 -91
  179. package/dist/lib/node/chunk-4K23KEYT.cjs.map +0 -7
  180. package/dist/lib/node/chunk-DSFCLQ5F.cjs.map +0 -7
  181. package/dist/lib/node/chunk-PGEGRJP3.cjs.map +0 -7
  182. package/dist/lib/node/chunk-PMGWL64F.cjs.map +0 -7
  183. package/dist/lib/node/chunk-UUGLBCMY.cjs.map +0 -7
  184. package/dist/lib/node/chunk-ZZ4HK5KM.cjs.map +0 -7
  185. package/dist/lib/node/intent-resolver-BQPBRVHM.cjs.map +0 -7
  186. package/dist/lib/node/react-surface-5XHS5WYW.cjs.map +0 -7
  187. package/dist/lib/node-esm/ScriptContainer-4YWGWPY7.mjs.map +0 -7
  188. package/dist/lib/node-esm/app-graph-builder-NNUXXXMZ.mjs.map +0 -7
  189. package/dist/lib/node-esm/artifact-definition-5UHIXXHW.mjs.map +0 -7
  190. package/dist/lib/node-esm/chunk-4ISQLIIH.mjs.map +0 -7
  191. package/dist/lib/node-esm/chunk-GR4VTXVM.mjs.map +0 -7
  192. package/dist/lib/node-esm/chunk-KGYTIL33.mjs.map +0 -7
  193. package/dist/lib/node-esm/chunk-NNQXJQBG.mjs.map +0 -7
  194. package/dist/lib/node-esm/chunk-TN35DSTF.mjs.map +0 -7
  195. package/dist/lib/node-esm/chunk-X64SI6XO.mjs +0 -89
  196. package/dist/lib/node-esm/chunk-X64SI6XO.mjs.map +0 -7
  197. package/dist/lib/node-esm/intent-resolver-PPJKPHUQ.mjs.map +0 -7
  198. package/dist/lib/node-esm/react-surface-7ELFL7IO.mjs.map +0 -7
  199. package/dist/types/src/hooks/useToolbarAction.d.ts +0 -13
  200. package/dist/types/src/hooks/useToolbarAction.d.ts.map +0 -1
  201. package/src/hooks/useToolbarAction.ts +0 -50
  202. /package/dist/lib/browser/{DeploymentDialog-QEKJ54ZB.mjs.map → DeploymentDialog-W7PY33VN.mjs.map} +0 -0
  203. /package/dist/lib/browser/{settings-NK4XVS2E.mjs.map → settings-EOKSUGB6.mjs.map} +0 -0
  204. /package/dist/lib/node/{settings-7PVJBWC4.cjs.map → settings-425QHVGC.cjs.map} +0 -0
  205. /package/dist/lib/node-esm/{DeploymentDialog-BIXZ5Q57.mjs.map → DeploymentDialog-2RRUJEBC.mjs.map} +0 -0
  206. /package/dist/lib/node-esm/{settings-SJYC4JLT.mjs.map → settings-BWSKKIVQ.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/artifact-definition.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { Capabilities, contributes, createIntent, type PromiseIntentDispatcher } from '@dxos/app-framework';\nimport { defineArtifact, defineTool, ToolResult } from '@dxos/artifact';\nimport { createArtifactElement } from '@dxos/assistant';\nimport { ScriptType } from '@dxos/functions';\nimport { invariant } from '@dxos/invariant';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { live, makeRef, type Space } from '@dxos/react-client/echo';\nimport { DataType } from '@dxos/schema';\n\nimport { meta } from '../meta';\n// TODO(burdon): Factor out.\ndeclare global {\n interface ToolContextExtensions {\n space?: Space;\n dispatch?: PromiseIntentDispatcher;\n }\n}\n\nexport default () => {\n const definition = defineArtifact({\n id: `artifact:${meta.id}`,\n name: meta.name,\n // TODO(dmaretskyi): Since writing scripts requires a lot of domain knowledge,\n // we should offload the work of synthesizing the code to a separate model.\n // The main reasoning model will give it a concrete task and the script model will synthesize the code, knowing all the docs.\n instructions: `\n If the user explicitly requests you to write a script, you can create one.\n If the user requests you to change one of the existing script, you can update it.\n You must not create a script unless the user explicitly requests it.\n Scripts are short code pieces of executable code that can be used to perform computations, integrate with external systems, and perform automated tasks.\n Each script must follow as strict shape for the definition but the body can contain any valid executable code.\n Scripts are written in JavaScript or TypeScript.\n Each script must define an input schema and output schema.\n Each script must have its own detailed description.\n\n Important: You cannot execute scripts. Scripts are only available as tools after the user deploys them. You must only call the available tools.\n\n Description:\n The description is a detailed description of the script.\n It is used to describe the script's purpose, input, and output.\n The description is used to generate the script's documentation.\n The description is also goes into the script metadata.\n The description is used by AI to understand the script and its purpose.\n The description must provide cases on when the script should be used.\n\n Schema: \n The schema is defined using a schema-DSL library called Effect Schema.\n The input schema describes the arguments that the script accepts.\n The output schema describes the result that the script produces.\n The schema is used to validate the script's input and output.\n The schema is also goes into the script metadata.\n The properties in the schema must have valid descriptions.\n The input and output schemas must both be a struct of fields.\n\n Restricts:\n The scripts can only import code from \"dxos:functions\" module. No other modules are allowed.\n Some web APIs are available - like fetch.\n\n Reasoning:\n Before writing a script, synthesize the following information:\n - Description\n - What APIs will be used.\n - Detailed input schema\n - Detailed output schema\n\n <apis>\n export function defineFunction(params: { \n description: string, \n inputSchema: Schema.Schema, \n outputSchema: Schema.Schema, \n handler: (params: { event: { data: TInput } }) => Promise<TOutput> \n }): FunctionDefinition\n /**\n * Effect Schema\n */\n export const Schema; \n\n // Examples: \n\n Schema.String\n Schema.Number\n Schema.Boolean\n Schema.Struct({\n from: Schema.String.annotations({ description: 'The source currency' }),\n to: Schema.String.annotations({ description: 'The target currency' }),\n })\n Schema.Array(Schema.String)\n Schema.Union(Schema.String, Schema.Number)\n Schema.optional(Schema.String)\n Schema.String.annotations({ description: 'The source currency' })\n </apis>\n\n <handler_function>\n Async function that takes the argument in the form of:\n\n type HandlerFunctionParam = {\n event: {\n data: T // The input schema\n },\n }\n\n The function must return the result that matches the output schema.\n </handler_function>\n \n <example>\n import { defineFunction, S } from 'dxos:functions';\n\n export default defineFunction({\n description: 'Returns the exchange rate between two currencies.',\n\n inputSchema: Schema.Struct({\n from: Schema.String.annotations({ description: 'The source currency' }),\n to: Schema.String.annotations({ description: 'The target currency' }),\n }),\n\n outputSchema: Schema.Struct({\n rate: Schema.String.annotations({ description: 'The exchange rate' }),\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 { rate: rates[to].toString() };\n },\n });\n </example>\n `,\n schema: ScriptType,\n tools: [\n defineTool(meta.id, {\n name: 'create',\n description: 'Create a new script. Returns the artifact definition for the script',\n caption: 'Creating script...',\n schema: Schema.Struct({\n name: Schema.String.annotations({ description: 'The name of the script' }),\n code: Schema.String.annotations({\n description: 'The full code of the script in JavaScript or TypeScript. Must be valid executable code.',\n }),\n }),\n execute: async ({ name, code }, { extensions }) => {\n invariant(extensions?.space, 'No space');\n invariant(extensions?.dispatch, 'No intent dispatcher');\n const script = live(ScriptType, {\n name,\n source: makeRef(\n live(DataType.Text, {\n content: code,\n }),\n ),\n });\n extensions.space.db.add(script);\n await extensions.space.db.flush();\n\n const intent = createIntent(SpaceAction.AddObject, { target: extensions.space, object: script });\n const { data, error } = await extensions.dispatch(intent);\n if (!data || error) {\n return ToolResult.Error(error?.message ?? 'Failed to create chess game');\n }\n\n return ToolResult.Success(createArtifactElement(script.id));\n },\n }),\n defineTool(meta.id, {\n name: 'inspect',\n description: 'Inspect a script. Returns the artifact definition for the script',\n caption: 'Inspecting script...',\n schema: Schema.Struct({\n // TODO(wittjosiah): ObjectId schema should be used here but it's not working.\n id: Schema.String.annotations({ description: 'The ID of the script' }),\n }),\n execute: async ({ id }, { extensions }) => {\n invariant(extensions?.space, 'No space');\n\n const script = (await extensions.space.db.query({ id }).first()) as ScriptType;\n const { content } = await script.source.load();\n\n return ToolResult.Success({\n name: script.name,\n code: content,\n });\n },\n }),\n defineTool(meta.id, {\n name: 'update',\n description: 'Update a script. Returns the artifact definition for the script',\n caption: 'Updating script...',\n schema: Schema.Struct({\n // TODO(wittjosiah): ObjectId schema should be used here but it's not working.\n id: Schema.String.annotations({ description: 'The ID of the script to update' }),\n code: Schema.String.annotations({\n description: 'The full code of the script in JavaScript or TypeScript. Must be valid executable code.',\n }),\n }),\n execute: async ({ id, code }, { extensions }) => {\n invariant(extensions?.space, 'No space');\n\n const script = (await extensions.space.db.query({ id }).first()) as ScriptType;\n const source = await script.source.load();\n if (!source) {\n return ToolResult.Error('Script not found');\n }\n\n source.content = code;\n await extensions.space?.db.flush();\n\n return ToolResult.Success({\n name: script.name,\n });\n },\n }),\n ],\n });\n\n return contributes(Capabilities.ArtifactDefinition, definition);\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Schema", "Capabilities", "contributes", "createIntent", "defineArtifact", "defineTool", "ToolResult", "createArtifactElement", "ScriptType", "invariant", "SpaceAction", "live", "makeRef", "DataType", "definition", "defineArtifact", "id", "meta", "name", "instructions", "schema", "ScriptType", "tools", "defineTool", "description", "caption", "Schema", "Struct", "String", "annotations", "code", "execute", "extensions", "invariant", "space", "dispatch", "script", "live", "source", "makeRef", "DataType", "Text", "content", "db", "add", "flush", "intent", "createIntent", "SpaceAction", "AddObject", "target", "object", "data", "error", "ToolResult", "Error", "message", "Success", "createArtifactElement", "query", "first", "load", "contributes", "Capabilities", "ArtifactDefinition"]
7
+ }
@@ -8,12 +8,12 @@ import {
8
8
  import { Octokit } from "@octokit/core";
9
9
  import React, { useCallback, useEffect, useState } from "react";
10
10
  import { createIntent, SettingsAction, useIntentDispatcher } from "@dxos/app-framework";
11
- import { FunctionType, getInvocationUrl, getUserFunctionUrlInMetadata } from "@dxos/functions/types";
11
+ import { FunctionType, getInvocationUrl, getUserFunctionUrlInMetadata } from "@dxos/functions";
12
12
  import { log } from "@dxos/log";
13
13
  import { useClient } from "@dxos/react-client";
14
- import { Filter, getMeta, getSpace, useQuery } from "@dxos/react-client/echo";
14
+ import { Filter, getMeta, getSpace, Ref, useQuery } from "@dxos/react-client/echo";
15
15
  import { Button, Clipboard, Input, useControlledState, useTranslation } from "@dxos/react-ui";
16
- import { AccessTokenType } from "@dxos/schema";
16
+ import { DataType } from "@dxos/schema";
17
17
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/components/Settings/ScriptObjectSettings.tsx";
18
18
  var ScriptObjectSettings = ({ object }) => {
19
19
  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Binding, {
@@ -36,8 +36,8 @@ var Binding = ({ object }) => {
36
36
  const { t } = useTranslation(SCRIPT_PLUGIN);
37
37
  const client = useClient();
38
38
  const space = getSpace(object);
39
- const [fn] = useQuery(space, Filter.schema(FunctionType, {
40
- source: object
39
+ const [fn] = useQuery(space, Filter.type(FunctionType, {
40
+ source: Ref.make(object)
41
41
  }));
42
42
  const functionPath = fn && getUserFunctionUrlInMetadata(getMeta(fn));
43
43
  const functionUrl = functionPath && getInvocationUrl(functionPath, client.config.values.runtime?.services?.edge?.url ?? "", {
@@ -89,7 +89,7 @@ var Publishing = ({ object }) => {
89
89
  const { t } = useTranslation(SCRIPT_PLUGIN);
90
90
  const { dispatchPromise: dispatch } = useIntentDispatcher();
91
91
  const space = getSpace(object);
92
- const [githubToken] = useQuery(space, Filter.schema(AccessTokenType, {
92
+ const [githubToken] = useQuery(space, Filter.type(DataType.AccessToken, {
93
93
  source: "github.com"
94
94
  }));
95
95
  const gistKey = getMeta(object).keys.find(({ source }) => source === "github.com");
@@ -467,8 +467,8 @@ var RobotAvatar = () => /* @__PURE__ */ React3.createElement(Avatar.Root, null,
467
467
 
468
468
  // packages/plugins/plugin-script/src/components/index.ts
469
469
  import { lazy } from "react";
470
- var ScriptContainer = lazy(() => import("./ScriptContainer-4YWGWPY7.mjs"));
471
- var DeploymentDialog = lazy(() => import("./DeploymentDialog-BIXZ5Q57.mjs"));
470
+ var ScriptContainer = lazy(() => import("./ScriptContainer-762FHDZ4.mjs"));
471
+ var DeploymentDialog = lazy(() => import("./DeploymentDialog-2RRUJEBC.mjs"));
472
472
 
473
473
  export {
474
474
  ScriptObjectSettings,
@@ -478,4 +478,4 @@ export {
478
478
  ScriptContainer,
479
479
  DeploymentDialog
480
480
  };
481
- //# sourceMappingURL=chunk-4ISQLIIH.mjs.map
481
+ //# sourceMappingURL=chunk-A3TXZHGD.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/Settings/ScriptObjectSettings.tsx", "../../../src/components/Settings/ScriptPluginSettings.tsx", "../../../src/components/TestPanel/TestPanel.tsx", "../../../src/components/index.ts"],
4
+ "sourcesContent": ["//\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';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, getMeta, getSpace, Ref, useQuery } from '@dxos/react-client/echo';\nimport { Button, Clipboard, Input, useControlledState, useTranslation } from '@dxos/react-ui';\nimport { DataType } from '@dxos/schema';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\n\nexport type ScriptObjectSettingsProps = {\n object: ScriptType;\n};\n\nexport const ScriptObjectSettings = ({ object }: ScriptObjectSettingsProps) => {\n return (\n <>\n <Binding object={object} />\n <Publishing object={object} />\n </>\n );\n};\n\nexport const ScriptProperties = ({ object }: ScriptObjectSettingsProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n return (\n <Input.Root>\n <Input.Label>{t('description label')}</Input.Label>\n <Input.TextInput\n placeholder={t('description placeholder')}\n value={object.description ?? ''}\n onChange={(event) => {\n object.description = event.target.value;\n }}\n />\n </Input.Root>\n );\n};\n\nconst Binding = ({ object }: ScriptObjectSettingsProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const client = useClient();\n const space = getSpace(object);\n const [fn] = useQuery(space, Filter.type(FunctionType, { source: Ref.make(object) }));\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 [binding, setBinding] = useControlledState(fn?.binding ?? '');\n const handleBindingChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n setBinding(event.target.value);\n },\n [setBinding],\n );\n\n const handleBindingBlur = useCallback(() => {\n fn.binding = binding;\n }, [fn, binding]);\n\n if (!fn || !functionUrl) {\n return null;\n }\n\n // TODO(burdon): Use form.\n return (\n <div role='form' className='flex flex-col p-2 gap-2'>\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\n// TODO(burdon): Move to separate tab?\nconst Publishing = ({ object }: ScriptObjectSettingsProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const space = getSpace(object);\n const [githubToken] = useQuery(space, Filter.type(DataType.AccessToken, { source: 'github.com' }));\n const gistKey = getMeta(object).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 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 object.source.load();\n const filename = object.name ? kebabize(object.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(object);\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 }, [object, githubToken]);\n\n return (\n <div className='flex flex-col 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 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// 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", "//\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 { meta } from '../../meta';\nimport { type ScriptSettingsProps } from '../../types';\n\nexport const ScriptPluginSettings = ({ settings }: { settings: ScriptSettingsProps }) => {\n const { t } = useTranslation(meta.id);\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 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 TestPanelProps = ThemedClassName<{\n functionUrl?: string;\n}>;\n\n// TODO(burdon): Need persistent history (currently lost when switching tabs)..\nexport const TestPanel = ({ classNames, functionUrl }: TestPanelProps) => {\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 (thread).\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 {/* TODO(burdon): Replace with Form based on the function's input schema. */}\n <Toolbar.Root classNames='p-2'>\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 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 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>\n <Avatar.Content size={6} variant='circle' icon='ph--robot--regular' />\n </Avatar.Root>\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './Settings';\nexport * from './TestPanel';\nexport { DEPLOYMENT_DIALOG } from './DeploymentDialog';\n\nexport const ScriptContainer = lazy(() => import('./ScriptContainer'));\nexport const DeploymentDialog = lazy(() => import('./DeploymentDialog'));\n"],
5
+ "mappings": "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",
6
+ "names": ["Octokit", "React", "useCallback", "useEffect", "useState", "createIntent", "SettingsAction", "useIntentDispatcher", "FunctionType", "getInvocationUrl", "getUserFunctionUrlInMetadata", "log", "useClient", "Filter", "getMeta", "getSpace", "Ref", "useQuery", "Button", "Clipboard", "Input", "useControlledState", "useTranslation", "DataType", "ScriptObjectSettings", "object", "Binding", "Publishing", "ScriptProperties", "t", "useTranslation", "SCRIPT_PLUGIN", "Input", "Root", "Label", "TextInput", "placeholder", "value", "description", "onChange", "event", "target", "client", "useClient", "space", "getSpace", "fn", "useQuery", "Filter", "type", "FunctionType", "source", "Ref", "make", "functionPath", "getUserFunctionUrlInMetadata", "getMeta", "functionUrl", "getInvocationUrl", "config", "values", "runtime", "services", "edge", "url", "spaceId", "id", "binding", "setBinding", "useControlledState", "handleBindingChange", "useCallback", "handleBindingBlur", "div", "role", "className", "h2", "disabled", "name", "Clipboard", "IconButton", "onBlur", "dispatchPromise", "dispatch", "useIntentDispatcher", "githubToken", "DataType", "AccessToken", "gistKey", "keys", "find", "gistUrl", "setGistUrl", "useState", "useEffect", "token", "gistId", "undefined", "timeout", "setTimeout", "octokit", "Octokit", "auth", "response", "request", "gist_id", "data", "html_url", "err", "log", "catch", "clearTimeout", "handleOpenTokenManager", "createIntent", "SettingsAction", "Open", "plugin", "publishing", "setPublishing", "handlePublish", "load", "filename", "kebabize", "files", "content", "meta", "githubKey", "public", "push", "p", "span", "Button", "onClick", "str", "replace", "$", "ofs", "toLowerCase", "React", "useClient", "Button", "Select", "useTranslation", "EditorInputModes", "DeprecatedFormContainer", "DeprecatedFormInput", "ScriptPluginSettings", "settings", "t", "useTranslation", "meta", "id", "client", "useClient", "handleAuthenticate", "identityKey", "halo", "identity", "get", "writeCredentials", "issuer", "issuanceDate", "Date", "subject", "assertion", "serverName", "serverKey", "capabilities", "React", "DeprecatedFormContainer", "DeprecatedFormInput", "label", "Button", "onClick", "Select", "Root", "value", "editorInputMode", "onValueChange", "TriggerButton", "placeholder", "Portal", "Content", "Viewport", "EditorInputModes", "map", "mode", "Option", "key", "React", "forwardRef", "useEffect", "useRef", "useState", "log", "Avatar", "Icon", "Input", "Toolbar", "useTranslation", "SyntaxHighlighter", "errorText", "mx", "TestPanel", "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", "map", "message", "i", "RobotAvatar", "MessageItem", "length", "wrapper", "errorText", "SyntaxHighlighter", "language", "Avatar", "Content", "variant", "lazy", "ScriptContainer", "lazy", "DeploymentDialog"]
7
+ }
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  ScriptAction
4
- } from "./chunk-KGYTIL33.mjs";
4
+ } from "./chunk-VMQPOPKV.mjs";
5
5
 
6
6
  // packages/plugins/plugin-script/src/util/functions.ts
7
7
  import { getInvocationUrl, getUserFunctionUrlInMetadata } from "@dxos/functions";
@@ -60,8 +60,9 @@ var updateFunctionMetadata = (script, storedFunction, meta, functionId) => {
60
60
  };
61
61
 
62
62
  // packages/plugins/plugin-script/src/util/deploy.ts
63
- import { FunctionType, getUserFunctionUrlInMetadata as getUserFunctionUrlInMetadata2, incrementSemverPatch, makeFunctionUrl, setUserFunctionUrlInMetadata, uploadWorkerFunction } from "@dxos/functions";
63
+ import { FunctionType, getUserFunctionUrlInMetadata as getUserFunctionUrlInMetadata2, makeFunctionUrl, setUserFunctionUrlInMetadata } from "@dxos/functions";
64
64
  import { Bundler } from "@dxos/functions/bundler";
65
+ import { incrementSemverPatch, uploadWorkerFunction } from "@dxos/functions/edge";
65
66
  import { log as log2 } from "@dxos/log";
66
67
  import { live, getMeta as getMeta2, makeRef } from "@dxos/react-client/echo";
67
68
  var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/util/deploy.ts";
@@ -85,7 +86,7 @@ var deployScript = async ({ script, client, space, fn, existingFunctionUrl }) =>
85
86
  }
86
87
  const { functionId, version, meta } = await uploadWorkerFunction({
87
88
  client,
88
- spaceId: space.id,
89
+ ownerPublicKey: space.key,
89
90
  version: fn ? incrementSemverPatch(fn.version) : "0.0.1",
90
91
  functionId: existingFunctionId,
91
92
  source: bundle
@@ -99,7 +100,7 @@ var deployScript = async ({ script, client, space, fn, existingFunctionUrl }) =>
99
100
  const storedFunction = createOrUpdateFunctionInSpace(space, fn, script, functionId, version);
100
101
  script.changed = false;
101
102
  updateFunctionMetadata(script, storedFunction, meta, functionId);
102
- const functionUrl = makeFunctionUrl(space.id, {
103
+ const functionUrl = makeFunctionUrl({
103
104
  functionId
104
105
  });
105
106
  setUserFunctionUrlInMetadata(getMeta2(storedFunction), functionUrl);
@@ -110,7 +111,7 @@ var deployScript = async ({ script, client, space, fn, existingFunctionUrl }) =>
110
111
  } catch (err) {
111
112
  log2.catch(err, void 0, {
112
113
  F: __dxlog_file2,
113
- L: 80,
114
+ L: 79,
114
115
  S: void 0,
115
116
  C: (f, a) => f(...a)
116
117
  });
@@ -230,4 +231,4 @@ export {
230
231
  deployScript,
231
232
  useCreateAndDeployScriptTemplates
232
233
  };
233
- //# sourceMappingURL=chunk-TN35DSTF.mjs.map
234
+ //# sourceMappingURL=chunk-F47OE6ZM.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/util/functions.ts", "../../../src/util/deploy.ts", "../../../src/hooks/useCreateAndDeployScriptTemplates.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ScriptType, getInvocationUrl, getUserFunctionUrlInMetadata } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { getMeta, getSpace } from '@dxos/react-client/echo';\n\n/**\n * Get the function URL for a given script and client configuration\n */\nexport const getFunctionUrl = ({\n script,\n fn,\n edgeUrl,\n}: {\n script: ScriptType;\n fn: any;\n edgeUrl: string;\n}): string | undefined => {\n const space = getSpace(script);\n const existingFunctionUrl = fn && getUserFunctionUrlInMetadata(getMeta(fn));\n\n if (!existingFunctionUrl) {\n return undefined;\n }\n\n return getInvocationUrl(existingFunctionUrl, edgeUrl, {\n spaceId: space?.id,\n });\n};\n\nexport const updateFunctionMetadata = (script: ScriptType, storedFunction: any, meta: any, functionId: string) => {\n if (script.description !== undefined && script.description.trim() !== '') {\n storedFunction.description = script.description;\n } else if (meta.description) {\n storedFunction.description = meta.description;\n } else {\n log.verbose('no description in function metadata', { functionId });\n }\n\n if (meta.inputSchema) {\n storedFunction.inputSchema = meta.inputSchema;\n } else {\n log.verbose('no input schema in function metadata', { functionId });\n }\n\n if (meta.outputSchema) {\n storedFunction.outputSchema = meta.outputSchema;\n } else {\n log.verbose('no output schema in function metadata', { functionId });\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Client } from '@dxos/client';\nimport {\n FunctionType,\n type ScriptType,\n getUserFunctionUrlInMetadata,\n makeFunctionUrl,\n setUserFunctionUrlInMetadata,\n} from '@dxos/functions';\nimport { Bundler } from '@dxos/functions/bundler';\nimport { incrementSemverPatch, uploadWorkerFunction } from '@dxos/functions/edge';\nimport { log } from '@dxos/log';\nimport { live, getMeta, makeRef, type Space } from '@dxos/react-client/echo';\n\nimport { updateFunctionMetadata } from './functions';\n\nexport const isScriptDeployed = ({ script, fn }: { script: ScriptType; fn: any }): boolean => {\n const existingFunctionUrl = fn && getUserFunctionUrlInMetadata(getMeta(fn));\n return Boolean(existingFunctionUrl) && !script.changed;\n};\n\ntype DeployScriptProps = {\n script: ScriptType;\n client: Client;\n space: Space;\n fn?: FunctionType;\n existingFunctionUrl?: string;\n};\n\ntype DeployScriptResult = { success: boolean; error?: Error; functionUrl?: string };\n\n/**\n * Deploy a script to a space, handling bundling and uploading to the FaaS infrastructure.\n */\nexport const deployScript = async ({\n script,\n client,\n space,\n fn,\n existingFunctionUrl,\n}: DeployScriptProps): Promise<DeployScriptResult> => {\n const validationError = validateDeployInputs(script, space);\n if (validationError) {\n return { success: false, error: validationError };\n }\n\n try {\n const existingFunctionId = extractFunctionId(existingFunctionUrl);\n\n const { bundle, error } = await bundleScript(script.source!.target!.content);\n if (error || !bundle) {\n throw error || new Error('Bundle creation failed');\n }\n\n const { functionId, version, meta } = await uploadWorkerFunction({\n client,\n ownerPublicKey: space.key,\n version: fn ? incrementSemverPatch(fn.version) : '0.0.1',\n functionId: existingFunctionId,\n source: bundle,\n });\n\n if (functionId === undefined || version === undefined) {\n throw new Error(`Upload didn't return expected data: ${JSON.stringify({ functionId, version })}`);\n }\n\n const storedFunction = createOrUpdateFunctionInSpace(space, fn, script, functionId, version);\n script.changed = false;\n updateFunctionMetadata(script, storedFunction, meta, functionId);\n\n const functionUrl = makeFunctionUrl({ functionId });\n setUserFunctionUrlInMetadata(getMeta(storedFunction), functionUrl);\n\n return { success: true, functionUrl };\n } catch (err: any) {\n log.catch(err);\n return { success: false, error: err };\n }\n};\n\n/**\n * Validate inputs for script deployment.\n */\nconst validateDeployInputs = (script: ScriptType, space: Space): Error | null => {\n if (!script.source || !space) {\n return new Error('Script source or space not available');\n }\n return null;\n};\n\nconst extractFunctionId = (functionUrl?: string): string | undefined => {\n return functionUrl?.split('/').at(-1);\n};\n\nconst bundleScript = async (source: string): Promise<{ bundle?: string; error?: Error }> => {\n const bundler = new Bundler({ platform: 'browser', sandboxedModules: [], remoteModules: {} });\n const buildResult = await bundler.bundle({ source });\n\n if (buildResult.error || !buildResult.bundle) {\n return { error: buildResult.error || new Error('Bundle creation failed') };\n }\n\n return { bundle: buildResult.bundle };\n};\n\nconst createOrUpdateFunctionInSpace = (\n space: Space,\n fn: FunctionType | undefined,\n script: ScriptType,\n functionId: string,\n version: string,\n): FunctionType => {\n if (fn) {\n fn.version = version;\n return fn;\n } else {\n return space.db.add(live(FunctionType, { name: functionId, version, source: makeRef(script) }));\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { pipe } from 'effect/Function';\nimport { useCallback, useState } from 'react';\n\nimport { chain, createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { isInstanceOf } from '@dxos/echo-schema';\nimport { ScriptType } from '@dxos/functions';\nimport { invariant } from '@dxos/invariant';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { useClient } from '@dxos/react-client';\nimport { type Space } from '@dxos/react-client/echo';\n\nimport { type Template } from '../templates';\nimport { ScriptAction } from '../types';\nimport { deployScript } from '../util';\n\ntype DeploymentStatus = 'idle' | 'pending' | 'success' | 'error';\n\n/**\n * Hook for creating and deploying multiple script templates concurrently.\n *\n * Takes a space and an array of script template IDs, then provides a callback\n * function that creates each script from its template and deploys it to the space.\n * All creation / deployment operations run concurrently for improved performance.\n */\nexport const useCreateAndDeployScriptTemplates = (space: Space | undefined, scriptTemplates: Template[]) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const client = useClient();\n const [status, setStatus] = useState<DeploymentStatus>('idle');\n const [error, setError] = useState<Error | undefined>(undefined);\n\n const handleCreateAndDeployScripts = useCallback(async () => {\n invariant(space);\n setStatus('pending');\n setError(undefined);\n\n const deploymentResults = await Promise.all(\n scriptTemplates.map(async (template) => {\n const result = await dispatch(\n pipe(\n createIntent(ScriptAction.Create, { space, initialTemplateId: template.id }),\n chain(SpaceAction.AddObject, { target: space }),\n ),\n );\n invariant(isInstanceOf(ScriptType, result.data?.object));\n\n return deployScript({ space, client, script: result.data.object });\n }),\n );\n\n const hasErrors = deploymentResults.some((result) => !result.success);\n setStatus(hasErrors ? 'error' : 'success');\n }, [space, dispatch, client, scriptTemplates]);\n\n return { handleCreateAndDeployScripts, status, error };\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["getInvocationUrl", "getUserFunctionUrlInMetadata", "log", "getMeta", "getSpace", "getFunctionUrl", "script", "fn", "edgeUrl", "space", "existingFunctionUrl", "undefined", "spaceId", "id", "updateFunctionMetadata", "storedFunction", "meta", "functionId", "description", "trim", "verbose", "inputSchema", "outputSchema", "FunctionType", "getUserFunctionUrlInMetadata", "makeFunctionUrl", "setUserFunctionUrlInMetadata", "Bundler", "incrementSemverPatch", "uploadWorkerFunction", "log", "live", "getMeta", "makeRef", "isScriptDeployed", "script", "fn", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "Boolean", "changed", "deployScript", "client", "space", "validationError", "validateDeployInputs", "success", "error", "existingFunctionId", "extractFunctionId", "bundle", "bundleScript", "source", "target", "content", "Error", "functionId", "version", "meta", "uploadWorkerFunction", "ownerPublicKey", "key", "incrementSemverPatch", "undefined", "JSON", "stringify", "storedFunction", "createOrUpdateFunctionInSpace", "updateFunctionMetadata", "functionUrl", "makeFunctionUrl", "setUserFunctionUrlInMetadata", "err", "log", "catch", "split", "at", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "db", "add", "live", "FunctionType", "name", "makeRef", "pipe", "useCallback", "useState", "chain", "createIntent", "useIntentDispatcher", "isInstanceOf", "ScriptType", "invariant", "SpaceAction", "useClient", "useCreateAndDeployScriptTemplates", "space", "scriptTemplates", "dispatchPromise", "dispatch", "useIntentDispatcher", "client", "useClient", "status", "setStatus", "useState", "error", "setError", "undefined", "handleCreateAndDeployScripts", "useCallback", "invariant", "deploymentResults", "Promise", "all", "map", "template", "result", "pipe", "createIntent", "ScriptAction", "Create", "initialTemplateId", "id", "chain", "SpaceAction", "AddObject", "target", "isInstanceOf", "ScriptType", "data", "object", "deployScript", "script", "hasErrors", "some", "success"]
7
+ }
@@ -1,28 +1,28 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  templates
4
- } from "./chunk-X64SI6XO.mjs";
4
+ } from "./chunk-YCTECQLY.mjs";
5
5
  import {
6
6
  deployScript,
7
7
  getFunctionUrl,
8
8
  isScriptDeployed
9
- } from "./chunk-TN35DSTF.mjs";
9
+ } from "./chunk-F47OE6ZM.mjs";
10
10
  import {
11
11
  SCRIPT_PLUGIN
12
12
  } from "./chunk-H7FRB3M7.mjs";
13
13
 
14
14
  // packages/plugins/plugin-script/src/hooks/deploy.ts
15
- import { useCallback, useEffect, useMemo } from "react";
15
+ import { useEffect, useMemo } from "react";
16
16
  import { FunctionType, getUserFunctionUrlInMetadata } from "@dxos/functions";
17
17
  import { log } from "@dxos/log";
18
18
  import { useClient } from "@dxos/react-client";
19
- import { Filter, getMeta, getSpace, useQuery } from "@dxos/react-client/echo";
20
- import { useTranslation } from "@dxos/react-ui";
19
+ import { getMeta, getSpace, Query, Ref, useQuery } from "@dxos/react-client/echo";
21
20
  import { createMenuAction } from "@dxos/react-ui-menu";
22
21
  import { errorMessageColors } from "@dxos/react-ui-theme";
23
22
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/hooks/deploy.ts";
24
- var createDeploy = (state) => {
25
- const errorItem = createMenuAction("error", {
23
+ var createDeploy = ({ state, script, space, fn, client, existingFunctionUrl, t }) => {
24
+ const errorItem = createMenuAction("error", () => {
25
+ }, {
26
26
  label: state.error ?? [
27
27
  "no error label",
28
28
  {
@@ -33,7 +33,30 @@ var createDeploy = (state) => {
33
33
  hidden: !state.error,
34
34
  classNames: state.error && errorMessageColors
35
35
  });
36
- const deployAction = createMenuAction("deploy", {
36
+ const deployAction = createMenuAction("deploy", async () => {
37
+ if (!script.source || !space) {
38
+ return;
39
+ }
40
+ state.error = void 0;
41
+ state.deploying = true;
42
+ const result = await deployScript({
43
+ script,
44
+ client,
45
+ space,
46
+ fn,
47
+ existingFunctionUrl
48
+ });
49
+ if (!result.success) {
50
+ log.catch(result.error, void 0, {
51
+ F: __dxlog_file,
52
+ L: 59,
53
+ S: void 0,
54
+ C: (f, a) => f(...a)
55
+ });
56
+ state.error = t("upload failed label");
57
+ }
58
+ state.deploying = false;
59
+ }, {
37
60
  type: "deploy",
38
61
  label: [
39
62
  state.deploying ? "pending label" : "deploy label",
@@ -45,7 +68,12 @@ var createDeploy = (state) => {
45
68
  disabled: state.deploying,
46
69
  classNames: state.deploying ? "[&_svg]:animate-spin" : ""
47
70
  });
48
- const copyAction = createMenuAction("copy", {
71
+ const copyAction = createMenuAction("copy", async () => {
72
+ if (!state.functionUrl) {
73
+ return;
74
+ }
75
+ await navigator.clipboard.writeText(state.functionUrl);
76
+ }, {
49
77
  type: "copy",
50
78
  label: [
51
79
  "copy link label",
@@ -112,8 +140,8 @@ var useDeployState = ({ state, script }) => {
112
140
  };
113
141
  var useDeployDeps = ({ script }) => {
114
142
  const space = getSpace(script);
115
- const [fn] = useQuery(space, Filter.schema(FunctionType, {
116
- source: script
143
+ const [fn] = useQuery(space, Query.type(FunctionType, {
144
+ source: Ref.make(script)
117
145
  }));
118
146
  const client = useClient();
119
147
  const existingFunctionUrl = useMemo(() => fn && getUserFunctionUrlInMetadata(getMeta(fn)), [
@@ -126,51 +154,6 @@ var useDeployDeps = ({ script }) => {
126
154
  existingFunctionUrl
127
155
  };
128
156
  };
129
- var useDeployHandler = ({ state, script }) => {
130
- const { space, fn, client, existingFunctionUrl } = useDeployDeps({
131
- script
132
- });
133
- const { t } = useTranslation(SCRIPT_PLUGIN);
134
- return useCallback(async () => {
135
- if (!script.source || !space) {
136
- return;
137
- }
138
- state.error = void 0;
139
- state.deploying = true;
140
- const result = await deployScript({
141
- script,
142
- client,
143
- space,
144
- fn,
145
- existingFunctionUrl
146
- });
147
- if (!result.success) {
148
- log.catch(result.error, void 0, {
149
- F: __dxlog_file,
150
- L: 105,
151
- S: void 0,
152
- C: (f, a) => f(...a)
153
- });
154
- state.error = t("upload failed label");
155
- }
156
- state.deploying = false;
157
- }, [
158
- fn,
159
- client,
160
- t,
161
- existingFunctionUrl,
162
- script,
163
- space
164
- ]);
165
- };
166
- var useCopyHandler = ({ state }) => useCallback(async () => {
167
- if (!state.functionUrl) {
168
- return;
169
- }
170
- await navigator.clipboard.writeText(state.functionUrl);
171
- }, [
172
- state.functionUrl
173
- ]);
174
157
 
175
158
  // packages/plugins/plugin-script/src/hooks/useToolbarState.ts
176
159
  import { useMemo as useMemo2 } from "react";
@@ -183,12 +166,33 @@ var useToolbarState = (initialState = {}) => {
183
166
  import { format } from "prettier";
184
167
  import prettierPluginEstree from "prettier/plugins/estree";
185
168
  import prettierPluginTypescript from "prettier/plugins/typescript";
186
- import { useCallback as useCallback2 } from "react";
187
169
  import { log as log2 } from "@dxos/log";
188
170
  import { createMenuAction as createMenuAction2 } from "@dxos/react-ui-menu";
189
171
  var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/hooks/format.ts";
190
- var createFormat = () => {
191
- const formatAction = createMenuAction2("format", {
172
+ var createFormat = (script) => {
173
+ const formatAction = createMenuAction2("format", async () => {
174
+ if (!script.source) {
175
+ return;
176
+ }
177
+ try {
178
+ script.source.target.content = await format(script.source.target.content, {
179
+ parser: "typescript",
180
+ plugins: [
181
+ prettierPluginEstree,
182
+ prettierPluginTypescript
183
+ ],
184
+ semi: true,
185
+ singleQuote: true
186
+ });
187
+ } catch (err) {
188
+ log2.catch(err, void 0, {
189
+ F: __dxlog_file2,
190
+ L: 34,
191
+ S: void 0,
192
+ C: (f, a) => f(...a)
193
+ });
194
+ }
195
+ }, {
192
196
  label: [
193
197
  "format label",
194
198
  {
@@ -209,35 +213,9 @@ var createFormat = () => {
209
213
  ]
210
214
  };
211
215
  };
212
- var useFormatHandler = ({ script }) => useCallback2(async () => {
213
- if (!script.source) {
214
- return;
215
- }
216
- try {
217
- script.source.target.content = await format(script.source.target.content, {
218
- parser: "typescript",
219
- plugins: [
220
- prettierPluginEstree,
221
- prettierPluginTypescript
222
- ],
223
- semi: true,
224
- singleQuote: true
225
- });
226
- } catch (err) {
227
- log2.catch(err, void 0, {
228
- F: __dxlog_file2,
229
- L: 45,
230
- S: void 0,
231
- C: (f, a) => f(...a)
232
- });
233
- }
234
- }, [
235
- script.source
236
- ]);
237
216
 
238
217
  // packages/plugins/plugin-script/src/hooks/template.ts
239
- import { useCallback as useCallback3 } from "react";
240
- import { FUNCTIONS_PRESET_META_KEY } from "@dxos/functions/types";
218
+ import { FUNCTIONS_PRESET_META_KEY } from "@dxos/functions";
241
219
  import { getMeta as getMeta2 } from "@dxos/live-object";
242
220
  import { createMenuItemGroup, createMenuAction as createMenuAction3 } from "@dxos/react-ui-menu";
243
221
  var createTemplateSelectGroup = () => {
@@ -251,18 +229,32 @@ var createTemplateSelectGroup = () => {
251
229
  variant: "dropdownMenu"
252
230
  });
253
231
  };
254
- var createTemplateSelectActions = () => {
232
+ var createTemplateSelectActions = (script) => {
255
233
  return templates.map((template) => {
256
- return createMenuAction3(`template--${template.id}`, {
234
+ return createMenuAction3(`template--${template.id}`, () => {
235
+ script.name = template.name;
236
+ script.source.target.content = template.source;
237
+ const metaKeys = getMeta2(script).keys;
238
+ const oldPresetIndex = metaKeys.findIndex((key) => key.source === FUNCTIONS_PRESET_META_KEY);
239
+ if (oldPresetIndex >= 0) {
240
+ metaKeys.splice(oldPresetIndex, 1);
241
+ }
242
+ if (template.presetId) {
243
+ metaKeys.push({
244
+ source: FUNCTIONS_PRESET_META_KEY,
245
+ id: template.presetId
246
+ });
247
+ }
248
+ }, {
257
249
  label: template.name,
258
250
  value: template.id,
259
251
  type: "template"
260
252
  });
261
253
  });
262
254
  };
263
- var createTemplateSelect = () => {
255
+ var createTemplateSelect = (script) => {
264
256
  const templateSelectGroup = createTemplateSelectGroup();
265
- const templateSelectActions = createTemplateSelectActions();
257
+ const templateSelectActions = createTemplateSelectActions(script);
266
258
  return {
267
259
  nodes: [
268
260
  templateSelectGroup,
@@ -280,74 +272,13 @@ var createTemplateSelect = () => {
280
272
  ]
281
273
  };
282
274
  };
283
- var useTemplateSelectHandler = ({ script }) => {
284
- return useCallback3((templateId) => {
285
- const template = templates.find((template2) => template2.id === templateId);
286
- if (template) {
287
- script.name = template.name;
288
- script.source.target.content = template.source;
289
- const metaKeys = getMeta2(script).keys;
290
- const oldPresetIndex = metaKeys.findIndex((key) => key.source === FUNCTIONS_PRESET_META_KEY);
291
- if (oldPresetIndex >= 0) {
292
- metaKeys.splice(oldPresetIndex, 1);
293
- }
294
- if (template.presetId) {
295
- metaKeys.push({
296
- source: FUNCTIONS_PRESET_META_KEY,
297
- id: template.presetId
298
- });
299
- }
300
- }
301
- }, [
302
- script
303
- ]);
304
- };
305
-
306
- // packages/plugins/plugin-script/src/hooks/useToolbarAction.ts
307
- import { useCallback as useCallback4 } from "react";
308
- import { log as log3 } from "@dxos/log";
309
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/hooks/useToolbarAction.ts";
310
- var useToolbarAction = (props) => {
311
- const handleTemplateSelect = useTemplateSelectHandler(props);
312
- const handleFormat = useFormatHandler(props);
313
- const handleDeploy = useDeployHandler(props);
314
- const handleCopy = useCopyHandler(props);
315
- return useCallback4((action) => {
316
- switch (action.properties.type) {
317
- case "template":
318
- handleTemplateSelect(action.properties.value);
319
- break;
320
- case "format":
321
- void handleFormat();
322
- break;
323
- case "deploy":
324
- void handleDeploy();
325
- break;
326
- case "copy":
327
- void handleCopy();
328
- break;
329
- default:
330
- log3.error("Unknown action type", action, {
331
- F: __dxlog_file3,
332
- L: 45,
333
- S: void 0,
334
- C: (f, a) => f(...a)
335
- });
336
- }
337
- }, [
338
- handleTemplateSelect,
339
- handleFormat,
340
- handleDeploy,
341
- handleCopy
342
- ]);
343
- };
344
275
 
345
276
  export {
346
277
  createDeploy,
347
278
  useDeployState,
279
+ useDeployDeps,
348
280
  createFormat,
349
281
  createTemplateSelect,
350
- useToolbarAction,
351
282
  useToolbarState
352
283
  };
353
- //# sourceMappingURL=chunk-NNQXJQBG.mjs.map
284
+ //# sourceMappingURL=chunk-NYA7KDN6.mjs.map