@dxos/plugin-assistant 0.8.4-main.72ec0f3 → 0.8.4-main.74a063c4e0

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 (556) hide show
  1. package/dist/lib/browser/AssistantSettings-7QMO3LGF.mjs +97 -0
  2. package/dist/lib/browser/AssistantSettings-7QMO3LGF.mjs.map +7 -0
  3. package/dist/lib/browser/blueprints/index.mjs +8 -0
  4. package/dist/lib/browser/chunk-ATHYBVGN.mjs +176 -0
  5. package/dist/lib/browser/chunk-ATHYBVGN.mjs.map +7 -0
  6. package/dist/lib/browser/chunk-EZRS3J25.mjs +30 -0
  7. package/dist/lib/browser/chunk-EZRS3J25.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-RUV2WOQH.mjs +154 -0
  9. package/dist/lib/browser/chunk-RUV2WOQH.mjs.map +7 -0
  10. package/dist/lib/browser/create-chat-DF5TG5XC.mjs +82 -0
  11. package/dist/lib/browser/create-chat-DF5TG5XC.mjs.map +7 -0
  12. package/dist/lib/browser/ensure-companion-chat-FR4AWZ2P.mjs +65 -0
  13. package/dist/lib/browser/ensure-companion-chat-FR4AWZ2P.mjs.map +7 -0
  14. package/dist/lib/browser/index.mjs +3062 -322
  15. package/dist/lib/browser/index.mjs.map +4 -4
  16. package/dist/lib/browser/meta.json +1 -1
  17. package/dist/lib/browser/on-create-space-54RNX5JI.mjs +22 -0
  18. package/dist/lib/browser/on-create-space-54RNX5JI.mjs.map +7 -0
  19. package/dist/lib/browser/operations/index.mjs +13 -0
  20. package/dist/lib/browser/operations/index.mjs.map +7 -0
  21. package/dist/lib/browser/resolve-navigation-targets-NZOD66NY.mjs +22 -0
  22. package/dist/lib/browser/resolve-navigation-targets-NZOD66NY.mjs.map +7 -0
  23. package/dist/lib/browser/run-prompt-in-new-chat-4YQ37XIS.mjs +136 -0
  24. package/dist/lib/browser/run-prompt-in-new-chat-4YQ37XIS.mjs.map +7 -0
  25. package/dist/lib/browser/set-current-chat-WJI3WAVM.mjs +54 -0
  26. package/dist/lib/browser/set-current-chat-WJI3WAVM.mjs.map +7 -0
  27. package/dist/lib/browser/types/index.mjs +5 -4
  28. package/dist/lib/browser/update-chat-name-3Y36KFAS.mjs +71 -0
  29. package/dist/lib/browser/update-chat-name-3Y36KFAS.mjs.map +7 -0
  30. package/dist/lib/node-esm/AssistantSettings-UVUTKO7E.mjs +98 -0
  31. package/dist/lib/node-esm/AssistantSettings-UVUTKO7E.mjs.map +7 -0
  32. package/dist/lib/node-esm/blueprints/index.mjs +9 -0
  33. package/dist/lib/node-esm/chunk-NZIKC7AN.mjs +32 -0
  34. package/dist/lib/node-esm/chunk-NZIKC7AN.mjs.map +7 -0
  35. package/dist/lib/node-esm/chunk-PXAJSTGZ.mjs +177 -0
  36. package/dist/lib/node-esm/chunk-PXAJSTGZ.mjs.map +7 -0
  37. package/dist/lib/node-esm/chunk-PY4X6FJT.mjs +155 -0
  38. package/dist/lib/node-esm/chunk-PY4X6FJT.mjs.map +7 -0
  39. package/dist/lib/node-esm/create-chat-RAV7IX2S.mjs +83 -0
  40. package/dist/lib/node-esm/create-chat-RAV7IX2S.mjs.map +7 -0
  41. package/dist/lib/node-esm/ensure-companion-chat-BLP7NT32.mjs +66 -0
  42. package/dist/lib/node-esm/ensure-companion-chat-BLP7NT32.mjs.map +7 -0
  43. package/dist/lib/node-esm/index.mjs +3062 -322
  44. package/dist/lib/node-esm/index.mjs.map +4 -4
  45. package/dist/lib/node-esm/meta.json +1 -1
  46. package/dist/lib/node-esm/on-create-space-YRPZ6HZY.mjs +23 -0
  47. package/dist/lib/node-esm/on-create-space-YRPZ6HZY.mjs.map +7 -0
  48. package/dist/lib/node-esm/operations/index.mjs +14 -0
  49. package/dist/lib/node-esm/operations/index.mjs.map +7 -0
  50. package/dist/lib/node-esm/resolve-navigation-targets-3PPK7XLH.mjs +23 -0
  51. package/dist/lib/node-esm/resolve-navigation-targets-3PPK7XLH.mjs.map +7 -0
  52. package/dist/lib/node-esm/run-prompt-in-new-chat-2IJBSDTM.mjs +137 -0
  53. package/dist/lib/node-esm/run-prompt-in-new-chat-2IJBSDTM.mjs.map +7 -0
  54. package/dist/lib/node-esm/set-current-chat-KBMMZULR.mjs +55 -0
  55. package/dist/lib/node-esm/set-current-chat-KBMMZULR.mjs.map +7 -0
  56. package/dist/lib/node-esm/types/index.mjs +5 -4
  57. package/dist/lib/node-esm/update-chat-name-HM2P4NSI.mjs +72 -0
  58. package/dist/lib/node-esm/update-chat-name-HM2P4NSI.mjs.map +7 -0
  59. package/dist/types/src/AssistantPlugin.d.ts +2 -1
  60. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  61. package/dist/types/src/blueprints/assistant/blueprint.d.ts +4 -0
  62. package/dist/types/src/blueprints/assistant/blueprint.d.ts.map +1 -0
  63. package/dist/types/src/blueprints/assistant/blueprint.test.d.ts +2 -0
  64. package/dist/types/src/blueprints/assistant/blueprint.test.d.ts.map +1 -0
  65. package/dist/types/src/blueprints/assistant/index.d.ts +2 -0
  66. package/dist/types/src/blueprints/assistant/index.d.ts.map +1 -0
  67. package/dist/types/src/blueprints/index.d.ts +2 -0
  68. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  69. package/dist/types/src/capabilities/ai-service.d.ts +4 -2
  70. package/dist/types/src/capabilities/ai-service.d.ts.map +1 -1
  71. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  72. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/blueprint-definition.d.ts +4 -6
  74. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts +9 -0
  76. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts.map +1 -0
  77. package/dist/types/src/capabilities/edge-model-resolver.d.ts +6 -3
  78. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/index.d.ts +41 -12
  80. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/local-model-resolver.d.ts +6 -3
  82. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/markdown.d.ts +5 -0
  84. package/dist/types/src/capabilities/markdown.d.ts.map +1 -0
  85. package/dist/types/src/capabilities/migrations.d.ts +5 -0
  86. package/dist/types/src/capabilities/migrations.d.ts.map +1 -0
  87. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  88. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  89. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  90. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/settings.d.ts +16 -2
  92. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/state.d.ts +19 -2
  94. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/toolkit.d.ts +4 -2
  96. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -1
  97. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts +4 -4
  98. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  99. package/dist/types/src/components/AssistantSettings/AssistantSettings.stories.d.ts +517 -0
  100. package/dist/types/src/components/AssistantSettings/AssistantSettings.stories.d.ts.map +1 -0
  101. package/dist/types/src/components/AssistantSettings/index.d.ts +1 -1
  102. package/dist/types/src/components/AssistantSettings/index.d.ts.map +1 -1
  103. package/dist/types/src/components/Chat/Chat.d.ts +30 -19
  104. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  105. package/dist/types/src/components/Chat/events.d.ts +1 -1
  106. package/dist/types/src/components/Chat/events.d.ts.map +1 -1
  107. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts +6 -3
  108. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts.map +1 -1
  109. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts +2 -1
  110. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  111. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts +3 -3
  112. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
  113. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +3 -3
  114. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -1
  115. package/dist/types/src/components/ChatThread/ChatStream.stories.d.ts +530 -0
  116. package/dist/types/src/components/ChatThread/ChatStream.stories.d.ts.map +1 -0
  117. package/dist/types/src/components/ChatThread/ChatThread.d.ts +4 -4
  118. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  119. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +502 -300
  120. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/ChatThread/registry.d.ts +1 -1
  122. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
  123. package/dist/types/src/components/ChatThread/sync.d.ts +6 -6
  124. package/dist/types/src/components/ChatThread/sync.d.ts.map +1 -1
  125. package/dist/types/src/components/ChatThread/widgets/FallbackWidget.d.ts +8 -0
  126. package/dist/types/src/components/ChatThread/widgets/FallbackWidget.d.ts.map +1 -0
  127. package/dist/types/src/components/ChatThread/widgets/PromptWidget.d.ts +14 -0
  128. package/dist/types/src/components/ChatThread/widgets/PromptWidget.d.ts.map +1 -0
  129. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.d.ts +25 -0
  130. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.d.ts.map +1 -0
  131. package/dist/types/src/components/ChatThread/widgets/ReferenceWidget.d.ts +9 -0
  132. package/dist/types/src/components/ChatThread/widgets/ReferenceWidget.d.ts.map +1 -0
  133. package/dist/types/src/components/ChatThread/widgets/SelectWidget.d.ts +14 -0
  134. package/dist/types/src/components/ChatThread/widgets/SelectWidget.d.ts.map +1 -0
  135. package/dist/types/src/components/ChatThread/widgets/StatsWidget.d.ts +12 -0
  136. package/dist/types/src/components/ChatThread/widgets/StatsWidget.d.ts.map +1 -0
  137. package/dist/types/src/components/ChatThread/widgets/SuggestionWidget.d.ts +11 -0
  138. package/dist/types/src/components/ChatThread/widgets/SuggestionWidget.d.ts.map +1 -0
  139. package/dist/types/src/components/ChatThread/widgets/SummaryWidget.d.ts +5 -0
  140. package/dist/types/src/components/ChatThread/widgets/SummaryWidget.d.ts.map +1 -0
  141. package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts +9 -0
  142. package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts.map +1 -0
  143. package/dist/types/src/components/ChatThread/widgets/index.d.ts +10 -0
  144. package/dist/types/src/components/ChatThread/widgets/index.d.ts.map +1 -0
  145. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts +14 -0
  146. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -0
  147. package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts +8 -0
  148. package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts.map +1 -0
  149. package/dist/types/src/components/ProcessTree/index.d.ts +2 -0
  150. package/dist/types/src/components/ProcessTree/index.d.ts.map +1 -0
  151. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +9 -4
  152. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  153. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +493 -290
  154. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  155. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +11 -1
  156. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  157. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +494 -291
  158. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  159. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +1 -1
  160. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +1 -10
  161. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -1
  162. package/dist/types/src/components/Toolbox/Toolbox.d.ts +17 -12
  163. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  164. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +493 -290
  165. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/Typewriter/AssistantToolbar.d.ts +12 -0
  167. package/dist/types/src/components/Typewriter/AssistantToolbar.d.ts.map +1 -0
  168. package/dist/types/src/components/Typewriter/Typewriter.d.ts +11 -0
  169. package/dist/types/src/components/Typewriter/Typewriter.d.ts.map +1 -0
  170. package/dist/types/src/components/Typewriter/Typewriter.stories.d.ts +7 -0
  171. package/dist/types/src/components/Typewriter/Typewriter.stories.d.ts.map +1 -0
  172. package/dist/types/src/components/Typewriter/assistant-extension.d.ts +5 -0
  173. package/dist/types/src/components/Typewriter/assistant-extension.d.ts.map +1 -0
  174. package/dist/types/src/components/Typewriter/index.d.ts +2 -0
  175. package/dist/types/src/components/Typewriter/index.d.ts.map +1 -0
  176. package/dist/types/src/components/index.d.ts +3 -6
  177. package/dist/types/src/components/index.d.ts.map +1 -1
  178. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts +6 -0
  179. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts.map +1 -0
  180. package/dist/types/src/containers/BlueprintArticle/index.d.ts +2 -0
  181. package/dist/types/src/containers/BlueprintArticle/index.d.ts.map +1 -0
  182. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts +18 -0
  183. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -0
  184. package/dist/types/src/containers/ChatCompanion/index.d.ts +2 -0
  185. package/dist/types/src/containers/ChatCompanion/index.d.ts.map +1 -0
  186. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts +12 -0
  187. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +1 -0
  188. package/dist/types/src/containers/ChatContainer/index.d.ts +2 -0
  189. package/dist/types/src/containers/ChatContainer/index.d.ts.map +1 -0
  190. package/dist/types/src/{components → containers/ChatDialog}/ChatDialog.d.ts +2 -3
  191. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -0
  192. package/dist/types/src/containers/ChatDialog/index.d.ts +2 -0
  193. package/dist/types/src/containers/ChatDialog/index.d.ts.map +1 -0
  194. package/dist/types/src/containers/ProjectArticle/ProjectArticle.d.ts +6 -0
  195. package/dist/types/src/containers/ProjectArticle/ProjectArticle.d.ts.map +1 -0
  196. package/dist/types/src/containers/ProjectArticle/index.d.ts +2 -0
  197. package/dist/types/src/containers/ProjectArticle/index.d.ts.map +1 -0
  198. package/dist/types/src/containers/ProjectSettings/ProjectSettings.d.ts +6 -0
  199. package/dist/types/src/containers/ProjectSettings/ProjectSettings.d.ts.map +1 -0
  200. package/dist/types/src/containers/ProjectSettings/index.d.ts +2 -0
  201. package/dist/types/src/containers/ProjectSettings/index.d.ts.map +1 -0
  202. package/dist/types/src/containers/PromptArticle/PromptArticle.d.ts +6 -0
  203. package/dist/types/src/containers/PromptArticle/PromptArticle.d.ts.map +1 -0
  204. package/dist/types/src/containers/PromptArticle/index.d.ts +2 -0
  205. package/dist/types/src/containers/PromptArticle/index.d.ts.map +1 -0
  206. package/dist/types/src/containers/PromptList/PromptList.d.ts +6 -0
  207. package/dist/types/src/containers/PromptList/PromptList.d.ts.map +1 -0
  208. package/dist/types/src/containers/PromptList/PromptList.stories.d.ts +523 -0
  209. package/dist/types/src/containers/PromptList/PromptList.stories.d.ts.map +1 -0
  210. package/dist/types/src/containers/PromptList/index.d.ts +2 -0
  211. package/dist/types/src/containers/PromptList/index.d.ts.map +1 -0
  212. package/dist/types/src/containers/TracePanel/TracePanel.d.ts +6 -0
  213. package/dist/types/src/containers/TracePanel/TracePanel.d.ts.map +1 -0
  214. package/dist/types/src/containers/TracePanel/dxn-extractor.d.ts +19 -0
  215. package/dist/types/src/containers/TracePanel/dxn-extractor.d.ts.map +1 -0
  216. package/dist/types/src/containers/TracePanel/dxn-extractor.test.d.ts +2 -0
  217. package/dist/types/src/containers/TracePanel/dxn-extractor.test.d.ts.map +1 -0
  218. package/dist/types/src/containers/TracePanel/index.d.ts +4 -0
  219. package/dist/types/src/containers/TracePanel/index.d.ts.map +1 -0
  220. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts +4 -0
  221. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -0
  222. package/dist/types/src/containers/TriggerStatus/index.d.ts +2 -0
  223. package/dist/types/src/containers/TriggerStatus/index.d.ts.map +1 -0
  224. package/dist/types/src/containers/index.d.ts +12 -0
  225. package/dist/types/src/containers/index.d.ts.map +1 -0
  226. package/dist/types/src/extensions/index.d.ts +2 -0
  227. package/dist/types/src/extensions/index.d.ts.map +1 -0
  228. package/dist/types/src/extensions/prompt-extension.d.ts +10 -0
  229. package/dist/types/src/extensions/prompt-extension.d.ts.map +1 -0
  230. package/dist/types/src/hooks/index.d.ts +1 -1
  231. package/dist/types/src/hooks/index.d.ts.map +1 -1
  232. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +5 -5
  233. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -1
  234. package/dist/types/src/hooks/useChatProcessor.d.ts +7 -6
  235. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  236. package/dist/types/src/hooks/useChatServices.d.ts +5 -8
  237. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
  238. package/dist/types/src/hooks/useChatToolbarActions.d.ts +3 -3
  239. package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -1
  240. package/dist/types/src/hooks/useContextBinder.d.ts +3 -2
  241. package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -1
  242. package/dist/types/src/hooks/useContextObjects.d.ts +7 -7
  243. package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -1
  244. package/dist/types/src/hooks/useFilteredTypes.d.ts +3 -0
  245. package/dist/types/src/hooks/useFilteredTypes.d.ts.map +1 -0
  246. package/dist/types/src/hooks/usePresets.d.ts +1 -1
  247. package/dist/types/src/hooks/usePresets.d.ts.map +1 -1
  248. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -1
  249. package/dist/types/src/index.d.ts +1 -2
  250. package/dist/types/src/index.d.ts.map +1 -1
  251. package/dist/types/src/meta.d.ts +4 -2
  252. package/dist/types/src/meta.d.ts.map +1 -1
  253. package/dist/types/src/operations/create-chat.d.ts +5 -0
  254. package/dist/types/src/operations/create-chat.d.ts.map +1 -0
  255. package/dist/types/src/operations/definitions.d.ts +135 -0
  256. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  257. package/dist/types/src/operations/ensure-companion-chat.d.ts +5 -0
  258. package/dist/types/src/operations/ensure-companion-chat.d.ts.map +1 -0
  259. package/dist/types/src/operations/index.d.ts +4 -0
  260. package/dist/types/src/operations/index.d.ts.map +1 -0
  261. package/dist/types/src/operations/on-create-space.d.ts +5 -0
  262. package/dist/types/src/operations/on-create-space.d.ts.map +1 -0
  263. package/dist/types/src/operations/resolve-navigation-targets.d.ts +15 -0
  264. package/dist/types/src/operations/resolve-navigation-targets.d.ts.map +1 -0
  265. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts +5 -0
  266. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts.map +1 -0
  267. package/dist/types/src/operations/set-current-chat.d.ts +5 -0
  268. package/dist/types/src/operations/set-current-chat.d.ts.map +1 -0
  269. package/dist/types/src/operations/update-chat-name.d.ts +5 -0
  270. package/dist/types/src/operations/update-chat-name.d.ts.map +1 -0
  271. package/dist/types/src/processor/index.d.ts +0 -1
  272. package/dist/types/src/processor/index.d.ts.map +1 -1
  273. package/dist/types/src/processor/processor.d.ts +34 -28
  274. package/dist/types/src/processor/processor.d.ts.map +1 -1
  275. package/dist/types/src/queue-logger.d.ts.map +1 -1
  276. package/dist/types/src/testing/test-generator.d.ts +3 -2
  277. package/dist/types/src/testing/test-generator.d.ts.map +1 -1
  278. package/dist/types/src/testing/test-services.d.ts +1 -1
  279. package/dist/types/src/testing/test-services.d.ts.map +1 -1
  280. package/dist/types/src/translations.d.ts +493 -290
  281. package/dist/types/src/translations.d.ts.map +1 -1
  282. package/dist/types/src/types/Assistant.d.ts +18 -46
  283. package/dist/types/src/types/Assistant.d.ts.map +1 -1
  284. package/dist/types/src/types/Settings.d.ts +10 -0
  285. package/dist/types/src/types/Settings.d.ts.map +1 -0
  286. package/dist/types/src/types/capabilities.d.ts +44 -0
  287. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  288. package/dist/types/src/types/events.d.ts +5 -0
  289. package/dist/types/src/types/events.d.ts.map +1 -0
  290. package/dist/types/src/types/index.d.ts +3 -1
  291. package/dist/types/src/types/index.d.ts.map +1 -1
  292. package/dist/types/src/types/service.d.ts +10 -218
  293. package/dist/types/src/types/service.d.ts.map +1 -1
  294. package/dist/types/tsconfig.tsbuildinfo +1 -1
  295. package/package.json +139 -93
  296. package/src/AssistantPlugin.tsx +182 -132
  297. package/src/blueprints/assistant/blueprint.conversations.json +1 -0
  298. package/src/blueprints/assistant/blueprint.test.ts +46 -0
  299. package/src/blueprints/assistant/blueprint.ts +31 -0
  300. package/src/blueprints/assistant/index.ts +5 -0
  301. package/src/blueprints/index.ts +5 -0
  302. package/src/capabilities/ai-service.ts +20 -17
  303. package/src/capabilities/app-graph-builder.ts +190 -183
  304. package/src/capabilities/blueprint-definition.ts +47 -55
  305. package/src/capabilities/companion-chat-provisioner.ts +164 -0
  306. package/src/capabilities/edge-model-resolver.ts +22 -14
  307. package/src/capabilities/index.ts +21 -14
  308. package/src/capabilities/local-model-resolver.ts +21 -13
  309. package/src/capabilities/markdown.ts +40 -0
  310. package/src/capabilities/migrations.ts +34 -0
  311. package/src/capabilities/operation-handler.ts +16 -0
  312. package/src/capabilities/react-surface.tsx +138 -68
  313. package/src/capabilities/settings.ts +24 -12
  314. package/src/capabilities/state.ts +26 -13
  315. package/src/capabilities/toolkit.ts +7 -11
  316. package/src/components/AssistantSettings/AssistantSettings.stories.tsx +34 -0
  317. package/src/components/AssistantSettings/AssistantSettings.tsx +105 -85
  318. package/src/components/AssistantSettings/index.ts +2 -2
  319. package/src/components/Chat/Chat.tsx +147 -104
  320. package/src/components/Chat/events.ts +1 -1
  321. package/src/components/ChatProgress/ChatProgress.tsx +11 -22
  322. package/src/components/ChatPrompt/ChatActions.tsx +26 -6
  323. package/src/components/ChatPrompt/ChatOptions.tsx +103 -79
  324. package/src/components/ChatPrompt/ChatReferences.tsx +21 -12
  325. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +1 -1
  326. package/src/components/ChatThread/ChatStream.stories.tsx +168 -0
  327. package/src/components/ChatThread/ChatThread.stories.tsx +30 -45
  328. package/src/components/ChatThread/ChatThread.tsx +29 -18
  329. package/src/components/ChatThread/Link.tsx +4 -4
  330. package/src/components/ChatThread/registry.tsx +74 -40
  331. package/src/components/ChatThread/sync.test.ts +19 -9
  332. package/src/components/ChatThread/sync.ts +27 -27
  333. package/src/components/ChatThread/testing/thread-1.md +17 -0
  334. package/src/components/ChatThread/widgets/FallbackWidget.tsx +24 -0
  335. package/src/components/ChatThread/widgets/PromptWidget.ts +28 -0
  336. package/src/components/ChatThread/widgets/ReasoningWidget.ts +120 -0
  337. package/src/components/ChatThread/widgets/ReferenceWidget.ts +31 -0
  338. package/src/components/ChatThread/widgets/SelectWidget.ts +37 -0
  339. package/src/components/ChatThread/widgets/StatsWidget.ts +29 -0
  340. package/src/components/ChatThread/widgets/SuggestionWidget.ts +41 -0
  341. package/src/components/ChatThread/widgets/SummaryWidget.tsx +28 -0
  342. package/src/components/ChatThread/widgets/ToolWidget.tsx +143 -0
  343. package/src/components/ChatThread/widgets/index.ts +13 -0
  344. package/src/components/ProcessTree/ProcessTree.stories.tsx +109 -0
  345. package/src/components/ProcessTree/ProcessTree.tsx +85 -0
  346. package/src/components/ProcessTree/index.ts +5 -0
  347. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +5 -10
  348. package/src/components/TemplateEditor/TemplateEditor.tsx +53 -42
  349. package/src/components/TemplateEditor/TemplateForm.stories.tsx +20 -11
  350. package/src/components/TemplateEditor/TemplateForm.tsx +83 -37
  351. package/src/components/TemplateEditor/extensions/handlebars-extension.ts +14 -9
  352. package/src/components/ToolBlock/ToolBlock.tsx +25 -24
  353. package/src/components/Toolbox/Toolbox.stories.tsx +11 -14
  354. package/src/components/Toolbox/Toolbox.tsx +72 -67
  355. package/src/components/Typewriter/AssistantToolbar.tsx +161 -0
  356. package/src/components/Typewriter/Typewriter.stories.tsx +86 -0
  357. package/src/components/Typewriter/Typewriter.tsx +50 -0
  358. package/src/components/Typewriter/assistant-extension.tsx +141 -0
  359. package/src/components/Typewriter/index.ts +5 -0
  360. package/src/components/index.ts +3 -7
  361. package/src/containers/BlueprintArticle/BlueprintArticle.tsx +29 -0
  362. package/src/containers/BlueprintArticle/index.ts +5 -0
  363. package/src/containers/ChatCompanion/ChatCompanion.tsx +142 -0
  364. package/src/containers/ChatCompanion/index.ts +5 -0
  365. package/src/containers/ChatContainer/ChatContainer.tsx +95 -0
  366. package/src/containers/ChatContainer/index.ts +5 -0
  367. package/src/{components → containers/ChatDialog}/ChatDialog.tsx +13 -16
  368. package/src/containers/ChatDialog/index.ts +5 -0
  369. package/src/containers/ProjectArticle/ProjectArticle.tsx +131 -0
  370. package/src/containers/ProjectArticle/index.ts +5 -0
  371. package/src/containers/ProjectSettings/ProjectSettings.tsx +139 -0
  372. package/src/containers/ProjectSettings/index.ts +5 -0
  373. package/src/containers/PromptArticle/PromptArticle.tsx +59 -0
  374. package/src/containers/PromptArticle/index.ts +5 -0
  375. package/src/containers/PromptList/PromptList.stories.tsx +129 -0
  376. package/src/containers/PromptList/PromptList.tsx +49 -0
  377. package/src/containers/PromptList/index.ts +5 -0
  378. package/src/containers/TracePanel/TracePanel.tsx +305 -0
  379. package/src/containers/TracePanel/dxn-extractor.test.ts +153 -0
  380. package/src/containers/TracePanel/dxn-extractor.ts +178 -0
  381. package/src/containers/TracePanel/index.ts +9 -0
  382. package/src/containers/TriggerStatus/TriggerStatus.tsx +144 -0
  383. package/src/containers/TriggerStatus/index.ts +5 -0
  384. package/src/containers/index.ts +16 -0
  385. package/src/extensions/index.ts +5 -0
  386. package/src/extensions/prompt-extension.ts +111 -0
  387. package/src/hooks/index.ts +1 -1
  388. package/src/hooks/useBlueprintRegistry.ts +36 -22
  389. package/src/hooks/useChatProcessor.ts +34 -18
  390. package/src/hooks/useChatServices.ts +9 -34
  391. package/src/hooks/useChatToolbarActions.ts +34 -34
  392. package/src/hooks/useContextBinder.ts +20 -7
  393. package/src/hooks/useContextObjects.ts +16 -24
  394. package/src/hooks/useFilteredTypes.ts +37 -0
  395. package/src/hooks/usePresets.ts +2 -1
  396. package/src/hooks/useReferencesProvider.ts +5 -9
  397. package/src/index.ts +1 -2
  398. package/src/meta.ts +7 -4
  399. package/src/operations/create-chat.ts +80 -0
  400. package/src/operations/definitions.ts +127 -0
  401. package/src/operations/ensure-companion-chat.ts +61 -0
  402. package/src/operations/index.ts +17 -0
  403. package/src/operations/on-create-space.ts +24 -0
  404. package/src/operations/resolve-navigation-targets.ts +26 -0
  405. package/src/operations/run-prompt-in-new-chat.ts +113 -0
  406. package/src/operations/set-current-chat.ts +50 -0
  407. package/src/operations/update-chat-name.ts +61 -0
  408. package/src/processor/index.ts +0 -1
  409. package/src/processor/processor.test.ts +20 -51
  410. package/src/processor/processor.ts +196 -137
  411. package/src/queue-logger.ts +4 -1
  412. package/src/testing/test-generator.ts +17 -16
  413. package/src/testing/test-sequence.ts +3 -3
  414. package/src/testing/test-services.ts +9 -7
  415. package/src/translations.ts +126 -79
  416. package/src/types/Assistant.ts +8 -57
  417. package/src/types/Settings.ts +21 -0
  418. package/src/types/capabilities.ts +35 -0
  419. package/src/types/events.ts +11 -0
  420. package/src/types/index.ts +5 -1
  421. package/src/types/service.ts +14 -11
  422. package/dist/lib/browser/BlueprintArticle-IMCR3642.mjs +0 -36
  423. package/dist/lib/browser/BlueprintArticle-IMCR3642.mjs.map +0 -7
  424. package/dist/lib/browser/ChatCompanion-JYD2RIBJ.mjs +0 -158
  425. package/dist/lib/browser/ChatCompanion-JYD2RIBJ.mjs.map +0 -7
  426. package/dist/lib/browser/ChatContainer-XCPBWYIR.mjs +0 -77
  427. package/dist/lib/browser/ChatContainer-XCPBWYIR.mjs.map +0 -7
  428. package/dist/lib/browser/ChatDialog-DT7KFCRL.mjs +0 -90
  429. package/dist/lib/browser/ChatDialog-DT7KFCRL.mjs.map +0 -7
  430. package/dist/lib/browser/PromptArticle-45QX25Y5.mjs +0 -59
  431. package/dist/lib/browser/PromptArticle-45QX25Y5.mjs.map +0 -7
  432. package/dist/lib/browser/ai-service-ERTZBTP3.mjs +0 -19
  433. package/dist/lib/browser/ai-service-ERTZBTP3.mjs.map +0 -7
  434. package/dist/lib/browser/app-graph-builder-VZEXMDTY.mjs +0 -199
  435. package/dist/lib/browser/app-graph-builder-VZEXMDTY.mjs.map +0 -7
  436. package/dist/lib/browser/blueprint-definition-5FT5JGPY.mjs +0 -12
  437. package/dist/lib/browser/chunk-2BOE3OTW.mjs +0 -262
  438. package/dist/lib/browser/chunk-2BOE3OTW.mjs.map +0 -7
  439. package/dist/lib/browser/chunk-BNTPFZ7O.mjs +0 -229
  440. package/dist/lib/browser/chunk-BNTPFZ7O.mjs.map +0 -7
  441. package/dist/lib/browser/chunk-FJQ4ZRYJ.mjs +0 -335
  442. package/dist/lib/browser/chunk-FJQ4ZRYJ.mjs.map +0 -7
  443. package/dist/lib/browser/chunk-IXIIS4QA.mjs +0 -176
  444. package/dist/lib/browser/chunk-IXIIS4QA.mjs.map +0 -7
  445. package/dist/lib/browser/chunk-LRE4VEZV.mjs +0 -16
  446. package/dist/lib/browser/chunk-LRE4VEZV.mjs.map +0 -7
  447. package/dist/lib/browser/chunk-U62BTGDF.mjs +0 -1929
  448. package/dist/lib/browser/chunk-U62BTGDF.mjs.map +0 -7
  449. package/dist/lib/browser/chunk-WBG5PTSX.mjs +0 -23
  450. package/dist/lib/browser/chunk-WBG5PTSX.mjs.map +0 -7
  451. package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs +0 -18
  452. package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs.map +0 -7
  453. package/dist/lib/browser/intent-resolver-AK5O4GUW.mjs +0 -143
  454. package/dist/lib/browser/intent-resolver-AK5O4GUW.mjs.map +0 -7
  455. package/dist/lib/browser/local-model-resolver-34MVHRKD.mjs +0 -17
  456. package/dist/lib/browser/local-model-resolver-34MVHRKD.mjs.map +0 -7
  457. package/dist/lib/browser/react-surface-YCSR2MSR.mjs +0 -98
  458. package/dist/lib/browser/react-surface-YCSR2MSR.mjs.map +0 -7
  459. package/dist/lib/browser/settings-NYJGNQ5I.mjs +0 -23
  460. package/dist/lib/browser/settings-NYJGNQ5I.mjs.map +0 -7
  461. package/dist/lib/browser/state-GG7Z3NB7.mjs +0 -25
  462. package/dist/lib/browser/state-GG7Z3NB7.mjs.map +0 -7
  463. package/dist/lib/browser/toolkit-VYDAWNE4.mjs +0 -17
  464. package/dist/lib/browser/toolkit-VYDAWNE4.mjs.map +0 -7
  465. package/dist/lib/node-esm/BlueprintArticle-OL2HUY6Q.mjs +0 -37
  466. package/dist/lib/node-esm/BlueprintArticle-OL2HUY6Q.mjs.map +0 -7
  467. package/dist/lib/node-esm/ChatCompanion-AHKJS25S.mjs +0 -159
  468. package/dist/lib/node-esm/ChatCompanion-AHKJS25S.mjs.map +0 -7
  469. package/dist/lib/node-esm/ChatContainer-K7OGPE3G.mjs +0 -78
  470. package/dist/lib/node-esm/ChatContainer-K7OGPE3G.mjs.map +0 -7
  471. package/dist/lib/node-esm/ChatDialog-QT6ZBX45.mjs +0 -91
  472. package/dist/lib/node-esm/ChatDialog-QT6ZBX45.mjs.map +0 -7
  473. package/dist/lib/node-esm/PromptArticle-OUKFSJQV.mjs +0 -60
  474. package/dist/lib/node-esm/PromptArticle-OUKFSJQV.mjs.map +0 -7
  475. package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs +0 -20
  476. package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs.map +0 -7
  477. package/dist/lib/node-esm/app-graph-builder-VRN6ESRR.mjs +0 -200
  478. package/dist/lib/node-esm/app-graph-builder-VRN6ESRR.mjs.map +0 -7
  479. package/dist/lib/node-esm/blueprint-definition-XW6QQVLV.mjs +0 -13
  480. package/dist/lib/node-esm/chunk-3Q22TTXW.mjs +0 -264
  481. package/dist/lib/node-esm/chunk-3Q22TTXW.mjs.map +0 -7
  482. package/dist/lib/node-esm/chunk-AB74FOA2.mjs +0 -230
  483. package/dist/lib/node-esm/chunk-AB74FOA2.mjs.map +0 -7
  484. package/dist/lib/node-esm/chunk-BHS747K7.mjs +0 -1930
  485. package/dist/lib/node-esm/chunk-BHS747K7.mjs.map +0 -7
  486. package/dist/lib/node-esm/chunk-KJGD4EBJ.mjs +0 -336
  487. package/dist/lib/node-esm/chunk-KJGD4EBJ.mjs.map +0 -7
  488. package/dist/lib/node-esm/chunk-UXTUHH24.mjs +0 -178
  489. package/dist/lib/node-esm/chunk-UXTUHH24.mjs.map +0 -7
  490. package/dist/lib/node-esm/chunk-WE6KTH72.mjs +0 -25
  491. package/dist/lib/node-esm/chunk-WE6KTH72.mjs.map +0 -7
  492. package/dist/lib/node-esm/chunk-YWFWT57N.mjs +0 -17
  493. package/dist/lib/node-esm/chunk-YWFWT57N.mjs.map +0 -7
  494. package/dist/lib/node-esm/edge-model-resolver-2ARXDOYS.mjs +0 -19
  495. package/dist/lib/node-esm/edge-model-resolver-2ARXDOYS.mjs.map +0 -7
  496. package/dist/lib/node-esm/intent-resolver-L2F3N45L.mjs +0 -144
  497. package/dist/lib/node-esm/intent-resolver-L2F3N45L.mjs.map +0 -7
  498. package/dist/lib/node-esm/local-model-resolver-TP2NTSAX.mjs +0 -18
  499. package/dist/lib/node-esm/local-model-resolver-TP2NTSAX.mjs.map +0 -7
  500. package/dist/lib/node-esm/react-surface-CTW44GEM.mjs +0 -99
  501. package/dist/lib/node-esm/react-surface-CTW44GEM.mjs.map +0 -7
  502. package/dist/lib/node-esm/settings-RRHYI5KO.mjs +0 -24
  503. package/dist/lib/node-esm/settings-RRHYI5KO.mjs.map +0 -7
  504. package/dist/lib/node-esm/state-FSUHFMDM.mjs +0 -26
  505. package/dist/lib/node-esm/state-FSUHFMDM.mjs.map +0 -7
  506. package/dist/lib/node-esm/toolkit-HFJZLVIR.mjs +0 -18
  507. package/dist/lib/node-esm/toolkit-HFJZLVIR.mjs.map +0 -7
  508. package/dist/types/src/capabilities/capabilities.d.ts +0 -10
  509. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  510. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  511. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  512. package/dist/types/src/components/BlueprintArticle.d.ts +0 -7
  513. package/dist/types/src/components/BlueprintArticle.d.ts.map +0 -1
  514. package/dist/types/src/components/ChatCompanion.d.ts +0 -13
  515. package/dist/types/src/components/ChatCompanion.d.ts.map +0 -1
  516. package/dist/types/src/components/ChatContainer.d.ts +0 -14
  517. package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
  518. package/dist/types/src/components/ChatDialog.d.ts.map +0 -1
  519. package/dist/types/src/components/ChatThread/reducers.d.ts +0 -40
  520. package/dist/types/src/components/ChatThread/reducers.d.ts.map +0 -1
  521. package/dist/types/src/components/PromptArticle.d.ts +0 -7
  522. package/dist/types/src/components/PromptArticle.d.ts.map +0 -1
  523. package/dist/types/src/events.d.ts +0 -4
  524. package/dist/types/src/events.d.ts.map +0 -1
  525. package/dist/types/src/functions/analysis.d.ts +0 -5
  526. package/dist/types/src/functions/analysis.d.ts.map +0 -1
  527. package/dist/types/src/functions/index.d.ts +0 -4
  528. package/dist/types/src/functions/index.d.ts.map +0 -1
  529. package/dist/types/src/functions/object-list.d.ts +0 -10
  530. package/dist/types/src/functions/object-list.d.ts.map +0 -1
  531. package/dist/types/src/functions/object-load.d.ts +0 -8
  532. package/dist/types/src/functions/object-load.d.ts.map +0 -1
  533. package/dist/types/src/hooks/useItemTypes.d.ts +0 -4
  534. package/dist/types/src/hooks/useItemTypes.d.ts.map +0 -1
  535. package/dist/types/src/processor/update-name.d.ts +0 -10
  536. package/dist/types/src/processor/update-name.d.ts.map +0 -1
  537. package/dist/types/src/types/AssistantAction.d.ts +0 -132
  538. package/dist/types/src/types/AssistantAction.d.ts.map +0 -1
  539. package/src/capabilities/capabilities.ts +0 -17
  540. package/src/capabilities/intent-resolver.ts +0 -147
  541. package/src/components/BlueprintArticle.tsx +0 -29
  542. package/src/components/ChatCompanion.tsx +0 -155
  543. package/src/components/ChatContainer.tsx +0 -61
  544. package/src/components/ChatThread/reducers.ts +0 -151
  545. package/src/components/PromptArticle.tsx +0 -51
  546. package/src/events.ts +0 -11
  547. package/src/functions/analysis.ts +0 -22
  548. package/src/functions/index.ts +0 -7
  549. package/src/functions/object-list.ts +0 -48
  550. package/src/functions/object-load.ts +0 -45
  551. package/src/hooks/useItemTypes.ts +0 -37
  552. package/src/processor/update-name.ts +0 -56
  553. package/src/types/AssistantAction.ts +0 -79
  554. /package/dist/lib/browser/{blueprint-definition-5FT5JGPY.mjs.map → blueprints/index.mjs.map} +0 -0
  555. /package/dist/lib/node-esm/{blueprint-definition-XW6QQVLV.mjs.map → blueprints/index.mjs.map} +0 -0
  556. /package/src/components/ChatThread/testing/{thread.md → thread-2.md} +0 -0
@@ -2,70 +2,39 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import * as Tool from '@effect/ai/Tool';
6
- import * as Toolkit from '@effect/ai/Toolkit';
7
5
  import { describe, it } from '@effect/vitest';
8
6
  import * as Effect from 'effect/Effect';
9
- import * as Layer from 'effect/Layer';
10
- import * as Schema from 'effect/Schema';
7
+ import * as ManagedRuntime from 'effect/ManagedRuntime';
11
8
 
12
- import { AiService } from '@dxos/ai';
13
- import { AiServiceTestingPreset } from '@dxos/ai/testing';
14
- import { AiConversation, makeToolExecutionServiceFromFunctions, makeToolResolverFromFunctions } from '@dxos/assistant';
15
- import { TestHelpers, acquireReleaseResource } from '@dxos/effect';
16
- import { CredentialsService, QueueService, TracingService } from '@dxos/functions';
17
- import { FunctionInvocationServiceLayerTestMocked, TestDatabaseLayer } from '@dxos/functions-runtime/testing';
18
- import { type Message } from '@dxos/types';
9
+ import { AiConversation } from '@dxos/assistant';
10
+ import { Chat } from '@dxos/assistant-toolkit';
11
+ import { AssistantTestLayer } from '@dxos/assistant/testing';
12
+ import { Database, Feed } from '@dxos/echo';
13
+ import { acquireReleaseResource } from '@dxos/effect';
14
+ import { TestHelpers } from '@dxos/effect/testing';
19
15
 
20
- import { AiChatProcessor, type AiChatServices } from './processor';
16
+ import { AiChatProcessor } from './processor';
21
17
 
22
- const TestToolkit = Toolkit.make(
23
- Tool.make('random', {
24
- description: 'Random number generator',
25
- parameters: {},
26
- success: Schema.Number,
27
- }),
28
- );
18
+ const TestLayer = AssistantTestLayer({ tracing: 'noop', types: [Chat.Chat, Feed.Feed] });
29
19
 
30
- // TODO(burdon): Create minimal toolkit.
31
- const toolkit = Toolkit.merge(TestToolkit) as Toolkit.Toolkit<any>;
32
-
33
- // TODO(burdon): Explain structure.
34
- const TestServicesLayer = Layer.mergeAll(
35
- TracingService.layerNoop,
36
- AiServiceTestingPreset('direct'),
37
- TestDatabaseLayer({
38
- // indexing: { vector: true },
39
- // types: [],
40
- }),
41
- // CredentialsService.configuredLayer([{ service: 'exa.ai', apiKey: EXA_API_KEY }]),
42
- FunctionInvocationServiceLayerTestMocked({ functions: [] }).pipe(Layer.provideMerge(TracingService.layerNoop)),
43
- );
44
-
45
- const TestLayer: Layer.Layer<AiChatServices, never, never> = Layer.mergeAll(
46
- AiService.model('@anthropic/claude-opus-4-0'),
47
- makeToolResolverFromFunctions([], toolkit),
48
- makeToolExecutionServiceFromFunctions(toolkit, toolkit.toLayer({}) as any),
49
- CredentialsService.layerFromDatabase(),
50
- ).pipe(Layer.provideMerge(TestServicesLayer), Layer.orDie);
51
-
52
- // TODO(burdon): Create actual test with mock LLM.
53
20
  describe('Chat processor', () => {
54
21
  it.scoped(
55
22
  'basic',
56
23
  Effect.fn(
57
24
  function* ({ expect }) {
58
- const services = yield* Effect.runtime<AiChatServices>();
59
- const queue = yield* QueueService.createQueue<Message.Message>();
60
- const conversation = yield* acquireReleaseResource(() => new AiConversation(queue));
61
- const processor = new AiChatProcessor(conversation, async () => services);
62
- const result = yield* Effect.promise(() => processor.request({ message: 'Hello' }));
63
- void processor.cancel();
64
- expect(processor.active).to.be.false;
65
- expect(result).to.exist;
25
+ const feed = Feed.make();
26
+ yield* Database.add(feed);
27
+ const runtime = yield* Effect.runtime<Feed.FeedService>();
28
+ const conversation = yield* acquireReleaseResource(() => new AiConversation({ 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(conversation, managedRuntime as any, feed);
33
+ expect(processor).toBeDefined();
34
+ expect(processor.active).toBeDefined();
66
35
  },
67
36
  Effect.provide(TestLayer),
68
- TestHelpers.taggedTest('llm'),
37
+ TestHelpers.provideTestContext,
69
38
  ),
70
39
  );
71
40
  });
@@ -3,15 +3,13 @@
3
3
  //
4
4
 
5
5
  import { Atom, Registry } from '@effect-atom/atom-react';
6
- import * as Cause from 'effect/Cause';
7
6
  import * as Effect from 'effect/Effect';
8
- import * as Exit from 'effect/Exit';
9
7
  import * as Fiber from 'effect/Fiber';
10
8
  import * as Option from 'effect/Option';
11
- import * as Runtime from 'effect/Runtime';
9
+ import * as Stream from 'effect/Stream';
12
10
 
13
11
  import {
14
- AiService,
12
+ type AiService,
15
13
  DEFAULT_EDGE_MODEL,
16
14
  type ModelName,
17
15
  type ModelRegistry,
@@ -19,52 +17,69 @@ import {
19
17
  type ToolResolverService,
20
18
  } from '@dxos/ai';
21
19
  import {
20
+ AiContextService,
22
21
  type AiConversation,
23
- type AiConversationRunParams,
24
- ArtifactDiffResolver,
25
- GenerationObserver,
26
22
  createSystemPrompt,
23
+ formatSystemPrompt,
24
+ AgentService,
25
+ PartialBlock,
27
26
  } from '@dxos/assistant';
27
+ import { type Chat } from '@dxos/assistant-toolkit';
28
28
  import { type Blueprint } from '@dxos/blueprints';
29
- import { Obj } from '@dxos/echo';
30
- import { throwCause } from '@dxos/effect';
29
+ import { type Database, Feed, Obj, Ref } from '@dxos/echo';
30
+ import { runAndForwardErrors, unwrapExit } from '@dxos/effect';
31
31
  import {
32
+ Trace,
32
33
  type CredentialsService,
33
- type DatabaseService,
34
34
  type FunctionInvocationService,
35
35
  type QueueService,
36
36
  type TracingService,
37
37
  } from '@dxos/functions';
38
38
  import { log } from '@dxos/log';
39
- import { type ContentBlock, Message } from '@dxos/types';
39
+ import { Operation } from '@dxos/operation';
40
+ import type { AutomationCapabilities } from '@dxos/plugin-automation/types';
41
+ import { Message } from '@dxos/types';
40
42
 
41
- import { type Assistant } from '../types';
42
-
43
- import { updateName } from './update-name';
43
+ import { UpdateChatName } from '../operations/definitions';
44
44
 
45
+ /**
46
+ * @deprecated Services type for the old direct-conversation processor path.
47
+ * Retained for backward compatibility with CLI and update-name.
48
+ */
45
49
  export type AiChatServices =
46
50
  | CredentialsService
47
- | DatabaseService
51
+ | Database.Service
48
52
  | QueueService
49
53
  | FunctionInvocationService
50
54
  | AiService.AiService
51
55
  | ToolExecutionService
52
56
  | ToolResolverService
53
- | TracingService;
57
+ | TracingService
58
+ | Trace.TraceService;
54
59
 
55
60
  export type AiChatProcessorOptions = {
56
61
  model?: ModelName;
57
62
  modelRegistry?: ModelRegistry;
58
63
  blueprintRegistry?: Blueprint.Registry;
59
64
  observableRegistry?: Registry.Registry;
60
- extensions?: ToolContextExtensions;
61
- } & Pick<AiConversationRunParams, 'system'>;
65
+ /**
66
+ * For tracing.
67
+ */
68
+ chat?: Ref.Ref<Chat.Chat>;
69
+ system?: string;
70
+ /**
71
+ * Probability of automatically updating chat name after each request.
72
+ * Chat name is always updated if it has no name.
73
+ * @default 0.1 (10%)
74
+ */
75
+ autoUpdateNameChance?: number;
76
+ };
62
77
 
63
78
  const defaultOptions: Partial<AiChatProcessorOptions> = {
64
79
  model: DEFAULT_EDGE_MODEL,
80
+ autoUpdateNameChance: 0.1,
65
81
  };
66
82
 
67
- // TODO(burdon): Retry, timeout?
68
83
  export type AiRequestOptions = {};
69
84
 
70
85
  export type AiRequest = {
@@ -74,55 +89,45 @@ export type AiRequest = {
74
89
 
75
90
  /**
76
91
  * Handles interactions with the AI service.
77
- * Handles streaming responses from the conversation.
92
+ * Uses AgentService to spawn a process-backed agent and subscribes to ephemeral trace events for streaming.
78
93
  */
79
94
  export class AiChatProcessor {
80
- private readonly _registry: Registry.Registry;
95
+ readonly #registry: Registry.Registry;
81
96
 
82
- /** External observer. */
83
- private readonly _observer: GenerationObserver;
97
+ /** Pending messages (finalized, non-streaming). */
98
+ readonly #pending = Atom.make<Message.Message[]>([]);
84
99
 
85
- /** Currently active request fiber. */
86
- private _fiber: Fiber.Fiber<void, any> | undefined;
100
+ /** Currently streaming messages (from ephemeral trace events). */
101
+ readonly #streaming = Atom.make<Message.Message[]>([]);
87
102
 
88
- /** Last request (for retries). */
89
- private _lastRequest: AiRequest | undefined;
103
+ /** Set of message IDs that have been finalized (non-pending delivered via ephemeral). */
104
+ readonly #finalizedIds = new Set<string>();
90
105
 
91
- /** Pending messages (incl. the current user request). */
92
- private readonly _pending = Atom.make<Message.Message[]>([]);
106
+ /** Currently active request fiber. */
107
+ #requestFiber: Fiber.RuntimeFiber<void, unknown> | undefined;
93
108
 
94
- /** Currently streaming message (from the AI service). */
95
- private readonly _streaming = Atom.make<Option.Option<Message.Message>>(Option.none());
109
+ /** Last request (for retries). */
110
+ #lastRequest: AiRequest | undefined;
96
111
 
97
112
  /** Streaming state. */
98
- public readonly streaming = Atom.make<boolean>((get) => Option.isSome(get(this._streaming)));
113
+ public readonly streaming = Atom.make<boolean>((get) => get(this.#streaming).length > 0);
99
114
 
100
115
  /** Active state. */
101
116
  public readonly active = Atom.make(false);
102
117
 
103
118
  /** Array of Messages (incl. the current message being streamed). */
104
- public readonly messages = Atom.make<Message.Message[]>((get) =>
105
- Option.match(get(this._streaming), {
106
- onNone: () => get(this._pending),
107
- onSome: (streaming) => [...get(this._pending), streaming],
108
- }),
109
- );
119
+ public readonly messages = Atom.make<Message.Message[]>((get) => [...get(this.#pending), ...get(this.#streaming)]);
110
120
 
111
121
  /** Last error. */
112
122
  public readonly error = Atom.make<Option.Option<Error>>(Option.none());
113
123
 
114
124
  constructor(
115
125
  private readonly _conversation: AiConversation,
116
- // TODO(dmaretskyi): Replace this with effect's ManagedRuntime wrapping this layer.
117
- private readonly _services: () => Promise<Runtime.Runtime<AiChatServices>>,
126
+ private readonly _runtime: AutomationCapabilities.ComputeRuntime,
127
+ private readonly _feed: Feed.Feed,
118
128
  private readonly _options: AiChatProcessorOptions = defaultOptions,
119
129
  ) {
120
- // Initialize registries and defaults before using in other logic.
121
- this._registry = this._options.observableRegistry ?? Registry.make();
122
- this._observer = GenerationObserver.make({
123
- onBlock: this._onBlock,
124
- onMessage: this._onMessage,
125
- });
130
+ this.#registry = this._options.observableRegistry ?? Registry.make();
126
131
  if (this._options.model && !this._options.system) {
127
132
  const capabilities = this._options.modelRegistry?.getCapabilities(this._options.model) ?? {};
128
133
  this._options.system = createSystemPrompt(capabilities);
@@ -141,54 +146,86 @@ export class AiChatProcessor {
141
146
  return this._options.blueprintRegistry;
142
147
  }
143
148
 
149
+ get system(): string {
150
+ return this._options.system ?? '';
151
+ }
152
+
153
+ async getTools(): Promise<Record<string, any>> {
154
+ return this._runtime.runPromise(this._conversation.getTools());
155
+ }
156
+
157
+ async getSystemPrompt(): Promise<string> {
158
+ return this._runtime.runPromise(
159
+ Effect.gen(this, function* () {
160
+ const blueprints = this.context.getBlueprints();
161
+ const objects = this.context.getObjects();
162
+ return yield* formatSystemPrompt({ system: this._options.system, blueprints, objects });
163
+ }).pipe(Effect.provideService(AiContextService, { binder: this.context }), Effect.orDie),
164
+ );
165
+ }
166
+
144
167
  /**
145
- * Initiates a new request.
168
+ * Initiates a new request via AgentService.
146
169
  */
147
- async request(requestParam: AiRequest): Promise<void> {
148
- if (this._fiber) {
170
+ async request(requestProp: AiRequest): Promise<void> {
171
+ if (this.#requestFiber) {
149
172
  await this.cancel();
150
173
  }
151
174
 
152
175
  try {
153
- this._lastRequest = requestParam;
154
- this._registry.set(this.error, Option.none());
155
- this._registry.set(this.active, true);
156
-
157
- // Create request.
158
- const request = this._conversation.createRequest({
159
- system: this._options.system,
160
- prompt: requestParam.message,
161
- observer: this._observer,
162
- });
176
+ this.#lastRequest = requestProp;
177
+ this.#registry.set(this.error, Option.none());
178
+ this.#registry.set(this.active, true);
179
+
180
+ const effect = Effect.gen(this, function* () {
181
+ // NOTE: Gets or creates a session for the feed.
182
+ const session = yield* AgentService.getSession(this._feed);
183
+ const ephemeralStream = session.subscribeEphemeral();
184
+ yield* ephemeralStream.pipe(
185
+ Stream.runForEach((message) =>
186
+ Effect.sync(() => {
187
+ for (const event of message.events) {
188
+ if (Trace.isOfType(PartialBlock, event)) {
189
+ this.#handleEphemeralMessage(event.data);
190
+ }
191
+ }
192
+ }),
193
+ ),
194
+ Effect.fork,
195
+ );
163
196
 
164
- const runtime = await this._services();
197
+ log('chat processor submitting prompt', { length: requestProp.message.length });
198
+ yield* session.submitPrompt(requestProp.message);
199
+ log('chat processor submitPrompt returned, waiting for agent', {});
200
+ yield* session.waitForCompletion();
201
+ log.info('session complete');
165
202
 
166
- // Create fiber.
167
- this._fiber = request.pipe(
168
- Effect.provide(AiService.model(this._options.model ?? DEFAULT_EDGE_MODEL)),
203
+ this.#flushStreaming();
169
204
 
170
- // TODO(dmaretskyi): Move ArtifactDiffResolver upstream.
171
- Effect.provideService(ArtifactDiffResolver, this._artifactDiffResolver),
205
+ yield* this.#maybeUpdateChatName();
206
+ });
172
207
 
173
- Effect.asVoid,
174
- Runtime.runFork(runtime), // Runs in the background.
175
- );
208
+ this.#requestFiber = this._runtime.runFork(effect);
176
209
 
177
- // Execute request.
178
- const response = await this._fiber.pipe(Fiber.join, Effect.runPromiseExit);
179
- if (!Exit.isSuccess(response) && !Cause.isInterruptedOnly(response.cause)) {
180
- throwCause(response.cause);
210
+ try {
211
+ await this._runtime.runPromise(Fiber.join(this.#requestFiber));
212
+ } catch (err: any) {
213
+ if (err._tag === 'InterruptedException' || err.message?.includes('interrupted')) {
214
+ return;
215
+ }
216
+ throw err;
181
217
  }
182
218
 
183
- this._registry.set(this.error, Option.none());
184
- this._lastRequest = undefined;
185
- this._fiber = undefined;
186
- } catch (error) {
187
- log.error('request failed', { error });
188
- this._registry.set(this.error, Option.some(new Error('AI service error', { cause: error })));
219
+ this.#registry.set(this.error, Option.none());
220
+ this.#lastRequest = undefined;
221
+ this.#requestFiber = undefined;
222
+ } catch (err) {
223
+ log.error('request failed', { error: err });
224
+ this.#registry.set(this.error, Option.some(new Error('AI service error', { cause: err })));
189
225
  } finally {
190
- this._fiber = undefined;
191
- this._registry.set(this.active, false);
226
+ log.info('setting active to false');
227
+ this.#registry.set(this.active, false);
228
+ this.#requestFiber = undefined;
192
229
  }
193
230
  }
194
231
 
@@ -196,82 +233,104 @@ export class AiChatProcessor {
196
233
  * Cancels the current request.
197
234
  */
198
235
  async cancel(): Promise<void> {
199
- await Effect.runPromise(
236
+ await runAndForwardErrors(
200
237
  Effect.gen(this, function* () {
201
- if (this._fiber) {
202
- yield* this._fiber.pipe(Fiber.interrupt);
238
+ if (this.#requestFiber) {
239
+ yield* Fiber.interrupt(this.#requestFiber);
203
240
  }
204
241
  }),
205
242
  );
206
243
 
207
- this._fiber = undefined;
208
- this._registry.set(this.active, false);
244
+ this.#requestFiber = undefined;
245
+ this.#registry.set(this.active, false);
209
246
  }
210
247
 
211
248
  /**
212
249
  * Retry last failed request.
213
250
  */
214
251
  async retry(): Promise<void> {
215
- if (this._lastRequest) {
216
- return this.request(this._lastRequest);
252
+ if (this.#lastRequest) {
253
+ return this.request(this.#lastRequest);
217
254
  }
218
255
  }
219
256
 
220
257
  /**
221
258
  * Update the current chat's name.
222
259
  */
223
- async updateName(chat: Assistant.Chat): Promise<void> {
224
- const runtime = await this._services();
225
- await updateName(runtime, this._conversation, chat, this._options.model);
260
+ async updateName(chat: Chat.Chat): Promise<void> {
261
+ unwrapExit(await this._runtime.runPromiseExit(Operation.invoke(UpdateChatName, { chat })));
226
262
  }
227
263
 
228
- // TODO(burdon): Fix/factor out.
229
- private _artifactDiffResolver: ArtifactDiffResolver.Service = {
230
- resolve: async (_artifacts) => {
231
- const versions = new Map();
232
- // await Promise.all(
233
- // artifacts.map(async (artifact) => {
234
- // const {
235
- // objects: [object],
236
- // } = await space.db.query(Filter.ids(artifact.id)).run();
237
- // if (!object) {
238
- // return;
239
- // }
240
-
241
- // versions.set(artifact.id, {
242
- // version: getVersion(object),
243
- // diff: `Current state: ${JSON.stringify(object)}`,
244
- // });
245
- // }),
246
- // );
247
-
248
- return versions;
249
- },
250
- };
251
-
252
- private _onMessage = Effect.fn(
253
- function* (this: AiChatProcessor, message: Message.Message) {
254
- this._registry.set(this._streaming, Option.none());
255
- this._registry.update(this._pending, (pending) => [...pending, message]);
256
- }.bind(this),
257
- );
258
-
259
- private _onBlock = Effect.fn(
260
- function* (this: AiChatProcessor, block: ContentBlock.Any) {
261
- this._registry.update(this._streaming, (streaming) => {
262
- const blocks = streaming.pipe(
263
- Option.map((streaming) => streaming.blocks.filter((b: ContentBlock.Any) => !b.pending)),
264
- Option.getOrElse(() => []),
265
- );
264
+ /**
265
+ * Handles an ephemeral message from the agent process.
266
+ * Both pending and completed blocks arrive here. Completed blocks are deduped
267
+ * against messages already written to the feed queue to handle the race between
268
+ * ephemeral delivery and feed replication.
269
+ */
270
+ #handleEphemeralMessage(event: Trace.PayloadType<typeof PartialBlock>) {
271
+ const isPending = event.block.pending;
272
+ const message = Obj.make(Message.Message, {
273
+ id: event.messageId,
274
+ created: new Date().toISOString(),
275
+ sender: { role: event.role },
276
+ blocks: [event.block],
277
+ });
266
278
 
267
- return Option.some(
268
- Obj.make(Message.Message, {
269
- created: new Date().toISOString(),
270
- sender: { role: 'assistant' },
271
- blocks: [...blocks, block],
272
- }),
273
- );
279
+ if (isPending) {
280
+ if (this.#finalizedIds.has(event.messageId)) {
281
+ return;
282
+ }
283
+ this.#registry.update(this.#streaming, (streaming) => {
284
+ const idx = streaming.findIndex((existing) => existing.id === event.messageId);
285
+ if (idx >= 0) {
286
+ const updated = [...streaming];
287
+ updated[idx] = message;
288
+ return updated;
289
+ }
290
+ return [...streaming, message];
291
+ });
292
+ } else {
293
+ this.#finalizedIds.add(event.messageId);
294
+ this.#registry.update(this.#streaming, (streaming) => streaming.filter((existing) => existing.id !== message.id));
295
+ this.#registry.update(this.#pending, (pending) => {
296
+ if (pending.some((existing) => existing.id === message.id)) {
297
+ return pending;
298
+ }
299
+ return [...pending, message];
274
300
  });
275
- }.bind(this),
276
- );
301
+ }
302
+ }
303
+
304
+ /**
305
+ * Move remaining streaming messages to pending (called when agent completes).
306
+ */
307
+ #flushStreaming() {
308
+ const remaining = this.#registry.get(this.#streaming);
309
+ if (remaining.length > 0) {
310
+ this.#registry.update(this.#pending, (pending) => [...pending, ...remaining]);
311
+ this.#registry.set(this.#streaming, []);
312
+ }
313
+ this.#finalizedIds.clear();
314
+ }
315
+
316
+ /**
317
+ * Conditionally schedule chat name update in detached fork mode.
318
+ * Updates if chat has no name OR based on random chance (default 10%).
319
+ */
320
+ #maybeUpdateChatName(): Effect.Effect<void, never, Operation.Service> {
321
+ const chat = this._options.chat?.target;
322
+ if (!chat) {
323
+ return Effect.void;
324
+ }
325
+
326
+ const chance = this._options.autoUpdateNameChance ?? defaultOptions.autoUpdateNameChance ?? 0.1;
327
+ const shouldUpdate = !chat.name || Math.random() < chance;
328
+ if (!shouldUpdate) {
329
+ return Effect.void;
330
+ }
331
+
332
+ // TODO(dmaretskyi): Operation.schedule didn't work.
333
+ log.info('scheduling chat name update', { hasName: !!chat.name, chance });
334
+ return Operation.schedule(UpdateChatName, { chat });
335
+ }
277
336
  }
@@ -23,7 +23,10 @@ export class QueueLogger implements SequenceLogger {
23
23
  let dxn = this._space.properties.invocationTraceQueue?.dxn;
24
24
  if (!dxn) {
25
25
  dxn = DXN.fromQueue(QueueSubspaceTags.TRACE, this._space.id, Key.ObjectId.random());
26
- this._space.properties.invocationTraceQueue = Ref.fromDXN(dxn);
26
+ const newDxn = dxn;
27
+ Obj.change(this._space.properties, (obj) => {
28
+ obj.invocationTraceQueue = Ref.fromDXN(newDxn);
29
+ });
27
30
  }
28
31
  this._invocationTraceQueue = this._space.queues.get(dxn);
29
32
  }