@dxos/plugin-assistant 0.8.4-main.dedc0f3 → 0.8.4-main.e8ec1fe

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 (465) 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-G6YHR6GJ.mjs → ChatContainer-XCPBWYIR.mjs} +22 -20
  6. package/dist/lib/browser/ChatContainer-XCPBWYIR.mjs.map +7 -0
  7. package/dist/lib/browser/{ChatDialog-HJ7VDRQO.mjs → ChatDialog-DT7KFCRL.mjs} +8 -6
  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-3C43MLCD.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-VHFSRTEJ.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-GLWD66TA.mjs → chunk-IXIIS4QA.mjs} +53 -38
  23. package/dist/lib/browser/chunk-IXIIS4QA.mjs.map +7 -0
  24. package/dist/lib/browser/{chunk-EZUSNS2J.mjs → chunk-LRE4VEZV.mjs} +2 -5
  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 +118 -82
  33. package/dist/lib/browser/index.mjs.map +4 -4
  34. package/dist/lib/browser/{intent-resolver-I6M3ZDAS.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-WNLA2636.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-AINRYS5W.mjs → state-GG7Z3NB7.mjs} +9 -5
  44. package/dist/lib/browser/{state-AINRYS5W.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-EZZF7RSQ.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-PTQLZNJU.mjs → ChatDialog-QT6ZBX45.mjs} +8 -6
  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-NM3JDLQ2.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-4E6XTLVN.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-QG2KT3AT.mjs → chunk-UXTUHH24.mjs} +53 -38
  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-XD4CDA4R.mjs → chunk-YWFWT57N.mjs} +2 -5
  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 +118 -82
  80. package/dist/lib/node-esm/index.mjs.map +4 -4
  81. package/dist/lib/node-esm/{intent-resolver-VIINHFMT.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-GP3LU6DX.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-EQS5KP6M.mjs → state-FSUHFMDM.mjs} +9 -5
  91. package/dist/lib/node-esm/{state-EQS5KP6M.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 -24
  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/index.d.ts +0 -1
  106. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/toolkit.d.ts +1 -1
  112. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -1
  113. package/dist/types/src/components/BlueprintArticle.d.ts +7 -0
  114. package/dist/types/src/components/BlueprintArticle.d.ts.map +1 -0
  115. package/dist/types/src/components/Chat/Chat.d.ts +20 -9
  116. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  117. package/dist/types/src/components/Chat/events.d.ts +4 -0
  118. package/dist/types/src/components/Chat/events.d.ts.map +1 -1
  119. package/dist/types/src/components/ChatCompanion.d.ts +2 -2
  120. package/dist/types/src/components/ChatCompanion.d.ts.map +1 -1
  121. package/dist/types/src/components/ChatContainer.d.ts +7 -4
  122. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  123. package/dist/types/src/components/ChatDialog.d.ts.map +1 -1
  124. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts.map +1 -1
  125. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  126. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
  127. package/dist/types/src/components/ChatThread/ChatThread.d.ts +6 -7
  128. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  129. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +124 -71
  130. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/ChatThread/reducers.d.ts +5 -5
  132. package/dist/types/src/components/ChatThread/reducers.d.ts.map +1 -1
  133. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
  134. package/dist/types/src/components/ChatThread/sync.d.ts +12 -6
  135. package/dist/types/src/components/ChatThread/sync.d.ts.map +1 -1
  136. package/dist/types/src/components/PromptArticle.d.ts +7 -0
  137. package/dist/types/src/components/PromptArticle.d.ts.map +1 -0
  138. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +2 -1
  139. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  140. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +111 -61
  141. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  142. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +1 -1
  143. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  144. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +111 -61
  145. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  146. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +1 -0
  147. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts +3 -0
  148. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts.map +1 -0
  149. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts +8 -0
  150. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts.map +1 -0
  151. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +9 -7
  152. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -1
  153. package/dist/types/src/components/Toolbox/Toolbox.d.ts +2 -2
  154. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  155. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +111 -61
  156. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  157. package/dist/types/src/components/index.d.ts +4 -9
  158. package/dist/types/src/components/index.d.ts.map +1 -1
  159. package/dist/types/src/functions/analysis.d.ts +1 -1
  160. package/dist/types/src/functions/analysis.d.ts.map +1 -1
  161. package/dist/types/src/functions/index.d.ts +2 -2
  162. package/dist/types/src/functions/index.d.ts.map +1 -1
  163. package/dist/types/src/functions/{list.d.ts → object-list.d.ts} +2 -2
  164. package/dist/types/src/functions/object-list.d.ts.map +1 -0
  165. package/dist/types/src/functions/{load.d.ts → object-load.d.ts} +2 -2
  166. package/dist/types/src/functions/object-load.d.ts.map +1 -0
  167. package/dist/types/src/hooks/index.d.ts +1 -2
  168. package/dist/types/src/hooks/index.d.ts.map +1 -1
  169. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +2 -1
  170. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -1
  171. package/dist/types/src/hooks/useChatProcessor.d.ts +4 -2
  172. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  173. package/dist/types/src/hooks/useChatServices.d.ts +1 -1
  174. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
  175. package/dist/types/src/hooks/useChatToolbarActions.d.ts +8 -0
  176. package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -0
  177. package/dist/types/src/hooks/useContextBinder.d.ts +2 -2
  178. package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -1
  179. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -1
  180. package/dist/types/src/index.d.ts +2 -0
  181. package/dist/types/src/index.d.ts.map +1 -1
  182. package/dist/types/src/meta.d.ts +1 -2
  183. package/dist/types/src/meta.d.ts.map +1 -1
  184. package/dist/types/src/processor/index.d.ts +1 -0
  185. package/dist/types/src/processor/index.d.ts.map +1 -1
  186. package/dist/types/src/processor/presets.d.ts +1 -1
  187. package/dist/types/src/processor/presets.d.ts.map +1 -1
  188. package/dist/types/src/processor/processor.d.ts +11 -10
  189. package/dist/types/src/processor/processor.d.ts.map +1 -1
  190. package/dist/types/src/processor/update-name.d.ts +10 -0
  191. package/dist/types/src/processor/update-name.d.ts.map +1 -0
  192. package/dist/types/src/queue-logger.d.ts.map +1 -1
  193. package/dist/types/src/testing/index.d.ts +0 -2
  194. package/dist/types/src/testing/index.d.ts.map +1 -1
  195. package/dist/types/src/testing/test-generator.d.ts +3 -3
  196. package/dist/types/src/testing/test-generator.d.ts.map +1 -1
  197. package/dist/types/src/testing/test-services.d.ts +2 -2
  198. package/dist/types/src/testing/test-services.d.ts.map +1 -1
  199. package/dist/types/src/translations.d.ts +239 -26
  200. package/dist/types/src/translations.d.ts.map +1 -1
  201. package/dist/types/src/types/Assistant.d.ts +15 -9
  202. package/dist/types/src/types/Assistant.d.ts.map +1 -1
  203. package/dist/types/src/types/AssistantAction.d.ts +33 -8
  204. package/dist/types/src/types/AssistantAction.d.ts.map +1 -1
  205. package/dist/types/src/types/service.d.ts +24 -18
  206. package/dist/types/src/types/service.d.ts.map +1 -1
  207. package/dist/types/tsconfig.tsbuildinfo +1 -1
  208. package/package.json +94 -113
  209. package/src/AssistantPlugin.tsx +154 -137
  210. package/src/capabilities/ai-service.ts +6 -7
  211. package/src/capabilities/app-graph-builder.ts +69 -21
  212. package/src/capabilities/blueprint-definition.ts +38 -30
  213. package/src/capabilities/capabilities.ts +2 -56
  214. package/src/capabilities/edge-model-resolver.ts +5 -7
  215. package/src/capabilities/index.ts +0 -1
  216. package/src/capabilities/intent-resolver.ts +69 -16
  217. package/src/capabilities/local-model-resolver.ts +7 -9
  218. package/src/capabilities/react-surface.tsx +16 -20
  219. package/src/capabilities/state.ts +2 -0
  220. package/src/capabilities/toolkit.ts +9 -155
  221. package/src/components/BlueprintArticle.tsx +29 -0
  222. package/src/components/Chat/Chat.tsx +155 -113
  223. package/src/components/Chat/events.ts +6 -0
  224. package/src/components/ChatCompanion.tsx +93 -49
  225. package/src/components/ChatContainer.tsx +27 -17
  226. package/src/components/ChatDialog.tsx +9 -2
  227. package/src/components/ChatProgress/ChatProgress.tsx +2 -3
  228. package/src/components/ChatPrompt/ChatActions.tsx +2 -4
  229. package/src/components/ChatPrompt/ChatOptions.tsx +40 -45
  230. package/src/components/ChatPrompt/ChatReferences.tsx +2 -2
  231. package/src/components/ChatThread/ChatThread.stories.tsx +52 -34
  232. package/src/components/ChatThread/ChatThread.tsx +28 -34
  233. package/src/components/ChatThread/reducers.ts +6 -6
  234. package/src/components/ChatThread/registry.tsx +25 -40
  235. package/src/components/ChatThread/sync.test.ts +21 -13
  236. package/src/components/ChatThread/sync.ts +48 -13
  237. package/src/components/ChatThread/testing/thread.md +37 -0
  238. package/src/components/PromptArticle.tsx +51 -0
  239. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +15 -7
  240. package/src/components/TemplateEditor/TemplateEditor.tsx +19 -10
  241. package/src/components/TemplateEditor/TemplateForm.stories.tsx +4 -6
  242. package/src/components/TemplateEditor/TemplateForm.tsx +2 -2
  243. package/src/components/TemplateEditor/extensions/handlebars-extension.ts +269 -0
  244. package/src/components/TemplateEditor/extensions/index.ts +6 -0
  245. package/src/components/TemplateEditor/extensions/xml-extension.ts +64 -0
  246. package/src/components/ToolBlock/ToolBlock.tsx +37 -46
  247. package/src/components/Toolbox/Toolbox.stories.tsx +5 -8
  248. package/src/components/Toolbox/Toolbox.tsx +5 -5
  249. package/src/components/index.ts +2 -5
  250. package/src/functions/analysis.ts +5 -3
  251. package/src/functions/index.ts +2 -2
  252. package/src/functions/{list.ts → object-list.ts} +6 -4
  253. package/src/functions/{load.ts → object-load.ts} +8 -5
  254. package/src/hooks/index.ts +1 -2
  255. package/src/hooks/useBlueprintRegistry.ts +19 -4
  256. package/src/hooks/useChatProcessor.ts +22 -14
  257. package/src/hooks/useChatServices.ts +10 -7
  258. package/src/hooks/useChatToolbarActions.ts +122 -0
  259. package/src/hooks/useContextBinder.ts +19 -7
  260. package/src/hooks/useItemTypes.ts +1 -1
  261. package/src/hooks/useReferencesProvider.ts +2 -1
  262. package/src/index.ts +2 -0
  263. package/src/meta.ts +9 -6
  264. package/src/processor/index.ts +1 -0
  265. package/src/processor/presets.ts +2 -2
  266. package/src/processor/processor.test.ts +18 -24
  267. package/src/processor/processor.ts +35 -60
  268. package/src/processor/update-name.ts +56 -0
  269. package/src/queue-logger.ts +4 -8
  270. package/src/testing/index.ts +0 -2
  271. package/src/testing/test-generator.ts +15 -11
  272. package/src/testing/test-services.ts +2 -8
  273. package/src/translations.ts +24 -16
  274. package/src/types/Assistant.ts +10 -8
  275. package/src/types/AssistantAction.ts +23 -6
  276. package/src/types/service.ts +17 -9
  277. package/dist/lib/browser/BlueprintContainer-BFNN6K46.mjs +0 -29
  278. package/dist/lib/browser/BlueprintContainer-BFNN6K46.mjs.map +0 -7
  279. package/dist/lib/browser/ChatCompanion-YYYCHZYV.mjs +0 -126
  280. package/dist/lib/browser/ChatCompanion-YYYCHZYV.mjs.map +0 -7
  281. package/dist/lib/browser/ChatContainer-G6YHR6GJ.mjs.map +0 -7
  282. package/dist/lib/browser/ChatDialog-HJ7VDRQO.mjs.map +0 -7
  283. package/dist/lib/browser/SequenceContainer-TF5QNXYM.mjs +0 -150
  284. package/dist/lib/browser/SequenceContainer-TF5QNXYM.mjs.map +0 -7
  285. package/dist/lib/browser/ai-service-YC2EQPHA.mjs +0 -22
  286. package/dist/lib/browser/ai-service-YC2EQPHA.mjs.map +0 -7
  287. package/dist/lib/browser/app-graph-builder-3C43MLCD.mjs.map +0 -7
  288. package/dist/lib/browser/chunk-EZUSNS2J.mjs.map +0 -7
  289. package/dist/lib/browser/chunk-GLWD66TA.mjs.map +0 -7
  290. package/dist/lib/browser/chunk-O4LUJEDV.mjs +0 -20
  291. package/dist/lib/browser/chunk-O4LUJEDV.mjs.map +0 -7
  292. package/dist/lib/browser/chunk-PL4O4ZJU.mjs +0 -1974
  293. package/dist/lib/browser/chunk-PL4O4ZJU.mjs.map +0 -7
  294. package/dist/lib/browser/chunk-PPJAIE2T.mjs +0 -299
  295. package/dist/lib/browser/chunk-PPJAIE2T.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-PQI3MGDN.mjs +0 -169
  297. package/dist/lib/browser/chunk-PQI3MGDN.mjs.map +0 -7
  298. package/dist/lib/browser/chunk-R6LRGW3I.mjs +0 -216
  299. package/dist/lib/browser/chunk-R6LRGW3I.mjs.map +0 -7
  300. package/dist/lib/browser/chunk-SMIVXXAI.mjs.map +0 -7
  301. package/dist/lib/browser/compute-runtime-X6IREJN3.mjs +0 -155
  302. package/dist/lib/browser/compute-runtime-X6IREJN3.mjs.map +0 -7
  303. package/dist/lib/browser/edge-model-resolver-JNEB355N.mjs +0 -22
  304. package/dist/lib/browser/edge-model-resolver-JNEB355N.mjs.map +0 -7
  305. package/dist/lib/browser/intent-resolver-I6M3ZDAS.mjs.map +0 -7
  306. package/dist/lib/browser/local-model-resolver-EUXSRZ7X.mjs +0 -21
  307. package/dist/lib/browser/local-model-resolver-EUXSRZ7X.mjs.map +0 -7
  308. package/dist/lib/browser/react-surface-WNLA2636.mjs.map +0 -7
  309. package/dist/lib/browser/toolkit-Y5OYX5PO.mjs +0 -191
  310. package/dist/lib/browser/toolkit-Y5OYX5PO.mjs.map +0 -7
  311. package/dist/lib/node-esm/BlueprintContainer-X4MRBKDR.mjs +0 -30
  312. package/dist/lib/node-esm/BlueprintContainer-X4MRBKDR.mjs.map +0 -7
  313. package/dist/lib/node-esm/ChatCompanion-PUAFRIEC.mjs +0 -127
  314. package/dist/lib/node-esm/ChatCompanion-PUAFRIEC.mjs.map +0 -7
  315. package/dist/lib/node-esm/ChatContainer-EZZF7RSQ.mjs.map +0 -7
  316. package/dist/lib/node-esm/ChatDialog-PTQLZNJU.mjs.map +0 -7
  317. package/dist/lib/node-esm/SequenceContainer-UXOVZPZO.mjs +0 -151
  318. package/dist/lib/node-esm/SequenceContainer-UXOVZPZO.mjs.map +0 -7
  319. package/dist/lib/node-esm/ai-service-XUMZVFCK.mjs +0 -23
  320. package/dist/lib/node-esm/ai-service-XUMZVFCK.mjs.map +0 -7
  321. package/dist/lib/node-esm/app-graph-builder-NM3JDLQ2.mjs.map +0 -7
  322. package/dist/lib/node-esm/chunk-4WLFSXZG.mjs +0 -170
  323. package/dist/lib/node-esm/chunk-4WLFSXZG.mjs.map +0 -7
  324. package/dist/lib/node-esm/chunk-7YOGZI66.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-LVTG5JTW.mjs +0 -217
  326. package/dist/lib/node-esm/chunk-LVTG5JTW.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-QG2KT3AT.mjs.map +0 -7
  328. package/dist/lib/node-esm/chunk-VFY2JG62.mjs +0 -22
  329. package/dist/lib/node-esm/chunk-VFY2JG62.mjs.map +0 -7
  330. package/dist/lib/node-esm/chunk-VH3LTD76.mjs +0 -300
  331. package/dist/lib/node-esm/chunk-VH3LTD76.mjs.map +0 -7
  332. package/dist/lib/node-esm/chunk-XD4CDA4R.mjs.map +0 -7
  333. package/dist/lib/node-esm/chunk-ZIDP7HBI.mjs +0 -1975
  334. package/dist/lib/node-esm/chunk-ZIDP7HBI.mjs.map +0 -7
  335. package/dist/lib/node-esm/compute-runtime-NRHLLTSC.mjs +0 -156
  336. package/dist/lib/node-esm/compute-runtime-NRHLLTSC.mjs.map +0 -7
  337. package/dist/lib/node-esm/edge-model-resolver-UE5TLLJZ.mjs +0 -23
  338. package/dist/lib/node-esm/edge-model-resolver-UE5TLLJZ.mjs.map +0 -7
  339. package/dist/lib/node-esm/intent-resolver-VIINHFMT.mjs.map +0 -7
  340. package/dist/lib/node-esm/local-model-resolver-JBEFVVZA.mjs +0 -22
  341. package/dist/lib/node-esm/local-model-resolver-JBEFVVZA.mjs.map +0 -7
  342. package/dist/lib/node-esm/react-surface-GP3LU6DX.mjs.map +0 -7
  343. package/dist/lib/node-esm/toolkit-2F2OL6WB.mjs +0 -192
  344. package/dist/lib/node-esm/toolkit-2F2OL6WB.mjs.map +0 -7
  345. package/dist/types/src/capabilities/compute-runtime.d.ts +0 -5
  346. package/dist/types/src/capabilities/compute-runtime.d.ts.map +0 -1
  347. package/dist/types/src/components/BlueprintContainer.d.ts +0 -8
  348. package/dist/types/src/components/BlueprintContainer.d.ts.map +0 -1
  349. package/dist/types/src/components/PromptSettings.d.ts +0 -6
  350. package/dist/types/src/components/PromptSettings.d.ts.map +0 -1
  351. package/dist/types/src/components/SequenceContainer.d.ts +0 -8
  352. package/dist/types/src/components/SequenceContainer.d.ts.map +0 -1
  353. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts +0 -13
  354. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts.map +0 -1
  355. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts +0 -267
  356. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts.map +0 -1
  357. package/dist/types/src/components/SequenceEditor/index.d.ts +0 -2
  358. package/dist/types/src/components/SequenceEditor/index.d.ts.map +0 -1
  359. package/dist/types/src/components/TemplateEditor/handlebars-extension.d.ts.map +0 -1
  360. package/dist/types/src/components/Toolbar/Toolbar.d.ts +0 -5
  361. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +0 -1
  362. package/dist/types/src/components/Toolbar/index.d.ts +0 -2
  363. package/dist/types/src/components/Toolbar/index.d.ts.map +0 -1
  364. package/dist/types/src/components/Toolbar/useChatToolbarActions.d.ts +0 -11
  365. package/dist/types/src/components/Toolbar/useChatToolbarActions.d.ts.map +0 -1
  366. package/dist/types/src/execution-graph/execution-graph.d.ts +0 -21
  367. package/dist/types/src/execution-graph/execution-graph.d.ts.map +0 -1
  368. package/dist/types/src/execution-graph/index.d.ts +0 -2
  369. package/dist/types/src/execution-graph/index.d.ts.map +0 -1
  370. package/dist/types/src/functions/list.d.ts.map +0 -1
  371. package/dist/types/src/functions/load.d.ts.map +0 -1
  372. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +0 -8
  373. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +0 -1
  374. package/dist/types/src/hooks/useExecutionGraph.d.ts +0 -6
  375. package/dist/types/src/hooks/useExecutionGraph.d.ts.map +0 -1
  376. package/dist/types/src/stories/Chat.stories.d.ts +0 -30
  377. package/dist/types/src/stories/Chat.stories.d.ts.map +0 -1
  378. package/dist/types/src/stories/components/BlueprintContainer.d.ts +0 -4
  379. package/dist/types/src/stories/components/BlueprintContainer.d.ts.map +0 -1
  380. package/dist/types/src/stories/components/ChatContainer.d.ts +0 -4
  381. package/dist/types/src/stories/components/ChatContainer.d.ts.map +0 -1
  382. package/dist/types/src/stories/components/ChessContainer.d.ts +0 -4
  383. package/dist/types/src/stories/components/ChessContainer.d.ts.map +0 -1
  384. package/dist/types/src/stories/components/CommentsContainer.d.ts +0 -4
  385. package/dist/types/src/stories/components/CommentsContainer.d.ts.map +0 -1
  386. package/dist/types/src/stories/components/DebugCard.d.ts +0 -8
  387. package/dist/types/src/stories/components/DebugCard.d.ts.map +0 -1
  388. package/dist/types/src/stories/components/GraphContainer.d.ts +0 -6
  389. package/dist/types/src/stories/components/GraphContainer.d.ts.map +0 -1
  390. package/dist/types/src/stories/components/InvocationsContainer.d.ts +0 -4
  391. package/dist/types/src/stories/components/InvocationsContainer.d.ts.map +0 -1
  392. package/dist/types/src/stories/components/LoggingContainer.d.ts +0 -7
  393. package/dist/types/src/stories/components/LoggingContainer.d.ts.map +0 -1
  394. package/dist/types/src/stories/components/MessageContainer.d.ts +0 -4
  395. package/dist/types/src/stories/components/MessageContainer.d.ts.map +0 -1
  396. package/dist/types/src/stories/components/PromptContainer.d.ts +0 -6
  397. package/dist/types/src/stories/components/PromptContainer.d.ts.map +0 -1
  398. package/dist/types/src/stories/components/ResearchInputStack.d.ts +0 -4
  399. package/dist/types/src/stories/components/ResearchInputStack.d.ts.map +0 -1
  400. package/dist/types/src/stories/components/ResearchOutputStack.d.ts +0 -4
  401. package/dist/types/src/stories/components/ResearchOutputStack.d.ts.map +0 -1
  402. package/dist/types/src/stories/components/TasksContainer.d.ts +0 -4
  403. package/dist/types/src/stories/components/TasksContainer.d.ts.map +0 -1
  404. package/dist/types/src/stories/components/TokenManagerContainer.d.ts +0 -3
  405. package/dist/types/src/stories/components/TokenManagerContainer.d.ts.map +0 -1
  406. package/dist/types/src/stories/components/TriggersContainer.d.ts +0 -14
  407. package/dist/types/src/stories/components/TriggersContainer.d.ts.map +0 -1
  408. package/dist/types/src/stories/components/index.d.ts +0 -16
  409. package/dist/types/src/stories/components/index.d.ts.map +0 -1
  410. package/dist/types/src/stories/components/types.d.ts +0 -7
  411. package/dist/types/src/stories/components/types.d.ts.map +0 -1
  412. package/dist/types/src/stories/testing/data.d.ts +0 -9
  413. package/dist/types/src/stories/testing/data.d.ts.map +0 -1
  414. package/dist/types/src/stories/testing/index.d.ts +0 -3
  415. package/dist/types/src/stories/testing/index.d.ts.map +0 -1
  416. package/dist/types/src/stories/testing/schema.d.ts +0 -7
  417. package/dist/types/src/stories/testing/schema.d.ts.map +0 -1
  418. package/dist/types/src/stories/testing/testing.d.ts +0 -48
  419. package/dist/types/src/stories/testing/testing.d.ts.map +0 -1
  420. package/dist/types/src/testing/test-data.d.ts +0 -14
  421. package/dist/types/src/testing/test-data.d.ts.map +0 -1
  422. package/dist/types/src/testing/test-functions.d.ts +0 -6
  423. package/dist/types/src/testing/test-functions.d.ts.map +0 -1
  424. package/src/capabilities/compute-runtime.ts +0 -124
  425. package/src/components/BlueprintContainer.tsx +0 -24
  426. package/src/components/PromptSettings.tsx +0 -90
  427. package/src/components/SequenceContainer.tsx +0 -131
  428. package/src/components/SequenceEditor/SequenceEditor.stories.tsx +0 -33
  429. package/src/components/SequenceEditor/SequenceEditor.tsx +0 -50
  430. package/src/components/SequenceEditor/index.ts +0 -5
  431. package/src/components/TemplateEditor/handlebars-extension.ts +0 -165
  432. package/src/components/Toolbar/Toolbar.tsx +0 -21
  433. package/src/components/Toolbar/index.ts +0 -5
  434. package/src/components/Toolbar/useChatToolbarActions.ts +0 -126
  435. package/src/execution-graph/execution-graph.ts +0 -211
  436. package/src/execution-graph/index.ts +0 -5
  437. package/src/hooks/useComputeRuntimeCallback.ts +0 -25
  438. package/src/hooks/useExecutionGraph.ts +0 -20
  439. package/src/stories/Chat.stories.tsx +0 -657
  440. package/src/stories/components/BlueprintContainer.tsx +0 -34
  441. package/src/stories/components/ChatContainer.tsx +0 -74
  442. package/src/stories/components/ChessContainer.tsx +0 -17
  443. package/src/stories/components/CommentsContainer.tsx +0 -25
  444. package/src/stories/components/DebugCard.tsx +0 -61
  445. package/src/stories/components/GraphContainer.tsx +0 -119
  446. package/src/stories/components/InvocationsContainer.tsx +0 -17
  447. package/src/stories/components/LoggingContainer.tsx +0 -33
  448. package/src/stories/components/MessageContainer.tsx +0 -22
  449. package/src/stories/components/PromptContainer.tsx +0 -52
  450. package/src/stories/components/ResearchInputStack.tsx +0 -30
  451. package/src/stories/components/ResearchOutputStack.tsx +0 -29
  452. package/src/stories/components/TasksContainer.tsx +0 -49
  453. package/src/stories/components/TokenManagerContainer.tsx +0 -14
  454. package/src/stories/components/TriggersContainer.tsx +0 -75
  455. package/src/stories/components/index.ts +0 -20
  456. package/src/stories/components/types.ts +0 -11
  457. package/src/stories/testing/data.ts +0 -142
  458. package/src/stories/testing/index.ts +0 -6
  459. package/src/stories/testing/schema.ts +0 -17
  460. package/src/stories/testing/testing.tsx +0 -279
  461. package/src/testing/test-data.ts +0 -245
  462. package/src/testing/test-functions.ts +0 -16
  463. /package/dist/lib/browser/{blueprint-definition-VHFSRTEJ.mjs.map → blueprint-definition-5FT5JGPY.mjs.map} +0 -0
  464. /package/dist/lib/node-esm/{blueprint-definition-4E6XTLVN.mjs.map → blueprint-definition-XW6QQVLV.mjs.map} +0 -0
  465. /package/dist/types/src/components/TemplateEditor/{handlebars-extension.d.ts → extensions/handlebars-extension.d.ts} +0 -0
@@ -2,162 +2,16 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { AiTool, AiToolkit } from '@effect/ai';
6
- import { Effect, Schema } from 'effect';
5
+ import * as Layer from 'effect/Layer';
7
6
 
8
- import { Capabilities, type Capability, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
9
- import { AiContextService, ArtifactId } from '@dxos/assistant';
10
- import { Filter, Obj, Ref, Type } from '@dxos/echo';
11
- import { DatabaseService } from '@dxos/functions';
12
- import { invariant } from '@dxos/invariant';
13
- import { ClientCapabilities } from '@dxos/plugin-client';
14
- import { SpaceCapabilities, getActiveSpace } from '@dxos/plugin-space';
15
- import { SpaceAction } from '@dxos/plugin-space/types';
16
- import { DataType } from '@dxos/schema';
17
- import { trim } from '@dxos/util';
7
+ import { Capabilities, type Capability, type PluginContext, contributes } from '@dxos/app-framework';
8
+ import { GenericToolkit } from '@dxos/assistant';
9
+ import { AssistantToolkit, SystemToolkit, WebSearchToolkit } from '@dxos/assistant-toolkit';
18
10
 
19
- // TODO(burdon): Reconcile with functions (currently reuses plugin framework intents).
20
- class Toolkit extends AiToolkit.make(
21
- AiTool.make('add-to-context', {
22
- description: trim`
23
- Adds the object to the chat context.
24
- `,
25
- parameters: {
26
- id: ArtifactId.annotations({
27
- description: 'The ID of the document to read.',
28
- }),
29
- },
30
- success: Schema.Void,
31
- failure: Schema.Never,
32
- }).addRequirement<AiContextService | DatabaseService>(), // TODO(burdon): Define standard contract.
11
+ export default (_context: PluginContext): Capability<any>[] => [
12
+ contributes(Capabilities.Toolkit, GenericToolkit.make(AssistantToolkit.AssistantToolkit, AssistantToolkit.layer())),
33
13
 
34
- AiTool.make('get-schemas', {
35
- description: trim`
36
- Retrieves schemas definitions.
37
- `,
38
- parameters: {
39
- // TODO(wittjosiah): Remove this once parameter-less tools are fixed.
40
- limit: Schema.Number,
41
- },
42
- // TODO(dmaretskyi): Effect returns ({ result, encodedResult })
43
- success: Schema.Any,
44
- failure: Schema.Never,
45
- }),
46
-
47
- AiTool.make('add-schema', {
48
- description: trim`
49
- Adds a schema to the space.
50
- The name will be used when displayed to the user.
51
- The typename must be in the format of "example.com/type/Type".
52
- `,
53
- parameters: {
54
- name: Schema.String,
55
- typename: Schema.String,
56
- jsonSchema: Schema.Any,
57
- },
58
- success: Schema.Any,
59
- failure: Schema.Never,
60
- }),
61
-
62
- AiTool.make('create-record', {
63
- description: trim`
64
- Creates a new record and adds it to the current space.
65
- Get the schema from the get-schemas tool and ensure that the data matches the corresponding schema.
66
- Note that only record schemas are supported.
67
- `,
68
- parameters: {
69
- typename: Schema.String,
70
- data: Schema.Any,
71
- },
72
- success: Schema.Any,
73
- failure: Schema.Never,
74
- }),
75
- ) {
76
- static layer = (context: PluginContext) =>
77
- Toolkit.toLayer({
78
- 'add-to-context': Effect.fnUntraced(function* ({ id }) {
79
- const { binder } = yield* AiContextService;
80
- const { db } = yield* DatabaseService;
81
- const ref = Ref.fromDXN(ArtifactId.toDXN(id, db.spaceId));
82
- yield* Effect.promise(() =>
83
- binder.bind({
84
- blueprints: [],
85
- objects: [ref],
86
- }),
87
- );
88
- }),
89
-
90
- 'get-schemas': () => {
91
- const space = getActiveSpace(context);
92
- invariant(space, 'No active space');
93
-
94
- return Effect.gen(function* () {
95
- const whitelist = context
96
- .getCapabilities(ClientCapabilities.SchemaWhiteList)
97
- .flat()
98
- .map((schema) => ({
99
- typename: Type.getTypename(schema),
100
- jsonSchema: Type.toJsonSchema(schema),
101
- kind: 'record',
102
- }));
103
-
104
- // TODO(burdon): Why ObjectForm (bad name for data capability; UI term)?
105
- const forms = context.getCapabilities(SpaceCapabilities.ObjectForm).map((form) => ({
106
- typename: Type.getTypename(form.objectSchema),
107
- jsonSchema: Type.toJsonSchema(form.objectSchema),
108
- kind: 'item',
109
- }));
110
-
111
- const schemas = [...whitelist, ...forms];
112
- if (space) {
113
- const { objects } = yield* DatabaseService.runQuery(Filter.type(DataType.StoredSchema));
114
- schemas.push(
115
- ...objects.map((object) => ({
116
- typename: object.typename,
117
- jsonSchema: object.jsonSchema,
118
- kind: 'record',
119
- })),
120
- );
121
- }
122
-
123
- return schemas;
124
- }).pipe(Effect.provide(DatabaseService.layer(space.db)));
125
- },
126
-
127
- 'add-schema': ({ name, typename, jsonSchema }) => {
128
- return Effect.gen(function* () {
129
- const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);
130
- const space = getActiveSpace(context);
131
- invariant(space, 'No active space');
132
-
133
- const schema = Type.toEffectSchema(jsonSchema).pipe(Type.Obj({ typename, version: '0.1.0' }));
134
- yield* dispatch(createIntent(SpaceAction.AddSchema, { space, name, typename, schema }));
135
- }).pipe(Effect.orDie);
136
- },
137
-
138
- 'create-record': ({ typename, data }) => {
139
- const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);
140
- const space = getActiveSpace(context);
141
- invariant(space, 'No active space');
142
-
143
- return Effect.gen(function* () {
144
- const schemas = context.getCapabilities(ClientCapabilities.SchemaWhiteList).flat();
145
- const { objects } = yield* DatabaseService.runQuery(Filter.type(DataType.StoredSchema));
146
- schemas.push(...objects.map((object) => Type.toEffectSchema(object.jsonSchema)));
147
- const schema = schemas.find((schema) => Type.getTypename(schema) === typename);
148
- if (!schema) {
149
- throw new Error(`Schema not found for ${typename}`);
150
- }
151
-
152
- const object = Obj.make(schema, data);
153
- yield* dispatch(createIntent(SpaceAction.AddObject, { object, target: space, hidden: true }));
154
- return object;
155
- }).pipe(Effect.provide(DatabaseService.layer(space.db)), Effect.orDie);
156
- },
157
- });
158
- }
159
-
160
- export default (context: PluginContext): Capability<any>[] => [
161
- contributes(Capabilities.Toolkit, Toolkit),
162
- contributes(Capabilities.ToolkitHandler, Toolkit.layer(context)),
14
+ // TODO(burdon): How to manage dependencies across blueprints.
15
+ contributes(Capabilities.Toolkit, GenericToolkit.make(SystemToolkit.SystemToolkit, SystemToolkit.layer())),
16
+ contributes(Capabilities.Toolkit, GenericToolkit.make(WebSearchToolkit, Layer.empty)),
163
17
  ];
@@ -0,0 +1,29 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { type SurfaceComponentProps } from '@dxos/app-framework/react';
8
+ import { type Blueprint } from '@dxos/blueprints';
9
+ import { Obj } from '@dxos/echo';
10
+ import { Toolbar } from '@dxos/react-ui';
11
+ import { useAttention } from '@dxos/react-ui-attention';
12
+ import { StackItem } from '@dxos/react-ui-stack';
13
+
14
+ import { TemplateEditor } from './TemplateEditor';
15
+
16
+ export type BlueprintArticleProps = SurfaceComponentProps<Blueprint.Blueprint>;
17
+
18
+ export const BlueprintArticle = ({ subject }: BlueprintArticleProps) => {
19
+ const { hasAttention } = useAttention(Obj.getDXN(subject).toString());
20
+
21
+ return (
22
+ <StackItem.Content toolbar>
23
+ <Toolbar.Root disabled={!hasAttention} />
24
+ <TemplateEditor id={subject.id} template={subject.instructions} classNames='container-max-width' />
25
+ </StackItem.Content>
26
+ );
27
+ };
28
+
29
+ export default BlueprintArticle;
@@ -4,9 +4,10 @@
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';
@@ -15,12 +16,14 @@ import { useVoiceInput } from '@dxos/plugin-transcription';
15
16
  import { type Space, getSpace, useQueue } from '@dxos/react-client/echo';
16
17
  import { useIdentity } from '@dxos/react-client/halo';
17
18
  import { Input, type ThemedClassName, useDynamicRef, useTranslation } from '@dxos/react-ui';
18
- import { ChatEditor, type ChatEditorController, type ChatEditorProps, references } from '@dxos/react-ui-chat';
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';
19
22
  import { mx } from '@dxos/react-ui-theme';
20
- import { DataType } from '@dxos/schema';
21
- import { isNotFalsy } from '@dxos/util';
23
+ import { Message } from '@dxos/types';
24
+ import { isTruthy } from '@dxos/util';
22
25
 
23
- import { useReferencesProvider } from '../../hooks';
26
+ import { useChatToolbarActions } from '../../hooks';
24
27
  import { meta } from '../../meta';
25
28
  import { type AiChatProcessor } from '../../processor';
26
29
  import { type Assistant } from '../../types';
@@ -32,11 +35,7 @@ import {
32
35
  ChatReferences,
33
36
  ChatStatusIndicator,
34
37
  } from '../ChatPrompt';
35
- import {
36
- type ChatThreadController,
37
- ChatThread as NaturalChatThread,
38
- type ChatThreadProps as NaturalChatThreadProps,
39
- } from '../ChatThread';
38
+ import { ChatThread as NaturalChatThread, type ChatThreadProps as NaturalChatThreadProps } from '../ChatThread';
40
39
 
41
40
  import { type ChatEvent } from './events';
42
41
 
@@ -49,9 +48,9 @@ import { type ChatEvent } from './events';
49
48
  type ChatContextValue = {
50
49
  debug?: boolean;
51
50
  event: Event<ChatEvent>;
52
- space: Space;
53
- chat: Assistant.Chat;
54
- messages: DataType.Message[];
51
+ space?: Space;
52
+ chat?: Assistant.Chat;
53
+ messages: Message.Message[];
55
54
  processor: AiChatProcessor;
56
55
  };
57
56
 
@@ -61,27 +60,23 @@ export const [ChatContextProvider, useChatContext] = createContext<ChatContextVa
61
60
  // Root
62
61
  //
63
62
 
64
- type ChatRootProps = ThemedClassName<
65
- PropsWithChildren<
66
- Pick<ChatContextValue, 'chat' | 'processor'> & {
67
- onEvent?: (event: ChatEvent) => void;
68
- }
69
- >
63
+ type ChatRootProps = PropsWithChildren<
64
+ Pick<ChatContextValue, 'space' | 'chat' | 'processor'> & {
65
+ onEvent?: (event: ChatEvent) => void;
66
+ }
70
67
  >;
71
68
 
72
- const ChatRoot = ({ classNames, children, chat, processor, onEvent, ...props }: ChatRootProps) => {
69
+ const ChatRoot = ({ children, chat, processor, onEvent, ...props }: ChatRootProps) => {
73
70
  const [debug, setDebug] = useState(false);
74
- const space = getSpace(chat);
75
-
76
- // Messages.
77
- const queue = useQueue<DataType.Message>(chat?.queue.dxn);
78
- const pending = useRxValue(processor.messages);
79
- const streaming = useRxValue(processor.streaming);
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.
@@ -119,37 +114,45 @@ const ChatRoot = ({ classNames, children, chat, processor, onEvent, ...props }:
119
114
  }
120
115
  break;
121
116
  }
122
-
123
- default: {
124
- onEvent?.(ev);
125
- }
126
117
  }
118
+
119
+ onEvent?.(ev);
127
120
  });
128
121
  }, [event, processor, streaming, onEvent]);
129
122
 
130
- if (!space) {
131
- return null;
132
- }
123
+ const space = props.space ?? getSpace(chat);
133
124
 
134
125
  return (
135
126
  <ChatContextProvider
136
127
  debug={debug}
137
128
  event={event}
138
- chat={chat}
139
129
  space={space}
130
+ chat={chat}
140
131
  messages={messages}
141
132
  processor={processor}
142
133
  {...props}
143
134
  >
144
- <div role='none' className={mx('flex flex-col h-full overflow-hidden', classNames)}>
145
- {children}
146
- </div>
135
+ {children}
147
136
  </ChatContextProvider>
148
137
  );
149
138
  };
150
139
 
151
140
  ChatRoot.displayName = 'Chat.Root';
152
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
+
153
156
  //
154
157
  // Prompt
155
158
  //
@@ -157,6 +160,7 @@ ChatRoot.displayName = 'Chat.Root';
157
160
  type ChatPromptProps = ThemedClassName<
158
161
  {
159
162
  outline?: boolean;
163
+ settings?: boolean;
160
164
  } & Pick<ChatEditorProps, 'placeholder'> &
161
165
  Omit<ChatPresetsProps, 'onChange'> & {
162
166
  expandable?: boolean;
@@ -169,6 +173,7 @@ type ChatPromptProps = ThemedClassName<
169
173
  const ChatPrompt = ({
170
174
  classNames,
171
175
  outline,
176
+ settings = true,
172
177
  placeholder,
173
178
  expandable,
174
179
  online,
@@ -178,11 +183,11 @@ const ChatPrompt = ({
178
183
  onOnlineChange,
179
184
  }: ChatPromptProps) => {
180
185
  const { t } = useTranslation(meta.id);
181
- const { space, event, processor } = useChatContext(ChatPrompt.displayName);
186
+ const { space, processor, event } = useChatContext(ChatPrompt.displayName);
182
187
 
183
- const error = useRxValue(processor.error).pipe(Option.getOrUndefined);
184
- const streaming = useRxValue(processor.streaming);
185
- const active = useRxValue(processor.active);
188
+ const error = useAtomValue(processor.error).pipe(Option.getOrUndefined);
189
+ const streaming = useAtomValue(processor.streaming);
190
+ const active = useAtomValue(processor.active);
186
191
  const activeRef = useDynamicRef(active);
187
192
 
188
193
  const editorRef = useRef<ChatEditorController>(null);
@@ -215,43 +220,46 @@ const ChatPrompt = ({
215
220
  },
216
221
  });
217
222
 
218
- // TODO(burdon): Reconcile with object tags.
219
- const referencesProvider = useReferencesProvider(space);
220
223
  const extensions = useMemo<Extension[]>(() => {
221
224
  return [
222
- referencesProvider && references({ provider: referencesProvider }),
223
225
  Prec.highest(
224
- keymap.of(
225
- [
226
- {
227
- key: 'cmd-d',
228
- preventDefault: true,
229
- run: () => {
230
- event.emit({ type: 'toggle-debug' });
231
- return true;
232
- },
226
+ keymap.of([
227
+ {
228
+ key: 'Mod-d',
229
+ preventDefault: true,
230
+ run: () => {
231
+ event.emit({ type: 'toggle-debug' });
232
+ return true;
233
233
  },
234
- expandable && {
235
- key: 'cmd-ArrowUp',
236
- preventDefault: true,
237
- run: () => {
238
- event.emit({ type: 'thread-open' });
239
- return true;
240
- },
234
+ },
235
+ {
236
+ key: 'Mod-ArrowUp',
237
+ preventDefault: true,
238
+ run: () => {
239
+ event.emit({ type: 'nav-previous' });
240
+ return true;
241
241
  },
242
- expandable && {
243
- key: 'cmd-ArrowDown',
244
- preventDefault: true,
245
- run: () => {
246
- event.emit({ type: 'thread-close' });
247
- return true;
248
- },
242
+ shift: () => {
243
+ event.emit({ type: 'thread-open' });
244
+ return true;
249
245
  },
250
- ].filter(isNotFalsy),
251
- ),
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
+ ]),
252
260
  ),
253
- ].filter(isNotFalsy);
254
- }, [event, expandable, referencesProvider]);
261
+ ].filter(isTruthy);
262
+ }, [event, expandable]);
255
263
 
256
264
  const handleSubmit = useCallback<NonNullable<ChatEditorProps['onSubmit']>>(
257
265
  (text) => {
@@ -272,17 +280,16 @@ const ChatPrompt = ({
272
280
 
273
281
  return (
274
282
  <div
283
+ role='group'
275
284
  className={mx(
276
- 'is-full flex flex-col density-fine',
277
- outline && [
278
- 'p-2 bg-groupSurface border border-subduedSeparator transition transition-border [&:has(.cm-content:focus)]:border-separator rounded',
279
- ],
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',
280
288
  classNames,
281
289
  )}
282
290
  >
283
- <div className='flex gap-2'>
291
+ <div role='none' className='flex p-2 gap-2'>
284
292
  <ChatStatusIndicator classNames='p-1' preset={preset} error={error} processing={streaming} />
285
-
286
293
  <ChatEditor
287
294
  ref={editorRef}
288
295
  autoFocus
@@ -294,34 +301,38 @@ const ChatPrompt = ({
294
301
  />
295
302
  </div>
296
303
 
297
- <div className='flex pbs-2 items-center'>
298
- <ChatOptions
299
- space={space}
300
- blueprintRegistry={processor.blueprintRegistry}
301
- context={processor.context}
302
- preset={preset}
303
- presets={presets}
304
- onPresetChange={onPresetChange}
305
- />
306
-
307
- <div role='none' className='pli-cardSpacingChrome grow'>
308
- <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>
309
334
  </div>
310
-
311
- <ChatActions
312
- classNames='col-span-2'
313
- microphone={true}
314
- recording={recording}
315
- processing={streaming}
316
- onEvent={handleEvent}
317
- >
318
- {online !== undefined && (
319
- <Input.Root>
320
- <Input.Switch classNames='mis-2 mie-2' checked={online} onCheckedChange={onOnlineChange} />
321
- </Input.Root>
322
- )}
323
- </ChatActions>
324
- </div>
335
+ )}
325
336
  </div>
326
337
  );
327
338
  };
@@ -335,17 +346,23 @@ ChatPrompt.displayName = 'Chat.Prompt';
335
346
  type ChatThreadProps = Omit<NaturalChatThreadProps, 'identity' | 'messages' | 'tools'>;
336
347
 
337
348
  const ChatThread = (props: ChatThreadProps) => {
338
- const { event, messages, processor } = useChatContext(ChatThread.displayName);
349
+ const { debug, event, messages, processor } = useChatContext(ChatThread.displayName);
339
350
  const identity = useIdentity();
340
- const error = useRxValue(processor.error).pipe(Option.getOrUndefined);
351
+ const error = useAtomValue(processor.error).pipe(Option.getOrUndefined);
341
352
 
342
- const scrollerRef = useRef<ChatThreadController | null>(null);
353
+ const controllerRef = useRef<MarkdownStreamController | null>(null);
343
354
  useEffect(() => {
344
355
  return event.on((event) => {
345
356
  switch (event.type) {
346
357
  case 'submit':
347
358
  case 'scroll-to-bottom':
348
- scrollerRef.current?.scrollToBottom();
359
+ controllerRef.current?.scrollToBottom();
360
+ break;
361
+ case 'nav-previous':
362
+ controllerRef.current?.navigatePrevious();
363
+ break;
364
+ case 'nav-next':
365
+ controllerRef.current?.navigateNext();
349
366
  break;
350
367
  }
351
368
  });
@@ -365,25 +382,50 @@ const ChatThread = (props: ChatThreadProps) => {
365
382
  return (
366
383
  <NaturalChatThread
367
384
  {...props}
368
- ref={scrollerRef}
369
385
  identity={identity}
370
386
  messages={messages}
371
387
  error={error}
388
+ debug={debug}
372
389
  onEvent={handleEvent}
390
+ ref={controllerRef}
373
391
  />
374
392
  );
375
393
  };
376
394
 
377
395
  ChatThread.displayName = 'Chat.Thread';
378
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
+
379
419
  //
380
420
  // Chat
381
421
  //
382
422
 
383
423
  export const Chat = {
384
424
  Root: ChatRoot,
425
+ Viewport: ChatViewport,
385
426
  Prompt: ChatPrompt,
386
427
  Thread: ChatThread,
428
+ Toolbar: ChatToolbar,
387
429
  };
388
430
 
389
- 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
  }