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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/dist/lib/browser/AutomationPanel-ITYXSN5Z.mjs +132 -0
  2. package/dist/lib/browser/AutomationPanel-ITYXSN5Z.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-HKX3D3ZP.mjs → chunk-OFDNNRLE.mjs} +4 -7
  4. package/dist/lib/browser/{chunk-HKX3D3ZP.mjs.map → chunk-OFDNNRLE.mjs.map} +3 -3
  5. package/dist/lib/browser/chunk-U7QLNY2S.mjs +8 -0
  6. package/dist/lib/browser/chunk-U7QLNY2S.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-WY2C7JY4.mjs +119 -0
  8. package/dist/lib/browser/chunk-WY2C7JY4.mjs.map +7 -0
  9. package/dist/lib/browser/complementary-panel-4CPOJL4Y.mjs +56 -0
  10. package/dist/lib/browser/complementary-panel-4CPOJL4Y.mjs.map +7 -0
  11. package/dist/lib/browser/index.mjs +22 -372
  12. package/dist/lib/browser/index.mjs.map +4 -4
  13. package/dist/lib/browser/meta.json +1 -1
  14. package/dist/lib/browser/react-surface-SAPMN4PF.mjs +27 -0
  15. package/dist/lib/browser/react-surface-SAPMN4PF.mjs.map +7 -0
  16. package/dist/lib/node/{chunk-WWU5FVAO.cjs → AutomationPanel-X33HHDMQ.cjs} +19 -131
  17. package/dist/lib/node/AutomationPanel-X33HHDMQ.cjs.map +7 -0
  18. package/dist/lib/node/chunk-7Q5SNGCL.cjs +148 -0
  19. package/dist/lib/node/chunk-7Q5SNGCL.cjs.map +7 -0
  20. package/dist/lib/node/chunk-CB5OB6JH.cjs +40 -0
  21. package/dist/lib/node/chunk-CB5OB6JH.cjs.map +7 -0
  22. package/dist/lib/node/{chunk-5VF5JKUN.cjs → chunk-ORMEYEBE.cjs} +7 -10
  23. package/dist/lib/node/{chunk-5VF5JKUN.cjs.map → chunk-ORMEYEBE.cjs.map} +3 -3
  24. package/dist/lib/node/complementary-panel-ZYJJ42ZU.cjs +72 -0
  25. package/dist/lib/node/complementary-panel-ZYJJ42ZU.cjs.map +7 -0
  26. package/dist/lib/node/index.cjs +37 -373
  27. package/dist/lib/node/index.cjs.map +4 -4
  28. package/dist/lib/node/meta.json +1 -1
  29. package/dist/lib/node/{react-surface-5HYLBDC3.cjs → react-surface-2WRVAPGR.cjs} +9 -28
  30. package/dist/lib/node/react-surface-2WRVAPGR.cjs.map +7 -0
  31. package/dist/lib/node-esm/AutomationPanel-HY3GB4BT.mjs +133 -0
  32. package/dist/lib/node-esm/AutomationPanel-HY3GB4BT.mjs.map +7 -0
  33. package/dist/lib/node-esm/{chunk-X3LPRWIL.mjs → chunk-6MUUH67V.mjs} +4 -7
  34. package/dist/lib/node-esm/{chunk-X3LPRWIL.mjs.map → chunk-6MUUH67V.mjs.map} +3 -3
  35. package/dist/lib/node-esm/chunk-R3P2WPBQ.mjs +10 -0
  36. package/dist/lib/node-esm/chunk-R3P2WPBQ.mjs.map +7 -0
  37. package/dist/lib/node-esm/chunk-UDD2VA6G.mjs +120 -0
  38. package/dist/lib/node-esm/chunk-UDD2VA6G.mjs.map +7 -0
  39. package/dist/lib/node-esm/complementary-panel-S42RIIAY.mjs +57 -0
  40. package/dist/lib/node-esm/complementary-panel-S42RIIAY.mjs.map +7 -0
  41. package/dist/lib/node-esm/index.mjs +22 -372
  42. package/dist/lib/node-esm/index.mjs.map +4 -4
  43. package/dist/lib/node-esm/meta.json +1 -1
  44. package/dist/lib/node-esm/{react-surface-SS5WCRJ2.mjs → react-surface-QWLPOYXO.mjs} +5 -28
  45. package/dist/lib/node-esm/react-surface-QWLPOYXO.mjs.map +7 -0
  46. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  47. package/dist/types/src/capabilities/{ai-client.d.ts → complementary-panel.d.ts} +2 -3
  48. package/dist/types/src/capabilities/complementary-panel.d.ts.map +1 -0
  49. package/dist/types/src/capabilities/index.d.ts +1 -180
  50. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  51. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  52. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +1 -2
  53. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  54. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  55. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +1 -2
  56. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  57. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  58. package/dist/types/src/components/index.d.ts +1 -11
  59. package/dist/types/src/components/index.d.ts.map +1 -1
  60. package/dist/types/src/index.d.ts +1 -3
  61. package/dist/types/src/index.d.ts.map +1 -1
  62. package/dist/types/src/meta.d.ts +0 -1
  63. package/dist/types/src/meta.d.ts.map +1 -1
  64. package/dist/types/src/testing/index.d.ts +1 -1
  65. package/dist/types/src/testing/index.d.ts.map +1 -1
  66. package/dist/types/src/testing/{testing.d.ts → test-functions.d.ts} +1 -3
  67. package/dist/types/src/testing/test-functions.d.ts.map +1 -0
  68. package/dist/types/src/translations.d.ts +2 -92
  69. package/dist/types/src/translations.d.ts.map +1 -1
  70. package/package.json +23 -71
  71. package/src/AutomationPlugin.tsx +9 -64
  72. package/src/capabilities/complementary-panel.ts +56 -0
  73. package/src/capabilities/index.ts +1 -5
  74. package/src/capabilities/react-surface.tsx +1 -13
  75. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +1 -2
  76. package/src/components/AutomationPanel/AutomationPanel.tsx +56 -49
  77. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +1 -2
  78. package/src/components/TriggerEditor/TriggerEditor.tsx +8 -5
  79. package/src/components/index.ts +0 -7
  80. package/src/index.ts +2 -3
  81. package/src/meta.ts +3 -3
  82. package/src/testing/index.ts +1 -1
  83. package/src/testing/{testing.ts → test-functions.ts} +0 -7
  84. package/src/translations.ts +2 -29
  85. package/dist/lib/browser/AutomationPanel-WFJZAW4F.mjs +0 -8
  86. package/dist/lib/browser/AutomationPanel-WFJZAW4F.mjs.map +0 -7
  87. package/dist/lib/browser/ChatContainer-OFCOZ5T2.mjs +0 -12
  88. package/dist/lib/browser/ChatContainer-OFCOZ5T2.mjs.map +0 -7
  89. package/dist/lib/browser/ai-client-AARXEMMJ.mjs +0 -22
  90. package/dist/lib/browser/ai-client-AARXEMMJ.mjs.map +0 -7
  91. package/dist/lib/browser/app-graph-builder-B4U34VSR.mjs +0 -162
  92. package/dist/lib/browser/app-graph-builder-B4U34VSR.mjs.map +0 -7
  93. package/dist/lib/browser/chunk-5SLV6AUA.mjs +0 -1367
  94. package/dist/lib/browser/chunk-5SLV6AUA.mjs.map +0 -7
  95. package/dist/lib/browser/chunk-7XADMUOW.mjs +0 -205
  96. package/dist/lib/browser/chunk-7XADMUOW.mjs.map +0 -7
  97. package/dist/lib/browser/chunk-HZ4TA7HY.mjs +0 -15
  98. package/dist/lib/browser/chunk-HZ4TA7HY.mjs.map +0 -7
  99. package/dist/lib/browser/chunk-IYSMXX6Q.mjs +0 -283
  100. package/dist/lib/browser/chunk-IYSMXX6Q.mjs.map +0 -7
  101. package/dist/lib/browser/chunk-RAVNWHNE.mjs +0 -242
  102. package/dist/lib/browser/chunk-RAVNWHNE.mjs.map +0 -7
  103. package/dist/lib/browser/intent-resolver-754MPV7H.mjs +0 -29
  104. package/dist/lib/browser/intent-resolver-754MPV7H.mjs.map +0 -7
  105. package/dist/lib/browser/react-surface-4QZ6AKBF.mjs +0 -50
  106. package/dist/lib/browser/react-surface-4QZ6AKBF.mjs.map +0 -7
  107. package/dist/lib/browser/types/index.mjs +0 -24
  108. package/dist/lib/browser/types/index.mjs.map +0 -7
  109. package/dist/lib/node/AutomationPanel-LRDEDGXI.cjs +0 -26
  110. package/dist/lib/node/AutomationPanel-LRDEDGXI.cjs.map +0 -7
  111. package/dist/lib/node/ChatContainer-6LZX4K2Z.cjs +0 -33
  112. package/dist/lib/node/ChatContainer-6LZX4K2Z.cjs.map +0 -7
  113. package/dist/lib/node/ai-client-SA35GN5Q.cjs +0 -38
  114. package/dist/lib/node/ai-client-SA35GN5Q.cjs.map +0 -7
  115. package/dist/lib/node/app-graph-builder-ENVDOPS4.cjs +0 -178
  116. package/dist/lib/node/app-graph-builder-ENVDOPS4.cjs.map +0 -7
  117. package/dist/lib/node/chunk-6VMSH4P6.cjs +0 -1364
  118. package/dist/lib/node/chunk-6VMSH4P6.cjs.map +0 -7
  119. package/dist/lib/node/chunk-HEYQONXC.cjs +0 -302
  120. package/dist/lib/node/chunk-HEYQONXC.cjs.map +0 -7
  121. package/dist/lib/node/chunk-LU4HQWJD.cjs +0 -226
  122. package/dist/lib/node/chunk-LU4HQWJD.cjs.map +0 -7
  123. package/dist/lib/node/chunk-WWU5FVAO.cjs.map +0 -7
  124. package/dist/lib/node/chunk-ZS5RZ7RM.cjs +0 -34
  125. package/dist/lib/node/chunk-ZS5RZ7RM.cjs.map +0 -7
  126. package/dist/lib/node/intent-resolver-CNVBSG4E.cjs +0 -44
  127. package/dist/lib/node/intent-resolver-CNVBSG4E.cjs.map +0 -7
  128. package/dist/lib/node/react-surface-5HYLBDC3.cjs.map +0 -7
  129. package/dist/lib/node/types/index.cjs +0 -46
  130. package/dist/lib/node/types/index.cjs.map +0 -7
  131. package/dist/lib/node-esm/AutomationPanel-ZV7VEEPP.mjs +0 -9
  132. package/dist/lib/node-esm/AutomationPanel-ZV7VEEPP.mjs.map +0 -7
  133. package/dist/lib/node-esm/ChatContainer-PPVMC2FC.mjs +0 -13
  134. package/dist/lib/node-esm/ChatContainer-PPVMC2FC.mjs.map +0 -7
  135. package/dist/lib/node-esm/ai-client-2ZA4TYFZ.mjs +0 -23
  136. package/dist/lib/node-esm/ai-client-2ZA4TYFZ.mjs.map +0 -7
  137. package/dist/lib/node-esm/app-graph-builder-IYOUCQZT.mjs +0 -163
  138. package/dist/lib/node-esm/app-graph-builder-IYOUCQZT.mjs.map +0 -7
  139. package/dist/lib/node-esm/chunk-3KB5HRXA.mjs +0 -284
  140. package/dist/lib/node-esm/chunk-3KB5HRXA.mjs.map +0 -7
  141. package/dist/lib/node-esm/chunk-EVTLHDM2.mjs +0 -206
  142. package/dist/lib/node-esm/chunk-EVTLHDM2.mjs.map +0 -7
  143. package/dist/lib/node-esm/chunk-ISYLEDVU.mjs +0 -16
  144. package/dist/lib/node-esm/chunk-ISYLEDVU.mjs.map +0 -7
  145. package/dist/lib/node-esm/chunk-MS7OIGVR.mjs +0 -243
  146. package/dist/lib/node-esm/chunk-MS7OIGVR.mjs.map +0 -7
  147. package/dist/lib/node-esm/chunk-WISKXX7U.mjs +0 -1368
  148. package/dist/lib/node-esm/chunk-WISKXX7U.mjs.map +0 -7
  149. package/dist/lib/node-esm/intent-resolver-RQBXW442.mjs +0 -30
  150. package/dist/lib/node-esm/intent-resolver-RQBXW442.mjs.map +0 -7
  151. package/dist/lib/node-esm/react-surface-SS5WCRJ2.mjs.map +0 -7
  152. package/dist/lib/node-esm/types/index.mjs +0 -25
  153. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  154. package/dist/types/src/artifacts.stories.d.ts +0 -16
  155. package/dist/types/src/artifacts.stories.d.ts.map +0 -1
  156. package/dist/types/src/capabilities/ai-client.d.ts.map +0 -1
  157. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -180
  158. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  159. package/dist/types/src/capabilities/capabilities.d.ts +0 -5
  160. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  161. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  162. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  163. package/dist/types/src/components/ChatContainer/ChatContainer.d.ts +0 -8
  164. package/dist/types/src/components/ChatContainer/ChatContainer.d.ts.map +0 -1
  165. package/dist/types/src/components/ChatContainer/index.d.ts +0 -4
  166. package/dist/types/src/components/ChatContainer/index.d.ts.map +0 -1
  167. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.d.ts +0 -14
  168. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.d.ts.map +0 -1
  169. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.stories.d.ts +0 -8
  170. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.stories.d.ts.map +0 -1
  171. package/dist/types/src/components/MarkdownViewer/index.d.ts +0 -2
  172. package/dist/types/src/components/MarkdownViewer/index.d.ts.map +0 -1
  173. package/dist/types/src/components/PromptEditor/PromptEditor.d.ts +0 -10
  174. package/dist/types/src/components/PromptEditor/PromptEditor.d.ts.map +0 -1
  175. package/dist/types/src/components/PromptEditor/PromptEditor.stories.d.ts +0 -6
  176. package/dist/types/src/components/PromptEditor/PromptEditor.stories.d.ts.map +0 -1
  177. package/dist/types/src/components/PromptEditor/index.d.ts +0 -2
  178. package/dist/types/src/components/PromptEditor/index.d.ts.map +0 -1
  179. package/dist/types/src/components/PromptEditor/prompt-extension.d.ts +0 -4
  180. package/dist/types/src/components/PromptEditor/prompt-extension.d.ts.map +0 -1
  181. package/dist/types/src/components/PromptEditor/types.d.ts +0 -18
  182. package/dist/types/src/components/PromptEditor/types.d.ts.map +0 -1
  183. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts +0 -6
  184. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts.map +0 -1
  185. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts +0 -8
  186. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts.map +0 -1
  187. package/dist/types/src/components/ServiceRegistry/index.d.ts +0 -2
  188. package/dist/types/src/components/ServiceRegistry/index.d.ts.map +0 -1
  189. package/dist/types/src/components/Thread/ScrollContainer.d.ts +0 -15
  190. package/dist/types/src/components/Thread/ScrollContainer.d.ts.map +0 -1
  191. package/dist/types/src/components/Thread/StatusLine.d.ts +0 -11
  192. package/dist/types/src/components/Thread/StatusLine.d.ts.map +0 -1
  193. package/dist/types/src/components/Thread/StatusLine.stories.d.ts +0 -9
  194. package/dist/types/src/components/Thread/StatusLine.stories.d.ts.map +0 -1
  195. package/dist/types/src/components/Thread/Tabbed.d.ts +0 -9
  196. package/dist/types/src/components/Thread/Tabbed.d.ts.map +0 -1
  197. package/dist/types/src/components/Thread/Tabbed.stories.d.ts +0 -8
  198. package/dist/types/src/components/Thread/Tabbed.stories.d.ts.map +0 -1
  199. package/dist/types/src/components/Thread/Thread.d.ts +0 -11
  200. package/dist/types/src/components/Thread/Thread.d.ts.map +0 -1
  201. package/dist/types/src/components/Thread/Thread.stories.d.ts +0 -10
  202. package/dist/types/src/components/Thread/Thread.stories.d.ts.map +0 -1
  203. package/dist/types/src/components/Thread/ThreadMessage.d.ts +0 -12
  204. package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +0 -1
  205. package/dist/types/src/components/Thread/ToggleContainer.d.ts +0 -13
  206. package/dist/types/src/components/Thread/ToggleContainer.d.ts.map +0 -1
  207. package/dist/types/src/components/Thread/ToggleContainer.stories.d.ts +0 -9
  208. package/dist/types/src/components/Thread/ToggleContainer.stories.d.ts.map +0 -1
  209. package/dist/types/src/components/Thread/index.d.ts +0 -2
  210. package/dist/types/src/components/Thread/index.d.ts.map +0 -1
  211. package/dist/types/src/hooks/email.d.ts +0 -4
  212. package/dist/types/src/hooks/email.d.ts.map +0 -1
  213. package/dist/types/src/hooks/index.d.ts +0 -4
  214. package/dist/types/src/hooks/index.d.ts.map +0 -1
  215. package/dist/types/src/hooks/invocation-handler.d.ts +0 -5
  216. package/dist/types/src/hooks/invocation-handler.d.ts.map +0 -1
  217. package/dist/types/src/hooks/processor.d.ts +0 -65
  218. package/dist/types/src/hooks/processor.d.ts.map +0 -1
  219. package/dist/types/src/hooks/processor.test.d.ts +0 -2
  220. package/dist/types/src/hooks/processor.test.d.ts.map +0 -1
  221. package/dist/types/src/hooks/useLocalTriggerManager.d.ts +0 -3
  222. package/dist/types/src/hooks/useLocalTriggerManager.d.ts.map +0 -1
  223. package/dist/types/src/hooks/useServiceRegistry.d.ts +0 -3
  224. package/dist/types/src/hooks/useServiceRegistry.d.ts.map +0 -1
  225. package/dist/types/src/presets.d.ts +0 -9
  226. package/dist/types/src/presets.d.ts.map +0 -1
  227. package/dist/types/src/testing/testing.d.ts.map +0 -1
  228. package/dist/types/src/tools/function.d.ts +0 -5
  229. package/dist/types/src/tools/function.d.ts.map +0 -1
  230. package/dist/types/src/tools/index.d.ts +0 -3
  231. package/dist/types/src/tools/index.d.ts.map +0 -1
  232. package/dist/types/src/tools/openapi.d.ts +0 -10
  233. package/dist/types/src/tools/openapi.d.ts.map +0 -1
  234. package/dist/types/src/tools/openapi.test.d.ts +0 -2
  235. package/dist/types/src/tools/openapi.test.d.ts.map +0 -1
  236. package/dist/types/src/types/index.d.ts +0 -4
  237. package/dist/types/src/types/index.d.ts.map +0 -1
  238. package/dist/types/src/types/registry.d.ts +0 -9
  239. package/dist/types/src/types/registry.d.ts.map +0 -1
  240. package/dist/types/src/types/schema.d.ts +0 -196
  241. package/dist/types/src/types/schema.d.ts.map +0 -1
  242. package/dist/types/src/types/types.d.ts +0 -18
  243. package/dist/types/src/types/types.d.ts.map +0 -1
  244. package/src/artifacts.stories.tsx +0 -241
  245. package/src/capabilities/ai-client.ts +0 -19
  246. package/src/capabilities/app-graph-builder.ts +0 -156
  247. package/src/capabilities/capabilities.ts +0 -12
  248. package/src/capabilities/intent-resolver.ts +0 -27
  249. package/src/components/ChatContainer/ChatContainer.tsx +0 -117
  250. package/src/components/ChatContainer/index.ts +0 -8
  251. package/src/components/MarkdownViewer/MarkdownViewer.stories.tsx +0 -56
  252. package/src/components/MarkdownViewer/MarkdownViewer.tsx +0 -79
  253. package/src/components/MarkdownViewer/index.ts +0 -5
  254. package/src/components/PromptEditor/PromptEditor.stories.tsx +0 -64
  255. package/src/components/PromptEditor/PromptEditor.tsx +0 -222
  256. package/src/components/PromptEditor/index.ts +0 -5
  257. package/src/components/PromptEditor/prompt-extension.ts +0 -43
  258. package/src/components/PromptEditor/types.tsx +0 -28
  259. package/src/components/ServiceRegistry/ServiceRegistry.stories.tsx +0 -48
  260. package/src/components/ServiceRegistry/ServiceRegistry.tsx +0 -75
  261. package/src/components/ServiceRegistry/index.ts +0 -5
  262. package/src/components/Thread/ScrollContainer.tsx +0 -92
  263. package/src/components/Thread/StatusLine.stories.tsx +0 -52
  264. package/src/components/Thread/StatusLine.tsx +0 -76
  265. package/src/components/Thread/Tabbed.stories.tsx +0 -52
  266. package/src/components/Thread/Tabbed.tsx +0 -72
  267. package/src/components/Thread/Thread.stories.tsx +0 -190
  268. package/src/components/Thread/Thread.tsx +0 -156
  269. package/src/components/Thread/ThreadMessage.tsx +0 -195
  270. package/src/components/Thread/ToggleContainer.stories.tsx +0 -111
  271. package/src/components/Thread/ToggleContainer.tsx +0 -103
  272. package/src/components/Thread/index.ts +0 -5
  273. package/src/hooks/email.ts +0 -49
  274. package/src/hooks/index.ts +0 -8
  275. package/src/hooks/invocation-handler.ts +0 -109
  276. package/src/hooks/processor.test.ts +0 -15
  277. package/src/hooks/processor.ts +0 -201
  278. package/src/hooks/useLocalTriggerManager.ts +0 -82
  279. package/src/hooks/useServiceRegistry.ts +0 -22
  280. package/src/presets.ts +0 -248
  281. package/src/tools/function.ts +0 -47
  282. package/src/tools/index.ts +0 -6
  283. package/src/tools/openapi.test.ts +0 -227
  284. package/src/tools/openapi.ts +0 -331
  285. package/src/types/index.ts +0 -7
  286. package/src/types/registry.ts +0 -89
  287. package/src/types/schema.ts +0 -120
  288. package/src/types/types.ts +0 -21
@@ -1,1368 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import {
3
- AutomationCapabilities
4
- } from "./chunk-ISYLEDVU.mjs";
5
- import {
6
- MockServiceRegistry
7
- } from "./chunk-EVTLHDM2.mjs";
8
- import {
9
- AUTOMATION_PLUGIN
10
- } from "./chunk-X3LPRWIL.mjs";
11
-
12
- // packages/plugins/experimental/plugin-automation/src/components/ChatContainer/ChatContainer.tsx
13
- import React7, { useCallback as useCallback3, useEffect as useEffect6, useMemo as useMemo3, useState as useState7 } from "react";
14
- import { Capabilities, useCapabilities, useCapability, useIntentDispatcher } from "@dxos/app-framework";
15
- import { createSystemPrompt } from "@dxos/artifact";
16
- import { FunctionType as FunctionType2 } from "@dxos/functions";
17
- import { invariant as invariant7 } from "@dxos/invariant";
18
- import { DXN as DXN2, QueueSubspaceTags } from "@dxos/keys";
19
- import { useConfig } from "@dxos/react-client";
20
- import { Filter as Filter2, getSpace, useQuery as useQuery2 } from "@dxos/react-client/echo";
21
- import { useEdgeClient, useQueue } from "@dxos/react-edge-client";
22
- import { StackItem } from "@dxos/react-ui-stack";
23
- import { isNotNullOrUndefined } from "@dxos/util";
24
-
25
- // packages/plugins/experimental/plugin-automation/src/capabilities/index.ts
26
- import { lazy } from "@dxos/app-framework";
27
- var AiClient = lazy(() => import("./ai-client-2ZA4TYFZ.mjs"));
28
- var AppGraphBuilder = lazy(() => import("./app-graph-builder-IYOUCQZT.mjs"));
29
- var IntentResolver = lazy(() => import("./intent-resolver-RQBXW442.mjs"));
30
- var ReactSurface = lazy(() => import("./react-surface-SS5WCRJ2.mjs"));
31
-
32
- // packages/plugins/experimental/plugin-automation/src/hooks/processor.ts
33
- import { batch, computed, signal } from "@preact/signals-core";
34
- import { Message } from "@dxos/artifact";
35
- import { isToolUse, runTools, MixedStreamParser } from "@dxos/assistant";
36
- import { createStatic } from "@dxos/echo-schema";
37
- import { invariant } from "@dxos/invariant";
38
- import { log } from "@dxos/log";
39
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-automation/src/hooks/processor.ts";
40
- var defaultOptions = {
41
- model: "@anthropic/claude-3-5-sonnet-20241022",
42
- systemPrompt: ""
43
- };
44
- var ChatProcessor = class {
45
- constructor(_client, _tools, _extensions, _options = defaultOptions) {
46
- this._client = _client;
47
- this._tools = _tools;
48
- this._extensions = _extensions;
49
- this._options = _options;
50
- this._parser = new MixedStreamParser();
51
- this._pending = signal([]);
52
- this._block = signal(void 0);
53
- this._history = [];
54
- this.streaming = computed(() => this._block.value !== void 0);
55
- this.messages = computed(() => {
56
- const messages = [
57
- ...this._pending.value
58
- ];
59
- if (this._block.value) {
60
- const current = messages.pop();
61
- invariant(current, void 0, {
62
- F: __dxlog_file,
63
- L: 76,
64
- S: this,
65
- A: [
66
- "current",
67
- ""
68
- ]
69
- });
70
- const { content, ...rest } = current;
71
- const message = {
72
- ...rest,
73
- content: [
74
- ...content,
75
- this._block.value
76
- ]
77
- };
78
- messages.push(message);
79
- }
80
- return messages;
81
- });
82
- this._parser.message.on((message) => {
83
- batch(() => {
84
- this._pending.value = [
85
- ...this._pending.value,
86
- message
87
- ];
88
- this._block.value = void 0;
89
- });
90
- });
91
- this._parser.update.on((block) => {
92
- batch(() => {
93
- this._block.value = block;
94
- });
95
- });
96
- }
97
- /**
98
- * Make GPT request.
99
- */
100
- async request(message, options = {}) {
101
- batch(() => {
102
- this._history = options.history ?? [];
103
- this._pending.value = [
104
- createStatic(Message, {
105
- role: "user",
106
- content: [
107
- {
108
- type: "text",
109
- text: message
110
- }
111
- ]
112
- })
113
- ];
114
- this._block.value = void 0;
115
- });
116
- await this._generate();
117
- options.onComplete?.(this._pending.value);
118
- return this._reset();
119
- }
120
- /**
121
- * Cancel pending requests.
122
- * @returns Pending requests (incl. the request message).
123
- */
124
- async cancel() {
125
- log.info("cancelling...", void 0, {
126
- F: __dxlog_file,
127
- L: 132,
128
- S: this,
129
- C: (f, a) => f(...a)
130
- });
131
- this._stream?.abort();
132
- return this._reset();
133
- }
134
- async _reset() {
135
- const messages = this._pending.value;
136
- batch(() => {
137
- this._history = [];
138
- this._pending.value = [];
139
- this._block.value = void 0;
140
- });
141
- return messages;
142
- }
143
- /**
144
- * Generate a response from the AI service.
145
- * Iterates over tool requests.
146
- */
147
- async _generate() {
148
- try {
149
- let more = false;
150
- do {
151
- log.info("requesting...", {
152
- history: this._history.length,
153
- messages: this._pending.value.length
154
- }, {
155
- F: __dxlog_file,
156
- L: 156,
157
- S: this,
158
- C: (f, a) => f(...a)
159
- });
160
- this._stream = await this._client.generate({
161
- ...this._options,
162
- // TODO(burdon): Rename messages or separate history/message.
163
- history: [
164
- ...this._history,
165
- ...this._pending.value
166
- ],
167
- tools: this._tools
168
- });
169
- await this._parser.parse(this._stream);
170
- await this._stream.complete();
171
- log.info("response", {
172
- messages: this._pending.value
173
- }, {
174
- F: __dxlog_file,
175
- L: 169,
176
- S: this,
177
- C: (f, a) => f(...a)
178
- });
179
- more = false;
180
- const message = this._pending.value.at(-1);
181
- invariant(message, void 0, {
182
- F: __dxlog_file,
183
- L: 174,
184
- S: this,
185
- A: [
186
- "message",
187
- ""
188
- ]
189
- });
190
- if (isToolUse(message)) {
191
- log.info("tool request...", void 0, {
192
- F: __dxlog_file,
193
- L: 176,
194
- S: this,
195
- C: (f, a) => f(...a)
196
- });
197
- const response = await runTools({
198
- message: this._pending.value.at(-1),
199
- tools: this._tools ?? [],
200
- extensions: this._extensions
201
- });
202
- log.info("tool response", {
203
- response
204
- }, {
205
- F: __dxlog_file,
206
- L: 183,
207
- S: this,
208
- C: (f, a) => f(...a)
209
- });
210
- switch (response.type) {
211
- case "continue": {
212
- this._pending.value = [
213
- ...this._pending.value,
214
- response.message
215
- ];
216
- more = true;
217
- break;
218
- }
219
- }
220
- }
221
- } while (more);
222
- } catch (err) {
223
- log.catch("request failed", {
224
- err
225
- }, {
226
- F: __dxlog_file,
227
- L: 195,
228
- S: this,
229
- C: (f, a) => f(...a)
230
- });
231
- } finally {
232
- log.info("done", void 0, {
233
- F: __dxlog_file,
234
- L: 197,
235
- S: this,
236
- C: (f, a) => f(...a)
237
- });
238
- this._stream = void 0;
239
- }
240
- }
241
- };
242
-
243
- // packages/plugins/experimental/plugin-automation/src/hooks/useServiceRegistry.ts
244
- import { useEffect, useMemo, useState } from "react";
245
- var useServiceRegistry = (query) => {
246
- const registry = useMemo(() => new MockServiceRegistry(), []);
247
- const [services, setServices] = useState([]);
248
- useEffect(() => {
249
- const t = setTimeout(async () => {
250
- const services2 = await registry.queryServices(query);
251
- setServices(services2);
252
- });
253
- return () => clearTimeout(t);
254
- }, [
255
- query,
256
- registry
257
- ]);
258
- return services;
259
- };
260
-
261
- // packages/plugins/experimental/plugin-automation/src/hooks/useLocalTriggerManager.ts
262
- import { useEffect as useEffect2, useState as useState2 } from "react";
263
- import { Mutex } from "@dxos/async";
264
- import { Context } from "@dxos/context";
265
- import { createSubscriptionTrigger } from "@dxos/functions";
266
- import { FunctionTrigger } from "@dxos/functions";
267
- import { invariant as invariant3 } from "@dxos/invariant";
268
- import { log as log3 } from "@dxos/log";
269
- import { useClient } from "@dxos/react-client";
270
- import { Filter, useQuery } from "@dxos/react-client/echo";
271
-
272
- // packages/plugins/experimental/plugin-automation/src/hooks/invocation-handler.ts
273
- import { sleep } from "@dxos/async";
274
- import { getObjectCore, ResultFormat } from "@dxos/echo-db";
275
- import { FunctionType } from "@dxos/functions";
276
- import { invariant as invariant2 } from "@dxos/invariant";
277
- import { DXN, LOCAL_SPACE_TAG } from "@dxos/keys";
278
- import { log as log2 } from "@dxos/log";
279
-
280
- // packages/plugins/experimental/plugin-automation/src/hooks/useLocalTriggerManager.ts
281
- var registerTriggersMutex = new Mutex();
282
-
283
- // packages/plugins/experimental/plugin-automation/src/tools/function.ts
284
- import { defineTool, ToolResult } from "@dxos/artifact";
285
- import { toEffectSchema } from "@dxos/echo-schema";
286
- import { getInvocationUrl, getUserFunctionUrlInMetadata } from "@dxos/functions";
287
- import { log as log4 } from "@dxos/log";
288
- import { getMeta } from "@dxos/react-client/echo";
289
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-automation/src/tools/function.ts";
290
- var covertFunctionToTool = (fn, edgeUrl, spaceId) => {
291
- if (!fn.description || !fn.inputSchema) {
292
- return void 0;
293
- }
294
- const existingFunctionUrl = getUserFunctionUrlInMetadata(getMeta(fn));
295
- if (!existingFunctionUrl) {
296
- return void 0;
297
- }
298
- const url = getInvocationUrl(existingFunctionUrl, edgeUrl, {
299
- spaceId
300
- });
301
- return defineTool({
302
- name: fn.name,
303
- description: fn.description,
304
- schema: toEffectSchema(fn.inputSchema),
305
- execute: async (input) => {
306
- log4.info("execute function tool", {
307
- name: fn.name,
308
- url,
309
- input
310
- }, {
311
- F: __dxlog_file2,
312
- L: 36,
313
- S: void 0,
314
- C: (f, a) => f(...a)
315
- });
316
- const response = await fetch(url, {
317
- method: "POST",
318
- headers: {
319
- "Content-Type": "application/json"
320
- },
321
- body: JSON.stringify(input)
322
- });
323
- return ToolResult.Success(await response.text());
324
- }
325
- });
326
- };
327
-
328
- // packages/plugins/experimental/plugin-automation/src/tools/openapi.ts
329
- import jsonpointer from "jsonpointer";
330
- import { ToolResult as ToolResult2 } from "@dxos/artifact";
331
- import { JsonSchemaType, normalizeSchema, S, toEffectSchema as toEffectSchema2 } from "@dxos/echo-schema";
332
- import { invariant as invariant4 } from "@dxos/invariant";
333
- import { log as log5 } from "@dxos/log";
334
- import { deepMapValues } from "@dxos/util";
335
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-automation/src/tools/openapi.ts";
336
- var createToolsFromService = async (service) => {
337
- invariant4(service.interfaces?.length === 1 && service.interfaces[0].kind === "api", void 0, {
338
- F: __dxlog_file3,
339
- L: 22,
340
- S: void 0,
341
- A: [
342
- "service.interfaces?.length === 1 && service.interfaces[0].kind === 'api'",
343
- ""
344
- ]
345
- });
346
- const iface = service.interfaces[0];
347
- invariant4(iface.schemaUrl, void 0, {
348
- F: __dxlog_file3,
349
- L: 24,
350
- S: void 0,
351
- A: [
352
- "iface.schemaUrl",
353
- ""
354
- ]
355
- });
356
- invariant4(iface.schemaUrl, void 0, {
357
- F: __dxlog_file3,
358
- L: 25,
359
- S: void 0,
360
- A: [
361
- "iface.schemaUrl",
362
- ""
363
- ]
364
- });
365
- return createToolsFromApi(iface.schemaUrl, {
366
- authorization: iface.authorization
367
- });
368
- };
369
- var createToolsFromApi = async (url, options) => {
370
- const res = await fetch(url);
371
- const spec = await res.json();
372
- log5("spec", {
373
- spec
374
- }, {
375
- F: __dxlog_file3,
376
- L: 32,
377
- S: void 0,
378
- C: (f, a) => f(...a)
379
- });
380
- const tools = [];
381
- for (const [path, pathItem] of Object.entries(spec.paths)) {
382
- if (typeof pathItem !== "object") {
383
- continue;
384
- }
385
- const { ...methods } = pathItem;
386
- for (const [method, m] of Object.entries(methods)) {
387
- const methodItem = m;
388
- log5("methodItem", {
389
- path,
390
- method,
391
- methodItem
392
- }, {
393
- F: __dxlog_file3,
394
- L: 44,
395
- S: void 0,
396
- C: (f, a) => f(...a)
397
- });
398
- const parametersResolved = methodItem.parameters?.map((parameter) => {
399
- const resolved = resolveJsonSchema(parameter, spec);
400
- return resolved;
401
- }) ?? [];
402
- const inputSchema = {
403
- type: "object",
404
- properties: {}
405
- };
406
- const endpointParameters = [];
407
- for (const parameter of parametersResolved) {
408
- log5("parameter", {
409
- parameter
410
- }, {
411
- F: __dxlog_file3,
412
- L: 59,
413
- S: void 0,
414
- C: (f, a) => f(...a)
415
- });
416
- if (options?.authorization?.type === "api-key" && options.authorization.placement.type === "query" && parameter.in === "query" && parameter.name === options.authorization.placement.name) {
417
- continue;
418
- }
419
- endpointParameters.push(parameter);
420
- if (parameter.schema) {
421
- inputSchema.properties[parameter.name] = normalizeSchema(parameter.schema);
422
- } else if (typeof parameter.type === "string") {
423
- const { name, in: _in, required, ...schema } = parameter;
424
- inputSchema.properties[name] = normalizeSchema(schema);
425
- if (required) {
426
- inputSchema.required ??= [];
427
- inputSchema.required.push(name);
428
- }
429
- }
430
- }
431
- log5("inputSchema", {
432
- inputSchema
433
- }, {
434
- F: __dxlog_file3,
435
- L: 84,
436
- S: void 0,
437
- C: (f, a) => f(...a)
438
- });
439
- S.validateSync(JsonSchemaType)(inputSchema);
440
- const description = methodItem.description ?? methodItem.summary;
441
- if (!description) {
442
- log5.warn("no description", {
443
- path,
444
- method
445
- }, {
446
- F: __dxlog_file3,
447
- L: 89,
448
- S: void 0,
449
- C: (f, a) => f(...a)
450
- });
451
- continue;
452
- }
453
- const endpoint = {
454
- document: spec,
455
- path,
456
- method,
457
- parameters: endpointParameters,
458
- authorization: options?.authorization
459
- };
460
- tools.push({
461
- name: getToolName(path, method, methodItem),
462
- description: options?.instructions ? `${options.instructions}
463
-
464
- ${description}` : description,
465
- parameters: inputSchema,
466
- execute: async (input) => {
467
- const response = await callApiEndpoint(endpoint, input);
468
- return ToolResult2.Success(response);
469
- }
470
- });
471
- }
472
- }
473
- return tools;
474
- };
475
- var getToolName = (path, method, methodItem) => {
476
- if (methodItem.operationId) {
477
- return methodItem.operationId;
478
- }
479
- let name = `${method.toLowerCase()}_${path.replaceAll(/[{}/]/g, "_")}`;
480
- while (name.length > MAX_TOOL_NAME_LENGTH) {
481
- const lengthBefore = name.length;
482
- for (const word of GENERIC_WORDS) {
483
- if (name.includes(word)) {
484
- name = name.replace(word, "");
485
- break;
486
- }
487
- }
488
- name = name.replaceAll("__", "_").replace(/_$/, "");
489
- const lengthAfter = name.length;
490
- if (lengthBefore === lengthAfter) {
491
- break;
492
- }
493
- }
494
- name = name.replaceAll("__", "_").replace(/_$/, "").replace(/^_/, "");
495
- return name.slice(0, MAX_TOOL_NAME_LENGTH);
496
- };
497
- var MAX_TOOL_NAME_LENGTH = 64;
498
- var GENERIC_WORDS = [
499
- "services",
500
- "service",
501
- "api",
502
- "rest",
503
- "endpoint",
504
- "get",
505
- "post",
506
- "put",
507
- "delete",
508
- "patch",
509
- "head",
510
- "options",
511
- "trace",
512
- "service",
513
- "api",
514
- "endpoint"
515
- ];
516
- var callApiEndpoint = async (endpoint, input) => {
517
- log5.info("endpoint", {
518
- method: endpoint.method,
519
- name: endpoint.path,
520
- input
521
- }, {
522
- F: __dxlog_file3,
523
- L: 173,
524
- S: void 0,
525
- C: (f, a) => f(...a)
526
- });
527
- let url = getEndpointUrl(endpoint);
528
- const request = {
529
- method: endpoint.method,
530
- headers: {}
531
- };
532
- const query = new URLSearchParams();
533
- let body;
534
- for (const parameter of endpoint.parameters) {
535
- if (input[parameter.name] === void 0) {
536
- continue;
537
- }
538
- switch (parameter.in) {
539
- case "header": {
540
- if (parameter.example) {
541
- request.headers[parameter.name] = parameter.default;
542
- }
543
- break;
544
- }
545
- case "path": {
546
- url = url.replace(`{${parameter.name}}`, encodeURIComponent(input[parameter.name]));
547
- break;
548
- }
549
- case "body": {
550
- const value = input[parameter.name];
551
- const effectSchema = toEffectSchema2(parameter.schema);
552
- S.validateSync(effectSchema)(value);
553
- if (body) {
554
- throw new Error(`Duplicate body parameter: ${parameter.name}`);
555
- }
556
- body = value;
557
- break;
558
- }
559
- case "query": {
560
- query.set(parameter.name, input[parameter.name]);
561
- break;
562
- }
563
- }
564
- }
565
- if (endpoint.authorization?.type === "api-key" && endpoint.authorization.placement.type === "authorization-header" || endpoint.authorization?.type === "oauth") {
566
- request.headers.Authorization = await resolveAuthorization(endpoint.authorization);
567
- } else if (endpoint.authorization?.type === "api-key" && endpoint.authorization.placement.type === "query") {
568
- query.set(endpoint.authorization.placement.name, endpoint.authorization.key);
569
- }
570
- if (query.size > 0) {
571
- url += `?${query.toString()}`;
572
- }
573
- if (body) {
574
- request.body = JSON.stringify(body);
575
- request.headers["Content-Type"] = "application/json";
576
- }
577
- log5.info("request", {
578
- url,
579
- request
580
- }, {
581
- F: __dxlog_file3,
582
- L: 236,
583
- S: void 0,
584
- C: (f, a) => f(...a)
585
- });
586
- const response = await fetch(url, request);
587
- log5.info("response", {
588
- ok: response.ok,
589
- status: response.status,
590
- statusText: response.statusText
591
- }, {
592
- F: __dxlog_file3,
593
- L: 239,
594
- S: void 0,
595
- C: (f, a) => f(...a)
596
- });
597
- if (response.ok) {
598
- const contentType = response.headers.get("Content-Type");
599
- if (contentType?.includes("application/json")) {
600
- return await response.json();
601
- } else {
602
- return await response.text();
603
- }
604
- } else {
605
- if (response.headers.get("Content-Type")?.includes("application/json")) {
606
- const responseBody = await response.text();
607
- let error;
608
- try {
609
- error = JSON.parse(responseBody);
610
- } catch {
611
- error = responseBody;
612
- }
613
- log5.error("error", {
614
- error
615
- }, {
616
- F: __dxlog_file3,
617
- L: 257,
618
- S: void 0,
619
- C: (f, a) => f(...a)
620
- });
621
- throw new Error(error.message);
622
- } else {
623
- const error = await response.text();
624
- log5.error("error", {
625
- error
626
- }, {
627
- F: __dxlog_file3,
628
- L: 261,
629
- S: void 0,
630
- C: (f, a) => f(...a)
631
- });
632
- throw new Error(error);
633
- }
634
- }
635
- };
636
- var getEndpointUrl = (endpoint) => {
637
- let url = "";
638
- if (isV3_1(endpoint.document) && endpoint.document.servers && endpoint.document.servers.length > 0) {
639
- url = endpoint.document.servers[0].url;
640
- } else {
641
- invariant4(!isV3_1(endpoint.document), void 0, {
642
- F: __dxlog_file3,
643
- L: 272,
644
- S: void 0,
645
- A: [
646
- "!isV3_1(endpoint.document)",
647
- ""
648
- ]
649
- });
650
- url = `${endpoint.document.schemes?.[0] ?? "https"}://${endpoint.document.host}`;
651
- }
652
- if (!isV3_1(endpoint.document) && endpoint.document.basePath) {
653
- url += endpoint.document.basePath;
654
- }
655
- url += endpoint.path;
656
- return url;
657
- };
658
- var resolveAuthorization = async (authorization) => {
659
- switch (authorization.type) {
660
- case "api-key": {
661
- invariant4(authorization.placement.type === "authorization-header", void 0, {
662
- F: __dxlog_file3,
663
- L: 288,
664
- S: void 0,
665
- A: [
666
- "authorization.placement.type === 'authorization-header'",
667
- ""
668
- ]
669
- });
670
- return `Bearer ${authorization.key}`;
671
- }
672
- case "oauth": {
673
- const response = await fetch(authorization.tokenUrl, {
674
- method: "POST",
675
- headers: {
676
- "Content-Type": "application/x-www-form-urlencoded"
677
- },
678
- body: `grant_type=${authorization.grantType}&client_id=${authorization.clientId}&client_secret=${authorization.clientSecret}`
679
- });
680
- const data = await response.json();
681
- return `Bearer ${data.access_token}`;
682
- }
683
- default: {
684
- throw new Error(`Unknown authorization type: ${authorization.type}`);
685
- }
686
- }
687
- };
688
- var resolveJsonSchema = (schema, base) => {
689
- return deepMapValues(schema, (value, recurse) => {
690
- if (typeof value === "object" && value !== null && "$ref" in value && typeof value.$ref === "string") {
691
- if (value.$ref.startsWith("#")) {
692
- const resolved = jsonpointer.get(base, value.$ref.slice(1));
693
- if (resolved) {
694
- return recurse(resolved);
695
- } else {
696
- log5.warn("unresolved", {
697
- ref: value.$ref,
698
- base
699
- }, {
700
- F: __dxlog_file3,
701
- L: 321,
702
- S: void 0,
703
- C: (f, a) => f(...a)
704
- });
705
- }
706
- }
707
- }
708
- return recurse(value);
709
- });
710
- };
711
- var isV3_1 = (document) => {
712
- return document.openapi === "3.0.1";
713
- };
714
-
715
- // packages/plugins/experimental/plugin-automation/src/components/Thread/Thread.tsx
716
- import React6, { useCallback as useCallback2, useMemo as useMemo2, useRef as useRef3, useState as useState6 } from "react";
717
- import { IconButton, Input, useTranslation } from "@dxos/react-ui";
718
- import { Spinner } from "@dxos/react-ui-sfx";
719
- import { mx as mx6 } from "@dxos/react-ui-theme";
720
-
721
- // packages/plugins/experimental/plugin-automation/src/components/Thread/ScrollContainer.tsx
722
- import React, { forwardRef, useCallback, useEffect as useEffect3, useImperativeHandle, useRef, useState as useState3 } from "react";
723
- import { invariant as invariant5 } from "@dxos/invariant";
724
- import { mx } from "@dxos/react-ui-theme";
725
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-automation/src/components/Thread/ScrollContainer.tsx";
726
- var ScrollContainer = /* @__PURE__ */ forwardRef(({ children, classNames }, forwardedRef) => {
727
- const containerRef = useRef(null);
728
- const autoScrollRef = useRef(false);
729
- useImperativeHandle(forwardedRef, () => ({
730
- scrollToBottom: () => {
731
- invariant5(containerRef.current, void 0, {
732
- F: __dxlog_file4,
733
- L: 41,
734
- S: void 0,
735
- A: [
736
- "containerRef.current",
737
- ""
738
- ]
739
- });
740
- containerRef.current.scrollTo({
741
- top: containerRef.current.scrollHeight,
742
- behavior: "smooth"
743
- });
744
- autoScrollRef.current = false;
745
- }
746
- }), []);
747
- const [sticky, setSticky] = useState3(true);
748
- useEffect3(() => {
749
- if (!sticky || !containerRef.current) {
750
- return;
751
- }
752
- autoScrollRef.current = true;
753
- containerRef.current.scrollTo({
754
- top: containerRef.current.scrollHeight,
755
- behavior: "smooth"
756
- });
757
- }, [
758
- children
759
- ]);
760
- useEffect3(() => {
761
- invariant5(containerRef.current, void 0, {
762
- F: __dxlog_file4,
763
- L: 62,
764
- S: void 0,
765
- A: [
766
- "containerRef.current",
767
- ""
768
- ]
769
- });
770
- const handleScrollEnd = () => {
771
- autoScrollRef.current = false;
772
- };
773
- containerRef.current.addEventListener("scrollend", handleScrollEnd);
774
- return () => containerRef.current?.removeEventListener("scrollend", handleScrollEnd);
775
- }, []);
776
- const handleScroll = useCallback((ev) => {
777
- if (autoScrollRef.current) {
778
- return;
779
- }
780
- const { scrollTop, clientHeight, scrollHeight } = ev.currentTarget;
781
- const sticky2 = scrollTop + clientHeight >= scrollHeight;
782
- setSticky(sticky2);
783
- }, []);
784
- return /* @__PURE__ */ React.createElement("div", {
785
- ref: containerRef,
786
- onScroll: handleScroll,
787
- className: mx("flex flex-col grow overflow-y-scroll scrollbar-none", classNames)
788
- }, children);
789
- });
790
-
791
- // packages/plugins/experimental/plugin-automation/src/components/Thread/ThreadMessage.tsx
792
- import React5 from "react";
793
- import { invariant as invariant6 } from "@dxos/invariant";
794
- import { Button, ButtonGroup, Icon as Icon2 } from "@dxos/react-ui";
795
- import { Json } from "@dxos/react-ui-syntax-highlighter";
796
- import { mx as mx5 } from "@dxos/react-ui-theme";
797
- import { safeParseJson } from "@dxos/util";
798
-
799
- // packages/plugins/experimental/plugin-automation/src/components/Thread/StatusLine.tsx
800
- import React2, { useEffect as useEffect4, useRef as useRef2, useState as useState4 } from "react";
801
- import { mx as mx2 } from "@dxos/react-ui-theme";
802
- var emptyLines = [];
803
- var StatusLine = ({ classNames, line = -1, lines = emptyLines, transition = 300, advance = 1e3, autoAdvance }) => {
804
- const containerRef = useRef2(null);
805
- const [currentLine, setCurrentLine] = useState4(line);
806
- useEffect4(() => {
807
- setCurrentLine(line);
808
- }, [
809
- line
810
- ]);
811
- useEffect4(() => {
812
- if (!autoAdvance) {
813
- return;
814
- }
815
- const next = () => {
816
- setCurrentLine((prev) => {
817
- if (prev === lines.length - 1) {
818
- clearInterval(interval);
819
- return prev;
820
- }
821
- return prev + 1;
822
- });
823
- };
824
- next();
825
- const interval = setInterval(next, advance);
826
- return () => clearInterval(interval);
827
- }, [
828
- lines.length,
829
- autoAdvance,
830
- advance
831
- ]);
832
- useEffect4(() => {
833
- if (containerRef.current) {
834
- containerRef.current.style.transition = `transform ${transition}ms ease-in-out`;
835
- containerRef.current.style.transform = `translateY(-${currentLine * 24}px)`;
836
- }
837
- }, [
838
- currentLine
839
- ]);
840
- return /* @__PURE__ */ React2.createElement("div", {
841
- className: mx2("relative h-[24px] overflow-hidden", classNames)
842
- }, /* @__PURE__ */ React2.createElement("div", {
843
- ref: containerRef,
844
- className: "h-[24px]"
845
- }, /* @__PURE__ */ React2.createElement("div", {
846
- className: "flex flex-col"
847
- }, lines.map((line2, i) => /* @__PURE__ */ React2.createElement("div", {
848
- key: i,
849
- className: mx2("flex h-[24px] items-center")
850
- }, /* @__PURE__ */ React2.createElement("span", {
851
- className: "truncate"
852
- }, line2))))));
853
- };
854
-
855
- // packages/plugins/experimental/plugin-automation/src/components/Thread/ToggleContainer.tsx
856
- import React3, { useEffect as useEffect5, useState as useState5 } from "react";
857
- import { Icon } from "@dxos/react-ui";
858
- import { mx as mx3 } from "@dxos/react-ui-theme";
859
- var ToggleContainer = ({ title, icon, toggle, defaultOpen, duration = 400, shrinkX = false, children, classNames }) => {
860
- const [expand, setExpand] = useState5(defaultOpen || !toggle);
861
- const [expandX, setExpandX] = useState5(shrinkX ? expand : true);
862
- const [expandY, setExpandY] = useState5(expand);
863
- useEffect5(() => {
864
- let t;
865
- if (expand) {
866
- if (shrinkX) {
867
- setExpandX(true);
868
- }
869
- t = setTimeout(() => {
870
- setExpandY(true);
871
- }, shrinkX ? duration : 0);
872
- } else {
873
- setExpandY(false);
874
- if (shrinkX) {
875
- t = setTimeout(() => {
876
- setExpandX(false);
877
- }, duration);
878
- }
879
- }
880
- return () => clearTimeout(t);
881
- }, [
882
- expand
883
- ]);
884
- return /* @__PURE__ */ React3.createElement("div", {
885
- className: mx3("overflow-hidden", classNames)
886
- }, title && /* @__PURE__ */ React3.createElement("div", {
887
- className: "flex gap-1 py-1 items-center text-sm text-subdued cursor-pointer select-none",
888
- onClick: toggle ? () => setExpand((open) => !open) : void 0
889
- }, toggle && /* @__PURE__ */ React3.createElement("div", {
890
- className: "flex w-[24px] h-[24px] items-center justify-center"
891
- }, /* @__PURE__ */ React3.createElement(Icon, {
892
- size: 4,
893
- icon: "ph--caret-right--regular",
894
- style: {
895
- transitionDuration: `${shrinkX ? duration * 2 : duration}ms`
896
- },
897
- classNames: [
898
- "transition transition-transform ease-in-out",
899
- expand ? "rotate-90" : "transform-none"
900
- ]
901
- })), /* @__PURE__ */ React3.createElement("div", {
902
- className: "flex-1 pis-1 pie-1 truncate"
903
- }, title), icon), /* @__PURE__ */ React3.createElement("div", {
904
- style: {
905
- transitionDuration: `${duration}ms`
906
- },
907
- className: mx3("grid transition-[grid-template-columns] ease-in-out", expandX ? "grid-cols-[1fr]" : "grid-cols-[0fr]")
908
- }, /* @__PURE__ */ React3.createElement("div", {
909
- className: "overflow-hidden"
910
- }, /* @__PURE__ */ React3.createElement("div", {
911
- style: {
912
- transitionDuration: `${duration}ms`
913
- },
914
- className: mx3("grid transition-[grid-template-rows] ease-in-out", expandY ? "grid-rows-[1fr]" : "grid-rows-[0fr]")
915
- }, /* @__PURE__ */ React3.createElement("div", {
916
- className: mx3("flex overflow-hidden transition-opacity")
917
- }, children)))));
918
- };
919
-
920
- // packages/plugins/experimental/plugin-automation/src/components/MarkdownViewer/MarkdownViewer.tsx
921
- import React4 from "react";
922
- import ReactMarkdown from "react-markdown";
923
- import { SyntaxHighlighter } from "@dxos/react-ui-syntax-highlighter";
924
- import { mx as mx4 } from "@dxos/react-ui-theme";
925
- import { omit } from "@dxos/util";
926
- var MarkdownViewer = ({ classNames, content = "" }) => {
927
- return /* @__PURE__ */ React4.createElement("div", {
928
- className: mx4("space-y-2", classNames)
929
- }, /* @__PURE__ */ React4.createElement(ReactMarkdown, {
930
- components: {
931
- a: ({ node, children, href, ...props }) => /* @__PURE__ */ React4.createElement("a", {
932
- href,
933
- className: "text-primary-500 hover:text-primary-500",
934
- target: "_blank",
935
- rel: "noopener noreferrer",
936
- ...props
937
- }, children),
938
- ol: ({ node, children, ...props }) => /* @__PURE__ */ React4.createElement("ol", {
939
- className: "leading-tight list-decimal pl-6",
940
- ...omit(props, [
941
- "ordered"
942
- ])
943
- }, children),
944
- ul: ({ node, children, ...props }) => /* @__PURE__ */ React4.createElement("ul", {
945
- className: "leading-tight list-disc pl-6",
946
- ...omit(props, [
947
- "ordered"
948
- ])
949
- }, children),
950
- li: ({ node, children, ...props }) => /* @__PURE__ */ React4.createElement("li", {
951
- className: "",
952
- ...omit(props, [
953
- "ordered"
954
- ])
955
- }, children),
956
- blockquote: ({ node, children, ...props }) => /* @__PURE__ */ React4.createElement("blockquote", {
957
- className: "border-l-4 border-primary-500 pl-4 my-4 text-primary-500",
958
- ...props
959
- }, children),
960
- code: ({ children, className }) => {
961
- const [_, language] = /language-(\w+)/.exec(className || "") || [];
962
- return /* @__PURE__ */ React4.createElement(SyntaxHighlighter, {
963
- PreTag: "div",
964
- language,
965
- className: "p-0"
966
- }, children);
967
- }
968
- }
969
- }, content));
970
- };
971
-
972
- // packages/plugins/experimental/plugin-automation/src/components/Thread/ThreadMessage.tsx
973
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-automation/src/components/Thread/ThreadMessage.tsx";
974
- var ThreadMessage = ({ classNames, message, collapse, debug, onSuggest, onDelete }) => {
975
- if (typeof message !== "object") {
976
- return /* @__PURE__ */ React5.createElement("div", {
977
- className: mx5(classNames)
978
- }, message);
979
- }
980
- const { role, content = [] } = message;
981
- const tools = content.filter((block) => block.type === "tool_use" || block.type === "tool_result");
982
- if (collapse && tools.length > 0) {
983
- let request;
984
- const lines = tools.map((tool) => {
985
- switch (tool.type) {
986
- case "tool_use": {
987
- request = tool;
988
- return `Calling ${tool.name}...`;
989
- }
990
- case "tool_result": {
991
- if (!request) {
992
- return "Error";
993
- }
994
- return `Processed ${request.name}`;
995
- }
996
- default:
997
- return "Error";
998
- }
999
- });
1000
- return /* @__PURE__ */ React5.createElement("div", {
1001
- className: mx5("flex", classNames)
1002
- }, /* @__PURE__ */ React5.createElement("div", {
1003
- className: "w-full p-1 px-2 overflow-hidden rounded-md bg-base"
1004
- }, /* @__PURE__ */ React5.createElement(ToggleContainer, {
1005
- title: /* @__PURE__ */ React5.createElement(StatusLine, {
1006
- lines,
1007
- autoAdvance: true
1008
- }),
1009
- toggle: true
1010
- }, /* @__PURE__ */ React5.createElement(Json, {
1011
- data: content[content.length - 1],
1012
- classNames: "!p-1 text-xs"
1013
- }))));
1014
- }
1015
- return /* @__PURE__ */ React5.createElement("div", {
1016
- className: mx5("flex flex-col shrink-0 gap-2")
1017
- }, debug && /* @__PURE__ */ React5.createElement("div", {
1018
- className: "text-xs text-subdued"
1019
- }, message.id, " ", onDelete && /* @__PURE__ */ React5.createElement("span", {
1020
- className: "cursor-pointer underline",
1021
- onClick: () => onDelete(message.id)
1022
- }, "delete")), content.map((block, idx) => /* @__PURE__ */ React5.createElement("div", {
1023
- key: idx,
1024
- className: mx5("flex", classNames, block.type === "text" && role === "user" && "justify-end")
1025
- }, /* @__PURE__ */ React5.createElement(Block, {
1026
- role,
1027
- block,
1028
- onSuggest: onSuggest ?? (() => {
1029
- })
1030
- }))));
1031
- };
1032
- var Block = ({ block, role, onSuggest }) => {
1033
- const Component = componentMap[block.type] ?? componentMap.default;
1034
- return /* @__PURE__ */ React5.createElement("div", {
1035
- className: mx5("p-1 px-2 overflow-hidden rounded-md", (block.type !== "text" || block.disposition) && "w-full bg-base", block.type === "text" && role === "user" && "bg-blue-200 dark:bg-blue-800")
1036
- }, /* @__PURE__ */ React5.createElement(Component, {
1037
- block,
1038
- onSuggest
1039
- }));
1040
- };
1041
- var titles = {
1042
- ["cot"]: "Chain of thought",
1043
- // TODO(burdon): Only show if debugging.
1044
- ["tool_use"]: "Tool request",
1045
- ["tool_result"]: "Tool result",
1046
- ["artifact"]: "Artifact"
1047
- };
1048
- var componentMap = {
1049
- text: ({ block }) => {
1050
- invariant6(block.type === "text", void 0, {
1051
- F: __dxlog_file5,
1052
- L: 128,
1053
- S: void 0,
1054
- A: [
1055
- "block.type === 'text'",
1056
- ""
1057
- ]
1058
- });
1059
- const title = block.disposition ? titles[block.disposition] : void 0;
1060
- if (!title) {
1061
- return /* @__PURE__ */ React5.createElement(MarkdownViewer, {
1062
- content: block.text,
1063
- classNames: [
1064
- block.disposition === "cot" && "text-sm text-subdued"
1065
- ]
1066
- });
1067
- }
1068
- return /* @__PURE__ */ React5.createElement(ToggleContainer, {
1069
- title,
1070
- icon: block.pending ? /* @__PURE__ */ React5.createElement(Icon2, {
1071
- icon: "ph--circle-notch--regular",
1072
- classNames: "text-subdued ml-2 animate-spin",
1073
- size: 4
1074
- }) : void 0,
1075
- defaultOpen: block.disposition === "cot",
1076
- toggle: true
1077
- }, /* @__PURE__ */ React5.createElement(MarkdownViewer, {
1078
- content: block.text,
1079
- classNames: [
1080
- block.disposition === "cot" && "text-sm text-subdued"
1081
- ]
1082
- }));
1083
- },
1084
- json: ({ block, onSuggest }) => {
1085
- invariant6(block.type === "json", void 0, {
1086
- F: __dxlog_file5,
1087
- L: 153,
1088
- S: void 0,
1089
- A: [
1090
- "block.type === 'json'",
1091
- ""
1092
- ]
1093
- });
1094
- switch (block.disposition) {
1095
- case "suggest": {
1096
- const { text = "" } = safeParseJson(block.json ?? "{}") ?? {};
1097
- return /* @__PURE__ */ React5.createElement(Button, {
1098
- onClick: () => onSuggest(text)
1099
- }, text);
1100
- }
1101
- case "select": {
1102
- const { options = [] } = safeParseJson(block.json ?? "{}") ?? {};
1103
- return /* @__PURE__ */ React5.createElement(ButtonGroup, null, options.map((option) => /* @__PURE__ */ React5.createElement(Button, {
1104
- key: option,
1105
- onClick: () => onSuggest(option)
1106
- }, option)));
1107
- }
1108
- default: {
1109
- const title = block.disposition ? titles[block.disposition] : void 0;
1110
- return /* @__PURE__ */ React5.createElement(ToggleContainer, {
1111
- title: title ?? "JSON",
1112
- toggle: true
1113
- }, /* @__PURE__ */ React5.createElement(Json, {
1114
- data: safeParseJson(block.json ?? block),
1115
- classNames: "!p-1 text-xs"
1116
- }));
1117
- }
1118
- }
1119
- },
1120
- default: ({ block }) => {
1121
- let title = titles[block.type];
1122
- if (block.type === "tool_use") {
1123
- title = `Tool [${block.name}]`;
1124
- }
1125
- return /* @__PURE__ */ React5.createElement(ToggleContainer, {
1126
- title: title ?? "JSON",
1127
- toggle: true
1128
- }, /* @__PURE__ */ React5.createElement(Json, {
1129
- data: block,
1130
- classNames: "!p-1 text-xs"
1131
- }));
1132
- }
1133
- };
1134
-
1135
- // packages/plugins/experimental/plugin-automation/src/components/Thread/Thread.tsx
1136
- var Thread = ({ messages, streaming, collapse, debug, onSubmit, onStop, onSuggest, onDelete }) => {
1137
- const { t } = useTranslation(AUTOMATION_PLUGIN);
1138
- const scroller = useRef3(null);
1139
- const [text, setText] = useState6("");
1140
- const handleKeyDown = useCallback2((ev) => {
1141
- switch (ev.key) {
1142
- case "Escape": {
1143
- setText("");
1144
- break;
1145
- }
1146
- case "Enter": {
1147
- const value = text.trim();
1148
- if (value.length > 0) {
1149
- scroller.current?.scrollToBottom();
1150
- onSubmit?.(value);
1151
- setText("");
1152
- }
1153
- break;
1154
- }
1155
- }
1156
- }, [
1157
- text
1158
- ]);
1159
- const { messages: lines = [] } = useMemo2(() => {
1160
- if (!collapse) {
1161
- return {
1162
- messages: messages ?? []
1163
- };
1164
- }
1165
- return (messages ?? []).reduce(({ current, messages: messages2 }, message) => {
1166
- let i = 0;
1167
- for (const block of message.content) {
1168
- switch (block.type) {
1169
- case "tool_use":
1170
- case "tool_result": {
1171
- if (current) {
1172
- current.content.push(block);
1173
- } else {
1174
- current = {
1175
- id: [
1176
- message.id,
1177
- i
1178
- ].join("_"),
1179
- role: message.role,
1180
- content: [
1181
- block
1182
- ]
1183
- };
1184
- messages2.push(current);
1185
- }
1186
- break;
1187
- }
1188
- case "text":
1189
- default: {
1190
- current = void 0;
1191
- messages2.push({
1192
- id: [
1193
- message.id,
1194
- i
1195
- ].join("_"),
1196
- role: message.role,
1197
- content: [
1198
- block
1199
- ]
1200
- });
1201
- break;
1202
- }
1203
- }
1204
- i++;
1205
- }
1206
- return {
1207
- current,
1208
- messages: messages2
1209
- };
1210
- }, {
1211
- messages: []
1212
- });
1213
- }, [
1214
- messages,
1215
- collapse
1216
- ]);
1217
- return /* @__PURE__ */ React6.createElement("div", {
1218
- className: "flex flex-col grow overflow-hidden"
1219
- }, /* @__PURE__ */ React6.createElement(ScrollContainer, {
1220
- ref: scroller,
1221
- classNames: "py-2 gap-2 overflow-x-hidden"
1222
- }, lines.map((message) => /* @__PURE__ */ React6.createElement(ThreadMessage, {
1223
- key: message.id,
1224
- classNames: "px-4",
1225
- message,
1226
- collapse,
1227
- debug,
1228
- onSuggest,
1229
- onDelete
1230
- }))), onSubmit && /* @__PURE__ */ React6.createElement("div", {
1231
- className: "flex p-4 gap-3 items-center"
1232
- }, /* @__PURE__ */ React6.createElement(Spinner, {
1233
- active: streaming
1234
- }), /* @__PURE__ */ React6.createElement(Input.Root, null, /* @__PURE__ */ React6.createElement(Input.TextInput, {
1235
- autoFocus: true,
1236
- classNames: "px-2 bg-base rounded",
1237
- placeholder: t("chat input placeholder"),
1238
- value: text,
1239
- onChange: (ev) => setText(ev.target.value),
1240
- onKeyDown: handleKeyDown
1241
- })), onStop && /* @__PURE__ */ React6.createElement(IconButton, {
1242
- disabled: !streaming,
1243
- classNames: mx6("!p-1 !opacity-20 transition", streaming && "!opacity-80"),
1244
- variant: "ghost",
1245
- size: 5,
1246
- onClick: onStop,
1247
- icon: "ph--x--regular",
1248
- label: t("chat stop"),
1249
- iconOnly: true
1250
- })));
1251
- };
1252
-
1253
- // packages/plugins/experimental/plugin-automation/src/components/ChatContainer/ChatContainer.tsx
1254
- var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-automation/src/components/ChatContainer/ChatContainer.tsx";
1255
- var ChatContainer = ({ chat, role }) => {
1256
- const config = useConfig();
1257
- const space = getSpace(chat);
1258
- const aiClient = useCapability(AutomationCapabilities.AiClient);
1259
- const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);
1260
- const globalTools = useCapabilities(Capabilities.Tools);
1261
- const functions = useQuery2(space, Filter2.schema(FunctionType2));
1262
- const serviceRegistry = useMemo3(() => new MockServiceRegistry(), []);
1263
- const [serviceTools, setServiceTools] = useState7([]);
1264
- useEffect6(() => {
1265
- queueMicrotask(async () => {
1266
- const services = await serviceRegistry.queryServices({});
1267
- const tools2 = await Promise.all(services.map((service) => createToolsFromService(service)));
1268
- setServiceTools(tools2.flat());
1269
- });
1270
- }, []);
1271
- const tools = useMemo3(() => [
1272
- ...globalTools.flat(),
1273
- ...artifactDefinitions.flatMap((definition) => definition.tools),
1274
- ...functions.map((fn) => covertFunctionToTool(fn, config.values.runtime?.services?.edge?.url ?? "", space?.id)).filter(isNotNullOrUndefined),
1275
- ...serviceTools
1276
- ], [
1277
- globalTools,
1278
- artifactDefinitions,
1279
- functions,
1280
- serviceTools,
1281
- space?.id
1282
- ]);
1283
- const systemPrompt = useMemo3(() => createSystemPrompt({
1284
- artifacts: artifactDefinitions.map((definition) => definition.instructions)
1285
- }), [
1286
- artifactDefinitions
1287
- ]);
1288
- const { dispatchPromise: dispatch } = useIntentDispatcher();
1289
- const processor = useMemo3(() => new ChatProcessor(aiClient, tools, {
1290
- space,
1291
- dispatch
1292
- }, {
1293
- model: "@anthropic/claude-3-5-sonnet-20241022",
1294
- systemPrompt
1295
- }), [
1296
- aiClient,
1297
- tools,
1298
- space,
1299
- dispatch,
1300
- systemPrompt
1301
- ]);
1302
- const queueDxn = useMemo3(() => new DXN2(DXN2.kind.QUEUE, [
1303
- QueueSubspaceTags.DATA,
1304
- space.id,
1305
- chat.queue.dxn.parts.at(-1)
1306
- ]), [
1307
- chat.queue.dxn
1308
- ]);
1309
- const edgeClient = useEdgeClient();
1310
- const messageQueue = useQueue(edgeClient, queueDxn);
1311
- const messages = [
1312
- ...messageQueue?.items ?? [],
1313
- ...processor.messages.value
1314
- ];
1315
- const handleSubmit = useCallback3(async (message) => {
1316
- if (processor.streaming.value) {
1317
- await processor.cancel();
1318
- }
1319
- invariant7(messageQueue, void 0, {
1320
- F: __dxlog_file6,
1321
- L: 95,
1322
- S: void 0,
1323
- A: [
1324
- "messageQueue",
1325
- ""
1326
- ]
1327
- });
1328
- await processor.request(message, {
1329
- history: messageQueue.items,
1330
- onComplete: (messages2) => messageQueue.append(messages2)
1331
- });
1332
- }, [
1333
- processor,
1334
- messageQueue
1335
- ]);
1336
- const handleStop = useCallback3(() => {
1337
- if (processor.streaming.value) {
1338
- void processor.cancel();
1339
- }
1340
- }, [
1341
- processor
1342
- ]);
1343
- return /* @__PURE__ */ React7.createElement(StackItem.Content, {
1344
- toolbar: false,
1345
- role
1346
- }, /* @__PURE__ */ React7.createElement(Thread, {
1347
- messages,
1348
- streaming: processor.streaming.value,
1349
- onSubmit: handleSubmit,
1350
- onStop: handleStop
1351
- }));
1352
- };
1353
-
1354
- // packages/plugins/experimental/plugin-automation/src/components/ChatContainer/index.ts
1355
- var ChatContainer_default = ChatContainer;
1356
-
1357
- export {
1358
- useServiceRegistry,
1359
- MarkdownViewer,
1360
- Thread,
1361
- ChatContainer,
1362
- ChatContainer_default,
1363
- AiClient,
1364
- AppGraphBuilder,
1365
- IntentResolver,
1366
- ReactSurface
1367
- };
1368
- //# sourceMappingURL=chunk-WISKXX7U.mjs.map