@dxos/plugin-assistant 0.8.4-main.2e9d522 → 0.8.4-main.548089c

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 (473) hide show
  1. package/dist/lib/browser/BlueprintArticle-UGPRZRBG.mjs +36 -0
  2. package/dist/lib/browser/BlueprintArticle-UGPRZRBG.mjs.map +7 -0
  3. package/dist/lib/browser/ChatCompanion-BZGANK56.mjs +158 -0
  4. package/dist/lib/browser/ChatCompanion-BZGANK56.mjs.map +7 -0
  5. package/dist/lib/browser/ChatContainer-OG6Y3NHI.mjs +77 -0
  6. package/dist/lib/browser/ChatContainer-OG6Y3NHI.mjs.map +7 -0
  7. package/dist/lib/browser/{ChatDialog-X6VN6QZI.mjs → ChatDialog-NKNUCC3R.mjs} +30 -12
  8. package/dist/lib/browser/ChatDialog-NKNUCC3R.mjs.map +7 -0
  9. package/dist/lib/browser/PromptArticle-QNJAXD5Y.mjs +89 -0
  10. package/dist/lib/browser/PromptArticle-QNJAXD5Y.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-CJ5ZUG5I.mjs +199 -0
  14. package/dist/lib/browser/app-graph-builder-CJ5ZUG5I.mjs.map +7 -0
  15. package/dist/lib/browser/blueprint-definition-5FT5JGPY.mjs +12 -0
  16. package/dist/lib/browser/blueprint-definition-5FT5JGPY.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-AO6XHMQ7.mjs +262 -0
  18. package/dist/lib/browser/chunk-AO6XHMQ7.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-BNTPFZ7O.mjs +229 -0
  20. package/dist/lib/browser/chunk-BNTPFZ7O.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-FJQ4ZRYJ.mjs +335 -0
  22. package/dist/lib/browser/chunk-FJQ4ZRYJ.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-IXIIS4QA.mjs +176 -0
  24. package/dist/lib/browser/chunk-IXIIS4QA.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  26. package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-LRE4VEZV.mjs +16 -0
  28. package/dist/lib/browser/chunk-LRE4VEZV.mjs.map +7 -0
  29. package/dist/lib/browser/chunk-WBG5PTSX.mjs +23 -0
  30. package/dist/lib/browser/chunk-WBG5PTSX.mjs.map +7 -0
  31. package/dist/lib/browser/chunk-Y4C2CMME.mjs +1946 -0
  32. package/dist/lib/browser/chunk-Y4C2CMME.mjs.map +7 -0
  33. package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs +18 -0
  34. package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs.map +7 -0
  35. package/dist/lib/browser/index.mjs +218 -84
  36. package/dist/lib/browser/index.mjs.map +4 -4
  37. package/dist/lib/browser/intent-resolver-42A4SLIQ.mjs +143 -0
  38. package/dist/lib/browser/intent-resolver-42A4SLIQ.mjs.map +7 -0
  39. package/dist/lib/browser/local-model-resolver-34MVHRKD.mjs +17 -0
  40. package/dist/lib/browser/local-model-resolver-34MVHRKD.mjs.map +7 -0
  41. package/dist/lib/browser/meta.json +1 -1
  42. package/dist/lib/browser/react-surface-TULJF2Y3.mjs +98 -0
  43. package/dist/lib/browser/react-surface-TULJF2Y3.mjs.map +7 -0
  44. package/dist/lib/browser/{settings-2DGP3UTS.mjs → settings-NYJGNQ5I.mjs} +8 -7
  45. package/dist/lib/{node-esm/settings-47RYZOU4.mjs.map → browser/settings-NYJGNQ5I.mjs.map} +1 -1
  46. package/dist/lib/browser/state-GG7Z3NB7.mjs +25 -0
  47. package/dist/lib/browser/state-GG7Z3NB7.mjs.map +7 -0
  48. package/dist/lib/browser/toolkit-VYDAWNE4.mjs +17 -0
  49. package/dist/lib/browser/toolkit-VYDAWNE4.mjs.map +7 -0
  50. package/dist/lib/browser/types/index.mjs +7 -4
  51. package/dist/lib/node-esm/BlueprintArticle-RPZ2363K.mjs +37 -0
  52. package/dist/lib/node-esm/BlueprintArticle-RPZ2363K.mjs.map +7 -0
  53. package/dist/lib/node-esm/ChatCompanion-LKWZTSCI.mjs +159 -0
  54. package/dist/lib/node-esm/ChatCompanion-LKWZTSCI.mjs.map +7 -0
  55. package/dist/lib/node-esm/{ChatContainer-VZT74PO2.mjs → ChatContainer-HGAAKVB3.mjs} +38 -15
  56. package/dist/lib/node-esm/ChatContainer-HGAAKVB3.mjs.map +7 -0
  57. package/dist/lib/node-esm/{ChatDialog-RJ6FDX4Q.mjs → ChatDialog-QA545GGB.mjs} +30 -12
  58. package/dist/lib/node-esm/ChatDialog-QA545GGB.mjs.map +7 -0
  59. package/dist/lib/node-esm/PromptArticle-JW46XL4M.mjs +90 -0
  60. package/dist/lib/node-esm/PromptArticle-JW46XL4M.mjs.map +7 -0
  61. package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs +20 -0
  62. package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs.map +7 -0
  63. package/dist/lib/node-esm/app-graph-builder-XPQLG755.mjs +200 -0
  64. package/dist/lib/node-esm/app-graph-builder-XPQLG755.mjs.map +7 -0
  65. package/dist/lib/node-esm/blueprint-definition-XW6QQVLV.mjs +13 -0
  66. package/dist/lib/node-esm/blueprint-definition-XW6QQVLV.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-3YVWS6OI.mjs +264 -0
  68. package/dist/lib/node-esm/chunk-3YVWS6OI.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-AB74FOA2.mjs +230 -0
  70. package/dist/lib/node-esm/chunk-AB74FOA2.mjs.map +7 -0
  71. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  72. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-KJGD4EBJ.mjs +336 -0
  74. package/dist/lib/node-esm/chunk-KJGD4EBJ.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-UXTUHH24.mjs +178 -0
  76. package/dist/lib/node-esm/chunk-UXTUHH24.mjs.map +7 -0
  77. package/dist/lib/node-esm/chunk-VI6S3Q5H.mjs +1947 -0
  78. package/dist/lib/node-esm/chunk-VI6S3Q5H.mjs.map +7 -0
  79. package/dist/lib/node-esm/chunk-WE6KTH72.mjs +25 -0
  80. package/dist/lib/node-esm/chunk-WE6KTH72.mjs.map +7 -0
  81. package/dist/lib/node-esm/chunk-YWFWT57N.mjs +17 -0
  82. package/dist/lib/node-esm/chunk-YWFWT57N.mjs.map +7 -0
  83. package/dist/lib/node-esm/edge-model-resolver-2ARXDOYS.mjs +19 -0
  84. package/dist/lib/node-esm/edge-model-resolver-2ARXDOYS.mjs.map +7 -0
  85. package/dist/lib/node-esm/index.mjs +218 -84
  86. package/dist/lib/node-esm/index.mjs.map +4 -4
  87. package/dist/lib/node-esm/intent-resolver-Y6I3IDSI.mjs +144 -0
  88. package/dist/lib/node-esm/intent-resolver-Y6I3IDSI.mjs.map +7 -0
  89. package/dist/lib/node-esm/local-model-resolver-TP2NTSAX.mjs +18 -0
  90. package/dist/lib/node-esm/local-model-resolver-TP2NTSAX.mjs.map +7 -0
  91. package/dist/lib/node-esm/meta.json +1 -1
  92. package/dist/lib/node-esm/react-surface-C4WY3WRR.mjs +99 -0
  93. package/dist/lib/node-esm/react-surface-C4WY3WRR.mjs.map +7 -0
  94. package/dist/lib/node-esm/{settings-47RYZOU4.mjs → settings-RRHYI5KO.mjs} +8 -7
  95. package/dist/lib/{browser/settings-2DGP3UTS.mjs.map → node-esm/settings-RRHYI5KO.mjs.map} +1 -1
  96. package/dist/lib/node-esm/state-FSUHFMDM.mjs +26 -0
  97. package/dist/lib/node-esm/state-FSUHFMDM.mjs.map +7 -0
  98. package/dist/lib/node-esm/toolkit-HFJZLVIR.mjs +18 -0
  99. package/dist/lib/node-esm/toolkit-HFJZLVIR.mjs.map +7 -0
  100. package/dist/lib/node-esm/types/index.mjs +7 -4
  101. package/dist/types/src/AssistantPlugin.d.ts +1 -1
  102. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/ai-service.d.ts +4 -0
  104. package/dist/types/src/capabilities/ai-service.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  106. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/blueprint-definition.d.ts +7 -0
  108. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/capabilities.d.ts +10 -0
  110. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/edge-model-resolver.d.ts +4 -0
  112. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/index.d.ts +11 -3
  114. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  116. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/local-model-resolver.d.ts +10 -0
  118. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  120. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  121. package/dist/types/src/capabilities/settings.d.ts +1 -1
  122. package/dist/types/src/capabilities/state.d.ts +4 -0
  123. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  124. package/dist/types/src/capabilities/toolkit.d.ts +4 -0
  125. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  126. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  127. package/dist/types/src/components/BlueprintArticle.d.ts +7 -0
  128. package/dist/types/src/components/BlueprintArticle.d.ts.map +1 -0
  129. package/dist/types/src/components/Chat/Chat.d.ts +35 -21
  130. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  131. package/dist/types/src/components/Chat/events.d.ts +9 -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 +9 -6
  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/ChatThread.d.ts +12 -10
  153. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  154. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +164 -70
  155. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  156. package/dist/types/src/components/ChatThread/Link.d.ts +9 -0
  157. package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -0
  158. package/dist/types/src/components/ChatThread/reducers.d.ts +40 -0
  159. package/dist/types/src/components/ChatThread/reducers.d.ts.map +1 -0
  160. package/dist/types/src/components/ChatThread/registry.d.ts +11 -0
  161. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -0
  162. package/dist/types/src/components/ChatThread/sync.d.ts +42 -0
  163. package/dist/types/src/components/ChatThread/sync.d.ts.map +1 -0
  164. package/dist/types/src/components/ChatThread/sync.test.d.ts +2 -0
  165. package/dist/types/src/components/ChatThread/sync.test.d.ts.map +1 -0
  166. package/dist/types/src/components/PromptArticle.d.ts +7 -0
  167. package/dist/types/src/components/PromptArticle.d.ts.map +1 -0
  168. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +3 -6
  169. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  170. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +312 -7
  171. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  172. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +3 -2
  173. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  174. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +309 -2
  175. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  176. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts +12 -0
  177. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +1 -0
  178. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts +3 -0
  179. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts.map +1 -0
  180. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts +8 -0
  181. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts.map +1 -0
  182. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +21 -0
  183. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -0
  184. package/dist/types/src/components/ToolBlock/ToolBlockWidget.d.ts +2 -0
  185. package/dist/types/src/components/ToolBlock/ToolBlockWidget.d.ts.map +1 -0
  186. package/dist/types/src/components/ToolBlock/index.d.ts +3 -0
  187. package/dist/types/src/components/ToolBlock/index.d.ts.map +1 -0
  188. package/dist/types/src/components/Toolbox/Toolbox.d.ts +6 -11
  189. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  190. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +313 -5
  191. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  192. package/dist/types/src/components/index.d.ts +4 -6
  193. package/dist/types/src/components/index.d.ts.map +1 -1
  194. package/dist/types/src/events.d.ts +1 -1
  195. package/dist/types/src/events.d.ts.map +1 -1
  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/object-list.d.ts +10 -0
  201. package/dist/types/src/functions/object-list.d.ts.map +1 -0
  202. package/dist/types/src/functions/object-load.d.ts +8 -0
  203. package/dist/types/src/functions/object-load.d.ts.map +1 -0
  204. package/dist/types/src/hooks/index.d.ts +8 -3
  205. package/dist/types/src/hooks/index.d.ts.map +1 -1
  206. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +25 -0
  207. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -0
  208. package/dist/types/src/hooks/useChatProcessor.d.ts +8 -19
  209. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  210. package/dist/types/src/hooks/useChatServices.d.ts +5 -6
  211. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
  212. package/dist/types/src/hooks/useChatToolbarActions.d.ts +8 -0
  213. package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -0
  214. package/dist/types/src/hooks/useContextBinder.d.ts +4 -0
  215. package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -0
  216. package/dist/types/src/hooks/useContextObjects.d.ts +15 -0
  217. package/dist/types/src/hooks/useContextObjects.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/useOnline.d.ts +3 -0
  223. package/dist/types/src/hooks/useOnline.d.ts.map +1 -0
  224. package/dist/types/src/hooks/usePresets.d.ts +7 -0
  225. package/dist/types/src/hooks/usePresets.d.ts.map +1 -0
  226. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -1
  227. package/dist/types/src/index.d.ts +2 -0
  228. package/dist/types/src/index.d.ts.map +1 -1
  229. package/dist/types/src/meta.d.ts +1 -2
  230. package/dist/types/src/meta.d.ts.map +1 -1
  231. package/dist/types/src/processor/index.d.ts +4 -0
  232. package/dist/types/src/processor/index.d.ts.map +1 -0
  233. package/dist/types/src/{hooks → processor}/presets.d.ts +3 -3
  234. package/dist/types/src/processor/presets.d.ts.map +1 -0
  235. package/dist/types/src/processor/processor.d.ts +74 -0
  236. package/dist/types/src/processor/processor.d.ts.map +1 -0
  237. package/dist/types/src/processor/processor.test.d.ts +2 -0
  238. package/dist/types/src/processor/processor.test.d.ts.map +1 -0
  239. package/dist/types/src/processor/update-name.d.ts +10 -0
  240. package/dist/types/src/processor/update-name.d.ts.map +1 -0
  241. package/dist/types/src/queue-logger.d.ts.map +1 -1
  242. package/dist/types/src/testing/index.d.ts +1 -1
  243. package/dist/types/src/testing/index.d.ts.map +1 -1
  244. package/dist/types/src/testing/test-generator.d.ts +7 -0
  245. package/dist/types/src/testing/test-generator.d.ts.map +1 -0
  246. package/dist/types/src/testing/test-sequence.d.ts +0 -4
  247. package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
  248. package/dist/types/src/testing/test-services.d.ts +2 -2
  249. package/dist/types/src/testing/test-services.d.ts.map +1 -1
  250. package/dist/types/src/translations.d.ts +257 -37
  251. package/dist/types/src/translations.d.ts.map +1 -1
  252. package/dist/types/src/types/Assistant.d.ts +48 -0
  253. package/dist/types/src/types/Assistant.d.ts.map +1 -0
  254. package/dist/types/src/types/AssistantAction.d.ts +132 -0
  255. package/dist/types/src/types/AssistantAction.d.ts.map +1 -0
  256. package/dist/types/src/types/defs.d.ts +2 -0
  257. package/dist/types/src/types/defs.d.ts.map +1 -0
  258. package/dist/types/src/types/index.d.ts +3 -1
  259. package/dist/types/src/types/index.d.ts.map +1 -1
  260. package/dist/types/src/types/service.d.ts +24 -18
  261. package/dist/types/src/types/service.d.ts.map +1 -1
  262. package/dist/types/tsconfig.tsbuildinfo +1 -1
  263. package/package.json +98 -93
  264. package/src/AssistantPlugin.tsx +169 -82
  265. package/src/capabilities/ai-service.ts +27 -0
  266. package/src/capabilities/app-graph-builder.ts +102 -145
  267. package/src/capabilities/blueprint-definition.ts +66 -0
  268. package/src/capabilities/capabilities.ts +17 -0
  269. package/src/capabilities/edge-model-resolver.ts +25 -0
  270. package/src/capabilities/index.ts +9 -0
  271. package/src/capabilities/intent-resolver.ts +103 -14
  272. package/src/capabilities/local-model-resolver.ts +30 -0
  273. package/src/capabilities/react-surface.tsx +26 -77
  274. package/src/capabilities/state.ts +22 -0
  275. package/src/capabilities/toolkit.ts +17 -0
  276. package/src/components/AssistantSettings/AssistantSettings.tsx +83 -76
  277. package/src/components/BlueprintArticle.tsx +29 -0
  278. package/src/components/Chat/Chat.tsx +260 -198
  279. package/src/components/Chat/events.ts +13 -0
  280. package/src/components/ChatCompanion.tsx +155 -0
  281. package/src/components/ChatContainer.tsx +36 -20
  282. package/src/components/ChatDialog.tsx +25 -14
  283. package/src/components/ChatProgress/ChatProgress.tsx +67 -0
  284. package/src/components/{SequenceEditor → ChatProgress}/index.ts +1 -1
  285. package/src/components/ChatPrompt/ChatActions.tsx +10 -26
  286. package/src/components/ChatPrompt/ChatOptions.tsx +228 -0
  287. package/src/components/ChatPrompt/ChatPresets.tsx +1 -0
  288. package/src/components/ChatPrompt/ChatReferences.tsx +31 -36
  289. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +25 -22
  290. package/src/components/ChatPrompt/index.ts +1 -1
  291. package/src/components/ChatThread/ChatThread.stories.tsx +120 -115
  292. package/src/components/ChatThread/ChatThread.tsx +65 -35
  293. package/src/components/ChatThread/Link.tsx +26 -0
  294. package/src/components/ChatThread/reducers.ts +151 -0
  295. package/src/components/ChatThread/registry.tsx +174 -0
  296. package/src/components/ChatThread/sync.test.ts +89 -0
  297. package/src/components/ChatThread/sync.ts +148 -0
  298. package/src/components/ChatThread/testing/thread.md +37 -0
  299. package/src/components/PromptArticle.tsx +85 -0
  300. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +40 -19
  301. package/src/components/TemplateEditor/TemplateEditor.tsx +29 -51
  302. package/src/components/TemplateEditor/TemplateForm.stories.tsx +18 -13
  303. package/src/components/TemplateEditor/TemplateForm.tsx +8 -5
  304. package/src/components/TemplateEditor/extensions/handlebars-extension.ts +269 -0
  305. package/src/components/TemplateEditor/extensions/index.ts +6 -0
  306. package/src/components/TemplateEditor/extensions/xml-extension.ts +64 -0
  307. package/src/components/ToolBlock/ToolBlock.tsx +143 -0
  308. package/src/components/ToolBlock/ToolBlockWidget.tsx +5 -0
  309. package/src/components/ToolBlock/index.ts +6 -0
  310. package/src/components/Toolbox/Toolbox.stories.tsx +14 -23
  311. package/src/components/Toolbox/Toolbox.tsx +25 -55
  312. package/src/components/index.ts +3 -7
  313. package/src/events.ts +2 -2
  314. package/src/functions/analysis.ts +22 -0
  315. package/src/functions/index.ts +7 -0
  316. package/src/functions/object-list.ts +48 -0
  317. package/src/functions/object-load.ts +45 -0
  318. package/src/hooks/index.ts +8 -4
  319. package/src/hooks/useBlueprintRegistry.ts +95 -0
  320. package/src/hooks/useChatProcessor.ts +35 -104
  321. package/src/hooks/useChatServices.ts +33 -73
  322. package/src/hooks/useChatToolbarActions.ts +122 -0
  323. package/src/hooks/useContextBinder.ts +30 -0
  324. package/src/hooks/useContextObjects.ts +58 -0
  325. package/src/hooks/useFlush.ts +35 -0
  326. package/src/hooks/useItemTypes.ts +37 -0
  327. package/src/hooks/useOnline.ts +10 -0
  328. package/src/hooks/usePresets.ts +44 -0
  329. package/src/hooks/useReferencesProvider.ts +13 -10
  330. package/src/index.ts +2 -0
  331. package/src/meta.ts +9 -6
  332. package/src/processor/index.ts +7 -0
  333. package/src/{hooks → processor}/presets.ts +16 -8
  334. package/src/processor/processor.test.ts +71 -0
  335. package/src/processor/processor.ts +277 -0
  336. package/src/processor/update-name.ts +56 -0
  337. package/src/queue-logger.ts +13 -17
  338. package/src/testing/index.ts +1 -1
  339. package/src/testing/test-generator.ts +261 -0
  340. package/src/testing/test-sequence.ts +2 -27
  341. package/src/testing/test-services.ts +2 -8
  342. package/src/translations.ts +44 -26
  343. package/src/types/Assistant.ts +63 -0
  344. package/src/types/AssistantAction.ts +79 -0
  345. package/src/types/defs.ts +5 -0
  346. package/src/types/index.ts +4 -1
  347. package/src/types/service.ts +17 -9
  348. package/src/vite-env.d.ts +30 -0
  349. package/dist/lib/browser/ChatContainer-M3IHQLRS.mjs +0 -54
  350. package/dist/lib/browser/ChatContainer-M3IHQLRS.mjs.map +0 -7
  351. package/dist/lib/browser/ChatDialog-X6VN6QZI.mjs.map +0 -7
  352. package/dist/lib/browser/SequenceContainer-3UDVKWPA.mjs +0 -162
  353. package/dist/lib/browser/SequenceContainer-3UDVKWPA.mjs.map +0 -7
  354. package/dist/lib/browser/TemplateContainer-RPJ2LBOB.mjs +0 -27
  355. package/dist/lib/browser/TemplateContainer-RPJ2LBOB.mjs.map +0 -7
  356. package/dist/lib/browser/app-graph-builder-JTXBKE7O.mjs +0 -223
  357. package/dist/lib/browser/app-graph-builder-JTXBKE7O.mjs.map +0 -7
  358. package/dist/lib/browser/chunk-AEAEKWOC.mjs +0 -98
  359. package/dist/lib/browser/chunk-AEAEKWOC.mjs.map +0 -7
  360. package/dist/lib/browser/chunk-EQDW6BYQ.mjs +0 -108
  361. package/dist/lib/browser/chunk-EQDW6BYQ.mjs.map +0 -7
  362. package/dist/lib/browser/chunk-FDCJSQYF.mjs +0 -40
  363. package/dist/lib/browser/chunk-FDCJSQYF.mjs.map +0 -7
  364. package/dist/lib/browser/chunk-JQBVLTM5.mjs +0 -158
  365. package/dist/lib/browser/chunk-JQBVLTM5.mjs.map +0 -7
  366. package/dist/lib/browser/chunk-OWY4CUQY.mjs +0 -2245
  367. package/dist/lib/browser/chunk-OWY4CUQY.mjs.map +0 -7
  368. package/dist/lib/browser/intent-resolver-5RMMCMXG.mjs +0 -60
  369. package/dist/lib/browser/intent-resolver-5RMMCMXG.mjs.map +0 -7
  370. package/dist/lib/browser/react-surface-66VY37YQ.mjs +0 -150
  371. package/dist/lib/browser/react-surface-66VY37YQ.mjs.map +0 -7
  372. package/dist/lib/node-esm/ChatContainer-VZT74PO2.mjs.map +0 -7
  373. package/dist/lib/node-esm/ChatDialog-RJ6FDX4Q.mjs.map +0 -7
  374. package/dist/lib/node-esm/SequenceContainer-RQQH5XOC.mjs +0 -163
  375. package/dist/lib/node-esm/SequenceContainer-RQQH5XOC.mjs.map +0 -7
  376. package/dist/lib/node-esm/TemplateContainer-A3NAQCZE.mjs +0 -28
  377. package/dist/lib/node-esm/TemplateContainer-A3NAQCZE.mjs.map +0 -7
  378. package/dist/lib/node-esm/app-graph-builder-OWSOXFTD.mjs +0 -224
  379. package/dist/lib/node-esm/app-graph-builder-OWSOXFTD.mjs.map +0 -7
  380. package/dist/lib/node-esm/chunk-2XL6MNPE.mjs +0 -99
  381. package/dist/lib/node-esm/chunk-2XL6MNPE.mjs.map +0 -7
  382. package/dist/lib/node-esm/chunk-BISJDTBK.mjs +0 -159
  383. package/dist/lib/node-esm/chunk-BISJDTBK.mjs.map +0 -7
  384. package/dist/lib/node-esm/chunk-E33DNNDW.mjs +0 -109
  385. package/dist/lib/node-esm/chunk-E33DNNDW.mjs.map +0 -7
  386. package/dist/lib/node-esm/chunk-QN2H2EHV.mjs +0 -41
  387. package/dist/lib/node-esm/chunk-QN2H2EHV.mjs.map +0 -7
  388. package/dist/lib/node-esm/chunk-SENTQAEO.mjs +0 -2246
  389. package/dist/lib/node-esm/chunk-SENTQAEO.mjs.map +0 -7
  390. package/dist/lib/node-esm/intent-resolver-YPPYELY3.mjs +0 -61
  391. package/dist/lib/node-esm/intent-resolver-YPPYELY3.mjs.map +0 -7
  392. package/dist/lib/node-esm/react-surface-RJMRBR2M.mjs +0 -151
  393. package/dist/lib/node-esm/react-surface-RJMRBR2M.mjs.map +0 -7
  394. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts +0 -9
  395. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts.map +0 -1
  396. package/dist/types/src/components/ChatThread/ChatMessage.d.ts +0 -17
  397. package/dist/types/src/components/ChatThread/ChatMessage.d.ts.map +0 -1
  398. package/dist/types/src/components/ChatThread/ToolBlock.d.ts +0 -19
  399. package/dist/types/src/components/ChatThread/ToolBlock.d.ts.map +0 -1
  400. package/dist/types/src/components/ChatThread/reducer.d.ts +0 -12
  401. package/dist/types/src/components/ChatThread/reducer.d.ts.map +0 -1
  402. package/dist/types/src/components/PromptSettings.d.ts +0 -6
  403. package/dist/types/src/components/PromptSettings.d.ts.map +0 -1
  404. package/dist/types/src/components/SequenceContainer.d.ts +0 -8
  405. package/dist/types/src/components/SequenceContainer.d.ts.map +0 -1
  406. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts +0 -13
  407. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts.map +0 -1
  408. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts +0 -8
  409. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts.map +0 -1
  410. package/dist/types/src/components/SequenceEditor/index.d.ts +0 -2
  411. package/dist/types/src/components/SequenceEditor/index.d.ts.map +0 -1
  412. package/dist/types/src/components/TemplateContainer.d.ts +0 -8
  413. package/dist/types/src/components/TemplateContainer.d.ts.map +0 -1
  414. package/dist/types/src/hooks/chat-processor.d.ts +0 -86
  415. package/dist/types/src/hooks/chat-processor.d.ts.map +0 -1
  416. package/dist/types/src/hooks/chat-processor.test.d.ts +0 -2
  417. package/dist/types/src/hooks/chat-processor.test.d.ts.map +0 -1
  418. package/dist/types/src/hooks/presets.d.ts.map +0 -1
  419. package/dist/types/src/hooks/useBlueprints.d.ts +0 -9
  420. package/dist/types/src/hooks/useBlueprints.d.ts.map +0 -1
  421. package/dist/types/src/parser/filter-generator.d.ts +0 -4
  422. package/dist/types/src/parser/filter-generator.d.ts.map +0 -1
  423. package/dist/types/src/parser/filter-generator.test.d.ts +0 -2
  424. package/dist/types/src/parser/filter-generator.test.d.ts.map +0 -1
  425. package/dist/types/src/parser/index.d.ts +0 -4
  426. package/dist/types/src/parser/index.d.ts.map +0 -1
  427. package/dist/types/src/parser/query-parser.d.ts +0 -15
  428. package/dist/types/src/parser/query-parser.d.ts.map +0 -1
  429. package/dist/types/src/parser/query-parser.test.d.ts +0 -2
  430. package/dist/types/src/parser/query-parser.test.d.ts.map +0 -1
  431. package/dist/types/src/parser/types.d.ts +0 -24
  432. package/dist/types/src/parser/types.d.ts.map +0 -1
  433. package/dist/types/src/stories/Chat.stories.d.ts +0 -249
  434. package/dist/types/src/stories/Chat.stories.d.ts.map +0 -1
  435. package/dist/types/src/testing/test-functions.d.ts +0 -3
  436. package/dist/types/src/testing/test-functions.d.ts.map +0 -1
  437. package/dist/types/src/tools/function.d.ts +0 -5
  438. package/dist/types/src/tools/function.d.ts.map +0 -1
  439. package/dist/types/src/tools/index.d.ts +0 -3
  440. package/dist/types/src/tools/index.d.ts.map +0 -1
  441. package/dist/types/src/tools/openapi.d.ts +0 -10
  442. package/dist/types/src/tools/openapi.d.ts.map +0 -1
  443. package/dist/types/src/tools/openapi.test.d.ts +0 -2
  444. package/dist/types/src/tools/openapi.test.d.ts.map +0 -1
  445. package/dist/types/src/types/schema.d.ts +0 -88
  446. package/dist/types/src/types/schema.d.ts.map +0 -1
  447. package/src/components/ChatPrompt/ChatOptionsMenu.tsx +0 -52
  448. package/src/components/ChatThread/ChatMessage.tsx +0 -268
  449. package/src/components/ChatThread/ToolBlock.tsx +0 -121
  450. package/src/components/ChatThread/reducer.ts +0 -52
  451. package/src/components/PromptSettings.tsx +0 -89
  452. package/src/components/SequenceContainer.tsx +0 -132
  453. package/src/components/SequenceEditor/SequenceEditor.stories.tsx +0 -32
  454. package/src/components/SequenceEditor/SequenceEditor.tsx +0 -50
  455. package/src/components/TemplateContainer.tsx +0 -24
  456. package/src/hooks/chat-processor.test.ts +0 -16
  457. package/src/hooks/chat-processor.ts +0 -314
  458. package/src/hooks/useBlueprints.ts +0 -57
  459. package/src/parser/filter-generator.test.ts +0 -32
  460. package/src/parser/filter-generator.ts +0 -81
  461. package/src/parser/index.ts +0 -7
  462. package/src/parser/query-parser.test.ts +0 -139
  463. package/src/parser/query-parser.ts +0 -199
  464. package/src/parser/types.ts +0 -34
  465. package/src/shims.d.ts +0 -8
  466. package/src/stories/Chat.stories.tsx +0 -378
  467. package/src/testing/test-functions.ts +0 -11
  468. package/src/tools/function.ts +0 -46
  469. package/src/tools/index.ts +0 -6
  470. package/src/tools/openapi.test.ts +0 -217
  471. package/src/tools/openapi.ts +0 -338
  472. package/src/types/schema.ts +0 -95
  473. package/src/typings.d.ts +0 -9
@@ -4,46 +4,40 @@
4
4
 
5
5
  import { type Extension, Prec } from '@codemirror/state';
6
6
  import { keymap } from '@codemirror/view';
7
+ import { useAtomValue } from '@effect-atom/atom-react';
7
8
  import { createContext } from '@radix-ui/react-context';
8
- import { dedupeWith } from 'effect/Array';
9
+ import * as Array from 'effect/Array';
10
+ import * as Option from 'effect/Option';
9
11
  import React, { type PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from 'react';
10
12
 
11
- import { CollaborationActions, createIntent, useIntentDispatcher } from '@dxos/app-framework';
12
13
  import { Event } from '@dxos/async';
13
- import { DXN, Obj, Ref } from '@dxos/echo';
14
- import { log } from '@dxos/log';
14
+ import { Obj } from '@dxos/echo';
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, useDynamicRef, useTranslation } from '@dxos/react-ui';
19
19
  import { ChatEditor, type ChatEditorController, type ChatEditorProps, references } from '@dxos/react-ui-chat';
20
- import { type ScrollController } from '@dxos/react-ui-components';
20
+ import { type MarkdownStreamController } from '@dxos/react-ui-components';
21
+ import { MenuProvider, ToolbarMenu } from '@dxos/react-ui-menu';
21
22
  import { mx } from '@dxos/react-ui-theme';
22
- import { DataType } from '@dxos/schema';
23
- import { isNotFalsy } from '@dxos/util';
23
+ import { Message } from '@dxos/types';
24
+ import { isTruthy } from '@dxos/util';
24
25
 
25
- import { type ChatEvent } from './events';
26
- import { type ChatProcessor, useBlueprints, useReferencesProvider } from '../../hooks';
26
+ import { useChatToolbarActions, useReferencesProvider } from '../../hooks';
27
27
  import { meta } from '../../meta';
28
+ import { type AiChatProcessor } from '../../processor';
28
29
  import { type Assistant } from '../../types';
29
30
  import {
30
31
  ChatActions,
31
32
  type ChatActionsProps,
32
- ChatOptionsMenu,
33
- ChatPresets,
33
+ ChatOptions,
34
34
  type ChatPresetsProps,
35
35
  ChatReferences,
36
- type ChatReferencesProps,
37
36
  ChatStatusIndicator,
38
37
  } from '../ChatPrompt';
39
- import { ChatThread as NativeChatThread, type ChatThreadProps as NativeChatThreadProps } from '../ChatThread';
38
+ import { ChatThread as NaturalChatThread, type ChatThreadProps as NaturalChatThreadProps } from '../ChatThread';
40
39
 
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
- };
40
+ import { type ChatEvent } from './events';
47
41
 
48
42
  //
49
43
  // Context
@@ -51,112 +45,94 @@ const Endcap = ({ children }: PropsWithChildren) => {
51
45
  // Components outside of this Radix-style group shuld define their own APIs.
52
46
  //
53
47
 
54
- // TODO(burdon): Inject via effect layer.
55
48
  type ChatContextValue = {
56
49
  debug?: boolean;
57
50
  event: Event<ChatEvent>;
58
- space: Space;
59
- chat: Assistant.Chat;
60
- processor: ChatProcessor;
61
- messages: DataType.Message[];
62
-
63
- /** @deprecated Remove and replace with context. */
64
- artifact?: Expando;
51
+ space?: Space;
52
+ chat?: Assistant.Chat;
53
+ messages: Message.Message[];
54
+ processor: AiChatProcessor;
65
55
  };
66
56
 
67
- // 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
72
61
  //
73
62
 
74
- type ChatRootProps = ThemedClassName<
75
- PropsWithChildren<
76
- Pick<ChatContextValue, 'chat' | 'processor' | 'artifact'> & {
77
- onEvent?: (event: ChatEvent) => void;
78
- }
79
- >
63
+ type ChatRootProps = PropsWithChildren<
64
+ Pick<ChatContextValue, 'space' | 'chat' | 'processor'> & {
65
+ onEvent?: (event: ChatEvent) => void;
66
+ }
80
67
  >;
81
68
 
82
- const ChatRoot = ({ classNames, children, chat, processor, artifact, onEvent, ...props }: ChatRootProps) => {
69
+ const ChatRoot = ({ children, chat, processor, onEvent, ...props }: ChatRootProps) => {
83
70
  const [debug, setDebug] = useState(false);
84
- const space = getSpace(chat);
71
+ const pending = useAtomValue(processor.messages);
72
+ const streaming = useAtomValue(processor.streaming);
73
+ const lastPrompt = useRef<string | undefined>(undefined);
85
74
 
86
75
  // Messages.
87
- 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
- );
96
-
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]);
76
+ const queue = useQueue<Message.Message>(chat?.queue.dxn);
77
+ const messages = useMemo(() => {
78
+ const queueMessages = queue?.objects?.filter(Obj.instanceOf(Message.Message)) ?? [];
79
+ return Array.dedupeWith([...queueMessages, ...pending], ({ id: a }, { id: b }) => a === b);
80
+ }, [queue?.objects, pending]);
113
81
 
114
82
  // Events.
115
83
  const event = useMemo(() => new Event<ChatEvent>(), []);
116
84
  useEffect(() => {
117
- return event.on((event) => {
118
- switch (event.type) {
85
+ return event.on((ev) => {
86
+ switch (ev.type) {
119
87
  case 'toggle-debug': {
120
- setDebug((debug) => !debug);
88
+ setDebug((current) => !current);
121
89
  break;
122
90
  }
123
91
 
124
92
  case 'submit': {
125
- if (!processor.streaming.value) {
126
- void processor.request(event.text);
93
+ const text = ev.text.trim();
94
+ if (!streaming && text.length) {
95
+ lastPrompt.current = ev.text;
96
+ void processor.request({ message: text });
127
97
  }
128
98
  break;
129
99
  }
130
100
 
131
- case 'cancel': {
132
- void processor.cancel();
101
+ case 'retry': {
102
+ if (!streaming) {
103
+ void processor.retry();
104
+ }
133
105
  break;
134
106
  }
135
107
 
136
- default: {
137
- onEvent?.(event);
108
+ case 'cancel': {
109
+ if (streaming) {
110
+ void processor.cancel();
111
+ if (lastPrompt.current) {
112
+ event.emit({ type: 'update-prompt', text: lastPrompt.current });
113
+ }
114
+ }
115
+ break;
138
116
  }
139
117
  }
118
+
119
+ onEvent?.(ev);
140
120
  });
141
- }, [event, onEvent]);
121
+ }, [event, processor, streaming, onEvent]);
142
122
 
143
- if (!space) {
144
- return null;
145
- }
123
+ const space = props.space ?? getSpace(chat);
146
124
 
147
125
  return (
148
126
  <ChatContextProvider
149
127
  debug={debug}
150
128
  event={event}
151
- chat={chat}
152
129
  space={space}
153
- processor={processor}
130
+ chat={chat}
154
131
  messages={messages}
132
+ processor={processor}
155
133
  {...props}
156
134
  >
157
- <div role='none' className={mx('flex flex-col h-full overflow-hidden', classNames)}>
158
- {children}
159
- </div>
135
+ {children}
160
136
  </ChatContextProvider>
161
137
  );
162
138
  };
@@ -164,111 +140,96 @@ const ChatRoot = ({ classNames, children, chat, processor, artifact, onEvent, ..
164
140
  ChatRoot.displayName = 'Chat.Root';
165
141
 
166
142
  //
167
- // Thread
143
+ // Viewport
168
144
  //
169
145
 
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
- }
146
+ type ChatViewportProps = ThemedClassName<PropsWithChildren>;
191
147
 
148
+ const ChatViewport = ({ classNames, children }: ChatViewportProps) => {
192
149
  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
- />
150
+ <div role='none' className={mx('flex flex-col bs-full is-full', classNames)}>
151
+ {children}
152
+ </div>
203
153
  );
204
154
  };
205
155
 
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
+ settings?: boolean;
164
+ } & Pick<ChatEditorProps, 'placeholder'> &
214
165
  Omit<ChatPresetsProps, 'onChange'> & {
215
166
  expandable?: boolean;
216
167
  online?: boolean;
217
- onChangeOnline?: (online: boolean) => void;
218
- onChangePreset?: ChatPresetsProps['onChange'];
168
+ onOnlineChange?: (online: boolean) => void;
169
+ onPresetChange?: ChatPresetsProps['onChange'];
219
170
  }
220
171
  >;
221
172
 
222
173
  const ChatPrompt = ({
223
174
  classNames,
175
+ outline,
176
+ settings = true,
224
177
  placeholder,
225
178
  expandable,
226
179
  online,
227
180
  presets,
228
181
  preset,
229
- onChangePreset,
230
- onChangeOnline,
182
+ onPresetChange,
183
+ onOnlineChange,
231
184
  }: ChatPromptProps) => {
232
185
  const { t } = useTranslation(meta.id);
233
- const { space, event, processor } = useChatContext(ChatPrompt.displayName);
186
+ const { space, processor, event } = useChatContext(ChatPrompt.displayName);
187
+
188
+ const error = useAtomValue(processor.error).pipe(Option.getOrUndefined);
189
+ const streaming = useAtomValue(processor.streaming);
190
+ const active = useAtomValue(processor.active);
191
+ const activeRef = useDynamicRef(active);
234
192
 
235
- const [active, setActive] = useState(false);
193
+ const editorRef = useRef<ChatEditorController>(null);
194
+ const [recordingState, setRecordingState] = useState(false);
236
195
  useEffect(() => {
237
196
  return event.on((event) => {
238
197
  switch (event.type) {
198
+ case 'update-prompt':
199
+ if (!editorRef.current?.getText()?.length) {
200
+ editorRef.current?.setText(event.text);
201
+ editorRef.current?.focus();
202
+ }
203
+ break;
239
204
  case 'record-start':
240
- setActive(true);
205
+ setRecordingState(true);
241
206
  break;
242
207
  case 'record-stop':
243
- setActive(false);
208
+ setRecordingState(false);
244
209
  break;
245
210
  }
246
211
  });
247
212
  }, [event]);
248
213
 
249
- const editorRef = useRef<ChatEditorController>(null);
250
-
251
214
  // TODO(burdon): Configure capability in TranscriptionPlugin.
252
215
  const { recording } = useVoiceInput({
253
- active,
216
+ active: recordingState,
254
217
  onUpdate: (text) => {
255
218
  editorRef.current?.setText(text);
256
219
  editorRef.current?.focus();
257
220
  },
258
221
  });
259
222
 
260
- const [blueprints, handleUpdateBlueprints] = useBlueprints(space, processor.context, processor.blueprintRegistry);
261
-
262
223
  // TODO(burdon): Reconcile with object tags.
263
- const contextProvider = useReferencesProvider(space);
224
+ const referencesProvider = useReferencesProvider(space);
264
225
  const extensions = useMemo<Extension[]>(() => {
265
226
  return [
266
- contextProvider && references({ provider: contextProvider }),
267
- expandable &&
268
- Prec.highest(
269
- keymap.of([
227
+ referencesProvider && references({ provider: referencesProvider }),
228
+ Prec.highest(
229
+ keymap.of(
230
+ [
270
231
  {
271
- key: 'cmd-d',
232
+ key: 'Mod-d',
272
233
  preventDefault: true,
273
234
  run: () => {
274
235
  event.emit({ type: 'toggle-debug' });
@@ -276,34 +237,55 @@ const ChatPrompt = ({
276
237
  },
277
238
  },
278
239
  {
279
- key: 'cmd-ArrowUp',
240
+ key: 'Mod-ArrowUp',
280
241
  preventDefault: true,
281
242
  run: () => {
282
- event.emit({ type: 'thread-open' });
243
+ event.emit({ type: 'nav-previous' });
283
244
  return true;
284
245
  },
285
246
  },
286
247
  {
287
- key: 'cmd-ArrowDown',
248
+ key: 'Mod-ArrowDown',
288
249
  preventDefault: true,
289
250
  run: () => {
290
- event.emit({ type: 'thread-close' });
251
+ event.emit({ type: 'nav-next' });
291
252
  return true;
292
253
  },
293
254
  },
294
- ]),
255
+ ...(expandable
256
+ ? [
257
+ {
258
+ key: 'Shift-Mod-ArrowUp',
259
+ preventDefault: true,
260
+ run: () => {
261
+ event.emit({ type: 'thread-open' });
262
+ return true;
263
+ },
264
+ },
265
+ {
266
+ key: 'Shift-Mod-ArrowDown',
267
+ preventDefault: true,
268
+ run: () => {
269
+ event.emit({ type: 'thread-close' });
270
+ return true;
271
+ },
272
+ },
273
+ ]
274
+ : []),
275
+ ].filter(isTruthy),
295
276
  ),
296
- ].filter(isNotFalsy);
297
- }, [event, expandable, contextProvider]);
277
+ ),
278
+ ].filter(isTruthy);
279
+ }, [event, expandable, referencesProvider]);
298
280
 
299
281
  const handleSubmit = useCallback<NonNullable<ChatEditorProps['onSubmit']>>(
300
282
  (text) => {
301
- if (!processor.streaming.value) {
283
+ if (!activeRef.current) {
302
284
  event.emit({ type: 'submit', text });
303
285
  return true;
304
286
  }
305
287
  },
306
- [processor, event],
288
+ [event],
307
289
  );
308
290
 
309
291
  const handleEvent = useCallback<NonNullable<ChatActionsProps['onEvent']>>(
@@ -313,76 +295,156 @@ const ChatPrompt = ({
313
295
  [event],
314
296
  );
315
297
 
316
- // TODO(burdon): Update context.
317
- const handleUpdateReferences = useCallback<NonNullable<ChatReferencesProps['onUpdate']>>((ids) => {
318
- log.info('update', { ids });
319
- }, []);
320
-
321
298
  return (
322
299
  <div
300
+ role='group'
323
301
  className={mx(
324
- 'is-full grid grid-cols-[var(--rail-action)_1fr_var(--rail-action)] grid-rows-[min-content_min-content_min-content]',
302
+ 'flex flex-col is-full density-fine',
303
+ outline && [
304
+ 'p-2 bg-groupSurface border border-subduedSeparator transition transition-border [&:has(.cm-content:focus)]:border-separator rounded',
305
+ ],
325
306
  classNames,
326
307
  )}
327
308
  >
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} />}
365
- {online !== undefined && (
366
- <Input.Root>
367
- <Input.Switch classNames='mis-2 mie-2' checked={online} onCheckedChange={onChangeOnline} />
368
- </Input.Root>
369
- )}
370
- </>
371
- </ChatActions>
309
+ <div role='none' className='flex gap-2'>
310
+ <ChatStatusIndicator classNames='p-1' preset={preset} error={error} processing={streaming} />
311
+
312
+ <ChatEditor
313
+ ref={editorRef}
314
+ autoFocus
315
+ lineWrapping
316
+ classNames='col-span-2 pbs-0.5'
317
+ placeholder={placeholder ?? t('prompt placeholder')}
318
+ extensions={extensions}
319
+ onSubmit={handleSubmit}
320
+ />
321
+ </div>
322
+
323
+ {space && settings && (
324
+ <div role='none' className='flex pbs-2 items-center overflow-hidden'>
325
+ <ChatOptions
326
+ space={space}
327
+ blueprintRegistry={processor.blueprintRegistry}
328
+ context={processor.context}
329
+ preset={preset}
330
+ presets={presets}
331
+ onPresetChange={onPresetChange}
332
+ />
333
+
334
+ <div role='none' className='flex grow overflow-x-auto scrollbar-none'>
335
+ <ChatReferences space={space} context={processor.context} />
336
+ </div>
337
+
338
+ <ChatActions
339
+ classNames='col-span-2'
340
+ microphone={true}
341
+ recording={recording}
342
+ processing={streaming}
343
+ onEvent={handleEvent}
344
+ >
345
+ {/* TODO(burdon): Move switch into dialog. */}
346
+ {online !== undefined && (
347
+ <Input.Root>
348
+ <Input.Label srOnly>{t('online switch label')}</Input.Label>
349
+ <Input.Switch classNames='mli-2' checked={online} onCheckedChange={onOnlineChange} />
350
+ </Input.Root>
351
+ )}
352
+ </ChatActions>
353
+ </div>
354
+ )}
372
355
  </div>
373
356
  );
374
357
  };
375
358
 
376
359
  ChatPrompt.displayName = 'Chat.Prompt';
377
360
 
361
+ //
362
+ // Thread
363
+ //
364
+
365
+ type ChatThreadProps = Omit<NaturalChatThreadProps, 'identity' | 'messages' | 'tools'>;
366
+
367
+ const ChatThread = (props: ChatThreadProps) => {
368
+ const { debug, event, messages, processor } = useChatContext(ChatThread.displayName);
369
+ const identity = useIdentity();
370
+ const error = useAtomValue(processor.error).pipe(Option.getOrUndefined);
371
+
372
+ const controllerRef = useRef<MarkdownStreamController | null>(null);
373
+ useEffect(() => {
374
+ return event.on((event) => {
375
+ switch (event.type) {
376
+ case 'submit':
377
+ case 'scroll-to-bottom':
378
+ controllerRef.current?.scrollToBottom();
379
+ break;
380
+ case 'nav-previous':
381
+ controllerRef.current?.navigatePrevious();
382
+ break;
383
+ case 'nav-next':
384
+ controllerRef.current?.navigateNext();
385
+ break;
386
+ }
387
+ });
388
+ }, [event]);
389
+
390
+ const handleEvent = useCallback<NonNullable<NaturalChatThreadProps['onEvent']>>(
391
+ (ev) => {
392
+ event.emit(ev);
393
+ },
394
+ [event],
395
+ );
396
+
397
+ if (!identity) {
398
+ return null;
399
+ }
400
+
401
+ return (
402
+ <NaturalChatThread
403
+ {...props}
404
+ identity={identity}
405
+ messages={messages}
406
+ error={error}
407
+ debug={debug}
408
+ onEvent={handleEvent}
409
+ ref={controllerRef}
410
+ />
411
+ );
412
+ };
413
+
414
+ ChatThread.displayName = 'Chat.Thread';
415
+
416
+ //
417
+ // Toolbar
418
+ //
419
+
420
+ type ChatToolbarProps = ThemedClassName<{ companionTo?: Obj.Any }>;
421
+
422
+ const ChatToolbar = ({ classNames, companionTo }: ChatToolbarProps) => {
423
+ const { chat } = useChatContext(ChatToolbar.displayName);
424
+ const menu = useChatToolbarActions({ chat, companionTo });
425
+
426
+ return (
427
+ <MenuProvider
428
+ {...menu}
429
+ attendableId={companionTo ? Obj.getDXN(companionTo).toString() : chat ? Obj.getDXN(chat).toString() : ''}
430
+ >
431
+ <ToolbarMenu classNames={classNames} textBlockWidth />
432
+ </MenuProvider>
433
+ );
434
+ };
435
+
436
+ ChatToolbar.displayName = 'Chat.Toolbar';
437
+
378
438
  //
379
439
  // Chat
380
440
  //
381
441
 
382
442
  export const Chat = {
383
443
  Root: ChatRoot,
384
- Thread: ChatThread,
444
+ Viewport: ChatViewport,
385
445
  Prompt: ChatPrompt,
446
+ Thread: ChatThread,
447
+ Toolbar: ChatToolbar,
386
448
  };
387
449
 
388
- export type { ChatRootProps, ChatThreadProps, ChatPromptProps, ChatEvent };
450
+ export type { ChatRootProps, ChatViewportProps, ChatThreadProps, ChatPromptProps, ChatToolbarProps, 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,9 +36,19 @@ 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
  }
46
+ | {
47
+ type: 'nav-previous';
48
+ }
49
+ | {
50
+ type: 'nav-next';
51
+ }
39
52
  | {
40
53
  type: 'thread-open';
41
54
  }