@dxos/plugin-assistant 0.10.0 → 0.11.0

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 (611) hide show
  1. package/PLUGIN.mdl +3 -28
  2. package/dist/lib/AssistantPlugin.mjs +2 -0
  3. package/dist/lib/AssistantPlugin.node.mjs +55 -0
  4. package/dist/lib/AssistantPlugin.node.mjs.map +1 -0
  5. package/dist/lib/AssistantPlugin.workerd.mjs +43 -0
  6. package/dist/lib/AssistantPlugin.workerd.mjs.map +1 -0
  7. package/dist/lib/capabilities.mjs +24 -0
  8. package/dist/lib/capabilities.mjs.map +1 -0
  9. package/dist/lib/chunk-AgentArticle.mjs +52 -0
  10. package/dist/lib/chunk-AgentArticle.mjs.map +1 -0
  11. package/dist/lib/chunk-AgentProperties.mjs +35 -0
  12. package/dist/lib/chunk-AgentProperties.mjs.map +1 -0
  13. package/dist/lib/chunk-AssistantPlugin.mjs +88 -0
  14. package/dist/lib/chunk-AssistantPlugin.mjs.map +1 -0
  15. package/dist/lib/chunk-AssistantSettings.mjs +285 -0
  16. package/dist/lib/chunk-AssistantSettings.mjs.map +1 -0
  17. package/dist/lib/chunk-ChatArticle.mjs +121 -0
  18. package/dist/lib/chunk-ChatArticle.mjs.map +1 -0
  19. package/dist/lib/chunk-ChatCompanion.mjs +116 -0
  20. package/dist/lib/chunk-ChatCompanion.mjs.map +1 -0
  21. package/dist/lib/chunk-ChatDialog.mjs +73 -0
  22. package/dist/lib/chunk-ChatDialog.mjs.map +1 -0
  23. package/dist/lib/chunk-IntegrationPrompt.mjs +73 -0
  24. package/dist/lib/chunk-IntegrationPrompt.mjs.map +1 -0
  25. package/dist/lib/chunk-SpaceHomePrompt.mjs +104 -0
  26. package/dist/lib/chunk-SpaceHomePrompt.mjs.map +1 -0
  27. package/dist/lib/chunk-SpaceHomeSuggestions.mjs +60 -0
  28. package/dist/lib/chunk-SpaceHomeSuggestions.mjs.map +1 -0
  29. package/dist/lib/chunk-TracePanel.mjs +127 -0
  30. package/dist/lib/chunk-TracePanel.mjs.map +1 -0
  31. package/dist/lib/chunk-TracePanel2.mjs +7 -0
  32. package/dist/lib/chunk-TracePanel2.mjs.map +1 -0
  33. package/dist/lib/chunk-TriggerStatus.mjs +72 -0
  34. package/dist/lib/chunk-TriggerStatus.mjs.map +1 -0
  35. package/dist/lib/chunk-agent-hydrator.mjs +22 -0
  36. package/dist/lib/chunk-agent-hydrator.mjs.map +1 -0
  37. package/dist/lib/chunk-agent-service.mjs +21 -0
  38. package/dist/lib/chunk-agent-service.mjs.map +1 -0
  39. package/dist/lib/{neutral/ai-context-LIKJYMIN.mjs → chunk-ai-context.mjs} +8 -12
  40. package/dist/lib/chunk-ai-context.mjs.map +1 -0
  41. package/dist/lib/chunk-ai-service.mjs +27 -0
  42. package/dist/lib/chunk-ai-service.mjs.map +1 -0
  43. package/dist/lib/chunk-app-graph-builder.mjs +179 -0
  44. package/dist/lib/chunk-app-graph-builder.mjs.map +1 -0
  45. package/dist/lib/chunk-automation-templates.mjs +99 -0
  46. package/dist/lib/chunk-automation-templates.mjs.map +1 -0
  47. package/dist/lib/chunk-companion-chat-provisioner.mjs +123 -0
  48. package/dist/lib/chunk-companion-chat-provisioner.mjs.map +1 -0
  49. package/dist/lib/chunk-connector.mjs +60 -0
  50. package/dist/lib/chunk-connector.mjs.map +1 -0
  51. package/dist/lib/chunk-constants.mjs +9 -0
  52. package/dist/lib/chunk-constants.mjs.map +1 -0
  53. package/dist/lib/chunk-context.mjs +7 -0
  54. package/dist/lib/chunk-context.mjs.map +1 -0
  55. package/dist/lib/chunk-create-chat.mjs +53 -0
  56. package/dist/lib/chunk-create-chat.mjs.map +1 -0
  57. package/dist/lib/chunk-create-object.mjs +70 -0
  58. package/dist/lib/chunk-create-object.mjs.map +1 -0
  59. package/dist/lib/chunk-edge-model-resolver.mjs +64 -0
  60. package/dist/lib/chunk-edge-model-resolver.mjs.map +1 -0
  61. package/dist/lib/chunk-ensure-companion-chat.mjs +49 -0
  62. package/dist/lib/chunk-ensure-companion-chat.mjs.map +1 -0
  63. package/dist/lib/chunk-extensions.mjs +78 -0
  64. package/dist/lib/chunk-extensions.mjs.map +1 -0
  65. package/dist/lib/chunk-fork-chat.mjs +83 -0
  66. package/dist/lib/chunk-fork-chat.mjs.map +1 -0
  67. package/dist/lib/chunk-generate-home-suggestions.mjs +71 -0
  68. package/dist/lib/chunk-generate-home-suggestions.mjs.map +1 -0
  69. package/dist/lib/chunk-local-model-resolver.mjs +25 -0
  70. package/dist/lib/chunk-local-model-resolver.mjs.map +1 -0
  71. package/dist/lib/chunk-markdown-extension.mjs +27 -0
  72. package/dist/lib/chunk-markdown-extension.mjs.map +1 -0
  73. package/dist/lib/{neutral/chunk-L7AR4VTA.mjs → chunk-meta.mjs} +20 -25
  74. package/dist/lib/chunk-meta.mjs.map +1 -0
  75. package/dist/lib/chunk-operation-handler.mjs +13 -0
  76. package/dist/lib/chunk-operation-handler.mjs.map +1 -0
  77. package/dist/lib/chunk-paths.mjs +8 -0
  78. package/dist/lib/chunk-paths.mjs.map +1 -0
  79. package/dist/lib/chunk-processor.mjs +432 -0
  80. package/dist/lib/chunk-processor.mjs.map +1 -0
  81. package/dist/lib/chunk-react-surface.mjs +177 -0
  82. package/dist/lib/chunk-react-surface.mjs.map +1 -0
  83. package/dist/lib/chunk-run-prompt-in-new-chat.mjs +96 -0
  84. package/dist/lib/chunk-run-prompt-in-new-chat.mjs.map +1 -0
  85. package/dist/lib/chunk-set-current-chat.mjs +43 -0
  86. package/dist/lib/chunk-set-current-chat.mjs.map +1 -0
  87. package/dist/lib/chunk-settings.mjs +23 -0
  88. package/dist/lib/chunk-settings.mjs.map +1 -0
  89. package/dist/lib/chunk-skill-definition.mjs +42 -0
  90. package/dist/lib/chunk-skill-definition.mjs.map +1 -0
  91. package/dist/lib/chunk-skills.mjs +19 -0
  92. package/dist/lib/chunk-skills.mjs.map +1 -0
  93. package/dist/lib/chunk-state.mjs +32 -0
  94. package/dist/lib/chunk-state.mjs.map +1 -0
  95. package/dist/lib/chunk-toggle-trace-panel-debug.mjs +18 -0
  96. package/dist/lib/chunk-toggle-trace-panel-debug.mjs.map +1 -0
  97. package/dist/lib/chunk-toolkit.mjs +12 -0
  98. package/dist/lib/chunk-toolkit.mjs.map +1 -0
  99. package/dist/lib/chunk-types.mjs +332 -0
  100. package/dist/lib/chunk-types.mjs.map +1 -0
  101. package/dist/lib/chunk-update-chat-name.mjs +63 -0
  102. package/dist/lib/chunk-update-chat-name.mjs.map +1 -0
  103. package/dist/lib/components.mjs +2616 -0
  104. package/dist/lib/components.mjs.map +1 -0
  105. package/dist/lib/containers.mjs +17 -0
  106. package/dist/lib/containers.mjs.map +1 -0
  107. package/dist/lib/execution-graph.mjs +961 -0
  108. package/dist/lib/execution-graph.mjs.map +1 -0
  109. package/dist/lib/extensions.mjs +2 -0
  110. package/dist/lib/hooks.mjs +674 -0
  111. package/dist/lib/hooks.mjs.map +1 -0
  112. package/dist/lib/index.mjs +5 -0
  113. package/dist/lib/meta.mjs +2 -0
  114. package/dist/lib/operations.mjs +7 -0
  115. package/dist/lib/operations.mjs.map +1 -0
  116. package/dist/lib/plugin.mjs +9 -0
  117. package/dist/lib/plugin.mjs.map +1 -0
  118. package/dist/lib/plugin.workerd.mjs +2 -0
  119. package/dist/lib/skills.mjs +2 -0
  120. package/dist/lib/testing.mjs +2 -0
  121. package/dist/lib/translations.mjs +207 -0
  122. package/dist/lib/translations.mjs.map +1 -0
  123. package/dist/lib/types.mjs +2 -0
  124. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  125. package/dist/types/src/AssistantPlugin.node.d.ts.map +1 -1
  126. package/dist/types/src/AssistantPlugin.workerd.d.ts.map +1 -1
  127. package/dist/types/src/capabilities/AssistantSurfaces.d.ts +22 -0
  128. package/dist/types/src/capabilities/AssistantSurfaces.d.ts.map +1 -0
  129. package/dist/types/src/capabilities/agent-hydrator.d.ts +1 -1
  130. package/dist/types/src/capabilities/agent-service.d.ts +1 -1
  131. package/dist/types/src/capabilities/agent-service.d.ts.map +1 -1
  132. package/dist/types/src/capabilities/ai-context.d.ts +1 -1
  133. package/dist/types/src/capabilities/ai-service.d.ts +1 -1
  134. package/dist/types/src/capabilities/app-graph-builder.d.ts +12 -1
  135. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  136. package/dist/types/src/capabilities/automation-templates.d.ts +1 -1
  137. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts +1 -1
  138. package/dist/types/src/capabilities/connector.d.ts +1 -1
  139. package/dist/types/src/capabilities/create-object.d.ts +1 -1
  140. package/dist/types/src/capabilities/edge-model-resolver.d.ts +1 -1
  141. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -1
  142. package/dist/types/src/capabilities/index.d.ts +0 -2
  143. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  144. package/dist/types/src/capabilities/local-model-resolver.d.ts +1 -1
  145. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -1
  146. package/dist/types/src/capabilities/markdown-extension.d.ts +1 -1
  147. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  148. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  149. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  150. package/dist/types/src/capabilities/settings.d.ts +1 -1
  151. package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -1
  152. package/dist/types/src/capabilities/standalone-chats-query.test.d.ts +2 -0
  153. package/dist/types/src/capabilities/standalone-chats-query.test.d.ts.map +1 -0
  154. package/dist/types/src/capabilities/state.d.ts +1 -1
  155. package/dist/types/src/capabilities/toolkit.d.ts +1 -1
  156. package/dist/types/src/components/AgentProperties/AgentProperties.d.ts +4 -1
  157. package/dist/types/src/components/AgentProperties/AgentProperties.d.ts.map +1 -1
  158. package/dist/types/src/components/AgentProperties/AgentProperties.stories.d.ts.map +1 -1
  159. package/dist/types/src/components/Chat/Chat.d.ts +21 -8
  160. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  161. package/dist/types/src/components/Chat/{Chat.stories.d.ts → Error.stories.d.ts} +1 -1
  162. package/dist/types/src/components/Chat/Error.stories.d.ts.map +1 -0
  163. package/dist/types/src/components/Chat/context.d.ts +8 -0
  164. package/dist/types/src/components/Chat/context.d.ts.map +1 -1
  165. package/dist/types/src/components/Chat/events.d.ts +5 -0
  166. package/dist/types/src/components/Chat/events.d.ts.map +1 -1
  167. package/dist/types/src/components/Chat/thread.d.ts +42 -0
  168. package/dist/types/src/components/Chat/thread.d.ts.map +1 -0
  169. package/dist/types/src/components/Chat/thread.test.d.ts +2 -0
  170. package/dist/types/src/components/Chat/thread.test.d.ts.map +1 -0
  171. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  172. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts.map +1 -1
  173. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts +5 -3
  174. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts.map +1 -1
  175. package/dist/types/src/components/ChatPrompt/index.d.ts +0 -1
  176. package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -1
  177. package/dist/types/src/components/ChatThread/Anchor.stories.d.ts.map +1 -1
  178. package/dist/types/src/components/ChatThread/ChatThread.d.ts +8 -3
  179. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  180. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +30 -2
  181. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  182. package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -1
  183. package/dist/types/src/components/ChatThread/index.d.ts +1 -0
  184. package/dist/types/src/components/ChatThread/index.d.ts.map +1 -1
  185. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
  186. package/dist/types/src/components/ChatThread/sync/index.d.ts +3 -0
  187. package/dist/types/src/components/ChatThread/sync/index.d.ts.map +1 -0
  188. package/dist/types/src/components/ChatThread/{sync.d.ts → sync/sync.d.ts} +46 -2
  189. package/dist/types/src/components/ChatThread/sync/sync.d.ts.map +1 -0
  190. package/dist/types/src/components/ChatThread/sync/sync.test.d.ts.map +1 -0
  191. package/dist/types/src/components/ChatThread/sync/tool-widget-state.d.ts.map +1 -0
  192. package/dist/types/src/components/ChatThread/sync/tool-widget-state.test.d.ts.map +1 -0
  193. package/dist/types/src/components/ChatThread/widgets/BranchWidget.d.ts +15 -0
  194. package/dist/types/src/components/ChatThread/widgets/BranchWidget.d.ts.map +1 -0
  195. package/dist/types/src/components/ChatThread/widgets/BranchWidget.stories.d.ts +21 -0
  196. package/dist/types/src/components/ChatThread/widgets/BranchWidget.stories.d.ts.map +1 -0
  197. package/dist/types/src/components/ChatThread/widgets/BranchWidget.test.d.ts +2 -0
  198. package/dist/types/src/components/ChatThread/widgets/BranchWidget.test.d.ts.map +1 -0
  199. package/dist/types/src/components/ChatThread/widgets/ReferenceWidget.d.ts.map +1 -1
  200. package/dist/types/src/components/ChatThread/widgets/SuggestionWidget.d.ts.map +1 -1
  201. package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts +1 -2
  202. package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts.map +1 -1
  203. package/dist/types/src/components/ChatThread/widgets/defaults.d.ts +6 -0
  204. package/dist/types/src/components/ChatThread/widgets/defaults.d.ts.map +1 -1
  205. package/dist/types/src/components/ChatThread/widgets/format-time.d.ts +2 -0
  206. package/dist/types/src/components/ChatThread/widgets/format-time.d.ts.map +1 -0
  207. package/dist/types/src/components/ChatThread/widgets/index.d.ts +4 -1
  208. package/dist/types/src/components/ChatThread/widgets/index.d.ts.map +1 -1
  209. package/dist/types/src/components/ChatThread/widgets/is-tool-message.d.ts +3 -0
  210. package/dist/types/src/components/ChatThread/widgets/is-tool-message.d.ts.map +1 -0
  211. package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.d.ts +16 -0
  212. package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.d.ts.map +1 -0
  213. package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.stories.d.ts +210 -0
  214. package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.stories.d.ts.map +1 -0
  215. package/dist/types/src/components/ConnectorAuthMenu/index.d.ts +2 -0
  216. package/dist/types/src/components/ConnectorAuthMenu/index.d.ts.map +1 -0
  217. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts +1 -1
  218. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -1
  219. package/dist/types/src/components/TaskList/TaskList.d.ts +9 -11
  220. package/dist/types/src/components/TaskList/TaskList.d.ts.map +1 -1
  221. package/dist/types/src/components/TaskList/TaskList.stories.d.ts +3 -4
  222. package/dist/types/src/components/TaskList/TaskList.stories.d.ts.map +1 -1
  223. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +1 -2
  224. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -1
  225. package/dist/types/src/components/ToolBlock/index.d.ts +1 -0
  226. package/dist/types/src/components/ToolBlock/index.d.ts.map +1 -1
  227. package/dist/types/src/components/ToolBlock/is-tool-message.d.ts +3 -0
  228. package/dist/types/src/components/ToolBlock/is-tool-message.d.ts.map +1 -0
  229. package/dist/types/src/components/Toolbox/Toolbox.d.ts +1 -1
  230. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  231. package/dist/types/src/components/index.d.ts +1 -0
  232. package/dist/types/src/components/index.d.ts.map +1 -1
  233. package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts +5 -2
  234. package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts.map +1 -1
  235. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts.map +1 -1
  236. package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts +4 -1
  237. package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts.map +1 -1
  238. package/dist/types/src/containers/AssistantSettings/AssistantSettings.d.ts +4 -1
  239. package/dist/types/src/containers/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  240. package/dist/types/src/containers/AssistantSettings/AssistantSettings.stories.d.ts +4 -1
  241. package/dist/types/src/containers/AssistantSettings/AssistantSettings.stories.d.ts.map +1 -1
  242. package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts +4 -6
  243. package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts.map +1 -1
  244. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts.map +1 -1
  245. package/dist/types/src/containers/ChatArticle/ChatArticle.stories.d.ts +22 -1
  246. package/dist/types/src/containers/ChatArticle/ChatArticle.stories.d.ts.map +1 -1
  247. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -1
  248. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts +4 -1
  249. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -1
  250. package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts +4 -7
  251. package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts.map +1 -1
  252. package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts +4 -9
  253. package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts.map +1 -1
  254. package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts +5 -7
  255. package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts.map +1 -1
  256. package/dist/types/src/containers/TracePanel/TracePanel.d.ts +1 -1
  257. package/dist/types/src/containers/TracePanel/TracePanel.d.ts.map +1 -1
  258. package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts.map +1 -1
  259. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts +15 -1
  260. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -1
  261. package/dist/types/src/containers/index.d.ts +0 -1
  262. package/dist/types/src/containers/index.d.ts.map +1 -1
  263. package/dist/types/src/execution-graph/execution-graph.d.ts +12 -1
  264. package/dist/types/src/execution-graph/execution-graph.d.ts.map +1 -1
  265. package/dist/types/src/execution-graph/index.d.ts +1 -1
  266. package/dist/types/src/execution-graph/index.d.ts.map +1 -1
  267. package/dist/types/src/execution-graph/pending-block-status.d.ts.map +1 -1
  268. package/dist/types/src/execution-graph/span-tree.d.ts +17 -0
  269. package/dist/types/src/execution-graph/span-tree.d.ts.map +1 -1
  270. package/dist/types/src/feed-logger.d.ts +1 -1
  271. package/dist/types/src/feed-logger.d.ts.map +1 -1
  272. package/dist/types/src/hooks/index.d.ts +1 -1
  273. package/dist/types/src/hooks/index.d.ts.map +1 -1
  274. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  275. package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -1
  276. package/dist/types/src/hooks/useContextObjects.d.ts +1 -1
  277. package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -1
  278. package/dist/types/src/hooks/useSelectionContext.d.ts +13 -0
  279. package/dist/types/src/hooks/useSelectionContext.d.ts.map +1 -0
  280. package/dist/types/src/hooks/useSelectionContext.test.d.ts +2 -0
  281. package/dist/types/src/hooks/useSelectionContext.test.d.ts.map +1 -0
  282. package/dist/types/src/hooks/useTraceMessages.d.ts.map +1 -1
  283. package/dist/types/src/operations/index.d.ts.map +1 -1
  284. package/dist/types/src/processor/index.d.ts +1 -0
  285. package/dist/types/src/processor/index.d.ts.map +1 -1
  286. package/dist/types/src/processor/processor.d.ts +5 -2
  287. package/dist/types/src/processor/processor.d.ts.map +1 -1
  288. package/dist/types/src/processor/prompt.d.ts +18 -0
  289. package/dist/types/src/processor/prompt.d.ts.map +1 -0
  290. package/dist/types/src/processor/prompt.test.d.ts +2 -0
  291. package/dist/types/src/processor/prompt.test.d.ts.map +1 -0
  292. package/dist/types/src/processor/streaming.node.test.d.ts +2 -0
  293. package/dist/types/src/processor/streaming.node.test.d.ts.map +1 -0
  294. package/dist/types/src/skills/assistant/skill.d.ts.map +1 -1
  295. package/dist/types/src/templates/scaffold.d.ts +1 -1
  296. package/dist/types/src/templates/scaffold.d.ts.map +1 -1
  297. package/dist/types/src/translations.d.ts.map +1 -1
  298. package/dist/types/src/types/AssistantCapabilities.d.ts +1 -1
  299. package/dist/types/src/types/AssistantCapabilities.d.ts.map +1 -1
  300. package/dist/types/src/types/AssistantOperation.d.ts +2 -13
  301. package/dist/types/src/types/AssistantOperation.d.ts.map +1 -1
  302. package/dist/types/src/types/ChatSurface.d.ts +2 -2
  303. package/dist/types/src/types/ChatSurface.d.ts.map +1 -1
  304. package/dist/types/src/types/Ollama.d.ts +1 -1
  305. package/dist/types/src/types/Ollama.d.ts.map +1 -1
  306. package/dist/types/tsconfig.tsbuildinfo +1 -1
  307. package/dx.config.ts +1 -0
  308. package/package.json +106 -105
  309. package/src/AssistantPlugin.node.ts +1 -2
  310. package/src/AssistantPlugin.test.ts +60 -62
  311. package/src/AssistantPlugin.ts +1 -10
  312. package/src/AssistantPlugin.workerd.ts +1 -2
  313. package/src/capabilities/AssistantSurfaces.tsx +86 -0
  314. package/src/capabilities/agent-service.ts +1 -1
  315. package/src/capabilities/app-graph-builder.ts +31 -17
  316. package/src/capabilities/companion-chat-provisioner.ts +12 -11
  317. package/src/capabilities/connector.ts +3 -3
  318. package/src/capabilities/edge-model-resolver.ts +5 -2
  319. package/src/capabilities/index.ts +0 -2
  320. package/src/capabilities/react-surface.ts +135 -0
  321. package/src/capabilities/skill-definition.ts +4 -0
  322. package/src/capabilities/standalone-chats-query.test.ts +51 -0
  323. package/src/capabilities/state.ts +1 -1
  324. package/src/components/AgentProperties/AgentProperties.stories.tsx +6 -7
  325. package/src/components/AgentProperties/AgentProperties.tsx +37 -30
  326. package/src/components/Chat/Chat.tsx +275 -59
  327. package/src/components/Chat/{Chat.stories.tsx → Error.stories.tsx} +1 -1
  328. package/src/components/Chat/context.ts +8 -0
  329. package/src/components/Chat/events.ts +5 -0
  330. package/src/components/Chat/thread.test.ts +127 -0
  331. package/src/components/Chat/thread.ts +87 -0
  332. package/src/components/ChatPrompt/ChatActions.tsx +8 -8
  333. package/src/components/ChatPrompt/ChatMcpErrors.tsx +2 -2
  334. package/src/components/ChatPrompt/ChatOptions.stories.tsx +2 -1
  335. package/src/components/ChatPrompt/ChatOptions.tsx +5 -5
  336. package/src/components/ChatPrompt/ChatPrompt.tsx +33 -6
  337. package/src/components/ChatPrompt/index.ts +0 -1
  338. package/src/components/ChatThread/Anchor.stories.tsx +2 -1
  339. package/src/components/ChatThread/ChatThread.stories.tsx +99 -4
  340. package/src/components/ChatThread/ChatThread.tsx +34 -6
  341. package/src/components/ChatThread/Link.tsx +1 -0
  342. package/src/components/ChatThread/index.ts +2 -0
  343. package/src/components/ChatThread/registry.tsx +28 -4
  344. package/src/components/ChatThread/sync/index.ts +6 -0
  345. package/src/components/ChatThread/{sync.test.ts → sync/sync.test.ts} +167 -7
  346. package/src/components/ChatThread/{sync.ts → sync/sync.ts} +97 -3
  347. package/src/components/ChatThread/{tool-widget-state.ts → sync/tool-widget-state.ts} +1 -3
  348. package/src/components/ChatThread/widgets/BranchWidget.stories.tsx +83 -0
  349. package/src/components/ChatThread/widgets/BranchWidget.test.ts +55 -0
  350. package/src/components/ChatThread/widgets/BranchWidget.tsx +61 -0
  351. package/src/components/ChatThread/widgets/FallbackWidget.tsx +2 -2
  352. package/src/components/ChatThread/widgets/ReasoningWidget.ts +1 -1
  353. package/src/components/ChatThread/widgets/ReferenceWidget.ts +1 -6
  354. package/src/components/ChatThread/widgets/SuggestionWidget.ts +12 -3
  355. package/src/components/ChatThread/widgets/SummaryWidget.tsx +1 -1
  356. package/src/components/ChatThread/widgets/ToolWidget.tsx +15 -9
  357. package/src/components/ChatThread/widgets/defaults.ts +7 -1
  358. package/src/components/ChatThread/widgets/format-time.ts +45 -0
  359. package/src/components/ChatThread/widgets/index.ts +4 -1
  360. package/src/components/ChatThread/widgets/is-tool-message.ts +13 -0
  361. package/src/components/ConnectorAuthMenu/ConnectorAuthMenu.stories.tsx +177 -0
  362. package/src/components/ConnectorAuthMenu/ConnectorAuthMenu.tsx +82 -0
  363. package/src/components/ConnectorAuthMenu/index.ts +5 -0
  364. package/src/components/ProcessTree/ProcessTree.stories.tsx +1 -1
  365. package/src/components/TaskList/TaskList.stories.tsx +19 -26
  366. package/src/components/TaskList/TaskList.tsx +32 -104
  367. package/src/components/ToolBlock/ToolBlock.tsx +1 -5
  368. package/src/components/ToolBlock/index.ts +1 -0
  369. package/src/components/ToolBlock/is-tool-message.ts +13 -0
  370. package/src/components/Toolbox/Toolbox.tsx +1 -1
  371. package/src/components/index.ts +1 -0
  372. package/src/containers/AgentArticle/AgentArticle.stories.tsx +18 -11
  373. package/src/containers/AgentArticle/AgentArticle.tsx +27 -151
  374. package/src/containers/AgentProperties/AgentProperties.tsx +21 -17
  375. package/src/containers/AssistantSettings/AssistantSettings.tsx +2 -0
  376. package/src/containers/AssistantSettings/OllamaModels.tsx +6 -4
  377. package/src/containers/ChatArticle/ChatArticle.stories.tsx +200 -27
  378. package/src/containers/ChatArticle/ChatArticle.tsx +25 -5
  379. package/src/containers/ChatCompanion/ChatCompanion.tsx +45 -10
  380. package/src/containers/ChatDialog/ChatDialog.tsx +4 -1
  381. package/src/containers/IntegrationPrompt/IntegrationPrompt.tsx +9 -6
  382. package/src/containers/SpaceHomePrompt/SpaceHomePrompt.tsx +2 -0
  383. package/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.tsx +40 -39
  384. package/src/containers/TracePanel/TracePanel.stories.tsx +9 -4
  385. package/src/containers/TracePanel/TracePanel.tsx +22 -6
  386. package/src/containers/TriggerStatus/TriggerStatus.tsx +9 -16
  387. package/src/containers/index.ts +0 -1
  388. package/src/execution-graph/SPEC.md +60 -2
  389. package/src/execution-graph/execution-graph.ts +15 -2
  390. package/src/execution-graph/index.ts +1 -0
  391. package/src/execution-graph/pending-block-status.ts +3 -2
  392. package/src/execution-graph/span-tree.test.ts +87 -1
  393. package/src/execution-graph/span-tree.ts +95 -0
  394. package/src/feed-logger.ts +6 -6
  395. package/src/hooks/index.ts +1 -1
  396. package/src/hooks/useChatProcessor.ts +2 -1
  397. package/src/hooks/useChatToolbarActions.ts +22 -19
  398. package/src/hooks/useContextObjects.ts +9 -3
  399. package/src/hooks/useSelectionContext.test.ts +93 -0
  400. package/src/hooks/useSelectionContext.ts +72 -0
  401. package/src/hooks/useSkillRegistry.ts +1 -1
  402. package/src/hooks/useTraceMessages.ts +5 -3
  403. package/src/operations/create-chat.ts +2 -2
  404. package/src/operations/fork-chat.ts +2 -2
  405. package/src/operations/generate-home-suggestions.test.ts +2 -2
  406. package/src/operations/index.ts +0 -1
  407. package/src/operations/prompt.node.test.ts +1 -1
  408. package/src/paths.ts +3 -3
  409. package/src/processor/index.ts +1 -0
  410. package/src/processor/processor.node.test.ts +1 -1
  411. package/src/processor/processor.ts +33 -5
  412. package/src/processor/prompt.test.ts +37 -0
  413. package/src/processor/prompt.ts +42 -0
  414. package/src/processor/streaming.node.test.ts +196 -0
  415. package/src/skills/assistant/skill.node.test.ts +2 -2
  416. package/src/skills/assistant/skill.ts +3 -5
  417. package/src/templates/routine-templates.test.ts +1 -2
  418. package/src/templates/scaffold.ts +3 -3
  419. package/src/testing/data/trace-timeline-multiple.dx.json +1 -1
  420. package/src/testing/data/trace-timeline-remote.dx.json +1 -1
  421. package/src/testing/data/trace-timeline.dx.json +1 -2
  422. package/src/testing/trace-timeline.node.test.ts +3 -3
  423. package/src/translations.ts +11 -10
  424. package/src/types/AssistantCapabilities.ts +1 -1
  425. package/src/types/AssistantOperation.ts +8 -31
  426. package/src/types/ChatSurface.ts +3 -3
  427. package/src/types/Ollama.ts +1 -1
  428. package/dist/lib/neutral/AgentArticle-GV6EEW3I.mjs +0 -161
  429. package/dist/lib/neutral/AgentArticle-GV6EEW3I.mjs.map +0 -7
  430. package/dist/lib/neutral/AgentProperties-LFTEYJ54.mjs +0 -40
  431. package/dist/lib/neutral/AgentProperties-LFTEYJ54.mjs.map +0 -7
  432. package/dist/lib/neutral/AssistantPlugin.mjs +0 -10
  433. package/dist/lib/neutral/AssistantPlugin.mjs.map +0 -7
  434. package/dist/lib/neutral/AssistantPlugin.node.mjs +0 -72
  435. package/dist/lib/neutral/AssistantPlugin.node.mjs.map +0 -7
  436. package/dist/lib/neutral/AssistantPlugin.workerd.mjs +0 -13
  437. package/dist/lib/neutral/AssistantPlugin.workerd.mjs.map +0 -7
  438. package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs +0 -302
  439. package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs.map +0 -7
  440. package/dist/lib/neutral/ChatArticle-OO7GGEFW.mjs +0 -8
  441. package/dist/lib/neutral/ChatArticle-OO7GGEFW.mjs.map +0 -7
  442. package/dist/lib/neutral/ChatCompanion-GIFJRY6I.mjs +0 -128
  443. package/dist/lib/neutral/ChatCompanion-GIFJRY6I.mjs.map +0 -7
  444. package/dist/lib/neutral/ChatDialog-5MXN4MXS.mjs +0 -74
  445. package/dist/lib/neutral/ChatDialog-5MXN4MXS.mjs.map +0 -7
  446. package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs +0 -72
  447. package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs.map +0 -7
  448. package/dist/lib/neutral/PlanArticle-VPK2IYWU.mjs +0 -34
  449. package/dist/lib/neutral/PlanArticle-VPK2IYWU.mjs.map +0 -7
  450. package/dist/lib/neutral/SpaceHomePrompt-ISAB76LD.mjs +0 -114
  451. package/dist/lib/neutral/SpaceHomePrompt-ISAB76LD.mjs.map +0 -7
  452. package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs +0 -63
  453. package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs.map +0 -7
  454. package/dist/lib/neutral/TracePanel-JKNWADJ4.mjs +0 -12
  455. package/dist/lib/neutral/TracePanel-JKNWADJ4.mjs.map +0 -7
  456. package/dist/lib/neutral/TriggerStatus-FURRBHYA.mjs +0 -95
  457. package/dist/lib/neutral/TriggerStatus-FURRBHYA.mjs.map +0 -7
  458. package/dist/lib/neutral/agent-hydrator-OBO3RHLO.mjs +0 -23
  459. package/dist/lib/neutral/agent-hydrator-OBO3RHLO.mjs.map +0 -7
  460. package/dist/lib/neutral/agent-service-XFJ4VQMT.mjs +0 -32
  461. package/dist/lib/neutral/agent-service-XFJ4VQMT.mjs.map +0 -7
  462. package/dist/lib/neutral/ai-context-LIKJYMIN.mjs.map +0 -7
  463. package/dist/lib/neutral/ai-service-DM6YXWUC.mjs +0 -44
  464. package/dist/lib/neutral/ai-service-DM6YXWUC.mjs.map +0 -7
  465. package/dist/lib/neutral/app-graph-builder-OPVOEQY7.mjs +0 -249
  466. package/dist/lib/neutral/app-graph-builder-OPVOEQY7.mjs.map +0 -7
  467. package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs +0 -97
  468. package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs.map +0 -7
  469. package/dist/lib/neutral/capabilities/index.mjs +0 -47
  470. package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
  471. package/dist/lib/neutral/chunk-5IHQ52KJ.mjs +0 -9
  472. package/dist/lib/neutral/chunk-5IHQ52KJ.mjs.map +0 -7
  473. package/dist/lib/neutral/chunk-6Q4OBGIK.mjs +0 -420
  474. package/dist/lib/neutral/chunk-6Q4OBGIK.mjs.map +0 -7
  475. package/dist/lib/neutral/chunk-BXI2R4OO.mjs +0 -410
  476. package/dist/lib/neutral/chunk-BXI2R4OO.mjs.map +0 -7
  477. package/dist/lib/neutral/chunk-CMPLPDYE.mjs +0 -30
  478. package/dist/lib/neutral/chunk-CMPLPDYE.mjs.map +0 -7
  479. package/dist/lib/neutral/chunk-GPHT3HYS.mjs +0 -8
  480. package/dist/lib/neutral/chunk-GPHT3HYS.mjs.map +0 -7
  481. package/dist/lib/neutral/chunk-HKLSFB5I.mjs +0 -90
  482. package/dist/lib/neutral/chunk-HKLSFB5I.mjs.map +0 -7
  483. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
  484. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
  485. package/dist/lib/neutral/chunk-L7AR4VTA.mjs.map +0 -7
  486. package/dist/lib/neutral/chunk-LS72HWMM.mjs +0 -42
  487. package/dist/lib/neutral/chunk-LS72HWMM.mjs.map +0 -7
  488. package/dist/lib/neutral/chunk-OZWZGIV2.mjs +0 -12
  489. package/dist/lib/neutral/chunk-OZWZGIV2.mjs.map +0 -7
  490. package/dist/lib/neutral/chunk-QOKLFHUS.mjs +0 -13
  491. package/dist/lib/neutral/chunk-QOKLFHUS.mjs.map +0 -7
  492. package/dist/lib/neutral/chunk-SCTHQVIJ.mjs +0 -155
  493. package/dist/lib/neutral/chunk-SCTHQVIJ.mjs.map +0 -7
  494. package/dist/lib/neutral/chunk-U4LTLBAX.mjs +0 -56
  495. package/dist/lib/neutral/chunk-U4LTLBAX.mjs.map +0 -7
  496. package/dist/lib/neutral/chunk-UPKFUZ6V.mjs +0 -115
  497. package/dist/lib/neutral/chunk-UPKFUZ6V.mjs.map +0 -7
  498. package/dist/lib/neutral/chunk-V2Y4XE3O.mjs +0 -12
  499. package/dist/lib/neutral/chunk-V2Y4XE3O.mjs.map +0 -7
  500. package/dist/lib/neutral/chunk-VTK5R4H3.mjs +0 -9
  501. package/dist/lib/neutral/chunk-VTK5R4H3.mjs.map +0 -7
  502. package/dist/lib/neutral/chunk-XVGEJWJX.mjs +0 -133
  503. package/dist/lib/neutral/chunk-XVGEJWJX.mjs.map +0 -7
  504. package/dist/lib/neutral/companion-chat-provisioner-IQV5VIVE.mjs +0 -126
  505. package/dist/lib/neutral/companion-chat-provisioner-IQV5VIVE.mjs.map +0 -7
  506. package/dist/lib/neutral/components/index.mjs +0 -2527
  507. package/dist/lib/neutral/components/index.mjs.map +0 -7
  508. package/dist/lib/neutral/connector-ITLLTBPZ.mjs +0 -70
  509. package/dist/lib/neutral/connector-ITLLTBPZ.mjs.map +0 -7
  510. package/dist/lib/neutral/containers/index.mjs +0 -31
  511. package/dist/lib/neutral/containers/index.mjs.map +0 -7
  512. package/dist/lib/neutral/create-chat-YGVZZYGP.mjs +0 -56
  513. package/dist/lib/neutral/create-chat-YGVZZYGP.mjs.map +0 -7
  514. package/dist/lib/neutral/create-object-5PAEJ6KM.mjs +0 -76
  515. package/dist/lib/neutral/create-object-5PAEJ6KM.mjs.map +0 -7
  516. package/dist/lib/neutral/edge-model-resolver-WDJWDZTT.mjs +0 -55
  517. package/dist/lib/neutral/edge-model-resolver-WDJWDZTT.mjs.map +0 -7
  518. package/dist/lib/neutral/ensure-companion-chat-AMOF3C66.mjs +0 -58
  519. package/dist/lib/neutral/ensure-companion-chat-AMOF3C66.mjs.map +0 -7
  520. package/dist/lib/neutral/execution-graph/index.mjs +0 -977
  521. package/dist/lib/neutral/execution-graph/index.mjs.map +0 -7
  522. package/dist/lib/neutral/extensions/index.mjs +0 -8
  523. package/dist/lib/neutral/extensions/index.mjs.map +0 -7
  524. package/dist/lib/neutral/fork-chat-RMAAYYQF.mjs +0 -92
  525. package/dist/lib/neutral/fork-chat-RMAAYYQF.mjs.map +0 -7
  526. package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs +0 -93
  527. package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs.map +0 -7
  528. package/dist/lib/neutral/hooks/index.mjs +0 -877
  529. package/dist/lib/neutral/hooks/index.mjs.map +0 -7
  530. package/dist/lib/neutral/index.mjs +0 -42
  531. package/dist/lib/neutral/index.mjs.map +0 -7
  532. package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs +0 -24
  533. package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs.map +0 -7
  534. package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs +0 -41
  535. package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs.map +0 -7
  536. package/dist/lib/neutral/meta.json +0 -1
  537. package/dist/lib/neutral/meta.mjs +0 -12
  538. package/dist/lib/neutral/meta.mjs.map +0 -7
  539. package/dist/lib/neutral/migrations-7DEMVBOG.mjs +0 -28
  540. package/dist/lib/neutral/migrations-7DEMVBOG.mjs.map +0 -7
  541. package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs +0 -18
  542. package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs.map +0 -7
  543. package/dist/lib/neutral/operation-handler-2LEN45GP.mjs +0 -8
  544. package/dist/lib/neutral/operation-handler-2LEN45GP.mjs.map +0 -7
  545. package/dist/lib/neutral/operations/index.mjs +0 -8
  546. package/dist/lib/neutral/operations/index.mjs.map +0 -7
  547. package/dist/lib/neutral/plugin.mjs +0 -16
  548. package/dist/lib/neutral/plugin.mjs.map +0 -7
  549. package/dist/lib/neutral/plugin.workerd.mjs +0 -13
  550. package/dist/lib/neutral/plugin.workerd.mjs.map +0 -7
  551. package/dist/lib/neutral/react-surface-HEJEK44F.mjs +0 -171
  552. package/dist/lib/neutral/react-surface-HEJEK44F.mjs.map +0 -7
  553. package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs +0 -28
  554. package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs.map +0 -7
  555. package/dist/lib/neutral/run-prompt-in-new-chat-RNUJE2FM.mjs +0 -102
  556. package/dist/lib/neutral/run-prompt-in-new-chat-RNUJE2FM.mjs.map +0 -7
  557. package/dist/lib/neutral/set-current-chat-VWBPSIMZ.mjs +0 -48
  558. package/dist/lib/neutral/set-current-chat-VWBPSIMZ.mjs.map +0 -7
  559. package/dist/lib/neutral/settings-7Q3RITIT.mjs +0 -28
  560. package/dist/lib/neutral/settings-7Q3RITIT.mjs.map +0 -7
  561. package/dist/lib/neutral/skill-definition-553MQRTR.mjs +0 -8
  562. package/dist/lib/neutral/skill-definition-553MQRTR.mjs.map +0 -7
  563. package/dist/lib/neutral/skills/index.mjs +0 -8
  564. package/dist/lib/neutral/skills/index.mjs.map +0 -7
  565. package/dist/lib/neutral/state-4LGAKSSD.mjs +0 -34
  566. package/dist/lib/neutral/state-4LGAKSSD.mjs.map +0 -7
  567. package/dist/lib/neutral/testing.mjs +0 -8
  568. package/dist/lib/neutral/testing.mjs.map +0 -7
  569. package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs +0 -21
  570. package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs.map +0 -7
  571. package/dist/lib/neutral/toolkit-ETWLG5NT.mjs +0 -8
  572. package/dist/lib/neutral/toolkit-ETWLG5NT.mjs.map +0 -7
  573. package/dist/lib/neutral/translations.mjs +0 -217
  574. package/dist/lib/neutral/translations.mjs.map +0 -7
  575. package/dist/lib/neutral/types/index.mjs +0 -24
  576. package/dist/lib/neutral/types/index.mjs.map +0 -7
  577. package/dist/lib/neutral/update-chat-name-IJJELRR6.mjs +0 -61
  578. package/dist/lib/neutral/update-chat-name-IJJELRR6.mjs.map +0 -7
  579. package/dist/types/src/capabilities/migrations.d.ts +0 -5
  580. package/dist/types/src/capabilities/migrations.d.ts.map +0 -1
  581. package/dist/types/src/capabilities/navigation-resolver.d.ts +0 -5
  582. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +0 -1
  583. package/dist/types/src/components/Chat/Chat.stories.d.ts.map +0 -1
  584. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts +0 -10
  585. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +0 -1
  586. package/dist/types/src/components/ChatThread/sync.d.ts.map +0 -1
  587. package/dist/types/src/components/ChatThread/sync.test.d.ts.map +0 -1
  588. package/dist/types/src/components/ChatThread/tool-widget-state.d.ts.map +0 -1
  589. package/dist/types/src/components/ChatThread/tool-widget-state.test.d.ts.map +0 -1
  590. package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts +0 -6
  591. package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts.map +0 -1
  592. package/dist/types/src/containers/PlanArticle/index.d.ts +0 -2
  593. package/dist/types/src/containers/PlanArticle/index.d.ts.map +0 -1
  594. package/dist/types/src/hooks/useFlush.d.ts +0 -6
  595. package/dist/types/src/hooks/useFlush.d.ts.map +0 -1
  596. package/dist/types/src/operations/resolve-navigation-targets.d.ts +0 -5
  597. package/dist/types/src/operations/resolve-navigation-targets.d.ts.map +0 -1
  598. package/src/AssistantPlugin.conversations.json +0 -1
  599. package/src/capabilities/migrations.ts +0 -28
  600. package/src/capabilities/navigation-resolver.ts +0 -20
  601. package/src/capabilities/react-surface.tsx +0 -177
  602. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +0 -42
  603. package/src/components/ChatThread/DEBUG.md +0 -64
  604. package/src/containers/PlanArticle/PlanArticle.tsx +0 -37
  605. package/src/containers/PlanArticle/index.ts +0 -5
  606. package/src/hooks/useFlush.ts +0 -35
  607. package/src/operations/resolve-navigation-targets.ts +0 -44
  608. /package/dist/types/src/components/ChatThread/{sync.test.d.ts → sync/sync.test.d.ts} +0 -0
  609. /package/dist/types/src/components/ChatThread/{tool-widget-state.d.ts → sync/tool-widget-state.d.ts} +0 -0
  610. /package/dist/types/src/components/ChatThread/{tool-widget-state.test.d.ts → sync/tool-widget-state.test.d.ts} +0 -0
  611. /package/src/components/ChatThread/{tool-widget-state.test.ts → sync/tool-widget-state.test.ts} +0 -0
@@ -2,25 +2,31 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Atom } from '@effect-atom/atom';
6
- import { useAtomValue } from '@effect-atom/atom-react';
7
5
  import * as Option from 'effect/Option';
8
6
  import React, { useCallback, useMemo } from 'react';
9
7
 
10
8
  import { type Agent } from '@dxos/assistant-toolkit';
9
+ import { Trigger } from '@dxos/compute';
11
10
  import { Filter, Obj, Ref, Type } from '@dxos/echo';
12
- import { useQuery } from '@dxos/react-client/echo';
11
+ import { useQuery } from '@dxos/echo-react';
12
+ import { URI } from '@dxos/keys';
13
13
  import { Input, useTranslation } from '@dxos/react-ui';
14
14
  import { Form } from '@dxos/react-ui-form';
15
15
  import { FeedAnnotation } from '@dxos/schema';
16
16
 
17
17
  import { meta } from '#meta';
18
18
 
19
+ /** Mirrors the foreign keys stamped by the agent-wizard automation compiler (`sync-automation`). */
20
+ const AGENT_TRIGGER_EXTENSION_KEY = 'org.dxos.extension.AgentTrigger';
21
+ const AGENT_TRIGGER_TARGET_EXTENSION_KEY = 'org.dxos.extension.AgentTriggerTarget';
22
+
19
23
  export type AgentPropertiesProps = {
20
24
  agent: Agent.Agent;
25
+ /** Invoked with the FULL next subscription set when the user toggles one. */
26
+ onSubscriptionsChanged?: (subscriptions: Ref.Ref<Obj.Unknown>[]) => void;
21
27
  };
22
28
 
23
- export const AgentProperties = ({ agent }: AgentPropertiesProps) => {
29
+ export const AgentProperties = ({ agent, onSubscriptionsChanged }: AgentPropertiesProps) => {
24
30
  const { t } = useTranslation(meta.profile.key);
25
31
  const db = Obj.getDatabase(agent);
26
32
 
@@ -43,36 +49,37 @@ export const AgentProperties = ({ agent }: AgentPropertiesProps) => {
43
49
 
44
50
  const subscribedObjects = useQuery(db, feedFilter);
45
51
 
46
- // Query all existing subscriptions (e.g., mail, calendar, etc.)
47
- const existingSubscriptions = useAtomValue(
48
- useMemo(
49
- () =>
50
- Obj.atom(agent).pipe((_) =>
51
- Atom.make((get) => {
52
- const agentObj = get(_);
53
- const selectedSubscriptions: Obj.Unknown[] = subscribedObjects.filter((object) =>
54
- agentObj.subscriptions.some((subscription) => subscription.uri === Obj.getURI(object)),
55
- );
56
-
57
- return selectedSubscriptions;
58
- }),
59
- ),
60
- [agent, subscribedObjects],
61
- ),
52
+ // The subscription state lives on the compiled automation (routine triggers), not the agent:
53
+ // a trigger's target foreign key holds the subscribed object's URI (`timer:` keys are schedules).
54
+ const triggers = useQuery(
55
+ db,
56
+ Filter.foreignKeys(Trigger.Trigger, [{ source: AGENT_TRIGGER_EXTENSION_KEY, id: agent.id }]),
57
+ );
58
+ const subscribedUris = useMemo(
59
+ () =>
60
+ new Set(
61
+ triggers
62
+ .map(
63
+ (trigger) => Obj.getMeta(trigger).keys.find((key) => key.source === AGENT_TRIGGER_TARGET_EXTENSION_KEY)?.id,
64
+ )
65
+ .filter((id): id is string => id !== undefined && !id.startsWith('timer:')),
66
+ ),
67
+ [triggers],
62
68
  );
63
69
 
64
- // Create/remove agent subscription.
70
+ // Toggle recompiles the full subscription set (see `sync-automation`'s per-category reconcile).
65
71
  const handleSubscriptionChange = useCallback(
66
72
  (object: Obj.Unknown, checked: boolean) => {
67
- Obj.update(agent, (agent) => {
68
- if (checked) {
69
- agent.subscriptions.push(Ref.fromURI(Obj.getURI(object)));
70
- } else {
71
- agent.subscriptions = agent.subscriptions.filter((subscription) => subscription.uri !== Obj.getURI(object));
72
- }
73
- });
73
+ const next = new Set(subscribedUris);
74
+ const uri = Obj.getURI(object);
75
+ if (checked) {
76
+ next.add(uri);
77
+ } else {
78
+ next.delete(uri);
79
+ }
80
+ onSubscriptionsChanged?.([...next].map((subscription) => Ref.fromURI(URI.make(subscription))));
74
81
  },
75
- [agent],
82
+ [subscribedUris, onSubscriptionsChanged],
76
83
  );
77
84
 
78
85
  if (subscribedObjects.length === 0) {
@@ -89,7 +96,7 @@ export const AgentProperties = ({ agent }: AgentPropertiesProps) => {
89
96
  <Input.Root key={object.id}>
90
97
  <div className='flex items-center gap-2'>
91
98
  <Input.Checkbox
92
- checked={existingSubscriptions.includes(object)}
99
+ checked={subscribedUris.has(Obj.getURI(object))}
93
100
  onCheckedChange={(checked) => {
94
101
  handleSubscriptionChange(object, checked === true);
95
102
  }}
@@ -4,34 +4,47 @@
4
4
 
5
5
  import { Atom } from '@effect-atom/atom';
6
6
  import { useAtomValue } from '@effect-atom/atom-react';
7
- import * as Array from 'effect/Array';
8
7
  import * as Option from 'effect/Option';
9
8
  import React, { type PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from 'react';
10
9
 
11
- import { Plan } from '@dxos/assistant-toolkit';
12
10
  import { Event } from '@dxos/async';
13
- import { getSpace } from '@dxos/client/echo';
14
11
  import { type Database, Filter, Obj, Query } from '@dxos/echo';
15
- import { useObject, useQuery } from '@dxos/react-client/echo';
16
- import { useIdentity } from '@dxos/react-client/halo';
17
- import { Button, Toast, composable, composableProps, useTranslation } from '@dxos/react-ui';
18
- import { type MarkdownStreamController } from '@dxos/react-ui-markdown';
12
+ import { useObject, useQuery } from '@dxos/echo-react';
13
+ import { useIdentity } from '@dxos/halo-react';
14
+ import { log } from '@dxos/log';
15
+ import {
16
+ Button,
17
+ type ThemedClassName,
18
+ Toast,
19
+ composable,
20
+ composableProps,
21
+ useDynamicRef,
22
+ useTranslation,
23
+ } from '@dxos/react-ui';
24
+ import { Minimap, type MinimapMarker } from '@dxos/react-ui-components';
25
+ import { type DocumentRange, type MarkdownStreamController } from '@dxos/react-ui-markdown';
19
26
  import { Menu, MenuRootProps } from '@dxos/react-ui-menu';
27
+ import { Outline } from '@dxos/types';
20
28
  import { Message } from '@dxos/types';
21
29
 
22
- import { useChatKeymapExtensions, useChatToolbarActions, useDebug, useTraceMessages } from '#hooks';
30
+ import { useChatKeymapExtensions, useChatToolbarActions, useDebug } from '#hooks';
23
31
  import { meta } from '#meta';
24
32
 
25
- import { AiUsageQuotaError } from '../../processor';
33
+ import { AiUsageQuotaError, type ProcessorRequestContext } from '../../processor';
26
34
  import {
27
35
  ChatStatus,
28
36
  ChatPrompt as NaturalChatPrompt,
29
37
  type ChatPromptProps as NaturalChatPromptProps,
30
38
  } from '../ChatPrompt';
31
- import { ChatThread as NaturalChatThread, type ChatThreadProps as NaturalChatThreadProps } from '../ChatThread';
39
+ import {
40
+ type MessageSpan,
41
+ ChatThread as NaturalChatThread,
42
+ type ChatThreadProps as NaturalChatThreadProps,
43
+ } from '../ChatThread';
32
44
  import { TaskList } from '../TaskList';
33
45
  import { ChatContextProvider, type ChatContextValue, type ChatRequestTiming, useChatContext } from './context';
34
46
  import { type ChatEvent } from './events';
47
+ import { projectThread, resolveRewind } from './thread';
35
48
 
36
49
  //
37
50
  // Root
@@ -47,10 +60,21 @@ type ChatRootProps = PropsWithChildren<
47
60
  * persist and flush its conversation feed so the agent can resolve it.
48
61
  */
49
62
  onSubmit?: (text: string) => Promise<void> | void;
63
+ /** Called at submit time to capture ephemeral request context (e.g. companion selection). */
64
+ getContext?: () => ProcessorRequestContext | undefined;
50
65
  }
51
66
  >;
52
67
 
53
- const ChatRoot = ({ children, chat, processor, db: dbFallback, onEvent, onSubmit, ...props }: ChatRootProps) => {
68
+ const ChatRoot = ({
69
+ children,
70
+ chat,
71
+ processor,
72
+ db: dbFallback,
73
+ onEvent,
74
+ onSubmit,
75
+ getContext,
76
+ ...props
77
+ }: ChatRootProps) => {
54
78
  const [debug, setDebug] = useState(false);
55
79
  const streaming = useAtomValue(processor.streaming);
56
80
  const active = useAtomValue(processor.active);
@@ -67,14 +91,19 @@ const ChatRoot = ({ children, chat, processor, db: dbFallback, onEvent, onSubmit
67
91
  // Event sink.
68
92
  const event = useMemo(() => new Event<ChatEvent>(), []);
69
93
 
94
+ // The editor controller and per-message ranges are produced by `Chat.Thread` and consumed by
95
+ // `Chat.Minimap`; lifted here so both sub-components share the same instance.
96
+ const [controller, setController] = useState<MarkdownStreamController | null>(null);
97
+ const [messageRanges, setMessageRanges] = useState<MessageSpan[]>([]);
98
+
70
99
  const feedMessages = useQuery(
71
100
  db,
72
101
  feed ? Query.select(Filter.type(Message.Message)).from(feed) : Query.select(Filter.nothing()),
73
102
  );
74
103
  const pendingMessages = useAtomValue(processor.messages);
75
- const messages = useMemo(
76
- () => Array.dedupeWith([...feedMessages, ...pendingMessages], ({ id: a }, { id: b }) => a === b),
77
- [feedMessages, pendingMessages],
104
+ const { messages } = useMemo(
105
+ () => projectThread({ feedMessages, pendingMessages, rewindFrom: feedSnapshot?.rewindFrom }),
106
+ [feedMessages, pendingMessages, feedSnapshot?.rewindFrom],
78
107
  );
79
108
 
80
109
  const dump = useDebug({ processor });
@@ -106,9 +135,25 @@ const ChatRoot = ({ children, chat, processor, db: dbFallback, onEvent, onSubmit
106
135
  const text = ev.text.trim();
107
136
  if (!streaming && text.length) {
108
137
  lastPrompt.current = ev.text;
138
+ const context = getContext?.();
109
139
  // Await persistence (transient chat) before requesting so the agent resolves the
110
140
  // now-durable conversation feed; resolves immediately when there is no hook.
111
- void Promise.resolve(onSubmit?.(text)).then(() => processor.request({ message: text }));
141
+ void Promise.resolve(onSubmit?.(text)).then(() => processor.request({ message: text, context }));
142
+ }
143
+ break;
144
+ }
145
+
146
+ case 'rewind': {
147
+ // Edit-and-resend: discard the prompt and everything after it, and put its text back in the
148
+ // composer so it can be revised. Recorded on the feed rather than the chat because the
149
+ // continuation is appended by the agent's process, which resolves the feed and never sees the
150
+ // chat. A stale click (message already gone) resolves to nothing and is a no-op.
151
+ const rewind = feed && resolveRewind(messages, ev.id);
152
+ if (rewind) {
153
+ Obj.update(feed, (feed) => {
154
+ feed.rewindFrom = rewind.rewindFrom;
155
+ });
156
+ event.emit({ type: 'update-prompt', text: rewind.text });
112
157
  }
113
158
  break;
114
159
  }
@@ -133,7 +178,9 @@ const ChatRoot = ({ children, chat, processor, db: dbFallback, onEvent, onSubmit
133
178
 
134
179
  onEvent?.(ev);
135
180
  });
136
- }, [event, dump, processor, streaming, onEvent, onSubmit]);
181
+ // `feed` and `messages` are dependencies because the rewind branch reads and writes them: without
182
+ // them the handler would keep resolving rewinds against whatever was mounted first.
183
+ }, [event, dump, processor, streaming, onEvent, onSubmit, getContext, feed, messages]);
137
184
 
138
185
  return (
139
186
  <ChatContextProvider
@@ -144,6 +191,10 @@ const ChatRoot = ({ children, chat, processor, db: dbFallback, onEvent, onSubmit
144
191
  messages={messages}
145
192
  processor={processor}
146
193
  requestTiming={requestTiming}
194
+ controller={controller}
195
+ setController={setController}
196
+ messageRanges={messageRanges}
197
+ setMessageRanges={setMessageRanges}
147
198
  {...props}
148
199
  >
149
200
  {children}
@@ -212,6 +263,84 @@ const ChatContent = composable<HTMLDivElement, ChatContentProps>(({ children, ..
212
263
 
213
264
  ChatContent.displayName = CHAT_CONTENT_NAME;
214
265
 
266
+ //
267
+ // Markers
268
+ //
269
+
270
+ const PROMPT_SNIPPET_LINES = 3;
271
+ const PROMPT_SNIPPET_CHARS = 280;
272
+ const PROMPT_TITLE_CHARS = 100;
273
+
274
+ /** First non-empty line of a message's text, truncated for the marker title. */
275
+ const promptTitle = (message: Message.Message): string => {
276
+ const text = Message.extractText(message).trim();
277
+ const firstLine = text.split('\n').find((line) => line.trim().length) ?? '';
278
+ return firstLine.length > PROMPT_TITLE_CHARS ? `${firstLine.slice(0, PROMPT_TITLE_CHARS)}…` : firstLine;
279
+ };
280
+
281
+ /** First few text lines of an assistant reply (tool calls, reasoning and status are excluded). */
282
+ const replySnippet = (message: Message.Message): string | undefined => {
283
+ // `extractText` keeps only `text` blocks, so tool calls / reasoning / status are dropped.
284
+ const text = Message.extractText(message).trim();
285
+ if (!text.length) {
286
+ return undefined;
287
+ }
288
+ const snippet = text
289
+ .split('\n')
290
+ .filter((line) => line.trim().length)
291
+ .slice(0, PROMPT_SNIPPET_LINES)
292
+ .join('\n');
293
+ return snippet.length > PROMPT_SNIPPET_CHARS ? `${snippet.slice(0, PROMPT_SNIPPET_CHARS)}…` : snippet;
294
+ };
295
+
296
+ /**
297
+ * Build one minimap marker per user-prompt turn: title = the prompt text, description = a
298
+ * snippet of the following assistant reply, range = the turn's document span (prompt start →
299
+ * next prompt start). Positions come from the syncer's per-message range table.
300
+ */
301
+ const buildMarkers = (messages: Message.Message[], ranges: MessageSpan[]): MinimapMarker[] => {
302
+ const rangeById = new Map(ranges.map((range) => [range.id, range] as const));
303
+ const markers: MinimapMarker[] = [];
304
+ for (let index = 0; index < messages.length; index++) {
305
+ const message = messages[index];
306
+ if (message.sender.role !== 'user') {
307
+ continue;
308
+ }
309
+ const range = rangeById.get(message.id);
310
+ if (!range) {
311
+ continue;
312
+ }
313
+
314
+ // Extend the turn through the following non-user messages and grab the first assistant reply.
315
+ let turnTo = range.to;
316
+ let description: string | undefined;
317
+ for (let next = index + 1; next < messages.length; next++) {
318
+ const nextMessage = messages[next];
319
+ const nextRange = rangeById.get(nextMessage.id);
320
+ if (nextMessage.sender.role === 'user') {
321
+ if (nextRange) {
322
+ turnTo = nextRange.from;
323
+ }
324
+ break;
325
+ }
326
+ if (nextRange) {
327
+ turnTo = nextRange.to;
328
+ }
329
+ if (!description && nextMessage.sender.role === 'assistant') {
330
+ description = replySnippet(nextMessage);
331
+ }
332
+ }
333
+
334
+ markers.push({
335
+ id: message.id,
336
+ title: promptTitle(message) || 'Prompt',
337
+ description,
338
+ range: { from: range.from, to: turnTo },
339
+ });
340
+ }
341
+ return markers;
342
+ };
343
+
215
344
  //
216
345
  // Thread
217
346
  //
@@ -225,7 +354,8 @@ type ChatThreadProps = Omit<NaturalChatThreadProps, 'identity' | 'messages' | 't
225
354
 
226
355
  const ChatThread = ({ viewType, debug: debugProp, onViewUsage, ...props }: ChatThreadProps) => {
227
356
  const { t } = useTranslation(meta.profile.key);
228
- const { debug, event, messages, processor } = useChatContext(CHAT_THREAD_NAME);
357
+ const { debug, event, messages, processor, messageRanges, setController, setMessageRanges } =
358
+ useChatContext(CHAT_THREAD_NAME);
229
359
  const extensions = useChatKeymapExtensions({ event });
230
360
  const identity = useIdentity();
231
361
  const error = useAtomValue(processor.error).pipe(Option.getOrUndefined);
@@ -235,25 +365,70 @@ const ChatThread = ({ viewType, debug: debugProp, onViewUsage, ...props }: ChatT
235
365
  const debugView = viewType === 'debug';
236
366
 
237
367
  const controllerRef = useRef<MarkdownStreamController | null>(null);
368
+ // Share the controller with `Chat.Minimap` (and keep the local ref for event handling).
369
+ const handleControllerRef = useCallback(
370
+ (instance: MarkdownStreamController | null) => {
371
+ controllerRef.current = instance;
372
+ setController(instance);
373
+ },
374
+ [setController],
375
+ );
376
+
377
+ // Prompt-turn positions for navigation; a ref keeps the event handler stable without stale reads.
378
+ const promptPositions = useMemo(
379
+ () =>
380
+ buildMarkers(messages, messageRanges)
381
+ .map((marker) => marker.range.from)
382
+ .sort((a, b) => a - b),
383
+ [messages, messageRanges],
384
+ );
385
+ const promptPositionsRef = useDynamicRef(promptPositions);
386
+
387
+ // Navigate between prompt turns using the range table (not the xml-tag widget bookmarks).
388
+ const navigateToPrompt = useCallback(
389
+ (direction: 1 | -1) => {
390
+ const controller = controllerRef.current;
391
+ const positions = promptPositionsRef.current;
392
+ if (!controller || !positions.length) {
393
+ return;
394
+ }
395
+ const anchor = controller.getVisibleRange()?.from ?? 0;
396
+ const epsilon = 2;
397
+ const target =
398
+ direction > 0
399
+ ? positions.find((pos) => pos > anchor + epsilon)
400
+ : [...positions].reverse().find((pos) => pos < anchor - epsilon);
401
+ if (target != null) {
402
+ controller.scrollTo(target, { y: 'start' });
403
+ }
404
+ },
405
+ [promptPositionsRef],
406
+ );
407
+
238
408
  useEffect(() => {
239
409
  return event.on((event) => {
240
410
  switch (event.type) {
411
+ case 'rewind':
412
+ console.log('rewind', event);
413
+ break;
241
414
  case 'submit':
242
415
  case 'scroll-to-bottom':
243
416
  controllerRef.current?.scrollToBottom();
244
417
  break;
245
418
  case 'nav-previous':
246
- controllerRef.current?.navigatePrevious();
419
+ navigateToPrompt(-1);
247
420
  break;
248
421
  case 'nav-next':
249
- controllerRef.current?.navigateNext();
422
+ navigateToPrompt(1);
250
423
  break;
251
424
  case 'error':
252
425
  setToastError(event.error);
253
426
  break;
427
+ default:
428
+ log.info('no handled', event);
254
429
  }
255
430
  });
256
- }, [event]);
431
+ }, [event, navigateToPrompt]);
257
432
 
258
433
  const handleEvent = useCallback<NonNullable<NaturalChatThreadProps['onEvent']>>(
259
434
  (ev) => {
@@ -277,7 +452,8 @@ const ChatThread = ({ viewType, debug: debugProp, onViewUsage, ...props }: ChatT
277
452
  viewType={viewType}
278
453
  extensions={extensions}
279
454
  onEvent={handleEvent}
280
- ref={controllerRef}
455
+ onSpans={setMessageRanges}
456
+ ref={handleControllerRef}
281
457
  />
282
458
 
283
459
  <Toast.Root
@@ -311,6 +487,45 @@ const ChatThread = ({ viewType, debug: debugProp, onViewUsage, ...props }: ChatT
311
487
 
312
488
  ChatThread.displayName = CHAT_THREAD_NAME;
313
489
 
490
+ //
491
+ // Minimap
492
+ //
493
+
494
+ const CHAT_MINIMAP_NAME = 'Chat.Minimap';
495
+
496
+ type ChatMinimapProps = ThemedClassName<{}>;
497
+
498
+ /**
499
+ * Anchor-marker rail for the thread: one tick per user-prompt turn. Reads the shared controller
500
+ * and the syncer's range table from context; clicking a tick scrolls the thread to that turn.
501
+ */
502
+ const ChatMinimap = ({ classNames }: ChatMinimapProps) => {
503
+ const { messages, messageRanges, controller } = useChatContext(CHAT_MINIMAP_NAME);
504
+ const [visibleRange, setVisibleRange] = useState<DocumentRange | undefined>(undefined);
505
+ useEffect(() => {
506
+ if (!controller) {
507
+ return;
508
+ }
509
+ return controller.onVisibleRangeChange(setVisibleRange);
510
+ }, [controller]);
511
+
512
+ const markers = useMemo(() => buildMarkers(messages, messageRanges), [messages, messageRanges]);
513
+ const handleSelect = useCallback(
514
+ (marker: MinimapMarker) => {
515
+ controller?.scrollTo(marker.range.from, { y: 'start' });
516
+ },
517
+ [controller],
518
+ );
519
+
520
+ if (!markers.length) {
521
+ return null;
522
+ }
523
+
524
+ return <Minimap classNames={classNames} markers={markers} visibleRange={visibleRange} onSelect={handleSelect} />;
525
+ };
526
+
527
+ ChatMinimap.displayName = CHAT_MINIMAP_NAME;
528
+
314
529
  //
315
530
  // Prompt
316
531
  //
@@ -333,46 +548,38 @@ ChatPrompt.displayName = CHAT_PROMPT_NAME;
333
548
  const CHAT_TASK_LIST_NAME = 'Chat.TaskList';
334
549
 
335
550
  type ChatTaskListProps = {
336
- plan?: Plan.Plan;
551
+ outline?: Outline.Outline;
337
552
  };
338
553
 
339
- const ChatTaskList = composable<HTMLDivElement, ChatTaskListProps>(({ plan: planProp, ...props }, forwardedRef) => {
340
- const { chat } = useChatContext(CHAT_TASK_LIST_NAME);
341
-
342
- const plan = useAtomValue(
343
- useMemo(
344
- () =>
345
- Atom.make(
346
- (get) =>
347
- planProp ??
348
- Option.fromNullable(chat).pipe(
349
- Option.map((_) => get(Obj.atom(_))),
350
- Option.flatMapNullable((_) => _?.plan?.atom),
351
- Option.map(get),
352
- Option.getOrUndefined,
353
- ),
354
- ),
355
- [chat, planProp],
356
- ),
357
- );
358
- const space = chat ? getSpace(chat) : undefined;
359
- const traceMessages = useTraceMessages(space);
360
- const conversationId = chat?.feed?.target?.id;
361
- if (!plan || !(plan.tasks?.length ?? 0)) {
362
- return null;
363
- }
554
+ // TODO(burdon): Project chats keep their working checklist on the parent project's outline —
555
+ // resolve via the parent edge (needs a reactive parent lookup), not only `chat.outline`.
556
+ const ChatTaskList = composable<HTMLDivElement, ChatTaskListProps>(
557
+ ({ outline: outlineProp, ...props }, forwardedRef) => {
558
+ const { chat } = useChatContext(CHAT_TASK_LIST_NAME);
559
+
560
+ const outline = useAtomValue(
561
+ useMemo(
562
+ () =>
563
+ Atom.make(
564
+ (get) =>
565
+ outlineProp ??
566
+ Option.fromNullable(chat).pipe(
567
+ Option.map((_) => get(Obj.atom(_))),
568
+ Option.flatMapNullable((_) => _?.outline?.atom),
569
+ Option.map(get),
570
+ Option.getOrUndefined,
571
+ ),
572
+ ),
573
+ [chat, outlineProp],
574
+ ),
575
+ );
576
+ if (!outline) {
577
+ return null;
578
+ }
364
579
 
365
- return (
366
- <TaskList
367
- {...props}
368
- plan={plan}
369
- space={space}
370
- traceMessages={traceMessages}
371
- conversationId={conversationId}
372
- ref={forwardedRef}
373
- />
374
- );
375
- });
580
+ return <TaskList {...props} outline={outline} ref={forwardedRef} />;
581
+ },
582
+ );
376
583
 
377
584
  ChatTaskList.displayName = CHAT_TASK_LIST_NAME;
378
585
 
@@ -387,7 +594,16 @@ export const Chat = {
387
594
  Prompt: ChatPrompt,
388
595
  Status: ChatStatus,
389
596
  Thread: ChatThread,
597
+ Minimap: ChatMinimap,
390
598
  TaskList: ChatTaskList,
391
599
  };
392
600
 
393
- export type { ChatContentProps, ChatEvent, ChatPromptProps, ChatRootProps, ChatThreadProps, ChatToolbarProps };
601
+ export type {
602
+ ChatContentProps,
603
+ ChatEvent,
604
+ ChatMinimapProps,
605
+ ChatPromptProps,
606
+ ChatRootProps,
607
+ ChatThreadProps,
608
+ ChatToolbarProps,
609
+ };
@@ -56,7 +56,7 @@ const FailureToast = ({ rawError }: FailureToastProps) => {
56
56
  };
57
57
 
58
58
  const meta = {
59
- title: 'plugins/plugin-assistant/components/Chat',
59
+ title: 'plugins/plugin-assistant/components/Error',
60
60
  render: FailureToast,
61
61
  decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
62
62
  parameters: { translations },
@@ -7,9 +7,11 @@ import { createContext } from '@radix-ui/react-context';
7
7
  import { type Chat as ChatModule } from '@dxos/assistant-toolkit';
8
8
  import { type Event } from '@dxos/async';
9
9
  import { type Database } from '@dxos/echo';
10
+ import { type MarkdownStreamController } from '@dxos/react-ui-markdown';
10
11
  import { type Message } from '@dxos/types';
11
12
 
12
13
  import { type AiChatProcessor } from '../../processor';
14
+ import { type MessageSpan } from '../ChatThread';
13
15
  import { type ChatEvent } from './events';
14
16
 
15
17
  /**
@@ -31,6 +33,12 @@ export type ChatContextValue = {
31
33
  messages: Message.Message[];
32
34
  processor: AiChatProcessor;
33
35
  requestTiming: ChatRequestTiming | null;
36
+ /** The thread's editor controller, shared between `Chat.Thread` and `Chat.Minimap`. */
37
+ controller: MarkdownStreamController | null;
38
+ setController: (controller: MarkdownStreamController | null) => void;
39
+ /** Per-message document offset ranges, published by `Chat.Thread`'s syncer. */
40
+ messageRanges: MessageSpan[];
41
+ setMessageRanges: (ranges: MessageSpan[]) => void;
34
42
  };
35
43
 
36
44
  // Internal: not re-exported from `Chat/index.ts`. Accessed by sibling components in this
@@ -29,6 +29,11 @@ export type ChatEvent =
29
29
  type: 'delete';
30
30
  id: string;
31
31
  }
32
+ /** Soft-fork the thread: continue from this message, leaving what followed it unreachable. */
33
+ | {
34
+ type: 'rewind';
35
+ id: string;
36
+ }
32
37
  | {
33
38
  type: 'add';
34
39
  object: Obj.Unknown;