@dxos/plugin-assistant 0.8.4-main.fcfe5033a5 → 0.8.4-staging.60fe92afc8

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 (751) hide show
  1. package/LICENSE +102 -5
  2. package/PLUGIN.mdl +439 -0
  3. package/README.md +1 -1
  4. package/dist/lib/neutral/AgentArticle-K7XM46OQ.mjs +160 -0
  5. package/dist/lib/neutral/AgentArticle-K7XM46OQ.mjs.map +7 -0
  6. package/dist/lib/neutral/AgentProperties-LFTEYJ54.mjs +40 -0
  7. package/dist/lib/neutral/AgentProperties-LFTEYJ54.mjs.map +7 -0
  8. package/dist/lib/neutral/AssistantPlugin.mjs +10 -0
  9. package/dist/lib/neutral/AssistantPlugin.node.mjs +72 -0
  10. package/dist/lib/neutral/AssistantPlugin.node.mjs.map +7 -0
  11. package/dist/lib/neutral/AssistantPlugin.workerd.mjs +40 -0
  12. package/dist/lib/neutral/AssistantPlugin.workerd.mjs.map +7 -0
  13. package/dist/lib/neutral/AssistantSettings-GG52BLKS.mjs +40 -0
  14. package/dist/lib/neutral/AssistantSettings-GG52BLKS.mjs.map +7 -0
  15. package/dist/lib/neutral/BlueprintArticle-ZBOZNZM7.mjs +27 -0
  16. package/dist/lib/neutral/BlueprintArticle-ZBOZNZM7.mjs.map +7 -0
  17. package/dist/lib/neutral/ChatArticle-VNVZCDUR.mjs +8 -0
  18. package/dist/lib/neutral/ChatCompanion-LBUHYWQG.mjs +128 -0
  19. package/dist/lib/neutral/ChatCompanion-LBUHYWQG.mjs.map +7 -0
  20. package/dist/lib/neutral/ChatDialog-DCA6FLOV.mjs +73 -0
  21. package/dist/lib/neutral/ChatDialog-DCA6FLOV.mjs.map +7 -0
  22. package/dist/lib/neutral/PlanArticle-TS5ULWYS.mjs +28 -0
  23. package/dist/lib/neutral/PlanArticle-TS5ULWYS.mjs.map +7 -0
  24. package/dist/lib/neutral/RoutineArticle-5NYXHRG6.mjs +119 -0
  25. package/dist/lib/neutral/RoutineArticle-5NYXHRG6.mjs.map +7 -0
  26. package/dist/lib/neutral/RoutineList-SO5ETHNT.mjs +48 -0
  27. package/dist/lib/neutral/RoutineList-SO5ETHNT.mjs.map +7 -0
  28. package/dist/lib/neutral/RoutineProperties-FISLMW2R.mjs +17 -0
  29. package/dist/lib/neutral/RoutineProperties-FISLMW2R.mjs.map +7 -0
  30. package/dist/lib/neutral/TracePanel-KTZJ6JNR.mjs +167 -0
  31. package/dist/lib/neutral/TracePanel-KTZJ6JNR.mjs.map +7 -0
  32. package/dist/lib/neutral/TriggerStatus-X7Y5JFZJ.mjs +93 -0
  33. package/dist/lib/neutral/TriggerStatus-X7Y5JFZJ.mjs.map +7 -0
  34. package/dist/lib/neutral/agent-hydrator-PJBYVMBW.mjs +24 -0
  35. package/dist/lib/neutral/agent-hydrator-PJBYVMBW.mjs.map +7 -0
  36. package/dist/lib/neutral/agent-service-WCAP5MLI.mjs +32 -0
  37. package/dist/lib/neutral/agent-service-WCAP5MLI.mjs.map +7 -0
  38. package/dist/lib/neutral/ai-context-7WRHWYXY.mjs +42 -0
  39. package/dist/lib/neutral/ai-context-7WRHWYXY.mjs.map +7 -0
  40. package/dist/lib/neutral/ai-service-AADUIKBY.mjs +40 -0
  41. package/dist/lib/neutral/ai-service-AADUIKBY.mjs.map +7 -0
  42. package/dist/lib/neutral/app-graph-builder-WUFHQH3Y.mjs +232 -0
  43. package/dist/lib/neutral/app-graph-builder-WUFHQH3Y.mjs.map +7 -0
  44. package/dist/lib/neutral/automation-templates-M2XQWGR6.mjs +115 -0
  45. package/dist/lib/neutral/automation-templates-M2XQWGR6.mjs.map +7 -0
  46. package/dist/lib/neutral/blueprint-definition-MH2QLYQH.mjs +39 -0
  47. package/dist/lib/neutral/blueprint-definition-MH2QLYQH.mjs.map +7 -0
  48. package/dist/lib/{browser → neutral}/blueprints/index.mjs +1 -1
  49. package/dist/lib/neutral/capabilities/index.mjs +45 -0
  50. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  51. package/dist/lib/{browser/chunk-EZRS3J25.mjs → neutral/chunk-5H6UJHLF.mjs} +3 -3
  52. package/dist/lib/neutral/chunk-5H6UJHLF.mjs.map +7 -0
  53. package/dist/lib/neutral/chunk-HLANPOBA.mjs +10 -0
  54. package/dist/lib/neutral/chunk-HLANPOBA.mjs.map +7 -0
  55. package/dist/lib/neutral/chunk-KLYLW4WH.mjs +9 -0
  56. package/dist/lib/neutral/chunk-KLYLW4WH.mjs.map +7 -0
  57. package/dist/lib/neutral/chunk-QAZMOFPI.mjs +130 -0
  58. package/dist/lib/neutral/chunk-QAZMOFPI.mjs.map +7 -0
  59. package/dist/lib/neutral/chunk-RKVVK3R3.mjs +110 -0
  60. package/dist/lib/neutral/chunk-RKVVK3R3.mjs.map +7 -0
  61. package/dist/lib/neutral/chunk-SMFJD7BP.mjs +8 -0
  62. package/dist/lib/neutral/chunk-SMFJD7BP.mjs.map +7 -0
  63. package/dist/lib/neutral/chunk-VTK5R4H3.mjs +9 -0
  64. package/dist/lib/neutral/chunk-VTK5R4H3.mjs.map +7 -0
  65. package/dist/lib/neutral/chunk-XYHPOGTK.mjs +43 -0
  66. package/dist/lib/neutral/chunk-XYHPOGTK.mjs.map +7 -0
  67. package/dist/lib/neutral/chunk-YXRGZYYH.mjs +392 -0
  68. package/dist/lib/neutral/chunk-YXRGZYYH.mjs.map +7 -0
  69. package/dist/lib/neutral/companion-chat-provisioner-YZZ73P6E.mjs +120 -0
  70. package/dist/lib/neutral/companion-chat-provisioner-YZZ73P6E.mjs.map +7 -0
  71. package/dist/lib/neutral/components/index.mjs +2410 -0
  72. package/dist/lib/neutral/components/index.mjs.map +7 -0
  73. package/dist/lib/neutral/containers/index.mjs +29 -0
  74. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  75. package/dist/lib/neutral/create-chat-SGGQ6HVN.mjs +54 -0
  76. package/dist/lib/neutral/create-chat-SGGQ6HVN.mjs.map +7 -0
  77. package/dist/lib/neutral/create-object-U2SOFZLR.mjs +92 -0
  78. package/dist/lib/neutral/create-object-U2SOFZLR.mjs.map +7 -0
  79. package/dist/lib/neutral/edge-model-resolver-BBVOJBGJ.mjs +55 -0
  80. package/dist/lib/neutral/edge-model-resolver-BBVOJBGJ.mjs.map +7 -0
  81. package/dist/lib/{browser/ensure-companion-chat-ZEZA34MZ.mjs → neutral/ensure-companion-chat-AMOF3C66.mjs} +14 -21
  82. package/dist/lib/neutral/ensure-companion-chat-AMOF3C66.mjs.map +7 -0
  83. package/dist/lib/neutral/execution-graph/index.mjs +703 -0
  84. package/dist/lib/neutral/execution-graph/index.mjs.map +7 -0
  85. package/dist/lib/neutral/fork-chat-34KEF4ZJ.mjs +95 -0
  86. package/dist/lib/neutral/fork-chat-34KEF4ZJ.mjs.map +7 -0
  87. package/dist/lib/neutral/hooks/index.mjs +992 -0
  88. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  89. package/dist/lib/neutral/index.mjs +38 -0
  90. package/dist/lib/neutral/integration-provider-RBD3AFJU.mjs +71 -0
  91. package/dist/lib/neutral/integration-provider-RBD3AFJU.mjs.map +7 -0
  92. package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs +24 -0
  93. package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs.map +7 -0
  94. package/dist/lib/neutral/markdown-extension-YMIFDMYF.mjs +110 -0
  95. package/dist/lib/neutral/markdown-extension-YMIFDMYF.mjs.map +7 -0
  96. package/dist/lib/neutral/meta.json +1 -0
  97. package/dist/lib/neutral/meta.mjs +12 -0
  98. package/dist/lib/neutral/migrations-7DEMVBOG.mjs +28 -0
  99. package/dist/lib/neutral/migrations-7DEMVBOG.mjs.map +7 -0
  100. package/dist/lib/neutral/operation-handler-SF36MOB5.mjs +13 -0
  101. package/dist/lib/neutral/operation-handler-SF36MOB5.mjs.map +7 -0
  102. package/dist/lib/neutral/operations/index.mjs +8 -0
  103. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  104. package/dist/lib/neutral/plugin.mjs +16 -0
  105. package/dist/lib/neutral/plugin.mjs.map +7 -0
  106. package/dist/lib/neutral/react-surface-XRTBW5OJ.mjs +174 -0
  107. package/dist/lib/neutral/react-surface-XRTBW5OJ.mjs.map +7 -0
  108. package/dist/lib/{browser/resolve-navigation-targets-NZOD66NY.mjs → neutral/resolve-navigation-targets-ZHIMMH7L.mjs} +6 -6
  109. package/dist/lib/neutral/resolve-navigation-targets-ZHIMMH7L.mjs.map +7 -0
  110. package/dist/lib/{browser/run-prompt-in-new-chat-THLK5YQC.mjs → neutral/run-prompt-in-new-chat-D5IIE2C7.mjs} +22 -56
  111. package/dist/lib/neutral/run-prompt-in-new-chat-D5IIE2C7.mjs.map +7 -0
  112. package/dist/lib/{browser/set-current-chat-LRS3VFSH.mjs → neutral/set-current-chat-VWBPSIMZ.mjs} +7 -13
  113. package/dist/lib/neutral/set-current-chat-VWBPSIMZ.mjs.map +7 -0
  114. package/dist/lib/neutral/settings-W4BLWQ53.mjs +28 -0
  115. package/dist/lib/neutral/settings-W4BLWQ53.mjs.map +7 -0
  116. package/dist/lib/neutral/state-H3G7QCU6.mjs +28 -0
  117. package/dist/lib/neutral/state-H3G7QCU6.mjs.map +7 -0
  118. package/dist/lib/neutral/testing.mjs +8 -0
  119. package/dist/lib/neutral/testing.mjs.map +7 -0
  120. package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs +21 -0
  121. package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs.map +7 -0
  122. package/dist/lib/neutral/toolkit-GVWXPDLJ.mjs +14 -0
  123. package/dist/lib/neutral/toolkit-GVWXPDLJ.mjs.map +7 -0
  124. package/dist/lib/neutral/translations.mjs +179 -0
  125. package/dist/lib/neutral/translations.mjs.map +7 -0
  126. package/dist/lib/neutral/types/index.mjs +20 -0
  127. package/dist/lib/neutral/types/index.mjs.map +7 -0
  128. package/dist/lib/{browser/update-chat-name-3Y36KFAS.mjs → neutral/update-chat-name-Y7JWIP64.mjs} +26 -36
  129. package/dist/lib/neutral/update-chat-name-Y7JWIP64.mjs.map +7 -0
  130. package/dist/types/src/AssistantPlugin.d.ts +3 -1
  131. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  132. package/dist/types/src/AssistantPlugin.node.d.ts +5 -0
  133. package/dist/types/src/AssistantPlugin.node.d.ts.map +1 -0
  134. package/dist/types/src/AssistantPlugin.test.d.ts +2 -0
  135. package/dist/types/src/AssistantPlugin.test.d.ts.map +1 -0
  136. package/dist/types/src/AssistantPlugin.workerd.d.ts +4 -0
  137. package/dist/types/src/AssistantPlugin.workerd.d.ts.map +1 -0
  138. package/dist/types/src/blueprints/assistant/blueprint.d.ts +2 -2
  139. package/dist/types/src/blueprints/assistant/blueprint.d.ts.map +1 -1
  140. package/dist/types/src/blueprints/assistant/blueprint.node.test.d.ts +2 -0
  141. package/dist/types/src/blueprints/assistant/blueprint.node.test.d.ts.map +1 -0
  142. package/dist/types/src/capabilities/agent-hydrator.d.ts +5 -0
  143. package/dist/types/src/capabilities/agent-hydrator.d.ts.map +1 -0
  144. package/dist/types/src/capabilities/agent-service.d.ts +6 -0
  145. package/dist/types/src/capabilities/agent-service.d.ts.map +1 -0
  146. package/dist/types/src/capabilities/ai-context.d.ts +6 -0
  147. package/dist/types/src/capabilities/ai-context.d.ts.map +1 -0
  148. package/dist/types/src/capabilities/ai-service.d.ts +2 -2
  149. package/dist/types/src/capabilities/ai-service.d.ts.map +1 -1
  150. package/dist/types/src/capabilities/app-graph-builder.d.ts +2 -1
  151. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  152. package/dist/types/src/capabilities/automation-templates.d.ts +6 -0
  153. package/dist/types/src/capabilities/automation-templates.d.ts.map +1 -0
  154. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  155. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts.map +1 -1
  156. package/dist/types/src/capabilities/create-object.d.ts +31 -0
  157. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  158. package/dist/types/src/capabilities/edge-model-resolver.d.ts +1 -1
  159. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -1
  160. package/dist/types/src/capabilities/index.d.ts +36 -3
  161. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  162. package/dist/types/src/capabilities/integration-provider.d.ts +5 -0
  163. package/dist/types/src/capabilities/integration-provider.d.ts.map +1 -0
  164. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -1
  165. package/dist/types/src/capabilities/{markdown.d.ts → markdown-extension.d.ts} +1 -1
  166. package/dist/types/src/capabilities/markdown-extension.d.ts.map +1 -0
  167. package/dist/types/src/capabilities/migrations.d.ts +2 -1
  168. package/dist/types/src/capabilities/migrations.d.ts.map +1 -1
  169. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  170. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  171. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  172. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  173. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  174. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -1
  175. package/dist/types/src/components/AgentProperties/AgentProperties.d.ts +7 -0
  176. package/dist/types/src/components/AgentProperties/AgentProperties.d.ts.map +1 -0
  177. package/dist/types/src/{containers → components}/AgentProperties/AgentProperties.stories.d.ts +1 -2
  178. package/dist/types/src/components/AgentProperties/AgentProperties.stories.d.ts.map +1 -0
  179. package/dist/types/src/components/AgentProperties/index.d.ts +2 -0
  180. package/dist/types/src/components/AgentProperties/index.d.ts.map +1 -0
  181. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts +1 -1
  182. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  183. package/dist/types/src/components/AssistantSettings/AssistantSettings.stories.d.ts.map +1 -1
  184. package/dist/types/src/components/Chat/Chat.d.ts +44 -42
  185. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  186. package/dist/types/src/components/Chat/context.d.ts +29 -0
  187. package/dist/types/src/components/Chat/context.d.ts.map +1 -0
  188. package/dist/types/src/components/Chat/events.d.ts +3 -0
  189. package/dist/types/src/components/Chat/events.d.ts.map +1 -1
  190. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts +1 -1
  191. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  192. package/dist/types/src/components/ChatPrompt/ChatMcpErrors.d.ts +12 -0
  193. package/dist/types/src/components/ChatPrompt/ChatMcpErrors.d.ts.map +1 -0
  194. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts +10 -14
  195. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
  196. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts +1 -1
  197. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts.map +1 -1
  198. package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts +2 -9
  199. package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts.map +1 -1
  200. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts +27 -0
  201. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts.map +1 -0
  202. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +2 -2
  203. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -1
  204. package/dist/types/src/components/ChatPrompt/ChatStatus.d.ts +20 -0
  205. package/dist/types/src/components/ChatPrompt/ChatStatus.d.ts.map +1 -0
  206. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts +1 -1
  207. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +1 -1
  208. package/dist/types/src/components/ChatPrompt/index.d.ts +3 -0
  209. package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -1
  210. package/dist/types/src/components/ChatThread/Anchor.stories.d.ts +14 -0
  211. package/dist/types/src/components/ChatThread/Anchor.stories.d.ts.map +1 -0
  212. package/dist/types/src/components/ChatThread/ChatThread.d.ts +6 -3
  213. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  214. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +5 -5
  215. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  216. package/dist/types/src/components/ChatThread/Link.d.ts +2 -2
  217. package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -1
  218. package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts +8 -1
  219. package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts.map +1 -1
  220. package/dist/types/src/components/ChatThread/registry.d.ts +18 -0
  221. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
  222. package/dist/types/src/components/ChatThread/sync.d.ts +42 -16
  223. package/dist/types/src/components/ChatThread/sync.d.ts.map +1 -1
  224. package/dist/types/src/components/ChatThread/tool-widget-state.d.ts.map +1 -1
  225. package/dist/types/src/components/ChatThread/widgets/FallbackWidget.d.ts +4 -4
  226. package/dist/types/src/components/ChatThread/widgets/FallbackWidget.d.ts.map +1 -1
  227. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.d.ts.map +1 -1
  228. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts.map +1 -1
  229. package/dist/types/src/components/ChatThread/widgets/ReferenceWidget.d.ts.map +1 -1
  230. package/dist/types/src/components/ChatThread/widgets/SelectWidget.d.ts.map +1 -1
  231. package/dist/types/src/components/ChatThread/widgets/StatsWidget.d.ts.map +1 -1
  232. package/dist/types/src/components/ChatThread/widgets/StatusWidget.d.ts +2 -15
  233. package/dist/types/src/components/ChatThread/widgets/StatusWidget.d.ts.map +1 -1
  234. package/dist/types/src/components/ChatThread/widgets/SuggestionWidget.d.ts.map +1 -1
  235. package/dist/types/src/components/ChatThread/widgets/SummaryWidget.d.ts.map +1 -1
  236. package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts.map +1 -1
  237. package/dist/types/src/components/ChatThread/widgets/ToolWidget.stories.d.ts.map +1 -1
  238. package/dist/types/src/components/ChatThread/widgets/defaults.d.ts +5 -0
  239. package/dist/types/src/components/ChatThread/widgets/defaults.d.ts.map +1 -0
  240. package/dist/types/src/components/ChatThread/widgets/index.d.ts +1 -2
  241. package/dist/types/src/components/ChatThread/widgets/index.d.ts.map +1 -1
  242. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts +4 -3
  243. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -1
  244. package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts +0 -1
  245. package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts.map +1 -1
  246. package/dist/types/src/components/RoutineProperties/RoutineProperties.d.ts +7 -0
  247. package/dist/types/src/components/RoutineProperties/RoutineProperties.d.ts.map +1 -0
  248. package/dist/types/src/components/RoutineProperties/RoutineProperties.stories.d.ts +15 -0
  249. package/dist/types/src/components/RoutineProperties/RoutineProperties.stories.d.ts.map +1 -0
  250. package/dist/types/src/components/RoutineProperties/index.d.ts +2 -0
  251. package/dist/types/src/components/RoutineProperties/index.d.ts.map +1 -0
  252. package/dist/types/src/components/TaskList/TaskList.d.ts +10 -0
  253. package/dist/types/src/components/TaskList/TaskList.d.ts.map +1 -0
  254. package/dist/types/src/components/TaskList/TaskList.stories.d.ts +16 -0
  255. package/dist/types/src/components/TaskList/TaskList.stories.d.ts.map +1 -0
  256. package/dist/types/src/components/TaskList/index.d.ts +2 -0
  257. package/dist/types/src/components/TaskList/index.d.ts.map +1 -0
  258. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +5 -3
  259. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  260. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  261. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +4 -5
  262. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  263. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +1 -1
  264. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  265. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +1 -1
  266. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts.map +1 -1
  267. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +4 -4
  268. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -1
  269. package/dist/types/src/components/Toolbox/Toolbox.d.ts +3 -3
  270. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  271. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  272. package/dist/types/src/components/index.d.ts +4 -0
  273. package/dist/types/src/components/index.d.ts.map +1 -1
  274. package/dist/types/src/constants.d.ts +5 -0
  275. package/dist/types/src/constants.d.ts.map +1 -0
  276. package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts.map +1 -1
  277. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts +0 -2
  278. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts.map +1 -1
  279. package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts.map +1 -1
  280. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts +1 -1
  281. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts.map +1 -1
  282. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts +25 -0
  283. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts.map +1 -0
  284. package/dist/types/src/containers/ChatArticle/ChatArticle.stories.d.ts +15 -0
  285. package/dist/types/src/containers/ChatArticle/ChatArticle.stories.d.ts.map +1 -0
  286. package/dist/types/src/containers/ChatArticle/index.d.ts +2 -0
  287. package/dist/types/src/containers/ChatArticle/index.d.ts.map +1 -0
  288. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts +11 -3
  289. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -1
  290. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -1
  291. package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts +6 -0
  292. package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts.map +1 -0
  293. package/dist/types/src/containers/PlanArticle/index.d.ts +2 -0
  294. package/dist/types/src/containers/PlanArticle/index.d.ts.map +1 -0
  295. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts +6 -0
  296. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts.map +1 -0
  297. package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts +15 -0
  298. package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts.map +1 -0
  299. package/dist/types/src/containers/RoutineArticle/index.d.ts +2 -0
  300. package/dist/types/src/containers/RoutineArticle/index.d.ts.map +1 -0
  301. package/dist/types/src/containers/RoutineList/RoutineList.d.ts +6 -0
  302. package/dist/types/src/containers/RoutineList/RoutineList.d.ts.map +1 -0
  303. package/dist/types/src/containers/{PromptList/PromptList.stories.d.ts → RoutineList/RoutineList.stories.d.ts} +1 -1
  304. package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts.map +1 -0
  305. package/dist/types/src/containers/RoutineList/index.d.ts +2 -0
  306. package/dist/types/src/containers/RoutineList/index.d.ts.map +1 -0
  307. package/dist/types/src/containers/TracePanel/TracePanel.d.ts +4 -5
  308. package/dist/types/src/containers/TracePanel/TracePanel.d.ts.map +1 -1
  309. package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts +4 -3
  310. package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts.map +1 -1
  311. package/dist/types/src/containers/TracePanel/dxn-extractor.d.ts +6 -6
  312. package/dist/types/src/containers/TracePanel/dxn-extractor.d.ts.map +1 -1
  313. package/dist/types/src/containers/TracePanel/index.d.ts.map +1 -1
  314. package/dist/types/src/containers/TracePanel/testing/index.d.ts +3 -0
  315. package/dist/types/src/containers/TracePanel/testing/index.d.ts.map +1 -0
  316. package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts +14 -0
  317. package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts.map +1 -0
  318. package/dist/types/src/containers/TracePanel/testing/snapshot-playback.d.ts +12 -0
  319. package/dist/types/src/containers/TracePanel/testing/snapshot-playback.d.ts.map +1 -0
  320. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts +3 -2
  321. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -1
  322. package/dist/types/src/containers/TriggerStatus/index.d.ts +1 -1
  323. package/dist/types/src/containers/TriggerStatus/index.d.ts.map +1 -1
  324. package/dist/types/src/containers/index.d.ts +6 -5
  325. package/dist/types/src/containers/index.d.ts.map +1 -1
  326. package/dist/types/src/execution-graph/execution-graph.d.ts +108 -0
  327. package/dist/types/src/execution-graph/execution-graph.d.ts.map +1 -0
  328. package/dist/types/src/execution-graph/execution-graph.test.d.ts +2 -0
  329. package/dist/types/src/execution-graph/execution-graph.test.d.ts.map +1 -0
  330. package/dist/types/src/execution-graph/index.d.ts +3 -0
  331. package/dist/types/src/execution-graph/index.d.ts.map +1 -0
  332. package/dist/types/src/execution-graph/remote-snapshot.test.d.ts +2 -0
  333. package/dist/types/src/execution-graph/remote-snapshot.test.d.ts.map +1 -0
  334. package/dist/types/src/execution-graph/span-tree.d.ts +76 -0
  335. package/dist/types/src/execution-graph/span-tree.d.ts.map +1 -0
  336. package/dist/types/src/execution-graph/span-tree.test.d.ts +2 -0
  337. package/dist/types/src/execution-graph/span-tree.test.d.ts.map +1 -0
  338. package/dist/types/src/execution-graph/sub-agent-delegation.test.d.ts +2 -0
  339. package/dist/types/src/execution-graph/sub-agent-delegation.test.d.ts.map +1 -0
  340. package/dist/types/src/execution-graph/testing/collect-trace-events.d.ts +40 -0
  341. package/dist/types/src/execution-graph/testing/collect-trace-events.d.ts.map +1 -0
  342. package/dist/types/src/execution-graph/testing/index.d.ts +2 -0
  343. package/dist/types/src/execution-graph/testing/index.d.ts.map +1 -0
  344. package/dist/types/src/extensions/prompt-extension.d.ts.map +1 -1
  345. package/dist/types/src/feed-logger.d.ts +13 -0
  346. package/dist/types/src/feed-logger.d.ts.map +1 -0
  347. package/dist/types/src/functions/services.test.d.ts +2 -0
  348. package/dist/types/src/functions/services.test.d.ts.map +1 -0
  349. package/dist/types/src/hooks/index.d.ts +3 -0
  350. package/dist/types/src/hooks/index.d.ts.map +1 -1
  351. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +56 -15
  352. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -1
  353. package/dist/types/src/hooks/useChatKeymap.d.ts +12 -0
  354. package/dist/types/src/hooks/useChatKeymap.d.ts.map +1 -0
  355. package/dist/types/src/hooks/useChatProcessor.d.ts +5 -5
  356. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  357. package/dist/types/src/hooks/useChatServices.d.ts +7 -3
  358. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
  359. package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -1
  360. package/dist/types/src/hooks/useContextBinder.d.ts +2 -2
  361. package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -1
  362. package/dist/types/src/hooks/useContextObjects.d.ts +5 -4
  363. package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -1
  364. package/dist/types/src/hooks/useDebug.d.ts +10 -0
  365. package/dist/types/src/hooks/useDebug.d.ts.map +1 -0
  366. package/dist/types/src/hooks/useFilteredTypes.d.ts +1 -1
  367. package/dist/types/src/hooks/useFilteredTypes.d.ts.map +1 -1
  368. package/dist/types/src/hooks/useFlush.d.ts +1 -1
  369. package/dist/types/src/hooks/useFlush.d.ts.map +1 -1
  370. package/dist/types/src/hooks/usePresets.d.ts +2 -2
  371. package/dist/types/src/hooks/usePresets.d.ts.map +1 -1
  372. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -1
  373. package/dist/types/src/index.d.ts +1 -4
  374. package/dist/types/src/index.d.ts.map +1 -1
  375. package/dist/types/src/meta.d.ts +3 -2
  376. package/dist/types/src/meta.d.ts.map +1 -1
  377. package/dist/types/src/operations/create-chat.d.ts +3 -3
  378. package/dist/types/src/operations/create-chat.d.ts.map +1 -1
  379. package/dist/types/src/operations/ensure-companion-chat.d.ts +3 -3
  380. package/dist/types/src/operations/ensure-companion-chat.d.ts.map +1 -1
  381. package/dist/types/src/operations/fork-chat.d.ts +5 -0
  382. package/dist/types/src/operations/fork-chat.d.ts.map +1 -0
  383. package/dist/types/src/operations/index.d.ts +1 -2
  384. package/dist/types/src/operations/index.d.ts.map +1 -1
  385. package/dist/types/src/operations/prompt.node.test.d.ts +2 -0
  386. package/dist/types/src/operations/prompt.node.test.d.ts.map +1 -0
  387. package/dist/types/src/operations/resolve-navigation-targets.d.ts +4 -2
  388. package/dist/types/src/operations/resolve-navigation-targets.d.ts.map +1 -1
  389. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts +3 -3
  390. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts.map +1 -1
  391. package/dist/types/src/operations/set-current-chat.d.ts +3 -3
  392. package/dist/types/src/operations/set-current-chat.d.ts.map +1 -1
  393. package/dist/types/src/operations/toggle-trace-panel-debug.d.ts +5 -0
  394. package/dist/types/src/operations/toggle-trace-panel-debug.d.ts.map +1 -0
  395. package/dist/types/src/operations/update-chat-name.d.ts +3 -3
  396. package/dist/types/src/operations/update-chat-name.d.ts.map +1 -1
  397. package/dist/types/src/paths.d.ts +3 -0
  398. package/dist/types/src/paths.d.ts.map +1 -0
  399. package/dist/types/src/plugin.d.ts +4 -0
  400. package/dist/types/src/plugin.d.ts.map +1 -0
  401. package/dist/types/src/processor/presets.d.ts.map +1 -1
  402. package/dist/types/src/processor/processor.d.ts +263 -26
  403. package/dist/types/src/processor/processor.d.ts.map +1 -1
  404. package/dist/types/src/processor/processor.node.test.d.ts +2 -0
  405. package/dist/types/src/processor/processor.node.test.d.ts.map +1 -0
  406. package/dist/types/src/templates/automation-templates.test.d.ts +2 -0
  407. package/dist/types/src/templates/automation-templates.test.d.ts.map +1 -0
  408. package/dist/types/src/templates/daily-digest.d.ts +3 -0
  409. package/dist/types/src/templates/daily-digest.d.ts.map +1 -0
  410. package/dist/types/src/templates/index.d.ts +4 -0
  411. package/dist/types/src/templates/index.d.ts.map +1 -0
  412. package/dist/types/src/templates/research-brief.d.ts +3 -0
  413. package/dist/types/src/templates/research-brief.d.ts.map +1 -0
  414. package/dist/types/src/templates/scaffold.d.ts +17 -0
  415. package/dist/types/src/templates/scaffold.d.ts.map +1 -0
  416. package/dist/types/src/testing/index.d.ts +2 -0
  417. package/dist/types/src/testing/index.d.ts.map +1 -1
  418. package/dist/types/src/testing/snapshot.d.ts +21 -0
  419. package/dist/types/src/testing/snapshot.d.ts.map +1 -0
  420. package/dist/types/src/testing/test-generator.d.ts +2 -3
  421. package/dist/types/src/testing/test-generator.d.ts.map +1 -1
  422. package/dist/types/src/testing/test-generator.test.d.ts +2 -0
  423. package/dist/types/src/testing/test-generator.test.d.ts.map +1 -0
  424. package/dist/types/src/testing/test-sequence.d.ts +10 -3
  425. package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
  426. package/dist/types/src/testing/test-services.d.ts.map +1 -1
  427. package/dist/types/src/testing/test-trace.d.ts +5 -0
  428. package/dist/types/src/testing/test-trace.d.ts.map +1 -0
  429. package/dist/types/src/testing/trace-timeline.node.test.d.ts +2 -0
  430. package/dist/types/src/testing/trace-timeline.node.test.d.ts.map +1 -0
  431. package/dist/types/src/testing.d.ts +2 -0
  432. package/dist/types/src/testing.d.ts.map +1 -0
  433. package/dist/types/src/translations.d.ts.map +1 -1
  434. package/dist/types/src/types/Assistant.d.ts +25 -8
  435. package/dist/types/src/types/Assistant.d.ts.map +1 -1
  436. package/dist/types/src/types/AssistantCapabilities.d.ts +30 -0
  437. package/dist/types/src/types/AssistantCapabilities.d.ts.map +1 -0
  438. package/dist/types/src/types/AssistantEvents.d.ts +3 -0
  439. package/dist/types/src/types/AssistantEvents.d.ts.map +1 -0
  440. package/dist/types/src/types/AssistantOperation.d.ts +153 -0
  441. package/dist/types/src/types/AssistantOperation.d.ts.map +1 -0
  442. package/dist/types/src/types/Settings.d.ts +21 -5
  443. package/dist/types/src/types/Settings.d.ts.map +1 -1
  444. package/dist/types/src/types/index.d.ts +8 -3
  445. package/dist/types/src/types/index.d.ts.map +1 -1
  446. package/dist/types/src/types/preset.d.ts +12 -0
  447. package/dist/types/src/types/preset.d.ts.map +1 -0
  448. package/dist/types/src/types/service.d.ts +2 -3
  449. package/dist/types/src/types/service.d.ts.map +1 -1
  450. package/dist/types/src/util/suggestions.d.ts +9 -0
  451. package/dist/types/src/util/suggestions.d.ts.map +1 -0
  452. package/dist/types/src/util/suggestions.test.d.ts +2 -0
  453. package/dist/types/src/util/suggestions.test.d.ts.map +1 -0
  454. package/dist/types/tsconfig.tsbuildinfo +1 -1
  455. package/package.json +177 -146
  456. package/src/AssistantPlugin.conversations.json +1 -0
  457. package/src/AssistantPlugin.node.ts +90 -0
  458. package/src/AssistantPlugin.test.ts +213 -0
  459. package/src/AssistantPlugin.ts +158 -0
  460. package/src/AssistantPlugin.workerd.ts +41 -0
  461. package/src/blueprints/assistant/{blueprint.test.ts → blueprint.node.test.ts} +5 -5
  462. package/src/blueprints/assistant/blueprint.ts +4 -4
  463. package/src/capabilities/agent-hydrator.ts +37 -0
  464. package/src/capabilities/agent-service.ts +38 -0
  465. package/src/capabilities/ai-context.ts +48 -0
  466. package/src/capabilities/ai-service.ts +31 -11
  467. package/src/capabilities/app-graph-builder.ts +106 -86
  468. package/src/capabilities/automation-templates.ts +16 -0
  469. package/src/capabilities/blueprint-definition.ts +15 -8
  470. package/src/capabilities/companion-chat-provisioner.ts +5 -5
  471. package/src/capabilities/create-object.ts +100 -0
  472. package/src/capabilities/edge-model-resolver.ts +53 -16
  473. package/src/capabilities/index.ts +23 -3
  474. package/src/capabilities/integration-provider.ts +86 -0
  475. package/src/capabilities/{markdown.ts → markdown-extension.ts} +3 -3
  476. package/src/capabilities/migrations.ts +4 -11
  477. package/src/capabilities/operation-handler.ts +1 -1
  478. package/src/capabilities/react-surface.tsx +41 -21
  479. package/src/components/AgentProperties/AgentProperties.stories.tsx +74 -0
  480. package/src/components/AgentProperties/AgentProperties.tsx +103 -0
  481. package/src/components/AgentProperties/index.ts +5 -0
  482. package/src/components/AssistantSettings/AssistantSettings.stories.tsx +3 -2
  483. package/src/components/AssistantSettings/AssistantSettings.tsx +22 -111
  484. package/src/components/Chat/Chat.tsx +145 -277
  485. package/src/components/Chat/context.ts +39 -0
  486. package/src/components/Chat/events.ts +7 -0
  487. package/src/components/ChatPrompt/ChatActions.tsx +11 -11
  488. package/src/components/ChatPrompt/ChatMcpErrors.tsx +50 -0
  489. package/src/components/ChatPrompt/ChatOptions.stories.tsx +32 -18
  490. package/src/components/ChatPrompt/ChatOptions.tsx +121 -103
  491. package/src/components/ChatPrompt/ChatPresets.tsx +3 -7
  492. package/src/components/ChatPrompt/ChatPrompt.tsx +180 -0
  493. package/src/components/ChatPrompt/ChatReferences.tsx +9 -13
  494. package/src/components/ChatPrompt/ChatStatus.tsx +123 -0
  495. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +2 -2
  496. package/src/components/ChatPrompt/index.ts +3 -0
  497. package/src/components/ChatThread/Anchor.stories.tsx +95 -0
  498. package/src/components/ChatThread/ChatThread.stories.tsx +33 -37
  499. package/src/components/ChatThread/ChatThread.tsx +47 -23
  500. package/src/components/ChatThread/DEBUG.md +41 -0
  501. package/src/components/ChatThread/Link.tsx +5 -5
  502. package/src/components/ChatThread/MarkdownStream.stories.tsx +43 -5
  503. package/src/components/ChatThread/registry.tsx +80 -28
  504. package/src/components/ChatThread/sync.test.ts +180 -22
  505. package/src/components/ChatThread/sync.ts +89 -104
  506. package/src/components/ChatThread/testing/reasoning.md +25 -0
  507. package/src/components/ChatThread/widgets/FallbackWidget.tsx +8 -6
  508. package/src/components/ChatThread/widgets/ReasoningWidget.ts +13 -7
  509. package/src/components/ChatThread/widgets/ReferenceWidget.ts +3 -1
  510. package/src/components/ChatThread/widgets/SelectWidget.ts +4 -2
  511. package/src/components/ChatThread/widgets/StatsWidget.ts +3 -1
  512. package/src/components/ChatThread/widgets/StatusWidget.ts +6 -86
  513. package/src/components/ChatThread/widgets/SuggestionWidget.ts +2 -2
  514. package/src/components/ChatThread/widgets/SummaryWidget.tsx +7 -6
  515. package/src/components/ChatThread/widgets/ToolWidget.stories.tsx +2 -1
  516. package/src/components/ChatThread/widgets/ToolWidget.tsx +42 -25
  517. package/src/components/ChatThread/widgets/defaults.ts +8 -0
  518. package/src/components/ChatThread/widgets/index.ts +1 -2
  519. package/src/components/ProcessTree/ProcessTree.stories.tsx +13 -39
  520. package/src/components/ProcessTree/ProcessTree.tsx +101 -67
  521. package/src/components/RoutineProperties/RoutineProperties.stories.tsx +59 -0
  522. package/src/components/RoutineProperties/RoutineProperties.tsx +23 -0
  523. package/src/components/RoutineProperties/index.ts +5 -0
  524. package/src/components/TaskList/TaskList.stories.tsx +44 -0
  525. package/src/components/TaskList/TaskList.tsx +45 -0
  526. package/src/components/TaskList/index.ts +5 -0
  527. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +6 -5
  528. package/src/components/TemplateEditor/TemplateEditor.tsx +12 -10
  529. package/src/components/TemplateEditor/TemplateForm.stories.tsx +6 -9
  530. package/src/components/TemplateEditor/TemplateForm.tsx +52 -73
  531. package/src/components/TemplateEditor/extensions/handlebars-extension.ts +2 -2
  532. package/src/components/ToolBlock/ToolBlock.tsx +25 -17
  533. package/src/components/Toolbox/Toolbox.stories.tsx +6 -5
  534. package/src/components/Toolbox/Toolbox.tsx +6 -5
  535. package/src/components/index.ts +6 -0
  536. package/src/constants.ts +9 -0
  537. package/src/containers/AgentArticle/AgentArticle.stories.tsx +19 -15
  538. package/src/containers/AgentArticle/AgentArticle.tsx +47 -53
  539. package/src/containers/AgentProperties/AgentProperties.tsx +20 -135
  540. package/src/containers/BlueprintArticle/BlueprintArticle.tsx +2 -2
  541. package/src/containers/ChatArticle/ChatArticle.stories.tsx +78 -0
  542. package/src/containers/ChatArticle/ChatArticle.tsx +112 -0
  543. package/src/containers/ChatArticle/index.ts +5 -0
  544. package/src/containers/ChatCompanion/ChatCompanion.tsx +94 -109
  545. package/src/containers/ChatDialog/ChatDialog.tsx +6 -11
  546. package/src/containers/PlanArticle/PlanArticle.tsx +33 -0
  547. package/src/containers/PlanArticle/index.ts +5 -0
  548. package/src/containers/RoutineArticle/RoutineArticle.stories.tsx +75 -0
  549. package/src/containers/RoutineArticle/RoutineArticle.tsx +109 -0
  550. package/src/containers/RoutineArticle/index.ts +5 -0
  551. package/src/containers/{PromptList/PromptList.stories.tsx → RoutineList/RoutineList.stories.tsx} +14 -13
  552. package/src/containers/{PromptList/PromptList.tsx → RoutineList/RoutineList.tsx} +9 -8
  553. package/src/containers/RoutineList/index.ts +5 -0
  554. package/src/containers/TracePanel/TracePanel.stories.tsx +285 -168
  555. package/src/containers/TracePanel/TracePanel.tsx +220 -77
  556. package/src/containers/TracePanel/dxn-extractor.test.ts +32 -32
  557. package/src/containers/TracePanel/dxn-extractor.ts +52 -64
  558. package/src/containers/TracePanel/testing/index.ts +6 -0
  559. package/src/containers/TracePanel/testing/simulated-agent.ts +114 -0
  560. package/src/containers/TracePanel/testing/snapshot-playback.ts +45 -0
  561. package/src/containers/TriggerStatus/TriggerStatus.tsx +20 -34
  562. package/src/containers/TriggerStatus/index.ts +1 -1
  563. package/src/containers/index.ts +6 -5
  564. package/src/execution-graph/SPEC.md +690 -0
  565. package/src/execution-graph/execution-graph.test.ts +891 -0
  566. package/src/execution-graph/execution-graph.ts +777 -0
  567. package/src/execution-graph/index.ts +24 -0
  568. package/src/execution-graph/remote-snapshot.test.ts +116 -0
  569. package/src/execution-graph/span-tree.test.ts +249 -0
  570. package/src/execution-graph/span-tree.ts +269 -0
  571. package/src/execution-graph/sub-agent-delegation.test.ts +50 -0
  572. package/src/execution-graph/testing/collect-trace-events.ts +74 -0
  573. package/src/execution-graph/testing/index.ts +5 -0
  574. package/src/execution-graph/testing/sub-agent-delegation.json +1285 -0
  575. package/src/{queue-logger.ts → feed-logger.ts} +39 -25
  576. package/src/functions/services.test.ts +53 -0
  577. package/src/hooks/index.ts +5 -0
  578. package/src/hooks/useBlueprintRegistry.ts +62 -46
  579. package/src/hooks/useChatKeymap.ts +52 -0
  580. package/src/hooks/useChatProcessor.ts +33 -17
  581. package/src/hooks/useChatServices.ts +8 -6
  582. package/src/hooks/useChatToolbarActions.ts +98 -96
  583. package/src/hooks/useContextBinder.ts +7 -7
  584. package/src/hooks/useContextObjects.ts +6 -5
  585. package/src/hooks/useDebug.ts +38 -0
  586. package/src/hooks/useFilteredTypes.ts +18 -16
  587. package/src/hooks/usePresets.ts +5 -3
  588. package/src/hooks/useReferencesProvider.ts +7 -15
  589. package/src/index.ts +1 -5
  590. package/src/meta.ts +27 -8
  591. package/src/operations/create-chat.ts +15 -38
  592. package/src/operations/ensure-companion-chat.ts +49 -47
  593. package/src/operations/fork-chat.ts +112 -0
  594. package/src/operations/index.ts +3 -4
  595. package/src/operations/prompt.node.test.ts +82 -0
  596. package/src/operations/resolve-navigation-targets.ts +8 -3
  597. package/src/operations/run-prompt-in-new-chat.ts +87 -87
  598. package/src/operations/set-current-chat.ts +6 -7
  599. package/src/operations/toggle-trace-panel-debug.ts +27 -0
  600. package/src/operations/update-chat-name.ts +24 -20
  601. package/src/paths.ts +10 -0
  602. package/src/plugin.ts +11 -0
  603. package/src/processor/presets.ts +15 -11
  604. package/src/processor/{processor.test.ts → processor.node.test.ts} +7 -7
  605. package/src/processor/processor.ts +160 -58
  606. package/src/templates/automation-templates.test.ts +66 -0
  607. package/src/templates/daily-digest.ts +37 -0
  608. package/src/templates/index.ts +11 -0
  609. package/src/templates/research-brief.ts +40 -0
  610. package/src/templates/scaffold.ts +74 -0
  611. package/src/testing/data/trace-timeline-multiple.dx.json +1 -0
  612. package/src/testing/data/trace-timeline-remote.dx.json +1 -0
  613. package/src/testing/data/trace-timeline.dx.json +4657 -0
  614. package/src/testing/index.ts +2 -0
  615. package/src/testing/snapshot.ts +35 -0
  616. package/src/testing/test-generator.test.ts +71 -0
  617. package/src/testing/test-generator.ts +196 -205
  618. package/src/testing/test-sequence.ts +3 -3
  619. package/src/testing/test-services.ts +1 -1
  620. package/src/testing/test-trace.ts +20 -0
  621. package/src/testing/trace-timeline.node.conversations.json +1 -0
  622. package/src/testing/{trace-timeline.test.ts → trace-timeline.node.test.ts} +45 -50
  623. package/src/testing.ts +9 -0
  624. package/src/translations.ts +40 -38
  625. package/src/types/Assistant.ts +13 -1
  626. package/src/types/AssistantCapabilities.ts +35 -0
  627. package/src/types/AssistantEvents.ts +11 -0
  628. package/src/{operations/definitions.ts → types/AssistantOperation.ts} +66 -29
  629. package/src/types/Settings.ts +68 -7
  630. package/src/types/index.ts +12 -3
  631. package/src/types/preset.ts +16 -0
  632. package/src/types/service.ts +5 -10
  633. package/src/util/suggestions.test.ts +52 -0
  634. package/src/util/suggestions.ts +42 -0
  635. package/src/vite-env.d.ts +5 -0
  636. package/dist/lib/browser/AssistantSettings-7QMO3LGF.mjs +0 -97
  637. package/dist/lib/browser/AssistantSettings-7QMO3LGF.mjs.map +0 -7
  638. package/dist/lib/browser/chunk-ATHYBVGN.mjs +0 -176
  639. package/dist/lib/browser/chunk-ATHYBVGN.mjs.map +0 -7
  640. package/dist/lib/browser/chunk-EZRS3J25.mjs.map +0 -7
  641. package/dist/lib/browser/chunk-LMVTXH54.mjs +0 -154
  642. package/dist/lib/browser/chunk-LMVTXH54.mjs.map +0 -7
  643. package/dist/lib/browser/create-chat-LBZHGVSN.mjs +0 -82
  644. package/dist/lib/browser/create-chat-LBZHGVSN.mjs.map +0 -7
  645. package/dist/lib/browser/ensure-companion-chat-ZEZA34MZ.mjs.map +0 -7
  646. package/dist/lib/browser/index.mjs +0 -3452
  647. package/dist/lib/browser/index.mjs.map +0 -7
  648. package/dist/lib/browser/meta.json +0 -1
  649. package/dist/lib/browser/on-create-space-54RNX5JI.mjs +0 -22
  650. package/dist/lib/browser/on-create-space-54RNX5JI.mjs.map +0 -7
  651. package/dist/lib/browser/operations/index.mjs +0 -13
  652. package/dist/lib/browser/operations/index.mjs.map +0 -7
  653. package/dist/lib/browser/resolve-navigation-targets-NZOD66NY.mjs.map +0 -7
  654. package/dist/lib/browser/run-prompt-in-new-chat-THLK5YQC.mjs.map +0 -7
  655. package/dist/lib/browser/set-current-chat-LRS3VFSH.mjs.map +0 -7
  656. package/dist/lib/browser/types/index.mjs +0 -20
  657. package/dist/lib/browser/update-chat-name-3Y36KFAS.mjs.map +0 -7
  658. package/dist/lib/node-esm/AssistantSettings-UVUTKO7E.mjs +0 -98
  659. package/dist/lib/node-esm/AssistantSettings-UVUTKO7E.mjs.map +0 -7
  660. package/dist/lib/node-esm/blueprints/index.mjs +0 -9
  661. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  662. package/dist/lib/node-esm/chunk-NZIKC7AN.mjs +0 -32
  663. package/dist/lib/node-esm/chunk-NZIKC7AN.mjs.map +0 -7
  664. package/dist/lib/node-esm/chunk-PXAJSTGZ.mjs +0 -177
  665. package/dist/lib/node-esm/chunk-PXAJSTGZ.mjs.map +0 -7
  666. package/dist/lib/node-esm/chunk-W3JZ2F4T.mjs +0 -155
  667. package/dist/lib/node-esm/chunk-W3JZ2F4T.mjs.map +0 -7
  668. package/dist/lib/node-esm/create-chat-3BEG4R6J.mjs +0 -83
  669. package/dist/lib/node-esm/create-chat-3BEG4R6J.mjs.map +0 -7
  670. package/dist/lib/node-esm/ensure-companion-chat-6K2WEWFP.mjs +0 -66
  671. package/dist/lib/node-esm/ensure-companion-chat-6K2WEWFP.mjs.map +0 -7
  672. package/dist/lib/node-esm/index.mjs +0 -3453
  673. package/dist/lib/node-esm/index.mjs.map +0 -7
  674. package/dist/lib/node-esm/meta.json +0 -1
  675. package/dist/lib/node-esm/on-create-space-YRPZ6HZY.mjs +0 -23
  676. package/dist/lib/node-esm/on-create-space-YRPZ6HZY.mjs.map +0 -7
  677. package/dist/lib/node-esm/operations/index.mjs +0 -14
  678. package/dist/lib/node-esm/operations/index.mjs.map +0 -7
  679. package/dist/lib/node-esm/resolve-navigation-targets-3PPK7XLH.mjs +0 -23
  680. package/dist/lib/node-esm/resolve-navigation-targets-3PPK7XLH.mjs.map +0 -7
  681. package/dist/lib/node-esm/run-prompt-in-new-chat-OUYKCMQ7.mjs +0 -137
  682. package/dist/lib/node-esm/run-prompt-in-new-chat-OUYKCMQ7.mjs.map +0 -7
  683. package/dist/lib/node-esm/set-current-chat-SMXZJD3F.mjs +0 -55
  684. package/dist/lib/node-esm/set-current-chat-SMXZJD3F.mjs.map +0 -7
  685. package/dist/lib/node-esm/types/index.mjs +0 -21
  686. package/dist/lib/node-esm/update-chat-name-HM2P4NSI.mjs +0 -72
  687. package/dist/lib/node-esm/update-chat-name-HM2P4NSI.mjs.map +0 -7
  688. package/dist/types/src/blueprints/assistant/blueprint.test.d.ts +0 -2
  689. package/dist/types/src/blueprints/assistant/blueprint.test.d.ts.map +0 -1
  690. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  691. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts +0 -10
  692. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts.map +0 -1
  693. package/dist/types/src/components/ChatProgress/index.d.ts +0 -2
  694. package/dist/types/src/components/ChatProgress/index.d.ts.map +0 -1
  695. package/dist/types/src/components/ChatThread/widgets/PromptWidget.d.ts +0 -14
  696. package/dist/types/src/components/ChatThread/widgets/PromptWidget.d.ts.map +0 -1
  697. package/dist/types/src/containers/AgentProperties/AgentProperties.stories.d.ts.map +0 -1
  698. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts +0 -12
  699. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +0 -1
  700. package/dist/types/src/containers/ChatContainer/index.d.ts +0 -2
  701. package/dist/types/src/containers/ChatContainer/index.d.ts.map +0 -1
  702. package/dist/types/src/containers/PromptArticle/PromptArticle.d.ts +0 -6
  703. package/dist/types/src/containers/PromptArticle/PromptArticle.d.ts.map +0 -1
  704. package/dist/types/src/containers/PromptArticle/index.d.ts +0 -2
  705. package/dist/types/src/containers/PromptArticle/index.d.ts.map +0 -1
  706. package/dist/types/src/containers/PromptList/PromptList.d.ts +0 -6
  707. package/dist/types/src/containers/PromptList/PromptList.d.ts.map +0 -1
  708. package/dist/types/src/containers/PromptList/PromptList.stories.d.ts.map +0 -1
  709. package/dist/types/src/containers/PromptList/index.d.ts +0 -2
  710. package/dist/types/src/containers/PromptList/index.d.ts.map +0 -1
  711. package/dist/types/src/containers/TracePanel/execution-graph.d.ts +0 -17
  712. package/dist/types/src/containers/TracePanel/execution-graph.d.ts.map +0 -1
  713. package/dist/types/src/operations/definitions.d.ts +0 -135
  714. package/dist/types/src/operations/definitions.d.ts.map +0 -1
  715. package/dist/types/src/operations/on-create-space.d.ts +0 -5
  716. package/dist/types/src/operations/on-create-space.d.ts.map +0 -1
  717. package/dist/types/src/processor/processor.test.d.ts +0 -2
  718. package/dist/types/src/processor/processor.test.d.ts.map +0 -1
  719. package/dist/types/src/queue-logger.d.ts +0 -11
  720. package/dist/types/src/queue-logger.d.ts.map +0 -1
  721. package/dist/types/src/testing/trace-timeline.test.d.ts +0 -2
  722. package/dist/types/src/testing/trace-timeline.test.d.ts.map +0 -1
  723. package/dist/types/src/types/capabilities.d.ts +0 -32
  724. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  725. package/dist/types/src/types/defs.d.ts +0 -2
  726. package/dist/types/src/types/defs.d.ts.map +0 -1
  727. package/dist/types/src/types/events.d.ts +0 -5
  728. package/dist/types/src/types/events.d.ts.map +0 -1
  729. package/src/AssistantPlugin.tsx +0 -233
  730. package/src/components/ChatProgress/ChatProgress.tsx +0 -56
  731. package/src/components/ChatProgress/index.ts +0 -5
  732. package/src/components/ChatThread/widgets/PromptWidget.ts +0 -28
  733. package/src/containers/AgentProperties/AgentProperties.stories.tsx +0 -100
  734. package/src/containers/ChatContainer/ChatContainer.tsx +0 -95
  735. package/src/containers/ChatContainer/index.ts +0 -5
  736. package/src/containers/PromptArticle/PromptArticle.tsx +0 -59
  737. package/src/containers/PromptArticle/index.ts +0 -5
  738. package/src/containers/PromptList/index.ts +0 -5
  739. package/src/containers/TracePanel/execution-graph.ts +0 -425
  740. package/src/operations/on-create-space.ts +0 -24
  741. package/src/testing/trace-timeline.conversations.json +0 -1
  742. package/src/types/capabilities.ts +0 -35
  743. package/src/types/defs.ts +0 -5
  744. package/src/types/events.ts +0 -11
  745. /package/dist/lib/{browser/blueprints/index.mjs.map → neutral/AssistantPlugin.mjs.map} +0 -0
  746. /package/dist/lib/{browser/chunk-J5LGTIGS.mjs.map → neutral/ChatArticle-VNVZCDUR.mjs.map} +0 -0
  747. /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  748. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  749. /package/dist/lib/{node-esm/blueprints/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  750. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  751. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
@@ -7,25 +7,20 @@ import * as Prompt from '@effect/ai/Prompt';
7
7
  import * as Effect from 'effect/Effect';
8
8
 
9
9
  import { AiPreprocessor, AiService } from '@dxos/ai';
10
+ import { Operation } from '@dxos/compute';
10
11
  import { Database, Feed, Filter, Obj } from '@dxos/echo';
11
12
  import { log } from '@dxos/log';
12
- import { Operation } from '@dxos/operation';
13
13
  import { Message } from '@dxos/types';
14
14
  import { trim } from '@dxos/util';
15
15
 
16
- import { UpdateChatName } from './definitions';
16
+ import { AssistantOperation } from '#types';
17
17
 
18
- const handler: Operation.WithHandler<typeof UpdateChatName> = UpdateChatName.pipe(
18
+ const handler: Operation.WithHandler<typeof AssistantOperation.UpdateChatName> = AssistantOperation.UpdateChatName.pipe(
19
19
  Operation.withHandler(
20
20
  Effect.fnUntraced(
21
- function* ({ chat }) {
21
+ function* ({ chat, prompt: initialPrompt }) {
22
22
  log.info('updating chat name', { chat });
23
23
 
24
- const feed = yield* Database.load(chat.feed);
25
- const history = yield* Feed.runQuery(feed, Filter.type(Message.Message));
26
-
27
- log.info('history', { history: history.length });
28
-
29
24
  const system = trim`
30
25
  It is extremely important that you respond only with the title and nothing else.
31
26
  Do not use markdown or other formatting.
@@ -35,25 +30,34 @@ const handler: Operation.WithHandler<typeof UpdateChatName> = UpdateChatName.pip
35
30
  Fishing Trip
36
31
  </example_reply>
37
32
  `;
38
- const prompt = 'Suggest a name for this chat';
39
33
 
40
- const historyPrompt = yield* AiPreprocessor.preprocessPrompt(history, {
41
- system,
42
- cacheControl: 'ephemeral',
43
- });
44
-
45
- const response = yield* LanguageModel.generateText({
46
- prompt: Prompt.merge(historyPrompt, prompt),
47
- });
34
+ let namePrompt: Prompt.Prompt;
35
+ if (initialPrompt) {
36
+ // Use the provided prompt text directly; the feed may not have messages yet.
37
+ namePrompt = Prompt.setSystem(
38
+ Prompt.make(`User's first message: "${initialPrompt}"\n\nSuggest a name for this chat.`),
39
+ system,
40
+ );
41
+ } else {
42
+ const feed = yield* Database.load(chat.feed);
43
+ const history = yield* Feed.runQuery(feed, Filter.type(Message.Message));
44
+ log.info('history', { history: history.length });
45
+ const historyPrompt = yield* AiPreprocessor.preprocessPrompt(history, {
46
+ system,
47
+ cacheControl: 'ephemeral',
48
+ });
49
+ namePrompt = Prompt.merge(historyPrompt, 'Suggest a name for this chat');
50
+ }
48
51
 
52
+ const response = yield* LanguageModel.generateText({ prompt: namePrompt });
49
53
  const newName = response.text.replaceAll(/[^a-zA-Z0-9\s]/g, '').trim();
50
54
 
51
- Obj.change(chat, (chat) => {
55
+ Obj.update(chat, (chat) => {
52
56
  chat.name = newName;
53
57
  });
54
58
  log.info('chat name updated', { chat, newName: chat.name });
55
59
  },
56
- Effect.provide(AiService.model('@anthropic/claude-haiku-4-5')),
60
+ Effect.provide(AiService.model('ai.claude.model.claude-haiku-4-5')),
57
61
  ),
58
62
  ),
59
63
  );
package/src/paths.ts ADDED
@@ -0,0 +1,10 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { createTypeSectionPaths } from '@dxos/app-toolkit';
6
+ import { Chat } from '@dxos/assistant-toolkit';
7
+
8
+ const { getSectionPath: getChatsPath, getObjectPath: getChatPath } = createTypeSectionPaths(Chat.Chat);
9
+
10
+ export { getChatsPath, getChatPath };
package/src/plugin.ts ADDED
@@ -0,0 +1,11 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { Plugin } from '@dxos/app-framework';
6
+
7
+ import { meta } from './meta';
8
+
9
+ export const AssistantPlugin = Plugin.lazy(meta, () => import('#plugin'));
10
+
11
+ export { AssistantOperationHandlerSet } from './operations';
@@ -19,50 +19,54 @@ export type AiServicePreset = {
19
19
  };
20
20
 
21
21
  const createModelLabel = (model: ModelName) => {
22
- const parts = model.split('/');
22
+ const parts = model.split('.');
23
23
  return parts[parts.length - 1];
24
24
  };
25
25
 
26
26
  // TODO(burdon): Users should be able to create and edit presets.
27
27
  export const AiServicePresets: AiServicePreset[] = [
28
+ // Sonnet is first so it is the default selection.
28
29
  {
29
30
  provider: 'dxos-remote' as const,
30
- model: '@anthropic/claude-opus-4-6' as const,
31
+ model: 'ai.claude.model.claude-sonnet-4-6' as const,
32
+ label: 'Claude Sonnet',
31
33
  },
32
34
  {
33
35
  provider: 'dxos-remote' as const,
34
- model: '@anthropic/claude-sonnet-4-5' as const,
36
+ model: 'ai.claude.model.claude-opus-4-8' as const,
37
+ label: 'Claude Opus',
35
38
  },
36
39
  {
37
40
  provider: 'dxos-remote' as const,
38
- model: '@anthropic/claude-3-5-haiku-20241022' as const,
41
+ model: 'ai.claude.model.claude-haiku-4-5' as const,
42
+ label: 'Claude Haiku',
39
43
  },
40
44
  {
41
45
  provider: 'ollama' as const,
42
- model: 'gpt-oss:20b' as const,
46
+ model: 'ai.ollama.model.gpt-oss:20b' as const,
43
47
  },
44
48
  {
45
49
  provider: 'ollama' as const,
46
- model: 'gemma4:latest' as const,
50
+ model: 'ai.ollama.model.gemma4:latest' as const,
47
51
  },
48
52
  {
49
53
  provider: 'lm-studio' as const,
50
- model: '@google/gemma-3-27b' as const,
54
+ model: 'ai.google.model.gemma-3-27b' as const,
51
55
  },
52
56
  {
53
57
  provider: 'lm-studio' as const,
54
- model: '@meta/llama-3.2-3b-instruct' as const,
58
+ model: 'ai.meta.model.llama-3.2-3b-instruct' as const,
55
59
  },
56
60
  {
57
- model: 'deepseek-r1:latest' as const,
61
+ model: 'ai.ollama.model.deepseek-r1:latest' as const,
58
62
  provider: 'dxos-local' as const,
59
63
  },
60
64
  ].map(
61
- ({ model, provider }, i) =>
65
+ ({ model, provider, label }, i) =>
62
66
  ({
63
67
  id: `preset-${i}`,
64
68
  provider,
65
69
  model,
66
- label: createModelLabel(model),
70
+ label: label ?? createModelLabel(model),
67
71
  }) satisfies AiServicePreset,
68
72
  );
@@ -4,14 +4,16 @@
4
4
 
5
5
  import { describe, it } from '@effect/vitest';
6
6
  import * as Effect from 'effect/Effect';
7
+ import * as Layer from 'effect/Layer';
7
8
  import * as ManagedRuntime from 'effect/ManagedRuntime';
8
9
 
10
+ import { Capabilities } from '@dxos/app-framework';
9
11
  import { AiSession } from '@dxos/assistant';
10
12
  import { Chat } from '@dxos/assistant-toolkit';
11
- import { AssistantTestLayer } from '@dxos/assistant/testing';
12
13
  import { Database, Feed } from '@dxos/echo';
13
- import { acquireReleaseResource } from '@dxos/effect';
14
+ import { EffectEx } from '@dxos/effect';
14
15
  import { TestHelpers } from '@dxos/effect/testing';
16
+ import { AssistantTestLayer } from '@dxos/functions-runtime/testing';
15
17
 
16
18
  import { AiChatProcessor } from './processor';
17
19
 
@@ -25,11 +27,9 @@ describe('Chat processor', () => {
25
27
  const feed = Feed.make();
26
28
  yield* Database.add(feed);
27
29
  const runtime = yield* Effect.runtime<Feed.FeedService>();
28
- const session = yield* acquireReleaseResource(() => new AiSession({ feed, runtime }));
29
- const managedRuntime = ManagedRuntime.make(
30
- Effect.runSync(Effect.map(Effect.context<never>(), () => undefined as any)) as any,
31
- );
32
- const processor = new AiChatProcessor(session, managedRuntime as any, feed);
30
+ const session = yield* EffectEx.acquireReleaseResource(() => new AiSession.Session({ feed, runtime }));
31
+ const managedRuntime = ManagedRuntime.make(Layer.empty) as unknown as Capabilities.ProcessManagerRuntime;
32
+ const processor = new AiChatProcessor(session, managedRuntime, feed, Layer.empty as any);
33
33
  expect(processor).toBeDefined();
34
34
  expect(processor.active).toBeDefined();
35
35
  },
@@ -2,73 +2,109 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Atom, Registry } from '@effect-atom/atom-react';
5
+ import { Atom, Registry as AtomRegistry } from '@effect-atom/atom-react';
6
+ import * as AiError from '@effect/ai/AiError';
7
+ import * as Cause from 'effect/Cause';
6
8
  import * as Effect from 'effect/Effect';
9
+ import * as Exit from 'effect/Exit';
7
10
  import * as Fiber from 'effect/Fiber';
11
+ import * as Layer from 'effect/Layer';
8
12
  import * as Option from 'effect/Option';
9
13
  import * as Stream from 'effect/Stream';
10
14
 
11
- import { type AiService, DEFAULT_EDGE_MODEL, type ModelName, type ModelRegistry } from '@dxos/ai';
15
+ import { type AiService, DEFAULT_EDGE_MODEL, type ModelName, type ModelRegistry, type OpaqueToolkit } from '@dxos/ai';
16
+ import { Capabilities } from '@dxos/app-framework';
12
17
  import {
13
- AiContextService,
14
- type AiSession,
18
+ AiContext,
19
+ AiSession,
15
20
  createSystemPrompt,
16
21
  formatSystemPrompt,
17
- AgentService,
22
+ McpServerError,
18
23
  PartialBlock,
19
24
  ToolExecutionServices,
20
25
  } from '@dxos/assistant';
21
26
  import { type Chat } from '@dxos/assistant-toolkit';
22
- import { type Blueprint } from '@dxos/blueprints';
23
- import { type Database, Feed, Obj, Ref } from '@dxos/echo';
24
- import { runAndForwardErrors, unwrapExit } from '@dxos/effect';
25
- import { Trace, type CredentialsService, type QueueService } from '@dxos/functions';
27
+ import { type Credential, Operation, type ServiceNotAvailableError, Trace } from '@dxos/compute';
28
+ import { type Database, Feed, Obj, Ref, type Registry } from '@dxos/echo';
29
+ import { EffectEx } from '@dxos/effect';
30
+ import { AgentService } from '@dxos/functions-runtime';
26
31
  import { log } from '@dxos/log';
27
- import { Operation } from '@dxos/operation';
28
- import type { AutomationCapabilities } from '@dxos/plugin-automation/types';
29
32
  import { Message } from '@dxos/types';
30
33
 
31
- import { UpdateChatName } from '../operations/definitions';
34
+ import { AssistantOperation } from '#types';
32
35
 
33
36
  /**
34
37
  * @deprecated Services type for the old direct-conversation processor path.
35
38
  * Retained for backward compatibility with CLI and update-name.
36
39
  */
37
40
  export type AiChatServices =
38
- | CredentialsService
41
+ | Credential.CredentialsService
39
42
  | Database.Service
40
- | QueueService
41
43
  | AiService.AiService
42
44
  | Trace.TraceService;
43
45
 
46
+ /**
47
+ * Space-scoped services materialised by the layer passed into
48
+ * {@link AiChatProcessor}. Mirrors the tag list that
49
+ * {@link useChatProcessor} passes to {@link ServiceResolver.provide}.
50
+ */
51
+ export type SpaceServices =
52
+ | Database.Service
53
+ | Feed.FeedService
54
+ | Credential.CredentialsService
55
+ | AiService.AiService
56
+ | AgentService.AgentService
57
+ | Registry.Service
58
+ | OpaqueToolkit.OpaqueToolkitProvider;
59
+
44
60
  export type AiChatProcessorOptions = {
45
61
  model?: ModelName;
46
62
  modelRegistry?: ModelRegistry;
47
- blueprintRegistry?: Blueprint.Registry;
48
- observableRegistry?: Registry.Registry;
63
+ registry?: Registry.Registry;
64
+ observableRegistry?: AtomRegistry.Registry;
49
65
  /**
50
66
  * For tracing.
51
67
  */
52
68
  chat?: Ref.Ref<Chat.Chat>;
53
69
  system?: string;
54
- /**
55
- * Probability of automatically updating chat name after each request.
56
- * Chat name is always updated if it has no name.
57
- * @default 0.1 (10%)
58
- */
59
- autoUpdateNameChance?: number;
60
70
  };
61
71
 
62
72
  const defaultOptions: Partial<AiChatProcessorOptions> = {
63
73
  model: DEFAULT_EDGE_MODEL,
64
- autoUpdateNameChance: 0.1,
65
74
  };
66
75
 
67
- export type AiRequestOptions = {};
76
+ export type ProcessorRequestOptions = {};
68
77
 
69
- export type AiRequest = {
78
+ export type ProcessorRequest = {
70
79
  message: string;
71
- options?: AiRequestOptions;
80
+ options?: ProcessorRequestOptions;
81
+ };
82
+
83
+ /**
84
+ * Maps a failure from the agent fiber to an error suitable for display.
85
+ * {@link AiError}s originate from the AI service and are actionable by the user
86
+ * (e.g., "model 'x' not found", "Connection refused"), so their detail is propagated.
87
+ * Any other failure is treated as an internal/unexpected error and reported generically
88
+ * to avoid leaking implementation detail.
89
+ */
90
+ const parseError = (err: unknown): Error => {
91
+ let message: string | undefined;
92
+ if (AiError.isAiError(err)) {
93
+ message = err.description?.trim() || err.message;
94
+ } else if (typeof err === 'string') {
95
+ // TODO(burdon): This is brittle.
96
+ // UnknownError: ChatCompletionsClient.streamText: model 'gemma3:27b' not found
97
+ const [, model] = err.match(/model\s+'([^']+)'\s+not\s+found/i) || [];
98
+ if (model) {
99
+ message = `The model is not available: ${model}`;
100
+ }
101
+ }
102
+
103
+ if (!message) {
104
+ message = 'An unexpected error occurred.';
105
+ }
106
+
107
+ return new Error(message, { cause: err });
72
108
  };
73
109
 
74
110
  /**
@@ -76,7 +112,7 @@ export type AiRequest = {
76
112
  * Uses AgentService to spawn a process-backed agent and subscribes to ephemeral trace events for streaming.
77
113
  */
78
114
  export class AiChatProcessor {
79
- readonly #registry: Registry.Registry;
115
+ readonly #registry: AtomRegistry.Registry;
80
116
 
81
117
  /** Pending messages (finalized, non-streaming). */
82
118
  readonly #pending = Atom.make<Message.Message[]>([]);
@@ -91,7 +127,7 @@ export class AiChatProcessor {
91
127
  #requestFiber: Fiber.RuntimeFiber<void, unknown> | undefined;
92
128
 
93
129
  /** Last request (for retries). */
94
- #lastRequest: AiRequest | undefined;
130
+ #lastRequest: ProcessorRequest | undefined;
95
131
 
96
132
  /** Streaming state. */
97
133
  public readonly streaming = Atom.make<boolean>((get) => get(this.#streaming).length > 0);
@@ -105,13 +141,29 @@ export class AiChatProcessor {
105
141
  /** Last error. */
106
142
  public readonly error = Atom.make<Option.Option<Error>>(Option.none());
107
143
 
144
+ /**
145
+ * MCP server connection errors observed during the most recent request.
146
+ * Misconfigured/unreachable servers are dropped from the toolkit so the chat
147
+ * keeps working; the entries here let the UI display which servers failed.
148
+ */
149
+ public readonly mcpErrors = Atom.make<readonly Trace.PayloadType<typeof McpServerError>[]>([]);
150
+
108
151
  constructor(
109
- private readonly _conversation: AiSession,
110
- private readonly _runtime: AutomationCapabilities.ComputeRuntime,
152
+ private readonly _conversation: AiSession.Session,
153
+ private readonly _runtime: Capabilities.ProcessManagerRuntime,
111
154
  private readonly _feed: Feed.Feed,
155
+ /**
156
+ * Pre-built layer that materialises {@link SpaceServices}. Built via
157
+ * {@link ServiceResolver.provide} with the {@link ServiceResolver} already
158
+ * supplied (hence `RIn = never`); the {@link ServiceNotAvailableError}
159
+ * error channel surfaces when a tag is not available for the space.
160
+ * Provided to every effect run by the processor so the underlying
161
+ * {@link ProcessManagerRuntime} has access to space-affinity services.
162
+ */
163
+ private readonly _spaceLayer: Layer.Layer<SpaceServices, ServiceNotAvailableError, never>,
112
164
  private readonly _options: AiChatProcessorOptions = defaultOptions,
113
165
  ) {
114
- this.#registry = this._options.observableRegistry ?? Registry.make();
166
+ this.#registry = this._options.observableRegistry ?? AtomRegistry.make();
115
167
  if (this._options.model && !this._options.system) {
116
168
  const capabilities = this._options.modelRegistry?.getCapabilities(this._options.model) ?? {};
117
169
  this._options.system = createSystemPrompt(capabilities);
@@ -126,8 +178,8 @@ export class AiChatProcessor {
126
178
  return this._conversation;
127
179
  }
128
180
 
129
- get blueprintRegistry() {
130
- return this._options.blueprintRegistry;
181
+ get registry() {
182
+ return this._options.registry;
131
183
  }
132
184
 
133
185
  get system(): string {
@@ -135,7 +187,9 @@ export class AiChatProcessor {
135
187
  }
136
188
 
137
189
  async getTools(): Promise<Record<string, any>> {
138
- return this._runtime.runPromise(Effect.provide(this._conversation.getTools(), ToolExecutionServices));
190
+ return this._runtime.runPromise(
191
+ Effect.provide(this._conversation.getTools(), ToolExecutionServices).pipe(Effect.provide(this._spaceLayer)),
192
+ );
139
193
  }
140
194
 
141
195
  async getSystemPrompt(): Promise<string> {
@@ -144,14 +198,18 @@ export class AiChatProcessor {
144
198
  const blueprints = this.context.getBlueprints();
145
199
  const objects = this.context.getObjects();
146
200
  return yield* formatSystemPrompt({ system: this._options.system, blueprints, objects });
147
- }).pipe(Effect.provideService(AiContextService, { binder: this.context }), Effect.orDie),
201
+ }).pipe(
202
+ Effect.provideService(AiContext.Service, { binder: this.context }),
203
+ Effect.provide(this._spaceLayer),
204
+ Effect.orDie,
205
+ ),
148
206
  );
149
207
  }
150
208
 
151
209
  /**
152
210
  * Initiates a new request via AgentService.
153
211
  */
154
- async request(requestProp: AiRequest): Promise<void> {
212
+ async request(requestProp: ProcessorRequest): Promise<void> {
155
213
  if (this.#requestFiber) {
156
214
  await this.cancel();
157
215
  }
@@ -159,11 +217,12 @@ export class AiChatProcessor {
159
217
  try {
160
218
  this.#lastRequest = requestProp;
161
219
  this.#registry.set(this.error, Option.none());
220
+ this.#registry.set(this.mcpErrors, []);
162
221
  this.#registry.set(this.active, true);
163
222
 
164
223
  const effect = Effect.gen(this, function* () {
165
224
  // NOTE: Gets or creates a session for the feed.
166
- log.info('init agent session', { feed: Obj.getDXN(this._feed).toString(), model: this._options.model });
225
+ log.info('init agent session', { feed: Obj.getURI(this._feed), model: this._options.model });
167
226
  const session = yield* AgentService.getSession(this._feed, { model: this._options.model });
168
227
  const ephemeralStream = session.subscribeEphemeral();
169
228
  yield* ephemeralStream.pipe(
@@ -172,6 +231,8 @@ export class AiChatProcessor {
172
231
  for (const event of message.events) {
173
232
  if (Trace.isOfType(PartialBlock, event)) {
174
233
  this.#handleEphemeralMessage(event.data);
234
+ } else if (Trace.isOfType(McpServerError, event)) {
235
+ this.#handleMcpError(event.data);
175
236
  }
176
237
  }
177
238
  }),
@@ -182,31 +243,40 @@ export class AiChatProcessor {
182
243
  log('chat processor submitting prompt', { length: requestProp.message.length });
183
244
  yield* session.submitPrompt(requestProp.message);
184
245
  log('chat processor submitPrompt returned, waiting for agent', {});
246
+
247
+ // On the first message (no name yet), schedule rename immediately so it
248
+ // runs concurrently with the AI response rather than waiting for completion.
249
+ if (!this._options.chat?.target?.name) {
250
+ yield* this.#updateChatName(requestProp.message);
251
+ }
252
+
185
253
  yield* session.waitForCompletion();
186
254
  log.info('session complete');
187
255
 
188
256
  this.#flushStreaming();
189
-
190
- yield* this.#maybeUpdateChatName();
191
257
  });
192
258
 
193
- this.#requestFiber = this._runtime.runFork(effect);
259
+ this.#requestFiber = this._runtime.runFork(effect.pipe(Effect.provide(this._spaceLayer)));
194
260
 
195
- try {
196
- await this._runtime.runPromise(Fiber.join(this.#requestFiber));
197
- } catch (err: any) {
198
- if (err._tag === 'InterruptedException' || err.message?.includes('interrupted')) {
261
+ // Inspect the fiber's exit so the underlying failure (e.g. "model 'x' not found") is
262
+ // preserved as a clean Error rather than an opaque FiberFailure.
263
+ const exit = await this._runtime.runPromise(Fiber.await(this.#requestFiber));
264
+ if (Exit.isFailure(exit)) {
265
+ if (Cause.isInterruptedOnly(exit.cause)) {
199
266
  return;
200
267
  }
201
- throw err;
268
+
269
+ throw EffectEx.causeToError(exit.cause);
202
270
  }
203
271
 
204
272
  this.#registry.set(this.error, Option.none());
205
273
  this.#lastRequest = undefined;
206
274
  this.#requestFiber = undefined;
207
275
  } catch (err) {
276
+ // `EffectEx.causeToError` above unwraps the fiber failure into the underlying error (e.g. an AiError
277
+ // carrying "model 'x' not found"); `parseError` decides what to surface to the user.
208
278
  log.error('request failed', { error: err });
209
- this.#registry.set(this.error, Option.some(new Error('AI service error', { cause: err })));
279
+ this.#registry.set(this.error, Option.some(parseError(err)));
210
280
  } finally {
211
281
  log.info('setting active to false');
212
282
  this.#registry.set(this.active, false);
@@ -218,12 +288,15 @@ export class AiChatProcessor {
218
288
  * Cancels the current request.
219
289
  */
220
290
  async cancel(): Promise<void> {
221
- await runAndForwardErrors(
291
+ await EffectEx.runAndForwardErrors(
222
292
  Effect.gen(this, function* () {
293
+ log.info('cancelling request', { fiber: this.#requestFiber });
223
294
  if (this.#requestFiber) {
224
295
  yield* Fiber.interrupt(this.#requestFiber);
225
296
  }
226
- }),
297
+ const session = yield* AgentService.getSession(this._feed);
298
+ yield* session.terminate();
299
+ }).pipe(Effect.provide(this._spaceLayer)),
227
300
  );
228
301
 
229
302
  this.#requestFiber = undefined;
@@ -239,11 +312,28 @@ export class AiChatProcessor {
239
312
  }
240
313
  }
241
314
 
315
+ /**
316
+ * Clears the recorded MCP server errors (e.g. after the user dismisses the warning banner).
317
+ */
318
+ dismissMcpErrors(): void {
319
+ this.#registry.set(this.mcpErrors, []);
320
+ }
321
+
242
322
  /**
243
323
  * Update the current chat's name.
244
324
  */
245
325
  async updateName(chat: Chat.Chat): Promise<void> {
246
- unwrapExit(await this._runtime.runPromiseExit(Operation.invoke(UpdateChatName, { chat })));
326
+ const spaceId = Obj.getDatabase(chat)?.spaceId;
327
+ if (!spaceId) {
328
+ return;
329
+ }
330
+ EffectEx.unwrapExit(
331
+ await this._runtime.runPromiseExit(
332
+ Operation.invoke(AssistantOperation.UpdateChatName, { chat }, { spaceId }).pipe(
333
+ Effect.provide(this._spaceLayer),
334
+ ),
335
+ ),
336
+ );
247
337
  }
248
338
 
249
339
  /**
@@ -286,6 +376,20 @@ export class AiChatProcessor {
286
376
  }
287
377
  }
288
378
 
379
+ /**
380
+ * Records a per-server MCP failure, deduped by url+protocol so repeat misconfigurations
381
+ * across turns do not spam the UI.
382
+ */
383
+ #handleMcpError(event: Trace.PayloadType<typeof McpServerError>) {
384
+ log.warn('MCP server error', event);
385
+ this.#registry.update(this.mcpErrors, (errors) => {
386
+ if (errors.some((existing) => existing.url === event.url && existing.protocol === event.protocol)) {
387
+ return errors;
388
+ }
389
+ return [...errors, event];
390
+ });
391
+ }
392
+
289
393
  /**
290
394
  * Move remaining streaming messages to pending (called when agent completes).
291
395
  */
@@ -299,23 +403,21 @@ export class AiChatProcessor {
299
403
  }
300
404
 
301
405
  /**
302
- * Conditionally schedule chat name update in detached fork mode.
303
- * Updates if chat has no name OR based on random chance (default 10%).
406
+ * Schedule a chat name update as a detached (fire-and-forget) operation.
407
+ * Called automatically on the first message; can also be invoked manually via the toolbar.
304
408
  */
305
- #maybeUpdateChatName(): Effect.Effect<void, never, Operation.Service> {
409
+ #updateChatName(prompt?: string): Effect.Effect<void, never, Operation.Service> {
306
410
  const chat = this._options.chat?.target;
307
411
  if (!chat) {
308
412
  return Effect.void;
309
413
  }
310
414
 
311
- const chance = this._options.autoUpdateNameChance ?? defaultOptions.autoUpdateNameChance ?? 0.1;
312
- const shouldUpdate = !chat.name || Math.random() < chance;
313
- if (!shouldUpdate) {
415
+ const spaceId = Obj.getDatabase(chat)?.spaceId;
416
+ if (!spaceId) {
314
417
  return Effect.void;
315
418
  }
316
419
 
317
- // TODO(dmaretskyi): Operation.schedule didn't work.
318
- log.info('scheduling chat name update', { hasName: !!chat.name, chance });
319
- return Operation.schedule(UpdateChatName, { chat });
420
+ log.info('scheduling chat name update');
421
+ return Operation.schedule(AssistantOperation.UpdateChatName, { chat, prompt }, { spaceId });
320
422
  }
321
423
  }
@@ -0,0 +1,66 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Layer from 'effect/Layer';
7
+ import { describe, test } from 'vitest';
8
+
9
+ import { Operation, Routine, Trace, Trigger } from '@dxos/compute';
10
+ import { Database, Filter, Obj, Query } from '@dxos/echo';
11
+ import { TestDatabaseLayer } from '@dxos/echo-client/testing';
12
+ import { EffectEx } from '@dxos/effect';
13
+ import { Automation } from '@dxos/plugin-automation';
14
+
15
+ import { dailyDigest } from './daily-digest';
16
+ import { researchBrief } from './research-brief';
17
+
18
+ const dbLayer = TestDatabaseLayer({
19
+ types: [Automation.Automation, Routine.Routine, Trigger.Trigger, Operation.PersistentOperation],
20
+ });
21
+
22
+ const TestLayer = Layer.mergeAll(dbLayer, Trace.writerLayerNoop);
23
+
24
+ const templates = [
25
+ { template: researchBrief, blueprintCount: 4 },
26
+ { template: dailyDigest, blueprintCount: 3 },
27
+ ];
28
+
29
+ describe('scheduled automation templates', () => {
30
+ test('apply globally (no subject required)', ({ expect }) => {
31
+ // Like Blank, these are offered in the global create dialog — no `appliesTo` gate.
32
+ expect(researchBrief.appliesTo).toBeUndefined();
33
+ expect(dailyDigest.appliesTo).toBeUndefined();
34
+ });
35
+
36
+ for (const { template, blueprintCount } of templates) {
37
+ test(`${template.label} scaffolds a Routine, a disabled timer Trigger, and an Automation`, async ({ expect }) => {
38
+ await Effect.gen(function* () {
39
+ const automation = yield* template.scaffold({});
40
+ yield* Database.add(automation);
41
+ yield* Database.flush();
42
+
43
+ expect(automation.triggers).toHaveLength(1);
44
+ expect(automation.runnable).toBeDefined();
45
+
46
+ const routines = yield* Database.query(Filter.type(Routine.Routine)).run;
47
+ expect(routines).toHaveLength(1);
48
+ expect(routines[0]?.blueprints).toHaveLength(blueprintCount);
49
+
50
+ const triggers = yield* Database.query(Query.select(Filter.type(Trigger.Trigger))).run;
51
+ expect(triggers).toHaveLength(1);
52
+ const trigger = triggers[0];
53
+ expect(trigger?.enabled).toBe(false);
54
+ expect(trigger?.spec?.kind).toBe('timer');
55
+ expect(trigger?.input?.prompt).toBeDefined();
56
+ // The trigger is owned by the automation (cascade-deletes with it); the routine stays independent.
57
+ expect(trigger && Obj.getParent(trigger)?.id).toBe(automation.id);
58
+ expect(routines[0] && Obj.getParent(routines[0])).toBeUndefined();
59
+
60
+ const operations = yield* Database.query(Filter.type(Operation.PersistentOperation)).run;
61
+ expect(operations).toHaveLength(1);
62
+ expect(automation.runnable?.uri).toBe(trigger?.function?.uri);
63
+ }).pipe(Effect.provide(TestLayer), EffectEx.runAndForwardErrors);
64
+ });
65
+ }
66
+ });