@dxos/plugin-automation 0.7.5-main.ff8607b → 0.7.5-staging.2ff1350

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 (301) hide show
  1. package/dist/lib/browser/AutomationPanel-NCKK3CFN.mjs +8 -0
  2. package/dist/lib/browser/AutomationPanel-NCKK3CFN.mjs.map +7 -0
  3. package/dist/lib/browser/ChatContainer-AZPLZJ5H.mjs +12 -0
  4. package/dist/lib/browser/ChatContainer-AZPLZJ5H.mjs.map +7 -0
  5. package/dist/lib/browser/ai-client-T2PBJISL.mjs +22 -0
  6. package/dist/lib/browser/ai-client-T2PBJISL.mjs.map +7 -0
  7. package/dist/lib/browser/app-graph-builder-F22H4YBQ.mjs +111 -0
  8. package/dist/lib/browser/app-graph-builder-F22H4YBQ.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-67KDIIM6.mjs +15 -0
  10. package/dist/lib/browser/chunk-67KDIIM6.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-DQ7ZSYJJ.mjs → chunk-HZSTXZWK.mjs} +3 -1
  12. package/dist/lib/browser/chunk-HZSTXZWK.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-L2YLAKCS.mjs +151 -0
  14. package/dist/lib/browser/chunk-L2YLAKCS.mjs.map +7 -0
  15. package/dist/lib/{node-esm/AutomationPanel-MW42U6I4.mjs → browser/chunk-LJ7F4KDM.mjs} +26 -15
  16. package/dist/lib/browser/chunk-LJ7F4KDM.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-M4MWUOUC.mjs +382 -0
  18. package/dist/lib/browser/chunk-M4MWUOUC.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-U435IUIA.mjs +1775 -0
  20. package/dist/lib/browser/chunk-U435IUIA.mjs.map +7 -0
  21. package/dist/lib/browser/index.mjs +127 -42
  22. package/dist/lib/browser/index.mjs.map +4 -4
  23. package/dist/lib/browser/intent-resolver-MONKAKTY.mjs +30 -0
  24. package/dist/lib/browser/intent-resolver-MONKAKTY.mjs.map +7 -0
  25. package/dist/lib/browser/meta.json +1 -1
  26. package/dist/lib/browser/react-surface-7QWCWE4K.mjs +58 -0
  27. package/dist/lib/browser/react-surface-7QWCWE4K.mjs.map +7 -0
  28. package/dist/lib/browser/types/index.mjs +14 -3
  29. package/dist/lib/node/AutomationPanel-6COLKRIB.cjs +26 -0
  30. package/dist/lib/node/AutomationPanel-6COLKRIB.cjs.map +7 -0
  31. package/dist/lib/node/ChatContainer-SBEUFMQ3.cjs +33 -0
  32. package/dist/lib/node/ChatContainer-SBEUFMQ3.cjs.map +7 -0
  33. package/dist/lib/node/ai-client-L5GUSAER.cjs +38 -0
  34. package/dist/lib/node/ai-client-L5GUSAER.cjs.map +7 -0
  35. package/dist/lib/node/app-graph-builder-OCSH5R6U.cjs +123 -0
  36. package/dist/lib/node/app-graph-builder-OCSH5R6U.cjs.map +7 -0
  37. package/dist/lib/node/{chunk-TQEDPRY5.cjs → chunk-BAQRBGOJ.cjs} +7 -4
  38. package/dist/lib/node/chunk-BAQRBGOJ.cjs.map +7 -0
  39. package/dist/lib/node/chunk-BZFAEBME.cjs +1747 -0
  40. package/dist/lib/node/chunk-BZFAEBME.cjs.map +7 -0
  41. package/dist/lib/node/chunk-K3F5JNZ6.cjs +394 -0
  42. package/dist/lib/node/chunk-K3F5JNZ6.cjs.map +7 -0
  43. package/dist/lib/node/chunk-NUOYHYAF.cjs +174 -0
  44. package/dist/lib/node/chunk-NUOYHYAF.cjs.map +7 -0
  45. package/dist/lib/node/{AutomationPanel-H5WE4FIU.cjs → chunk-V4L7LTWM.cjs} +34 -18
  46. package/dist/lib/node/chunk-V4L7LTWM.cjs.map +7 -0
  47. package/dist/lib/node/chunk-VNBYGJ4K.cjs +34 -0
  48. package/dist/lib/node/chunk-VNBYGJ4K.cjs.map +7 -0
  49. package/dist/lib/node/index.cjs +157 -86
  50. package/dist/lib/node/index.cjs.map +4 -4
  51. package/dist/lib/node/intent-resolver-KQGTYVF2.cjs +45 -0
  52. package/dist/lib/node/intent-resolver-KQGTYVF2.cjs.map +7 -0
  53. package/dist/lib/node/meta.json +1 -1
  54. package/dist/lib/node/{react-surface-S6U5ISJ6.cjs → react-surface-IXKIJFRP.cjs} +31 -12
  55. package/dist/lib/node/react-surface-IXKIJFRP.cjs.map +7 -0
  56. package/dist/lib/node/types/index.cjs +17 -6
  57. package/dist/lib/node/types/index.cjs.map +2 -2
  58. package/dist/lib/node-esm/AutomationPanel-3MPIAO7R.mjs +9 -0
  59. package/dist/lib/node-esm/AutomationPanel-3MPIAO7R.mjs.map +7 -0
  60. package/dist/lib/node-esm/ChatContainer-JCDLYMDZ.mjs +13 -0
  61. package/dist/lib/node-esm/ChatContainer-JCDLYMDZ.mjs.map +7 -0
  62. package/dist/lib/node-esm/ai-client-45LZLW7V.mjs +23 -0
  63. package/dist/lib/node-esm/ai-client-45LZLW7V.mjs.map +7 -0
  64. package/dist/lib/node-esm/app-graph-builder-XSM7DETF.mjs +112 -0
  65. package/dist/lib/node-esm/app-graph-builder-XSM7DETF.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-53FFD4VO.mjs +1776 -0
  67. package/dist/lib/node-esm/chunk-53FFD4VO.mjs.map +7 -0
  68. package/dist/lib/{browser/AutomationPanel-KT3YFV56.mjs → node-esm/chunk-AWAU4BHR.mjs} +27 -14
  69. package/dist/lib/node-esm/chunk-AWAU4BHR.mjs.map +7 -0
  70. package/dist/lib/node-esm/{chunk-JFHI22MF.mjs → chunk-IG4GSWZN.mjs} +3 -1
  71. package/dist/lib/node-esm/chunk-IG4GSWZN.mjs.map +7 -0
  72. package/dist/lib/node-esm/chunk-K5NNSGIV.mjs +152 -0
  73. package/dist/lib/node-esm/chunk-K5NNSGIV.mjs.map +7 -0
  74. package/dist/lib/node-esm/chunk-RAT3GSJP.mjs +383 -0
  75. package/dist/lib/node-esm/chunk-RAT3GSJP.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-SS7U6GCX.mjs +16 -0
  77. package/dist/lib/node-esm/chunk-SS7U6GCX.mjs.map +7 -0
  78. package/dist/lib/node-esm/index.mjs +127 -42
  79. package/dist/lib/node-esm/index.mjs.map +4 -4
  80. package/dist/lib/node-esm/intent-resolver-XSZRLU6V.mjs +31 -0
  81. package/dist/lib/node-esm/intent-resolver-XSZRLU6V.mjs.map +7 -0
  82. package/dist/lib/node-esm/meta.json +1 -1
  83. package/dist/lib/node-esm/react-surface-FZAAAXGR.mjs +59 -0
  84. package/dist/lib/node-esm/react-surface-FZAAAXGR.mjs.map +7 -0
  85. package/dist/lib/node-esm/types/index.mjs +14 -3
  86. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/ai-client.d.ts +5 -0
  88. package/dist/types/src/capabilities/ai-client.d.ts.map +1 -0
  89. package/dist/types/src/capabilities/app-graph-builder.d.ts +23 -22
  90. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/capabilities.d.ts +5 -0
  92. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  93. package/dist/types/src/capabilities/index.d.ts +3 -0
  94. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
  96. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  98. package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts +7 -0
  99. package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts.map +1 -0
  100. package/dist/types/src/components/AmbientDialog/AmbientDialog.stories.d.ts +8 -0
  101. package/dist/types/src/components/AmbientDialog/AmbientDialog.stories.d.ts.map +1 -0
  102. package/dist/types/src/components/AmbientDialog/index.d.ts +2 -0
  103. package/dist/types/src/components/AmbientDialog/index.d.ts.map +1 -0
  104. package/dist/types/src/components/AssistantDialog/AssistantDialog.d.ts +6 -0
  105. package/dist/types/src/components/AssistantDialog/AssistantDialog.d.ts.map +1 -0
  106. package/dist/types/src/components/AssistantDialog/index.d.ts +2 -0
  107. package/dist/types/src/components/AssistantDialog/index.d.ts.map +1 -0
  108. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +1 -2
  109. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  110. package/dist/types/src/components/ChatContainer/ChatContainer.d.ts +6 -0
  111. package/dist/types/src/components/ChatContainer/ChatContainer.d.ts.map +1 -0
  112. package/dist/types/src/components/ChatContainer/index.d.ts +4 -0
  113. package/dist/types/src/components/ChatContainer/index.d.ts.map +1 -0
  114. package/dist/types/src/components/Prompt/Prompt.d.ts +13 -0
  115. package/dist/types/src/components/Prompt/Prompt.d.ts.map +1 -0
  116. package/dist/types/src/components/Prompt/Prompt.stories.d.ts +9 -0
  117. package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +1 -0
  118. package/dist/types/src/components/Prompt/PromptBar.d.ts +10 -0
  119. package/dist/types/src/components/Prompt/PromptBar.d.ts.map +1 -0
  120. package/dist/types/src/components/Prompt/autocomplete.d.ts +21 -0
  121. package/dist/types/src/components/Prompt/autocomplete.d.ts.map +1 -0
  122. package/dist/types/src/components/Prompt/index.d.ts +3 -0
  123. package/dist/types/src/components/Prompt/index.d.ts.map +1 -0
  124. package/dist/types/src/components/PromptEditor/PromptEditor.d.ts +1 -2
  125. package/dist/types/src/components/PromptEditor/PromptEditor.d.ts.map +1 -1
  126. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts +5 -0
  127. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts.map +1 -0
  128. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts +8 -0
  129. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts.map +1 -0
  130. package/dist/types/src/components/ServiceRegistry/index.d.ts +2 -0
  131. package/dist/types/src/components/ServiceRegistry/index.d.ts.map +1 -0
  132. package/dist/types/src/components/Thread/Thread.d.ts +15 -0
  133. package/dist/types/src/components/Thread/Thread.d.ts.map +1 -0
  134. package/dist/types/src/components/Thread/Thread.stories.d.ts +11 -0
  135. package/dist/types/src/components/Thread/Thread.stories.d.ts.map +1 -0
  136. package/dist/types/src/components/Thread/ThreadContainer.d.ts +8 -0
  137. package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +1 -0
  138. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts +15 -0
  139. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +1 -0
  140. package/dist/types/src/components/Thread/ThreadMessage.d.ts +13 -0
  141. package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +1 -0
  142. package/dist/types/src/components/Thread/ToolInvocations.d.ts +13 -0
  143. package/dist/types/src/components/Thread/ToolInvocations.d.ts.map +1 -0
  144. package/dist/types/src/components/Thread/index.d.ts +3 -0
  145. package/dist/types/src/components/Thread/index.d.ts.map +1 -0
  146. package/dist/types/src/components/Thread/reducer.d.ts +12 -0
  147. package/dist/types/src/components/Thread/reducer.d.ts.map +1 -0
  148. package/dist/types/src/components/Toolbox/Toolbox.d.ts +19 -0
  149. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -0
  150. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +8 -0
  151. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -0
  152. package/dist/types/src/components/Toolbox/index.d.ts +2 -0
  153. package/dist/types/src/components/Toolbox/index.d.ts.map +1 -0
  154. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +1 -2
  155. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  156. package/dist/types/src/components/index.d.ts +13 -2
  157. package/dist/types/src/components/index.d.ts.map +1 -1
  158. package/dist/types/src/hooks/index.d.ts +5 -0
  159. package/dist/types/src/hooks/index.d.ts.map +1 -1
  160. package/dist/types/src/hooks/processor.d.ts +75 -0
  161. package/dist/types/src/hooks/processor.d.ts.map +1 -0
  162. package/dist/types/src/hooks/processor.test.d.ts +2 -0
  163. package/dist/types/src/hooks/processor.test.d.ts.map +1 -0
  164. package/dist/types/src/hooks/useChatProcessor.d.ts +7 -0
  165. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -0
  166. package/dist/types/src/hooks/useMessageQueue.d.ts +41 -0
  167. package/dist/types/src/hooks/useMessageQueue.d.ts.map +1 -0
  168. package/dist/types/src/hooks/useServices.d.ts +7 -0
  169. package/dist/types/src/hooks/useServices.d.ts.map +1 -0
  170. package/dist/types/src/hooks/useTextInputEvents.d.ts +13 -0
  171. package/dist/types/src/hooks/useTextInputEvents.d.ts.map +1 -0
  172. package/dist/types/src/meta.d.ts +1 -0
  173. package/dist/types/src/meta.d.ts.map +1 -1
  174. package/dist/types/src/testing/index.d.ts +2 -1
  175. package/dist/types/src/testing/index.d.ts.map +1 -1
  176. package/dist/types/src/testing/{testing.d.ts → test-functions.d.ts} +3 -1
  177. package/dist/types/src/testing/test-functions.d.ts.map +1 -0
  178. package/dist/types/src/testing/test-services.d.ts +5 -0
  179. package/dist/types/src/testing/test-services.d.ts.map +1 -0
  180. package/dist/types/src/tools/function.d.ts +5 -0
  181. package/dist/types/src/tools/function.d.ts.map +1 -0
  182. package/dist/types/src/tools/index.d.ts +3 -0
  183. package/dist/types/src/tools/index.d.ts.map +1 -0
  184. package/dist/types/src/tools/openapi.d.ts +10 -0
  185. package/dist/types/src/tools/openapi.d.ts.map +1 -0
  186. package/dist/types/src/tools/openapi.test.d.ts +2 -0
  187. package/dist/types/src/tools/openapi.test.d.ts.map +1 -0
  188. package/dist/types/src/translations.d.ts +95 -2
  189. package/dist/types/src/translations.d.ts.map +1 -1
  190. package/dist/types/src/types/index.d.ts +2 -0
  191. package/dist/types/src/types/index.d.ts.map +1 -1
  192. package/dist/types/src/types/registry.d.ts +10 -0
  193. package/dist/types/src/types/registry.d.ts.map +1 -0
  194. package/dist/types/src/types/schema.d.ts +161 -3
  195. package/dist/types/src/types/schema.d.ts.map +1 -1
  196. package/dist/types/src/types/types.d.ts +19 -0
  197. package/dist/types/src/types/types.d.ts.map +1 -0
  198. package/package.json +59 -40
  199. package/src/AutomationPlugin.tsx +51 -14
  200. package/src/capabilities/ai-client.ts +19 -0
  201. package/src/capabilities/app-graph-builder.ts +83 -110
  202. package/src/capabilities/capabilities.ts +12 -0
  203. package/src/capabilities/index.ts +4 -0
  204. package/src/capabilities/intent-resolver.ts +26 -0
  205. package/src/capabilities/react-surface.tsx +21 -6
  206. package/src/components/AmbientDialog/AmbientDialog.stories.tsx +81 -0
  207. package/src/components/AmbientDialog/AmbientDialog.tsx +103 -0
  208. package/src/components/AmbientDialog/index.ts +5 -0
  209. package/src/components/AssistantDialog/AssistantDialog.tsx +23 -0
  210. package/src/components/AssistantDialog/index.ts +5 -0
  211. package/src/components/ChatContainer/ChatContainer.tsx +19 -0
  212. package/src/components/ChatContainer/index.ts +9 -0
  213. package/src/components/Prompt/Prompt.stories.tsx +79 -0
  214. package/src/components/Prompt/Prompt.tsx +79 -0
  215. package/src/components/Prompt/PromptBar.tsx +100 -0
  216. package/src/components/Prompt/autocomplete.ts +212 -0
  217. package/src/components/Prompt/index.ts +6 -0
  218. package/src/components/PromptEditor/PromptEditor.stories.tsx +3 -3
  219. package/src/components/PromptEditor/PromptEditor.tsx +3 -3
  220. package/src/components/ServiceRegistry/ServiceRegistry.stories.tsx +49 -0
  221. package/src/components/ServiceRegistry/ServiceRegistry.tsx +76 -0
  222. package/src/components/ServiceRegistry/index.ts +5 -0
  223. package/src/components/Thread/Thread.stories.tsx +210 -0
  224. package/src/components/Thread/Thread.tsx +106 -0
  225. package/src/components/Thread/ThreadContainer.stories.tsx +245 -0
  226. package/src/components/Thread/ThreadContainer.tsx +67 -0
  227. package/src/components/Thread/ThreadMessage.tsx +187 -0
  228. package/src/components/Thread/ToolInvocations.tsx +86 -0
  229. package/src/components/Thread/index.ts +6 -0
  230. package/src/components/Thread/reducer.ts +52 -0
  231. package/src/components/Toolbox/Toolbox.stories.tsx +66 -0
  232. package/src/components/Toolbox/Toolbox.tsx +89 -0
  233. package/src/components/Toolbox/index.ts +5 -0
  234. package/src/components/TriggerEditor/TriggerEditor.tsx +18 -11
  235. package/src/components/index.ts +10 -1
  236. package/src/hooks/index.ts +6 -0
  237. package/src/hooks/processor.test.ts +15 -0
  238. package/src/hooks/processor.ts +218 -0
  239. package/src/hooks/useChatProcessor.tsx +75 -0
  240. package/src/hooks/useMessageQueue.ts +23 -0
  241. package/src/hooks/useServices.ts +28 -0
  242. package/src/hooks/useTextInputEvents.ts +49 -0
  243. package/src/meta.ts +2 -0
  244. package/src/testing/index.ts +2 -1
  245. package/src/testing/{testing.ts → test-functions.ts} +9 -2
  246. package/src/testing/test-services.ts +131 -0
  247. package/src/tools/function.ts +47 -0
  248. package/src/tools/index.ts +6 -0
  249. package/src/tools/openapi.test.ts +224 -0
  250. package/src/tools/openapi.ts +331 -0
  251. package/src/translations.ts +17 -2
  252. package/src/types/index.ts +2 -0
  253. package/src/types/registry.ts +26 -0
  254. package/src/types/schema.ts +95 -1
  255. package/src/types/types.ts +22 -0
  256. package/src/typings.d.ts +9 -0
  257. package/dist/lib/browser/AssistantPanel-NTOUHOWA.mjs +0 -339
  258. package/dist/lib/browser/AssistantPanel-NTOUHOWA.mjs.map +0 -7
  259. package/dist/lib/browser/AutomationPanel-KT3YFV56.mjs.map +0 -7
  260. package/dist/lib/browser/app-graph-builder-6FSMLMT4.mjs +0 -131
  261. package/dist/lib/browser/app-graph-builder-6FSMLMT4.mjs.map +0 -7
  262. package/dist/lib/browser/chunk-4ODBJDXM.mjs +0 -10
  263. package/dist/lib/browser/chunk-4ODBJDXM.mjs.map +0 -7
  264. package/dist/lib/browser/chunk-DL6LB2NI.mjs +0 -43
  265. package/dist/lib/browser/chunk-DL6LB2NI.mjs.map +0 -7
  266. package/dist/lib/browser/chunk-DQ7ZSYJJ.mjs.map +0 -7
  267. package/dist/lib/browser/react-surface-5YTE5MRE.mjs +0 -34
  268. package/dist/lib/browser/react-surface-5YTE5MRE.mjs.map +0 -7
  269. package/dist/lib/node/AssistantPanel-U7GDWPRC.cjs +0 -359
  270. package/dist/lib/node/AssistantPanel-U7GDWPRC.cjs.map +0 -7
  271. package/dist/lib/node/AutomationPanel-H5WE4FIU.cjs.map +0 -7
  272. package/dist/lib/node/app-graph-builder-65TBXO3I.cjs +0 -147
  273. package/dist/lib/node/app-graph-builder-65TBXO3I.cjs.map +0 -7
  274. package/dist/lib/node/chunk-JNDMZQH7.cjs +0 -68
  275. package/dist/lib/node/chunk-JNDMZQH7.cjs.map +0 -7
  276. package/dist/lib/node/chunk-JUSXT4U5.cjs +0 -43
  277. package/dist/lib/node/chunk-JUSXT4U5.cjs.map +0 -7
  278. package/dist/lib/node/chunk-TQEDPRY5.cjs.map +0 -7
  279. package/dist/lib/node/react-surface-S6U5ISJ6.cjs.map +0 -7
  280. package/dist/lib/node-esm/AssistantPanel-M67P24GS.mjs +0 -340
  281. package/dist/lib/node-esm/AssistantPanel-M67P24GS.mjs.map +0 -7
  282. package/dist/lib/node-esm/AutomationPanel-MW42U6I4.mjs.map +0 -7
  283. package/dist/lib/node-esm/app-graph-builder-4SD4F3KN.mjs +0 -132
  284. package/dist/lib/node-esm/app-graph-builder-4SD4F3KN.mjs.map +0 -7
  285. package/dist/lib/node-esm/chunk-GIAYUM5I.mjs +0 -45
  286. package/dist/lib/node-esm/chunk-GIAYUM5I.mjs.map +0 -7
  287. package/dist/lib/node-esm/chunk-JFHI22MF.mjs.map +0 -7
  288. package/dist/lib/node-esm/chunk-XVIEXSEZ.mjs +0 -12
  289. package/dist/lib/node-esm/chunk-XVIEXSEZ.mjs.map +0 -7
  290. package/dist/lib/node-esm/react-surface-RWTR3TKT.mjs +0 -35
  291. package/dist/lib/node-esm/react-surface-RWTR3TKT.mjs.map +0 -7
  292. package/dist/types/src/components/AssistantPanel/AssistantPanel.d.ts +0 -8
  293. package/dist/types/src/components/AssistantPanel/AssistantPanel.d.ts.map +0 -1
  294. package/dist/types/src/components/AssistantPanel/index.d.ts +0 -3
  295. package/dist/types/src/components/AssistantPanel/index.d.ts.map +0 -1
  296. package/dist/types/src/components/AssistantPanel/system-instructions.d.ts +0 -6
  297. package/dist/types/src/components/AssistantPanel/system-instructions.d.ts.map +0 -1
  298. package/dist/types/src/testing/testing.d.ts.map +0 -1
  299. package/src/components/AssistantPanel/AssistantPanel.tsx +0 -227
  300. package/src/components/AssistantPanel/index.ts +0 -7
  301. package/src/components/AssistantPanel/system-instructions.ts +0 -166
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ChatContainer/ChatContainer.tsx", "../../../src/components/Thread/Thread.tsx", "../../../src/components/Thread/ThreadMessage.tsx", "../../../src/components/Thread/ToolInvocations.tsx", "../../../src/components/Toolbox/Toolbox.tsx", "../../../src/tools/function.ts", "../../../src/tools/openapi.ts", "../../../src/components/Thread/reducer.ts", "../../../src/components/Prompt/Prompt.tsx", "../../../src/components/Prompt/autocomplete.ts", "../../../src/components/Prompt/PromptBar.tsx", "../../../src/components/Thread/ThreadContainer.tsx", "../../../src/hooks/processor.ts", "../../../src/hooks/useChatProcessor.tsx", "../../../src/capabilities/index.ts", "../../../src/hooks/useLocalTriggerManager.ts", "../../../src/hooks/invocation-handler.ts", "../../../src/hooks/useMessageQueue.ts", "../../../src/hooks/useServices.ts", "../../../src/testing/test-functions.ts", "../../../src/testing/test-services.ts", "../../../src/hooks/useTextInputEvents.ts", "../../../src/components/ChatContainer/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { type AIChatType } from '../../types';\nimport { ThreadContainer } from '../Thread';\n\n// TODO(burdon): Attention.\nexport const ChatContainer = ({ chat, role }: { chat: AIChatType; role: string }) => {\n return (\n <StackItem.Content toolbar={false} role={role} classNames='mli-auto w-full max-w-[50rem]'>\n <ThreadContainer chat={chat} />\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type CSSProperties, useCallback, useMemo, useRef } from 'react';\n\nimport { useCapabilities } from '@dxos/app-framework';\nimport { type Message } from '@dxos/artifact';\nimport { TranscriptionCapabilities } from '@dxos/plugin-transcription';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { ScrollContainer, type ScrollController } from '@dxos/react-ui-components';\nimport { mx } from '@dxos/react-ui-theme';\nimport { keyToFallback } from '@dxos/util';\n\nimport { ThreadMessage, type ThreadMessageProps } from './ThreadMessage';\nimport { messageReducer } from './reducer';\nimport { PromptBar, type PromptBarProps } from '../Prompt';\n\nexport type ThreadProps = ThemedClassName<{\n space?: Space;\n messages?: Message[];\n collapse?: boolean;\n}> &\n Pick<PromptBarProps, 'processing' | 'error' | 'onSubmit' | 'onSuggest' | 'onCancel'> &\n Pick<ThreadMessageProps, 'debug' | 'onPrompt' | 'onDelete'>;\n\n/**\n * Chat thread component.\n */\nexport const Thread = ({\n classNames,\n space,\n messages,\n collapse = true,\n processing,\n error,\n debug,\n onSubmit,\n onCancel,\n onPrompt,\n onDelete,\n}: ThreadProps) => {\n const hasTrascription = useCapabilities(TranscriptionCapabilities.Transcription).length > 0;\n\n const scroller = useRef<ScrollController>(null);\n\n const identity = useIdentity();\n const fallbackValue = keyToFallback(identity!.identityKey);\n const userHue = identity!.profile?.data?.hue || fallbackValue.hue;\n\n const handleSubmit = useCallback<NonNullable<PromptBarProps['onSubmit']>>(\n (value: string) => {\n onSubmit?.(value);\n scroller.current?.scrollToBottom();\n return true;\n },\n [onSubmit],\n );\n\n // TODO(dmaretskyi): This needs to be a separate type: `id` is not a valid ObjectId, this needs to accommodate messageId for deletion.\n const { messages: filteredMessages = [] } = useMemo(() => {\n if (collapse) {\n return (messages ?? []).reduce<{ messages: Message[]; current?: Message }>(messageReducer, {\n messages: [],\n });\n } else {\n return { messages: messages ?? [] };\n }\n }, [messages, collapse]);\n\n return (\n <>\n <ScrollContainer ref={scroller} fade>\n <div\n role='none'\n className={mx(filteredMessages.length > 0 && 'pbs-6 pbe-6', classNames)}\n style={{ '--user-fill': `var(--dx-${userHue}Fill)` } as CSSProperties}\n >\n {filteredMessages.map((message) => (\n <ThreadMessage\n key={message.id}\n classNames='px-4 pbe-4'\n space={space}\n message={message}\n debug={debug}\n onPrompt={onPrompt}\n onDelete={onDelete}\n />\n ))}\n </div>\n </ScrollContainer>\n\n {onSubmit && (\n <PromptBar\n microphone={hasTrascription}\n processing={processing}\n error={error}\n onSubmit={handleSubmit}\n onCancel={onCancel}\n />\n )}\n </>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren, type FC } from 'react';\n\nimport { type MessageContentBlock, type Message } from '@dxos/artifact';\nimport { invariant } from '@dxos/invariant';\nimport { type Space } from '@dxos/react-client/echo';\nimport { Button, ButtonGroup, Icon, IconButton, type ThemedClassName } from '@dxos/react-ui';\nimport {\n MarkdownViewer,\n ToggleContainer as NativeToggleContainer,\n type ToggleContainerProps,\n} from '@dxos/react-ui-components';\nimport { Json } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\nimport { safeParseJson } from '@dxos/util';\n\nimport { ToolBlock, isToolMessage } from './ToolInvocations';\nimport { ToolboxContainer } from '../Toolbox';\n\nconst userClassNames = 'bg-[--user-fill]';\nconst panelClassNames = 'flex flex-col w-full bg-groupSurface rounded-md';\n\nconst ToggleContainer = (props: ToggleContainerProps) => {\n return <NativeToggleContainer {...props} classNames={mx(panelClassNames, props.classNames)} />;\n};\n\nconst MessageContainer = ({ children, classNames, user }: ThemedClassName<PropsWithChildren<{ user?: boolean }>>) => {\n return (\n <div role='list-item' className={mx('flex w-full', user && 'justify-end', classNames)}>\n <div className={mx(user ? ['px-2 py-1 rounded-md', userClassNames] : 'w-full')}>{children}</div>\n </div>\n );\n};\n\nexport type ThreadMessageProps = ThemedClassName<{\n space?: Space;\n message: Message;\n debug?: boolean;\n onPrompt?: (text: string) => void;\n onDelete?: (id: string) => void;\n}>;\n\nexport const ThreadMessage: FC<ThreadMessageProps> = ({ classNames, space, message, onPrompt }) => {\n const { role, content = [] } = message;\n\n // TODO(burdon): Restructure types to make check unnecessary.\n if (isToolMessage(message)) {\n return (\n <MessageContainer classNames={classNames}>\n <ToolBlock space={space} classNames={panelClassNames} message={message} />\n </MessageContainer>\n );\n }\n\n return (\n <div role='none' className='flex flex-col gap-2'>\n {content.map((block, idx) => (\n <MessageContainer key={idx} classNames={classNames} user={block.type === 'text' && role === 'user'}>\n <Block space={space} block={block} onPrompt={onPrompt} />\n </MessageContainer>\n ))}\n </div>\n );\n};\n\nconst Block: FC<{ space?: Space; block: MessageContentBlock; onPrompt?: (text: string) => void }> = ({\n space,\n block,\n onPrompt,\n}) => {\n const Component = components[block.type] ?? components.default;\n return <Component space={space} block={block} onPrompt={onPrompt} />;\n};\n\ntype BlockComponent = FC<{ space?: Space; block: MessageContentBlock; onPrompt?: (text: string) => void }>;\n\nconst components: Record<string, BlockComponent> = {\n //\n // Text\n //\n ['text' as const]: ({ block }) => {\n invariant(block.type === 'text');\n // const [open, setOpen] = useState(block.disposition === 'cot' && block.pending);\n const title = block.disposition ? titles[block.disposition] : undefined;\n if (!title) {\n return <MarkdownViewer content={block.text} />;\n }\n\n // TOOD(burdon): Store last time user opened/closed COT.\n // Autoclose when streaming ends.\n // useEffect(() => {\n // if (block.disposition === 'cot' && !block.pending) {\n // setOpen(false);\n // }\n // }, [block.disposition, block.pending]);\n\n return (\n <ToggleContainer\n // open={open}\n defaultOpen={block.disposition === 'cot' && block.pending}\n title={title}\n icon={\n block.pending ? (\n <Icon icon={'ph--circle-notch--regular'} classNames='text-subdued ml-2 animate-spin' size={4} />\n ) : undefined\n }\n >\n <MarkdownViewer\n content={block.text}\n classNames={['pbe-2', block.disposition === 'cot' && 'text-sm text-subdued']}\n />\n </ToggleContainer>\n );\n },\n\n //\n // JSON\n //\n ['json' as const]: ({ space, block, onPrompt }) => {\n invariant(block.type === 'json');\n\n switch (block.disposition) {\n case 'tool_list': {\n return (\n <ToggleContainer title={titles[block.disposition]} defaultOpen={true}>\n <ToolboxContainer space={space} />\n </ToggleContainer>\n );\n }\n\n case 'suggest': {\n const { text = '' }: { text: string } = safeParseJson(block.json ?? '{}') ?? ({} as any);\n return <IconButton icon='ph--lightning--regular' label={text} onClick={() => onPrompt?.(text)} />;\n }\n\n case 'select': {\n const { options = [] }: { options: string[] } = safeParseJson(block.json ?? '{}') ?? ({} as any);\n return (\n <ButtonGroup>\n {options.map((option) => (\n <Button key={option} onClick={() => onPrompt?.(option)}>\n {option}\n </Button>\n ))}\n </ButtonGroup>\n );\n }\n\n default: {\n const title = block.disposition ? titles[block.disposition] : undefined;\n return (\n <ToggleContainer title={title ?? 'JSON'}>\n <Json data={safeParseJson(block.json ?? block)} classNames='!p-1 text-xs' />\n </ToggleContainer>\n );\n }\n }\n },\n\n //\n // Default\n //\n default: ({ block }) => {\n let title = titles[block.type];\n if (block.type === 'tool_use') {\n title = `Tool [${block.name}]`; // TODO(burdon): Get label from tool.\n }\n\n return (\n <ToggleContainer title={title ?? 'JSON'}>\n <Json data={block} classNames='!p-1 text-xs' />\n </ToggleContainer>\n );\n },\n};\n\n// TODO(burdon): Translations.\nconst titles: Record<string, string> = {\n ['cot' as const]: 'Chain of thought',\n ['artifact' as const]: 'Artifact',\n ['tool_use' as const]: 'Tool request',\n ['tool_result' as const]: 'Tool result',\n ['tool_list' as const]: 'Tools',\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC, useEffect, useRef, useState } from 'react';\n\nimport { type Message, type MessageContentBlock } from '@dxos/artifact';\nimport { log } from '@dxos/log';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { NumericTabs, StatusRoll, ToggleContainer } from '@dxos/react-ui-components';\nimport { Json } from '@dxos/react-ui-syntax-highlighter';\n\nimport { type ThreadMessageProps } from './ThreadMessage';\n\nexport const isToolMessage = (message: Message) => {\n return message.content.some((block) => block.type === 'tool_use' || block.type === 'tool_result');\n};\n\nexport const ToolBlock: FC<ThemedClassName<ThreadMessageProps>> = ({ classNames, message }) => {\n const { content = [] } = message;\n\n let request: (MessageContentBlock & { type: 'tool_use' }) | undefined;\n const blocks = content.filter((block) => block.type === 'tool_use' || block.type === 'tool_result');\n const items = blocks.map((block) => {\n switch (block.type) {\n case 'tool_use': {\n request = block;\n // TODO(burdon): Get plugin name.\n return { title: `Calling ${block.name}...`, block };\n }\n\n case 'tool_result': {\n if (!request) {\n log.warn('unexpected message', { block });\n return { title: 'Error', block };\n }\n\n return { title: `Processed ${request.name}`, block };\n }\n\n default: {\n request = undefined;\n return { title: 'Error', block };\n }\n }\n });\n\n return <ToolContainer classNames={classNames} items={items} />;\n};\n\nexport const ToolContainer: FC<ThemedClassName<{ items: { title: string; block: any }[] }>> = ({\n classNames,\n items,\n}) => {\n const lines = items.map((item) => item.title);\n const tabsRef = useRef<HTMLDivElement>(null);\n const [selected, setSelected] = useState(0);\n const [open, setOpen] = useState(false);\n useEffect(() => {\n if (open) {\n tabsRef.current?.focus();\n }\n }, [open]);\n\n const handleSelect = (index: number) => {\n if (index === selected) {\n setOpen(false);\n } else {\n setSelected(index);\n }\n };\n\n return (\n <ToggleContainer\n classNames={['flex flex-col', classNames]}\n title={<StatusRoll lines={lines} autoAdvance />}\n open={open}\n onChangeOpen={setOpen}\n >\n <div className='grid grid-cols-[32px_1fr]'>\n <NumericTabs ref={tabsRef} length={items.length} selected={selected} onSelect={handleSelect} />\n <Json data={items[selected].block} classNames='!p-1 text-xs' />\n </div>\n </ToggleContainer>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useState, useEffect } from 'react';\n\nimport { Capabilities, useCapabilities } from '@dxos/app-framework';\nimport { type ArtifactDefinition, type Tool } from '@dxos/artifact';\nimport { FunctionType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { Filter, type Space, useQuery } from '@dxos/react-client/echo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { createToolsFromService } from '../../tools';\nimport { ServiceType } from '../../types';\n\nexport type ToolboxProps = ThemedClassName<{\n artifacts?: ArtifactDefinition[];\n functions?: FunctionType[];\n services?: { service: ServiceType; tools: Tool[] }[];\n striped?: boolean;\n}>;\n\nconst stripClassNames = 'odd:bg-neutral-50 dark:odd:bg-neutral-800';\n\nexport const Toolbox = ({ classNames, artifacts, functions, services, striped }: ToolboxProps) => {\n return (\n <div className={mx('flex overflow-hidden box-content py-2', classNames)}>\n <div className='grid grid-cols-[6rem_8rem_1fr] overflow-y-auto'>\n {artifacts?.map(({ id, tools, ...rest }) =>\n tools.map(({ name, description }, i) => (\n <div\n key={`${id}-${i}`}\n className={mx('col-span-full grid grid-cols-subgrid text-xs px-2', striped && stripClassNames)}\n >\n <div className='text-primary-500 truncate'>{i === 0 && id}</div>\n <div className='truncate'>{name}</div>\n <div className='text-subdued line-clamp-3'>{description}</div>\n </div>\n )),\n )}\n {functions?.map(({ name, description }) => (\n <div\n key={name}\n className={mx('col-span-full grid grid-cols-subgrid text-xs px-2', striped && stripClassNames)}\n >\n <div className='text-primary-500 truncate'>function</div>\n <div className='truncate'>{name}</div>\n <div className='truncate'>{description}</div>\n </div>\n ))}\n {services?.map(({ service, tools }) =>\n tools.map(({ name, description }, i) => (\n <div\n key={`${service.id}-${name}`}\n className={mx('col-span-full grid grid-cols-subgrid text-xs px-2', striped && stripClassNames)}\n >\n <div className='text-primary-500 truncate'>{i === 0 && service.serviceId}</div>\n <div className='truncate'>{name}</div>\n <div className='truncate'>{description}</div>\n </div>\n )),\n )}\n </div>\n </div>\n );\n};\n\nexport const ToolboxContainer = ({ classNames, space }: ThemedClassName<{ space?: Space }>) => {\n const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);\n const functions = useQuery(space, Filter.schema(FunctionType));\n\n const services = useQuery(space, Filter.schema(ServiceType));\n const [serviceTools, setServiceTools] = useState<{ service: ServiceType; tools: Tool[] }[]>([]);\n useEffect(() => {\n log('creating service tools...');\n queueMicrotask(async () => {\n const tools = await Promise.all(\n services.map(async (service) => ({ service, tools: await createToolsFromService(service) })),\n );\n setServiceTools(tools);\n });\n }, [services]);\n\n return (\n <Toolbox classNames={classNames} artifacts={artifactDefinitions} functions={functions} services={serviceTools} />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineTool, ToolResult } from '@dxos/artifact';\nimport type { Tool } from '@dxos/artifact';\nimport { toEffectSchema } from '@dxos/echo-schema';\nimport { getInvocationUrl, getUserFunctionUrlInMetadata } from '@dxos/functions';\nimport type { FunctionType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport type { SpaceId } from '@dxos/react-client/echo';\nimport { getMeta } from '@dxos/react-client/echo';\n\nexport const covertFunctionToTool = (\n fn: FunctionType,\n edgeUrl: string,\n spaceId?: SpaceId | undefined,\n): Tool | undefined => {\n if (!fn.description || !fn.inputSchema) {\n return undefined;\n }\n\n const existingFunctionUrl = getUserFunctionUrlInMetadata(getMeta(fn));\n if (!existingFunctionUrl) {\n return undefined;\n }\n const url = getInvocationUrl(existingFunctionUrl, edgeUrl, {\n spaceId,\n });\n\n return defineTool({\n name: fn.name,\n description: fn.description,\n schema: toEffectSchema(fn.inputSchema),\n execute: async (input) => {\n log.info('execute function tool', { name: fn.name, url, input });\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(input),\n });\n return ToolResult.Success(await response.text());\n },\n });\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport jsonpointer from 'jsonpointer';\nimport { type OpenAPIV2, type OpenAPIV3_1 } from 'openapi-types';\n\nimport { ToolResult, type Tool } from '@dxos/artifact';\nimport { JsonSchemaType, normalizeSchema, S, toEffectSchema } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { deepMapValues } from '@dxos/util';\n\nimport type { ApiAuthorization, ServiceType } from '../types';\n\nexport type CreateToolsFromApiOptions = {\n authorization?: ApiAuthorization;\n instructions?: string;\n};\n\nexport const createToolsFromService = async (service: ServiceType): Promise<Tool[]> => {\n invariant(service.interfaces?.length === 1 && service.interfaces[0].kind === 'api');\n const iface = service.interfaces[0];\n invariant(iface.schemaUrl);\n invariant(iface.schemaUrl);\n return createToolsFromApi(iface.schemaUrl, { authorization: iface.authorization });\n};\n\nexport const createToolsFromApi = async (url: string, options?: CreateToolsFromApiOptions): Promise<Tool[]> => {\n const res = await fetch(url);\n const spec = (await res.json()) as OpenAPIV2.Document;\n log('spec', { spec });\n\n const tools: Tool[] = [];\n for (const [path, pathItem] of Object.entries(spec.paths)) {\n if (typeof pathItem !== 'object') {\n continue;\n }\n\n // TODO(burdon): ???\n const { ...methods } = pathItem;\n for (const [method, m] of Object.entries(methods)) {\n const methodItem: OpenAPIV2.OperationObject = m as OpenAPIV2.OperationObject;\n log('methodItem', { path, method, methodItem });\n\n const parametersResolved: OpenAPIV2.ParameterObject[] =\n methodItem.parameters?.map((parameter: any) => {\n const resolved = resolveJsonSchema(parameter, spec);\n return resolved;\n }) ?? [];\n\n const inputSchema: JsonSchemaType = {\n type: 'object',\n properties: {},\n };\n\n const endpointParameters: OpenAPIV2.ParameterObject[] = [];\n for (const parameter of parametersResolved) {\n log('parameter', { parameter });\n\n if (\n options?.authorization?.type === 'api-key' &&\n options.authorization.placement.type === 'query' &&\n parameter.in === 'query' &&\n parameter.name === options.authorization.placement.name\n ) {\n continue;\n }\n\n endpointParameters.push(parameter);\n\n if (parameter.schema) {\n inputSchema.properties![parameter.name] = normalizeSchema(parameter.schema);\n } else if (typeof parameter.type === 'string') {\n const { name, in: _in, required, ...schema } = parameter;\n inputSchema.properties![name] = normalizeSchema(schema);\n if (required) {\n inputSchema.required ??= [];\n inputSchema.required!.push(name);\n }\n }\n }\n\n log('inputSchema', { inputSchema });\n S.validateSync(JsonSchemaType)(inputSchema);\n\n const description = methodItem.description ?? methodItem.summary;\n if (!description) {\n log.warn('no description', { path, method });\n continue;\n }\n\n const endpoint: EndpointDescriptor = {\n document: spec,\n path,\n method,\n parameters: endpointParameters,\n authorization: options?.authorization,\n };\n\n tools.push({\n name: getToolName(path, method, methodItem),\n description: options?.instructions ? `${options.instructions}\\n\\n${description}` : description,\n parameters: inputSchema,\n execute: async (input) => {\n const response = await callApiEndpoint(endpoint, input);\n return ToolResult.Success(response);\n },\n });\n }\n }\n\n return tools;\n};\n\nconst getToolName = (path: string, method: string, methodItem: OpenAPIV2.OperationObject) => {\n if (methodItem.operationId) {\n return methodItem.operationId;\n }\n\n // Generate a name from the path and method.\n let name = `${method.toLowerCase()}_${path.replaceAll(/[{}/]/g, '_')}`;\n while (name.length > MAX_TOOL_NAME_LENGTH) {\n const lengthBefore = name.length;\n\n for (const word of GENERIC_WORDS) {\n if (name.includes(word)) {\n name = name.replace(word, '');\n break;\n }\n }\n name = name.replaceAll('__', '_').replace(/_$/, '');\n\n const lengthAfter = name.length;\n if (lengthBefore === lengthAfter) {\n break;\n }\n }\n name = name.replaceAll('__', '_').replace(/_$/, '').replace(/^_/, '');\n\n return name.slice(0, MAX_TOOL_NAME_LENGTH);\n};\n\nconst MAX_TOOL_NAME_LENGTH = 64;\nconst GENERIC_WORDS = [\n 'services',\n 'service',\n 'api',\n 'rest',\n 'endpoint',\n 'get',\n 'post',\n 'put',\n 'delete',\n 'patch',\n 'head',\n 'options',\n 'trace',\n 'service',\n 'api',\n 'endpoint',\n];\n\ntype EndpointDescriptor = {\n document: OpenAPIV3_1.Document | OpenAPIV2.Document;\n path: string;\n method: string;\n parameters: OpenAPIV2.ParameterObject[];\n authorization?: ApiAuthorization;\n};\n\nconst callApiEndpoint = async (endpoint: EndpointDescriptor, input: any) => {\n log.info('endpoint', { method: endpoint.method, name: endpoint.path, input });\n\n let url = getEndpointUrl(endpoint);\n const request: RequestInit = {\n method: endpoint.method,\n headers: {},\n };\n const query = new URLSearchParams();\n let body: any;\n for (const parameter of endpoint.parameters) {\n if (input[parameter.name] === undefined) {\n continue;\n }\n\n switch (parameter.in) {\n case 'header': {\n if (parameter.example) {\n (request.headers as any)[parameter.name] = parameter.default;\n }\n break;\n }\n case 'path': {\n url = url.replace(`{${parameter.name}}`, encodeURIComponent(input[parameter.name]));\n break;\n }\n case 'body': {\n const value = input[parameter.name];\n\n // Client-side validation\n const effectSchema = toEffectSchema(parameter.schema);\n S.validateSync(effectSchema)(value);\n\n if (body) {\n throw new Error(`Duplicate body parameter: ${parameter.name}`);\n }\n body = value;\n break;\n }\n case 'query': {\n query.set(parameter.name, input[parameter.name]);\n break;\n }\n }\n }\n\n if (\n (endpoint.authorization?.type === 'api-key' && endpoint.authorization.placement.type === 'authorization-header') ||\n endpoint.authorization?.type === 'oauth'\n ) {\n (request.headers as any).Authorization = await resolveAuthorization(endpoint.authorization);\n } else if (endpoint.authorization?.type === 'api-key' && endpoint.authorization.placement.type === 'query') {\n query.set(endpoint.authorization.placement.name, endpoint.authorization.key);\n }\n\n if (query.size > 0) {\n url += `?${query.toString()}`;\n }\n\n if (body) {\n request.body = JSON.stringify(body);\n (request.headers as any)['Content-Type'] = 'application/json';\n }\n\n log.info('request', { url, request });\n const response = await fetch(url, request);\n\n log.info('response', { ok: response.ok, status: response.status, statusText: response.statusText });\n\n if (response.ok) {\n const contentType = response.headers.get('Content-Type');\n if (contentType?.includes('application/json')) {\n return await response.json();\n } else {\n return await response.text();\n }\n } else {\n if (response.headers.get('Content-Type')?.includes('application/json')) {\n const responseBody = await response.text();\n let error: any;\n try {\n error = JSON.parse(responseBody);\n } catch {\n error = responseBody;\n }\n log.error('error', { error });\n throw new Error(error.message);\n } else {\n const error = await response.text();\n log.error('error', { error });\n throw new Error(error);\n }\n }\n};\n\nconst getEndpointUrl = (endpoint: EndpointDescriptor) => {\n let url = '';\n if (isV3_1(endpoint.document) && endpoint.document.servers && endpoint.document.servers.length > 0) {\n url = endpoint.document.servers[0].url;\n } else {\n invariant(!isV3_1(endpoint.document));\n url = `${endpoint.document.schemes?.[0] ?? 'https'}://${endpoint.document.host}`;\n }\n\n if (!isV3_1(endpoint.document) && endpoint.document.basePath) {\n url += endpoint.document.basePath;\n }\n\n url += endpoint.path;\n\n return url;\n};\n\nexport const resolveAuthorization = async (authorization: ApiAuthorization): Promise<string> => {\n switch (authorization.type) {\n case 'api-key': {\n invariant(authorization.placement.type === 'authorization-header');\n return `Bearer ${authorization.key}`;\n }\n case 'oauth': {\n const response = await fetch(authorization.tokenUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: `grant_type=${authorization.grantType}&client_id=${authorization.clientId}&client_secret=${authorization.clientSecret}`,\n });\n const data = await response.json();\n return `Bearer ${data.access_token}`;\n }\n default: {\n throw new Error(`Unknown authorization type: ${(authorization as any).type}`);\n }\n }\n};\n\n/**\n * Resolves all $ref properties in a JSON schema.\n * Doesn't assume the structure of the schema.\n * The function looks from $ref properties in the schema and resolves them to their values in the base object.\n */\nconst resolveJsonSchema = (schema: any, base: any) => {\n return deepMapValues(schema, (value, recurse) => {\n if (typeof value === 'object' && value !== null && '$ref' in value && typeof value.$ref === 'string') {\n if (value.$ref.startsWith('#')) {\n const resolved = jsonpointer.get(base, value.$ref.slice(1));\n if (resolved) {\n return recurse(resolved);\n } else {\n log.warn('unresolved', { ref: value.$ref, base });\n }\n }\n }\n return recurse(value);\n });\n};\n\nconst isV3_1 = (document: OpenAPIV3_1.Document | OpenAPIV2.Document): document is OpenAPIV3_1.Document => {\n return (document as any).openapi === '3.0.1';\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Message } from '@dxos/artifact';\n\n// TODO(burdon): Move to util?\ntype Reducer<R, I> = (acc: R, value: I) => R;\n\n/**\n * Reducer that collapses related message blocks into single messages.\n * For example, combines tool request/response pairs into a single message.\n */\nexport const messageReducer: Reducer<{ messages: Message[]; current?: Message }, Message> = (\n { current, messages },\n message,\n) => {\n let i = 0;\n for (const block of message.content) {\n switch (block.type) {\n case 'tool_use':\n case 'tool_result': {\n if (current) {\n current.content.push(block);\n } else {\n current = {\n id: [message.id, i].join('_'),\n role: message.role,\n content: [block],\n };\n messages.push(current);\n }\n break;\n }\n\n case 'text':\n default: {\n current = undefined;\n messages.push({\n id: [message.id, i].join('_'),\n role: message.role,\n content: [block],\n });\n break;\n }\n }\n\n i++;\n }\n\n return { current, messages };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef, useImperativeHandle } from 'react';\n\nimport { type ThemedClassName, useThemeContext } from '@dxos/react-ui';\nimport {\n type BasicExtensionsOptions,\n createBasicExtensions,\n createThemeExtensions,\n useTextEditor,\n type UseTextEditorProps,\n} from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { createAutocompleteExtension, type AutocompleteOptions } from './autocomplete';\n\n// TODO(burdon): Handle object references.\n\nexport interface PromptController {\n focus(): void;\n setText(text: string): void;\n}\n\nexport type PromptProps = ThemedClassName<\n AutocompleteOptions &\n Pick<UseTextEditorProps, 'autoFocus'> &\n Pick<BasicExtensionsOptions, 'lineWrapping' | 'placeholder'>\n>;\n\nexport const Prompt = forwardRef<PromptController, PromptProps>(\n ({ classNames, autoFocus, lineWrapping = false, placeholder, onSubmit, onSuggest }, forwardRef) => {\n const { themeMode } = useThemeContext();\n const { parentRef, view } = useTextEditor(\n {\n autoFocus,\n extensions: [\n createBasicExtensions({\n bracketMatching: false,\n lineWrapping,\n placeholder,\n }),\n createThemeExtensions({ themeMode }),\n createAutocompleteExtension({ onSubmit, onSuggest }),\n ],\n },\n [themeMode, onSubmit, onSuggest],\n );\n\n // Expose editor view.\n useImperativeHandle(\n forwardRef,\n () => {\n return {\n focus: () => {\n view?.focus();\n },\n setText: (text: string) => {\n view?.dispatch({\n changes: {\n from: 0,\n to: view.state.doc.length,\n insert: text,\n },\n selection: {\n anchor: text.length,\n head: text.length,\n },\n });\n },\n };\n },\n [view, onSubmit],\n );\n\n return <div ref={parentRef} className={mx('w-full overflow-hidden', classNames)} />;\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Prec, type Extension } from '@codemirror/state';\nimport {\n EditorView,\n Decoration,\n ViewPlugin,\n keymap,\n type DecorationSet,\n type ViewUpdate,\n WidgetType,\n} from '@codemirror/view';\n\nexport type AutocompleteOptions = {\n /**\n * Callback triggered when Enter is pressed.\n * @param text The current text in the editor\n * @returns true if the editor should reset the document.\n */\n onSubmit?: (text: string) => boolean | void;\n\n /**\n * Function that returns a list of suggestions based on the current text.\n * @param text The current text before the cursor\n * @returns Array of suggestion strings\n */\n onSuggest?: (text: string) => string[];\n};\n\n/**\n * Creates an autocomplete extension that shows inline suggestions.\n * Pressing Tab will complete the suggestion.\n */\nexport const createAutocompleteExtension = ({ onSubmit, onSuggest }: AutocompleteOptions): Extension => {\n const suggestionPlugin = ViewPlugin.fromClass(\n class {\n _decorations: DecorationSet;\n _currentSuggestion: string | null = null;\n\n constructor(view: EditorView) {\n this._decorations = this.computeDecorations(view);\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged || update.selectionSet) {\n this._decorations = this.computeDecorations(update.view);\n }\n }\n\n private computeDecorations(view: EditorView): DecorationSet {\n const text = view.state.doc.toString();\n const suggestions = onSuggest?.(text) ?? [];\n if (!suggestions.length) {\n this._currentSuggestion = null;\n return Decoration.none;\n }\n\n // Get the first suggestion.\n this._currentSuggestion = suggestions[0];\n const suffix = this._currentSuggestion.slice(text.length);\n if (!suffix) {\n return Decoration.none;\n }\n\n // Always show ghost text at the end of the document.\n return Decoration.set([\n Decoration.widget({\n widget: new InlineSuggestionWidget(suffix),\n side: 1,\n }).range(view.state.doc.length),\n ]);\n }\n\n completeSuggestion(view: EditorView): boolean {\n if (!this._currentSuggestion) {\n return false;\n }\n\n const text = view.state.doc.toString();\n const suffix = this._currentSuggestion.slice(text.length);\n if (!suffix) {\n return false;\n }\n\n view.dispatch({\n changes: {\n from: view.state.doc.length,\n insert: suffix,\n },\n selection: {\n anchor: view.state.doc.length + suffix.length,\n },\n });\n\n return true;\n }\n },\n {\n decorations: (v) => v._decorations,\n },\n );\n\n return [\n suggestionPlugin,\n EditorView.theme({\n '.cm-inline-suggestion': {\n opacity: 0.4,\n },\n }),\n\n // Accept the current suggestion.\n Prec.highest(\n keymap.of([\n {\n key: 'Tab',\n preventDefault: true,\n run: (view) => {\n const plugin = view.plugin(suggestionPlugin);\n return plugin?.completeSuggestion(view) ?? false;\n },\n },\n {\n key: 'ArrowRight',\n preventDefault: true,\n run: (view) => {\n // Only complete if cursor is at the end\n if (view.state.selection.main.head !== view.state.doc.length) {\n return false;\n }\n\n const plugin = view.plugin(suggestionPlugin);\n return plugin?.completeSuggestion(view) ?? false;\n },\n },\n {\n key: 'Enter',\n preventDefault: true,\n run: (view) => {\n const text = view.state.doc.toString().trim();\n if (text.length > 0 && onSubmit) {\n const reset = onSubmit(text);\n\n // Clear the document after calling onEnter.\n if (reset) {\n view.dispatch({\n changes: {\n from: 0,\n to: view.state.doc.length,\n insert: '',\n },\n });\n }\n }\n\n return true;\n },\n },\n {\n key: 'Shift-Enter',\n preventDefault: true,\n run: (view) => {\n view.dispatch({\n changes: {\n from: view.state.selection.main.head,\n insert: '\\n',\n },\n selection: {\n anchor: view.state.selection.main.head + 1,\n head: view.state.selection.main.head + 1,\n },\n });\n return true;\n },\n },\n {\n key: 'Escape',\n preventDefault: true,\n run: (view) => {\n // Clear the entire document.\n view.dispatch({\n changes: {\n from: 0,\n to: view.state.doc.length,\n insert: '',\n },\n });\n return true;\n },\n },\n ]),\n ),\n ];\n};\n\nclass InlineSuggestionWidget extends WidgetType {\n constructor(private suffix: string) {\n super();\n }\n\n override toDOM() {\n const span = document.createElement('span');\n span.textContent = this.suffix;\n span.className = 'cm-inline-suggestion';\n return span;\n }\n\n override eq(other: InlineSuggestionWidget) {\n return other.suffix === this.suffix;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useRef, useState } from 'react';\n\nimport { useVoiceInput } from '@dxos/plugin-transcription';\nimport { Icon, IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { Spinner } from '@dxos/react-ui-sfx';\nimport { errorText, mx } from '@dxos/react-ui-theme';\n\nimport { Prompt, type PromptController, type PromptProps } from './Prompt';\nimport { AUTOMATION_PLUGIN } from '../../meta';\n\nexport type PromptBarProps = ThemedClassName<\n Pick<PromptProps, 'placeholder' | 'lineWrapping' | 'onSubmit' | 'onSuggest'> & {\n processing?: boolean;\n error?: Error;\n microphone?: boolean;\n onCancel?: () => void;\n }\n>;\n\nexport const PromptBar = ({\n classNames,\n placeholder,\n processing,\n error,\n microphone,\n onCancel,\n ...props\n}: PromptBarProps) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n\n const promptRef = useRef<PromptController>(null);\n\n // TODO(burdon): Configure capability in TranscriptionPlugin.\n const [active, setActive] = useState(false);\n const { recording } = useVoiceInput({\n active,\n onUpdate: (text) => {\n promptRef.current?.setText(text);\n promptRef.current?.focus();\n },\n });\n\n // TODO(burdon): Tooltip for error.\n return (\n <div\n className={mx(\n 'flex shrink-0 w-full grid grid-cols-[var(--rail-action)_1fr_var(--rail-action)] overflow-hidden',\n classNames,\n )}\n >\n <div className='flex w-[--rail-action] h-[--rail-action] items-center justify-center'>\n {(error && <Icon icon='ph--warning-circle--regular' classNames={errorText} size={5} />) || (\n <Spinner active={processing} />\n )}\n </div>\n <Prompt\n ref={promptRef}\n autoFocus\n classNames='pbs-2'\n lineWrapping={true}\n placeholder={placeholder ?? t('prompt placeholder')}\n {...props}\n />\n {(onCancel || microphone) && (\n <div className='flex w-[--rail-action] h-[--rail-action] items-center justify-center'>\n {processing && onCancel && (\n <IconButton\n classNames='px-1.5'\n variant='ghost'\n size={5}\n icon='ph--x--regular'\n iconOnly\n label={t('cancel processing button')}\n onClick={onCancel}\n />\n )}\n {!processing && microphone && (\n <IconButton\n classNames={mx('px-1.5', recording && 'bg-primary-500')}\n variant='ghost'\n size={5}\n icon='ph--microphone--regular'\n iconOnly\n noTooltip\n label={t('microphone button')}\n onMouseDown={() => setActive(true)}\n onMouseUp={() => setActive(false)}\n onTouchStart={() => setActive(true)}\n onTouchEnd={() => setActive(false)}\n />\n )}\n </div>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC, useCallback } from 'react';\n\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { type ThemedClassName } from '@dxos/react-ui';\n\nimport { Thread } from './Thread';\nimport { useChatProcessor, useMessageQueue } from '../../hooks';\nimport { type AIChatType } from '../../types';\n\n// TODO(burdon): Since this only wraps Thread, just separate out hook?\nexport const ThreadContainer: FC<ThemedClassName<{ chat?: AIChatType; onOpenChange?: (open: boolean) => void }>> = ({\n classNames,\n chat,\n onOpenChange,\n}) => {\n const space = getSpace(chat);\n const processor = useChatProcessor(space);\n const messageQueue = useMessageQueue(chat);\n const messages = [...(messageQueue?.items ?? []), ...processor.messages.value];\n\n const handleSubmit = useCallback(\n (text: string) => {\n // Don't accept input if still processing.\n if (processor.streaming.value) {\n log.warn('still processing');\n return false;\n }\n\n onOpenChange?.(true);\n\n invariant(messageQueue);\n void processor.request(text, {\n history: messageQueue.items,\n onComplete: (messages) => {\n messageQueue.append(messages);\n },\n });\n\n return true;\n },\n [processor, messageQueue, onOpenChange],\n );\n\n const handleCancel = useCallback(() => {\n if (processor.streaming.value) {\n void processor.cancel();\n }\n }, [processor]);\n\n return (\n <Thread\n classNames={classNames}\n space={space}\n messages={messages}\n processing={processor.streaming.value}\n error={processor.error.value}\n onSubmit={handleSubmit}\n onCancel={handleCancel}\n />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Signal, batch, computed, signal } from '@preact/signals-core';\n\nimport { type PromiseIntentDispatcher } from '@dxos/app-framework';\nimport { type Tool, Message, type MessageContentBlock } from '@dxos/artifact';\nimport {\n isToolUse,\n runTools,\n type AIServiceClientImpl,\n type GenerateRequest,\n type GenerationStream,\n MixedStreamParser,\n} from '@dxos/assistant';\nimport { createStatic } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Factor out.\ndeclare global {\n interface ToolContextExtensions {\n space?: Space;\n dispatch?: PromiseIntentDispatcher;\n }\n}\n\ntype RequestOptions = {\n history?: Message[];\n onComplete?: (messages: Message[]) => void;\n};\n\nexport type ChatProcessorOptions = Pick<GenerateRequest, 'model' | 'systemPrompt'>;\n\nconst defaultOptions: ChatProcessorOptions = {\n model: '@anthropic/claude-3-5-sonnet-20241022',\n systemPrompt: 'you are a helpful assistant',\n};\n\n/**\n * Handles interactions with the AI service.\n * Maintains a queue of messages and handles streaming responses from the AI service.\n * Executes tools based on AI responses.\n * Supports cancellation of in-progress requests.\n */\nexport class ChatProcessor {\n /** SSE stream parser. */\n private readonly _parser = new MixedStreamParser();\n\n /** Current streaming response (iterator). */\n private _stream: GenerationStream | undefined;\n\n /** Pending messages (incl. the user request). */\n private readonly _pending: Signal<Message[]> = signal([]);\n\n /** Current streaming block (from the AI service). */\n private readonly _block: Signal<MessageContentBlock | undefined> = signal(undefined);\n\n /** Prior history from queue. */\n private _history: Message[] = [];\n\n /**\n * Streaming state.\n * @reactive\n */\n public readonly streaming: Signal<boolean> = computed(() => this._block.value !== undefined);\n\n /**\n * Last error.\n * @reactive\n */\n public readonly error: Signal<Error | undefined> = signal(undefined);\n\n /**\n * Array of Messages (incl. the current message being streamed).\n * @reactive\n */\n public readonly messages: Signal<Message[]> = computed(() => {\n const messages = [...this._pending.value];\n if (this._block.value) {\n const current = messages.pop();\n invariant(current);\n const { content, ...rest } = current;\n const message = { ...rest, content: [...content, this._block.value] };\n messages.push(message);\n }\n\n return messages;\n });\n\n constructor(\n private readonly _client: AIServiceClientImpl,\n private _tools?: Tool[],\n private readonly _extensions?: ToolContextExtensions,\n private readonly _options: ChatProcessorOptions = defaultOptions,\n ) {\n // Message complete.\n this._parser.message.on((message) => {\n batch(() => {\n this._pending.value = [...this._pending.value, message];\n this._block.value = undefined;\n });\n });\n\n // Streaming update (happens before message complete).\n this._parser.update.on((block) => {\n batch(() => {\n this._block.value = block;\n });\n });\n }\n\n /**\n * Update tools.\n */\n setTools(tools: Tool[]) {\n this._tools = tools;\n }\n\n /**\n * Make GPT request.\n */\n async request(message: string, options: RequestOptions = {}): Promise<Message[]> {\n batch(() => {\n this._history = options.history ?? [];\n this._pending.value = [\n createStatic(Message, {\n role: 'user',\n content: [{ type: 'text', text: message }],\n }),\n ];\n this._block.value = undefined;\n });\n\n await this._generate();\n options.onComplete?.(this._pending.value);\n return this._reset();\n }\n\n /**\n * Cancel pending requests.\n * @returns Pending requests (incl. the request message).\n */\n async cancel(): Promise<Message[]> {\n log.info('cancelling...');\n this._stream?.abort();\n return this._reset();\n }\n\n private async _reset(): Promise<Message[]> {\n const messages = this._pending.value;\n batch(() => {\n this._history = [];\n this._pending.value = [];\n this._block.value = undefined;\n });\n\n return messages;\n }\n\n /**\n * Generate a response from the AI service.\n * Iterates over tool requests.\n */\n private async _generate() {\n try {\n let more = false;\n do {\n log.info('requesting', { history: this._history.length, messages: this._pending.value.length });\n this._stream = await this._client.generate({\n ...this._options,\n // TODO(burdon): Rename messages or separate history/message.\n history: [...this._history, ...this._pending.value],\n tools: this._tools,\n });\n\n // Wait until complete.\n await this._parser.parse(this._stream);\n await this._stream.complete();\n\n // Add messages.\n log.info('response', { messages: this._pending.value });\n\n // Resolve tool use locally.\n more = false;\n const message = this._pending.value.at(-1);\n invariant(message);\n if (isToolUse(message)) {\n log.info('tool request...');\n const response = await runTools({\n message: this._pending.value.at(-1)!,\n tools: this._tools ?? [],\n extensions: this._extensions,\n });\n\n log.info('tool response', { response });\n switch (response.type) {\n case 'continue': {\n this._pending.value = [...this._pending.value, response.message];\n more = true;\n break;\n }\n }\n }\n } while (more);\n\n log.info('done');\n } catch (err) {\n log.catch(err);\n this.error.value = new Error('AI service error', { cause: err });\n } finally {\n this._stream = undefined;\n this.error.value = undefined;\n }\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { Capabilities, useCapabilities, useCapability, useIntentDispatcher } from '@dxos/app-framework';\nimport { createSystemPrompt, type Tool } from '@dxos/artifact';\nimport { FunctionType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { useConfig } from '@dxos/react-client';\nimport { Filter, type Space, useQuery } from '@dxos/react-client/echo';\nimport { isNonNullable } from '@dxos/util';\n\nimport { AutomationCapabilities } from '../capabilities';\nimport { ChatProcessor } from '../hooks';\nimport { covertFunctionToTool, createToolsFromService } from '../tools';\nimport { ServiceType } from '../types';\n\n/**\n * Creates a processor for the chat.\n */\nexport const useChatProcessor = (space?: Space): ChatProcessor => {\n const aiClient = useCapability(AutomationCapabilities.AiClient);\n const globalTools = useCapabilities(Capabilities.Tools);\n const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n // Services.\n const services = useQuery(space, Filter.schema(ServiceType));\n const [serviceTools, setServiceTools] = useState<Tool[]>([]);\n useEffect(() => {\n log('creating service tools...');\n queueMicrotask(async () => {\n const tools = await Promise.all(services.map((service) => createToolsFromService(service)));\n setServiceTools(tools.flat());\n });\n }, [services]);\n\n // Tools and context.\n const config = useConfig();\n const functions = useQuery(space, Filter.schema(FunctionType));\n const [tools, extensions] = useMemo(() => {\n log('creating tools...');\n const tools = [\n ...globalTools.flat(),\n ...artifactDefinitions.flatMap((definition) => definition.tools),\n ...serviceTools,\n ...functions\n .map((fn) => covertFunctionToTool(fn, config.values.runtime?.services?.edge?.url ?? '', space?.id))\n .filter(isNonNullable),\n ];\n const extensions = { space, dispatch };\n return [tools, extensions];\n }, [dispatch, globalTools, artifactDefinitions, space, serviceTools, functions]);\n\n // Prompt.\n const systemPrompt = useMemo(\n () => createSystemPrompt({ artifacts: artifactDefinitions.map((definition) => definition.instructions) }),\n [artifactDefinitions],\n );\n\n // Create processor.\n // TODO(burdon): Updated on each query update above. Should just update current processor.\n const processor = useMemo(() => {\n log.info('creating processor...');\n return new ChatProcessor(aiClient, tools, extensions, {\n // TODO(burdon): Move to settings.\n model: '@anthropic/claude-3-5-sonnet-20241022',\n systemPrompt,\n });\n }, [aiClient, tools, extensions, systemPrompt]);\n\n return processor;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AiClient = lazy(() => import('./ai-client'));\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\n\nexport * from './capabilities';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { Mutex } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { createSubscriptionTrigger, type TriggerFactory } from '@dxos/functions';\nimport { FunctionTrigger } from '@dxos/functions';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, type Space, useQuery } from '@dxos/react-client/echo';\n\nimport { invokeFunction } from './invocation-handler';\n\nconst registerTriggersMutex = new Mutex();\n\nexport const useLocalTriggerManager = (space: Space) => {\n const client = useClient();\n\n // TODO(burdon): Factor out, creating context for plugin (runs outside of component).\n const [registry] = useState(new Map<string, Context>());\n const triggers = useQuery(space, Filter.schema(FunctionTrigger));\n useEffect(() => {\n setTimeout(async () => {\n // Mark-and-sweep removing disabled triggers.\n await registerTriggersMutex.executeSynchronized(async () => {\n const deprecated = new Set(Array.from(registry.keys()));\n log('triggers', {\n deprecated,\n all: triggers.map((t) => t.id),\n enabled: triggers.filter((t) => t.enabled).map((t) => t.id),\n });\n\n for (const trigger of triggers) {\n if (trigger.enabled) {\n if (registry.has(trigger.id)) {\n deprecated.delete(trigger.id);\n continue;\n }\n log.info('activating trigger', trigger.id);\n\n const ctx = new Context();\n registry.set(trigger.id, ctx);\n const triggerSpec = trigger.spec;\n invariant(triggerSpec);\n\n let triggerFactory: TriggerFactory<any>;\n if (triggerSpec.type === 'subscription') {\n triggerFactory = createSubscriptionTrigger;\n } else {\n log.info('unsupported trigger', { type: triggerSpec.type });\n continue;\n }\n\n await triggerFactory(ctx, space, trigger.spec, (data: any) => {\n return invokeFunction(client, space, trigger, data);\n });\n }\n }\n\n for (const id of deprecated) {\n const ctx = registry.get(id);\n if (ctx) {\n await ctx.dispose();\n registry.delete(id);\n }\n }\n });\n });\n }, [JSON.stringify(triggers)]);\n\n useEffect(() => {\n return () => {\n for (const ctx of registry.values()) {\n void ctx.dispose();\n }\n };\n }, []);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { sleep } from '@dxos/async';\nimport { getObjectCore, ResultFormat } from '@dxos/echo-db';\nimport { type AnyObjectData } from '@dxos/echo-schema';\nimport { FunctionType } from '@dxos/functions';\nimport { type FunctionTrigger } from '@dxos/functions';\nimport { invariant } from '@dxos/invariant';\nimport { DXN, LOCAL_SPACE_TAG } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { type Client, type Config } from '@dxos/react-client';\nimport { type Space } from '@dxos/react-client/echo';\n\nconst MAX_RETRIES = 3;\nconst RETRY_DELAY = 1_000;\n\nconst callFunction = async (funcUrl: string, trigger: any, data: any) => {\n const body = { event: 'trigger', trigger, data };\n\n let retryCount = 0;\n while (retryCount < MAX_RETRIES) {\n log.info('exec', { funcUrl, body, retryCount });\n const response = await fetch(funcUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n });\n\n const data = await response.text();\n log.info('response', { status: response.status, body: data });\n if (response.status === 409) {\n retryCount++;\n await sleep(RETRY_DELAY * Math.min(retryCount, 2));\n continue;\n }\n\n return { status: response.status, data };\n }\n return { status: 500 };\n};\n\nexport const invokeFunction = async (client: Client, space: Space, trigger: FunctionTrigger, data: any) => {\n try {\n invariant(trigger.spec);\n invariant(trigger.function);\n\n const script = await space.db.query({ id: trigger.function }, { format: ResultFormat.Plain }).first();\n const { objects: functions } = await space.db\n .query({ __typename: FunctionType.typename }, { format: ResultFormat.Plain })\n .run();\n const func = functions.find((fn) => referenceEquals(fn.source, trigger.function!)) as AnyObjectData | undefined;\n const funcSlug = func?.__meta.keys.find((key) => key.source === USERFUNCTIONS_META_KEY)?.id;\n if (!funcSlug) {\n log.warn('function not deployed', { scriptId: script.id, name: script.name });\n return 404;\n }\n\n const funcUrl = getFunctionUrl(client.config, funcSlug, space.id);\n const triggerData: AnyObjectData = {\n ...getObjectCore(trigger).toPlainObject(),\n // TODO: Remove when functions can query by DXN.\n promptId: trigger.meta?.prompt?.id,\n };\n // TODO: Remove when functions can add objects and easily modify collections (push, splice).\n return (await callFunction(funcUrl, triggerData, data)).status;\n } catch (err) {\n return 400;\n }\n};\n\nconst USERFUNCTIONS_META_KEY = 'dxos.org/service/function';\n\nconst getFunctionUrl = (config: Config, slug: string, spaceId?: string) => {\n const baseUrl = new URL('functions/', config.values.runtime?.services?.edge?.url);\n\n // Leading slashes cause the URL to be treated as an absolute path.\n const relativeUrl = slug.replace(/^\\//, '');\n const url = new URL(`./${relativeUrl}`, baseUrl.toString());\n spaceId && url.searchParams.set('spaceId', spaceId);\n url.protocol = 'https';\n return url.toString();\n};\n\n// TODO(dmaretskyi): Factor out.\n\ntype ReferenceLike = { '/': string } | string;\n\nconst referenceEquals = (a: ReferenceLike, b: ReferenceLike): boolean => {\n const aDXN = toDXN(a);\n const bDXN = toDXN(b);\n return aDXN.toString() === bDXN.toString();\n};\n\nconst toDXN = (ref: ReferenceLike): DXN => {\n if (typeof ref === 'string') {\n if (ref.startsWith('dxn:')) {\n return DXN.parse(ref);\n } else {\n return new DXN(DXN.kind.ECHO, [LOCAL_SPACE_TAG, ref]);\n }\n }\n\n invariant(typeof ref['/'] === 'string');\n return DXN.parse(ref['/']);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { type Message } from '@dxos/artifact';\nimport { DXN, QueueSubspaceTags } from '@dxos/keys';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useEdgeClient, useQueue } from '@dxos/react-edge-client';\n\nimport { type AIChatType } from '../types';\n\nexport const useMessageQueue = (chat?: AIChatType) => {\n const space = getSpace(chat);\n const queueDxn = useMemo(() => {\n const dxn = space && chat?.queue.dxn;\n return dxn ? new DXN(DXN.kind.QUEUE, [QueueSubspaceTags.DATA, space.id, dxn.parts.at(-1)!]) : undefined;\n }, [space, chat?.queue.dxn]);\n\n const edgeClient = useEdgeClient();\n return useQueue<Message>(edgeClient, queueDxn);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { type Space } from '@dxos/client/echo';\n\nimport { MockServiceRegistry } from '../testing';\nimport { type ServiceType, type ServiceQuery } from '../types';\n\n/**\n * Retrieves matching services from the registry.\n */\nexport const useServices = (space: Space, query?: ServiceQuery): ServiceType[] => {\n const registry = useMemo(() => new MockServiceRegistry(), []);\n const [services, setServices] = useState<ServiceType[]>([]);\n useEffect(() => {\n const t = setTimeout(async () => {\n const services = await registry.queryServices(query);\n setServices(services);\n });\n\n return () => clearTimeout(t);\n }, [query, registry]);\n\n return services;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { createSystemPrompt } from '@dxos/artifact';\nimport { type GenerateRequest } from '@dxos/assistant';\nimport { AST, S, toJsonSchema } from '@dxos/echo-schema';\n\nexport const createProcessorOptions = (artifacts: string[]): Pick<GenerateRequest, 'model' | 'systemPrompt'> => ({\n model: '@anthropic/claude-3-5-sonnet-20241022',\n systemPrompt: createSystemPrompt({ artifacts }),\n});\n\nexport const functions = [\n {\n name: 'example.com/function/chess',\n version: '0.1.0',\n inputSchema: toJsonSchema(\n S.Struct({\n level: S.Number.annotations({\n [AST.TitleAnnotationId]: 'Level',\n }),\n }),\n ),\n },\n {\n name: 'example.com/function/forex',\n version: '0.1.0',\n binding: 'FOREX',\n inputSchema: toJsonSchema(\n S.Struct({\n from: S.String.annotations({\n [AST.TitleAnnotationId]: 'Currency from',\n }),\n to: S.String.annotations({\n [AST.TitleAnnotationId]: 'Currency to',\n }),\n }),\n ),\n },\n];\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createStatic } from '@dxos/echo-schema';\n\nimport {\n type ApiAuthorization,\n type BaseServiceRegistry,\n type ServiceQuery,\n ServiceType,\n categoryIcons,\n} from '../types';\n\nexport class MockServiceRegistry implements BaseServiceRegistry {\n async queryServices(query?: ServiceQuery): Promise<ServiceType[]> {\n return TEST_SERVICES;\n }\n}\n\n// TODO(burdon): Can we generalize credentials?\n\nconst AMADEUS_AUTH: ApiAuthorization = {\n type: 'oauth',\n clientId: 'BOEnpLd1sMyKjAPGKYeAPFFy60u53QEG',\n clientSecret: 'n4qldSN7usvD57gm',\n tokenUrl: 'https://test.api.amadeus.com/v1/security/oauth2/token',\n grantType: 'client_credentials',\n};\n\nconst VISUAL_CROSSING_CREDENTIALS: ApiAuthorization = {\n type: 'api-key',\n key: 'FDPRVS953KB4GQQLD25GRT975',\n placement: {\n type: 'query',\n name: 'key',\n },\n};\n\n// Registries:\n// - https://apis.guru\n// - https://rapidapi.com\n// - https://github.com/konfig-sdks/openapi-examples\n// - https://publicapis.io/?utm_source=chatgpt.com\n\n// Examples:\n// - https://petstore.swagger.io/v2/swagger.json (testing)\n// - https://lichess.org/api\n// - https://github.com/konfig-sdks/openapi-examples/tree/main/xkcd\n// - https://api.coindesk.com/v1/bpi/currentprice.json\n// - https://www.coingecko.com/en/api/documentation\n\n// TODO(burdon): Support yaml endpoints.\n// - e.g., https://github.com/konfig-sdks/openapi-examples/blob/main/xkcd/openapi.yaml\n\nconst TEST_SERVICES: ServiceType[] = [\n createStatic(ServiceType, {\n serviceId: 'amadeus.com/service/FlightSearch',\n name: 'Amadeus Flight Search',\n description: 'Search for local and international flights.',\n category: 'travel',\n interfaces: [\n {\n kind: 'api',\n schemaUrl: 'https://api.apis.guru/v2/specs/amadeus.com/amadeus-flight-availabilities-search/1.0.2/swagger.json',\n authorization: AMADEUS_AUTH,\n },\n ],\n }),\n\n createStatic(ServiceType, {\n serviceId: 'amadeus.com/service/HotelSearch',\n name: 'Amadeus Hotel Search',\n description: 'Search for local and international hotels.',\n category: 'travel',\n interfaces: [\n {\n kind: 'api',\n schemaUrl: 'https://api.apis.guru/v2/specs/amadeus.com/amadeus-hotel-search/3.0.8/swagger.json',\n authorization: AMADEUS_AUTH,\n },\n ],\n }),\n\n createStatic(ServiceType, {\n serviceId: 'visualcrossing.com/service/Weather',\n name: 'Visual Crossing Weather',\n description: 'Search for global weather forecasts.',\n category: 'weather',\n interfaces: [\n {\n kind: 'api',\n schemaUrl: 'https://api.apis.guru/v2/specs/visualcrossing.com/weather/4.6/openapi.json',\n authorization: VISUAL_CROSSING_CREDENTIALS,\n },\n ],\n }),\n\n // TODO(burdon): Needs auth.\n createStatic(ServiceType, {\n serviceId: 'abstractapi.com/service/GeoLocation',\n name: 'Abstract GeoLocation',\n description: 'Get the location of any IP address.',\n category: 'geolocation',\n interfaces: [\n {\n kind: 'api',\n schemaUrl: 'https://api.apis.guru/v2/specs/abstractapi.com/geolocation/1.0.0/openapi.json',\n },\n ],\n }),\n\n //\n // Testing\n //\n\n ...Array.from({ length: 20 }, (_, i) =>\n createStatic(ServiceType, {\n serviceId: `example.com/service/test-${i}`,\n name: `Test ${i}`,\n description: `Test ${i}`,\n category: Object.keys(categoryIcons)[Math.floor(Math.random() * Object.keys(categoryIcons).length)],\n interfaces: [\n {\n kind: 'api',\n schemaUrl: 'https://petstore.swagger.io/v2/swagger.json',\n },\n ],\n }),\n ),\n] as const;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useState, useCallback, type KeyboardEventHandler, type ChangeEventHandler } from 'react';\n\n/**\n * Hook that handles text input events.\n */\n// TODO(burdon): Factor out.\nexport const useTextInputEvents = ({\n onEnter,\n onEscape,\n}: {\n onEnter?: (text: string) => boolean | void;\n onEscape?: () => void;\n}) => {\n const [value, setValue] = useState('');\n\n const onKeyDown = useCallback<KeyboardEventHandler<HTMLInputElement>>(\n (ev) => {\n switch (ev.key) {\n case 'Escape': {\n onEscape?.();\n setValue('');\n break;\n }\n\n case 'Enter': {\n const value = (ev.target as HTMLInputElement).value.trim();\n if (value.length > 0) {\n const reset = onEnter?.(value);\n if (reset) {\n setValue('');\n }\n }\n break;\n }\n }\n },\n [onEnter, onEscape],\n );\n\n const onChange = useCallback<ChangeEventHandler<HTMLInputElement>>((ev) => {\n setValue(ev.target.value);\n }, []);\n\n return [{ value, onKeyDown, onChange }, setValue];\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { ChatContainer } from './ChatContainer';\n\nexport * from './ChatContainer';\n\nexport default ChatContainer;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "StackItem", "React", "useCallback", "useMemo", "useRef", "useCapabilities", "TranscriptionCapabilities", "useIdentity", "ScrollContainer", "mx", "keyToFallback", "React", "invariant", "Button", "ButtonGroup", "Icon", "IconButton", "MarkdownViewer", "ToggleContainer", "NativeToggleContainer", "Json", "mx", "safeParseJson", "React", "useEffect", "useRef", "useState", "log", "NumericTabs", "StatusRoll", "ToggleContainer", "Json", "isToolMessage", "message", "content", "some", "block", "type", "ToolBlock", "classNames", "request", "blocks", "filter", "items", "map", "title", "name", "warn", "undefined", "ToolContainer", "lines", "item", "tabsRef", "selected", "setSelected", "open", "setOpen", "current", "focus", "handleSelect", "index", "autoAdvance", "onChangeOpen", "div", "className", "ref", "length", "onSelect", "data", "React", "useState", "useEffect", "Capabilities", "useCapabilities", "FunctionType", "log", "Filter", "useQuery", "mx", "defineTool", "ToolResult", "toEffectSchema", "getInvocationUrl", "getUserFunctionUrlInMetadata", "log", "getMeta", "covertFunctionToTool", "fn", "edgeUrl", "spaceId", "description", "inputSchema", "undefined", "existingFunctionUrl", "url", "name", "schema", "execute", "input", "info", "response", "fetch", "method", "headers", "body", "JSON", "stringify", "Success", "text", "jsonpointer", "ToolResult", "JsonSchemaType", "normalizeSchema", "S", "toEffectSchema", "invariant", "log", "deepMapValues", "createToolsFromService", "service", "interfaces", "length", "kind", "iface", "schemaUrl", "createToolsFromApi", "authorization", "url", "options", "res", "fetch", "spec", "json", "tools", "path", "pathItem", "Object", "entries", "paths", "methods", "method", "m", "methodItem", "parametersResolved", "parameters", "map", "parameter", "resolved", "resolveJsonSchema", "inputSchema", "type", "properties", "endpointParameters", "placement", "in", "name", "push", "schema", "_in", "required", "validateSync", "description", "summary", "warn", "endpoint", "document", "getToolName", "instructions", "execute", "input", "response", "callApiEndpoint", "Success", "operationId", "toLowerCase", "replaceAll", "MAX_TOOL_NAME_LENGTH", "lengthBefore", "word", "GENERIC_WORDS", "includes", "replace", "lengthAfter", "slice", "info", "getEndpointUrl", "request", "headers", "query", "URLSearchParams", "body", "undefined", "example", "default", "encodeURIComponent", "value", "effectSchema", "Error", "set", "Authorization", "resolveAuthorization", "key", "size", "toString", "JSON", "stringify", "ok", "status", "statusText", "contentType", "get", "text", "responseBody", "error", "parse", "message", "isV3_1", "servers", "schemes", "host", "basePath", "tokenUrl", "grantType", "clientId", "clientSecret", "data", "access_token", "base", "recurse", "$ref", "startsWith", "ref", "openapi", "stripClassNames", "Toolbox", "classNames", "artifacts", "functions", "services", "striped", "React", "div", "className", "mx", "map", "id", "tools", "rest", "name", "description", "i", "key", "service", "serviceId", "ToolboxContainer", "space", "artifactDefinitions", "useCapabilities", "Capabilities", "ArtifactDefinition", "useQuery", "Filter", "schema", "FunctionType", "ServiceType", "serviceTools", "setServiceTools", "useState", "useEffect", "log", "queueMicrotask", "Promise", "all", "createToolsFromService", "userClassNames", "panelClassNames", "ToggleContainer", "props", "React", "NativeToggleContainer", "classNames", "mx", "MessageContainer", "children", "user", "div", "role", "className", "ThreadMessage", "space", "message", "onPrompt", "content", "isToolMessage", "ToolBlock", "map", "block", "idx", "key", "type", "Block", "Component", "components", "default", "invariant", "title", "disposition", "titles", "undefined", "MarkdownViewer", "text", "defaultOpen", "pending", "icon", "Icon", "size", "ToolboxContainer", "safeParseJson", "json", "IconButton", "label", "onClick", "options", "ButtonGroup", "option", "Button", "Json", "data", "name", "messageReducer", "current", "messages", "message", "i", "block", "content", "type", "push", "id", "join", "role", "undefined", "React", "forwardRef", "useImperativeHandle", "useThemeContext", "createBasicExtensions", "createThemeExtensions", "useTextEditor", "mx", "Prec", "EditorView", "Decoration", "ViewPlugin", "keymap", "WidgetType", "createAutocompleteExtension", "onSubmit", "onSuggest", "suggestionPlugin", "ViewPlugin", "fromClass", "constructor", "view", "_currentSuggestion", "_decorations", "computeDecorations", "update", "docChanged", "selectionSet", "text", "state", "doc", "toString", "suggestions", "length", "Decoration", "none", "suffix", "slice", "set", "widget", "InlineSuggestionWidget", "side", "range", "completeSuggestion", "dispatch", "changes", "from", "insert", "selection", "anchor", "decorations", "v", "EditorView", "theme", "opacity", "Prec", "highest", "keymap", "of", "key", "preventDefault", "run", "plugin", "main", "head", "trim", "reset", "to", "WidgetType", "toDOM", "span", "document", "createElement", "textContent", "className", "eq", "other", "Prompt", "forwardRef", "classNames", "autoFocus", "lineWrapping", "placeholder", "onSubmit", "onSuggest", "themeMode", "useThemeContext", "parentRef", "view", "useTextEditor", "extensions", "createBasicExtensions", "bracketMatching", "createThemeExtensions", "createAutocompleteExtension", "useImperativeHandle", "focus", "setText", "text", "dispatch", "changes", "from", "to", "state", "doc", "length", "insert", "selection", "anchor", "head", "React", "div", "ref", "className", "mx", "React", "useRef", "useState", "useVoiceInput", "Icon", "IconButton", "useTranslation", "Spinner", "errorText", "mx", "PromptBar", "classNames", "placeholder", "processing", "error", "microphone", "onCancel", "props", "t", "useTranslation", "AUTOMATION_PLUGIN", "promptRef", "useRef", "active", "setActive", "useState", "recording", "useVoiceInput", "onUpdate", "text", "current", "setText", "focus", "React", "div", "className", "mx", "Icon", "icon", "errorText", "size", "Spinner", "Prompt", "ref", "autoFocus", "lineWrapping", "IconButton", "variant", "iconOnly", "label", "onClick", "noTooltip", "onMouseDown", "onMouseUp", "onTouchStart", "onTouchEnd", "Thread", "classNames", "space", "messages", "collapse", "processing", "error", "debug", "onSubmit", "onCancel", "onPrompt", "onDelete", "hasTrascription", "useCapabilities", "TranscriptionCapabilities", "Transcription", "length", "scroller", "useRef", "identity", "useIdentity", "fallbackValue", "keyToFallback", "identityKey", "userHue", "profile", "data", "hue", "handleSubmit", "useCallback", "value", "current", "scrollToBottom", "filteredMessages", "useMemo", "reduce", "messageReducer", "React", "ScrollContainer", "ref", "fade", "div", "role", "className", "mx", "style", "map", "message", "ThreadMessage", "key", "id", "PromptBar", "microphone", "React", "useCallback", "invariant", "log", "getSpace", "batch", "computed", "signal", "Message", "isToolUse", "runTools", "MixedStreamParser", "createStatic", "invariant", "log", "defaultOptions", "model", "systemPrompt", "ChatProcessor", "constructor", "_client", "_tools", "_extensions", "_options", "_parser", "_pending", "_block", "undefined", "_history", "streaming", "value", "error", "messages", "current", "pop", "content", "rest", "message", "push", "on", "update", "block", "setTools", "tools", "request", "options", "history", "role", "type", "text", "_generate", "onComplete", "_reset", "cancel", "info", "_stream", "abort", "more", "length", "generate", "parse", "complete", "at", "response", "extensions", "err", "catch", "Error", "cause", "useEffect", "useMemo", "useState", "Capabilities", "useCapabilities", "useCapability", "useIntentDispatcher", "createSystemPrompt", "FunctionType", "log", "useConfig", "Filter", "useQuery", "isNonNullable", "lazy", "AiClient", "lazy", "AppGraphBuilder", "IntentResolver", "ReactSurface", "useChatProcessor", "space", "aiClient", "useCapability", "AutomationCapabilities", "AiClient", "globalTools", "useCapabilities", "Capabilities", "Tools", "artifactDefinitions", "ArtifactDefinition", "dispatchPromise", "dispatch", "useIntentDispatcher", "services", "useQuery", "Filter", "schema", "ServiceType", "serviceTools", "setServiceTools", "useState", "useEffect", "log", "queueMicrotask", "tools", "Promise", "all", "map", "service", "createToolsFromService", "flat", "config", "useConfig", "functions", "FunctionType", "extensions", "useMemo", "flatMap", "definition", "fn", "covertFunctionToTool", "values", "runtime", "edge", "url", "id", "filter", "isNonNullable", "systemPrompt", "createSystemPrompt", "artifacts", "instructions", "processor", "info", "ChatProcessor", "model", "useEffect", "useState", "Mutex", "Context", "createSubscriptionTrigger", "FunctionTrigger", "invariant", "log", "useClient", "Filter", "useQuery", "sleep", "getObjectCore", "ResultFormat", "FunctionType", "invariant", "DXN", "LOCAL_SPACE_TAG", "log", "registerTriggersMutex", "Mutex", "useMemo", "DXN", "QueueSubspaceTags", "getSpace", "useEdgeClient", "useQueue", "useMessageQueue", "chat", "space", "getSpace", "queueDxn", "useMemo", "dxn", "queue", "DXN", "kind", "QUEUE", "QueueSubspaceTags", "DATA", "id", "parts", "at", "undefined", "edgeClient", "useEdgeClient", "useQueue", "useEffect", "useMemo", "useState", "createSystemPrompt", "AST", "S", "toJsonSchema", "functions", "name", "version", "inputSchema", "toJsonSchema", "S", "Struct", "level", "Number", "annotations", "AST", "TitleAnnotationId", "binding", "from", "String", "to", "createStatic", "MockServiceRegistry", "queryServices", "query", "TEST_SERVICES", "AMADEUS_AUTH", "type", "clientId", "clientSecret", "tokenUrl", "grantType", "VISUAL_CROSSING_CREDENTIALS", "key", "placement", "name", "createStatic", "ServiceType", "serviceId", "description", "category", "interfaces", "kind", "schemaUrl", "authorization", "Array", "from", "length", "_", "i", "Object", "keys", "categoryIcons", "Math", "floor", "random", "useServices", "space", "query", "registry", "useMemo", "MockServiceRegistry", "services", "setServices", "useState", "useEffect", "t", "setTimeout", "queryServices", "clearTimeout", "useState", "useCallback", "ThreadContainer", "classNames", "chat", "onOpenChange", "space", "getSpace", "processor", "useChatProcessor", "messageQueue", "useMessageQueue", "messages", "items", "value", "handleSubmit", "useCallback", "text", "streaming", "log", "warn", "invariant", "request", "history", "onComplete", "append", "handleCancel", "cancel", "React", "Thread", "processing", "error", "onSubmit", "onCancel", "ChatContainer", "chat", "role", "React", "StackItem", "Content", "toolbar", "classNames", "ThreadContainer", "ChatContainer"]
7
+ }
@@ -1,35 +1,59 @@
1
1
  import {
2
+ AssistantDialog,
3
+ AutomationPanel,
4
+ ChatContainer,
5
+ PromptEditor,
6
+ ServiceRegistry
7
+ } from "./chunk-M4MWUOUC.mjs";
8
+ import {
9
+ TriggerEditor
10
+ } from "./chunk-LJ7F4KDM.mjs";
11
+ import {
12
+ AiClient,
13
+ AppGraphBuilder,
14
+ IntentResolver,
15
+ ReactSurface,
16
+ Thread,
17
+ ThreadContainer,
18
+ Toolbox,
19
+ ToolboxContainer
20
+ } from "./chunk-U435IUIA.mjs";
21
+ import "./chunk-67KDIIM6.mjs";
22
+ import {
23
+ AIChatType,
24
+ ApiAuthorization,
25
+ AutomationAction,
2
26
  ChainInputSchema,
3
27
  ChainInputType,
4
28
  ChainPromptType,
5
- ChainType
6
- } from "./chunk-DL6LB2NI.mjs";
7
- import {
8
- AssistantPanel,
9
- AutomationPanel
10
- } from "./chunk-4ODBJDXM.mjs";
29
+ ChainType,
30
+ ServiceType,
31
+ categoryIcons
32
+ } from "./chunk-L2YLAKCS.mjs";
11
33
  import {
34
+ ASSISTANT_DIALOG,
12
35
  AUTOMATION_PLUGIN,
13
36
  meta
14
- } from "./chunk-DQ7ZSYJJ.mjs";
37
+ } from "./chunk-HZSTXZWK.mjs";
15
38
 
16
39
  // packages/plugins/experimental/plugin-automation/src/AutomationPlugin.tsx
17
- import { Capabilities, contributes, defineModule, definePlugin, Events } from "@dxos/app-framework";
40
+ import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from "@dxos/app-framework";
18
41
  import { FunctionTrigger } from "@dxos/functions";
19
42
  import { ClientCapabilities, ClientEvents } from "@dxos/plugin-client";
20
- import { DeckCapabilities } from "@dxos/plugin-deck";
21
- import { RefArray } from "@dxos/react-client/echo";
22
-
23
- // packages/plugins/experimental/plugin-automation/src/capabilities/index.ts
24
- import { lazy } from "@dxos/app-framework";
25
- var AppGraphBuilder = lazy(() => import("./app-graph-builder-6FSMLMT4.mjs"));
26
- var ReactSurface = lazy(() => import("./react-surface-5YTE5MRE.mjs"));
43
+ import { DeckCapabilities, DeckEvents } from "@dxos/plugin-deck";
44
+ import { SpaceCapabilities } from "@dxos/plugin-space";
45
+ import { defineObjectForm } from "@dxos/plugin-space/types";
46
+ import { RefArray, isEchoObject, getSpace } from "@dxos/react-client/echo";
27
47
 
28
48
  // packages/plugins/experimental/plugin-automation/src/translations.ts
29
49
  var translations_default = [
30
50
  {
31
51
  "en-US": {
52
+ [AIChatType.typename]: {
53
+ "typename label": "AI Chat"
54
+ },
32
55
  [AUTOMATION_PLUGIN]: {
56
+ "open ambient chat label": "Open AI chat",
33
57
  "plugin name": "Automation",
34
58
  "object placeholder": "New prompt",
35
59
  "create object label": "Create prompt",
@@ -41,6 +65,11 @@ var translations_default = [
41
65
  "select preset template placeholder": "Select preset",
42
66
  "open automation panel label": "Show Automations",
43
67
  "automation panel label": "Automations",
68
+ "service registry label": "Service Registry",
69
+ "assistant dialog title": "Assistant",
70
+ "open assistant label": "Open assistant",
71
+ "chat input placeholder": "Ask a question...",
72
+ "chat stop": "Cancel request.",
44
73
  "function select label": "Function",
45
74
  "function select placeholder": "Select function",
46
75
  "function enabled": "Enabled",
@@ -51,6 +80,7 @@ var translations_default = [
51
80
  "trigger type websocket": "Websocket",
52
81
  "trigger type subscription": "Subscription",
53
82
  "trigger type email": "Email",
83
+ "trigger type queue": "Queue",
54
84
  "trigger filter": "Filter",
55
85
  "trigger cron": "Cron",
56
86
  "trigger method": "Method",
@@ -60,8 +90,9 @@ var translations_default = [
60
90
  "trigger meta add": "Add",
61
91
  "trigger meta remove": "Remove",
62
92
  "trigger meta prop name placeholder": "New meta property name",
63
- "open assistant panel label": "Show Assistant",
64
- "assistant panel label": "Assistant"
93
+ "prompt placeholder": "Ask a question...",
94
+ "microphone button": "Click to speak",
95
+ "cancel processing button": "Stop processing"
65
96
  }
66
97
  }
67
98
  }
@@ -77,65 +108,105 @@ var AutomationPlugin = () => definePlugin(meta, [
77
108
  defineModule({
78
109
  id: `${meta.id}/module/metadata`,
79
110
  activatesOn: Events.SetupMetadata,
80
- activate: () => contributes(Capabilities.Metadata, {
81
- id: ChainType.typename,
82
- metadata: {
83
- placeholder: [
84
- "object placeholder",
85
- {
86
- ns: AUTOMATION_PLUGIN
87
- }
88
- ],
89
- icon: "ph--magic-wand--regular",
90
- // TODO(wittjosiah): Move out of metadata.
91
- loadReferences: async (chain) => await RefArray.loadAll(chain.prompts ?? [])
92
- }
93
- })
111
+ activate: () => [
112
+ contributes(Capabilities.Metadata, {
113
+ id: ChainType.typename,
114
+ metadata: {
115
+ placeholder: [
116
+ "object placeholder",
117
+ {
118
+ ns: AUTOMATION_PLUGIN
119
+ }
120
+ ],
121
+ icon: "ph--magic-wand--regular",
122
+ // TODO(wittjosiah): Move out of metadata.
123
+ loadReferences: async (chain) => await RefArray.loadAll(chain.prompts ?? [])
124
+ }
125
+ }),
126
+ contributes(Capabilities.Metadata, {
127
+ id: AIChatType.typename,
128
+ metadata: {
129
+ placeholder: [
130
+ "object placeholder",
131
+ {
132
+ ns: AUTOMATION_PLUGIN
133
+ }
134
+ ],
135
+ icon: "ph--atom--regular"
136
+ }
137
+ })
138
+ ]
139
+ }),
140
+ defineModule({
141
+ id: `${meta.id}/module/object-form`,
142
+ activatesOn: ClientEvents.SetupSchema,
143
+ activate: () => contributes(SpaceCapabilities.ObjectForm, defineObjectForm({
144
+ objectSchema: AIChatType,
145
+ getIntent: (_, options) => createIntent(AutomationAction.CreateChat, {
146
+ spaceId: options.space.id
147
+ })
148
+ }))
94
149
  }),
95
150
  defineModule({
96
151
  id: `${meta.id}/module/schema`,
97
152
  activatesOn: ClientEvents.SetupSchema,
98
- activate: () => contributes(ClientCapabilities.SystemSchema, [
153
+ activate: () => contributes(ClientCapabilities.Schema, [
99
154
  ChainType,
100
155
  ChainPromptType,
101
- FunctionTrigger
156
+ FunctionTrigger,
157
+ ServiceType
102
158
  ])
103
159
  }),
104
160
  defineModule({
105
161
  id: `${meta.id}/module/complementary-panels`,
106
- activatesOn: Events.Startup,
162
+ activatesOn: DeckEvents.SetupComplementaryPanels,
107
163
  activate: () => [
108
164
  contributes(DeckCapabilities.ComplementaryPanel, {
109
- id: "automation",
165
+ id: "service-registry",
110
166
  label: [
111
- "automation panel label",
167
+ "service registry label",
112
168
  {
113
169
  ns: AUTOMATION_PLUGIN
114
170
  }
115
171
  ],
116
- icon: "ph--magic-wand--regular"
172
+ icon: "ph--plugs--regular"
117
173
  }),
118
174
  contributes(DeckCapabilities.ComplementaryPanel, {
119
- id: "assistant",
175
+ id: "automation",
120
176
  label: [
121
- "assistant panel label",
177
+ "automation panel label",
122
178
  {
123
179
  ns: AUTOMATION_PLUGIN
124
180
  }
125
181
  ],
126
- icon: "ph--atom--regular"
182
+ icon: "ph--magic-wand--regular",
183
+ filter: (node) => isEchoObject(node.data) && !!getSpace(node.data)
127
184
  })
128
185
  ]
129
186
  }),
130
187
  defineModule({
131
188
  id: `${meta.id}/module/react-surface`,
132
- activatesOn: Events.SetupSurfaces,
189
+ activatesOn: Events.SetupReactSurface,
190
+ // TODO(wittjosiah): Should occur before the chat is loaded when surfaces activation is more granular.
191
+ activatesBefore: [
192
+ Events.SetupArtifactDefinition
193
+ ],
133
194
  activate: ReactSurface
134
195
  }),
135
196
  defineModule({
136
197
  id: `${meta.id}/module/app-graph-builder`,
137
198
  activatesOn: Events.SetupAppGraph,
138
199
  activate: AppGraphBuilder
200
+ }),
201
+ defineModule({
202
+ id: `${meta.id}/module/intent-resolver`,
203
+ activatesOn: Events.SetupIntentResolver,
204
+ activate: IntentResolver
205
+ }),
206
+ defineModule({
207
+ id: `${meta.id}/module/ai-client`,
208
+ activatesOn: ClientEvents.ClientReady,
209
+ activate: AiClient
139
210
  })
140
211
  ]);
141
212
 
@@ -357,14 +428,28 @@ var chainPresets = [
357
428
  }
358
429
  ];
359
430
  export {
431
+ AIChatType,
432
+ ASSISTANT_DIALOG,
360
433
  AUTOMATION_PLUGIN,
361
- AssistantPanel,
434
+ ApiAuthorization,
435
+ AssistantDialog,
436
+ AutomationAction,
362
437
  AutomationPanel,
363
438
  AutomationPlugin,
364
439
  ChainInputSchema,
365
440
  ChainInputType,
366
441
  ChainPromptType,
367
442
  ChainType,
443
+ ChatContainer,
444
+ PromptEditor,
445
+ ServiceRegistry,
446
+ ServiceType,
447
+ Thread,
448
+ ThreadContainer,
449
+ Toolbox,
450
+ ToolboxContainer,
451
+ TriggerEditor,
452
+ categoryIcons,
368
453
  chainPresets,
369
454
  meta,
370
455
  str