@dxos/plugin-assistant 0.8.3 → 0.8.4-main.5acf9ea

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 (432) hide show
  1. package/dist/lib/browser/{TemplateContainer-QQHVOTSI.mjs → BlueprintContainer-IZ4AK5EO.mjs} +10 -10
  2. package/dist/lib/browser/BlueprintContainer-IZ4AK5EO.mjs.map +7 -0
  3. package/dist/lib/browser/ChatContainer-RP3QEXYX.mjs +54 -0
  4. package/dist/lib/browser/ChatContainer-RP3QEXYX.mjs.map +7 -0
  5. package/dist/lib/browser/ChatDialog-ZVLXFHEY.mjs +72 -0
  6. package/dist/lib/browser/ChatDialog-ZVLXFHEY.mjs.map +7 -0
  7. package/dist/lib/browser/SequenceContainer-3UDVKWPA.mjs +162 -0
  8. package/dist/lib/browser/SequenceContainer-3UDVKWPA.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-builder-E4H5DCOJ.mjs → app-graph-builder-XSEOKJLG.mjs} +25 -86
  10. package/dist/lib/browser/app-graph-builder-XSEOKJLG.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-63GG6U6D.mjs +2226 -0
  12. package/dist/lib/browser/chunk-63GG6U6D.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-7W7LHTRH.mjs +171 -0
  14. package/dist/lib/browser/chunk-7W7LHTRH.mjs.map +7 -0
  15. package/dist/lib/{node/chunk-P74TWGMG.cjs → browser/chunk-FDCJSQYF.mjs} +10 -14
  16. package/dist/lib/{node-esm/chunk-BB2TAT4P.mjs.map → browser/chunk-FDCJSQYF.mjs.map} +1 -1
  17. package/dist/lib/browser/{chunk-JQFUME3B.mjs → chunk-KFXSBNZR.mjs} +36 -34
  18. package/dist/lib/browser/chunk-KFXSBNZR.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-BI6AHRNJ.mjs → chunk-LERGF5YG.mjs} +19 -68
  20. package/dist/lib/browser/chunk-LERGF5YG.mjs.map +7 -0
  21. package/dist/lib/browser/index.mjs +99 -119
  22. package/dist/lib/browser/index.mjs.map +4 -4
  23. package/dist/lib/browser/intent-resolver-MV3VSZLS.mjs +75 -0
  24. package/dist/lib/browser/intent-resolver-MV3VSZLS.mjs.map +7 -0
  25. package/dist/lib/browser/meta.json +1 -1
  26. package/dist/lib/browser/{react-surface-LXCNUSZN.mjs → react-surface-3GYEHQRP.mjs} +44 -53
  27. package/dist/lib/browser/react-surface-3GYEHQRP.mjs.map +7 -0
  28. package/dist/lib/browser/{settings-XRHXVWGB.mjs → settings-5GTTCVGD.mjs} +6 -6
  29. package/dist/lib/browser/settings-5GTTCVGD.mjs.map +7 -0
  30. package/dist/lib/browser/types/index.mjs +4 -20
  31. package/dist/lib/node-esm/{TemplateContainer-SOEWY2ZN.mjs → BlueprintContainer-RGTMNLNX.mjs} +10 -10
  32. package/dist/lib/node-esm/BlueprintContainer-RGTMNLNX.mjs.map +7 -0
  33. package/dist/lib/node-esm/ChatContainer-W3W6FWV3.mjs +55 -0
  34. package/dist/lib/node-esm/ChatContainer-W3W6FWV3.mjs.map +7 -0
  35. package/dist/lib/node-esm/ChatDialog-QW4JRKVO.mjs +73 -0
  36. package/dist/lib/node-esm/ChatDialog-QW4JRKVO.mjs.map +7 -0
  37. package/dist/lib/node-esm/SequenceContainer-RQQH5XOC.mjs +163 -0
  38. package/dist/lib/node-esm/SequenceContainer-RQQH5XOC.mjs.map +7 -0
  39. package/dist/lib/node-esm/{app-graph-builder-3SY5MBIK.mjs → app-graph-builder-PANCJUHV.mjs} +25 -86
  40. package/dist/lib/node-esm/app-graph-builder-PANCJUHV.mjs.map +7 -0
  41. package/dist/lib/node-esm/chunk-BFO3KHYL.mjs +2227 -0
  42. package/dist/lib/node-esm/chunk-BFO3KHYL.mjs.map +7 -0
  43. package/dist/lib/node-esm/{chunk-UCOFKNKN.mjs → chunk-MS3PJARN.mjs} +19 -68
  44. package/dist/lib/node-esm/chunk-MS3PJARN.mjs.map +7 -0
  45. package/dist/lib/node-esm/chunk-QN2H2EHV.mjs +41 -0
  46. package/dist/lib/{browser/chunk-XOZ7YMO3.mjs.map → node-esm/chunk-QN2H2EHV.mjs.map} +1 -1
  47. package/dist/lib/node-esm/{chunk-OYN6HLXZ.mjs → chunk-VIIMA3XQ.mjs} +36 -34
  48. package/dist/lib/node-esm/chunk-VIIMA3XQ.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-Z7PUODRT.mjs +172 -0
  50. package/dist/lib/node-esm/chunk-Z7PUODRT.mjs.map +7 -0
  51. package/dist/lib/node-esm/index.mjs +99 -119
  52. package/dist/lib/node-esm/index.mjs.map +4 -4
  53. package/dist/lib/node-esm/intent-resolver-3FMC3GHC.mjs +76 -0
  54. package/dist/lib/node-esm/intent-resolver-3FMC3GHC.mjs.map +7 -0
  55. package/dist/lib/node-esm/meta.json +1 -1
  56. package/dist/lib/node-esm/{react-surface-7HA5EDWY.mjs → react-surface-QDQWJ7FZ.mjs} +44 -53
  57. package/dist/lib/node-esm/react-surface-QDQWJ7FZ.mjs.map +7 -0
  58. package/dist/lib/node-esm/{settings-5IAY6BT4.mjs → settings-J2EXEM5H.mjs} +6 -6
  59. package/dist/lib/node-esm/settings-J2EXEM5H.mjs.map +7 -0
  60. package/dist/lib/node-esm/types/index.mjs +4 -20
  61. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  62. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  63. package/dist/types/src/capabilities/index.d.ts +1 -3
  64. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  65. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
  66. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  67. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  68. package/dist/types/src/capability-definitions.d.ts +7 -0
  69. package/dist/types/src/capability-definitions.d.ts.map +1 -0
  70. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts +2 -2
  71. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  72. package/dist/types/src/components/BlueprintContainer.d.ts +5 -6
  73. package/dist/types/src/components/BlueprintContainer.d.ts.map +1 -1
  74. package/dist/types/src/components/Chat/Chat.d.ts +47 -0
  75. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -0
  76. package/dist/types/src/components/Chat/events.d.ts +30 -0
  77. package/dist/types/src/components/Chat/events.d.ts.map +1 -0
  78. package/dist/types/src/components/Chat/index.d.ts +3 -0
  79. package/dist/types/src/components/Chat/index.d.ts.map +1 -0
  80. package/dist/types/src/components/ChatContainer.d.ts +6 -6
  81. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  82. package/dist/types/src/components/ChatDialog.d.ts +8 -0
  83. package/dist/types/src/components/ChatDialog.d.ts.map +1 -0
  84. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts +11 -0
  85. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -0
  86. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts +9 -0
  87. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts.map +1 -0
  88. package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts +11 -0
  89. package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts.map +1 -0
  90. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +11 -0
  91. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -0
  92. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts +8 -0
  93. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +1 -0
  94. package/dist/types/src/components/ChatPrompt/index.d.ts +6 -0
  95. package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -0
  96. package/dist/types/src/components/ChatThread/ChatMessage.d.ts +17 -0
  97. package/dist/types/src/components/ChatThread/ChatMessage.d.ts.map +1 -0
  98. package/dist/types/src/components/ChatThread/ChatThread.d.ts +19 -0
  99. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -0
  100. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +199 -0
  101. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -0
  102. package/dist/types/src/components/ChatThread/ToolBlock.d.ts +19 -0
  103. package/dist/types/src/components/ChatThread/ToolBlock.d.ts.map +1 -0
  104. package/dist/types/src/components/ChatThread/index.d.ts +2 -0
  105. package/dist/types/src/components/ChatThread/index.d.ts.map +1 -0
  106. package/dist/types/src/components/{Thread → ChatThread}/reducer.d.ts +4 -4
  107. package/dist/types/src/components/ChatThread/reducer.d.ts.map +1 -0
  108. package/dist/types/src/components/PromptSettings.d.ts +2 -2
  109. package/dist/types/src/components/PromptSettings.d.ts.map +1 -1
  110. package/dist/types/src/components/SequenceContainer.d.ts +8 -0
  111. package/dist/types/src/components/SequenceContainer.d.ts.map +1 -0
  112. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts +13 -0
  113. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts.map +1 -0
  114. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts +8 -0
  115. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts.map +1 -0
  116. package/dist/types/src/components/SequenceEditor/index.d.ts +2 -0
  117. package/dist/types/src/components/SequenceEditor/index.d.ts.map +1 -0
  118. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +4 -3
  119. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  120. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +3 -3
  121. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  122. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +5 -4
  123. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  124. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +1 -1
  125. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  126. package/dist/types/src/components/Toolbox/Toolbox.d.ts +11 -4
  127. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  128. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +1 -1
  129. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/index.d.ts +6 -12
  131. package/dist/types/src/components/index.d.ts.map +1 -1
  132. package/dist/types/src/events.d.ts.map +1 -1
  133. package/dist/types/src/hooks/{processor.d.ts → chat-processor.d.ts} +36 -22
  134. package/dist/types/src/hooks/chat-processor.d.ts.map +1 -0
  135. package/dist/types/src/hooks/chat-processor.test.d.ts +2 -0
  136. package/dist/types/src/hooks/chat-processor.test.d.ts.map +1 -0
  137. package/dist/types/src/hooks/index.d.ts +5 -5
  138. package/dist/types/src/hooks/index.d.ts.map +1 -1
  139. package/dist/types/src/hooks/presets.d.ts +13 -0
  140. package/dist/types/src/hooks/presets.d.ts.map +1 -0
  141. package/dist/types/src/hooks/useBlueprints.d.ts +9 -0
  142. package/dist/types/src/hooks/useBlueprints.d.ts.map +1 -0
  143. package/dist/types/src/hooks/useChatProcessor.d.ts +20 -8
  144. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  145. package/dist/types/src/hooks/useChatServices.d.ts +14 -0
  146. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -0
  147. package/dist/types/src/hooks/useReferencesProvider.d.ts +7 -0
  148. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -0
  149. package/dist/types/src/parser/index.d.ts +1 -1
  150. package/dist/types/src/parser/index.d.ts.map +1 -1
  151. package/dist/types/src/queue-logger.d.ts +5 -5
  152. package/dist/types/src/queue-logger.d.ts.map +1 -1
  153. package/dist/types/src/stories/Chat.stories.d.ts +207 -0
  154. package/dist/types/src/stories/Chat.stories.d.ts.map +1 -0
  155. package/dist/types/src/testing/index.d.ts +1 -1
  156. package/dist/types/src/testing/index.d.ts.map +1 -1
  157. package/dist/types/src/testing/test-sequence.d.ts +8 -0
  158. package/dist/types/src/testing/test-sequence.d.ts.map +1 -0
  159. package/dist/types/src/translations.d.ts +68 -113
  160. package/dist/types/src/translations.d.ts.map +1 -1
  161. package/dist/types/src/types/index.d.ts +1 -3
  162. package/dist/types/src/types/index.d.ts.map +1 -1
  163. package/dist/types/src/types/schema.d.ts +120 -0
  164. package/dist/types/src/types/schema.d.ts.map +1 -0
  165. package/dist/types/src/types/service.d.ts +9 -9
  166. package/dist/types/src/types/service.d.ts.map +1 -1
  167. package/dist/types/tsconfig.tsbuildinfo +1 -1
  168. package/package.json +84 -76
  169. package/src/AssistantPlugin.tsx +43 -44
  170. package/src/capabilities/app-graph-builder.ts +24 -103
  171. package/src/capabilities/index.ts +0 -3
  172. package/src/capabilities/intent-resolver.ts +41 -14
  173. package/src/capabilities/react-surface.tsx +38 -37
  174. package/src/capabilities/settings.ts +3 -3
  175. package/src/capability-definitions.ts +15 -0
  176. package/src/components/AssistantSettings/AssistantSettings.tsx +4 -4
  177. package/src/components/BlueprintContainer.tsx +9 -133
  178. package/src/components/Chat/Chat.tsx +388 -0
  179. package/src/components/Chat/events.ts +50 -0
  180. package/src/components/Chat/index.ts +7 -0
  181. package/src/components/ChatContainer.tsx +26 -20
  182. package/src/components/ChatDialog.tsx +64 -0
  183. package/src/components/ChatPrompt/ChatActions.tsx +71 -0
  184. package/src/components/ChatPrompt/ChatOptionsMenu.tsx +52 -0
  185. package/src/components/ChatPrompt/ChatPresets.tsx +28 -0
  186. package/src/components/ChatPrompt/ChatReferences.tsx +53 -0
  187. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +39 -0
  188. package/src/components/ChatPrompt/index.ts +9 -0
  189. package/src/components/ChatThread/ChatMessage.tsx +268 -0
  190. package/src/components/ChatThread/ChatThread.stories.tsx +143 -0
  191. package/src/components/ChatThread/ChatThread.tsx +57 -0
  192. package/src/components/{Thread/ToolInvocations.tsx → ChatThread/ToolBlock.tsx} +36 -21
  193. package/src/{experimental/transcription → components/ChatThread}/index.ts +2 -0
  194. package/src/components/{Thread → ChatThread}/reducer.ts +14 -14
  195. package/src/components/PromptSettings.tsx +43 -45
  196. package/src/components/SequenceContainer.tsx +132 -0
  197. package/src/components/SequenceEditor/SequenceEditor.stories.tsx +32 -0
  198. package/src/components/{BlueprintEditor/BlueprintEditor.tsx → SequenceEditor/SequenceEditor.tsx} +7 -7
  199. package/src/components/{AmbientDialog → SequenceEditor}/index.ts +1 -1
  200. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +29 -34
  201. package/src/components/TemplateEditor/TemplateEditor.tsx +39 -24
  202. package/src/components/TemplateEditor/TemplateForm.stories.tsx +17 -17
  203. package/src/components/TemplateEditor/TemplateForm.tsx +50 -57
  204. package/src/components/Toolbox/Toolbox.stories.tsx +5 -6
  205. package/src/components/Toolbox/Toolbox.tsx +60 -4
  206. package/src/components/index.ts +4 -5
  207. package/src/events.ts +2 -2
  208. package/src/hooks/{processor.test.ts → chat-processor.test.ts} +3 -2
  209. package/src/hooks/chat-processor.ts +314 -0
  210. package/src/hooks/index.ts +5 -5
  211. package/src/hooks/presets.ts +52 -0
  212. package/src/hooks/useBlueprints.ts +57 -0
  213. package/src/hooks/useChatProcessor.ts +143 -0
  214. package/src/hooks/useChatServices.ts +67 -0
  215. package/src/hooks/{useContextProvider.ts → useReferencesProvider.ts} +14 -14
  216. package/src/parser/index.ts +1 -1
  217. package/src/queue-logger.ts +6 -6
  218. package/src/stories/Chat.stories.tsx +371 -0
  219. package/src/testing/index.ts +1 -1
  220. package/src/testing/test-functions.ts +1 -1
  221. package/src/testing/test-sequence.ts +51 -0
  222. package/src/tools/openapi.test.ts +11 -11
  223. package/src/translations.ts +39 -28
  224. package/src/types/index.ts +1 -3
  225. package/src/types/schema.ts +108 -0
  226. package/dist/lib/browser/AssistantDialog-MQOOR364.mjs +0 -47
  227. package/dist/lib/browser/AssistantDialog-MQOOR364.mjs.map +0 -7
  228. package/dist/lib/browser/BlueprintContainer-AT5Y7EXG.mjs +0 -321
  229. package/dist/lib/browser/BlueprintContainer-AT5Y7EXG.mjs.map +0 -7
  230. package/dist/lib/browser/ChatContainer-C2NEAS3A.mjs +0 -40
  231. package/dist/lib/browser/ChatContainer-C2NEAS3A.mjs.map +0 -7
  232. package/dist/lib/browser/TemplateContainer-QQHVOTSI.mjs.map +0 -7
  233. package/dist/lib/browser/ai-client-MK2ZZII2.mjs +0 -39
  234. package/dist/lib/browser/ai-client-MK2ZZII2.mjs.map +0 -7
  235. package/dist/lib/browser/app-graph-builder-E4H5DCOJ.mjs.map +0 -7
  236. package/dist/lib/browser/chunk-AAOKC2JN.mjs +0 -208
  237. package/dist/lib/browser/chunk-AAOKC2JN.mjs.map +0 -7
  238. package/dist/lib/browser/chunk-BI6AHRNJ.mjs.map +0 -7
  239. package/dist/lib/browser/chunk-JO4W3MF7.mjs +0 -2101
  240. package/dist/lib/browser/chunk-JO4W3MF7.mjs.map +0 -7
  241. package/dist/lib/browser/chunk-JQFUME3B.mjs.map +0 -7
  242. package/dist/lib/browser/chunk-MEGMOFJB.mjs +0 -16
  243. package/dist/lib/browser/chunk-MEGMOFJB.mjs.map +0 -7
  244. package/dist/lib/browser/chunk-Q6UZ4F3H.mjs +0 -96
  245. package/dist/lib/browser/chunk-Q6UZ4F3H.mjs.map +0 -7
  246. package/dist/lib/browser/chunk-UE3IZ4PN.mjs +0 -15
  247. package/dist/lib/browser/chunk-UE3IZ4PN.mjs.map +0 -7
  248. package/dist/lib/browser/chunk-XOZ7YMO3.mjs +0 -20
  249. package/dist/lib/browser/intent-resolver-3UICTGPM.mjs +0 -43
  250. package/dist/lib/browser/intent-resolver-3UICTGPM.mjs.map +0 -7
  251. package/dist/lib/browser/react-surface-LXCNUSZN.mjs.map +0 -7
  252. package/dist/lib/browser/settings-XRHXVWGB.mjs.map +0 -7
  253. package/dist/lib/node/AssistantDialog-AN4Z6YUV.cjs +0 -73
  254. package/dist/lib/node/AssistantDialog-AN4Z6YUV.cjs.map +0 -7
  255. package/dist/lib/node/BlueprintContainer-NOWLDYCZ.cjs +0 -344
  256. package/dist/lib/node/BlueprintContainer-NOWLDYCZ.cjs.map +0 -7
  257. package/dist/lib/node/ChatContainer-VKYBQHUB.cjs +0 -68
  258. package/dist/lib/node/ChatContainer-VKYBQHUB.cjs.map +0 -7
  259. package/dist/lib/node/TemplateContainer-JZF2DCCG.cjs +0 -58
  260. package/dist/lib/node/TemplateContainer-JZF2DCCG.cjs.map +0 -7
  261. package/dist/lib/node/ai-client-7HNSMUMT.cjs +0 -53
  262. package/dist/lib/node/ai-client-7HNSMUMT.cjs.map +0 -7
  263. package/dist/lib/node/app-graph-builder-PPR5B5KU.cjs +0 -235
  264. package/dist/lib/node/app-graph-builder-PPR5B5KU.cjs.map +0 -7
  265. package/dist/lib/node/chunk-4EEWTDQK.cjs +0 -117
  266. package/dist/lib/node/chunk-4EEWTDQK.cjs.map +0 -7
  267. package/dist/lib/node/chunk-FUAGEO7Q.cjs +0 -52
  268. package/dist/lib/node/chunk-FUAGEO7Q.cjs.map +0 -7
  269. package/dist/lib/node/chunk-HRNIUYVQ.cjs +0 -128
  270. package/dist/lib/node/chunk-HRNIUYVQ.cjs.map +0 -7
  271. package/dist/lib/node/chunk-IKZBMHSW.cjs +0 -184
  272. package/dist/lib/node/chunk-IKZBMHSW.cjs.map +0 -7
  273. package/dist/lib/node/chunk-LMDJEGZ2.cjs +0 -233
  274. package/dist/lib/node/chunk-LMDJEGZ2.cjs.map +0 -7
  275. package/dist/lib/node/chunk-NIDICM57.cjs +0 -2080
  276. package/dist/lib/node/chunk-NIDICM57.cjs.map +0 -7
  277. package/dist/lib/node/chunk-P74TWGMG.cjs.map +0 -7
  278. package/dist/lib/node/chunk-QGPWY6GW.cjs +0 -34
  279. package/dist/lib/node/chunk-QGPWY6GW.cjs.map +0 -7
  280. package/dist/lib/node/index.cjs +0 -289
  281. package/dist/lib/node/index.cjs.map +0 -7
  282. package/dist/lib/node/intent-resolver-QSWGTKON.cjs +0 -58
  283. package/dist/lib/node/intent-resolver-QSWGTKON.cjs.map +0 -7
  284. package/dist/lib/node/meta.json +0 -1
  285. package/dist/lib/node/react-surface-D3NBYRZ6.cjs +0 -172
  286. package/dist/lib/node/react-surface-D3NBYRZ6.cjs.map +0 -7
  287. package/dist/lib/node/settings-2JXLKYGE.cjs +0 -36
  288. package/dist/lib/node/settings-2JXLKYGE.cjs.map +0 -7
  289. package/dist/lib/node/types/index.cjs +0 -54
  290. package/dist/lib/node/types/index.cjs.map +0 -7
  291. package/dist/lib/node-esm/AssistantDialog-6WEMLUPU.mjs +0 -48
  292. package/dist/lib/node-esm/AssistantDialog-6WEMLUPU.mjs.map +0 -7
  293. package/dist/lib/node-esm/BlueprintContainer-STOJAVML.mjs +0 -322
  294. package/dist/lib/node-esm/BlueprintContainer-STOJAVML.mjs.map +0 -7
  295. package/dist/lib/node-esm/ChatContainer-3MVBTUJN.mjs +0 -41
  296. package/dist/lib/node-esm/ChatContainer-3MVBTUJN.mjs.map +0 -7
  297. package/dist/lib/node-esm/TemplateContainer-SOEWY2ZN.mjs.map +0 -7
  298. package/dist/lib/node-esm/ai-client-XGZBJ6BE.mjs +0 -40
  299. package/dist/lib/node-esm/ai-client-XGZBJ6BE.mjs.map +0 -7
  300. package/dist/lib/node-esm/app-graph-builder-3SY5MBIK.mjs.map +0 -7
  301. package/dist/lib/node-esm/chunk-34EX6E5Q.mjs +0 -18
  302. package/dist/lib/node-esm/chunk-34EX6E5Q.mjs.map +0 -7
  303. package/dist/lib/node-esm/chunk-3UEZLJ2V.mjs +0 -16
  304. package/dist/lib/node-esm/chunk-3UEZLJ2V.mjs.map +0 -7
  305. package/dist/lib/node-esm/chunk-BB2TAT4P.mjs +0 -22
  306. package/dist/lib/node-esm/chunk-CDAILLCU.mjs +0 -98
  307. package/dist/lib/node-esm/chunk-CDAILLCU.mjs.map +0 -7
  308. package/dist/lib/node-esm/chunk-J6UXXZGJ.mjs +0 -209
  309. package/dist/lib/node-esm/chunk-J6UXXZGJ.mjs.map +0 -7
  310. package/dist/lib/node-esm/chunk-OD574YIU.mjs +0 -2102
  311. package/dist/lib/node-esm/chunk-OD574YIU.mjs.map +0 -7
  312. package/dist/lib/node-esm/chunk-OYN6HLXZ.mjs.map +0 -7
  313. package/dist/lib/node-esm/chunk-UCOFKNKN.mjs.map +0 -7
  314. package/dist/lib/node-esm/intent-resolver-E6MXTYAU.mjs +0 -44
  315. package/dist/lib/node-esm/intent-resolver-E6MXTYAU.mjs.map +0 -7
  316. package/dist/lib/node-esm/react-surface-7HA5EDWY.mjs.map +0 -7
  317. package/dist/lib/node-esm/settings-5IAY6BT4.mjs.map +0 -7
  318. package/dist/types/src/capabilities/ai-client.d.ts +0 -5
  319. package/dist/types/src/capabilities/ai-client.d.ts.map +0 -1
  320. package/dist/types/src/capabilities/capabilities.d.ts +0 -6
  321. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  322. package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts +0 -10
  323. package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts.map +0 -1
  324. package/dist/types/src/components/AmbientDialog/AmbientDialog.stories.d.ts +0 -8
  325. package/dist/types/src/components/AmbientDialog/AmbientDialog.stories.d.ts.map +0 -1
  326. package/dist/types/src/components/AmbientDialog/index.d.ts +0 -2
  327. package/dist/types/src/components/AmbientDialog/index.d.ts.map +0 -1
  328. package/dist/types/src/components/AssistantDialog.d.ts +0 -7
  329. package/dist/types/src/components/AssistantDialog.d.ts.map +0 -1
  330. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts +0 -13
  331. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts.map +0 -1
  332. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.stories.d.ts +0 -8
  333. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.stories.d.ts.map +0 -1
  334. package/dist/types/src/components/BlueprintEditor/index.d.ts +0 -2
  335. package/dist/types/src/components/BlueprintEditor/index.d.ts.map +0 -1
  336. package/dist/types/src/components/Prompt/Prompt.d.ts +0 -23
  337. package/dist/types/src/components/Prompt/Prompt.d.ts.map +0 -1
  338. package/dist/types/src/components/Prompt/Prompt.stories.d.ts +0 -13
  339. package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +0 -1
  340. package/dist/types/src/components/Prompt/PromptBar.d.ts +0 -16
  341. package/dist/types/src/components/Prompt/PromptBar.d.ts.map +0 -1
  342. package/dist/types/src/components/Prompt/PromptBar.stories.d.ts +0 -9
  343. package/dist/types/src/components/Prompt/PromptBar.stories.d.ts.map +0 -1
  344. package/dist/types/src/components/Prompt/autocomplete.d.ts +0 -25
  345. package/dist/types/src/components/Prompt/autocomplete.d.ts.map +0 -1
  346. package/dist/types/src/components/Prompt/index.d.ts +0 -3
  347. package/dist/types/src/components/Prompt/index.d.ts.map +0 -1
  348. package/dist/types/src/components/Prompt/references.d.ts +0 -30
  349. package/dist/types/src/components/Prompt/references.d.ts.map +0 -1
  350. package/dist/types/src/components/TemplateContainer.d.ts +0 -8
  351. package/dist/types/src/components/TemplateContainer.d.ts.map +0 -1
  352. package/dist/types/src/components/Thread/Thread.d.ts +0 -28
  353. package/dist/types/src/components/Thread/Thread.d.ts.map +0 -1
  354. package/dist/types/src/components/Thread/Thread.stories.d.ts +0 -11
  355. package/dist/types/src/components/Thread/Thread.stories.d.ts.map +0 -1
  356. package/dist/types/src/components/Thread/ThreadContainer.d.ts +0 -13
  357. package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +0 -1
  358. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts +0 -16
  359. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +0 -1
  360. package/dist/types/src/components/Thread/ThreadMessage.d.ts +0 -16
  361. package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +0 -1
  362. package/dist/types/src/components/Thread/ToolInvocations.d.ts +0 -13
  363. package/dist/types/src/components/Thread/ToolInvocations.d.ts.map +0 -1
  364. package/dist/types/src/components/Thread/index.d.ts +0 -3
  365. package/dist/types/src/components/Thread/index.d.ts.map +0 -1
  366. package/dist/types/src/components/Thread/reducer.d.ts.map +0 -1
  367. package/dist/types/src/experimental/transcription/index.d.ts +0 -1
  368. package/dist/types/src/experimental/transcription/index.d.ts.map +0 -1
  369. package/dist/types/src/hooks/processor.d.ts.map +0 -1
  370. package/dist/types/src/hooks/processor.test.d.ts +0 -2
  371. package/dist/types/src/hooks/processor.test.d.ts.map +0 -1
  372. package/dist/types/src/hooks/useContextProvider.d.ts +0 -17
  373. package/dist/types/src/hooks/useContextProvider.d.ts.map +0 -1
  374. package/dist/types/src/hooks/useMessageQueue.d.ts +0 -42
  375. package/dist/types/src/hooks/useMessageQueue.d.ts.map +0 -1
  376. package/dist/types/src/hooks/useServices.d.ts +0 -7
  377. package/dist/types/src/hooks/useServices.d.ts.map +0 -1
  378. package/dist/types/src/hooks/useTextInputEvents.d.ts +0 -13
  379. package/dist/types/src/hooks/useTextInputEvents.d.ts.map +0 -1
  380. package/dist/types/src/stories/Prompt.stories.d.ts +0 -8
  381. package/dist/types/src/stories/Prompt.stories.d.ts.map +0 -1
  382. package/dist/types/src/stories/Query.stories.d.ts +0 -19
  383. package/dist/types/src/stories/Query.stories.d.ts.map +0 -1
  384. package/dist/types/src/stories/Research.stories.d.ts +0 -15
  385. package/dist/types/src/stories/Research.stories.d.ts.map +0 -1
  386. package/dist/types/src/stories/test-data.d.ts +0 -3
  387. package/dist/types/src/stories/test-data.d.ts.map +0 -1
  388. package/dist/types/src/stories/testing.d.ts +0 -12
  389. package/dist/types/src/stories/testing.d.ts.map +0 -1
  390. package/dist/types/src/testing/test-blueprint.d.ts +0 -8
  391. package/dist/types/src/testing/test-blueprint.d.ts.map +0 -1
  392. package/dist/types/src/types/chat.d.ts +0 -23
  393. package/dist/types/src/types/chat.d.ts.map +0 -1
  394. package/dist/types/src/types/template.d.ts +0 -56
  395. package/dist/types/src/types/template.d.ts.map +0 -1
  396. package/dist/types/src/types/types.d.ts +0 -50
  397. package/dist/types/src/types/types.d.ts.map +0 -1
  398. package/src/capabilities/ai-client.ts +0 -42
  399. package/src/capabilities/capabilities.ts +0 -15
  400. package/src/components/AmbientDialog/AmbientDialog.stories.tsx +0 -84
  401. package/src/components/AmbientDialog/AmbientDialog.tsx +0 -117
  402. package/src/components/AssistantDialog.tsx +0 -37
  403. package/src/components/BlueprintEditor/BlueprintEditor.stories.tsx +0 -32
  404. package/src/components/BlueprintEditor/index.ts +0 -5
  405. package/src/components/Prompt/Prompt.stories.tsx +0 -121
  406. package/src/components/Prompt/Prompt.tsx +0 -124
  407. package/src/components/Prompt/PromptBar.stories.tsx +0 -69
  408. package/src/components/Prompt/PromptBar.tsx +0 -105
  409. package/src/components/Prompt/autocomplete.ts +0 -218
  410. package/src/components/Prompt/index.ts +0 -6
  411. package/src/components/Prompt/references.ts +0 -180
  412. package/src/components/TemplateContainer.tsx +0 -23
  413. package/src/components/Thread/Thread.stories.tsx +0 -201
  414. package/src/components/Thread/Thread.tsx +0 -118
  415. package/src/components/Thread/ThreadContainer.stories.tsx +0 -283
  416. package/src/components/Thread/ThreadContainer.tsx +0 -105
  417. package/src/components/Thread/ThreadMessage.tsx +0 -234
  418. package/src/components/Thread/index.ts +0 -6
  419. package/src/hooks/processor.ts +0 -238
  420. package/src/hooks/useChatProcessor.tsx +0 -97
  421. package/src/hooks/useMessageQueue.ts +0 -22
  422. package/src/hooks/useServices.ts +0 -28
  423. package/src/hooks/useTextInputEvents.ts +0 -49
  424. package/src/stories/Prompt.stories.tsx +0 -60
  425. package/src/stories/Query.stories.tsx +0 -514
  426. package/src/stories/Research.stories.tsx +0 -482
  427. package/src/stories/test-data.ts +0 -128
  428. package/src/stories/testing.ts +0 -60
  429. package/src/testing/test-blueprint.ts +0 -58
  430. package/src/types/chat.ts +0 -32
  431. package/src/types/template.ts +0 -66
  432. package/src/types/types.ts +0 -48
@@ -1,105 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import React, { useCallback, type FC, useEffect } from 'react';
6
-
7
- import { CollaborationActions, createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
- import { type AssociatedArtifact } from '@dxos/artifact';
9
- import { DXN, Ref } from '@dxos/echo';
10
- import { invariant } from '@dxos/invariant';
11
- import { log } from '@dxos/log';
12
- import { getSpace } from '@dxos/react-client/echo';
13
- import { type ThemedClassName } from '@dxos/react-ui';
14
-
15
- import { Thread, type ThreadProps } from './Thread';
16
- import { useChatProcessor, useContextProvider, useMessageQueue } from '../../hooks';
17
- import { type AIChatType, type AssistantSettingsProps } from '../../types';
18
-
19
- export type ThreadContainerProps = {
20
- chat?: AIChatType;
21
- settings?: AssistantSettingsProps;
22
- part?: 'deck' | 'dialog';
23
- associatedArtifact?: AssociatedArtifact;
24
- } & Pick<ThreadProps, 'debug' | 'transcription' | 'onOpenChange' | 'onAddToGraph'>;
25
-
26
- // TODO(burdon): Since this only wraps Thread, just separate out hook?
27
- export const ThreadContainer: FC<ThemedClassName<ThreadContainerProps>> = ({
28
- classNames,
29
- chat,
30
- settings,
31
- part,
32
- associatedArtifact,
33
- onOpenChange,
34
- ...props
35
- }) => {
36
- const space = getSpace(chat);
37
- const contextProvider = useContextProvider(space);
38
- const processor = useChatProcessor({ chat, space, settings, part, associatedArtifact });
39
- const messageQueue = useMessageQueue(chat);
40
- const { dispatchPromise: dispatch } = useIntentDispatcher();
41
- // TODO(thure): This will be referentially new on every render, is it causing overreactivity?
42
- const messages = [...(messageQueue?.objects ?? []), ...processor.messages.value];
43
-
44
- // Post last message to document.
45
- useEffect(() => {
46
- if (!processor.streaming.value && messageQueue?.objects) {
47
- const message = messageQueue.objects[messageQueue.objects.length - 1];
48
- if (space && chat && message && dispatch && associatedArtifact) {
49
- void dispatch(
50
- createIntent(CollaborationActions.InsertContent, {
51
- target: associatedArtifact,
52
- object: Ref.fromDXN(new DXN(DXN.kind.QUEUE, [...chat.queue.dxn.parts, message.id])),
53
- label: 'View proposal',
54
- }),
55
- );
56
- }
57
- }
58
- }, [messageQueue, associatedArtifact, processor.streaming.value]);
59
-
60
- const handleSubmit = useCallback(
61
- (text: string) => {
62
- // Don't accept input if still processing.
63
- if (processor.streaming.value) {
64
- log.warn('ignoring submit; still processing.');
65
- return false;
66
- }
67
-
68
- onOpenChange?.(true);
69
-
70
- invariant(messageQueue);
71
- void processor.request(text, {
72
- history: messageQueue.objects,
73
- onComplete: (messages) => {
74
- void messageQueue.append(messages);
75
- },
76
- });
77
-
78
- return true;
79
- },
80
- [processor, messageQueue, onOpenChange],
81
- );
82
-
83
- const handleCancel = useCallback(() => {
84
- if (processor.streaming.value) {
85
- void processor.cancel();
86
- }
87
- }, [processor]);
88
-
89
- return (
90
- <Thread
91
- classNames={classNames}
92
- space={space}
93
- messages={messages}
94
- processing={processor.streaming.value}
95
- error={processor.error.value}
96
- tools={processor.tools}
97
- contextProvider={contextProvider}
98
- onSubmit={handleSubmit}
99
- onCancel={handleCancel}
100
- onPrompt={handleSubmit}
101
- onOpenChange={onOpenChange}
102
- {...props}
103
- />
104
- );
105
- };
@@ -1,234 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import React, { type FC, type PropsWithChildren } from 'react';
6
-
7
- import { type MessageContentBlock, type Message, type Tool } from '@dxos/ai';
8
- import { Surface } from '@dxos/app-framework';
9
- import { type Obj } from '@dxos/echo';
10
- import { invariant } from '@dxos/invariant';
11
- import { type Space } from '@dxos/react-client/echo';
12
- import { Button, Icon, IconButton, type ThemedClassName } from '@dxos/react-ui';
13
- import {
14
- MarkdownViewer,
15
- ToggleContainer as NativeToggleContainer,
16
- type ToggleContainerProps,
17
- } from '@dxos/react-ui-components';
18
- import { Json } from '@dxos/react-ui-syntax-highlighter';
19
- import { mx } from '@dxos/react-ui-theme';
20
- import { safeParseJson } from '@dxos/util';
21
-
22
- import { ToolBlock, isToolMessage } from './ToolInvocations';
23
- import { ToolboxContainer } from '../Toolbox';
24
-
25
- const panelClassNames = 'flex flex-col w-full px-2 bg-activeSurface rounded-md';
26
- const userClassNames = 'bg-[--user-fill] text-accentSurfaceText';
27
-
28
- const ToggleContainer = (props: ToggleContainerProps) => {
29
- return <NativeToggleContainer {...props} classNames={mx(panelClassNames, props.classNames)} />;
30
- };
31
-
32
- const MessageContainer = ({ children, classNames, user }: ThemedClassName<PropsWithChildren<{ user?: boolean }>>) => {
33
- if (!children) {
34
- return null;
35
- }
36
-
37
- return (
38
- <div role='list-item' className={mx('flex w-full', user && 'justify-end', classNames)}>
39
- <div className={mx(user ? ['px-2 py-1 rounded-md', userClassNames] : 'w-full')}>{children}</div>
40
- </div>
41
- );
42
- };
43
-
44
- export type ThreadMessageProps = ThemedClassName<{
45
- space?: Space;
46
- message: Message;
47
- debug?: boolean;
48
- tools?: Tool[];
49
- onPrompt?: (text: string) => void;
50
- onDelete?: (id: string) => void;
51
- onAddToGraph?: (object: Obj.Any) => void;
52
- }>;
53
-
54
- export const ThreadMessage: FC<ThreadMessageProps> = ({
55
- classNames,
56
- space,
57
- message,
58
- tools,
59
- onPrompt,
60
- onAddToGraph,
61
- }) => {
62
- const { role, content = [] } = message;
63
-
64
- // TODO(burdon): Restructure types to make check unnecessary.
65
- if (isToolMessage(message)) {
66
- return (
67
- <MessageContainer classNames={mx(classNames, 'animate-[fadeIn_0.5s]')}>
68
- <ToolBlock space={space} classNames={panelClassNames} message={message} tools={tools} />
69
- </MessageContainer>
70
- );
71
- }
72
-
73
- return content.map((block, idx) => {
74
- // TODO(burdon): Filter empty messages.
75
- if (block.type === 'text' && block.text.replaceAll(/\s+/g, '').length === 0) {
76
- return null;
77
- }
78
-
79
- const Component = components[block.type] ?? components.default;
80
-
81
- return (
82
- <MessageContainer
83
- key={idx}
84
- classNames={mx(classNames, 'animate-[fadeIn_0.5s]')}
85
- user={block.type === 'text' && role === 'user'}
86
- >
87
- <Component space={space} block={block} onPrompt={onPrompt} onAddToGraph={onAddToGraph} />
88
- </MessageContainer>
89
- );
90
- });
91
- };
92
-
93
- type BlockComponent = FC<{
94
- space?: Space;
95
- block: MessageContentBlock;
96
- onPrompt?: (text: string) => void;
97
- onAddToGraph?: (object: Obj.Any) => void;
98
- }>;
99
-
100
- const components: Record<string, BlockComponent> = {
101
- //
102
- // Text
103
- //
104
- ['text' as const]: ({ block }) => {
105
- invariant(block.type === 'text');
106
- // const [open, setOpen] = useState(block.disposition === 'cot' && block.pending);
107
- const title = block.disposition ? titles[block.disposition] : undefined;
108
- if (!title) {
109
- return <MarkdownViewer classNames='[&>p]:animate-[fadeIn_0.5s]' content={block.text} />;
110
- }
111
-
112
- // TOOD(burdon): Store last time user opened/closed COT.
113
- // Autoclose when streaming ends.
114
- // useEffect(() => {
115
- // if (block.disposition === 'cot' && !block.pending) {
116
- // setOpen(false);
117
- // }
118
- // }, [block.disposition, block.pending]);
119
-
120
- return (
121
- <ToggleContainer
122
- // open={open}
123
- defaultOpen={systemDispositions.includes(block.disposition ?? '') && block.pending}
124
- title={title}
125
- icon={
126
- block.pending ? (
127
- <Icon icon={'ph--circle-notch--regular'} classNames='text-subdued ml-2 animate-spin' size={4} />
128
- ) : undefined
129
- }
130
- >
131
- <MarkdownViewer
132
- content={block.text}
133
- classNames={['pbe-2', systemDispositions.includes(block.disposition ?? '') && 'text-sm text-subdued']}
134
- />
135
- </ToggleContainer>
136
- );
137
- },
138
-
139
- //
140
- // JSON
141
- //
142
- ['json' as const]: ({ space, block, onPrompt, onAddToGraph }) => {
143
- invariant(block.type === 'json');
144
-
145
- switch (block.disposition) {
146
- case 'tool_list': {
147
- return (
148
- <ToggleContainer title={titles[block.disposition]} defaultOpen={true}>
149
- <ToolboxContainer space={space} classNames='pbe-2' />
150
- </ToggleContainer>
151
- );
152
- }
153
-
154
- case 'suggest': {
155
- const { text = '' }: { text: string } = safeParseJson(block.json ?? '{}') ?? ({} as any);
156
- return <IconButton icon='ph--lightning--regular' label={text} onClick={() => onPrompt?.(text)} />;
157
- }
158
-
159
- case 'select': {
160
- const { options = [] }: { options: string[] } = safeParseJson(block.json ?? '{}') ?? ({} as any);
161
- return (
162
- <div className='flex flex-wrap gap-1'>
163
- {options.map((option, idx) => (
164
- <Button
165
- classNames={'animate-[fadeIn_0.5s] rounded-2xl text-sm'}
166
- key={option}
167
- onClick={() => onPrompt?.(option)}
168
- >
169
- {option}
170
- </Button>
171
- ))}
172
- </div>
173
- );
174
- }
175
-
176
- case 'graph': {
177
- return (
178
- <div className='flex flex-wrap gap-1'>
179
- <Surface
180
- role='card'
181
- data={{ subject: JSON.parse(block.json ?? '{}') }}
182
- limit={1}
183
- fallback={<div className='font-mono text-xs text-pre'>{block.json}</div>}
184
- />
185
- {onAddToGraph && (
186
- <IconButton
187
- icon='ph--plus--regular'
188
- label='Add to graph'
189
- onClick={() => onAddToGraph?.(JSON.parse(block.json ?? '{}'))}
190
- />
191
- )}
192
- </div>
193
- );
194
- }
195
-
196
- default: {
197
- const title = block.disposition ? titles[block.disposition] : undefined;
198
- return (
199
- <ToggleContainer title={title ?? 'JSON'}>
200
- <Json data={safeParseJson(block.json ?? block)} classNames='!p-1 text-xs' />
201
- </ToggleContainer>
202
- );
203
- }
204
- }
205
- },
206
-
207
- //
208
- // Default
209
- //
210
- default: ({ block }) => {
211
- let title = titles[block.type];
212
- if (block.type === 'tool_use') {
213
- title = `Tool [${block.name}]`; // TODO(burdon): Get label from tool.
214
- }
215
-
216
- return (
217
- <ToggleContainer title={title ?? 'JSON'}>
218
- <Json data={block} classNames='!p-1 text-xs' />
219
- </ToggleContainer>
220
- );
221
- },
222
- };
223
-
224
- // TODO(burdon): Translations.
225
- const titles: Record<string, string> = {
226
- ['cot' as const]: 'Chain of thought',
227
- ['artifact' as const]: 'Artifact',
228
- ['tool_use' as const]: 'Tool request',
229
- ['tool_result' as const]: 'Tool result',
230
- ['tool_list' as const]: 'Tools',
231
- ['artifact-update' as const]: 'Artifact(s) changed',
232
- };
233
-
234
- const systemDispositions: string[] = ['cot', 'artifact-update'];
@@ -1,6 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- export * from './Thread';
6
- export * from './ThreadContainer';
@@ -1,238 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { type Signal, batch, computed, signal } from '@preact/signals-core';
6
-
7
- import {
8
- DEFAULT_EDGE_MODEL,
9
- type ExecutableTool,
10
- type AiServiceClient,
11
- type GenerateRequest,
12
- type Message,
13
- type MessageContentBlock,
14
- type ToolUseContentBlock,
15
- } from '@dxos/ai';
16
- import { type PromiseIntentDispatcher } from '@dxos/app-framework';
17
- import { type ArtifactDefinition } from '@dxos/artifact';
18
- import { AISession, type ArtifactDiffResolver } from '@dxos/assistant';
19
- import { invariant } from '@dxos/invariant';
20
- import { log } from '@dxos/log';
21
- import { Filter, getVersion, type Space } from '@dxos/react-client/echo';
22
-
23
- // TODO(burdon): Factor out.
24
- declare global {
25
- interface ToolContextExtensions {
26
- space?: Space;
27
- dispatch?: PromiseIntentDispatcher;
28
- }
29
- }
30
-
31
- type RequestOptions = {
32
- history?: Message[];
33
- onComplete?: (messages: Message[]) => void;
34
- };
35
-
36
- export type ChatProcessorOptions = Pick<GenerateRequest, 'model' | 'systemPrompt'>;
37
-
38
- const defaultOptions: ChatProcessorOptions = {
39
- model: DEFAULT_EDGE_MODEL,
40
- systemPrompt: 'you are a helpful assistant',
41
- };
42
-
43
- /**
44
- * Handles interactions with the AI service.
45
- * Maintains a queue of messages and handles streaming responses from the AI service.
46
- * Executes tools based on AI responses.
47
- * Supports cancellation of in-progress requests.
48
- */
49
- export class ChatProcessor {
50
- /** Pending messages (incl. the current user request). */
51
- private readonly _pending: Signal<Message[]> = signal([]);
52
-
53
- /** Current streaming block (from the AI service). */
54
- private readonly _block: Signal<MessageContentBlock | undefined> = signal(undefined);
55
-
56
- /** Current streaming response. */
57
- private _session: AISession | undefined;
58
-
59
- /**
60
- * Streaming state.
61
- * @reactive
62
- */
63
- public readonly streaming: Signal<boolean> = computed(() => this._block.value !== undefined);
64
-
65
- /**
66
- * Last error.
67
- * @reactive
68
- */
69
- public readonly error: Signal<Error | undefined> = signal(undefined);
70
-
71
- /**
72
- * Array of Messages (incl. the current message being streamed).
73
- * @reactive
74
- */
75
- public readonly messages: Signal<Message[]> = computed(() => {
76
- const messages = [...this._pending.value];
77
- if (this._block.value) {
78
- const current = messages.pop();
79
- invariant(current);
80
- const { content, ...rest } = current;
81
- const message = { ...rest, content: [...content, this._block.value] };
82
- messages.push(message);
83
- }
84
-
85
- return messages;
86
- });
87
-
88
- constructor(
89
- private readonly _ai: AiServiceClient,
90
- private _tools?: ExecutableTool[],
91
- private _artifacts?: ArtifactDefinition[],
92
- private readonly _extensions?: ToolContextExtensions,
93
- private readonly _options: ChatProcessorOptions = defaultOptions,
94
- ) {}
95
-
96
- get tools() {
97
- return this._tools;
98
- }
99
-
100
- /**
101
- * Update tools.
102
- */
103
- setTools(tools: ExecutableTool[]): void {
104
- this._tools = tools;
105
- }
106
-
107
- /**
108
- * Make GPT request.
109
- */
110
- async request(message: string, options: RequestOptions = {}): Promise<Message[]> {
111
- this._session = new AISession({ operationModel: 'configured' });
112
-
113
- // Message complete.
114
- this._session.message.on((message) => {
115
- batch(() => {
116
- this._pending.value = [...this._pending.value, message];
117
- this._block.value = undefined;
118
- });
119
- });
120
-
121
- // Streaming update (happens before message complete).
122
- this._session.update.on((block) => {
123
- batch(() => {
124
- this._block.value = block;
125
- });
126
- });
127
-
128
- this._session.userMessage.on((message) => {
129
- this._pending.value = [...this._pending.value, message];
130
- });
131
-
132
- this._session.toolStatusReport.on(({ message, status }) => {
133
- const msg = this._pending.peek().find((m) => m.id === message.id);
134
- const toolUse = msg?.content.find((block) => block.type === 'tool_use');
135
- if (!toolUse) {
136
- return;
137
- }
138
-
139
- const block = msg?.content.find(
140
- (block): block is ToolUseContentBlock => block.type === 'tool_use' && block.id === toolUse.id,
141
- );
142
- if (block) {
143
- this._pending.value = this._pending.value.map((m) => {
144
- if (m.id === message.id) {
145
- return {
146
- ...m,
147
- content: m.content.map((b) =>
148
- b.type === 'tool_use' && b.id === toolUse.id ? { ...b, currentStatus: status } : b,
149
- ),
150
- };
151
- }
152
- return m;
153
- });
154
- } else {
155
- log.warn('no block for status report');
156
- }
157
- });
158
-
159
- try {
160
- const messages = await this._session.run({
161
- client: this._ai,
162
- history: options.history ?? [],
163
- artifacts: this._artifacts ?? [],
164
- requiredArtifactIds: this._artifacts?.map((artifact) => artifact.id) ?? [],
165
- tools: this._tools ?? [],
166
- prompt: message,
167
- systemPrompt: this._options.systemPrompt,
168
- extensions: this._extensions,
169
- artifactDiffResolver: this._artifactDiffResolver,
170
- generationOptions: {
171
- model: this._options.model,
172
- },
173
- });
174
-
175
- log('completed', { messages });
176
- options.onComplete?.(this._pending.value);
177
- } catch (err) {
178
- log.catch(err);
179
- if (err instanceof Error && err.message.includes('Overloaded')) {
180
- this.error.value = new AiServiceOverloadedError('AI service overloaded', { cause: err });
181
- } else {
182
- this.error.value = new Error('AI service error', { cause: err });
183
- }
184
- } finally {
185
- this._session = undefined;
186
- }
187
-
188
- return this._reset();
189
- }
190
-
191
- /**
192
- * Cancel pending requests.
193
- * @returns Pending requests (incl. the request message).
194
- */
195
- async cancel(): Promise<Message[]> {
196
- log.info('cancelling...');
197
- this._session?.abort();
198
- return this._reset();
199
- }
200
-
201
- private async _reset(): Promise<Message[]> {
202
- const messages = this._pending.value;
203
- batch(() => {
204
- this._pending.value = [];
205
- this._block.value = undefined;
206
- });
207
-
208
- return messages;
209
- }
210
-
211
- private _artifactDiffResolver: ArtifactDiffResolver = async (artifacts) => {
212
- const space = this._extensions?.space;
213
- if (!space) {
214
- return new Map();
215
- }
216
- const versions = new Map();
217
- await Promise.all(
218
- artifacts.map(async (artifact) => {
219
- const {
220
- objects: [object],
221
- } = await space.db.query(Filter.ids(artifact.id)).run();
222
- if (!object) {
223
- return;
224
- }
225
- versions.set(artifact.id, {
226
- version: getVersion(object),
227
- diff: `Current state: ${JSON.stringify(object)}`,
228
- });
229
- }),
230
- );
231
- return versions;
232
- };
233
- }
234
-
235
- // TODO(wittjosiah): Move to ai-service-client.
236
- export class AiServiceOverloadedError extends Error {
237
- code = 'AI_SERVICE_OVERLOADED';
238
- }
@@ -1,97 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { useEffect, useMemo, useState } from 'react';
6
-
7
- import { DEFAULT_EDGE_MODEL, DEFAULT_OLLAMA_MODEL, type ExecutableTool } from '@dxos/ai';
8
- import { Capabilities, useCapabilities, useCapability, useIntentDispatcher } from '@dxos/app-framework';
9
- import { type AssociatedArtifact, createSystemPrompt } from '@dxos/artifact';
10
- import { FunctionType } from '@dxos/functions';
11
- import { log } from '@dxos/log';
12
- import { useConfig } from '@dxos/react-client';
13
- import { Filter, fullyQualifiedId, type Space, useQuery } from '@dxos/react-client/echo';
14
- import { isNonNullable } from '@dxos/util';
15
-
16
- import { AssistantCapabilities } from '../capabilities';
17
- import { ChatProcessor, type ChatProcessorOptions } from '../hooks';
18
- import { convertFunctionToTool, createToolsFromService } from '../tools';
19
- import { type AIChatType, type AssistantSettingsProps, ServiceType } from '../types';
20
-
21
- type UseChatProcessorProps = {
22
- chat?: AIChatType;
23
- space?: Space;
24
- settings?: AssistantSettingsProps;
25
- part?: 'deck' | 'dialog';
26
- associatedArtifact?: AssociatedArtifact;
27
- };
28
-
29
- /**
30
- * Configure and create ChatProcessor.
31
- */
32
- export const useChatProcessor = ({
33
- chat,
34
- space,
35
- settings,
36
- // part = 'deck',
37
- part,
38
- associatedArtifact,
39
- }: UseChatProcessorProps): ChatProcessor => {
40
- const aiClient = useCapability(AssistantCapabilities.AiClient);
41
- const globalTools = useCapabilities(Capabilities.Tools);
42
- const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);
43
- const { dispatchPromise: dispatch } = useIntentDispatcher();
44
-
45
- // Services.
46
- const services = useQuery(space, Filter.type(ServiceType));
47
- const [serviceTools, setServiceTools] = useState<ExecutableTool[]>([]);
48
- useEffect(() => {
49
- log('creating service tools...');
50
- queueMicrotask(async () => {
51
- const tools = await Promise.all(services.map((service) => createToolsFromService(service)));
52
- setServiceTools(tools.flat());
53
- });
54
- }, [services]);
55
-
56
- // Tools and context.
57
- const config = useConfig();
58
- const functions = useQuery(space, Filter.type(FunctionType));
59
- const chatId = useMemo(() => (chat ? fullyQualifiedId(chat) : undefined), [chat]);
60
- const [tools, extensions] = useMemo(() => {
61
- log('creating tools...');
62
- const tools: ExecutableTool[] = [
63
- ...globalTools.flat(),
64
- ...serviceTools,
65
- ...functions
66
- .map((fn) => convertFunctionToTool(fn, config.values.runtime?.services?.edge?.url ?? '', space?.id))
67
- .filter(isNonNullable),
68
- ];
69
- const extensions = { space, dispatch, pivotId: chatId, part };
70
- return [tools, extensions];
71
- }, [dispatch, globalTools, space, chatId, serviceTools, functions]);
72
-
73
- // Prompt.
74
- const systemPrompt = useMemo(
75
- () =>
76
- createSystemPrompt({
77
- artifacts: artifactDefinitions.map((definition) => `${definition.name}\n${definition.instructions}`),
78
- associatedArtifact,
79
- }),
80
- [artifactDefinitions, associatedArtifact],
81
- );
82
-
83
- // TODO(burdon): Remove default (let backend decide if not specified).
84
- const model: ChatProcessorOptions['model'] =
85
- settings?.llmProvider === 'ollama'
86
- ? ((settings?.ollamaModel ?? DEFAULT_OLLAMA_MODEL) as ChatProcessorOptions['model'])
87
- : ((settings?.edgeModel ?? DEFAULT_EDGE_MODEL) as ChatProcessorOptions['model']);
88
-
89
- // Create processor.
90
- // TODO(burdon): Updated on each query update above; should just update current processor.
91
- const processor = useMemo(() => {
92
- log('creating processor...', { settings });
93
- return new ChatProcessor(aiClient.value, tools, artifactDefinitions, extensions, { model, systemPrompt });
94
- }, [aiClient.value, tools, artifactDefinitions, extensions, model, systemPrompt]);
95
-
96
- return processor;
97
- };
@@ -1,22 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { useMemo } from 'react';
6
-
7
- import { type Message } from '@dxos/ai';
8
- import { createQueueDXN } from '@dxos/echo-schema';
9
- import { getSpace, useQueue } from '@dxos/react-client/echo';
10
-
11
- import { type AIChatType } from '../types';
12
-
13
- export const useMessageQueue = (chat?: AIChatType) => {
14
- const space = getSpace(chat);
15
- const queueDxn = useMemo(() => {
16
- // TODO(dmaretskyi): Chat.queue.dxn should be a valid DXN already.
17
- const dxn = space && chat?.queue.dxn;
18
- return dxn ? createQueueDXN(space.id, dxn.parts.at(-1)) : undefined;
19
- }, [space, chat?.queue.dxn]);
20
-
21
- return useQueue<Message>(queueDxn);
22
- };