@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
@@ -4,25 +4,26 @@
4
4
 
5
5
  import { type Extension, Prec } from '@codemirror/state';
6
6
  import { keymap } from '@codemirror/view';
7
- import { useRxValue } from '@effect-rx/rx-react';
7
+ import { useAtomValue } from '@effect-atom/atom-react';
8
8
  import { createContext } from '@radix-ui/react-context';
9
- import { Array, Option } from 'effect';
9
+ import * as Array from 'effect/Array';
10
+ import * as Option from 'effect/Option';
10
11
  import React, { type PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from 'react';
11
12
 
12
13
  import { Event } from '@dxos/async';
13
14
  import { Obj } from '@dxos/echo';
14
- import { log } from '@dxos/log';
15
15
  import { useVoiceInput } from '@dxos/plugin-transcription';
16
16
  import { type Space, getSpace, useQueue } from '@dxos/react-client/echo';
17
17
  import { useIdentity } from '@dxos/react-client/halo';
18
- import { Input, type ThemedClassName, useTranslation } from '@dxos/react-ui';
19
- import { ChatEditor, type ChatEditorController, type ChatEditorProps, references } from '@dxos/react-ui-chat';
20
- import { type ScrollController } from '@dxos/react-ui-components';
18
+ import { Input, type ThemedClassName, useDynamicRef, useTranslation } from '@dxos/react-ui';
19
+ import { ChatEditor, type ChatEditorController, type ChatEditorProps } from '@dxos/react-ui-chat';
20
+ import { type MarkdownStreamController } from '@dxos/react-ui-components';
21
+ import { MenuProvider, ToolbarMenu } from '@dxos/react-ui-menu';
21
22
  import { mx } from '@dxos/react-ui-theme';
22
- import { DataType } from '@dxos/schema';
23
- import { isNotFalsy } from '@dxos/util';
23
+ import { Message } from '@dxos/types';
24
+ import { isTruthy } from '@dxos/util';
24
25
 
25
- import { useReferencesProvider } from '../../hooks';
26
+ import { useChatToolbarActions } from '../../hooks';
26
27
  import { meta } from '../../meta';
27
28
  import { type AiChatProcessor } from '../../processor';
28
29
  import { type Assistant } from '../../types';
@@ -34,7 +35,7 @@ import {
34
35
  ChatReferences,
35
36
  ChatStatusIndicator,
36
37
  } from '../ChatPrompt';
37
- import { ChatThread as NativeChatThread, type ChatThreadProps as NativeChatThreadProps } from '../ChatThread';
38
+ import { ChatThread as NaturalChatThread, type ChatThreadProps as NaturalChatThreadProps } from '../ChatThread';
38
39
 
39
40
  import { type ChatEvent } from './events';
40
41
 
@@ -47,41 +48,35 @@ import { type ChatEvent } from './events';
47
48
  type ChatContextValue = {
48
49
  debug?: boolean;
49
50
  event: Event<ChatEvent>;
50
- space: Space;
51
- chat: Assistant.Chat;
52
- messages: DataType.Message[];
51
+ space?: Space;
52
+ chat?: Assistant.Chat;
53
+ messages: Message.Message[];
53
54
  processor: AiChatProcessor;
54
55
  };
55
56
 
56
- // NOTE: Do not export.
57
57
  export const [ChatContextProvider, useChatContext] = createContext<ChatContextValue>('Chat');
58
58
 
59
59
  //
60
60
  // Root
61
61
  //
62
62
 
63
- type ChatRootProps = ThemedClassName<
64
- PropsWithChildren<
65
- Pick<ChatContextValue, 'chat' | 'processor'> & {
66
- onEvent?: (event: ChatEvent) => void;
67
- }
68
- >
63
+ type ChatRootProps = PropsWithChildren<
64
+ Pick<ChatContextValue, 'space' | 'chat' | 'processor'> & {
65
+ onEvent?: (event: ChatEvent) => void;
66
+ }
69
67
  >;
70
68
 
71
- const ChatRoot = ({ classNames, children, chat, processor, onEvent, ...props }: ChatRootProps) => {
69
+ const ChatRoot = ({ children, chat, processor, onEvent, ...props }: ChatRootProps) => {
72
70
  const [debug, setDebug] = useState(false);
73
- const space = getSpace(chat);
74
-
75
- // Messages.
76
- const queue = useQueue<DataType.Message>(chat?.queue.dxn);
77
- const pending = useRxValue(processor.messages);
78
- const streaming = useRxValue(processor.streaming);
79
-
71
+ const pending = useAtomValue(processor.messages);
72
+ const streaming = useAtomValue(processor.streaming);
80
73
  const lastPrompt = useRef<string | undefined>(undefined);
81
74
 
75
+ // Messages.
76
+ const queue = useQueue<Message.Message>(chat?.queue.dxn);
82
77
  const messages = useMemo(() => {
83
- const queueMessages = queue?.objects?.filter(Obj.instanceOf(DataType.Message)) ?? [];
84
- return Array.dedupeWith([...queueMessages, ...pending], (a, b) => a.id === b.id);
78
+ const queueMessages = queue?.objects?.filter(Obj.instanceOf(Message.Message)) ?? [];
79
+ return Array.dedupeWith([...queueMessages, ...pending], ({ id: a }, { id: b }) => a === b);
85
80
  }, [queue?.objects, pending]);
86
81
 
87
82
  // Events.
@@ -90,18 +85,15 @@ const ChatRoot = ({ classNames, children, chat, processor, onEvent, ...props }:
90
85
  return event.on((ev) => {
91
86
  switch (ev.type) {
92
87
  case 'toggle-debug': {
93
- setDebug((current) => {
94
- const debug = !current;
95
- log.info('toggle-debug', { debug });
96
- return debug;
97
- });
88
+ setDebug((current) => !current);
98
89
  break;
99
90
  }
100
91
 
101
92
  case 'submit': {
102
- if (!streaming) {
93
+ const text = ev.text.trim();
94
+ if (!streaming && text.length) {
103
95
  lastPrompt.current = ev.text;
104
- void processor.request({ message: ev.text });
96
+ void processor.request({ message: text });
105
97
  }
106
98
  break;
107
99
  }
@@ -122,37 +114,45 @@ const ChatRoot = ({ classNames, children, chat, processor, onEvent, ...props }:
122
114
  }
123
115
  break;
124
116
  }
125
-
126
- default: {
127
- onEvent?.(ev);
128
- }
129
117
  }
118
+
119
+ onEvent?.(ev);
130
120
  });
131
121
  }, [event, processor, streaming, onEvent]);
132
122
 
133
- if (!space) {
134
- return null;
135
- }
123
+ const space = props.space ?? getSpace(chat);
136
124
 
137
125
  return (
138
126
  <ChatContextProvider
139
127
  debug={debug}
140
128
  event={event}
141
- chat={chat}
142
129
  space={space}
143
- processor={processor}
130
+ chat={chat}
144
131
  messages={messages}
132
+ processor={processor}
145
133
  {...props}
146
134
  >
147
- <div role='none' className={mx('flex flex-col h-full overflow-hidden', classNames)}>
148
- {children}
149
- </div>
135
+ {children}
150
136
  </ChatContextProvider>
151
137
  );
152
138
  };
153
139
 
154
140
  ChatRoot.displayName = 'Chat.Root';
155
141
 
142
+ //
143
+ // Viewport
144
+ //
145
+
146
+ type ChatViewportProps = ThemedClassName<PropsWithChildren>;
147
+
148
+ const ChatViewport = ({ classNames, children }: ChatViewportProps) => {
149
+ return (
150
+ <div role='none' className={mx('flex flex-col bs-full is-full', classNames)}>
151
+ {children}
152
+ </div>
153
+ );
154
+ };
155
+
156
156
  //
157
157
  // Prompt
158
158
  //
@@ -160,6 +160,7 @@ ChatRoot.displayName = 'Chat.Root';
160
160
  type ChatPromptProps = ThemedClassName<
161
161
  {
162
162
  outline?: boolean;
163
+ settings?: boolean;
163
164
  } & Pick<ChatEditorProps, 'placeholder'> &
164
165
  Omit<ChatPresetsProps, 'onChange'> & {
165
166
  expandable?: boolean;
@@ -172,6 +173,7 @@ type ChatPromptProps = ThemedClassName<
172
173
  const ChatPrompt = ({
173
174
  classNames,
174
175
  outline,
176
+ settings = true,
175
177
  placeholder,
176
178
  expandable,
177
179
  online,
@@ -181,15 +183,15 @@ const ChatPrompt = ({
181
183
  onOnlineChange,
182
184
  }: ChatPromptProps) => {
183
185
  const { t } = useTranslation(meta.id);
184
- const { space, event, processor } = useChatContext(ChatPrompt.displayName);
186
+ const { space, processor, event } = useChatContext(ChatPrompt.displayName);
185
187
 
186
- const error = useRxValue(processor.error).pipe(Option.getOrUndefined);
187
- const streaming = useRxValue(processor.streaming);
188
- const streamingRef = useRef(streaming);
188
+ const error = useAtomValue(processor.error).pipe(Option.getOrUndefined);
189
+ const streaming = useAtomValue(processor.streaming);
190
+ const active = useAtomValue(processor.active);
191
+ const activeRef = useDynamicRef(active);
189
192
 
190
193
  const editorRef = useRef<ChatEditorController>(null);
191
-
192
- const [active, setActive] = useState(false);
194
+ const [recordingState, setRecordingState] = useState(false);
193
195
  useEffect(() => {
194
196
  return event.on((event) => {
195
197
  switch (event.type) {
@@ -200,10 +202,10 @@ const ChatPrompt = ({
200
202
  }
201
203
  break;
202
204
  case 'record-start':
203
- setActive(true);
205
+ setRecordingState(true);
204
206
  break;
205
207
  case 'record-stop':
206
- setActive(false);
208
+ setRecordingState(false);
207
209
  break;
208
210
  }
209
211
  });
@@ -211,54 +213,57 @@ const ChatPrompt = ({
211
213
 
212
214
  // TODO(burdon): Configure capability in TranscriptionPlugin.
213
215
  const { recording } = useVoiceInput({
214
- active,
216
+ active: recordingState,
215
217
  onUpdate: (text) => {
216
218
  editorRef.current?.setText(text);
217
219
  editorRef.current?.focus();
218
220
  },
219
221
  });
220
222
 
221
- // TODO(burdon): Reconcile with object tags.
222
- const referencesProvider = useReferencesProvider(space);
223
223
  const extensions = useMemo<Extension[]>(() => {
224
224
  return [
225
- referencesProvider && references({ provider: referencesProvider }),
226
225
  Prec.highest(
227
- keymap.of(
228
- [
229
- {
230
- key: 'cmd-d',
231
- preventDefault: true,
232
- run: () => {
233
- event.emit({ type: 'toggle-debug' });
234
- return true;
235
- },
226
+ keymap.of([
227
+ {
228
+ key: 'Mod-d',
229
+ preventDefault: true,
230
+ run: () => {
231
+ event.emit({ type: 'toggle-debug' });
232
+ return true;
236
233
  },
237
- expandable && {
238
- key: 'cmd-ArrowUp',
239
- preventDefault: true,
240
- run: () => {
241
- event.emit({ type: 'thread-open' });
242
- return true;
243
- },
234
+ },
235
+ {
236
+ key: 'Mod-ArrowUp',
237
+ preventDefault: true,
238
+ run: () => {
239
+ event.emit({ type: 'nav-previous' });
240
+ return true;
244
241
  },
245
- expandable && {
246
- key: 'cmd-ArrowDown',
247
- preventDefault: true,
248
- run: () => {
249
- event.emit({ type: 'thread-close' });
250
- return true;
251
- },
242
+ shift: () => {
243
+ event.emit({ type: 'thread-open' });
244
+ return true;
252
245
  },
253
- ].filter(isNotFalsy),
254
- ),
246
+ },
247
+ {
248
+ key: 'Mod-ArrowDown',
249
+ preventDefault: true,
250
+ run: () => {
251
+ event.emit({ type: 'nav-next' });
252
+ return true;
253
+ },
254
+ shift: () => {
255
+ event.emit({ type: 'thread-close' });
256
+ return true;
257
+ },
258
+ },
259
+ ]),
255
260
  ),
256
- ].filter(isNotFalsy);
257
- }, [event, expandable, referencesProvider]);
261
+ ].filter(isTruthy);
262
+ }, [event, expandable]);
258
263
 
259
264
  const handleSubmit = useCallback<NonNullable<ChatEditorProps['onSubmit']>>(
260
265
  (text) => {
261
- if (!streamingRef.current) {
266
+ if (!activeRef.current) {
262
267
  event.emit({ type: 'submit', text });
263
268
  return true;
264
269
  }
@@ -275,17 +280,16 @@ const ChatPrompt = ({
275
280
 
276
281
  return (
277
282
  <div
283
+ role='group'
278
284
  className={mx(
279
- 'is-full flex flex-col density-fine',
280
- outline && [
281
- 'p-2 bg-groupSurface border border-subduedSeparator transition transition-border [&:has(.cm-content:focus)]:border-separator rounded',
282
- ],
285
+ 'flex flex-col is-full density-fine',
286
+ outline &&
287
+ 'bg-groupSurface border border-subduedSeparator transition transition-border [&:has(.cm-content:focus)]:border-separator rounded',
283
288
  classNames,
284
289
  )}
285
290
  >
286
- <div className='flex gap-2'>
291
+ <div role='none' className='flex p-2 gap-2'>
287
292
  <ChatStatusIndicator classNames='p-1' preset={preset} error={error} processing={streaming} />
288
-
289
293
  <ChatEditor
290
294
  ref={editorRef}
291
295
  autoFocus
@@ -297,34 +301,38 @@ const ChatPrompt = ({
297
301
  />
298
302
  </div>
299
303
 
300
- <div className='flex pbs-2 items-center'>
301
- <ChatOptions
302
- space={space}
303
- blueprintRegistry={processor.blueprintRegistry}
304
- context={processor.context}
305
- preset={preset}
306
- presets={presets}
307
- onPresetChange={onPresetChange}
308
- />
309
-
310
- <div role='none' className='pli-cardSpacingChrome grow'>
311
- <ChatReferences space={space} context={processor.context} />
304
+ {space && settings && (
305
+ <div role='none' className='flex items-center overflow-hidden'>
306
+ <ChatOptions
307
+ space={space}
308
+ blueprintRegistry={processor.blueprintRegistry}
309
+ context={processor.context}
310
+ preset={preset}
311
+ presets={presets}
312
+ onPresetChange={onPresetChange}
313
+ />
314
+
315
+ <div role='none' className='flex grow overflow-x-auto scrollbar-none'>
316
+ <ChatReferences space={space} context={processor.context} />
317
+ </div>
318
+
319
+ <ChatActions
320
+ classNames='col-span-2'
321
+ microphone={true}
322
+ recording={recording}
323
+ processing={streaming}
324
+ onEvent={handleEvent}
325
+ >
326
+ {/* TODO(burdon): Move offline switch into dialog. */}
327
+ {online !== undefined && (
328
+ <Input.Root>
329
+ <Input.Label srOnly>{t('online switch label')}</Input.Label>
330
+ <Input.Switch classNames='mli-2' checked={online} onCheckedChange={onOnlineChange} />
331
+ </Input.Root>
332
+ )}
333
+ </ChatActions>
312
334
  </div>
313
-
314
- <ChatActions
315
- classNames='col-span-2'
316
- microphone={true}
317
- recording={recording}
318
- processing={streaming}
319
- onEvent={handleEvent}
320
- >
321
- {online !== undefined && (
322
- <Input.Root>
323
- <Input.Switch classNames='mis-2 mie-2' checked={online} onCheckedChange={onOnlineChange} />
324
- </Input.Root>
325
- )}
326
- </ChatActions>
327
- </div>
335
+ )}
328
336
  </div>
329
337
  );
330
338
  };
@@ -335,60 +343,89 @@ ChatPrompt.displayName = 'Chat.Prompt';
335
343
  // Thread
336
344
  //
337
345
 
338
- type ChatThreadProps = Omit<NativeChatThreadProps, 'identity' | 'space' | 'messages' | 'tools' | 'onEvent'>;
346
+ type ChatThreadProps = Omit<NaturalChatThreadProps, 'identity' | 'messages' | 'tools'>;
339
347
 
340
348
  const ChatThread = (props: ChatThreadProps) => {
341
- const { debug, event, space, messages, processor } = useChatContext(ChatThread.displayName);
349
+ const { debug, event, messages, processor } = useChatContext(ChatThread.displayName);
342
350
  const identity = useIdentity();
351
+ const error = useAtomValue(processor.error).pipe(Option.getOrUndefined);
343
352
 
344
- const error = useRxValue(processor.error).pipe(Option.getOrUndefined);
345
-
346
- const toolProvider = useCallback<NonNullable<ChatThreadProps['toolProvider']>>(
347
- () => processor.conversation.toolkit?.tools ?? [],
348
- [processor],
349
- );
350
-
351
- const scrollerRef = useRef<ScrollController>(null);
353
+ const controllerRef = useRef<MarkdownStreamController | null>(null);
352
354
  useEffect(() => {
353
355
  return event.on((event) => {
354
356
  switch (event.type) {
355
357
  case 'submit':
356
358
  case 'scroll-to-bottom':
357
- scrollerRef.current?.scrollToBottom('smooth');
359
+ controllerRef.current?.scrollToBottom();
360
+ break;
361
+ case 'nav-previous':
362
+ controllerRef.current?.navigatePrevious();
363
+ break;
364
+ case 'nav-next':
365
+ controllerRef.current?.navigateNext();
358
366
  break;
359
367
  }
360
368
  });
361
369
  }, [event]);
362
370
 
371
+ const handleEvent = useCallback<NonNullable<NaturalChatThreadProps['onEvent']>>(
372
+ (ev) => {
373
+ event.emit(ev);
374
+ },
375
+ [event],
376
+ );
377
+
363
378
  if (!identity) {
364
379
  return null;
365
380
  }
366
381
 
367
382
  return (
368
- <NativeChatThread
383
+ <NaturalChatThread
369
384
  {...props}
370
- ref={scrollerRef}
371
- debug={debug}
372
385
  identity={identity}
373
- space={space}
374
386
  messages={messages}
375
387
  error={error}
376
- toolProvider={toolProvider}
377
- onEvent={(ev) => event.emit(ev)}
388
+ debug={debug}
389
+ onEvent={handleEvent}
390
+ ref={controllerRef}
378
391
  />
379
392
  );
380
393
  };
381
394
 
382
395
  ChatThread.displayName = 'Chat.Thread';
383
396
 
397
+ //
398
+ // Toolbar
399
+ //
400
+
401
+ type ChatToolbarProps = ThemedClassName<{ companionTo?: Obj.Any }>;
402
+
403
+ const ChatToolbar = ({ classNames, companionTo }: ChatToolbarProps) => {
404
+ const { chat } = useChatContext(ChatToolbar.displayName);
405
+ const menu = useChatToolbarActions({ chat, companionTo });
406
+
407
+ return (
408
+ <MenuProvider
409
+ {...menu}
410
+ attendableId={companionTo ? Obj.getDXN(companionTo).toString() : chat ? Obj.getDXN(chat).toString() : ''}
411
+ >
412
+ <ToolbarMenu classNames={classNames} textBlockWidth />
413
+ </MenuProvider>
414
+ );
415
+ };
416
+
417
+ ChatToolbar.displayName = 'Chat.Toolbar';
418
+
384
419
  //
385
420
  // Chat
386
421
  //
387
422
 
388
423
  export const Chat = {
389
424
  Root: ChatRoot,
425
+ Viewport: ChatViewport,
390
426
  Prompt: ChatPrompt,
391
427
  Thread: ChatThread,
428
+ Toolbar: ChatToolbar,
392
429
  };
393
430
 
394
- export type { ChatRootProps, ChatThreadProps, ChatPromptProps, ChatEvent };
431
+ export type { ChatRootProps, ChatViewportProps, ChatThreadProps, ChatPromptProps, ChatToolbarProps, ChatEvent };
@@ -43,6 +43,12 @@ export type ChatEvent =
43
43
  | {
44
44
  type: 'scroll-to-bottom';
45
45
  }
46
+ | {
47
+ type: 'nav-previous';
48
+ }
49
+ | {
50
+ type: 'nav-next';
51
+ }
46
52
  | {
47
53
  type: 'thread-open';
48
54
  }