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

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 (462) hide show
  1. package/dist/lib/browser/{BlueprintContainer-IZ4AK5EO.mjs → BlueprintContainer-OWUSKPRK.mjs} +4 -3
  2. package/dist/lib/browser/ChatCompanion-FRCVSLPP.mjs +126 -0
  3. package/dist/lib/browser/ChatCompanion-FRCVSLPP.mjs.map +7 -0
  4. package/dist/lib/browser/{ChatContainer-RP3QEXYX.mjs → ChatContainer-YBJBIVUZ.mjs} +34 -13
  5. package/dist/lib/browser/ChatContainer-YBJBIVUZ.mjs.map +7 -0
  6. package/dist/lib/browser/{ChatDialog-ZVLXFHEY.mjs → ChatDialog-MTPJLEHM.mjs} +26 -9
  7. package/dist/lib/browser/ChatDialog-MTPJLEHM.mjs.map +7 -0
  8. package/dist/lib/browser/{SequenceContainer-3UDVKWPA.mjs → SequenceContainer-TF5QNXYM.mjs} +5 -17
  9. package/dist/lib/browser/SequenceContainer-TF5QNXYM.mjs.map +7 -0
  10. package/dist/lib/browser/ai-service-NRZPTUHO.mjs +22 -0
  11. package/dist/lib/browser/ai-service-NRZPTUHO.mjs.map +7 -0
  12. package/dist/lib/browser/{app-graph-builder-XSEOKJLG.mjs → app-graph-builder-7AAWTWGA.mjs} +25 -36
  13. package/dist/lib/browser/app-graph-builder-7AAWTWGA.mjs.map +7 -0
  14. package/dist/lib/browser/blueprint-definition-CRZPIA5A.mjs +12 -0
  15. package/dist/lib/browser/blueprint-definition-CRZPIA5A.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-6QMISAU6.mjs +167 -0
  17. package/dist/lib/browser/chunk-6QMISAU6.mjs.map +7 -0
  18. package/dist/lib/browser/{chunk-LERGF5YG.mjs → chunk-CFXXQM25.mjs} +96 -22
  19. package/dist/lib/browser/chunk-CFXXQM25.mjs.map +7 -0
  20. package/dist/lib/browser/chunk-IJAJRAR7.mjs +18 -0
  21. package/dist/lib/browser/chunk-IJAJRAR7.mjs.map +7 -0
  22. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  23. package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +7 -0
  24. package/dist/lib/browser/chunk-O4LUJEDV.mjs +20 -0
  25. package/dist/lib/browser/{chunk-FDCJSQYF.mjs.map → chunk-O4LUJEDV.mjs.map} +2 -2
  26. package/dist/lib/browser/chunk-OYFQS7JM.mjs +157 -0
  27. package/dist/lib/browser/chunk-OYFQS7JM.mjs.map +7 -0
  28. package/dist/lib/browser/chunk-SMIVXXAI.mjs +202 -0
  29. package/dist/lib/browser/chunk-SMIVXXAI.mjs.map +7 -0
  30. package/dist/lib/browser/chunk-V5H5CCZA.mjs +218 -0
  31. package/dist/lib/browser/chunk-V5H5CCZA.mjs.map +7 -0
  32. package/dist/lib/browser/chunk-XL557TXF.mjs +2332 -0
  33. package/dist/lib/browser/chunk-XL557TXF.mjs.map +7 -0
  34. package/dist/lib/browser/edge-model-resolver-E5M3CC46.mjs +22 -0
  35. package/dist/lib/browser/edge-model-resolver-E5M3CC46.mjs.map +7 -0
  36. package/dist/lib/browser/index.mjs +134 -59
  37. package/dist/lib/browser/index.mjs.map +4 -4
  38. package/dist/lib/browser/intent-resolver-BQO5SVGI.mjs +112 -0
  39. package/dist/lib/browser/intent-resolver-BQO5SVGI.mjs.map +7 -0
  40. package/dist/lib/browser/local-model-resolver-VZ5WZQIC.mjs +21 -0
  41. package/dist/lib/browser/local-model-resolver-VZ5WZQIC.mjs.map +7 -0
  42. package/dist/lib/browser/meta.json +1 -1
  43. package/dist/lib/browser/{react-surface-3GYEHQRP.mjs → react-surface-VNCD2H7C.mjs} +25 -66
  44. package/dist/lib/browser/react-surface-VNCD2H7C.mjs.map +7 -0
  45. package/dist/lib/browser/{settings-5GTTCVGD.mjs → settings-36V3VUMW.mjs} +6 -5
  46. package/dist/lib/{node-esm/settings-J2EXEM5H.mjs.map → browser/settings-36V3VUMW.mjs.map} +1 -1
  47. package/dist/lib/browser/state-D5IVKNYG.mjs +21 -0
  48. package/dist/lib/browser/state-D5IVKNYG.mjs.map +7 -0
  49. package/dist/lib/browser/toolkit-Y5OYX5PO.mjs +191 -0
  50. package/dist/lib/browser/toolkit-Y5OYX5PO.mjs.map +7 -0
  51. package/dist/lib/browser/types/index.mjs +7 -4
  52. package/dist/lib/node-esm/{BlueprintContainer-RGTMNLNX.mjs → BlueprintContainer-UFVWCRN6.mjs} +4 -3
  53. package/dist/lib/{browser/BlueprintContainer-IZ4AK5EO.mjs.map → node-esm/BlueprintContainer-UFVWCRN6.mjs.map} +1 -1
  54. package/dist/lib/node-esm/ChatCompanion-ZNRZEKH5.mjs +127 -0
  55. package/dist/lib/node-esm/ChatCompanion-ZNRZEKH5.mjs.map +7 -0
  56. package/dist/lib/node-esm/{ChatContainer-W3W6FWV3.mjs → ChatContainer-TUCITJJW.mjs} +34 -13
  57. package/dist/lib/node-esm/ChatContainer-TUCITJJW.mjs.map +7 -0
  58. package/dist/lib/node-esm/{ChatDialog-QW4JRKVO.mjs → ChatDialog-JLM7RDZQ.mjs} +26 -9
  59. package/dist/lib/node-esm/ChatDialog-JLM7RDZQ.mjs.map +7 -0
  60. package/dist/lib/node-esm/{SequenceContainer-RQQH5XOC.mjs → SequenceContainer-UXOVZPZO.mjs} +5 -17
  61. package/dist/lib/node-esm/SequenceContainer-UXOVZPZO.mjs.map +7 -0
  62. package/dist/lib/node-esm/ai-service-UDEPIPTO.mjs +23 -0
  63. package/dist/lib/node-esm/ai-service-UDEPIPTO.mjs.map +7 -0
  64. package/dist/lib/node-esm/{app-graph-builder-PANCJUHV.mjs → app-graph-builder-PNAFQUYT.mjs} +25 -36
  65. package/dist/lib/node-esm/app-graph-builder-PNAFQUYT.mjs.map +7 -0
  66. package/dist/lib/node-esm/blueprint-definition-275J3XL2.mjs +13 -0
  67. package/dist/lib/node-esm/blueprint-definition-275J3XL2.mjs.map +7 -0
  68. package/dist/lib/node-esm/chunk-2X6VEO32.mjs +2333 -0
  69. package/dist/lib/node-esm/chunk-2X6VEO32.mjs.map +7 -0
  70. package/dist/lib/node-esm/chunk-7YOGZI66.mjs +203 -0
  71. package/dist/lib/node-esm/chunk-7YOGZI66.mjs.map +7 -0
  72. package/dist/lib/node-esm/chunk-CAQKGW3B.mjs +159 -0
  73. package/dist/lib/node-esm/chunk-CAQKGW3B.mjs.map +7 -0
  74. package/dist/lib/node-esm/{chunk-MS3PJARN.mjs → chunk-FNZJJL7G.mjs} +96 -22
  75. package/dist/lib/node-esm/chunk-FNZJJL7G.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  77. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  78. package/dist/lib/node-esm/chunk-RLBN4RNR.mjs +168 -0
  79. package/dist/lib/node-esm/chunk-RLBN4RNR.mjs.map +7 -0
  80. package/dist/lib/node-esm/chunk-UWUUZQWJ.mjs +219 -0
  81. package/dist/lib/node-esm/chunk-UWUUZQWJ.mjs.map +7 -0
  82. package/dist/lib/node-esm/chunk-VFY2JG62.mjs +22 -0
  83. package/dist/lib/node-esm/{chunk-QN2H2EHV.mjs.map → chunk-VFY2JG62.mjs.map} +2 -2
  84. package/dist/lib/node-esm/chunk-YPXEA46Q.mjs +19 -0
  85. package/dist/lib/node-esm/chunk-YPXEA46Q.mjs.map +7 -0
  86. package/dist/lib/node-esm/edge-model-resolver-SZHDLXCT.mjs +23 -0
  87. package/dist/lib/node-esm/edge-model-resolver-SZHDLXCT.mjs.map +7 -0
  88. package/dist/lib/node-esm/index.mjs +134 -59
  89. package/dist/lib/node-esm/index.mjs.map +4 -4
  90. package/dist/lib/node-esm/intent-resolver-FIS3T5KP.mjs +113 -0
  91. package/dist/lib/node-esm/intent-resolver-FIS3T5KP.mjs.map +7 -0
  92. package/dist/lib/node-esm/local-model-resolver-2KCBKMYA.mjs +22 -0
  93. package/dist/lib/node-esm/local-model-resolver-2KCBKMYA.mjs.map +7 -0
  94. package/dist/lib/node-esm/meta.json +1 -1
  95. package/dist/lib/node-esm/{react-surface-QDQWJ7FZ.mjs → react-surface-4NLRKNBU.mjs} +25 -66
  96. package/dist/lib/node-esm/react-surface-4NLRKNBU.mjs.map +7 -0
  97. package/dist/lib/node-esm/{settings-J2EXEM5H.mjs → settings-7ZCZ6AS5.mjs} +6 -5
  98. package/dist/lib/{browser/settings-5GTTCVGD.mjs.map → node-esm/settings-7ZCZ6AS5.mjs.map} +1 -1
  99. package/dist/lib/node-esm/state-4VLKPLW3.mjs +22 -0
  100. package/dist/lib/node-esm/state-4VLKPLW3.mjs.map +7 -0
  101. package/dist/lib/node-esm/toolkit-2F2OL6WB.mjs +192 -0
  102. package/dist/lib/node-esm/toolkit-2F2OL6WB.mjs.map +7 -0
  103. package/dist/lib/node-esm/types/index.mjs +7 -4
  104. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/ai-service.d.ts +5 -0
  106. package/dist/types/src/capabilities/ai-service.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  108. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/blueprint-definition.d.ts +7 -0
  110. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/capabilities.d.ts +19 -0
  112. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/edge-model-resolver.d.ts +4 -0
  114. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/index.d.ts +11 -3
  116. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  118. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/local-model-resolver.d.ts +10 -0
  120. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  122. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  123. package/dist/types/src/capabilities/settings.d.ts +1 -1
  124. package/dist/types/src/capabilities/state.d.ts +4 -0
  125. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  126. package/dist/types/src/capabilities/toolkit.d.ts +4 -0
  127. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  128. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  129. package/dist/types/src/components/Chat/Chat.d.ts +19 -16
  130. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  131. package/dist/types/src/components/Chat/events.d.ts +5 -0
  132. package/dist/types/src/components/Chat/events.d.ts.map +1 -1
  133. package/dist/types/src/components/ChatCompanion.d.ts +13 -0
  134. package/dist/types/src/components/ChatCompanion.d.ts.map +1 -0
  135. package/dist/types/src/components/ChatContainer.d.ts +4 -4
  136. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  137. package/dist/types/src/components/ChatDialog.d.ts.map +1 -1
  138. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts +7 -0
  139. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts.map +1 -0
  140. package/dist/types/src/components/ChatProgress/index.d.ts +2 -0
  141. package/dist/types/src/components/ChatProgress/index.d.ts.map +1 -0
  142. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  143. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts +20 -0
  144. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -0
  145. package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts.map +1 -1
  146. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +4 -5
  147. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -1
  148. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts +6 -4
  149. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +1 -1
  150. package/dist/types/src/components/ChatPrompt/index.d.ts +1 -1
  151. package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -1
  152. package/dist/types/src/components/ChatThread/ChatMessage.d.ts +21 -5
  153. package/dist/types/src/components/ChatThread/ChatMessage.d.ts.map +1 -1
  154. package/dist/types/src/components/ChatThread/ChatThread.d.ts +4 -4
  155. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  156. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +108 -30
  157. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  158. package/dist/types/src/components/ChatThread/Link.d.ts +9 -0
  159. package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -0
  160. package/dist/types/src/components/ChatThread/ToolBlock.d.ts +12 -12
  161. package/dist/types/src/components/ChatThread/ToolBlock.d.ts.map +1 -1
  162. package/dist/types/src/components/ChatThread/reducers.d.ts +40 -0
  163. package/dist/types/src/components/ChatThread/reducers.d.ts.map +1 -0
  164. package/dist/types/src/components/PromptSettings.d.ts.map +1 -1
  165. package/dist/types/src/components/SequenceContainer.d.ts.map +1 -1
  166. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts.map +1 -1
  167. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts +257 -2
  168. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts.map +1 -1
  169. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +0 -5
  170. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  171. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +257 -6
  172. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  173. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  174. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +254 -1
  175. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  176. package/dist/types/src/components/TemplateEditor/handlebars-extension.d.ts +12 -0
  177. package/dist/types/src/components/TemplateEditor/handlebars-extension.d.ts.map +1 -0
  178. package/dist/types/src/components/Toolbar/Toolbar.d.ts +4 -0
  179. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -0
  180. package/dist/types/src/components/Toolbar/index.d.ts +2 -0
  181. package/dist/types/src/components/Toolbar/index.d.ts.map +1 -0
  182. package/dist/types/src/components/Toolbar/useChatToolbarActions.d.ts +11 -0
  183. package/dist/types/src/components/Toolbar/useChatToolbarActions.d.ts.map +1 -0
  184. package/dist/types/src/components/Toolbox/Toolbox.d.ts +4 -9
  185. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  186. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +258 -4
  187. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  188. package/dist/types/src/components/index.d.ts +4 -1
  189. package/dist/types/src/components/index.d.ts.map +1 -1
  190. package/dist/types/src/events.d.ts +1 -1
  191. package/dist/types/src/events.d.ts.map +1 -1
  192. package/dist/types/src/execution-graph/execution-graph.d.ts +21 -0
  193. package/dist/types/src/execution-graph/execution-graph.d.ts.map +1 -0
  194. package/dist/types/src/execution-graph/index.d.ts +2 -0
  195. package/dist/types/src/execution-graph/index.d.ts.map +1 -0
  196. package/dist/types/src/functions/analysis.d.ts +5 -0
  197. package/dist/types/src/functions/analysis.d.ts.map +1 -0
  198. package/dist/types/src/functions/index.d.ts +4 -0
  199. package/dist/types/src/functions/index.d.ts.map +1 -0
  200. package/dist/types/src/functions/list.d.ts +10 -0
  201. package/dist/types/src/functions/list.d.ts.map +1 -0
  202. package/dist/types/src/functions/load.d.ts +8 -0
  203. package/dist/types/src/functions/load.d.ts.map +1 -0
  204. package/dist/types/src/hooks/index.d.ts +10 -3
  205. package/dist/types/src/hooks/index.d.ts.map +1 -1
  206. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +24 -0
  207. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -0
  208. package/dist/types/src/hooks/useChatProcessor.d.ts +7 -20
  209. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  210. package/dist/types/src/hooks/useChatServices.d.ts +4 -5
  211. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
  212. package/dist/types/src/hooks/useContextBinder.d.ts +4 -0
  213. package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -0
  214. package/dist/types/src/hooks/useContextObjects.d.ts +15 -0
  215. package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -0
  216. package/dist/types/src/hooks/useExecutionGraph.d.ts +7 -0
  217. package/dist/types/src/hooks/useExecutionGraph.d.ts.map +1 -0
  218. package/dist/types/src/hooks/useFlush.d.ts +6 -0
  219. package/dist/types/src/hooks/useFlush.d.ts.map +1 -0
  220. package/dist/types/src/hooks/useItemTypes.d.ts +4 -0
  221. package/dist/types/src/hooks/useItemTypes.d.ts.map +1 -0
  222. package/dist/types/src/hooks/useMatcherExtension.d.ts +3 -0
  223. package/dist/types/src/hooks/useMatcherExtension.d.ts.map +1 -0
  224. package/dist/types/src/hooks/useOnline.d.ts +3 -0
  225. package/dist/types/src/hooks/useOnline.d.ts.map +1 -0
  226. package/dist/types/src/hooks/usePresets.d.ts +7 -0
  227. package/dist/types/src/hooks/usePresets.d.ts.map +1 -0
  228. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -1
  229. package/dist/types/src/hooks/useResolveRef.d.ts +4 -0
  230. package/dist/types/src/hooks/useResolveRef.d.ts.map +1 -0
  231. package/dist/types/src/parser/filter-generator.d.ts.map +1 -1
  232. package/dist/types/src/parser/query-parser.d.ts.map +1 -1
  233. package/dist/types/src/parser/types.d.ts.map +1 -1
  234. package/dist/types/src/processor/index.d.ts +3 -0
  235. package/dist/types/src/processor/index.d.ts.map +1 -0
  236. package/dist/types/src/{hooks → processor}/presets.d.ts +2 -2
  237. package/dist/types/src/processor/presets.d.ts.map +1 -0
  238. package/dist/types/src/processor/processor.d.ts +80 -0
  239. package/dist/types/src/processor/processor.d.ts.map +1 -0
  240. package/dist/types/src/processor/processor.test.d.ts +2 -0
  241. package/dist/types/src/processor/processor.test.d.ts.map +1 -0
  242. package/dist/types/src/stories/Chat.stories.d.ts +22 -203
  243. package/dist/types/src/stories/Chat.stories.d.ts.map +1 -1
  244. package/dist/types/src/stories/components/BlueprintContainer.d.ts +4 -0
  245. package/dist/types/src/stories/components/BlueprintContainer.d.ts.map +1 -0
  246. package/dist/types/src/stories/components/ChatContainer.d.ts +4 -0
  247. package/dist/types/src/stories/components/ChatContainer.d.ts.map +1 -0
  248. package/dist/types/src/stories/components/CommentsContainer.d.ts +4 -0
  249. package/dist/types/src/stories/components/CommentsContainer.d.ts.map +1 -0
  250. package/dist/types/src/stories/components/GraphContainer.d.ts +6 -0
  251. package/dist/types/src/stories/components/GraphContainer.d.ts.map +1 -0
  252. package/dist/types/src/stories/components/LoggingContainer.d.ts +4 -0
  253. package/dist/types/src/stories/components/LoggingContainer.d.ts.map +1 -0
  254. package/dist/types/src/stories/components/MessageContainer.d.ts +4 -0
  255. package/dist/types/src/stories/components/MessageContainer.d.ts.map +1 -0
  256. package/dist/types/src/stories/components/SurfaceContainer.d.ts +8 -0
  257. package/dist/types/src/stories/components/SurfaceContainer.d.ts.map +1 -0
  258. package/dist/types/src/stories/components/TasksContainer.d.ts +4 -0
  259. package/dist/types/src/stories/components/TasksContainer.d.ts.map +1 -0
  260. package/dist/types/src/stories/components/TokenManagerContainer.d.ts +3 -0
  261. package/dist/types/src/stories/components/TokenManagerContainer.d.ts.map +1 -0
  262. package/dist/types/src/stories/components/index.d.ts +11 -0
  263. package/dist/types/src/stories/components/index.d.ts.map +1 -0
  264. package/dist/types/src/stories/components/types.d.ts +7 -0
  265. package/dist/types/src/stories/components/types.d.ts.map +1 -0
  266. package/dist/types/src/stories/testing/data.d.ts +5 -0
  267. package/dist/types/src/stories/testing/data.d.ts.map +1 -0
  268. package/dist/types/src/stories/testing/index.d.ts +3 -0
  269. package/dist/types/src/stories/testing/index.d.ts.map +1 -0
  270. package/dist/types/src/stories/testing/testing.d.ts +44 -0
  271. package/dist/types/src/stories/testing/testing.d.ts.map +1 -0
  272. package/dist/types/src/testing/index.d.ts +2 -1
  273. package/dist/types/src/testing/index.d.ts.map +1 -1
  274. package/dist/types/src/testing/test-data.d.ts +4 -0
  275. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  276. package/dist/types/src/testing/test-functions.d.ts +5 -2
  277. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  278. package/dist/types/src/testing/test-sequence.d.ts +0 -4
  279. package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
  280. package/dist/types/src/translations.d.ts +26 -11
  281. package/dist/types/src/translations.d.ts.map +1 -1
  282. package/dist/types/src/types/Assistant.d.ts +42 -0
  283. package/dist/types/src/types/Assistant.d.ts.map +1 -0
  284. package/dist/types/src/types/AssistantAction.d.ts +107 -0
  285. package/dist/types/src/types/AssistantAction.d.ts.map +1 -0
  286. package/dist/types/src/types/defs.d.ts +2 -0
  287. package/dist/types/src/types/defs.d.ts.map +1 -0
  288. package/dist/types/src/types/index.d.ts +3 -1
  289. package/dist/types/src/types/index.d.ts.map +1 -1
  290. package/dist/types/src/types/service.d.ts +9 -6
  291. package/dist/types/src/types/service.d.ts.map +1 -1
  292. package/dist/types/tsconfig.tsbuildinfo +1 -1
  293. package/package.json +99 -81
  294. package/src/AssistantPlugin.tsx +52 -16
  295. package/src/capabilities/ai-service.ts +28 -0
  296. package/src/capabilities/app-graph-builder.ts +41 -48
  297. package/src/capabilities/blueprint-definition.ts +42 -0
  298. package/src/capabilities/capabilities.ts +31 -0
  299. package/src/capabilities/edge-model-resolver.ts +27 -0
  300. package/src/capabilities/index.ts +9 -0
  301. package/src/capabilities/intent-resolver.ts +45 -23
  302. package/src/capabilities/local-model-resolver.ts +32 -0
  303. package/src/capabilities/react-surface.tsx +10 -57
  304. package/src/capabilities/state.ts +20 -0
  305. package/src/capabilities/toolkit.ts +163 -0
  306. package/src/components/AssistantSettings/AssistantSettings.tsx +83 -76
  307. package/src/components/Chat/Chat.tsx +171 -165
  308. package/src/components/Chat/events.ts +7 -0
  309. package/src/components/ChatCompanion.tsx +111 -0
  310. package/src/components/ChatContainer.tsx +19 -13
  311. package/src/components/ChatDialog.tsx +11 -7
  312. package/src/components/ChatProgress/ChatProgress.tsx +68 -0
  313. package/src/components/ChatProgress/index.ts +5 -0
  314. package/src/components/ChatPrompt/ChatActions.tsx +10 -24
  315. package/src/components/ChatPrompt/ChatOptions.tsx +233 -0
  316. package/src/components/ChatPrompt/ChatPresets.tsx +1 -0
  317. package/src/components/ChatPrompt/ChatReferences.tsx +31 -36
  318. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +25 -22
  319. package/src/components/ChatPrompt/index.ts +1 -1
  320. package/src/components/ChatThread/ChatMessage.tsx +214 -148
  321. package/src/components/ChatThread/ChatThread.stories.tsx +244 -104
  322. package/src/components/ChatThread/ChatThread.tsx +44 -22
  323. package/src/components/ChatThread/Link.tsx +23 -0
  324. package/src/components/ChatThread/ToolBlock.tsx +103 -77
  325. package/src/components/ChatThread/reducers.ts +151 -0
  326. package/src/components/PromptSettings.tsx +1 -0
  327. package/src/components/SequenceContainer.tsx +27 -28
  328. package/src/components/SequenceEditor/SequenceEditor.stories.tsx +5 -4
  329. package/src/components/SequenceEditor/SequenceEditor.tsx +1 -1
  330. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +25 -12
  331. package/src/components/TemplateEditor/TemplateEditor.tsx +14 -47
  332. package/src/components/TemplateEditor/TemplateForm.stories.tsx +12 -5
  333. package/src/components/TemplateEditor/TemplateForm.tsx +3 -1
  334. package/src/components/TemplateEditor/handlebars-extension.ts +165 -0
  335. package/src/components/Toolbar/Toolbar.tsx +20 -0
  336. package/src/components/Toolbar/index.ts +5 -0
  337. package/src/components/Toolbar/useChatToolbarActions.ts +125 -0
  338. package/src/components/Toolbox/Toolbox.stories.tsx +10 -16
  339. package/src/components/Toolbox/Toolbox.tsx +21 -51
  340. package/src/components/index.ts +3 -4
  341. package/src/events.ts +2 -2
  342. package/src/execution-graph/execution-graph.ts +211 -0
  343. package/src/execution-graph/index.ts +5 -0
  344. package/src/functions/analysis.ts +20 -0
  345. package/src/functions/index.ts +7 -0
  346. package/src/functions/list.ts +46 -0
  347. package/src/functions/load.ts +43 -0
  348. package/src/hooks/index.ts +10 -4
  349. package/src/hooks/useBlueprintRegistry.ts +80 -0
  350. package/src/hooks/useChatProcessor.ts +20 -97
  351. package/src/hooks/useChatServices.ts +29 -32
  352. package/src/hooks/useContextBinder.ts +18 -0
  353. package/src/hooks/useContextObjects.ts +58 -0
  354. package/src/hooks/useExecutionGraph.ts +20 -0
  355. package/src/hooks/useFlush.ts +35 -0
  356. package/src/hooks/useItemTypes.ts +37 -0
  357. package/src/hooks/useMatcherExtension.ts +45 -0
  358. package/src/hooks/useOnline.ts +10 -0
  359. package/src/hooks/usePresets.ts +44 -0
  360. package/src/hooks/useReferencesProvider.ts +11 -9
  361. package/src/hooks/useResolveRef.ts +33 -0
  362. package/src/meta.ts +1 -1
  363. package/src/parser/filter-generator.ts +8 -13
  364. package/src/parser/query-parser.ts +1 -1
  365. package/src/parser/types.ts +2 -0
  366. package/src/processor/index.ts +6 -0
  367. package/src/{hooks → processor}/presets.ts +14 -6
  368. package/src/processor/processor.test.ts +77 -0
  369. package/src/processor/processor.ts +304 -0
  370. package/src/queue-logger.ts +5 -5
  371. package/src/stories/Chat.stories.tsx +391 -293
  372. package/src/stories/components/BlueprintContainer.tsx +32 -0
  373. package/src/stories/components/ChatContainer.tsx +57 -0
  374. package/src/stories/components/CommentsContainer.tsx +25 -0
  375. package/src/stories/components/GraphContainer.tsx +118 -0
  376. package/src/stories/components/LoggingContainer.tsx +21 -0
  377. package/src/stories/components/MessageContainer.tsx +27 -0
  378. package/src/stories/components/SurfaceContainer.tsx +52 -0
  379. package/src/stories/components/TasksContainer.tsx +49 -0
  380. package/src/stories/components/TokenManagerContainer.tsx +14 -0
  381. package/src/stories/components/index.ts +15 -0
  382. package/src/stories/components/types.ts +11 -0
  383. package/src/stories/testing/data.ts +142 -0
  384. package/src/stories/testing/index.ts +6 -0
  385. package/src/stories/testing/testing.tsx +254 -0
  386. package/src/testing/index.ts +2 -1
  387. package/src/testing/test-data.ts +109 -0
  388. package/src/testing/test-functions.ts +8 -3
  389. package/src/testing/test-sequence.ts +2 -27
  390. package/src/translations.ts +30 -11
  391. package/src/types/Assistant.ts +61 -0
  392. package/src/types/AssistantAction.ts +62 -0
  393. package/src/types/defs.ts +5 -0
  394. package/src/types/index.ts +4 -1
  395. package/src/vite-env.d.ts +30 -0
  396. package/dist/lib/browser/ChatContainer-RP3QEXYX.mjs.map +0 -7
  397. package/dist/lib/browser/ChatDialog-ZVLXFHEY.mjs.map +0 -7
  398. package/dist/lib/browser/SequenceContainer-3UDVKWPA.mjs.map +0 -7
  399. package/dist/lib/browser/app-graph-builder-XSEOKJLG.mjs.map +0 -7
  400. package/dist/lib/browser/chunk-63GG6U6D.mjs +0 -2226
  401. package/dist/lib/browser/chunk-63GG6U6D.mjs.map +0 -7
  402. package/dist/lib/browser/chunk-7W7LHTRH.mjs +0 -171
  403. package/dist/lib/browser/chunk-7W7LHTRH.mjs.map +0 -7
  404. package/dist/lib/browser/chunk-FDCJSQYF.mjs +0 -40
  405. package/dist/lib/browser/chunk-KFXSBNZR.mjs +0 -89
  406. package/dist/lib/browser/chunk-KFXSBNZR.mjs.map +0 -7
  407. package/dist/lib/browser/chunk-LERGF5YG.mjs.map +0 -7
  408. package/dist/lib/browser/intent-resolver-MV3VSZLS.mjs +0 -75
  409. package/dist/lib/browser/intent-resolver-MV3VSZLS.mjs.map +0 -7
  410. package/dist/lib/browser/react-surface-3GYEHQRP.mjs.map +0 -7
  411. package/dist/lib/node-esm/ChatContainer-W3W6FWV3.mjs.map +0 -7
  412. package/dist/lib/node-esm/ChatDialog-QW4JRKVO.mjs.map +0 -7
  413. package/dist/lib/node-esm/SequenceContainer-RQQH5XOC.mjs.map +0 -7
  414. package/dist/lib/node-esm/app-graph-builder-PANCJUHV.mjs.map +0 -7
  415. package/dist/lib/node-esm/chunk-BFO3KHYL.mjs +0 -2227
  416. package/dist/lib/node-esm/chunk-BFO3KHYL.mjs.map +0 -7
  417. package/dist/lib/node-esm/chunk-MS3PJARN.mjs.map +0 -7
  418. package/dist/lib/node-esm/chunk-QN2H2EHV.mjs +0 -41
  419. package/dist/lib/node-esm/chunk-VIIMA3XQ.mjs +0 -90
  420. package/dist/lib/node-esm/chunk-VIIMA3XQ.mjs.map +0 -7
  421. package/dist/lib/node-esm/chunk-Z7PUODRT.mjs +0 -172
  422. package/dist/lib/node-esm/chunk-Z7PUODRT.mjs.map +0 -7
  423. package/dist/lib/node-esm/intent-resolver-3FMC3GHC.mjs +0 -76
  424. package/dist/lib/node-esm/intent-resolver-3FMC3GHC.mjs.map +0 -7
  425. package/dist/lib/node-esm/react-surface-QDQWJ7FZ.mjs.map +0 -7
  426. package/dist/types/src/capability-definitions.d.ts +0 -7
  427. package/dist/types/src/capability-definitions.d.ts.map +0 -1
  428. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts +0 -9
  429. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts.map +0 -1
  430. package/dist/types/src/components/ChatThread/reducer.d.ts +0 -12
  431. package/dist/types/src/components/ChatThread/reducer.d.ts.map +0 -1
  432. package/dist/types/src/hooks/chat-processor.d.ts +0 -86
  433. package/dist/types/src/hooks/chat-processor.d.ts.map +0 -1
  434. package/dist/types/src/hooks/chat-processor.test.d.ts +0 -2
  435. package/dist/types/src/hooks/chat-processor.test.d.ts.map +0 -1
  436. package/dist/types/src/hooks/presets.d.ts.map +0 -1
  437. package/dist/types/src/hooks/useBlueprints.d.ts +0 -9
  438. package/dist/types/src/hooks/useBlueprints.d.ts.map +0 -1
  439. package/dist/types/src/tools/function.d.ts +0 -5
  440. package/dist/types/src/tools/function.d.ts.map +0 -1
  441. package/dist/types/src/tools/index.d.ts +0 -3
  442. package/dist/types/src/tools/index.d.ts.map +0 -1
  443. package/dist/types/src/tools/openapi.d.ts +0 -10
  444. package/dist/types/src/tools/openapi.d.ts.map +0 -1
  445. package/dist/types/src/tools/openapi.test.d.ts +0 -2
  446. package/dist/types/src/tools/openapi.test.d.ts.map +0 -1
  447. package/dist/types/src/types/schema.d.ts +0 -120
  448. package/dist/types/src/types/schema.d.ts.map +0 -1
  449. package/src/capability-definitions.ts +0 -15
  450. package/src/components/ChatPrompt/ChatOptionsMenu.tsx +0 -52
  451. package/src/components/ChatThread/reducer.ts +0 -52
  452. package/src/hooks/chat-processor.test.ts +0 -16
  453. package/src/hooks/chat-processor.ts +0 -314
  454. package/src/hooks/useBlueprints.ts +0 -57
  455. package/src/shims.d.ts +0 -8
  456. package/src/tools/function.ts +0 -46
  457. package/src/tools/index.ts +0 -6
  458. package/src/tools/openapi.test.ts +0 -217
  459. package/src/tools/openapi.ts +0 -338
  460. package/src/types/schema.ts +0 -108
  461. package/src/typings.d.ts +0 -9
  462. /package/dist/lib/{node-esm/BlueprintContainer-RGTMNLNX.mjs.map → browser/BlueprintContainer-OWUSKPRK.mjs.map} +0 -0
@@ -4,46 +4,39 @@
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
8
  import { createContext } from '@radix-ui/react-context';
8
- import { dedupeWith } from 'effect/Array';
9
+ import { Array, Option } from 'effect';
9
10
  import React, { type PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from 'react';
10
11
 
11
- import { CollaborationActions, createIntent, useIntentDispatcher } from '@dxos/app-framework';
12
12
  import { Event } from '@dxos/async';
13
- import { DXN, Obj, Ref } from '@dxos/echo';
13
+ import { Obj } from '@dxos/echo';
14
14
  import { log } from '@dxos/log';
15
15
  import { useVoiceInput } from '@dxos/plugin-transcription';
16
- import { type Expando, getSpace, useQueue, type Space } from '@dxos/react-client/echo';
16
+ import { type Space, getSpace, useQueue } from '@dxos/react-client/echo';
17
17
  import { useIdentity } from '@dxos/react-client/halo';
18
- import { Input, useTranslation, type ThemedClassName } from '@dxos/react-ui';
18
+ import { Input, type ThemedClassName, useTranslation } from '@dxos/react-ui';
19
19
  import { ChatEditor, type ChatEditorController, type ChatEditorProps, references } from '@dxos/react-ui-chat';
20
20
  import { type ScrollController } from '@dxos/react-ui-components';
21
21
  import { mx } from '@dxos/react-ui-theme';
22
22
  import { DataType } from '@dxos/schema';
23
23
  import { isNotFalsy } from '@dxos/util';
24
24
 
25
- import { type ChatEvent } from './events';
26
- import { type ChatProcessor, useBlueprints, useReferencesProvider } from '../../hooks';
25
+ import { useReferencesProvider } from '../../hooks';
27
26
  import { meta } from '../../meta';
27
+ import { type AiChatProcessor } from '../../processor';
28
28
  import { type Assistant } from '../../types';
29
29
  import {
30
30
  ChatActions,
31
31
  type ChatActionsProps,
32
- ChatOptionsMenu,
33
- ChatPresets,
32
+ ChatOptions,
34
33
  type ChatPresetsProps,
35
34
  ChatReferences,
36
- type ChatReferencesProps,
37
35
  ChatStatusIndicator,
38
36
  } from '../ChatPrompt';
39
37
  import { ChatThread as NativeChatThread, type ChatThreadProps as NativeChatThreadProps } from '../ChatThread';
40
38
 
41
- // TODO(burdon): Factor out.
42
- const Endcap = ({ children }: PropsWithChildren) => {
43
- return (
44
- <div className='grid w-[var(--rail-action)] h-[var(--rail-action)] items-center justify-center'>{children}</div>
45
- );
46
- };
39
+ import { type ChatEvent } from './events';
47
40
 
48
41
  //
49
42
  // Context
@@ -51,21 +44,17 @@ const Endcap = ({ children }: PropsWithChildren) => {
51
44
  // Components outside of this Radix-style group shuld define their own APIs.
52
45
  //
53
46
 
54
- // TODO(burdon): Inject via effect layer.
55
47
  type ChatContextValue = {
56
48
  debug?: boolean;
57
49
  event: Event<ChatEvent>;
58
50
  space: Space;
59
51
  chat: Assistant.Chat;
60
- processor: ChatProcessor;
61
52
  messages: DataType.Message[];
62
-
63
- /** @deprecated Remove and replace with context. */
64
- artifact?: Expando;
53
+ processor: AiChatProcessor;
65
54
  };
66
55
 
67
56
  // NOTE: Do not export.
68
- const [ChatContextProvider, useChatContext] = createContext<ChatContextValue>('Chat');
57
+ export const [ChatContextProvider, useChatContext] = createContext<ChatContextValue>('Chat');
69
58
 
70
59
  //
71
60
  // Root
@@ -73,72 +62,73 @@ const [ChatContextProvider, useChatContext] = createContext<ChatContextValue>('C
73
62
 
74
63
  type ChatRootProps = ThemedClassName<
75
64
  PropsWithChildren<
76
- Pick<ChatContextValue, 'chat' | 'processor' | 'artifact'> & {
65
+ Pick<ChatContextValue, 'chat' | 'processor'> & {
77
66
  onEvent?: (event: ChatEvent) => void;
78
67
  }
79
68
  >
80
69
  >;
81
70
 
82
- const ChatRoot = ({ classNames, children, chat, processor, artifact, onEvent, ...props }: ChatRootProps) => {
71
+ const ChatRoot = ({ classNames, children, chat, processor, onEvent, ...props }: ChatRootProps) => {
83
72
  const [debug, setDebug] = useState(false);
84
73
  const space = getSpace(chat);
85
74
 
86
75
  // Messages.
87
76
  const queue = useQueue<DataType.Message>(chat?.queue.dxn);
88
- const messages = useMemo(
89
- () =>
90
- dedupeWith(
91
- [...(queue?.objects?.filter(Obj.instanceOf(DataType.Message)) ?? []), ...(processor?.messages.value ?? [])],
92
- (a, b) => a.id === b.id,
93
- ),
94
- [queue?.objects, processor?.messages.value],
95
- );
77
+ const pending = useRxValue(processor.messages);
78
+ const streaming = useRxValue(processor.streaming);
96
79
 
97
- // TODO(burdon): Replace with tool.
98
- const { dispatchPromise: dispatch } = useIntentDispatcher();
99
- useEffect(() => {
100
- if (!processor?.streaming.value && queue?.objects && artifact) {
101
- const message = queue.objects[queue.objects.length - 1];
102
- if (dispatch && space && chat && message) {
103
- void dispatch(
104
- createIntent(CollaborationActions.InsertContent, {
105
- target: artifact,
106
- object: Ref.fromDXN(new DXN(DXN.kind.QUEUE, [...chat.queue.dxn.parts, message.id])),
107
- label: 'View proposal',
108
- }),
109
- );
110
- }
111
- }
112
- }, [queue, processor?.streaming.value]);
80
+ const lastPrompt = useRef<string | undefined>(undefined);
81
+
82
+ 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);
85
+ }, [queue?.objects, pending]);
113
86
 
114
87
  // Events.
115
88
  const event = useMemo(() => new Event<ChatEvent>(), []);
116
89
  useEffect(() => {
117
- return event.on((event) => {
118
- switch (event.type) {
90
+ return event.on((ev) => {
91
+ switch (ev.type) {
119
92
  case 'toggle-debug': {
120
- setDebug((debug) => !debug);
93
+ setDebug((current) => {
94
+ const debug = !current;
95
+ log.info('toggle-debug', { debug });
96
+ return debug;
97
+ });
121
98
  break;
122
99
  }
123
100
 
124
101
  case 'submit': {
125
- if (!processor.streaming.value) {
126
- void processor.request(event.text);
102
+ if (!streaming) {
103
+ lastPrompt.current = ev.text;
104
+ void processor.request({ message: ev.text });
105
+ }
106
+ break;
107
+ }
108
+
109
+ case 'retry': {
110
+ if (!streaming) {
111
+ void processor.retry();
127
112
  }
128
113
  break;
129
114
  }
130
115
 
131
116
  case 'cancel': {
132
- void processor.cancel();
117
+ if (streaming) {
118
+ void processor.cancel();
119
+ if (lastPrompt.current) {
120
+ event.emit({ type: 'update-prompt', text: lastPrompt.current });
121
+ }
122
+ }
133
123
  break;
134
124
  }
135
125
 
136
126
  default: {
137
- onEvent?.(event);
127
+ onEvent?.(ev);
138
128
  }
139
129
  }
140
130
  });
141
- }, [event, onEvent]);
131
+ }, [event, processor, streaming, onEvent]);
142
132
 
143
133
  if (!space) {
144
134
  return null;
@@ -163,79 +153,52 @@ const ChatRoot = ({ classNames, children, chat, processor, artifact, onEvent, ..
163
153
 
164
154
  ChatRoot.displayName = 'Chat.Root';
165
155
 
166
- //
167
- // Thread
168
- //
169
-
170
- type ChatThreadProps = Omit<NativeChatThreadProps, 'identity' | 'space' | 'messages' | 'tools' | 'onEvent'>;
171
-
172
- const ChatThread = (props: ChatThreadProps) => {
173
- const { debug, event, space, processor, messages } = useChatContext(ChatThread.displayName);
174
- const identity = useIdentity();
175
-
176
- const scrollerRef = useRef<ScrollController>(null);
177
- useEffect(() => {
178
- return event.on((event) => {
179
- switch (event.type) {
180
- case 'submit':
181
- case 'scroll-to-bottom':
182
- scrollerRef.current?.scrollToBottom('smooth');
183
- break;
184
- }
185
- });
186
- }, [event]);
187
-
188
- if (!identity) {
189
- return null;
190
- }
191
-
192
- return (
193
- <NativeChatThread
194
- {...props}
195
- ref={scrollerRef}
196
- debug={debug}
197
- identity={identity}
198
- space={space}
199
- messages={messages}
200
- tools={processor?.tools}
201
- onEvent={(ev) => event.emit(ev)}
202
- />
203
- );
204
- };
205
-
206
- ChatThread.displayName = 'Chat.Thread';
207
-
208
156
  //
209
157
  // Prompt
210
158
  //
211
159
 
212
160
  type ChatPromptProps = ThemedClassName<
213
- Pick<ChatEditorProps, 'placeholder'> &
161
+ {
162
+ outline?: boolean;
163
+ } & Pick<ChatEditorProps, 'placeholder'> &
214
164
  Omit<ChatPresetsProps, 'onChange'> & {
215
165
  expandable?: boolean;
216
166
  online?: boolean;
217
- onChangeOnline?: (online: boolean) => void;
218
- onChangePreset?: ChatPresetsProps['onChange'];
167
+ onOnlineChange?: (online: boolean) => void;
168
+ onPresetChange?: ChatPresetsProps['onChange'];
219
169
  }
220
170
  >;
221
171
 
222
172
  const ChatPrompt = ({
223
173
  classNames,
174
+ outline,
224
175
  placeholder,
225
176
  expandable,
226
177
  online,
227
178
  presets,
228
179
  preset,
229
- onChangePreset,
230
- onChangeOnline,
180
+ onPresetChange,
181
+ onOnlineChange,
231
182
  }: ChatPromptProps) => {
232
183
  const { t } = useTranslation(meta.id);
233
184
  const { space, event, processor } = useChatContext(ChatPrompt.displayName);
234
185
 
186
+ const error = useRxValue(processor.error).pipe(Option.getOrUndefined);
187
+ const streaming = useRxValue(processor.streaming);
188
+ const streamingRef = useRef(streaming);
189
+
190
+ const editorRef = useRef<ChatEditorController>(null);
191
+
235
192
  const [active, setActive] = useState(false);
236
193
  useEffect(() => {
237
194
  return event.on((event) => {
238
195
  switch (event.type) {
196
+ case 'update-prompt':
197
+ if (!editorRef.current?.getText()?.length) {
198
+ editorRef.current?.setText(event.text);
199
+ editorRef.current?.focus();
200
+ }
201
+ break;
239
202
  case 'record-start':
240
203
  setActive(true);
241
204
  break;
@@ -246,8 +209,6 @@ const ChatPrompt = ({
246
209
  });
247
210
  }, [event]);
248
211
 
249
- const editorRef = useRef<ChatEditorController>(null);
250
-
251
212
  // TODO(burdon): Configure capability in TranscriptionPlugin.
252
213
  const { recording } = useVoiceInput({
253
214
  active,
@@ -257,16 +218,14 @@ const ChatPrompt = ({
257
218
  },
258
219
  });
259
220
 
260
- const [blueprints, handleUpdateBlueprints] = useBlueprints(space, processor.context, processor.blueprintRegistry);
261
-
262
221
  // TODO(burdon): Reconcile with object tags.
263
- const contextProvider = useReferencesProvider(space);
222
+ const referencesProvider = useReferencesProvider(space);
264
223
  const extensions = useMemo<Extension[]>(() => {
265
224
  return [
266
- contextProvider && references({ provider: contextProvider }),
267
- expandable &&
268
- Prec.highest(
269
- keymap.of([
225
+ referencesProvider && references({ provider: referencesProvider }),
226
+ Prec.highest(
227
+ keymap.of(
228
+ [
270
229
  {
271
230
  key: 'cmd-d',
272
231
  preventDefault: true,
@@ -275,7 +234,7 @@ const ChatPrompt = ({
275
234
  return true;
276
235
  },
277
236
  },
278
- {
237
+ expandable && {
279
238
  key: 'cmd-ArrowUp',
280
239
  preventDefault: true,
281
240
  run: () => {
@@ -283,7 +242,7 @@ const ChatPrompt = ({
283
242
  return true;
284
243
  },
285
244
  },
286
- {
245
+ expandable && {
287
246
  key: 'cmd-ArrowDown',
288
247
  preventDefault: true,
289
248
  run: () => {
@@ -291,19 +250,20 @@ const ChatPrompt = ({
291
250
  return true;
292
251
  },
293
252
  },
294
- ]),
253
+ ].filter(isNotFalsy),
295
254
  ),
255
+ ),
296
256
  ].filter(isNotFalsy);
297
- }, [event, expandable, contextProvider]);
257
+ }, [event, expandable, referencesProvider]);
298
258
 
299
259
  const handleSubmit = useCallback<NonNullable<ChatEditorProps['onSubmit']>>(
300
260
  (text) => {
301
- if (!processor.streaming.value) {
261
+ if (!streamingRef.current) {
302
262
  event.emit({ type: 'submit', text });
303
263
  return true;
304
264
  }
305
265
  },
306
- [processor, event],
266
+ [event],
307
267
  );
308
268
 
309
269
  const handleEvent = useCallback<NonNullable<ChatActionsProps['onEvent']>>(
@@ -313,76 +273,122 @@ const ChatPrompt = ({
313
273
  [event],
314
274
  );
315
275
 
316
- // TODO(burdon): Update context.
317
- const handleUpdateReferences = useCallback<NonNullable<ChatReferencesProps['onUpdate']>>((ids) => {
318
- log.info('update', { ids });
319
- }, []);
320
-
321
276
  return (
322
277
  <div
323
278
  className={mx(
324
- 'is-full grid grid-cols-[var(--rail-action)_1fr_var(--rail-action)] grid-rows-[min-content_min-content_min-content]',
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
+ ],
325
283
  classNames,
326
284
  )}
327
285
  >
328
- <Endcap>
329
- <ChatStatusIndicator preset={preset} error={processor.error.value} processing={processor.streaming.value} />
330
- </Endcap>
331
-
332
- <ChatEditor
333
- ref={editorRef}
334
- autoFocus
335
- lineWrapping
336
- classNames='col-span-2 pis-1 pbs-2'
337
- placeholder={placeholder ?? t('prompt placeholder')}
338
- extensions={extensions}
339
- onSubmit={handleSubmit}
340
- />
341
-
342
- <div />
343
- <ChatReferences
344
- classNames='col-span-2 flex pis-1 items-center'
345
- space={space}
346
- context={processor.context}
347
- onUpdate={handleUpdateReferences}
348
- />
349
-
350
- <ChatOptionsMenu
351
- blueprintRegistry={processor.blueprintRegistry}
352
- blueprints={blueprints}
353
- onChange={handleUpdateBlueprints}
354
- />
355
- <ChatActions
356
- classNames='col-span-2'
357
- microphone={true}
358
- recording={recording}
359
- processing={processor.streaming.value}
360
- onEvent={handleEvent}
361
- >
362
- <>
363
- <div className='grow' />
364
- {presets && <ChatPresets preset={preset} presets={presets} onChange={onChangePreset} />}
286
+ <div className='flex gap-2'>
287
+ <ChatStatusIndicator classNames='p-1' preset={preset} error={error} processing={streaming} />
288
+
289
+ <ChatEditor
290
+ ref={editorRef}
291
+ autoFocus
292
+ lineWrapping
293
+ classNames='col-span-2 pbs-0.5'
294
+ placeholder={placeholder ?? t('prompt placeholder')}
295
+ extensions={extensions}
296
+ onSubmit={handleSubmit}
297
+ />
298
+ </div>
299
+
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} />
312
+ </div>
313
+
314
+ <ChatActions
315
+ classNames='col-span-2'
316
+ microphone={true}
317
+ recording={recording}
318
+ processing={streaming}
319
+ onEvent={handleEvent}
320
+ >
365
321
  {online !== undefined && (
366
322
  <Input.Root>
367
- <Input.Switch classNames='mis-2 mie-2' checked={online} onCheckedChange={onChangeOnline} />
323
+ <Input.Switch classNames='mis-2 mie-2' checked={online} onCheckedChange={onOnlineChange} />
368
324
  </Input.Root>
369
325
  )}
370
- </>
371
- </ChatActions>
326
+ </ChatActions>
327
+ </div>
372
328
  </div>
373
329
  );
374
330
  };
375
331
 
376
332
  ChatPrompt.displayName = 'Chat.Prompt';
377
333
 
334
+ //
335
+ // Thread
336
+ //
337
+
338
+ type ChatThreadProps = Omit<NativeChatThreadProps, 'identity' | 'space' | 'messages' | 'tools' | 'onEvent'>;
339
+
340
+ const ChatThread = (props: ChatThreadProps) => {
341
+ const { debug, event, space, messages, processor } = useChatContext(ChatThread.displayName);
342
+ const identity = useIdentity();
343
+
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);
352
+ useEffect(() => {
353
+ return event.on((event) => {
354
+ switch (event.type) {
355
+ case 'submit':
356
+ case 'scroll-to-bottom':
357
+ scrollerRef.current?.scrollToBottom('smooth');
358
+ break;
359
+ }
360
+ });
361
+ }, [event]);
362
+
363
+ if (!identity) {
364
+ return null;
365
+ }
366
+
367
+ return (
368
+ <NativeChatThread
369
+ {...props}
370
+ ref={scrollerRef}
371
+ debug={debug}
372
+ identity={identity}
373
+ space={space}
374
+ messages={messages}
375
+ error={error}
376
+ toolProvider={toolProvider}
377
+ onEvent={(ev) => event.emit(ev)}
378
+ />
379
+ );
380
+ };
381
+
382
+ ChatThread.displayName = 'Chat.Thread';
383
+
378
384
  //
379
385
  // Chat
380
386
  //
381
387
 
382
388
  export const Chat = {
383
389
  Root: ChatRoot,
384
- Thread: ChatThread,
385
390
  Prompt: ChatPrompt,
391
+ Thread: ChatThread,
386
392
  };
387
393
 
388
394
  export type { ChatRootProps, ChatThreadProps, ChatPromptProps, ChatEvent };
@@ -19,6 +19,9 @@ export type ChatEvent =
19
19
  type: 'submit';
20
20
  text: string;
21
21
  }
22
+ | {
23
+ type: 'retry';
24
+ }
22
25
  | {
23
26
  type: 'cancel';
24
27
  }
@@ -33,6 +36,10 @@ export type ChatEvent =
33
36
  //
34
37
  // UX
35
38
  //
39
+ | {
40
+ type: 'update-prompt';
41
+ text: string;
42
+ }
36
43
  | {
37
44
  type: 'scroll-to-bottom';
38
45
  }
@@ -0,0 +1,111 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Array, Effect, Option, pipe } from 'effect';
6
+ import React, { useMemo } from 'react';
7
+
8
+ import { Capabilities, createIntent, useCapabilities, useIntentDispatcher } from '@dxos/app-framework';
9
+ import { Blueprint } from '@dxos/blueprints';
10
+ import { getSpace } from '@dxos/client/echo';
11
+ import { Filter, Obj, Query, Ref } from '@dxos/echo';
12
+ import { DatabaseService } from '@dxos/functions';
13
+ import { SpaceAction } from '@dxos/plugin-space/types';
14
+ import { useQuery } from '@dxos/react-client/echo';
15
+ import { useAsyncEffect } from '@dxos/react-ui';
16
+
17
+ import { ChatContainer } from '../components';
18
+ import { useContextBinder } from '../hooks';
19
+ import { Assistant, AssistantAction } from '../types';
20
+
21
+ export type ChatCompanionProps = {
22
+ role?: string;
23
+ data: { companionTo: Obj.Any; subject: Assistant.Chat | 'assistant-chat' };
24
+ };
25
+
26
+ export const ChatCompanion = ({ role, data }: ChatCompanionProps) => {
27
+ const companionTo = data.companionTo;
28
+ const space = getSpace(companionTo);
29
+ const chat = data.subject === 'assistant-chat' ? undefined : data.subject;
30
+ const binder = useContextBinder(chat);
31
+ const { dispatch } = useIntentDispatcher();
32
+
33
+ // Initialize companion chat if it doesn't exist.
34
+ useAsyncEffect(async () => {
35
+ if (chat || !space) {
36
+ return;
37
+ }
38
+
39
+ // TODO(burdon): Garbage collection of queues?
40
+ // TODO(wittjosiah): Figure out how to prevent companion chats from showing up in the navtree.
41
+ await Effect.gen(function* () {
42
+ const { objects } = yield* DatabaseService.runQuery(
43
+ Query.select(Filter.ids(companionTo.id)).targetOf(Assistant.CompanionTo).source(),
44
+ );
45
+
46
+ // TODO(wittjosiah): This should be the default sort order.
47
+ let nextChat = objects.toSorted((a, b) => a.id.localeCompare(b.id)).at(-1);
48
+ if (!nextChat) {
49
+ const { object } = yield* dispatch(createIntent(AssistantAction.CreateChat, { space }));
50
+ nextChat = object;
51
+ yield* dispatch(createIntent(SpaceAction.AddObject, { object: nextChat, target: space, hidden: true }));
52
+ yield* dispatch(
53
+ createIntent(SpaceAction.AddRelation, {
54
+ space,
55
+ schema: Assistant.CompanionTo,
56
+ source: nextChat,
57
+ target: data.companionTo,
58
+ }),
59
+ );
60
+ }
61
+
62
+ yield* dispatch(createIntent(AssistantAction.SetCurrentChat, { companionTo, chat: nextChat }));
63
+ }).pipe(Effect.provide(DatabaseService.layer(space.db)), Effect.runPromise);
64
+ }, [space, chat, companionTo]);
65
+
66
+ const metadata = useCapabilities(Capabilities.Metadata);
67
+ const blueprintKeys = useMemo(
68
+ () =>
69
+ pipe(
70
+ metadata,
71
+ Array.findFirst(
72
+ (capability): capability is { id: string; metadata: { blueprints?: string[] } } =>
73
+ capability.id === Obj.getTypename(companionTo),
74
+ ),
75
+ Option.flatMap((c) => Option.fromNullable(c.metadata.blueprints)),
76
+ Option.getOrElse(() => [] as string[]),
77
+ ),
78
+ [metadata, companionTo],
79
+ );
80
+ const allBlueprints = useQuery(space, Filter.type(Blueprint.Blueprint));
81
+ const pluginBlueprints = useMemo(
82
+ () => allBlueprints.filter((blueprint) => blueprintKeys.includes(blueprint.key)),
83
+ [allBlueprints, blueprintKeys],
84
+ );
85
+
86
+ // TODO(wittjosiah): Occasionally this fails to bind but seems to be an upstream issue.
87
+ // It seems like the queue object signal emits as an empty array after previously emitting a non-empty array.
88
+ useAsyncEffect(async () => {
89
+ if (!binder) {
90
+ return;
91
+ }
92
+
93
+ if (pluginBlueprints.length > 0) {
94
+ await binder.bind({ blueprints: pluginBlueprints.map((blueprint) => Ref.make(blueprint)) });
95
+ }
96
+
97
+ if (Obj.instanceOf(Blueprint.Blueprint, companionTo)) {
98
+ await binder.bind({ blueprints: [Ref.make(companionTo)] });
99
+ } else {
100
+ await binder.bind({ objects: [Ref.make(companionTo)] });
101
+ }
102
+ }, [binder, companionTo, pluginBlueprints]);
103
+
104
+ if (!chat) {
105
+ return null;
106
+ }
107
+
108
+ return <ChatContainer role={role} chat={chat} companionTo={companionTo} />;
109
+ };
110
+
111
+ export default ChatCompanion;