@dxos/plugin-assistant 0.8.4-main.5ea62a8 → 0.8.4-main.72ec0f3

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 (471) hide show
  1. package/dist/lib/browser/BlueprintArticle-IMCR3642.mjs +36 -0
  2. package/dist/lib/browser/BlueprintArticle-IMCR3642.mjs.map +7 -0
  3. package/dist/lib/browser/ChatCompanion-JYD2RIBJ.mjs +158 -0
  4. package/dist/lib/browser/ChatCompanion-JYD2RIBJ.mjs.map +7 -0
  5. package/dist/lib/browser/{ChatContainer-YBJBIVUZ.mjs → ChatContainer-XCPBWYIR.mjs} +22 -20
  6. package/dist/lib/browser/ChatContainer-XCPBWYIR.mjs.map +7 -0
  7. package/dist/lib/browser/{ChatDialog-MTPJLEHM.mjs → ChatDialog-DT7KFCRL.mjs} +12 -11
  8. package/dist/lib/browser/ChatDialog-DT7KFCRL.mjs.map +7 -0
  9. package/dist/lib/browser/PromptArticle-45QX25Y5.mjs +59 -0
  10. package/dist/lib/browser/PromptArticle-45QX25Y5.mjs.map +7 -0
  11. package/dist/lib/browser/ai-service-ERTZBTP3.mjs +19 -0
  12. package/dist/lib/browser/ai-service-ERTZBTP3.mjs.map +7 -0
  13. package/dist/lib/browser/{app-graph-builder-7AAWTWGA.mjs → app-graph-builder-VZEXMDTY.mjs} +67 -21
  14. package/dist/lib/browser/app-graph-builder-VZEXMDTY.mjs.map +7 -0
  15. package/dist/lib/browser/{blueprint-definition-CRZPIA5A.mjs → blueprint-definition-5FT5JGPY.mjs} +4 -4
  16. package/dist/lib/browser/chunk-2BOE3OTW.mjs +262 -0
  17. package/dist/lib/browser/chunk-2BOE3OTW.mjs.map +7 -0
  18. package/dist/lib/browser/{chunk-SMIVXXAI.mjs → chunk-BNTPFZ7O.mjs} +51 -24
  19. package/dist/lib/browser/chunk-BNTPFZ7O.mjs.map +7 -0
  20. package/dist/lib/browser/chunk-FJQ4ZRYJ.mjs +335 -0
  21. package/dist/lib/browser/chunk-FJQ4ZRYJ.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-OYFQS7JM.mjs → chunk-IXIIS4QA.mjs} +59 -40
  23. package/dist/lib/browser/chunk-IXIIS4QA.mjs.map +7 -0
  24. package/dist/lib/browser/{chunk-IJAJRAR7.mjs → chunk-LRE4VEZV.mjs} +2 -4
  25. package/dist/lib/browser/chunk-LRE4VEZV.mjs.map +7 -0
  26. package/dist/lib/browser/chunk-U62BTGDF.mjs +1929 -0
  27. package/dist/lib/browser/chunk-U62BTGDF.mjs.map +7 -0
  28. package/dist/lib/browser/chunk-WBG5PTSX.mjs +23 -0
  29. package/dist/lib/browser/chunk-WBG5PTSX.mjs.map +7 -0
  30. package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs +18 -0
  31. package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs.map +7 -0
  32. package/dist/lib/browser/index.mjs +122 -75
  33. package/dist/lib/browser/index.mjs.map +4 -4
  34. package/dist/lib/browser/{intent-resolver-BQO5SVGI.mjs → intent-resolver-AK5O4GUW.mjs} +55 -24
  35. package/dist/lib/browser/intent-resolver-AK5O4GUW.mjs.map +7 -0
  36. package/dist/lib/browser/local-model-resolver-34MVHRKD.mjs +17 -0
  37. package/dist/lib/browser/local-model-resolver-34MVHRKD.mjs.map +7 -0
  38. package/dist/lib/browser/meta.json +1 -1
  39. package/dist/lib/browser/{react-surface-VNCD2H7C.mjs → react-surface-YCSR2MSR.mjs} +24 -35
  40. package/dist/lib/browser/react-surface-YCSR2MSR.mjs.map +7 -0
  41. package/dist/lib/browser/{settings-36V3VUMW.mjs → settings-NYJGNQ5I.mjs} +5 -5
  42. package/dist/lib/browser/{settings-36V3VUMW.mjs.map → settings-NYJGNQ5I.mjs.map} +1 -1
  43. package/dist/lib/browser/{state-D5IVKNYG.mjs → state-GG7Z3NB7.mjs} +9 -5
  44. package/dist/lib/browser/{state-D5IVKNYG.mjs.map → state-GG7Z3NB7.mjs.map} +3 -3
  45. package/dist/lib/browser/toolkit-VYDAWNE4.mjs +17 -0
  46. package/dist/lib/browser/toolkit-VYDAWNE4.mjs.map +7 -0
  47. package/dist/lib/browser/types/index.mjs +2 -2
  48. package/dist/lib/node-esm/BlueprintArticle-OL2HUY6Q.mjs +37 -0
  49. package/dist/lib/node-esm/BlueprintArticle-OL2HUY6Q.mjs.map +7 -0
  50. package/dist/lib/node-esm/ChatCompanion-AHKJS25S.mjs +159 -0
  51. package/dist/lib/node-esm/ChatCompanion-AHKJS25S.mjs.map +7 -0
  52. package/dist/lib/node-esm/{ChatContainer-TUCITJJW.mjs → ChatContainer-K7OGPE3G.mjs} +22 -20
  53. package/dist/lib/node-esm/ChatContainer-K7OGPE3G.mjs.map +7 -0
  54. package/dist/lib/node-esm/{ChatDialog-JLM7RDZQ.mjs → ChatDialog-QT6ZBX45.mjs} +12 -11
  55. package/dist/lib/node-esm/ChatDialog-QT6ZBX45.mjs.map +7 -0
  56. package/dist/lib/node-esm/PromptArticle-OUKFSJQV.mjs +60 -0
  57. package/dist/lib/node-esm/PromptArticle-OUKFSJQV.mjs.map +7 -0
  58. package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs +20 -0
  59. package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs.map +7 -0
  60. package/dist/lib/node-esm/{app-graph-builder-PNAFQUYT.mjs → app-graph-builder-VRN6ESRR.mjs} +67 -21
  61. package/dist/lib/node-esm/app-graph-builder-VRN6ESRR.mjs.map +7 -0
  62. package/dist/lib/node-esm/{blueprint-definition-275J3XL2.mjs → blueprint-definition-XW6QQVLV.mjs} +4 -4
  63. package/dist/lib/node-esm/chunk-3Q22TTXW.mjs +264 -0
  64. package/dist/lib/node-esm/chunk-3Q22TTXW.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-7YOGZI66.mjs → chunk-AB74FOA2.mjs} +51 -24
  66. package/dist/lib/node-esm/chunk-AB74FOA2.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-BHS747K7.mjs +1930 -0
  68. package/dist/lib/node-esm/chunk-BHS747K7.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-KJGD4EBJ.mjs +336 -0
  70. package/dist/lib/node-esm/chunk-KJGD4EBJ.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-CAQKGW3B.mjs → chunk-UXTUHH24.mjs} +59 -40
  72. package/dist/lib/node-esm/chunk-UXTUHH24.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-WE6KTH72.mjs +25 -0
  74. package/dist/lib/node-esm/chunk-WE6KTH72.mjs.map +7 -0
  75. package/dist/lib/node-esm/{chunk-YPXEA46Q.mjs → chunk-YWFWT57N.mjs} +2 -4
  76. package/dist/lib/node-esm/chunk-YWFWT57N.mjs.map +7 -0
  77. package/dist/lib/node-esm/edge-model-resolver-2ARXDOYS.mjs +19 -0
  78. package/dist/lib/node-esm/edge-model-resolver-2ARXDOYS.mjs.map +7 -0
  79. package/dist/lib/node-esm/index.mjs +122 -75
  80. package/dist/lib/node-esm/index.mjs.map +4 -4
  81. package/dist/lib/node-esm/{intent-resolver-FIS3T5KP.mjs → intent-resolver-L2F3N45L.mjs} +55 -24
  82. package/dist/lib/node-esm/intent-resolver-L2F3N45L.mjs.map +7 -0
  83. package/dist/lib/node-esm/local-model-resolver-TP2NTSAX.mjs +18 -0
  84. package/dist/lib/node-esm/local-model-resolver-TP2NTSAX.mjs.map +7 -0
  85. package/dist/lib/node-esm/meta.json +1 -1
  86. package/dist/lib/node-esm/{react-surface-4NLRKNBU.mjs → react-surface-CTW44GEM.mjs} +24 -35
  87. package/dist/lib/node-esm/react-surface-CTW44GEM.mjs.map +7 -0
  88. package/dist/lib/node-esm/{settings-7ZCZ6AS5.mjs → settings-RRHYI5KO.mjs} +5 -5
  89. package/dist/lib/node-esm/{settings-7ZCZ6AS5.mjs.map → settings-RRHYI5KO.mjs.map} +1 -1
  90. package/dist/lib/node-esm/{state-4VLKPLW3.mjs → state-FSUHFMDM.mjs} +9 -5
  91. package/dist/lib/node-esm/{state-4VLKPLW3.mjs.map → state-FSUHFMDM.mjs.map} +3 -3
  92. package/dist/lib/node-esm/toolkit-HFJZLVIR.mjs +18 -0
  93. package/dist/lib/node-esm/toolkit-HFJZLVIR.mjs.map +7 -0
  94. package/dist/lib/node-esm/types/index.mjs +2 -2
  95. package/dist/types/src/AssistantPlugin.d.ts +1 -1
  96. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/ai-service.d.ts +2 -3
  98. package/dist/types/src/capabilities/ai-service.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/blueprint-definition.d.ts +1 -1
  101. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/capabilities.d.ts +2 -11
  103. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/toolkit.d.ts +1 -1
  110. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -1
  111. package/dist/types/src/components/BlueprintArticle.d.ts +7 -0
  112. package/dist/types/src/components/BlueprintArticle.d.ts.map +1 -0
  113. package/dist/types/src/components/Chat/Chat.d.ts +22 -11
  114. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  115. package/dist/types/src/components/Chat/events.d.ts +4 -0
  116. package/dist/types/src/components/Chat/events.d.ts.map +1 -1
  117. package/dist/types/src/components/ChatCompanion.d.ts +2 -2
  118. package/dist/types/src/components/ChatCompanion.d.ts.map +1 -1
  119. package/dist/types/src/components/ChatContainer.d.ts +7 -4
  120. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  121. package/dist/types/src/components/ChatDialog.d.ts.map +1 -1
  122. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts.map +1 -1
  123. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  124. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
  125. package/dist/types/src/components/ChatThread/ChatThread.d.ts +10 -8
  126. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  127. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +135 -77
  128. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -1
  130. package/dist/types/src/components/ChatThread/reducers.d.ts +5 -5
  131. package/dist/types/src/components/ChatThread/reducers.d.ts.map +1 -1
  132. package/dist/types/src/components/ChatThread/registry.d.ts +11 -0
  133. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -0
  134. package/dist/types/src/components/ChatThread/sync.d.ts +42 -0
  135. package/dist/types/src/components/ChatThread/sync.d.ts.map +1 -0
  136. package/dist/types/src/components/ChatThread/sync.test.d.ts +2 -0
  137. package/dist/types/src/components/ChatThread/sync.test.d.ts.map +1 -0
  138. package/dist/types/src/components/PromptArticle.d.ts +7 -0
  139. package/dist/types/src/components/PromptArticle.d.ts.map +1 -0
  140. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +2 -1
  141. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  142. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +116 -62
  143. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  144. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +1 -1
  145. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  146. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +116 -62
  147. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  148. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +1 -0
  149. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts +3 -0
  150. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts.map +1 -0
  151. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts +8 -0
  152. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts.map +1 -0
  153. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +21 -0
  154. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -0
  155. package/dist/types/src/components/ToolBlock/ToolBlockWidget.d.ts +2 -0
  156. package/dist/types/src/components/ToolBlock/ToolBlockWidget.d.ts.map +1 -0
  157. package/dist/types/src/components/ToolBlock/index.d.ts +3 -0
  158. package/dist/types/src/components/ToolBlock/index.d.ts.map +1 -0
  159. package/dist/types/src/components/Toolbox/Toolbox.d.ts +2 -2
  160. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  161. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +116 -62
  162. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  163. package/dist/types/src/components/index.d.ts +4 -9
  164. package/dist/types/src/components/index.d.ts.map +1 -1
  165. package/dist/types/src/functions/analysis.d.ts +1 -1
  166. package/dist/types/src/functions/analysis.d.ts.map +1 -1
  167. package/dist/types/src/functions/index.d.ts +2 -2
  168. package/dist/types/src/functions/index.d.ts.map +1 -1
  169. package/dist/types/src/functions/{list.d.ts → object-list.d.ts} +2 -2
  170. package/dist/types/src/functions/object-list.d.ts.map +1 -0
  171. package/dist/types/src/functions/{load.d.ts → object-load.d.ts} +2 -2
  172. package/dist/types/src/functions/object-load.d.ts.map +1 -0
  173. package/dist/types/src/hooks/index.d.ts +1 -3
  174. package/dist/types/src/hooks/index.d.ts.map +1 -1
  175. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +2 -1
  176. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -1
  177. package/dist/types/src/hooks/useChatProcessor.d.ts +5 -3
  178. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  179. package/dist/types/src/hooks/useChatServices.d.ts +2 -2
  180. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
  181. package/dist/types/src/hooks/useChatToolbarActions.d.ts +8 -0
  182. package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -0
  183. package/dist/types/src/hooks/useContextBinder.d.ts +2 -2
  184. package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -1
  185. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -1
  186. package/dist/types/src/index.d.ts +2 -0
  187. package/dist/types/src/index.d.ts.map +1 -1
  188. package/dist/types/src/meta.d.ts +1 -2
  189. package/dist/types/src/meta.d.ts.map +1 -1
  190. package/dist/types/src/processor/index.d.ts +1 -0
  191. package/dist/types/src/processor/index.d.ts.map +1 -1
  192. package/dist/types/src/processor/presets.d.ts +1 -1
  193. package/dist/types/src/processor/presets.d.ts.map +1 -1
  194. package/dist/types/src/processor/processor.d.ts +17 -23
  195. package/dist/types/src/processor/processor.d.ts.map +1 -1
  196. package/dist/types/src/processor/update-name.d.ts +10 -0
  197. package/dist/types/src/processor/update-name.d.ts.map +1 -0
  198. package/dist/types/src/queue-logger.d.ts.map +1 -1
  199. package/dist/types/src/testing/index.d.ts +1 -2
  200. package/dist/types/src/testing/index.d.ts.map +1 -1
  201. package/dist/types/src/testing/test-generator.d.ts +7 -0
  202. package/dist/types/src/testing/test-generator.d.ts.map +1 -0
  203. package/dist/types/src/testing/test-services.d.ts +2 -2
  204. package/dist/types/src/testing/test-services.d.ts.map +1 -1
  205. package/dist/types/src/translations.d.ts +241 -27
  206. package/dist/types/src/translations.d.ts.map +1 -1
  207. package/dist/types/src/types/Assistant.d.ts +15 -9
  208. package/dist/types/src/types/Assistant.d.ts.map +1 -1
  209. package/dist/types/src/types/AssistantAction.d.ts +33 -8
  210. package/dist/types/src/types/AssistantAction.d.ts.map +1 -1
  211. package/dist/types/src/types/service.d.ts +18 -12
  212. package/dist/types/src/types/service.d.ts.map +1 -1
  213. package/dist/types/tsconfig.tsbuildinfo +1 -1
  214. package/package.json +96 -111
  215. package/src/AssistantPlugin.tsx +154 -129
  216. package/src/capabilities/ai-service.ts +6 -7
  217. package/src/capabilities/app-graph-builder.ts +69 -21
  218. package/src/capabilities/blueprint-definition.ts +39 -15
  219. package/src/capabilities/capabilities.ts +2 -16
  220. package/src/capabilities/edge-model-resolver.ts +5 -7
  221. package/src/capabilities/intent-resolver.ts +69 -16
  222. package/src/capabilities/local-model-resolver.ts +7 -9
  223. package/src/capabilities/react-surface.tsx +16 -20
  224. package/src/capabilities/state.ts +2 -0
  225. package/src/capabilities/toolkit.ts +9 -155
  226. package/src/components/BlueprintArticle.tsx +29 -0
  227. package/src/components/Chat/Chat.tsx +177 -140
  228. package/src/components/Chat/events.ts +6 -0
  229. package/src/components/ChatCompanion.tsx +93 -49
  230. package/src/components/ChatContainer.tsx +27 -17
  231. package/src/components/ChatDialog.tsx +17 -10
  232. package/src/components/ChatProgress/ChatProgress.tsx +3 -4
  233. package/src/components/ChatPrompt/ChatActions.tsx +2 -4
  234. package/src/components/ChatPrompt/ChatOptions.tsx +40 -45
  235. package/src/components/ChatPrompt/ChatReferences.tsx +2 -2
  236. package/src/components/ChatThread/ChatThread.stories.tsx +90 -225
  237. package/src/components/ChatThread/ChatThread.tsx +59 -51
  238. package/src/components/ChatThread/Link.tsx +11 -8
  239. package/src/components/ChatThread/reducers.ts +6 -6
  240. package/src/components/ChatThread/registry.tsx +174 -0
  241. package/src/components/ChatThread/sync.test.ts +89 -0
  242. package/src/components/ChatThread/sync.ts +148 -0
  243. package/src/components/ChatThread/testing/thread.md +37 -0
  244. package/src/components/PromptArticle.tsx +51 -0
  245. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +15 -7
  246. package/src/components/TemplateEditor/TemplateEditor.tsx +20 -11
  247. package/src/components/TemplateEditor/TemplateForm.stories.tsx +4 -6
  248. package/src/components/TemplateEditor/TemplateForm.tsx +2 -2
  249. package/src/components/TemplateEditor/extensions/handlebars-extension.ts +269 -0
  250. package/src/components/TemplateEditor/extensions/index.ts +6 -0
  251. package/src/components/TemplateEditor/extensions/xml-extension.ts +64 -0
  252. package/src/components/{ChatThread → ToolBlock}/ToolBlock.tsx +46 -50
  253. package/src/components/ToolBlock/ToolBlockWidget.tsx +5 -0
  254. package/src/components/ToolBlock/index.ts +6 -0
  255. package/src/components/Toolbox/Toolbox.stories.tsx +5 -8
  256. package/src/components/Toolbox/Toolbox.tsx +5 -5
  257. package/src/components/index.ts +2 -5
  258. package/src/functions/analysis.ts +5 -3
  259. package/src/functions/index.ts +2 -2
  260. package/src/functions/{list.ts → object-list.ts} +6 -4
  261. package/src/functions/{load.ts → object-load.ts} +9 -7
  262. package/src/hooks/index.ts +1 -3
  263. package/src/hooks/useBlueprintRegistry.ts +19 -4
  264. package/src/hooks/useChatProcessor.ts +23 -15
  265. package/src/hooks/useChatServices.ts +29 -42
  266. package/src/hooks/useChatToolbarActions.ts +122 -0
  267. package/src/hooks/useContextBinder.ts +19 -7
  268. package/src/hooks/useItemTypes.ts +1 -1
  269. package/src/hooks/useReferencesProvider.ts +2 -1
  270. package/src/index.ts +2 -0
  271. package/src/meta.ts +9 -6
  272. package/src/processor/index.ts +1 -0
  273. package/src/processor/presets.ts +2 -2
  274. package/src/processor/processor.test.ts +21 -27
  275. package/src/processor/processor.ts +47 -74
  276. package/src/processor/update-name.ts +56 -0
  277. package/src/queue-logger.ts +9 -13
  278. package/src/testing/index.ts +1 -2
  279. package/src/testing/test-generator.ts +261 -0
  280. package/src/testing/test-services.ts +2 -8
  281. package/src/translations.ts +26 -18
  282. package/src/types/Assistant.ts +10 -8
  283. package/src/types/AssistantAction.ts +23 -6
  284. package/src/types/service.ts +17 -9
  285. package/dist/lib/browser/BlueprintContainer-OWUSKPRK.mjs +0 -29
  286. package/dist/lib/browser/BlueprintContainer-OWUSKPRK.mjs.map +0 -7
  287. package/dist/lib/browser/ChatCompanion-FRCVSLPP.mjs +0 -126
  288. package/dist/lib/browser/ChatCompanion-FRCVSLPP.mjs.map +0 -7
  289. package/dist/lib/browser/ChatContainer-YBJBIVUZ.mjs.map +0 -7
  290. package/dist/lib/browser/ChatDialog-MTPJLEHM.mjs.map +0 -7
  291. package/dist/lib/browser/SequenceContainer-TF5QNXYM.mjs +0 -150
  292. package/dist/lib/browser/SequenceContainer-TF5QNXYM.mjs.map +0 -7
  293. package/dist/lib/browser/ai-service-NRZPTUHO.mjs +0 -22
  294. package/dist/lib/browser/ai-service-NRZPTUHO.mjs.map +0 -7
  295. package/dist/lib/browser/app-graph-builder-7AAWTWGA.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-6QMISAU6.mjs +0 -167
  297. package/dist/lib/browser/chunk-6QMISAU6.mjs.map +0 -7
  298. package/dist/lib/browser/chunk-CFXXQM25.mjs +0 -182
  299. package/dist/lib/browser/chunk-CFXXQM25.mjs.map +0 -7
  300. package/dist/lib/browser/chunk-IJAJRAR7.mjs.map +0 -7
  301. package/dist/lib/browser/chunk-O4LUJEDV.mjs +0 -20
  302. package/dist/lib/browser/chunk-O4LUJEDV.mjs.map +0 -7
  303. package/dist/lib/browser/chunk-OYFQS7JM.mjs.map +0 -7
  304. package/dist/lib/browser/chunk-SMIVXXAI.mjs.map +0 -7
  305. package/dist/lib/browser/chunk-V5H5CCZA.mjs +0 -218
  306. package/dist/lib/browser/chunk-V5H5CCZA.mjs.map +0 -7
  307. package/dist/lib/browser/chunk-XL557TXF.mjs +0 -2332
  308. package/dist/lib/browser/chunk-XL557TXF.mjs.map +0 -7
  309. package/dist/lib/browser/edge-model-resolver-E5M3CC46.mjs +0 -22
  310. package/dist/lib/browser/edge-model-resolver-E5M3CC46.mjs.map +0 -7
  311. package/dist/lib/browser/intent-resolver-BQO5SVGI.mjs.map +0 -7
  312. package/dist/lib/browser/local-model-resolver-VZ5WZQIC.mjs +0 -21
  313. package/dist/lib/browser/local-model-resolver-VZ5WZQIC.mjs.map +0 -7
  314. package/dist/lib/browser/react-surface-VNCD2H7C.mjs.map +0 -7
  315. package/dist/lib/browser/toolkit-Y5OYX5PO.mjs +0 -191
  316. package/dist/lib/browser/toolkit-Y5OYX5PO.mjs.map +0 -7
  317. package/dist/lib/node-esm/BlueprintContainer-UFVWCRN6.mjs +0 -30
  318. package/dist/lib/node-esm/BlueprintContainer-UFVWCRN6.mjs.map +0 -7
  319. package/dist/lib/node-esm/ChatCompanion-ZNRZEKH5.mjs +0 -127
  320. package/dist/lib/node-esm/ChatCompanion-ZNRZEKH5.mjs.map +0 -7
  321. package/dist/lib/node-esm/ChatContainer-TUCITJJW.mjs.map +0 -7
  322. package/dist/lib/node-esm/ChatDialog-JLM7RDZQ.mjs.map +0 -7
  323. package/dist/lib/node-esm/SequenceContainer-UXOVZPZO.mjs +0 -151
  324. package/dist/lib/node-esm/SequenceContainer-UXOVZPZO.mjs.map +0 -7
  325. package/dist/lib/node-esm/ai-service-UDEPIPTO.mjs +0 -23
  326. package/dist/lib/node-esm/ai-service-UDEPIPTO.mjs.map +0 -7
  327. package/dist/lib/node-esm/app-graph-builder-PNAFQUYT.mjs.map +0 -7
  328. package/dist/lib/node-esm/chunk-2X6VEO32.mjs +0 -2333
  329. package/dist/lib/node-esm/chunk-2X6VEO32.mjs.map +0 -7
  330. package/dist/lib/node-esm/chunk-7YOGZI66.mjs.map +0 -7
  331. package/dist/lib/node-esm/chunk-CAQKGW3B.mjs.map +0 -7
  332. package/dist/lib/node-esm/chunk-FNZJJL7G.mjs +0 -183
  333. package/dist/lib/node-esm/chunk-FNZJJL7G.mjs.map +0 -7
  334. package/dist/lib/node-esm/chunk-RLBN4RNR.mjs +0 -168
  335. package/dist/lib/node-esm/chunk-RLBN4RNR.mjs.map +0 -7
  336. package/dist/lib/node-esm/chunk-UWUUZQWJ.mjs +0 -219
  337. package/dist/lib/node-esm/chunk-UWUUZQWJ.mjs.map +0 -7
  338. package/dist/lib/node-esm/chunk-VFY2JG62.mjs +0 -22
  339. package/dist/lib/node-esm/chunk-VFY2JG62.mjs.map +0 -7
  340. package/dist/lib/node-esm/chunk-YPXEA46Q.mjs.map +0 -7
  341. package/dist/lib/node-esm/edge-model-resolver-SZHDLXCT.mjs +0 -23
  342. package/dist/lib/node-esm/edge-model-resolver-SZHDLXCT.mjs.map +0 -7
  343. package/dist/lib/node-esm/intent-resolver-FIS3T5KP.mjs.map +0 -7
  344. package/dist/lib/node-esm/local-model-resolver-2KCBKMYA.mjs +0 -22
  345. package/dist/lib/node-esm/local-model-resolver-2KCBKMYA.mjs.map +0 -7
  346. package/dist/lib/node-esm/react-surface-4NLRKNBU.mjs.map +0 -7
  347. package/dist/lib/node-esm/toolkit-2F2OL6WB.mjs +0 -192
  348. package/dist/lib/node-esm/toolkit-2F2OL6WB.mjs.map +0 -7
  349. package/dist/types/src/components/BlueprintContainer.d.ts +0 -8
  350. package/dist/types/src/components/BlueprintContainer.d.ts.map +0 -1
  351. package/dist/types/src/components/ChatThread/ChatMessage.d.ts +0 -33
  352. package/dist/types/src/components/ChatThread/ChatMessage.d.ts.map +0 -1
  353. package/dist/types/src/components/ChatThread/ToolBlock.d.ts +0 -19
  354. package/dist/types/src/components/ChatThread/ToolBlock.d.ts.map +0 -1
  355. package/dist/types/src/components/PromptSettings.d.ts +0 -6
  356. package/dist/types/src/components/PromptSettings.d.ts.map +0 -1
  357. package/dist/types/src/components/SequenceContainer.d.ts +0 -8
  358. package/dist/types/src/components/SequenceContainer.d.ts.map +0 -1
  359. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts +0 -13
  360. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts.map +0 -1
  361. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts +0 -263
  362. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts.map +0 -1
  363. package/dist/types/src/components/SequenceEditor/index.d.ts +0 -2
  364. package/dist/types/src/components/SequenceEditor/index.d.ts.map +0 -1
  365. package/dist/types/src/components/TemplateEditor/handlebars-extension.d.ts.map +0 -1
  366. package/dist/types/src/components/Toolbar/Toolbar.d.ts +0 -4
  367. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +0 -1
  368. package/dist/types/src/components/Toolbar/index.d.ts +0 -2
  369. package/dist/types/src/components/Toolbar/index.d.ts.map +0 -1
  370. package/dist/types/src/components/Toolbar/useChatToolbarActions.d.ts +0 -11
  371. package/dist/types/src/components/Toolbar/useChatToolbarActions.d.ts.map +0 -1
  372. package/dist/types/src/execution-graph/execution-graph.d.ts +0 -21
  373. package/dist/types/src/execution-graph/execution-graph.d.ts.map +0 -1
  374. package/dist/types/src/execution-graph/index.d.ts +0 -2
  375. package/dist/types/src/execution-graph/index.d.ts.map +0 -1
  376. package/dist/types/src/functions/list.d.ts.map +0 -1
  377. package/dist/types/src/functions/load.d.ts.map +0 -1
  378. package/dist/types/src/hooks/useExecutionGraph.d.ts +0 -7
  379. package/dist/types/src/hooks/useExecutionGraph.d.ts.map +0 -1
  380. package/dist/types/src/hooks/useMatcherExtension.d.ts +0 -3
  381. package/dist/types/src/hooks/useMatcherExtension.d.ts.map +0 -1
  382. package/dist/types/src/hooks/useResolveRef.d.ts +0 -4
  383. package/dist/types/src/hooks/useResolveRef.d.ts.map +0 -1
  384. package/dist/types/src/parser/filter-generator.d.ts +0 -4
  385. package/dist/types/src/parser/filter-generator.d.ts.map +0 -1
  386. package/dist/types/src/parser/filter-generator.test.d.ts +0 -2
  387. package/dist/types/src/parser/filter-generator.test.d.ts.map +0 -1
  388. package/dist/types/src/parser/index.d.ts +0 -4
  389. package/dist/types/src/parser/index.d.ts.map +0 -1
  390. package/dist/types/src/parser/query-parser.d.ts +0 -15
  391. package/dist/types/src/parser/query-parser.d.ts.map +0 -1
  392. package/dist/types/src/parser/query-parser.test.d.ts +0 -2
  393. package/dist/types/src/parser/query-parser.test.d.ts.map +0 -1
  394. package/dist/types/src/parser/types.d.ts +0 -24
  395. package/dist/types/src/parser/types.d.ts.map +0 -1
  396. package/dist/types/src/stories/Chat.stories.d.ts +0 -26
  397. package/dist/types/src/stories/Chat.stories.d.ts.map +0 -1
  398. package/dist/types/src/stories/components/BlueprintContainer.d.ts +0 -4
  399. package/dist/types/src/stories/components/BlueprintContainer.d.ts.map +0 -1
  400. package/dist/types/src/stories/components/ChatContainer.d.ts +0 -4
  401. package/dist/types/src/stories/components/ChatContainer.d.ts.map +0 -1
  402. package/dist/types/src/stories/components/CommentsContainer.d.ts +0 -4
  403. package/dist/types/src/stories/components/CommentsContainer.d.ts.map +0 -1
  404. package/dist/types/src/stories/components/GraphContainer.d.ts +0 -6
  405. package/dist/types/src/stories/components/GraphContainer.d.ts.map +0 -1
  406. package/dist/types/src/stories/components/LoggingContainer.d.ts +0 -4
  407. package/dist/types/src/stories/components/LoggingContainer.d.ts.map +0 -1
  408. package/dist/types/src/stories/components/MessageContainer.d.ts +0 -4
  409. package/dist/types/src/stories/components/MessageContainer.d.ts.map +0 -1
  410. package/dist/types/src/stories/components/SurfaceContainer.d.ts +0 -8
  411. package/dist/types/src/stories/components/SurfaceContainer.d.ts.map +0 -1
  412. package/dist/types/src/stories/components/TasksContainer.d.ts +0 -4
  413. package/dist/types/src/stories/components/TasksContainer.d.ts.map +0 -1
  414. package/dist/types/src/stories/components/TokenManagerContainer.d.ts +0 -3
  415. package/dist/types/src/stories/components/TokenManagerContainer.d.ts.map +0 -1
  416. package/dist/types/src/stories/components/index.d.ts +0 -11
  417. package/dist/types/src/stories/components/index.d.ts.map +0 -1
  418. package/dist/types/src/stories/components/types.d.ts +0 -7
  419. package/dist/types/src/stories/components/types.d.ts.map +0 -1
  420. package/dist/types/src/stories/testing/data.d.ts +0 -5
  421. package/dist/types/src/stories/testing/data.d.ts.map +0 -1
  422. package/dist/types/src/stories/testing/index.d.ts +0 -3
  423. package/dist/types/src/stories/testing/index.d.ts.map +0 -1
  424. package/dist/types/src/stories/testing/testing.d.ts +0 -44
  425. package/dist/types/src/stories/testing/testing.d.ts.map +0 -1
  426. package/dist/types/src/testing/test-data.d.ts +0 -4
  427. package/dist/types/src/testing/test-data.d.ts.map +0 -1
  428. package/dist/types/src/testing/test-functions.d.ts +0 -6
  429. package/dist/types/src/testing/test-functions.d.ts.map +0 -1
  430. package/src/components/BlueprintContainer.tsx +0 -24
  431. package/src/components/ChatThread/ChatMessage.tsx +0 -334
  432. package/src/components/PromptSettings.tsx +0 -90
  433. package/src/components/SequenceContainer.tsx +0 -131
  434. package/src/components/SequenceEditor/SequenceEditor.stories.tsx +0 -33
  435. package/src/components/SequenceEditor/SequenceEditor.tsx +0 -50
  436. package/src/components/SequenceEditor/index.ts +0 -5
  437. package/src/components/TemplateEditor/handlebars-extension.ts +0 -165
  438. package/src/components/Toolbar/Toolbar.tsx +0 -20
  439. package/src/components/Toolbar/index.ts +0 -5
  440. package/src/components/Toolbar/useChatToolbarActions.ts +0 -125
  441. package/src/execution-graph/execution-graph.ts +0 -211
  442. package/src/execution-graph/index.ts +0 -5
  443. package/src/hooks/useExecutionGraph.ts +0 -20
  444. package/src/hooks/useMatcherExtension.ts +0 -45
  445. package/src/hooks/useResolveRef.ts +0 -33
  446. package/src/parser/filter-generator.test.ts +0 -32
  447. package/src/parser/filter-generator.ts +0 -76
  448. package/src/parser/index.ts +0 -7
  449. package/src/parser/query-parser.test.ts +0 -139
  450. package/src/parser/query-parser.ts +0 -199
  451. package/src/parser/types.ts +0 -36
  452. package/src/stories/Chat.stories.tsx +0 -469
  453. package/src/stories/components/BlueprintContainer.tsx +0 -32
  454. package/src/stories/components/ChatContainer.tsx +0 -57
  455. package/src/stories/components/CommentsContainer.tsx +0 -25
  456. package/src/stories/components/GraphContainer.tsx +0 -118
  457. package/src/stories/components/LoggingContainer.tsx +0 -21
  458. package/src/stories/components/MessageContainer.tsx +0 -27
  459. package/src/stories/components/SurfaceContainer.tsx +0 -52
  460. package/src/stories/components/TasksContainer.tsx +0 -49
  461. package/src/stories/components/TokenManagerContainer.tsx +0 -14
  462. package/src/stories/components/index.ts +0 -15
  463. package/src/stories/components/types.ts +0 -11
  464. package/src/stories/testing/data.ts +0 -142
  465. package/src/stories/testing/index.ts +0 -6
  466. package/src/stories/testing/testing.tsx +0 -254
  467. package/src/testing/test-data.ts +0 -109
  468. package/src/testing/test-functions.ts +0 -16
  469. /package/dist/lib/browser/{blueprint-definition-CRZPIA5A.mjs.map → blueprint-definition-5FT5JGPY.mjs.map} +0 -0
  470. /package/dist/lib/node-esm/{blueprint-definition-275J3XL2.mjs.map → blueprint-definition-XW6QQVLV.mjs.map} +0 -0
  471. /package/dist/types/src/components/TemplateEditor/{handlebars-extension.d.ts → extensions/handlebars-extension.d.ts} +0 -0
@@ -2,8 +2,13 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Registry, Rx } from '@effect-rx/rx-react';
6
- import { Cause, Effect, Exit, Fiber, Layer, Option } from 'effect';
5
+ import { Atom, Registry } from '@effect-atom/atom-react';
6
+ import * as Cause from 'effect/Cause';
7
+ import * as Effect from 'effect/Effect';
8
+ import * as Exit from 'effect/Exit';
9
+ import * as Fiber from 'effect/Fiber';
10
+ import * as Option from 'effect/Option';
11
+ import * as Runtime from 'effect/Runtime';
7
12
 
8
13
  import {
9
14
  AiService,
@@ -16,7 +21,6 @@ import {
16
21
  import {
17
22
  type AiConversation,
18
23
  type AiConversationRunParams,
19
- AiSession,
20
24
  ArtifactDiffResolver,
21
25
  GenerationObserver,
22
26
  createSystemPrompt,
@@ -27,21 +31,22 @@ import { throwCause } from '@dxos/effect';
27
31
  import {
28
32
  type CredentialsService,
29
33
  type DatabaseService,
34
+ type FunctionInvocationService,
30
35
  type QueueService,
31
- type RemoteFunctionExecutionService,
32
36
  type TracingService,
33
37
  } from '@dxos/functions';
34
38
  import { log } from '@dxos/log';
35
- import { type ContentBlock, DataType } from '@dxos/schema';
36
- import { trim } from '@dxos/util';
39
+ import { type ContentBlock, Message } from '@dxos/types';
37
40
 
38
41
  import { type Assistant } from '../types';
39
42
 
43
+ import { updateName } from './update-name';
44
+
40
45
  export type AiChatServices =
41
46
  | CredentialsService
42
47
  | DatabaseService
43
48
  | QueueService
44
- | RemoteFunctionExecutionService
49
+ | FunctionInvocationService
45
50
  | AiService.AiService
46
51
  | ToolExecutionService
47
52
  | ToolResolverService
@@ -72,7 +77,7 @@ export type AiRequest = {
72
77
  * Handles streaming responses from the conversation.
73
78
  */
74
79
  export class AiChatProcessor {
75
- private readonly _rx: Registry.Registry;
80
+ private readonly _registry: Registry.Registry;
76
81
 
77
82
  /** External observer. */
78
83
  private readonly _observer: GenerationObserver;
@@ -83,25 +88,20 @@ export class AiChatProcessor {
83
88
  /** Last request (for retries). */
84
89
  private _lastRequest: AiRequest | undefined;
85
90
 
86
- /**
87
- * Pending messages (incl. the current user request).
88
- */
89
- private readonly _pending = Rx.make<DataType.Message[]>([]);
91
+ /** Pending messages (incl. the current user request). */
92
+ private readonly _pending = Atom.make<Message.Message[]>([]);
90
93
 
91
- /**
92
- * Currently streaming message (from the AI service).
93
- */
94
- private readonly _streaming = Rx.make<Option.Option<DataType.Message>>(Option.none());
94
+ /** Currently streaming message (from the AI service). */
95
+ private readonly _streaming = Atom.make<Option.Option<Message.Message>>(Option.none());
95
96
 
96
- /**
97
- * Streaming state.
98
- */
99
- public readonly streaming = Rx.make<boolean>((get) => Option.isSome(get(this._streaming)));
97
+ /** Streaming state. */
98
+ public readonly streaming = Atom.make<boolean>((get) => Option.isSome(get(this._streaming)));
100
99
 
101
- /**
102
- * Array of Messages (incl. the current message being streamed).
103
- */
104
- public readonly messages = Rx.make<DataType.Message[]>((get) =>
100
+ /** Active state. */
101
+ public readonly active = Atom.make(false);
102
+
103
+ /** Array of Messages (incl. the current message being streamed). */
104
+ public readonly messages = Atom.make<Message.Message[]>((get) =>
105
105
  Option.match(get(this._streaming), {
106
106
  onNone: () => get(this._pending),
107
107
  onSome: (streaming) => [...get(this._pending), streaming],
@@ -109,16 +109,16 @@ export class AiChatProcessor {
109
109
  );
110
110
 
111
111
  /** Last error. */
112
- public readonly error = Rx.make<Option.Option<Error>>(Option.none());
112
+ public readonly error = Atom.make<Option.Option<Error>>(Option.none());
113
113
 
114
114
  constructor(
115
115
  private readonly _conversation: AiConversation,
116
116
  // TODO(dmaretskyi): Replace this with effect's ManagedRuntime wrapping this layer.
117
- private readonly _services: Layer.Layer<AiChatServices>,
117
+ private readonly _services: () => Promise<Runtime.Runtime<AiChatServices>>,
118
118
  private readonly _options: AiChatProcessorOptions = defaultOptions,
119
119
  ) {
120
120
  // Initialize registries and defaults before using in other logic.
121
- this._rx = this._options.observableRegistry ?? Registry.make();
121
+ this._registry = this._options.observableRegistry ?? Registry.make();
122
122
  this._observer = GenerationObserver.make({
123
123
  onBlock: this._onBlock,
124
124
  onMessage: this._onMessage,
@@ -129,10 +129,6 @@ export class AiChatProcessor {
129
129
  }
130
130
  }
131
131
 
132
- get isRunning() {
133
- return !!this._fiber;
134
- }
135
-
136
132
  get context() {
137
133
  return this._conversation.context;
138
134
  }
@@ -155,7 +151,8 @@ export class AiChatProcessor {
155
151
 
156
152
  try {
157
153
  this._lastRequest = requestParam;
158
- this._rx.set(this.error, Option.none());
154
+ this._registry.set(this.error, Option.none());
155
+ this._registry.set(this.active, true);
159
156
 
160
157
  // Create request.
161
158
  const request = this._conversation.createRequest({
@@ -164,19 +161,17 @@ export class AiChatProcessor {
164
161
  observer: this._observer,
165
162
  });
166
163
 
164
+ const runtime = await this._services();
165
+
167
166
  // Create fiber.
168
167
  this._fiber = request.pipe(
169
- Effect.provide(Layer.provideMerge(AiService.model(this._options.model ?? DEFAULT_EDGE_MODEL), this._services)),
168
+ Effect.provide(AiService.model(this._options.model ?? DEFAULT_EDGE_MODEL)),
170
169
 
171
170
  // TODO(dmaretskyi): Move ArtifactDiffResolver upstream.
172
171
  Effect.provideService(ArtifactDiffResolver, this._artifactDiffResolver),
173
172
 
174
173
  Effect.asVoid,
175
- Effect.tapErrorCause((cause) => {
176
- log.error('request failed', { cause });
177
- return Effect.void;
178
- }),
179
- Effect.runFork, // Runs in the background.
174
+ Runtime.runFork(runtime), // Runs in the background.
180
175
  );
181
176
 
182
177
  // Execute request.
@@ -185,14 +180,15 @@ export class AiChatProcessor {
185
180
  throwCause(response.cause);
186
181
  }
187
182
 
188
- this._rx.set(this.error, Option.none());
183
+ this._registry.set(this.error, Option.none());
189
184
  this._lastRequest = undefined;
190
185
  this._fiber = undefined;
191
- } catch (err) {
192
- log.error('request failed', { err });
193
- this._rx.set(this.error, Option.some(new Error('AI service error', { cause: err })));
186
+ } catch (error) {
187
+ log.error('request failed', { error });
188
+ this._registry.set(this.error, Option.some(new Error('AI service error', { cause: error })));
194
189
  } finally {
195
190
  this._fiber = undefined;
191
+ this._registry.set(this.active, false);
196
192
  }
197
193
  }
198
194
 
@@ -209,6 +205,7 @@ export class AiChatProcessor {
209
205
  );
210
206
 
211
207
  this._fiber = undefined;
208
+ this._registry.set(this.active, false);
212
209
  }
213
210
 
214
211
  /**
@@ -224,32 +221,8 @@ export class AiChatProcessor {
224
221
  * Update the current chat's name.
225
222
  */
226
223
  async updateName(chat: Assistant.Chat): Promise<void> {
227
- const system = trim`
228
- It is extremely important that you respond only with the title and nothing else.
229
- If you cannot do this effectively respond with "New Chat".
230
- `;
231
-
232
- const history = await this._conversation.getHistory();
233
- const fiber = Effect.gen(this, function* () {
234
- const session = new AiSession();
235
- return yield* session.run({ system, prompt: 'Suggest a name for this chat', history });
236
- }).pipe(
237
- // TODO(burdon): Use simpler model.
238
- Effect.provide(Layer.provideMerge(AiService.model(this._options.model ?? DEFAULT_EDGE_MODEL), this._services)),
239
- Effect.tap((messages) => {
240
- const message = messages.find((message) => message.sender.role === 'assistant');
241
- const title = message?.blocks.find((b) => b._tag === 'text')?.text;
242
- if (title) {
243
- chat.name = title;
244
- }
245
- }),
246
- Effect.runFork, // Run in the background.
247
- );
248
-
249
- const response = await fiber.pipe(Fiber.join, Effect.runPromiseExit);
250
- if (!Exit.isSuccess(response)) {
251
- throwCause(response.cause);
252
- }
224
+ const runtime = await this._services();
225
+ await updateName(runtime, this._conversation, chat, this._options.model);
253
226
  }
254
227
 
255
228
  // TODO(burdon): Fix/factor out.
@@ -277,22 +250,22 @@ export class AiChatProcessor {
277
250
  };
278
251
 
279
252
  private _onMessage = Effect.fn(
280
- function* (this: AiChatProcessor, message: DataType.Message) {
281
- this._rx.set(this._streaming, Option.none());
282
- this._rx.update(this._pending, (pending) => [...pending, message]);
253
+ function* (this: AiChatProcessor, message: Message.Message) {
254
+ this._registry.set(this._streaming, Option.none());
255
+ this._registry.update(this._pending, (pending) => [...pending, message]);
283
256
  }.bind(this),
284
257
  );
285
258
 
286
259
  private _onBlock = Effect.fn(
287
260
  function* (this: AiChatProcessor, block: ContentBlock.Any) {
288
- this._rx.update(this._streaming, (streaming) => {
261
+ this._registry.update(this._streaming, (streaming) => {
289
262
  const blocks = streaming.pipe(
290
- Option.map((streaming) => streaming.blocks.filter((b) => !b.pending)),
263
+ Option.map((streaming) => streaming.blocks.filter((b: ContentBlock.Any) => !b.pending)),
291
264
  Option.getOrElse(() => []),
292
265
  );
293
266
 
294
267
  return Option.some(
295
- Obj.make(DataType.Message, {
268
+ Obj.make(Message.Message, {
296
269
  created: new Date().toISOString(),
297
270
  sender: { role: 'assistant' },
298
271
  blocks: [...blocks, block],
@@ -0,0 +1,56 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Exit from 'effect/Exit';
7
+ import * as Fiber from 'effect/Fiber';
8
+ import * as Runtime from 'effect/Runtime';
9
+
10
+ import { AiService, DEFAULT_EDGE_MODEL, type ModelName } from '@dxos/ai';
11
+ import { type AiConversation, AiSession } from '@dxos/assistant';
12
+ import { throwCause } from '@dxos/effect';
13
+ import { trim } from '@dxos/util';
14
+
15
+ import { type Assistant } from '../types';
16
+
17
+ import { type AiChatServices } from './processor';
18
+
19
+ /**
20
+ * Update the current chat's name.
21
+ */
22
+ // TODO(burdon): Convert this into a plugin tool.
23
+ export const updateName = async (
24
+ runtime: Runtime.Runtime<AiChatServices>,
25
+ conversation: AiConversation,
26
+ chat: Assistant.Chat,
27
+ model: ModelName = DEFAULT_EDGE_MODEL,
28
+ ): Promise<void> => {
29
+ const history = await conversation.getHistory();
30
+ const system = trim`
31
+ It is extremely important that you respond only with the title and nothing else.
32
+ If you cannot do this effectively respond with "New Chat".
33
+ `;
34
+ const prompt = 'Suggest a name for this chat';
35
+
36
+ const fiber = Effect.gen(this, function* () {
37
+ const session = new AiSession();
38
+ return yield* session.run({ system, prompt, history });
39
+ }).pipe(
40
+ Effect.provide(AiService.model(model)),
41
+ Effect.tap((messages) => {
42
+ // TODO(burdon): Parse response (should update via tool).
43
+ const message = messages.find((message) => message.sender.role === 'assistant');
44
+ const title = message?.blocks.find((block) => block._tag === 'text')?.text;
45
+ if (title) {
46
+ chat.name = title;
47
+ }
48
+ }),
49
+ Runtime.runFork(runtime), // Run in the background.
50
+ );
51
+
52
+ const response = await fiber.pipe(Fiber.join, Effect.runPromiseExit);
53
+ if (!Exit.isSuccess(response)) {
54
+ throwCause(response.cause);
55
+ }
56
+ };
@@ -5,14 +5,10 @@
5
5
  import { type Queue, Ref, type Space, getSpace } from '@dxos/client/echo';
6
6
  import { type Sequence, type SequenceEvent, type SequenceLogger } from '@dxos/conductor';
7
7
  import { DXN, Key, Obj } from '@dxos/echo';
8
- import {
9
- InvocationOutcome,
10
- InvocationTraceEndEvent,
11
- type InvocationTraceEvent,
12
- InvocationTraceEventType,
13
- InvocationTraceStartEvent,
14
- TraceEvent,
15
- } from '@dxos/functions';
8
+ import { InvocationTraceEndEvent, InvocationTraceEventType, InvocationTraceStartEvent } from '@dxos/functions-runtime';
9
+ import { TraceEvent } from '@dxos/functions-runtime';
10
+ import { InvocationOutcome } from '@dxos/functions-runtime';
11
+ import { type InvocationTraceEvent } from '@dxos/functions-runtime';
16
12
  import { invariant } from '@dxos/invariant';
17
13
  import { QueueSubspaceTags } from '@dxos/keys';
18
14
 
@@ -39,7 +35,7 @@ export class QueueLogger implements SequenceLogger {
39
35
  Obj.make(InvocationTraceStartEvent, {
40
36
  type: InvocationTraceEventType.START,
41
37
  invocationId: event.invocationId,
42
- timestampMs: Date.now(),
38
+ timestamp: Date.now(),
43
39
  input: {},
44
40
  invocationTraceQueue: Ref.fromDXN(this._getTraceQueueDxn(event.invocationId)),
45
41
  invocationTarget: Ref.make(this.sequence),
@@ -51,7 +47,7 @@ export class QueueLogger implements SequenceLogger {
51
47
  Obj.make(InvocationTraceEndEvent, {
52
48
  type: InvocationTraceEventType.END,
53
49
  invocationId: event.invocationId,
54
- timestampMs: Date.now(),
50
+ timestamp: Date.now(),
55
51
  outcome: InvocationOutcome.SUCCESS,
56
52
  }),
57
53
  ]);
@@ -65,7 +61,7 @@ export class QueueLogger implements SequenceLogger {
65
61
  ingestionTimestamp: Date.now(),
66
62
  logs: [
67
63
  {
68
- timestampMs: Date.now(),
64
+ timestamp: Date.now(),
69
65
  level: 'info',
70
66
  message: event.type,
71
67
  context: { step: event.step },
@@ -83,7 +79,7 @@ export class QueueLogger implements SequenceLogger {
83
79
  ingestionTimestamp: Date.now(),
84
80
  logs: [
85
81
  {
86
- timestampMs: Date.now(),
82
+ timestamp: Date.now(),
87
83
  level: 'info',
88
84
  message: event.type,
89
85
  context: { message: event.message },
@@ -101,7 +97,7 @@ export class QueueLogger implements SequenceLogger {
101
97
  ingestionTimestamp: Date.now(),
102
98
  logs: [
103
99
  {
104
- timestampMs: Date.now(),
100
+ timestamp: Date.now(),
105
101
  level: 'info',
106
102
  message: event.type,
107
103
  context: { block: event.block },
@@ -2,7 +2,6 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export * from './test-data';
6
- export * from './test-functions';
5
+ export * from './test-generator';
7
6
  export * from './test-sequence';
8
7
  export * from './test-services';
@@ -0,0 +1,261 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Obj } from '@dxos/echo';
8
+ import { ContextQueueService, DatabaseService } from '@dxos/functions';
9
+ import { faker } from '@dxos/random';
10
+ import { renderObjectLink } from '@dxos/react-ui-components';
11
+ import { type Actor, type ContentBlock, Message, Organization } from '@dxos/types';
12
+ import { trim } from '@dxos/util';
13
+
14
+ export const createMessage = (role: Actor.Role, blocks: ContentBlock.Any[]): Message.Message => {
15
+ return Obj.make(Message.Message, {
16
+ created: new Date().toISOString(),
17
+ sender: { role },
18
+ blocks,
19
+ });
20
+ };
21
+
22
+ export type MessageGenerator = Effect.Effect<void, never, DatabaseService | ContextQueueService>;
23
+
24
+ export const createMessageGenerator = (): MessageGenerator[] => [
25
+ Effect.gen(function* () {
26
+ const { queue } = yield* ContextQueueService;
27
+ yield* Effect.promise(() =>
28
+ queue.append([
29
+ createMessage('user', [
30
+ {
31
+ _tag: 'text',
32
+ text: faker.lorem.sentence(5),
33
+ },
34
+ ]),
35
+ ]),
36
+ );
37
+ }),
38
+
39
+ Effect.gen(function* () {
40
+ const { queue } = yield* ContextQueueService;
41
+ yield* Effect.promise(() =>
42
+ queue.append([
43
+ createMessage('assistant', [
44
+ {
45
+ _tag: 'text',
46
+ text:
47
+ trim`
48
+ ## Markdown
49
+ Here is a [link](https://dxos.org)
50
+
51
+ And some **bold** text.
52
+
53
+ And some JSON
54
+ \`\`\`json
55
+ {
56
+ "key": "value"
57
+ }
58
+ \`\`\`
59
+
60
+ And some code
61
+ \`\`\`js
62
+ const x = 1;
63
+ \`\`\`
64
+ ` + '\n',
65
+ },
66
+ {
67
+ _tag: 'text',
68
+ disposition: 'cot',
69
+ text:
70
+ [
71
+ faker.lorem.paragraph(),
72
+ '',
73
+ ...Array.from({
74
+ length: faker.number.int({ min: 3, max: 5 }),
75
+ }).map((_, idx) => `${idx + 1}. ${faker.lorem.paragraph()}`),
76
+ ].join('\n') + '\n',
77
+ },
78
+ ]),
79
+ ]),
80
+ );
81
+ }),
82
+
83
+ Effect.gen(function* () {
84
+ const { queue } = yield* ContextQueueService;
85
+ yield* Effect.promise(() =>
86
+ queue.append([
87
+ createMessage('assistant', [
88
+ {
89
+ _tag: 'text',
90
+ text: 'How can I help?',
91
+ },
92
+ {
93
+ _tag: 'suggestion',
94
+ text: 'List tools',
95
+ },
96
+ {
97
+ _tag: 'suggestion',
98
+ text: 'Show info',
99
+ },
100
+ {
101
+ _tag: 'suggestion',
102
+ text: faker.lorem.paragraph(),
103
+ },
104
+ ]),
105
+ createMessage('assistant', [
106
+ {
107
+ _tag: 'text',
108
+ text: 'Select an option:',
109
+ },
110
+ {
111
+ _tag: 'select',
112
+ options: ['Option 1', 'Option 2', 'Option 3'],
113
+ },
114
+ ]),
115
+ ]),
116
+ );
117
+ }),
118
+
119
+ Effect.gen(function* () {
120
+ const { queue } = yield* ContextQueueService;
121
+ yield* Effect.promise(() =>
122
+ queue.append([
123
+ createMessage('assistant', [
124
+ {
125
+ _tag: 'toolkit',
126
+ },
127
+ ]),
128
+ ]),
129
+ );
130
+ }),
131
+
132
+ Effect.gen(function* () {
133
+ const { queue } = yield* ContextQueueService;
134
+ yield* Effect.promise(() =>
135
+ queue.append([
136
+ createMessage('user', [
137
+ {
138
+ _tag: 'text',
139
+ text: faker.lorem.sentence(5),
140
+ },
141
+ ]),
142
+ ]),
143
+ );
144
+ }),
145
+
146
+ Effect.gen(function* () {
147
+ const { queue } = yield* ContextQueueService;
148
+ const { db } = yield* DatabaseService;
149
+ const obj1 = db.add(Obj.make(Organization.Organization, { name: 'DXOS' }));
150
+ // const obj2 = db.add(Obj.make(Person.Person, { fullName: 'Alice' }));
151
+ // const obj3 = db.add(Obj.make(Person.Person, { fullName: 'Bob' }));
152
+ // const obj4 = db.add(Obj.make(Person.Person, { fullName: 'Charlie' }));
153
+ yield* Effect.promise(() =>
154
+ queue.append([
155
+ createMessage('assistant', [
156
+ // Inline tag.
157
+ {
158
+ _tag: 'text',
159
+ text: [faker.lorem.paragraph(), renderObjectLink(obj1), faker.lorem.paragraph(), '\n'].join(' '),
160
+ },
161
+
162
+ // Inline cards.
163
+ // ...[obj1, obj2, obj3, obj4].map(
164
+ // (obj) =>
165
+ // ({
166
+ // _tag: 'text',
167
+ // text: renderObjectLink(obj, true) + '\n',
168
+ // }) satisfies ContentBlock.Text,
169
+ // ),
170
+ ]),
171
+ ]),
172
+ );
173
+ }),
174
+
175
+ Effect.gen(function* () {
176
+ const { queue } = yield* ContextQueueService;
177
+ yield* Effect.promise(() =>
178
+ queue.append([
179
+ createMessage('assistant', [
180
+ {
181
+ _tag: 'text',
182
+ text: faker.lorem.paragraph() + '\n',
183
+ },
184
+ ]),
185
+ createMessage('assistant', [
186
+ {
187
+ _tag: 'toolCall',
188
+ toolCallId: '1234',
189
+ name: 'search',
190
+ input: JSON.stringify({}),
191
+ providerExecuted: false,
192
+ },
193
+ ]),
194
+ createMessage('user', [
195
+ {
196
+ _tag: 'toolResult',
197
+ toolCallId: '1234',
198
+ name: 'search',
199
+ result: 'This is a tool result.',
200
+ providerExecuted: false,
201
+ },
202
+ ]),
203
+ ]),
204
+ );
205
+ }),
206
+
207
+ Effect.gen(function* () {
208
+ const { queue } = yield* ContextQueueService;
209
+ yield* Effect.promise(() =>
210
+ queue.append([
211
+ createMessage('assistant', [
212
+ {
213
+ _tag: 'text',
214
+ text: faker.lorem.paragraph() + '\n',
215
+ },
216
+ ]),
217
+ createMessage('assistant', [
218
+ {
219
+ _tag: 'toolCall',
220
+ toolCallId: '4567',
221
+ name: 'create',
222
+ input: JSON.stringify({}),
223
+ providerExecuted: false,
224
+ },
225
+ ]),
226
+ createMessage('user', [
227
+ {
228
+ _tag: 'toolResult',
229
+ toolCallId: '4567',
230
+ name: 'create',
231
+ result: 'This is a tool result.',
232
+ providerExecuted: false,
233
+ },
234
+ ]),
235
+ createMessage('assistant', [
236
+ {
237
+ _tag: 'text',
238
+ text:
239
+ Array.from({ length: faker.number.int({ min: 2, max: 3 }) })
240
+ .map(() => faker.lorem.paragraph())
241
+ .join('\n\n') + '\n',
242
+ },
243
+ ]),
244
+ ]),
245
+ );
246
+ }),
247
+
248
+ Effect.gen(function* () {
249
+ const { queue } = yield* ContextQueueService;
250
+ yield* Effect.promise(() =>
251
+ queue.append([
252
+ createMessage('assistant', [
253
+ {
254
+ _tag: 'text',
255
+ text: faker.lorem.paragraph(),
256
+ },
257
+ ]),
258
+ ]),
259
+ );
260
+ }),
261
+ ];
@@ -4,16 +4,10 @@
4
4
 
5
5
  import { Obj } from '@dxos/echo';
6
6
 
7
- import {
8
- type ApiAuthorization,
9
- type BaseServiceRegistry,
10
- type ServiceQuery,
11
- ServiceType,
12
- categoryIcons,
13
- } from '../types';
7
+ import { type ApiAuthorization, type BaseServiceRegistry, ServiceType, categoryIcons } from '../types';
14
8
 
15
9
  export class MockServiceRegistry implements BaseServiceRegistry {
16
- async queryServices(query?: ServiceQuery): Promise<ServiceType[]> {
10
+ async queryServices(): Promise<ServiceType[]> {
17
11
  return TEST_SERVICES;
18
12
  }
19
13
  }