@dxos/plugin-assistant 0.8.3-staging.0fa589b → 0.8.4-main.f9ba587

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 (391) hide show
  1. package/dist/lib/browser/ChatContainer-6XNB5NEI.mjs +57 -0
  2. package/dist/lib/browser/ChatContainer-6XNB5NEI.mjs.map +7 -0
  3. package/dist/lib/browser/ChatDialog-IMWPRXTO.mjs +74 -0
  4. package/dist/lib/browser/ChatDialog-IMWPRXTO.mjs.map +7 -0
  5. package/dist/lib/browser/{BlueprintContainer-AT5Y7EXG.mjs → SequenceContainer-6XOYB2RN.mjs} +38 -37
  6. package/dist/lib/browser/SequenceContainer-6XOYB2RN.mjs.map +7 -0
  7. package/dist/lib/browser/{TemplateContainer-QQHVOTSI.mjs → TemplateContainer-6ZGGH5T4.mjs} +4 -4
  8. package/dist/lib/browser/TemplateContainer-6ZGGH5T4.mjs.map +7 -0
  9. package/dist/lib/browser/{ai-client-MK2ZZII2.mjs → ai-client-ML7OQWAO.mjs} +6 -6
  10. package/dist/lib/browser/ai-client-ML7OQWAO.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-builder-E4H5DCOJ.mjs → app-graph-builder-UJ5NHRGK.mjs} +31 -33
  12. package/dist/lib/browser/app-graph-builder-UJ5NHRGK.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-JQFUME3B.mjs → chunk-44HZKIAW.mjs} +5 -5
  14. package/dist/lib/browser/chunk-44HZKIAW.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-XOZ7YMO3.mjs → chunk-LKP65RPA.mjs} +2 -2
  16. package/dist/lib/browser/chunk-NTBGTFTV.mjs +15 -0
  17. package/dist/lib/browser/chunk-NTBGTFTV.mjs.map +7 -0
  18. package/dist/lib/browser/{chunk-BI6AHRNJ.mjs → chunk-OZL4OHTU.mjs} +15 -15
  19. package/dist/lib/browser/chunk-OZL4OHTU.mjs.map +7 -0
  20. package/dist/lib/browser/chunk-TQ3QW3HJ.mjs +2072 -0
  21. package/dist/lib/browser/chunk-TQ3QW3HJ.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-AAOKC2JN.mjs → chunk-TU7UUGWQ.mjs} +68 -73
  23. package/dist/lib/browser/chunk-TU7UUGWQ.mjs.map +7 -0
  24. package/dist/lib/browser/chunk-WPZ4UANI.mjs +16 -0
  25. package/dist/lib/browser/index.mjs +53 -68
  26. package/dist/lib/browser/index.mjs.map +3 -3
  27. package/dist/lib/browser/{intent-resolver-3UICTGPM.mjs → intent-resolver-LEAPB55Q.mjs} +10 -11
  28. package/dist/lib/browser/intent-resolver-LEAPB55Q.mjs.map +7 -0
  29. package/dist/lib/browser/meta.json +1 -1
  30. package/dist/lib/browser/{react-surface-LXCNUSZN.mjs → react-surface-TMF7JJA4.mjs} +34 -37
  31. package/dist/lib/browser/react-surface-TMF7JJA4.mjs.map +7 -0
  32. package/dist/lib/browser/{settings-XRHXVWGB.mjs → settings-N4HEXADL.mjs} +6 -6
  33. package/dist/lib/browser/settings-N4HEXADL.mjs.map +7 -0
  34. package/dist/lib/browser/types/index.mjs +4 -10
  35. package/dist/lib/node-esm/ChatContainer-VOLG7J6N.mjs +58 -0
  36. package/dist/lib/node-esm/ChatContainer-VOLG7J6N.mjs.map +7 -0
  37. package/dist/lib/node-esm/ChatDialog-B2XNUNRM.mjs +75 -0
  38. package/dist/lib/node-esm/ChatDialog-B2XNUNRM.mjs.map +7 -0
  39. package/dist/lib/node-esm/{BlueprintContainer-STOJAVML.mjs → SequenceContainer-WWG6IMN3.mjs} +38 -37
  40. package/dist/lib/node-esm/SequenceContainer-WWG6IMN3.mjs.map +7 -0
  41. package/dist/lib/node-esm/{TemplateContainer-SOEWY2ZN.mjs → TemplateContainer-6KRNEMVE.mjs} +4 -4
  42. package/dist/lib/node-esm/TemplateContainer-6KRNEMVE.mjs.map +7 -0
  43. package/dist/lib/node-esm/{ai-client-XGZBJ6BE.mjs → ai-client-2FQ434CT.mjs} +6 -6
  44. package/dist/lib/node-esm/ai-client-2FQ434CT.mjs.map +7 -0
  45. package/dist/lib/node-esm/{app-graph-builder-3SY5MBIK.mjs → app-graph-builder-MEQ5CYNI.mjs} +31 -33
  46. package/dist/lib/node-esm/app-graph-builder-MEQ5CYNI.mjs.map +7 -0
  47. package/dist/lib/node-esm/chunk-D3HTVK5D.mjs +2073 -0
  48. package/dist/lib/node-esm/chunk-D3HTVK5D.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-3UEZLJ2V.mjs → chunk-E6V2RUQ2.mjs} +5 -5
  50. package/dist/lib/node-esm/chunk-E6V2RUQ2.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-UCOFKNKN.mjs → chunk-HVMVHP4R.mjs} +15 -15
  52. package/dist/lib/node-esm/chunk-HVMVHP4R.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-HXKRKIN2.mjs +18 -0
  54. package/dist/lib/node-esm/{chunk-BB2TAT4P.mjs → chunk-KOC6ESG7.mjs} +2 -2
  55. package/dist/lib/node-esm/{chunk-OYN6HLXZ.mjs → chunk-VESVUAOS.mjs} +5 -5
  56. package/dist/lib/node-esm/chunk-VESVUAOS.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-J6UXXZGJ.mjs → chunk-YYUVTTVK.mjs} +68 -73
  58. package/dist/lib/node-esm/chunk-YYUVTTVK.mjs.map +7 -0
  59. package/dist/lib/node-esm/index.mjs +53 -68
  60. package/dist/lib/node-esm/index.mjs.map +3 -3
  61. package/dist/lib/node-esm/{intent-resolver-E6MXTYAU.mjs → intent-resolver-4ULF3F7U.mjs} +10 -11
  62. package/dist/lib/node-esm/intent-resolver-4ULF3F7U.mjs.map +7 -0
  63. package/dist/lib/node-esm/meta.json +1 -1
  64. package/dist/lib/node-esm/{react-surface-7HA5EDWY.mjs → react-surface-6XL6SWL2.mjs} +34 -37
  65. package/dist/lib/node-esm/react-surface-6XL6SWL2.mjs.map +7 -0
  66. package/dist/lib/node-esm/{settings-5IAY6BT4.mjs → settings-WQ76EG6O.mjs} +6 -6
  67. package/dist/lib/node-esm/settings-WQ76EG6O.mjs.map +7 -0
  68. package/dist/lib/node-esm/types/index.mjs +4 -10
  69. package/dist/types/src/capabilities/ai-client.d.ts.map +1 -1
  70. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  71. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  72. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts +2 -2
  73. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  74. package/dist/types/src/components/Chat/Chat.d.ts +42 -0
  75. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -0
  76. package/dist/types/src/components/Chat/index.d.ts +2 -0
  77. package/dist/types/src/components/Chat/index.d.ts.map +1 -0
  78. package/dist/types/src/components/ChatContainer.d.ts +5 -5
  79. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  80. package/dist/types/src/components/ChatDialog.d.ts +8 -0
  81. package/dist/types/src/components/ChatDialog.d.ts.map +1 -0
  82. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts +10 -0
  83. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -0
  84. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts +9 -0
  85. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts.map +1 -0
  86. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +11 -0
  87. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -0
  88. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts +7 -0
  89. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +1 -0
  90. package/dist/types/src/components/ChatPrompt/events.d.ts +17 -0
  91. package/dist/types/src/components/ChatPrompt/events.d.ts.map +1 -0
  92. package/dist/types/src/components/ChatPrompt/index.d.ts +6 -0
  93. package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -0
  94. package/dist/types/src/components/{Thread/ThreadMessage.d.ts → ChatThread/ChatMessage.d.ts} +6 -4
  95. package/dist/types/src/components/ChatThread/ChatMessage.d.ts.map +1 -0
  96. package/dist/types/src/components/ChatThread/ChatThread.d.ts +25 -0
  97. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -0
  98. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +232 -0
  99. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -0
  100. package/dist/types/src/components/ChatThread/ToolBlock.d.ts +18 -0
  101. package/dist/types/src/components/ChatThread/ToolBlock.d.ts.map +1 -0
  102. package/dist/types/src/components/ChatThread/index.d.ts +2 -0
  103. package/dist/types/src/components/ChatThread/index.d.ts.map +1 -0
  104. package/dist/types/src/components/ChatThread/reducer.d.ts.map +1 -0
  105. package/dist/types/src/components/SequenceContainer.d.ts +9 -0
  106. package/dist/types/src/components/SequenceContainer.d.ts.map +1 -0
  107. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts +13 -0
  108. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts.map +1 -0
  109. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts +8 -0
  110. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts.map +1 -0
  111. package/dist/types/src/components/SequenceEditor/index.d.ts +2 -0
  112. package/dist/types/src/components/SequenceEditor/index.d.ts.map +1 -0
  113. package/dist/types/src/components/TemplateContainer.d.ts +4 -3
  114. package/dist/types/src/components/TemplateContainer.d.ts.map +1 -1
  115. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +1 -1
  116. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  117. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  118. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +1 -1
  119. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  120. package/dist/types/src/components/Toolbox/Toolbox.d.ts +10 -3
  121. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  122. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +1 -1
  123. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  124. package/dist/types/src/components/index.d.ts +6 -12
  125. package/dist/types/src/components/index.d.ts.map +1 -1
  126. package/dist/types/src/events.d.ts.map +1 -1
  127. package/dist/types/src/hooks/{processor.d.ts → chat-processor.d.ts} +27 -17
  128. package/dist/types/src/hooks/chat-processor.d.ts.map +1 -0
  129. package/dist/types/src/hooks/chat-processor.test.d.ts +2 -0
  130. package/dist/types/src/hooks/chat-processor.test.d.ts.map +1 -0
  131. package/dist/types/src/hooks/index.d.ts +4 -4
  132. package/dist/types/src/hooks/index.d.ts.map +1 -1
  133. package/dist/types/src/hooks/useBlueprints.d.ts +4 -0
  134. package/dist/types/src/hooks/useBlueprints.d.ts.map +1 -0
  135. package/dist/types/src/hooks/useChatProcessor.d.ts +20 -6
  136. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  137. package/dist/types/src/hooks/useContextProvider.d.ts +6 -0
  138. package/dist/types/src/hooks/useContextProvider.d.ts.map +1 -1
  139. package/dist/types/src/hooks/useServiceContainer.d.ts +8 -0
  140. package/dist/types/src/hooks/useServiceContainer.d.ts.map +1 -0
  141. package/dist/types/src/queue-logger.d.ts +5 -5
  142. package/dist/types/src/queue-logger.d.ts.map +1 -1
  143. package/dist/types/src/stories/Chat.stories.d.ts +199 -0
  144. package/dist/types/src/stories/Chat.stories.d.ts.map +1 -0
  145. package/dist/types/src/testing/index.d.ts +1 -1
  146. package/dist/types/src/testing/index.d.ts.map +1 -1
  147. package/dist/types/src/testing/test-sequence.d.ts +8 -0
  148. package/dist/types/src/testing/test-sequence.d.ts.map +1 -0
  149. package/dist/types/src/translations.d.ts +61 -113
  150. package/dist/types/src/translations.d.ts.map +1 -1
  151. package/dist/types/src/types/index.d.ts +1 -2
  152. package/dist/types/src/types/index.d.ts.map +1 -1
  153. package/dist/types/src/types/schema.d.ts +71 -0
  154. package/dist/types/src/types/schema.d.ts.map +1 -0
  155. package/dist/types/src/types/service.d.ts +6 -6
  156. package/dist/types/src/types/service.d.ts.map +1 -1
  157. package/dist/types/tsconfig.tsbuildinfo +1 -1
  158. package/package.json +76 -74
  159. package/src/AssistantPlugin.tsx +13 -13
  160. package/src/capabilities/ai-client.ts +3 -6
  161. package/src/capabilities/app-graph-builder.ts +30 -26
  162. package/src/capabilities/capabilities.ts +2 -3
  163. package/src/capabilities/intent-resolver.ts +6 -6
  164. package/src/capabilities/react-surface.tsx +29 -29
  165. package/src/capabilities/settings.ts +3 -3
  166. package/src/components/AssistantSettings/AssistantSettings.tsx +4 -4
  167. package/src/components/Chat/Chat.tsx +348 -0
  168. package/src/{experimental/transcription → components/Chat}/index.ts +2 -0
  169. package/src/components/ChatContainer.tsx +24 -18
  170. package/src/components/ChatDialog.tsx +65 -0
  171. package/src/components/ChatPrompt/ChatActions.tsx +76 -0
  172. package/src/components/ChatPrompt/ChatOptionsMenu.tsx +52 -0
  173. package/src/components/ChatPrompt/ChatReferences.tsx +52 -0
  174. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +26 -0
  175. package/src/components/ChatPrompt/events.ts +12 -0
  176. package/src/components/ChatPrompt/index.ts +10 -0
  177. package/src/components/{Thread/ThreadMessage.tsx → ChatThread/ChatMessage.tsx} +35 -31
  178. package/src/components/ChatThread/ChatThread.stories.tsx +148 -0
  179. package/src/components/ChatThread/ChatThread.tsx +68 -0
  180. package/src/components/{Thread/ToolInvocations.tsx → ChatThread/ToolBlock.tsx} +13 -8
  181. package/src/components/{AmbientDialog → ChatThread}/index.ts +1 -1
  182. package/src/components/PromptSettings.tsx +2 -2
  183. package/src/components/{BlueprintContainer.tsx → SequenceContainer.tsx} +23 -32
  184. package/src/components/SequenceEditor/SequenceEditor.stories.tsx +32 -0
  185. package/src/components/{BlueprintEditor/BlueprintEditor.tsx → SequenceEditor/SequenceEditor.tsx} +7 -7
  186. package/src/components/SequenceEditor/index.ts +5 -0
  187. package/src/components/TemplateContainer.tsx +7 -5
  188. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +2 -2
  189. package/src/components/TemplateEditor/TemplateEditor.tsx +2 -2
  190. package/src/components/TemplateEditor/TemplateForm.stories.tsx +2 -2
  191. package/src/components/TemplateEditor/TemplateForm.tsx +2 -3
  192. package/src/components/Toolbox/Toolbox.stories.tsx +4 -5
  193. package/src/components/Toolbox/Toolbox.tsx +56 -3
  194. package/src/components/index.ts +4 -5
  195. package/src/events.ts +2 -2
  196. package/src/hooks/{processor.test.ts → chat-processor.test.ts} +1 -1
  197. package/src/hooks/{processor.ts → chat-processor.ts} +115 -72
  198. package/src/hooks/index.ts +4 -4
  199. package/src/hooks/useBlueprints.ts +31 -0
  200. package/src/hooks/useChatProcessor.tsx +69 -24
  201. package/src/hooks/useContextProvider.ts +8 -2
  202. package/src/hooks/useServiceContainer.ts +42 -0
  203. package/src/queue-logger.ts +6 -6
  204. package/src/stories/Chat.stories.tsx +269 -0
  205. package/src/testing/index.ts +1 -1
  206. package/src/testing/{test-blueprint.ts → test-sequence.ts} +4 -9
  207. package/src/tools/openapi.test.ts +11 -11
  208. package/src/translations.ts +24 -22
  209. package/src/types/index.ts +1 -2
  210. package/src/types/schema.ts +86 -0
  211. package/dist/lib/browser/AssistantDialog-MQOOR364.mjs +0 -47
  212. package/dist/lib/browser/AssistantDialog-MQOOR364.mjs.map +0 -7
  213. package/dist/lib/browser/BlueprintContainer-AT5Y7EXG.mjs.map +0 -7
  214. package/dist/lib/browser/ChatContainer-C2NEAS3A.mjs +0 -40
  215. package/dist/lib/browser/ChatContainer-C2NEAS3A.mjs.map +0 -7
  216. package/dist/lib/browser/TemplateContainer-QQHVOTSI.mjs.map +0 -7
  217. package/dist/lib/browser/ai-client-MK2ZZII2.mjs.map +0 -7
  218. package/dist/lib/browser/app-graph-builder-E4H5DCOJ.mjs.map +0 -7
  219. package/dist/lib/browser/chunk-AAOKC2JN.mjs.map +0 -7
  220. package/dist/lib/browser/chunk-BI6AHRNJ.mjs.map +0 -7
  221. package/dist/lib/browser/chunk-JO4W3MF7.mjs +0 -2101
  222. package/dist/lib/browser/chunk-JO4W3MF7.mjs.map +0 -7
  223. package/dist/lib/browser/chunk-JQFUME3B.mjs.map +0 -7
  224. package/dist/lib/browser/chunk-MEGMOFJB.mjs +0 -16
  225. package/dist/lib/browser/chunk-Q6UZ4F3H.mjs +0 -96
  226. package/dist/lib/browser/chunk-Q6UZ4F3H.mjs.map +0 -7
  227. package/dist/lib/browser/chunk-UE3IZ4PN.mjs +0 -15
  228. package/dist/lib/browser/chunk-UE3IZ4PN.mjs.map +0 -7
  229. package/dist/lib/browser/intent-resolver-3UICTGPM.mjs.map +0 -7
  230. package/dist/lib/browser/react-surface-LXCNUSZN.mjs.map +0 -7
  231. package/dist/lib/browser/settings-XRHXVWGB.mjs.map +0 -7
  232. package/dist/lib/node/AssistantDialog-AN4Z6YUV.cjs +0 -73
  233. package/dist/lib/node/AssistantDialog-AN4Z6YUV.cjs.map +0 -7
  234. package/dist/lib/node/BlueprintContainer-NOWLDYCZ.cjs +0 -344
  235. package/dist/lib/node/BlueprintContainer-NOWLDYCZ.cjs.map +0 -7
  236. package/dist/lib/node/ChatContainer-VKYBQHUB.cjs +0 -68
  237. package/dist/lib/node/ChatContainer-VKYBQHUB.cjs.map +0 -7
  238. package/dist/lib/node/TemplateContainer-JZF2DCCG.cjs +0 -58
  239. package/dist/lib/node/TemplateContainer-JZF2DCCG.cjs.map +0 -7
  240. package/dist/lib/node/ai-client-7HNSMUMT.cjs +0 -53
  241. package/dist/lib/node/ai-client-7HNSMUMT.cjs.map +0 -7
  242. package/dist/lib/node/app-graph-builder-PPR5B5KU.cjs +0 -235
  243. package/dist/lib/node/app-graph-builder-PPR5B5KU.cjs.map +0 -7
  244. package/dist/lib/node/chunk-4EEWTDQK.cjs +0 -117
  245. package/dist/lib/node/chunk-4EEWTDQK.cjs.map +0 -7
  246. package/dist/lib/node/chunk-FUAGEO7Q.cjs +0 -52
  247. package/dist/lib/node/chunk-FUAGEO7Q.cjs.map +0 -7
  248. package/dist/lib/node/chunk-HRNIUYVQ.cjs +0 -128
  249. package/dist/lib/node/chunk-HRNIUYVQ.cjs.map +0 -7
  250. package/dist/lib/node/chunk-IKZBMHSW.cjs +0 -184
  251. package/dist/lib/node/chunk-IKZBMHSW.cjs.map +0 -7
  252. package/dist/lib/node/chunk-LMDJEGZ2.cjs +0 -233
  253. package/dist/lib/node/chunk-LMDJEGZ2.cjs.map +0 -7
  254. package/dist/lib/node/chunk-NIDICM57.cjs +0 -2080
  255. package/dist/lib/node/chunk-NIDICM57.cjs.map +0 -7
  256. package/dist/lib/node/chunk-P74TWGMG.cjs +0 -44
  257. package/dist/lib/node/chunk-P74TWGMG.cjs.map +0 -7
  258. package/dist/lib/node/chunk-QGPWY6GW.cjs +0 -34
  259. package/dist/lib/node/chunk-QGPWY6GW.cjs.map +0 -7
  260. package/dist/lib/node/index.cjs +0 -289
  261. package/dist/lib/node/index.cjs.map +0 -7
  262. package/dist/lib/node/intent-resolver-QSWGTKON.cjs +0 -58
  263. package/dist/lib/node/intent-resolver-QSWGTKON.cjs.map +0 -7
  264. package/dist/lib/node/meta.json +0 -1
  265. package/dist/lib/node/react-surface-D3NBYRZ6.cjs +0 -172
  266. package/dist/lib/node/react-surface-D3NBYRZ6.cjs.map +0 -7
  267. package/dist/lib/node/settings-2JXLKYGE.cjs +0 -36
  268. package/dist/lib/node/settings-2JXLKYGE.cjs.map +0 -7
  269. package/dist/lib/node/types/index.cjs +0 -54
  270. package/dist/lib/node/types/index.cjs.map +0 -7
  271. package/dist/lib/node-esm/AssistantDialog-6WEMLUPU.mjs +0 -48
  272. package/dist/lib/node-esm/AssistantDialog-6WEMLUPU.mjs.map +0 -7
  273. package/dist/lib/node-esm/BlueprintContainer-STOJAVML.mjs.map +0 -7
  274. package/dist/lib/node-esm/ChatContainer-3MVBTUJN.mjs +0 -41
  275. package/dist/lib/node-esm/ChatContainer-3MVBTUJN.mjs.map +0 -7
  276. package/dist/lib/node-esm/TemplateContainer-SOEWY2ZN.mjs.map +0 -7
  277. package/dist/lib/node-esm/ai-client-XGZBJ6BE.mjs.map +0 -7
  278. package/dist/lib/node-esm/app-graph-builder-3SY5MBIK.mjs.map +0 -7
  279. package/dist/lib/node-esm/chunk-34EX6E5Q.mjs +0 -18
  280. package/dist/lib/node-esm/chunk-3UEZLJ2V.mjs.map +0 -7
  281. package/dist/lib/node-esm/chunk-CDAILLCU.mjs +0 -98
  282. package/dist/lib/node-esm/chunk-CDAILLCU.mjs.map +0 -7
  283. package/dist/lib/node-esm/chunk-J6UXXZGJ.mjs.map +0 -7
  284. package/dist/lib/node-esm/chunk-OD574YIU.mjs +0 -2102
  285. package/dist/lib/node-esm/chunk-OD574YIU.mjs.map +0 -7
  286. package/dist/lib/node-esm/chunk-OYN6HLXZ.mjs.map +0 -7
  287. package/dist/lib/node-esm/chunk-UCOFKNKN.mjs.map +0 -7
  288. package/dist/lib/node-esm/intent-resolver-E6MXTYAU.mjs.map +0 -7
  289. package/dist/lib/node-esm/react-surface-7HA5EDWY.mjs.map +0 -7
  290. package/dist/lib/node-esm/settings-5IAY6BT4.mjs.map +0 -7
  291. package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts +0 -10
  292. package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts.map +0 -1
  293. package/dist/types/src/components/AmbientDialog/AmbientDialog.stories.d.ts +0 -8
  294. package/dist/types/src/components/AmbientDialog/AmbientDialog.stories.d.ts.map +0 -1
  295. package/dist/types/src/components/AmbientDialog/index.d.ts +0 -2
  296. package/dist/types/src/components/AmbientDialog/index.d.ts.map +0 -1
  297. package/dist/types/src/components/AssistantDialog.d.ts +0 -7
  298. package/dist/types/src/components/AssistantDialog.d.ts.map +0 -1
  299. package/dist/types/src/components/BlueprintContainer.d.ts +0 -9
  300. package/dist/types/src/components/BlueprintContainer.d.ts.map +0 -1
  301. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts +0 -13
  302. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts.map +0 -1
  303. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.stories.d.ts +0 -8
  304. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.stories.d.ts.map +0 -1
  305. package/dist/types/src/components/BlueprintEditor/index.d.ts +0 -2
  306. package/dist/types/src/components/BlueprintEditor/index.d.ts.map +0 -1
  307. package/dist/types/src/components/Prompt/Prompt.d.ts +0 -23
  308. package/dist/types/src/components/Prompt/Prompt.d.ts.map +0 -1
  309. package/dist/types/src/components/Prompt/Prompt.stories.d.ts +0 -13
  310. package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +0 -1
  311. package/dist/types/src/components/Prompt/PromptBar.d.ts +0 -16
  312. package/dist/types/src/components/Prompt/PromptBar.d.ts.map +0 -1
  313. package/dist/types/src/components/Prompt/PromptBar.stories.d.ts +0 -9
  314. package/dist/types/src/components/Prompt/PromptBar.stories.d.ts.map +0 -1
  315. package/dist/types/src/components/Prompt/autocomplete.d.ts +0 -25
  316. package/dist/types/src/components/Prompt/autocomplete.d.ts.map +0 -1
  317. package/dist/types/src/components/Prompt/index.d.ts +0 -3
  318. package/dist/types/src/components/Prompt/index.d.ts.map +0 -1
  319. package/dist/types/src/components/Prompt/references.d.ts +0 -30
  320. package/dist/types/src/components/Prompt/references.d.ts.map +0 -1
  321. package/dist/types/src/components/Thread/Thread.d.ts +0 -28
  322. package/dist/types/src/components/Thread/Thread.d.ts.map +0 -1
  323. package/dist/types/src/components/Thread/Thread.stories.d.ts +0 -11
  324. package/dist/types/src/components/Thread/Thread.stories.d.ts.map +0 -1
  325. package/dist/types/src/components/Thread/ThreadContainer.d.ts +0 -13
  326. package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +0 -1
  327. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts +0 -16
  328. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +0 -1
  329. package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +0 -1
  330. package/dist/types/src/components/Thread/ToolInvocations.d.ts +0 -13
  331. package/dist/types/src/components/Thread/ToolInvocations.d.ts.map +0 -1
  332. package/dist/types/src/components/Thread/index.d.ts +0 -3
  333. package/dist/types/src/components/Thread/index.d.ts.map +0 -1
  334. package/dist/types/src/components/Thread/reducer.d.ts.map +0 -1
  335. package/dist/types/src/experimental/transcription/index.d.ts +0 -1
  336. package/dist/types/src/experimental/transcription/index.d.ts.map +0 -1
  337. package/dist/types/src/hooks/processor.d.ts.map +0 -1
  338. package/dist/types/src/hooks/processor.test.d.ts +0 -2
  339. package/dist/types/src/hooks/processor.test.d.ts.map +0 -1
  340. package/dist/types/src/hooks/useMessageQueue.d.ts +0 -42
  341. package/dist/types/src/hooks/useMessageQueue.d.ts.map +0 -1
  342. package/dist/types/src/hooks/useServices.d.ts +0 -7
  343. package/dist/types/src/hooks/useServices.d.ts.map +0 -1
  344. package/dist/types/src/stories/Prompt.stories.d.ts +0 -8
  345. package/dist/types/src/stories/Prompt.stories.d.ts.map +0 -1
  346. package/dist/types/src/stories/Query.stories.d.ts +0 -19
  347. package/dist/types/src/stories/Query.stories.d.ts.map +0 -1
  348. package/dist/types/src/stories/Research.stories.d.ts +0 -15
  349. package/dist/types/src/stories/Research.stories.d.ts.map +0 -1
  350. package/dist/types/src/stories/test-data.d.ts +0 -3
  351. package/dist/types/src/stories/test-data.d.ts.map +0 -1
  352. package/dist/types/src/stories/testing.d.ts +0 -12
  353. package/dist/types/src/stories/testing.d.ts.map +0 -1
  354. package/dist/types/src/testing/test-blueprint.d.ts +0 -8
  355. package/dist/types/src/testing/test-blueprint.d.ts.map +0 -1
  356. package/dist/types/src/types/chat.d.ts +0 -23
  357. package/dist/types/src/types/chat.d.ts.map +0 -1
  358. package/dist/types/src/types/types.d.ts +0 -50
  359. package/dist/types/src/types/types.d.ts.map +0 -1
  360. package/src/components/AmbientDialog/AmbientDialog.stories.tsx +0 -84
  361. package/src/components/AmbientDialog/AmbientDialog.tsx +0 -117
  362. package/src/components/AssistantDialog.tsx +0 -37
  363. package/src/components/BlueprintEditor/BlueprintEditor.stories.tsx +0 -32
  364. package/src/components/BlueprintEditor/index.ts +0 -5
  365. package/src/components/Prompt/Prompt.stories.tsx +0 -121
  366. package/src/components/Prompt/Prompt.tsx +0 -124
  367. package/src/components/Prompt/PromptBar.stories.tsx +0 -69
  368. package/src/components/Prompt/PromptBar.tsx +0 -105
  369. package/src/components/Prompt/autocomplete.ts +0 -218
  370. package/src/components/Prompt/index.ts +0 -6
  371. package/src/components/Prompt/references.ts +0 -180
  372. package/src/components/Thread/Thread.stories.tsx +0 -201
  373. package/src/components/Thread/Thread.tsx +0 -118
  374. package/src/components/Thread/ThreadContainer.stories.tsx +0 -283
  375. package/src/components/Thread/ThreadContainer.tsx +0 -105
  376. package/src/components/Thread/index.ts +0 -6
  377. package/src/hooks/useMessageQueue.ts +0 -22
  378. package/src/hooks/useServices.ts +0 -28
  379. package/src/stories/Prompt.stories.tsx +0 -60
  380. package/src/stories/Query.stories.tsx +0 -514
  381. package/src/stories/Research.stories.tsx +0 -482
  382. package/src/stories/test-data.ts +0 -128
  383. package/src/stories/testing.ts +0 -60
  384. package/src/types/chat.ts +0 -32
  385. package/src/types/types.ts +0 -48
  386. /package/dist/lib/browser/{chunk-XOZ7YMO3.mjs.map → chunk-LKP65RPA.mjs.map} +0 -0
  387. /package/dist/lib/browser/{chunk-MEGMOFJB.mjs.map → chunk-WPZ4UANI.mjs.map} +0 -0
  388. /package/dist/lib/node-esm/{chunk-34EX6E5Q.mjs.map → chunk-HXKRKIN2.mjs.map} +0 -0
  389. /package/dist/lib/node-esm/{chunk-BB2TAT4P.mjs.map → chunk-KOC6ESG7.mjs.map} +0 -0
  390. /package/dist/types/src/components/{Thread → ChatThread}/reducer.d.ts +0 -0
  391. /package/src/components/{Thread → ChatThread}/reducer.ts +0 -0
@@ -7,7 +7,6 @@ import { type Signal, batch, computed, signal } from '@preact/signals-core';
7
7
  import {
8
8
  DEFAULT_EDGE_MODEL,
9
9
  type ExecutableTool,
10
- type AiServiceClient,
11
10
  type GenerateRequest,
12
11
  type Message,
13
12
  type MessageContentBlock,
@@ -15,10 +14,16 @@ import {
15
14
  } from '@dxos/ai';
16
15
  import { type PromiseIntentDispatcher } from '@dxos/app-framework';
17
16
  import { type ArtifactDefinition } from '@dxos/artifact';
18
- import { AISession, type ArtifactDiffResolver } from '@dxos/assistant';
19
- import { invariant } from '@dxos/invariant';
17
+ import {
18
+ type AISession,
19
+ type ArtifactDiffResolver,
20
+ type BlueprintRegistry,
21
+ type ContextBinder,
22
+ type Conversation,
23
+ } from '@dxos/assistant';
24
+ import { Context } from '@dxos/context';
20
25
  import { log } from '@dxos/log';
21
- import { Filter, getVersion, type Space } from '@dxos/react-client/echo';
26
+ import { Filter, type Space, getVersion } from '@dxos/react-client/echo';
22
27
 
23
28
  // TODO(burdon): Factor out.
24
29
  declare global {
@@ -29,11 +34,16 @@ declare global {
29
34
  }
30
35
 
31
36
  type RequestOptions = {
32
- history?: Message[];
33
- onComplete?: (messages: Message[]) => void;
37
+ // Empty for now.
34
38
  };
35
39
 
36
- export type ChatProcessorOptions = Pick<GenerateRequest, 'model' | 'systemPrompt'>;
40
+ export type ChatProcessorOptions = {
41
+ // TODO(burdon): Change to AiToolkit.
42
+ tools?: readonly ExecutableTool[];
43
+ artifacts?: readonly ArtifactDefinition[];
44
+ extensions?: ToolContextExtensions;
45
+ blueprintRegistry?: BlueprintRegistry;
46
+ } & Pick<GenerateRequest, 'model' | 'systemPrompt'>;
37
47
 
38
48
  const defaultOptions: ChatProcessorOptions = {
39
49
  model: DEFAULT_EDGE_MODEL,
@@ -46,16 +56,20 @@ const defaultOptions: ChatProcessorOptions = {
46
56
  * Executes tools based on AI responses.
47
57
  * Supports cancellation of in-progress requests.
48
58
  */
59
+ // TODO(burdon): Rename ChatContext?
49
60
  export class ChatProcessor {
50
- /** Pending messages (incl. the current user request). */
61
+ /**
62
+ * Pending messages (incl. the current user request).
63
+ * @reactive
64
+ */
51
65
  private readonly _pending: Signal<Message[]> = signal([]);
52
66
 
53
- /** Current streaming block (from the AI service). */
67
+ /**
68
+ * Current streaming block (from the AI service).
69
+ * @reactive
70
+ */
54
71
  private readonly _block: Signal<MessageContentBlock | undefined> = signal(undefined);
55
72
 
56
- /** Current streaming response. */
57
- private _session: AISession | undefined;
58
-
59
73
  /**
60
74
  * Streaming state.
61
75
  * @reactive
@@ -74,10 +88,8 @@ export class ChatProcessor {
74
88
  */
75
89
  public readonly messages: Signal<Message[]> = computed(() => {
76
90
  const messages = [...this._pending.value];
77
- if (this._block.value) {
78
- const current = messages.pop();
79
- invariant(current);
80
- const { content, ...rest } = current;
91
+ if (this._block.value && messages.length) {
92
+ const { content, ...rest } = messages.pop()!;
81
93
  const message = { ...rest, content: [...content, this._block.value] };
82
94
  messages.push(message);
83
95
  }
@@ -85,20 +97,37 @@ export class ChatProcessor {
85
97
  return messages;
86
98
  });
87
99
 
100
+ // TODO(burdon): Replace with Toolkit.
101
+ private _tools?: ExecutableTool[];
102
+
103
+ /** Current session. */
104
+ private _session: AISession | undefined = undefined;
105
+
88
106
  constructor(
89
- private readonly _ai: AiServiceClient,
90
- private _tools?: ExecutableTool[],
91
- private _artifacts?: ArtifactDefinition[],
92
- private readonly _extensions?: ToolContextExtensions,
107
+ private readonly _conversation: Conversation,
93
108
  private readonly _options: ChatProcessorOptions = defaultOptions,
94
- ) {}
109
+ ) {
110
+ this._tools = [...(_options.tools ?? [])];
111
+ }
112
+
113
+ get conversation() {
114
+ return this._conversation;
115
+ }
116
+
117
+ get context(): ContextBinder {
118
+ return this._conversation.context;
119
+ }
120
+
121
+ get blueprintRegistry() {
122
+ return this._options.blueprintRegistry;
123
+ }
95
124
 
96
125
  get tools() {
97
126
  return this._tools;
98
127
  }
99
128
 
100
129
  /**
101
- * Update tools.
130
+ * @deprecated Replace with blueprints
102
131
  */
103
132
  setTools(tools: ExecutableTool[]): void {
104
133
  this._tools = tools;
@@ -108,64 +137,78 @@ export class ChatProcessor {
108
137
  * Make GPT request.
109
138
  */
110
139
  async request(message: string, options: RequestOptions = {}): Promise<Message[]> {
111
- this._session = new AISession({ operationModel: 'configured' });
140
+ await using ctx = Context.default(); // Auto-disposed at the end of this block.
112
141
 
113
- // Message complete.
114
- this._session.message.on((message) => {
115
- batch(() => {
116
- this._pending.value = [...this._pending.value, message];
117
- this._block.value = undefined;
142
+ this._conversation.onBegin.on(ctx, (session) => {
143
+ log.info('onBegin', { session, isDisposed: ctx.disposed });
144
+
145
+ this._session = session;
146
+ ctx.onDispose(() => {
147
+ log.info('onDispose', { session, isDisposed: ctx.disposed });
148
+ if (this._session === session) {
149
+ this._session = undefined;
150
+ }
118
151
  });
119
- });
120
152
 
121
- // Streaming update (happens before message complete).
122
- this._session.update.on((block) => {
123
- batch(() => {
124
- this._block.value = block;
153
+ // Message complete.
154
+ session.message.on((message) => {
155
+ batch(() => {
156
+ this._pending.value = [...this._pending.value, message];
157
+ this._block.value = undefined;
158
+ });
125
159
  });
126
- });
127
160
 
128
- this._session.userMessage.on((message) => {
129
- this._pending.value = [...this._pending.value, message];
130
- });
161
+ // Streaming update (happens before message complete).
162
+ session.update.on((block) => {
163
+ batch(() => {
164
+ this._block.value = block;
165
+ });
166
+ });
131
167
 
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
- }
168
+ session.userMessage.on((message) => {
169
+ log.info('userMessage', { message });
170
+ this._pending.value = [...this._pending.value, message];
171
+ });
138
172
 
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
- }
173
+ session.toolStatusReport.on(({ message, status }) => {
174
+ const msg = this._pending.peek().find((m) => m.id === message.id);
175
+ const toolUse = msg?.content.find((block) => block.type === 'tool_use');
176
+ if (!toolUse) {
177
+ return;
178
+ }
179
+
180
+ const block = msg?.content.find(
181
+ (block): block is ToolUseContentBlock => block.type === 'tool_use' && block.id === toolUse.id,
182
+ );
183
+ if (block) {
184
+ this._pending.value = this._pending.value.map((m) => {
185
+ if (m.id === message.id) {
186
+ return {
187
+ ...m,
188
+ content: m.content.map((block) =>
189
+ block.type === 'tool_use' && block.id === toolUse.id ? { ...block, currentStatus: status } : block,
190
+ ),
191
+ };
192
+ }
193
+
194
+ return m;
195
+ });
196
+ } else {
197
+ log.warn('no block for status report');
198
+ }
199
+ });
157
200
  });
158
201
 
159
202
  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) ?? [],
203
+ const messages = await this._conversation.run({
204
+ artifacts: [...(this._options.artifacts ?? [])],
205
+ requiredArtifactIds: this._options.artifacts?.map((artifact) => artifact.id) ?? [],
206
+
207
+ // TODO(dmaretskyi): Migrate to Effect's AiToolkit.
165
208
  tools: this._tools ?? [],
166
- prompt: message,
167
209
  systemPrompt: this._options.systemPrompt,
168
- extensions: this._extensions,
210
+ prompt: message,
211
+ extensions: this._options.extensions,
169
212
  artifactDiffResolver: this._artifactDiffResolver,
170
213
  generationOptions: {
171
214
  model: this._options.model,
@@ -173,7 +216,6 @@ export class ChatProcessor {
173
216
  });
174
217
 
175
218
  log('completed', { messages });
176
- options.onComplete?.(this._pending.value);
177
219
  } catch (err) {
178
220
  log.catch(err);
179
221
  if (err instanceof Error && err.message.includes('Overloaded')) {
@@ -181,8 +223,6 @@ export class ChatProcessor {
181
223
  } else {
182
224
  this.error.value = new Error('AI service error', { cause: err });
183
225
  }
184
- } finally {
185
- this._session = undefined;
186
226
  }
187
227
 
188
228
  return this._reset();
@@ -194,6 +234,8 @@ export class ChatProcessor {
194
234
  */
195
235
  async cancel(): Promise<Message[]> {
196
236
  log.info('cancelling...');
237
+
238
+ // TODO(dmaretskyi): Conversation should handle aborting.
197
239
  this._session?.abort();
198
240
  return this._reset();
199
241
  }
@@ -209,10 +251,11 @@ export class ChatProcessor {
209
251
  }
210
252
 
211
253
  private _artifactDiffResolver: ArtifactDiffResolver = async (artifacts) => {
212
- const space = this._extensions?.space;
254
+ const space = this._options.extensions?.space;
213
255
  if (!space) {
214
256
  return new Map();
215
257
  }
258
+
216
259
  const versions = new Map();
217
260
  await Promise.all(
218
261
  artifacts.map(async (artifact) => {
@@ -2,10 +2,10 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export * from './processor';
5
+ export * from './chat-processor';
6
6
 
7
+ export * from './useBlueprints';
7
8
  export * from './useChatProcessor';
8
- export * from './useMessageQueue';
9
- export * from './useServices';
10
- export * from './useTextInputEvents';
11
9
  export * from './useContextProvider';
10
+ export * from './useServiceContainer';
11
+ export * from './useTextInputEvents';
@@ -0,0 +1,31 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { useCallback, useState } from 'react';
6
+
7
+ import { type Blueprint, type ContextBinder } from '@dxos/assistant';
8
+ import { Ref } from '@dxos/echo';
9
+ import { log } from '@dxos/log';
10
+ import { useTimeout } from '@dxos/react-ui';
11
+ import { isNonNullable } from '@dxos/util';
12
+
13
+ export type UpdateCallback = (key: string, active: boolean) => void;
14
+
15
+ export const useBlueprints = (context: ContextBinder): [Blueprint[], UpdateCallback] => {
16
+ const [blueprints, setBlueprints] = useState<Blueprint[]>([]);
17
+ useTimeout(
18
+ async () => {
19
+ const blueprints = (await Ref.Array.loadAll(context.blueprints.value ?? [])).filter(isNonNullable);
20
+ setBlueprints(blueprints);
21
+ },
22
+ 0,
23
+ [context],
24
+ );
25
+
26
+ const handleUpdate = useCallback<UpdateCallback>((key: string, active: boolean) => {
27
+ log.info('update', { key, active });
28
+ }, []);
29
+
30
+ return [blueprints, handleUpdate] as const;
31
+ };
@@ -5,42 +5,58 @@
5
5
  import { useEffect, useMemo, useState } from 'react';
6
6
 
7
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';
8
+ import { Capabilities, useCapabilities, useIntentDispatcher } from '@dxos/app-framework';
9
+ import { type ArtifactDefinition, type AssociatedArtifact, createSystemPrompt } from '@dxos/artifact';
10
+ import { type BlueprintRegistry, Conversation } from '@dxos/assistant';
11
+ import { FunctionType, type ServiceContainer } from '@dxos/functions';
11
12
  import { log } from '@dxos/log';
12
13
  import { useConfig } from '@dxos/react-client';
13
- import { Filter, fullyQualifiedId, type Space, useQuery } from '@dxos/react-client/echo';
14
+ import { Filter, fullyQualifiedId, type Queue, type Space, useQuery } from '@dxos/react-client/echo';
14
15
  import { isNonNullable } from '@dxos/util';
15
16
 
16
- import { AssistantCapabilities } from '../capabilities';
17
17
  import { ChatProcessor, type ChatProcessorOptions } from '../hooks';
18
18
  import { convertFunctionToTool, createToolsFromService } from '../tools';
19
- import { type AIChatType, type AssistantSettingsProps, ServiceType } from '../types';
19
+ import { type Assistant, ServiceType } from '../types';
20
20
 
21
21
  type UseChatProcessorProps = {
22
- chat?: AIChatType;
23
- space?: Space;
24
- settings?: AssistantSettingsProps;
22
+ /** @deprecated Why is this required? */
25
23
  part?: 'deck' | 'dialog';
26
- associatedArtifact?: AssociatedArtifact;
24
+ space?: Space;
25
+ chat?: Assistant.Chat;
26
+ // TODO(burdon): Reconcile all of below (overlapping concepts). Figure out how to inject vie effect layers.
27
+ serviceContainer: ServiceContainer;
28
+ blueprintRegistry?: BlueprintRegistry;
29
+ settings?: Assistant.Settings;
30
+ /** @deprecated */
31
+ instructions?: string;
32
+ /** @deprecated */
33
+ artifact?: AssociatedArtifact;
34
+ /** @deprecated */
35
+ noPluginArtifacts?: boolean;
27
36
  };
28
37
 
29
38
  /**
30
39
  * Configure and create ChatProcessor.
31
40
  */
32
41
  export const useChatProcessor = ({
33
- chat,
42
+ part = 'deck',
34
43
  space,
44
+ chat,
45
+ serviceContainer,
46
+ blueprintRegistry,
35
47
  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);
48
+ instructions,
49
+ artifact,
50
+ noPluginArtifacts,
51
+ }: UseChatProcessorProps): ChatProcessor | undefined => {
43
52
  const { dispatchPromise: dispatch } = useIntentDispatcher();
53
+ const globalTools = useCapabilities(Capabilities.Tools);
54
+
55
+ // TODO(burdon): Spec artifacts.
56
+ let artifacts: readonly ArtifactDefinition[] = useCapabilities(Capabilities.ArtifactDefinition);
57
+ if (noPluginArtifacts) {
58
+ artifacts = Stable.array;
59
+ }
44
60
 
45
61
  // Services.
46
62
  const services = useQuery(space, Filter.type(ServiceType));
@@ -66,7 +82,7 @@ export const useChatProcessor = ({
66
82
  .map((fn) => convertFunctionToTool(fn, config.values.runtime?.services?.edge?.url ?? '', space?.id))
67
83
  .filter(isNonNullable),
68
84
  ];
69
- const extensions = { space, dispatch, pivotId: chatId, part };
85
+ const extensions = { part, space, dispatch, pivotId: chatId };
70
86
  return [tools, extensions];
71
87
  }, [dispatch, globalTools, space, chatId, serviceTools, functions]);
72
88
 
@@ -74,10 +90,11 @@ export const useChatProcessor = ({
74
90
  const systemPrompt = useMemo(
75
91
  () =>
76
92
  createSystemPrompt({
77
- artifacts: artifactDefinitions.map((definition) => `${definition.name}\n${definition.instructions}`),
78
- associatedArtifact,
93
+ artifacts: artifacts.map((definition) => `${definition.name}\n${definition.instructions}`),
94
+ artifact,
95
+ instructions,
79
96
  }),
80
- [artifactDefinitions, associatedArtifact],
97
+ [artifacts, artifact, instructions],
81
98
  );
82
99
 
83
100
  // TODO(burdon): Remove default (let backend decide if not specified).
@@ -86,12 +103,40 @@ export const useChatProcessor = ({
86
103
  ? ((settings?.ollamaModel ?? DEFAULT_OLLAMA_MODEL) as ChatProcessorOptions['model'])
87
104
  : ((settings?.edgeModel ?? DEFAULT_EDGE_MODEL) as ChatProcessorOptions['model']);
88
105
 
106
+ const conversation = useMemo(() => {
107
+ if (!chat?.queue.target) {
108
+ return;
109
+ }
110
+
111
+ return new Conversation({
112
+ serviceContainer,
113
+ queue: chat.queue.target as Queue<any>,
114
+ });
115
+ }, [chat?.queue.target, serviceContainer]);
116
+
89
117
  // Create processor.
90
118
  // TODO(burdon): Updated on each query update above; should just update current processor.
91
119
  const processor = useMemo(() => {
120
+ if (!conversation) {
121
+ return undefined;
122
+ }
123
+
92
124
  log('creating processor...', { settings });
93
- return new ChatProcessor(aiClient.value, tools, artifactDefinitions, extensions, { model, systemPrompt });
94
- }, [aiClient.value, tools, artifactDefinitions, extensions, model, systemPrompt]);
125
+ return new ChatProcessor(conversation, {
126
+ tools,
127
+ extensions,
128
+ blueprintRegistry,
129
+ artifacts,
130
+ systemPrompt,
131
+ model,
132
+ });
133
+ }, [conversation, tools, blueprintRegistry, artifacts, extensions, systemPrompt, model]);
95
134
 
96
135
  return processor;
97
136
  };
137
+
138
+ // TODO(dmaretskyi): Extract.
139
+ export const Stable = Object.freeze({
140
+ array: [] as readonly never[],
141
+ object: {} as {},
142
+ });
@@ -8,13 +8,17 @@ import { Capabilities, useCapabilities } from '@dxos/app-framework';
8
8
  import { type Space } from '@dxos/client/echo';
9
9
  import { Filter, Obj, type Type } from '@dxos/echo';
10
10
 
11
+ /**
12
+ * @deprecated
13
+ */
11
14
  export type ContextProvider = {
12
15
  query: (params: { query: string }) => Promise<Array<{ uri: string; label: string }>>;
13
16
  resolveMetadata: (params: { uri: string }) => Promise<{ uri: string; label: string }>;
14
17
  };
15
18
 
16
- const stringMatch = (query: string, label: string) => label.toLowerCase().startsWith(query.toLowerCase());
17
-
19
+ /**
20
+ * @deprecated
21
+ */
18
22
  export const useContextProvider = (space?: Space): ContextProvider | undefined => {
19
23
  const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);
20
24
 
@@ -53,3 +57,5 @@ export const useContextProvider = (space?: Space): ContextProvider | undefined =
53
57
  };
54
58
  }, [space, artifactDefinitions]);
55
59
  };
60
+
61
+ const stringMatch = (query: string, label: string) => label.toLowerCase().startsWith(query.toLowerCase());
@@ -0,0 +1,42 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { useEffect, useMemo, useState } from 'react';
6
+
7
+ import { ToolRegistry } from '@dxos/ai';
8
+ import { Capabilities, useCapabilities, useCapability } from '@dxos/app-framework';
9
+ import { AiService, DatabaseService, QueueService, ServiceContainer, ToolResolverService } from '@dxos/functions';
10
+ import { type Space } from '@dxos/react-client/echo';
11
+
12
+ import { AssistantCapabilities } from '../capabilities';
13
+
14
+ interface UseServiceContainerProps {
15
+ space?: Space;
16
+ }
17
+
18
+ export const useServiceContainer = ({ space }: UseServiceContainerProps) => {
19
+ const aiClient = useCapability(AssistantCapabilities.AiClient);
20
+ const tools = useCapabilities(Capabilities.Tools).flat();
21
+
22
+ const [toolRegistry] = useState(() => new ToolRegistry([]));
23
+ useEffect(() => {
24
+ for (const tool of tools) {
25
+ if (!toolRegistry.has(tool)) {
26
+ toolRegistry.register(tool);
27
+ }
28
+ }
29
+ }, [toolRegistry, JSON.stringify(tools.map((tool) => tool.id))]);
30
+
31
+ return useMemo(
32
+ () =>
33
+ new ServiceContainer().setServices({
34
+ ai: AiService.make(aiClient.value),
35
+ database: space ? DatabaseService.make(space.db) : undefined,
36
+ queues: space ? QueueService.make(space.queues, undefined) : undefined,
37
+ // eventLogger: consoleLogger,
38
+ toolResolver: ToolResolverService.make(toolRegistry),
39
+ }),
40
+ [space, aiClient],
41
+ );
42
+ };
@@ -2,8 +2,8 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type Blueprint, type BlueprintEvent, type BlueprintLogger } from '@dxos/assistant';
6
5
  import { getSpace, Ref, type Queue, type Space } from '@dxos/client/echo';
6
+ import { type Sequence, type SequenceEvent, type SequenceLogger } from '@dxos/conductor';
7
7
  import { DXN, Key, Obj } from '@dxos/echo';
8
8
  import {
9
9
  InvocationOutcome,
@@ -16,12 +16,12 @@ import {
16
16
  import { invariant } from '@dxos/invariant';
17
17
  import { QueueSubspaceTags } from '@dxos/keys';
18
18
 
19
- export class QueueLogger implements BlueprintLogger {
19
+ export class QueueLogger implements SequenceLogger {
20
20
  private _space: Space;
21
21
  private _invocationTraceQueue: Queue<InvocationTraceEvent>;
22
22
 
23
- constructor(private readonly blueprint: Blueprint) {
24
- const space = getSpace(blueprint);
23
+ constructor(private readonly sequence: Sequence) {
24
+ const space = getSpace(sequence);
25
25
  invariant(space, 'Space not found');
26
26
  this._space = space;
27
27
  let dxn = this._space.properties.invocationTraceQueue?.dxn;
@@ -32,7 +32,7 @@ export class QueueLogger implements BlueprintLogger {
32
32
  this._invocationTraceQueue = this._space.queues.get(dxn);
33
33
  }
34
34
 
35
- log(event: BlueprintEvent) {
35
+ log(event: SequenceEvent) {
36
36
  switch (event.type) {
37
37
  case 'begin':
38
38
  void this._invocationTraceQueue.append([
@@ -42,7 +42,7 @@ export class QueueLogger implements BlueprintLogger {
42
42
  timestampMs: Date.now(),
43
43
  input: {},
44
44
  invocationTraceQueue: Ref.fromDXN(this._getTraceQueueDxn(event.invocationId)),
45
- invocationTarget: Ref.make(this.blueprint),
45
+ invocationTarget: Ref.make(this.sequence),
46
46
  }),
47
47
  ]);
48
48
  break;