@dxos/plugin-assistant 0.8.4-main.74a063c4e0 → 0.8.4-main.765dc60934

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 (640) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/AgentArticle-5XDDEXMP.mjs +169 -0
  4. package/dist/lib/neutral/AgentArticle-5XDDEXMP.mjs.map +7 -0
  5. package/dist/lib/neutral/AgentProperties-CNH4JMDZ.mjs +100 -0
  6. package/dist/lib/neutral/AgentProperties-CNH4JMDZ.mjs.map +7 -0
  7. package/dist/lib/neutral/AssistantPlugin.mjs +10 -0
  8. package/dist/lib/neutral/AssistantPlugin.node.mjs +46 -0
  9. package/dist/lib/neutral/AssistantPlugin.node.mjs.map +7 -0
  10. package/dist/lib/neutral/AssistantSettings-GG52BLKS.mjs +40 -0
  11. package/dist/lib/neutral/AssistantSettings-GG52BLKS.mjs.map +7 -0
  12. package/dist/lib/neutral/BlueprintArticle-U7LUBFOS.mjs +27 -0
  13. package/dist/lib/neutral/BlueprintArticle-U7LUBFOS.mjs.map +7 -0
  14. package/dist/lib/neutral/ChatArticle-WVAFZPVI.mjs +8 -0
  15. package/dist/lib/neutral/ChatCompanion-DFRMRUK3.mjs +133 -0
  16. package/dist/lib/neutral/ChatCompanion-DFRMRUK3.mjs.map +7 -0
  17. package/dist/lib/neutral/ChatDialog-QKZLG7SQ.mjs +72 -0
  18. package/dist/lib/neutral/ChatDialog-QKZLG7SQ.mjs.map +7 -0
  19. package/dist/lib/neutral/PlanArticle-TS5ULWYS.mjs +28 -0
  20. package/dist/lib/neutral/PlanArticle-TS5ULWYS.mjs.map +7 -0
  21. package/dist/lib/neutral/RoutineArticle-H7ECM7AH.mjs +116 -0
  22. package/dist/lib/neutral/RoutineArticle-H7ECM7AH.mjs.map +7 -0
  23. package/dist/lib/neutral/RoutineList-CLDXGQUD.mjs +48 -0
  24. package/dist/lib/neutral/RoutineList-CLDXGQUD.mjs.map +7 -0
  25. package/dist/lib/neutral/TracePanel-HYVPDIAA.mjs +565 -0
  26. package/dist/lib/neutral/TracePanel-HYVPDIAA.mjs.map +7 -0
  27. package/dist/lib/neutral/TriggerStatus-WTFYUIG5.mjs +92 -0
  28. package/dist/lib/neutral/TriggerStatus-WTFYUIG5.mjs.map +7 -0
  29. package/dist/lib/neutral/ai-service-GJXMI5OI.mjs +22 -0
  30. package/dist/lib/neutral/ai-service-GJXMI5OI.mjs.map +7 -0
  31. package/dist/lib/neutral/app-graph-builder-QNKVSPPG.mjs +187 -0
  32. package/dist/lib/neutral/app-graph-builder-QNKVSPPG.mjs.map +7 -0
  33. package/dist/lib/neutral/blueprint-definition-VXJYQ5AE.mjs +32 -0
  34. package/dist/lib/neutral/blueprint-definition-VXJYQ5AE.mjs.map +7 -0
  35. package/dist/lib/{browser → neutral}/blueprints/index.mjs +1 -1
  36. package/dist/lib/neutral/capabilities/index.mjs +35 -0
  37. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  38. package/dist/lib/neutral/chunk-4CQZCMRP.mjs +25 -0
  39. package/dist/lib/neutral/chunk-4CQZCMRP.mjs.map +7 -0
  40. package/dist/lib/{browser/chunk-EZRS3J25.mjs → neutral/chunk-5H6UJHLF.mjs} +3 -3
  41. package/dist/lib/neutral/chunk-5H6UJHLF.mjs.map +7 -0
  42. package/dist/lib/neutral/chunk-CU5S7SGF.mjs +8 -0
  43. package/dist/lib/neutral/chunk-CU5S7SGF.mjs.map +7 -0
  44. package/dist/lib/neutral/chunk-ITJX2YZZ.mjs +98 -0
  45. package/dist/lib/neutral/chunk-ITJX2YZZ.mjs.map +7 -0
  46. package/dist/lib/neutral/chunk-SLIPV6NN.mjs +106 -0
  47. package/dist/lib/neutral/chunk-SLIPV6NN.mjs.map +7 -0
  48. package/dist/lib/neutral/chunk-VHPTYKYD.mjs +361 -0
  49. package/dist/lib/neutral/chunk-VHPTYKYD.mjs.map +7 -0
  50. package/dist/lib/neutral/companion-chat-provisioner-2Y6PRSDK.mjs +116 -0
  51. package/dist/lib/neutral/companion-chat-provisioner-2Y6PRSDK.mjs.map +7 -0
  52. package/dist/lib/neutral/components/index.mjs +2298 -0
  53. package/dist/lib/neutral/components/index.mjs.map +7 -0
  54. package/dist/lib/neutral/containers/index.mjs +29 -0
  55. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  56. package/dist/lib/{browser/create-chat-DF5TG5XC.mjs → neutral/create-chat-QQZURUBW.mjs} +16 -27
  57. package/dist/lib/neutral/create-chat-QQZURUBW.mjs.map +7 -0
  58. package/dist/lib/neutral/create-object-UZCJCPWM.mjs +93 -0
  59. package/dist/lib/neutral/create-object-UZCJCPWM.mjs.map +7 -0
  60. package/dist/lib/neutral/edge-model-resolver-XDNBZ3US.mjs +21 -0
  61. package/dist/lib/neutral/edge-model-resolver-XDNBZ3US.mjs.map +7 -0
  62. package/dist/lib/{browser/ensure-companion-chat-FR4AWZ2P.mjs → neutral/ensure-companion-chat-5S4LZM2H.mjs} +10 -17
  63. package/dist/lib/neutral/ensure-companion-chat-5S4LZM2H.mjs.map +7 -0
  64. package/dist/lib/neutral/hooks/index.mjs +927 -0
  65. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  66. package/dist/lib/neutral/index.mjs +32 -0
  67. package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs +24 -0
  68. package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs.map +7 -0
  69. package/dist/lib/neutral/markdown-KTBFOMFM.mjs +110 -0
  70. package/dist/lib/neutral/markdown-KTBFOMFM.mjs.map +7 -0
  71. package/dist/lib/neutral/meta.json +1 -0
  72. package/dist/lib/neutral/meta.mjs +12 -0
  73. package/dist/lib/neutral/migrations-7DEMVBOG.mjs +28 -0
  74. package/dist/lib/neutral/migrations-7DEMVBOG.mjs.map +7 -0
  75. package/dist/lib/{browser/on-create-space-54RNX5JI.mjs → neutral/on-create-space-Q2R7OSP6.mjs} +5 -8
  76. package/dist/lib/neutral/on-create-space-Q2R7OSP6.mjs.map +7 -0
  77. package/dist/lib/neutral/operation-handler-SF36MOB5.mjs +13 -0
  78. package/dist/lib/neutral/operation-handler-SF36MOB5.mjs.map +7 -0
  79. package/dist/lib/neutral/operations/index.mjs +8 -0
  80. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  81. package/dist/lib/neutral/plugin.mjs +16 -0
  82. package/dist/lib/neutral/plugin.mjs.map +7 -0
  83. package/dist/lib/neutral/react-surface-T4R65UJU.mjs +174 -0
  84. package/dist/lib/neutral/react-surface-T4R65UJU.mjs.map +7 -0
  85. package/dist/lib/{browser/resolve-navigation-targets-NZOD66NY.mjs → neutral/resolve-navigation-targets-VXBSWV5L.mjs} +4 -6
  86. package/dist/lib/neutral/resolve-navigation-targets-VXBSWV5L.mjs.map +7 -0
  87. package/dist/lib/{browser/run-prompt-in-new-chat-4YQ37XIS.mjs → neutral/run-prompt-in-new-chat-VJXXZ6SI.mjs} +18 -51
  88. package/dist/lib/neutral/run-prompt-in-new-chat-VJXXZ6SI.mjs.map +7 -0
  89. package/dist/lib/{browser/set-current-chat-WJI3WAVM.mjs → neutral/set-current-chat-ZFDCYK5I.mjs} +5 -11
  90. package/dist/lib/neutral/set-current-chat-ZFDCYK5I.mjs.map +7 -0
  91. package/dist/lib/neutral/settings-W4BLWQ53.mjs +28 -0
  92. package/dist/lib/neutral/settings-W4BLWQ53.mjs.map +7 -0
  93. package/dist/lib/neutral/state-H3G7QCU6.mjs +28 -0
  94. package/dist/lib/neutral/state-H3G7QCU6.mjs.map +7 -0
  95. package/dist/lib/neutral/testing.mjs +8 -0
  96. package/dist/lib/neutral/testing.mjs.map +7 -0
  97. package/dist/lib/neutral/toolkit-GVWXPDLJ.mjs +14 -0
  98. package/dist/lib/neutral/toolkit-GVWXPDLJ.mjs.map +7 -0
  99. package/dist/lib/neutral/translations.mjs +174 -0
  100. package/dist/lib/neutral/translations.mjs.map +7 -0
  101. package/dist/lib/neutral/types/index.mjs +20 -0
  102. package/dist/lib/neutral/types/index.mjs.map +7 -0
  103. package/dist/lib/{browser/update-chat-name-3Y36KFAS.mjs → neutral/update-chat-name-ENXRUMDJ.mjs} +8 -25
  104. package/dist/lib/neutral/update-chat-name-ENXRUMDJ.mjs.map +7 -0
  105. package/dist/types/src/AssistantPlugin.d.ts +1 -0
  106. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  107. package/dist/types/src/AssistantPlugin.node.d.ts +4 -0
  108. package/dist/types/src/AssistantPlugin.node.d.ts.map +1 -0
  109. package/dist/types/src/AssistantPlugin.test.d.ts +2 -0
  110. package/dist/types/src/AssistantPlugin.test.d.ts.map +1 -0
  111. package/dist/types/src/blueprints/assistant/blueprint.d.ts +2 -2
  112. package/dist/types/src/blueprints/assistant/blueprint.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/ai-service.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/create-object.d.ts +31 -0
  118. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -1
  120. package/dist/types/src/capabilities/index.d.ts +30 -16
  121. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  122. package/dist/types/src/capabilities/local-model-resolver.d.ts +6 -3
  123. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -1
  124. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  125. package/dist/types/src/capabilities/migrations.d.ts +2 -1
  126. package/dist/types/src/capabilities/migrations.d.ts.map +1 -1
  127. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  128. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  129. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  130. package/dist/types/src/capabilities/settings.d.ts +1 -13
  131. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  132. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  133. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -1
  134. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts +1 -1
  135. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  136. package/dist/types/src/components/AssistantSettings/AssistantSettings.stories.d.ts +1 -503
  137. package/dist/types/src/components/AssistantSettings/AssistantSettings.stories.d.ts.map +1 -1
  138. package/dist/types/src/components/Chat/Chat.d.ts +38 -50
  139. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  140. package/dist/types/src/components/Chat/context.d.ts +29 -0
  141. package/dist/types/src/components/Chat/context.d.ts.map +1 -0
  142. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  143. package/dist/types/src/components/ChatPrompt/ChatMcpErrors.d.ts +12 -0
  144. package/dist/types/src/components/ChatPrompt/ChatMcpErrors.d.ts.map +1 -0
  145. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts +8 -4
  146. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
  147. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts +19 -0
  148. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts.map +1 -0
  149. package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts.map +1 -1
  150. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts +28 -0
  151. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts.map +1 -0
  152. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +2 -2
  153. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -1
  154. package/dist/types/src/components/ChatPrompt/ChatStatus.d.ts +20 -0
  155. package/dist/types/src/components/ChatPrompt/ChatStatus.d.ts.map +1 -0
  156. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +1 -1
  157. package/dist/types/src/components/ChatPrompt/index.d.ts +3 -0
  158. package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -1
  159. package/dist/types/src/components/ChatThread/Anchor.stories.d.ts +14 -0
  160. package/dist/types/src/components/ChatThread/Anchor.stories.d.ts.map +1 -0
  161. package/dist/types/src/components/ChatThread/ChatThread.d.ts +6 -3
  162. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  163. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +7 -509
  164. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  165. package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -1
  166. package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts +42 -0
  167. package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts.map +1 -0
  168. package/dist/types/src/components/ChatThread/registry.d.ts +18 -0
  169. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
  170. package/dist/types/src/components/ChatThread/sync.d.ts +40 -13
  171. package/dist/types/src/components/ChatThread/sync.d.ts.map +1 -1
  172. package/dist/types/src/components/ChatThread/tool-widget-state.d.ts +18 -0
  173. package/dist/types/src/components/ChatThread/tool-widget-state.d.ts.map +1 -0
  174. package/dist/types/src/components/ChatThread/tool-widget-state.test.d.ts +2 -0
  175. package/dist/types/src/components/ChatThread/tool-widget-state.test.d.ts.map +1 -0
  176. package/dist/types/src/components/ChatThread/widgets/FallbackWidget.d.ts +4 -4
  177. package/dist/types/src/components/ChatThread/widgets/FallbackWidget.d.ts.map +1 -1
  178. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.d.ts.map +1 -1
  179. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts +18 -0
  180. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts.map +1 -0
  181. package/dist/types/src/components/ChatThread/widgets/ReferenceWidget.d.ts.map +1 -1
  182. package/dist/types/src/components/ChatThread/widgets/SelectWidget.d.ts.map +1 -1
  183. package/dist/types/src/components/ChatThread/widgets/StatsWidget.d.ts.map +1 -1
  184. package/dist/types/src/components/ChatThread/widgets/StatusWidget.d.ts +12 -0
  185. package/dist/types/src/components/ChatThread/widgets/StatusWidget.d.ts.map +1 -0
  186. package/dist/types/src/components/ChatThread/widgets/SuggestionWidget.d.ts.map +1 -1
  187. package/dist/types/src/components/ChatThread/widgets/SummaryWidget.d.ts.map +1 -1
  188. package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts.map +1 -1
  189. package/dist/types/src/components/ChatThread/widgets/ToolWidget.stories.d.ts +15 -0
  190. package/dist/types/src/components/ChatThread/widgets/ToolWidget.stories.d.ts.map +1 -0
  191. package/dist/types/src/components/ChatThread/widgets/defaults.d.ts +5 -0
  192. package/dist/types/src/components/ChatThread/widgets/defaults.d.ts.map +1 -0
  193. package/dist/types/src/components/ChatThread/widgets/index.d.ts +1 -1
  194. package/dist/types/src/components/ChatThread/widgets/index.d.ts.map +1 -1
  195. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts +2 -5
  196. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -1
  197. package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts +0 -1
  198. package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts.map +1 -1
  199. package/dist/types/src/components/TaskList/TaskList.d.ts +10 -0
  200. package/dist/types/src/components/TaskList/TaskList.d.ts.map +1 -0
  201. package/dist/types/src/components/TaskList/TaskList.stories.d.ts +16 -0
  202. package/dist/types/src/components/TaskList/TaskList.stories.d.ts.map +1 -0
  203. package/dist/types/src/components/TaskList/index.d.ts +2 -0
  204. package/dist/types/src/components/TaskList/index.d.ts.map +1 -0
  205. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +2 -6
  206. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  207. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +1 -503
  208. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  209. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +4 -5
  210. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  211. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +2 -504
  212. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  213. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +1 -1
  214. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts.map +1 -1
  215. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +4 -4
  216. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -1
  217. package/dist/types/src/components/Toolbox/Toolbox.d.ts +3 -7
  218. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  219. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +1 -503
  220. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  221. package/dist/types/src/components/index.d.ts +1 -0
  222. package/dist/types/src/components/index.d.ts.map +1 -1
  223. package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts +6 -0
  224. package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts.map +1 -0
  225. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts +21 -0
  226. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts.map +1 -0
  227. package/dist/types/src/containers/AgentArticle/index.d.ts +2 -0
  228. package/dist/types/src/containers/AgentArticle/index.d.ts.map +1 -0
  229. package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts +6 -0
  230. package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts.map +1 -0
  231. package/dist/types/src/containers/AgentProperties/AgentProperties.stories.d.ts +16 -0
  232. package/dist/types/src/containers/AgentProperties/AgentProperties.stories.d.ts.map +1 -0
  233. package/dist/types/src/containers/AgentProperties/index.d.ts +2 -0
  234. package/dist/types/src/containers/{ProjectSettings → AgentProperties}/index.d.ts.map +1 -1
  235. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts +1 -1
  236. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts.map +1 -1
  237. package/dist/types/src/containers/{ChatContainer/ChatContainer.d.ts → ChatArticle/ChatArticle.d.ts} +3 -3
  238. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts.map +1 -0
  239. package/dist/types/src/containers/ChatArticle/index.d.ts +2 -0
  240. package/dist/types/src/containers/ChatArticle/index.d.ts.map +1 -0
  241. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts +1 -1
  242. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -1
  243. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -1
  244. package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts +6 -0
  245. package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts.map +1 -0
  246. package/dist/types/src/containers/PlanArticle/index.d.ts +2 -0
  247. package/dist/types/src/containers/PlanArticle/index.d.ts.map +1 -0
  248. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts +6 -0
  249. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts.map +1 -0
  250. package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts +15 -0
  251. package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts.map +1 -0
  252. package/dist/types/src/containers/RoutineArticle/index.d.ts +2 -0
  253. package/dist/types/src/containers/{ProjectArticle → RoutineArticle}/index.d.ts.map +1 -1
  254. package/dist/types/src/containers/RoutineList/RoutineList.d.ts +6 -0
  255. package/dist/types/src/containers/RoutineList/RoutineList.d.ts.map +1 -0
  256. package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts +21 -0
  257. package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts.map +1 -0
  258. package/dist/types/src/containers/RoutineList/index.d.ts +2 -0
  259. package/dist/types/src/containers/RoutineList/index.d.ts.map +1 -0
  260. package/dist/types/src/containers/TracePanel/TracePanel.d.ts +6 -4
  261. package/dist/types/src/containers/TracePanel/TracePanel.d.ts.map +1 -1
  262. package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts +13 -0
  263. package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts.map +1 -0
  264. package/dist/types/src/containers/TracePanel/dxn-extractor.d.ts +1 -1
  265. package/dist/types/src/containers/TracePanel/dxn-extractor.d.ts.map +1 -1
  266. package/dist/types/src/containers/TracePanel/execution-graph.d.ts +97 -0
  267. package/dist/types/src/containers/TracePanel/execution-graph.d.ts.map +1 -0
  268. package/dist/types/src/containers/TracePanel/execution-graph.test.d.ts +2 -0
  269. package/dist/types/src/containers/TracePanel/execution-graph.test.d.ts.map +1 -0
  270. package/dist/types/src/containers/TracePanel/index.d.ts.map +1 -1
  271. package/dist/types/src/containers/TracePanel/testing/index.d.ts +3 -0
  272. package/dist/types/src/containers/TracePanel/testing/index.d.ts.map +1 -0
  273. package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts +14 -0
  274. package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts.map +1 -0
  275. package/dist/types/src/containers/TracePanel/testing/snapshot-playback.d.ts +12 -0
  276. package/dist/types/src/containers/TracePanel/testing/snapshot-playback.d.ts.map +1 -0
  277. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts +3 -2
  278. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -1
  279. package/dist/types/src/containers/TriggerStatus/index.d.ts +1 -1
  280. package/dist/types/src/containers/TriggerStatus/index.d.ts.map +1 -1
  281. package/dist/types/src/containers/index.d.ts +6 -5
  282. package/dist/types/src/containers/index.d.ts.map +1 -1
  283. package/dist/types/src/extensions/prompt-extension.d.ts.map +1 -1
  284. package/dist/types/src/feed-logger.d.ts +13 -0
  285. package/dist/types/src/feed-logger.d.ts.map +1 -0
  286. package/dist/types/src/hooks/index.d.ts +2 -0
  287. package/dist/types/src/hooks/index.d.ts.map +1 -1
  288. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +4 -4
  289. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -1
  290. package/dist/types/src/hooks/useChatKeymap.d.ts +12 -0
  291. package/dist/types/src/hooks/useChatKeymap.d.ts.map +1 -0
  292. package/dist/types/src/hooks/useChatProcessor.d.ts +2 -2
  293. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  294. package/dist/types/src/hooks/useChatServices.d.ts +1 -1
  295. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
  296. package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -1
  297. package/dist/types/src/hooks/useContextBinder.d.ts +2 -2
  298. package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -1
  299. package/dist/types/src/hooks/useContextObjects.d.ts +2 -2
  300. package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -1
  301. package/dist/types/src/hooks/useDebug.d.ts +10 -0
  302. package/dist/types/src/hooks/useDebug.d.ts.map +1 -0
  303. package/dist/types/src/hooks/useFilteredTypes.d.ts.map +1 -1
  304. package/dist/types/src/hooks/useFlush.d.ts +1 -1
  305. package/dist/types/src/hooks/useFlush.d.ts.map +1 -1
  306. package/dist/types/src/hooks/usePresets.d.ts.map +1 -1
  307. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -1
  308. package/dist/types/src/index.d.ts +0 -4
  309. package/dist/types/src/index.d.ts.map +1 -1
  310. package/dist/types/src/operations/create-chat.d.ts +3 -3
  311. package/dist/types/src/operations/create-chat.d.ts.map +1 -1
  312. package/dist/types/src/operations/ensure-companion-chat.d.ts +3 -3
  313. package/dist/types/src/operations/ensure-companion-chat.d.ts.map +1 -1
  314. package/dist/types/src/operations/index.d.ts +1 -2
  315. package/dist/types/src/operations/index.d.ts.map +1 -1
  316. package/dist/types/src/operations/on-create-space.d.ts +3 -3
  317. package/dist/types/src/operations/on-create-space.d.ts.map +1 -1
  318. package/dist/types/src/operations/prompt.test.d.ts +2 -0
  319. package/dist/types/src/operations/prompt.test.d.ts.map +1 -0
  320. package/dist/types/src/operations/resolve-navigation-targets.d.ts +1 -1
  321. package/dist/types/src/operations/resolve-navigation-targets.d.ts.map +1 -1
  322. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts +3 -3
  323. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts.map +1 -1
  324. package/dist/types/src/operations/set-current-chat.d.ts +3 -3
  325. package/dist/types/src/operations/set-current-chat.d.ts.map +1 -1
  326. package/dist/types/src/operations/update-chat-name.d.ts +3 -3
  327. package/dist/types/src/operations/update-chat-name.d.ts.map +1 -1
  328. package/dist/types/src/plugin.d.ts +4 -0
  329. package/dist/types/src/plugin.d.ts.map +1 -0
  330. package/dist/types/src/processor/presets.d.ts +1 -1
  331. package/dist/types/src/processor/presets.d.ts.map +1 -1
  332. package/dist/types/src/processor/processor.d.ts +31 -13
  333. package/dist/types/src/processor/processor.d.ts.map +1 -1
  334. package/dist/types/src/testing/index.d.ts +1 -0
  335. package/dist/types/src/testing/index.d.ts.map +1 -1
  336. package/dist/types/src/testing/test-generator.d.ts +2 -3
  337. package/dist/types/src/testing/test-generator.d.ts.map +1 -1
  338. package/dist/types/src/testing/test-generator.test.d.ts +2 -0
  339. package/dist/types/src/testing/test-generator.test.d.ts.map +1 -0
  340. package/dist/types/src/testing/test-sequence.d.ts +3 -3
  341. package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
  342. package/dist/types/src/testing/test-services.d.ts.map +1 -1
  343. package/dist/types/src/testing/test-trace.d.ts +5 -0
  344. package/dist/types/src/testing/test-trace.d.ts.map +1 -0
  345. package/dist/types/src/testing/trace-timeline.test.d.ts +2 -0
  346. package/dist/types/src/testing/trace-timeline.test.d.ts.map +1 -0
  347. package/dist/types/src/testing.d.ts +2 -0
  348. package/dist/types/src/testing.d.ts.map +1 -0
  349. package/dist/types/src/translations.d.ts +2 -503
  350. package/dist/types/src/translations.d.ts.map +1 -1
  351. package/dist/types/src/types/Assistant.d.ts +22 -6
  352. package/dist/types/src/types/Assistant.d.ts.map +1 -1
  353. package/dist/types/src/types/AssistantCapabilities.d.ts +30 -0
  354. package/dist/types/src/types/AssistantCapabilities.d.ts.map +1 -0
  355. package/dist/types/src/types/AssistantEvents.d.ts +3 -0
  356. package/dist/types/src/types/AssistantEvents.d.ts.map +1 -0
  357. package/dist/types/src/{operations/definitions.d.ts → types/AssistantOperation.d.ts} +26 -20
  358. package/dist/types/src/types/AssistantOperation.d.ts.map +1 -0
  359. package/dist/types/src/types/Settings.d.ts +22 -6
  360. package/dist/types/src/types/Settings.d.ts.map +1 -1
  361. package/dist/types/src/types/index.d.ts +3 -3
  362. package/dist/types/src/types/index.d.ts.map +1 -1
  363. package/dist/types/src/types/service.d.ts +1 -1
  364. package/dist/types/src/types/service.d.ts.map +1 -1
  365. package/dist/types/src/util/suggestions.d.ts +9 -0
  366. package/dist/types/src/util/suggestions.d.ts.map +1 -0
  367. package/dist/types/src/util/suggestions.test.d.ts +2 -0
  368. package/dist/types/src/util/suggestions.test.d.ts.map +1 -0
  369. package/dist/types/tsconfig.tsbuildinfo +1 -1
  370. package/package.json +163 -124
  371. package/src/AssistantPlugin.node.ts +44 -0
  372. package/src/AssistantPlugin.test.ts +35 -0
  373. package/src/AssistantPlugin.ts +126 -0
  374. package/src/blueprints/assistant/blueprint.test.ts +3 -3
  375. package/src/blueprints/assistant/blueprint.ts +4 -4
  376. package/src/capabilities/app-graph-builder.ts +32 -57
  377. package/src/capabilities/blueprint-definition.ts +10 -12
  378. package/src/capabilities/companion-chat-provisioner.ts +4 -5
  379. package/src/capabilities/create-object.ts +107 -0
  380. package/src/capabilities/index.ts +3 -1
  381. package/src/capabilities/local-model-resolver.ts +14 -4
  382. package/src/capabilities/markdown.ts +1 -1
  383. package/src/capabilities/migrations.ts +4 -10
  384. package/src/capabilities/operation-handler.ts +1 -1
  385. package/src/capabilities/react-surface.tsx +57 -39
  386. package/src/capabilities/toolkit.ts +2 -2
  387. package/src/components/AssistantSettings/AssistantSettings.stories.tsx +3 -2
  388. package/src/components/AssistantSettings/AssistantSettings.tsx +22 -111
  389. package/src/components/Chat/Chat.tsx +105 -279
  390. package/src/components/Chat/context.ts +39 -0
  391. package/src/components/ChatPrompt/ChatActions.tsx +10 -10
  392. package/src/components/ChatPrompt/ChatMcpErrors.tsx +50 -0
  393. package/src/components/ChatPrompt/ChatOptions.stories.tsx +136 -0
  394. package/src/components/ChatPrompt/ChatOptions.tsx +238 -45
  395. package/src/components/ChatPrompt/ChatPrompt.tsx +182 -0
  396. package/src/components/ChatPrompt/ChatReferences.tsx +4 -4
  397. package/src/components/ChatPrompt/ChatStatus.tsx +123 -0
  398. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +1 -1
  399. package/src/components/ChatPrompt/index.ts +3 -0
  400. package/src/components/ChatThread/Anchor.stories.tsx +95 -0
  401. package/src/components/ChatThread/ChatThread.stories.tsx +48 -42
  402. package/src/components/ChatThread/ChatThread.tsx +36 -21
  403. package/src/components/ChatThread/DEBUG.md +41 -0
  404. package/src/components/ChatThread/MarkdownStream.stories.tsx +281 -0
  405. package/src/components/ChatThread/registry.tsx +106 -24
  406. package/src/components/ChatThread/sync.test.ts +179 -21
  407. package/src/components/ChatThread/sync.ts +89 -87
  408. package/src/components/ChatThread/testing/reasoning.md +25 -0
  409. package/src/components/ChatThread/testing/thinking.md +21 -0
  410. package/src/components/ChatThread/testing/thread-1.md +13 -0
  411. package/src/components/ChatThread/testing/thread-2.md +19 -0
  412. package/src/components/ChatThread/testing/thread-widgets.md +79 -0
  413. package/src/components/ChatThread/tool-widget-state.test.ts +34 -0
  414. package/src/components/ChatThread/tool-widget-state.ts +48 -0
  415. package/src/components/ChatThread/widgets/FallbackWidget.tsx +5 -3
  416. package/src/components/ChatThread/widgets/ReasoningWidget.stories.tsx +68 -0
  417. package/src/components/ChatThread/widgets/ReasoningWidget.ts +19 -6
  418. package/src/components/ChatThread/widgets/ReferenceWidget.ts +3 -1
  419. package/src/components/ChatThread/widgets/SelectWidget.ts +3 -1
  420. package/src/components/ChatThread/widgets/StatsWidget.ts +3 -1
  421. package/src/components/ChatThread/widgets/StatusWidget.ts +53 -0
  422. package/src/components/ChatThread/widgets/SuggestionWidget.ts +1 -1
  423. package/src/components/ChatThread/widgets/SummaryWidget.tsx +3 -4
  424. package/src/components/ChatThread/widgets/ToolWidget.stories.tsx +55 -0
  425. package/src/components/ChatThread/widgets/ToolWidget.tsx +26 -13
  426. package/src/components/ChatThread/widgets/defaults.ts +8 -0
  427. package/src/components/ChatThread/widgets/index.ts +1 -1
  428. package/src/components/ProcessTree/ProcessTree.stories.tsx +12 -38
  429. package/src/components/ProcessTree/ProcessTree.tsx +72 -38
  430. package/src/components/TaskList/TaskList.stories.tsx +44 -0
  431. package/src/components/TaskList/TaskList.tsx +45 -0
  432. package/src/components/{Typewriter → TaskList}/index.ts +1 -1
  433. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +4 -3
  434. package/src/components/TemplateEditor/TemplateEditor.tsx +5 -5
  435. package/src/components/TemplateEditor/TemplateForm.stories.tsx +6 -9
  436. package/src/components/TemplateEditor/TemplateForm.tsx +51 -72
  437. package/src/components/TemplateEditor/extensions/handlebars-extension.ts +1 -1
  438. package/src/components/ToolBlock/ToolBlock.tsx +2 -2
  439. package/src/components/Toolbox/Toolbox.stories.tsx +6 -5
  440. package/src/components/Toolbox/Toolbox.tsx +4 -4
  441. package/src/components/index.ts +1 -0
  442. package/src/containers/AgentArticle/AgentArticle.stories.tsx +120 -0
  443. package/src/containers/AgentArticle/AgentArticle.tsx +204 -0
  444. package/src/containers/AgentArticle/index.ts +5 -0
  445. package/src/containers/AgentProperties/AgentProperties.stories.tsx +101 -0
  446. package/src/containers/AgentProperties/AgentProperties.tsx +127 -0
  447. package/src/containers/AgentProperties/index.ts +5 -0
  448. package/src/containers/BlueprintArticle/BlueprintArticle.tsx +1 -1
  449. package/src/containers/{ChatContainer/ChatContainer.tsx → ChatArticle/ChatArticle.tsx} +22 -10
  450. package/src/containers/ChatArticle/index.ts +5 -0
  451. package/src/containers/ChatCompanion/ChatCompanion.tsx +21 -30
  452. package/src/containers/ChatDialog/ChatDialog.tsx +3 -9
  453. package/src/containers/PlanArticle/PlanArticle.tsx +33 -0
  454. package/src/containers/PlanArticle/index.ts +5 -0
  455. package/src/containers/RoutineArticle/RoutineArticle.stories.tsx +75 -0
  456. package/src/containers/RoutineArticle/RoutineArticle.tsx +109 -0
  457. package/src/containers/RoutineArticle/index.ts +5 -0
  458. package/src/containers/{PromptList/PromptList.stories.tsx → RoutineList/RoutineList.stories.tsx} +14 -13
  459. package/src/containers/{PromptList/PromptList.tsx → RoutineList/RoutineList.tsx} +8 -7
  460. package/src/containers/RoutineList/index.ts +5 -0
  461. package/src/containers/TracePanel/TracePanel.stories.tsx +285 -0
  462. package/src/containers/TracePanel/TracePanel.tsx +128 -266
  463. package/src/containers/TracePanel/dxn-extractor.test.ts +7 -7
  464. package/src/containers/TracePanel/dxn-extractor.ts +11 -11
  465. package/src/containers/TracePanel/execution-graph.test.ts +382 -0
  466. package/src/containers/TracePanel/execution-graph.ts +621 -0
  467. package/src/containers/TracePanel/testing/index.ts +6 -0
  468. package/src/containers/TracePanel/testing/simulated-agent.ts +114 -0
  469. package/src/containers/TracePanel/testing/snapshot-playback.ts +45 -0
  470. package/src/containers/TriggerStatus/TriggerStatus.tsx +19 -34
  471. package/src/containers/TriggerStatus/index.ts +1 -1
  472. package/src/containers/index.ts +6 -5
  473. package/src/{queue-logger.ts → feed-logger.ts} +45 -24
  474. package/src/hooks/index.ts +2 -0
  475. package/src/hooks/useBlueprintRegistry.ts +13 -7
  476. package/src/hooks/useChatKeymap.ts +52 -0
  477. package/src/hooks/useChatProcessor.ts +12 -12
  478. package/src/hooks/useChatServices.ts +1 -1
  479. package/src/hooks/useChatToolbarActions.ts +86 -88
  480. package/src/hooks/useContextBinder.ts +4 -4
  481. package/src/hooks/useContextObjects.ts +2 -2
  482. package/src/hooks/useDebug.ts +38 -0
  483. package/src/index.ts +0 -5
  484. package/src/meta.ts +1 -1
  485. package/src/operations/create-chat.ts +21 -17
  486. package/src/operations/ensure-companion-chat.ts +49 -47
  487. package/src/operations/index.ts +1 -3
  488. package/src/operations/on-create-space.ts +4 -4
  489. package/src/operations/prompt.test.ts +77 -0
  490. package/src/operations/resolve-navigation-targets.ts +3 -3
  491. package/src/operations/run-prompt-in-new-chat.ts +86 -86
  492. package/src/operations/set-current-chat.ts +4 -5
  493. package/src/operations/update-chat-name.ts +4 -4
  494. package/src/plugin.ts +11 -0
  495. package/src/processor/presets.ts +11 -3
  496. package/src/processor/processor.test.ts +4 -4
  497. package/src/processor/processor.ts +54 -38
  498. package/src/testing/data/trace-timeline.dx.json +4657 -0
  499. package/src/testing/index.ts +1 -0
  500. package/src/testing/test-generator.test.ts +70 -0
  501. package/src/testing/test-generator.ts +213 -191
  502. package/src/testing/test-sequence.ts +3 -3
  503. package/src/testing/test-trace.ts +20 -0
  504. package/src/testing/trace-timeline.conversations.json +1 -0
  505. package/src/testing/trace-timeline.test.ts +250 -0
  506. package/src/testing.ts +7 -0
  507. package/src/translations.ts +74 -49
  508. package/src/types/Assistant.ts +13 -1
  509. package/src/types/AssistantCapabilities.ts +35 -0
  510. package/src/types/AssistantEvents.ts +11 -0
  511. package/src/{operations/definitions.ts → types/AssistantOperation.ts} +5 -4
  512. package/src/types/Settings.ts +63 -8
  513. package/src/types/index.ts +5 -3
  514. package/src/types/service.ts +1 -1
  515. package/src/util/suggestions.test.ts +52 -0
  516. package/src/util/suggestions.ts +42 -0
  517. package/dist/lib/browser/AssistantSettings-7QMO3LGF.mjs +0 -97
  518. package/dist/lib/browser/AssistantSettings-7QMO3LGF.mjs.map +0 -7
  519. package/dist/lib/browser/chunk-ATHYBVGN.mjs +0 -176
  520. package/dist/lib/browser/chunk-ATHYBVGN.mjs.map +0 -7
  521. package/dist/lib/browser/chunk-EZRS3J25.mjs.map +0 -7
  522. package/dist/lib/browser/chunk-RUV2WOQH.mjs +0 -154
  523. package/dist/lib/browser/chunk-RUV2WOQH.mjs.map +0 -7
  524. package/dist/lib/browser/create-chat-DF5TG5XC.mjs.map +0 -7
  525. package/dist/lib/browser/ensure-companion-chat-FR4AWZ2P.mjs.map +0 -7
  526. package/dist/lib/browser/index.mjs +0 -3122
  527. package/dist/lib/browser/index.mjs.map +0 -7
  528. package/dist/lib/browser/meta.json +0 -1
  529. package/dist/lib/browser/on-create-space-54RNX5JI.mjs.map +0 -7
  530. package/dist/lib/browser/operations/index.mjs +0 -13
  531. package/dist/lib/browser/operations/index.mjs.map +0 -7
  532. package/dist/lib/browser/resolve-navigation-targets-NZOD66NY.mjs.map +0 -7
  533. package/dist/lib/browser/run-prompt-in-new-chat-4YQ37XIS.mjs.map +0 -7
  534. package/dist/lib/browser/set-current-chat-WJI3WAVM.mjs.map +0 -7
  535. package/dist/lib/browser/types/index.mjs +0 -20
  536. package/dist/lib/browser/update-chat-name-3Y36KFAS.mjs.map +0 -7
  537. package/dist/lib/node-esm/AssistantSettings-UVUTKO7E.mjs +0 -98
  538. package/dist/lib/node-esm/AssistantSettings-UVUTKO7E.mjs.map +0 -7
  539. package/dist/lib/node-esm/blueprints/index.mjs +0 -9
  540. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  541. package/dist/lib/node-esm/chunk-NZIKC7AN.mjs +0 -32
  542. package/dist/lib/node-esm/chunk-NZIKC7AN.mjs.map +0 -7
  543. package/dist/lib/node-esm/chunk-PXAJSTGZ.mjs +0 -177
  544. package/dist/lib/node-esm/chunk-PXAJSTGZ.mjs.map +0 -7
  545. package/dist/lib/node-esm/chunk-PY4X6FJT.mjs +0 -155
  546. package/dist/lib/node-esm/chunk-PY4X6FJT.mjs.map +0 -7
  547. package/dist/lib/node-esm/create-chat-RAV7IX2S.mjs +0 -83
  548. package/dist/lib/node-esm/create-chat-RAV7IX2S.mjs.map +0 -7
  549. package/dist/lib/node-esm/ensure-companion-chat-BLP7NT32.mjs +0 -66
  550. package/dist/lib/node-esm/ensure-companion-chat-BLP7NT32.mjs.map +0 -7
  551. package/dist/lib/node-esm/index.mjs +0 -3123
  552. package/dist/lib/node-esm/index.mjs.map +0 -7
  553. package/dist/lib/node-esm/meta.json +0 -1
  554. package/dist/lib/node-esm/on-create-space-YRPZ6HZY.mjs +0 -23
  555. package/dist/lib/node-esm/on-create-space-YRPZ6HZY.mjs.map +0 -7
  556. package/dist/lib/node-esm/operations/index.mjs +0 -14
  557. package/dist/lib/node-esm/operations/index.mjs.map +0 -7
  558. package/dist/lib/node-esm/resolve-navigation-targets-3PPK7XLH.mjs +0 -23
  559. package/dist/lib/node-esm/resolve-navigation-targets-3PPK7XLH.mjs.map +0 -7
  560. package/dist/lib/node-esm/run-prompt-in-new-chat-2IJBSDTM.mjs +0 -137
  561. package/dist/lib/node-esm/run-prompt-in-new-chat-2IJBSDTM.mjs.map +0 -7
  562. package/dist/lib/node-esm/set-current-chat-KBMMZULR.mjs +0 -55
  563. package/dist/lib/node-esm/set-current-chat-KBMMZULR.mjs.map +0 -7
  564. package/dist/lib/node-esm/types/index.mjs +0 -21
  565. package/dist/lib/node-esm/update-chat-name-HM2P4NSI.mjs +0 -72
  566. package/dist/lib/node-esm/update-chat-name-HM2P4NSI.mjs.map +0 -7
  567. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts +0 -10
  568. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts.map +0 -1
  569. package/dist/types/src/components/ChatProgress/index.d.ts +0 -2
  570. package/dist/types/src/components/ChatProgress/index.d.ts.map +0 -1
  571. package/dist/types/src/components/ChatThread/ChatStream.stories.d.ts +0 -530
  572. package/dist/types/src/components/ChatThread/ChatStream.stories.d.ts.map +0 -1
  573. package/dist/types/src/components/ChatThread/widgets/PromptWidget.d.ts +0 -14
  574. package/dist/types/src/components/ChatThread/widgets/PromptWidget.d.ts.map +0 -1
  575. package/dist/types/src/components/Typewriter/AssistantToolbar.d.ts +0 -12
  576. package/dist/types/src/components/Typewriter/AssistantToolbar.d.ts.map +0 -1
  577. package/dist/types/src/components/Typewriter/Typewriter.d.ts +0 -11
  578. package/dist/types/src/components/Typewriter/Typewriter.d.ts.map +0 -1
  579. package/dist/types/src/components/Typewriter/Typewriter.stories.d.ts +0 -7
  580. package/dist/types/src/components/Typewriter/Typewriter.stories.d.ts.map +0 -1
  581. package/dist/types/src/components/Typewriter/assistant-extension.d.ts +0 -5
  582. package/dist/types/src/components/Typewriter/assistant-extension.d.ts.map +0 -1
  583. package/dist/types/src/components/Typewriter/index.d.ts +0 -2
  584. package/dist/types/src/components/Typewriter/index.d.ts.map +0 -1
  585. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +0 -1
  586. package/dist/types/src/containers/ChatContainer/index.d.ts +0 -2
  587. package/dist/types/src/containers/ChatContainer/index.d.ts.map +0 -1
  588. package/dist/types/src/containers/ProjectArticle/ProjectArticle.d.ts +0 -6
  589. package/dist/types/src/containers/ProjectArticle/ProjectArticle.d.ts.map +0 -1
  590. package/dist/types/src/containers/ProjectArticle/index.d.ts +0 -2
  591. package/dist/types/src/containers/ProjectSettings/ProjectSettings.d.ts +0 -6
  592. package/dist/types/src/containers/ProjectSettings/ProjectSettings.d.ts.map +0 -1
  593. package/dist/types/src/containers/ProjectSettings/index.d.ts +0 -2
  594. package/dist/types/src/containers/PromptArticle/PromptArticle.d.ts +0 -6
  595. package/dist/types/src/containers/PromptArticle/PromptArticle.d.ts.map +0 -1
  596. package/dist/types/src/containers/PromptArticle/index.d.ts +0 -2
  597. package/dist/types/src/containers/PromptArticle/index.d.ts.map +0 -1
  598. package/dist/types/src/containers/PromptList/PromptList.d.ts +0 -6
  599. package/dist/types/src/containers/PromptList/PromptList.d.ts.map +0 -1
  600. package/dist/types/src/containers/PromptList/PromptList.stories.d.ts +0 -523
  601. package/dist/types/src/containers/PromptList/PromptList.stories.d.ts.map +0 -1
  602. package/dist/types/src/containers/PromptList/index.d.ts +0 -2
  603. package/dist/types/src/containers/PromptList/index.d.ts.map +0 -1
  604. package/dist/types/src/operations/definitions.d.ts.map +0 -1
  605. package/dist/types/src/queue-logger.d.ts +0 -11
  606. package/dist/types/src/queue-logger.d.ts.map +0 -1
  607. package/dist/types/src/types/capabilities.d.ts +0 -44
  608. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  609. package/dist/types/src/types/defs.d.ts +0 -2
  610. package/dist/types/src/types/defs.d.ts.map +0 -1
  611. package/dist/types/src/types/events.d.ts +0 -5
  612. package/dist/types/src/types/events.d.ts.map +0 -1
  613. package/src/AssistantPlugin.tsx +0 -235
  614. package/src/blueprints/assistant/blueprint.conversations.json +0 -1
  615. package/src/components/ChatProgress/ChatProgress.tsx +0 -56
  616. package/src/components/ChatProgress/index.ts +0 -5
  617. package/src/components/ChatThread/ChatStream.stories.tsx +0 -168
  618. package/src/components/ChatThread/widgets/PromptWidget.ts +0 -28
  619. package/src/components/Typewriter/AssistantToolbar.tsx +0 -161
  620. package/src/components/Typewriter/Typewriter.stories.tsx +0 -86
  621. package/src/components/Typewriter/Typewriter.tsx +0 -50
  622. package/src/components/Typewriter/assistant-extension.tsx +0 -141
  623. package/src/containers/ChatContainer/index.ts +0 -5
  624. package/src/containers/ProjectArticle/ProjectArticle.tsx +0 -131
  625. package/src/containers/ProjectArticle/index.ts +0 -5
  626. package/src/containers/ProjectSettings/ProjectSettings.tsx +0 -139
  627. package/src/containers/ProjectSettings/index.ts +0 -5
  628. package/src/containers/PromptArticle/PromptArticle.tsx +0 -59
  629. package/src/containers/PromptArticle/index.ts +0 -5
  630. package/src/containers/PromptList/index.ts +0 -5
  631. package/src/types/capabilities.ts +0 -35
  632. package/src/types/defs.ts +0 -5
  633. package/src/types/events.ts +0 -11
  634. /package/dist/lib/{browser/blueprints/index.mjs.map → neutral/AssistantPlugin.mjs.map} +0 -0
  635. /package/dist/lib/{browser/chunk-J5LGTIGS.mjs.map → neutral/ChatArticle-WVAFZPVI.mjs.map} +0 -0
  636. /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  637. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  638. /package/dist/lib/{node-esm/blueprints/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  639. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  640. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
@@ -2,24 +2,25 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import React, { type CSSProperties, forwardRef, useCallback, useEffect, useMemo, useState } from 'react';
5
+ import React, { forwardRef, useCallback, useEffect, useMemo, useState } from 'react';
6
6
 
7
7
  import { PublicKey } from '@dxos/keys';
8
8
  import { type Identity } from '@dxos/react-client/halo';
9
9
  import { type ThemedClassName, setRef } from '@dxos/react-ui';
10
- import { MarkdownStream, type MarkdownStreamController, type MarkdownStreamProps } from '@dxos/react-ui-components';
10
+ import { MarkdownStream, type MarkdownStreamController, type MarkdownStreamProps } from '@dxos/react-ui-markdown';
11
11
  import { type Message } from '@dxos/types';
12
- import { mx } from '@dxos/ui-theme';
13
12
  import { keyToFallback } from '@dxos/util';
14
13
 
14
+ import { type Assistant } from '../../types';
15
15
  import { type ChatEvent } from '../Chat';
16
- import { blockToMarkdown, componentRegistry } from './registry';
16
+ import { componentRegistry, createBlockRenderer } from './registry';
17
17
  import { MessageSyncer } from './sync';
18
18
 
19
19
  const defaultOptions: MarkdownStreamProps['options'] = {
20
20
  autoScroll: true,
21
- // wire: true,
22
- cursor: true,
21
+ cursor: false,
22
+ fader: false,
23
+ typewriter: true,
23
24
  };
24
25
 
25
26
  export type ChatThreadProps = ThemedClassName<
@@ -27,13 +28,27 @@ export type ChatThreadProps = ThemedClassName<
27
28
  identity?: Identity;
28
29
  messages?: Message.Message[];
29
30
  error?: Error;
31
+ viewType?: Assistant.ChatView;
30
32
  onEvent?: (event: ChatEvent) => void;
31
- } & Pick<MarkdownStreamProps, 'options' | 'debug'>
33
+ } & Pick<MarkdownStreamProps, 'options' | 'debug' | 'extensions' | 'footer'>
32
34
  >;
33
35
 
34
- // TODO(burdon): Memo thread position.
35
36
  export const ChatThread = forwardRef<MarkdownStreamController | null, ChatThreadProps>(
36
- ({ classNames, identity, messages = [], error, options = defaultOptions, debug = false, onEvent }, forwardedRef) => {
37
+ (
38
+ {
39
+ classNames,
40
+ identity,
41
+ messages = [],
42
+ error,
43
+ options = defaultOptions,
44
+ footer,
45
+ debug = false,
46
+ extensions,
47
+ viewType,
48
+ onEvent,
49
+ },
50
+ forwardedRef,
51
+ ) => {
37
52
  const [controller, setController] = useState<MarkdownStreamController | null>(null);
38
53
  const handleMarkdownStreamRef = useCallback(
39
54
  (instance: MarkdownStreamController | null) => {
@@ -54,10 +69,14 @@ export const ChatThread = forwardRef<MarkdownStreamController | null, ChatThread
54
69
  }, [controller, error]);
55
70
 
56
71
  // Update document.
57
- const syncer = useMemo(() => controller && new MessageSyncer(controller, blockToMarkdown), [controller]);
72
+ const renderer = useMemo(() => createBlockRenderer(viewType), [viewType]);
73
+ const syncer = useMemo(() => controller && new MessageSyncer(controller, renderer), [controller, renderer]);
58
74
  useEffect(() => {
59
- const reset = syncer?.append(messages, true);
60
- if (reset) {
75
+ if (!syncer) {
76
+ return;
77
+ }
78
+
79
+ if (syncer.update(messages)) {
61
80
  controller?.scrollToBottom('instant');
62
81
  }
63
82
  }, [controller, syncer, messages]);
@@ -76,19 +95,15 @@ export const ChatThread = forwardRef<MarkdownStreamController | null, ChatThread
76
95
  );
77
96
 
78
97
  return (
79
- <div
80
- role='none'
81
- className={mx('flex h-full w-full justify-center overflow-hidden', classNames)}
82
- style={
83
- {
84
- '--user-fill': `var(--color-${userHue}-fill)`,
85
- } as CSSProperties
86
- }
87
- >
98
+ <div data-hue={userHue} className='contents'>
88
99
  <MarkdownStream
100
+ key={viewType}
101
+ classNames={classNames}
89
102
  registry={componentRegistry}
90
103
  options={options}
91
104
  debug={debug}
105
+ extensions={extensions}
106
+ footer={footer}
92
107
  onEvent={handleEvent}
93
108
  ref={handleMarkdownStreamRef}
94
109
  />
@@ -0,0 +1,41 @@
1
+ # Dataflow from AI to Codemirror
2
+
3
+ AiSession (packages/core/assistant/src/conversation/session.ts)
4
+
5
+ │ emits ephemeral Trace events containing
6
+ │ PartialBlock { messageId, role, block: ContentBlock.Any }
7
+ │ via AgentService.Session.subscribeEphemeral(): Stream<Trace.Message>
8
+
9
+ AiChatProcessor (packages/plugins/plugin-assistant/src/processor/processor.ts)
10
+
11
+ │ Stream.runForEach → if Trace.isOfType(PartialBlock) →
12
+ │ #handleEphemeralMessage(event.data)
13
+ │ → upserts Message.Message into #streaming atom
14
+ │ → finalizes into #messages atom on complete block
15
+
16
+ Chat.tsx (packages/plugins/plugin-assistant/src/components/Chat/Chat.tsx)
17
+
18
+ │ reads processor.messages + processor.streaming atoms,
19
+ │ passes flat Message[] down to ChatThread
20
+
21
+ ChatThread.tsx (packages/plugins/plugin-assistant/src/components/ChatThread/ChatThread.tsx)
22
+
23
+ │ MessageSyncer (sync.ts) compares current messages
24
+ │ to last rendered set:
25
+ │ - new finalized chunk → controller.append(delta)
26
+ │ - changed earlier message → controller.setContent(full)
27
+ │ blockToMarkdown serializes ContentBlocks → markdown,
28
+ │ embedding tool calls as XML widget tags
29
+ │ (e.g. <tool-call name="...">...</tool-call>)
30
+
31
+ MarkdownStreamController.append / setContent
32
+
33
+ MarkdownStream (packages/ui/react-ui-markdown/src/MarkdownStream/MarkdownStream.tsx)
34
+
35
+ │ CodeMirror editor with:
36
+ │ - extendedMarkdown (parseMixed → xmlLanguage on HTMLBlock/Paragraph)
37
+ │ - xmlTags (registry → React/native widget portals)
38
+ │ - wire extension (buffers appended text, drips at typewriter rate,
39
+ │ treats XML atomic ranges as indivisible units)
40
+
41
+ Rendered DOM (markdown + portaled widgets for tool calls / reasoning / etc.)
@@ -0,0 +1,281 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { useCallback, useEffect, useState } from 'react';
7
+
8
+ import '@dxos/lit-ui';
9
+ import { PublicKey } from '@dxos/keys';
10
+ import { random } from '@dxos/random';
11
+ import { Input, Toolbar } from '@dxos/react-ui';
12
+ import { Panel } from '@dxos/react-ui';
13
+ import {
14
+ MarkdownStream,
15
+ type MarkdownStreamController,
16
+ type MarkdownStreamProps,
17
+ textStream,
18
+ } from '@dxos/react-ui-markdown';
19
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
20
+ import { type ContentBlock } from '@dxos/types';
21
+ import { keyToFallback } from '@dxos/util';
22
+
23
+ import { translations } from '#translations';
24
+
25
+ import { componentRegistry } from './registry';
26
+ import REASONING from './testing/reasoning.md?raw';
27
+ import THINKING from './testing/thinking.md?raw';
28
+ import THREAD_1 from './testing/thread-1.md?raw';
29
+ import THREAD_WIDGETS from './testing/thread-widgets.md?raw';
30
+
31
+ random.seed(123);
32
+
33
+ const userHue = keyToFallback(PublicKey.random()).hue;
34
+
35
+ type TextStreamOptions = {
36
+ wordsPerChunk?: number;
37
+ chunkDelay?: number;
38
+ variance?: number;
39
+ };
40
+
41
+ const defaultStreamOptions: TextStreamOptions = {
42
+ wordsPerChunk: 5,
43
+ chunkDelay: 200,
44
+ variance: 0.5,
45
+ };
46
+
47
+ /** Matches self-closing tool call tags in assistant markdown fixtures (e.g. thinking.md). */
48
+ const TOOL_CALL_MARKUP_REGEX = /<toolCall\s+id="([^"]+)"\s*\/>/g;
49
+
50
+ const extractToolCallIdsFromMarkdown = (markdown: string): string[] =>
51
+ [...markdown.matchAll(TOOL_CALL_MARKUP_REGEX)].map((match) => match[1]);
52
+
53
+ const SAMPLE_TOOL_NAMES = [
54
+ 'get_project_rules',
55
+ 'list_mailboxes',
56
+ 'query_inbox',
57
+ 'enable_blueprint',
58
+ 'create_schema',
59
+ 'create_project',
60
+ 'retry_operation',
61
+ ] as const;
62
+
63
+ const sampleCallAndResultBlocks = (toolCallId: string, index: number): ContentBlock.Any[] => {
64
+ const name = SAMPLE_TOOL_NAMES[index % SAMPLE_TOOL_NAMES.length];
65
+ const input = JSON.stringify({ step: index + 1, tool: name });
66
+ const result = JSON.stringify({ ok: true, detail: `Sample result for ${name}.` });
67
+ return [
68
+ { _tag: 'toolCall', toolCallId, name, input, providerExecuted: false },
69
+ { _tag: 'toolResult', toolCallId, name, result, providerExecuted: false },
70
+ ];
71
+ };
72
+
73
+ type DefaultStoryProps = MarkdownStreamProps & {
74
+ initialContent?: string;
75
+ streamOptions?: TextStreamOptions;
76
+ /**
77
+ * When true, after loading `initialContent`, finds `<toolCall id="..." />` ids via
78
+ * {@link TOOL_CALL_MARKUP_REGEX} and seeds each portal widget with paired toolCall + toolResult blocks.
79
+ */
80
+ seedToolWidgetsFromMarkdown?: boolean;
81
+ };
82
+
83
+ const DefaultStory = ({
84
+ initialContent,
85
+ content,
86
+ streamOptions = defaultStreamOptions,
87
+ debug: debugProp,
88
+ seedToolWidgetsFromMarkdown = false,
89
+ ...props
90
+ }: DefaultStoryProps) => {
91
+ const [controller, setController] = useState<MarkdownStreamController | null>(null);
92
+ const [streaming, setStreaming] = useState(false);
93
+ const [debug, setDebug] = useState(debugProp);
94
+
95
+ useEffect(() => {
96
+ if (!controller || !initialContent) {
97
+ return;
98
+ }
99
+
100
+ let cancelled = false;
101
+ void (async () => {
102
+ await controller.append(initialContent);
103
+ if (cancelled || !seedToolWidgetsFromMarkdown) {
104
+ return;
105
+ }
106
+
107
+ const toolCallIds = extractToolCallIdsFromMarkdown(initialContent);
108
+ toolCallIds.forEach((toolCallId, index) => {
109
+ controller.updateWidget(toolCallId, {
110
+ blocks: sampleCallAndResultBlocks(toolCallId, index),
111
+ });
112
+ });
113
+ })();
114
+
115
+ return () => {
116
+ cancelled = true;
117
+ };
118
+ }, [controller, initialContent, seedToolWidgetsFromMarkdown]);
119
+
120
+ useEffect(() => {
121
+ if (!controller || !streaming || !content) {
122
+ return;
123
+ }
124
+
125
+ let cancelled = false;
126
+ void (async () => {
127
+ for await (const chunk of textStream(content + '\n', streamOptions)) {
128
+ if (cancelled) {
129
+ break;
130
+ }
131
+
132
+ await controller.append(chunk);
133
+ }
134
+
135
+ setStreaming(false);
136
+ })();
137
+
138
+ return () => {
139
+ cancelled = true;
140
+ };
141
+ }, [controller, content, streaming]);
142
+
143
+ const handleReset = useCallback(() => {
144
+ setStreaming(false);
145
+ void controller?.setContent('');
146
+ }, [controller]);
147
+
148
+ return (
149
+ <Panel.Root data-hue={userHue}>
150
+ <Panel.Toolbar asChild>
151
+ <Toolbar.Root>
152
+ <Toolbar.IconButton
153
+ disabled={streaming}
154
+ icon='ph--play--regular'
155
+ iconOnly
156
+ label='Start'
157
+ onClick={() => setStreaming(true)}
158
+ />
159
+ <Toolbar.IconButton
160
+ disabled={!streaming}
161
+ icon='ph--stop--regular'
162
+ iconOnly
163
+ label='Stop'
164
+ onClick={() => setStreaming(false)}
165
+ />
166
+ <Toolbar.IconButton icon='ph--trash--regular' iconOnly label='Reset' onClick={handleReset} />
167
+ <Toolbar.Separator />
168
+ <Input.Root>
169
+ <Input.Label classNames='pr-1'>Debug</Input.Label>
170
+ <Input.Switch checked={debug} onCheckedChange={setDebug} />
171
+ </Input.Root>
172
+ </Toolbar.Root>
173
+ </Panel.Toolbar>
174
+ <Panel.Content>
175
+ <MarkdownStream {...props} debug={debug} ref={setController} />
176
+ </Panel.Content>
177
+ </Panel.Root>
178
+ );
179
+ };
180
+
181
+ const meta = {
182
+ title: 'plugins/plugin-assistant/components/MarkdownStream',
183
+ render: DefaultStory,
184
+ decorators: [withTheme(), withLayout({ layout: 'column' })],
185
+ parameters: {
186
+ layout: 'fullscreen',
187
+ translations,
188
+ },
189
+ } satisfies Meta<typeof DefaultStory>;
190
+
191
+ export default meta;
192
+
193
+ type Story = StoryObj<typeof meta>;
194
+
195
+ export const Default: Story = {
196
+ args: {
197
+ registry: componentRegistry,
198
+ initialContent: THREAD_1,
199
+ options: {
200
+ autoScroll: true,
201
+ },
202
+ },
203
+ };
204
+
205
+ export const Streaming: Story = {
206
+ args: {
207
+ registry: componentRegistry,
208
+ content: THREAD_1,
209
+ options: {
210
+ autoScroll: true,
211
+ typewriter: true,
212
+ cursor: true,
213
+ },
214
+ },
215
+ };
216
+
217
+ export const Widgets: Story = {
218
+ args: {
219
+ registry: componentRegistry,
220
+ initialContent: THREAD_WIDGETS,
221
+ options: {
222
+ autoScroll: true,
223
+ },
224
+ },
225
+ };
226
+
227
+ export const Debug: Story = {
228
+ args: {
229
+ initialContent: THREAD_1,
230
+ registry: componentRegistry,
231
+ content: THREAD_1,
232
+ debug: true,
233
+ },
234
+ };
235
+
236
+ export const Thinking: Story = {
237
+ args: {
238
+ initialContent: THINKING,
239
+ registry: componentRegistry,
240
+ seedToolWidgetsFromMarkdown: true,
241
+ options: {
242
+ autoScroll: true,
243
+ },
244
+ },
245
+ };
246
+
247
+ /**
248
+ * Splits a fixture at the first `</prompt>` so the prompt can be pre-loaded as initialContent
249
+ * (matching production: user prompts are submitted whole and never streamed) while the assistant
250
+ * body is streamed. Keeps the streaming-tail XML scan focused on the tags it is meant for
251
+ * (`<reasoning>`, `<status>`) instead of accumulating widgets for an unclosed `<prompt>`.
252
+ */
253
+ const splitPromptAndBody = (markdown: string): { prompt: string; body: string } => {
254
+ const closing = '</prompt>';
255
+ const idx = markdown.indexOf(closing);
256
+ if (idx === -1) {
257
+ return { prompt: '', body: markdown };
258
+ }
259
+ return { prompt: markdown.slice(0, idx + closing.length), body: markdown.slice(idx + closing.length) };
260
+ };
261
+
262
+ const REASONING_PARTS = splitPromptAndBody(REASONING);
263
+
264
+ /**
265
+ * Streams a reasoning block whose body contains a numbered list — exercises the streaming-tail XML
266
+ * scan as `<reasoning>` opens, accumulates list-marker lines like `"1. "`, and finally closes. Use
267
+ * this to visually verify that the reasoning widget renders cleanly without duplicate opening tags
268
+ * (regression from the per-line bullet stripper that used to collapse `"1. "` to empty mid-stream).
269
+ */
270
+ export const Reasoning: Story = {
271
+ args: {
272
+ registry: componentRegistry,
273
+ initialContent: REASONING_PARTS.prompt,
274
+ content: REASONING_PARTS.body,
275
+ options: {
276
+ autoScroll: true,
277
+ typewriter: true,
278
+ cursor: true,
279
+ },
280
+ },
281
+ };
@@ -2,14 +2,17 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import React from 'react';
6
+
5
7
  import { log } from '@dxos/log';
6
8
  import { ContentBlock, type Message } from '@dxos/types';
7
9
  import { type XmlWidgetRegistry, getXmlTextChild } from '@dxos/ui-editor';
8
10
 
11
+ import { type Assistant } from '../../types';
9
12
  import { type BlockRenderer, type MessageThreadContext } from './sync';
13
+ import { applyToolBlockToWidgetState } from './tool-widget-state';
10
14
  import {
11
15
  FallbackWidget,
12
- PromptWidget,
13
16
  ReasoningWidget,
14
17
  ReferenceWidget,
15
18
  SelectWidget,
@@ -17,21 +20,41 @@ import {
17
20
  StatsWidget,
18
21
  SummaryWidget,
19
22
  ToolWidget,
23
+ StatusWidget,
20
24
  } from './widgets';
21
25
 
22
26
  /**
23
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).
24
36
  */
25
37
  export const componentRegistry: XmlWidgetRegistry = {
26
38
  //
27
- // DOM Widgets
39
+ // Block-only (no widget — see note above).
28
40
  //
29
41
 
30
42
  prompt: {
31
43
  block: true,
32
- factory: ({ children }) => {
44
+ },
45
+
46
+ //
47
+ // DOM Widgets
48
+ //
49
+
50
+ synthetic: {
51
+ block: true,
52
+ factory: ({ children, range }) => {
33
53
  const text = getXmlTextChild(children);
34
- return text ? new PromptWidget(text) : null;
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;
35
58
  },
36
59
  },
37
60
  reasoning: {
@@ -72,6 +95,14 @@ export const componentRegistry: XmlWidgetRegistry = {
72
95
  return text ? new StatsWidget(text) : null;
73
96
  },
74
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
+ },
75
106
 
76
107
  //
77
108
  // React Widgets (portaled outside of the editor)
@@ -83,9 +114,12 @@ export const componentRegistry: XmlWidgetRegistry = {
83
114
  },
84
115
  toolCall: {
85
116
  block: true,
86
- Component: ToolWidget,
117
+ Component: (props) => (
118
+ <div className='py-2'>
119
+ <ToolWidget {...props} />
120
+ </div>
121
+ ),
87
122
  },
88
-
89
123
  toolResult: {
90
124
  block: true,
91
125
  Component: FallbackWidget,
@@ -108,17 +142,51 @@ export const componentRegistry: XmlWidgetRegistry = {
108
142
  /**
109
143
  * Convert block to markdown.
110
144
  */
111
- export const blockToMarkdown: BlockRenderer = (
112
- context: MessageThreadContext,
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,
113
174
  message: Message.Message,
114
175
  block: ContentBlock.Any,
115
- ) => {
116
- let str = blockToMarkdownImpl(context, message, block);
117
- if (str && !block.pending) {
118
- return (str += '\n');
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;
119
189
  }
120
-
121
- return str;
122
190
  };
123
191
 
124
192
  const blockToMarkdownImpl = (context: MessageThreadContext, message: Message.Message, block: ContentBlock.Any) => {
@@ -126,7 +194,11 @@ const blockToMarkdownImpl = (context: MessageThreadContext, message: Message.Mes
126
194
  switch (block._tag) {
127
195
  case 'text': {
128
196
  if (message.sender.role === 'user') {
129
- return `<prompt>${block.text}</prompt>`;
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
+ }
130
202
  } else {
131
203
  const text = block.text.trim();
132
204
  if (text.length > 0) {
@@ -159,22 +231,18 @@ const blockToMarkdownImpl = (context: MessageThreadContext, message: Message.Mes
159
231
  }
160
232
 
161
233
  case 'toolCall': {
162
- context.updateWidget<{ blocks: ContentBlock.Any[] }>(block.toolCallId, {
163
- blocks: [block],
164
- });
234
+ applyToolBlockToWidgetState(context, block);
165
235
  return `<toolCall id="${block.toolCallId}" />`;
166
236
  }
167
237
 
168
238
  case 'toolResult': {
169
239
  // TODO(dmaretskyi): the parameter could be undefined, perhaps tool blocks are not arriving in order.
170
- context.updateWidget<{ blocks: ContentBlock.Any[] }>(block.toolCallId, ({ blocks = [] } = { blocks: [] }) => ({
171
- blocks: [...blocks, block],
172
- }));
240
+ applyToolBlockToWidgetState(context, block);
173
241
  break;
174
242
  }
175
243
 
176
244
  case 'stats': {
177
- return renderXMLBlock('stats', { content: ContentBlock.createStatsMessage(block) });
245
+ return '';
178
246
  }
179
247
 
180
248
  case 'reasoning': {
@@ -189,6 +257,10 @@ const blockToMarkdownImpl = (context: MessageThreadContext, message: Message.Mes
189
257
  return renderXMLBlock('summary', { content: block.content, pending: block.pending });
190
258
  }
191
259
 
260
+ case 'status': {
261
+ return renderXMLBlock('status', { content: block.statusText, pending: block.pending });
262
+ }
263
+
192
264
  default: {
193
265
  // TODO(burdon): Needs stable ID.
194
266
  return `<json id="${message.id}">\n${JSON.stringify(block)}\n</json>`;
@@ -196,9 +268,19 @@ const blockToMarkdownImpl = (context: MessageThreadContext, message: Message.Mes
196
268
  }
197
269
  };
198
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
+
199
277
  const renderXMLBlock = (tag: string, opts: { content?: string; pending?: boolean; attributes?: string }) => {
200
- // Replace paragraph breaks so that markdown parser does not split the content into multiple paragraphs.
201
- const content = (opts.content ?? '').replace(/\n\n/g, ' ').trim();
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());
202
284
 
203
285
  if (opts.pending) {
204
286
  return `<${tag}${opts.attributes ? ` ${opts.attributes}` : ''}>${content}`;