@dxos/plugin-assistant 0.8.4-main.ae835ea → 0.8.4-main.bc674ce

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 (515) hide show
  1. package/dist/lib/browser/BlueprintArticle-WP3G5GLG.mjs +31 -0
  2. package/dist/lib/browser/BlueprintArticle-WP3G5GLG.mjs.map +7 -0
  3. package/dist/lib/browser/ChatCompanion-ECQYUQ2B.mjs +153 -0
  4. package/dist/lib/browser/ChatCompanion-ECQYUQ2B.mjs.map +7 -0
  5. package/dist/lib/browser/ChatContainer-QCCOFBUX.mjs +73 -0
  6. package/dist/lib/browser/ChatContainer-QCCOFBUX.mjs.map +7 -0
  7. package/dist/lib/browser/ChatDialog-SMK4RSZU.mjs +85 -0
  8. package/dist/lib/browser/ChatDialog-SMK4RSZU.mjs.map +7 -0
  9. package/dist/lib/browser/PromptArticle-K362ZPAE.mjs +53 -0
  10. package/dist/lib/browser/PromptArticle-K362ZPAE.mjs.map +7 -0
  11. package/dist/lib/browser/ai-service-5GUDOEWF.mjs +21 -0
  12. package/dist/lib/browser/ai-service-5GUDOEWF.mjs.map +7 -0
  13. package/dist/lib/browser/app-graph-builder-DSNH2OMY.mjs +212 -0
  14. package/dist/lib/browser/app-graph-builder-DSNH2OMY.mjs.map +7 -0
  15. package/dist/lib/browser/blueprint-definition-DGHH7MUU.mjs +14 -0
  16. package/dist/lib/browser/blueprints/index.mjs +12 -0
  17. package/dist/lib/browser/chunk-3JYPE2MM.mjs +1832 -0
  18. package/dist/lib/browser/chunk-3JYPE2MM.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-DKQMSMBN.mjs +326 -0
  20. package/dist/lib/browser/chunk-DKQMSMBN.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-WBG5PTSX.mjs → chunk-EXVT7D4B.mjs} +1 -1
  22. package/dist/lib/browser/chunk-EXVT7D4B.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-L5OA5OGS.mjs → chunk-ML3QCFKA.mjs} +40 -37
  24. package/dist/lib/browser/chunk-ML3QCFKA.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-MRJVYGLU.mjs +208 -0
  26. package/dist/lib/browser/chunk-MRJVYGLU.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-V772AMZM.mjs +250 -0
  28. package/dist/lib/browser/chunk-V772AMZM.mjs.map +7 -0
  29. package/dist/lib/browser/chunk-WGQTU6UJ.mjs +41 -0
  30. package/dist/lib/browser/chunk-WGQTU6UJ.mjs.map +7 -0
  31. package/dist/lib/browser/edge-model-resolver-26BOY6HY.mjs +20 -0
  32. package/dist/lib/browser/edge-model-resolver-26BOY6HY.mjs.map +7 -0
  33. package/dist/lib/browser/index.mjs +201 -214
  34. package/dist/lib/browser/index.mjs.map +4 -4
  35. package/dist/lib/browser/local-model-resolver-ZFIM6GGV.mjs +19 -0
  36. package/dist/lib/browser/local-model-resolver-ZFIM6GGV.mjs.map +7 -0
  37. package/dist/lib/browser/meta.json +1 -1
  38. package/dist/lib/browser/operation-resolver-7XJLBRQY.mjs +132 -0
  39. package/dist/lib/browser/operation-resolver-7XJLBRQY.mjs.map +7 -0
  40. package/dist/lib/browser/react-surface-NCITRSJJ.mjs +109 -0
  41. package/dist/lib/browser/react-surface-NCITRSJJ.mjs.map +7 -0
  42. package/dist/lib/browser/repair-6QGAKOVM.mjs +54 -0
  43. package/dist/lib/browser/repair-6QGAKOVM.mjs.map +7 -0
  44. package/dist/lib/browser/settings-4ZDLUMYE.mjs +32 -0
  45. package/dist/lib/browser/settings-4ZDLUMYE.mjs.map +7 -0
  46. package/dist/lib/browser/state-AN6336ZX.mjs +26 -0
  47. package/dist/lib/browser/state-AN6336ZX.mjs.map +7 -0
  48. package/dist/lib/browser/toolkit-7AVTEPMA.mjs +18 -0
  49. package/dist/lib/browser/toolkit-7AVTEPMA.mjs.map +7 -0
  50. package/dist/lib/browser/types/index.mjs +8 -4
  51. package/dist/lib/node-esm/BlueprintArticle-WZ76E2C4.mjs +32 -0
  52. package/dist/lib/node-esm/BlueprintArticle-WZ76E2C4.mjs.map +7 -0
  53. package/dist/lib/node-esm/ChatCompanion-Q4FUZ2MW.mjs +154 -0
  54. package/dist/lib/node-esm/ChatCompanion-Q4FUZ2MW.mjs.map +7 -0
  55. package/dist/lib/node-esm/ChatContainer-AKI33HIB.mjs +74 -0
  56. package/dist/lib/node-esm/ChatContainer-AKI33HIB.mjs.map +7 -0
  57. package/dist/lib/node-esm/ChatDialog-AP45PVZR.mjs +86 -0
  58. package/dist/lib/node-esm/ChatDialog-AP45PVZR.mjs.map +7 -0
  59. package/dist/lib/node-esm/PromptArticle-D4HAIIC6.mjs +54 -0
  60. package/dist/lib/node-esm/PromptArticle-D4HAIIC6.mjs.map +7 -0
  61. package/dist/lib/node-esm/ai-service-PXKKCFIF.mjs +22 -0
  62. package/dist/lib/node-esm/ai-service-PXKKCFIF.mjs.map +7 -0
  63. package/dist/lib/node-esm/app-graph-builder-TJCUEXW5.mjs +213 -0
  64. package/dist/lib/node-esm/app-graph-builder-TJCUEXW5.mjs.map +7 -0
  65. package/dist/lib/node-esm/{blueprint-definition-CFCUD2VC.mjs → blueprint-definition-SEMDEIYG.mjs} +6 -5
  66. package/dist/lib/node-esm/blueprint-definition-SEMDEIYG.mjs.map +7 -0
  67. package/dist/lib/node-esm/blueprints/index.mjs +13 -0
  68. package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-355W5B27.mjs +251 -0
  70. package/dist/lib/node-esm/chunk-355W5B27.mjs.map +7 -0
  71. package/dist/lib/node-esm/chunk-75PHXBN3.mjs +327 -0
  72. package/dist/lib/node-esm/chunk-75PHXBN3.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-DCA5QWQT.mjs +209 -0
  74. package/dist/lib/node-esm/chunk-DCA5QWQT.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-MSBPC4RJ.mjs +42 -0
  76. package/dist/lib/node-esm/chunk-MSBPC4RJ.mjs.map +7 -0
  77. package/dist/lib/node-esm/{chunk-WE6KTH72.mjs → chunk-POWB2BPC.mjs} +1 -1
  78. package/dist/lib/node-esm/chunk-POWB2BPC.mjs.map +7 -0
  79. package/dist/lib/node-esm/chunk-XI5T3MJC.mjs +1833 -0
  80. package/dist/lib/node-esm/chunk-XI5T3MJC.mjs.map +7 -0
  81. package/dist/lib/node-esm/{chunk-7ZYOYW7F.mjs → chunk-ZRIPP7YF.mjs} +40 -37
  82. package/dist/lib/node-esm/chunk-ZRIPP7YF.mjs.map +7 -0
  83. package/dist/lib/node-esm/{edge-model-resolver-2ARXDOYS.mjs → edge-model-resolver-G5KMODPO.mjs} +9 -7
  84. package/dist/lib/node-esm/edge-model-resolver-G5KMODPO.mjs.map +7 -0
  85. package/dist/lib/node-esm/index.mjs +201 -214
  86. package/dist/lib/node-esm/index.mjs.map +4 -4
  87. package/dist/lib/node-esm/local-model-resolver-KDZLYI7Y.mjs +20 -0
  88. package/dist/lib/node-esm/local-model-resolver-KDZLYI7Y.mjs.map +7 -0
  89. package/dist/lib/node-esm/meta.json +1 -1
  90. package/dist/lib/node-esm/operation-resolver-SX4WMNA7.mjs +133 -0
  91. package/dist/lib/node-esm/operation-resolver-SX4WMNA7.mjs.map +7 -0
  92. package/dist/lib/node-esm/react-surface-ST6V7LPE.mjs +110 -0
  93. package/dist/lib/node-esm/react-surface-ST6V7LPE.mjs.map +7 -0
  94. package/dist/lib/node-esm/repair-QJ7CQDKU.mjs +55 -0
  95. package/dist/lib/node-esm/repair-QJ7CQDKU.mjs.map +7 -0
  96. package/dist/lib/node-esm/settings-CQEOHR3R.mjs +33 -0
  97. package/dist/lib/node-esm/settings-CQEOHR3R.mjs.map +7 -0
  98. package/dist/lib/node-esm/state-HDON4REW.mjs +27 -0
  99. package/dist/lib/node-esm/state-HDON4REW.mjs.map +7 -0
  100. package/dist/lib/node-esm/toolkit-OWGCEKOO.mjs +19 -0
  101. package/dist/lib/node-esm/toolkit-OWGCEKOO.mjs.map +7 -0
  102. package/dist/lib/node-esm/types/index.mjs +8 -4
  103. package/dist/types/src/AssistantPlugin.d.ts +2 -1
  104. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  105. package/dist/types/src/blueprints/assistant-blueprint.d.ts +209 -0
  106. package/dist/types/src/blueprints/assistant-blueprint.d.ts.map +1 -0
  107. package/dist/types/src/blueprints/index.d.ts +7 -0
  108. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/ai-service/ai-service.d.ts +5 -0
  110. package/dist/types/src/capabilities/ai-service/ai-service.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/ai-service/index.d.ts +3 -0
  112. package/dist/types/src/capabilities/ai-service/index.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  114. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  116. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  117. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +21 -0
  118. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +4 -0
  120. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/edge-model-resolver/edge-model-resolver.d.ts +6 -0
  122. package/dist/types/src/capabilities/edge-model-resolver/edge-model-resolver.d.ts.map +1 -0
  123. package/dist/types/src/capabilities/edge-model-resolver/index.d.ts +3 -0
  124. package/dist/types/src/capabilities/edge-model-resolver/index.d.ts.map +1 -0
  125. package/dist/types/src/capabilities/index.d.ts +10 -11
  126. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  127. package/dist/types/src/capabilities/local-model-resolver/index.d.ts +3 -0
  128. package/dist/types/src/capabilities/local-model-resolver/index.d.ts.map +1 -0
  129. package/dist/types/src/capabilities/local-model-resolver/local-model-resolver.d.ts +12 -0
  130. package/dist/types/src/capabilities/local-model-resolver/local-model-resolver.d.ts.map +1 -0
  131. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  132. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  133. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  134. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  135. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  136. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  137. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  138. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  139. package/dist/types/src/capabilities/repair/index.d.ts +3 -0
  140. package/dist/types/src/capabilities/repair/index.d.ts.map +1 -0
  141. package/dist/types/src/capabilities/repair/repair.d.ts +6 -0
  142. package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -0
  143. package/dist/types/src/capabilities/settings/index.d.ts +15 -0
  144. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  145. package/dist/types/src/capabilities/settings/settings.d.ts +17 -0
  146. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  147. package/dist/types/src/capabilities/state/index.d.ts +11 -0
  148. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  149. package/dist/types/src/capabilities/state/state.d.ts +13 -0
  150. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  151. package/dist/types/src/capabilities/toolkit/index.d.ts +3 -0
  152. package/dist/types/src/capabilities/toolkit/index.d.ts.map +1 -0
  153. package/dist/types/src/capabilities/toolkit/toolkit.d.ts +5 -0
  154. package/dist/types/src/capabilities/toolkit/toolkit.d.ts.map +1 -0
  155. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts +4 -2
  156. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  157. package/dist/types/src/components/BlueprintArticle.d.ts +7 -0
  158. package/dist/types/src/components/BlueprintArticle.d.ts.map +1 -0
  159. package/dist/types/src/components/Chat/Chat.d.ts +21 -12
  160. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  161. package/dist/types/src/components/Chat/events.d.ts +5 -1
  162. package/dist/types/src/components/Chat/events.d.ts.map +1 -1
  163. package/dist/types/src/components/ChatCompanion.d.ts +2 -2
  164. package/dist/types/src/components/ChatCompanion.d.ts.map +1 -1
  165. package/dist/types/src/components/ChatContainer.d.ts +13 -5
  166. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  167. package/dist/types/src/components/ChatDialog.d.ts.map +1 -1
  168. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts.map +1 -1
  169. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  170. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts +3 -3
  171. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
  172. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +3 -3
  173. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -1
  174. package/dist/types/src/components/ChatThread/ChatThread.d.ts +7 -10
  175. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  176. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +128 -73
  177. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  178. package/dist/types/src/components/ChatThread/registry.d.ts +1 -1
  179. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
  180. package/dist/types/src/components/ChatThread/sync.d.ts +12 -6
  181. package/dist/types/src/components/ChatThread/sync.d.ts.map +1 -1
  182. package/dist/types/src/components/PromptArticle.d.ts +7 -0
  183. package/dist/types/src/components/PromptArticle.d.ts.map +1 -0
  184. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  185. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +112 -60
  186. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  187. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +11 -1
  188. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  189. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +113 -61
  190. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  191. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +1 -0
  192. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts +3 -0
  193. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts.map +1 -0
  194. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts +8 -0
  195. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts.map +1 -0
  196. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +10 -8
  197. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -1
  198. package/dist/types/src/components/Toolbox/Toolbox.d.ts +4 -5
  199. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  200. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +112 -60
  201. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  202. package/dist/types/src/components/Typewriter/AssistantToolbar.d.ts +12 -0
  203. package/dist/types/src/components/Typewriter/AssistantToolbar.d.ts.map +1 -0
  204. package/dist/types/src/components/Typewriter/Typewriter.d.ts +11 -0
  205. package/dist/types/src/components/Typewriter/Typewriter.d.ts.map +1 -0
  206. package/dist/types/src/components/Typewriter/Typewriter.stories.d.ts +7 -0
  207. package/dist/types/src/components/Typewriter/Typewriter.stories.d.ts.map +1 -0
  208. package/dist/types/src/components/Typewriter/assistant-extension.d.ts +5 -0
  209. package/dist/types/src/components/Typewriter/assistant-extension.d.ts.map +1 -0
  210. package/dist/types/src/components/Typewriter/index.d.ts +2 -0
  211. package/dist/types/src/components/Typewriter/index.d.ts.map +1 -0
  212. package/dist/types/src/components/index.d.ts +10 -5
  213. package/dist/types/src/components/index.d.ts.map +1 -1
  214. package/dist/types/src/functions/index.d.ts +1 -1
  215. package/dist/types/src/functions/index.d.ts.map +1 -1
  216. package/dist/types/src/functions/object-list.d.ts +2 -2
  217. package/dist/types/src/functions/object-list.d.ts.map +1 -1
  218. package/dist/types/src/functions/object-load.d.ts +1 -1
  219. package/dist/types/src/functions/object-load.d.ts.map +1 -1
  220. package/dist/types/src/functions/object-search.d.ts +10 -0
  221. package/dist/types/src/functions/object-search.d.ts.map +1 -0
  222. package/dist/types/src/hooks/index.d.ts +2 -1
  223. package/dist/types/src/hooks/index.d.ts.map +1 -1
  224. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +5 -5
  225. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -1
  226. package/dist/types/src/hooks/useChatProcessor.d.ts +3 -1
  227. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  228. package/dist/types/src/hooks/useChatServices.d.ts +3 -3
  229. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
  230. package/dist/types/src/hooks/useChatToolbarActions.d.ts +8 -0
  231. package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -0
  232. package/dist/types/src/hooks/useContextBinder.d.ts +2 -2
  233. package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -1
  234. package/dist/types/src/hooks/useContextObjects.d.ts +7 -7
  235. package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -1
  236. package/dist/types/src/hooks/useFilteredTypes.d.ts +3 -0
  237. package/dist/types/src/hooks/useFilteredTypes.d.ts.map +1 -0
  238. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -1
  239. package/dist/types/src/index.d.ts +0 -1
  240. package/dist/types/src/index.d.ts.map +1 -1
  241. package/dist/types/src/meta.d.ts +2 -2
  242. package/dist/types/src/meta.d.ts.map +1 -1
  243. package/dist/types/src/processor/processor.d.ts +17 -16
  244. package/dist/types/src/processor/processor.d.ts.map +1 -1
  245. package/dist/types/src/processor/update-name.d.ts.map +1 -1
  246. package/dist/types/src/queue-logger.d.ts.map +1 -1
  247. package/dist/types/src/testing/test-generator.d.ts +5 -4
  248. package/dist/types/src/testing/test-generator.d.ts.map +1 -1
  249. package/dist/types/src/testing/test-services.d.ts.map +1 -1
  250. package/dist/types/src/translations.d.ts +243 -26
  251. package/dist/types/src/translations.d.ts.map +1 -1
  252. package/dist/types/src/types/Assistant.d.ts +16 -22
  253. package/dist/types/src/types/Assistant.d.ts.map +1 -1
  254. package/dist/types/src/types/AssistantAction.d.ts +88 -112
  255. package/dist/types/src/types/AssistantAction.d.ts.map +1 -1
  256. package/dist/types/src/types/capabilities.d.ts +33 -0
  257. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  258. package/dist/types/src/types/events.d.ts +5 -0
  259. package/dist/types/src/types/events.d.ts.map +1 -0
  260. package/dist/types/src/types/index.d.ts +3 -1
  261. package/dist/types/src/types/index.d.ts.map +1 -1
  262. package/dist/types/src/types/service.d.ts +10 -212
  263. package/dist/types/src/types/service.d.ts.map +1 -1
  264. package/dist/types/tsconfig.tsbuildinfo +1 -1
  265. package/package.json +113 -90
  266. package/src/AssistantPlugin.tsx +70 -105
  267. package/src/blueprints/assistant-blueprint.ts +62 -0
  268. package/src/blueprints/index.ts +12 -0
  269. package/src/capabilities/ai-service/ai-service.ts +29 -0
  270. package/src/capabilities/ai-service/index.ts +7 -0
  271. package/src/capabilities/app-graph-builder/app-graph-builder.ts +180 -0
  272. package/src/capabilities/app-graph-builder/index.ts +7 -0
  273. package/src/capabilities/blueprint-definition/blueprint-definition.ts +60 -0
  274. package/src/capabilities/blueprint-definition/index.ts +8 -0
  275. package/src/capabilities/edge-model-resolver/edge-model-resolver.ts +32 -0
  276. package/src/capabilities/edge-model-resolver/index.ts +7 -0
  277. package/src/capabilities/index.ts +10 -14
  278. package/src/capabilities/local-model-resolver/index.ts +7 -0
  279. package/src/capabilities/local-model-resolver/local-model-resolver.ts +37 -0
  280. package/src/capabilities/operation-resolver/index.ts +7 -0
  281. package/src/capabilities/operation-resolver/operation-resolver.ts +110 -0
  282. package/src/capabilities/react-surface/index.ts +7 -0
  283. package/src/capabilities/react-surface/react-surface.tsx +95 -0
  284. package/src/capabilities/repair/index.ts +7 -0
  285. package/src/capabilities/repair/repair.ts +63 -0
  286. package/src/capabilities/settings/index.ts +7 -0
  287. package/src/capabilities/settings/settings.ts +30 -0
  288. package/src/capabilities/state/index.ts +7 -0
  289. package/src/capabilities/state/state.ts +27 -0
  290. package/src/capabilities/toolkit/index.ts +7 -0
  291. package/src/capabilities/toolkit/toolkit.ts +26 -0
  292. package/src/components/AssistantSettings/AssistantSettings.tsx +13 -5
  293. package/src/components/BlueprintArticle.tsx +29 -0
  294. package/src/components/Chat/Chat.tsx +160 -125
  295. package/src/components/Chat/events.ts +7 -1
  296. package/src/components/ChatCompanion.tsx +132 -105
  297. package/src/components/ChatContainer.tsx +40 -30
  298. package/src/components/ChatDialog.tsx +13 -7
  299. package/src/components/ChatProgress/ChatProgress.tsx +4 -17
  300. package/src/components/ChatPrompt/ChatActions.tsx +3 -5
  301. package/src/components/ChatPrompt/ChatOptions.tsx +93 -80
  302. package/src/components/ChatPrompt/ChatReferences.tsx +7 -8
  303. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +1 -1
  304. package/src/components/ChatThread/ChatThread.stories.tsx +57 -36
  305. package/src/components/ChatThread/ChatThread.tsx +26 -36
  306. package/src/components/ChatThread/Link.tsx +3 -3
  307. package/src/components/ChatThread/registry.tsx +25 -35
  308. package/src/components/ChatThread/sync.test.ts +33 -17
  309. package/src/components/ChatThread/sync.ts +53 -12
  310. package/src/components/ChatThread/testing/thread.md +37 -0
  311. package/src/components/PromptArticle.tsx +50 -0
  312. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +12 -4
  313. package/src/components/TemplateEditor/TemplateEditor.tsx +14 -10
  314. package/src/components/TemplateEditor/TemplateForm.stories.tsx +15 -7
  315. package/src/components/TemplateEditor/TemplateForm.tsx +76 -29
  316. package/src/components/TemplateEditor/extensions/handlebars-extension.ts +274 -0
  317. package/src/components/TemplateEditor/extensions/index.ts +6 -0
  318. package/src/components/TemplateEditor/extensions/xml-extension.ts +64 -0
  319. package/src/components/ToolBlock/ToolBlock.tsx +36 -45
  320. package/src/components/Toolbox/Toolbox.stories.tsx +9 -10
  321. package/src/components/Toolbox/Toolbox.tsx +16 -17
  322. package/src/components/Typewriter/AssistantToolbar.tsx +161 -0
  323. package/src/components/Typewriter/Typewriter.stories.tsx +83 -0
  324. package/src/components/Typewriter/Typewriter.tsx +54 -0
  325. package/src/components/Typewriter/assistant-extension.tsx +144 -0
  326. package/src/components/Typewriter/index.ts +5 -0
  327. package/src/components/index.ts +2 -3
  328. package/src/functions/index.ts +1 -1
  329. package/src/functions/object-list.ts +4 -3
  330. package/src/functions/object-load.ts +7 -5
  331. package/src/functions/object-search.ts +46 -0
  332. package/src/hooks/index.ts +2 -1
  333. package/src/hooks/useBlueprintRegistry.ts +31 -20
  334. package/src/hooks/useChatProcessor.ts +15 -12
  335. package/src/hooks/useChatServices.ts +13 -14
  336. package/src/hooks/useChatToolbarActions.ts +121 -0
  337. package/src/hooks/useContextBinder.ts +9 -7
  338. package/src/hooks/useContextObjects.ts +13 -25
  339. package/src/hooks/useFilteredTypes.ts +37 -0
  340. package/src/hooks/useReferencesProvider.ts +7 -6
  341. package/src/index.ts +0 -1
  342. package/src/meta.ts +2 -2
  343. package/src/processor/presets.ts +1 -1
  344. package/src/processor/processor.test.ts +8 -17
  345. package/src/processor/processor.ts +41 -43
  346. package/src/processor/update-name.ts +4 -2
  347. package/src/queue-logger.ts +8 -9
  348. package/src/testing/test-generator.ts +14 -13
  349. package/src/testing/test-services.ts +8 -6
  350. package/src/translations.ts +27 -16
  351. package/src/types/Assistant.ts +9 -10
  352. package/src/types/AssistantAction.ts +59 -54
  353. package/src/types/capabilities.ts +27 -0
  354. package/src/types/events.ts +11 -0
  355. package/src/types/index.ts +3 -1
  356. package/src/types/service.ts +10 -7
  357. package/dist/lib/browser/BlueprintContainer-GMSYKGSO.mjs +0 -36
  358. package/dist/lib/browser/BlueprintContainer-GMSYKGSO.mjs.map +0 -7
  359. package/dist/lib/browser/ChatCompanion-M3FDKTQM.mjs +0 -151
  360. package/dist/lib/browser/ChatCompanion-M3FDKTQM.mjs.map +0 -7
  361. package/dist/lib/browser/ChatContainer-KAH7XITI.mjs +0 -74
  362. package/dist/lib/browser/ChatContainer-KAH7XITI.mjs.map +0 -7
  363. package/dist/lib/browser/ChatDialog-ZWRGABW6.mjs +0 -87
  364. package/dist/lib/browser/ChatDialog-ZWRGABW6.mjs.map +0 -7
  365. package/dist/lib/browser/ai-service-ERTZBTP3.mjs +0 -19
  366. package/dist/lib/browser/ai-service-ERTZBTP3.mjs.map +0 -7
  367. package/dist/lib/browser/app-graph-builder-R5T7BJPC.mjs +0 -183
  368. package/dist/lib/browser/app-graph-builder-R5T7BJPC.mjs.map +0 -7
  369. package/dist/lib/browser/blueprint-definition-AGTDXTXO.mjs +0 -13
  370. package/dist/lib/browser/chunk-357IHWQL.mjs +0 -1519
  371. package/dist/lib/browser/chunk-357IHWQL.mjs.map +0 -7
  372. package/dist/lib/browser/chunk-A2NVNXPL.mjs +0 -170
  373. package/dist/lib/browser/chunk-A2NVNXPL.mjs.map +0 -7
  374. package/dist/lib/browser/chunk-CQW6UPJM.mjs +0 -199
  375. package/dist/lib/browser/chunk-CQW6UPJM.mjs.map +0 -7
  376. package/dist/lib/browser/chunk-GNI6HL6G.mjs +0 -219
  377. package/dist/lib/browser/chunk-GNI6HL6G.mjs.map +0 -7
  378. package/dist/lib/browser/chunk-GXHZTOWJ.mjs +0 -378
  379. package/dist/lib/browser/chunk-GXHZTOWJ.mjs.map +0 -7
  380. package/dist/lib/browser/chunk-L5OA5OGS.mjs.map +0 -7
  381. package/dist/lib/browser/chunk-MEN5WTLA.mjs +0 -182
  382. package/dist/lib/browser/chunk-MEN5WTLA.mjs.map +0 -7
  383. package/dist/lib/browser/chunk-PUG24BEC.mjs +0 -277
  384. package/dist/lib/browser/chunk-PUG24BEC.mjs.map +0 -7
  385. package/dist/lib/browser/chunk-SJJV3HEX.mjs +0 -16
  386. package/dist/lib/browser/chunk-SJJV3HEX.mjs.map +0 -7
  387. package/dist/lib/browser/chunk-WBG5PTSX.mjs.map +0 -7
  388. package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs +0 -18
  389. package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs.map +0 -7
  390. package/dist/lib/browser/intent-resolver-3C5TABOX.mjs +0 -136
  391. package/dist/lib/browser/intent-resolver-3C5TABOX.mjs.map +0 -7
  392. package/dist/lib/browser/local-model-resolver-GO6ZEMLL.mjs +0 -17
  393. package/dist/lib/browser/local-model-resolver-GO6ZEMLL.mjs.map +0 -7
  394. package/dist/lib/browser/react-surface-EYKA5IFU.mjs +0 -90
  395. package/dist/lib/browser/react-surface-EYKA5IFU.mjs.map +0 -7
  396. package/dist/lib/browser/settings-VMVBYZLN.mjs +0 -23
  397. package/dist/lib/browser/settings-VMVBYZLN.mjs.map +0 -7
  398. package/dist/lib/browser/state-CFREPBB6.mjs +0 -21
  399. package/dist/lib/browser/state-CFREPBB6.mjs.map +0 -7
  400. package/dist/lib/browser/toolkit-F3NQ7TSI.mjs +0 -21
  401. package/dist/lib/browser/toolkit-F3NQ7TSI.mjs.map +0 -7
  402. package/dist/lib/node-esm/BlueprintContainer-6GBLMK4Z.mjs +0 -37
  403. package/dist/lib/node-esm/BlueprintContainer-6GBLMK4Z.mjs.map +0 -7
  404. package/dist/lib/node-esm/ChatCompanion-OV426GCP.mjs +0 -152
  405. package/dist/lib/node-esm/ChatCompanion-OV426GCP.mjs.map +0 -7
  406. package/dist/lib/node-esm/ChatContainer-UKY7NHFY.mjs +0 -75
  407. package/dist/lib/node-esm/ChatContainer-UKY7NHFY.mjs.map +0 -7
  408. package/dist/lib/node-esm/ChatDialog-2BDQIEXH.mjs +0 -88
  409. package/dist/lib/node-esm/ChatDialog-2BDQIEXH.mjs.map +0 -7
  410. package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs +0 -20
  411. package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs.map +0 -7
  412. package/dist/lib/node-esm/app-graph-builder-I52RYVWH.mjs +0 -184
  413. package/dist/lib/node-esm/app-graph-builder-I52RYVWH.mjs.map +0 -7
  414. package/dist/lib/node-esm/chunk-2CAETDW2.mjs +0 -183
  415. package/dist/lib/node-esm/chunk-2CAETDW2.mjs.map +0 -7
  416. package/dist/lib/node-esm/chunk-4J5FYNNM.mjs +0 -171
  417. package/dist/lib/node-esm/chunk-4J5FYNNM.mjs.map +0 -7
  418. package/dist/lib/node-esm/chunk-5ARE4R2I.mjs +0 -220
  419. package/dist/lib/node-esm/chunk-5ARE4R2I.mjs.map +0 -7
  420. package/dist/lib/node-esm/chunk-7ZYOYW7F.mjs.map +0 -7
  421. package/dist/lib/node-esm/chunk-HJPIYMWD.mjs +0 -1520
  422. package/dist/lib/node-esm/chunk-HJPIYMWD.mjs.map +0 -7
  423. package/dist/lib/node-esm/chunk-O36P4LN5.mjs +0 -200
  424. package/dist/lib/node-esm/chunk-O36P4LN5.mjs.map +0 -7
  425. package/dist/lib/node-esm/chunk-WE6KTH72.mjs.map +0 -7
  426. package/dist/lib/node-esm/chunk-XM4BVQQR.mjs +0 -278
  427. package/dist/lib/node-esm/chunk-XM4BVQQR.mjs.map +0 -7
  428. package/dist/lib/node-esm/chunk-XQBL2SBL.mjs +0 -17
  429. package/dist/lib/node-esm/chunk-XQBL2SBL.mjs.map +0 -7
  430. package/dist/lib/node-esm/chunk-YIO5MEPR.mjs +0 -380
  431. package/dist/lib/node-esm/chunk-YIO5MEPR.mjs.map +0 -7
  432. package/dist/lib/node-esm/edge-model-resolver-2ARXDOYS.mjs.map +0 -7
  433. package/dist/lib/node-esm/intent-resolver-HQ27YALS.mjs +0 -137
  434. package/dist/lib/node-esm/intent-resolver-HQ27YALS.mjs.map +0 -7
  435. package/dist/lib/node-esm/local-model-resolver-WOQ2D2R2.mjs +0 -18
  436. package/dist/lib/node-esm/local-model-resolver-WOQ2D2R2.mjs.map +0 -7
  437. package/dist/lib/node-esm/react-surface-UOC3CBPH.mjs +0 -91
  438. package/dist/lib/node-esm/react-surface-UOC3CBPH.mjs.map +0 -7
  439. package/dist/lib/node-esm/settings-7AUVNDM2.mjs +0 -24
  440. package/dist/lib/node-esm/settings-7AUVNDM2.mjs.map +0 -7
  441. package/dist/lib/node-esm/state-XXND44OW.mjs +0 -22
  442. package/dist/lib/node-esm/state-XXND44OW.mjs.map +0 -7
  443. package/dist/lib/node-esm/toolkit-7CH5UNSQ.mjs +0 -22
  444. package/dist/lib/node-esm/toolkit-7CH5UNSQ.mjs.map +0 -7
  445. package/dist/types/src/capabilities/ai-service.d.ts +0 -4
  446. package/dist/types/src/capabilities/ai-service.d.ts.map +0 -1
  447. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  448. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  449. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -7
  450. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  451. package/dist/types/src/capabilities/capabilities.d.ts +0 -11
  452. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  453. package/dist/types/src/capabilities/edge-model-resolver.d.ts +0 -4
  454. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +0 -1
  455. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  456. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  457. package/dist/types/src/capabilities/local-model-resolver.d.ts +0 -10
  458. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +0 -1
  459. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  460. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  461. package/dist/types/src/capabilities/settings.d.ts +0 -4
  462. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  463. package/dist/types/src/capabilities/state.d.ts +0 -4
  464. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  465. package/dist/types/src/capabilities/toolkit.d.ts +0 -4
  466. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  467. package/dist/types/src/components/BlueprintContainer.d.ts +0 -8
  468. package/dist/types/src/components/BlueprintContainer.d.ts.map +0 -1
  469. package/dist/types/src/components/ChatThread/reducers.d.ts +0 -40
  470. package/dist/types/src/components/ChatThread/reducers.d.ts.map +0 -1
  471. package/dist/types/src/components/ChatToolbar/ChatToolbar.d.ts +0 -6
  472. package/dist/types/src/components/ChatToolbar/ChatToolbar.d.ts.map +0 -1
  473. package/dist/types/src/components/ChatToolbar/index.d.ts +0 -2
  474. package/dist/types/src/components/ChatToolbar/index.d.ts.map +0 -1
  475. package/dist/types/src/components/ChatToolbar/useChatToolbarActions.d.ts +0 -9
  476. package/dist/types/src/components/ChatToolbar/useChatToolbarActions.d.ts.map +0 -1
  477. package/dist/types/src/components/TemplateEditor/handlebars-extension.d.ts.map +0 -1
  478. package/dist/types/src/events.d.ts +0 -4
  479. package/dist/types/src/events.d.ts.map +0 -1
  480. package/dist/types/src/functions/analysis.d.ts +0 -5
  481. package/dist/types/src/functions/analysis.d.ts.map +0 -1
  482. package/dist/types/src/hooks/useItemTypes.d.ts +0 -4
  483. package/dist/types/src/hooks/useItemTypes.d.ts.map +0 -1
  484. package/dist/types/src/toolkits/AssistantToolkit.d.ts +0 -21
  485. package/dist/types/src/toolkits/AssistantToolkit.d.ts.map +0 -1
  486. package/dist/types/src/toolkits/SystemToolkit.d.ts +0 -69
  487. package/dist/types/src/toolkits/SystemToolkit.d.ts.map +0 -1
  488. package/dist/types/src/toolkits/index.d.ts +0 -3
  489. package/dist/types/src/toolkits/index.d.ts.map +0 -1
  490. package/src/capabilities/ai-service.ts +0 -27
  491. package/src/capabilities/app-graph-builder.ts +0 -194
  492. package/src/capabilities/blueprint-definition.ts +0 -66
  493. package/src/capabilities/capabilities.ts +0 -18
  494. package/src/capabilities/edge-model-resolver.ts +0 -25
  495. package/src/capabilities/intent-resolver.ts +0 -121
  496. package/src/capabilities/local-model-resolver.ts +0 -30
  497. package/src/capabilities/react-surface.tsx +0 -71
  498. package/src/capabilities/settings.ts +0 -19
  499. package/src/capabilities/state.ts +0 -20
  500. package/src/capabilities/toolkit.ts +0 -19
  501. package/src/components/BlueprintContainer.tsx +0 -30
  502. package/src/components/ChatThread/reducers.ts +0 -151
  503. package/src/components/ChatToolbar/ChatToolbar.tsx +0 -23
  504. package/src/components/ChatToolbar/index.ts +0 -5
  505. package/src/components/ChatToolbar/useChatToolbarActions.ts +0 -126
  506. package/src/components/TemplateEditor/handlebars-extension.ts +0 -166
  507. package/src/events.ts +0 -11
  508. package/src/functions/analysis.ts +0 -22
  509. package/src/hooks/useItemTypes.ts +0 -37
  510. package/src/toolkits/AssistantToolkit.ts +0 -55
  511. package/src/toolkits/SystemToolkit.ts +0 -292
  512. package/src/toolkits/index.ts +0 -6
  513. /package/dist/lib/browser/{blueprint-definition-AGTDXTXO.mjs.map → blueprint-definition-DGHH7MUU.mjs.map} +0 -0
  514. /package/dist/lib/{node-esm/blueprint-definition-CFCUD2VC.mjs.map → browser/blueprints/index.mjs.map} +0 -0
  515. /package/dist/types/src/components/TemplateEditor/{handlebars-extension.d.ts → extensions/handlebars-extension.d.ts} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/AssistantSettings/AssistantSettings.tsx", "../../../src/hooks/useBlueprintRegistry.ts", "../../../src/hooks/useChatProcessor.ts", "../../../src/hooks/useChatServices.ts", "../../../src/hooks/useChatToolbarActions.ts", "../../../src/components/index.ts", "../../../src/components/Chat/Chat.tsx", "../../../src/hooks/useContextBinder.ts", "../../../src/hooks/useContextObjects.ts", "../../../src/hooks/useFilteredTypes.ts", "../../../src/hooks/useFlush.ts", "../../../src/hooks/useOnline.ts", "../../../src/hooks/usePresets.ts", "../../../src/hooks/useReferencesProvider.ts", "../../../src/components/ChatPrompt/ChatActions.tsx", "../../../src/components/ChatPrompt/ChatOptions.tsx", "../../../src/components/ChatPrompt/ChatPresets.tsx", "../../../src/components/ChatPrompt/ChatReferences.tsx", "../../../src/components/ChatPrompt/ChatStatusIndicator.tsx", "../../../src/components/ChatThread/ChatThread.tsx", "../../../src/components/ChatThread/registry.tsx", "../../../src/components/ToolBlock/ToolBlock.tsx", "../../../src/components/ChatThread/sync.ts", "../../../src/components/Toolbox/Toolbox.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { DEFAULT_EDGE_MODELS, DEFAULT_OLLAMA_MODELS } from '@dxos/ai';\nimport { Input, Select, useTranslation } from '@dxos/react-ui';\nimport { ControlGroup, ControlItemInput, ControlPage, ControlSection } from '@dxos/react-ui-form';\n\nimport { meta } from '../../meta';\nimport { type Assistant, LLM_PROVIDERS } from '../../types';\n\n// TODO(burdon): Factor out default Selector.\nconst DEFAULT_VALUE = '__default';\n\nconst LLM_PROVIDER_LABELS = {\n edge: 'DXOS',\n ollama: 'Ollama',\n lmstudio: 'LM Studio',\n} as const;\n\nexport type AssistantSettingsComponentProps = {\n settings: Assistant.Settings;\n onSettingsChange: (fn: (current: Assistant.Settings) => Assistant.Settings) => void;\n};\n\nexport const AssistantSettings = ({ settings, onSettingsChange }: AssistantSettingsComponentProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <ControlPage>\n <ControlSection title={t('settings title', { ns: meta.id })}>\n <ControlGroup>\n <ControlItemInput title={t('settings custom prompts label')}>\n <Input.Switch\n checked={!!settings.customPrompts}\n onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, customPrompts: checked }))}\n />\n </ControlItemInput>\n\n <ControlItemInput title={t('settings llm provider label')}>\n <Select.Root\n value={settings.llmProvider ?? 'edge'}\n onValueChange={(value) => {\n onSettingsChange((s) => ({\n ...s,\n llmProvider: value === DEFAULT_VALUE ? undefined : (value as any),\n }));\n }}\n >\n <Select.TriggerButton placeholder={t('settings llm provider label')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n <Select.Option value={DEFAULT_VALUE}>{t('settings default label')}</Select.Option>\n {LLM_PROVIDERS.map((model) => (\n <Select.Option key={model} value={model}>\n {LLM_PROVIDER_LABELS[model]}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </ControlItemInput>\n\n <ControlItemInput title={t('settings edge llm model label')}>\n <Select.Root\n value={settings.edgeModel ?? DEFAULT_VALUE}\n onValueChange={(value) => {\n onSettingsChange((s) => ({ ...s, edgeModel: value === DEFAULT_VALUE ? undefined : value }));\n }}\n >\n <Select.TriggerButton placeholder={t('settings default llm model label')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n <Select.Option value={DEFAULT_VALUE}>{t('settings default label')}</Select.Option>\n {DEFAULT_EDGE_MODELS.map((model) => (\n <Select.Option key={model} value={model}>\n {model}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </ControlItemInput>\n\n <ControlItemInput title={t('settings ollama llm model label')}>\n <Select.Root\n value={settings.ollamaModel ?? DEFAULT_VALUE}\n onValueChange={(value) => {\n onSettingsChange((s) => ({ ...s, ollamaModel: value === DEFAULT_VALUE ? undefined : value }));\n }}\n >\n <Select.TriggerButton placeholder={t('settings default llm model label')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n <Select.Option value={DEFAULT_VALUE}>{t('settings default label')}</Select.Option>\n {DEFAULT_OLLAMA_MODELS.map((model) => (\n <Select.Option key={model} value={model}>\n {model}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </ControlItemInput>\n </ControlGroup>\n </ControlSection>\n </ControlPage>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Common } from '@dxos/app-framework';\nimport { useCapabilities } from '@dxos/app-framework/react';\nimport { type AiContextBinder } from '@dxos/assistant';\nimport { Blueprint } from '@dxos/blueprints';\nimport { type Database, Filter, Obj, Ref } from '@dxos/echo';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { distinctBy } from '@dxos/util';\n\n/**\n * Provide a registry of blueprints from plugins.\n */\n// TODO(burdon): Reconcile with eventual public registry.\nexport const useBlueprintRegistry = () => {\n const blueprints = useCapabilities(Common.Capability.BlueprintDefinition);\n return useMemo(() => new Blueprint.Registry(blueprints), [blueprints]);\n};\n\nexport const useBlueprints = ({\n blueprintRegistry,\n db,\n}: {\n blueprintRegistry?: Blueprint.Registry;\n db?: Database.Database;\n}) => {\n const staticBlueprints = useMemo(() => blueprintRegistry?.query() ?? [], [blueprintRegistry]);\n const spaceBlueprints = useQuery(db, Filter.type(Blueprint.Blueprint));\n return useMemo(() => {\n const blueprints = distinctBy([...staticBlueprints, ...spaceBlueprints], (b) => b.key);\n blueprints.sort(({ name: a }, { name: b }) => a.localeCompare(b));\n return blueprints;\n }, [staticBlueprints, spaceBlueprints]);\n};\n\n/**\n * Create reactive map of active blueprints (by key).\n */\nexport const useActiveBlueprints = ({ context }: { context?: AiContextBinder }) => {\n const [active, setActive] = useState<Map<string, Blueprint.Blueprint>>(new Map());\n\n useEffect(() => {\n if (!context) {\n setActive(new Map());\n return;\n }\n\n const updateActive = () => {\n const blueprints = context.getBlueprints();\n setActive(new Map(blueprints.map((blueprint) => [blueprint.key, blueprint])));\n };\n\n // Set initial value.\n updateActive();\n\n // Subscribe to changes.\n return context.subscribeBlueprints(updateActive);\n }, [context]);\n\n return active;\n};\n\n// TODO(burdon): Move logic into binder.\nexport const useBlueprintHandlers = ({\n db,\n context,\n blueprintRegistry,\n}: {\n db: Database.Database;\n context?: AiContextBinder;\n blueprintRegistry?: Blueprint.Registry;\n}) => {\n const onUpdateBlueprint = useCallback(\n async (key: string, checked: boolean) => {\n if (!context || !blueprintRegistry) {\n return;\n }\n\n // Find existing cloned blueprint.\n const objects = await db.query(Filter.type(Blueprint.Blueprint)).run();\n let storedBlueprint = objects.find((blueprint) => blueprint.key === key);\n if (checked) {\n if (!storedBlueprint) {\n const blueprint = blueprintRegistry.getByKey(key);\n if (!blueprint) {\n return;\n }\n\n // NOTE: Possible race condition with other peers.\n storedBlueprint = db.add(Obj.clone(blueprint));\n }\n await context.bind({ blueprints: [Ref.make(storedBlueprint)] });\n } else if (storedBlueprint) {\n await context.unbind({ blueprints: [Ref.make(storedBlueprint)] });\n }\n },\n [db, context, blueprintRegistry],\n );\n\n return { onUpdateBlueprint };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Registry, RegistryContext } from '@effect-atom/atom-react';\nimport type * as Runtime from 'effect/Runtime';\nimport { useContext, useMemo, useState } from 'react';\n\nimport { AiConversation } from '@dxos/assistant';\nimport { type Blueprint } from '@dxos/blueprints';\nimport { log } from '@dxos/log';\nimport { type Queue, type Space } from '@dxos/react-client/echo';\nimport { useAsyncEffect } from '@dxos/react-ui';\n\nimport { AiChatProcessor, type AiChatServices, type AiServicePreset } from '../processor';\nimport { type Assistant } from '../types';\n\nexport type UseChatProcessorProps = {\n space?: Space;\n chat?: Assistant.Chat;\n preset?: AiServicePreset;\n services?: () => Promise<Runtime.Runtime<AiChatServices>>;\n blueprintRegistry?: Blueprint.Registry;\n settings?: Assistant.Settings;\n};\n\n/**\n * Configure and create AiChatProcessor.\n */\nexport const useChatProcessor = ({\n space,\n chat,\n preset,\n services,\n blueprintRegistry,\n settings,\n}: UseChatProcessorProps): AiChatProcessor | undefined => {\n const observableRegistry = useContext(RegistryContext);\n\n // Create conversation from chat queue.\n const [conversation, setConversation] = useState<AiConversation>();\n useAsyncEffect(async () => {\n if (!space || !chat) {\n return;\n }\n\n // NOTE: Passing in space and getting queue from space rather than resolving the reference.\n // This is because if the chat isn't in a space yet, the reference will not be resolvable.\n const queue = space.queues.get(chat.queue.dxn);\n const conversation = new AiConversation({\n queue: queue as Queue<any>,\n registry: observableRegistry as Registry.Registry,\n });\n await conversation.open();\n setConversation(conversation);\n return () => {\n void conversation.close();\n setConversation(undefined);\n };\n }, [space, chat?.queue.dxn.toString()]);\n\n // Create processor.\n const processor = useMemo(() => {\n if (!services || !conversation) {\n return undefined;\n }\n\n log('creating processor', { preset, model: preset?.model, settings });\n return new AiChatProcessor(conversation, services, {\n observableRegistry,\n blueprintRegistry,\n model: preset?.model,\n });\n }, [services, conversation, blueprintRegistry, preset]);\n\n return processor;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport type * as Runtime from 'effect/Runtime';\nimport { useMemo } from 'react';\n\nimport { useCapability } from '@dxos/app-framework/react';\nimport { type Key } from '@dxos/echo';\nimport { TracingService } from '@dxos/functions';\nimport { TracingServiceExt } from '@dxos/functions-runtime';\nimport { AutomationCapabilities } from '@dxos/plugin-automation';\nimport { useClient } from '@dxos/react-client';\n\nimport { type AiChatServices } from '../processor';\nimport { type Assistant } from '../types';\n\nexport type UseChatServicesProps = {\n id?: Key.SpaceId;\n chat?: Assistant.Chat;\n};\n\n/**\n * Construct service layer.\n */\n// TODO(dmaretskyi): Better return type.\nexport const useChatServices = ({\n id,\n chat,\n}: UseChatServicesProps): (() => Promise<Runtime.Runtime<AiChatServices>>) | undefined => {\n const client = useClient();\n id ??= client.spaces.default.id;\n\n const runtimeResolver = useCapability(AutomationCapabilities.ComputeRuntime);\n return useMemo(() => {\n const runtime = runtimeResolver.getRuntime(id);\n return () =>\n runtime.runPromise(\n Effect.runtime<AiChatServices>().pipe(\n Effect.provide(\n chat?.traceQueue?.target ? TracingServiceExt.layerQueue(chat.traceQueue?.target) : TracingService.layerNoop,\n ),\n ),\n );\n }, [id, chat?.traceQueue?.target]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport { useMemo } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/react';\nimport { Filter, Obj, Query } from '@dxos/echo';\nimport { runAndForwardErrors } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { MenuBuilder, useMenuActions } from '@dxos/react-ui-menu';\n\nimport { useChatContext } from '../components';\nimport { meta } from '../meta';\nimport { Assistant, AssistantOperation } from '../types';\n\nexport type ChatToolbarActionsProps = {\n chat?: Assistant.Chat;\n companionTo?: Obj.Unknown;\n};\n\nexport const useChatToolbarActions = ({ chat, companionTo }: ChatToolbarActionsProps) => {\n const { invoke } = useOperationInvoker();\n const { db } = useChatContext('useChatToolbarActions');\n const query = companionTo\n ? Query.select(Filter.id(companionTo.id)).targetOf(Assistant.CompanionTo).source()\n : Query.select(Filter.nothing());\n\n // TODO(wittjosiah): Query in react vs query in atom?\n const chats = useQuery(db, query);\n\n // Create stable reference for dependency array to avoid circular reference issues.\n return useMenuActions(\n useMemo(() => {\n return Atom.make(() => {\n const builder = MenuBuilder.make()\n .root({\n label: ['chat toolbar title', { ns: meta.id }],\n })\n .action(\n 'new',\n {\n label: ['new thread button', { ns: meta.id }],\n icon: 'ph--plus--regular',\n type: 'new',\n disabled: !companionTo,\n },\n () => {\n invariant(companionTo);\n return invoke(AssistantOperation.SetCurrentChat, {\n companionTo,\n chat: undefined,\n }).pipe(runAndForwardErrors);\n },\n )\n .action(\n 'rename',\n {\n label: ['rename thread button', { ns: meta.id }],\n icon: 'ph--magic-wand--regular',\n type: 'rename',\n disabled: !chat,\n },\n () =>\n Effect.gen(function* () {\n invariant(chat);\n yield* invoke(AssistantOperation.UpdateChatName, { chat });\n }).pipe(runAndForwardErrors),\n )\n .action(\n 'branch',\n {\n label: ['button branch thread', { ns: meta.id }],\n icon: 'ph--git-branch--regular',\n type: 'branch',\n disabled: true,\n },\n () => {},\n );\n\n if (chats.length > 0) {\n builder.group(\n 'chats',\n {\n label: ['chat history label', { ns: meta.id }],\n icon: 'ph--clock-counter-clockwise--regular',\n selectCardinality: 'single',\n variant: 'dropdownMenu',\n },\n (builder) => {\n chats\n // TODO(wittjosiah): This should be the default sort order.\n .toSorted((a, b) => a.id.localeCompare(b.id))\n .forEach((chat) => {\n builder.action(\n chat.id,\n {\n label: Obj.getLabel(chat) ?? ['object name placeholder', { ns: Assistant.Chat.typename }],\n },\n () =>\n Effect.gen(function* () {\n invariant(companionTo);\n yield* invoke(AssistantOperation.SetCurrentChat, {\n companionTo,\n chat,\n });\n }).pipe(runAndForwardErrors),\n );\n });\n },\n );\n }\n\n return builder.build();\n });\n }, [chats.length, db?.spaceId, companionTo?.id, chat?.id, invoke]),\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './AssistantSettings';\nexport * from './Chat';\nexport * from './TemplateEditor';\nexport * from './Toolbox';\n\nexport const BlueprintArticle = lazy(() => import('./BlueprintArticle'));\nexport const ChatCompanion = lazy(() => import('./ChatCompanion'));\nexport const ChatContainer = lazy(() => import('./ChatContainer'));\nexport const ChatDialog = lazy(() => import('./ChatDialog'));\nexport const PromptArticle = lazy(() => import('./PromptArticle'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Extension, Prec } from '@codemirror/state';\nimport { keymap } from '@codemirror/view';\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport { createContext } from '@radix-ui/react-context';\nimport * as Array from 'effect/Array';\nimport * as Option from 'effect/Option';\nimport React, { type PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Event } from '@dxos/async';\nimport { type Database, Obj } from '@dxos/echo';\nimport { useVoiceInput } from '@dxos/plugin-transcription';\nimport { useQueue } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Input, type ThemedClassName, useDynamicRef, useTranslation } from '@dxos/react-ui';\nimport { ChatEditor, type ChatEditorController, type ChatEditorProps } from '@dxos/react-ui-chat';\nimport { type MarkdownStreamController } from '@dxos/react-ui-components';\nimport { MenuProvider, ToolbarMenu } from '@dxos/react-ui-menu';\nimport { Message } from '@dxos/types';\nimport { mx } from '@dxos/ui-theme';\nimport { isTruthy } from '@dxos/util';\n\nimport { useChatToolbarActions } from '../../hooks';\nimport { meta } from '../../meta';\nimport { type AiChatProcessor } from '../../processor';\nimport { type Assistant } from '../../types';\nimport {\n ChatActions,\n type ChatActionsProps,\n ChatOptions,\n type ChatPresetsProps,\n ChatReferences,\n ChatStatusIndicator,\n} from '../ChatPrompt';\nimport { ChatThread as NaturalChatThread, type ChatThreadProps as NaturalChatThreadProps } from '../ChatThread';\n\nimport { type ChatEvent } from './events';\n\n//\n// Context\n// NOTE: The context should not be exported. It is only used internally.\n// Components outside of this Radix-style group shuld define their own APIs.\n//\n\ntype ChatContextValue = {\n debug?: boolean;\n event: Event<ChatEvent>;\n db?: Database.Database;\n chat?: Assistant.Chat;\n messages: Message.Message[];\n processor: AiChatProcessor;\n};\n\nexport const [ChatContextProvider, useChatContext] = createContext<ChatContextValue>('Chat');\n\n//\n// Root\n//\n\ntype ChatRootProps = PropsWithChildren<\n Pick<ChatContextValue, 'db' | 'chat' | 'processor'> & {\n onEvent?: (event: ChatEvent) => void;\n }\n>;\n\nconst ChatRoot = ({ children, chat, processor, onEvent, ...props }: ChatRootProps) => {\n const [debug, setDebug] = useState(false);\n const pending = useAtomValue(processor.messages);\n const streaming = useAtomValue(processor.streaming);\n const lastPrompt = useRef<string | undefined>(undefined);\n\n // Messages.\n const queue = useQueue<Message.Message>(chat?.queue.dxn);\n const messages = useMemo(() => {\n const queueMessages = queue?.objects?.filter(Obj.instanceOf(Message.Message)) ?? [];\n return Array.dedupeWith([...queueMessages, ...pending], ({ id: a }, { id: b }) => a === b);\n }, [queue?.objects, pending]);\n\n // Events.\n const event = useMemo(() => new Event<ChatEvent>(), []);\n useEffect(() => {\n return event.on((ev) => {\n switch (ev.type) {\n case 'toggle-debug': {\n setDebug((current) => !current);\n break;\n }\n\n case 'submit': {\n const text = ev.text.trim();\n if (!streaming && text.length) {\n lastPrompt.current = ev.text;\n void processor.request({ message: text });\n }\n break;\n }\n\n case 'retry': {\n if (!streaming) {\n void processor.retry();\n }\n break;\n }\n\n case 'cancel': {\n if (streaming) {\n void processor.cancel();\n if (lastPrompt.current) {\n event.emit({ type: 'update-prompt', text: lastPrompt.current });\n }\n }\n break;\n }\n }\n\n onEvent?.(ev);\n });\n }, [event, processor, streaming, onEvent]);\n\n const db = props.db ?? (chat && Obj.getDatabase(chat));\n\n return (\n <ChatContextProvider\n debug={debug}\n event={event}\n db={db}\n chat={chat}\n messages={messages}\n processor={processor}\n {...props}\n >\n {children}\n </ChatContextProvider>\n );\n};\n\nChatRoot.displayName = 'Chat.Root';\n\n//\n// Viewport\n//\n\ntype ChatViewportProps = ThemedClassName<PropsWithChildren>;\n\nconst ChatViewport = ({ classNames, children }: ChatViewportProps) => {\n return (\n <div role='none' className={mx('flex flex-col bs-full is-full', classNames)}>\n {children}\n </div>\n );\n};\n\n//\n// Thread\n//\n\ntype ChatThreadProps = Omit<NaturalChatThreadProps, 'identity' | 'messages' | 'tools'>;\n\nconst ChatThread = (props: ChatThreadProps) => {\n const { debug, event, messages, processor } = useChatContext(ChatThread.displayName);\n const identity = useIdentity();\n const error = useAtomValue(processor.error).pipe(Option.getOrUndefined);\n\n const controllerRef = useRef<MarkdownStreamController | null>(null);\n useEffect(() => {\n return event.on((event) => {\n switch (event.type) {\n case 'submit':\n case 'scroll-to-bottom':\n controllerRef.current?.scrollToBottom();\n break;\n case 'nav-previous':\n controllerRef.current?.navigatePrevious();\n break;\n case 'nav-next':\n controllerRef.current?.navigateNext();\n break;\n }\n });\n }, [event]);\n\n const handleEvent = useCallback<NonNullable<NaturalChatThreadProps['onEvent']>>(\n (ev) => {\n event.emit(ev);\n },\n [event],\n );\n\n if (!identity) {\n return null;\n }\n\n return (\n <NaturalChatThread\n {...props}\n identity={identity}\n messages={messages}\n error={error}\n debug={debug}\n onEvent={handleEvent}\n ref={controllerRef}\n />\n );\n};\n\nChatThread.displayName = 'Chat.Thread';\n\n//\n// Prompt\n//\n\ntype ChatPromptProps = ThemedClassName<\n {\n outline?: boolean;\n settings?: boolean;\n } & Pick<ChatEditorProps, 'placeholder'> &\n Omit<ChatPresetsProps, 'onChange'> & {\n expandable?: boolean;\n online?: boolean;\n onOnlineChange?: (online: boolean) => void;\n onPresetChange?: ChatPresetsProps['onChange'];\n }\n>;\n\nconst ChatPrompt = ({\n classNames,\n outline,\n settings = true,\n placeholder,\n expandable,\n online,\n presets,\n preset,\n onPresetChange,\n onOnlineChange,\n}: ChatPromptProps) => {\n const { t } = useTranslation(meta.id);\n const { db, processor, event } = useChatContext(ChatPrompt.displayName);\n\n const error = useAtomValue(processor.error).pipe(Option.getOrUndefined);\n const streaming = useAtomValue(processor.streaming);\n const active = useAtomValue(processor.active);\n const activeRef = useDynamicRef(active);\n\n const editorRef = useRef<ChatEditorController>(null);\n const [recordingState, setRecordingState] = useState(false);\n useEffect(() => {\n return event.on((event) => {\n switch (event.type) {\n case 'update-prompt':\n if (!editorRef.current?.getText()?.length) {\n editorRef.current?.setText(event.text);\n editorRef.current?.focus();\n }\n break;\n case 'record-start':\n setRecordingState(true);\n break;\n case 'record-stop':\n setRecordingState(false);\n break;\n }\n });\n }, [event]);\n\n // TODO(burdon): Configure capability in TranscriptionPlugin.\n const { recording } = useVoiceInput({\n active: recordingState,\n onUpdate: (text) => {\n editorRef.current?.setText(text);\n editorRef.current?.focus();\n },\n });\n\n const extensions = useMemo<Extension[]>(() => {\n return [\n Prec.highest(\n keymap.of([\n {\n key: 'Mod-d',\n preventDefault: true,\n run: () => {\n event.emit({ type: 'toggle-debug' });\n return true;\n },\n },\n {\n key: 'Mod-ArrowUp',\n preventDefault: true,\n run: () => {\n event.emit({ type: 'nav-previous' });\n return true;\n },\n shift: () => {\n event.emit({ type: 'thread-open' });\n return true;\n },\n },\n {\n key: 'Mod-ArrowDown',\n preventDefault: true,\n run: () => {\n event.emit({ type: 'nav-next' });\n return true;\n },\n shift: () => {\n event.emit({ type: 'thread-close' });\n return true;\n },\n },\n ]),\n ),\n ].filter(isTruthy);\n }, [event, expandable]);\n\n const handleSubmit = useCallback<NonNullable<ChatEditorProps['onSubmit']>>(\n (text) => {\n if (!activeRef.current) {\n event.emit({ type: 'submit', text });\n return true;\n }\n },\n [event],\n );\n\n const handleEvent = useCallback<NonNullable<ChatActionsProps['onEvent']>>(\n (ev) => {\n event.emit(ev);\n },\n [event],\n );\n\n return (\n <div\n role='group'\n className={mx(\n 'flex flex-col is-full density-fine',\n outline &&\n 'bg-groupSurface border border-subduedSeparator transition transition-border [&:has(.cm-content:focus)]:border-separator rounded',\n classNames,\n )}\n >\n <div role='none' className='flex p-2 gap-2'>\n <ChatStatusIndicator classNames='p-1' preset={preset} error={error} processing={streaming} />\n <ChatEditor\n ref={editorRef}\n autoFocus\n lineWrapping\n classNames='col-span-2 pbs-0.5'\n placeholder={placeholder ?? t('prompt placeholder')}\n extensions={extensions}\n onSubmit={handleSubmit}\n />\n </div>\n\n {db && settings && (\n <div role='none' className='flex items-center overflow-hidden'>\n <ChatOptions\n db={db}\n blueprintRegistry={processor.blueprintRegistry}\n context={processor.context}\n preset={preset}\n presets={presets}\n onPresetChange={onPresetChange}\n />\n\n <div role='none' className='flex grow overflow-x-auto scrollbar-none'>\n <ChatReferences db={db} context={processor.context} />\n </div>\n\n <ChatActions\n classNames='col-span-2'\n microphone={true}\n recording={recording}\n processing={streaming}\n onEvent={handleEvent}\n >\n {/* TODO(burdon): Move offline switch into dialog. */}\n {online !== undefined && (\n <Input.Root>\n <Input.Label srOnly>{t('online switch label')}</Input.Label>\n <Input.Switch classNames='mli-2' checked={online} onCheckedChange={onOnlineChange} />\n </Input.Root>\n )}\n </ChatActions>\n </div>\n )}\n </div>\n );\n};\n\nChatPrompt.displayName = 'Chat.Prompt';\n\n//\n// Toolbar\n//\n\ntype ChatToolbarProps = ThemedClassName<{ companionTo?: Obj.Unknown }>;\n\nconst ChatToolbar = ({ classNames, companionTo }: ChatToolbarProps) => {\n const { chat } = useChatContext(ChatToolbar.displayName);\n const menu = useChatToolbarActions({ chat, companionTo });\n\n return (\n <MenuProvider\n {...menu}\n attendableId={companionTo ? Obj.getDXN(companionTo).toString() : chat ? Obj.getDXN(chat).toString() : ''}\n >\n <ToolbarMenu classNames={classNames} textBlockWidth />\n </MenuProvider>\n );\n};\n\nChatToolbar.displayName = 'Chat.Toolbar';\n\n//\n// Chat\n//\n\nexport const Chat = {\n Root: ChatRoot,\n Viewport: ChatViewport,\n Thread: ChatThread,\n Prompt: ChatPrompt,\n Toolbar: ChatToolbar,\n};\n\nexport type { ChatRootProps, ChatViewportProps, ChatThreadProps, ChatPromptProps, ChatToolbarProps, ChatEvent };\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Registry, RegistryContext } from '@effect-atom/atom-react';\nimport { useContext, useState } from 'react';\n\nimport { AiContextBinder } from '@dxos/assistant';\nimport { type Queue } from '@dxos/react-client/echo';\nimport { useAsyncEffect } from '@dxos/react-ui';\n\n// NOTE: This takes a queue rather than a chat because the chat may not be in a space yet.\nexport const useContextBinder = (queue: Queue | undefined): AiContextBinder | undefined => {\n const registry = useContext(RegistryContext) as Registry.Registry;\n const [binder, setBinder] = useState<AiContextBinder>();\n\n useAsyncEffect(async () => {\n if (!queue) {\n return;\n }\n\n const binder = new AiContextBinder({ queue, registry });\n await binder.open();\n setBinder(binder);\n\n return () => {\n void binder.close();\n };\n }, [queue]);\n\n return binder;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { type AiContextBinder } from '@dxos/assistant';\nimport { type DXN, type Database, type Obj, Ref } from '@dxos/echo';\n\nexport type UseContextObjectsProps = {\n db?: Database.Database;\n context?: AiContextBinder;\n};\n\nexport type UseContextObjects = {\n objects: Obj.Unknown[];\n onUpdateObject: (dxn: DXN, checked: boolean) => Promise<void>;\n};\n\n/**\n * Create reactive map of active object references (by DXN string).\n */\nexport const useContextObjects = ({ db, context }: UseContextObjectsProps): UseContextObjects => {\n const handleUpdateObject = useCallback<UseContextObjects['onUpdateObject']>(\n async (dxn: DXN, checked: boolean) => {\n if (!db || !context) {\n return;\n }\n\n // Load the object by DXN from the current space.\n const ref = Ref.fromDXN(dxn);\n await ref.load();\n if (checked) {\n await context.bind({ objects: [ref] });\n } else {\n await context.unbind({ objects: [ref] });\n }\n },\n [db, context],\n );\n\n return {\n objects: context?.getObjects() ?? [],\n onUpdateObject: handleUpdateObject,\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport { useEffect, useState } from 'react';\n\nimport { type Database, type Type } from '@dxos/echo';\nimport { EntityKind, SystemTypeAnnotation, getTypeAnnotation } from '@dxos/echo/internal';\n\n// TODO(burdon): Pass in filter.\n// TODO(wittjosiah): Factor out.\nexport const useFilteredTypes = (db?: Database.Database): Type.Entity.Any[] => {\n const [types, setTypes] = useState<Type.Entity.Any[]>([]);\n useEffect(() => {\n if (!db) {\n return;\n }\n\n return db.schemaRegistry.query({ location: ['database', 'runtime'] }).subscribe(\n (query) => {\n const types = Array.from(\n new Set(\n query.results\n .filter((schema) => getTypeAnnotation(schema)?.kind !== EntityKind.Relation)\n .filter((schema) => SystemTypeAnnotation.get(schema).pipe(Option.getOrElse(() => false))),\n ),\n );\n\n setTypes(types);\n },\n { fire: true },\n );\n }, [db]);\n\n return types;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useRef, useState } from 'react';\n\nimport { type Space } from '@dxos/client/echo';\n\nexport const useFlush = (space?: Space) => {\n const [state, setState] = useState<'idle' | 'flushing' | 'flushed'>('idle');\n const resetTimer = useRef<NodeJS.Timeout | null>(null);\n\n const handleFlush = useCallback(() => {\n if (!space) {\n return;\n }\n\n queueMicrotask(async () => {\n if (resetTimer.current) {\n clearTimeout(resetTimer.current);\n }\n\n setState('flushing');\n await space.db.flush();\n setState('flushed');\n\n resetTimer.current = setTimeout(() => {\n setState('idle');\n resetTimer.current = null;\n }, 1_000);\n });\n }, [space]);\n\n return { state, handleFlush };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Dispatch, type SetStateAction, useState } from 'react';\n\nexport const useOnline = (): [boolean, Dispatch<SetStateAction<boolean>>] => {\n const [online, setOnline] = useState(true);\n return [online, setOnline];\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { type ChatPromptProps } from '../components';\nimport { type AiServicePreset, AiServicePresets } from '../processor';\n\nexport type UsePresets = {\n preset: AiServicePreset | undefined;\n} & Pick<ChatPromptProps, 'presets' | 'onPresetChange'>;\n\nexport const usePresets = (online: boolean): UsePresets => {\n // TODO(burdon): Memo preset for provider.\n const [preset, setPreset] = useState<AiServicePreset>();\n const presets = useMemo(\n () => AiServicePresets.filter((preset) => online === (preset.provider === 'dxos-remote')),\n [online],\n );\n const presetOptions = useMemo(\n () => presets.map(({ id, model, label }) => ({ id, label: label ?? model })),\n [presets],\n );\n useEffect(() => {\n setPreset(presets[0]);\n }, [presets]);\n\n const handlePresetChange = useCallback<NonNullable<ChatPromptProps['onPresetChange']>>(\n (id) => {\n const preset = presets.find((preset) => preset.id === id);\n if (preset) {\n setPreset(preset);\n }\n },\n [presets],\n );\n\n return {\n preset: preset,\n presets: presetOptions,\n onPresetChange: handlePresetChange,\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { Common } from '@dxos/app-framework';\nimport { useCapabilities } from '@dxos/app-framework/react';\nimport { type Space } from '@dxos/client/echo';\nimport { Filter, Obj } from '@dxos/echo';\nimport { type ReferencesProvider } from '@dxos/react-ui-chat';\n\n/**\n * Resolve references to objects in the space.\n */\nexport const useReferencesProvider = (space?: Space): ReferencesProvider | undefined => {\n const blueprints = useCapabilities(Common.Capability.BlueprintDefinition);\n\n return useMemo<ReferencesProvider | undefined>((): ReferencesProvider | undefined => {\n if (!space) {\n return undefined;\n }\n\n return {\n getReferences: async ({ query }) => {\n // TODO(burdon): Previously we filtered by types declared by the artifact definitions.\n // const schemas = blueprints.map((blueprint) => blueprint.schema).flat();\n // const objects = await space.db\n // .query(Filter.or(...schemas.map((schema) => Filter.type(schema as Type.Schema))))\n // .run();\n\n const objects = await space.db.query(Filter.everything()).run();\n\n return (\n objects\n // TODO(burdon): Remove cast ??? (+ two instances below).\n // .map((object) => {\n // log.info('object', { object, label: Obj.getLabel(object as any) });\n // return object;\n // })\n .filter((object) => stringMatch(query, Obj.getLabel(object as any) ?? ''))\n // TODO(dmaretskyi): `Type.getDXN` (at the point of writing) didn't work here as it was schema-only.\n .filter((object) => !!Obj.getDXN(object as Obj.Unknown))\n .map((object) => ({\n uri: Obj.getDXN(object as any).toString(),\n label: Obj.getLabel(object as any) ?? '',\n }))\n );\n },\n resolveReference: async ({ uri }) => {\n const object = await space.db.query(Filter.id(uri)).first();\n return { uri, label: Obj.getLabel(object) ?? '' };\n },\n } satisfies ReferencesProvider;\n }, [space, blueprints]);\n};\n\nconst stringMatch = (query: string, label: string) => label.toLowerCase().startsWith(query.toLowerCase());\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { meta } from '../../meta';\nimport { type ChatEvent } from '../Chat';\n\nexport type ChatActionsProps = ThemedClassName<\n PropsWithChildren<{\n microphone?: boolean;\n recording?: boolean;\n processing?: boolean;\n onEvent?: (event: ChatEvent) => void;\n }>\n>;\n\nexport const ChatActions = ({ classNames, children, microphone, recording, processing, onEvent }: ChatActionsProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <div className={mx('flex items-center mie-1', classNames)}>\n {children}\n\n <IconButton\n disabled={!processing}\n variant='ghost'\n icon='ph--x--regular'\n iconOnly\n label={t('cancel processing button')}\n onClick={() => onEvent?.({ type: 'cancel' })}\n />\n\n {microphone && (\n <IconButton\n disabled={!processing}\n classNames={mx(recording && 'bg-primary-500')}\n variant='ghost'\n icon='ph--microphone--regular'\n iconOnly\n noTooltip\n label={t('microphone button')}\n onMouseDown={() => onEvent?.({ type: 'record-start' })}\n onMouseUp={() => onEvent?.({ type: 'record-stop' })}\n onTouchStart={() => onEvent?.({ type: 'record-start' })}\n onTouchEnd={() => onEvent?.({ type: 'record-stop' })}\n />\n )}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type JSX, useMemo, useState } from 'react';\n\nimport { type AiContextBinder } from '@dxos/assistant';\nimport { type Blueprint } from '@dxos/blueprints';\nimport { type Database, Filter, Obj, Type } from '@dxos/echo';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { IconButton, Popover, Select, useTranslation } from '@dxos/react-ui';\nimport { Listbox, SearchList, useSearchListResults } from '@dxos/react-ui-searchlist';\nimport { Tabs } from '@dxos/react-ui-tabs';\n\nimport {\n useActiveBlueprints,\n useBlueprintHandlers,\n useBlueprints,\n useContextObjects,\n useFilteredTypes,\n} from '../../hooks';\nimport { meta } from '../../meta';\n\nconst panelClassNames = 'is-[calc(100dvw-.5rem)] sm:is-max md:is-72 max-is-[--text-content]';\n\nexport type ChatOptionsProps = {\n db: Database.Database;\n context: AiContextBinder;\n blueprintRegistry?: Blueprint.Registry;\n presets?: { id: string; label: string }[];\n preset?: string;\n onPresetChange?: (id: string) => void;\n};\n\n/**\n * Manages the runtime context for the chat.\n */\nexport const ChatOptions = ({ db, context, blueprintRegistry, presets, preset, onPresetChange }: ChatOptionsProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <div role='none' className='flex p-2'>\n <Popover.Root>\n <Popover.Trigger asChild>\n <IconButton variant='ghost' icon='ph--plus--regular' iconOnly label={t('context objects button')} />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content side='top' classNames={panelClassNames}>\n <Popover.Viewport>\n <ObjectsPanel db={db} context={context} />\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n <Popover.Root>\n <Popover.Trigger asChild>\n <IconButton\n variant='ghost'\n icon='ph--sliders-horizontal--regular'\n iconOnly\n label={t('context settings button')}\n />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content side='top' classNames={panelClassNames}>\n <Popover.Viewport>\n <Tabs.Root orientation='horizontal' defaultValue='blueprints' defaultActivePart='list' tabIndex={-1}>\n <Tabs.Viewport classNames='max-bs-[--radix-popover-content-available-height] grid grid-rows-[1fr_min-content] [&_[cmdk-root]]:contents [&_[role=\"tabpanel\"]]:grid [&_[role=\"tabpanel\"]]:grid-rows-[1fr_min-content] [&_[role=\"listbox\"]]:min-bs-0 [&_[role=\"listbox\"]]:overflow-y-auto [&_[role=\"tabpanel\"]]:min-bs-0 [&_[role=\"tabpanel\"]]:pli-cardSpacingChrome [&_[role=\"tabpanel\"][data-state=\"active\"]]:order-first [&_[role=\"tabpanel\"][data-state=\"inactive\"]]:hidden'>\n <Tabs.Tabpanel value='blueprints' tabIndex={-1} classNames='dx-focus-ring-inset'>\n <BlueprintsPanel blueprintRegistry={blueprintRegistry} db={db} context={context} />\n </Tabs.Tabpanel>\n <Tabs.Tabpanel value='model' tabIndex={-1} classNames='dx-focus-ring-inset !pli-0'>\n <ModelsPanel presets={presets} preset={preset} onPresetChange={onPresetChange} />\n </Tabs.Tabpanel>\n <Tabs.Tablist classNames='sm:overflow-x-hidden justify-center p-[--dx-cardSpacingChrome] border-bs border-subduedSeparator order-last'>\n <Tabs.IconTab\n value='blueprints'\n icon='ph--blueprint--regular'\n label={t('blueprints in context title')}\n />\n <Tabs.IconTab value='model' label={t('chat model title')} icon='ph--cpu--regular' />\n </Tabs.Tablist>\n </Tabs.Viewport>\n </Tabs.Root>\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n );\n};\n\nconst BlueprintsPanel = ({\n blueprintRegistry,\n db,\n context,\n}: Pick<ChatOptionsProps, 'blueprintRegistry' | 'db' | 'context'>) => {\n const { t } = useTranslation(meta.id);\n\n const blueprints = useBlueprints({ blueprintRegistry, db });\n const activeBlueprints = useActiveBlueprints({ context });\n const { onUpdateBlueprint } = useBlueprintHandlers({ db, context, blueprintRegistry });\n\n const { results, handleSearch } = useSearchListResults({\n items: blueprints,\n extract: (blueprint) => blueprint.name,\n });\n\n return (\n <SearchList.Root onSearch={handleSearch}>\n <SearchList.Content classNames='plb-cardSpacingChrome'>\n <SearchList.Viewport>\n {results.map((blueprint) => {\n const isActive = activeBlueprints.has(blueprint.key);\n return (\n <SearchList.Item\n classNames='flex items-center overflow-hidden'\n key={blueprint.key}\n value={blueprint.key}\n label={blueprint.name}\n checked={isActive}\n onSelect={() => onUpdateBlueprint?.(blueprint.key, !isActive)}\n />\n );\n })}\n </SearchList.Viewport>\n </SearchList.Content>\n <SearchList.Input placeholder={t('search placeholder')} classNames='mbe-cardSpacingChrome' autoFocus />\n </SearchList.Root>\n );\n};\n\nconst ModelsPanel = ({\n presets,\n preset,\n onPresetChange,\n}: Pick<ChatOptionsProps, 'presets' | 'preset' | 'onPresetChange'>) => {\n return (\n <Listbox.Root value={preset} onValueChange={onPresetChange} autoFocus>\n {presets?.map(({ id, label }) => {\n return (\n <Listbox.Option key={id} value={id}>\n <Listbox.OptionLabel>{label}</Listbox.OptionLabel>\n <Listbox.OptionIndicator />\n </Listbox.Option>\n );\n })}\n </Listbox.Root>\n );\n};\n\nconst ANY = '__any__';\n\nconst ObjectsPanel = ({ db, context }: Pick<ChatOptionsProps, 'db' | 'context'>): JSX.Element => {\n const { t } = useTranslation(meta.id);\n\n // Item types sorted by label.\n const types = useFilteredTypes(db);\n const typenames = useMemo(() => {\n const typenames = types.map((type) => {\n const typename = Type.getTypename(type);\n return {\n typename,\n label: t('typename label', { ns: typename, defaultValue: typename }),\n };\n });\n\n typenames.sort((a, b) => a.label.localeCompare(b.label));\n return typenames;\n }, [types]);\n\n // Current type and filter.\n const [typename, setTypename] = useState<string>(ANY);\n const anyFilter = useMemo(\n () => Filter.or(...typenames.map(({ typename }) => Filter.typename(typename))),\n [typenames],\n );\n\n // Context objects.\n const objects = useQuery(db, typename === ANY ? anyFilter : Filter.typename(typename));\n const { objects: contextObjects, onUpdateObject } = useContextObjects({ db, context });\n\n const { results, handleSearch } = useSearchListResults({\n items: objects,\n extract: (object) => Obj.getLabel(object) ?? Obj.getTypename(object) ?? object.id,\n });\n\n return (\n <SearchList.Root onSearch={handleSearch}>\n <SearchList.Content classNames='p-cardSpacingChrome [&:has([cmdk-list-sizer]:empty)]:plb-0'>\n <SearchList.Viewport>\n {results.length ? (\n results.map((object) => {\n const isActive = contextObjects.findIndex((obj) => obj.id === object.id) !== -1;\n return (\n <SearchList.Item\n classNames='flex items-center overflow-hidden'\n key={object.id}\n value={object.id}\n label={Obj.getLabel(object) ?? Obj.getTypename(object) ?? object.id}\n checked={isActive}\n onSelect={() => onUpdateObject?.(Obj.getDXN(object), !isActive)}\n />\n );\n })\n ) : (\n <SearchList.Item value='__empty__' label={t('no results')} />\n )}\n </SearchList.Viewport>\n </SearchList.Content>\n\n <div role='none' className='grid grid-cols-[min-content_1fr] gap-2 pli-cardSpacingChrome mbe-cardSpacingChrome'>\n <Select.Root value={typename === ANY ? undefined : typename} onValueChange={setTypename}>\n <Select.TriggerButton density='fine' placeholder={t('type filter placeholder')} />\n <Select.Portal>\n <Select.Content>\n <Select.ScrollUpButton />\n <Select.Viewport>\n <Select.Option value={ANY}>{t('any type filter label')}</Select.Option>\n {typenames.map(({ typename, label }) => (\n <Select.Option key={typename} value={typename}>\n {label}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.ScrollDownButton />\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n <SearchList.Input placeholder={t('search placeholder')} classNames='mbe-0' autoFocus />\n </div>\n </SearchList.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Select } from '@dxos/react-ui';\n\nexport type ChatPresetsProps = {\n presets?: { id: string; label: string }[];\n preset?: string;\n onChange?: (id: string) => void;\n};\n\nexport const ChatPresets = ({ presets, preset, onChange }: ChatPresetsProps) => {\n return (\n <Select.Root value={preset} onValueChange={onChange}>\n <Select.TriggerButton classNames='text-sm' />\n <Select.Content>\n {presets?.map(({ id, label }) => (\n <Select.Option key={id} value={id} classNames='text-sm'>\n {label}\n </Select.Option>\n ))}\n <Select.Arrow />\n </Select.Content>\n </Select.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type AiContextBinder } from '@dxos/assistant';\nimport { type Database, Obj } from '@dxos/echo';\nimport { IconButton, type Label, type ThemedClassName, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { useContextObjects } from '../../hooks';\nimport { meta } from '../../meta';\n\nexport type ChatReferencesProps = ThemedClassName<{\n context: AiContextBinder;\n db: Database.Database;\n}>;\n\nexport const ChatReferences = ({ classNames, context, db }: ChatReferencesProps) => {\n const { t } = useTranslation(meta.id);\n const { objects, onUpdateObject } = useContextObjects({ db, context });\n\n return (\n <ul className={mx('flex', classNames)}>\n {objects.map((obj) => {\n const dxn = Obj.getDXN(obj);\n const typename = Obj.getTypename(obj);\n const label: Label = Obj.getLabel(obj) ?? (typename ? ['object name placeholder', { ns: typename }] : obj.id);\n return (\n <li key={dxn.toString()} className='dx-tag plb-0 pis-2 flex items-center' data-hue='neutral'>\n {toLocalizedString(label, t)}\n <IconButton\n icon='ph--x--bold'\n iconOnly\n variant='ghost'\n label={t('remove object in context label')}\n classNames='p-0 hover:bg-transparent'\n size={3}\n onClick={() => onUpdateObject?.(dxn, false)}\n />\n </li>\n );\n })}\n </ul>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { type ThemedClassName, Tooltip, useTimeout } from '@dxos/react-ui';\nimport { Spinner, type SpinnerProps } from '@dxos/react-ui-sfx';\nimport { mx } from '@dxos/ui-theme';\n\nconst period = 3_000;\n\nexport type ChatStatusIndicatorProps = ThemedClassName<\n {\n preset?: string;\n processing?: boolean;\n error?: Error;\n } & Pick<SpinnerProps, 'size' | 'onClick'>\n>;\n\nexport const ChatStatusIndicator = ({ classNames, preset, processing, error, ...props }: ChatStatusIndicatorProps) => {\n const [init, setInit] = useState(false);\n useEffect(() => setInit(false), [preset]);\n useTimeout(\n async () => {\n setInit(true);\n },\n period / 2,\n [preset],\n );\n\n return (\n <div role='none' className={mx('relative flex', classNames)}>\n <Spinner duration={period} state={!init ? 'flash' : error ? 'error' : processing ? 'spin' : 'pulse'} {...props} />\n {error && (\n <Tooltip.Trigger asChild content={error.message}>\n <div className='absolute inset-0' />\n </Tooltip.Trigger>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type CSSProperties, forwardRef, useCallback, useEffect, useMemo } from 'react';\n\nimport { PublicKey } from '@dxos/keys';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type ThemedClassName, useForwardedRef } from '@dxos/react-ui';\nimport { MarkdownStream, type MarkdownStreamController, type MarkdownStreamProps } from '@dxos/react-ui-components';\nimport { type Message } from '@dxos/types';\nimport { mx } from '@dxos/ui-theme';\nimport { keyToFallback } from '@dxos/util';\n\nimport { type ChatEvent } from '../Chat';\n\nimport { blockToMarkdown, componentRegistry } from './registry';\nimport { MessageSyncer } from './sync';\n\nexport type ChatThreadProps = ThemedClassName<\n {\n identity?: Identity;\n messages?: Message.Message[];\n error?: Error;\n onEvent?: (event: ChatEvent) => void;\n } & Pick<MarkdownStreamProps, 'cursor' | 'fadeIn' | 'debug'>\n>;\n\n// TODO(burdon): Memo thread position.\nexport const ChatThread = forwardRef<MarkdownStreamController, ChatThreadProps>(\n (\n { classNames, identity, messages = [], error, cursor = false, fadeIn = true, debug = false, onEvent },\n forwardedRef,\n ) => {\n const controllerRef = useForwardedRef(forwardedRef);\n const controller = controllerRef.current;\n\n const userHue = useMemo(\n () => identity?.profile?.data?.hue || keyToFallback(identity?.identityKey ?? PublicKey.random()).hue,\n [identity],\n );\n\n // Show error.\n useEffect(() => {\n controller?.scrollToBottom();\n }, [controller, error]);\n\n // Update document.\n const syncer = useMemo(() => controller && new MessageSyncer(controller, blockToMarkdown), [controller]);\n useEffect(() => {\n const reset = syncer?.append(messages, true);\n if (reset) {\n controller?.scrollToBottom('instant');\n }\n }, [syncer, messages]);\n\n // Event adapter.\n const handleEvent = useCallback<NonNullable<MarkdownStreamProps['onEvent']>>(\n ({ type, value }) => {\n switch (type) {\n case 'submit': {\n value && onEvent?.({ type, text: value });\n break;\n }\n }\n },\n [onEvent],\n );\n\n return (\n <div\n role='none'\n className={mx('flex bs-full is-full justify-center overflow-hidden', classNames)}\n style={{ '--user-fill': `var(--dx-${userHue}Fill)` } as CSSProperties}\n >\n <MarkdownStream\n ref={controllerRef}\n registry={componentRegistry}\n cursor={cursor}\n fadeIn={fadeIn}\n debug={debug}\n onEvent={handleEvent}\n />\n </div>\n );\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { log } from '@dxos/log';\nimport { ToggleContainer } from '@dxos/react-ui-components';\nimport {\n PromptWidget,\n ReferenceWidget,\n SelectWidget,\n SuggestionWidget,\n SummaryWidget,\n} from '@dxos/react-ui-components';\nimport { Json } from '@dxos/react-ui-syntax-highlighter';\nimport { ContentBlock, type Message } from '@dxos/types';\nimport { type XmlWidgetProps, type XmlWidgetRegistry, getXmlTextChild } from '@dxos/ui-editor';\n\nimport { ToolBlock } from '../ToolBlock';\n\nimport { type BlockRenderer, type MessageThreadContext } from './sync';\n\nconst Fallback = ({ _tag, ...props }: XmlWidgetProps<MessageThreadContext>) => {\n return (\n <ToggleContainer.Root classNames='rounded-sm'>\n <ToggleContainer.Header classNames='bg-groupSurface'>{_tag}</ToggleContainer.Header>\n <ToggleContainer.Content classNames='bg-modalSurface'>\n <Json classNames='!p-2 text-sm' data={props} />\n </ToggleContainer.Content>\n </ToggleContainer.Root>\n );\n};\n\n/**\n * Custom XML tags registry.\n */\nexport const componentRegistry: XmlWidgetRegistry = {\n //\n // Widgets\n //\n\n ['prompt' as const]: {\n block: true,\n factory: ({ children }) => {\n const text = getXmlTextChild(children);\n return text ? new PromptWidget(text) : null;\n },\n },\n ['reference' as const]: {\n block: false,\n factory: ({ children, ref }) => {\n const text = getXmlTextChild(children);\n return text && ref ? new ReferenceWidget(text, ref) : null;\n },\n },\n ['select' as const]: {\n block: true,\n factory: ({ children }) => {\n const options = children\n ?.map((option: any) => option._tag === 'option' && getXmlTextChild(option.children))\n .filter(Boolean);\n return options?.length ? new SelectWidget(options) : null;\n },\n },\n ['suggestion' as const]: {\n block: true,\n factory: ({ children }) => {\n const text = getXmlTextChild(children);\n return text ? new SuggestionWidget(text) : null;\n },\n },\n ['summary' as const]: {\n block: true,\n factory: ({ children }) => {\n const text = getXmlTextChild(children);\n return text ? new SummaryWidget(text) : null;\n },\n },\n\n //\n // React\n //\n\n ['toolCall' as const]: {\n block: true,\n Component: ToolBlock,\n },\n ['toolResult' as const]: {\n block: true,\n Component: Fallback,\n },\n ['toolkit' as const]: {\n block: true,\n Component: Fallback,\n },\n\n //\n // Fallback\n //\n\n ['json' as const]: {\n block: true,\n Component: Fallback,\n },\n};\n\n/**\n * Convert block to markdown.\n */\nexport const blockToMarkdown: BlockRenderer = (\n context: MessageThreadContext,\n message: Message.Message,\n block: ContentBlock.Any,\n) => {\n let str = blockToMarkdownImpl(context, message, block);\n if (str && !block.pending) {\n return (str += '\\n');\n }\n\n return str;\n};\n\nconst blockToMarkdownImpl = (context: MessageThreadContext, message: Message.Message, block: ContentBlock.Any) => {\n log('blockToMarkdown', { block: JSON.stringify(block) });\n switch (block._tag) {\n case 'text': {\n if (message.sender.role === 'user') {\n return `<prompt>${block.text}</prompt>`;\n } else {\n const text = block.text.trim();\n if (text.length > 0) {\n return text;\n }\n }\n break;\n }\n case 'reference': {\n const dxn = block.reference.dxn;\n return `<reference ref=\"${dxn.toString()}\">${context.getObjectLabel(dxn)}</reference>`;\n }\n case 'suggestion': {\n if (block.pending) {\n return;\n }\n return `<suggestion>${block.text}</suggestion>`;\n }\n case 'select': {\n if (block.pending || block.options.length === 0) {\n return;\n }\n return `<select>${block.options.map((option) => `<option>${option}</option>`).join('')}</select>`;\n }\n case 'toolCall': {\n context.updateWidget<{ blocks: ContentBlock.Any[] }>(block.toolCallId, {\n blocks: [block],\n });\n return `<toolCall id=\"${block.toolCallId}\" />`;\n }\n case 'toolResult': {\n context.updateWidget<{ blocks: ContentBlock.Any[] }>(block.toolCallId, ({ blocks = [] }) => ({\n blocks: [...blocks, block],\n }));\n break;\n }\n case 'summary': {\n return `<summary>${ContentBlock.createSummaryMessage(block)}</summary>`;\n }\n default: {\n // TODO(burdon): Needs stable ID.\n return `<json id=\"${message.id}\">\\n${JSON.stringify(block)}\\n</json>`;\n }\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Tool from '@effect/ai/Tool';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { NumericTabs, TextCrawl, ToggleContainer, type ToggleContainerRootProps } from '@dxos/react-ui-components';\nimport { Json } from '@dxos/react-ui-syntax-highlighter';\nimport { type ContentBlock, type Message } from '@dxos/types';\nimport { type XmlWidgetProps } from '@dxos/ui-editor';\nimport { isNonNullable, safeParseJson } from '@dxos/util';\n\nimport { meta } from '../../meta';\n\nexport const isToolMessage = (message: Message.Message) => {\n return message.blocks.some((block: ContentBlock.Any) => block._tag === 'toolCall' || block._tag === 'toolResult');\n};\n\nexport type ToolBlockProps = XmlWidgetProps<{\n blocks: ContentBlock.Any[];\n}>;\n\nexport const ToolBlock = ({ view, blocks = [] }: ToolBlockProps) => {\n const { t } = useTranslation(meta.id);\n\n const items = useMemo<ToolContainerProps['items']>(() => {\n let lastToolCall: { tool: Tool.Any | undefined; block: ContentBlock.ToolCall } | undefined;\n // TODO(burdon): Get from context?\n const tools: Tool.Any[] = []; //processor.conversation.toolkit?.tools ?? [];\n return blocks\n .filter((block) => block._tag === 'toolCall' || block._tag === 'toolResult' || block._tag === 'summary')\n .map((block) => {\n switch (block._tag) {\n case 'toolCall': {\n if (block.pending && lastToolCall?.block.toolCallId === block.toolCallId) {\n return null;\n }\n\n const tool = tools.find((tool) => tool.name === block.name);\n lastToolCall = { tool, block };\n return {\n title: tool?.description ?? [t('tool call label'), tool?.name].join(' '),\n content: {\n ...block,\n input: safeParseJson(block.input),\n },\n };\n }\n\n case 'toolResult': {\n // TODO(burdon): Parse error type.\n if (block.error) {\n return {\n title: t('tool error label'),\n content: block,\n };\n }\n\n const title =\n lastToolCall?.tool?.description ?? [t('tool result label'), lastToolCall?.tool?.name].join(' ');\n lastToolCall = undefined;\n return {\n title,\n content: {\n ...block,\n result: safeParseJson(block.result),\n },\n };\n }\n\n case 'summary': {\n if (!lastToolCall) {\n return null;\n }\n\n return {\n title: t('summary label'),\n content: block,\n };\n }\n }\n })\n .filter(isNonNullable);\n }, [blocks]);\n\n const handleChangeOpen = useCallback(() => {\n setTimeout(() => {\n // Measure after animation.\n view?.requestMeasure();\n }, 1_000);\n }, [view]);\n\n if (!items.length) {\n return null;\n }\n\n return <ToolContainer items={items} onChangeOpen={handleChangeOpen} />;\n};\n\nToolBlock.displayName = 'ToolBlock';\n\ntype ToolContainerProps = {\n items: { title: string; content: any }[];\n} & Pick<ToggleContainerRootProps, 'onChangeOpen'>;\n\nexport const ToolContainer = ({ items, onChangeOpen }: ToolContainerProps) => {\n const tabsRef = useRef<HTMLDivElement>(null);\n const [selected, setSelected] = useState(0);\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n onChangeOpen?.(open);\n if (open) {\n tabsRef.current?.focus();\n }\n }, [open, onChangeOpen]);\n\n const handleSelect = useCallback((index: number) => {\n setSelected(index);\n }, []);\n\n return (\n <ToggleContainer.Root classNames='mbs-2 is-full rounded-sm' open={open} onChangeOpen={setOpen}>\n <ToggleContainer.Header classNames='text-sm text-placeholder'>\n <TextCrawl key='status-roll' lines={items.map((item) => item.title)} autoAdvance greedy />\n </ToggleContainer.Header>\n <ToggleContainer.Content classNames='grid grid-cols-[32px_1fr]'>\n <NumericTabs ref={tabsRef} classNames='p-1' length={items.length} selected={selected} onSelect={handleSelect} />\n <Json\n data={items[selected]?.content}\n classNames='p-1 text-xs bg-transparent'\n replacer={{\n maxDepth: 3,\n maxArrayLen: 10,\n maxStringLen: 128,\n }}\n />\n </ToggleContainer.Content>\n </ToggleContainer.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type DXN } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { type MarkdownStreamController } from '@dxos/react-ui-components';\nimport { type ContentBlock, type Message } from '@dxos/types';\nimport { type StateDispatch, type XmlWidgetStateManager } from '@dxos/ui-editor';\n\n/**\n * Update document.\n */\nexport type TextModel = Pick<MarkdownStreamController, 'view' | 'reset' | 'append' | 'updateWidget'>;\n\n/**\n * Thread context passed to renderer.\n */\nexport class MessageThreadContext implements Pick<MarkdownStreamController, 'updateWidget'> {\n constructor(private readonly _widgetState?: XmlWidgetStateManager) {}\n\n updateWidget<T>(id: string, value: StateDispatch<T>) {\n this._widgetState?.updateWidget(id, value);\n }\n\n // TODO(burdon): Resolve from hypergraph.\n getObjectLabel(_id: DXN) {\n return 'Object';\n }\n}\n\n/**\n * Renders a block to markdown.\n */\nexport type BlockRenderer = (\n context: MessageThreadContext,\n message: Message.Message,\n block: ContentBlock.Any,\n) => string | undefined;\n\n/**\n * Syncs messages with the editor.\n */\nexport class MessageSyncer {\n private _initialMessageId?: string;\n private _currentMessageIndex = 0;\n private _currentBlockIndex = 0;\n private _currentBlockContent?: string;\n\n private readonly _context: MessageThreadContext;\n\n constructor(\n private readonly _model: TextModel,\n private readonly _blockRenderer: BlockRenderer,\n ) {\n this._context = new MessageThreadContext(this._model);\n }\n\n get context() {\n return this._context;\n }\n\n reset() {\n log('reset');\n this._initialMessageId = undefined;\n this._currentMessageIndex = 0;\n this._currentBlockIndex = 0;\n this._currentBlockContent = undefined;\n void this._model.reset('');\n }\n\n /**\n * Syncs messages with the editor.\n */\n append(messages: Message.Message[], flush = false): boolean {\n // Check if new set of messages.\n if (this._initialMessageId !== messages[0]?.id) {\n this.reset();\n this._initialMessageId = messages[0]?.id;\n }\n\n if (flush && this._model.view?.state.doc.length === 0) {\n const buffer: string[] = [];\n this.process(messages, (content) => {\n buffer.push(content);\n });\n\n const content = buffer.join('');\n this._model.view?.dispatch({\n changes: [\n {\n from: 0,\n to: this._model.view?.state.doc.length ?? 0,\n insert: content,\n },\n ],\n selection: { anchor: content.length },\n });\n\n return true;\n } else {\n this.process(messages, (content) => {\n void this._model.append(content);\n });\n\n return false;\n }\n }\n\n private process(messages: Message.Message[], append: (content: string) => void) {\n log('sync', {\n doc: this._model.view?.state.doc.length,\n messages: messages.map((message) => message.blocks.length),\n currentMessageIndex: this._currentMessageIndex,\n currentBlockIndex: this._currentBlockIndex,\n currentBlockContent: this._currentBlockContent,\n });\n\n let i = this._currentMessageIndex;\n for (const message of messages.slice(this._currentMessageIndex)) {\n if (i > this._currentMessageIndex) {\n this._currentBlockIndex = 0;\n }\n\n this._currentMessageIndex = i;\n let j = this._currentBlockIndex;\n for (const block of message.blocks.slice(this._currentBlockIndex)) {\n this._currentBlockIndex = j;\n const currentBlockContent = this._blockRenderer(this._context, message, block);\n if (currentBlockContent) {\n let content: string = '';\n if (this._currentBlockContent && currentBlockContent.startsWith(this._currentBlockContent)) {\n content = currentBlockContent.slice(this._currentBlockContent.length);\n } else {\n content = currentBlockContent;\n }\n\n log('append', { message: i, block: j, content });\n this._currentBlockContent = currentBlockContent;\n append(content);\n }\n\n if (block.pending) {\n return;\n } else {\n this._currentBlockContent = undefined;\n this._currentBlockIndex++;\n }\n j++;\n }\n i++;\n }\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC, Fragment, useEffect, useState } from 'react';\n\nimport { type Blueprint } from '@dxos/blueprints';\nimport { type Database, type Ref } from '@dxos/echo';\nimport { Function } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { Filter, useQuery } from '@dxos/react-client/echo';\nimport { type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { meta } from '../../meta';\nimport { type AiChatProcessor } from '../../processor';\nimport { ServiceType } from '../../types';\n\nexport type ToolboxProps = ThemedClassName<{\n services?: { service: ServiceType }[];\n functions?: Function.Function[];\n // TODO(burdon): Combine into single array.\n blueprints?: readonly Blueprint.Blueprint[];\n activeBlueprints?: readonly Ref.Ref<Blueprint.Blueprint>[];\n}>;\n\nexport const Toolbox = ({ classNames, functions, services, blueprints, activeBlueprints }: ToolboxProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <div className={mx('flex flex-col overflow-y-auto box-content', classNames)}>\n {blueprints && blueprints.length > 0 && (\n <Section\n title='Blueprints'\n items={blueprints.map(({ name, description, tools }) => ({\n name,\n description,\n subitems: tools.map((toolId) => ({ name: `∙ ${safeToolId(toolId)}` })),\n }))}\n />\n )}\n\n {activeBlueprints && activeBlueprints.length > 0 && (\n <Section\n title='Blueprints'\n items={activeBlueprints.map(({ target }) => ({\n name: target?.name ?? '',\n description: target?.description ?? '',\n subitems: target?.tools.map((toolId) => ({ name: `∙ ${safeToolId(toolId)}` })),\n }))}\n />\n )}\n\n {services && services.length > 0 && (\n <Section\n title='Services'\n items={services.map(({ service: { serviceId, name, description } }) => ({\n name: name ?? serviceId,\n description,\n // subitems: tools.map(({ name, description }) => ({ name: `∙ ${name}`, description })),\n }))}\n />\n )}\n\n {functions && functions.length > 0 && (\n <Section title='Functions' items={functions.map(({ name, description }) => ({ name, description }))} />\n )}\n </div>\n );\n};\n\nconst Section: FC<{\n title: string;\n items: { name: string; description?: string; subitems?: { name: string; description?: string }[] }[];\n striped?: boolean;\n}> = ({ title, items, striped }) => {\n const stripeClassNames = 'odd:bg-neutral-50 dark:odd:bg-neutral-800';\n const gridClassNames = 'grid grid-cols-[8rem_1fr]';\n const subGridClassNames = mx('col-span-full grid grid-cols-subgrid text-xs pli-2', striped && stripeClassNames);\n\n return (\n <div>\n <h1 className='pli-2 text-sm'>{title}</h1>\n <div className={gridClassNames}>\n {items.map(({ name, description, subitems }, i) => (\n <Fragment key={i}>\n {name && (\n <div className={subGridClassNames}>\n <div className='truncate text-primary-500'>{name}</div>\n <div className='line-clamp-2'>{description}</div>\n </div>\n )}\n {subitems?.map(({ name, description }, i) => (\n <div key={i} className={mx(subGridClassNames, striped && stripeClassNames)}>\n <div className='truncate'>{name}</div>\n <div className='line-clamp-3 text-subdued'>{description}</div>\n </div>\n ))}\n </Fragment>\n ))}\n </div>\n </div>\n );\n};\n\nexport type ToolboxContainerProps = ThemedClassName<{\n db?: Database.Database;\n processor?: AiChatProcessor;\n}>;\n\nexport const ToolboxContainer = ({ classNames, db, processor }: ToolboxContainerProps) => {\n // Registered services.\n const services = useQuery(db, Filter.type(ServiceType));\n const [serviceTools, setServiceTools] = useState<{ service: ServiceType }[]>([]);\n useEffect(() => {\n log('creating service tools...', { services: services.length });\n queueMicrotask(async () => {\n // TODO(burdon): Fix.\n // const tools = await Promise.all(\n // services.map(async (service) => ({ service, tools: await createToolsFromService(service) })),\n // );\n // setServiceTools(tools);\n });\n }, [services]);\n\n // Deployed functions.\n const functions = useQuery(db, Filter.type(Function.Function));\n\n return (\n <Toolbox\n classNames={classNames}\n blueprints={processor?.context.getBlueprints()}\n services={serviceTools}\n functions={functions}\n />\n );\n};\n\nconst safeToolId = (name: string) => {\n return name.split('_').pop();\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "DEFAULT_EDGE_MODELS", "DEFAULT_OLLAMA_MODELS", "Input", "Select", "useTranslation", "ControlGroup", "ControlItemInput", "ControlPage", "ControlSection", "DEFAULT_VALUE", "LLM_PROVIDER_LABELS", "edge", "ollama", "lmstudio", "AssistantSettings", "settings", "onSettingsChange", "t", "useTranslation", "meta", "id", "ControlPage", "ControlSection", "title", "ns", "ControlGroup", "ControlItemInput", "Input", "Switch", "checked", "customPrompts", "onCheckedChange", "s", "Select", "Root", "value", "llmProvider", "onValueChange", "undefined", "TriggerButton", "placeholder", "Portal", "Content", "Viewport", "Option", "LLM_PROVIDERS", "map", "model", "key", "Arrow", "edgeModel", "DEFAULT_EDGE_MODELS", "ollamaModel", "DEFAULT_OLLAMA_MODELS", "useCallback", "useEffect", "useMemo", "useState", "Common", "useCapabilities", "Blueprint", "Filter", "Obj", "Ref", "useQuery", "distinctBy", "useBlueprintRegistry", "blueprints", "useCapabilities", "Common", "Capability", "BlueprintDefinition", "useMemo", "Blueprint", "Registry", "useBlueprints", "blueprintRegistry", "db", "staticBlueprints", "query", "spaceBlueprints", "useQuery", "Filter", "type", "distinctBy", "b", "key", "sort", "name", "a", "localeCompare", "useActiveBlueprints", "context", "active", "setActive", "useState", "Map", "useEffect", "updateActive", "getBlueprints", "map", "blueprint", "subscribeBlueprints", "useBlueprintHandlers", "onUpdateBlueprint", "useCallback", "checked", "objects", "run", "storedBlueprint", "find", "getByKey", "add", "Obj", "clone", "bind", "Ref", "make", "unbind", "RegistryContext", "useContext", "useMemo", "useState", "AiConversation", "log", "useAsyncEffect", "useChatProcessor", "space", "chat", "preset", "services", "blueprintRegistry", "settings", "observableRegistry", "useContext", "RegistryContext", "conversation", "setConversation", "useState", "useAsyncEffect", "queue", "queues", "get", "dxn", "AiConversation", "registry", "open", "close", "undefined", "toString", "processor", "useMemo", "log", "model", "AiChatProcessor", "Effect", "useMemo", "useCapability", "TracingService", "TracingServiceExt", "AutomationCapabilities", "useClient", "useChatServices", "id", "chat", "client", "useClient", "spaces", "default", "runtimeResolver", "useCapability", "AutomationCapabilities", "ComputeRuntime", "useMemo", "runtime", "getRuntime", "runPromise", "pipe", "provide", "traceQueue", "target", "TracingServiceExt", "layerQueue", "TracingService", "layerNoop", "Atom", "Effect", "useMemo", "useOperationInvoker", "Filter", "Obj", "Query", "runAndForwardErrors", "invariant", "useQuery", "MenuBuilder", "useMenuActions", "lazy", "Prec", "keymap", "useAtomValue", "createContext", "Array", "Option", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "Event", "Obj", "useVoiceInput", "useQueue", "useIdentity", "Input", "useDynamicRef", "useTranslation", "ChatEditor", "MenuProvider", "ToolbarMenu", "Message", "mx", "isTruthy", "RegistryContext", "useContext", "useState", "AiContextBinder", "useAsyncEffect", "useContextBinder", "queue", "registry", "useContext", "RegistryContext", "binder", "setBinder", "useState", "useAsyncEffect", "AiContextBinder", "open", "close", "useCallback", "Ref", "useContextObjects", "db", "context", "handleUpdateObject", "useCallback", "dxn", "checked", "ref", "Ref", "fromDXN", "load", "bind", "objects", "unbind", "getObjects", "onUpdateObject", "Option", "useEffect", "useState", "EntityKind", "SystemTypeAnnotation", "getTypeAnnotation", "useFilteredTypes", "db", "types", "setTypes", "useState", "useEffect", "schemaRegistry", "query", "location", "subscribe", "Array", "from", "Set", "results", "filter", "schema", "getTypeAnnotation", "kind", "EntityKind", "Relation", "SystemTypeAnnotation", "get", "pipe", "getOrElse", "fire", "useCallback", "useRef", "useState", "useFlush", "space", "state", "setState", "useState", "resetTimer", "useRef", "handleFlush", "useCallback", "queueMicrotask", "current", "clearTimeout", "db", "flush", "setTimeout", "useState", "useOnline", "online", "setOnline", "useState", "useCallback", "useEffect", "useMemo", "useState", "usePresets", "online", "preset", "setPreset", "useState", "presets", "useMemo", "AiServicePresets", "filter", "provider", "presetOptions", "map", "id", "model", "label", "useEffect", "handlePresetChange", "useCallback", "find", "onPresetChange", "useMemo", "Common", "useCapabilities", "Filter", "Obj", "useReferencesProvider", "space", "blueprints", "useCapabilities", "Common", "Capability", "BlueprintDefinition", "useMemo", "undefined", "getReferences", "query", "objects", "db", "Filter", "everything", "run", "filter", "object", "stringMatch", "Obj", "getLabel", "getDXN", "map", "uri", "toString", "label", "resolveReference", "id", "first", "toLowerCase", "startsWith", "React", "IconButton", "useTranslation", "mx", "ChatActions", "classNames", "children", "microphone", "recording", "processing", "onEvent", "t", "useTranslation", "meta", "id", "React", "div", "className", "mx", "IconButton", "disabled", "variant", "icon", "iconOnly", "label", "onClick", "type", "noTooltip", "onMouseDown", "onMouseUp", "onTouchStart", "onTouchEnd", "React", "useMemo", "useState", "Filter", "Obj", "Type", "useQuery", "IconButton", "Popover", "Select", "useTranslation", "Listbox", "SearchList", "useSearchListResults", "Tabs", "panelClassNames", "ChatOptions", "db", "context", "blueprintRegistry", "presets", "preset", "onPresetChange", "t", "useTranslation", "meta", "id", "React", "div", "role", "className", "Popover", "Root", "Trigger", "asChild", "IconButton", "variant", "icon", "iconOnly", "label", "Portal", "Content", "side", "classNames", "Viewport", "ObjectsPanel", "Arrow", "Tabs", "orientation", "defaultValue", "defaultActivePart", "tabIndex", "Tabpanel", "value", "BlueprintsPanel", "ModelsPanel", "Tablist", "IconTab", "blueprints", "useBlueprints", "activeBlueprints", "useActiveBlueprints", "onUpdateBlueprint", "useBlueprintHandlers", "results", "handleSearch", "useSearchListResults", "items", "extract", "blueprint", "name", "SearchList", "onSearch", "map", "isActive", "has", "key", "Item", "checked", "onSelect", "Input", "placeholder", "autoFocus", "Listbox", "onValueChange", "Option", "OptionLabel", "OptionIndicator", "ANY", "types", "useFilteredTypes", "typenames", "useMemo", "type", "typename", "Type", "getTypename", "ns", "sort", "a", "b", "localeCompare", "setTypename", "useState", "anyFilter", "Filter", "or", "objects", "useQuery", "contextObjects", "onUpdateObject", "useContextObjects", "object", "Obj", "getLabel", "length", "findIndex", "obj", "getDXN", "Select", "undefined", "TriggerButton", "density", "ScrollUpButton", "ScrollDownButton", "React", "Select", "React", "Obj", "IconButton", "toLocalizedString", "useTranslation", "mx", "ChatReferences", "classNames", "context", "db", "t", "useTranslation", "meta", "id", "objects", "onUpdateObject", "useContextObjects", "React", "ul", "className", "mx", "map", "obj", "dxn", "Obj", "getDXN", "typename", "getTypename", "label", "getLabel", "ns", "li", "key", "toString", "data-hue", "toLocalizedString", "IconButton", "icon", "iconOnly", "variant", "size", "onClick", "React", "useEffect", "useState", "Tooltip", "useTimeout", "Spinner", "mx", "period", "ChatStatusIndicator", "classNames", "preset", "processing", "error", "props", "init", "setInit", "useState", "useEffect", "useTimeout", "React", "div", "role", "className", "mx", "Spinner", "duration", "state", "Tooltip", "Trigger", "asChild", "content", "message", "React", "forwardRef", "useCallback", "useEffect", "useMemo", "PublicKey", "useForwardedRef", "MarkdownStream", "mx", "keyToFallback", "React", "log", "ToggleContainer", "PromptWidget", "ReferenceWidget", "SelectWidget", "SuggestionWidget", "SummaryWidget", "Json", "ContentBlock", "getXmlTextChild", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "useTranslation", "NumericTabs", "TextCrawl", "ToggleContainer", "Json", "isNonNullable", "safeParseJson", "ToolBlock", "view", "blocks", "t", "useTranslation", "meta", "id", "items", "useMemo", "lastToolCall", "tools", "filter", "block", "_tag", "map", "pending", "toolCallId", "tool", "find", "name", "title", "description", "join", "content", "input", "safeParseJson", "error", "undefined", "result", "isNonNullable", "handleChangeOpen", "useCallback", "setTimeout", "requestMeasure", "length", "React", "ToolContainer", "onChangeOpen", "displayName", "tabsRef", "useRef", "selected", "setSelected", "useState", "open", "setOpen", "useEffect", "current", "focus", "handleSelect", "index", "ToggleContainer", "Root", "classNames", "Header", "TextCrawl", "key", "lines", "item", "autoAdvance", "greedy", "Content", "NumericTabs", "ref", "onSelect", "Json", "data", "replacer", "maxDepth", "maxArrayLen", "maxStringLen", "Fallback", "_tag", "props", "React", "ToggleContainer", "Root", "classNames", "Header", "Content", "Json", "data", "componentRegistry", "block", "factory", "children", "text", "getXmlTextChild", "PromptWidget", "ref", "ReferenceWidget", "options", "map", "option", "filter", "Boolean", "length", "SelectWidget", "SuggestionWidget", "SummaryWidget", "Component", "ToolBlock", "blockToMarkdown", "context", "message", "str", "blockToMarkdownImpl", "pending", "log", "JSON", "stringify", "sender", "role", "trim", "dxn", "reference", "toString", "getObjectLabel", "join", "updateWidget", "toolCallId", "blocks", "ContentBlock", "createSummaryMessage", "id", "log", "MessageThreadContext", "_widgetState", "updateWidget", "id", "value", "getObjectLabel", "_id", "MessageSyncer", "_initialMessageId", "_currentMessageIndex", "_currentBlockIndex", "_currentBlockContent", "_context", "_model", "_blockRenderer", "context", "reset", "undefined", "append", "messages", "flush", "view", "state", "doc", "length", "buffer", "process", "content", "push", "join", "dispatch", "changes", "from", "to", "insert", "selection", "anchor", "map", "message", "blocks", "currentMessageIndex", "currentBlockIndex", "currentBlockContent", "i", "slice", "j", "block", "startsWith", "pending", "ChatThread", "forwardRef", "classNames", "identity", "messages", "error", "cursor", "fadeIn", "debug", "onEvent", "forwardedRef", "controllerRef", "useForwardedRef", "controller", "current", "userHue", "useMemo", "profile", "data", "hue", "keyToFallback", "identityKey", "PublicKey", "random", "useEffect", "scrollToBottom", "syncer", "MessageSyncer", "blockToMarkdown", "reset", "append", "handleEvent", "useCallback", "type", "value", "text", "React", "div", "role", "className", "mx", "style", "MarkdownStream", "ref", "registry", "componentRegistry", "ChatContextProvider", "useChatContext", "createContext", "ChatRoot", "children", "chat", "processor", "onEvent", "props", "debug", "setDebug", "useState", "pending", "useAtomValue", "messages", "streaming", "lastPrompt", "useRef", "undefined", "queue", "useQueue", "dxn", "useMemo", "queueMessages", "objects", "filter", "Obj", "instanceOf", "Message", "dedupeWith", "id", "a", "b", "event", "Event", "useEffect", "on", "ev", "type", "current", "text", "trim", "length", "request", "message", "retry", "cancel", "emit", "db", "getDatabase", "React", "displayName", "ChatViewport", "classNames", "div", "role", "className", "mx", "ChatThread", "identity", "useIdentity", "error", "pipe", "getOrUndefined", "controllerRef", "scrollToBottom", "navigatePrevious", "navigateNext", "handleEvent", "useCallback", "NaturalChatThread", "ref", "ChatPrompt", "outline", "settings", "placeholder", "expandable", "online", "presets", "preset", "onPresetChange", "onOnlineChange", "t", "useTranslation", "meta", "active", "activeRef", "useDynamicRef", "editorRef", "recordingState", "setRecordingState", "getText", "setText", "focus", "recording", "useVoiceInput", "onUpdate", "extensions", "Prec", "highest", "keymap", "of", "key", "preventDefault", "run", "shift", "isTruthy", "handleSubmit", "ChatStatusIndicator", "processing", "ChatEditor", "autoFocus", "lineWrapping", "onSubmit", "ChatOptions", "blueprintRegistry", "context", "ChatReferences", "ChatActions", "microphone", "Input", "Root", "Label", "srOnly", "Switch", "checked", "onCheckedChange", "ChatToolbar", "companionTo", "menu", "useChatToolbarActions", "MenuProvider", "attendableId", "getDXN", "toString", "ToolbarMenu", "textBlockWidth", "Chat", "Viewport", "Thread", "Prompt", "Toolbar", "React", "Fragment", "useEffect", "useState", "Function", "log", "Filter", "useQuery", "useTranslation", "mx", "Toolbox", "classNames", "functions", "services", "blueprints", "activeBlueprints", "t", "useTranslation", "meta", "id", "React", "div", "className", "mx", "length", "Section", "title", "items", "map", "name", "description", "tools", "subitems", "toolId", "safeToolId", "target", "service", "serviceId", "striped", "stripeClassNames", "gridClassNames", "subGridClassNames", "h1", "i", "Fragment", "key", "ToolboxContainer", "db", "processor", "useQuery", "Filter", "type", "ServiceType", "serviceTools", "setServiceTools", "useState", "useEffect", "log", "queueMicrotask", "Function", "context", "getBlueprints", "split", "pop", "BlueprintArticle", "lazy", "ChatCompanion", "ChatContainer", "ChatDialog", "PromptArticle", "useChatToolbarActions", "chat", "companionTo", "invoke", "useOperationInvoker", "db", "useChatContext", "query", "Query", "select", "Filter", "id", "targetOf", "Assistant", "CompanionTo", "source", "nothing", "chats", "useQuery", "useMenuActions", "useMemo", "Atom", "make", "builder", "MenuBuilder", "root", "label", "ns", "meta", "action", "icon", "type", "disabled", "invariant", "AssistantOperation", "SetCurrentChat", "undefined", "pipe", "runAndForwardErrors", "gen", "UpdateChatName", "length", "group", "selectCardinality", "variant", "toSorted", "a", "b", "localeCompare", "forEach", "Obj", "getLabel", "Chat", "typename", "build", "spaceId"]
7
+ }
@@ -7,6 +7,7 @@ import * as Fiber from "effect/Fiber";
7
7
  import * as Runtime from "effect/Runtime";
8
8
  import { AiService, DEFAULT_EDGE_MODEL } from "@dxos/ai";
9
9
  import { AiSession } from "@dxos/assistant";
10
+ import { Obj } from "@dxos/echo";
10
11
  import { throwCause } from "@dxos/effect";
11
12
  import { trim } from "@dxos/util";
12
13
  var updateName = async (runtime, conversation, chat, model = DEFAULT_EDGE_MODEL) => {
@@ -27,7 +28,9 @@ var updateName = async (runtime, conversation, chat, model = DEFAULT_EDGE_MODEL)
27
28
  const message = messages.find((message2) => message2.sender.role === "assistant");
28
29
  const title = message?.blocks.find((block) => block._tag === "text")?.text;
29
30
  if (title) {
30
- chat.name = title;
31
+ Obj.change(chat, (c) => {
32
+ c.name = title;
33
+ });
31
34
  }
32
35
  }), Runtime.runFork(runtime));
33
36
  const response = await fiber.pipe(Fiber.join, Effect.runPromiseExit);
@@ -67,7 +70,7 @@ var AiServicePresets = [
67
70
  },
68
71
  {
69
72
  provider: "lm-studio",
70
- model: "@mlx-community/llama-3.2-3b-instruct"
73
+ model: "@meta/llama-3.2-3b-instruct"
71
74
  },
72
75
  {
73
76
  model: "deepseek-r1:latest",
@@ -81,7 +84,7 @@ var AiServicePresets = [
81
84
  }));
82
85
 
83
86
  // src/processor/processor.ts
84
- import { Registry, Rx } from "@effect-rx/rx-react";
87
+ import { Atom, Registry } from "@effect-atom/atom-react";
85
88
  import * as Cause from "effect/Cause";
86
89
  import * as Effect2 from "effect/Effect";
87
90
  import * as Exit2 from "effect/Exit";
@@ -90,10 +93,10 @@ import * as Option from "effect/Option";
90
93
  import * as Runtime2 from "effect/Runtime";
91
94
  import { AiService as AiService2, DEFAULT_EDGE_MODEL as DEFAULT_EDGE_MODEL2 } from "@dxos/ai";
92
95
  import { ArtifactDiffResolver, GenerationObserver, createSystemPrompt } from "@dxos/assistant";
93
- import { Obj } from "@dxos/echo";
94
- import { throwCause as throwCause2 } from "@dxos/effect";
96
+ import { Obj as Obj2 } from "@dxos/echo";
97
+ import { runAndForwardErrors, throwCause as throwCause2 } from "@dxos/effect";
95
98
  import { log } from "@dxos/log";
96
- import { DataType } from "@dxos/schema";
99
+ import { Message } from "@dxos/types";
97
100
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/processor/processor.ts";
98
101
  var defaultOptions = {
99
102
  model: DEFAULT_EDGE_MODEL2
@@ -102,23 +105,23 @@ var AiChatProcessor = class {
102
105
  _conversation;
103
106
  _services;
104
107
  _options;
105
- _rx;
108
+ _registry;
106
109
  /** External observer. */
107
110
  _observer;
111
+ /** Pending messages (incl. the current user request). */
112
+ _pending = Atom.make([]);
113
+ /** Currently streaming message (from the AI service). */
114
+ _streaming = Atom.make(Option.none());
108
115
  /** Currently active request fiber. */
109
116
  _fiber;
110
117
  /** Last request (for retries). */
111
118
  _lastRequest;
112
- /** Pending messages (incl. the current user request). */
113
- _pending = Rx.make([]);
114
- /** Currently streaming message (from the AI service). */
115
- _streaming = Rx.make(Option.none());
116
119
  /** Streaming state. */
117
- streaming = Rx.make((get) => Option.isSome(get(this._streaming)));
120
+ streaming = Atom.make((get) => Option.isSome(get(this._streaming)));
118
121
  /** Active state. */
119
- active = Rx.make(false);
122
+ active = Atom.make(false);
120
123
  /** Array of Messages (incl. the current message being streamed). */
121
- messages = Rx.make((get) => Option.match(get(this._streaming), {
124
+ messages = Atom.make((get) => Option.match(get(this._streaming), {
122
125
  onNone: () => get(this._pending),
123
126
  onSome: (streaming) => [
124
127
  ...get(this._pending),
@@ -126,12 +129,12 @@ var AiChatProcessor = class {
126
129
  ]
127
130
  }));
128
131
  /** Last error. */
129
- error = Rx.make(Option.none());
132
+ error = Atom.make(Option.none());
130
133
  constructor(_conversation, _services, _options = defaultOptions) {
131
134
  this._conversation = _conversation;
132
135
  this._services = _services;
133
136
  this._options = _options;
134
- this._rx = this._options.observableRegistry ?? Registry.make();
137
+ this._registry = this._options.observableRegistry ?? Registry.make();
135
138
  this._observer = GenerationObserver.make({
136
139
  onBlock: this._onBlock,
137
140
  onMessage: this._onMessage
@@ -153,62 +156,62 @@ var AiChatProcessor = class {
153
156
  /**
154
157
  * Initiates a new request.
155
158
  */
156
- async request(requestParam) {
159
+ async request(requestProp) {
157
160
  if (this._fiber) {
158
161
  await this.cancel();
159
162
  }
160
163
  try {
161
- this._lastRequest = requestParam;
162
- this._rx.set(this.error, Option.none());
163
- this._rx.set(this.active, true);
164
+ this._lastRequest = requestProp;
165
+ this._registry.set(this.error, Option.none());
166
+ this._registry.set(this.active, true);
167
+ const services = await this._services();
164
168
  const request = this._conversation.createRequest({
165
169
  system: this._options.system,
166
- prompt: requestParam.message,
170
+ prompt: requestProp.message,
167
171
  observer: this._observer
168
172
  });
169
- const runtime = await this._services();
170
173
  this._fiber = request.pipe(
171
174
  Effect2.provide(AiService2.model(this._options.model ?? DEFAULT_EDGE_MODEL2)),
172
175
  // TODO(dmaretskyi): Move ArtifactDiffResolver upstream.
173
176
  Effect2.provideService(ArtifactDiffResolver, this._artifactDiffResolver),
174
177
  Effect2.asVoid,
175
- Runtime2.runFork(runtime)
178
+ Runtime2.runFork(services)
176
179
  );
177
180
  const response = await this._fiber.pipe(Fiber2.join, Effect2.runPromiseExit);
178
181
  if (!Exit2.isSuccess(response) && !Cause.isInterruptedOnly(response.cause)) {
179
182
  throwCause2(response.cause);
180
183
  }
181
- this._rx.set(this.error, Option.none());
184
+ this._registry.set(this.error, Option.none());
182
185
  this._lastRequest = void 0;
183
186
  this._fiber = void 0;
184
- } catch (error) {
187
+ } catch (err) {
185
188
  log.error("request failed", {
186
- error
189
+ error: err
187
190
  }, {
188
191
  F: __dxlog_file,
189
- L: 187,
192
+ L: 185,
190
193
  S: this,
191
194
  C: (f, a) => f(...a)
192
195
  });
193
- this._rx.set(this.error, Option.some(new Error("AI service error", {
194
- cause: error
196
+ this._registry.set(this.error, Option.some(new Error("AI service error", {
197
+ cause: err
195
198
  })));
196
199
  } finally {
200
+ this._registry.set(this.active, false);
197
201
  this._fiber = void 0;
198
- this._rx.set(this.active, false);
199
202
  }
200
203
  }
201
204
  /**
202
205
  * Cancels the current request.
203
206
  */
204
207
  async cancel() {
205
- await Effect2.runPromise(Effect2.gen(this, function* () {
208
+ await runAndForwardErrors(Effect2.gen(this, function* () {
206
209
  if (this._fiber) {
207
210
  yield* this._fiber.pipe(Fiber2.interrupt);
208
211
  }
209
212
  }));
210
213
  this._fiber = void 0;
211
- this._rx.set(this.active, false);
214
+ this._registry.set(this.active, false);
212
215
  }
213
216
  /**
214
217
  * Retry last failed request.
@@ -233,16 +236,16 @@ var AiChatProcessor = class {
233
236
  }
234
237
  };
235
238
  _onMessage = Effect2.fn((function* (message) {
236
- this._rx.set(this._streaming, Option.none());
237
- this._rx.update(this._pending, (pending) => [
239
+ this._registry.set(this._streaming, Option.none());
240
+ this._registry.update(this._pending, (pending) => [
238
241
  ...pending,
239
242
  message
240
243
  ]);
241
244
  }).bind(this));
242
245
  _onBlock = Effect2.fn((function* (block) {
243
- this._rx.update(this._streaming, (streaming) => {
246
+ this._registry.update(this._streaming, (streaming) => {
244
247
  const blocks = streaming.pipe(Option.map((streaming2) => streaming2.blocks.filter((b) => !b.pending)), Option.getOrElse(() => []));
245
- return Option.some(Obj.make(DataType.Message, {
248
+ return Option.some(Obj2.make(Message.Message, {
246
249
  created: (/* @__PURE__ */ new Date()).toISOString(),
247
250
  sender: {
248
251
  role: "assistant"
@@ -261,4 +264,4 @@ export {
261
264
  updateName,
262
265
  AiChatProcessor
263
266
  };
264
- //# sourceMappingURL=chunk-7ZYOYW7F.mjs.map
267
+ //# sourceMappingURL=chunk-ZRIPP7YF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/processor/update-name.ts", "../../../src/processor/presets.ts", "../../../src/processor/processor.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Exit from 'effect/Exit';\nimport * as Fiber from 'effect/Fiber';\nimport * as Runtime from 'effect/Runtime';\n\nimport { AiService, DEFAULT_EDGE_MODEL, type ModelName } from '@dxos/ai';\nimport { type AiConversation, AiSession } from '@dxos/assistant';\nimport { Obj } from '@dxos/echo';\nimport { throwCause } from '@dxos/effect';\nimport { trim } from '@dxos/util';\n\nimport { type Assistant } from '../types';\n\nimport { type AiChatServices } from './processor';\n\n/**\n * Update the current chat's name.\n */\n// TODO(burdon): Convert this into a plugin tool.\nexport const updateName = async (\n runtime: Runtime.Runtime<AiChatServices>,\n conversation: AiConversation,\n chat: Assistant.Chat,\n model: ModelName = DEFAULT_EDGE_MODEL,\n): Promise<void> => {\n const history = await conversation.getHistory();\n const system = trim`\n It is extremely important that you respond only with the title and nothing else.\n If you cannot do this effectively respond with \"New Chat\".\n `;\n const prompt = 'Suggest a name for this chat';\n\n const fiber = Effect.gen(this, function* () {\n const session = new AiSession();\n return yield* session.run({ system, prompt, history });\n }).pipe(\n Effect.provide(AiService.model(model)),\n Effect.tap((messages) => {\n // TODO(burdon): Parse response (should update via tool).\n const message = messages.find((message) => message.sender.role === 'assistant');\n const title = message?.blocks.find((block) => block._tag === 'text')?.text;\n if (title) {\n Obj.change(chat, (c) => {\n c.name = title;\n });\n }\n }),\n Runtime.runFork(runtime), // Run in the background.\n );\n\n const response = await fiber.pipe(Fiber.join, Effect.runPromiseExit);\n if (!Exit.isSuccess(response)) {\n throwCause(response.cause);\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { type ModelName } from '@dxos/ai';\n\nconst ModelProviders = ['dxos-local', 'dxos-remote', 'lm-studio'] as const;\n\nconst ModelProvider = Schema.Literal(...ModelProviders);\ntype ModelProvider = Schema.Schema.Type<typeof ModelProvider>;\n\nexport type AiServicePreset = {\n id: string;\n provider: ModelProvider;\n model: ModelName;\n label?: string;\n};\n\nconst createModelLabel = (model: ModelName) => {\n const parts = model.split('/');\n return parts[parts.length - 1];\n};\n\n// TODO(burdon): Users should be able to create and edit presets.\nexport const AiServicePresets: AiServicePreset[] = [\n {\n provider: 'dxos-remote' as const,\n model: '@anthropic/claude-opus-4-0' as const,\n },\n {\n provider: 'dxos-remote' as const,\n model: '@anthropic/claude-sonnet-4-0' as const,\n },\n {\n provider: 'dxos-remote' as const,\n model: '@anthropic/claude-3-5-haiku-20241022' as const,\n },\n {\n provider: 'lm-studio' as const,\n model: '@google/gemma-3-27b' as const,\n },\n {\n provider: 'lm-studio' as const,\n model: '@meta/llama-3.2-3b-instruct' as const,\n },\n {\n model: 'deepseek-r1:latest' as const,\n provider: 'dxos-local' as const,\n },\n].map(\n ({ model, provider }, i) =>\n ({\n id: `preset-${i}`,\n provider,\n model,\n label: createModelLabel(model),\n }) satisfies AiServicePreset,\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom, Registry } from '@effect-atom/atom-react';\nimport * as Cause from 'effect/Cause';\nimport * as Effect from 'effect/Effect';\nimport * as Exit from 'effect/Exit';\nimport * as Fiber from 'effect/Fiber';\nimport * as Option from 'effect/Option';\nimport * as Runtime from 'effect/Runtime';\n\nimport {\n AiService,\n DEFAULT_EDGE_MODEL,\n type ModelName,\n type ModelRegistry,\n type ToolExecutionService,\n type ToolResolverService,\n} from '@dxos/ai';\nimport {\n type AiConversation,\n type AiConversationRunProps,\n ArtifactDiffResolver,\n GenerationObserver,\n createSystemPrompt,\n} from '@dxos/assistant';\nimport { type Blueprint } from '@dxos/blueprints';\nimport { Obj } from '@dxos/echo';\nimport { type Database } from '@dxos/echo';\nimport { runAndForwardErrors, throwCause } from '@dxos/effect';\nimport {\n type CredentialsService,\n type FunctionInvocationService,\n type QueueService,\n type TracingService,\n} from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { type ContentBlock, Message } from '@dxos/types';\n\nimport { type Assistant } from '../types';\n\nimport { updateName } from './update-name';\n\nexport type AiChatServices =\n | CredentialsService\n | Database.Service\n | QueueService\n | FunctionInvocationService\n | AiService.AiService\n | ToolExecutionService\n | ToolResolverService\n | TracingService;\n\nexport type AiChatProcessorOptions = {\n model?: ModelName;\n modelRegistry?: ModelRegistry;\n blueprintRegistry?: Blueprint.Registry;\n observableRegistry?: Registry.Registry;\n extensions?: ToolContextExtensions;\n} & Pick<AiConversationRunProps, 'system'>;\n\nconst defaultOptions: Partial<AiChatProcessorOptions> = {\n model: DEFAULT_EDGE_MODEL,\n};\n\n// TODO(burdon): Retry, timeout?\nexport type AiRequestOptions = {};\n\nexport type AiRequest = {\n message: string;\n options?: AiRequestOptions;\n};\n\n/**\n * Handles interactions with the AI service.\n * Handles streaming responses from the conversation.\n */\nexport class AiChatProcessor {\n private readonly _registry: Registry.Registry;\n\n /** External observer. */\n private readonly _observer: GenerationObserver;\n\n /** Pending messages (incl. the current user request). */\n private readonly _pending = Atom.make<Message.Message[]>([]);\n\n /** Currently streaming message (from the AI service). */\n private readonly _streaming = Atom.make<Option.Option<Message.Message>>(Option.none());\n\n /** Currently active request fiber. */\n private _fiber: Fiber.Fiber<void, any> | undefined;\n\n /** Last request (for retries). */\n private _lastRequest: AiRequest | undefined;\n\n /** Streaming state. */\n public readonly streaming = Atom.make<boolean>((get) => Option.isSome(get(this._streaming)));\n\n /** Active state. */\n public readonly active = Atom.make(false);\n\n /** Array of Messages (incl. the current message being streamed). */\n public readonly messages = Atom.make<Message.Message[]>((get) =>\n Option.match(get(this._streaming), {\n onNone: () => get(this._pending),\n onSome: (streaming) => [...get(this._pending), streaming],\n }),\n );\n\n /** Last error. */\n public readonly error = Atom.make<Option.Option<Error>>(Option.none());\n\n constructor(\n private readonly _conversation: AiConversation,\n // TODO(dmaretskyi): Replace this with effect's ManagedRuntime wrapping this layer.\n private readonly _services: () => Promise<Runtime.Runtime<AiChatServices>>,\n private readonly _options: AiChatProcessorOptions = defaultOptions,\n ) {\n // Initialize registries and defaults before using in other logic.\n this._registry = this._options.observableRegistry ?? Registry.make();\n this._observer = GenerationObserver.make({\n onBlock: this._onBlock,\n onMessage: this._onMessage,\n });\n if (this._options.model && !this._options.system) {\n const capabilities = this._options.modelRegistry?.getCapabilities(this._options.model) ?? {};\n this._options.system = createSystemPrompt(capabilities);\n }\n }\n\n get context() {\n return this._conversation.context;\n }\n\n get conversation() {\n return this._conversation;\n }\n\n get blueprintRegistry() {\n return this._options.blueprintRegistry;\n }\n\n /**\n * Initiates a new request.\n */\n async request(requestProp: AiRequest): Promise<void> {\n if (this._fiber) {\n await this.cancel();\n }\n\n try {\n this._lastRequest = requestProp;\n this._registry.set(this.error, Option.none());\n this._registry.set(this.active, true);\n\n const services = await this._services();\n\n // Create request.\n const request = this._conversation.createRequest({\n system: this._options.system,\n prompt: requestProp.message,\n observer: this._observer,\n });\n\n // Create fiber.\n this._fiber = request.pipe(\n Effect.provide(AiService.model(this._options.model ?? DEFAULT_EDGE_MODEL)),\n // TODO(dmaretskyi): Move ArtifactDiffResolver upstream.\n Effect.provideService(ArtifactDiffResolver, this._artifactDiffResolver),\n Effect.asVoid,\n Runtime.runFork(services), // Runs in the background.\n );\n\n // Execute request.\n const response = await this._fiber.pipe(Fiber.join, Effect.runPromiseExit);\n if (!Exit.isSuccess(response) && !Cause.isInterruptedOnly(response.cause)) {\n throwCause(response.cause);\n }\n\n this._registry.set(this.error, Option.none());\n this._lastRequest = undefined;\n this._fiber = undefined;\n } catch (err) {\n log.error('request failed', { error: err });\n this._registry.set(this.error, Option.some(new Error('AI service error', { cause: err })));\n } finally {\n this._registry.set(this.active, false);\n this._fiber = undefined;\n }\n }\n\n /**\n * Cancels the current request.\n */\n async cancel(): Promise<void> {\n await runAndForwardErrors(\n Effect.gen(this, function* () {\n if (this._fiber) {\n yield* this._fiber.pipe(Fiber.interrupt);\n }\n }),\n );\n\n this._fiber = undefined;\n this._registry.set(this.active, false);\n }\n\n /**\n * Retry last failed request.\n */\n async retry(): Promise<void> {\n if (this._lastRequest) {\n return this.request(this._lastRequest);\n }\n }\n\n /**\n * Update the current chat's name.\n */\n async updateName(chat: Assistant.Chat): Promise<void> {\n const runtime = await this._services();\n await updateName(runtime, this._conversation, chat, this._options.model);\n }\n\n // TODO(burdon): Fix/factor out.\n private _artifactDiffResolver: ArtifactDiffResolver.Service = {\n resolve: async (_artifacts) => {\n const versions = new Map();\n // await Promise.all(\n // artifacts.map(async (artifact) => {\n // const {\n // objects: [object],\n // } = await space.db.query(Filter.id(artifact.id)).run();\n // if (!object) {\n // return;\n // }\n\n // versions.set(artifact.id, {\n // version: getVersion(object),\n // diff: `Current state: ${JSON.stringify(object)}`,\n // });\n // }),\n // );\n\n return versions;\n },\n };\n\n private _onMessage = Effect.fn(\n function* (this: AiChatProcessor, message: Message.Message) {\n this._registry.set(this._streaming, Option.none());\n this._registry.update(this._pending, (pending) => [...pending, message]);\n }.bind(this),\n );\n\n private _onBlock = Effect.fn(\n function* (this: AiChatProcessor, block: ContentBlock.Any) {\n this._registry.update(this._streaming, (streaming) => {\n const blocks = streaming.pipe(\n Option.map((streaming) => streaming.blocks.filter((b: ContentBlock.Any) => !b.pending)),\n Option.getOrElse(() => []),\n );\n\n return Option.some(\n Obj.make(Message.Message, {\n created: new Date().toISOString(),\n sender: { role: 'assistant' },\n blocks: [...blocks, block],\n }),\n );\n });\n }.bind(this),\n );\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["Effect", "Exit", "Fiber", "Runtime", "AiService", "DEFAULT_EDGE_MODEL", "AiSession", "Obj", "throwCause", "trim", "updateName", "runtime", "conversation", "chat", "model", "DEFAULT_EDGE_MODEL", "history", "getHistory", "system", "trim", "prompt", "fiber", "gen", "session", "AiSession", "run", "pipe", "provide", "AiService", "tap", "messages", "message", "find", "sender", "role", "title", "blocks", "block", "_tag", "text", "Obj", "change", "c", "name", "runFork", "response", "join", "runPromiseExit", "isSuccess", "throwCause", "cause", "Schema", "ModelProviders", "ModelProvider", "Literal", "createModelLabel", "model", "parts", "split", "length", "AiServicePresets", "provider", "map", "i", "id", "label", "Atom", "Registry", "Cause", "Effect", "Exit", "Fiber", "Option", "Runtime", "AiService", "DEFAULT_EDGE_MODEL", "ArtifactDiffResolver", "GenerationObserver", "createSystemPrompt", "Obj", "runAndForwardErrors", "throwCause", "log", "Message", "defaultOptions", "model", "DEFAULT_EDGE_MODEL", "AiChatProcessor", "_registry", "_observer", "_pending", "Atom", "make", "_streaming", "none", "_fiber", "_lastRequest", "streaming", "get", "isSome", "active", "messages", "match", "onNone", "onSome", "error", "_conversation", "_services", "_options", "observableRegistry", "Registry", "GenerationObserver", "onBlock", "_onBlock", "onMessage", "_onMessage", "system", "capabilities", "modelRegistry", "getCapabilities", "createSystemPrompt", "context", "conversation", "blueprintRegistry", "request", "requestProp", "cancel", "set", "services", "createRequest", "prompt", "message", "observer", "pipe", "provide", "AiService", "provideService", "ArtifactDiffResolver", "_artifactDiffResolver", "asVoid", "runFork", "response", "join", "runPromiseExit", "isSuccess", "isInterruptedOnly", "cause", "throwCause", "undefined", "err", "log", "some", "Error", "runAndForwardErrors", "gen", "interrupt", "retry", "updateName", "chat", "runtime", "resolve", "_artifacts", "versions", "Map", "fn", "update", "pending", "bind", "block", "blocks", "map", "filter", "b", "getOrElse", "Obj", "Message", "created", "Date", "toISOString", "sender", "role"]
7
+ }