@dxos/plugin-assistant 0.8.4-main.406dc2a → 0.8.4-main.52d7546f51

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 (543) hide show
  1. package/dist/lib/browser/BlueprintArticle-6SP2ZWJ2.mjs +30 -0
  2. package/dist/lib/browser/BlueprintArticle-6SP2ZWJ2.mjs.map +7 -0
  3. package/dist/lib/browser/ChatCompanion-JOTRKE7B.mjs +200 -0
  4. package/dist/lib/browser/ChatCompanion-JOTRKE7B.mjs.map +7 -0
  5. package/dist/lib/browser/ChatContainer-ESDLG5JY.mjs +73 -0
  6. package/dist/lib/browser/ChatContainer-ESDLG5JY.mjs.map +7 -0
  7. package/dist/lib/browser/ChatDialog-LKY3FTYO.mjs +85 -0
  8. package/dist/lib/browser/ChatDialog-LKY3FTYO.mjs.map +7 -0
  9. package/dist/lib/browser/InitiativeContainer-T2SQ4O6J.mjs +267 -0
  10. package/dist/lib/browser/InitiativeContainer-T2SQ4O6J.mjs.map +7 -0
  11. package/dist/lib/browser/PromptArticle-PK3CBRUB.mjs +52 -0
  12. package/dist/lib/browser/PromptArticle-PK3CBRUB.mjs.map +7 -0
  13. package/dist/lib/browser/ai-service-CY2BYPH6.mjs +22 -0
  14. package/dist/lib/browser/ai-service-CY2BYPH6.mjs.map +7 -0
  15. package/dist/lib/browser/app-graph-builder-MUZGUQSC.mjs +234 -0
  16. package/dist/lib/browser/app-graph-builder-MUZGUQSC.mjs.map +7 -0
  17. package/dist/lib/browser/blueprint-definition-YAGWYVCL.mjs +14 -0
  18. package/dist/lib/browser/blueprints/index.mjs +12 -0
  19. package/dist/lib/browser/chunk-3ETBCBMH.mjs +47 -0
  20. package/dist/lib/browser/chunk-3ETBCBMH.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-6BVCG5SJ.mjs +230 -0
  22. package/dist/lib/browser/chunk-6BVCG5SJ.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-DKQMSMBN.mjs +326 -0
  24. package/dist/lib/browser/chunk-DKQMSMBN.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-EXVT7D4B.mjs +23 -0
  26. package/dist/lib/browser/chunk-EXVT7D4B.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-IJYAKPEU.mjs +286 -0
  28. package/dist/lib/browser/chunk-IJYAKPEU.mjs.map +7 -0
  29. package/dist/lib/browser/chunk-POPBT2AQ.mjs +198 -0
  30. package/dist/lib/browser/chunk-POPBT2AQ.mjs.map +7 -0
  31. package/dist/lib/browser/chunk-Q4QUMX62.mjs +1974 -0
  32. package/dist/lib/browser/chunk-Q4QUMX62.mjs.map +7 -0
  33. package/dist/lib/browser/edge-model-resolver-YTMFQEN5.mjs +21 -0
  34. package/dist/lib/browser/edge-model-resolver-YTMFQEN5.mjs.map +7 -0
  35. package/dist/lib/browser/index.mjs +251 -215
  36. package/dist/lib/browser/index.mjs.map +4 -4
  37. package/dist/lib/browser/local-model-resolver-CGRQH37T.mjs +20 -0
  38. package/dist/lib/browser/local-model-resolver-CGRQH37T.mjs.map +7 -0
  39. package/dist/lib/browser/meta.json +1 -1
  40. package/dist/lib/browser/operation-resolver-2673CFJS.mjs +133 -0
  41. package/dist/lib/browser/operation-resolver-2673CFJS.mjs.map +7 -0
  42. package/dist/lib/browser/react-surface-I7YJVK4K.mjs +125 -0
  43. package/dist/lib/browser/react-surface-I7YJVK4K.mjs.map +7 -0
  44. package/dist/lib/browser/repair-IRXDYF4R.mjs +51 -0
  45. package/dist/lib/browser/repair-IRXDYF4R.mjs.map +7 -0
  46. package/dist/lib/browser/settings-XF6GKHCG.mjs +33 -0
  47. package/dist/lib/browser/settings-XF6GKHCG.mjs.map +7 -0
  48. package/dist/lib/browser/state-OYDPWLKA.mjs +26 -0
  49. package/dist/lib/browser/state-OYDPWLKA.mjs.map +7 -0
  50. package/dist/lib/browser/toolkit-IDXQCSTX.mjs +19 -0
  51. package/dist/lib/browser/toolkit-IDXQCSTX.mjs.map +7 -0
  52. package/dist/lib/browser/types/index.mjs +8 -4
  53. package/dist/lib/node-esm/BlueprintArticle-7LI6UXKZ.mjs +31 -0
  54. package/dist/lib/node-esm/BlueprintArticle-7LI6UXKZ.mjs.map +7 -0
  55. package/dist/lib/node-esm/ChatCompanion-52OWAARX.mjs +201 -0
  56. package/dist/lib/node-esm/ChatCompanion-52OWAARX.mjs.map +7 -0
  57. package/dist/lib/node-esm/ChatContainer-VLWSQ3ZO.mjs +74 -0
  58. package/dist/lib/node-esm/ChatContainer-VLWSQ3ZO.mjs.map +7 -0
  59. package/dist/lib/node-esm/ChatDialog-5DUQIF2T.mjs +86 -0
  60. package/dist/lib/node-esm/ChatDialog-5DUQIF2T.mjs.map +7 -0
  61. package/dist/lib/node-esm/InitiativeContainer-ATD3D23L.mjs +268 -0
  62. package/dist/lib/node-esm/InitiativeContainer-ATD3D23L.mjs.map +7 -0
  63. package/dist/lib/node-esm/PromptArticle-BHPABYLT.mjs +53 -0
  64. package/dist/lib/node-esm/PromptArticle-BHPABYLT.mjs.map +7 -0
  65. package/dist/lib/node-esm/ai-service-ZI3A6RVG.mjs +23 -0
  66. package/dist/lib/node-esm/ai-service-ZI3A6RVG.mjs.map +7 -0
  67. package/dist/lib/node-esm/app-graph-builder-4QN5M6PD.mjs +235 -0
  68. package/dist/lib/node-esm/app-graph-builder-4QN5M6PD.mjs.map +7 -0
  69. package/dist/lib/node-esm/{blueprint-definition-WD2IVMAI.mjs → blueprint-definition-H3LFAEK2.mjs} +6 -4
  70. package/dist/lib/node-esm/blueprint-definition-H3LFAEK2.mjs.map +7 -0
  71. package/dist/lib/node-esm/blueprints/index.mjs +13 -0
  72. package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-2LEN26ZQ.mjs +48 -0
  74. package/dist/lib/node-esm/chunk-2LEN26ZQ.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-75PHXBN3.mjs +327 -0
  76. package/dist/lib/node-esm/chunk-75PHXBN3.mjs.map +7 -0
  77. package/dist/lib/node-esm/chunk-ESDMBGF7.mjs +1975 -0
  78. package/dist/lib/node-esm/chunk-ESDMBGF7.mjs.map +7 -0
  79. package/dist/lib/node-esm/chunk-F6LA7XNS.mjs +199 -0
  80. package/dist/lib/node-esm/chunk-F6LA7XNS.mjs.map +7 -0
  81. package/dist/lib/node-esm/chunk-LB72WG6R.mjs +231 -0
  82. package/dist/lib/node-esm/chunk-LB72WG6R.mjs.map +7 -0
  83. package/dist/lib/node-esm/chunk-MJD5XWQV.mjs +288 -0
  84. package/dist/lib/node-esm/chunk-MJD5XWQV.mjs.map +7 -0
  85. package/dist/lib/node-esm/{chunk-73ABYRYX.mjs → chunk-POWB2BPC.mjs} +7 -2
  86. package/dist/lib/node-esm/chunk-POWB2BPC.mjs.map +7 -0
  87. package/dist/lib/node-esm/edge-model-resolver-CMJ3KNLQ.mjs +22 -0
  88. package/dist/lib/node-esm/edge-model-resolver-CMJ3KNLQ.mjs.map +7 -0
  89. package/dist/lib/node-esm/index.mjs +251 -215
  90. package/dist/lib/node-esm/index.mjs.map +4 -4
  91. package/dist/lib/node-esm/local-model-resolver-FFDAKOXN.mjs +21 -0
  92. package/dist/lib/node-esm/local-model-resolver-FFDAKOXN.mjs.map +7 -0
  93. package/dist/lib/node-esm/meta.json +1 -1
  94. package/dist/lib/node-esm/operation-resolver-2ZD2DXOU.mjs +134 -0
  95. package/dist/lib/node-esm/operation-resolver-2ZD2DXOU.mjs.map +7 -0
  96. package/dist/lib/node-esm/react-surface-2CWJ6GZW.mjs +126 -0
  97. package/dist/lib/node-esm/react-surface-2CWJ6GZW.mjs.map +7 -0
  98. package/dist/lib/node-esm/repair-DMI55PON.mjs +52 -0
  99. package/dist/lib/node-esm/repair-DMI55PON.mjs.map +7 -0
  100. package/dist/lib/node-esm/settings-NGGZA7S7.mjs +34 -0
  101. package/dist/lib/node-esm/settings-NGGZA7S7.mjs.map +7 -0
  102. package/dist/lib/node-esm/state-VSCPGN7R.mjs +27 -0
  103. package/dist/lib/node-esm/state-VSCPGN7R.mjs.map +7 -0
  104. package/dist/lib/node-esm/toolkit-JPRJRDDB.mjs +20 -0
  105. package/dist/lib/node-esm/toolkit-JPRJRDDB.mjs.map +7 -0
  106. package/dist/lib/node-esm/types/index.mjs +8 -4
  107. package/dist/types/src/AssistantPlugin.d.ts +2 -1
  108. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  109. package/dist/types/src/blueprints/assistant-blueprint.d.ts +11 -0
  110. package/dist/types/src/blueprints/assistant-blueprint.d.ts.map +1 -0
  111. package/dist/types/src/blueprints/index.d.ts +7 -0
  112. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/ai-service/ai-service.d.ts +6 -0
  114. package/dist/types/src/capabilities/ai-service/ai-service.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/ai-service/index.d.ts +3 -0
  116. package/dist/types/src/capabilities/ai-service/index.d.ts.map +1 -0
  117. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  118. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  120. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +26 -0
  122. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  123. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +4 -0
  124. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  125. package/dist/types/src/capabilities/edge-model-resolver/edge-model-resolver.d.ts +7 -0
  126. package/dist/types/src/capabilities/edge-model-resolver/edge-model-resolver.d.ts.map +1 -0
  127. package/dist/types/src/capabilities/edge-model-resolver/index.d.ts +3 -0
  128. package/dist/types/src/capabilities/edge-model-resolver/index.d.ts.map +1 -0
  129. package/dist/types/src/capabilities/index.d.ts +10 -11
  130. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  131. package/dist/types/src/capabilities/local-model-resolver/index.d.ts +3 -0
  132. package/dist/types/src/capabilities/local-model-resolver/index.d.ts.map +1 -0
  133. package/dist/types/src/capabilities/local-model-resolver/local-model-resolver.d.ts +13 -0
  134. package/dist/types/src/capabilities/local-model-resolver/local-model-resolver.d.ts.map +1 -0
  135. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  136. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  137. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  138. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  139. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  140. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  141. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  142. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  143. package/dist/types/src/capabilities/repair/index.d.ts +3 -0
  144. package/dist/types/src/capabilities/repair/index.d.ts.map +1 -0
  145. package/dist/types/src/capabilities/repair/repair.d.ts +6 -0
  146. package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -0
  147. package/dist/types/src/capabilities/settings/index.d.ts +15 -0
  148. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  149. package/dist/types/src/capabilities/settings/settings.d.ts +18 -0
  150. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  151. package/dist/types/src/capabilities/state/index.d.ts +11 -0
  152. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  153. package/dist/types/src/capabilities/state/state.d.ts +13 -0
  154. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  155. package/dist/types/src/capabilities/toolkit/index.d.ts +3 -0
  156. package/dist/types/src/capabilities/toolkit/index.d.ts.map +1 -0
  157. package/dist/types/src/capabilities/toolkit/toolkit.d.ts +6 -0
  158. package/dist/types/src/capabilities/toolkit/toolkit.d.ts.map +1 -0
  159. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts +4 -2
  160. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  161. package/dist/types/src/components/BlueprintArticle.d.ts +7 -0
  162. package/dist/types/src/components/BlueprintArticle.d.ts.map +1 -0
  163. package/dist/types/src/components/Chat/Chat.d.ts +25 -13
  164. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  165. package/dist/types/src/components/Chat/events.d.ts +5 -1
  166. package/dist/types/src/components/Chat/events.d.ts.map +1 -1
  167. package/dist/types/src/components/ChatCompanion.d.ts +4 -4
  168. package/dist/types/src/components/ChatCompanion.d.ts.map +1 -1
  169. package/dist/types/src/components/ChatContainer.d.ts +14 -6
  170. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  171. package/dist/types/src/components/ChatDialog.d.ts +2 -2
  172. package/dist/types/src/components/ChatDialog.d.ts.map +1 -1
  173. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts +2 -2
  174. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts.map +1 -1
  175. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  176. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts +3 -3
  177. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
  178. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +3 -3
  179. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -1
  180. package/dist/types/src/components/ChatThread/ChatThread.d.ts +7 -10
  181. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  182. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +246 -73
  183. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  184. package/dist/types/src/components/ChatThread/registry.d.ts +1 -1
  185. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
  186. package/dist/types/src/components/ChatThread/sync.d.ts +12 -6
  187. package/dist/types/src/components/ChatThread/sync.d.ts.map +1 -1
  188. package/dist/types/src/components/InitiativeContainer.d.ts +9 -0
  189. package/dist/types/src/components/InitiativeContainer.d.ts.map +1 -0
  190. package/dist/types/src/components/PromptArticle.d.ts +7 -0
  191. package/dist/types/src/components/PromptArticle.d.ts.map +1 -0
  192. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +2 -1
  193. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  194. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +230 -61
  195. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  196. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +11 -1
  197. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  198. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +231 -62
  199. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  200. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +1 -0
  201. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts +3 -0
  202. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts.map +1 -0
  203. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts +8 -0
  204. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts.map +1 -0
  205. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +10 -8
  206. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -1
  207. package/dist/types/src/components/Toolbox/Toolbox.d.ts +6 -7
  208. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  209. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +230 -60
  210. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  211. package/dist/types/src/components/TriggerStatus/TriggerStatus.d.ts +4 -0
  212. package/dist/types/src/components/TriggerStatus/TriggerStatus.d.ts.map +1 -0
  213. package/dist/types/src/components/TriggerStatus/index.d.ts +2 -0
  214. package/dist/types/src/components/TriggerStatus/index.d.ts.map +1 -0
  215. package/dist/types/src/components/Typewriter/AssistantToolbar.d.ts +12 -0
  216. package/dist/types/src/components/Typewriter/AssistantToolbar.d.ts.map +1 -0
  217. package/dist/types/src/components/Typewriter/Typewriter.d.ts +11 -0
  218. package/dist/types/src/components/Typewriter/Typewriter.d.ts.map +1 -0
  219. package/dist/types/src/components/Typewriter/Typewriter.stories.d.ts +7 -0
  220. package/dist/types/src/components/Typewriter/Typewriter.stories.d.ts.map +1 -0
  221. package/dist/types/src/components/Typewriter/assistant-extension.d.ts +5 -0
  222. package/dist/types/src/components/Typewriter/assistant-extension.d.ts.map +1 -0
  223. package/dist/types/src/components/Typewriter/index.d.ts +2 -0
  224. package/dist/types/src/components/Typewriter/index.d.ts.map +1 -0
  225. package/dist/types/src/components/index.d.ts +10 -10
  226. package/dist/types/src/components/index.d.ts.map +1 -1
  227. package/dist/types/src/functions/index.d.ts +3 -3
  228. package/dist/types/src/functions/index.d.ts.map +1 -1
  229. package/dist/types/src/functions/{list.d.ts → object-list.d.ts} +3 -3
  230. package/dist/types/src/functions/object-list.d.ts.map +1 -0
  231. package/dist/types/src/functions/{load.d.ts → object-load.d.ts} +3 -3
  232. package/dist/types/src/functions/object-load.d.ts.map +1 -0
  233. package/dist/types/src/functions/object-search.d.ts +10 -0
  234. package/dist/types/src/functions/object-search.d.ts.map +1 -0
  235. package/dist/types/src/hooks/index.d.ts +2 -1
  236. package/dist/types/src/hooks/index.d.ts.map +1 -1
  237. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +5 -5
  238. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -1
  239. package/dist/types/src/hooks/useChatProcessor.d.ts +5 -2
  240. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  241. package/dist/types/src/hooks/useChatServices.d.ts +5 -5
  242. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
  243. package/dist/types/src/hooks/useChatToolbarActions.d.ts +8 -0
  244. package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -0
  245. package/dist/types/src/hooks/useContextBinder.d.ts +2 -2
  246. package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -1
  247. package/dist/types/src/hooks/useContextObjects.d.ts +7 -7
  248. package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -1
  249. package/dist/types/src/hooks/useFilteredTypes.d.ts +3 -0
  250. package/dist/types/src/hooks/useFilteredTypes.d.ts.map +1 -0
  251. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -1
  252. package/dist/types/src/index.d.ts +0 -1
  253. package/dist/types/src/index.d.ts.map +1 -1
  254. package/dist/types/src/meta.d.ts +2 -2
  255. package/dist/types/src/meta.d.ts.map +1 -1
  256. package/dist/types/src/processor/index.d.ts +1 -0
  257. package/dist/types/src/processor/index.d.ts.map +1 -1
  258. package/dist/types/src/processor/processor.d.ts +23 -18
  259. package/dist/types/src/processor/processor.d.ts.map +1 -1
  260. package/dist/types/src/processor/update-name.d.ts +10 -0
  261. package/dist/types/src/processor/update-name.d.ts.map +1 -0
  262. package/dist/types/src/queue-logger.d.ts.map +1 -1
  263. package/dist/types/src/testing/test-generator.d.ts +5 -4
  264. package/dist/types/src/testing/test-generator.d.ts.map +1 -1
  265. package/dist/types/src/testing/test-services.d.ts.map +1 -1
  266. package/dist/types/src/translations.d.ts +358 -26
  267. package/dist/types/src/translations.d.ts.map +1 -1
  268. package/dist/types/src/types/Assistant.d.ts +7 -38
  269. package/dist/types/src/types/Assistant.d.ts.map +1 -1
  270. package/dist/types/src/types/AssistantAction.d.ts +90 -100
  271. package/dist/types/src/types/AssistantAction.d.ts.map +1 -1
  272. package/dist/types/src/types/capabilities.d.ts +33 -0
  273. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  274. package/dist/types/src/types/events.d.ts +5 -0
  275. package/dist/types/src/types/events.d.ts.map +1 -0
  276. package/dist/types/src/types/index.d.ts +4 -1
  277. package/dist/types/src/types/index.d.ts.map +1 -1
  278. package/dist/types/src/types/service.d.ts +10 -212
  279. package/dist/types/src/types/service.d.ts.map +1 -1
  280. package/dist/types/tsconfig.tsbuildinfo +1 -1
  281. package/package.json +119 -90
  282. package/src/AssistantPlugin.tsx +114 -112
  283. package/src/blueprints/assistant-blueprint.ts +57 -0
  284. package/src/blueprints/index.ts +12 -0
  285. package/src/capabilities/ai-service/ai-service.ts +30 -0
  286. package/src/capabilities/ai-service/index.ts +7 -0
  287. package/src/capabilities/app-graph-builder/app-graph-builder.ts +200 -0
  288. package/src/capabilities/app-graph-builder/index.ts +7 -0
  289. package/src/capabilities/blueprint-definition/blueprint-definition.ts +74 -0
  290. package/src/capabilities/blueprint-definition/index.ts +8 -0
  291. package/src/capabilities/edge-model-resolver/edge-model-resolver.ts +33 -0
  292. package/src/capabilities/edge-model-resolver/index.ts +7 -0
  293. package/src/capabilities/index.ts +10 -14
  294. package/src/capabilities/local-model-resolver/index.ts +7 -0
  295. package/src/capabilities/local-model-resolver/local-model-resolver.ts +38 -0
  296. package/src/capabilities/operation-resolver/index.ts +7 -0
  297. package/src/capabilities/operation-resolver/operation-resolver.ts +112 -0
  298. package/src/capabilities/react-surface/index.ts +7 -0
  299. package/src/capabilities/react-surface/react-surface.tsx +111 -0
  300. package/src/capabilities/repair/index.ts +7 -0
  301. package/src/capabilities/repair/repair.ts +62 -0
  302. package/src/capabilities/settings/index.ts +7 -0
  303. package/src/capabilities/settings/settings.ts +31 -0
  304. package/src/capabilities/state/index.ts +7 -0
  305. package/src/capabilities/state/state.ts +27 -0
  306. package/src/capabilities/toolkit/index.ts +7 -0
  307. package/src/capabilities/toolkit/toolkit.ts +27 -0
  308. package/src/components/AssistantSettings/AssistantSettings.tsx +28 -20
  309. package/src/components/BlueprintArticle.tsx +28 -0
  310. package/src/components/Chat/Chat.tsx +189 -127
  311. package/src/components/Chat/events.ts +7 -1
  312. package/src/components/ChatCompanion.tsx +191 -101
  313. package/src/components/ChatContainer.tsx +48 -31
  314. package/src/components/ChatDialog.tsx +15 -8
  315. package/src/components/ChatProgress/ChatProgress.tsx +6 -20
  316. package/src/components/ChatPrompt/ChatActions.tsx +11 -5
  317. package/src/components/ChatPrompt/ChatOptions.tsx +93 -80
  318. package/src/components/ChatPrompt/ChatReferences.tsx +7 -8
  319. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +1 -1
  320. package/src/components/ChatThread/ChatThread.stories.tsx +58 -37
  321. package/src/components/ChatThread/ChatThread.tsx +35 -36
  322. package/src/components/ChatThread/Link.tsx +4 -4
  323. package/src/components/ChatThread/registry.tsx +25 -35
  324. package/src/components/ChatThread/sync.test.ts +33 -17
  325. package/src/components/ChatThread/sync.ts +53 -12
  326. package/src/components/ChatThread/testing/thread.md +37 -0
  327. package/src/components/InitiativeContainer.tsx +340 -0
  328. package/src/components/PromptArticle.tsx +49 -0
  329. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +16 -6
  330. package/src/components/TemplateEditor/TemplateEditor.tsx +24 -12
  331. package/src/components/TemplateEditor/TemplateForm.stories.tsx +17 -9
  332. package/src/components/TemplateEditor/TemplateForm.tsx +76 -29
  333. package/src/components/TemplateEditor/extensions/handlebars-extension.ts +274 -0
  334. package/src/components/TemplateEditor/extensions/index.ts +6 -0
  335. package/src/components/TemplateEditor/extensions/xml-extension.ts +64 -0
  336. package/src/components/ToolBlock/ToolBlock.tsx +36 -45
  337. package/src/components/Toolbox/Toolbox.stories.tsx +10 -11
  338. package/src/components/Toolbox/Toolbox.tsx +54 -56
  339. package/src/components/TriggerStatus/TriggerStatus.tsx +142 -0
  340. package/src/components/{Toolbar → TriggerStatus}/index.ts +1 -1
  341. package/src/components/Typewriter/AssistantToolbar.tsx +161 -0
  342. package/src/components/Typewriter/Typewriter.stories.tsx +83 -0
  343. package/src/components/Typewriter/Typewriter.tsx +54 -0
  344. package/src/components/Typewriter/assistant-extension.tsx +144 -0
  345. package/src/components/Typewriter/index.ts +5 -0
  346. package/src/components/index.ts +13 -7
  347. package/src/functions/index.ts +3 -3
  348. package/src/functions/{list.ts → object-list.ts} +8 -7
  349. package/src/functions/object-load.ts +44 -0
  350. package/src/functions/object-search.ts +46 -0
  351. package/src/hooks/index.ts +2 -1
  352. package/src/hooks/useBlueprintRegistry.ts +31 -20
  353. package/src/hooks/useChatProcessor.ts +17 -13
  354. package/src/hooks/useChatServices.ts +16 -18
  355. package/src/hooks/useChatToolbarActions.ts +122 -0
  356. package/src/hooks/useContextBinder.ts +9 -7
  357. package/src/hooks/useContextObjects.ts +13 -25
  358. package/src/hooks/useFilteredTypes.ts +37 -0
  359. package/src/hooks/useReferencesProvider.ts +7 -6
  360. package/src/index.ts +0 -1
  361. package/src/meta.ts +8 -3
  362. package/src/processor/index.ts +1 -0
  363. package/src/processor/presets.ts +1 -1
  364. package/src/processor/processor.test.ts +16 -25
  365. package/src/processor/processor.ts +72 -73
  366. package/src/processor/update-name.ts +58 -0
  367. package/src/queue-logger.ts +8 -9
  368. package/src/testing/test-generator.ts +14 -13
  369. package/src/testing/test-services.ts +8 -6
  370. package/src/translations.ts +51 -18
  371. package/src/types/Assistant.ts +4 -40
  372. package/src/types/AssistantAction.ts +67 -53
  373. package/src/types/capabilities.ts +27 -0
  374. package/src/types/events.ts +11 -0
  375. package/src/types/index.ts +6 -1
  376. package/src/types/service.ts +12 -9
  377. package/dist/lib/browser/BlueprintContainer-WX2SSDVI.mjs +0 -28
  378. package/dist/lib/browser/BlueprintContainer-WX2SSDVI.mjs.map +0 -7
  379. package/dist/lib/browser/ChatCompanion-BDZ55ZRF.mjs +0 -150
  380. package/dist/lib/browser/ChatCompanion-BDZ55ZRF.mjs.map +0 -7
  381. package/dist/lib/browser/ChatContainer-RYGNN73X.mjs +0 -73
  382. package/dist/lib/browser/ChatContainer-RYGNN73X.mjs.map +0 -7
  383. package/dist/lib/browser/ChatDialog-MVHH2U66.mjs +0 -86
  384. package/dist/lib/browser/ChatDialog-MVHH2U66.mjs.map +0 -7
  385. package/dist/lib/browser/SequenceContainer-2FEWMQGW.mjs +0 -150
  386. package/dist/lib/browser/SequenceContainer-2FEWMQGW.mjs.map +0 -7
  387. package/dist/lib/browser/ai-service-ERTZBTP3.mjs +0 -19
  388. package/dist/lib/browser/ai-service-ERTZBTP3.mjs.map +0 -7
  389. package/dist/lib/browser/app-graph-builder-2U7SLCRX.mjs +0 -154
  390. package/dist/lib/browser/app-graph-builder-2U7SLCRX.mjs.map +0 -7
  391. package/dist/lib/browser/blueprint-definition-NSJARW5U.mjs +0 -12
  392. package/dist/lib/browser/chunk-2CE2KPKZ.mjs +0 -175
  393. package/dist/lib/browser/chunk-2CE2KPKZ.mjs.map +0 -7
  394. package/dist/lib/browser/chunk-43I2LR6O.mjs +0 -216
  395. package/dist/lib/browser/chunk-43I2LR6O.mjs.map +0 -7
  396. package/dist/lib/browser/chunk-5EGXHCAZ.mjs +0 -16
  397. package/dist/lib/browser/chunk-5EGXHCAZ.mjs.map +0 -7
  398. package/dist/lib/browser/chunk-5RICKAMN.mjs +0 -18
  399. package/dist/lib/browser/chunk-5RICKAMN.mjs.map +0 -7
  400. package/dist/lib/browser/chunk-CQ7UHYTT.mjs +0 -296
  401. package/dist/lib/browser/chunk-CQ7UHYTT.mjs.map +0 -7
  402. package/dist/lib/browser/chunk-FP56WB24.mjs +0 -212
  403. package/dist/lib/browser/chunk-FP56WB24.mjs.map +0 -7
  404. package/dist/lib/browser/chunk-JZRZVB2A.mjs +0 -170
  405. package/dist/lib/browser/chunk-JZRZVB2A.mjs.map +0 -7
  406. package/dist/lib/browser/chunk-WRJGOT5P.mjs +0 -1794
  407. package/dist/lib/browser/chunk-WRJGOT5P.mjs.map +0 -7
  408. package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs +0 -18
  409. package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs.map +0 -7
  410. package/dist/lib/browser/intent-resolver-3GOJMBXJ.mjs +0 -114
  411. package/dist/lib/browser/intent-resolver-3GOJMBXJ.mjs.map +0 -7
  412. package/dist/lib/browser/local-model-resolver-GO6ZEMLL.mjs +0 -17
  413. package/dist/lib/browser/local-model-resolver-GO6ZEMLL.mjs.map +0 -7
  414. package/dist/lib/browser/react-surface-FTKCE6GG.mjs +0 -107
  415. package/dist/lib/browser/react-surface-FTKCE6GG.mjs.map +0 -7
  416. package/dist/lib/browser/settings-HBF32KV6.mjs +0 -23
  417. package/dist/lib/browser/settings-HBF32KV6.mjs.map +0 -7
  418. package/dist/lib/browser/state-LXTS54DI.mjs +0 -21
  419. package/dist/lib/browser/state-LXTS54DI.mjs.map +0 -7
  420. package/dist/lib/browser/toolkit-NQ2GXCF5.mjs +0 -199
  421. package/dist/lib/browser/toolkit-NQ2GXCF5.mjs.map +0 -7
  422. package/dist/lib/node-esm/BlueprintContainer-4MKN6ZRB.mjs +0 -29
  423. package/dist/lib/node-esm/BlueprintContainer-4MKN6ZRB.mjs.map +0 -7
  424. package/dist/lib/node-esm/ChatCompanion-XFNXVZIP.mjs +0 -151
  425. package/dist/lib/node-esm/ChatCompanion-XFNXVZIP.mjs.map +0 -7
  426. package/dist/lib/node-esm/ChatContainer-UTJGCQXF.mjs +0 -74
  427. package/dist/lib/node-esm/ChatContainer-UTJGCQXF.mjs.map +0 -7
  428. package/dist/lib/node-esm/ChatDialog-QEYZ4IOV.mjs +0 -87
  429. package/dist/lib/node-esm/ChatDialog-QEYZ4IOV.mjs.map +0 -7
  430. package/dist/lib/node-esm/SequenceContainer-PGGJUQ46.mjs +0 -151
  431. package/dist/lib/node-esm/SequenceContainer-PGGJUQ46.mjs.map +0 -7
  432. package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs +0 -20
  433. package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs.map +0 -7
  434. package/dist/lib/node-esm/app-graph-builder-OKNLR7H2.mjs +0 -155
  435. package/dist/lib/node-esm/app-graph-builder-OKNLR7H2.mjs.map +0 -7
  436. package/dist/lib/node-esm/chunk-73ABYRYX.mjs.map +0 -7
  437. package/dist/lib/node-esm/chunk-DSE2IILK.mjs +0 -217
  438. package/dist/lib/node-esm/chunk-DSE2IILK.mjs.map +0 -7
  439. package/dist/lib/node-esm/chunk-E2WXZND7.mjs +0 -297
  440. package/dist/lib/node-esm/chunk-E2WXZND7.mjs.map +0 -7
  441. package/dist/lib/node-esm/chunk-HXIBCBH4.mjs +0 -171
  442. package/dist/lib/node-esm/chunk-HXIBCBH4.mjs.map +0 -7
  443. package/dist/lib/node-esm/chunk-TNR46C3L.mjs +0 -213
  444. package/dist/lib/node-esm/chunk-TNR46C3L.mjs.map +0 -7
  445. package/dist/lib/node-esm/chunk-U2NYUS2N.mjs +0 -177
  446. package/dist/lib/node-esm/chunk-U2NYUS2N.mjs.map +0 -7
  447. package/dist/lib/node-esm/chunk-UFKLCEAE.mjs +0 -1795
  448. package/dist/lib/node-esm/chunk-UFKLCEAE.mjs.map +0 -7
  449. package/dist/lib/node-esm/chunk-XQGWSZ4T.mjs +0 -17
  450. package/dist/lib/node-esm/chunk-XQGWSZ4T.mjs.map +0 -7
  451. package/dist/lib/node-esm/edge-model-resolver-2ARXDOYS.mjs +0 -19
  452. package/dist/lib/node-esm/edge-model-resolver-2ARXDOYS.mjs.map +0 -7
  453. package/dist/lib/node-esm/intent-resolver-6XLVTRDJ.mjs +0 -115
  454. package/dist/lib/node-esm/intent-resolver-6XLVTRDJ.mjs.map +0 -7
  455. package/dist/lib/node-esm/local-model-resolver-WOQ2D2R2.mjs +0 -18
  456. package/dist/lib/node-esm/local-model-resolver-WOQ2D2R2.mjs.map +0 -7
  457. package/dist/lib/node-esm/react-surface-K7ZXQLAP.mjs +0 -108
  458. package/dist/lib/node-esm/react-surface-K7ZXQLAP.mjs.map +0 -7
  459. package/dist/lib/node-esm/settings-CWP6MTWP.mjs +0 -24
  460. package/dist/lib/node-esm/settings-CWP6MTWP.mjs.map +0 -7
  461. package/dist/lib/node-esm/state-BO6GUFLB.mjs +0 -22
  462. package/dist/lib/node-esm/state-BO6GUFLB.mjs.map +0 -7
  463. package/dist/lib/node-esm/toolkit-V57PRJNG.mjs +0 -200
  464. package/dist/lib/node-esm/toolkit-V57PRJNG.mjs.map +0 -7
  465. package/dist/types/src/capabilities/ai-service.d.ts +0 -4
  466. package/dist/types/src/capabilities/ai-service.d.ts.map +0 -1
  467. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  468. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  469. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -7
  470. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  471. package/dist/types/src/capabilities/capabilities.d.ts +0 -11
  472. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  473. package/dist/types/src/capabilities/edge-model-resolver.d.ts +0 -4
  474. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +0 -1
  475. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  476. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  477. package/dist/types/src/capabilities/local-model-resolver.d.ts +0 -10
  478. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +0 -1
  479. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  480. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  481. package/dist/types/src/capabilities/settings.d.ts +0 -4
  482. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  483. package/dist/types/src/capabilities/state.d.ts +0 -4
  484. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  485. package/dist/types/src/capabilities/toolkit.d.ts +0 -4
  486. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  487. package/dist/types/src/components/BlueprintContainer.d.ts +0 -8
  488. package/dist/types/src/components/BlueprintContainer.d.ts.map +0 -1
  489. package/dist/types/src/components/ChatThread/reducers.d.ts +0 -40
  490. package/dist/types/src/components/ChatThread/reducers.d.ts.map +0 -1
  491. package/dist/types/src/components/PromptSettings.d.ts +0 -6
  492. package/dist/types/src/components/PromptSettings.d.ts.map +0 -1
  493. package/dist/types/src/components/SequenceContainer.d.ts +0 -8
  494. package/dist/types/src/components/SequenceContainer.d.ts.map +0 -1
  495. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts +0 -13
  496. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts.map +0 -1
  497. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts +0 -269
  498. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts.map +0 -1
  499. package/dist/types/src/components/SequenceEditor/index.d.ts +0 -2
  500. package/dist/types/src/components/SequenceEditor/index.d.ts.map +0 -1
  501. package/dist/types/src/components/TemplateEditor/handlebars-extension.d.ts.map +0 -1
  502. package/dist/types/src/components/Toolbar/Toolbar.d.ts +0 -5
  503. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +0 -1
  504. package/dist/types/src/components/Toolbar/index.d.ts +0 -2
  505. package/dist/types/src/components/Toolbar/index.d.ts.map +0 -1
  506. package/dist/types/src/components/Toolbar/useChatToolbarActions.d.ts +0 -11
  507. package/dist/types/src/components/Toolbar/useChatToolbarActions.d.ts.map +0 -1
  508. package/dist/types/src/events.d.ts +0 -4
  509. package/dist/types/src/events.d.ts.map +0 -1
  510. package/dist/types/src/functions/analysis.d.ts +0 -5
  511. package/dist/types/src/functions/analysis.d.ts.map +0 -1
  512. package/dist/types/src/functions/list.d.ts.map +0 -1
  513. package/dist/types/src/functions/load.d.ts.map +0 -1
  514. package/dist/types/src/hooks/useItemTypes.d.ts +0 -4
  515. package/dist/types/src/hooks/useItemTypes.d.ts.map +0 -1
  516. package/src/capabilities/ai-service.ts +0 -27
  517. package/src/capabilities/app-graph-builder.ts +0 -163
  518. package/src/capabilities/blueprint-definition.ts +0 -64
  519. package/src/capabilities/capabilities.ts +0 -18
  520. package/src/capabilities/edge-model-resolver.ts +0 -25
  521. package/src/capabilities/intent-resolver.ts +0 -96
  522. package/src/capabilities/local-model-resolver.ts +0 -30
  523. package/src/capabilities/react-surface.tsx +0 -91
  524. package/src/capabilities/settings.ts +0 -19
  525. package/src/capabilities/state.ts +0 -20
  526. package/src/capabilities/toolkit.ts +0 -168
  527. package/src/components/BlueprintContainer.tsx +0 -24
  528. package/src/components/ChatThread/reducers.ts +0 -151
  529. package/src/components/PromptSettings.tsx +0 -90
  530. package/src/components/SequenceContainer.tsx +0 -131
  531. package/src/components/SequenceEditor/SequenceEditor.stories.tsx +0 -35
  532. package/src/components/SequenceEditor/SequenceEditor.tsx +0 -50
  533. package/src/components/SequenceEditor/index.ts +0 -5
  534. package/src/components/TemplateEditor/handlebars-extension.ts +0 -165
  535. package/src/components/Toolbar/Toolbar.tsx +0 -21
  536. package/src/components/Toolbar/useChatToolbarActions.ts +0 -126
  537. package/src/events.ts +0 -11
  538. package/src/functions/analysis.ts +0 -22
  539. package/src/functions/load.ts +0 -46
  540. package/src/hooks/useItemTypes.ts +0 -37
  541. /package/dist/lib/browser/{blueprint-definition-NSJARW5U.mjs.map → blueprint-definition-YAGWYVCL.mjs.map} +0 -0
  542. /package/dist/lib/{node-esm/blueprint-definition-WD2IVMAI.mjs.map → browser/blueprints/index.mjs.map} +0 -0
  543. /package/dist/types/src/components/TemplateEditor/{handlebars-extension.d.ts → extensions/handlebars-extension.d.ts} +0 -0
@@ -1,1794 +0,0 @@
1
- import {
2
- meta
3
- } from "./chunk-5RICKAMN.mjs";
4
-
5
- // src/hooks/useBlueprintRegistry.ts
6
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
7
- import { useSignalEffect } from "@preact/signals-react";
8
- import { useCallback, useMemo, useState } from "react";
9
- import { Capabilities, useCapabilities } from "@dxos/app-framework";
10
- import { Blueprint } from "@dxos/blueprints";
11
- import { Filter, Obj, Ref } from "@dxos/echo";
12
- import { useQuery } from "@dxos/react-client/echo";
13
- import { distinctBy, isNonNullable } from "@dxos/util";
14
- var useBlueprintRegistry = () => {
15
- const blueprints = useCapabilities(Capabilities.BlueprintDefinition);
16
- return useMemo(() => new Blueprint.Registry(blueprints), [
17
- blueprints
18
- ]);
19
- };
20
- var useBlueprints = ({ blueprintRegistry, space }) => {
21
- const staticBlueprints = useMemo(() => blueprintRegistry?.query() ?? [], [
22
- blueprintRegistry
23
- ]);
24
- const spaceBlueprints = useQuery(space, Filter.type(Blueprint.Blueprint));
25
- return useMemo(() => {
26
- const blueprints = distinctBy([
27
- ...staticBlueprints,
28
- ...spaceBlueprints
29
- ], (b) => b.key);
30
- blueprints.sort(({ name: a }, { name: b }) => a.localeCompare(b));
31
- return blueprints;
32
- }, [
33
- staticBlueprints,
34
- spaceBlueprints
35
- ]);
36
- };
37
- var useActiveBlueprints = ({ context }) => {
38
- var _effect = _useSignals();
39
- try {
40
- const [active, setActive] = useState(/* @__PURE__ */ new Map());
41
- useSignalEffect(() => {
42
- const refs = [
43
- ...context?.blueprints.value ?? []
44
- ];
45
- const blueprints = refs.map((ref) => ref.target).filter(isNonNullable);
46
- setActive(new Map(blueprints.map((blueprint) => [
47
- blueprint.key,
48
- blueprint
49
- ])));
50
- });
51
- return active;
52
- } finally {
53
- _effect.f();
54
- }
55
- };
56
- var useBlueprintHandlers = ({ space, context, blueprintRegistry }) => {
57
- const onUpdateBlueprint = useCallback(async (key, checked) => {
58
- if (!context || !blueprintRegistry) {
59
- return;
60
- }
61
- const { objects } = await space.db.query(Filter.type(Blueprint.Blueprint)).run();
62
- let storedBlueprint = objects.find((blueprint) => blueprint.key === key);
63
- if (checked) {
64
- if (!storedBlueprint) {
65
- const blueprint = blueprintRegistry.getByKey(key);
66
- if (!blueprint) {
67
- return;
68
- }
69
- storedBlueprint = space.db.add(Obj.clone(blueprint));
70
- }
71
- await context.bind({
72
- blueprints: [
73
- Ref.make(storedBlueprint)
74
- ]
75
- });
76
- } else if (storedBlueprint) {
77
- await context.unbind({
78
- blueprints: [
79
- Ref.make(storedBlueprint)
80
- ]
81
- });
82
- }
83
- }, [
84
- space,
85
- context,
86
- blueprintRegistry
87
- ]);
88
- return {
89
- onUpdateBlueprint
90
- };
91
- };
92
-
93
- // src/hooks/useChatProcessor.ts
94
- import { RegistryContext } from "@effect-rx/rx-react";
95
- import { useContext, useMemo as useMemo2, useState as useState2 } from "react";
96
- import { AiConversation } from "@dxos/assistant";
97
- import { log as log2 } from "@dxos/log";
98
- import { useAsyncEffect } from "@dxos/react-ui";
99
-
100
- // src/processor/presets.ts
101
- import * as Schema from "effect/Schema";
102
- var ModelProviders = [
103
- "dxos-local",
104
- "dxos-remote",
105
- "lm-studio"
106
- ];
107
- var ModelProvider = Schema.Literal(...ModelProviders);
108
- var createModelLabel = (model) => {
109
- const parts = model.split("/");
110
- return parts[parts.length - 1];
111
- };
112
- var AiServicePresets = [
113
- {
114
- provider: "dxos-remote",
115
- model: "@anthropic/claude-opus-4-0"
116
- },
117
- {
118
- provider: "dxos-remote",
119
- model: "@anthropic/claude-sonnet-4-0"
120
- },
121
- {
122
- provider: "dxos-remote",
123
- model: "@anthropic/claude-3-5-haiku-20241022"
124
- },
125
- {
126
- provider: "lm-studio",
127
- model: "@google/gemma-3-27b"
128
- },
129
- {
130
- provider: "lm-studio",
131
- model: "@mlx-community/llama-3.2-3b-instruct"
132
- },
133
- {
134
- model: "deepseek-r1:latest",
135
- provider: "dxos-local"
136
- }
137
- ].map(({ model, provider }, i) => ({
138
- id: `preset-${i}`,
139
- provider,
140
- model,
141
- label: createModelLabel(model)
142
- }));
143
-
144
- // src/processor/processor.ts
145
- import { Registry, Rx } from "@effect-rx/rx-react";
146
- import * as Cause from "effect/Cause";
147
- import * as Effect from "effect/Effect";
148
- import * as Exit from "effect/Exit";
149
- import * as Fiber from "effect/Fiber";
150
- import * as Option from "effect/Option";
151
- import * as Runtime from "effect/Runtime";
152
- import { AiService, DEFAULT_EDGE_MODEL } from "@dxos/ai";
153
- import { AiSession, ArtifactDiffResolver, GenerationObserver, createSystemPrompt } from "@dxos/assistant";
154
- import { Obj as Obj2 } from "@dxos/echo";
155
- import { throwCause } from "@dxos/effect";
156
- import { log } from "@dxos/log";
157
- import { DataType } from "@dxos/schema";
158
- import { trim } from "@dxos/util";
159
- function _define_property(obj, key, value) {
160
- if (key in obj) {
161
- Object.defineProperty(obj, key, {
162
- value,
163
- enumerable: true,
164
- configurable: true,
165
- writable: true
166
- });
167
- } else {
168
- obj[key] = value;
169
- }
170
- return obj;
171
- }
172
- var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/processor/processor.ts";
173
- var defaultOptions = {
174
- model: DEFAULT_EDGE_MODEL
175
- };
176
- var AiChatProcessor = class {
177
- get context() {
178
- return this._conversation.context;
179
- }
180
- get conversation() {
181
- return this._conversation;
182
- }
183
- get blueprintRegistry() {
184
- return this._options.blueprintRegistry;
185
- }
186
- /**
187
- * Initiates a new request.
188
- */
189
- async request(requestParam) {
190
- if (this._fiber) {
191
- await this.cancel();
192
- }
193
- try {
194
- this._lastRequest = requestParam;
195
- this._rx.set(this.error, Option.none());
196
- this._rx.set(this.active, true);
197
- const request = this._conversation.createRequest({
198
- system: this._options.system,
199
- prompt: requestParam.message,
200
- observer: this._observer
201
- });
202
- const runtime2 = await this._services();
203
- this._fiber = request.pipe(
204
- Effect.provide(AiService.model(this._options.model ?? DEFAULT_EDGE_MODEL)),
205
- // TODO(dmaretskyi): Move ArtifactDiffResolver upstream.
206
- Effect.provideService(ArtifactDiffResolver, this._artifactDiffResolver),
207
- Effect.asVoid,
208
- Runtime.runFork(runtime2)
209
- );
210
- const response = await this._fiber.pipe(Fiber.join, Effect.runPromiseExit);
211
- if (!Exit.isSuccess(response) && !Cause.isInterruptedOnly(response.cause)) {
212
- throwCause(response.cause);
213
- }
214
- this._rx.set(this.error, Option.none());
215
- this._lastRequest = void 0;
216
- this._fiber = void 0;
217
- } catch (error) {
218
- log.error("request failed", {
219
- error
220
- }, {
221
- F: __dxlog_file,
222
- L: 187,
223
- S: this,
224
- C: (f, a) => f(...a)
225
- });
226
- this._rx.set(this.error, Option.some(new Error("AI service error", {
227
- cause: error
228
- })));
229
- } finally {
230
- this._fiber = void 0;
231
- this._rx.set(this.active, false);
232
- }
233
- }
234
- /**
235
- * Cancels the current request.
236
- */
237
- async cancel() {
238
- await Effect.runPromise(Effect.gen(this, function* () {
239
- if (this._fiber) {
240
- yield* this._fiber.pipe(Fiber.interrupt);
241
- }
242
- }));
243
- this._fiber = void 0;
244
- this._rx.set(this.active, false);
245
- }
246
- /**
247
- * Retry last failed request.
248
- */
249
- async retry() {
250
- if (this._lastRequest) {
251
- return this.request(this._lastRequest);
252
- }
253
- }
254
- /**
255
- * Update the current chat's name.
256
- */
257
- async updateName(chat) {
258
- const runtime2 = await this._services();
259
- const system = trim`
260
- It is extremely important that you respond only with the title and nothing else.
261
- If you cannot do this effectively respond with "New Chat".
262
- `;
263
- const history = await this._conversation.getHistory();
264
- const fiber = Effect.gen(this, function* () {
265
- const session = new AiSession();
266
- return yield* session.run({
267
- system,
268
- prompt: "Suggest a name for this chat",
269
- history
270
- });
271
- }).pipe(
272
- // TODO(burdon): Use simpler model.
273
- Effect.provide(AiService.model(this._options.model ?? DEFAULT_EDGE_MODEL)),
274
- Effect.tap((messages) => {
275
- const message = messages.find((message2) => message2.sender.role === "assistant");
276
- const title = message?.blocks.find((b) => b._tag === "text")?.text;
277
- if (title) {
278
- chat.name = title;
279
- }
280
- }),
281
- Runtime.runFork(runtime2)
282
- );
283
- const response = await fiber.pipe(Fiber.join, Effect.runPromiseExit);
284
- if (!Exit.isSuccess(response)) {
285
- throwCause(response.cause);
286
- }
287
- }
288
- constructor(_conversation, _services, _options = defaultOptions) {
289
- _define_property(this, "_conversation", void 0);
290
- _define_property(this, "_services", void 0);
291
- _define_property(this, "_options", void 0);
292
- _define_property(this, "_rx", void 0);
293
- _define_property(this, "_observer", void 0);
294
- _define_property(this, "_fiber", void 0);
295
- _define_property(this, "_lastRequest", void 0);
296
- _define_property(this, "_pending", void 0);
297
- _define_property(this, "_streaming", void 0);
298
- _define_property(this, "streaming", void 0);
299
- _define_property(this, "active", void 0);
300
- _define_property(this, "messages", void 0);
301
- _define_property(this, "error", void 0);
302
- _define_property(this, "_artifactDiffResolver", void 0);
303
- _define_property(this, "_onMessage", void 0);
304
- _define_property(this, "_onBlock", void 0);
305
- this._conversation = _conversation;
306
- this._services = _services;
307
- this._options = _options;
308
- this._pending = Rx.make([]);
309
- this._streaming = Rx.make(Option.none());
310
- this.streaming = Rx.make((get) => Option.isSome(get(this._streaming)));
311
- this.active = Rx.make(false);
312
- this.messages = Rx.make((get) => Option.match(get(this._streaming), {
313
- onNone: () => get(this._pending),
314
- onSome: (streaming) => [
315
- ...get(this._pending),
316
- streaming
317
- ]
318
- }));
319
- this.error = Rx.make(Option.none());
320
- this._artifactDiffResolver = {
321
- resolve: async (_artifacts) => {
322
- const versions = /* @__PURE__ */ new Map();
323
- return versions;
324
- }
325
- };
326
- this._onMessage = Effect.fn((function* (message) {
327
- this._rx.set(this._streaming, Option.none());
328
- this._rx.update(this._pending, (pending) => [
329
- ...pending,
330
- message
331
- ]);
332
- }).bind(this));
333
- this._onBlock = Effect.fn((function* (block) {
334
- this._rx.update(this._streaming, (streaming) => {
335
- const blocks = streaming.pipe(Option.map((streaming2) => streaming2.blocks.filter((b) => !b.pending)), Option.getOrElse(() => []));
336
- return Option.some(Obj2.make(DataType.Message, {
337
- created: (/* @__PURE__ */ new Date()).toISOString(),
338
- sender: {
339
- role: "assistant"
340
- },
341
- blocks: [
342
- ...blocks,
343
- block
344
- ]
345
- }));
346
- });
347
- }).bind(this));
348
- this._rx = this._options.observableRegistry ?? Registry.make();
349
- this._observer = GenerationObserver.make({
350
- onBlock: this._onBlock,
351
- onMessage: this._onMessage
352
- });
353
- if (this._options.model && !this._options.system) {
354
- const capabilities = this._options.modelRegistry?.getCapabilities(this._options.model) ?? {};
355
- this._options.system = createSystemPrompt(capabilities);
356
- }
357
- }
358
- };
359
-
360
- // src/hooks/useChatProcessor.ts
361
- var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/hooks/useChatProcessor.ts";
362
- var useChatProcessor = ({ chat, preset, services, blueprintRegistry, settings }) => {
363
- const observableRegistry = useContext(RegistryContext);
364
- const [conversation, setConversation] = useState2();
365
- useAsyncEffect(async () => {
366
- if (!chat?.queue.target) {
367
- return;
368
- }
369
- const conversation2 = new AiConversation({
370
- queue: chat.queue.target
371
- });
372
- await conversation2.open();
373
- setConversation(conversation2);
374
- return () => {
375
- void conversation2.close();
376
- };
377
- }, [
378
- chat?.queue.target
379
- ]);
380
- const processor = useMemo2(() => {
381
- if (!services || !conversation) {
382
- return void 0;
383
- }
384
- log2("creating processor", {
385
- preset,
386
- model: preset?.model,
387
- settings
388
- }, {
389
- F: __dxlog_file2,
390
- L: 60,
391
- S: void 0,
392
- C: (f, a) => f(...a)
393
- });
394
- return new AiChatProcessor(conversation, services, {
395
- observableRegistry,
396
- blueprintRegistry,
397
- model: preset?.model
398
- });
399
- }, [
400
- services,
401
- conversation,
402
- blueprintRegistry,
403
- preset
404
- ]);
405
- return processor;
406
- };
407
-
408
- // src/hooks/useChatServices.ts
409
- import * as Effect2 from "effect/Effect";
410
- import { useMemo as useMemo3 } from "react";
411
- import { useCapability } from "@dxos/app-framework";
412
- import { TracingService } from "@dxos/functions";
413
- import { AutomationCapabilities } from "@dxos/plugin-automation";
414
- import { useClient } from "@dxos/react-client";
415
- var useChatServices = ({ space, chat }) => {
416
- const client = useClient();
417
- space ?? (space = client.spaces.default);
418
- const computeRuntimeResolver = useCapability(AutomationCapabilities.ComputeRuntime);
419
- return useMemo3(() => {
420
- const runtime2 = computeRuntimeResolver.getRuntime(space.id);
421
- return () => runtime2.runPromise(Effect2.gen(function* () {
422
- return yield* Effect2.runtime().pipe(Effect2.provide(chat?.traceQueue?.target ? TracingService.layerQueue(chat.traceQueue?.target) : TracingService.layerNoop));
423
- }));
424
- }, [
425
- space,
426
- chat?.traceQueue?.target
427
- ]);
428
- };
429
-
430
- // src/hooks/useContextBinder.ts
431
- import { useState as useState3 } from "react";
432
- import { AiContextBinder } from "@dxos/assistant";
433
- import { useAsyncEffect as useAsyncEffect2 } from "@dxos/react-ui";
434
- var useContextBinder = (chat) => {
435
- const [binder, setBinder] = useState3();
436
- useAsyncEffect2(async () => {
437
- if (!chat?.queue.target) {
438
- return;
439
- }
440
- const binder2 = new AiContextBinder(chat.queue.target);
441
- await binder2.open();
442
- setBinder(binder2);
443
- return () => {
444
- void binder2.close();
445
- };
446
- }, [
447
- chat?.queue.target
448
- ]);
449
- return binder;
450
- };
451
-
452
- // src/hooks/useContextObjects.ts
453
- import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
454
- import { useCallback as useCallback2 } from "react";
455
- import { Ref as Ref2 } from "@dxos/echo";
456
- import { log as log3 } from "@dxos/log";
457
- import { isNonNullable as isNonNullable2 } from "@dxos/util";
458
- var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/hooks/useContextObjects.ts";
459
- var useContextObjects = ({ space, context }) => {
460
- var _effect = _useSignals2();
461
- try {
462
- const objects = context?.objects.value.map((ref) => ref.target).filter(isNonNullable2) ?? [];
463
- const handleUpdateObject = useCallback2(async (dxn, checked) => {
464
- if (!space || !context) {
465
- return;
466
- }
467
- const id = dxn.asEchoDXN();
468
- const object = id && await space.db.getObjectById(id.echoId);
469
- if (!object) {
470
- log3.warn("Object not found", {
471
- dxn,
472
- id
473
- }, {
474
- F: __dxlog_file3,
475
- L: 40,
476
- S: void 0,
477
- C: (f, a) => f(...a)
478
- });
479
- return;
480
- }
481
- const ref = Ref2.fromDXN(dxn);
482
- if (checked) {
483
- await context.bind({
484
- objects: [
485
- ref
486
- ]
487
- });
488
- } else {
489
- await context.unbind({
490
- objects: [
491
- ref
492
- ]
493
- });
494
- }
495
- }, [
496
- space,
497
- context
498
- ]);
499
- return {
500
- objects,
501
- onUpdateObject: handleUpdateObject
502
- };
503
- } finally {
504
- _effect.f();
505
- }
506
- };
507
-
508
- // src/hooks/useFlush.ts
509
- import { useCallback as useCallback3, useRef, useState as useState4 } from "react";
510
- var useFlush = (space) => {
511
- const [state, setState] = useState4("idle");
512
- const resetTimer = useRef(null);
513
- const handleFlush = useCallback3(() => {
514
- if (!space) {
515
- return;
516
- }
517
- queueMicrotask(async () => {
518
- if (resetTimer.current) {
519
- clearTimeout(resetTimer.current);
520
- }
521
- setState("flushing");
522
- await space.db.flush();
523
- setState("flushed");
524
- resetTimer.current = setTimeout(() => {
525
- setState("idle");
526
- resetTimer.current = null;
527
- }, 1e3);
528
- });
529
- }, [
530
- space
531
- ]);
532
- return {
533
- state,
534
- handleFlush
535
- };
536
- };
537
-
538
- // src/hooks/useItemTypes.ts
539
- import * as Option2 from "effect/Option";
540
- import { useEffect, useState as useState5 } from "react";
541
- import { ItemAnnotation } from "@dxos/schema";
542
- var useItemTypes = (space) => {
543
- const [types, setTypes] = useState5([]);
544
- useEffect(() => {
545
- if (!space) {
546
- return;
547
- }
548
- return space.db.schemaRegistry.query().subscribe((query) => {
549
- const types2 = Array.from(new Set([
550
- ...space.db.graph.schemaRegistry.schemas,
551
- ...query.results
552
- ].filter((type) => Option2.isSome(ItemAnnotation.get(type)))));
553
- setTypes(types2);
554
- }, {
555
- fire: true
556
- });
557
- }, [
558
- space
559
- ]);
560
- return types;
561
- };
562
-
563
- // src/hooks/useOnline.ts
564
- import { useState as useState6 } from "react";
565
- var useOnline = () => {
566
- const [online, setOnline] = useState6(true);
567
- return [
568
- online,
569
- setOnline
570
- ];
571
- };
572
-
573
- // src/hooks/usePresets.ts
574
- import { useCallback as useCallback4, useEffect as useEffect2, useMemo as useMemo4, useState as useState7 } from "react";
575
- var usePresets = (online) => {
576
- const [preset, setPreset] = useState7();
577
- const presets = useMemo4(() => AiServicePresets.filter((preset2) => online === (preset2.provider === "dxos-remote")), [
578
- online
579
- ]);
580
- const presetOptions = useMemo4(() => presets.map(({ id, model, label }) => ({
581
- id,
582
- label: label ?? model
583
- })), [
584
- presets
585
- ]);
586
- useEffect2(() => {
587
- setPreset(presets[0]);
588
- }, [
589
- presets
590
- ]);
591
- const handlePresetChange = useCallback4((id) => {
592
- const preset2 = presets.find((preset3) => preset3.id === id);
593
- if (preset2) {
594
- setPreset(preset2);
595
- }
596
- }, [
597
- presets
598
- ]);
599
- return {
600
- preset,
601
- presets: presetOptions,
602
- onPresetChange: handlePresetChange
603
- };
604
- };
605
-
606
- // src/hooks/useReferencesProvider.ts
607
- import { useMemo as useMemo5 } from "react";
608
- import { Capabilities as Capabilities2, useCapabilities as useCapabilities2 } from "@dxos/app-framework";
609
- import { Filter as Filter2, Obj as Obj3 } from "@dxos/echo";
610
- var useReferencesProvider = (space) => {
611
- const blueprints = useCapabilities2(Capabilities2.BlueprintDefinition);
612
- return useMemo5(() => {
613
- if (!space) {
614
- return void 0;
615
- }
616
- return {
617
- getReferences: async ({ query }) => {
618
- const { objects } = await space.db.query(Filter2.everything()).run();
619
- return objects.filter((object) => stringMatch(query, Obj3.getLabel(object) ?? "")).filter((object) => !!Obj3.getDXN(object)).map((object) => ({
620
- uri: Obj3.getDXN(object).toString(),
621
- label: Obj3.getLabel(object) ?? ""
622
- }));
623
- },
624
- resolveReference: async ({ uri }) => {
625
- const object = await space.db.query(Filter2.ids(uri)).first();
626
- return {
627
- uri,
628
- label: Obj3.getLabel(object) ?? ""
629
- };
630
- }
631
- };
632
- }, [
633
- space,
634
- blueprints
635
- ]);
636
- };
637
- var stringMatch = (query, label) => label.toLowerCase().startsWith(query.toLowerCase());
638
-
639
- // src/components/Chat/Chat.tsx
640
- import { useSignals as _useSignals11 } from "@preact-signals/safe-react/tracking";
641
- import { Prec } from "@codemirror/state";
642
- import { keymap } from "@codemirror/view";
643
- import { useRxValue } from "@effect-rx/rx-react";
644
- import { createContext } from "@radix-ui/react-context";
645
- import * as Array2 from "effect/Array";
646
- import * as Option3 from "effect/Option";
647
- import React9, { useCallback as useCallback6, useEffect as useEffect6, useMemo as useMemo9, useRef as useRef3, useState as useState12 } from "react";
648
- import { Event } from "@dxos/async";
649
- import { Obj as Obj6 } from "@dxos/echo";
650
- import { useVoiceInput } from "@dxos/plugin-transcription";
651
- import { getSpace, useQueue } from "@dxos/react-client/echo";
652
- import { useIdentity } from "@dxos/react-client/halo";
653
- import { Input, useDynamicRef, useTranslation as useTranslation5 } from "@dxos/react-ui";
654
- import { ChatEditor, references } from "@dxos/react-ui-chat";
655
- import { mx as mx5 } from "@dxos/react-ui-theme";
656
- import { DataType as DataType2 } from "@dxos/schema";
657
- import { isTruthy } from "@dxos/util";
658
-
659
- // src/components/ChatPrompt/ChatActions.tsx
660
- import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
661
- import React from "react";
662
- import { IconButton, useTranslation } from "@dxos/react-ui";
663
- import { mx } from "@dxos/react-ui-theme";
664
- var ChatActions = ({ classNames, children, microphone, recording, processing, onEvent }) => {
665
- var _effect = _useSignals3();
666
- try {
667
- const { t } = useTranslation(meta.id);
668
- return /* @__PURE__ */ React.createElement("div", {
669
- className: mx("flex items-center mie-1", classNames)
670
- }, children, /* @__PURE__ */ React.createElement(IconButton, {
671
- disabled: !processing,
672
- variant: "ghost",
673
- size: 5,
674
- icon: "ph--x--regular",
675
- iconOnly: true,
676
- label: t("button cancel processing"),
677
- onClick: () => onEvent?.({
678
- type: "cancel"
679
- })
680
- }), microphone && /* @__PURE__ */ React.createElement(IconButton, {
681
- disabled: !processing,
682
- classNames: mx(recording && "bg-primary-500"),
683
- variant: "ghost",
684
- size: 5,
685
- icon: "ph--microphone--regular",
686
- iconOnly: true,
687
- noTooltip: true,
688
- label: t("button microphone"),
689
- onMouseDown: () => onEvent?.({
690
- type: "record-start"
691
- }),
692
- onMouseUp: () => onEvent?.({
693
- type: "record-stop"
694
- }),
695
- onTouchStart: () => onEvent?.({
696
- type: "record-start"
697
- }),
698
- onTouchEnd: () => onEvent?.({
699
- type: "record-stop"
700
- })
701
- }));
702
- } finally {
703
- _effect.f();
704
- }
705
- };
706
-
707
- // src/components/ChatPrompt/ChatOptions.tsx
708
- import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
709
- import React2, { useMemo as useMemo6, useState as useState8 } from "react";
710
- import { Filter as Filter3, Obj as Obj4, Type } from "@dxos/echo";
711
- import { useQuery as useQuery2 } from "@dxos/react-client/echo";
712
- import { Icon, IconButton as IconButton2, Popover, Select, useTranslation as useTranslation2 } from "@dxos/react-ui";
713
- import { Listbox, SearchList } from "@dxos/react-ui-searchlist";
714
- import { Tabs } from "@dxos/react-ui-tabs";
715
- var panelClassNames = "is-[calc(100dvw-.5rem)] sm:is-max md:is-72 max-is-[--text-content]";
716
- var ChatOptions = ({ space, context, blueprintRegistry, presets, preset, onPresetChange }) => {
717
- var _effect = _useSignals4();
718
- try {
719
- const { t } = useTranslation2(meta.id);
720
- return /* @__PURE__ */ React2.createElement("div", {
721
- role: "none",
722
- className: "flex gap-0.5"
723
- }, /* @__PURE__ */ React2.createElement(Popover.Root, null, /* @__PURE__ */ React2.createElement(Popover.Trigger, {
724
- asChild: true
725
- }, /* @__PURE__ */ React2.createElement(IconButton2, {
726
- variant: "ghost",
727
- icon: "ph--plus--regular",
728
- iconOnly: true,
729
- size: 5,
730
- label: t("button context objects")
731
- })), /* @__PURE__ */ React2.createElement(Popover.Portal, null, /* @__PURE__ */ React2.createElement(Popover.Content, {
732
- side: "top",
733
- classNames: panelClassNames
734
- }, /* @__PURE__ */ React2.createElement(ObjectsPanel, {
735
- space,
736
- context
737
- }), /* @__PURE__ */ React2.createElement(Popover.Arrow, null)))), /* @__PURE__ */ React2.createElement(Popover.Root, null, /* @__PURE__ */ React2.createElement(Popover.Trigger, {
738
- asChild: true
739
- }, /* @__PURE__ */ React2.createElement(IconButton2, {
740
- variant: "ghost",
741
- icon: "ph--sliders-horizontal--regular",
742
- iconOnly: true,
743
- size: 5,
744
- label: t("button context settings")
745
- })), /* @__PURE__ */ React2.createElement(Popover.Portal, null, /* @__PURE__ */ React2.createElement(Popover.Content, {
746
- side: "top",
747
- classNames: panelClassNames
748
- }, /* @__PURE__ */ React2.createElement(Tabs.Root, {
749
- orientation: "horizontal",
750
- defaultValue: "blueprints",
751
- defaultActivePart: "list",
752
- tabIndex: -1
753
- }, /* @__PURE__ */ React2.createElement(Tabs.Viewport, {
754
- 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'
755
- }, /* @__PURE__ */ React2.createElement(Tabs.Tabpanel, {
756
- value: "blueprints",
757
- tabIndex: -1,
758
- classNames: "dx-focus-ring-inset"
759
- }, /* @__PURE__ */ React2.createElement(BlueprintsPanel, {
760
- blueprintRegistry,
761
- space,
762
- context
763
- })), /* @__PURE__ */ React2.createElement(Tabs.Tabpanel, {
764
- value: "model",
765
- tabIndex: -1,
766
- classNames: "dx-focus-ring-inset !pli-0"
767
- }, /* @__PURE__ */ React2.createElement(ModelsPanel, {
768
- presets,
769
- preset,
770
- onPresetChange
771
- })), /* @__PURE__ */ React2.createElement(Tabs.Tablist, {
772
- classNames: "sm:overflow-x-hidden justify-center p-[--dx-cardSpacingChrome] border-bs border-subduedSeparator order-last"
773
- }, /* @__PURE__ */ React2.createElement(Tabs.IconTab, {
774
- value: "blueprints",
775
- icon: "ph--blueprint--regular",
776
- label: t("blueprints in context title")
777
- }), /* @__PURE__ */ React2.createElement(Tabs.IconTab, {
778
- value: "model",
779
- label: t("chat model title"),
780
- icon: "ph--cpu--regular"
781
- })))), /* @__PURE__ */ React2.createElement(Popover.Arrow, null)))));
782
- } finally {
783
- _effect.f();
784
- }
785
- };
786
- var BlueprintsPanel = ({ blueprintRegistry, space, context }) => {
787
- var _effect = _useSignals4();
788
- try {
789
- const { t } = useTranslation2(meta.id);
790
- const blueprints = useBlueprints({
791
- blueprintRegistry,
792
- space
793
- });
794
- const activeBlueprints = useActiveBlueprints({
795
- context
796
- });
797
- const { onUpdateBlueprint } = useBlueprintHandlers({
798
- space,
799
- context,
800
- blueprintRegistry
801
- });
802
- return /* @__PURE__ */ React2.createElement(SearchList.Root, null, /* @__PURE__ */ React2.createElement(SearchList.Content, {
803
- classNames: "plb-cardSpacingChrome"
804
- }, blueprints.map((blueprint) => {
805
- const isActive = activeBlueprints.has(blueprint.key);
806
- return /* @__PURE__ */ React2.createElement(SearchList.Item, {
807
- classNames: "flex items-center overflow-hidden",
808
- key: blueprint.key,
809
- value: blueprint.name,
810
- onSelect: () => onUpdateBlueprint?.(blueprint.key, !isActive)
811
- }, /* @__PURE__ */ React2.createElement("div", {
812
- className: "grow truncate"
813
- }, blueprint.name), /* @__PURE__ */ React2.createElement(Icon, {
814
- icon: "ph--check--regular",
815
- classNames: [
816
- !isActive && "invisible"
817
- ]
818
- }));
819
- })), /* @__PURE__ */ React2.createElement(SearchList.Input, {
820
- placeholder: t("search placeholder"),
821
- classNames: "mbe-cardSpacingChrome",
822
- autoFocus: true
823
- }));
824
- } finally {
825
- _effect.f();
826
- }
827
- };
828
- var ModelsPanel = ({ presets, preset, onPresetChange }) => {
829
- var _effect = _useSignals4();
830
- try {
831
- return /* @__PURE__ */ React2.createElement(Listbox.Root, {
832
- value: preset,
833
- onValueChange: onPresetChange,
834
- autoFocus: true
835
- }, presets?.map(({ id, label }) => {
836
- return /* @__PURE__ */ React2.createElement(Listbox.Option, {
837
- key: id,
838
- value: id
839
- }, /* @__PURE__ */ React2.createElement(Listbox.OptionLabel, null, label), /* @__PURE__ */ React2.createElement(Listbox.OptionIndicator, null));
840
- }));
841
- } finally {
842
- _effect.f();
843
- }
844
- };
845
- var ANY = "__any__";
846
- var ObjectsPanel = ({ space, context }) => {
847
- var _effect = _useSignals4();
848
- try {
849
- const { t } = useTranslation2(meta.id);
850
- const types = useItemTypes(space);
851
- const typenames = useMemo6(() => {
852
- const typenames2 = types.map((type) => {
853
- const typename2 = Type.getTypename(type);
854
- return {
855
- typename: typename2,
856
- label: t("typename label", {
857
- ns: typename2,
858
- defaultValue: typename2
859
- })
860
- };
861
- });
862
- typenames2.sort((a, b) => a.label.localeCompare(b.label));
863
- return typenames2;
864
- }, [
865
- types
866
- ]);
867
- const [typename, setTypename] = useState8(ANY);
868
- const anyFilter = useMemo6(() => Filter3.or(...typenames.map(({ typename: typename2 }) => Filter3.typename(typename2))), [
869
- typenames
870
- ]);
871
- const objects = useQuery2(space, typename === ANY ? anyFilter : Filter3.typename(typename));
872
- const { objects: contextObjects, onUpdateObject } = useContextObjects({
873
- space,
874
- context
875
- });
876
- return /* @__PURE__ */ React2.createElement(SearchList.Root, null, /* @__PURE__ */ React2.createElement(SearchList.Content, {
877
- classNames: "p-cardSpacingChrome [&:has([cmdk-list-sizer]:empty)]:plb-0"
878
- }, objects.length ? objects.map((object) => {
879
- const label = Obj4.getLabel(object) ?? Obj4.getTypename(object) ?? object.id;
880
- const isActive = contextObjects.findIndex((obj) => obj.id === object.id) !== -1;
881
- return /* @__PURE__ */ React2.createElement(SearchList.Item, {
882
- classNames: "flex items-center overflow-hidden",
883
- key: object.id,
884
- value: object.id,
885
- onSelect: () => onUpdateObject?.(Obj4.getDXN(object), !isActive)
886
- }, /* @__PURE__ */ React2.createElement("div", {
887
- className: "grow truncate"
888
- }, label), /* @__PURE__ */ React2.createElement(Icon, {
889
- icon: "ph--check--regular",
890
- classNames: [
891
- !isActive && "invisible"
892
- ]
893
- }));
894
- }) : /* @__PURE__ */ React2.createElement(SearchList.Item, null, t("no results"))), /* @__PURE__ */ React2.createElement("div", {
895
- role: "none",
896
- className: "grid grid-cols-[min-content_1fr] gap-2 pli-cardSpacingChrome mbe-cardSpacingChrome"
897
- }, /* @__PURE__ */ React2.createElement(Select.Root, {
898
- value: typename === ANY ? void 0 : typename,
899
- onValueChange: setTypename
900
- }, /* @__PURE__ */ React2.createElement(Select.TriggerButton, {
901
- density: "fine",
902
- placeholder: t("type filter placeholder")
903
- }), /* @__PURE__ */ React2.createElement(Select.Portal, null, /* @__PURE__ */ React2.createElement(Select.Content, null, /* @__PURE__ */ React2.createElement(Select.ScrollUpButton, null), /* @__PURE__ */ React2.createElement(Select.Viewport, null, /* @__PURE__ */ React2.createElement(Select.Option, {
904
- value: ANY
905
- }, t("any type filter label")), typenames.map(({ typename: typename2, label }) => /* @__PURE__ */ React2.createElement(Select.Option, {
906
- key: typename2,
907
- value: typename2
908
- }, label))), /* @__PURE__ */ React2.createElement(Select.ScrollDownButton, null), /* @__PURE__ */ React2.createElement(Select.Arrow, null)))), /* @__PURE__ */ React2.createElement(SearchList.Input, {
909
- placeholder: t("search placeholder"),
910
- classNames: "mbe-0",
911
- autoFocus: true
912
- })));
913
- } finally {
914
- _effect.f();
915
- }
916
- };
917
-
918
- // src/components/ChatPrompt/ChatPresets.tsx
919
- import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
920
- import React3 from "react";
921
- import { Select as Select2 } from "@dxos/react-ui";
922
-
923
- // src/components/ChatPrompt/ChatReferences.tsx
924
- import { useSignals as _useSignals6 } from "@preact-signals/safe-react/tracking";
925
- import React4 from "react";
926
- import { Obj as Obj5 } from "@dxos/echo";
927
- import { IconButton as IconButton3, toLocalizedString, useTranslation as useTranslation3 } from "@dxos/react-ui";
928
- import { mx as mx2 } from "@dxos/react-ui-theme";
929
- var ChatReferences = ({ classNames, context, space }) => {
930
- var _effect = _useSignals6();
931
- try {
932
- const { t } = useTranslation3(meta.id);
933
- const { objects, onUpdateObject } = useContextObjects({
934
- space,
935
- context
936
- });
937
- return /* @__PURE__ */ React4.createElement("ul", {
938
- className: mx2("flex flex-wrap", classNames)
939
- }, objects.map((obj) => {
940
- const dxn = Obj5.getDXN(obj);
941
- const typename = Obj5.getTypename(obj);
942
- const label = Obj5.getLabel(obj) ?? (typename ? [
943
- "object name placeholder",
944
- {
945
- ns: typename
946
- }
947
- ] : obj.id);
948
- return /* @__PURE__ */ React4.createElement("li", {
949
- key: dxn.toString(),
950
- className: "dx-tag plb-0 pis-2 flex items-center",
951
- "data-hue": "neutral"
952
- }, toLocalizedString(label, t), /* @__PURE__ */ React4.createElement(IconButton3, {
953
- iconOnly: true,
954
- variant: "ghost",
955
- label: t("remove object in context label"),
956
- classNames: "p-0 hover:bg-transparent",
957
- size: 3,
958
- icon: "ph--x--bold",
959
- onClick: () => onUpdateObject?.(dxn, false)
960
- }));
961
- }));
962
- } finally {
963
- _effect.f();
964
- }
965
- };
966
-
967
- // src/components/ChatPrompt/ChatStatusIndicator.tsx
968
- import { useSignals as _useSignals7 } from "@preact-signals/safe-react/tracking";
969
- import React5, { useEffect as useEffect3, useState as useState9 } from "react";
970
- import { Tooltip, useTimeout } from "@dxos/react-ui";
971
- import { Spinner } from "@dxos/react-ui-sfx";
972
- import { mx as mx3 } from "@dxos/react-ui-theme";
973
- var period = 3e3;
974
- var ChatStatusIndicator = ({ classNames, preset, processing, error, ...props }) => {
975
- var _effect = _useSignals7();
976
- try {
977
- const [init, setInit] = useState9(false);
978
- useEffect3(() => setInit(false), [
979
- preset
980
- ]);
981
- useTimeout(async () => {
982
- setInit(true);
983
- }, period / 2, [
984
- preset
985
- ]);
986
- return /* @__PURE__ */ React5.createElement("div", {
987
- role: "none",
988
- className: mx3("relative flex", classNames)
989
- }, /* @__PURE__ */ React5.createElement(Spinner, {
990
- duration: period,
991
- state: !init ? "flash" : error ? "error" : processing ? "spin" : "pulse",
992
- ...props
993
- }), error && /* @__PURE__ */ React5.createElement(Tooltip.Trigger, {
994
- asChild: true,
995
- content: error.message
996
- }, /* @__PURE__ */ React5.createElement("div", {
997
- className: "absolute inset-0"
998
- })));
999
- } finally {
1000
- _effect.f();
1001
- }
1002
- };
1003
-
1004
- // src/components/ChatThread/ChatThread.tsx
1005
- import { useSignals as _useSignals10 } from "@preact-signals/safe-react/tracking";
1006
- import React8, { forwardRef, useCallback as useCallback5, useEffect as useEffect5, useImperativeHandle, useMemo as useMemo8, useState as useState11 } from "react";
1007
- import { PublicKey } from "@dxos/keys";
1008
- import { MarkdownStream } from "@dxos/react-ui-components";
1009
- import { mx as mx4 } from "@dxos/react-ui-theme";
1010
- import { keyToFallback } from "@dxos/util";
1011
-
1012
- // src/components/ChatThread/registry.tsx
1013
- import { useSignals as _useSignals9 } from "@preact-signals/safe-react/tracking";
1014
- import React7 from "react";
1015
- import { log as log4 } from "@dxos/log";
1016
- import { PromptWidget, ReferenceWidget, SelectWidget, SuggestionWidget, SummaryWidget, ToggleContainer as ToggleContainer2 } from "@dxos/react-ui-components";
1017
- import { getXmlTextChild } from "@dxos/react-ui-editor";
1018
- import { Json as Json2 } from "@dxos/react-ui-syntax-highlighter";
1019
- import { ContentBlock } from "@dxos/schema";
1020
-
1021
- // src/components/ToolBlock/ToolBlock.tsx
1022
- import { useSignals as _useSignals8 } from "@preact-signals/safe-react/tracking";
1023
- import React6, { useEffect as useEffect4, useMemo as useMemo7, useRef as useRef2, useState as useState10 } from "react";
1024
- import { useTranslation as useTranslation4 } from "@dxos/react-ui";
1025
- import { NumericTabs, TextCrawl, ToggleContainer, chatMessageJson, chatMessagePanel, chatMessagePanelContent, chatMessagePanelHeader } from "@dxos/react-ui-components";
1026
- import { Json } from "@dxos/react-ui-syntax-highlighter";
1027
- import { isNonNullable as isNonNullable3, safeParseJson } from "@dxos/util";
1028
- var ToolBlock = ({ blocks = [] }) => {
1029
- var _effect = _useSignals8();
1030
- try {
1031
- const { t } = useTranslation4(meta.id);
1032
- const getToolCaption = (tool, status) => {
1033
- if (!tool) {
1034
- return t("calling tool label");
1035
- }
1036
- return status?.message ?? tool.description ?? [
1037
- t("calling label"),
1038
- tool.name
1039
- ].join(" ");
1040
- };
1041
- const items = useMemo7(() => {
1042
- let lastToolCall;
1043
- const tools = [];
1044
- return blocks.filter((block) => block._tag === "toolCall" || block._tag === "toolResult" || block._tag === "summary").map((block) => {
1045
- switch (block._tag) {
1046
- case "toolCall": {
1047
- if (block.pending && lastToolCall?.block.toolCallId === block.toolCallId) {
1048
- return null;
1049
- }
1050
- const tool = tools.find((tool2) => tool2.name === block.name);
1051
- lastToolCall = {
1052
- tool,
1053
- block
1054
- };
1055
- return {
1056
- title: getToolCaption(lastToolCall?.tool),
1057
- content: {
1058
- ...block,
1059
- input: safeParseJson(block.input)
1060
- }
1061
- };
1062
- }
1063
- case "toolResult": {
1064
- if (block.error) {
1065
- return {
1066
- title: t("error label"),
1067
- content: block
1068
- };
1069
- }
1070
- const title = getToolCaption(lastToolCall?.tool ?? t("tool result label"));
1071
- lastToolCall = void 0;
1072
- return {
1073
- title,
1074
- content: {
1075
- ...block,
1076
- result: safeParseJson(block.result)
1077
- }
1078
- };
1079
- }
1080
- case "summary": {
1081
- if (!lastToolCall) {
1082
- return null;
1083
- }
1084
- return {
1085
- title: t("summary label"),
1086
- content: block
1087
- };
1088
- }
1089
- }
1090
- }).filter(isNonNullable3);
1091
- }, [
1092
- blocks
1093
- ]);
1094
- if (!items.length) {
1095
- return null;
1096
- }
1097
- return /* @__PURE__ */ React6.createElement(ToolContainer, {
1098
- items
1099
- });
1100
- } finally {
1101
- _effect.f();
1102
- }
1103
- };
1104
- ToolBlock.displayName = "ToolBlock";
1105
- var ToolContainer = ({ items }) => {
1106
- var _effect = _useSignals8();
1107
- try {
1108
- const tabsRef = useRef2(null);
1109
- const [selected, setSelected] = useState10(0);
1110
- const [open, setOpen] = useState10(false);
1111
- useEffect4(() => {
1112
- if (open) {
1113
- tabsRef.current?.focus();
1114
- }
1115
- }, [
1116
- open
1117
- ]);
1118
- const handleSelect = (index) => {
1119
- setSelected(index);
1120
- };
1121
- const data = items[selected]?.content;
1122
- return /* @__PURE__ */ React6.createElement(ToggleContainer.Root, {
1123
- classNames: chatMessagePanel,
1124
- open,
1125
- onChangeOpen: setOpen
1126
- }, /* @__PURE__ */ React6.createElement(ToggleContainer.Header, {
1127
- classNames: chatMessagePanelHeader
1128
- }, /* @__PURE__ */ React6.createElement(TextCrawl, {
1129
- key: "status-roll",
1130
- lines: items.map((item) => item.title)
1131
- })), /* @__PURE__ */ React6.createElement(ToggleContainer.Content, {
1132
- classNames: [
1133
- "grid grid-cols-[32px_1fr]",
1134
- chatMessagePanelContent
1135
- ]
1136
- }, /* @__PURE__ */ React6.createElement(NumericTabs, {
1137
- ref: tabsRef,
1138
- classNames: "p-1",
1139
- length: items.length,
1140
- selected,
1141
- onSelect: handleSelect
1142
- }), /* @__PURE__ */ React6.createElement(Json, {
1143
- data,
1144
- classNames: chatMessageJson,
1145
- replacer: {
1146
- maxDepth: 3,
1147
- maxArrayLen: 10,
1148
- maxStringLen: 128
1149
- }
1150
- })));
1151
- } finally {
1152
- _effect.f();
1153
- }
1154
- };
1155
-
1156
- // src/components/ChatThread/registry.tsx
1157
- var __dxlog_file4 = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/components/ChatThread/registry.tsx";
1158
- var Fallback = ({ _tag, ...props }) => {
1159
- var _effect = _useSignals9();
1160
- try {
1161
- return /* @__PURE__ */ React7.createElement(ToggleContainer2.Root, {
1162
- classNames: "rounded-sm"
1163
- }, /* @__PURE__ */ React7.createElement(ToggleContainer2.Header, {
1164
- classNames: "bg-groupSurface"
1165
- }, _tag), /* @__PURE__ */ React7.createElement(ToggleContainer2.Content, {
1166
- classNames: "bg-modalSurface"
1167
- }, /* @__PURE__ */ React7.createElement(Json2, {
1168
- classNames: "!p-2 text-sm",
1169
- data: props
1170
- })));
1171
- } finally {
1172
- _effect.f();
1173
- }
1174
- };
1175
- var componentRegistry = {
1176
- //
1177
- // Widgets
1178
- //
1179
- ["prompt"]: {
1180
- block: true,
1181
- factory: (props) => {
1182
- const text = getXmlTextChild(props.children);
1183
- return text ? new PromptWidget(text) : null;
1184
- }
1185
- },
1186
- ["reference"]: {
1187
- block: false,
1188
- factory: (props) => {
1189
- const text = getXmlTextChild(props.children);
1190
- return text && props.ref ? new ReferenceWidget(text, props.ref) : null;
1191
- }
1192
- },
1193
- ["select"]: {
1194
- block: true,
1195
- factory: (props) => {
1196
- const options = props.children?.map((option) => option._tag === "option" && getXmlTextChild(option.children)).filter(Boolean);
1197
- return options?.length ? new SelectWidget(options) : null;
1198
- }
1199
- },
1200
- ["suggestion"]: {
1201
- block: true,
1202
- factory: (props) => {
1203
- const text = getXmlTextChild(props.children);
1204
- return text ? new SuggestionWidget(text) : null;
1205
- }
1206
- },
1207
- ["summary"]: {
1208
- block: true,
1209
- factory: (props) => {
1210
- const text = getXmlTextChild(props.children);
1211
- return text ? new SummaryWidget(text) : null;
1212
- }
1213
- },
1214
- //
1215
- // React
1216
- //
1217
- ["toolCall"]: {
1218
- block: true,
1219
- Component: ToolBlock
1220
- },
1221
- ["toolResult"]: {
1222
- block: true,
1223
- Component: Fallback
1224
- },
1225
- ["toolkit"]: {
1226
- block: true,
1227
- Component: Fallback
1228
- },
1229
- //
1230
- // Fallback
1231
- //
1232
- ["json"]: {
1233
- block: true,
1234
- Component: Fallback
1235
- }
1236
- };
1237
- var blockToMarkdown = (context, message, block) => {
1238
- let str = _blockToMarkdown(context, message, block);
1239
- if (str && !block.pending) {
1240
- return str += "\n";
1241
- }
1242
- return str;
1243
- };
1244
- var _blockToMarkdown = (context, message, block) => {
1245
- log4("blockToMarkdown", {
1246
- block: JSON.stringify(block)
1247
- }, {
1248
- F: __dxlog_file4,
1249
- L: 125,
1250
- S: void 0,
1251
- C: (f, a) => f(...a)
1252
- });
1253
- switch (block._tag) {
1254
- case "text": {
1255
- if (message.sender.role === "user") {
1256
- return `
1257
- <prompt>${block.text}</prompt>
1258
- `;
1259
- } else {
1260
- const text = block.text.trim();
1261
- if (text.length > 0) {
1262
- return text;
1263
- }
1264
- }
1265
- break;
1266
- }
1267
- case "suggestion": {
1268
- if (block.pending) {
1269
- return;
1270
- }
1271
- return `<suggestion>${block.text}</suggestion>`;
1272
- }
1273
- case "select": {
1274
- if (block.pending || block.options.length === 0) {
1275
- return;
1276
- }
1277
- return `<select>${block.options.map((option) => `<option>${option}</option>`).join("")}</select>`;
1278
- }
1279
- // TODO(burdon): Need label.
1280
- case "reference": {
1281
- return `<reference ref="${block.reference.dxn.toString()}">Ref</reference>`;
1282
- }
1283
- // case 'toolkit': {
1284
- // return `<toolkit />`;
1285
- // }
1286
- case "toolCall": {
1287
- context.updateWidget(block.toolCallId, {
1288
- blocks: [
1289
- block
1290
- ]
1291
- });
1292
- return `<toolCall id="${block.toolCallId}" />`;
1293
- }
1294
- case "toolResult": {
1295
- context.updateWidget(block.toolCallId, ({ blocks = [] }) => ({
1296
- blocks: [
1297
- ...blocks,
1298
- block
1299
- ]
1300
- }));
1301
- break;
1302
- }
1303
- case "summary": {
1304
- return `<summary>${ContentBlock.createSummaryMessage(block)}</summary>`;
1305
- }
1306
- // TODO(burdon): Need stable ID.
1307
- default: {
1308
- return `<json id="${message.id}">
1309
- ${JSON.stringify(block)}
1310
- </json>`;
1311
- }
1312
- }
1313
- };
1314
-
1315
- // src/components/ChatThread/sync.ts
1316
- import { log as log5 } from "@dxos/log";
1317
- function _define_property2(obj, key, value) {
1318
- if (key in obj) {
1319
- Object.defineProperty(obj, key, {
1320
- value,
1321
- enumerable: true,
1322
- configurable: true,
1323
- writable: true
1324
- });
1325
- } else {
1326
- obj[key] = value;
1327
- }
1328
- return obj;
1329
- }
1330
- var __dxlog_file5 = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/components/ChatThread/sync.ts";
1331
- var MessageThreadContext = class {
1332
- updateWidget(id, value) {
1333
- this._widgetState?.updateWidget(id, value);
1334
- }
1335
- constructor(_widgetState) {
1336
- _define_property2(this, "_widgetState", void 0);
1337
- this._widgetState = _widgetState;
1338
- }
1339
- };
1340
- var MessageSyncer = class {
1341
- get context() {
1342
- return this._context;
1343
- }
1344
- reset() {
1345
- log5("reset", void 0, {
1346
- F: __dxlog_file5,
1347
- L: 58,
1348
- S: this,
1349
- C: (f, a) => f(...a)
1350
- });
1351
- this._initialMessageId = void 0;
1352
- this._currentMessageIndex = 0;
1353
- this._currentBlockIndex = 0;
1354
- this._currentBlockContent = void 0;
1355
- void this._model.reset("");
1356
- }
1357
- sync(messages) {
1358
- log5("sync", {
1359
- messages: messages.map((message) => message.blocks.length),
1360
- currentMessageIndex: this._currentMessageIndex,
1361
- currentBlockIndex: this._currentBlockIndex,
1362
- currentBlockContent: this._currentBlockContent
1363
- }, {
1364
- F: __dxlog_file5,
1365
- L: 67,
1366
- S: this,
1367
- C: (f, a) => f(...a)
1368
- });
1369
- if (this._initialMessageId !== messages[0]?.id) {
1370
- this.reset();
1371
- this._initialMessageId = messages[0]?.id;
1372
- }
1373
- let i = this._currentMessageIndex;
1374
- for (const message of messages.slice(this._currentMessageIndex)) {
1375
- if (i > this._currentMessageIndex) {
1376
- this._currentBlockIndex = 0;
1377
- }
1378
- this._currentMessageIndex = i;
1379
- let j = this._currentBlockIndex;
1380
- for (const block of message.blocks.slice(this._currentBlockIndex)) {
1381
- this._currentBlockIndex = j;
1382
- const currentBlockContent = this._blockRenderer(this._context, message, block);
1383
- if (currentBlockContent) {
1384
- let content = "";
1385
- if (this._currentBlockContent && currentBlockContent.startsWith(this._currentBlockContent)) {
1386
- content = currentBlockContent.slice(this._currentBlockContent.length);
1387
- } else {
1388
- content = currentBlockContent;
1389
- }
1390
- void this._model.append(content);
1391
- this._currentBlockContent = currentBlockContent;
1392
- log5("append", {
1393
- message: i,
1394
- block: j,
1395
- content
1396
- }, {
1397
- F: __dxlog_file5,
1398
- L: 99,
1399
- S: this,
1400
- C: (f, a) => f(...a)
1401
- });
1402
- }
1403
- if (block.pending) {
1404
- return;
1405
- } else {
1406
- this._currentBlockContent = void 0;
1407
- this._currentBlockIndex++;
1408
- }
1409
- j++;
1410
- }
1411
- i++;
1412
- }
1413
- }
1414
- constructor(_model, _blockRenderer) {
1415
- _define_property2(this, "_model", void 0);
1416
- _define_property2(this, "_blockRenderer", void 0);
1417
- _define_property2(this, "_initialMessageId", void 0);
1418
- _define_property2(this, "_currentMessageIndex", void 0);
1419
- _define_property2(this, "_currentBlockIndex", void 0);
1420
- _define_property2(this, "_currentBlockContent", void 0);
1421
- _define_property2(this, "_context", void 0);
1422
- this._model = _model;
1423
- this._blockRenderer = _blockRenderer;
1424
- this._currentMessageIndex = 0;
1425
- this._currentBlockIndex = 0;
1426
- this._context = new MessageThreadContext(this._model);
1427
- }
1428
- };
1429
-
1430
- // src/components/ChatThread/ChatThread.tsx
1431
- var ChatThread = /* @__PURE__ */ forwardRef(({ classNames, identity, messages = [], error, cursor = false, fadeIn = true, overscroll, onEvent }, forwardedRef) => {
1432
- var _effect = _useSignals10();
1433
- try {
1434
- const userHue = useMemo8(() => {
1435
- return identity?.profile?.data?.hue || keyToFallback(identity?.identityKey ?? PublicKey.random()).hue;
1436
- }, [
1437
- identity
1438
- ]);
1439
- const [controller, setController] = useState11(null);
1440
- useImperativeHandle(forwardedRef, () => controller ? controller : null, [
1441
- controller
1442
- ]);
1443
- useEffect5(() => {
1444
- controller?.scrollToBottom();
1445
- }, [
1446
- controller,
1447
- error
1448
- ]);
1449
- const syncer = useMemo8(() => controller && new MessageSyncer(controller, blockToMarkdown), [
1450
- controller
1451
- ]);
1452
- useEffect5(() => {
1453
- syncer?.sync(messages);
1454
- }, [
1455
- syncer,
1456
- messages
1457
- ]);
1458
- const handleEvent = useCallback5((ev) => {
1459
- switch (ev.type) {
1460
- case "submit": {
1461
- ev.value && onEvent?.({
1462
- type: "submit",
1463
- text: ev.value
1464
- });
1465
- break;
1466
- }
1467
- }
1468
- }, [
1469
- onEvent
1470
- ]);
1471
- return /* @__PURE__ */ React8.createElement("div", {
1472
- className: mx4("flex bs-full is-full justify-center overflow-hidden", classNames),
1473
- style: {
1474
- "--user-fill": `var(--dx-${userHue}Fill)`
1475
- }
1476
- }, /* @__PURE__ */ React8.createElement(MarkdownStream, {
1477
- ref: setController,
1478
- registry: componentRegistry,
1479
- cursor,
1480
- fadeIn,
1481
- overscroll,
1482
- onEvent: handleEvent
1483
- }));
1484
- } finally {
1485
- _effect.f();
1486
- }
1487
- });
1488
-
1489
- // src/components/Chat/Chat.tsx
1490
- var [ChatContextProvider, useChatContext] = createContext("Chat");
1491
- var ChatRoot = ({ classNames, children, chat, processor, onEvent, ...props }) => {
1492
- var _effect = _useSignals11();
1493
- try {
1494
- const [debug, setDebug] = useState12(false);
1495
- const space = getSpace(chat);
1496
- const queue = useQueue(chat?.queue.dxn);
1497
- const pending = useRxValue(processor.messages);
1498
- const streaming = useRxValue(processor.streaming);
1499
- const lastPrompt = useRef3(void 0);
1500
- const messages = useMemo9(() => {
1501
- const queueMessages = queue?.objects?.filter(Obj6.instanceOf(DataType2.Message)) ?? [];
1502
- return Array2.dedupeWith([
1503
- ...queueMessages,
1504
- ...pending
1505
- ], (a, b) => a.id === b.id);
1506
- }, [
1507
- queue?.objects,
1508
- pending
1509
- ]);
1510
- const event = useMemo9(() => new Event(), []);
1511
- useEffect6(() => {
1512
- return event.on((ev) => {
1513
- switch (ev.type) {
1514
- case "toggle-debug": {
1515
- setDebug((current) => !current);
1516
- break;
1517
- }
1518
- case "submit": {
1519
- const text = ev.text.trim();
1520
- if (!streaming && text.length) {
1521
- lastPrompt.current = ev.text;
1522
- void processor.request({
1523
- message: text
1524
- });
1525
- }
1526
- break;
1527
- }
1528
- case "retry": {
1529
- if (!streaming) {
1530
- void processor.retry();
1531
- }
1532
- break;
1533
- }
1534
- case "cancel": {
1535
- if (streaming) {
1536
- void processor.cancel();
1537
- if (lastPrompt.current) {
1538
- event.emit({
1539
- type: "update-prompt",
1540
- text: lastPrompt.current
1541
- });
1542
- }
1543
- }
1544
- break;
1545
- }
1546
- default: {
1547
- onEvent?.(ev);
1548
- }
1549
- }
1550
- });
1551
- }, [
1552
- event,
1553
- processor,
1554
- streaming,
1555
- onEvent
1556
- ]);
1557
- if (!space) {
1558
- return null;
1559
- }
1560
- return /* @__PURE__ */ React9.createElement(ChatContextProvider, {
1561
- debug,
1562
- event,
1563
- chat,
1564
- space,
1565
- messages,
1566
- processor,
1567
- ...props
1568
- }, /* @__PURE__ */ React9.createElement("div", {
1569
- role: "none",
1570
- className: mx5("flex flex-col bs-full is-full", classNames)
1571
- }, children));
1572
- } finally {
1573
- _effect.f();
1574
- }
1575
- };
1576
- ChatRoot.displayName = "Chat.Root";
1577
- var ChatPrompt = ({ classNames, outline, settings = true, placeholder, expandable, online, presets, preset, onPresetChange, onOnlineChange }) => {
1578
- var _effect = _useSignals11();
1579
- try {
1580
- const { t } = useTranslation5(meta.id);
1581
- const { space, event, processor } = useChatContext(ChatPrompt.displayName);
1582
- const error = useRxValue(processor.error).pipe(Option3.getOrUndefined);
1583
- const streaming = useRxValue(processor.streaming);
1584
- const active = useRxValue(processor.active);
1585
- const activeRef = useDynamicRef(active);
1586
- const editorRef = useRef3(null);
1587
- const [recordingState, setRecordingState] = useState12(false);
1588
- useEffect6(() => {
1589
- return event.on((event2) => {
1590
- switch (event2.type) {
1591
- case "update-prompt":
1592
- if (!editorRef.current?.getText()?.length) {
1593
- editorRef.current?.setText(event2.text);
1594
- editorRef.current?.focus();
1595
- }
1596
- break;
1597
- case "record-start":
1598
- setRecordingState(true);
1599
- break;
1600
- case "record-stop":
1601
- setRecordingState(false);
1602
- break;
1603
- }
1604
- });
1605
- }, [
1606
- event
1607
- ]);
1608
- const { recording } = useVoiceInput({
1609
- active: recordingState,
1610
- onUpdate: (text) => {
1611
- editorRef.current?.setText(text);
1612
- editorRef.current?.focus();
1613
- }
1614
- });
1615
- const referencesProvider = useReferencesProvider(space);
1616
- const extensions = useMemo9(() => {
1617
- return [
1618
- referencesProvider && references({
1619
- provider: referencesProvider
1620
- }),
1621
- Prec.highest(keymap.of([
1622
- {
1623
- key: "cmd-d",
1624
- preventDefault: true,
1625
- run: () => {
1626
- event.emit({
1627
- type: "toggle-debug"
1628
- });
1629
- return true;
1630
- }
1631
- },
1632
- expandable && {
1633
- key: "cmd-ArrowUp",
1634
- preventDefault: true,
1635
- run: () => {
1636
- event.emit({
1637
- type: "thread-open"
1638
- });
1639
- return true;
1640
- }
1641
- },
1642
- expandable && {
1643
- key: "cmd-ArrowDown",
1644
- preventDefault: true,
1645
- run: () => {
1646
- event.emit({
1647
- type: "thread-close"
1648
- });
1649
- return true;
1650
- }
1651
- }
1652
- ].filter(isTruthy)))
1653
- ].filter(isTruthy);
1654
- }, [
1655
- event,
1656
- expandable,
1657
- referencesProvider
1658
- ]);
1659
- const handleSubmit = useCallback6((text) => {
1660
- if (!activeRef.current) {
1661
- event.emit({
1662
- type: "submit",
1663
- text
1664
- });
1665
- return true;
1666
- }
1667
- }, [
1668
- event
1669
- ]);
1670
- const handleEvent = useCallback6((ev) => {
1671
- event.emit(ev);
1672
- }, [
1673
- event
1674
- ]);
1675
- return /* @__PURE__ */ React9.createElement("div", {
1676
- role: "group",
1677
- className: mx5("flex flex-col is-full density-fine", outline && [
1678
- "p-2 bg-groupSurface border border-subduedSeparator transition transition-border [&:has(.cm-content:focus)]:border-separator rounded"
1679
- ], classNames)
1680
- }, /* @__PURE__ */ React9.createElement("div", {
1681
- role: "none",
1682
- className: "flex gap-2"
1683
- }, /* @__PURE__ */ React9.createElement(ChatStatusIndicator, {
1684
- classNames: "p-1",
1685
- preset,
1686
- error,
1687
- processing: streaming
1688
- }), /* @__PURE__ */ React9.createElement(ChatEditor, {
1689
- ref: editorRef,
1690
- autoFocus: true,
1691
- lineWrapping: true,
1692
- classNames: "col-span-2 pbs-0.5",
1693
- placeholder: placeholder ?? t("prompt placeholder"),
1694
- extensions,
1695
- onSubmit: handleSubmit
1696
- })), settings && /* @__PURE__ */ React9.createElement("div", {
1697
- role: "none",
1698
- className: "flex pbs-2 items-center"
1699
- }, /* @__PURE__ */ React9.createElement(ChatOptions, {
1700
- space,
1701
- blueprintRegistry: processor.blueprintRegistry,
1702
- context: processor.context,
1703
- preset,
1704
- presets,
1705
- onPresetChange
1706
- }), /* @__PURE__ */ React9.createElement("div", {
1707
- role: "none",
1708
- className: "pli-cardSpacingChrome grow"
1709
- }, /* @__PURE__ */ React9.createElement(ChatReferences, {
1710
- space,
1711
- context: processor.context
1712
- })), /* @__PURE__ */ React9.createElement(ChatActions, {
1713
- classNames: "col-span-2",
1714
- microphone: true,
1715
- recording,
1716
- processing: streaming,
1717
- onEvent: handleEvent
1718
- }, online !== void 0 && /* @__PURE__ */ React9.createElement(Input.Root, null, /* @__PURE__ */ React9.createElement(Input.Label, {
1719
- srOnly: true
1720
- }, t("online switch label")), /* @__PURE__ */ React9.createElement(Input.Switch, {
1721
- classNames: "mis-2 mie-2",
1722
- checked: online,
1723
- onCheckedChange: onOnlineChange
1724
- })))));
1725
- } finally {
1726
- _effect.f();
1727
- }
1728
- };
1729
- ChatPrompt.displayName = "Chat.Prompt";
1730
- var ChatThread2 = (props) => {
1731
- var _effect = _useSignals11();
1732
- try {
1733
- const { event, messages, processor } = useChatContext(ChatThread2.displayName);
1734
- const identity = useIdentity();
1735
- const error = useRxValue(processor.error).pipe(Option3.getOrUndefined);
1736
- const scrollerRef = useRef3(null);
1737
- useEffect6(() => {
1738
- return event.on((event2) => {
1739
- switch (event2.type) {
1740
- case "submit":
1741
- case "scroll-to-bottom":
1742
- scrollerRef.current?.scrollToBottom();
1743
- break;
1744
- }
1745
- });
1746
- }, [
1747
- event
1748
- ]);
1749
- const handleEvent = useCallback6((ev) => {
1750
- event.emit(ev);
1751
- }, [
1752
- event
1753
- ]);
1754
- if (!identity) {
1755
- return null;
1756
- }
1757
- return /* @__PURE__ */ React9.createElement(ChatThread, {
1758
- ...props,
1759
- ref: scrollerRef,
1760
- identity,
1761
- messages,
1762
- error,
1763
- onEvent: handleEvent
1764
- });
1765
- } finally {
1766
- _effect.f();
1767
- }
1768
- };
1769
- ChatThread2.displayName = "Chat.Thread";
1770
- var Chat = {
1771
- Root: ChatRoot,
1772
- Prompt: ChatPrompt,
1773
- Thread: ChatThread2
1774
- };
1775
-
1776
- export {
1777
- useBlueprintRegistry,
1778
- useBlueprints,
1779
- useActiveBlueprints,
1780
- useBlueprintHandlers,
1781
- useChatProcessor,
1782
- useChatServices,
1783
- useContextBinder,
1784
- useContextObjects,
1785
- useFlush,
1786
- useItemTypes,
1787
- useOnline,
1788
- usePresets,
1789
- useReferencesProvider,
1790
- ChatContextProvider,
1791
- useChatContext,
1792
- Chat
1793
- };
1794
- //# sourceMappingURL=chunk-WRJGOT5P.mjs.map