@dxos/plugin-automation 0.7.5-labs.5f04cf6 → 0.7.5-labs.e27f9b9

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 (242) hide show
  1. package/dist/lib/browser/AutomationPanel-WFJZAW4F.mjs +8 -0
  2. package/dist/lib/browser/AutomationPanel-WFJZAW4F.mjs.map +7 -0
  3. package/dist/lib/browser/ChatContainer-OFCOZ5T2.mjs +12 -0
  4. package/dist/lib/browser/ChatContainer-OFCOZ5T2.mjs.map +7 -0
  5. package/dist/lib/browser/{ai-client-6CRYUC6D.mjs → ai-client-AARXEMMJ.mjs} +2 -2
  6. package/dist/lib/browser/{ai-client-6CRYUC6D.mjs.map → ai-client-AARXEMMJ.mjs.map} +3 -3
  7. package/dist/lib/browser/{app-graph-builder-IJTTULDP.mjs → app-graph-builder-B4U34VSR.mjs} +32 -1
  8. package/dist/lib/browser/{app-graph-builder-IJTTULDP.mjs.map → app-graph-builder-B4U34VSR.mjs.map} +3 -3
  9. package/dist/lib/browser/chunk-5SLV6AUA.mjs +1367 -0
  10. package/dist/lib/browser/chunk-5SLV6AUA.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-7XADMUOW.mjs +205 -0
  12. package/dist/lib/browser/chunk-7XADMUOW.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-EKJVAFT2.mjs → chunk-IYSMXX6Q.mjs} +64 -7
  14. package/dist/lib/{node-esm/chunk-5QUXIXNB.mjs.map → browser/chunk-IYSMXX6Q.mjs.map} +4 -4
  15. package/dist/lib/browser/chunk-RAVNWHNE.mjs +242 -0
  16. package/dist/lib/browser/chunk-RAVNWHNE.mjs.map +7 -0
  17. package/dist/lib/browser/index.mjs +43 -38
  18. package/dist/lib/browser/index.mjs.map +3 -3
  19. package/dist/lib/browser/intent-resolver-754MPV7H.mjs +29 -0
  20. package/dist/lib/browser/intent-resolver-754MPV7H.mjs.map +7 -0
  21. package/dist/lib/browser/meta.json +1 -1
  22. package/dist/lib/browser/{react-surface-IGMBLSV7.mjs → react-surface-4QZ6AKBF.mjs} +22 -21
  23. package/dist/lib/browser/react-surface-4QZ6AKBF.mjs.map +7 -0
  24. package/dist/lib/browser/types/index.mjs +9 -3
  25. package/dist/lib/node/AutomationPanel-LRDEDGXI.cjs +26 -0
  26. package/dist/lib/node/AutomationPanel-LRDEDGXI.cjs.map +7 -0
  27. package/dist/lib/node/ChatContainer-6LZX4K2Z.cjs +33 -0
  28. package/dist/lib/node/ChatContainer-6LZX4K2Z.cjs.map +7 -0
  29. package/dist/lib/node/{ai-client-A3RRU55B.cjs → ai-client-SA35GN5Q.cjs} +5 -5
  30. package/dist/lib/node/{ai-client-A3RRU55B.cjs.map → ai-client-SA35GN5Q.cjs.map} +3 -3
  31. package/dist/lib/node/{app-graph-builder-MF5M4QRS.cjs → app-graph-builder-ENVDOPS4.cjs} +35 -4
  32. package/dist/lib/node/{app-graph-builder-MF5M4QRS.cjs.map → app-graph-builder-ENVDOPS4.cjs.map} +3 -3
  33. package/dist/lib/node/chunk-6VMSH4P6.cjs +1364 -0
  34. package/dist/lib/node/chunk-6VMSH4P6.cjs.map +7 -0
  35. package/dist/lib/node/{chunk-VEGLN4YN.cjs → chunk-HEYQONXC.cjs} +76 -24
  36. package/dist/lib/node/chunk-HEYQONXC.cjs.map +7 -0
  37. package/dist/lib/node/chunk-LU4HQWJD.cjs +226 -0
  38. package/dist/lib/node/chunk-LU4HQWJD.cjs.map +7 -0
  39. package/dist/lib/node/{AutomationPanel-RXJDVLCF.cjs → chunk-WWU5FVAO.cjs} +120 -7
  40. package/dist/lib/node/chunk-WWU5FVAO.cjs.map +7 -0
  41. package/dist/lib/node/index.cjs +72 -66
  42. package/dist/lib/node/index.cjs.map +3 -3
  43. package/dist/lib/node/{intent-resolver-TBHYXBDI.cjs → intent-resolver-CNVBSG4E.cjs} +19 -14
  44. package/dist/lib/node/intent-resolver-CNVBSG4E.cjs.map +7 -0
  45. package/dist/lib/node/meta.json +1 -1
  46. package/dist/lib/node/{react-surface-BVUZMKYS.cjs → react-surface-5HYLBDC3.cjs} +23 -22
  47. package/dist/lib/node/react-surface-5HYLBDC3.cjs.map +7 -0
  48. package/dist/lib/node/types/index.cjs +14 -8
  49. package/dist/lib/node/types/index.cjs.map +2 -2
  50. package/dist/lib/node-esm/AutomationPanel-ZV7VEEPP.mjs +9 -0
  51. package/dist/lib/node-esm/AutomationPanel-ZV7VEEPP.mjs.map +7 -0
  52. package/dist/lib/node-esm/ChatContainer-PPVMC2FC.mjs +13 -0
  53. package/dist/lib/node-esm/ChatContainer-PPVMC2FC.mjs.map +7 -0
  54. package/dist/lib/node-esm/{ai-client-2GBZRHBA.mjs → ai-client-2ZA4TYFZ.mjs} +2 -2
  55. package/dist/lib/node-esm/{ai-client-2GBZRHBA.mjs.map → ai-client-2ZA4TYFZ.mjs.map} +3 -3
  56. package/dist/lib/node-esm/{app-graph-builder-5N7OK23B.mjs → app-graph-builder-IYOUCQZT.mjs} +32 -1
  57. package/dist/lib/node-esm/{app-graph-builder-5N7OK23B.mjs.map → app-graph-builder-IYOUCQZT.mjs.map} +3 -3
  58. package/dist/lib/node-esm/{chunk-5QUXIXNB.mjs → chunk-3KB5HRXA.mjs} +64 -7
  59. package/dist/lib/{browser/chunk-EKJVAFT2.mjs.map → node-esm/chunk-3KB5HRXA.mjs.map} +4 -4
  60. package/dist/lib/node-esm/chunk-EVTLHDM2.mjs +206 -0
  61. package/dist/lib/node-esm/chunk-EVTLHDM2.mjs.map +7 -0
  62. package/dist/lib/node-esm/chunk-MS7OIGVR.mjs +243 -0
  63. package/dist/lib/node-esm/chunk-MS7OIGVR.mjs.map +7 -0
  64. package/dist/lib/node-esm/chunk-WISKXX7U.mjs +1368 -0
  65. package/dist/lib/node-esm/chunk-WISKXX7U.mjs.map +7 -0
  66. package/dist/lib/node-esm/index.mjs +43 -38
  67. package/dist/lib/node-esm/index.mjs.map +3 -3
  68. package/dist/lib/node-esm/{intent-resolver-DPJJHFGK.mjs → intent-resolver-RQBXW442.mjs} +18 -13
  69. package/dist/lib/node-esm/intent-resolver-RQBXW442.mjs.map +7 -0
  70. package/dist/lib/node-esm/meta.json +1 -1
  71. package/dist/lib/node-esm/{react-surface-77S6XJOM.mjs → react-surface-SS5WCRJ2.mjs} +22 -21
  72. package/dist/lib/node-esm/react-surface-SS5WCRJ2.mjs.map +7 -0
  73. package/dist/lib/node-esm/types/index.mjs +9 -3
  74. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  75. package/dist/types/src/artifacts.stories.d.ts +10 -24
  76. package/dist/types/src/artifacts.stories.d.ts.map +1 -1
  77. package/dist/types/src/capabilities/app-graph-builder.d.ts +22 -22
  78. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/index.d.ts +27 -27
  80. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  82. package/dist/types/src/components/{ChatContainer.d.ts → ChatContainer/ChatContainer.d.ts} +2 -2
  83. package/dist/types/src/components/ChatContainer/ChatContainer.d.ts.map +1 -0
  84. package/dist/types/src/components/ChatContainer/index.d.ts +4 -0
  85. package/dist/types/src/components/ChatContainer/index.d.ts.map +1 -0
  86. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.d.ts +14 -0
  87. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.d.ts.map +1 -0
  88. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.stories.d.ts +8 -0
  89. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.stories.d.ts.map +1 -0
  90. package/dist/types/src/components/MarkdownViewer/index.d.ts +2 -0
  91. package/dist/types/src/components/MarkdownViewer/index.d.ts.map +1 -0
  92. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts +6 -0
  93. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts.map +1 -0
  94. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts +8 -0
  95. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts.map +1 -0
  96. package/dist/types/src/components/ServiceRegistry/index.d.ts +2 -0
  97. package/dist/types/src/components/ServiceRegistry/index.d.ts.map +1 -0
  98. package/dist/types/src/components/Thread/ScrollContainer.d.ts +15 -0
  99. package/dist/types/src/components/Thread/ScrollContainer.d.ts.map +1 -0
  100. package/dist/types/src/components/Thread/StatusLine.d.ts +11 -0
  101. package/dist/types/src/components/Thread/StatusLine.d.ts.map +1 -0
  102. package/dist/types/src/components/Thread/StatusLine.stories.d.ts +9 -0
  103. package/dist/types/src/components/Thread/StatusLine.stories.d.ts.map +1 -0
  104. package/dist/types/src/components/Thread/Tabbed.d.ts +9 -0
  105. package/dist/types/src/components/Thread/Tabbed.d.ts.map +1 -0
  106. package/dist/types/src/components/Thread/Tabbed.stories.d.ts +8 -0
  107. package/dist/types/src/components/Thread/Tabbed.stories.d.ts.map +1 -0
  108. package/dist/types/src/components/Thread/Thread.d.ts +6 -9
  109. package/dist/types/src/components/Thread/Thread.d.ts.map +1 -1
  110. package/dist/types/src/components/Thread/Thread.stories.d.ts +2 -4
  111. package/dist/types/src/components/Thread/Thread.stories.d.ts.map +1 -1
  112. package/dist/types/src/components/Thread/ThreadMessage.d.ts +12 -0
  113. package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +1 -0
  114. package/dist/types/src/components/Thread/ToggleContainer.d.ts +13 -0
  115. package/dist/types/src/components/Thread/ToggleContainer.d.ts.map +1 -0
  116. package/dist/types/src/components/Thread/ToggleContainer.stories.d.ts +9 -0
  117. package/dist/types/src/components/Thread/ToggleContainer.stories.d.ts.map +1 -0
  118. package/dist/types/src/components/index.d.ts +5 -2
  119. package/dist/types/src/components/index.d.ts.map +1 -1
  120. package/dist/types/src/hooks/index.d.ts +1 -0
  121. package/dist/types/src/hooks/index.d.ts.map +1 -1
  122. package/dist/types/src/hooks/processor.d.ts +32 -13
  123. package/dist/types/src/hooks/processor.d.ts.map +1 -1
  124. package/dist/types/src/hooks/useServiceRegistry.d.ts +3 -0
  125. package/dist/types/src/hooks/useServiceRegistry.d.ts.map +1 -0
  126. package/dist/types/src/tools/function.d.ts +5 -0
  127. package/dist/types/src/tools/function.d.ts.map +1 -0
  128. package/dist/types/src/tools/index.d.ts +3 -0
  129. package/dist/types/src/tools/index.d.ts.map +1 -0
  130. package/dist/types/src/tools/openapi.d.ts +10 -0
  131. package/dist/types/src/tools/openapi.d.ts.map +1 -0
  132. package/dist/types/src/tools/openapi.test.d.ts +2 -0
  133. package/dist/types/src/tools/openapi.test.d.ts.map +1 -0
  134. package/dist/types/src/translations.d.ts +9 -6
  135. package/dist/types/src/translations.d.ts.map +1 -1
  136. package/dist/types/src/types/index.d.ts +1 -0
  137. package/dist/types/src/types/index.d.ts.map +1 -1
  138. package/dist/types/src/types/registry.d.ts +9 -0
  139. package/dist/types/src/types/registry.d.ts.map +1 -0
  140. package/dist/types/src/types/schema.d.ts +131 -7
  141. package/dist/types/src/types/schema.d.ts.map +1 -1
  142. package/dist/types/src/types/types.d.ts +2 -2
  143. package/dist/types/src/types/types.d.ts.map +1 -1
  144. package/dist/types/tsconfig.tsbuildinfo +1 -1
  145. package/package.json +54 -49
  146. package/src/AutomationPlugin.tsx +12 -20
  147. package/src/artifacts.stories.tsx +126 -65
  148. package/src/capabilities/ai-client.ts +1 -1
  149. package/src/capabilities/app-graph-builder.ts +31 -2
  150. package/src/capabilities/intent-resolver.ts +14 -9
  151. package/src/capabilities/react-surface.tsx +11 -11
  152. package/src/components/ChatContainer/ChatContainer.tsx +117 -0
  153. package/src/components/ChatContainer/index.ts +8 -0
  154. package/src/components/MarkdownViewer/MarkdownViewer.stories.tsx +56 -0
  155. package/src/components/MarkdownViewer/MarkdownViewer.tsx +79 -0
  156. package/src/components/MarkdownViewer/index.ts +5 -0
  157. package/src/components/ServiceRegistry/ServiceRegistry.stories.tsx +48 -0
  158. package/src/components/ServiceRegistry/ServiceRegistry.tsx +75 -0
  159. package/src/components/ServiceRegistry/index.ts +5 -0
  160. package/src/components/Thread/ScrollContainer.tsx +92 -0
  161. package/src/components/Thread/StatusLine.stories.tsx +52 -0
  162. package/src/components/Thread/StatusLine.tsx +76 -0
  163. package/src/components/Thread/Tabbed.stories.tsx +52 -0
  164. package/src/components/Thread/Tabbed.tsx +72 -0
  165. package/src/components/Thread/Thread.stories.tsx +145 -97
  166. package/src/components/Thread/Thread.tsx +115 -108
  167. package/src/components/Thread/ThreadMessage.tsx +195 -0
  168. package/src/components/Thread/ToggleContainer.stories.tsx +111 -0
  169. package/src/components/Thread/ToggleContainer.tsx +103 -0
  170. package/src/components/index.ts +4 -1
  171. package/src/hooks/index.ts +2 -0
  172. package/src/hooks/processor.ts +100 -60
  173. package/src/hooks/useServiceRegistry.ts +22 -0
  174. package/src/tools/function.ts +47 -0
  175. package/src/tools/index.ts +6 -0
  176. package/src/tools/openapi.test.ts +227 -0
  177. package/src/tools/openapi.ts +331 -0
  178. package/src/translations.ts +8 -6
  179. package/src/types/index.ts +1 -0
  180. package/src/types/registry.ts +89 -0
  181. package/src/types/schema.ts +78 -3
  182. package/src/types/types.ts +2 -2
  183. package/dist/lib/browser/AssistantPanel-KO6DZBTU.mjs +0 -340
  184. package/dist/lib/browser/AssistantPanel-KO6DZBTU.mjs.map +0 -7
  185. package/dist/lib/browser/AutomationPanel-BMLM533Z.mjs +0 -131
  186. package/dist/lib/browser/AutomationPanel-BMLM533Z.mjs.map +0 -7
  187. package/dist/lib/browser/ChatContainer-SIAJFRFF.mjs +0 -300
  188. package/dist/lib/browser/ChatContainer-SIAJFRFF.mjs.map +0 -7
  189. package/dist/lib/browser/chunk-C3VRGDR6.mjs +0 -75
  190. package/dist/lib/browser/chunk-C3VRGDR6.mjs.map +0 -7
  191. package/dist/lib/browser/chunk-JSNPW6JF.mjs +0 -14
  192. package/dist/lib/browser/chunk-JSNPW6JF.mjs.map +0 -7
  193. package/dist/lib/browser/chunk-KPSDH6XZ.mjs +0 -118
  194. package/dist/lib/browser/chunk-KPSDH6XZ.mjs.map +0 -7
  195. package/dist/lib/browser/chunk-YZF3SDZL.mjs +0 -139
  196. package/dist/lib/browser/chunk-YZF3SDZL.mjs.map +0 -7
  197. package/dist/lib/browser/intent-resolver-AHDQ3KQP.mjs +0 -24
  198. package/dist/lib/browser/intent-resolver-AHDQ3KQP.mjs.map +0 -7
  199. package/dist/lib/browser/react-surface-IGMBLSV7.mjs.map +0 -7
  200. package/dist/lib/node/AssistantPanel-PPFS2HKK.cjs +0 -360
  201. package/dist/lib/node/AssistantPanel-PPFS2HKK.cjs.map +0 -7
  202. package/dist/lib/node/AutomationPanel-RXJDVLCF.cjs.map +0 -7
  203. package/dist/lib/node/ChatContainer-GS2SC5OG.cjs +0 -318
  204. package/dist/lib/node/ChatContainer-GS2SC5OG.cjs.map +0 -7
  205. package/dist/lib/node/chunk-BUQOZA4N.cjs +0 -97
  206. package/dist/lib/node/chunk-BUQOZA4N.cjs.map +0 -7
  207. package/dist/lib/node/chunk-DNLBVFR7.cjs +0 -147
  208. package/dist/lib/node/chunk-DNLBVFR7.cjs.map +0 -7
  209. package/dist/lib/node/chunk-TWDGP26W.cjs +0 -172
  210. package/dist/lib/node/chunk-TWDGP26W.cjs.map +0 -7
  211. package/dist/lib/node/chunk-VEGLN4YN.cjs.map +0 -7
  212. package/dist/lib/node/chunk-Z2YFE5SJ.cjs +0 -49
  213. package/dist/lib/node/chunk-Z2YFE5SJ.cjs.map +0 -7
  214. package/dist/lib/node/intent-resolver-TBHYXBDI.cjs.map +0 -7
  215. package/dist/lib/node/react-surface-BVUZMKYS.cjs.map +0 -7
  216. package/dist/lib/node-esm/AssistantPanel-XSSKKCJY.mjs +0 -341
  217. package/dist/lib/node-esm/AssistantPanel-XSSKKCJY.mjs.map +0 -7
  218. package/dist/lib/node-esm/AutomationPanel-GQZZ4UBI.mjs +0 -132
  219. package/dist/lib/node-esm/AutomationPanel-GQZZ4UBI.mjs.map +0 -7
  220. package/dist/lib/node-esm/ChatContainer-57ILGC3R.mjs +0 -301
  221. package/dist/lib/node-esm/ChatContainer-57ILGC3R.mjs.map +0 -7
  222. package/dist/lib/node-esm/chunk-ICHNUP5M.mjs +0 -119
  223. package/dist/lib/node-esm/chunk-ICHNUP5M.mjs.map +0 -7
  224. package/dist/lib/node-esm/chunk-JCYVS5GG.mjs +0 -76
  225. package/dist/lib/node-esm/chunk-JCYVS5GG.mjs.map +0 -7
  226. package/dist/lib/node-esm/chunk-L2B6VGMG.mjs +0 -16
  227. package/dist/lib/node-esm/chunk-L2B6VGMG.mjs.map +0 -7
  228. package/dist/lib/node-esm/chunk-U7HXYMPZ.mjs +0 -141
  229. package/dist/lib/node-esm/chunk-U7HXYMPZ.mjs.map +0 -7
  230. package/dist/lib/node-esm/intent-resolver-DPJJHFGK.mjs.map +0 -7
  231. package/dist/lib/node-esm/react-surface-77S6XJOM.mjs.map +0 -7
  232. package/dist/types/src/components/AssistantPanel/AssistantPanel.d.ts +0 -8
  233. package/dist/types/src/components/AssistantPanel/AssistantPanel.d.ts.map +0 -1
  234. package/dist/types/src/components/AssistantPanel/index.d.ts +0 -3
  235. package/dist/types/src/components/AssistantPanel/index.d.ts.map +0 -1
  236. package/dist/types/src/components/AssistantPanel/system-instructions.d.ts +0 -6
  237. package/dist/types/src/components/AssistantPanel/system-instructions.d.ts.map +0 -1
  238. package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
  239. package/src/components/AssistantPanel/AssistantPanel.tsx +0 -232
  240. package/src/components/AssistantPanel/index.ts +0 -7
  241. package/src/components/AssistantPanel/system-instructions.ts +0 -166
  242. package/src/components/ChatContainer.tsx +0 -80
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/components/PromptEditor/PromptEditor.tsx", "../../../src/components/PromptEditor/prompt-extension.ts", "../../../src/components/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Schema as S } from '@effect/schema';\nimport React, { useEffect } from 'react';\n\nimport { createDocAccessor } from '@dxos/react-client/echo';\nimport { Input, Select, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport {\n createBasicExtensions,\n createDataExtensions,\n createThemeExtensions,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { attentionSurface, groupBorder, mx } from '@dxos/react-ui-theme';\nimport { nonNullable } from '@dxos/util';\n\nimport { nameRegex, promptExtension } from './prompt-extension';\nimport { AUTOMATION_PLUGIN } from '../../meta';\nimport { type ChainInput, ChainInputType, type ChainPromptType } from '../../types';\n\nconst inputTypes = [\n {\n value: ChainInputType.VALUE,\n label: 'Value',\n },\n {\n value: ChainInputType.PASS_THROUGH,\n label: 'Pass through',\n },\n {\n value: ChainInputType.RETRIEVER,\n label: 'Retriever',\n },\n // {\n // value: ChainInputType.FUNCTION,\n // label: 'Function',\n // },\n // {\n // value: ChainInputType.QUERY,\n // label: 'Query',\n // },\n {\n value: ChainInputType.RESOLVER,\n label: 'Resolver',\n },\n {\n value: ChainInputType.CONTEXT,\n label: 'Context',\n },\n {\n value: ChainInputType.SCHEMA,\n label: 'Schema',\n },\n];\n\nconst getInputType = (type: string) => inputTypes.find(({ value }) => String(value) === type)?.value;\n\nconst usePromptInputs = (prompt: ChainPromptType) => {\n useEffect(() => {\n const text = prompt.template ?? '';\n if (!prompt.inputs) {\n prompt.inputs = []; // TODO(burdon): Required?\n }\n\n const regex = new RegExp(nameRegex, 'g');\n const variables = new Set<string>([...text.matchAll(regex)].map((m) => m[1]));\n\n // Create map of unclaimed inputs.\n const unclaimed = new Map<string, ChainInput>(\n prompt.inputs?.filter(nonNullable).map((input) => [input.name, input]),\n );\n const missing: string[] = [];\n Array.from(variables.values()).forEach((name) => {\n if (unclaimed.has(name)) {\n unclaimed.delete(name);\n } else {\n missing.push(name);\n }\n });\n\n // Match or create new inputs.\n const values = unclaimed.values();\n missing.forEach((name) => {\n const next = values.next().value;\n if (next) {\n next.name = name;\n } else {\n prompt.inputs?.push({ name });\n }\n });\n\n // Remove unclaimed (deleted) inputs.\n // TODO(burdon): If user types incorrect name value, it will be deleted. Garbage collect?\n for (const input of values) {\n prompt.inputs.splice(prompt.inputs.indexOf(input), 1);\n }\n }, [prompt.template]);\n};\n\nexport type PromptEditorProps = {\n prompt: ChainPromptType;\n commandEditable?: boolean;\n schema?: S.Schema<any, any, any>;\n};\n\nexport const PromptEditor = ({ prompt, commandEditable = true }: PromptEditorProps) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n const { themeMode } = useThemeContext();\n\n const { parentRef } = useTextEditor(\n () => ({\n initialValue: prompt.template,\n extensions: [\n createDataExtensions({\n id: prompt.id,\n text: prompt.template !== undefined ? createDocAccessor(prompt, ['template']) : undefined,\n }),\n createBasicExtensions({\n bracketMatching: false,\n lineWrapping: true,\n placeholder: t('template placeholder'),\n }),\n createThemeExtensions({\n themeMode,\n slots: {\n content: { className: '!p-3' },\n },\n }),\n promptExtension,\n ],\n }),\n [themeMode, prompt],\n );\n\n usePromptInputs(prompt);\n\n return (\n <div className={mx('flex flex-col w-full overflow-hidden gap-4', groupBorder)}>\n {commandEditable && (\n <div className='flex items-center pl-4'>\n <span className='text-neutral-500'>/</span>\n <Input.Root>\n <Input.TextInput\n placeholder={t('command placeholder')}\n classNames={mx('is-full bg-transparent m-2')}\n value={prompt.command ?? ''}\n onChange={(event) => {\n prompt.command = event.target.value.replace(/\\w/g, '');\n }}\n />\n </Input.Root>\n </div>\n )}\n\n <div ref={parentRef} className={mx(attentionSurface, 'rounded', 'min-h-[120px]')} />\n\n {(prompt.inputs?.length ?? 0) > 0 && (\n <div className='flex flex-col'>\n {/* TODO(zan): Improve layout with grid */}\n <table className='w-full table-fixed border-collapse my-2'>\n <tbody>\n {prompt.inputs?.filter(nonNullable).map((input) => (\n <tr key={input.name}>\n <td className='w-[160px] p-1 font-mono text-sm whitespace-nowrap truncate'>\n <code className='px-2'>{input.name}</code>\n </td>\n <td className='w-[120px] p-1'>\n <Input.Root>\n <Select.Root\n value={String(input.type)}\n onValueChange={(type) => {\n input.type = getInputType(type) ?? ChainInputType.VALUE;\n }}\n >\n <Select.TriggerButton placeholder='Type' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {inputTypes.map(({ value, label }) => (\n <Select.Option key={value} value={String(value)}>\n {label}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n </td>\n <td className='p-1 pr-2'>\n {input.type !== undefined &&\n [\n ChainInputType.VALUE,\n ChainInputType.CONTEXT,\n ChainInputType.RESOLVER,\n ChainInputType.SCHEMA,\n ].includes(input.type) && (\n <div>\n <Input.Root>\n <Input.TextInput\n placeholder={t('command placeholder')}\n classNames={mx('is-full bg-transparent')}\n value={input.value ?? ''}\n onChange={(event) => {\n input.value = event.target.value;\n }}\n />\n </Input.Root>\n </div>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { HighlightStyle, StreamLanguage, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\n\nimport { tags } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport const nameRegex = /\\{([\\w-]+)}/;\n\nconst parser = StreamLanguage.define({\n token: (stream) => {\n if (stream.eatSpace()) {\n return null;\n }\n if (stream.match(/^#.*/)) {\n return 'lineComment';\n }\n if (stream.match(/^-+$/)) {\n return 'lineComment';\n }\n if (stream.match(nameRegex)) {\n return 'variableName';\n }\n stream.next();\n return null;\n },\n});\n\n/**\n * https://codemirror.net/examples/styling\n * https://lezer.codemirror.net/docs/ref/#highlight\n */\nconst highlightStyles = HighlightStyle.define([\n {\n tag: tags.variableName,\n class: mx('rounded border border-yellow-500 bg-yellow-100 text-black font-mono text-sm'),\n },\n]);\n\nexport const promptExtension: Extension = [parser, syntaxHighlighting(highlightStyles)];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './PromptEditor';\nexport * from './Thread';\nexport * from './TriggerEditor';\n\nexport const AssistantPanel = lazy(() => import('./AssistantPanel'));\nexport const AutomationPanel = lazy(() => import('./AutomationPanel'));\nexport const ChatContainer = lazy(() => import('./ChatContainer'));\n"],
5
- "mappings": "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",
6
- "names": ["React", "useEffect", "createDocAccessor", "Input", "Select", "useThemeContext", "useTranslation", "createBasicExtensions", "createDataExtensions", "createThemeExtensions", "useTextEditor", "attentionSurface", "groupBorder", "mx", "nonNullable", "HighlightStyle", "StreamLanguage", "syntaxHighlighting", "tags", "mx", "nameRegex", "parser", "StreamLanguage", "define", "token", "stream", "eatSpace", "match", "next", "highlightStyles", "HighlightStyle", "tag", "tags", "variableName", "class", "mx", "promptExtension", "syntaxHighlighting", "inputTypes", "value", "ChainInputType", "VALUE", "label", "PASS_THROUGH", "RETRIEVER", "RESOLVER", "CONTEXT", "SCHEMA", "getInputType", "type", "find", "String", "usePromptInputs", "prompt", "useEffect", "text", "template", "inputs", "regex", "RegExp", "nameRegex", "variables", "Set", "matchAll", "map", "m", "unclaimed", "Map", "filter", "nonNullable", "input", "name", "missing", "Array", "from", "values", "forEach", "has", "delete", "push", "next", "splice", "indexOf", "PromptEditor", "commandEditable", "t", "useTranslation", "AUTOMATION_PLUGIN", "themeMode", "useThemeContext", "parentRef", "useTextEditor", "initialValue", "extensions", "createDataExtensions", "id", "undefined", "createDocAccessor", "createBasicExtensions", "bracketMatching", "lineWrapping", "placeholder", "createThemeExtensions", "slots", "content", "className", "promptExtension", "div", "mx", "groupBorder", "span", "Input", "Root", "TextInput", "classNames", "command", "onChange", "event", "target", "replace", "ref", "attentionSurface", "length", "table", "tbody", "tr", "key", "td", "code", "Select", "onValueChange", "TriggerButton", "Portal", "Content", "Viewport", "Option", "includes", "lazy", "AssistantPanel", "lazy", "AutomationPanel", "ChatContainer"]
3
+ "sources": ["../../../src/components/PromptEditor/PromptEditor.tsx", "../../../src/components/PromptEditor/prompt-extension.ts", "../../../src/components/ServiceRegistry/ServiceRegistry.tsx", "../../../src/components/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Schema as S } from '@effect/schema';\nimport React, { useEffect } from 'react';\n\nimport { createDocAccessor } from '@dxos/react-client/echo';\nimport { Input, Select, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport {\n createBasicExtensions,\n createDataExtensions,\n createThemeExtensions,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { attentionSurface, groupBorder, mx } from '@dxos/react-ui-theme';\nimport { nonNullable } from '@dxos/util';\n\nimport { nameRegex, promptExtension } from './prompt-extension';\nimport { AUTOMATION_PLUGIN } from '../../meta';\nimport { type ChainInput, ChainInputType, type ChainPromptType } from '../../types';\n\nconst inputTypes = [\n {\n value: ChainInputType.VALUE,\n label: 'Value',\n },\n {\n value: ChainInputType.PASS_THROUGH,\n label: 'Pass through',\n },\n {\n value: ChainInputType.RETRIEVER,\n label: 'Retriever',\n },\n // {\n // value: ChainInputType.FUNCTION,\n // label: 'Function',\n // },\n // {\n // value: ChainInputType.QUERY,\n // label: 'Query',\n // },\n {\n value: ChainInputType.RESOLVER,\n label: 'Resolver',\n },\n {\n value: ChainInputType.CONTEXT,\n label: 'Context',\n },\n {\n value: ChainInputType.SCHEMA,\n label: 'Schema',\n },\n];\n\nconst getInputType = (type: string) => inputTypes.find(({ value }) => String(value) === type)?.value;\n\nconst usePromptInputs = (prompt: ChainPromptType) => {\n useEffect(() => {\n const text = prompt.template ?? '';\n if (!prompt.inputs) {\n prompt.inputs = []; // TODO(burdon): Required?\n }\n\n const regex = new RegExp(nameRegex, 'g');\n const variables = new Set<string>([...text.matchAll(regex)].map((m) => m[1]));\n\n // Create map of unclaimed inputs.\n const unclaimed = new Map<string, ChainInput>(\n prompt.inputs?.filter(nonNullable).map((input) => [input.name, input]),\n );\n const missing: string[] = [];\n Array.from(variables.values()).forEach((name) => {\n if (unclaimed.has(name)) {\n unclaimed.delete(name);\n } else {\n missing.push(name);\n }\n });\n\n // Match or create new inputs.\n const values = unclaimed.values();\n missing.forEach((name) => {\n const next = values.next().value;\n if (next) {\n next.name = name;\n } else {\n prompt.inputs?.push({ name });\n }\n });\n\n // Remove unclaimed (deleted) inputs.\n // TODO(burdon): If user types incorrect name value, it will be deleted. Garbage collect?\n for (const input of values) {\n prompt.inputs.splice(prompt.inputs.indexOf(input), 1);\n }\n }, [prompt.template]);\n};\n\nexport type PromptEditorProps = {\n prompt: ChainPromptType;\n commandEditable?: boolean;\n schema?: S.Schema<any, any, any>;\n};\n\nexport const PromptEditor = ({ prompt, commandEditable = true }: PromptEditorProps) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n const { themeMode } = useThemeContext();\n\n const { parentRef } = useTextEditor(\n () => ({\n initialValue: prompt.template,\n extensions: [\n createDataExtensions({\n id: prompt.id,\n text: prompt.template !== undefined ? createDocAccessor(prompt, ['template']) : undefined,\n }),\n createBasicExtensions({\n bracketMatching: false,\n lineWrapping: true,\n placeholder: t('template placeholder'),\n }),\n createThemeExtensions({\n themeMode,\n slots: {\n content: { className: '!p-3' },\n },\n }),\n promptExtension,\n ],\n }),\n [themeMode, prompt],\n );\n\n usePromptInputs(prompt);\n\n return (\n <div className={mx('flex flex-col w-full overflow-hidden gap-4', groupBorder)}>\n {commandEditable && (\n <div className='flex items-center pl-4'>\n <span className='text-neutral-500'>/</span>\n <Input.Root>\n <Input.TextInput\n placeholder={t('command placeholder')}\n classNames={mx('is-full bg-transparent m-2')}\n value={prompt.command ?? ''}\n onChange={(event) => {\n prompt.command = event.target.value.replace(/\\w/g, '');\n }}\n />\n </Input.Root>\n </div>\n )}\n\n <div ref={parentRef} className={mx(attentionSurface, 'rounded', 'min-h-[120px]')} />\n\n {(prompt.inputs?.length ?? 0) > 0 && (\n <div className='flex flex-col'>\n {/* TODO(zan): Improve layout with grid */}\n <table className='w-full table-fixed border-collapse my-2'>\n <tbody>\n {prompt.inputs?.filter(nonNullable).map((input) => (\n <tr key={input.name}>\n <td className='w-[160px] p-1 font-mono text-sm whitespace-nowrap truncate'>\n <code className='px-2'>{input.name}</code>\n </td>\n <td className='w-[120px] p-1'>\n <Input.Root>\n <Select.Root\n value={String(input.type)}\n onValueChange={(type) => {\n input.type = getInputType(type) ?? ChainInputType.VALUE;\n }}\n >\n <Select.TriggerButton placeholder='Type' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {inputTypes.map(({ value, label }) => (\n <Select.Option key={value} value={String(value)}>\n {label}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n </td>\n <td className='p-1 pr-2'>\n {input.type !== undefined &&\n [\n ChainInputType.VALUE,\n ChainInputType.CONTEXT,\n ChainInputType.RESOLVER,\n ChainInputType.SCHEMA,\n ].includes(input.type) && (\n <div>\n <Input.Root>\n <Input.TextInput\n placeholder={t('command placeholder')}\n classNames={mx('is-full bg-transparent')}\n value={input.value ?? ''}\n onChange={(event) => {\n input.value = event.target.value;\n }}\n />\n </Input.Root>\n </div>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { HighlightStyle, StreamLanguage, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\n\nimport { tags } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport const nameRegex = /\\{([\\w-]+)}/;\n\nconst parser = StreamLanguage.define({\n token: (stream) => {\n if (stream.eatSpace()) {\n return null;\n }\n if (stream.match(/^#.*/)) {\n return 'lineComment';\n }\n if (stream.match(/^-+$/)) {\n return 'lineComment';\n }\n if (stream.match(nameRegex)) {\n return 'variableName';\n }\n stream.next();\n return null;\n },\n});\n\n/**\n * https://codemirror.net/examples/styling\n * https://lezer.codemirror.net/docs/ref/#highlight\n */\nconst highlightStyles = HighlightStyle.define([\n {\n tag: tags.variableName,\n class: mx('rounded border border-yellow-500 bg-yellow-100 text-black font-mono text-sm'),\n },\n]);\n\nexport const promptExtension: Extension = [parser, syntaxHighlighting(highlightStyles)];\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Filter, type Space } from '@dxos/client/echo';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { Icon, Input, List, ListItem } from '@dxos/react-ui';\n\nimport { useServiceRegistry } from '../../hooks';\nimport { ServiceType } from '../../types';\n\n// TODO(burdon): Option to show all/enabled.\nexport const ServiceRegistry = ({ space }: { space: Space }) => {\n const matchingServices = useServiceRegistry(space);\n const enabledServices = useQuery(space, Filter.schema(ServiceType));\n\n // Join matching services with enabled services.\n const services = useMemo(() => {\n return matchingServices.map((service) => enabledServices.find((s) => s.serviceId === service.serviceId) ?? service);\n }, [matchingServices, enabledServices]);\n\n const handleSetEnabled = (service: ServiceType, enabled: boolean) => {\n if (enabled) {\n space.db.add(service);\n } else {\n // TODO(burdon): Remove or disable?\n space.db.remove(service);\n }\n };\n\n return (\n <List classNames='h-full grid auto-rows-[5rem] gap-2 p-2 pis-2 pie-3 overflow-y-auto scrollbar-thin'>\n {services.map((service) => (\n <ServiceItem\n key={service.serviceId}\n service={service}\n enabled={service.enabled}\n setEnabled={(enabled) => handleSetEnabled(service, enabled)}\n />\n ))}\n </List>\n );\n};\n\nconst ServiceItem = ({\n service,\n enabled,\n setEnabled,\n}: {\n service: ServiceType;\n enabled?: boolean;\n setEnabled?: (enabled: boolean) => void;\n}) => {\n return (\n <ListItem.Root classNames='flex flex-col gap-1 p-1 overflow-hidden rounded-md border border-separator'>\n <div className='grid grid-cols-[40px_1fr_40px]'>\n <div className='flex gow justify-center items-center'>\n <Icon icon='ph--placeholder--regular' size={6} />\n </div>\n <div className='grow items-center truncate mie-2'>{service.name}</div>\n <div className='flex gow justify-center items-center'>\n <Input.Root>\n <Input.Switch checked={enabled} onClick={() => setEnabled?.(!enabled)} />\n </Input.Root>\n </div>\n </div>\n <div className='grid grid-cols-[40px_1fr]'>\n <div />\n <div className='text-sm text-subdued line-clamp-2'>{service.description}</div>\n </div>\n </ListItem.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './AutomationPanel';\nexport * from './ChatContainer';\nexport * from './MarkdownViewer';\nexport * from './PromptEditor';\nexport * from './ServiceRegistry';\nexport * from './Thread';\nexport * from './TriggerEditor';\n\nexport const AutomationPanel = lazy(() => import('./AutomationPanel'));\nexport const ChatContainer = lazy(() => import('./ChatContainer'));\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useEffect", "createDocAccessor", "Input", "Select", "useThemeContext", "useTranslation", "createBasicExtensions", "createDataExtensions", "createThemeExtensions", "useTextEditor", "attentionSurface", "groupBorder", "mx", "nonNullable", "HighlightStyle", "StreamLanguage", "syntaxHighlighting", "tags", "mx", "nameRegex", "parser", "StreamLanguage", "define", "token", "stream", "eatSpace", "match", "next", "highlightStyles", "HighlightStyle", "tag", "tags", "variableName", "class", "mx", "promptExtension", "syntaxHighlighting", "inputTypes", "value", "ChainInputType", "VALUE", "label", "PASS_THROUGH", "RETRIEVER", "RESOLVER", "CONTEXT", "SCHEMA", "getInputType", "type", "find", "String", "usePromptInputs", "prompt", "useEffect", "text", "template", "inputs", "regex", "RegExp", "nameRegex", "variables", "Set", "matchAll", "map", "m", "unclaimed", "Map", "filter", "nonNullable", "input", "name", "missing", "Array", "from", "values", "forEach", "has", "delete", "push", "next", "splice", "indexOf", "PromptEditor", "commandEditable", "t", "useTranslation", "AUTOMATION_PLUGIN", "themeMode", "useThemeContext", "parentRef", "useTextEditor", "initialValue", "extensions", "createDataExtensions", "id", "undefined", "createDocAccessor", "createBasicExtensions", "bracketMatching", "lineWrapping", "placeholder", "createThemeExtensions", "slots", "content", "className", "promptExtension", "div", "mx", "groupBorder", "span", "Input", "Root", "TextInput", "classNames", "command", "onChange", "event", "target", "replace", "ref", "attentionSurface", "length", "table", "tbody", "tr", "key", "td", "code", "Select", "onValueChange", "TriggerButton", "Portal", "Content", "Viewport", "Option", "includes", "React", "useMemo", "Filter", "useQuery", "Icon", "Input", "List", "ListItem", "ServiceRegistry", "space", "matchingServices", "useServiceRegistry", "enabledServices", "useQuery", "Filter", "schema", "ServiceType", "services", "useMemo", "map", "service", "find", "s", "serviceId", "handleSetEnabled", "enabled", "db", "add", "remove", "React", "List", "classNames", "ServiceItem", "key", "setEnabled", "ListItem", "Root", "div", "className", "Icon", "icon", "size", "name", "Input", "Switch", "checked", "onClick", "description", "lazy", "AutomationPanel", "lazy", "ChatContainer"]
7
7
  }
@@ -0,0 +1,242 @@
1
+ import {
2
+ AUTOMATION_PLUGIN
3
+ } from "./chunk-HKX3D3ZP.mjs";
4
+
5
+ // packages/plugins/experimental/plugin-automation/src/components/AutomationPanel/AutomationPanel.tsx
6
+ import React2, { useState as useState2 } from "react";
7
+ import { S } from "@dxos/echo-schema";
8
+ import { FunctionType as FunctionType2, FunctionTrigger, FunctionTriggerSchema as FunctionTriggerSchema2, TriggerKind as TriggerKind2, ScriptType as ScriptType2 } from "@dxos/functions";
9
+ import { useClient } from "@dxos/react-client";
10
+ import { create, Filter as Filter2, useQuery as useQuery2, getSpace } from "@dxos/react-client/echo";
11
+ import { IconButton as IconButton2, Input as Input2, useTranslation as useTranslation2, Button } from "@dxos/react-ui";
12
+ import { List } from "@dxos/react-ui-list";
13
+ import { ghostHover, mx } from "@dxos/react-ui-theme";
14
+
15
+ // packages/plugins/experimental/plugin-automation/src/components/TriggerEditor/TriggerEditor.tsx
16
+ import React, { useState } from "react";
17
+ import { ComputeGraph } from "@dxos/conductor";
18
+ import { FunctionType, FunctionTriggerSchema, ScriptType, TriggerKind } from "@dxos/functions";
19
+ import { Filter, useQuery } from "@dxos/react-client/echo";
20
+ import { IconButton, Input, useTranslation } from "@dxos/react-ui";
21
+ import { Form, SelectInput, TextInput } from "@dxos/react-ui-form";
22
+ var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
23
+ const { t } = useTranslation(AUTOMATION_PLUGIN);
24
+ const functions = useQuery(space, Filter.schema(FunctionType));
25
+ const workflows = useQuery(space, Filter.schema(ComputeGraph));
26
+ const scripts = useQuery(space, Filter.schema(ScriptType));
27
+ const handleSave = (values) => {
28
+ onSave?.(values);
29
+ };
30
+ return /* @__PURE__ */ React.createElement(Form, {
31
+ schema: FunctionTriggerSchema,
32
+ values: trigger,
33
+ onSave: handleSave,
34
+ onCancel,
35
+ Custom: {
36
+ ["function"]: (props) => /* @__PURE__ */ React.createElement(SelectInput, {
37
+ ...props,
38
+ options: getWorkflowOptions(workflows).concat(getFunctionOptions(scripts, functions))
39
+ }),
40
+ ["spec.type"]: (props) => /* @__PURE__ */ React.createElement(SelectInput, {
41
+ ...props,
42
+ options: Object.values(TriggerKind).map((kind) => ({
43
+ value: kind,
44
+ label: t(`trigger type ${kind}`)
45
+ }))
46
+ }),
47
+ ["meta"]: (props) => {
48
+ const meta = props.getValue();
49
+ const [newMetaFieldName, setNewMetaFieldName] = useState("");
50
+ React.useEffect(() => props.onValueChange("object", {
51
+ ...meta
52
+ }), []);
53
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", null, props.label), [
54
+ ...Object.keys(meta)
55
+ ].map((key) => {
56
+ const compositeKey = `meta.${key}`;
57
+ return /* @__PURE__ */ React.createElement("div", {
58
+ key: compositeKey,
59
+ role: "none",
60
+ className: "flex items-center mt-2 gap-1"
61
+ }, /* @__PURE__ */ React.createElement("div", {
62
+ role: "none",
63
+ className: "flex-1"
64
+ }, /* @__PURE__ */ React.createElement(TextInput, {
65
+ ...props,
66
+ type: "string",
67
+ label: key
68
+ })), /* @__PURE__ */ React.createElement(IconButton, {
69
+ icon: "ph--trash--regular",
70
+ iconOnly: true,
71
+ classNames: "mt-6",
72
+ label: t("trigger meta remove"),
73
+ onClick: () => {
74
+ const newValues = {
75
+ ...props.getValue()
76
+ };
77
+ delete newValues[key];
78
+ props.onValueChange("object", newValues);
79
+ }
80
+ }));
81
+ }), /* @__PURE__ */ React.createElement("div", {
82
+ role: "none",
83
+ className: "flex items-center mt-2 gap-1 plb-1"
84
+ }, /* @__PURE__ */ React.createElement("div", {
85
+ role: "none",
86
+ className: "flex-1"
87
+ }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.TextInput, {
88
+ placeholder: t("trigger meta prop name placeholder"),
89
+ value: newMetaFieldName,
90
+ onChange: (event) => setNewMetaFieldName(event.target.value)
91
+ }))), /* @__PURE__ */ React.createElement(IconButton, {
92
+ icon: "ph--plus--regular",
93
+ iconOnly: true,
94
+ label: t("trigger meta add"),
95
+ onClick: () => {
96
+ if (newMetaFieldName.length) {
97
+ const meta2 = props.getValue() ?? {};
98
+ const metaWithNewProp = {
99
+ ...meta2,
100
+ [newMetaFieldName]: ""
101
+ };
102
+ setNewMetaFieldName("");
103
+ props.onValueChange("object", metaWithNewProp);
104
+ }
105
+ }
106
+ })));
107
+ }
108
+ }
109
+ });
110
+ };
111
+ var getWorkflowOptions = (graphs) => {
112
+ return graphs.map((graph) => ({
113
+ label: `compute-${graph.id}`,
114
+ value: `dxn:echo:@:${graph.id}`
115
+ }));
116
+ };
117
+ var getFunctionOptions = (scripts, functions) => {
118
+ const getLabel = (fn) => scripts.find((s) => fn.source?.target?.id === s.id)?.name ?? fn.name;
119
+ return functions.map((fn) => ({
120
+ label: getLabel(fn),
121
+ value: `dxn:worker:${fn.name}`
122
+ }));
123
+ };
124
+
125
+ // packages/plugins/experimental/plugin-automation/src/components/AutomationPanel/AutomationPanel.tsx
126
+ var grid = "grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]";
127
+ var AutomationPanel = ({ space, object }) => {
128
+ const { t } = useTranslation2(AUTOMATION_PLUGIN);
129
+ const client = useClient();
130
+ const triggers = useQuery2(space, Filter2.schema(FunctionTrigger));
131
+ const functions = useQuery2(space, Filter2.schema(FunctionType2));
132
+ const scripts = useQuery2(space, Filter2.schema(ScriptType2));
133
+ const [trigger, setTrigger] = useState2();
134
+ const [selected, setSelected] = useState2();
135
+ const handleSelect = (trigger2) => {
136
+ const { id: _, ...values } = trigger2;
137
+ setTrigger(values);
138
+ setSelected(trigger2);
139
+ };
140
+ const handleAdd = () => {
141
+ setTrigger(create(FunctionTriggerSchema2, {
142
+ meta: {}
143
+ }));
144
+ setSelected(void 0);
145
+ };
146
+ const handleDelete = (trigger2) => {
147
+ space.db.remove(trigger2);
148
+ setTrigger(void 0);
149
+ setSelected(void 0);
150
+ };
151
+ const handleSave = (trigger2) => {
152
+ if (selected) {
153
+ Object.assign(selected, trigger2);
154
+ } else {
155
+ space.db.add(create(FunctionTrigger, trigger2));
156
+ }
157
+ setTrigger(void 0);
158
+ setSelected(void 0);
159
+ };
160
+ const handleCancel = () => {
161
+ setTrigger(void 0);
162
+ };
163
+ return /* @__PURE__ */ React2.createElement("div", {
164
+ className: "flex flex-col w-full divide-y divide-separator overflow-y-auto"
165
+ }, /* @__PURE__ */ React2.createElement(List.Root, {
166
+ items: triggers,
167
+ isItem: S.is(FunctionTrigger),
168
+ getId: (field) => field.id
169
+ }, ({ items: triggers2 }) => /* @__PURE__ */ React2.createElement("div", {
170
+ role: "list",
171
+ className: "flex flex-col w-full"
172
+ }, triggers2?.map((trigger2) => {
173
+ const copyAction = getCopyAction(client, trigger2);
174
+ return /* @__PURE__ */ React2.createElement(List.Item, {
175
+ key: trigger2.id,
176
+ item: trigger2,
177
+ classNames: mx(grid, ghostHover, "items-center", "px-2")
178
+ }, /* @__PURE__ */ React2.createElement(Input2.Root, null, /* @__PURE__ */ React2.createElement(Input2.Switch, {
179
+ checked: trigger2.enabled,
180
+ onCheckedChange: (checked) => trigger2.enabled = checked
181
+ })), /* @__PURE__ */ React2.createElement("div", {
182
+ className: "flex"
183
+ }, /* @__PURE__ */ React2.createElement(List.ItemTitle, {
184
+ classNames: "px-1 cursor-pointer w-0 shrink truncate",
185
+ onClick: () => handleSelect(trigger2)
186
+ }, getFunctionName(scripts, functions, trigger2) ?? "\u2205"), copyAction && /* @__PURE__ */ React2.createElement(Button, {
187
+ onClick: () => navigator.clipboard.writeText(copyAction.contentProvider())
188
+ }, t(copyAction.translationKey))), /* @__PURE__ */ React2.createElement(List.ItemDeleteButton, {
189
+ onClick: () => handleDelete(trigger2)
190
+ }));
191
+ }))), trigger && /* @__PURE__ */ React2.createElement(TriggerEditor, {
192
+ space,
193
+ trigger,
194
+ onSave: handleSave,
195
+ onCancel: handleCancel
196
+ }), !trigger && /* @__PURE__ */ React2.createElement("div", {
197
+ className: "flex p-2 justify-center"
198
+ }, /* @__PURE__ */ React2.createElement(IconButton2, {
199
+ icon: "ph--plus--regular",
200
+ label: t("new trigger"),
201
+ onClick: handleAdd
202
+ })));
203
+ };
204
+ var getCopyAction = (client, trigger) => {
205
+ if (trigger?.spec?.type === TriggerKind2.Email) {
206
+ return {
207
+ translationKey: "trigger copy email",
208
+ contentProvider: () => `${getSpace(trigger).id}@dxos.network`
209
+ };
210
+ }
211
+ if (trigger?.spec?.type === TriggerKind2.Webhook) {
212
+ return {
213
+ translationKey: "trigger copy url",
214
+ contentProvider: () => getWebhookUrl(client, trigger)
215
+ };
216
+ }
217
+ return void 0;
218
+ };
219
+ var getWebhookUrl = (client, trigger) => {
220
+ const spaceId = getSpace(trigger).id;
221
+ const edgeUrl = new URL(client.config.values.runtime.services.edge.url);
222
+ const isSecure = edgeUrl.protocol.startsWith("https") || edgeUrl.protocol.startsWith("wss");
223
+ edgeUrl.protocol = isSecure ? "https" : "http";
224
+ return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();
225
+ };
226
+ var getFunctionName = (scripts, functions, trigger) => {
227
+ const shortId = trigger.function && `${trigger.function?.slice(0, 16)}\u2026`;
228
+ const functionObject = functions.find((fn) => fn.name === trigger.function);
229
+ if (!functionObject) {
230
+ return shortId;
231
+ }
232
+ return scripts.find((s) => functionObject.source?.target?.id === s.id)?.name ?? shortId;
233
+ };
234
+
235
+ // packages/plugins/experimental/plugin-automation/src/components/AutomationPanel/index.ts
236
+ var AutomationPanel_default = AutomationPanel;
237
+
238
+ export {
239
+ TriggerEditor,
240
+ AutomationPanel_default
241
+ };
242
+ //# sourceMappingURL=chunk-RAVNWHNE.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/AutomationPanel/AutomationPanel.tsx", "../../../src/components/TriggerEditor/TriggerEditor.tsx", "../../../src/components/AutomationPanel/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { S } from '@dxos/echo-schema';\nimport {\n FunctionType,\n FunctionTrigger,\n FunctionTriggerSchema,\n TriggerKind,\n type FunctionTriggerType,\n ScriptType,\n} from '@dxos/functions';\nimport { type Client, useClient } from '@dxos/react-client';\nimport { create, Filter, useQuery, type Space, type ReactiveObject, getSpace } from '@dxos/react-client/echo';\nimport { IconButton, Input, useTranslation, Button } from '@dxos/react-ui';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover, mx } from '@dxos/react-ui-theme';\n\nimport { AUTOMATION_PLUGIN } from '../../meta';\nimport { TriggerEditor, type TriggerEditorProps } from '../TriggerEditor';\n\nconst grid = 'grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]';\n\nexport type AutomationPanelProps = {\n space: Space;\n object?: ReactiveObject<any>;\n};\n\n// TODO(burdon): Factor out common layout with ViewEditor.\nexport const AutomationPanel = ({ space, object }: AutomationPanelProps) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n const client = useClient();\n const triggers = useQuery(space, Filter.schema(FunctionTrigger));\n const functions = useQuery(space, Filter.schema(FunctionType));\n const scripts = useQuery(space, Filter.schema(ScriptType));\n\n const [trigger, setTrigger] = useState<FunctionTriggerType>();\n const [selected, setSelected] = useState<FunctionTrigger>();\n\n const handleSelect = (trigger: FunctionTrigger) => {\n const { id: _, ...values } = trigger;\n setTrigger(values);\n setSelected(trigger);\n };\n\n const handleAdd = () => {\n setTrigger(create(FunctionTriggerSchema, { meta: {} }));\n setSelected(undefined);\n };\n\n const handleDelete = (trigger: FunctionTrigger) => {\n space.db.remove(trigger);\n setTrigger(undefined);\n setSelected(undefined);\n };\n\n const handleSave: TriggerEditorProps['onSave'] = (trigger) => {\n if (selected) {\n Object.assign(selected, trigger);\n } else {\n space.db.add(create(FunctionTrigger, trigger));\n }\n\n setTrigger(undefined);\n setSelected(undefined);\n };\n\n const handleCancel: TriggerEditorProps['onCancel'] = () => {\n setTrigger(undefined);\n };\n\n return (\n <div className='flex flex-col w-full divide-y divide-separator overflow-y-auto'>\n <List.Root<FunctionTrigger> items={triggers} isItem={S.is(FunctionTrigger)} getId={(field) => field.id}>\n {({ items: triggers }) => (\n <div role='list' className='flex flex-col w-full'>\n {triggers?.map((trigger) => {\n const copyAction = getCopyAction(client, trigger);\n return (\n <List.Item<FunctionTrigger>\n key={trigger.id}\n item={trigger}\n classNames={mx(grid, ghostHover, 'items-center', 'px-2')}\n >\n <Input.Root>\n <Input.Switch\n checked={trigger.enabled}\n onCheckedChange={(checked) => (trigger.enabled = checked)}\n />\n </Input.Root>\n\n <div className={'flex'}>\n <List.ItemTitle\n classNames='px-1 cursor-pointer w-0 shrink truncate'\n onClick={() => handleSelect(trigger)}\n >\n {getFunctionName(scripts, functions, trigger) ?? '∅'}\n </List.ItemTitle>\n\n {/* TODO: a better way to expose copy action */}\n {copyAction && (\n <Button onClick={() => navigator.clipboard.writeText(copyAction.contentProvider())}>\n {t(copyAction.translationKey)}\n </Button>\n )}\n </div>\n\n <List.ItemDeleteButton onClick={() => handleDelete(trigger)} />\n </List.Item>\n );\n })}\n </div>\n )}\n </List.Root>\n\n {trigger && <TriggerEditor space={space} trigger={trigger} onSave={handleSave} onCancel={handleCancel} />}\n\n {!trigger && (\n <div className='flex p-2 justify-center'>\n <IconButton icon='ph--plus--regular' label={t('new trigger')} onClick={handleAdd} />\n </div>\n )}\n </div>\n );\n};\n\nconst getCopyAction = (client: Client, trigger: FunctionTrigger | undefined) => {\n if (trigger?.spec?.type === TriggerKind.Email) {\n return { translationKey: 'trigger copy email', contentProvider: () => `${getSpace(trigger)!.id}@dxos.network` };\n }\n\n if (trigger?.spec?.type === TriggerKind.Webhook) {\n return { translationKey: 'trigger copy url', contentProvider: () => getWebhookUrl(client, trigger) };\n }\n\n return undefined;\n};\n\nconst getWebhookUrl = (client: Client, trigger: FunctionTrigger) => {\n const spaceId = getSpace(trigger)!.id;\n const edgeUrl = new URL(client.config.values.runtime!.services!.edge!.url!);\n const isSecure = edgeUrl.protocol.startsWith('https') || edgeUrl.protocol.startsWith('wss');\n edgeUrl.protocol = isSecure ? 'https' : 'http';\n return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();\n};\n\nconst getFunctionName = (scripts: ScriptType[], functions: FunctionType[], trigger: FunctionTriggerType) => {\n const shortId = trigger.function && `${trigger.function?.slice(0, 16)}…`;\n const functionObject = functions.find((fn) => fn.name === trigger.function);\n if (!functionObject) {\n return shortId;\n }\n return scripts.find((s) => functionObject.source?.target?.id === s.id)?.name ?? shortId;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { ComputeGraph } from '@dxos/conductor';\nimport {\n FunctionType,\n FunctionTriggerSchema,\n type FunctionTriggerType,\n type FunctionTrigger,\n ScriptType,\n TriggerKind,\n} from '@dxos/functions';\nimport { Filter, useQuery, type Space } from '@dxos/react-client/echo';\nimport { IconButton, Input, useTranslation } from '@dxos/react-ui';\nimport { Form, SelectInput, TextInput } from '@dxos/react-ui-form';\n\nimport { AUTOMATION_PLUGIN } from '../../meta';\n\nexport type TriggerEditorProps = {\n space: Space;\n trigger: FunctionTriggerType;\n onSave?: (trigger: Omit<FunctionTrigger, 'id'>) => void;\n onCancel?: () => void;\n};\n\nexport const TriggerEditor = ({ space, trigger, onSave, onCancel }: TriggerEditorProps) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n\n const functions = useQuery(space, Filter.schema(FunctionType));\n const workflows = useQuery(space, Filter.schema(ComputeGraph));\n const scripts = useQuery(space, Filter.schema(ScriptType));\n\n const handleSave = (values: FunctionTriggerType) => {\n onSave?.(values);\n };\n\n return (\n <Form<FunctionTriggerType>\n schema={FunctionTriggerSchema}\n values={trigger}\n onSave={handleSave}\n onCancel={onCancel}\n Custom={{\n ['function' satisfies keyof FunctionTriggerType]: (props) => (\n <SelectInput\n {...props}\n options={getWorkflowOptions(workflows).concat(getFunctionOptions(scripts, functions))}\n />\n ),\n ['spec.type' as const]: (props) => (\n <SelectInput\n {...props}\n options={Object.values(TriggerKind).map((kind) => ({\n value: kind,\n label: t(`trigger type ${kind}`),\n }))}\n />\n ),\n ['meta' as const]: (props) => {\n const meta = props.getValue()!;\n\n const [newMetaFieldName, setNewMetaFieldName] = useState('');\n\n React.useEffect(() => props.onValueChange('object', { ...meta }), []);\n\n return (\n <>\n <div>{props.label}</div>\n {[...Object.keys(meta)].map((key) => {\n const compositeKey: any = `meta.${key}`;\n return (\n <div key={compositeKey} role='none' className='flex items-center mt-2 gap-1'>\n <div role='none' className='flex-1'>\n <TextInput {...props} type={'string'} label={key} />\n </div>\n <IconButton\n icon='ph--trash--regular'\n iconOnly\n classNames={'mt-6'}\n label={t('trigger meta remove')}\n onClick={() => {\n const newValues: any = { ...props.getValue() };\n delete newValues[key];\n props.onValueChange('object', newValues);\n }}\n />\n </div>\n );\n })}\n <div role='none' className='flex items-center mt-2 gap-1 plb-1'>\n <div role='none' className='flex-1'>\n <Input.Root>\n <Input.TextInput\n placeholder={t('trigger meta prop name placeholder')}\n value={newMetaFieldName}\n onChange={(event) => setNewMetaFieldName(event.target.value)}\n />\n </Input.Root>\n </div>\n <IconButton\n icon='ph--plus--regular'\n iconOnly\n label={t('trigger meta add')}\n onClick={() => {\n if (newMetaFieldName.length) {\n const meta = props.getValue() ?? {};\n const metaWithNewProp = { ...meta, [newMetaFieldName]: '' };\n setNewMetaFieldName('');\n props.onValueChange('object', metaWithNewProp);\n }\n }}\n />\n </div>\n </>\n );\n },\n }}\n />\n );\n};\n\nconst getWorkflowOptions = (graphs: ComputeGraph[]) => {\n return graphs.map((graph) => ({ label: `compute-${graph.id}`, value: `dxn:echo:@:${graph.id}` }));\n};\n\nconst getFunctionOptions = (scripts: ScriptType[], functions: FunctionType[]) => {\n const getLabel = (fn: FunctionType) => scripts.find((s) => fn.source?.target?.id === s.id)?.name ?? fn.name;\n return functions.map((fn) => ({ label: getLabel(fn), value: `dxn:worker:${fn.name}` }));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { AutomationPanel } from './AutomationPanel';\n\nexport default AutomationPanel;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useState", "S", "FunctionType", "FunctionTrigger", "FunctionTriggerSchema", "TriggerKind", "ScriptType", "useClient", "create", "Filter", "useQuery", "getSpace", "IconButton", "Input", "useTranslation", "Button", "List", "ghostHover", "mx", "React", "useState", "ComputeGraph", "FunctionType", "FunctionTriggerSchema", "ScriptType", "TriggerKind", "Filter", "useQuery", "IconButton", "Input", "useTranslation", "Form", "SelectInput", "TextInput", "TriggerEditor", "space", "trigger", "onSave", "onCancel", "t", "useTranslation", "AUTOMATION_PLUGIN", "functions", "useQuery", "Filter", "schema", "FunctionType", "workflows", "ComputeGraph", "scripts", "ScriptType", "handleSave", "values", "Form", "FunctionTriggerSchema", "Custom", "props", "SelectInput", "options", "getWorkflowOptions", "concat", "getFunctionOptions", "Object", "TriggerKind", "map", "kind", "value", "label", "meta", "getValue", "newMetaFieldName", "setNewMetaFieldName", "useState", "React", "useEffect", "onValueChange", "div", "keys", "key", "compositeKey", "role", "className", "TextInput", "type", "IconButton", "icon", "iconOnly", "classNames", "onClick", "newValues", "Input", "Root", "placeholder", "onChange", "event", "target", "length", "metaWithNewProp", "graphs", "graph", "id", "getLabel", "fn", "find", "s", "source", "name", "grid", "AutomationPanel", "space", "object", "t", "useTranslation", "AUTOMATION_PLUGIN", "client", "useClient", "triggers", "useQuery", "Filter", "schema", "FunctionTrigger", "functions", "FunctionType", "scripts", "ScriptType", "trigger", "setTrigger", "useState", "selected", "setSelected", "handleSelect", "id", "_", "values", "handleAdd", "create", "FunctionTriggerSchema", "meta", "undefined", "handleDelete", "db", "remove", "handleSave", "Object", "assign", "add", "handleCancel", "React", "div", "className", "List", "Root", "items", "isItem", "S", "is", "getId", "field", "role", "map", "copyAction", "getCopyAction", "Item", "key", "item", "classNames", "mx", "ghostHover", "Input", "Switch", "checked", "enabled", "onCheckedChange", "ItemTitle", "onClick", "getFunctionName", "Button", "navigator", "clipboard", "writeText", "contentProvider", "translationKey", "ItemDeleteButton", "TriggerEditor", "onSave", "onCancel", "IconButton", "icon", "label", "spec", "type", "TriggerKind", "Email", "getSpace", "Webhook", "getWebhookUrl", "spaceId", "edgeUrl", "URL", "config", "runtime", "services", "edge", "url", "isSecure", "protocol", "startsWith", "toString", "shortId", "function", "slice", "functionObject", "find", "fn", "name", "s", "source", "target", "AutomationPanel"]
7
+ }
@@ -1,38 +1,39 @@
1
1
  import {
2
- AssistantPanel,
3
2
  AutomationPanel,
4
3
  ChatContainer,
5
- PromptEditor
6
- } from "./chunk-EKJVAFT2.mjs";
7
- import {
8
- AutomationAction,
9
- ChainInputSchema,
10
- ChainInputType,
11
- ChainPromptType,
12
- ChainType,
13
- GptChatType
14
- } from "./chunk-C3VRGDR6.mjs";
4
+ PromptEditor,
5
+ ServiceRegistry
6
+ } from "./chunk-IYSMXX6Q.mjs";
15
7
  import {
16
8
  TriggerEditor
17
- } from "./chunk-KPSDH6XZ.mjs";
9
+ } from "./chunk-RAVNWHNE.mjs";
18
10
  import {
19
11
  AiClient,
20
12
  AppGraphBuilder,
21
13
  IntentResolver,
22
- ReactSurface
23
- } from "./chunk-JSNPW6JF.mjs";
24
- import {
25
- Thread,
26
- ThreadMessage
27
- } from "./chunk-YZF3SDZL.mjs";
14
+ MarkdownViewer,
15
+ ReactSurface,
16
+ Thread
17
+ } from "./chunk-5SLV6AUA.mjs";
28
18
  import "./chunk-HZ4TA7HY.mjs";
19
+ import {
20
+ AIChatType,
21
+ ApiAuthorization,
22
+ AutomationAction,
23
+ ChainInputSchema,
24
+ ChainInputType,
25
+ ChainPromptType,
26
+ ChainType,
27
+ MockServiceRegistry,
28
+ ServiceType
29
+ } from "./chunk-7XADMUOW.mjs";
29
30
  import {
30
31
  AUTOMATION_PLUGIN,
31
32
  meta
32
33
  } from "./chunk-HKX3D3ZP.mjs";
33
34
 
34
35
  // packages/plugins/experimental/plugin-automation/src/AutomationPlugin.tsx
35
- import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events, oneOf } from "@dxos/app-framework";
36
+ import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from "@dxos/app-framework";
36
37
  import { FunctionTrigger } from "@dxos/functions";
37
38
  import { ClientCapabilities, ClientEvents } from "@dxos/plugin-client";
38
39
  import { DeckCapabilities } from "@dxos/plugin-deck";
@@ -42,8 +43,8 @@ import { RefArray } from "@dxos/react-client/echo";
42
43
  var translations_default = [
43
44
  {
44
45
  "en-US": {
45
- [GptChatType.typename]: {
46
- "typename label": "GPT Chat"
46
+ [AIChatType.typename]: {
47
+ "typename label": "AI Chat"
47
48
  },
48
49
  [AUTOMATION_PLUGIN]: {
49
50
  "plugin name": "Automation",
@@ -57,6 +58,9 @@ var translations_default = [
57
58
  "select preset template placeholder": "Select preset",
58
59
  "open automation panel label": "Show Automations",
59
60
  "automation panel label": "Automations",
61
+ "service registry label": "Service Registry",
62
+ "chat input placeholder": "Ask a question...",
63
+ "chat stop": "Cancel request.",
60
64
  "function select label": "Function",
61
65
  "function select placeholder": "Select function",
62
66
  "function enabled": "Enabled",
@@ -75,9 +79,7 @@ var translations_default = [
75
79
  "trigger copy email": "Copy Email",
76
80
  "trigger meta add": "Add",
77
81
  "trigger meta remove": "Remove",
78
- "trigger meta prop name placeholder": "New meta property name",
79
- "open assistant panel label": "Show Assistant",
80
- "assistant panel label": "Assistant"
82
+ "trigger meta prop name placeholder": "New meta property name"
81
83
  }
82
84
  }
83
85
  }
@@ -97,7 +99,7 @@ var AutomationPlugin = () => definePlugin(meta, [
97
99
  }),
98
100
  defineModule({
99
101
  id: `${meta.id}/module/metadata`,
100
- activatesOn: oneOf(Events.Startup, Events.SetupAppGraph),
102
+ activatesOn: Events.SetupMetadata,
101
103
  activate: () => [
102
104
  contributes(Capabilities.Metadata, {
103
105
  id: ChainType.typename,
@@ -114,7 +116,7 @@ var AutomationPlugin = () => definePlugin(meta, [
114
116
  }
115
117
  }),
116
118
  contributes(Capabilities.Metadata, {
117
- id: GptChatType.typename,
119
+ id: AIChatType.typename,
118
120
  metadata: {
119
121
  createObject: (props) => createIntent(AutomationAction.Create, props),
120
122
  placeholder: [
@@ -130,7 +132,7 @@ var AutomationPlugin = () => definePlugin(meta, [
130
132
  }),
131
133
  defineModule({
132
134
  id: `${meta.id}/module/schema`,
133
- activatesOn: ClientEvents.SetupClient,
135
+ activatesOn: ClientEvents.SetupSchema,
134
136
  activate: () => [
135
137
  contributes(ClientCapabilities.SystemSchema, [
136
138
  ChainType,
@@ -138,7 +140,7 @@ var AutomationPlugin = () => definePlugin(meta, [
138
140
  FunctionTrigger
139
141
  ]),
140
142
  contributes(ClientCapabilities.Schema, [
141
- GptChatType
143
+ AIChatType
142
144
  ])
143
145
  ]
144
146
  }),
@@ -147,30 +149,30 @@ var AutomationPlugin = () => definePlugin(meta, [
147
149
  activatesOn: Events.Startup,
148
150
  activate: () => [
149
151
  contributes(DeckCapabilities.ComplementaryPanel, {
150
- id: "automation",
152
+ id: "service-registry",
151
153
  label: [
152
- "automation panel label",
154
+ "service registry label",
153
155
  {
154
156
  ns: AUTOMATION_PLUGIN
155
157
  }
156
158
  ],
157
- icon: "ph--magic-wand--regular"
159
+ icon: "ph--plugs--regular"
158
160
  }),
159
161
  contributes(DeckCapabilities.ComplementaryPanel, {
160
- id: "assistant",
162
+ id: "automation",
161
163
  label: [
162
- "assistant panel label",
164
+ "automation panel label",
163
165
  {
164
166
  ns: AUTOMATION_PLUGIN
165
167
  }
166
168
  ],
167
- icon: "ph--atom--regular"
169
+ icon: "ph--magic-wand--regular"
168
170
  })
169
171
  ]
170
172
  }),
171
173
  defineModule({
172
174
  id: `${meta.id}/module/react-surface`,
173
- activatesOn: Events.Startup,
175
+ activatesOn: Events.SetupSurfaces,
174
176
  activate: ReactSurface
175
177
  }),
176
178
  defineModule({
@@ -403,8 +405,9 @@ var chainPresets = [
403
405
  }
404
406
  ];
405
407
  export {
408
+ AIChatType,
406
409
  AUTOMATION_PLUGIN,
407
- AssistantPanel,
410
+ ApiAuthorization,
408
411
  AutomationAction,
409
412
  AutomationPanel,
410
413
  AutomationPlugin,
@@ -413,10 +416,12 @@ export {
413
416
  ChainPromptType,
414
417
  ChainType,
415
418
  ChatContainer,
416
- GptChatType,
419
+ MarkdownViewer,
420
+ MockServiceRegistry,
417
421
  PromptEditor,
422
+ ServiceRegistry,
423
+ ServiceType,
418
424
  Thread,
419
- ThreadMessage,
420
425
  TriggerEditor,
421
426
  chainPresets,
422
427
  meta,