@dxos/plugin-assistant 0.8.4-main.69d29f4 → 0.8.4-main.6fa680abb7

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 (418) hide show
  1. package/dist/lib/browser/AssistantSettings-PP6JSHWB.mjs +93 -0
  2. package/dist/lib/browser/AssistantSettings-PP6JSHWB.mjs.map +7 -0
  3. package/dist/lib/browser/BlueprintArticle-H6R33TZZ.mjs +35 -0
  4. package/dist/lib/browser/BlueprintArticle-H6R33TZZ.mjs.map +7 -0
  5. package/dist/lib/browser/{ChatCompanion-ECQYUQ2B.mjs → ChatCompanion-GXS6DK4X.mjs} +75 -26
  6. package/dist/lib/browser/ChatCompanion-GXS6DK4X.mjs.map +7 -0
  7. package/dist/lib/browser/ChatContainer-SMSZXEF5.mjs +12 -0
  8. package/dist/lib/browser/{ChatDialog-SMK4RSZU.mjs → ChatDialog-ZCVPPONM.mjs} +9 -9
  9. package/dist/lib/browser/ChatDialog-ZCVPPONM.mjs.map +7 -0
  10. package/dist/lib/browser/ProjectArticle-QDBTIFNE.mjs +91 -0
  11. package/dist/lib/browser/ProjectArticle-QDBTIFNE.mjs.map +7 -0
  12. package/dist/lib/browser/ProjectSettings-L5MCDUXK.mjs +232 -0
  13. package/dist/lib/browser/ProjectSettings-L5MCDUXK.mjs.map +7 -0
  14. package/dist/lib/browser/PromptArticle-G5YSAEGK.mjs +71 -0
  15. package/dist/lib/browser/PromptArticle-G5YSAEGK.mjs.map +7 -0
  16. package/dist/lib/browser/TriggerStatus-X35WDCK5.mjs +112 -0
  17. package/dist/lib/browser/TriggerStatus-X35WDCK5.mjs.map +7 -0
  18. package/dist/lib/browser/{ai-service-5GUDOEWF.mjs → ai-service-CY2BYPH6.mjs} +5 -4
  19. package/dist/lib/browser/ai-service-CY2BYPH6.mjs.map +7 -0
  20. package/dist/lib/browser/{app-graph-builder-DSNH2OMY.mjs → app-graph-builder-ECQCWGCN.mjs} +54 -42
  21. package/dist/lib/browser/app-graph-builder-ECQCWGCN.mjs.map +7 -0
  22. package/dist/lib/browser/blueprint-definition-CKG4TQ2J.mjs +35 -0
  23. package/dist/lib/browser/blueprint-definition-CKG4TQ2J.mjs.map +7 -0
  24. package/dist/lib/browser/blueprints/index.mjs +3 -7
  25. package/dist/lib/browser/{chunk-EXVT7D4B.mjs → chunk-2VIEX4RA.mjs} +3 -3
  26. package/dist/lib/browser/{chunk-EXVT7D4B.mjs.map → chunk-2VIEX4RA.mjs.map} +1 -1
  27. package/dist/lib/browser/{chunk-V772AMZM.mjs → chunk-734CB3XG.mjs} +28 -48
  28. package/dist/lib/browser/chunk-734CB3XG.mjs.map +7 -0
  29. package/dist/lib/browser/{chunk-3JYPE2MM.mjs → chunk-A346P45I.mjs} +623 -330
  30. package/dist/lib/browser/chunk-A346P45I.mjs.map +7 -0
  31. package/dist/lib/browser/{chunk-ML3QCFKA.mjs → chunk-JYY5AD65.mjs} +50 -29
  32. package/dist/lib/browser/chunk-JYY5AD65.mjs.map +7 -0
  33. package/dist/lib/browser/{ChatContainer-QCCOFBUX.mjs → chunk-WP4WY2Y6.mjs} +18 -22
  34. package/dist/lib/browser/chunk-WP4WY2Y6.mjs.map +7 -0
  35. package/dist/lib/browser/chunk-ZZRRSIQQ.mjs +26 -0
  36. package/dist/lib/browser/chunk-ZZRRSIQQ.mjs.map +7 -0
  37. package/dist/lib/browser/{edge-model-resolver-26BOY6HY.mjs → edge-model-resolver-YTMFQEN5.mjs} +4 -3
  38. package/dist/lib/browser/edge-model-resolver-YTMFQEN5.mjs.map +7 -0
  39. package/dist/lib/browser/index.mjs +109 -85
  40. package/dist/lib/browser/index.mjs.map +4 -4
  41. package/dist/lib/browser/{local-model-resolver-ZFIM6GGV.mjs → local-model-resolver-CGRQH37T.mjs} +4 -3
  42. package/dist/lib/browser/local-model-resolver-CGRQH37T.mjs.map +7 -0
  43. package/dist/lib/browser/meta.json +1 -1
  44. package/dist/lib/browser/{operation-resolver-7XJLBRQY.mjs → operation-resolver-DYSWWNVG.mjs} +34 -43
  45. package/dist/lib/browser/operation-resolver-DYSWWNVG.mjs.map +7 -0
  46. package/dist/lib/browser/react-surface-M3GSSFPC.mjs +142 -0
  47. package/dist/lib/browser/react-surface-M3GSSFPC.mjs.map +7 -0
  48. package/dist/lib/browser/{settings-4ZDLUMYE.mjs → settings-NC5DQWES.mjs} +6 -5
  49. package/dist/lib/browser/settings-NC5DQWES.mjs.map +7 -0
  50. package/dist/lib/browser/{state-AN6336ZX.mjs → state-EMIKHGYZ.mjs} +3 -3
  51. package/dist/lib/browser/toolkit-XRSBBB3L.mjs +16 -0
  52. package/dist/lib/browser/toolkit-XRSBBB3L.mjs.map +7 -0
  53. package/dist/lib/browser/types/index.mjs +2 -2
  54. package/dist/lib/node-esm/AssistantSettings-3MNGBQB2.mjs +94 -0
  55. package/dist/lib/node-esm/AssistantSettings-3MNGBQB2.mjs.map +7 -0
  56. package/dist/lib/node-esm/BlueprintArticle-2KYFUQKY.mjs +36 -0
  57. package/dist/lib/node-esm/BlueprintArticle-2KYFUQKY.mjs.map +7 -0
  58. package/dist/lib/node-esm/{ChatCompanion-Q4FUZ2MW.mjs → ChatCompanion-MPQGSWZB.mjs} +75 -26
  59. package/dist/lib/node-esm/ChatCompanion-MPQGSWZB.mjs.map +7 -0
  60. package/dist/lib/node-esm/ChatContainer-DMOAYUUM.mjs +13 -0
  61. package/dist/lib/node-esm/{ChatDialog-AP45PVZR.mjs → ChatDialog-PV2EU2XM.mjs} +9 -9
  62. package/dist/lib/node-esm/ChatDialog-PV2EU2XM.mjs.map +7 -0
  63. package/dist/lib/node-esm/ProjectArticle-BCIBESJN.mjs +92 -0
  64. package/dist/lib/node-esm/ProjectArticle-BCIBESJN.mjs.map +7 -0
  65. package/dist/lib/node-esm/ProjectSettings-K3YBQWDD.mjs +233 -0
  66. package/dist/lib/node-esm/ProjectSettings-K3YBQWDD.mjs.map +7 -0
  67. package/dist/lib/node-esm/PromptArticle-HAGZPZWV.mjs +72 -0
  68. package/dist/lib/node-esm/PromptArticle-HAGZPZWV.mjs.map +7 -0
  69. package/dist/lib/node-esm/TriggerStatus-V3QMIE7T.mjs +113 -0
  70. package/dist/lib/node-esm/TriggerStatus-V3QMIE7T.mjs.map +7 -0
  71. package/dist/lib/node-esm/{ai-service-PXKKCFIF.mjs → ai-service-ZI3A6RVG.mjs} +5 -4
  72. package/dist/lib/node-esm/ai-service-ZI3A6RVG.mjs.map +7 -0
  73. package/dist/lib/node-esm/{app-graph-builder-TJCUEXW5.mjs → app-graph-builder-YPHP6X6W.mjs} +54 -42
  74. package/dist/lib/node-esm/app-graph-builder-YPHP6X6W.mjs.map +7 -0
  75. package/dist/lib/node-esm/blueprint-definition-UZWGSFBI.mjs +36 -0
  76. package/dist/lib/node-esm/blueprint-definition-UZWGSFBI.mjs.map +7 -0
  77. package/dist/lib/node-esm/blueprints/index.mjs +3 -7
  78. package/dist/lib/node-esm/{chunk-XI5T3MJC.mjs → chunk-5DLYAEBK.mjs} +623 -330
  79. package/dist/lib/node-esm/chunk-5DLYAEBK.mjs.map +7 -0
  80. package/dist/lib/node-esm/chunk-AK3JJ76X.mjs +28 -0
  81. package/dist/lib/node-esm/chunk-AK3JJ76X.mjs.map +7 -0
  82. package/dist/lib/node-esm/{chunk-ZRIPP7YF.mjs → chunk-JMBYVUD6.mjs} +50 -29
  83. package/dist/lib/node-esm/chunk-JMBYVUD6.mjs.map +7 -0
  84. package/dist/lib/node-esm/{chunk-355W5B27.mjs → chunk-JQAXFBBU.mjs} +28 -48
  85. package/dist/lib/node-esm/chunk-JQAXFBBU.mjs.map +7 -0
  86. package/dist/lib/node-esm/{chunk-POWB2BPC.mjs → chunk-TEYTGR67.mjs} +3 -3
  87. package/dist/lib/node-esm/{chunk-POWB2BPC.mjs.map → chunk-TEYTGR67.mjs.map} +1 -1
  88. package/dist/lib/node-esm/{ChatContainer-AKI33HIB.mjs → chunk-ZTL6HRDB.mjs} +18 -22
  89. package/dist/lib/node-esm/chunk-ZTL6HRDB.mjs.map +7 -0
  90. package/dist/lib/node-esm/{edge-model-resolver-G5KMODPO.mjs → edge-model-resolver-CMJ3KNLQ.mjs} +4 -3
  91. package/dist/lib/node-esm/edge-model-resolver-CMJ3KNLQ.mjs.map +7 -0
  92. package/dist/lib/node-esm/index.mjs +109 -85
  93. package/dist/lib/node-esm/index.mjs.map +4 -4
  94. package/dist/lib/node-esm/{local-model-resolver-KDZLYI7Y.mjs → local-model-resolver-FFDAKOXN.mjs} +4 -3
  95. package/dist/lib/node-esm/local-model-resolver-FFDAKOXN.mjs.map +7 -0
  96. package/dist/lib/node-esm/meta.json +1 -1
  97. package/dist/lib/node-esm/{operation-resolver-SX4WMNA7.mjs → operation-resolver-EE4EBO2Y.mjs} +34 -43
  98. package/dist/lib/node-esm/operation-resolver-EE4EBO2Y.mjs.map +7 -0
  99. package/dist/lib/node-esm/react-surface-U3PGFTKA.mjs +143 -0
  100. package/dist/lib/node-esm/react-surface-U3PGFTKA.mjs.map +7 -0
  101. package/dist/lib/node-esm/{settings-CQEOHR3R.mjs → settings-OOAN5LAO.mjs} +6 -5
  102. package/dist/lib/node-esm/settings-OOAN5LAO.mjs.map +7 -0
  103. package/dist/lib/node-esm/{state-HDON4REW.mjs → state-7A7QPQKK.mjs} +3 -3
  104. package/dist/lib/node-esm/toolkit-5IWGLUF4.mjs +17 -0
  105. package/dist/lib/node-esm/toolkit-5IWGLUF4.mjs.map +7 -0
  106. package/dist/lib/node-esm/types/index.mjs +2 -2
  107. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  108. package/dist/types/src/blueprints/assistant/blueprint.d.ts +4 -0
  109. package/dist/types/src/blueprints/assistant/blueprint.d.ts.map +1 -0
  110. package/dist/types/src/blueprints/assistant/blueprint.test.d.ts +2 -0
  111. package/dist/types/src/blueprints/assistant/blueprint.test.d.ts.map +1 -0
  112. package/dist/types/src/blueprints/assistant/index.d.ts +2 -0
  113. package/dist/types/src/blueprints/assistant/index.d.ts.map +1 -0
  114. package/dist/types/src/blueprints/index.d.ts +1 -6
  115. package/dist/types/src/blueprints/index.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/ai-service/ai-service.d.ts +3 -2
  117. package/dist/types/src/capabilities/ai-service/ai-service.d.ts.map +1 -1
  118. package/dist/types/src/capabilities/ai-service/index.d.ts +1 -1
  119. package/dist/types/src/capabilities/ai-service/index.d.ts.map +1 -1
  120. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +1 -1
  121. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -1
  122. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +4 -19
  123. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -1
  124. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +1 -2
  125. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -1
  126. package/dist/types/src/capabilities/edge-model-resolver/edge-model-resolver.d.ts +4 -3
  127. package/dist/types/src/capabilities/edge-model-resolver/edge-model-resolver.d.ts.map +1 -1
  128. package/dist/types/src/capabilities/index.d.ts +0 -1
  129. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  130. package/dist/types/src/capabilities/local-model-resolver/local-model-resolver.d.ts +4 -3
  131. package/dist/types/src/capabilities/local-model-resolver/local-model-resolver.d.ts.map +1 -1
  132. package/dist/types/src/capabilities/operation-resolver/index.d.ts +1 -1
  133. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -1
  134. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
  135. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
  136. package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
  137. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
  138. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
  139. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
  140. package/dist/types/src/capabilities/settings/index.d.ts +1 -1
  141. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -1
  142. package/dist/types/src/capabilities/settings/settings.d.ts +4 -3
  143. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -1
  144. package/dist/types/src/capabilities/state/state.d.ts +1 -1
  145. package/dist/types/src/capabilities/toolkit/index.d.ts +1 -1
  146. package/dist/types/src/capabilities/toolkit/index.d.ts.map +1 -1
  147. package/dist/types/src/capabilities/toolkit/toolkit.d.ts +3 -2
  148. package/dist/types/src/capabilities/toolkit/toolkit.d.ts.map +1 -1
  149. package/dist/types/src/components/Chat/Chat.d.ts +11 -7
  150. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  151. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts +2 -2
  152. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts.map +1 -1
  153. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  154. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
  155. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -1
  156. package/dist/types/src/components/ChatThread/ChatThread.d.ts +2 -2
  157. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  158. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +128 -8
  159. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  160. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
  161. package/dist/types/src/components/ChatThread/sync.d.ts.map +1 -1
  162. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +125 -5
  163. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  164. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  165. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +125 -5
  166. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  167. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +4 -4
  168. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -1
  169. package/dist/types/src/components/Toolbox/Toolbox.d.ts +2 -2
  170. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  171. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +125 -5
  172. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  173. package/dist/types/src/components/Typewriter/AssistantToolbar.d.ts +2 -2
  174. package/dist/types/src/components/Typewriter/AssistantToolbar.d.ts.map +1 -1
  175. package/dist/types/src/components/Typewriter/Typewriter.stories.d.ts.map +1 -1
  176. package/dist/types/src/components/index.d.ts +0 -12
  177. package/dist/types/src/components/index.d.ts.map +1 -1
  178. package/dist/types/src/{components → containers}/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  179. package/dist/types/src/containers/AssistantSettings/index.d.ts +3 -0
  180. package/dist/types/src/containers/AssistantSettings/index.d.ts.map +1 -0
  181. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts +6 -0
  182. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts.map +1 -0
  183. package/dist/types/src/containers/BlueprintArticle/index.d.ts +3 -0
  184. package/dist/types/src/containers/BlueprintArticle/index.d.ts.map +1 -0
  185. package/dist/types/src/{components → containers/ChatCompanion}/ChatCompanion.d.ts +2 -3
  186. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -0
  187. package/dist/types/src/containers/ChatCompanion/index.d.ts +3 -0
  188. package/dist/types/src/containers/ChatCompanion/index.d.ts.map +1 -0
  189. package/dist/types/src/{components → containers/ChatContainer}/ChatContainer.d.ts +6 -6
  190. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +1 -0
  191. package/dist/types/src/containers/ChatContainer/index.d.ts +3 -0
  192. package/dist/types/src/containers/ChatContainer/index.d.ts.map +1 -0
  193. package/dist/types/src/{components → containers/ChatDialog}/ChatDialog.d.ts +2 -3
  194. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -0
  195. package/dist/types/src/containers/ChatDialog/index.d.ts +3 -0
  196. package/dist/types/src/containers/ChatDialog/index.d.ts.map +1 -0
  197. package/dist/types/src/containers/Project/ProjectArticle.d.ts +7 -0
  198. package/dist/types/src/containers/Project/ProjectArticle.d.ts.map +1 -0
  199. package/dist/types/src/containers/Project/ProjectSettings.d.ts +6 -0
  200. package/dist/types/src/containers/Project/ProjectSettings.d.ts.map +1 -0
  201. package/dist/types/src/containers/Project/index.d.ts +7 -0
  202. package/dist/types/src/containers/Project/index.d.ts.map +1 -0
  203. package/dist/types/src/containers/Project/triggers.d.ts +6 -0
  204. package/dist/types/src/containers/Project/triggers.d.ts.map +1 -0
  205. package/dist/types/src/containers/PromptArticle/PromptArticle.d.ts +6 -0
  206. package/dist/types/src/containers/PromptArticle/PromptArticle.d.ts.map +1 -0
  207. package/dist/types/src/containers/PromptArticle/index.d.ts +3 -0
  208. package/dist/types/src/containers/PromptArticle/index.d.ts.map +1 -0
  209. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts +4 -0
  210. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -0
  211. package/dist/types/src/containers/TriggerStatus/index.d.ts +3 -0
  212. package/dist/types/src/containers/TriggerStatus/index.d.ts.map +1 -0
  213. package/dist/types/src/containers/index.d.ts +10 -0
  214. package/dist/types/src/containers/index.d.ts.map +1 -0
  215. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -1
  216. package/dist/types/src/hooks/useChatProcessor.d.ts +2 -1
  217. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  218. package/dist/types/src/hooks/useChatServices.d.ts +2 -2
  219. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
  220. package/dist/types/src/hooks/useChatToolbarActions.d.ts +2 -2
  221. package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -1
  222. package/dist/types/src/hooks/useFilteredTypes.d.ts +1 -1
  223. package/dist/types/src/hooks/useFilteredTypes.d.ts.map +1 -1
  224. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -1
  225. package/dist/types/src/index.d.ts +1 -0
  226. package/dist/types/src/index.d.ts.map +1 -1
  227. package/dist/types/src/processor/processor.d.ts +7 -3
  228. package/dist/types/src/processor/processor.d.ts.map +1 -1
  229. package/dist/types/src/processor/update-name.d.ts +2 -2
  230. package/dist/types/src/processor/update-name.d.ts.map +1 -1
  231. package/dist/types/src/translations.d.ts +125 -5
  232. package/dist/types/src/translations.d.ts.map +1 -1
  233. package/dist/types/src/types/Assistant.d.ts +5 -27
  234. package/dist/types/src/types/Assistant.d.ts.map +1 -1
  235. package/dist/types/src/types/AssistantAction.d.ts +13 -15
  236. package/dist/types/src/types/AssistantAction.d.ts.map +1 -1
  237. package/dist/types/src/types/index.d.ts +1 -0
  238. package/dist/types/src/types/index.d.ts.map +1 -1
  239. package/dist/types/src/types/service.d.ts.map +1 -1
  240. package/dist/types/tsconfig.tsbuildinfo +1 -1
  241. package/package.json +95 -92
  242. package/src/AssistantPlugin.tsx +64 -36
  243. package/src/blueprints/assistant/blueprint.conversations.json +1 -0
  244. package/src/blueprints/assistant/blueprint.test.ts +48 -0
  245. package/src/blueprints/assistant/blueprint.ts +27 -0
  246. package/src/blueprints/assistant/index.ts +5 -0
  247. package/src/blueprints/index.ts +1 -8
  248. package/src/capabilities/ai-service/ai-service.ts +4 -3
  249. package/src/capabilities/app-graph-builder/app-graph-builder.ts +48 -31
  250. package/src/capabilities/blueprint-definition/blueprint-definition.ts +32 -42
  251. package/src/capabilities/blueprint-definition/index.ts +0 -1
  252. package/src/capabilities/edge-model-resolver/edge-model-resolver.ts +4 -3
  253. package/src/capabilities/index.ts +0 -1
  254. package/src/capabilities/local-model-resolver/local-model-resolver.ts +4 -3
  255. package/src/capabilities/operation-resolver/operation-resolver.ts +29 -26
  256. package/src/capabilities/react-surface/react-surface.tsx +53 -29
  257. package/src/capabilities/settings/settings.ts +3 -2
  258. package/src/capabilities/toolkit/toolkit.ts +5 -16
  259. package/src/components/Chat/Chat.tsx +67 -30
  260. package/src/components/ChatProgress/ChatProgress.tsx +4 -5
  261. package/src/components/ChatPrompt/ChatActions.tsx +9 -1
  262. package/src/components/ChatPrompt/ChatOptions.tsx +29 -9
  263. package/src/components/ChatPrompt/ChatReferences.tsx +14 -4
  264. package/src/components/ChatThread/ChatThread.stories.tsx +11 -11
  265. package/src/components/ChatThread/ChatThread.tsx +15 -6
  266. package/src/components/ChatThread/Link.tsx +1 -1
  267. package/src/components/ChatThread/registry.tsx +51 -18
  268. package/src/components/ChatThread/sync.test.ts +2 -0
  269. package/src/components/ChatThread/sync.ts +14 -8
  270. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +3 -3
  271. package/src/components/TemplateEditor/TemplateEditor.tsx +2 -2
  272. package/src/components/TemplateEditor/TemplateForm.stories.tsx +3 -3
  273. package/src/components/TemplateEditor/TemplateForm.tsx +6 -7
  274. package/src/components/TemplateEditor/extensions/handlebars-extension.ts +4 -4
  275. package/src/components/ToolBlock/ToolBlock.tsx +15 -15
  276. package/src/components/Toolbox/Toolbox.stories.tsx +3 -3
  277. package/src/components/Toolbox/Toolbox.tsx +49 -48
  278. package/src/components/Typewriter/AssistantToolbar.tsx +3 -3
  279. package/src/components/Typewriter/Typewriter.stories.tsx +18 -15
  280. package/src/components/Typewriter/Typewriter.tsx +1 -1
  281. package/src/components/Typewriter/assistant-extension.tsx +3 -5
  282. package/src/components/index.ts +0 -9
  283. package/src/{components → containers}/AssistantSettings/AssistantSettings.tsx +15 -15
  284. package/src/containers/AssistantSettings/index.ts +7 -0
  285. package/src/containers/BlueprintArticle/BlueprintArticle.tsx +29 -0
  286. package/src/containers/BlueprintArticle/index.ts +7 -0
  287. package/src/{components → containers/ChatCompanion}/ChatCompanion.tsx +84 -22
  288. package/src/containers/ChatCompanion/index.ts +7 -0
  289. package/src/containers/ChatContainer/ChatContainer.tsx +69 -0
  290. package/src/containers/ChatContainer/index.ts +7 -0
  291. package/src/{components → containers/ChatDialog}/ChatDialog.tsx +7 -9
  292. package/src/containers/ChatDialog/index.ts +7 -0
  293. package/src/containers/Project/ProjectArticle.tsx +117 -0
  294. package/src/containers/Project/ProjectSettings.tsx +134 -0
  295. package/src/containers/Project/index.ts +16 -0
  296. package/src/containers/Project/triggers.ts +149 -0
  297. package/src/containers/PromptArticle/PromptArticle.tsx +59 -0
  298. package/src/containers/PromptArticle/index.ts +7 -0
  299. package/src/containers/TriggerStatus/TriggerStatus.tsx +140 -0
  300. package/src/containers/TriggerStatus/index.ts +7 -0
  301. package/src/containers/index.ts +15 -0
  302. package/src/hooks/useBlueprintRegistry.ts +7 -4
  303. package/src/hooks/useChatProcessor.ts +2 -1
  304. package/src/hooks/useChatServices.ts +3 -3
  305. package/src/hooks/useChatToolbarActions.ts +6 -5
  306. package/src/hooks/useFilteredTypes.ts +2 -2
  307. package/src/hooks/useReferencesProvider.ts +1 -5
  308. package/src/index.ts +1 -0
  309. package/src/meta.ts +2 -2
  310. package/src/processor/processor.test.ts +8 -7
  311. package/src/processor/processor.ts +47 -26
  312. package/src/processor/update-name.ts +2 -3
  313. package/src/testing/test-sequence.ts +3 -3
  314. package/src/testing/test-services.ts +1 -1
  315. package/src/translations.ts +29 -3
  316. package/src/types/Assistant.ts +4 -38
  317. package/src/types/AssistantAction.ts +14 -13
  318. package/src/types/capabilities.ts +2 -2
  319. package/src/types/events.ts +1 -1
  320. package/src/types/index.ts +3 -0
  321. package/src/types/service.ts +4 -4
  322. package/dist/lib/browser/BlueprintArticle-WP3G5GLG.mjs +0 -31
  323. package/dist/lib/browser/BlueprintArticle-WP3G5GLG.mjs.map +0 -7
  324. package/dist/lib/browser/ChatCompanion-ECQYUQ2B.mjs.map +0 -7
  325. package/dist/lib/browser/ChatContainer-QCCOFBUX.mjs.map +0 -7
  326. package/dist/lib/browser/ChatDialog-SMK4RSZU.mjs.map +0 -7
  327. package/dist/lib/browser/PromptArticle-K362ZPAE.mjs +0 -53
  328. package/dist/lib/browser/PromptArticle-K362ZPAE.mjs.map +0 -7
  329. package/dist/lib/browser/ai-service-5GUDOEWF.mjs.map +0 -7
  330. package/dist/lib/browser/app-graph-builder-DSNH2OMY.mjs.map +0 -7
  331. package/dist/lib/browser/blueprint-definition-DGHH7MUU.mjs +0 -14
  332. package/dist/lib/browser/chunk-3JYPE2MM.mjs.map +0 -7
  333. package/dist/lib/browser/chunk-DKQMSMBN.mjs +0 -326
  334. package/dist/lib/browser/chunk-DKQMSMBN.mjs.map +0 -7
  335. package/dist/lib/browser/chunk-ML3QCFKA.mjs.map +0 -7
  336. package/dist/lib/browser/chunk-MRJVYGLU.mjs +0 -208
  337. package/dist/lib/browser/chunk-MRJVYGLU.mjs.map +0 -7
  338. package/dist/lib/browser/chunk-V772AMZM.mjs.map +0 -7
  339. package/dist/lib/browser/chunk-WGQTU6UJ.mjs +0 -41
  340. package/dist/lib/browser/chunk-WGQTU6UJ.mjs.map +0 -7
  341. package/dist/lib/browser/edge-model-resolver-26BOY6HY.mjs.map +0 -7
  342. package/dist/lib/browser/local-model-resolver-ZFIM6GGV.mjs.map +0 -7
  343. package/dist/lib/browser/operation-resolver-7XJLBRQY.mjs.map +0 -7
  344. package/dist/lib/browser/react-surface-NCITRSJJ.mjs +0 -109
  345. package/dist/lib/browser/react-surface-NCITRSJJ.mjs.map +0 -7
  346. package/dist/lib/browser/repair-6QGAKOVM.mjs +0 -54
  347. package/dist/lib/browser/repair-6QGAKOVM.mjs.map +0 -7
  348. package/dist/lib/browser/settings-4ZDLUMYE.mjs.map +0 -7
  349. package/dist/lib/browser/toolkit-7AVTEPMA.mjs +0 -18
  350. package/dist/lib/browser/toolkit-7AVTEPMA.mjs.map +0 -7
  351. package/dist/lib/node-esm/BlueprintArticle-WZ76E2C4.mjs +0 -32
  352. package/dist/lib/node-esm/BlueprintArticle-WZ76E2C4.mjs.map +0 -7
  353. package/dist/lib/node-esm/ChatCompanion-Q4FUZ2MW.mjs.map +0 -7
  354. package/dist/lib/node-esm/ChatContainer-AKI33HIB.mjs.map +0 -7
  355. package/dist/lib/node-esm/ChatDialog-AP45PVZR.mjs.map +0 -7
  356. package/dist/lib/node-esm/PromptArticle-D4HAIIC6.mjs +0 -54
  357. package/dist/lib/node-esm/PromptArticle-D4HAIIC6.mjs.map +0 -7
  358. package/dist/lib/node-esm/ai-service-PXKKCFIF.mjs.map +0 -7
  359. package/dist/lib/node-esm/app-graph-builder-TJCUEXW5.mjs.map +0 -7
  360. package/dist/lib/node-esm/blueprint-definition-SEMDEIYG.mjs +0 -15
  361. package/dist/lib/node-esm/chunk-355W5B27.mjs.map +0 -7
  362. package/dist/lib/node-esm/chunk-75PHXBN3.mjs +0 -327
  363. package/dist/lib/node-esm/chunk-75PHXBN3.mjs.map +0 -7
  364. package/dist/lib/node-esm/chunk-DCA5QWQT.mjs +0 -209
  365. package/dist/lib/node-esm/chunk-DCA5QWQT.mjs.map +0 -7
  366. package/dist/lib/node-esm/chunk-MSBPC4RJ.mjs +0 -42
  367. package/dist/lib/node-esm/chunk-MSBPC4RJ.mjs.map +0 -7
  368. package/dist/lib/node-esm/chunk-XI5T3MJC.mjs.map +0 -7
  369. package/dist/lib/node-esm/chunk-ZRIPP7YF.mjs.map +0 -7
  370. package/dist/lib/node-esm/edge-model-resolver-G5KMODPO.mjs.map +0 -7
  371. package/dist/lib/node-esm/local-model-resolver-KDZLYI7Y.mjs.map +0 -7
  372. package/dist/lib/node-esm/operation-resolver-SX4WMNA7.mjs.map +0 -7
  373. package/dist/lib/node-esm/react-surface-ST6V7LPE.mjs +0 -110
  374. package/dist/lib/node-esm/react-surface-ST6V7LPE.mjs.map +0 -7
  375. package/dist/lib/node-esm/repair-QJ7CQDKU.mjs +0 -55
  376. package/dist/lib/node-esm/repair-QJ7CQDKU.mjs.map +0 -7
  377. package/dist/lib/node-esm/settings-CQEOHR3R.mjs.map +0 -7
  378. package/dist/lib/node-esm/toolkit-OWGCEKOO.mjs +0 -19
  379. package/dist/lib/node-esm/toolkit-OWGCEKOO.mjs.map +0 -7
  380. package/dist/types/src/blueprints/assistant-blueprint.d.ts +0 -209
  381. package/dist/types/src/blueprints/assistant-blueprint.d.ts.map +0 -1
  382. package/dist/types/src/capabilities/repair/index.d.ts +0 -3
  383. package/dist/types/src/capabilities/repair/index.d.ts.map +0 -1
  384. package/dist/types/src/capabilities/repair/repair.d.ts +0 -6
  385. package/dist/types/src/capabilities/repair/repair.d.ts.map +0 -1
  386. package/dist/types/src/components/AssistantSettings/index.d.ts +0 -2
  387. package/dist/types/src/components/AssistantSettings/index.d.ts.map +0 -1
  388. package/dist/types/src/components/BlueprintArticle.d.ts +0 -7
  389. package/dist/types/src/components/BlueprintArticle.d.ts.map +0 -1
  390. package/dist/types/src/components/ChatCompanion.d.ts.map +0 -1
  391. package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
  392. package/dist/types/src/components/ChatDialog.d.ts.map +0 -1
  393. package/dist/types/src/components/PromptArticle.d.ts +0 -7
  394. package/dist/types/src/components/PromptArticle.d.ts.map +0 -1
  395. package/dist/types/src/functions/index.d.ts +0 -4
  396. package/dist/types/src/functions/index.d.ts.map +0 -1
  397. package/dist/types/src/functions/object-list.d.ts +0 -10
  398. package/dist/types/src/functions/object-list.d.ts.map +0 -1
  399. package/dist/types/src/functions/object-load.d.ts +0 -8
  400. package/dist/types/src/functions/object-load.d.ts.map +0 -1
  401. package/dist/types/src/functions/object-search.d.ts +0 -10
  402. package/dist/types/src/functions/object-search.d.ts.map +0 -1
  403. package/src/blueprints/assistant-blueprint.ts +0 -62
  404. package/src/capabilities/repair/index.ts +0 -7
  405. package/src/capabilities/repair/repair.ts +0 -63
  406. package/src/components/AssistantSettings/index.ts +0 -5
  407. package/src/components/BlueprintArticle.tsx +0 -29
  408. package/src/components/ChatContainer.tsx +0 -61
  409. package/src/components/PromptArticle.tsx +0 -50
  410. package/src/functions/index.ts +0 -7
  411. package/src/functions/object-list.ts +0 -49
  412. package/src/functions/object-load.ts +0 -47
  413. package/src/functions/object-search.ts +0 -46
  414. /package/dist/lib/browser/{blueprint-definition-DGHH7MUU.mjs.map → ChatContainer-SMSZXEF5.mjs.map} +0 -0
  415. /package/dist/lib/browser/{state-AN6336ZX.mjs.map → state-EMIKHGYZ.mjs.map} +0 -0
  416. /package/dist/lib/node-esm/{blueprint-definition-SEMDEIYG.mjs.map → ChatContainer-DMOAYUUM.mjs.map} +0 -0
  417. /package/dist/lib/node-esm/{state-HDON4REW.mjs.map → state-7A7QPQKK.mjs.map} +0 -0
  418. /package/dist/types/src/{components → containers}/AssistantSettings/AssistantSettings.d.ts +0 -0
@@ -15,11 +15,11 @@ import { faker } from '@dxos/random';
15
15
  import { useQueue, useSpace } from '@dxos/react-client/echo';
16
16
  import { withClientProvider } from '@dxos/react-client/testing';
17
17
  import { Popover } from '@dxos/react-ui';
18
- import { withLayout, withTheme } from '@dxos/react-ui/testing';
18
+ import { Card } from '@dxos/react-ui';
19
+ import { Loading, withLayout, withTheme } from '@dxos/react-ui/testing';
19
20
  import { MarkdownStream } from '@dxos/react-ui-components';
20
21
  import { EditorPreviewProvider, useEditorPreview } from '@dxos/react-ui-editor';
21
- import { Card } from '@dxos/react-ui-mosaic';
22
- import { render } from '@dxos/storybook-utils';
22
+
23
23
  import { type Message, Organization, Person } from '@dxos/types';
24
24
 
25
25
  import { createMessageGenerator } from '../../testing';
@@ -56,7 +56,7 @@ const DefaultStory = ({ generator = [], delay = 0, wait, ...props }: StoryProps)
56
56
  }
57
57
  }
58
58
  setDone(true);
59
- }).pipe(Effect.provide(Layer.mergeAll(Database.Service.layer(space.db), ContextQueueService.layer(queue)))),
59
+ }).pipe(Effect.provide(Layer.mergeAll(Database.layer(space.db), ContextQueueService.layer(queue)))),
60
60
  );
61
61
 
62
62
  return () => {
@@ -65,11 +65,11 @@ const DefaultStory = ({ generator = [], delay = 0, wait, ...props }: StoryProps)
65
65
  }, [space, queue, generator]);
66
66
 
67
67
  if (wait && !done) {
68
- return null;
68
+ return <Loading data={{ wait, done }} />;
69
69
  }
70
70
 
71
71
  return (
72
- <EditorPreviewProvider onLookup={async ({ label, ref }) => ({ label, text: ref })}>
72
+ <EditorPreviewProvider onLookup={async ({ dxn, label }) => ({ label, text: dxn })}>
73
73
  <ChatThread {...props} messages={queue?.objects} />
74
74
  <PreviewCard />
75
75
  </EditorPreviewProvider>
@@ -95,11 +95,11 @@ const PreviewCard = () => {
95
95
  };
96
96
 
97
97
  const meta = {
98
- title: 'plugins/plugin-assistant/ChatThread',
98
+ title: 'plugins/plugin-assistant/components/ChatThread',
99
99
  component: ChatThread,
100
- render: render(DefaultStory),
100
+ render: DefaultStory,
101
101
  decorators: [
102
- withTheme,
102
+ withTheme(),
103
103
  withLayout({ layout: 'column' }),
104
104
  withClientProvider({
105
105
  createIdentity: true,
@@ -135,7 +135,7 @@ export const Delayed: Story = {
135
135
 
136
136
  export const Raw: Story = {
137
137
  render: () => (
138
- <div className='contents' style={{ '--user-fill': 'var(--dx-amberFill)' } as CSSProperties}>
138
+ <div className='contents' style={{ '--user-fill': 'var(--color-amber-fill)' } as CSSProperties}>
139
139
  <MarkdownStream content={TEXT} />
140
140
  </div>
141
141
  ),
@@ -143,7 +143,7 @@ export const Raw: Story = {
143
143
 
144
144
  export const Static: Story = {
145
145
  render: () => (
146
- <div className='contents' style={{ '--user-fill': 'var(--dx-amberFill)' } as CSSProperties}>
146
+ <div className='contents' style={{ '--user-fill': 'var(--color-amber-fill)' } as CSSProperties}>
147
147
  <MarkdownStream content={TEXT} registry={componentRegistry} />
148
148
  </div>
149
149
  ),
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import React, { type CSSProperties, forwardRef, useCallback, useEffect, useMemo } from 'react';
5
+ import React, { type CSSProperties, forwardRef, useCallback, useEffect, useMemo, useState } from 'react';
6
6
 
7
7
  import { PublicKey } from '@dxos/keys';
8
8
  import { type Identity } from '@dxos/react-client/halo';
@@ -27,13 +27,22 @@ export type ChatThreadProps = ThemedClassName<
27
27
  >;
28
28
 
29
29
  // TODO(burdon): Memo thread position.
30
- export const ChatThread = forwardRef<MarkdownStreamController, ChatThreadProps>(
30
+ export const ChatThread = forwardRef<MarkdownStreamController | null, ChatThreadProps>(
31
31
  (
32
32
  { classNames, identity, messages = [], error, cursor = false, fadeIn = true, debug = false, onEvent },
33
33
  forwardedRef,
34
34
  ) => {
35
35
  const controllerRef = useForwardedRef(forwardedRef);
36
- const controller = controllerRef.current;
36
+ const [controller, setController] = useState<MarkdownStreamController | null>(null);
37
+
38
+ // Callback ref to capture when MarkdownStream is mounted and trigger re-render.
39
+ const refCallback = useCallback(
40
+ (node: MarkdownStreamController | null) => {
41
+ controllerRef.current = node;
42
+ setController(node);
43
+ },
44
+ [controllerRef],
45
+ );
37
46
 
38
47
  const userHue = useMemo(
39
48
  () => identity?.profile?.data?.hue || keyToFallback(identity?.identityKey ?? PublicKey.random()).hue,
@@ -70,11 +79,11 @@ export const ChatThread = forwardRef<MarkdownStreamController, ChatThreadProps>(
70
79
  return (
71
80
  <div
72
81
  role='none'
73
- className={mx('flex bs-full is-full justify-center overflow-hidden', classNames)}
74
- style={{ '--user-fill': `var(--dx-${userHue}Fill)` } as CSSProperties}
82
+ className={mx('flex h-full w-full justify-center overflow-hidden', classNames)}
83
+ style={{ '--user-fill': `var(--color-${userHue}-fill)` } as CSSProperties}
75
84
  >
76
85
  <MarkdownStream
77
- ref={controllerRef}
86
+ ref={refCallback}
78
87
  registry={componentRegistry}
79
88
  cursor={cursor}
80
89
  fadeIn={fadeIn}
@@ -19,7 +19,7 @@ export const ObjectLink = ({ space, dxn }: ObjectLinkProps) => {
19
19
 
20
20
  const title = (ref.target && Entity.getLabel(ref.target)) ?? ref.target?.id ?? ref.dxn.toString();
21
21
  return (
22
- <DxAnchor rootclassname='dx-tag--anchor' refid={dxn.toString()}>
22
+ <DxAnchor rootclassname='dx-tag--anchor' dxn={dxn.toString()}>
23
23
  {title}
24
24
  </DxAnchor>
25
25
  );
@@ -5,9 +5,10 @@
5
5
  import React from 'react';
6
6
 
7
7
  import { log } from '@dxos/log';
8
- import { ToggleContainer } from '@dxos/react-ui-components';
8
+ import { TogglePanel } from '@dxos/react-ui-components';
9
9
  import {
10
10
  PromptWidget,
11
+ ReasoningWidget,
11
12
  ReferenceWidget,
12
13
  SelectWidget,
13
14
  SuggestionWidget,
@@ -23,12 +24,21 @@ import { type BlockRenderer, type MessageThreadContext } from './sync';
23
24
 
24
25
  const Fallback = ({ _tag, ...props }: XmlWidgetProps<MessageThreadContext>) => {
25
26
  return (
26
- <ToggleContainer.Root classNames='rounded-sm'>
27
- <ToggleContainer.Header classNames='bg-groupSurface'>{_tag}</ToggleContainer.Header>
28
- <ToggleContainer.Content classNames='bg-modalSurface'>
29
- <Json classNames='!p-2 text-sm' data={props} />
30
- </ToggleContainer.Content>
31
- </ToggleContainer.Root>
27
+ <TogglePanel.Root classNames='rounded-xs'>
28
+ <TogglePanel.Header classNames='bg-group-surface'>{_tag}</TogglePanel.Header>
29
+ <TogglePanel.Content classNames='bg-modal-surface'>
30
+ <Json classNames='p-2! text-sm' data={props} />
31
+ </TogglePanel.Content>
32
+ </TogglePanel.Root>
33
+ );
34
+ };
35
+
36
+ const Summary = ({ text }: { text: string }) => {
37
+ return (
38
+ <TogglePanel.Root classNames='rounded-sm'>
39
+ <TogglePanel.Header classNames='bg-group-surface'>Conversation summarized</TogglePanel.Header>
40
+ <TogglePanel.Content classNames='bg-modal-surface'>{text}</TogglePanel.Content>
41
+ </TogglePanel.Root>
32
42
  );
33
43
  };
34
44
 
@@ -40,21 +50,28 @@ export const componentRegistry: XmlWidgetRegistry = {
40
50
  // Widgets
41
51
  //
42
52
 
43
- ['prompt' as const]: {
53
+ prompt: {
44
54
  block: true,
45
55
  factory: ({ children }) => {
46
56
  const text = getXmlTextChild(children);
47
57
  return text ? new PromptWidget(text) : null;
48
58
  },
49
59
  },
50
- ['reference' as const]: {
60
+ reasoning: {
61
+ block: true,
62
+ factory: ({ children }) => {
63
+ const text = getXmlTextChild(children);
64
+ return text ? new ReasoningWidget(text) : null;
65
+ },
66
+ },
67
+ reference: {
51
68
  block: false,
52
69
  factory: ({ children, ref }) => {
53
70
  const text = getXmlTextChild(children);
54
71
  return text && ref ? new ReferenceWidget(text, ref) : null;
55
72
  },
56
73
  },
57
- ['select' as const]: {
74
+ select: {
58
75
  block: true,
59
76
  factory: ({ children }) => {
60
77
  const options = children
@@ -63,14 +80,14 @@ export const componentRegistry: XmlWidgetRegistry = {
63
80
  return options?.length ? new SelectWidget(options) : null;
64
81
  },
65
82
  },
66
- ['suggestion' as const]: {
83
+ suggestion: {
67
84
  block: true,
68
85
  factory: ({ children }) => {
69
86
  const text = getXmlTextChild(children);
70
87
  return text ? new SuggestionWidget(text) : null;
71
88
  },
72
89
  },
73
- ['summary' as const]: {
90
+ stats: {
74
91
  block: true,
75
92
  factory: ({ children }) => {
76
93
  const text = getXmlTextChild(children);
@@ -82,24 +99,28 @@ export const componentRegistry: XmlWidgetRegistry = {
82
99
  // React
83
100
  //
84
101
 
85
- ['toolCall' as const]: {
102
+ toolCall: {
86
103
  block: true,
87
104
  Component: ToolBlock,
88
105
  },
89
- ['toolResult' as const]: {
106
+ toolResult: {
90
107
  block: true,
91
108
  Component: Fallback,
92
109
  },
93
- ['toolkit' as const]: {
110
+ toolkit: {
94
111
  block: true,
95
112
  Component: Fallback,
96
113
  },
114
+ summary: {
115
+ block: true,
116
+ Component: Summary,
117
+ },
97
118
 
98
119
  //
99
120
  // Fallback
100
121
  //
101
122
 
102
- ['json' as const]: {
123
+ json: {
103
124
  block: true,
104
125
  Component: Fallback,
105
126
  },
@@ -158,13 +179,25 @@ const blockToMarkdownImpl = (context: MessageThreadContext, message: Message.Mes
158
179
  return `<toolCall id="${block.toolCallId}" />`;
159
180
  }
160
181
  case 'toolResult': {
161
- context.updateWidget<{ blocks: ContentBlock.Any[] }>(block.toolCallId, ({ blocks = [] }) => ({
182
+ // TODO(dmaretskyi): the parameter could be undefined, perhaps tool blocks are not arriving in order.
183
+ context.updateWidget<{ blocks: ContentBlock.Any[] }>(block.toolCallId, ({ blocks = [] } = { blocks: [] }) => ({
162
184
  blocks: [...blocks, block],
163
185
  }));
164
186
  break;
165
187
  }
188
+ case 'stats': {
189
+ return `<stats>${ContentBlock.createStatsMessage(block)}</stats>`;
190
+ }
191
+ case 'reasoning': {
192
+ const text = block.reasoningText ?? block.redactedText;
193
+ if (!text) {
194
+ return;
195
+ }
196
+ // TODO(dmaretskyi): The mixed Markdown/XML parser does not support parsing multi-line XML tags.
197
+ return `<reasoning>${text.replace(/\n/g, ' ').trim()}</reasoning>`;
198
+ }
166
199
  case 'summary': {
167
- return `<summary>${ContentBlock.createSummaryMessage(block)}</summary>`;
200
+ return `<summary>${block.content}</summary>`;
168
201
  }
169
202
  default: {
170
203
  // TODO(burdon): Needs stable ID.
@@ -1,3 +1,5 @@
1
+ // @vitest-environment jsdom
2
+
1
3
  //
2
4
  // Copyright 2025 DXOS.org
3
5
  //
@@ -73,6 +73,12 @@ export class MessageSyncer {
73
73
  * Syncs messages with the editor.
74
74
  */
75
75
  append(messages: Message.Message[], flush = false): boolean {
76
+ // TODO(dmaretskyi): MarkdownStream currently does not support streaming XML tags, so we need to remove pending non-text blocks.
77
+ messages = messages.map((message) => ({
78
+ ...message,
79
+ blocks: message.blocks.filter((block) => !block.pending || block._tag === 'text'),
80
+ }));
81
+
76
82
  // Check if new set of messages.
77
83
  if (this._initialMessageId !== messages[0]?.id) {
78
84
  this.reset();
@@ -108,13 +114,13 @@ export class MessageSyncer {
108
114
  }
109
115
 
110
116
  private process(messages: Message.Message[], append: (content: string) => void) {
111
- log('sync', {
112
- doc: this._model.view?.state.doc.length,
113
- messages: messages.map((message) => message.blocks.length),
114
- currentMessageIndex: this._currentMessageIndex,
115
- currentBlockIndex: this._currentBlockIndex,
116
- currentBlockContent: this._currentBlockContent,
117
- });
117
+ // console.log('sync', {
118
+ // doc: this._model.view?.state.doc.length,
119
+ // messages: messages.map((message) => message.blocks.length),
120
+ // currentMessageIndex: this._currentMessageIndex,
121
+ // currentBlockIndex: this._currentBlockIndex,
122
+ // currentBlockContent: this._currentBlockContent,
123
+ // });
118
124
 
119
125
  let i = this._currentMessageIndex;
120
126
  for (const message of messages.slice(this._currentMessageIndex)) {
@@ -135,7 +141,7 @@ export class MessageSyncer {
135
141
  content = currentBlockContent;
136
142
  }
137
143
 
138
- log('append', { message: i, block: j, content });
144
+ // console.log('append', { message: i, block: j, content });
139
145
  this._currentBlockContent = currentBlockContent;
140
146
  append(content);
141
147
  }
@@ -57,7 +57,7 @@ const DefaultStory = ({ source }: TemplateEditorProps & { source: string }) => {
57
57
 
58
58
  return (
59
59
  <TemplateEditor
60
- classNames='bg-baseSurface is-full max-is-proseMaxWidth'
60
+ classNames='bg-base-surface w-full max-w-prose-max-width'
61
61
  id={blueprint.id}
62
62
  template={blueprint.instructions}
63
63
  />
@@ -65,11 +65,11 @@ const DefaultStory = ({ source }: TemplateEditorProps & { source: string }) => {
65
65
  };
66
66
 
67
67
  const meta = {
68
- title: 'plugins/plugin-assistant/TemplateEditor',
68
+ title: 'plugins/plugin-assistant/components/TemplateEditor',
69
69
  component: TemplateEditor as any,
70
70
  render: DefaultStory,
71
71
  decorators: [
72
- withTheme,
72
+ withTheme(),
73
73
  withLayout({ layout: 'column' }),
74
74
  withClientProvider({
75
75
  types: [Blueprint.Blueprint],
@@ -53,7 +53,7 @@ export const TemplateEditor = ({ id, classNames, template, lineNumbers = true }:
53
53
  }),
54
54
  createThemeExtensions({
55
55
  themeMode,
56
- slots: { content: { className: '!pie-4' } },
56
+ slots: { content: { className: '!pe-4' } },
57
57
  }),
58
58
  createMarkdownExtensions(),
59
59
  decorateMarkdown(),
@@ -66,5 +66,5 @@ export const TemplateEditor = ({ id, classNames, template, lineNumbers = true }:
66
66
  };
67
67
  }, [themeMode, template.source?.target, lineNumbers]);
68
68
 
69
- return <div ref={parentRef} className={mx('bs-full overflow-hidden', classNames)} />;
69
+ return <div ref={parentRef} className={mx('h-full overflow-hidden', classNames)} />;
70
70
  };
@@ -47,18 +47,18 @@ const DefaultStory = () => {
47
47
  );
48
48
 
49
49
  return (
50
- <div role='none' className='flex is-[40rem] border border-separator overflow-hidden'>
50
+ <div role='none' className='flex w-[40rem] border border-separator overflow-hidden'>
51
51
  <TemplateForm id={blueprint.id} template={blueprint.instructions} onChange={handleChange} />
52
52
  </div>
53
53
  );
54
54
  };
55
55
 
56
56
  const meta = {
57
- title: 'plugins/plugin-assistant/TemplateForm',
57
+ title: 'plugins/plugin-assistant/components/TemplateForm',
58
58
  component: TemplateForm,
59
59
  render: DefaultStory,
60
60
  decorators: [
61
- withTheme,
61
+ withTheme(),
62
62
  withLayout({ layout: 'column' }),
63
63
  withClientProvider({
64
64
  types: [Blueprint.Blueprint],
@@ -8,7 +8,6 @@ import React, { Fragment, useCallback, useEffect } from 'react';
8
8
  import { type Template } from '@dxos/blueprints';
9
9
  import { type Obj } from '@dxos/echo';
10
10
  import { Input, Select, useTranslation } from '@dxos/react-ui';
11
- import { attentionSurface, groupBorder, mx } from '@dxos/ui-theme';
12
11
  import { isNonNullable } from '@dxos/util';
13
12
 
14
13
  import { meta } from '../../meta';
@@ -61,14 +60,14 @@ export const TemplateForm = ({ id, template, commandEditable = true, onChange }:
61
60
  );
62
61
 
63
62
  return (
64
- <div className={mx('flex flex-col is-full overflow-hidden gap-4', groupBorder)}>
63
+ <div className='flex flex-col w-full overflow-hidden gap-4'>
65
64
  {/* {commandEditable && (
66
65
  <div className='flex items-center pl-4'>
67
66
  <span className='text-neutral-500'>/</span>
68
67
  <Input.Root>
69
68
  <Input.TextInput
70
69
  placeholder={t('command placeholder')}
71
- classNames='is-full bg-transparent m-2'
70
+ classNames='w-full bg-transparent m-2'
72
71
  value={template.command ?? ''}
73
72
  onChange={(event) => {
74
73
  onChange?.((t) => {
@@ -80,20 +79,20 @@ export const TemplateForm = ({ id, template, commandEditable = true, onChange }:
80
79
  </div>
81
80
  )} */}
82
81
 
83
- <TemplateEditor id={id} template={template} classNames={[attentionSurface, 'min-h-[120px]']} />
82
+ <TemplateEditor id={id} template={template} classNames='bg-base-surface min-h-[120px]' />
84
83
 
85
84
  {(template.inputs?.length ?? 0) > 0 && (
86
85
  <div className='grid grid-cols-[10rem_10rem_1fr] gap-1 items-center'>
87
86
  {template.inputs?.filter(isNonNullable).map((input) => (
88
87
  <Fragment key={input.name}>
89
- <div className='pis-3 text-blueText'>{input.name}</div>
88
+ <div className='ps-3 text-blue-text'>{input.name}</div>
90
89
 
91
90
  <Input.Root>
92
91
  <Select.Root
93
92
  value={input.kind}
94
93
  onValueChange={(kind) => handleInputKindChange(input.name, kind as Template.InputKind)}
95
94
  >
96
- <Select.TriggerButton placeholder='Type' classNames='is-full' />
95
+ <Select.TriggerButton placeholder='Type' classNames='w-full' />
97
96
  <Select.Portal>
98
97
  <Select.Content>
99
98
  <Select.Viewport>
@@ -115,7 +114,7 @@ export const TemplateForm = ({ id, template, commandEditable = true, onChange }:
115
114
  <Input.Root>
116
115
  <Input.TextInput
117
116
  placeholder={t('command placeholder')}
118
- classNames='is-full bg-transparent'
117
+ classNames='w-full bg-transparent'
119
118
  value={input.default ?? ''}
120
119
  onChange={(event) => handleInputDefaultChange(input.name, event.target.value)}
121
120
  />
@@ -64,7 +64,7 @@ const regex = {
64
64
  url: /[\w.-]+\.[\w.-]+\/[\w/]+/g,
65
65
  };
66
66
 
67
- const tagPadding = 'mli-0.5 pli-1 rounded-sm';
67
+ const tagPadding = 'mx-0.5 px-1 rounded-xs';
68
68
 
69
69
  /**
70
70
  * ViewPlugin that decorates Handlebars syntax.
@@ -158,14 +158,14 @@ const handlebarsHighlightPlugin = ViewPlugin.fromClass(
158
158
  decorations.push({
159
159
  from: idx,
160
160
  to: end,
161
- decoration: Decoration.mark({ class: 'text-greenText' }),
161
+ decoration: Decoration.mark({ class: 'text-green-text' }),
162
162
  });
163
163
  end = idx;
164
164
  }
165
165
  decorations.push({
166
166
  from: start,
167
167
  to: end,
168
- decoration: Decoration.mark({ class: 'text-blueText' }),
168
+ decoration: Decoration.mark({ class: 'text-blue-text' }),
169
169
  });
170
170
  }
171
171
  }
@@ -179,7 +179,7 @@ const handlebarsHighlightPlugin = ViewPlugin.fromClass(
179
179
  decorations.push({
180
180
  from: start,
181
181
  to: end,
182
- decoration: Decoration.mark({ class: 'text-greenText' }),
182
+ decoration: Decoration.mark({ class: 'text-green-text' }),
183
183
  });
184
184
  }
185
185
  }
@@ -6,7 +6,7 @@ import type * as Tool from '@effect/ai/Tool';
6
6
  import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
7
7
 
8
8
  import { useTranslation } from '@dxos/react-ui';
9
- import { NumericTabs, TextCrawl, ToggleContainer, type ToggleContainerRootProps } from '@dxos/react-ui-components';
9
+ import { NumericTabs, TextCrawl, TogglePanel, type TogglePanelRootProps } from '@dxos/react-ui-components';
10
10
  import { Json } from '@dxos/react-ui-syntax-highlighter';
11
11
  import { type ContentBlock, type Message } from '@dxos/types';
12
12
  import { type XmlWidgetProps } from '@dxos/ui-editor';
@@ -25,12 +25,12 @@ export type ToolBlockProps = XmlWidgetProps<{
25
25
  export const ToolBlock = ({ view, blocks = [] }: ToolBlockProps) => {
26
26
  const { t } = useTranslation(meta.id);
27
27
 
28
- const items = useMemo<ToolContainerProps['items']>(() => {
28
+ const items = useMemo<ToolPanelProps['items']>(() => {
29
29
  let lastToolCall: { tool: Tool.Any | undefined; block: ContentBlock.ToolCall } | undefined;
30
30
  // TODO(burdon): Get from context?
31
31
  const tools: Tool.Any[] = []; //processor.conversation.toolkit?.tools ?? [];
32
32
  return blocks
33
- .filter((block) => block._tag === 'toolCall' || block._tag === 'toolResult' || block._tag === 'summary')
33
+ .filter((block) => block._tag === 'toolCall' || block._tag === 'toolResult' || block._tag === 'stats')
34
34
  .map((block) => {
35
35
  switch (block._tag) {
36
36
  case 'toolCall': {
@@ -70,13 +70,13 @@ export const ToolBlock = ({ view, blocks = [] }: ToolBlockProps) => {
70
70
  };
71
71
  }
72
72
 
73
- case 'summary': {
73
+ case 'stats': {
74
74
  if (!lastToolCall) {
75
75
  return null;
76
76
  }
77
77
 
78
78
  return {
79
- title: t('summary label'),
79
+ title: t('stats label'),
80
80
  content: block,
81
81
  };
82
82
  }
@@ -96,16 +96,16 @@ export const ToolBlock = ({ view, blocks = [] }: ToolBlockProps) => {
96
96
  return null;
97
97
  }
98
98
 
99
- return <ToolContainer items={items} onChangeOpen={handleChangeOpen} />;
99
+ return <ToolPanel items={items} onChangeOpen={handleChangeOpen} />;
100
100
  };
101
101
 
102
102
  ToolBlock.displayName = 'ToolBlock';
103
103
 
104
- type ToolContainerProps = {
104
+ type ToolPanelProps = {
105
105
  items: { title: string; content: any }[];
106
- } & Pick<ToggleContainerRootProps, 'onChangeOpen'>;
106
+ } & Pick<TogglePanelRootProps, 'onChangeOpen'>;
107
107
 
108
- export const ToolContainer = ({ items, onChangeOpen }: ToolContainerProps) => {
108
+ export const ToolPanel = ({ items, onChangeOpen }: ToolPanelProps) => {
109
109
  const tabsRef = useRef<HTMLDivElement>(null);
110
110
  const [selected, setSelected] = useState(0);
111
111
  const [open, setOpen] = useState(false);
@@ -122,11 +122,11 @@ export const ToolContainer = ({ items, onChangeOpen }: ToolContainerProps) => {
122
122
  }, []);
123
123
 
124
124
  return (
125
- <ToggleContainer.Root classNames='mbs-2 is-full rounded-sm' open={open} onChangeOpen={setOpen}>
126
- <ToggleContainer.Header classNames='text-sm text-placeholder'>
125
+ <TogglePanel.Root classNames='mt-2 w-full rounded-xs' open={open} onChangeOpen={setOpen}>
126
+ <TogglePanel.Header classNames='text-sm text-placeholder'>
127
127
  <TextCrawl key='status-roll' lines={items.map((item) => item.title)} autoAdvance greedy />
128
- </ToggleContainer.Header>
129
- <ToggleContainer.Content classNames='grid grid-cols-[32px_1fr]'>
128
+ </TogglePanel.Header>
129
+ <TogglePanel.Content classNames='grid grid-cols-[32px_1fr]'>
130
130
  <NumericTabs ref={tabsRef} classNames='p-1' length={items.length} selected={selected} onSelect={handleSelect} />
131
131
  <Json
132
132
  data={items[selected]?.content}
@@ -137,7 +137,7 @@ export const ToolContainer = ({ items, onChangeOpen }: ToolContainerProps) => {
137
137
  maxStringLen: 128,
138
138
  }}
139
139
  />
140
- </ToggleContainer.Content>
141
- </ToggleContainer.Root>
140
+ </TogglePanel.Content>
141
+ </TogglePanel.Root>
142
142
  );
143
143
  };
@@ -20,15 +20,15 @@ import { translations } from '../../translations';
20
20
  import { Toolbox, type ToolboxProps } from './Toolbox';
21
21
 
22
22
  const DefaultStory = (props: ToolboxProps) => {
23
- return <Toolbox {...props} classNames='is-[30rem] bs-[15rem] rounded-sm border border-separator plb-1' />;
23
+ return <Toolbox {...props} classNames='h-[15rem] w-[30rem] py-1 rounded-xs border border-separator' />;
24
24
  };
25
25
 
26
26
  const meta = {
27
- title: 'plugins/plugin-assistant/Toolbox',
27
+ title: 'plugins/plugin-assistant/components/Toolbox',
28
28
  component: Toolbox as any,
29
29
  render: DefaultStory,
30
30
  decorators: [
31
- withTheme,
31
+ withTheme(),
32
32
  withPluginManager({
33
33
  plugins: [
34
34
  ...corePlugins(),