@dxos/plugin-script 0.8.2-main.fbd8ed0 → 0.8.2-staging.42af850

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 (155) hide show
  1. package/dist/lib/browser/DeploymentDialog-NLWQHNKE.mjs +12 -0
  2. package/dist/lib/browser/ScriptContainer-Q2K5FJSC.mjs +272 -0
  3. package/dist/lib/browser/ScriptContainer-Q2K5FJSC.mjs.map +7 -0
  4. package/dist/lib/browser/{app-graph-builder-BFBTQPSP.mjs → app-graph-builder-V3HPXJAD.mjs} +2 -2
  5. package/dist/lib/browser/{artifact-definition-PD4UAAQZ.mjs → artifact-definition-L3AIY4XA.mjs} +15 -24
  6. package/dist/lib/browser/artifact-definition-L3AIY4XA.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-INL55MFV.mjs → chunk-6T64VQHF.mjs} +2 -2
  8. package/dist/lib/browser/{chunk-KJMVDGRB.mjs → chunk-6ZHHWU6S.mjs} +3 -3
  9. package/dist/lib/browser/{chunk-KJMVDGRB.mjs.map → chunk-6ZHHWU6S.mjs.map} +1 -1
  10. package/dist/lib/browser/chunk-74DEDPHT.mjs +530 -0
  11. package/dist/lib/{node-esm/chunk-A3TXZHGD.mjs.map → browser/chunk-74DEDPHT.mjs.map} +1 -1
  12. package/dist/lib/browser/chunk-BTEFFA4C.mjs +153 -0
  13. package/dist/lib/{node-esm/chunk-V733VFCJ.mjs.map → browser/chunk-BTEFFA4C.mjs.map} +1 -1
  14. package/dist/lib/browser/{chunk-FFDJENAN.mjs → chunk-JQOAZJTK.mjs} +4 -4
  15. package/dist/lib/browser/chunk-M6QMJBKQ.mjs +87 -0
  16. package/dist/lib/browser/chunk-M6QMJBKQ.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-6MLJJI73.mjs → chunk-WB3X5Z7Q.mjs} +7 -7
  18. package/dist/lib/browser/chunk-WB3X5Z7Q.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-A4VOGQ2P.mjs → chunk-YSQMXTYO.mjs} +3 -3
  20. package/dist/lib/{node-esm/chunk-HKJUN636.mjs.map → browser/chunk-YSQMXTYO.mjs.map} +1 -1
  21. package/dist/lib/browser/{compiler-O4FJK7RR.mjs → compiler-W4BYJYTL.mjs} +3 -3
  22. package/dist/lib/browser/compiler-W4BYJYTL.mjs.map +7 -0
  23. package/dist/lib/browser/index.mjs +13 -13
  24. package/dist/lib/browser/index.mjs.map +1 -1
  25. package/dist/lib/browser/{intent-resolver-SXO6X6XQ.mjs → intent-resolver-U5YRUE7W.mjs} +7 -7
  26. package/dist/lib/browser/meta.json +1 -1
  27. package/dist/lib/browser/{react-surface-TZGE7EGC.mjs → react-surface-3MSPT54G.mjs} +9 -9
  28. package/dist/lib/browser/{settings-EOKSUGB6.mjs → settings-FU7NTENS.mjs} +3 -3
  29. package/dist/lib/browser/types.mjs +2 -2
  30. package/dist/lib/node/{DeploymentDialog-43SI7XFL.cjs → DeploymentDialog-PC5AL3BB.cjs} +10 -10
  31. package/dist/lib/node/DeploymentDialog-PC5AL3BB.cjs.map +7 -0
  32. package/dist/lib/node/ScriptContainer-56SH6R24.cjs +289 -0
  33. package/dist/lib/node/ScriptContainer-56SH6R24.cjs.map +7 -0
  34. package/dist/lib/node/{app-graph-builder-IKOX7GHW.cjs → app-graph-builder-YE4OM4OC.cjs} +9 -9
  35. package/dist/lib/node/{artifact-definition-C644EAYM.cjs → artifact-definition-6BD6CVOV.cjs} +23 -32
  36. package/dist/lib/node/artifact-definition-6BD6CVOV.cjs.map +7 -0
  37. package/dist/lib/node/chunk-5LHP5EUJ.cjs +557 -0
  38. package/dist/lib/node/{chunk-HPBQHRM3.cjs.map → chunk-5LHP5EUJ.cjs.map} +1 -1
  39. package/dist/lib/node/chunk-BYLHJ26I.cjs +91 -0
  40. package/dist/lib/node/chunk-BYLHJ26I.cjs.map +7 -0
  41. package/dist/lib/node/{chunk-SXJGHLK6.cjs → chunk-HCRW6T3G.cjs} +8 -8
  42. package/dist/lib/node/chunk-HCRW6T3G.cjs.map +7 -0
  43. package/dist/lib/node/{chunk-7NNN3IUQ.cjs → chunk-NRZJV5SV.cjs} +16 -16
  44. package/dist/lib/node/{chunk-NO5Y74F3.cjs → chunk-QG2X6J74.cjs} +6 -6
  45. package/dist/lib/node/{chunk-NO5Y74F3.cjs.map → chunk-QG2X6J74.cjs.map} +1 -1
  46. package/dist/lib/node/chunk-RARNZD62.cjs +179 -0
  47. package/dist/lib/node/{chunk-VHSIOCS5.cjs.map → chunk-RARNZD62.cjs.map} +1 -1
  48. package/dist/lib/node/{chunk-K7PPLRVQ.cjs → chunk-V6L73D7S.cjs} +6 -6
  49. package/dist/lib/node/{chunk-KFJQVOGS.cjs → chunk-ZEV3VARQ.cjs} +7 -7
  50. package/dist/lib/node/{chunk-KFJQVOGS.cjs.map → chunk-ZEV3VARQ.cjs.map} +1 -1
  51. package/dist/lib/node/{compiler-FBC6ELQN.cjs → compiler-TFSJRLL4.cjs} +7 -7
  52. package/dist/lib/node/{compiler-FBC6ELQN.cjs.map → compiler-TFSJRLL4.cjs.map} +3 -3
  53. package/dist/lib/node/index.cjs +38 -38
  54. package/dist/lib/node/index.cjs.map +1 -1
  55. package/dist/lib/node/{intent-resolver-PDSMZM2T.cjs → intent-resolver-7SF26VGC.cjs} +15 -15
  56. package/dist/lib/node/meta.json +1 -1
  57. package/dist/lib/node/{react-surface-BHHJQZ7P.cjs → react-surface-L6RS7BT2.cjs} +31 -31
  58. package/dist/lib/node/{settings-425QHVGC.cjs → settings-RRCQ7ZQD.cjs} +9 -9
  59. package/dist/lib/node/types.cjs +5 -5
  60. package/dist/lib/node/types.cjs.map +1 -1
  61. package/dist/lib/node-esm/{DeploymentDialog-2RRUJEBC.mjs → DeploymentDialog-QHB2BGNJ.mjs} +5 -5
  62. package/dist/lib/node-esm/ScriptContainer-6RCZ43TI.mjs +273 -0
  63. package/dist/lib/node-esm/ScriptContainer-6RCZ43TI.mjs.map +7 -0
  64. package/dist/lib/node-esm/{app-graph-builder-KZGKGSP6.mjs → app-graph-builder-4CN7URJQ.mjs} +2 -2
  65. package/dist/lib/node-esm/{artifact-definition-J6UM6BQF.mjs → artifact-definition-PPV2XKU7.mjs} +15 -24
  66. package/dist/lib/node-esm/artifact-definition-PPV2XKU7.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-25GOLUXY.mjs +154 -0
  68. package/dist/lib/{browser/chunk-YNOCAJYT.mjs.map → node-esm/chunk-25GOLUXY.mjs.map} +1 -1
  69. package/dist/lib/node-esm/{chunk-HKJUN636.mjs → chunk-2KJYPUQD.mjs} +3 -3
  70. package/dist/lib/{browser/chunk-A4VOGQ2P.mjs.map → node-esm/chunk-2KJYPUQD.mjs.map} +1 -1
  71. package/dist/lib/node-esm/{chunk-F47OE6ZM.mjs → chunk-47MABIVX.mjs} +2 -2
  72. package/dist/lib/node-esm/{chunk-H7FRB3M7.mjs → chunk-AEB5TPEW.mjs} +3 -3
  73. package/dist/lib/node-esm/{chunk-H7FRB3M7.mjs.map → chunk-AEB5TPEW.mjs.map} +1 -1
  74. package/dist/lib/node-esm/chunk-KOO76P2Y.mjs +531 -0
  75. package/dist/lib/{browser/chunk-BONEXAIK.mjs.map → node-esm/chunk-KOO76P2Y.mjs.map} +1 -1
  76. package/dist/lib/node-esm/{chunk-VMQPOPKV.mjs → chunk-UESZKXLR.mjs} +7 -7
  77. package/dist/lib/node-esm/chunk-UESZKXLR.mjs.map +7 -0
  78. package/dist/lib/node-esm/{chunk-NYA7KDN6.mjs → chunk-WD7OFSM3.mjs} +4 -4
  79. package/dist/lib/node-esm/chunk-Z44O2YIK.mjs +89 -0
  80. package/dist/lib/node-esm/chunk-Z44O2YIK.mjs.map +7 -0
  81. package/dist/lib/node-esm/{compiler-3NG4T5LH.mjs → compiler-7PQ4D43R.mjs} +3 -3
  82. package/dist/lib/{browser/compiler-O4FJK7RR.mjs.map → node-esm/compiler-7PQ4D43R.mjs.map} +3 -3
  83. package/dist/lib/node-esm/index.mjs +13 -13
  84. package/dist/lib/node-esm/index.mjs.map +1 -1
  85. package/dist/lib/node-esm/{intent-resolver-WSAVLQY5.mjs → intent-resolver-3APO7YDF.mjs} +7 -7
  86. package/dist/lib/node-esm/meta.json +1 -1
  87. package/dist/lib/node-esm/{react-surface-W7BM4PDK.mjs → react-surface-S5LHD3IA.mjs} +9 -9
  88. package/dist/lib/node-esm/{settings-BWSKKIVQ.mjs → settings-NKNC32QC.mjs} +3 -3
  89. package/dist/lib/node-esm/types.mjs +2 -2
  90. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  91. package/dist/types/src/compiler/compiler.d.ts.map +1 -1
  92. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  93. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  94. package/dist/types/src/templates/discord.d.ts.map +1 -1
  95. package/dist/types/src/types.d.ts.map +1 -1
  96. package/package.json +51 -51
  97. package/src/capabilities/artifact-definition.ts +10 -11
  98. package/src/compiler/compiler.ts +3 -3
  99. package/src/components/ScriptToolbar/ScriptToolbar.tsx +19 -16
  100. package/src/components/TypescriptEditor/TypescriptEditor.tsx +0 -6
  101. package/src/meta.ts +2 -2
  102. package/src/templates/chat.ts +1 -1
  103. package/src/templates/chess.ts +1 -1
  104. package/src/templates/data-generator.ts +1 -1
  105. package/src/templates/discord.ts +7 -5
  106. package/src/templates/forex-effect.ts +2 -2
  107. package/src/templates/gmail.ts +6 -4
  108. package/src/types.ts +2 -2
  109. package/dist/lib/browser/DeploymentDialog-W7PY33VN.mjs +0 -12
  110. package/dist/lib/browser/ScriptContainer-6DYV7D65.mjs +0 -260
  111. package/dist/lib/browser/ScriptContainer-6DYV7D65.mjs.map +0 -7
  112. package/dist/lib/browser/artifact-definition-PD4UAAQZ.mjs.map +0 -7
  113. package/dist/lib/browser/chunk-6MLJJI73.mjs.map +0 -7
  114. package/dist/lib/browser/chunk-BONEXAIK.mjs +0 -480
  115. package/dist/lib/browser/chunk-RTVU4RZW.mjs +0 -87
  116. package/dist/lib/browser/chunk-RTVU4RZW.mjs.map +0 -7
  117. package/dist/lib/browser/chunk-YNOCAJYT.mjs +0 -147
  118. package/dist/lib/node/DeploymentDialog-43SI7XFL.cjs.map +0 -7
  119. package/dist/lib/node/ScriptContainer-H56OW5FC.cjs +0 -277
  120. package/dist/lib/node/ScriptContainer-H56OW5FC.cjs.map +0 -7
  121. package/dist/lib/node/artifact-definition-C644EAYM.cjs.map +0 -7
  122. package/dist/lib/node/chunk-HPBQHRM3.cjs +0 -507
  123. package/dist/lib/node/chunk-SXJGHLK6.cjs.map +0 -7
  124. package/dist/lib/node/chunk-VHSIOCS5.cjs +0 -173
  125. package/dist/lib/node/chunk-VNSZBEJW.cjs +0 -91
  126. package/dist/lib/node/chunk-VNSZBEJW.cjs.map +0 -7
  127. package/dist/lib/node-esm/ScriptContainer-762FHDZ4.mjs +0 -261
  128. package/dist/lib/node-esm/ScriptContainer-762FHDZ4.mjs.map +0 -7
  129. package/dist/lib/node-esm/artifact-definition-J6UM6BQF.mjs.map +0 -7
  130. package/dist/lib/node-esm/chunk-A3TXZHGD.mjs +0 -481
  131. package/dist/lib/node-esm/chunk-V733VFCJ.mjs +0 -148
  132. package/dist/lib/node-esm/chunk-VMQPOPKV.mjs.map +0 -7
  133. package/dist/lib/node-esm/chunk-YCTECQLY.mjs +0 -89
  134. package/dist/lib/node-esm/chunk-YCTECQLY.mjs.map +0 -7
  135. package/dist/lib/node-esm/compiler-3NG4T5LH.mjs.map +0 -7
  136. /package/dist/lib/browser/{DeploymentDialog-W7PY33VN.mjs.map → DeploymentDialog-NLWQHNKE.mjs.map} +0 -0
  137. /package/dist/lib/browser/{app-graph-builder-BFBTQPSP.mjs.map → app-graph-builder-V3HPXJAD.mjs.map} +0 -0
  138. /package/dist/lib/browser/{chunk-INL55MFV.mjs.map → chunk-6T64VQHF.mjs.map} +0 -0
  139. /package/dist/lib/browser/{chunk-FFDJENAN.mjs.map → chunk-JQOAZJTK.mjs.map} +0 -0
  140. /package/dist/lib/browser/{intent-resolver-SXO6X6XQ.mjs.map → intent-resolver-U5YRUE7W.mjs.map} +0 -0
  141. /package/dist/lib/browser/{react-surface-TZGE7EGC.mjs.map → react-surface-3MSPT54G.mjs.map} +0 -0
  142. /package/dist/lib/browser/{settings-EOKSUGB6.mjs.map → settings-FU7NTENS.mjs.map} +0 -0
  143. /package/dist/lib/node/{app-graph-builder-IKOX7GHW.cjs.map → app-graph-builder-YE4OM4OC.cjs.map} +0 -0
  144. /package/dist/lib/node/{chunk-7NNN3IUQ.cjs.map → chunk-NRZJV5SV.cjs.map} +0 -0
  145. /package/dist/lib/node/{chunk-K7PPLRVQ.cjs.map → chunk-V6L73D7S.cjs.map} +0 -0
  146. /package/dist/lib/node/{intent-resolver-PDSMZM2T.cjs.map → intent-resolver-7SF26VGC.cjs.map} +0 -0
  147. /package/dist/lib/node/{react-surface-BHHJQZ7P.cjs.map → react-surface-L6RS7BT2.cjs.map} +0 -0
  148. /package/dist/lib/node/{settings-425QHVGC.cjs.map → settings-RRCQ7ZQD.cjs.map} +0 -0
  149. /package/dist/lib/node-esm/{DeploymentDialog-2RRUJEBC.mjs.map → DeploymentDialog-QHB2BGNJ.mjs.map} +0 -0
  150. /package/dist/lib/node-esm/{app-graph-builder-KZGKGSP6.mjs.map → app-graph-builder-4CN7URJQ.mjs.map} +0 -0
  151. /package/dist/lib/node-esm/{chunk-F47OE6ZM.mjs.map → chunk-47MABIVX.mjs.map} +0 -0
  152. /package/dist/lib/node-esm/{chunk-NYA7KDN6.mjs.map → chunk-WD7OFSM3.mjs.map} +0 -0
  153. /package/dist/lib/node-esm/{intent-resolver-WSAVLQY5.mjs.map → intent-resolver-3APO7YDF.mjs.map} +0 -0
  154. /package/dist/lib/node-esm/{react-surface-W7BM4PDK.mjs.map → react-surface-S5LHD3IA.mjs.map} +0 -0
  155. /package/dist/lib/node-esm/{settings-BWSKKIVQ.mjs.map → settings-NKNC32QC.mjs.map} +0 -0
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/DeploymentDialog/DeploymentDialog.tsx", "../../../src/components/DeploymentDialog/index.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useMemo } from 'react';\n\nimport { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';\nimport { type DataType } from '@dxos/schema';\n\nimport { useCreateAndDeployScriptTemplates } from '../../hooks/useCreateAndDeployScriptTemplates';\nimport { SCRIPT_PLUGIN } from '../../meta';\nimport { type Template } from '../../templates';\n\nexport const DEPLOYMENT_DIALOG = `${SCRIPT_PLUGIN}/deployment/dialog`;\n\n// TODO(ZaymonFC):\n// - Show activity and feedback to the user.\n// - Only take an array of templateIds and get the name from the data.\n// - Pending / onError states.\n\ntype DeploymentDialogProps = {\n accessToken: DataType.AccessToken;\n scriptTemplates: Template[];\n};\n\nexport const DeploymentDialog = ({ accessToken, scriptTemplates }: DeploymentDialogProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const space = useMemo(() => getSpace(accessToken), [accessToken]);\n\n // TODO(ZaymonFC): Thinking further. All of this should get moved to intents to run async in the background.\n // Deployment shouldn't be tied to the lifecycle of the dialogue component.\n const { handleCreateAndDeployScripts, status } = useCreateAndDeployScriptTemplates(space, scriptTemplates);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n useEffect(() => {\n if (status === 'success') {\n // TODO(ZaymonFC): We can probably re-use this toast for normal script deployment.\n void dispatch(\n createIntent(LayoutAction.AddToast, {\n part: 'toast',\n subject: {\n id: `${SCRIPT_PLUGIN}/deployment-success`,\n icon: 'ph--check--regular',\n duration: Infinity,\n title: ['script deployment toast label', { ns: SCRIPT_PLUGIN, count: scriptTemplates.length }],\n description: ['script deployment toast description', { ns: SCRIPT_PLUGIN, count: scriptTemplates.length }],\n closeLabel: ['script deployment toast close label', { ns: SCRIPT_PLUGIN, count: scriptTemplates.length }],\n },\n }),\n );\n void dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } }));\n }\n if (status === 'error') {\n void dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } }));\n void dispatch(\n createIntent(LayoutAction.AddToast, {\n part: 'toast',\n subject: {\n id: `${SCRIPT_PLUGIN}/deployment-error`,\n icon: 'ph--warning--regular',\n duration: Infinity,\n title: ['script deployment error toast label', { ns: SCRIPT_PLUGIN, count: scriptTemplates.length }],\n description: [\n 'script deployment error toast description',\n { ns: SCRIPT_PLUGIN, count: scriptTemplates.length },\n ],\n closeLabel: [\n 'script deployment error toast close label',\n { ns: SCRIPT_PLUGIN, count: scriptTemplates.length },\n ],\n },\n }),\n );\n }\n }, [status, dispatch]);\n\n return (\n <Dialog.Content>\n <div className='flex justify-between items-center'>\n <Dialog.Title>{t('deployment dialog title')}</Dialog.Title>\n <Dialog.Close asChild>\n <Button density='fine' variant='ghost'>\n <Icon icon='ph--x--regular' size={4} />\n </Button>\n </Dialog.Close>\n </div>\n <div role='none' className='plb-4'>\n {/* TODO: Implement deployment logic and UI. */}\n <p>{t('deployment dialog scripts found message', { count: scriptTemplates.length })}</p>\n <ul className='pbs-2'>\n {scriptTemplates.map((template) => {\n return <li key={template.id}>{template.name}</li>;\n })}\n </ul>\n </div>\n <div role='none' className='flex flex-row-reverse gap-1'>\n <Button variant='primary' onClick={handleCreateAndDeployScripts} disabled={status === 'pending'}>\n {status === 'pending'\n ? t('deployment dialog deploy functions pending button label', { count: scriptTemplates.length })\n : t('deployment dialog deploy functions button label', { count: scriptTemplates.length })}\n </Button>\n <Dialog.Close asChild disabled={status === 'pending'}>\n <Button disabled={status === 'pending'}>{t('deployment dialog skip button label')}</Button>\n </Dialog.Close>\n </div>\n </Dialog.Content>\n );\n};\n\nexport default DeploymentDialog;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { DeploymentDialog, DEPLOYMENT_DIALOG } from './DeploymentDialog';\n\nexport { DEPLOYMENT_DIALOG };\n\nexport default DeploymentDialog;\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["React", "useEffect", "useMemo", "createIntent", "LayoutAction", "useIntentDispatcher", "getSpace", "Button", "Dialog", "Icon", "useTranslation", "DEPLOYMENT_DIALOG", "SCRIPT_PLUGIN", "DeploymentDialog", "accessToken", "scriptTemplates", "t", "useTranslation", "space", "useMemo", "getSpace", "handleCreateAndDeployScripts", "status", "useCreateAndDeployScriptTemplates", "dispatchPromise", "dispatch", "useIntentDispatcher", "useEffect", "createIntent", "LayoutAction", "AddToast", "part", "subject", "id", "icon", "duration", "Infinity", "title", "ns", "count", "length", "description", "closeLabel", "UpdateDialog", "options", "state", "Dialog", "Content", "div", "className", "Title", "Close", "asChild", "Button", "density", "variant", "Icon", "size", "role", "p", "ul", "map", "template", "li", "key", "name", "onClick", "disabled", "DeploymentDialog"]
7
7
  }
@@ -1,16 +1,16 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  meta
4
- } from "./chunk-H7FRB3M7.mjs";
4
+ } from "./chunk-AEB5TPEW.mjs";
5
5
 
6
6
  // packages/plugins/plugin-script/src/capabilities/capabilities.ts
7
7
  import { defineCapability } from "@dxos/app-framework";
8
- var ScriptCapabilities;
9
8
  (function(ScriptCapabilities2) {
10
9
  ScriptCapabilities2.Compiler = defineCapability(`${meta.id}/capability/compiler`);
11
10
  })(ScriptCapabilities || (ScriptCapabilities = {}));
11
+ var ScriptCapabilities;
12
12
 
13
13
  export {
14
14
  ScriptCapabilities
15
15
  };
16
- //# sourceMappingURL=chunk-HKJUN636.mjs.map
16
+ //# sourceMappingURL=chunk-2KJYPUQD.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/capabilities.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineCapability } from '@dxos/app-framework';\n\nimport { type Compiler } from '../compiler';\nimport { meta } from '../meta';\n\nexport namespace ScriptCapabilities {\n export const Compiler = defineCapability<Compiler>(`${meta.id}/capability/compiler`);\n}\n"],
5
- "mappings": ";;;;;AAIA,SAASA,wBAAwB;;UAKhBC,qBAAAA;sBACFC,WAAWC,iBAA2B,GAAGC,KAAKC,EAAE,sBAAsB;AACrF,GAFiBJ,uBAAAA,qBAAAA,CAAAA,EAAAA;",
5
+ "mappings": ";;;;;;AAIA,SAASA,wBAAwB;UAKhBC,qBAAAA;sBACFC,WAAWC,iBAA2B,GAAGC,KAAKC,EAAE,sBAAsB;AACrF,GAFiBJ,uBAAAA,qBAAAA,CAAAA,EAAAA;;",
6
6
  "names": ["defineCapability", "ScriptCapabilities", "Compiler", "defineCapability", "meta", "id"]
7
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-VMQPOPKV.mjs";
4
+ } from "./chunk-UESZKXLR.mjs";
5
5
 
6
6
  // packages/plugins/plugin-script/src/util/functions.ts
7
7
  import { getInvocationUrl, getUserFunctionUrlInMetadata } from "@dxos/functions";
@@ -231,4 +231,4 @@ export {
231
231
  deployScript,
232
232
  useCreateAndDeployScriptTemplates
233
233
  };
234
- //# sourceMappingURL=chunk-F47OE6ZM.mjs.map
234
+ //# sourceMappingURL=chunk-47MABIVX.mjs.map
@@ -7,9 +7,9 @@ var meta = {
7
7
  name: "Scripts",
8
8
  description: "Scripts in Composer allow you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API\u2019s or external data inside of Composer.",
9
9
  icon: "ph--code--regular",
10
- source: "https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer",
10
+ source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-explorer",
11
11
  tags: [
12
- "experimental"
12
+ "labs"
13
13
  ],
14
14
  screenshots: [
15
15
  "https://dxos.network/plugin-details-scripts-dark.png"
@@ -27,4 +27,4 @@ export {
27
27
  meta,
28
28
  defaultScriptsForIntegration
29
29
  };
30
- //# sourceMappingURL=chunk-H7FRB3M7.mjs.map
30
+ //# sourceMappingURL=chunk-AEB5TPEW.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SCRIPT_PLUGIN = 'dxos.org/plugin/script';\n\nexport const meta: PluginMeta = {\n id: SCRIPT_PLUGIN,\n name: 'Scripts',\n description:\n 'Scripts in Composer allow you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API’s or external data inside of Composer.',\n icon: 'ph--code--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer',\n tags: ['experimental'],\n screenshots: ['https://dxos.network/plugin-details-scripts-dark.png'],\n};\n\n// TODO(ZaymonFC): Configure by scopes?\nexport const defaultScriptsForIntegration: Record<string, string[]> = {\n // TODO(wittjosiah): Also include content extraction scripts in the default set.\n 'gmail.com': ['dxos.org/script/gmail'],\n};\n"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SCRIPT_PLUGIN = 'dxos.org/plugin/script';\n\nexport const meta: PluginMeta = {\n id: SCRIPT_PLUGIN,\n name: 'Scripts',\n description:\n 'Scripts in Composer allow you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API’s or external data inside of Composer.',\n icon: 'ph--code--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-explorer',\n tags: ['labs'],\n screenshots: ['https://dxos.network/plugin-details-scripts-dark.png'],\n};\n\n// TODO(ZaymonFC): Configure by scopes?\nexport const defaultScriptsForIntegration: Record<string, string[]> = {\n // TODO(wittjosiah): Also include content extraction scripts in the default set.\n 'gmail.com': ['dxos.org/script/gmail'],\n};\n"],
5
5
  "mappings": ";;;AAMO,IAAMA,gBAAgB;AAEtB,IAAMC,OAAmB;EAC9BC,IAAIF;EACJG,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;AAGO,IAAMC,+BAAyD;;EAEpE,aAAa;IAAC;;AAChB;",
6
6
  "names": ["SCRIPT_PLUGIN", "meta", "id", "name", "description", "icon", "source", "tags", "screenshots", "defaultScriptsForIntegration"]
7
7
  }
@@ -0,0 +1,531 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ SCRIPT_PLUGIN,
4
+ meta
5
+ } from "./chunk-AEB5TPEW.mjs";
6
+
7
+ // packages/plugins/plugin-script/src/components/Settings/ScriptObjectSettings.tsx
8
+ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
9
+ import { Octokit } from "@octokit/core";
10
+ import React, { useCallback, useEffect, useState } from "react";
11
+ import { createIntent, SettingsAction, useIntentDispatcher } from "@dxos/app-framework";
12
+ import { FunctionType, getInvocationUrl, getUserFunctionUrlInMetadata } from "@dxos/functions";
13
+ import { log } from "@dxos/log";
14
+ import { useClient } from "@dxos/react-client";
15
+ import { Filter, getMeta, getSpace, Ref, useQuery } from "@dxos/react-client/echo";
16
+ import { Button, Clipboard, Input, useControlledState, useTranslation } from "@dxos/react-ui";
17
+ import { DataType } from "@dxos/schema";
18
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/components/Settings/ScriptObjectSettings.tsx";
19
+ var ScriptObjectSettings = ({ object }) => {
20
+ var _effect = _useSignals();
21
+ try {
22
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Binding, {
23
+ object
24
+ }), /* @__PURE__ */ React.createElement(Publishing, {
25
+ object
26
+ }));
27
+ } finally {
28
+ _effect.f();
29
+ }
30
+ };
31
+ var ScriptProperties = ({ object }) => {
32
+ var _effect = _useSignals();
33
+ try {
34
+ const { t } = useTranslation(SCRIPT_PLUGIN);
35
+ return /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, null, t("description label")), /* @__PURE__ */ React.createElement(Input.TextInput, {
36
+ placeholder: t("description placeholder"),
37
+ value: object.description ?? "",
38
+ onChange: (event) => {
39
+ object.description = event.target.value;
40
+ }
41
+ }));
42
+ } finally {
43
+ _effect.f();
44
+ }
45
+ };
46
+ var Binding = ({ object }) => {
47
+ var _effect = _useSignals();
48
+ try {
49
+ const { t } = useTranslation(SCRIPT_PLUGIN);
50
+ const client = useClient();
51
+ const space = getSpace(object);
52
+ const [fn] = useQuery(space, Filter.type(FunctionType, {
53
+ source: Ref.make(object)
54
+ }));
55
+ const functionPath = fn && getUserFunctionUrlInMetadata(getMeta(fn));
56
+ const functionUrl = functionPath && getInvocationUrl(functionPath, client.config.values.runtime?.services?.edge?.url ?? "", {
57
+ spaceId: space?.id
58
+ });
59
+ const [binding, setBinding] = useControlledState(fn?.binding ?? "");
60
+ const handleBindingChange = useCallback((event) => {
61
+ setBinding(event.target.value);
62
+ }, [
63
+ setBinding
64
+ ]);
65
+ const handleBindingBlur = useCallback(() => {
66
+ fn.binding = binding;
67
+ }, [
68
+ fn,
69
+ binding
70
+ ]);
71
+ if (!fn || !functionUrl) {
72
+ return null;
73
+ }
74
+ return /* @__PURE__ */ React.createElement("div", {
75
+ role: "form",
76
+ className: "flex flex-col p-2 gap-2"
77
+ }, /* @__PURE__ */ React.createElement("h2", null, t("remote function settings heading")), /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement("div", {
78
+ role: "none",
79
+ className: "flex flex-col gap-1"
80
+ }, /* @__PURE__ */ React.createElement(Input.Label, null, t("function url label")), /* @__PURE__ */ React.createElement("div", {
81
+ role: "none",
82
+ className: "flex gap-1"
83
+ }, /* @__PURE__ */ React.createElement(Input.TextInput, {
84
+ disabled: true,
85
+ value: functionUrl,
86
+ onChange: (event) => {
87
+ fn.name = event.target.value;
88
+ }
89
+ }), /* @__PURE__ */ React.createElement(Clipboard.IconButton, {
90
+ value: functionUrl
91
+ })))), /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement("div", {
92
+ role: "none",
93
+ className: "flex flex-col gap-1"
94
+ }, /* @__PURE__ */ React.createElement(Input.Label, null, t("function binding label")), /* @__PURE__ */ React.createElement(Input.TextInput, {
95
+ placeholder: t("function binding placeholder"),
96
+ value: binding,
97
+ onChange: handleBindingChange,
98
+ onBlur: handleBindingBlur
99
+ }))));
100
+ } finally {
101
+ _effect.f();
102
+ }
103
+ };
104
+ var Publishing = ({ object }) => {
105
+ var _effect = _useSignals();
106
+ try {
107
+ const { t } = useTranslation(SCRIPT_PLUGIN);
108
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
109
+ const space = getSpace(object);
110
+ const [githubToken] = useQuery(space, Filter.type(DataType.AccessToken, {
111
+ source: "github.com"
112
+ }));
113
+ const gistKey = getMeta(object).keys.find(({ source }) => source === "github.com");
114
+ const [gistUrl, setGistUrl] = useState();
115
+ useEffect(() => {
116
+ const token = githubToken?.token;
117
+ const gistId = gistKey?.id;
118
+ if (!token || !gistId) {
119
+ setGistUrl(void 0);
120
+ return;
121
+ }
122
+ const timeout = setTimeout(async () => {
123
+ try {
124
+ const octokit = new Octokit({
125
+ auth: githubToken.token
126
+ });
127
+ const response = await octokit.request("GET /gists/{gist_id}", {
128
+ gist_id: gistId
129
+ });
130
+ setGistUrl(response.data.html_url);
131
+ } catch (err) {
132
+ log.catch(err, void 0, {
133
+ F: __dxlog_file,
134
+ L: 135,
135
+ S: void 0,
136
+ C: (f, a) => f(...a)
137
+ });
138
+ setGistUrl(void 0);
139
+ }
140
+ });
141
+ return () => clearTimeout(timeout);
142
+ }, [
143
+ githubToken,
144
+ gistKey
145
+ ]);
146
+ const handleOpenTokenManager = useCallback(() => dispatch(createIntent(SettingsAction.Open, {
147
+ plugin: "dxos.org/plugin/token-manager"
148
+ })), []);
149
+ const [publishing, setPublishing] = useState(false);
150
+ const handlePublish = useCallback(async () => {
151
+ setPublishing(true);
152
+ const octokit = new Octokit({
153
+ auth: githubToken.token
154
+ });
155
+ const source = await object.source.load();
156
+ const filename = object.name ? kebabize(object.name) : "composer-script";
157
+ const files = {
158
+ [`${filename}.ts`]: {
159
+ content: source.content
160
+ }
161
+ };
162
+ try {
163
+ const meta2 = getMeta(object);
164
+ const githubKey = meta2.keys.find(({ source: source2 }) => source2 === "github.com");
165
+ const gistId = githubKey?.id;
166
+ if (gistId) {
167
+ await octokit.request("PATCH /gists/{gist_id}", {
168
+ gist_id: gistId,
169
+ files
170
+ });
171
+ } else {
172
+ const response = await octokit.request("POST /gists", {
173
+ public: true,
174
+ files
175
+ });
176
+ if (response.data.id) {
177
+ meta2.keys.push({
178
+ source: "github.com",
179
+ id: response.data.id
180
+ });
181
+ }
182
+ }
183
+ } finally {
184
+ setPublishing(false);
185
+ }
186
+ }, [
187
+ object,
188
+ githubToken
189
+ ]);
190
+ return /* @__PURE__ */ React.createElement("div", {
191
+ className: "flex flex-col p-2 gap-4"
192
+ }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("h2", null, t("script publish settings label")), /* @__PURE__ */ React.createElement("p", {
193
+ className: "text-description text-sm"
194
+ }, t("script publish settings description"))), !githubToken && /* @__PURE__ */ React.createElement("div", {
195
+ className: "flex flex-col gap-2"
196
+ }, /* @__PURE__ */ React.createElement("span", null, t("no github token label")), /* @__PURE__ */ React.createElement(Button, {
197
+ onClick: handleOpenTokenManager
198
+ }, t("open token manager label"))), githubToken && /* @__PURE__ */ React.createElement("div", {
199
+ className: "flex justify-end gap-2"
200
+ }, gistUrl && /* @__PURE__ */ React.createElement(Clipboard.IconButton, {
201
+ value: gistUrl
202
+ }), /* @__PURE__ */ React.createElement(Button, {
203
+ disabled: publishing,
204
+ onClick: handlePublish
205
+ }, t(publishing ? "publishing label" : "publish label"))));
206
+ } finally {
207
+ _effect.f();
208
+ }
209
+ };
210
+ var kebabize = (str) => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? "-" : "") + $.toLowerCase());
211
+
212
+ // packages/plugins/plugin-script/src/components/Settings/ScriptPluginSettings.tsx
213
+ import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
214
+ import React2 from "react";
215
+ import { useClient as useClient2 } from "@dxos/react-client";
216
+ import { Button as Button2, Select, useTranslation as useTranslation2 } from "@dxos/react-ui";
217
+ import { EditorInputModes } from "@dxos/react-ui-editor";
218
+ import { DeprecatedFormContainer, DeprecatedFormInput } from "@dxos/react-ui-form";
219
+ var ScriptPluginSettings = ({ settings }) => {
220
+ var _effect = _useSignals2();
221
+ try {
222
+ const { t } = useTranslation2(meta.id);
223
+ const client = useClient2();
224
+ const handleAuthenticate = async () => {
225
+ const { identityKey } = client.halo.identity.get();
226
+ await client.halo.writeCredentials([
227
+ {
228
+ issuer: identityKey,
229
+ issuanceDate: /* @__PURE__ */ new Date(),
230
+ subject: {
231
+ id: identityKey,
232
+ assertion: {
233
+ "@type": "dxos.halo.credentials.ServiceAccess",
234
+ serverName: "hub.dxos.network",
235
+ serverKey: identityKey,
236
+ identityKey,
237
+ capabilities: [
238
+ "composer:beta"
239
+ ]
240
+ }
241
+ }
242
+ }
243
+ ]);
244
+ };
245
+ return /* @__PURE__ */ React2.createElement(DeprecatedFormContainer, null, /* @__PURE__ */ React2.createElement(DeprecatedFormInput, {
246
+ label: t("authenticate action label")
247
+ }, /* @__PURE__ */ React2.createElement(Button2, {
248
+ onClick: handleAuthenticate
249
+ }, t("authenticate button label"))), /* @__PURE__ */ React2.createElement(DeprecatedFormInput, {
250
+ label: t("editor input mode label")
251
+ }, /* @__PURE__ */ React2.createElement(Select.Root, {
252
+ value: settings.editorInputMode ?? "default",
253
+ onValueChange: (value) => {
254
+ settings.editorInputMode = value;
255
+ }
256
+ }, /* @__PURE__ */ React2.createElement(Select.TriggerButton, {
257
+ placeholder: t("select editor input mode placeholder")
258
+ }), /* @__PURE__ */ React2.createElement(Select.Portal, null, /* @__PURE__ */ React2.createElement(Select.Content, null, /* @__PURE__ */ React2.createElement(Select.Viewport, null, EditorInputModes.map((mode) => /* @__PURE__ */ React2.createElement(Select.Option, {
259
+ key: mode,
260
+ value: mode
261
+ }, t(`settings editor input mode ${mode} label`)))))))));
262
+ } finally {
263
+ _effect.f();
264
+ }
265
+ };
266
+
267
+ // packages/plugins/plugin-script/src/components/TestPanel/TestPanel.tsx
268
+ import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
269
+ import React3, { forwardRef, useEffect as useEffect2, useRef, useState as useState2 } from "react";
270
+ import { log as log2 } from "@dxos/log";
271
+ import { Avatar, Icon, Input as Input2, Toolbar, useTranslation as useTranslation3 } from "@dxos/react-ui";
272
+ import { SyntaxHighlighter } from "@dxos/react-ui-syntax-highlighter";
273
+ import { errorText, mx } from "@dxos/react-ui-theme";
274
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/components/TestPanel/TestPanel.tsx";
275
+ var TestPanel = ({ classNames, functionUrl }) => {
276
+ var _effect = _useSignals3();
277
+ try {
278
+ const { t } = useTranslation3(SCRIPT_PLUGIN);
279
+ const inputRef = useRef(null);
280
+ const [input, setInput] = useState2("");
281
+ const [result, setResult] = useState2("");
282
+ const [state, setState] = useState2(null);
283
+ const [history, setHistory] = useState2([]);
284
+ const scrollerRef = useRef(null);
285
+ const handleScroll = () => {
286
+ if (scrollerRef.current) {
287
+ scrollerRef.current.scrollTop = scrollerRef.current.scrollHeight;
288
+ }
289
+ };
290
+ const controller = useRef();
291
+ useEffect2(() => {
292
+ return () => {
293
+ handleStop();
294
+ };
295
+ }, []);
296
+ const handleStop = () => {
297
+ controller.current?.abort("stop");
298
+ controller.current = void 0;
299
+ };
300
+ const handleClear = () => {
301
+ handleStop();
302
+ setInput("");
303
+ setResult("");
304
+ setHistory([]);
305
+ inputRef.current?.focus();
306
+ };
307
+ const handleResponse = ({ text, data, error } = {}) => {
308
+ controller.current = void 0;
309
+ setHistory((history2) => [
310
+ ...history2,
311
+ {
312
+ type: "response",
313
+ text,
314
+ data,
315
+ error
316
+ }
317
+ ]);
318
+ setResult("");
319
+ setState(null);
320
+ handleScroll();
321
+ };
322
+ const handleRequest = async (input2) => {
323
+ try {
324
+ setState("pending");
325
+ let data = null;
326
+ if (input2.charAt(0) === "{") {
327
+ try {
328
+ const validJsonString = input2.replace(/'/g, '"').replace(/([{,]\s*)([a-zA-Z0-9_]+)(\s*:)/g, '$1"$2"$3');
329
+ data = JSON.parse(validJsonString);
330
+ input2 = JSON.stringify(data, null, 2);
331
+ } catch (err) {
332
+ inputRef.current?.focus();
333
+ return;
334
+ }
335
+ }
336
+ setInput("");
337
+ setResult("");
338
+ setHistory((history2) => [
339
+ ...history2,
340
+ {
341
+ type: "request",
342
+ text: input2
343
+ }
344
+ ]);
345
+ setTimeout(() => {
346
+ handleScroll();
347
+ });
348
+ controller.current = new AbortController();
349
+ const response = await fetch(functionUrl, {
350
+ signal: controller.current.signal,
351
+ method: "POST",
352
+ body: input2,
353
+ headers: {
354
+ "Content-Type": data ? "application/json" : "text/plain"
355
+ }
356
+ });
357
+ if (!response.ok) {
358
+ const text2 = await response.text();
359
+ handleResponse({
360
+ error: new Error(text2 || response.statusText || String(response.status))
361
+ });
362
+ return;
363
+ }
364
+ const contentType = response.headers.get("content-type");
365
+ if (contentType === "application/json") {
366
+ const data2 = await response.json();
367
+ handleResponse({
368
+ data: data2
369
+ });
370
+ return;
371
+ }
372
+ setState("responding");
373
+ let text = "";
374
+ const reader = response.body.getReader();
375
+ const pump = async ({ done, value }) => {
376
+ text = text + new TextDecoder().decode(value);
377
+ if (!controller.current || done) {
378
+ handleResponse({
379
+ text
380
+ });
381
+ return;
382
+ }
383
+ setResult(text);
384
+ setTimeout(() => {
385
+ handleScroll();
386
+ });
387
+ return reader.read().then(pump);
388
+ };
389
+ void reader.read().then(pump).catch((err) => {
390
+ if (err.name !== "AbortError") {
391
+ log2.catch(err, void 0, {
392
+ F: __dxlog_file2,
393
+ L: 147,
394
+ S: void 0,
395
+ C: (f, a) => f(...a)
396
+ });
397
+ }
398
+ });
399
+ } catch (err) {
400
+ if (err !== "stop") {
401
+ const error = err instanceof Error ? err : new Error(err);
402
+ handleResponse({
403
+ error
404
+ });
405
+ log2.catch(err, void 0, {
406
+ F: __dxlog_file2,
407
+ L: 154,
408
+ S: void 0,
409
+ C: (f, a) => f(...a)
410
+ });
411
+ } else {
412
+ handleResponse();
413
+ }
414
+ }
415
+ };
416
+ return /* @__PURE__ */ React3.createElement("div", {
417
+ className: mx("flex flex-col h-full overflow-hidden", classNames)
418
+ }, /* @__PURE__ */ React3.createElement(MessageThread, {
419
+ ref: scrollerRef,
420
+ state,
421
+ result,
422
+ history
423
+ }), /* @__PURE__ */ React3.createElement(Toolbar.Root, {
424
+ classNames: "p-2"
425
+ }, /* @__PURE__ */ React3.createElement(Input2.Root, null, /* @__PURE__ */ React3.createElement(Input2.TextInput, {
426
+ ref: inputRef,
427
+ autoFocus: true,
428
+ placeholder: t("function request placeholder"),
429
+ value: input,
430
+ onChange: (ev) => setInput(ev.target.value),
431
+ onKeyDown: (ev) => ev.key === "Enter" && handleRequest(input)
432
+ })), /* @__PURE__ */ React3.createElement(Toolbar.Button, {
433
+ onClick: () => handleRequest(input)
434
+ }, /* @__PURE__ */ React3.createElement(Icon, {
435
+ icon: "ph--play--regular",
436
+ size: 4
437
+ })), /* @__PURE__ */ React3.createElement(Toolbar.Button, {
438
+ onClick: () => state ? handleStop() : handleClear()
439
+ }, /* @__PURE__ */ React3.createElement(Icon, {
440
+ icon: state ? "ph--stop--regular" : "ph--trash--regular",
441
+ size: 4
442
+ }))));
443
+ } finally {
444
+ _effect.f();
445
+ }
446
+ };
447
+ var MessageThread = /* @__PURE__ */ forwardRef(({ state, history, result }, forwardedRef) => {
448
+ var _effect = _useSignals3();
449
+ try {
450
+ return /* @__PURE__ */ React3.createElement("div", {
451
+ ref: forwardedRef,
452
+ className: "flex flex-col gap-6 h-full p-2 overflow-x-hidden overflow-y-auto"
453
+ }, history.map((message, i) => /* @__PURE__ */ React3.createElement("div", {
454
+ key: i,
455
+ className: "grid grid-cols-[2rem_1fr_2rem]"
456
+ }, /* @__PURE__ */ React3.createElement("div", {
457
+ className: "p-1"
458
+ }, message.type === "response" && /* @__PURE__ */ React3.createElement(RobotAvatar, null)), /* @__PURE__ */ React3.createElement("div", {
459
+ className: "overflow-auto"
460
+ }, /* @__PURE__ */ React3.createElement(MessageItem, {
461
+ message
462
+ })))), result?.length > 0 && /* @__PURE__ */ React3.createElement("div", {
463
+ className: "grid grid-cols-[2rem_1fr_2rem]"
464
+ }, /* @__PURE__ */ React3.createElement("div", {
465
+ className: "p-1"
466
+ }, state === "pending" && /* @__PURE__ */ React3.createElement(Icon, {
467
+ icon: "ph--spinner--regular",
468
+ size: 6,
469
+ classNames: "animate-spin"
470
+ }) || /* @__PURE__ */ React3.createElement(Icon, {
471
+ icon: "ph--robot--regular",
472
+ size: 6,
473
+ classNames: "animate-[pulse_1s_ease-in-out_infinite]"
474
+ })), /* @__PURE__ */ React3.createElement("div", {
475
+ className: "overflow-auto"
476
+ }, /* @__PURE__ */ React3.createElement(MessageItem, {
477
+ message: {
478
+ type: "response",
479
+ text: result
480
+ }
481
+ }))));
482
+ } finally {
483
+ _effect.f();
484
+ }
485
+ });
486
+ var MessageItem = ({ classNames, message }) => {
487
+ var _effect = _useSignals3();
488
+ try {
489
+ const { type, text, data, error } = message;
490
+ const wrapper = "p-1 px-2 rounded-lg bg-hoverSurface overflow-auto";
491
+ return /* @__PURE__ */ React3.createElement("div", {
492
+ className: mx("flex", type === "request" ? "ml-[1rem] justify-end" : "mr-[1rem]", classNames)
493
+ }, error && /* @__PURE__ */ React3.createElement("div", {
494
+ className: mx(wrapper, "whitespace-pre", errorText)
495
+ }, String(error)), text !== void 0 && /* @__PURE__ */ React3.createElement("div", {
496
+ className: mx(wrapper, type === "request" && "bg-primary-400 dark:bg-primary-600")
497
+ }, text || "\xD8"), data && /* @__PURE__ */ React3.createElement(SyntaxHighlighter, {
498
+ language: "json",
499
+ className: mx(wrapper, "px-8 py-2 text-xs")
500
+ }, JSON.stringify(data, null, 2)));
501
+ } finally {
502
+ _effect.f();
503
+ }
504
+ };
505
+ var RobotAvatar = () => {
506
+ var _effect = _useSignals3();
507
+ try {
508
+ return /* @__PURE__ */ React3.createElement(Avatar.Root, null, /* @__PURE__ */ React3.createElement(Avatar.Content, {
509
+ size: 6,
510
+ variant: "circle",
511
+ icon: "ph--robot--regular"
512
+ }));
513
+ } finally {
514
+ _effect.f();
515
+ }
516
+ };
517
+
518
+ // packages/plugins/plugin-script/src/components/index.ts
519
+ import { lazy } from "react";
520
+ var ScriptContainer = lazy(() => import("./ScriptContainer-6RCZ43TI.mjs"));
521
+ var DeploymentDialog = lazy(() => import("./DeploymentDialog-QHB2BGNJ.mjs"));
522
+
523
+ export {
524
+ ScriptObjectSettings,
525
+ ScriptProperties,
526
+ ScriptPluginSettings,
527
+ TestPanel,
528
+ ScriptContainer,
529
+ DeploymentDialog
530
+ };
531
+ //# sourceMappingURL=chunk-KOO76P2Y.mjs.map