@dxos/plugin-assistant 0.8.3-staging.0fa589b → 0.8.4-main.03d5cd7b56

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 (878) hide show
  1. package/dist/lib/neutral/AgentArticle-LDV6UTSH.mjs +168 -0
  2. package/dist/lib/neutral/AgentArticle-LDV6UTSH.mjs.map +7 -0
  3. package/dist/lib/neutral/AgentProperties-H535EM5S.mjs +100 -0
  4. package/dist/lib/neutral/AgentProperties-H535EM5S.mjs.map +7 -0
  5. package/dist/lib/neutral/AssistantPlugin.mjs +99 -0
  6. package/dist/lib/neutral/AssistantPlugin.mjs.map +7 -0
  7. package/dist/lib/neutral/AssistantPlugin.node.mjs +46 -0
  8. package/dist/lib/neutral/AssistantPlugin.node.mjs.map +7 -0
  9. package/dist/lib/neutral/AssistantSettings-GG52BLKS.mjs +40 -0
  10. package/dist/lib/neutral/AssistantSettings-GG52BLKS.mjs.map +7 -0
  11. package/dist/lib/neutral/BlueprintArticle-U7LUBFOS.mjs +27 -0
  12. package/dist/lib/neutral/BlueprintArticle-U7LUBFOS.mjs.map +7 -0
  13. package/dist/lib/neutral/ChatCompanion-6LC7YCV6.mjs +130 -0
  14. package/dist/lib/neutral/ChatCompanion-6LC7YCV6.mjs.map +7 -0
  15. package/dist/lib/neutral/ChatContainer-X3R4ALHT.mjs +8 -0
  16. package/dist/lib/neutral/ChatDialog-QKZLG7SQ.mjs +72 -0
  17. package/dist/lib/neutral/ChatDialog-QKZLG7SQ.mjs.map +7 -0
  18. package/dist/lib/neutral/RoutineArticle-6LC3P7OB.mjs +55 -0
  19. package/dist/lib/neutral/RoutineArticle-6LC3P7OB.mjs.map +7 -0
  20. package/dist/lib/neutral/RoutineList-CLDXGQUD.mjs +48 -0
  21. package/dist/lib/neutral/RoutineList-CLDXGQUD.mjs.map +7 -0
  22. package/dist/lib/neutral/TracePanel-HYVPDIAA.mjs +565 -0
  23. package/dist/lib/neutral/TracePanel-HYVPDIAA.mjs.map +7 -0
  24. package/dist/lib/neutral/TriggerStatus-WTFYUIG5.mjs +92 -0
  25. package/dist/lib/neutral/TriggerStatus-WTFYUIG5.mjs.map +7 -0
  26. package/dist/lib/neutral/ai-service-GJXMI5OI.mjs +22 -0
  27. package/dist/lib/neutral/ai-service-GJXMI5OI.mjs.map +7 -0
  28. package/dist/lib/neutral/app-graph-builder-XZJDJ3LJ.mjs +189 -0
  29. package/dist/lib/neutral/app-graph-builder-XZJDJ3LJ.mjs.map +7 -0
  30. package/dist/lib/neutral/blueprint-definition-VXJYQ5AE.mjs +32 -0
  31. package/dist/lib/neutral/blueprint-definition-VXJYQ5AE.mjs.map +7 -0
  32. package/dist/lib/neutral/blueprints/index.mjs +8 -0
  33. package/dist/lib/neutral/capabilities/index.mjs +35 -0
  34. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  35. package/dist/lib/neutral/chunk-4CQZCMRP.mjs +25 -0
  36. package/dist/lib/neutral/chunk-4CQZCMRP.mjs.map +7 -0
  37. package/dist/lib/neutral/chunk-5H6UJHLF.mjs +30 -0
  38. package/dist/lib/neutral/chunk-5H6UJHLF.mjs.map +7 -0
  39. package/dist/lib/neutral/chunk-CM3XQU2M.mjs +8 -0
  40. package/dist/lib/neutral/chunk-CM3XQU2M.mjs.map +7 -0
  41. package/dist/lib/neutral/chunk-F7VUML5H.mjs +104 -0
  42. package/dist/lib/neutral/chunk-F7VUML5H.mjs.map +7 -0
  43. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  44. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  45. package/dist/lib/neutral/chunk-VHPTYKYD.mjs +361 -0
  46. package/dist/lib/neutral/chunk-VHPTYKYD.mjs.map +7 -0
  47. package/dist/lib/neutral/companion-chat-provisioner-5N4HWNVJ.mjs +116 -0
  48. package/dist/lib/neutral/companion-chat-provisioner-5N4HWNVJ.mjs.map +7 -0
  49. package/dist/lib/neutral/components/index.mjs +2240 -0
  50. package/dist/lib/neutral/components/index.mjs.map +7 -0
  51. package/dist/lib/neutral/containers/index.mjs +27 -0
  52. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  53. package/dist/lib/neutral/create-chat-AEFFQYHT.mjs +71 -0
  54. package/dist/lib/neutral/create-chat-AEFFQYHT.mjs.map +7 -0
  55. package/dist/lib/neutral/create-object-VV5AO6D2.mjs +93 -0
  56. package/dist/lib/neutral/create-object-VV5AO6D2.mjs.map +7 -0
  57. package/dist/lib/neutral/edge-model-resolver-XDNBZ3US.mjs +21 -0
  58. package/dist/lib/neutral/edge-model-resolver-XDNBZ3US.mjs.map +7 -0
  59. package/dist/lib/neutral/ensure-companion-chat-EWF5GEZI.mjs +58 -0
  60. package/dist/lib/neutral/ensure-companion-chat-EWF5GEZI.mjs.map +7 -0
  61. package/dist/lib/neutral/hooks/index.mjs +930 -0
  62. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  63. package/dist/lib/neutral/index.mjs +32 -0
  64. package/dist/lib/neutral/index.mjs.map +7 -0
  65. package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs +24 -0
  66. package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs.map +7 -0
  67. package/dist/lib/neutral/markdown-KTBFOMFM.mjs +110 -0
  68. package/dist/lib/neutral/markdown-KTBFOMFM.mjs.map +7 -0
  69. package/dist/lib/neutral/meta.json +1 -0
  70. package/dist/lib/neutral/meta.mjs +12 -0
  71. package/dist/lib/neutral/meta.mjs.map +7 -0
  72. package/dist/lib/neutral/migrations-LOYUJDNX.mjs +28 -0
  73. package/dist/lib/neutral/migrations-LOYUJDNX.mjs.map +7 -0
  74. package/dist/lib/neutral/on-create-space-Q2R7OSP6.mjs +19 -0
  75. package/dist/lib/neutral/on-create-space-Q2R7OSP6.mjs.map +7 -0
  76. package/dist/lib/neutral/operation-handler-SF36MOB5.mjs +13 -0
  77. package/dist/lib/neutral/operation-handler-SF36MOB5.mjs.map +7 -0
  78. package/dist/lib/neutral/operations/index.mjs +8 -0
  79. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  80. package/dist/lib/neutral/plugin.mjs +16 -0
  81. package/dist/lib/neutral/plugin.mjs.map +7 -0
  82. package/dist/lib/neutral/react-surface-JWFECJJ5.mjs +165 -0
  83. package/dist/lib/neutral/react-surface-JWFECJJ5.mjs.map +7 -0
  84. package/dist/lib/neutral/resolve-navigation-targets-VXBSWV5L.mjs +20 -0
  85. package/dist/lib/neutral/resolve-navigation-targets-VXBSWV5L.mjs.map +7 -0
  86. package/dist/lib/neutral/run-prompt-in-new-chat-ZMWSWGXL.mjs +100 -0
  87. package/dist/lib/neutral/run-prompt-in-new-chat-ZMWSWGXL.mjs.map +7 -0
  88. package/dist/lib/neutral/set-current-chat-ZFDCYK5I.mjs +48 -0
  89. package/dist/lib/neutral/set-current-chat-ZFDCYK5I.mjs.map +7 -0
  90. package/dist/lib/neutral/settings-W4BLWQ53.mjs +28 -0
  91. package/dist/lib/neutral/settings-W4BLWQ53.mjs.map +7 -0
  92. package/dist/lib/neutral/state-H3G7QCU6.mjs +28 -0
  93. package/dist/lib/neutral/state-H3G7QCU6.mjs.map +7 -0
  94. package/dist/lib/neutral/toolkit-GVWXPDLJ.mjs +14 -0
  95. package/dist/lib/neutral/toolkit-GVWXPDLJ.mjs.map +7 -0
  96. package/dist/lib/neutral/translations.mjs +173 -0
  97. package/dist/lib/neutral/translations.mjs.map +7 -0
  98. package/dist/lib/neutral/types/index.mjs +20 -0
  99. package/dist/lib/neutral/types/index.mjs.map +7 -0
  100. package/dist/lib/neutral/update-chat-name-ENXRUMDJ.mjs +54 -0
  101. package/dist/lib/neutral/update-chat-name-ENXRUMDJ.mjs.map +7 -0
  102. package/dist/types/src/AssistantPlugin.d.ts +3 -1
  103. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  104. package/dist/types/src/AssistantPlugin.node.d.ts +4 -0
  105. package/dist/types/src/AssistantPlugin.node.d.ts.map +1 -0
  106. package/dist/types/src/AssistantPlugin.test.d.ts +2 -0
  107. package/dist/types/src/AssistantPlugin.test.d.ts.map +1 -0
  108. package/dist/types/src/blueprints/assistant/blueprint.d.ts +4 -0
  109. package/dist/types/src/blueprints/assistant/blueprint.d.ts.map +1 -0
  110. package/dist/types/src/blueprints/assistant/blueprint.test.d.ts +2 -0
  111. package/dist/types/src/blueprints/assistant/blueprint.test.d.ts.map +1 -0
  112. package/dist/types/src/blueprints/assistant/index.d.ts +2 -0
  113. package/dist/types/src/blueprints/assistant/index.d.ts.map +1 -0
  114. package/dist/types/src/blueprints/index.d.ts +2 -0
  115. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  116. package/dist/types/src/capabilities/ai-service.d.ts +6 -0
  117. package/dist/types/src/capabilities/ai-service.d.ts.map +1 -0
  118. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  119. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  120. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  121. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  122. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts +9 -0
  123. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts.map +1 -0
  124. package/dist/types/src/capabilities/create-object.d.ts +31 -0
  125. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  126. package/dist/types/src/capabilities/edge-model-resolver.d.ts +7 -0
  127. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -0
  128. package/dist/types/src/capabilities/index.d.ts +55 -6
  129. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  130. package/dist/types/src/capabilities/local-model-resolver.d.ts +16 -0
  131. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -0
  132. package/dist/types/src/capabilities/markdown.d.ts +5 -0
  133. package/dist/types/src/capabilities/markdown.d.ts.map +1 -0
  134. package/dist/types/src/capabilities/migrations.d.ts +5 -0
  135. package/dist/types/src/capabilities/migrations.d.ts.map +1 -0
  136. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  137. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  138. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  139. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  140. package/dist/types/src/capabilities/settings.d.ts +4 -2
  141. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  142. package/dist/types/src/capabilities/state.d.ts +21 -0
  143. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  144. package/dist/types/src/capabilities/toolkit.d.ts +6 -0
  145. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  146. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts +4 -4
  147. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  148. package/dist/types/src/components/AssistantSettings/AssistantSettings.stories.d.ts +15 -0
  149. package/dist/types/src/components/AssistantSettings/AssistantSettings.stories.d.ts.map +1 -0
  150. package/dist/types/src/components/AssistantSettings/index.d.ts +1 -1
  151. package/dist/types/src/components/AssistantSettings/index.d.ts.map +1 -1
  152. package/dist/types/src/components/Chat/Chat.d.ts +54 -0
  153. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -0
  154. package/dist/types/src/components/Chat/context.d.ts +29 -0
  155. package/dist/types/src/components/Chat/context.d.ts.map +1 -0
  156. package/dist/types/src/components/Chat/events.d.ts +39 -0
  157. package/dist/types/src/components/Chat/events.d.ts.map +1 -0
  158. package/dist/types/src/components/Chat/index.d.ts +3 -0
  159. package/dist/types/src/components/Chat/index.d.ts.map +1 -0
  160. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts +12 -0
  161. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -0
  162. package/dist/types/src/components/ChatPrompt/ChatMcpErrors.d.ts +12 -0
  163. package/dist/types/src/components/ChatPrompt/ChatMcpErrors.d.ts.map +1 -0
  164. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts +24 -0
  165. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -0
  166. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts +19 -0
  167. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts.map +1 -0
  168. package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts +11 -0
  169. package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts.map +1 -0
  170. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts +28 -0
  171. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts.map +1 -0
  172. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +10 -0
  173. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -0
  174. package/dist/types/src/components/ChatPrompt/ChatStatus.d.ts +20 -0
  175. package/dist/types/src/components/ChatPrompt/ChatStatus.d.ts.map +1 -0
  176. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts +10 -0
  177. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +1 -0
  178. package/dist/types/src/components/ChatPrompt/index.d.ts +9 -0
  179. package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -0
  180. package/dist/types/src/components/ChatThread/Anchor.stories.d.ts +14 -0
  181. package/dist/types/src/components/ChatThread/Anchor.stories.d.ts.map +1 -0
  182. package/dist/types/src/components/ChatThread/ChatThread.d.ts +24 -0
  183. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -0
  184. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +36 -0
  185. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -0
  186. package/dist/types/src/components/ChatThread/Link.d.ts +9 -0
  187. package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -0
  188. package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts +42 -0
  189. package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts.map +1 -0
  190. package/dist/types/src/components/ChatThread/index.d.ts +2 -0
  191. package/dist/types/src/components/ChatThread/index.d.ts.map +1 -0
  192. package/dist/types/src/components/ChatThread/registry.d.ts +29 -0
  193. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -0
  194. package/dist/types/src/components/ChatThread/sync.d.ts +69 -0
  195. package/dist/types/src/components/ChatThread/sync.d.ts.map +1 -0
  196. package/dist/types/src/components/ChatThread/sync.test.d.ts +2 -0
  197. package/dist/types/src/components/ChatThread/sync.test.d.ts.map +1 -0
  198. package/dist/types/src/components/ChatThread/tool-widget-state.d.ts +18 -0
  199. package/dist/types/src/components/ChatThread/tool-widget-state.d.ts.map +1 -0
  200. package/dist/types/src/components/ChatThread/tool-widget-state.test.d.ts +2 -0
  201. package/dist/types/src/components/ChatThread/tool-widget-state.test.d.ts.map +1 -0
  202. package/dist/types/src/components/ChatThread/widgets/FallbackWidget.d.ts +8 -0
  203. package/dist/types/src/components/ChatThread/widgets/FallbackWidget.d.ts.map +1 -0
  204. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.d.ts +25 -0
  205. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.d.ts.map +1 -0
  206. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts +18 -0
  207. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts.map +1 -0
  208. package/dist/types/src/components/ChatThread/widgets/ReferenceWidget.d.ts +9 -0
  209. package/dist/types/src/components/ChatThread/widgets/ReferenceWidget.d.ts.map +1 -0
  210. package/dist/types/src/components/ChatThread/widgets/SelectWidget.d.ts +14 -0
  211. package/dist/types/src/components/ChatThread/widgets/SelectWidget.d.ts.map +1 -0
  212. package/dist/types/src/components/ChatThread/widgets/StatsWidget.d.ts +12 -0
  213. package/dist/types/src/components/ChatThread/widgets/StatsWidget.d.ts.map +1 -0
  214. package/dist/types/src/components/ChatThread/widgets/StatusWidget.d.ts +12 -0
  215. package/dist/types/src/components/ChatThread/widgets/StatusWidget.d.ts.map +1 -0
  216. package/dist/types/src/components/ChatThread/widgets/SuggestionWidget.d.ts +11 -0
  217. package/dist/types/src/components/ChatThread/widgets/SuggestionWidget.d.ts.map +1 -0
  218. package/dist/types/src/components/ChatThread/widgets/SummaryWidget.d.ts +5 -0
  219. package/dist/types/src/components/ChatThread/widgets/SummaryWidget.d.ts.map +1 -0
  220. package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts +9 -0
  221. package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts.map +1 -0
  222. package/dist/types/src/components/ChatThread/widgets/ToolWidget.stories.d.ts +15 -0
  223. package/dist/types/src/components/ChatThread/widgets/ToolWidget.stories.d.ts.map +1 -0
  224. package/dist/types/src/components/ChatThread/widgets/defaults.d.ts +5 -0
  225. package/dist/types/src/components/ChatThread/widgets/defaults.d.ts.map +1 -0
  226. package/dist/types/src/components/ChatThread/widgets/index.d.ts +10 -0
  227. package/dist/types/src/components/ChatThread/widgets/index.d.ts.map +1 -0
  228. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts +11 -0
  229. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -0
  230. package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts +7 -0
  231. package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts.map +1 -0
  232. package/dist/types/src/components/ProcessTree/index.d.ts +2 -0
  233. package/dist/types/src/components/ProcessTree/index.d.ts.map +1 -0
  234. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +9 -11
  235. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  236. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +13 -7
  237. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  238. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +16 -6
  239. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  240. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +11 -3
  241. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  242. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts +12 -0
  243. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +1 -0
  244. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts +3 -0
  245. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts.map +1 -0
  246. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts +8 -0
  247. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts.map +1 -0
  248. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +12 -0
  249. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -0
  250. package/dist/types/src/components/ToolBlock/ToolBlockWidget.d.ts +2 -0
  251. package/dist/types/src/components/ToolBlock/ToolBlockWidget.d.ts.map +1 -0
  252. package/dist/types/src/components/ToolBlock/index.d.ts +3 -0
  253. package/dist/types/src/components/ToolBlock/index.d.ts.map +1 -0
  254. package/dist/types/src/components/Toolbox/Toolbox.d.ts +17 -14
  255. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  256. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +14 -5
  257. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  258. package/dist/types/src/components/index.d.ts +4 -15
  259. package/dist/types/src/components/index.d.ts.map +1 -1
  260. package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts +6 -0
  261. package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts.map +1 -0
  262. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts +21 -0
  263. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts.map +1 -0
  264. package/dist/types/src/containers/AgentArticle/index.d.ts +2 -0
  265. package/dist/types/src/containers/AgentArticle/index.d.ts.map +1 -0
  266. package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts +6 -0
  267. package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts.map +1 -0
  268. package/dist/types/src/containers/AgentProperties/AgentProperties.stories.d.ts +16 -0
  269. package/dist/types/src/containers/AgentProperties/AgentProperties.stories.d.ts.map +1 -0
  270. package/dist/types/src/containers/AgentProperties/index.d.ts +2 -0
  271. package/dist/types/src/containers/AgentProperties/index.d.ts.map +1 -0
  272. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts +6 -0
  273. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts.map +1 -0
  274. package/dist/types/src/containers/BlueprintArticle/index.d.ts +2 -0
  275. package/dist/types/src/containers/BlueprintArticle/index.d.ts.map +1 -0
  276. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts +18 -0
  277. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -0
  278. package/dist/types/src/containers/ChatCompanion/index.d.ts +2 -0
  279. package/dist/types/src/containers/ChatCompanion/index.d.ts.map +1 -0
  280. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts +12 -0
  281. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +1 -0
  282. package/dist/types/src/containers/ChatContainer/index.d.ts +2 -0
  283. package/dist/types/src/containers/ChatContainer/index.d.ts.map +1 -0
  284. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts +7 -0
  285. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -0
  286. package/dist/types/src/containers/ChatDialog/index.d.ts +2 -0
  287. package/dist/types/src/containers/ChatDialog/index.d.ts.map +1 -0
  288. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts +6 -0
  289. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts.map +1 -0
  290. package/dist/types/src/containers/RoutineArticle/index.d.ts +2 -0
  291. package/dist/types/src/containers/RoutineArticle/index.d.ts.map +1 -0
  292. package/dist/types/src/containers/RoutineList/RoutineList.d.ts +6 -0
  293. package/dist/types/src/containers/RoutineList/RoutineList.d.ts.map +1 -0
  294. package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts +21 -0
  295. package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts.map +1 -0
  296. package/dist/types/src/containers/RoutineList/index.d.ts +2 -0
  297. package/dist/types/src/containers/RoutineList/index.d.ts.map +1 -0
  298. package/dist/types/src/containers/TracePanel/TracePanel.d.ts +8 -0
  299. package/dist/types/src/containers/TracePanel/TracePanel.d.ts.map +1 -0
  300. package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts +13 -0
  301. package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts.map +1 -0
  302. package/dist/types/src/containers/TracePanel/dxn-extractor.d.ts +19 -0
  303. package/dist/types/src/containers/TracePanel/dxn-extractor.d.ts.map +1 -0
  304. package/dist/types/src/containers/TracePanel/dxn-extractor.test.d.ts +2 -0
  305. package/dist/types/src/containers/TracePanel/dxn-extractor.test.d.ts.map +1 -0
  306. package/dist/types/src/containers/TracePanel/execution-graph.d.ts +97 -0
  307. package/dist/types/src/containers/TracePanel/execution-graph.d.ts.map +1 -0
  308. package/dist/types/src/containers/TracePanel/execution-graph.test.d.ts +2 -0
  309. package/dist/types/src/containers/TracePanel/execution-graph.test.d.ts.map +1 -0
  310. package/dist/types/src/containers/TracePanel/index.d.ts +4 -0
  311. package/dist/types/src/containers/TracePanel/index.d.ts.map +1 -0
  312. package/dist/types/src/containers/TracePanel/testing/index.d.ts +3 -0
  313. package/dist/types/src/containers/TracePanel/testing/index.d.ts.map +1 -0
  314. package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts +14 -0
  315. package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts.map +1 -0
  316. package/dist/types/src/containers/TracePanel/testing/snapshot-playback.d.ts +12 -0
  317. package/dist/types/src/containers/TracePanel/testing/snapshot-playback.d.ts.map +1 -0
  318. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts +5 -0
  319. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -0
  320. package/dist/types/src/containers/TriggerStatus/index.d.ts +2 -0
  321. package/dist/types/src/containers/TriggerStatus/index.d.ts.map +1 -0
  322. package/dist/types/src/containers/index.d.ts +12 -0
  323. package/dist/types/src/containers/index.d.ts.map +1 -0
  324. package/dist/types/src/extensions/index.d.ts +2 -0
  325. package/dist/types/src/extensions/index.d.ts.map +1 -0
  326. package/dist/types/src/extensions/prompt-extension.d.ts +10 -0
  327. package/dist/types/src/extensions/prompt-extension.d.ts.map +1 -0
  328. package/dist/types/src/hooks/index.d.ts +12 -5
  329. package/dist/types/src/hooks/index.d.ts.map +1 -1
  330. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +25 -0
  331. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -0
  332. package/dist/types/src/hooks/useChatKeymap.d.ts +12 -0
  333. package/dist/types/src/hooks/useChatKeymap.d.ts.map +1 -0
  334. package/dist/types/src/hooks/useChatProcessor.d.ts +13 -11
  335. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  336. package/dist/types/src/hooks/useChatServices.d.ts +10 -0
  337. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -0
  338. package/dist/types/src/hooks/useChatToolbarActions.d.ts +8 -0
  339. package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -0
  340. package/dist/types/src/hooks/useContextBinder.d.ts +5 -0
  341. package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -0
  342. package/dist/types/src/hooks/useContextObjects.d.ts +15 -0
  343. package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -0
  344. package/dist/types/src/hooks/useDebug.d.ts +10 -0
  345. package/dist/types/src/hooks/useDebug.d.ts.map +1 -0
  346. package/dist/types/src/hooks/useFilteredTypes.d.ts +3 -0
  347. package/dist/types/src/hooks/useFilteredTypes.d.ts.map +1 -0
  348. package/dist/types/src/hooks/useFlush.d.ts +6 -0
  349. package/dist/types/src/hooks/useFlush.d.ts.map +1 -0
  350. package/dist/types/src/hooks/useOnline.d.ts +3 -0
  351. package/dist/types/src/hooks/useOnline.d.ts.map +1 -0
  352. package/dist/types/src/hooks/usePresets.d.ts +7 -0
  353. package/dist/types/src/hooks/usePresets.d.ts.map +1 -0
  354. package/dist/types/src/hooks/useReferencesProvider.d.ts +7 -0
  355. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -0
  356. package/dist/types/src/index.d.ts +1 -4
  357. package/dist/types/src/index.d.ts.map +1 -1
  358. package/dist/types/src/meta.d.ts +5 -4
  359. package/dist/types/src/meta.d.ts.map +1 -1
  360. package/dist/types/src/operations/create-chat.d.ts +5 -0
  361. package/dist/types/src/operations/create-chat.d.ts.map +1 -0
  362. package/dist/types/src/operations/ensure-companion-chat.d.ts +5 -0
  363. package/dist/types/src/operations/ensure-companion-chat.d.ts.map +1 -0
  364. package/dist/types/src/operations/index.d.ts +3 -0
  365. package/dist/types/src/operations/index.d.ts.map +1 -0
  366. package/dist/types/src/operations/on-create-space.d.ts +5 -0
  367. package/dist/types/src/operations/on-create-space.d.ts.map +1 -0
  368. package/dist/types/src/operations/prompt.test.d.ts +2 -0
  369. package/dist/types/src/operations/prompt.test.d.ts.map +1 -0
  370. package/dist/types/src/operations/resolve-navigation-targets.d.ts +15 -0
  371. package/dist/types/src/operations/resolve-navigation-targets.d.ts.map +1 -0
  372. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts +5 -0
  373. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts.map +1 -0
  374. package/dist/types/src/operations/set-current-chat.d.ts +5 -0
  375. package/dist/types/src/operations/set-current-chat.d.ts.map +1 -0
  376. package/dist/types/src/operations/update-chat-name.d.ts +5 -0
  377. package/dist/types/src/operations/update-chat-name.d.ts.map +1 -0
  378. package/dist/types/src/plugin.d.ts +4 -0
  379. package/dist/types/src/plugin.d.ts.map +1 -0
  380. package/dist/types/src/processor/index.d.ts +3 -0
  381. package/dist/types/src/processor/index.d.ts.map +1 -0
  382. package/dist/types/src/processor/presets.d.ts +13 -0
  383. package/dist/types/src/processor/presets.d.ts.map +1 -0
  384. package/dist/types/src/processor/processor.d.ts +98 -0
  385. package/dist/types/src/processor/processor.d.ts.map +1 -0
  386. package/dist/types/src/processor/processor.test.d.ts.map +1 -0
  387. package/dist/types/src/queue-logger.d.ts +5 -5
  388. package/dist/types/src/queue-logger.d.ts.map +1 -1
  389. package/dist/types/src/testing/index.d.ts +3 -2
  390. package/dist/types/src/testing/index.d.ts.map +1 -1
  391. package/dist/types/src/testing/test-generator.d.ts +8 -0
  392. package/dist/types/src/testing/test-generator.d.ts.map +1 -0
  393. package/dist/types/src/testing/test-generator.test.d.ts +2 -0
  394. package/dist/types/src/testing/test-generator.test.d.ts.map +1 -0
  395. package/dist/types/src/testing/test-sequence.d.ts +4 -0
  396. package/dist/types/src/testing/test-sequence.d.ts.map +1 -0
  397. package/dist/types/src/testing/test-services.d.ts +2 -2
  398. package/dist/types/src/testing/test-services.d.ts.map +1 -1
  399. package/dist/types/src/testing/test-trace.d.ts +5 -0
  400. package/dist/types/src/testing/test-trace.d.ts.map +1 -0
  401. package/dist/types/src/testing/trace-timeline.test.d.ts +2 -0
  402. package/dist/types/src/testing/trace-timeline.test.d.ts.map +1 -0
  403. package/dist/types/src/translations.d.ts +2 -116
  404. package/dist/types/src/translations.d.ts.map +1 -1
  405. package/dist/types/src/types/Assistant.d.ts +36 -0
  406. package/dist/types/src/types/Assistant.d.ts.map +1 -0
  407. package/dist/types/src/types/AssistantCapabilities.d.ts +30 -0
  408. package/dist/types/src/types/AssistantCapabilities.d.ts.map +1 -0
  409. package/dist/types/src/types/AssistantEvents.d.ts +3 -0
  410. package/dist/types/src/types/AssistantEvents.d.ts.map +1 -0
  411. package/dist/types/src/types/AssistantOperation.d.ts +142 -0
  412. package/dist/types/src/types/AssistantOperation.d.ts.map +1 -0
  413. package/dist/types/src/types/Settings.d.ts +26 -0
  414. package/dist/types/src/types/Settings.d.ts.map +1 -0
  415. package/dist/types/src/types/index.d.ts +5 -3
  416. package/dist/types/src/types/index.d.ts.map +1 -1
  417. package/dist/types/src/types/service.d.ts +14 -213
  418. package/dist/types/src/types/service.d.ts.map +1 -1
  419. package/dist/types/tsconfig.tsbuildinfo +1 -1
  420. package/package.json +196 -105
  421. package/src/AssistantPlugin.node.ts +44 -0
  422. package/src/AssistantPlugin.test.ts +35 -0
  423. package/src/AssistantPlugin.ts +126 -0
  424. package/src/blueprints/assistant/blueprint.test.ts +46 -0
  425. package/src/blueprints/assistant/blueprint.ts +31 -0
  426. package/src/blueprints/assistant/index.ts +5 -0
  427. package/src/{experimental/transcription → blueprints}/index.ts +2 -0
  428. package/src/capabilities/ai-service.ts +30 -0
  429. package/src/capabilities/app-graph-builder.ts +176 -232
  430. package/src/capabilities/blueprint-definition.ts +56 -0
  431. package/src/capabilities/companion-chat-provisioner.ts +163 -0
  432. package/src/capabilities/create-object.ts +107 -0
  433. package/src/capabilities/edge-model-resolver.ts +33 -0
  434. package/src/capabilities/index.ts +23 -8
  435. package/src/capabilities/local-model-resolver.ts +48 -0
  436. package/src/capabilities/markdown.ts +40 -0
  437. package/src/capabilities/migrations.ts +28 -0
  438. package/src/capabilities/operation-handler.ts +16 -0
  439. package/src/capabilities/react-surface.tsx +153 -123
  440. package/src/capabilities/settings.ts +24 -12
  441. package/src/capabilities/state.ts +35 -0
  442. package/src/capabilities/toolkit.ts +13 -0
  443. package/src/components/AssistantSettings/AssistantSettings.stories.tsx +35 -0
  444. package/src/components/AssistantSettings/AssistantSettings.tsx +34 -96
  445. package/src/components/AssistantSettings/index.ts +2 -2
  446. package/src/components/Chat/Chat.tsx +270 -0
  447. package/src/components/Chat/context.ts +39 -0
  448. package/src/components/Chat/events.ts +63 -0
  449. package/src/components/Chat/index.ts +7 -0
  450. package/src/components/ChatPrompt/ChatActions.tsx +75 -0
  451. package/src/components/ChatPrompt/ChatMcpErrors.tsx +50 -0
  452. package/src/components/ChatPrompt/ChatOptions.stories.tsx +136 -0
  453. package/src/components/ChatPrompt/ChatOptions.tsx +444 -0
  454. package/src/components/ChatPrompt/ChatPresets.tsx +29 -0
  455. package/src/components/ChatPrompt/ChatPrompt.tsx +182 -0
  456. package/src/components/ChatPrompt/ChatReferences.tsx +57 -0
  457. package/src/components/ChatPrompt/ChatStatus.tsx +123 -0
  458. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +42 -0
  459. package/src/components/ChatPrompt/index.ts +12 -0
  460. package/src/components/ChatThread/Anchor.stories.tsx +95 -0
  461. package/src/components/ChatThread/ChatThread.stories.tsx +143 -0
  462. package/src/components/ChatThread/ChatThread.tsx +113 -0
  463. package/src/components/ChatThread/DEBUG.md +41 -0
  464. package/src/components/ChatThread/Link.tsx +26 -0
  465. package/src/components/ChatThread/MarkdownStream.stories.tsx +281 -0
  466. package/src/components/{AmbientDialog → ChatThread}/index.ts +1 -1
  467. package/src/components/ChatThread/registry.tsx +290 -0
  468. package/src/components/ChatThread/sync.test.ts +257 -0
  469. package/src/components/ChatThread/sync.ts +150 -0
  470. package/src/components/ChatThread/testing/reasoning.md +25 -0
  471. package/src/components/ChatThread/testing/thinking.md +21 -0
  472. package/src/components/ChatThread/testing/thread-1.md +30 -0
  473. package/src/components/ChatThread/testing/thread-2.md +56 -0
  474. package/src/components/ChatThread/testing/thread-widgets.md +79 -0
  475. package/src/components/ChatThread/tool-widget-state.test.ts +34 -0
  476. package/src/components/ChatThread/tool-widget-state.ts +48 -0
  477. package/src/components/ChatThread/widgets/FallbackWidget.tsx +26 -0
  478. package/src/components/ChatThread/widgets/ReasoningWidget.stories.tsx +68 -0
  479. package/src/components/ChatThread/widgets/ReasoningWidget.ts +133 -0
  480. package/src/components/ChatThread/widgets/ReferenceWidget.ts +33 -0
  481. package/src/components/ChatThread/widgets/SelectWidget.ts +39 -0
  482. package/src/components/ChatThread/widgets/StatsWidget.ts +31 -0
  483. package/src/components/ChatThread/widgets/StatusWidget.ts +53 -0
  484. package/src/components/ChatThread/widgets/SuggestionWidget.ts +41 -0
  485. package/src/components/ChatThread/widgets/SummaryWidget.tsx +27 -0
  486. package/src/components/ChatThread/widgets/ToolWidget.stories.tsx +55 -0
  487. package/src/components/ChatThread/widgets/ToolWidget.tsx +156 -0
  488. package/src/components/ChatThread/widgets/defaults.ts +8 -0
  489. package/src/components/ChatThread/widgets/index.ts +13 -0
  490. package/src/components/ProcessTree/ProcessTree.stories.tsx +83 -0
  491. package/src/components/ProcessTree/ProcessTree.tsx +119 -0
  492. package/src/components/ProcessTree/index.ts +5 -0
  493. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +55 -43
  494. package/src/components/TemplateEditor/TemplateEditor.tsx +62 -60
  495. package/src/components/TemplateEditor/TemplateForm.stories.tsx +41 -30
  496. package/src/components/TemplateEditor/TemplateForm.tsx +122 -102
  497. package/src/components/TemplateEditor/extensions/handlebars-extension.ts +274 -0
  498. package/src/components/TemplateEditor/extensions/index.ts +6 -0
  499. package/src/components/TemplateEditor/extensions/xml-extension.ts +64 -0
  500. package/src/components/ToolBlock/ToolBlock.tsx +144 -0
  501. package/src/components/ToolBlock/ToolBlockWidget.tsx +5 -0
  502. package/src/components/ToolBlock/index.ts +6 -0
  503. package/src/components/Toolbox/Toolbox.stories.tsx +22 -34
  504. package/src/components/Toolbox/Toolbox.tsx +91 -60
  505. package/src/components/index.ts +4 -13
  506. package/src/containers/AgentArticle/AgentArticle.stories.tsx +120 -0
  507. package/src/containers/AgentArticle/AgentArticle.tsx +200 -0
  508. package/src/containers/AgentArticle/index.ts +5 -0
  509. package/src/containers/AgentProperties/AgentProperties.stories.tsx +101 -0
  510. package/src/containers/AgentProperties/AgentProperties.tsx +127 -0
  511. package/src/containers/AgentProperties/index.ts +5 -0
  512. package/src/containers/BlueprintArticle/BlueprintArticle.tsx +29 -0
  513. package/src/containers/BlueprintArticle/index.ts +5 -0
  514. package/src/containers/ChatCompanion/ChatCompanion.tsx +129 -0
  515. package/src/containers/ChatCompanion/index.ts +5 -0
  516. package/src/containers/ChatContainer/ChatContainer.tsx +105 -0
  517. package/src/containers/ChatContainer/index.ts +5 -0
  518. package/src/containers/ChatDialog/ChatDialog.tsx +66 -0
  519. package/src/containers/ChatDialog/index.ts +5 -0
  520. package/src/containers/RoutineArticle/RoutineArticle.tsx +59 -0
  521. package/src/containers/RoutineArticle/index.ts +5 -0
  522. package/src/containers/RoutineList/RoutineList.stories.tsx +130 -0
  523. package/src/containers/RoutineList/RoutineList.tsx +50 -0
  524. package/src/containers/RoutineList/index.ts +5 -0
  525. package/src/containers/TracePanel/TracePanel.stories.tsx +285 -0
  526. package/src/containers/TracePanel/TracePanel.tsx +167 -0
  527. package/src/containers/TracePanel/dxn-extractor.test.ts +153 -0
  528. package/src/containers/TracePanel/dxn-extractor.ts +178 -0
  529. package/src/containers/TracePanel/execution-graph.test.ts +382 -0
  530. package/src/containers/TracePanel/execution-graph.ts +621 -0
  531. package/src/containers/TracePanel/index.ts +9 -0
  532. package/src/containers/TracePanel/testing/index.ts +6 -0
  533. package/src/containers/TracePanel/testing/simulated-agent.ts +114 -0
  534. package/src/containers/TracePanel/testing/snapshot-playback.ts +45 -0
  535. package/src/containers/TriggerStatus/TriggerStatus.tsx +129 -0
  536. package/src/containers/TriggerStatus/index.ts +5 -0
  537. package/src/containers/index.ts +16 -0
  538. package/src/extensions/index.ts +5 -0
  539. package/src/extensions/prompt-extension.ts +111 -0
  540. package/src/hooks/index.ts +12 -6
  541. package/src/hooks/useBlueprintRegistry.ts +109 -0
  542. package/src/hooks/useChatKeymap.ts +52 -0
  543. package/src/hooks/useChatProcessor.ts +90 -0
  544. package/src/hooks/useChatServices.ts +26 -0
  545. package/src/hooks/useChatToolbarActions.ts +122 -0
  546. package/src/hooks/useContextBinder.ts +43 -0
  547. package/src/hooks/useContextObjects.ts +50 -0
  548. package/src/hooks/useDebug.ts +38 -0
  549. package/src/hooks/useFilteredTypes.ts +37 -0
  550. package/src/hooks/useFlush.ts +35 -0
  551. package/src/hooks/useOnline.ts +10 -0
  552. package/src/hooks/usePresets.ts +45 -0
  553. package/src/hooks/useReferencesProvider.ts +54 -0
  554. package/src/index.ts +1 -5
  555. package/src/meta.ts +15 -9
  556. package/src/operations/create-chat.ts +78 -0
  557. package/src/operations/ensure-companion-chat.ts +63 -0
  558. package/src/operations/index.ts +15 -0
  559. package/src/operations/on-create-space.ts +24 -0
  560. package/src/operations/prompt.test.ts +77 -0
  561. package/src/operations/resolve-navigation-targets.ts +26 -0
  562. package/src/operations/run-prompt-in-new-chat.ts +112 -0
  563. package/src/operations/set-current-chat.ts +49 -0
  564. package/src/operations/update-chat-name.ts +61 -0
  565. package/src/plugin.ts +11 -0
  566. package/src/processor/index.ts +6 -0
  567. package/src/processor/presets.ts +68 -0
  568. package/src/processor/processor.test.ts +40 -0
  569. package/src/processor/processor.ts +352 -0
  570. package/src/queue-logger.ts +39 -29
  571. package/src/testing/data/trace-timeline.dx.json +4657 -0
  572. package/src/testing/index.ts +3 -2
  573. package/src/testing/test-generator.test.ts +81 -0
  574. package/src/testing/test-generator.ts +299 -0
  575. package/src/testing/test-sequence.ts +26 -0
  576. package/src/testing/test-services.ts +10 -14
  577. package/src/testing/test-trace.ts +20 -0
  578. package/src/testing/trace-timeline.conversations.json +1 -0
  579. package/src/testing/trace-timeline.test.ts +250 -0
  580. package/src/translations.ts +164 -55
  581. package/src/types/Assistant.ts +26 -0
  582. package/src/types/AssistantCapabilities.ts +35 -0
  583. package/src/types/AssistantEvents.ts +11 -0
  584. package/src/types/AssistantOperation.ts +128 -0
  585. package/src/types/Settings.ts +76 -0
  586. package/src/types/index.ts +10 -3
  587. package/src/types/service.ts +27 -16
  588. package/src/vite-env.d.ts +30 -0
  589. package/dist/lib/browser/AssistantDialog-MQOOR364.mjs +0 -47
  590. package/dist/lib/browser/AssistantDialog-MQOOR364.mjs.map +0 -7
  591. package/dist/lib/browser/BlueprintContainer-AT5Y7EXG.mjs +0 -321
  592. package/dist/lib/browser/BlueprintContainer-AT5Y7EXG.mjs.map +0 -7
  593. package/dist/lib/browser/ChatContainer-C2NEAS3A.mjs +0 -40
  594. package/dist/lib/browser/ChatContainer-C2NEAS3A.mjs.map +0 -7
  595. package/dist/lib/browser/TemplateContainer-QQHVOTSI.mjs +0 -28
  596. package/dist/lib/browser/TemplateContainer-QQHVOTSI.mjs.map +0 -7
  597. package/dist/lib/browser/ai-client-MK2ZZII2.mjs +0 -39
  598. package/dist/lib/browser/ai-client-MK2ZZII2.mjs.map +0 -7
  599. package/dist/lib/browser/app-graph-builder-E4H5DCOJ.mjs +0 -225
  600. package/dist/lib/browser/app-graph-builder-E4H5DCOJ.mjs.map +0 -7
  601. package/dist/lib/browser/chunk-AAOKC2JN.mjs +0 -208
  602. package/dist/lib/browser/chunk-AAOKC2JN.mjs.map +0 -7
  603. package/dist/lib/browser/chunk-BI6AHRNJ.mjs +0 -157
  604. package/dist/lib/browser/chunk-BI6AHRNJ.mjs.map +0 -7
  605. package/dist/lib/browser/chunk-JO4W3MF7.mjs +0 -2101
  606. package/dist/lib/browser/chunk-JO4W3MF7.mjs.map +0 -7
  607. package/dist/lib/browser/chunk-JQFUME3B.mjs +0 -87
  608. package/dist/lib/browser/chunk-JQFUME3B.mjs.map +0 -7
  609. package/dist/lib/browser/chunk-MEGMOFJB.mjs +0 -16
  610. package/dist/lib/browser/chunk-MEGMOFJB.mjs.map +0 -7
  611. package/dist/lib/browser/chunk-Q6UZ4F3H.mjs +0 -96
  612. package/dist/lib/browser/chunk-Q6UZ4F3H.mjs.map +0 -7
  613. package/dist/lib/browser/chunk-UE3IZ4PN.mjs +0 -15
  614. package/dist/lib/browser/chunk-UE3IZ4PN.mjs.map +0 -7
  615. package/dist/lib/browser/chunk-XOZ7YMO3.mjs +0 -20
  616. package/dist/lib/browser/chunk-XOZ7YMO3.mjs.map +0 -7
  617. package/dist/lib/browser/index.mjs +0 -280
  618. package/dist/lib/browser/index.mjs.map +0 -7
  619. package/dist/lib/browser/intent-resolver-3UICTGPM.mjs +0 -43
  620. package/dist/lib/browser/intent-resolver-3UICTGPM.mjs.map +0 -7
  621. package/dist/lib/browser/meta.json +0 -1
  622. package/dist/lib/browser/react-surface-LXCNUSZN.mjs +0 -159
  623. package/dist/lib/browser/react-surface-LXCNUSZN.mjs.map +0 -7
  624. package/dist/lib/browser/settings-XRHXVWGB.mjs +0 -22
  625. package/dist/lib/browser/settings-XRHXVWGB.mjs.map +0 -7
  626. package/dist/lib/browser/types/index.mjs +0 -32
  627. package/dist/lib/node/AssistantDialog-AN4Z6YUV.cjs +0 -73
  628. package/dist/lib/node/AssistantDialog-AN4Z6YUV.cjs.map +0 -7
  629. package/dist/lib/node/BlueprintContainer-NOWLDYCZ.cjs +0 -344
  630. package/dist/lib/node/BlueprintContainer-NOWLDYCZ.cjs.map +0 -7
  631. package/dist/lib/node/ChatContainer-VKYBQHUB.cjs +0 -68
  632. package/dist/lib/node/ChatContainer-VKYBQHUB.cjs.map +0 -7
  633. package/dist/lib/node/TemplateContainer-JZF2DCCG.cjs +0 -58
  634. package/dist/lib/node/TemplateContainer-JZF2DCCG.cjs.map +0 -7
  635. package/dist/lib/node/ai-client-7HNSMUMT.cjs +0 -53
  636. package/dist/lib/node/ai-client-7HNSMUMT.cjs.map +0 -7
  637. package/dist/lib/node/app-graph-builder-PPR5B5KU.cjs +0 -235
  638. package/dist/lib/node/app-graph-builder-PPR5B5KU.cjs.map +0 -7
  639. package/dist/lib/node/chunk-4EEWTDQK.cjs +0 -117
  640. package/dist/lib/node/chunk-4EEWTDQK.cjs.map +0 -7
  641. package/dist/lib/node/chunk-FUAGEO7Q.cjs +0 -52
  642. package/dist/lib/node/chunk-FUAGEO7Q.cjs.map +0 -7
  643. package/dist/lib/node/chunk-HRNIUYVQ.cjs +0 -128
  644. package/dist/lib/node/chunk-HRNIUYVQ.cjs.map +0 -7
  645. package/dist/lib/node/chunk-IKZBMHSW.cjs +0 -184
  646. package/dist/lib/node/chunk-IKZBMHSW.cjs.map +0 -7
  647. package/dist/lib/node/chunk-LMDJEGZ2.cjs +0 -233
  648. package/dist/lib/node/chunk-LMDJEGZ2.cjs.map +0 -7
  649. package/dist/lib/node/chunk-NIDICM57.cjs +0 -2080
  650. package/dist/lib/node/chunk-NIDICM57.cjs.map +0 -7
  651. package/dist/lib/node/chunk-P74TWGMG.cjs +0 -44
  652. package/dist/lib/node/chunk-P74TWGMG.cjs.map +0 -7
  653. package/dist/lib/node/chunk-QGPWY6GW.cjs +0 -34
  654. package/dist/lib/node/chunk-QGPWY6GW.cjs.map +0 -7
  655. package/dist/lib/node/index.cjs +0 -289
  656. package/dist/lib/node/index.cjs.map +0 -7
  657. package/dist/lib/node/intent-resolver-QSWGTKON.cjs +0 -58
  658. package/dist/lib/node/intent-resolver-QSWGTKON.cjs.map +0 -7
  659. package/dist/lib/node/meta.json +0 -1
  660. package/dist/lib/node/react-surface-D3NBYRZ6.cjs +0 -172
  661. package/dist/lib/node/react-surface-D3NBYRZ6.cjs.map +0 -7
  662. package/dist/lib/node/settings-2JXLKYGE.cjs +0 -36
  663. package/dist/lib/node/settings-2JXLKYGE.cjs.map +0 -7
  664. package/dist/lib/node/types/index.cjs +0 -54
  665. package/dist/lib/node/types/index.cjs.map +0 -7
  666. package/dist/lib/node-esm/AssistantDialog-6WEMLUPU.mjs +0 -48
  667. package/dist/lib/node-esm/AssistantDialog-6WEMLUPU.mjs.map +0 -7
  668. package/dist/lib/node-esm/BlueprintContainer-STOJAVML.mjs +0 -322
  669. package/dist/lib/node-esm/BlueprintContainer-STOJAVML.mjs.map +0 -7
  670. package/dist/lib/node-esm/ChatContainer-3MVBTUJN.mjs +0 -41
  671. package/dist/lib/node-esm/ChatContainer-3MVBTUJN.mjs.map +0 -7
  672. package/dist/lib/node-esm/TemplateContainer-SOEWY2ZN.mjs +0 -29
  673. package/dist/lib/node-esm/TemplateContainer-SOEWY2ZN.mjs.map +0 -7
  674. package/dist/lib/node-esm/ai-client-XGZBJ6BE.mjs +0 -40
  675. package/dist/lib/node-esm/ai-client-XGZBJ6BE.mjs.map +0 -7
  676. package/dist/lib/node-esm/app-graph-builder-3SY5MBIK.mjs +0 -226
  677. package/dist/lib/node-esm/app-graph-builder-3SY5MBIK.mjs.map +0 -7
  678. package/dist/lib/node-esm/chunk-34EX6E5Q.mjs +0 -18
  679. package/dist/lib/node-esm/chunk-34EX6E5Q.mjs.map +0 -7
  680. package/dist/lib/node-esm/chunk-3UEZLJ2V.mjs +0 -16
  681. package/dist/lib/node-esm/chunk-3UEZLJ2V.mjs.map +0 -7
  682. package/dist/lib/node-esm/chunk-BB2TAT4P.mjs +0 -22
  683. package/dist/lib/node-esm/chunk-BB2TAT4P.mjs.map +0 -7
  684. package/dist/lib/node-esm/chunk-CDAILLCU.mjs +0 -98
  685. package/dist/lib/node-esm/chunk-CDAILLCU.mjs.map +0 -7
  686. package/dist/lib/node-esm/chunk-J6UXXZGJ.mjs +0 -209
  687. package/dist/lib/node-esm/chunk-J6UXXZGJ.mjs.map +0 -7
  688. package/dist/lib/node-esm/chunk-OD574YIU.mjs +0 -2102
  689. package/dist/lib/node-esm/chunk-OD574YIU.mjs.map +0 -7
  690. package/dist/lib/node-esm/chunk-OYN6HLXZ.mjs +0 -88
  691. package/dist/lib/node-esm/chunk-OYN6HLXZ.mjs.map +0 -7
  692. package/dist/lib/node-esm/chunk-UCOFKNKN.mjs +0 -158
  693. package/dist/lib/node-esm/chunk-UCOFKNKN.mjs.map +0 -7
  694. package/dist/lib/node-esm/index.mjs +0 -281
  695. package/dist/lib/node-esm/index.mjs.map +0 -7
  696. package/dist/lib/node-esm/intent-resolver-E6MXTYAU.mjs +0 -44
  697. package/dist/lib/node-esm/intent-resolver-E6MXTYAU.mjs.map +0 -7
  698. package/dist/lib/node-esm/meta.json +0 -1
  699. package/dist/lib/node-esm/react-surface-7HA5EDWY.mjs +0 -160
  700. package/dist/lib/node-esm/react-surface-7HA5EDWY.mjs.map +0 -7
  701. package/dist/lib/node-esm/settings-5IAY6BT4.mjs +0 -23
  702. package/dist/lib/node-esm/settings-5IAY6BT4.mjs.map +0 -7
  703. package/dist/lib/node-esm/types/index.mjs +0 -33
  704. package/dist/types/src/capabilities/ai-client.d.ts +0 -5
  705. package/dist/types/src/capabilities/ai-client.d.ts.map +0 -1
  706. package/dist/types/src/capabilities/capabilities.d.ts +0 -6
  707. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  708. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  709. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  710. package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts +0 -10
  711. package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts.map +0 -1
  712. package/dist/types/src/components/AmbientDialog/AmbientDialog.stories.d.ts +0 -8
  713. package/dist/types/src/components/AmbientDialog/AmbientDialog.stories.d.ts.map +0 -1
  714. package/dist/types/src/components/AmbientDialog/index.d.ts +0 -2
  715. package/dist/types/src/components/AmbientDialog/index.d.ts.map +0 -1
  716. package/dist/types/src/components/AssistantDialog.d.ts +0 -7
  717. package/dist/types/src/components/AssistantDialog.d.ts.map +0 -1
  718. package/dist/types/src/components/BlueprintContainer.d.ts +0 -9
  719. package/dist/types/src/components/BlueprintContainer.d.ts.map +0 -1
  720. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts +0 -13
  721. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts.map +0 -1
  722. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.stories.d.ts +0 -8
  723. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.stories.d.ts.map +0 -1
  724. package/dist/types/src/components/BlueprintEditor/index.d.ts +0 -2
  725. package/dist/types/src/components/BlueprintEditor/index.d.ts.map +0 -1
  726. package/dist/types/src/components/ChatContainer.d.ts +0 -11
  727. package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
  728. package/dist/types/src/components/Prompt/Prompt.d.ts +0 -23
  729. package/dist/types/src/components/Prompt/Prompt.d.ts.map +0 -1
  730. package/dist/types/src/components/Prompt/Prompt.stories.d.ts +0 -13
  731. package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +0 -1
  732. package/dist/types/src/components/Prompt/PromptBar.d.ts +0 -16
  733. package/dist/types/src/components/Prompt/PromptBar.d.ts.map +0 -1
  734. package/dist/types/src/components/Prompt/PromptBar.stories.d.ts +0 -9
  735. package/dist/types/src/components/Prompt/PromptBar.stories.d.ts.map +0 -1
  736. package/dist/types/src/components/Prompt/autocomplete.d.ts +0 -25
  737. package/dist/types/src/components/Prompt/autocomplete.d.ts.map +0 -1
  738. package/dist/types/src/components/Prompt/index.d.ts +0 -3
  739. package/dist/types/src/components/Prompt/index.d.ts.map +0 -1
  740. package/dist/types/src/components/Prompt/references.d.ts +0 -30
  741. package/dist/types/src/components/Prompt/references.d.ts.map +0 -1
  742. package/dist/types/src/components/PromptSettings.d.ts +0 -6
  743. package/dist/types/src/components/PromptSettings.d.ts.map +0 -1
  744. package/dist/types/src/components/TemplateContainer.d.ts +0 -8
  745. package/dist/types/src/components/TemplateContainer.d.ts.map +0 -1
  746. package/dist/types/src/components/Thread/Thread.d.ts +0 -28
  747. package/dist/types/src/components/Thread/Thread.d.ts.map +0 -1
  748. package/dist/types/src/components/Thread/Thread.stories.d.ts +0 -11
  749. package/dist/types/src/components/Thread/Thread.stories.d.ts.map +0 -1
  750. package/dist/types/src/components/Thread/ThreadContainer.d.ts +0 -13
  751. package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +0 -1
  752. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts +0 -16
  753. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +0 -1
  754. package/dist/types/src/components/Thread/ThreadMessage.d.ts +0 -16
  755. package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +0 -1
  756. package/dist/types/src/components/Thread/ToolInvocations.d.ts +0 -13
  757. package/dist/types/src/components/Thread/ToolInvocations.d.ts.map +0 -1
  758. package/dist/types/src/components/Thread/index.d.ts +0 -3
  759. package/dist/types/src/components/Thread/index.d.ts.map +0 -1
  760. package/dist/types/src/components/Thread/reducer.d.ts +0 -12
  761. package/dist/types/src/components/Thread/reducer.d.ts.map +0 -1
  762. package/dist/types/src/events.d.ts +0 -4
  763. package/dist/types/src/events.d.ts.map +0 -1
  764. package/dist/types/src/experimental/transcription/index.d.ts +0 -1
  765. package/dist/types/src/experimental/transcription/index.d.ts.map +0 -1
  766. package/dist/types/src/hooks/processor.d.ts +0 -72
  767. package/dist/types/src/hooks/processor.d.ts.map +0 -1
  768. package/dist/types/src/hooks/processor.test.d.ts.map +0 -1
  769. package/dist/types/src/hooks/useContextProvider.d.ts +0 -17
  770. package/dist/types/src/hooks/useContextProvider.d.ts.map +0 -1
  771. package/dist/types/src/hooks/useMessageQueue.d.ts +0 -42
  772. package/dist/types/src/hooks/useMessageQueue.d.ts.map +0 -1
  773. package/dist/types/src/hooks/useServices.d.ts +0 -7
  774. package/dist/types/src/hooks/useServices.d.ts.map +0 -1
  775. package/dist/types/src/hooks/useTextInputEvents.d.ts +0 -13
  776. package/dist/types/src/hooks/useTextInputEvents.d.ts.map +0 -1
  777. package/dist/types/src/parser/filter-generator.d.ts +0 -4
  778. package/dist/types/src/parser/filter-generator.d.ts.map +0 -1
  779. package/dist/types/src/parser/filter-generator.test.d.ts +0 -2
  780. package/dist/types/src/parser/filter-generator.test.d.ts.map +0 -1
  781. package/dist/types/src/parser/index.d.ts +0 -4
  782. package/dist/types/src/parser/index.d.ts.map +0 -1
  783. package/dist/types/src/parser/query-parser.d.ts +0 -15
  784. package/dist/types/src/parser/query-parser.d.ts.map +0 -1
  785. package/dist/types/src/parser/query-parser.test.d.ts +0 -2
  786. package/dist/types/src/parser/query-parser.test.d.ts.map +0 -1
  787. package/dist/types/src/parser/types.d.ts +0 -24
  788. package/dist/types/src/parser/types.d.ts.map +0 -1
  789. package/dist/types/src/stories/Prompt.stories.d.ts +0 -8
  790. package/dist/types/src/stories/Prompt.stories.d.ts.map +0 -1
  791. package/dist/types/src/stories/Query.stories.d.ts +0 -19
  792. package/dist/types/src/stories/Query.stories.d.ts.map +0 -1
  793. package/dist/types/src/stories/Research.stories.d.ts +0 -15
  794. package/dist/types/src/stories/Research.stories.d.ts.map +0 -1
  795. package/dist/types/src/stories/test-data.d.ts +0 -3
  796. package/dist/types/src/stories/test-data.d.ts.map +0 -1
  797. package/dist/types/src/stories/testing.d.ts +0 -12
  798. package/dist/types/src/stories/testing.d.ts.map +0 -1
  799. package/dist/types/src/testing/test-blueprint.d.ts +0 -8
  800. package/dist/types/src/testing/test-blueprint.d.ts.map +0 -1
  801. package/dist/types/src/testing/test-functions.d.ts +0 -3
  802. package/dist/types/src/testing/test-functions.d.ts.map +0 -1
  803. package/dist/types/src/tools/function.d.ts +0 -5
  804. package/dist/types/src/tools/function.d.ts.map +0 -1
  805. package/dist/types/src/tools/index.d.ts +0 -3
  806. package/dist/types/src/tools/index.d.ts.map +0 -1
  807. package/dist/types/src/tools/openapi.d.ts +0 -10
  808. package/dist/types/src/tools/openapi.d.ts.map +0 -1
  809. package/dist/types/src/tools/openapi.test.d.ts +0 -2
  810. package/dist/types/src/tools/openapi.test.d.ts.map +0 -1
  811. package/dist/types/src/types/chat.d.ts +0 -23
  812. package/dist/types/src/types/chat.d.ts.map +0 -1
  813. package/dist/types/src/types/template.d.ts +0 -56
  814. package/dist/types/src/types/template.d.ts.map +0 -1
  815. package/dist/types/src/types/types.d.ts +0 -50
  816. package/dist/types/src/types/types.d.ts.map +0 -1
  817. package/src/AssistantPlugin.tsx +0 -125
  818. package/src/capabilities/ai-client.ts +0 -42
  819. package/src/capabilities/capabilities.ts +0 -15
  820. package/src/capabilities/intent-resolver.ts +0 -45
  821. package/src/components/AmbientDialog/AmbientDialog.stories.tsx +0 -84
  822. package/src/components/AmbientDialog/AmbientDialog.tsx +0 -117
  823. package/src/components/AssistantDialog.tsx +0 -37
  824. package/src/components/BlueprintContainer.tsx +0 -148
  825. package/src/components/BlueprintEditor/BlueprintEditor.stories.tsx +0 -32
  826. package/src/components/BlueprintEditor/BlueprintEditor.tsx +0 -50
  827. package/src/components/BlueprintEditor/index.ts +0 -5
  828. package/src/components/ChatContainer.tsx +0 -39
  829. package/src/components/Prompt/Prompt.stories.tsx +0 -121
  830. package/src/components/Prompt/Prompt.tsx +0 -124
  831. package/src/components/Prompt/PromptBar.stories.tsx +0 -69
  832. package/src/components/Prompt/PromptBar.tsx +0 -105
  833. package/src/components/Prompt/autocomplete.ts +0 -218
  834. package/src/components/Prompt/index.ts +0 -6
  835. package/src/components/Prompt/references.ts +0 -180
  836. package/src/components/PromptSettings.tsx +0 -91
  837. package/src/components/TemplateContainer.tsx +0 -23
  838. package/src/components/Thread/Thread.stories.tsx +0 -201
  839. package/src/components/Thread/Thread.tsx +0 -118
  840. package/src/components/Thread/ThreadContainer.stories.tsx +0 -283
  841. package/src/components/Thread/ThreadContainer.tsx +0 -105
  842. package/src/components/Thread/ThreadMessage.tsx +0 -234
  843. package/src/components/Thread/ToolInvocations.tsx +0 -106
  844. package/src/components/Thread/index.ts +0 -6
  845. package/src/components/Thread/reducer.ts +0 -52
  846. package/src/events.ts +0 -11
  847. package/src/hooks/processor.test.ts +0 -15
  848. package/src/hooks/processor.ts +0 -238
  849. package/src/hooks/useChatProcessor.tsx +0 -97
  850. package/src/hooks/useContextProvider.ts +0 -55
  851. package/src/hooks/useMessageQueue.ts +0 -22
  852. package/src/hooks/useServices.ts +0 -28
  853. package/src/hooks/useTextInputEvents.ts +0 -49
  854. package/src/parser/filter-generator.test.ts +0 -32
  855. package/src/parser/filter-generator.ts +0 -81
  856. package/src/parser/index.ts +0 -7
  857. package/src/parser/query-parser.test.ts +0 -139
  858. package/src/parser/query-parser.ts +0 -199
  859. package/src/parser/types.ts +0 -34
  860. package/src/shims.d.ts +0 -8
  861. package/src/stories/Prompt.stories.tsx +0 -60
  862. package/src/stories/Query.stories.tsx +0 -514
  863. package/src/stories/Research.stories.tsx +0 -482
  864. package/src/stories/test-data.ts +0 -128
  865. package/src/stories/testing.ts +0 -60
  866. package/src/testing/test-blueprint.ts +0 -58
  867. package/src/testing/test-functions.ts +0 -11
  868. package/src/tools/function.ts +0 -46
  869. package/src/tools/index.ts +0 -6
  870. package/src/tools/openapi.test.ts +0 -217
  871. package/src/tools/openapi.ts +0 -338
  872. package/src/types/chat.ts +0 -32
  873. package/src/types/template.ts +0 -66
  874. package/src/types/types.ts +0 -48
  875. package/src/typings.d.ts +0 -9
  876. /package/dist/lib/{browser/types/index.mjs.map → neutral/ChatContainer-X3R4ALHT.mjs.map} +0 -0
  877. /package/dist/lib/{node-esm/types → neutral/blueprints}/index.mjs.map +0 -0
  878. /package/dist/types/src/{hooks → processor}/processor.test.d.ts +0 -0
@@ -0,0 +1,290 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { log } from '@dxos/log';
8
+ import { ContentBlock, type Message } from '@dxos/types';
9
+ import { type XmlWidgetRegistry, getXmlTextChild } from '@dxos/ui-editor';
10
+
11
+ import { type Assistant } from '../../types';
12
+ import { type BlockRenderer, type MessageThreadContext } from './sync';
13
+ import { applyToolBlockToWidgetState } from './tool-widget-state';
14
+ import {
15
+ FallbackWidget,
16
+ ReasoningWidget,
17
+ ReferenceWidget,
18
+ SelectWidget,
19
+ SuggestionWidget,
20
+ StatsWidget,
21
+ SummaryWidget,
22
+ ToolWidget,
23
+ StatusWidget,
24
+ } from './widgets';
25
+
26
+ /**
27
+ * Custom XML tags registry.
28
+ *
29
+ * NOTE: `<prompt>` has no widget — it is rendered via mark + line decorations
30
+ * (`xmlBlockDecoration`) in MarkdownStream so the prompt text remains part of the document
31
+ * and can be highlighted by `xmlFormatting`. It is still listed here so the markdown block
32
+ * parser (`xmlBlockParsers`) knows to keep `<prompt>...</prompt>` as a single HTMLBlock
33
+ * — otherwise an unregistered prompt opens a Paragraph that lazy-continues into the
34
+ * following lines and breaks parsing of subsequent multi-line tags (e.g. a `<reasoning>`
35
+ * block whose content contains an ordered list).
36
+ */
37
+ export const componentRegistry: XmlWidgetRegistry = {
38
+ //
39
+ // Block-only (no widget — see note above).
40
+ //
41
+
42
+ prompt: {
43
+ block: true,
44
+ },
45
+
46
+ //
47
+ // DOM Widgets
48
+ //
49
+
50
+ synthetic: {
51
+ block: true,
52
+ factory: ({ children, range }) => {
53
+ const text = getXmlTextChild(children);
54
+ // TODO(dmaretskyi): Synthetic blocks are "user"-turn messages generated by the system, i.e. and event from a trigger, an email-encoded to JSON, etc.
55
+ // They are meant to start agent, to process the event without looking like user-authored prompt.
56
+ // Create a new widget type for them.
57
+ return text ? new ReasoningWidget(text, range.from) : null;
58
+ },
59
+ },
60
+ reasoning: {
61
+ block: true,
62
+ streaming: true,
63
+ factory: ({ children, range }) => {
64
+ const text = getXmlTextChild(children);
65
+ return text ? new ReasoningWidget(text, range.from) : null;
66
+ },
67
+ },
68
+ reference: {
69
+ block: false,
70
+ factory: ({ children, ref }) => {
71
+ const text = getXmlTextChild(children);
72
+ return text && ref ? new ReferenceWidget(text, ref) : null;
73
+ },
74
+ },
75
+ select: {
76
+ block: true,
77
+ factory: ({ children }) => {
78
+ const options = children
79
+ ?.map((option: any) => option._tag === 'option' && getXmlTextChild(option.children))
80
+ .filter(Boolean);
81
+ return options?.length ? new SelectWidget(options) : null;
82
+ },
83
+ },
84
+ suggestion: {
85
+ block: true,
86
+ factory: ({ children }) => {
87
+ const text = getXmlTextChild(children);
88
+ return text ? new SuggestionWidget(text) : null;
89
+ },
90
+ },
91
+ stats: {
92
+ block: true,
93
+ factory: ({ children }) => {
94
+ const text = getXmlTextChild(children);
95
+ return text ? new StatsWidget(text) : null;
96
+ },
97
+ },
98
+ status: {
99
+ block: true,
100
+ streaming: true,
101
+ factory: ({ children }) => {
102
+ const text = getXmlTextChild(children);
103
+ return text ? new StatusWidget(text) : null;
104
+ },
105
+ },
106
+
107
+ //
108
+ // React Widgets (portaled outside of the editor)
109
+ //
110
+
111
+ summary: {
112
+ block: true,
113
+ Component: SummaryWidget,
114
+ },
115
+ toolCall: {
116
+ block: true,
117
+ Component: (props) => (
118
+ <div className='py-2'>
119
+ <ToolWidget {...props} />
120
+ </div>
121
+ ),
122
+ },
123
+ toolResult: {
124
+ block: true,
125
+ Component: FallbackWidget,
126
+ },
127
+ toolkit: {
128
+ block: true,
129
+ Component: FallbackWidget,
130
+ },
131
+
132
+ //
133
+ // Fallback
134
+ //
135
+
136
+ json: {
137
+ block: true,
138
+ Component: FallbackWidget,
139
+ },
140
+ };
141
+
142
+ /**
143
+ * Convert block to markdown.
144
+ */
145
+ export const blockToMarkdown: BlockRenderer = createBlockRenderer('normal');
146
+
147
+ /**
148
+ * Create a {@link BlockRenderer} that filters blocks based on the chat view type.
149
+ *
150
+ * - `summary`: only user prompts.
151
+ * - `normal`: user prompts + assistant text + tool calls + summary/select/suggestion/reference + status. Hides reasoning.
152
+ * - `thinking`: same as normal plus reasoning.
153
+ * - `debug`: renders every block (raw fallbacks visible).
154
+ */
155
+ export function createBlockRenderer(viewType: Assistant.ChatView | undefined): BlockRenderer {
156
+ return (context, message, block) => {
157
+ if (!isBlockVisible(viewType, message, block)) {
158
+ return;
159
+ }
160
+ let str = blockToMarkdownImpl(context, message, block);
161
+ if (str && !block.pending) {
162
+ // Use a blank line as the block separator so each rendered block parses as its own
163
+ // markdown block. A single newline lets CommonMark absorb a following `<prompt>` (an
164
+ // HTML type-7 tag, which can't interrupt an open paragraph) into the previous
165
+ // paragraph, rendering the prompt bubble inline next to the prior assistant text.
166
+ return (str += '\n');
167
+ }
168
+ return str;
169
+ };
170
+ }
171
+
172
+ const isBlockVisible = (
173
+ viewType: Assistant.ChatView | undefined,
174
+ message: Message.Message,
175
+ block: ContentBlock.Any,
176
+ ): boolean => {
177
+ switch (viewType) {
178
+ case 'debug':
179
+ return true;
180
+ case 'normal':
181
+ return block._tag !== 'reasoning';
182
+ case 'summary':
183
+ // Show only conversational text (user prompts + assistant replies); hide reasoning,
184
+ // tool calls, status, stats, and synthetic system messages.
185
+ return block._tag === 'text' && (block as ContentBlock.Text).disposition !== 'synthetic';
186
+ case 'thinking':
187
+ default:
188
+ return true;
189
+ }
190
+ };
191
+
192
+ const blockToMarkdownImpl = (context: MessageThreadContext, message: Message.Message, block: ContentBlock.Any) => {
193
+ log('blockToMarkdown', { block: JSON.stringify(block) });
194
+ switch (block._tag) {
195
+ case 'text': {
196
+ if (message.sender.role === 'user') {
197
+ if (block.disposition === 'synthetic') {
198
+ return renderXMLBlock('synthetic', { content: block.text, pending: block.pending });
199
+ } else {
200
+ return `\n<prompt>${block.text}</prompt>`;
201
+ }
202
+ } else {
203
+ const text = block.text.trim();
204
+ if (text.length > 0) {
205
+ return text;
206
+ }
207
+ }
208
+ break;
209
+ }
210
+
211
+ case 'reference': {
212
+ if (block.pending) {
213
+ return;
214
+ }
215
+ const dxn = block.reference.dxn;
216
+ return `<reference ref="${dxn.toString()}">${context.getObjectLabel(dxn)}</reference>`;
217
+ }
218
+
219
+ case 'suggestion': {
220
+ if (block.pending) {
221
+ return;
222
+ }
223
+ return `<suggestion>${block.text}</suggestion>`;
224
+ }
225
+
226
+ case 'select': {
227
+ if (block.pending || block.options.length === 0) {
228
+ return;
229
+ }
230
+ return `<select>${block.options.map((option) => `<option>${option}</option>`).join('')}</select>`;
231
+ }
232
+
233
+ case 'toolCall': {
234
+ applyToolBlockToWidgetState(context, block);
235
+ return `<toolCall id="${block.toolCallId}" />`;
236
+ }
237
+
238
+ case 'toolResult': {
239
+ // TODO(dmaretskyi): the parameter could be undefined, perhaps tool blocks are not arriving in order.
240
+ applyToolBlockToWidgetState(context, block);
241
+ break;
242
+ }
243
+
244
+ case 'stats': {
245
+ return '';
246
+ }
247
+
248
+ case 'reasoning': {
249
+ let text = block.reasoningText ?? block.redactedText;
250
+ if (!text) {
251
+ return;
252
+ }
253
+ return renderXMLBlock('reasoning', { content: text, pending: block.pending });
254
+ }
255
+
256
+ case 'summary': {
257
+ return renderXMLBlock('summary', { content: block.content, pending: block.pending });
258
+ }
259
+
260
+ case 'status': {
261
+ return renderXMLBlock('status', { content: block.statusText, pending: block.pending });
262
+ }
263
+
264
+ default: {
265
+ // TODO(burdon): Needs stable ID.
266
+ return `<json id="${message.id}">\n${JSON.stringify(block)}\n</json>`;
267
+ }
268
+ }
269
+ };
270
+
271
+ /**
272
+ * Escape text embedded in generated XML so the mixed XML parser does not treat `&`, `<`, `>` as markup.
273
+ */
274
+ const escapeXmlTextContent = (raw: string): string =>
275
+ raw.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
276
+
277
+ const renderXMLBlock = (tag: string, opts: { content?: string; pending?: boolean; attributes?: string }) => {
278
+ // Replace paragraph breaks so that the markdown parser does not split the content into multiple paragraphs.
279
+ // NOTE: do not strip leading list-marker prefixes (`-`, `*`, `1. `, ...) per line — the streaming
280
+ // tag's range is replaced atomically by the XML widget so the inner markdown is never user-visible,
281
+ // and stripping can collapse a line to empty mid-stream (e.g. when only `1. ` has arrived), breaking
282
+ // the prefix-extension contract that `MessageSyncer` relies on for incremental appends.
283
+ const content = escapeXmlTextContent((opts.content ?? '').replace(/\n\n/g, ' ').trim());
284
+
285
+ if (opts.pending) {
286
+ return `<${tag}${opts.attributes ? ` ${opts.attributes}` : ''}>${content}`;
287
+ } else {
288
+ return `<${tag}${opts.attributes ? ` ${opts.attributes}` : ''}>${content}</${tag}>`;
289
+ }
290
+ };
@@ -0,0 +1,257 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // @vitest-environment jsdom
6
+
7
+ import { EditorView } from '@codemirror/view';
8
+ import { describe, it } from '@effect/vitest';
9
+ import * as Effect from 'effect/Effect';
10
+
11
+ import { Obj } from '@dxos/echo';
12
+ import { type Mutable } from '@dxos/echo/internal';
13
+ import { type ContentBlock, type Message } from '@dxos/types';
14
+
15
+ import { createMessage } from '#testing';
16
+
17
+ import { createBlockRenderer } from './registry';
18
+ import { type BlockRenderer, MessageSyncer, type MessageThreadContext, type TextModel } from './sync';
19
+
20
+ class TestDocument implements TextModel {
21
+ private readonly _view = new EditorView({ extensions: [] });
22
+
23
+ get length() {
24
+ return this._view.state.doc.length;
25
+ }
26
+
27
+ get content() {
28
+ return this._view.state.doc.toString();
29
+ }
30
+
31
+ async setContent(text: string) {
32
+ this._view.dispatch({
33
+ changes: { from: 0, to: this._view.state.doc.length, insert: text },
34
+ });
35
+ }
36
+
37
+ async append(text: string) {
38
+ this._view.dispatch({
39
+ changes: { from: this._view.state.doc.length, insert: text },
40
+ });
41
+ }
42
+
43
+ updateWidget(_id: string, _value: any) {}
44
+ }
45
+
46
+ describe('reducers', () => {
47
+ it.effect(
48
+ 'basic sync',
49
+ Effect.fn(function* ({ expect }) {
50
+ const doc = new TestDocument();
51
+ const syncer = new MessageSyncer(doc, createBlockRenderer('thinking'));
52
+
53
+ const messages = [
54
+ createMessage('user', [{ _tag: 'text', text: 'Hello' }]),
55
+ createMessage('assistant', [{ _tag: 'text', text: 'Hi there!' }]),
56
+ ];
57
+
58
+ syncer.update(messages);
59
+ expect(doc.content).toEqual('\n<prompt>Hello</prompt>\nHi there!\n');
60
+
61
+ Obj.update(messages[1], (obj) => {
62
+ obj.blocks.push({ _tag: 'text', text: 'How can I help?' });
63
+ });
64
+ syncer.update(messages);
65
+ expect(doc.content).toEqual('\n<prompt>Hello</prompt>\nHi there!\nHow can I help?\n');
66
+ }),
67
+ );
68
+
69
+ it.effect(
70
+ 'sync with partial updates',
71
+ Effect.fn(function* ({ expect }) {
72
+ const doc = new TestDocument();
73
+ const syncer = new MessageSyncer(doc, createBlockRenderer('thinking'));
74
+
75
+ const messages = [
76
+ createMessage('user', [{ _tag: 'text', text: 'Hello' }]),
77
+ createMessage('assistant', [{ _tag: 'text', text: 'Hi there!', pending: true }]),
78
+ ];
79
+
80
+ syncer.update(messages);
81
+ expect(doc.content).toEqual('\n<prompt>Hello</prompt>\nHi there!');
82
+
83
+ Obj.update(messages[1], (obj) => {
84
+ const block = obj.blocks[0] as Mutable<ContentBlock.Text>;
85
+ block.text = 'Hi there! How are you?';
86
+ block.pending = false;
87
+ });
88
+ syncer.update(messages);
89
+
90
+ Obj.update(messages[1], (obj) => {
91
+ obj.blocks.push({ _tag: 'text', text: 'How can I help?' });
92
+ });
93
+ syncer.update(messages);
94
+ expect(doc.content).toEqual('\n<prompt>Hello</prompt>\nHi there! How are you?\nHow can I help?\n');
95
+ }),
96
+ );
97
+
98
+ // Regression: streaming reasoning text that passes through a bare list-marker state
99
+ // (e.g. `"…\n1. "`) used to make `stripBulletLikeLinePrefixes` collapse the line to empty,
100
+ // breaking the prefix-diff invariant in `MessageSyncer` and producing a duplicate `<reasoning>`
101
+ // opening tag in the document.
102
+ it.effect(
103
+ 'streaming reasoning with list-marker transitions does not duplicate opening tag',
104
+ Effect.fn(function* ({ expect }) {
105
+ const doc = new TestDocument();
106
+ const syncer = new MessageSyncer(doc, createBlockRenderer('thinking'));
107
+
108
+ const setReasoning = (message: Message.Message, text: string, pending: boolean) => {
109
+ Obj.update(message, (message) => {
110
+ const block = message.blocks[0] as Mutable<ContentBlock.Reasoning>;
111
+ block.reasoningText = text;
112
+ block.pending = pending;
113
+ });
114
+ };
115
+
116
+ const messages = [createMessage('assistant', [{ _tag: 'reasoning', reasoningText: 'abc\n1', pending: true }])];
117
+
118
+ // Tick 1: `"abc\n1"` — `\d+[.)]\s` regex does not match (no dot/space yet).
119
+ syncer.update(messages);
120
+
121
+ // Tick 2: `"abc\n1."` — still no match (no trailing whitespace).
122
+ setReasoning(messages[0], 'abc\n1.', true);
123
+ syncer.update(messages);
124
+
125
+ // Tick 3: `"abc\n1. "` — line `"1. "` matches and is stripped to empty.
126
+ setReasoning(messages[0], 'abc\n1. ', true);
127
+ syncer.update(messages);
128
+
129
+ // Tick 4: `"abc\n1. foo"` — list item with content.
130
+ setReasoning(messages[0], 'abc\n1. foo', true);
131
+ syncer.update(messages);
132
+
133
+ // Tick 5: finalize.
134
+ setReasoning(messages[0], 'abc\n1. foo', false);
135
+ syncer.update(messages);
136
+
137
+ const openTagCount = (doc.content.match(/<reasoning>/g) ?? []).length;
138
+ const closeTagCount = (doc.content.match(/<\/reasoning>/g) ?? []).length;
139
+ expect(openTagCount).toBe(1);
140
+ expect(closeTagCount).toBe(1);
141
+ }),
142
+ );
143
+
144
+ // Regression: prompt "respond with your name inside an xml tag" produces a streamed
145
+ // reasoning block followed by a text block containing a non-registered XML tag
146
+ // (`<name>Claude</name>`). The text block must appear in the document AFTER the
147
+ // closed reasoning block — the bug symptom is the reasoning tag rendering with no
148
+ // follow-up response visible.
149
+ it.effect(
150
+ 'reasoning block followed by text containing a non-registered xml tag',
151
+ Effect.fn(function* ({ expect }) {
152
+ const doc = new TestDocument();
153
+ const syncer = new MessageSyncer(doc, createBlockRenderer('thinking'));
154
+
155
+ const setReasoning = (message: Message.Message, text: string, pending: boolean) => {
156
+ Obj.update(message, (message) => {
157
+ const block = message.blocks[0] as Mutable<ContentBlock.Reasoning>;
158
+ block.reasoningText = text;
159
+ block.pending = pending;
160
+ });
161
+ };
162
+
163
+ const setText = (message: Message.Message, text: string, pending: boolean) => {
164
+ Obj.update(message, (message) => {
165
+ const block = message.blocks[1] as Mutable<ContentBlock.Text>;
166
+ block.text = text;
167
+ block.pending = pending;
168
+ });
169
+ };
170
+
171
+ // Tick 1: reasoning starts streaming.
172
+ const messages = [createMessage('assistant', [{ _tag: 'reasoning', reasoningText: 'Thinking', pending: true }])];
173
+ syncer.update(messages);
174
+
175
+ // Tick 2: reasoning grows.
176
+ setReasoning(messages[0], 'Thinking about the answer', true);
177
+ syncer.update(messages);
178
+
179
+ // Tick 3: reasoning closes.
180
+ setReasoning(messages[0], 'Thinking about the answer', false);
181
+ syncer.update(messages);
182
+
183
+ // Tick 4: text block appears, pending and empty (model has started emitting but text is still '').
184
+ Obj.update(messages[0], (message) => {
185
+ message.blocks.push({ _tag: 'text', text: '', pending: true });
186
+ });
187
+ syncer.update(messages);
188
+
189
+ // Tick 5: partial text — opening tag only.
190
+ setText(messages[0], '<name>', true);
191
+ syncer.update(messages);
192
+
193
+ // Tick 6: full text streamed.
194
+ setText(messages[0], '<name>Claude</name>', true);
195
+ syncer.update(messages);
196
+
197
+ // Tick 7: text finalised.
198
+ setText(messages[0], '<name>Claude</name>', false);
199
+ syncer.update(messages);
200
+
201
+ // Both the closed reasoning tag and the response text must be present.
202
+ expect(doc.content).toContain('<reasoning>Thinking about the answer</reasoning>');
203
+ expect(doc.content).toContain('<name>Claude</name>');
204
+
205
+ const openReasoning = (doc.content.match(/<reasoning>/g) ?? []).length;
206
+ const closeReasoning = (doc.content.match(/<\/reasoning>/g) ?? []).length;
207
+ expect(openReasoning).toBe(1);
208
+ expect(closeReasoning).toBe(1);
209
+ }),
210
+ );
211
+
212
+ // Direct test of `MessageSyncer`'s tolerance for non-monotonic renderer output —
213
+ // any renderer that produces a shorter string for the same streaming block (e.g., due
214
+ // to whitespace normalisation or future transforms) must not produce duplicate output.
215
+ it.effect(
216
+ 'non-monotonic renderer output does not duplicate previously-emitted content',
217
+ Effect.fn(function* ({ expect }) {
218
+ const doc = new TestDocument();
219
+
220
+ const renderer: BlockRenderer = (_ctx: MessageThreadContext, _msg: Message.Message, block: ContentBlock.Any) => {
221
+ if (block._tag !== 'reasoning') {
222
+ return undefined;
223
+ }
224
+ const text = block.reasoningText ?? '';
225
+ // Simulate a non-monotonic transform: collapse a line that is a sole digit+dot+space.
226
+ const normalised = text
227
+ .split(/\r?\n/)
228
+ .map((line) => line.replace(/^\s*\d+[.)]\s$/, ''))
229
+ .join('\n')
230
+ .trim();
231
+ return block.pending ? `<reasoning>${normalised}` : `<reasoning>${normalised}</reasoning>\n`;
232
+ };
233
+
234
+ const syncer = new MessageSyncer(doc, renderer);
235
+
236
+ const messages = [createMessage('assistant', [{ _tag: 'reasoning', reasoningText: 'abc\n1.', pending: true }])];
237
+
238
+ syncer.update(messages);
239
+ Obj.update(messages[0], (obj) => {
240
+ const block = obj.blocks[0] as Mutable<ContentBlock.Reasoning>;
241
+ block.reasoningText = 'abc\n1. ';
242
+ });
243
+ syncer.update(messages);
244
+ Obj.update(messages[0], (obj) => {
245
+ const block = obj.blocks[0] as Mutable<ContentBlock.Reasoning>;
246
+ block.reasoningText = 'abc\n1. tail';
247
+ block.pending = false;
248
+ });
249
+ syncer.update(messages);
250
+
251
+ const openTagCount = (doc.content.match(/<reasoning>/g) ?? []).length;
252
+ const closeTagCount = (doc.content.match(/<\/reasoning>/g) ?? []).length;
253
+ expect(openTagCount).toBe(1);
254
+ expect(closeTagCount).toBe(1);
255
+ }),
256
+ );
257
+ });
@@ -0,0 +1,150 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type DXN } from '@dxos/echo';
6
+ import { type MarkdownStreamController } from '@dxos/react-ui-markdown';
7
+ import { type ContentBlock, type Message } from '@dxos/types';
8
+ import { type StateDispatch, type XmlWidgetStateManager } from '@dxos/ui-editor';
9
+
10
+ import { rehydrateToolWidgetsFromMessages } from './tool-widget-state';
11
+
12
+ /**
13
+ * Update document.
14
+ */
15
+ export type TextModel = Pick<MarkdownStreamController, 'length' | 'setContent' | 'append' | 'updateWidget'>;
16
+
17
+ /**
18
+ * Renders a block to markdown.
19
+ *
20
+ * Contract: for any block whose lifetime spans multiple invocations (i.e. a streaming block
21
+ * with `pending: true` whose content grows over time, transitioning to `pending: false`), the
22
+ * sequence of returned strings must be monotonically extending — each subsequent value must be
23
+ * a string-extension of the previous. The {@link MessageSyncer} relies on this invariant to
24
+ * compute appendable deltas without diffing.
25
+ */
26
+ export type BlockRenderer = (
27
+ context: MessageThreadContext,
28
+ message: Message.Message,
29
+ block: ContentBlock.Any,
30
+ ) => string | undefined;
31
+
32
+ /**
33
+ * Thread context passed to renderer.
34
+ */
35
+ export class MessageThreadContext implements Pick<MarkdownStreamController, 'updateWidget'> {
36
+ constructor(private readonly _widgetState?: XmlWidgetStateManager) {}
37
+
38
+ updateWidget<T>(id: string, value: StateDispatch<T>) {
39
+ this._widgetState?.updateWidget(id, value);
40
+ }
41
+
42
+ // TODO(burdon): Resolve name from hypergraph.
43
+ getObjectLabel(_id: DXN) {
44
+ return 'Object';
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Syncs messages with the editor.
50
+ *
51
+ * Reflects the AI streaming contract:
52
+ * - Messages and their blocks are appended in order.
53
+ * - Only the last block in `messages` may be `pending`; all earlier blocks are finalized.
54
+ * - The renderer's output for a streaming block grows monotonically (see {@link BlockRenderer}).
55
+ * - The document is read-only outside this syncer.
56
+ *
57
+ * Under those rules the syncer needs only:
58
+ * - `_completed`: the flat-block index past which everything has been fully appended.
59
+ * - `_trailing`: chars of the in-flight block (at index `_completed`) already appended.
60
+ * - `_threadId`: identity sentinel; if `messages[0]?.id` changes, the document is replaced.
61
+ */
62
+ export class MessageSyncer {
63
+ private _threadId?: string;
64
+ private _completed = 0;
65
+ private _trailing = 0;
66
+
67
+ private readonly _context: MessageThreadContext;
68
+
69
+ constructor(
70
+ private readonly _document: TextModel,
71
+ private readonly _renderer: BlockRenderer,
72
+ ) {
73
+ this._context = new MessageThreadContext(this._document);
74
+ }
75
+
76
+ get context() {
77
+ return this._context;
78
+ }
79
+
80
+ /**
81
+ * Replace the document with the rendering of `messages`. Use on mount, on thread switch,
82
+ * and from {@link update} when it detects an identity change in `messages[0]`.
83
+ */
84
+ reset(messages: Message.Message[] = []): void {
85
+ this._threadId = messages[0]?.id;
86
+ this._completed = 0;
87
+ this._trailing = 0;
88
+ const buffer = this._walk(messages);
89
+ // Match the pre-rewrite behaviour: rendering from a steady state (initial mount with
90
+ // non-empty messages, or thread switch) lands the entire content via `setContent` — which
91
+ // uses `wireBypass`, so the editor jumps straight to the final text and `update()` returns
92
+ // `true` so the caller can scroll to the bottom. Live streaming partials that arrive
93
+ // *after* this initial render flow through `update()`'s incremental path → `_document.append`
94
+ // → wire's drip filter, preserving the char-by-char typewriter for incoming text.
95
+ void this._document.setContent(buffer).then(() => {
96
+ rehydrateToolWidgetsFromMessages(this._context, messages);
97
+ });
98
+ }
99
+
100
+ /**
101
+ * Stream the suffix of the rendered messages into the document.
102
+ * Returns `true` if the document was replaced (initial mount or thread switch), `false`
103
+ * if the call was a streaming append (or a no-op).
104
+ */
105
+ update(messages: Message.Message[]): boolean {
106
+ if (messages[0]?.id !== this._threadId) {
107
+ this.reset(messages);
108
+ return true;
109
+ }
110
+ const buffer = this._walk(messages);
111
+ if (buffer.length > 0) {
112
+ void this._document.append(buffer);
113
+ }
114
+ return false;
115
+ }
116
+
117
+ /**
118
+ * Walk flat blocks starting at `_completed`, advancing the cursors and returning the chars
119
+ * to append. Blocks before `_completed` are skipped — their renderer is never re-invoked,
120
+ * which preserves single-shot side effects (e.g. tool widget state mutation).
121
+ */
122
+ _walk(messages: Message.Message[]): string {
123
+ let buffer = '';
124
+ let index = 0;
125
+ outer: for (const message of messages) {
126
+ for (const block of message.blocks) {
127
+ if (index < this._completed) {
128
+ index++;
129
+ continue;
130
+ }
131
+ const rendered = this._renderer(this._context, message, block) ?? '';
132
+ if (rendered.length > this._trailing) {
133
+ buffer += rendered.slice(this._trailing);
134
+ }
135
+ if (block.pending) {
136
+ // Stay on this block; record how far we've appended so the next call can resume.
137
+ // `Math.max`-style guard against a non-monotonic renderer output without shrinking the doc.
138
+ if (rendered.length > this._trailing) {
139
+ this._trailing = rendered.length;
140
+ }
141
+ break outer;
142
+ }
143
+ this._completed = index + 1;
144
+ this._trailing = 0;
145
+ index++;
146
+ }
147
+ }
148
+ return buffer;
149
+ }
150
+ }