@dxos/plugin-automation 0.7.4 → 0.7.5-labs.401163d

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 (302) hide show
  1. package/dist/lib/browser/AutomationPanel-VW2XIUPU.mjs +8 -0
  2. package/dist/lib/browser/ChatContainer-OLRZNGWK.mjs +12 -0
  3. package/dist/lib/browser/ai-client-5CNY6JBF.mjs +22 -0
  4. package/dist/lib/browser/ai-client-5CNY6JBF.mjs.map +7 -0
  5. package/dist/lib/browser/app-graph-builder-6H7MDCXE.mjs +197 -0
  6. package/dist/lib/browser/app-graph-builder-6H7MDCXE.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-2H2EUYXL.mjs +15 -0
  8. package/dist/lib/browser/chunk-2H2EUYXL.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-ITG6CBKL.mjs +1602 -0
  10. package/dist/lib/browser/chunk-ITG6CBKL.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-MRBC5J4T.mjs +518 -0
  12. package/dist/lib/browser/chunk-MRBC5J4T.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-NQFZ6XRX.mjs +243 -0
  14. package/dist/lib/browser/chunk-NQFZ6XRX.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-Q4IMHYGH.mjs +150 -0
  16. package/dist/lib/browser/chunk-Q4IMHYGH.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-X5KMOH3I.mjs → chunk-R4JH4TLE.mjs} +6 -4
  18. package/dist/lib/browser/chunk-R4JH4TLE.mjs.map +7 -0
  19. package/dist/lib/browser/index.mjs +157 -252
  20. package/dist/lib/browser/index.mjs.map +4 -4
  21. package/dist/lib/browser/intent-resolver-BWAXKT27.mjs +29 -0
  22. package/dist/lib/browser/intent-resolver-BWAXKT27.mjs.map +7 -0
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/react-surface-O6SHIBCA.mjs +58 -0
  25. package/dist/lib/browser/react-surface-O6SHIBCA.mjs.map +7 -0
  26. package/dist/lib/browser/types/index.mjs +12 -3
  27. package/dist/lib/node/{meta.cjs → AutomationPanel-G6EDDYWW.cjs} +7 -11
  28. package/dist/lib/node/AutomationPanel-G6EDDYWW.cjs.map +7 -0
  29. package/dist/lib/node/ChatContainer-GRZDJIG5.cjs +33 -0
  30. package/dist/lib/node/ChatContainer-GRZDJIG5.cjs.map +7 -0
  31. package/dist/lib/node/ai-client-FKLPDELV.cjs +38 -0
  32. package/dist/lib/node/ai-client-FKLPDELV.cjs.map +7 -0
  33. package/dist/lib/node/app-graph-builder-7JMJLZIE.cjs +212 -0
  34. package/dist/lib/node/app-graph-builder-7JMJLZIE.cjs.map +7 -0
  35. package/dist/lib/node/chunk-CFBERLTN.cjs +1586 -0
  36. package/dist/lib/node/chunk-CFBERLTN.cjs.map +7 -0
  37. package/dist/lib/node/{chunk-DTJ7XVO2.cjs → chunk-EQYHOTGG.cjs} +11 -8
  38. package/dist/lib/node/chunk-EQYHOTGG.cjs.map +7 -0
  39. package/dist/lib/node/chunk-FQUY77HT.cjs +527 -0
  40. package/dist/lib/node/chunk-FQUY77HT.cjs.map +7 -0
  41. package/dist/lib/node/chunk-GB7245FH.cjs +173 -0
  42. package/dist/lib/node/chunk-GB7245FH.cjs.map +7 -0
  43. package/dist/lib/node/chunk-QXIHYOMF.cjs +267 -0
  44. package/dist/lib/node/chunk-QXIHYOMF.cjs.map +7 -0
  45. package/dist/lib/node/chunk-U5Z7LFWB.cjs +34 -0
  46. package/dist/lib/node/chunk-U5Z7LFWB.cjs.map +7 -0
  47. package/dist/lib/node/index.cjs +174 -282
  48. package/dist/lib/node/index.cjs.map +4 -4
  49. package/dist/lib/node/intent-resolver-C6OKFVEW.cjs +44 -0
  50. package/dist/lib/node/intent-resolver-C6OKFVEW.cjs.map +7 -0
  51. package/dist/lib/node/meta.json +1 -1
  52. package/dist/lib/node/react-surface-JT6SVCPK.cjs +76 -0
  53. package/dist/lib/node/react-surface-JT6SVCPK.cjs.map +7 -0
  54. package/dist/lib/node/types/index.cjs +16 -7
  55. package/dist/lib/node/types/index.cjs.map +2 -2
  56. package/dist/lib/node-esm/AutomationPanel-V3IWQAMO.mjs +9 -0
  57. package/dist/lib/node-esm/AutomationPanel-V3IWQAMO.mjs.map +7 -0
  58. package/dist/lib/node-esm/ChatContainer-ORVWQPJO.mjs +13 -0
  59. package/dist/lib/node-esm/ChatContainer-ORVWQPJO.mjs.map +7 -0
  60. package/dist/lib/node-esm/ai-client-XGNA6SJ5.mjs +23 -0
  61. package/dist/lib/node-esm/ai-client-XGNA6SJ5.mjs.map +7 -0
  62. package/dist/lib/node-esm/app-graph-builder-C6NUQGCU.mjs +198 -0
  63. package/dist/lib/node-esm/app-graph-builder-C6NUQGCU.mjs.map +7 -0
  64. package/dist/lib/node-esm/chunk-2OKJZ4ZW.mjs +519 -0
  65. package/dist/lib/node-esm/chunk-2OKJZ4ZW.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-6HLBYDUI.mjs +244 -0
  67. package/dist/lib/node-esm/chunk-6HLBYDUI.mjs.map +7 -0
  68. package/dist/lib/node-esm/chunk-7VPT3OO3.mjs +1603 -0
  69. package/dist/lib/node-esm/chunk-7VPT3OO3.mjs.map +7 -0
  70. package/dist/lib/node-esm/chunk-DNCXRGAF.mjs +151 -0
  71. package/dist/lib/node-esm/chunk-DNCXRGAF.mjs.map +7 -0
  72. package/dist/lib/node-esm/{chunk-HNOBZHWK.mjs → chunk-EMVA6QUT.mjs} +6 -4
  73. package/dist/lib/node-esm/chunk-EMVA6QUT.mjs.map +7 -0
  74. package/dist/lib/node-esm/chunk-IJRTDSKN.mjs +16 -0
  75. package/dist/lib/node-esm/chunk-IJRTDSKN.mjs.map +7 -0
  76. package/dist/lib/node-esm/index.mjs +157 -252
  77. package/dist/lib/node-esm/index.mjs.map +4 -4
  78. package/dist/lib/node-esm/intent-resolver-DCP4ZDBA.mjs +30 -0
  79. package/dist/lib/node-esm/intent-resolver-DCP4ZDBA.mjs.map +7 -0
  80. package/dist/lib/node-esm/meta.json +1 -1
  81. package/dist/lib/node-esm/react-surface-DSVM33SA.mjs +59 -0
  82. package/dist/lib/node-esm/react-surface-DSVM33SA.mjs.map +7 -0
  83. package/dist/lib/node-esm/types/index.mjs +12 -3
  84. package/dist/types/src/AutomationPlugin.d.ts +1 -3
  85. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  86. package/dist/types/src/artifacts.stories.d.ts +16 -0
  87. package/dist/types/src/artifacts.stories.d.ts.map +1 -0
  88. package/dist/types/src/capabilities/ai-client.d.ts +5 -0
  89. package/dist/types/src/capabilities/ai-client.d.ts.map +1 -0
  90. package/dist/types/src/capabilities/app-graph-builder.d.ts +181 -0
  91. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  92. package/dist/types/src/capabilities/capabilities.d.ts +5 -0
  93. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  94. package/dist/types/src/capabilities/index.d.ts +182 -0
  95. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  96. package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
  97. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  98. package/dist/types/src/capabilities/react-surface.d.ts +4 -0
  99. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  100. package/dist/types/src/components/AmbientChatDialog/AmbientChatDialog.d.ts +3 -0
  101. package/dist/types/src/components/AmbientChatDialog/AmbientChatDialog.d.ts.map +1 -0
  102. package/dist/types/src/components/AmbientChatDialog/AmbientChatDialog.stories.d.ts +8 -0
  103. package/dist/types/src/components/AmbientChatDialog/AmbientChatDialog.stories.d.ts.map +1 -0
  104. package/dist/types/src/components/AmbientChatDialog/index.d.ts +2 -0
  105. package/dist/types/src/components/AmbientChatDialog/index.d.ts.map +1 -0
  106. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +1 -1
  107. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  108. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  109. package/dist/types/src/components/Box/StatusLine.d.ts +11 -0
  110. package/dist/types/src/components/Box/StatusLine.d.ts.map +1 -0
  111. package/dist/types/src/components/Box/StatusLine.stories.d.ts +9 -0
  112. package/dist/types/src/components/Box/StatusLine.stories.d.ts.map +1 -0
  113. package/dist/types/src/components/Box/Tabbed.d.ts +15 -0
  114. package/dist/types/src/components/Box/Tabbed.d.ts.map +1 -0
  115. package/dist/types/src/components/Box/Tabbed.stories.d.ts +8 -0
  116. package/dist/types/src/components/Box/Tabbed.stories.d.ts.map +1 -0
  117. package/dist/types/src/components/Box/ToggleContainer.d.ts +13 -0
  118. package/dist/types/src/components/Box/ToggleContainer.d.ts.map +1 -0
  119. package/dist/types/src/components/Box/ToggleContainer.stories.d.ts +9 -0
  120. package/dist/types/src/components/Box/ToggleContainer.stories.d.ts.map +1 -0
  121. package/dist/types/src/components/Box/index.d.ts +4 -0
  122. package/dist/types/src/components/Box/index.d.ts.map +1 -0
  123. package/dist/types/src/components/ChatContainer/ChatContainer.d.ts +7 -0
  124. package/dist/types/src/components/ChatContainer/ChatContainer.d.ts.map +1 -0
  125. package/dist/types/src/components/ChatContainer/index.d.ts +4 -0
  126. package/dist/types/src/components/ChatContainer/index.d.ts.map +1 -0
  127. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.d.ts +14 -0
  128. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.d.ts.map +1 -0
  129. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.stories.d.ts +8 -0
  130. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.stories.d.ts.map +1 -0
  131. package/dist/types/src/components/MarkdownViewer/index.d.ts +2 -0
  132. package/dist/types/src/components/MarkdownViewer/index.d.ts.map +1 -0
  133. package/dist/types/src/components/Prompt/Prompt.d.ts +7 -0
  134. package/dist/types/src/components/Prompt/Prompt.d.ts.map +1 -0
  135. package/dist/types/src/components/Prompt/Prompt.stories.d.ts +8 -0
  136. package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +1 -0
  137. package/dist/types/src/components/Prompt/index.d.ts +2 -0
  138. package/dist/types/src/components/Prompt/index.d.ts.map +1 -0
  139. package/dist/types/src/components/Prompt/prompt-autocomplete.d.ts +20 -0
  140. package/dist/types/src/components/Prompt/prompt-autocomplete.d.ts.map +1 -0
  141. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts +6 -0
  142. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts.map +1 -0
  143. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts +8 -0
  144. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts.map +1 -0
  145. package/dist/types/src/components/ServiceRegistry/index.d.ts +2 -0
  146. package/dist/types/src/components/ServiceRegistry/index.d.ts.map +1 -0
  147. package/dist/types/src/components/Thread/Thread.d.ts +11 -0
  148. package/dist/types/src/components/Thread/Thread.d.ts.map +1 -0
  149. package/dist/types/src/components/Thread/Thread.stories.d.ts +11 -0
  150. package/dist/types/src/components/Thread/Thread.stories.d.ts.map +1 -0
  151. package/dist/types/src/components/Thread/ThreadMessage.d.ts +12 -0
  152. package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +1 -0
  153. package/dist/types/src/components/Thread/index.d.ts +2 -0
  154. package/dist/types/src/components/Thread/index.d.ts.map +1 -0
  155. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +1 -2
  156. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  157. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  158. package/dist/types/src/components/index.d.ts +13 -2
  159. package/dist/types/src/components/index.d.ts.map +1 -1
  160. package/dist/types/src/hooks/email.d.ts.map +1 -1
  161. package/dist/types/src/hooks/index.d.ts +4 -0
  162. package/dist/types/src/hooks/index.d.ts.map +1 -1
  163. package/dist/types/src/hooks/invocation-handler.d.ts.map +1 -1
  164. package/dist/types/src/hooks/processor.d.ts +70 -0
  165. package/dist/types/src/hooks/processor.d.ts.map +1 -0
  166. package/dist/types/src/hooks/processor.test.d.ts +2 -0
  167. package/dist/types/src/hooks/processor.test.d.ts.map +1 -0
  168. package/dist/types/src/hooks/useChatProcessor.d.ts +7 -0
  169. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -0
  170. package/dist/types/src/hooks/useMessageQueue.d.ts +41 -0
  171. package/dist/types/src/hooks/useMessageQueue.d.ts.map +1 -0
  172. package/dist/types/src/hooks/useServices.d.ts +7 -0
  173. package/dist/types/src/hooks/useServices.d.ts.map +1 -0
  174. package/dist/types/src/index.d.ts +1 -2
  175. package/dist/types/src/index.d.ts.map +1 -1
  176. package/dist/types/src/meta.d.ts +2 -2
  177. package/dist/types/src/meta.d.ts.map +1 -1
  178. package/dist/types/src/testing/index.d.ts +2 -1
  179. package/dist/types/src/testing/index.d.ts.map +1 -1
  180. package/dist/types/src/testing/{testing.d.ts → test-functions.d.ts} +3 -1
  181. package/dist/types/src/testing/test-functions.d.ts.map +1 -0
  182. package/dist/types/src/testing/test-services.d.ts +5 -0
  183. package/dist/types/src/testing/test-services.d.ts.map +1 -0
  184. package/dist/types/src/tools/function.d.ts +5 -0
  185. package/dist/types/src/tools/function.d.ts.map +1 -0
  186. package/dist/types/src/tools/index.d.ts +3 -0
  187. package/dist/types/src/tools/index.d.ts.map +1 -0
  188. package/dist/types/src/tools/openapi.d.ts +10 -0
  189. package/dist/types/src/tools/openapi.d.ts.map +1 -0
  190. package/dist/types/src/tools/openapi.test.d.ts +2 -0
  191. package/dist/types/src/tools/openapi.test.d.ts.map +1 -0
  192. package/dist/types/src/translations.d.ts +84 -2
  193. package/dist/types/src/translations.d.ts.map +1 -1
  194. package/dist/types/src/types/index.d.ts +1 -0
  195. package/dist/types/src/types/index.d.ts.map +1 -1
  196. package/dist/types/src/types/registry.d.ts +10 -0
  197. package/dist/types/src/types/registry.d.ts.map +1 -0
  198. package/dist/types/src/types/schema.d.ts +189 -39
  199. package/dist/types/src/types/schema.d.ts.map +1 -1
  200. package/dist/types/src/types/types.d.ts +16 -5
  201. package/dist/types/src/types/types.d.ts.map +1 -1
  202. package/dist/types/tsconfig.tsbuildinfo +1 -0
  203. package/package.json +57 -48
  204. package/src/AutomationPlugin.tsx +77 -194
  205. package/src/artifacts.stories.tsx +241 -0
  206. package/src/capabilities/ai-client.ts +19 -0
  207. package/src/capabilities/app-graph-builder.ts +187 -0
  208. package/src/capabilities/capabilities.ts +12 -0
  209. package/src/capabilities/index.ts +12 -0
  210. package/src/capabilities/intent-resolver.ts +27 -0
  211. package/src/capabilities/react-surface.tsx +42 -0
  212. package/src/components/AmbientChatDialog/AmbientChatDialog.stories.tsx +44 -0
  213. package/src/components/AmbientChatDialog/AmbientChatDialog.tsx +63 -0
  214. package/src/components/AmbientChatDialog/index.ts +5 -0
  215. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +1 -2
  216. package/src/components/AutomationPanel/AutomationPanel.tsx +61 -39
  217. package/src/components/Box/StatusLine.stories.tsx +52 -0
  218. package/src/components/Box/StatusLine.tsx +76 -0
  219. package/src/components/Box/Tabbed.stories.tsx +51 -0
  220. package/src/components/Box/Tabbed.tsx +89 -0
  221. package/src/components/Box/ToggleContainer.stories.tsx +110 -0
  222. package/src/components/Box/ToggleContainer.tsx +108 -0
  223. package/src/components/Box/index.ts +7 -0
  224. package/src/components/ChatContainer/ChatContainer.tsx +52 -0
  225. package/src/components/ChatContainer/index.ts +8 -0
  226. package/src/components/MarkdownViewer/MarkdownViewer.stories.tsx +56 -0
  227. package/src/components/MarkdownViewer/MarkdownViewer.tsx +79 -0
  228. package/src/components/MarkdownViewer/index.ts +5 -0
  229. package/src/components/Prompt/Prompt.stories.tsx +50 -0
  230. package/src/components/Prompt/Prompt.tsx +39 -0
  231. package/src/components/Prompt/index.ts +5 -0
  232. package/src/components/Prompt/prompt-autocomplete.ts +200 -0
  233. package/src/components/PromptEditor/PromptEditor.stories.tsx +6 -6
  234. package/src/components/PromptEditor/PromptEditor.tsx +3 -3
  235. package/src/components/ServiceRegistry/ServiceRegistry.stories.tsx +49 -0
  236. package/src/components/ServiceRegistry/ServiceRegistry.tsx +76 -0
  237. package/src/components/ServiceRegistry/index.ts +5 -0
  238. package/src/components/Thread/Thread.stories.tsx +197 -0
  239. package/src/components/Thread/Thread.tsx +156 -0
  240. package/src/components/Thread/ThreadMessage.tsx +225 -0
  241. package/src/components/Thread/index.ts +5 -0
  242. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +1 -2
  243. package/src/components/TriggerEditor/TriggerEditor.tsx +86 -16
  244. package/src/components/index.ts +10 -1
  245. package/src/hooks/email.ts +2 -2
  246. package/src/hooks/index.ts +5 -0
  247. package/src/hooks/invocation-handler.ts +2 -2
  248. package/src/hooks/processor.test.ts +15 -0
  249. package/src/hooks/processor.ts +210 -0
  250. package/src/hooks/useChatProcessor.tsx +86 -0
  251. package/src/hooks/useMessageQueue.ts +23 -0
  252. package/src/hooks/useServices.ts +28 -0
  253. package/src/index.ts +1 -4
  254. package/src/meta.ts +5 -2
  255. package/src/testing/index.ts +2 -1
  256. package/src/testing/{testing.ts → test-functions.ts} +9 -2
  257. package/src/testing/test-services.ts +131 -0
  258. package/src/tools/function.ts +47 -0
  259. package/src/tools/index.ts +6 -0
  260. package/src/tools/openapi.test.ts +224 -0
  261. package/src/tools/openapi.ts +331 -0
  262. package/src/translations.ts +18 -2
  263. package/src/types/index.ts +1 -0
  264. package/src/types/registry.ts +26 -0
  265. package/src/types/schema.ts +96 -2
  266. package/src/types/types.ts +15 -21
  267. package/dist/lib/browser/AssistantPanel-N3QSALKY.mjs +0 -341
  268. package/dist/lib/browser/AssistantPanel-N3QSALKY.mjs.map +0 -7
  269. package/dist/lib/browser/AutomationPanel-AQMN2CQR.mjs +0 -153
  270. package/dist/lib/browser/AutomationPanel-AQMN2CQR.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-7KB4UMXO.mjs +0 -49
  272. package/dist/lib/browser/chunk-7KB4UMXO.mjs.map +0 -7
  273. package/dist/lib/browser/chunk-X5KMOH3I.mjs.map +0 -7
  274. package/dist/lib/browser/meta.mjs +0 -9
  275. package/dist/lib/node/AssistantPanel-RIA4TI3B.cjs +0 -361
  276. package/dist/lib/node/AssistantPanel-RIA4TI3B.cjs.map +0 -7
  277. package/dist/lib/node/AutomationPanel-HZS5WKI5.cjs +0 -173
  278. package/dist/lib/node/AutomationPanel-HZS5WKI5.cjs.map +0 -7
  279. package/dist/lib/node/chunk-CUCUWUAF.cjs +0 -73
  280. package/dist/lib/node/chunk-CUCUWUAF.cjs.map +0 -7
  281. package/dist/lib/node/chunk-DTJ7XVO2.cjs.map +0 -7
  282. package/dist/lib/node/meta.cjs.map +0 -7
  283. package/dist/lib/node-esm/AssistantPanel-72YH43CH.mjs +0 -342
  284. package/dist/lib/node-esm/AssistantPanel-72YH43CH.mjs.map +0 -7
  285. package/dist/lib/node-esm/AutomationPanel-JUHOWQWW.mjs +0 -154
  286. package/dist/lib/node-esm/AutomationPanel-JUHOWQWW.mjs.map +0 -7
  287. package/dist/lib/node-esm/chunk-23LY7DYS.mjs +0 -51
  288. package/dist/lib/node-esm/chunk-23LY7DYS.mjs.map +0 -7
  289. package/dist/lib/node-esm/chunk-HNOBZHWK.mjs.map +0 -7
  290. package/dist/lib/node-esm/meta.mjs +0 -10
  291. package/dist/types/src/components/AssistantPanel/AssistantPanel.d.ts +0 -8
  292. package/dist/types/src/components/AssistantPanel/AssistantPanel.d.ts.map +0 -1
  293. package/dist/types/src/components/AssistantPanel/index.d.ts +0 -3
  294. package/dist/types/src/components/AssistantPanel/index.d.ts.map +0 -1
  295. package/dist/types/src/components/AssistantPanel/system-instructions.d.ts +0 -6
  296. package/dist/types/src/components/AssistantPanel/system-instructions.d.ts.map +0 -1
  297. package/dist/types/src/testing/testing.d.ts.map +0 -1
  298. package/src/components/AssistantPanel/AssistantPanel.tsx +0 -230
  299. package/src/components/AssistantPanel/index.ts +0 -7
  300. package/src/components/AssistantPanel/system-instructions.ts +0 -166
  301. /package/dist/lib/browser/{meta.mjs.map → AutomationPanel-VW2XIUPU.mjs.map} +0 -0
  302. /package/dist/lib/{node-esm/meta.mjs.map → browser/ChatContainer-OLRZNGWK.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ChatContainer/ChatContainer.tsx", "../../../src/hooks/processor.ts", "../../../src/hooks/useChatProcessor.tsx", "../../../src/capabilities/index.ts", "../../../src/tools/function.ts", "../../../src/tools/openapi.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/components/Thread/Thread.tsx", "../../../src/components/Thread/ThreadMessage.tsx", "../../../src/components/Box/StatusLine.tsx", "../../../src/components/Box/Tabbed.tsx", "../../../src/components/Box/ToggleContainer.tsx", "../../../src/components/MarkdownViewer/MarkdownViewer.tsx", "../../../src/components/ChatContainer/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { invariant } from '@dxos/invariant';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { useChatProcessor, useMessageQueue } from '../../hooks';\nimport { type AIChatType } from '../../types';\nimport { Thread } from '../Thread';\n\nexport const ChatContainer = ({ chat, role }: { chat: AIChatType; role: string }) => {\n const processor = useChatProcessor(chat);\n const messageQueue = useMessageQueue(chat);\n const messages = [...(messageQueue?.items ?? []), ...processor.messages.value];\n\n const handleSubmit = useCallback(\n async (text: string) => {\n if (processor.streaming.value) {\n await processor.cancel();\n }\n\n invariant(messageQueue);\n await processor.request(text, {\n history: messageQueue.items,\n onComplete: (messages) => messageQueue.append(messages),\n });\n },\n [processor, messageQueue],\n );\n\n const handleStop = useCallback(() => {\n if (processor.streaming.value) {\n void processor.cancel();\n }\n }, [processor]);\n\n return (\n <StackItem.Content toolbar={false} role={role}>\n <Thread\n messages={messages}\n streaming={processor.streaming.value}\n collapse={true}\n onSubmit={handleSubmit}\n onSuggest={handleSubmit}\n onStop={handleStop}\n />\n </StackItem.Content>\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 * 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 } catch (err) {\n // TODO(burdon): Handle error.\n log.catch('request failed', { err });\n } finally {\n log.info('done');\n this._stream = 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 { useConfig } from '@dxos/react-client';\nimport { Filter, getSpace, 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, type AIChatType } from '../types';\n\n/**\n * Creates a processor for the chat.\n */\nexport const useChatProcessor = (chat: AIChatType) => {\n const aiClient = useCapability(AutomationCapabilities.AiClient);\n const globalTools = useCapabilities(Capabilities.Tools);\n const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const space = getSpace(chat);\n\n // Services.\n const services = useQuery(space, Filter.schema(ServiceType));\n const [serviceTools, setServiceTools] = useState<Tool[]>([]);\n useEffect(() => {\n queueMicrotask(async () => {\n const tools = await Promise.all(services.map((service) => createToolsFromService(service)));\n setServiceTools(tools.flat());\n });\n }, [services]);\n\n // Tools.\n const config = useConfig();\n const functions = useQuery(space, Filter.schema(FunctionType));\n const tools = useMemo(\n () => [\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 [globalTools, artifactDefinitions, serviceTools, functions, space?.id],\n );\n\n // Prompt.\n const systemPrompt = useMemo(\n () => createSystemPrompt({ artifacts: artifactDefinitions.map((definition) => definition.instructions) }),\n [artifactDefinitions],\n );\n\n // Create processor.\n const processor = useMemo(\n () =>\n new ChatProcessor(\n aiClient,\n tools,\n {\n space,\n dispatch,\n },\n {\n model: '@anthropic/claude-3-5-sonnet-20241022',\n systemPrompt,\n },\n ),\n [aiClient, tools, space, dispatch, systemPrompt],\n );\n\n // Update processor.\n // useEffect(() => {\n // if (processor) {\n // processor.setTools(tools.flat());\n // }\n // }, [processor, tools]);\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 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 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 edgeClient = useEdgeClient();\n const space = getSpace(chat);\n const queueDxn = useMemo(\n () => new DXN(DXN.kind.QUEUE, [QueueSubspaceTags.DATA, space!.id, chat.queue.dxn.parts.at(-1)!]),\n [chat.queue.dxn],\n );\n\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 React, { type KeyboardEventHandler, useCallback, useMemo, useRef, useState } from 'react';\n\nimport { type Message } from '@dxos/artifact';\nimport { IconButton, Input, useTranslation } from '@dxos/react-ui';\nimport { ScrollContainer, type ScrollController } from '@dxos/react-ui-components';\nimport { Spinner } from '@dxos/react-ui-sfx';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { ThreadMessage, type ThreadMessageProps } from './ThreadMessage';\nimport { AUTOMATION_PLUGIN } from '../../meta';\n\nexport type ThreadProps = {\n messages?: Message[];\n streaming?: boolean;\n onSubmit?: (message: string) => void;\n onStop?: () => void;\n} & Pick<ThreadMessageProps, 'collapse' | 'debug' | 'onSuggest' | 'onDelete'>;\n\n// TODO(burdon): Factor out scroll logic.\nexport const Thread = ({\n messages,\n streaming,\n collapse,\n debug,\n onSubmit,\n onStop,\n onSuggest,\n onDelete,\n}: ThreadProps) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n const scroller = useRef<ScrollController>(null);\n\n const [text, setText] = useState('');\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLInputElement>>(\n (ev) => {\n switch (ev.key) {\n case 'Escape': {\n setText('');\n break;\n }\n\n case 'Enter': {\n const value = text.trim();\n if (value.length > 0) {\n scroller.current?.scrollToBottom();\n onSubmit?.(value);\n setText('');\n }\n break;\n }\n }\n },\n [text],\n );\n\n /**\n * Reduce message blocks into collections of messages that contain related contiguous blocks.\n * For example, collapse all tool request/response pairs into a single message.\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: lines = [] } = useMemo(() => {\n if (!collapse) {\n return { messages: messages ?? [] };\n }\n\n return (messages ?? []).reduce<{ messages: Message[]; current?: Message }>(\n ({ current, messages }, message) => {\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 { messages: [] as Message[] },\n );\n }, [messages, collapse]);\n\n return (\n <div className='flex flex-col grow overflow-hidden'>\n <ScrollContainer ref={scroller} classNames='py-2 gap-2 overflow-x-hidden'>\n {lines.map((message) => (\n <ThreadMessage\n key={message.id}\n classNames='px-4'\n message={message}\n collapse={collapse}\n debug={debug}\n onSuggest={onSuggest}\n onDelete={onDelete}\n />\n ))}\n </ScrollContainer>\n\n {onSubmit && (\n <div className='flex p-4 gap-3 items-center'>\n <Spinner active={streaming} />\n <Input.Root>\n <Input.TextInput\n autoFocus\n classNames='px-2 baseSurface rounded'\n placeholder={t('chat input placeholder')}\n value={text}\n onChange={(ev) => setText(ev.target.value)}\n onKeyDown={handleKeyDown}\n />\n </Input.Root>\n {onStop && (\n <IconButton\n disabled={!streaming}\n classNames={mx('!p-1 !opacity-20 transition', streaming && '!opacity-80')}\n variant='ghost'\n size={5}\n onClick={onStop}\n icon='ph--x--regular'\n label={t('chat stop')}\n iconOnly\n />\n )}\n </div>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useRef, useState, type FC } from 'react';\n\nimport { type MessageContentBlock, type Message } from '@dxos/artifact';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { Button, ButtonGroup, Icon, type ThemedClassName } from '@dxos/react-ui';\nimport { Json } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\nimport { safeParseJson } from '@dxos/util';\n\nimport { ToggleContainer, StatusLine, Tabs } from '../Box';\nimport { MarkdownViewer } from '../MarkdownViewer';\n\nexport type ThreadMessageProps = ThemedClassName<{\n message: Message;\n collapse?: boolean;\n debug?: boolean;\n onSuggest?: (text: string) => void;\n onDelete?: (id: string) => void;\n}>;\n\nexport const ThreadMessage: FC<ThreadMessageProps> = ({\n classNames,\n message,\n collapse,\n debug,\n onSuggest,\n onDelete,\n}) => {\n if (typeof message !== 'object') {\n return <div className={mx(classNames)}>{message}</div>;\n }\n\n const { role, content = [] } = message;\n\n // TODO(burdon): Factor out tool blocks.\n const toolBlocks = content.filter((block) => block.type === 'tool_use' || block.type === 'tool_result');\n if (collapse && toolBlocks.length > 0) {\n let request: (MessageContentBlock & { type: 'tool_use' }) | undefined;\n const items = toolBlocks.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 (\n <div className={mx('flex', classNames)}>\n <div className='w-full p-1 px-2 overflow-hidden rounded-md bg-baseSurface'>\n <TabbedContainer items={items} />\n </div>\n </div>\n );\n }\n\n return (\n <div className={mx('flex flex-col shrink-0 gap-2')}>\n {debug && (\n <div className='text-xs text-subdued'>\n {message.id}{' '}\n {onDelete && (\n <span className='cursor-pointer underline' onClick={() => onDelete(message.id)}>\n delete\n </span>\n )}\n </div>\n )}\n {content.map((block, idx) => (\n <div key={idx} className={mx('flex', classNames, block.type === 'text' && role === 'user' && 'justify-end')}>\n <Block role={role} block={block} onSuggest={onSuggest ?? (() => {})} />\n </div>\n ))}\n </div>\n );\n};\n\nconst Block = ({\n block,\n role,\n onSuggest,\n}: Pick<Message, 'role'> & { block: MessageContentBlock; onSuggest: (text: string) => void }) => {\n const Component = componentMap[block.type] ?? componentMap.default;\n return (\n <div\n className={mx(\n 'p-1 px-2 overflow-hidden rounded-md',\n (block.type !== 'text' || block.disposition) && 'w-full bg-baseSurface',\n block.type === 'text' && role === 'user' && 'bg-primary-200 dark:bg-primary-500',\n )}\n >\n <Component block={block} onSuggest={onSuggest} />\n </div>\n );\n};\n\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};\n\ntype BlockComponent = FC<{ block: MessageContentBlock; onSuggest: (text: string) => void }>;\n\nconst componentMap: Record<string, BlockComponent> = {\n text: ({ block }) => {\n invariant(block.type === 'text');\n const title = block.disposition ? titles[block.disposition] : undefined;\n if (!title) {\n return (\n <MarkdownViewer content={block.text} classNames={[block.disposition === 'cot' && 'text-sm text-subdued']} />\n );\n }\n\n return (\n <ToggleContainer\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 open={block.disposition === 'cot'}\n >\n <MarkdownViewer content={block.text} classNames={[block.disposition === 'cot' && 'text-sm text-subdued']} />\n </ToggleContainer>\n );\n },\n\n json: ({ block, onSuggest }) => {\n invariant(block.type === 'json');\n\n switch (block.disposition) {\n case 'suggest': {\n const { text = '' }: { text: string } = safeParseJson(block.json ?? '{}') ?? ({} as any);\n return <Button onClick={() => onSuggest(text)}>{text}</Button>;\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={() => onSuggest(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 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\nconst TabbedContainer = ({ items }: { items: { title: string; block: any }[] }) => {\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 title={<StatusLine lines={lines} autoAdvance />} open={open} onChangeOpen={setOpen}>\n <div className='flex gap-2 w-full'>\n <Tabs 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, { useEffect, useRef, useState } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nconst emptyLines: string[] = [];\n\nexport type StatusLineProps = ThemedClassName<{\n line?: number;\n lines?: string[];\n transition?: number;\n advance?: number;\n autoAdvance?: boolean;\n}>;\n\nexport const StatusLine = ({\n classNames,\n line = -1,\n lines = emptyLines,\n transition = 300,\n advance = 1_000,\n autoAdvance,\n}: StatusLineProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [currentLine, setCurrentLine] = useState(line);\n useEffect(() => {\n setCurrentLine(line);\n }, [line]);\n\n useEffect(() => {\n if (!autoAdvance) {\n return;\n }\n\n const next = () => {\n setCurrentLine((prev) => {\n if (prev >= lines.length - 1) {\n clearInterval(interval);\n return prev;\n }\n\n return prev + 1;\n });\n };\n\n next();\n const interval = setInterval(next, advance);\n\n return () => clearInterval(interval);\n }, [lines.length, autoAdvance, advance]);\n\n useEffect(() => {\n if (containerRef.current) {\n containerRef.current.style.transition = `transform ${transition}ms ease-in-out`;\n containerRef.current.style.transform = `translateY(-${currentLine * 24}px)`;\n }\n }, [currentLine]);\n\n return (\n <div className={mx('relative h-[24px] overflow-hidden', classNames)}>\n <div ref={containerRef} className='h-[24px]'>\n <div className='flex flex-col'>\n {lines.map((line, i) => (\n <div key={i} className={mx('flex h-[24px] items-center')}>\n <span className='truncate'>{line}</span>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef } from 'react';\n\nimport { Icon, type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nconst numbers = [\n { regular: 'ph--number-circle-zero--thin', active: 'ph--number-circle-zero--duotone' },\n { regular: 'ph--number-circle-one--thin', active: 'ph--number-circle-one--duotone' },\n { regular: 'ph--number-circle-two--thin', active: 'ph--number-circle-two--duotone' },\n { regular: 'ph--number-circle-three--thin', active: 'ph--number-circle-three--duotone' },\n { regular: 'ph--number-circle-four--thin', active: 'ph--number-circle-four--duotone' },\n { regular: 'ph--number-circle-five--thin', active: 'ph--number-circle-five--duotone' },\n { regular: 'ph--number-circle-six--thin', active: 'ph--number-circle-six--duotone' },\n { regular: 'ph--number-circle-seven--thin', active: 'ph--number-circle-seven--duotone' },\n { regular: 'ph--number-circle-eight--thin', active: 'ph--number-circle-eight--duotone' },\n { regular: 'ph--number-circle-nine--thin', active: 'ph--number-circle-nine--duotone' },\n];\n\nexport type TabsProps = ThemedClassName<{\n length: number;\n selected?: number;\n onSelect?: (index: number) => void;\n}>;\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(\n ({ classNames, length, selected = 0, onSelect }, forwardedRef) => {\n return (\n <div\n ref={forwardedRef}\n className={mx('flex flex-col overflow-hidden outline-none', classNames)}\n tabIndex={-1}\n onKeyDown={(ev) => {\n // TODO(burdon): Focus when open Toggle.\n switch (ev.key) {\n case 'ArrowDown':\n case 'ArrowRight': {\n ev.preventDefault();\n ev.stopPropagation();\n if (selected < length - 1) {\n onSelect?.(selected + 1);\n }\n break;\n }\n case 'ArrowUp':\n case 'ArrowLeft': {\n ev.preventDefault();\n ev.stopPropagation();\n if (selected > 0) {\n onSelect?.(selected - 1);\n }\n break;\n }\n\n case 'Enter': {\n ev.preventDefault();\n ev.stopPropagation();\n onSelect?.(selected);\n break;\n }\n }\n }}\n >\n {Array.from({ length }).map((_, i) => {\n const icon = numbers[i + 1];\n return (\n <div\n key={i}\n className={mx(\n 'relative flex w-[24px] h-[28px] justify-center cursor-pointer text-subdued',\n selected === i && '!text-cyan-550 !dark:text-cyan-300',\n )}\n >\n {i < length - 1 && <div className='absolute left-[11.5px] top-[21px] w-[1px] h-[10px] bg-neutral-400' />}\n <Icon\n icon={selected === i ? icon.regular : icon.regular}\n classNames='z-10 !p-0 !w-[24px] !h-[24px] outline-none'\n onClick={() => onSelect?.(i)}\n />\n </div>\n );\n })}\n </div>\n );\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type JSX, type PropsWithChildren, useEffect, useState } from 'react';\n\nimport { Icon, useControlledState, type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport type ToggleContainerProps = ThemedClassName<\n PropsWithChildren<{\n title?: string | JSX.Element;\n icon?: JSX.Element;\n open?: boolean;\n duration?: number;\n /** Should shrink the width when closed. */\n shrinkX?: boolean;\n onChangeOpen?: (open: boolean) => void;\n }>\n>;\n\nexport const ToggleContainer = ({\n classNames,\n title,\n icon,\n open: _open,\n duration = 400,\n shrinkX = false,\n children,\n onChangeOpen,\n}: ToggleContainerProps) => {\n const [open, setOpen] = useControlledState(_open);\n const [expandX, setExpandX] = useState(shrinkX ? open : true);\n const [expandY, setExpandY] = useState(open);\n\n useEffect(() => {\n let t: NodeJS.Timeout;\n if (open) {\n if (shrinkX) {\n setExpandX(true);\n }\n t = setTimeout(\n () => {\n setExpandY(true);\n },\n shrinkX ? duration : 0,\n );\n } else {\n setExpandY(false);\n if (shrinkX) {\n t = setTimeout(() => {\n setExpandX(false);\n }, duration);\n }\n }\n\n return () => clearTimeout(t);\n }, [open]);\n\n const handleToggle = () => {\n if (onChangeOpen) {\n onChangeOpen(!open);\n } else {\n setOpen((open) => !open);\n }\n };\n\n return (\n <div className={mx('overflow-hidden', classNames)}>\n {title && (\n <div\n className='flex gap-1 py-1 items-center text-sm text-subdued cursor-pointer select-none'\n onClick={handleToggle}\n >\n <div className='flex w-[24px] h-[24px] items-center justify-center'>\n <Icon\n size={4}\n icon={'ph--caret-right--regular'}\n style={{ transitionDuration: `${shrinkX ? duration * 2 : duration}ms` }}\n classNames={['transition transition-transform ease-in-out', open ? 'rotate-90' : 'transform-none']}\n />\n </div>\n <div className='flex-1 pis-1 pie-1 truncate'>{title}</div>\n {icon}\n </div>\n )}\n <div\n style={{ transitionDuration: `${duration}ms` }}\n className={mx(\n 'grid transition-[grid-template-columns] ease-in-out',\n expandX ? 'grid-cols-[1fr]' : 'grid-cols-[0fr]',\n )}\n >\n <div className='overflow-hidden'>\n <div\n style={{ transitionDuration: `${duration}ms` }}\n className={mx(\n 'grid transition-[grid-template-rows] ease-in-out',\n expandY ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]',\n )}\n >\n <div className={mx('flex overflow-hidden transition-opacity')}>{children}</div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC } from 'react';\nimport ReactMarkdown from 'react-markdown';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\nimport { omit } from '@dxos/util';\n\ntype MarkdownViewerProps = ThemedClassName<{\n content?: string;\n}>;\n\n/**\n * Transform text into react elements.\n *\n * https://github.com/remarkjs/react-markdown\n * markdown -> remark -> [mdast -> remark plugins] -> [hast -> rehype plugins] -> components -> react elements.\n */\n// TODO(burdon): Styles.\n// TODO(burdon): Factor out (react-ui-syntax-highlighter).\nexport const MarkdownViewer: FC<MarkdownViewerProps> = ({ classNames, content = '' }) => {\n return (\n <div className={mx('space-y-2', classNames)}>\n <ReactMarkdown\n components={{\n a: ({ node, children, href, ...props }) => (\n <a\n href={href}\n className='text-primary-500 hover:text-primary-500'\n target='_blank'\n rel='noopener noreferrer'\n {...props}\n >\n {children}\n </a>\n ),\n ol: ({ node, children, ...props }) => (\n <ol className='leading-tight list-decimal pl-6' {...omit(props, ['ordered'])}>\n {children}\n </ol>\n ),\n ul: ({ node, children, ...props }) => (\n <ul className='leading-tight list-disc pl-6' {...omit(props, ['ordered'])}>\n {children}\n </ul>\n ),\n li: ({ node, children, ...props }) => (\n <li className='' {...omit(props, ['ordered'])}>\n {children}\n </li>\n ),\n blockquote: ({ node, children, ...props }) => (\n <blockquote className='border-l-4 border-primary-500 pl-4 my-4 text-primary-500' {...props}>\n {children}\n </blockquote>\n ),\n code: ({ children, className }) => {\n const [_, language] = /language-(\\w+)/.exec(className || '') || [];\n return (\n <SyntaxHighlighter PreTag='div' language={language} className='p-0'>\n {children}\n </SyntaxHighlighter>\n );\n },\n }}\n >\n {content}\n </ReactMarkdown>\n </div>\n );\n};\n\n// const Cursor = () => {\n// return <span className='animate-[pulse_1s_steps(1)_infinite] text-primary-500'>▊</span>;\n// };\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { ChatContainer } from './ChatContainer';\n\nexport * from './ChatContainer';\nexport default ChatContainer;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useCallback", "invariant", "StackItem", "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", "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", "useEffect", "useMemo", "useState", "Capabilities", "useCapabilities", "useCapability", "useIntentDispatcher", "createSystemPrompt", "FunctionType", "useConfig", "Filter", "getSpace", "useQuery", "isNonNullable", "lazy", "AiClient", "lazy", "AppGraphBuilder", "IntentResolver", "ReactSurface", "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", "useChatProcessor", "chat", "aiClient", "useCapability", "AutomationCapabilities", "AiClient", "globalTools", "useCapabilities", "Capabilities", "Tools", "artifactDefinitions", "ArtifactDefinition", "dispatchPromise", "dispatch", "useIntentDispatcher", "space", "getSpace", "services", "useQuery", "Filter", "schema", "ServiceType", "serviceTools", "setServiceTools", "useState", "useEffect", "queueMicrotask", "tools", "Promise", "all", "map", "service", "createToolsFromService", "flat", "config", "useConfig", "functions", "FunctionType", "useMemo", "flatMap", "definition", "fn", "covertFunctionToTool", "values", "runtime", "edge", "url", "id", "filter", "isNonNullable", "systemPrompt", "createSystemPrompt", "artifacts", "instructions", "processor", "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", "edgeClient", "useEdgeClient", "space", "getSpace", "queueDxn", "useMemo", "DXN", "kind", "QUEUE", "QueueSubspaceTags", "DATA", "id", "queue", "dxn", "parts", "at", "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", "React", "useCallback", "useMemo", "useRef", "useState", "IconButton", "Input", "useTranslation", "ScrollContainer", "Spinner", "mx", "React", "useEffect", "useRef", "useState", "invariant", "log", "Button", "ButtonGroup", "Icon", "Json", "mx", "safeParseJson", "React", "useEffect", "useRef", "useState", "mx", "emptyLines", "StatusLine", "classNames", "line", "lines", "transition", "advance", "autoAdvance", "containerRef", "useRef", "currentLine", "setCurrentLine", "useState", "useEffect", "next", "prev", "length", "clearInterval", "interval", "setInterval", "current", "style", "transform", "div", "className", "mx", "ref", "map", "i", "key", "span", "React", "forwardRef", "Icon", "mx", "numbers", "regular", "active", "Tabs", "forwardRef", "classNames", "length", "selected", "onSelect", "forwardedRef", "React", "div", "ref", "className", "mx", "tabIndex", "onKeyDown", "ev", "key", "preventDefault", "stopPropagation", "Array", "from", "map", "_", "i", "icon", "Icon", "onClick", "React", "useEffect", "useState", "Icon", "useControlledState", "mx", "ToggleContainer", "classNames", "title", "icon", "open", "_open", "duration", "shrinkX", "children", "onChangeOpen", "setOpen", "useControlledState", "expandX", "setExpandX", "useState", "expandY", "setExpandY", "useEffect", "t", "setTimeout", "clearTimeout", "handleToggle", "React", "div", "className", "mx", "onClick", "Icon", "size", "style", "transitionDuration", "React", "ReactMarkdown", "SyntaxHighlighter", "mx", "omit", "MarkdownViewer", "classNames", "content", "React", "div", "className", "mx", "ReactMarkdown", "components", "a", "node", "children", "href", "props", "target", "rel", "ol", "omit", "ul", "li", "blockquote", "code", "_", "language", "exec", "SyntaxHighlighter", "PreTag", "ThreadMessage", "classNames", "message", "collapse", "debug", "onSuggest", "onDelete", "React", "div", "className", "mx", "role", "content", "toolBlocks", "filter", "block", "type", "length", "request", "items", "map", "title", "name", "log", "warn", "undefined", "TabbedContainer", "id", "span", "onClick", "idx", "key", "Block", "Component", "componentMap", "default", "disposition", "titles", "text", "invariant", "MarkdownViewer", "ToggleContainer", "icon", "pending", "Icon", "size", "open", "json", "safeParseJson", "Button", "options", "ButtonGroup", "option", "Json", "data", "lines", "item", "tabsRef", "useRef", "selected", "setSelected", "useState", "setOpen", "useEffect", "current", "focus", "handleSelect", "index", "StatusLine", "autoAdvance", "onChangeOpen", "Tabs", "ref", "onSelect", "Thread", "messages", "streaming", "collapse", "debug", "onSubmit", "onStop", "onSuggest", "onDelete", "t", "useTranslation", "AUTOMATION_PLUGIN", "scroller", "useRef", "text", "setText", "useState", "handleKeyDown", "useCallback", "ev", "key", "value", "trim", "length", "current", "scrollToBottom", "lines", "useMemo", "reduce", "message", "i", "block", "content", "type", "push", "id", "join", "role", "undefined", "React", "div", "className", "ScrollContainer", "ref", "classNames", "map", "ThreadMessage", "Spinner", "active", "Input", "Root", "TextInput", "autoFocus", "placeholder", "onChange", "target", "onKeyDown", "IconButton", "disabled", "mx", "variant", "size", "onClick", "icon", "label", "iconOnly", "ChatContainer", "chat", "role", "processor", "useChatProcessor", "messageQueue", "useMessageQueue", "messages", "items", "value", "handleSubmit", "useCallback", "text", "streaming", "cancel", "invariant", "request", "history", "onComplete", "append", "handleStop", "React", "StackItem", "Content", "toolbar", "Thread", "collapse", "onSubmit", "onSuggest", "onStop", "ChatContainer"]
7
+ }