@dxos/plugin-assistant 0.9.1-main.c7dcc2e112 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. package/PLUGIN.mdl +18 -24
  2. package/dist/lib/neutral/{AgentArticle-2BEPWUMN.mjs → AgentArticle-GV6EEW3I.mjs} +1 -2
  3. package/dist/lib/neutral/AgentArticle-GV6EEW3I.mjs.map +7 -0
  4. package/dist/lib/neutral/AssistantPlugin.mjs +1 -1
  5. package/dist/lib/neutral/AssistantPlugin.node.mjs +6 -6
  6. package/dist/lib/neutral/AssistantPlugin.node.mjs.map +3 -3
  7. package/dist/lib/neutral/AssistantPlugin.workerd.mjs +7 -34
  8. package/dist/lib/neutral/AssistantPlugin.workerd.mjs.map +4 -4
  9. package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs +302 -0
  10. package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs.map +7 -0
  11. package/dist/lib/neutral/{ChatArticle-KT46SUFU.mjs → ChatArticle-OO7GGEFW.mjs} +2 -2
  12. package/dist/lib/neutral/{ChatCompanion-YHC43RYQ.mjs → ChatCompanion-GIFJRY6I.mjs} +27 -27
  13. package/dist/lib/neutral/ChatCompanion-GIFJRY6I.mjs.map +7 -0
  14. package/dist/lib/neutral/{ChatDialog-YZDZLIQA.mjs → ChatDialog-5MXN4MXS.mjs} +5 -5
  15. package/dist/lib/neutral/ChatDialog-5MXN4MXS.mjs.map +7 -0
  16. package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs +72 -0
  17. package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs.map +7 -0
  18. package/dist/lib/neutral/{SpaceHomePrompt-HTWQKLGI.mjs → SpaceHomePrompt-ISAB76LD.mjs} +8 -7
  19. package/dist/lib/neutral/SpaceHomePrompt-ISAB76LD.mjs.map +7 -0
  20. package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs +63 -0
  21. package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs.map +7 -0
  22. package/dist/lib/neutral/{TracePanel-T552TAOH.mjs → TracePanel-JKNWADJ4.mjs} +2 -2
  23. package/dist/lib/neutral/{TriggerStatus-RBOHHDOK.mjs → TriggerStatus-FURRBHYA.mjs} +7 -5
  24. package/dist/lib/neutral/TriggerStatus-FURRBHYA.mjs.map +7 -0
  25. package/dist/lib/neutral/{agent-hydrator-PJBYVMBW.mjs → agent-hydrator-OBO3RHLO.mjs} +3 -4
  26. package/dist/lib/neutral/agent-hydrator-OBO3RHLO.mjs.map +7 -0
  27. package/dist/lib/neutral/{agent-service-WV5CSHAG.mjs → agent-service-XFJ4VQMT.mjs} +7 -9
  28. package/dist/lib/neutral/agent-service-XFJ4VQMT.mjs.map +7 -0
  29. package/dist/lib/neutral/ai-context-LIKJYMIN.mjs +14 -0
  30. package/dist/lib/neutral/ai-context-LIKJYMIN.mjs.map +7 -0
  31. package/dist/lib/neutral/{ai-service-AADUIKBY.mjs → ai-service-DM6YXWUC.mjs} +9 -5
  32. package/dist/lib/neutral/ai-service-DM6YXWUC.mjs.map +7 -0
  33. package/dist/lib/neutral/{app-graph-builder-PTSRZXRN.mjs → app-graph-builder-OPVOEQY7.mjs} +36 -19
  34. package/dist/lib/neutral/app-graph-builder-OPVOEQY7.mjs.map +7 -0
  35. package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs +97 -0
  36. package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs.map +7 -0
  37. package/dist/lib/neutral/capabilities/index.mjs +20 -18
  38. package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
  39. package/dist/lib/neutral/{chunk-KLYLW4WH.mjs → chunk-5IHQ52KJ.mjs} +1 -1
  40. package/dist/lib/neutral/chunk-5IHQ52KJ.mjs.map +7 -0
  41. package/dist/lib/neutral/{chunk-5KB2WRI2.mjs → chunk-6Q4OBGIK.mjs} +83 -55
  42. package/dist/lib/neutral/chunk-6Q4OBGIK.mjs.map +7 -0
  43. package/dist/lib/neutral/{chunk-54W7N6M6.mjs → chunk-BXI2R4OO.mjs} +49 -84
  44. package/dist/lib/neutral/chunk-BXI2R4OO.mjs.map +7 -0
  45. package/dist/lib/neutral/{chunk-5H6UJHLF.mjs → chunk-CMPLPDYE.mjs} +12 -12
  46. package/dist/lib/neutral/chunk-CMPLPDYE.mjs.map +7 -0
  47. package/dist/lib/neutral/chunk-GPHT3HYS.mjs +8 -0
  48. package/dist/lib/neutral/{chunk-7FQT4XMI.mjs.map → chunk-GPHT3HYS.mjs.map} +2 -2
  49. package/dist/lib/neutral/{markdown-extension-IJ5RQMQ4.mjs → chunk-HKLSFB5I.mjs} +2 -38
  50. package/dist/lib/neutral/chunk-HKLSFB5I.mjs.map +7 -0
  51. package/dist/lib/neutral/{chunk-ZNDQVYUN.mjs → chunk-L7AR4VTA.mjs} +3 -3
  52. package/dist/lib/neutral/{chunk-ZNDQVYUN.mjs.map → chunk-L7AR4VTA.mjs.map} +1 -1
  53. package/dist/lib/neutral/chunk-LS72HWMM.mjs +42 -0
  54. package/dist/lib/neutral/chunk-LS72HWMM.mjs.map +7 -0
  55. package/dist/lib/neutral/{chunk-35EL65O4.mjs → chunk-OZWZGIV2.mjs} +4 -2
  56. package/dist/lib/neutral/{chunk-35EL65O4.mjs.map → chunk-OZWZGIV2.mjs.map} +3 -3
  57. package/dist/lib/neutral/{toolkit-GVWXPDLJ.mjs → chunk-QOKLFHUS.mjs} +3 -4
  58. package/dist/lib/neutral/{toolkit-GVWXPDLJ.mjs.map → chunk-QOKLFHUS.mjs.map} +1 -1
  59. package/dist/lib/neutral/{chunk-5LKNH7FD.mjs → chunk-SCTHQVIJ.mjs} +8 -5
  60. package/dist/lib/neutral/{chunk-5LKNH7FD.mjs.map → chunk-SCTHQVIJ.mjs.map} +3 -3
  61. package/dist/lib/neutral/chunk-U4LTLBAX.mjs +56 -0
  62. package/dist/lib/neutral/chunk-U4LTLBAX.mjs.map +7 -0
  63. package/dist/lib/neutral/{chunk-H77JTXAN.mjs → chunk-UPKFUZ6V.mjs} +7 -10
  64. package/dist/lib/neutral/chunk-UPKFUZ6V.mjs.map +7 -0
  65. package/dist/lib/neutral/{operation-handler-SF36MOB5.mjs → chunk-V2Y4XE3O.mjs} +3 -4
  66. package/dist/lib/neutral/{operation-handler-SF36MOB5.mjs.map → chunk-V2Y4XE3O.mjs.map} +1 -1
  67. package/dist/lib/neutral/chunk-VTK5R4H3.mjs +9 -0
  68. package/dist/lib/neutral/chunk-VTK5R4H3.mjs.map +7 -0
  69. package/dist/lib/neutral/chunk-XVGEJWJX.mjs +133 -0
  70. package/dist/lib/neutral/chunk-XVGEJWJX.mjs.map +7 -0
  71. package/dist/lib/neutral/{companion-chat-provisioner-YZZ73P6E.mjs → companion-chat-provisioner-IQV5VIVE.mjs} +14 -8
  72. package/dist/lib/neutral/companion-chat-provisioner-IQV5VIVE.mjs.map +7 -0
  73. package/dist/lib/neutral/components/index.mjs +509 -579
  74. package/dist/lib/neutral/components/index.mjs.map +4 -4
  75. package/dist/lib/neutral/{integration-provider-RBD3AFJU.mjs → connector-ITLLTBPZ.mjs} +13 -14
  76. package/dist/lib/neutral/connector-ITLLTBPZ.mjs.map +7 -0
  77. package/dist/lib/neutral/containers/index.mjs +12 -14
  78. package/dist/lib/neutral/containers/index.mjs.map +3 -3
  79. package/dist/lib/neutral/{create-chat-Z3FNA6OJ.mjs → create-chat-YGVZZYGP.mjs} +18 -16
  80. package/dist/lib/neutral/create-chat-YGVZZYGP.mjs.map +7 -0
  81. package/dist/lib/neutral/{create-object-BJUDDKQQ.mjs → create-object-5PAEJ6KM.mjs} +11 -27
  82. package/dist/lib/neutral/create-object-5PAEJ6KM.mjs.map +7 -0
  83. package/dist/lib/neutral/{edge-model-resolver-BBVOJBGJ.mjs → edge-model-resolver-WDJWDZTT.mjs} +2 -2
  84. package/dist/lib/neutral/execution-graph/index.mjs +182 -64
  85. package/dist/lib/neutral/execution-graph/index.mjs.map +3 -3
  86. package/dist/lib/neutral/extensions/index.mjs +8 -0
  87. package/dist/lib/neutral/{fork-chat-UYXYT6BT.mjs → fork-chat-RMAAYYQF.mjs} +15 -18
  88. package/dist/lib/neutral/fork-chat-RMAAYYQF.mjs.map +7 -0
  89. package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs +93 -0
  90. package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs.map +7 -0
  91. package/dist/lib/neutral/hooks/index.mjs +195 -105
  92. package/dist/lib/neutral/hooks/index.mjs.map +4 -4
  93. package/dist/lib/neutral/index.mjs +14 -10
  94. package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs +41 -0
  95. package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs.map +7 -0
  96. package/dist/lib/neutral/meta.json +1 -1
  97. package/dist/lib/neutral/meta.mjs +1 -1
  98. package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs +18 -0
  99. package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs.map +7 -0
  100. package/dist/lib/neutral/operation-handler-2LEN45GP.mjs +8 -0
  101. package/dist/lib/neutral/operation-handler-2LEN45GP.mjs.map +7 -0
  102. package/dist/lib/neutral/operations/index.mjs +1 -1
  103. package/dist/lib/neutral/plugin.mjs +2 -2
  104. package/dist/lib/neutral/plugin.workerd.mjs +13 -0
  105. package/dist/lib/neutral/plugin.workerd.mjs.map +7 -0
  106. package/dist/lib/neutral/{react-surface-ES7UHZ65.mjs → react-surface-HEJEK44F.mjs} +20 -35
  107. package/dist/lib/neutral/react-surface-HEJEK44F.mjs.map +7 -0
  108. package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs +28 -0
  109. package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs.map +7 -0
  110. package/dist/lib/neutral/{run-prompt-in-new-chat-NIAGCKQV.mjs → run-prompt-in-new-chat-RNUJE2FM.mjs} +28 -31
  111. package/dist/lib/neutral/run-prompt-in-new-chat-RNUJE2FM.mjs.map +7 -0
  112. package/dist/lib/neutral/skill-definition-553MQRTR.mjs +8 -0
  113. package/dist/lib/neutral/skill-definition-553MQRTR.mjs.map +7 -0
  114. package/dist/lib/neutral/skills/index.mjs +8 -0
  115. package/dist/lib/neutral/skills/index.mjs.map +7 -0
  116. package/dist/lib/neutral/{state-XO2UYSSG.mjs → state-4LGAKSSD.mjs} +8 -2
  117. package/dist/lib/neutral/{state-XO2UYSSG.mjs.map → state-4LGAKSSD.mjs.map} +3 -3
  118. package/dist/lib/neutral/testing.mjs +1 -1
  119. package/dist/lib/neutral/toolkit-ETWLG5NT.mjs +8 -0
  120. package/dist/lib/neutral/toolkit-ETWLG5NT.mjs.map +7 -0
  121. package/dist/lib/neutral/translations.mjs +64 -33
  122. package/dist/lib/neutral/translations.mjs.map +3 -3
  123. package/dist/lib/neutral/types/index.mjs +5 -1
  124. package/dist/lib/neutral/{update-chat-name-Y7JWIP64.mjs → update-chat-name-IJJELRR6.mjs} +3 -3
  125. package/dist/lib/neutral/{update-chat-name-Y7JWIP64.mjs.map → update-chat-name-IJJELRR6.mjs.map} +2 -2
  126. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  127. package/dist/types/src/AssistantPlugin.workerd.d.ts.map +1 -1
  128. package/dist/types/src/capabilities/agent-hydrator.d.ts +1 -1
  129. package/dist/types/src/capabilities/agent-service.d.ts +1 -2
  130. package/dist/types/src/capabilities/agent-service.d.ts.map +1 -1
  131. package/dist/types/src/capabilities/ai-context.d.ts +1 -2
  132. package/dist/types/src/capabilities/ai-context.d.ts.map +1 -1
  133. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -3
  134. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  135. package/dist/types/src/capabilities/automation-templates.d.ts +1 -2
  136. package/dist/types/src/capabilities/automation-templates.d.ts.map +1 -1
  137. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts +1 -1
  138. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts.map +1 -1
  139. package/dist/types/src/capabilities/{integration-provider.d.ts → connector.d.ts} +2 -2
  140. package/dist/types/src/capabilities/connector.d.ts.map +1 -0
  141. package/dist/types/src/capabilities/create-object.d.ts +1 -27
  142. package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
  143. package/dist/types/src/capabilities/index.d.ts +3 -2
  144. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  145. package/dist/types/src/capabilities/markdown-extension.d.ts +1 -1
  146. package/dist/types/src/capabilities/migrations.d.ts +1 -2
  147. package/dist/types/src/capabilities/migrations.d.ts.map +1 -1
  148. package/dist/types/src/capabilities/navigation-resolver.d.ts +5 -0
  149. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -0
  150. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  151. package/dist/types/src/capabilities/settings.d.ts +1 -2
  152. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  153. package/dist/types/src/capabilities/skill-definition.d.ts +5 -0
  154. package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -0
  155. package/dist/types/src/capabilities/state.d.ts +1 -17
  156. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  157. package/dist/types/src/capabilities/toolkit.d.ts +1 -2
  158. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -1
  159. package/dist/types/src/components/AgentProperties/AgentProperties.stories.d.ts.map +1 -1
  160. package/dist/types/src/components/Chat/Chat.d.ts +4 -5
  161. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  162. package/dist/types/src/components/Chat/events.d.ts +0 -4
  163. package/dist/types/src/components/Chat/events.d.ts.map +1 -1
  164. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts +2 -2
  165. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  166. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
  167. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts +2 -2
  168. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts.map +1 -1
  169. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts +5 -5
  170. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts.map +1 -1
  171. package/dist/types/src/components/ChatPrompt/useChatVoiceInput.d.ts +9 -0
  172. package/dist/types/src/components/ChatPrompt/useChatVoiceInput.d.ts.map +1 -0
  173. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +4 -4
  174. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  175. package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts +2 -2
  176. package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts.map +1 -1
  177. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
  178. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts +2 -2
  179. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts.map +1 -1
  180. package/dist/types/src/components/ChatThread/widgets/SurfaceWidget.d.ts +11 -0
  181. package/dist/types/src/components/ChatThread/widgets/SurfaceWidget.d.ts.map +1 -0
  182. package/dist/types/src/components/ChatThread/widgets/index.d.ts +1 -0
  183. package/dist/types/src/components/ChatThread/widgets/index.d.ts.map +1 -1
  184. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -1
  185. package/dist/types/src/components/TaskList/TaskList.stories.d.ts +2 -2
  186. package/dist/types/src/components/TaskList/TaskList.stories.d.ts.map +1 -1
  187. package/dist/types/src/components/Toolbox/Toolbox.d.ts +3 -3
  188. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  189. package/dist/types/src/components/index.d.ts +0 -4
  190. package/dist/types/src/components/index.d.ts.map +1 -1
  191. package/dist/types/src/constants.d.ts +1 -1
  192. package/dist/types/src/constants.d.ts.map +1 -1
  193. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts +2 -2
  194. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts.map +1 -1
  195. package/dist/types/src/{components → containers}/AssistantSettings/AssistantSettings.d.ts +1 -1
  196. package/dist/types/src/containers/AssistantSettings/AssistantSettings.d.ts.map +1 -0
  197. package/dist/types/src/{components → containers}/AssistantSettings/AssistantSettings.stories.d.ts.map +1 -1
  198. package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts +12 -0
  199. package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts.map +1 -0
  200. package/dist/types/src/{components/TemplateEditor/TemplateEditor.stories.d.ts → containers/AssistantSettings/OllamaModels.stories.d.ts} +9 -7
  201. package/dist/types/src/containers/AssistantSettings/OllamaModels.stories.d.ts.map +1 -0
  202. package/dist/types/src/{components → containers}/AssistantSettings/index.d.ts.map +1 -1
  203. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts +2 -9
  204. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts.map +1 -1
  205. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts +3 -10
  206. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -1
  207. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -1
  208. package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts +13 -0
  209. package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts.map +1 -0
  210. package/dist/types/src/containers/IntegrationPrompt/index.d.ts +2 -0
  211. package/dist/types/src/{components/RoutineProperties → containers/IntegrationPrompt}/index.d.ts.map +1 -1
  212. package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts.map +1 -1
  213. package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts +1 -1
  214. package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts.map +1 -1
  215. package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts.map +1 -1
  216. package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts +1 -1
  217. package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts.map +1 -1
  218. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -1
  219. package/dist/types/src/containers/index.d.ts +2 -3
  220. package/dist/types/src/containers/index.d.ts.map +1 -1
  221. package/dist/types/src/execution-graph/execution-graph.d.ts +2 -1
  222. package/dist/types/src/execution-graph/execution-graph.d.ts.map +1 -1
  223. package/dist/types/src/execution-graph/index.d.ts +3 -3
  224. package/dist/types/src/execution-graph/index.d.ts.map +1 -1
  225. package/dist/types/src/execution-graph/span-tree.d.ts +13 -0
  226. package/dist/types/src/execution-graph/span-tree.d.ts.map +1 -1
  227. package/dist/types/src/extensions/index.d.ts +1 -1
  228. package/dist/types/src/extensions/index.d.ts.map +1 -1
  229. package/dist/types/src/extensions/prompt-extension.d.ts.map +1 -1
  230. package/dist/types/src/hooks/index.d.ts +2 -2
  231. package/dist/types/src/hooks/index.d.ts.map +1 -1
  232. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  233. package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -1
  234. package/dist/types/src/hooks/useHomeSuggestions.d.ts +8 -0
  235. package/dist/types/src/hooks/useHomeSuggestions.d.ts.map +1 -0
  236. package/dist/types/src/hooks/usePresets.d.ts +6 -2
  237. package/dist/types/src/hooks/usePresets.d.ts.map +1 -1
  238. package/dist/types/src/hooks/useSkillRegistry.d.ts +21 -0
  239. package/dist/types/src/hooks/useSkillRegistry.d.ts.map +1 -0
  240. package/dist/types/src/index.d.ts +1 -1
  241. package/dist/types/src/index.d.ts.map +1 -1
  242. package/dist/types/src/meta.d.ts +4 -0
  243. package/dist/types/src/meta.d.ts.map +1 -1
  244. package/dist/types/src/operations/create-chat.d.ts.map +1 -1
  245. package/dist/types/src/operations/fork-chat.d.ts.map +1 -1
  246. package/dist/types/src/operations/generate-home-suggestions.d.ts +5 -0
  247. package/dist/types/src/operations/generate-home-suggestions.d.ts.map +1 -0
  248. package/dist/types/src/operations/generate-home-suggestions.test.d.ts +2 -0
  249. package/dist/types/src/operations/generate-home-suggestions.test.d.ts.map +1 -0
  250. package/dist/types/src/operations/index.d.ts.map +1 -1
  251. package/dist/types/src/operations/resolve-navigation-targets.d.ts +3 -15
  252. package/dist/types/src/operations/resolve-navigation-targets.d.ts.map +1 -1
  253. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts +2 -2
  254. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts.map +1 -1
  255. package/dist/types/src/paths.d.ts +1 -1
  256. package/dist/types/src/paths.d.ts.map +1 -1
  257. package/dist/types/src/plugin.workerd.d.ts +2 -0
  258. package/dist/types/src/plugin.workerd.d.ts.map +1 -0
  259. package/dist/types/src/processor/presets.d.ts +20 -9
  260. package/dist/types/src/processor/presets.d.ts.map +1 -1
  261. package/dist/types/src/processor/processor.d.ts +10 -209
  262. package/dist/types/src/processor/processor.d.ts.map +1 -1
  263. package/dist/types/src/skills/assistant/index.d.ts +2 -0
  264. package/dist/types/src/skills/assistant/index.d.ts.map +1 -0
  265. package/dist/types/src/skills/assistant/skill.d.ts +4 -0
  266. package/dist/types/src/skills/assistant/skill.d.ts.map +1 -0
  267. package/dist/types/src/skills/assistant/skill.node.test.d.ts +2 -0
  268. package/dist/types/src/skills/assistant/skill.node.test.d.ts.map +1 -0
  269. package/dist/types/src/skills/index.d.ts.map +1 -0
  270. package/dist/types/src/templates/daily-digest.d.ts +2 -2
  271. package/dist/types/src/templates/daily-digest.d.ts.map +1 -1
  272. package/dist/types/src/templates/index.d.ts +3 -3
  273. package/dist/types/src/templates/index.d.ts.map +1 -1
  274. package/dist/types/src/templates/research-brief.d.ts +2 -2
  275. package/dist/types/src/templates/research-brief.d.ts.map +1 -1
  276. package/dist/types/src/templates/routine-templates.test.d.ts +2 -0
  277. package/dist/types/src/templates/routine-templates.test.d.ts.map +1 -0
  278. package/dist/types/src/templates/scaffold.d.ts +9 -9
  279. package/dist/types/src/templates/scaffold.d.ts.map +1 -1
  280. package/dist/types/src/testing/test-generator.d.ts +1 -1
  281. package/dist/types/src/testing/test-generator.d.ts.map +1 -1
  282. package/dist/types/src/testing/test-sequence.d.ts +1 -8
  283. package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
  284. package/dist/types/src/testing/test-trace.d.ts.map +1 -1
  285. package/dist/types/src/translations.d.ts.map +1 -1
  286. package/dist/types/src/types/Assistant.d.ts +5 -12
  287. package/dist/types/src/types/Assistant.d.ts.map +1 -1
  288. package/dist/types/src/types/AssistantCapabilities.d.ts +21 -0
  289. package/dist/types/src/types/AssistantCapabilities.d.ts.map +1 -1
  290. package/dist/types/src/types/AssistantOperation.d.ts +17 -110
  291. package/dist/types/src/types/AssistantOperation.d.ts.map +1 -1
  292. package/dist/types/src/types/ChatSurface.d.ts +12 -0
  293. package/dist/types/src/types/ChatSurface.d.ts.map +1 -0
  294. package/dist/types/src/types/Ollama.d.ts +44 -0
  295. package/dist/types/src/types/Ollama.d.ts.map +1 -0
  296. package/dist/types/src/types/Settings.d.ts +5 -4
  297. package/dist/types/src/types/Settings.d.ts.map +1 -1
  298. package/dist/types/src/types/index.d.ts +2 -0
  299. package/dist/types/src/types/index.d.ts.map +1 -1
  300. package/dist/types/src/types/service.d.ts +4 -3
  301. package/dist/types/src/types/service.d.ts.map +1 -1
  302. package/dist/types/src/util/suggestions.d.ts +1 -1
  303. package/dist/types/tsconfig.tsbuildinfo +1 -1
  304. package/dx.config.ts +2 -2
  305. package/package.json +102 -90
  306. package/src/AssistantPlugin.conversations.json +1 -1
  307. package/src/AssistantPlugin.node.ts +5 -5
  308. package/src/AssistantPlugin.test.ts +26 -40
  309. package/src/AssistantPlugin.ts +12 -10
  310. package/src/AssistantPlugin.workerd.ts +15 -6
  311. package/src/capabilities/agent-hydrator.ts +1 -2
  312. package/src/capabilities/agent-service.ts +5 -7
  313. package/src/capabilities/ai-context.ts +7 -32
  314. package/src/capabilities/ai-service.ts +3 -2
  315. package/src/capabilities/app-graph-builder.ts +38 -18
  316. package/src/capabilities/automation-templates.ts +3 -3
  317. package/src/capabilities/companion-chat-provisioner.ts +22 -6
  318. package/src/capabilities/{integration-provider.ts → connector.ts} +7 -12
  319. package/src/capabilities/create-object.ts +9 -26
  320. package/src/capabilities/index.ts +3 -5
  321. package/src/capabilities/markdown-extension.ts +2 -3
  322. package/src/capabilities/navigation-resolver.ts +20 -0
  323. package/src/capabilities/react-surface.tsx +21 -33
  324. package/src/capabilities/skill-definition.ts +72 -0
  325. package/src/capabilities/state.ts +7 -0
  326. package/src/components/AgentProperties/AgentProperties.stories.tsx +1 -2
  327. package/src/components/Chat/Chat.tsx +28 -10
  328. package/src/components/Chat/events.ts +0 -6
  329. package/src/components/ChatPrompt/ChatActions.tsx +181 -18
  330. package/src/components/ChatPrompt/ChatOptions.stories.tsx +3 -3
  331. package/src/components/ChatPrompt/ChatOptions.tsx +17 -21
  332. package/src/components/ChatPrompt/ChatPrompt.tsx +30 -46
  333. package/src/components/ChatPrompt/useChatVoiceInput.ts +103 -0
  334. package/src/components/ChatThread/ChatThread.stories.tsx +7 -16
  335. package/src/components/ChatThread/MarkdownStream.stories.tsx +3 -3
  336. package/src/components/ChatThread/registry.tsx +43 -17
  337. package/src/components/ChatThread/widgets/ReasoningWidget.stories.tsx +2 -2
  338. package/src/components/ChatThread/widgets/SurfaceWidget.tsx +41 -0
  339. package/src/components/ChatThread/widgets/index.ts +1 -0
  340. package/src/components/ProcessTree/ProcessTree.tsx +2 -10
  341. package/src/components/TaskList/TaskList.stories.tsx +2 -2
  342. package/src/components/TaskList/TaskList.tsx +2 -2
  343. package/src/components/Toolbox/Toolbox.tsx +11 -11
  344. package/src/components/index.ts +0 -6
  345. package/src/constants.ts +1 -1
  346. package/src/containers/AgentArticle/AgentArticle.stories.tsx +8 -9
  347. package/src/containers/AgentArticle/AgentArticle.tsx +1 -1
  348. package/src/{components → containers}/AssistantSettings/AssistantSettings.stories.tsx +3 -2
  349. package/src/containers/AssistantSettings/AssistantSettings.tsx +90 -0
  350. package/src/containers/AssistantSettings/OllamaModels.stories.tsx +108 -0
  351. package/src/containers/AssistantSettings/OllamaModels.tsx +255 -0
  352. package/src/containers/ChatArticle/ChatArticle.stories.tsx +3 -3
  353. package/src/containers/ChatArticle/ChatArticle.tsx +8 -19
  354. package/src/containers/ChatCompanion/ChatCompanion.tsx +26 -26
  355. package/src/containers/ChatDialog/ChatDialog.tsx +5 -4
  356. package/src/containers/IntegrationPrompt/IntegrationPrompt.tsx +79 -0
  357. package/src/containers/IntegrationPrompt/index.ts +5 -0
  358. package/src/containers/SpaceHomePrompt/SpaceHomePrompt.tsx +8 -6
  359. package/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.tsx +46 -32
  360. package/src/containers/TracePanel/TracePanel.stories.tsx +89 -47
  361. package/src/containers/TracePanel/TracePanel.tsx +13 -8
  362. package/src/containers/TracePanel/dxn-extractor.test.ts +2 -2
  363. package/src/containers/TriggerStatus/TriggerStatus.tsx +8 -4
  364. package/src/containers/index.ts +2 -3
  365. package/src/execution-graph/SPEC.md +1 -1
  366. package/src/execution-graph/execution-graph.test.ts +213 -25
  367. package/src/execution-graph/execution-graph.ts +209 -72
  368. package/src/execution-graph/index.ts +8 -8
  369. package/src/execution-graph/span-tree.test.ts +33 -1
  370. package/src/execution-graph/span-tree.ts +43 -2
  371. package/src/execution-graph/sub-agent-delegation.test.ts +19 -19
  372. package/src/extensions/index.ts +1 -1
  373. package/src/extensions/prompt-extension.ts +1 -1
  374. package/src/feed-logger.ts +4 -4
  375. package/src/functions/services.test.ts +4 -4
  376. package/src/hooks/index.ts +2 -2
  377. package/src/hooks/useChatProcessor.ts +12 -16
  378. package/src/hooks/useContextBinder.ts +2 -4
  379. package/src/hooks/useDebug.ts +2 -2
  380. package/src/hooks/useHomeSuggestions.ts +55 -0
  381. package/src/hooks/usePresets.ts +80 -11
  382. package/src/hooks/useProcessEphemeralStatus.ts +1 -1
  383. package/src/hooks/useReferencesProvider.ts +1 -1
  384. package/src/hooks/useSkillRegistry.ts +125 -0
  385. package/src/index.ts +1 -1
  386. package/src/operations/create-chat.ts +11 -12
  387. package/src/operations/fork-chat.ts +14 -19
  388. package/src/operations/generate-home-suggestions.test.ts +103 -0
  389. package/src/operations/generate-home-suggestions.ts +116 -0
  390. package/src/operations/index.ts +1 -0
  391. package/src/operations/prompt.node.test.ts +14 -17
  392. package/src/operations/resolve-navigation-targets.ts +32 -19
  393. package/src/operations/run-prompt-in-new-chat.ts +30 -33
  394. package/src/operations/update-chat-name.ts +2 -2
  395. package/src/paths.ts +4 -2
  396. package/src/plugin.workerd.ts +5 -0
  397. package/src/processor/presets.ts +38 -61
  398. package/src/processor/processor.node.test.ts +1 -1
  399. package/src/processor/processor.ts +34 -20
  400. package/src/skills/assistant/index.ts +5 -0
  401. package/src/{blueprints/assistant/blueprint.node.test.ts → skills/assistant/skill.node.test.ts} +8 -8
  402. package/src/{blueprints/assistant/blueprint.ts → skills/assistant/skill.ts} +9 -9
  403. package/src/templates/daily-digest.ts +10 -12
  404. package/src/templates/index.ts +3 -3
  405. package/src/templates/research-brief.ts +15 -13
  406. package/src/templates/routine-templates.test.ts +55 -0
  407. package/src/templates/scaffold.ts +22 -57
  408. package/src/testing/data/trace-timeline-multiple.dx.json +1 -1
  409. package/src/testing/data/trace-timeline-remote.dx.json +1 -1
  410. package/src/testing/data/trace-timeline.dx.json +3430 -1092
  411. package/src/testing/test-generator.test.ts +26 -22
  412. package/src/testing/test-generator.ts +4 -8
  413. package/src/testing/test-trace.ts +2 -1
  414. package/src/testing/trace-timeline.node.test.ts +14 -14
  415. package/src/translations.ts +68 -33
  416. package/src/types/Assistant.ts +3 -1
  417. package/src/types/AssistantCapabilities.ts +21 -0
  418. package/src/types/AssistantOperation.ts +21 -32
  419. package/src/types/ChatSurface.ts +16 -0
  420. package/src/types/Ollama.ts +59 -0
  421. package/src/types/Settings.ts +12 -10
  422. package/src/types/index.ts +3 -0
  423. package/src/types/service.ts +14 -14
  424. package/src/util/suggestions.ts +1 -1
  425. package/dist/lib/neutral/AgentArticle-2BEPWUMN.mjs.map +0 -7
  426. package/dist/lib/neutral/AssistantSettings-7ALY4BMS.mjs +0 -40
  427. package/dist/lib/neutral/AssistantSettings-7ALY4BMS.mjs.map +0 -7
  428. package/dist/lib/neutral/BlueprintArticle-ZBOZNZM7.mjs +0 -27
  429. package/dist/lib/neutral/BlueprintArticle-ZBOZNZM7.mjs.map +0 -7
  430. package/dist/lib/neutral/ChatCompanion-YHC43RYQ.mjs.map +0 -7
  431. package/dist/lib/neutral/ChatDialog-YZDZLIQA.mjs.map +0 -7
  432. package/dist/lib/neutral/RoutineArticle-FK5BXQN5.mjs +0 -119
  433. package/dist/lib/neutral/RoutineArticle-FK5BXQN5.mjs.map +0 -7
  434. package/dist/lib/neutral/RoutineList-SO5ETHNT.mjs +0 -48
  435. package/dist/lib/neutral/RoutineList-SO5ETHNT.mjs.map +0 -7
  436. package/dist/lib/neutral/RoutineProperties-FISLMW2R.mjs +0 -17
  437. package/dist/lib/neutral/RoutineProperties-FISLMW2R.mjs.map +0 -7
  438. package/dist/lib/neutral/SpaceHomePrompt-HTWQKLGI.mjs.map +0 -7
  439. package/dist/lib/neutral/SpaceHomeSuggestions-6G4E7GNJ.mjs +0 -50
  440. package/dist/lib/neutral/SpaceHomeSuggestions-6G4E7GNJ.mjs.map +0 -7
  441. package/dist/lib/neutral/TriggerStatus-RBOHHDOK.mjs.map +0 -7
  442. package/dist/lib/neutral/agent-hydrator-PJBYVMBW.mjs.map +0 -7
  443. package/dist/lib/neutral/agent-service-WV5CSHAG.mjs.map +0 -7
  444. package/dist/lib/neutral/ai-context-7WRHWYXY.mjs +0 -42
  445. package/dist/lib/neutral/ai-context-7WRHWYXY.mjs.map +0 -7
  446. package/dist/lib/neutral/ai-service-AADUIKBY.mjs.map +0 -7
  447. package/dist/lib/neutral/app-graph-builder-PTSRZXRN.mjs.map +0 -7
  448. package/dist/lib/neutral/automation-templates-M2XQWGR6.mjs +0 -115
  449. package/dist/lib/neutral/automation-templates-M2XQWGR6.mjs.map +0 -7
  450. package/dist/lib/neutral/blueprint-definition-2XPYI35X.mjs +0 -40
  451. package/dist/lib/neutral/blueprint-definition-2XPYI35X.mjs.map +0 -7
  452. package/dist/lib/neutral/blueprints/index.mjs +0 -8
  453. package/dist/lib/neutral/chunk-54W7N6M6.mjs.map +0 -7
  454. package/dist/lib/neutral/chunk-5H6UJHLF.mjs.map +0 -7
  455. package/dist/lib/neutral/chunk-5KB2WRI2.mjs.map +0 -7
  456. package/dist/lib/neutral/chunk-7FQT4XMI.mjs +0 -8
  457. package/dist/lib/neutral/chunk-H77JTXAN.mjs.map +0 -7
  458. package/dist/lib/neutral/chunk-IQZJ5TTM.mjs +0 -130
  459. package/dist/lib/neutral/chunk-IQZJ5TTM.mjs.map +0 -7
  460. package/dist/lib/neutral/chunk-KLYLW4WH.mjs.map +0 -7
  461. package/dist/lib/neutral/companion-chat-provisioner-YZZ73P6E.mjs.map +0 -7
  462. package/dist/lib/neutral/create-chat-Z3FNA6OJ.mjs.map +0 -7
  463. package/dist/lib/neutral/create-object-BJUDDKQQ.mjs.map +0 -7
  464. package/dist/lib/neutral/fork-chat-UYXYT6BT.mjs.map +0 -7
  465. package/dist/lib/neutral/integration-provider-RBD3AFJU.mjs.map +0 -7
  466. package/dist/lib/neutral/markdown-extension-IJ5RQMQ4.mjs.map +0 -7
  467. package/dist/lib/neutral/react-surface-ES7UHZ65.mjs.map +0 -7
  468. package/dist/lib/neutral/resolve-navigation-targets-ZHIMMH7L.mjs +0 -22
  469. package/dist/lib/neutral/resolve-navigation-targets-ZHIMMH7L.mjs.map +0 -7
  470. package/dist/lib/neutral/run-prompt-in-new-chat-NIAGCKQV.mjs.map +0 -7
  471. package/dist/types/src/blueprints/assistant/blueprint.d.ts +0 -4
  472. package/dist/types/src/blueprints/assistant/blueprint.d.ts.map +0 -1
  473. package/dist/types/src/blueprints/assistant/blueprint.node.test.d.ts +0 -2
  474. package/dist/types/src/blueprints/assistant/blueprint.node.test.d.ts.map +0 -1
  475. package/dist/types/src/blueprints/assistant/index.d.ts +0 -2
  476. package/dist/types/src/blueprints/assistant/index.d.ts.map +0 -1
  477. package/dist/types/src/blueprints/index.d.ts.map +0 -1
  478. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -5
  479. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  480. package/dist/types/src/capabilities/integration-provider.d.ts.map +0 -1
  481. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +0 -1
  482. package/dist/types/src/components/RoutineProperties/RoutineProperties.d.ts +0 -7
  483. package/dist/types/src/components/RoutineProperties/RoutineProperties.d.ts.map +0 -1
  484. package/dist/types/src/components/RoutineProperties/RoutineProperties.stories.d.ts +0 -15
  485. package/dist/types/src/components/RoutineProperties/RoutineProperties.stories.d.ts.map +0 -1
  486. package/dist/types/src/components/RoutineProperties/index.d.ts +0 -2
  487. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +0 -13
  488. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +0 -1
  489. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +0 -1
  490. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +0 -21
  491. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +0 -1
  492. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +0 -16
  493. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +0 -1
  494. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts +0 -12
  495. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +0 -1
  496. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts +0 -3
  497. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts.map +0 -1
  498. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts +0 -8
  499. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts.map +0 -1
  500. package/dist/types/src/components/TemplateEditor/index.d.ts +0 -2
  501. package/dist/types/src/components/TemplateEditor/index.d.ts.map +0 -1
  502. package/dist/types/src/components/TemplateEditor/types.d.ts +0 -18
  503. package/dist/types/src/components/TemplateEditor/types.d.ts.map +0 -1
  504. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts +0 -6
  505. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts.map +0 -1
  506. package/dist/types/src/containers/BlueprintArticle/index.d.ts +0 -2
  507. package/dist/types/src/containers/BlueprintArticle/index.d.ts.map +0 -1
  508. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts +0 -6
  509. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts.map +0 -1
  510. package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts +0 -15
  511. package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts.map +0 -1
  512. package/dist/types/src/containers/RoutineArticle/index.d.ts +0 -2
  513. package/dist/types/src/containers/RoutineArticle/index.d.ts.map +0 -1
  514. package/dist/types/src/containers/RoutineList/RoutineList.d.ts +0 -6
  515. package/dist/types/src/containers/RoutineList/RoutineList.d.ts.map +0 -1
  516. package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts +0 -21
  517. package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts.map +0 -1
  518. package/dist/types/src/containers/RoutineList/index.d.ts +0 -2
  519. package/dist/types/src/containers/RoutineList/index.d.ts.map +0 -1
  520. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +0 -66
  521. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +0 -1
  522. package/dist/types/src/hooks/useOnline.d.ts +0 -3
  523. package/dist/types/src/hooks/useOnline.d.ts.map +0 -1
  524. package/dist/types/src/templates/automation-templates.test.d.ts +0 -2
  525. package/dist/types/src/templates/automation-templates.test.d.ts.map +0 -1
  526. package/src/blueprints/assistant/index.ts +0 -5
  527. package/src/capabilities/blueprint-definition.ts +0 -67
  528. package/src/components/AssistantSettings/AssistantSettings.tsx +0 -43
  529. package/src/components/RoutineProperties/RoutineProperties.stories.tsx +0 -59
  530. package/src/components/RoutineProperties/RoutineProperties.tsx +0 -23
  531. package/src/components/RoutineProperties/index.ts +0 -5
  532. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +0 -95
  533. package/src/components/TemplateEditor/TemplateEditor.tsx +0 -80
  534. package/src/components/TemplateEditor/TemplateForm.stories.tsx +0 -76
  535. package/src/components/TemplateEditor/TemplateForm.tsx +0 -204
  536. package/src/components/TemplateEditor/extensions/handlebars-extension.ts +0 -274
  537. package/src/components/TemplateEditor/extensions/index.ts +0 -6
  538. package/src/components/TemplateEditor/extensions/xml-extension.ts +0 -64
  539. package/src/components/TemplateEditor/index.ts +0 -5
  540. package/src/components/TemplateEditor/types.tsx +0 -28
  541. package/src/containers/BlueprintArticle/BlueprintArticle.tsx +0 -29
  542. package/src/containers/BlueprintArticle/index.ts +0 -5
  543. package/src/containers/RoutineArticle/RoutineArticle.stories.tsx +0 -75
  544. package/src/containers/RoutineArticle/RoutineArticle.tsx +0 -109
  545. package/src/containers/RoutineArticle/index.ts +0 -5
  546. package/src/containers/RoutineList/RoutineList.stories.tsx +0 -130
  547. package/src/containers/RoutineList/RoutineList.tsx +0 -50
  548. package/src/containers/RoutineList/index.ts +0 -5
  549. package/src/hooks/useBlueprintRegistry.ts +0 -125
  550. package/src/hooks/useOnline.ts +0 -10
  551. package/src/templates/automation-templates.test.ts +0 -66
  552. /package/dist/lib/neutral/{ChatArticle-KT46SUFU.mjs.map → ChatArticle-OO7GGEFW.mjs.map} +0 -0
  553. /package/dist/lib/neutral/{TracePanel-T552TAOH.mjs.map → TracePanel-JKNWADJ4.mjs.map} +0 -0
  554. /package/dist/lib/neutral/{edge-model-resolver-BBVOJBGJ.mjs.map → edge-model-resolver-WDJWDZTT.mjs.map} +0 -0
  555. /package/dist/lib/neutral/{blueprints → extensions}/index.mjs.map +0 -0
  556. /package/dist/types/src/{components → containers}/AssistantSettings/AssistantSettings.stories.d.ts +0 -0
  557. /package/dist/types/src/{components → containers}/AssistantSettings/index.d.ts +0 -0
  558. /package/dist/types/src/{blueprints → skills}/index.d.ts +0 -0
  559. /package/src/{components → containers}/AssistantSettings/index.ts +0 -0
  560. /package/src/{blueprints → skills}/index.ts +0 -0
@@ -0,0 +1,108 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Atom } from '@effect-atom/atom';
6
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
+ import * as Effect from 'effect/Effect';
8
+ import * as Schema from 'effect/Schema';
9
+ import React, { useMemo } from 'react';
10
+
11
+ import { Form } from '@dxos/react-ui-form';
12
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
13
+
14
+ import { translations } from '#translations';
15
+ import { type Ollama } from '#types';
16
+
17
+ import { OllamaModelsSection } from './OllamaModels';
18
+
19
+ // In-memory manager that bypasses the (desktop-only) capability lookup; methods are no-ops so the
20
+ // configured state is what renders.
21
+ const makeFakeManager = (state: Ollama.ModelsState): Ollama.Manager => ({
22
+ endpoint: 'http://localhost:21434',
23
+ state: Atom.make(state),
24
+ refresh: Effect.void,
25
+ refreshLoaded: Effect.void,
26
+ pull: () => Effect.void,
27
+ cancel: () => Effect.void,
28
+ load: () => Effect.void,
29
+ unload: () => Effect.void,
30
+ remove: () => Effect.void,
31
+ });
32
+
33
+ const Render = ({ state }: { state: Ollama.ModelsState }) => {
34
+ const manager = useMemo(() => makeFakeManager(state), [state]);
35
+ return (
36
+ <Form.Root schema={Schema.Struct({})} values={{}} variant='settings'>
37
+ <Form.Viewport scroll>
38
+ <Form.Content>
39
+ <OllamaModelsSection manager={manager} />
40
+ </Form.Content>
41
+ </Form.Viewport>
42
+ </Form.Root>
43
+ );
44
+ };
45
+
46
+ const meta = {
47
+ title: 'plugins/plugin-assistant/containers/OllamaModels',
48
+ render: Render,
49
+ decorators: [withTheme(), withLayout({ layout: 'column' })],
50
+ parameters: {
51
+ layout: 'fullscreen',
52
+ translations,
53
+ },
54
+ } satisfies Meta<typeof Render>;
55
+
56
+ export default meta;
57
+
58
+ type Story = StoryObj<typeof meta>;
59
+
60
+ export const Empty: Story = {
61
+ args: {
62
+ state: { kind: 'ready', models: [], loaded: [], pulls: {}, errors: {} },
63
+ },
64
+ };
65
+
66
+ export const Populated: Story = {
67
+ args: {
68
+ state: {
69
+ kind: 'ready',
70
+ models: [
71
+ { name: 'llama3.2:1b', size: 1_321_098_329 },
72
+ { name: 'qwen2.5:14b', size: 9_001_234_567 },
73
+ ],
74
+ // llama3.2:1b is currently loaded into memory.
75
+ loaded: [{ name: 'llama3.2:1b', sizeVram: 1_400_000_000 }],
76
+ pulls: {},
77
+ // A per-model action error shows inline on its row.
78
+ errors: { 'qwen2.5:14b': 'error starting llama-server: not enough memory' },
79
+ },
80
+ },
81
+ };
82
+
83
+ export const Pulling: Story = {
84
+ args: {
85
+ state: {
86
+ kind: 'ready',
87
+ models: [{ name: 'llama3.2:1b', size: 1_321_098_329 }],
88
+ loaded: [],
89
+ pulls: {
90
+ 'gpt-oss:20b': { status: 'downloading', completed: 4_200_000_000, total: 13_000_000_000 },
91
+ },
92
+ errors: {},
93
+ },
94
+ },
95
+ };
96
+
97
+ export const Failed: Story = {
98
+ args: {
99
+ state: {
100
+ kind: 'failed',
101
+ models: [],
102
+ loaded: [],
103
+ pulls: {},
104
+ errors: {},
105
+ error: 'Connection refused',
106
+ },
107
+ },
108
+ };
@@ -0,0 +1,255 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { useAtomValue } from '@effect-atom/atom-react';
6
+ import React, { useCallback, useEffect, useState } from 'react';
7
+
8
+ import { Model, Provider } from '@dxos/ai';
9
+ import { useOptionalCapability } from '@dxos/app-framework/ui';
10
+ import { EffectEx } from '@dxos/effect';
11
+ import { List, ListItem } from '@dxos/react-list';
12
+ import { IconButton, useTranslation } from '@dxos/react-ui';
13
+ import { Form } from '@dxos/react-ui-form';
14
+ import { Combobox } from '@dxos/react-ui-list';
15
+
16
+ import { meta } from '#meta';
17
+ import { AssistantCapabilities, type Ollama } from '#types';
18
+
19
+ /** Quick-pick model names (Ollama pull tags) sourced from the curated catalog. */
20
+ const QUICK_PICKS = Model.forProvider(Provider.ollama.id).map((model) => model.backend);
21
+
22
+ /** Poll interval for the loaded-into-memory set while the settings panel is open. */
23
+ const LOADED_POLL_INTERVAL = 3_000;
24
+
25
+ /**
26
+ * Manage locally-installed Ollama models. The {@link AssistantCapabilities.OllamaManager}
27
+ * capability is only contributed by the native (desktop) runtime, so this renders nothing in the
28
+ * browser/mobile. Split from the section body so hooks are never called conditionally.
29
+ */
30
+ export const OllamaModels = () => {
31
+ const manager = useOptionalCapability(AssistantCapabilities.OllamaManager);
32
+ if (!manager) {
33
+ return null;
34
+ }
35
+
36
+ return <OllamaModelsSection manager={manager} />;
37
+ };
38
+
39
+ export const OllamaModelsSection = ({ manager }: { manager: Ollama.Manager }) => {
40
+ const { t } = useTranslation(meta.profile.key);
41
+ // Explicit subscription: the list and badges must re-render as pulls/installs/loads land.
42
+ const state = useAtomValue(manager.state);
43
+ const [query, setQuery] = useState('');
44
+ const [open, setOpen] = useState(false);
45
+ // UI-level gate keyed by model name, guaranteeing a visible busy state across the click handler.
46
+ const [pending, setPending] = useState<Record<string, boolean>>({});
47
+
48
+ // Ensure the sidecar is up and list installed models on mount.
49
+ useEffect(() => {
50
+ void EffectEx.runPromise(manager.refresh);
51
+ }, [manager]);
52
+
53
+ // Poll the loaded-into-memory set so the panel reflects which model is resident in real time.
54
+ useEffect(() => {
55
+ const interval = setInterval(() => void EffectEx.runPromise(manager.refreshLoaded), LOADED_POLL_INTERVAL);
56
+ return () => clearInterval(interval);
57
+ }, [manager]);
58
+
59
+ const installed = new Set(state.models.map((model) => model.name));
60
+ const loaded = new Map(state.loaded.map((model) => [model.name, model]));
61
+ const pulling = Object.keys(state.pulls).filter((name) => !installed.has(name));
62
+
63
+ const withPending = useCallback(
64
+ (key: string, action: () => Promise<void>) => async () => {
65
+ setPending((prev) => ({ ...prev, [key]: true }));
66
+ try {
67
+ await action();
68
+ } finally {
69
+ setPending((prev) => ({ ...prev, [key]: false }));
70
+ }
71
+ },
72
+ [],
73
+ );
74
+
75
+ const handlePull = useCallback(
76
+ (target: string) => {
77
+ const trimmed = target.trim();
78
+ if (trimmed.length === 0) {
79
+ return;
80
+ }
81
+ setQuery('');
82
+ setOpen(false);
83
+ void withPending(trimmed, () => EffectEx.runPromise(manager.pull(trimmed)))();
84
+ },
85
+ [manager, withPending],
86
+ );
87
+
88
+ // Caller-driven filtering: curated picks not yet installed, matching the typed query.
89
+ const filter = query.trim();
90
+ const suggestions = QUICK_PICKS.filter((pick) => !installed.has(pick) && (filter === '' || pick.includes(filter)));
91
+ const offerCustom = filter.length > 0 && !installed.has(filter) && !suggestions.includes(filter);
92
+ const empty = state.models.length === 0 && pulling.length === 0;
93
+
94
+ return (
95
+ <Form.Section title={t('settings.ollama.title')}>
96
+ <Form.Row label={t('settings.ollama.installed.label')}>
97
+ {state.kind === 'failed' && state.error ? (
98
+ // Connection-level failure has no associated model, so it shows inline as the row content.
99
+ <p className='text-sm text-error-text'>{t('settings.ollama.failed.message', { error: state.error })}</p>
100
+ ) : empty ? (
101
+ <p className='text-sm text-description'>{t('settings.ollama.empty.message')}</p>
102
+ ) : (
103
+ // Plain `List`/`ListItem` (non-select), with the trigger editor's "fatter" two-line row
104
+ // treatment: a name line plus a secondary meta line, on a surface-styled row. Rows are
105
+ // actioned via their trailing buttons (no selection semantics).
106
+ <List variant='unordered' className='flex flex-col gap-1 grow is-full text-left'>
107
+ {state.models.map((model) => {
108
+ const running = loaded.get(model.name);
109
+ const error = state.errors[model.name];
110
+ const size = model.size != null ? formatBytes(model.size) : undefined;
111
+ const loadedLabel = running
112
+ ? running.sizeVram
113
+ ? t('settings.ollama.loaded.vram', { size: formatBytes(running.sizeVram) })
114
+ : t('settings.ollama.loaded.label')
115
+ : undefined;
116
+ return (
117
+ <ListItem
118
+ key={model.name}
119
+ className='flex flex-col gap-0.5 rounded-sm bg-input-surface px-2 py-1.5 is-full'
120
+ >
121
+ <div className='flex items-center gap-2'>
122
+ <span className='grow truncate font-medium'>{model.name}</span>
123
+ <IconButton
124
+ icon={running ? 'ph--eject--regular' : 'ph--play--regular'}
125
+ iconOnly
126
+ label={running ? t('settings.ollama.unload.label') : t('settings.ollama.load.label')}
127
+ disabled={pending[model.name]}
128
+ onClick={() =>
129
+ void withPending(model.name, () =>
130
+ EffectEx.runPromise(running ? manager.unload(model.name) : manager.load(model.name)),
131
+ )()
132
+ }
133
+ />
134
+ <IconButton
135
+ icon='ph--trash--regular'
136
+ iconOnly
137
+ label={t('settings.ollama.remove.label')}
138
+ disabled={pending[model.name]}
139
+ onClick={() =>
140
+ void withPending(model.name, () => EffectEx.runPromise(manager.remove(model.name)))()
141
+ }
142
+ />
143
+ </div>
144
+ {(size || loadedLabel || error) && (
145
+ <div className='flex items-center gap-2 text-sm'>
146
+ {size && <span className='text-description'>{size}</span>}
147
+ {loadedLabel && <span className='text-success-text'>{loadedLabel}</span>}
148
+ {error && <span className='truncate text-error-text'>{shortError(error)}</span>}
149
+ </div>
150
+ )}
151
+ </ListItem>
152
+ );
153
+ })}
154
+ {pulling.map((name) => {
155
+ const progress = state.pulls[name];
156
+ const status = progress?.total
157
+ ? t('settings.ollama.pulling.message', { percent: percentOf(progress) })
158
+ : (progress?.status ?? t('settings.ollama.pulling.label'));
159
+ return (
160
+ <ListItem key={name} className='flex flex-col gap-0.5 rounded-sm bg-input-surface px-2 py-1.5 is-full'>
161
+ <div className='flex items-center gap-2'>
162
+ <span className='grow truncate font-medium text-description'>{name}</span>
163
+ <IconButton
164
+ icon='ph--x--regular'
165
+ iconOnly
166
+ label={t('settings.ollama.cancel.label')}
167
+ onClick={() => void EffectEx.runPromise(manager.cancel(name))}
168
+ />
169
+ </div>
170
+ <span className='text-sm text-description'>{status}</span>
171
+ </ListItem>
172
+ );
173
+ })}
174
+ </List>
175
+ )}
176
+ </Form.Row>
177
+
178
+ <Form.Row label={t('settings.ollama.pull.label')}>
179
+ {/* Pull failures for not-yet-installed models surface here (no model row to attach to). */}
180
+ {Object.entries(state.errors)
181
+ .filter(([name]) => !installed.has(name))
182
+ .map(([name, error]) => (
183
+ <p key={name} className='text-xs text-error-text'>
184
+ {name}: {shortError(error)}
185
+ </p>
186
+ ))}
187
+ {/* Root value is held empty so the trigger always shows the placeholder; the live text is
188
+ the separate `query` driving the input and suggestion filter. */}
189
+ <Combobox.Root
190
+ open={open}
191
+ onOpenChange={setOpen}
192
+ value=''
193
+ onValueChange={() => {}}
194
+ placeholder={t('settings.ollama.pull.placeholder')}
195
+ >
196
+ <Combobox.Trigger classNames='is-full' />
197
+ <Combobox.Portal>
198
+ <Combobox.Content>
199
+ <Combobox.Input
200
+ value={query}
201
+ onValueChange={setQuery}
202
+ placeholder={t('settings.ollama.pull.placeholder')}
203
+ onKeyDown={(event) => {
204
+ if (event.key === 'Enter' && filter.length > 0) {
205
+ handlePull(filter);
206
+ }
207
+ }}
208
+ />
209
+ <Combobox.List>
210
+ {offerCustom && (
211
+ <Combobox.Item
212
+ value={filter}
213
+ label={t('settings.ollama.pull-custom.label', { name: filter })}
214
+ icon='ph--download-simple--regular'
215
+ onSelect={() => handlePull(filter)}
216
+ />
217
+ )}
218
+ {suggestions.map((pick) => (
219
+ <Combobox.Item key={pick} value={pick} label={pick} onSelect={() => handlePull(pick)} />
220
+ ))}
221
+ </Combobox.List>
222
+ <Combobox.Arrow />
223
+ </Combobox.Content>
224
+ </Combobox.Portal>
225
+ </Combobox.Root>
226
+ </Form.Row>
227
+ </Form.Section>
228
+ );
229
+ };
230
+
231
+ /**
232
+ * Condense a verbose service error for inline display: drop Ollama's "(checked: <paths>)" path dump
233
+ * and cap the length. The full message is still logged to the console.
234
+ */
235
+ const shortError = (error: string): string => {
236
+ const head = error.split(/\s*\(checked:/)[0].trim();
237
+ return head.length > 160 ? `${head.slice(0, 160)}…` : head;
238
+ };
239
+
240
+ /** Percent complete for an in-flight pull, or 0 when totals are not yet known. */
241
+ const percentOf = (progress: Ollama.ModelsState['pulls'][string] | undefined): number =>
242
+ progress && progress.total && progress.total > 0 ? Math.round(((progress.completed ?? 0) / progress.total) * 100) : 0;
243
+
244
+ const UNITS = ['B', 'KB', 'MB', 'GB', 'TB'];
245
+
246
+ /** Human-readable byte size (binary units). */
247
+ const formatBytes = (bytes: number): string => {
248
+ let value = bytes;
249
+ let unit = 0;
250
+ while (value >= 1024 && unit < UNITS.length - 1) {
251
+ value /= 1024;
252
+ unit += 1;
253
+ }
254
+ return `${value.toFixed(unit === 0 ? 0 : 1)} ${UNITS[unit]}`;
255
+ };
@@ -12,9 +12,9 @@ import { AppActivationEvents } from '@dxos/app-toolkit';
12
12
  import { Chat } from '@dxos/assistant-toolkit';
13
13
  import { capabilities } from '@dxos/assistant-toolkit/testing';
14
14
  import { Feed, Filter, Ref } from '@dxos/echo';
15
- import { AutomationPlugin } from '@dxos/plugin-automation/testing';
16
- import { initializeIdentity, ClientPlugin } from '@dxos/plugin-client/testing';
15
+ import { ClientPlugin, initializeIdentity } from '@dxos/plugin-client/testing';
17
16
  import { PreviewPlugin } from '@dxos/plugin-preview/testing';
17
+ import { RoutinePlugin } from '@dxos/plugin-routine/testing';
18
18
  import { StorybookPlugin, corePlugins } from '@dxos/plugin-testing';
19
19
  import { Config } from '@dxos/react-client';
20
20
  import { useQuery, useSpaces } from '@dxos/react-client/echo';
@@ -57,7 +57,7 @@ const meta = {
57
57
  yield* Effect.promise(() => space.db.flush({ indexes: true }));
58
58
  }),
59
59
  }),
60
- AutomationPlugin(),
60
+ RoutinePlugin(),
61
61
  AssistantPlugin(),
62
62
  PreviewPlugin(),
63
63
  StorybookPlugin({}),
@@ -4,6 +4,7 @@
4
4
 
5
5
  import React, { forwardRef, useCallback, useEffect, useRef } from 'react';
6
6
 
7
+ import { Provider } from '@dxos/ai';
7
8
  import { Capabilities } from '@dxos/app-framework';
8
9
  import { useAtomCapability, useCapability, useOperationInvoker } from '@dxos/app-framework/ui';
9
10
  import { type AppSurface } from '@dxos/app-toolkit/ui';
@@ -14,7 +15,7 @@ import { useObject, useRegistry } from '@dxos/react-client/echo';
14
15
  import { Panel } from '@dxos/react-ui';
15
16
 
16
17
  import { Chat as ChatComponent, type ChatRootProps } from '#components';
17
- import { useChatProcessor, useChatServices, useOnline, usePresets } from '#hooks';
18
+ import { useChatProcessor, useChatServices, usePresets } from '#hooks';
18
19
  import { type Assistant, AssistantCapabilities, type ChatType } from '#types';
19
20
 
20
21
  export type ChatArticleProps = AppSurface.ObjectSectionProps<ChatType.Chat> & {
@@ -31,8 +32,9 @@ export const ChatArticle = forwardRef<HTMLDivElement, ChatArticleProps>(
31
32
  const space = getSpace(chat) ?? getSpace(companionTo);
32
33
  const runtime = useChatServices({ id: space?.id });
33
34
 
34
- const [online, setOnline] = useOnline();
35
- const { preset, ...chatProps } = usePresets(online);
35
+ const { preset, ...chatProps } = usePresets(settings);
36
+ // The provider is configured in settings; the chat surfaces it as a read-only online indicator.
37
+ const online = preset?.provider === Provider.edge.id;
36
38
  const processor = useChatProcessor({ space, chat, preset, runtime, registry, settings });
37
39
 
38
40
  // Subscribe to the view type via `useObject` so the thread re-renders when ChatOptions changes it;
@@ -75,16 +77,9 @@ export const ChatArticle = forwardRef<HTMLDivElement, ChatArticleProps>(
75
77
  }
76
78
 
77
79
  return (
78
- <ChatComponent.Root
79
- chat={chat}
80
- feed={chat?.feed.target}
81
- db={space?.db}
82
- processor={processor}
83
- onEvent={onEvent}
84
- onSubmit={onSubmit}
85
- >
80
+ <ChatComponent.Root chat={chat} db={space?.db} processor={processor} onEvent={onEvent} onSubmit={onSubmit}>
86
81
  <Panel.Root role={role} ref={forwardedRef}>
87
- <Panel.Toolbar className='bg-toolbar-surface'>
82
+ <Panel.Toolbar>
88
83
  <ChatComponent.Toolbar classNames='dx-document' attendableId={attendableId} companionTo={companionTo} />
89
84
  </Panel.Toolbar>
90
85
  <Panel.Content>
@@ -103,13 +98,7 @@ export const ChatArticle = forwardRef<HTMLDivElement, ChatArticleProps>(
103
98
  <div className='flex flex-col items-center py-2 overflow-hidden'>
104
99
  <ChatComponent.TaskList classNames='max-h-[120px] border border-separator rounded-sm text-description' />
105
100
  </div>
106
- <ChatComponent.Prompt
107
- {...chatProps}
108
- outline
109
- preset={preset?.id}
110
- online={online}
111
- onOnlineChange={setOnline}
112
- />
101
+ <ChatComponent.Prompt {...chatProps} outline preset={preset?.id} online={online} />
113
102
  </div>
114
103
  </ChatComponent.Content>
115
104
  </Panel.Content>
@@ -10,10 +10,10 @@ import { AppAnnotation } from '@dxos/app-toolkit';
10
10
  import { type AppSurface } from '@dxos/app-toolkit/ui';
11
11
  import { Chat } from '@dxos/assistant-toolkit';
12
12
  import { getSpace } from '@dxos/client/echo';
13
- import { Blueprint } from '@dxos/compute';
13
+ import { Skill } from '@dxos/compute';
14
14
  import { Entity, Filter, Obj, Ref, Type } from '@dxos/echo';
15
15
  import { SpaceOperation } from '@dxos/plugin-space';
16
- import { useQuery, useRegistry } from '@dxos/react-client/echo';
16
+ import { useObject, useQuery, useRegistry } from '@dxos/react-client/echo';
17
17
  import { useAsyncEffect } from '@dxos/react-ui';
18
18
 
19
19
  import { useContextBinder } from '#hooks';
@@ -27,7 +27,7 @@ export const ChatCompanion = forwardRef<HTMLDivElement, ChatCompanionProps>(
27
27
  ({ role = 'article', subject: chat, companionTo, attendableId }, forwardedRef) => {
28
28
  const { invokePromise } = useOperationInvoker();
29
29
  const space = getSpace(companionTo);
30
- useBlueprints({ subject: chat, companionTo });
30
+ useSkills({ subject: chat, companionTo });
31
31
 
32
32
  // Persist (and flush) a transient chat before the first request so the agent can resolve
33
33
  // the now-durable conversation feed; subsequent submits are a no-op once persisted.
@@ -39,7 +39,6 @@ export const ChatCompanion = forwardRef<HTMLDivElement, ChatCompanionProps>(
39
39
  await invokePromise(SpaceOperation.AddObject, {
40
40
  object: chat,
41
41
  target: space.db,
42
- hidden: true,
43
42
  });
44
43
  await invokePromise(SpaceOperation.AddRelation, {
45
44
  db: space.db,
@@ -68,32 +67,33 @@ export const ChatCompanion = forwardRef<HTMLDivElement, ChatCompanionProps>(
68
67
  );
69
68
 
70
69
  /**
71
- * Bind blueprints to the context.
70
+ * Bind skills to the context.
72
71
  */
73
72
  // TODO(burdon): Why is this only in the companion?
74
- const useBlueprints = ({ subject: chat, companionTo }: Pick<ChatCompanionProps, 'subject' | 'companionTo'>) => {
73
+ const useSkills = ({ subject: chat, companionTo }: Pick<ChatCompanionProps, 'subject' | 'companionTo'>) => {
75
74
  const registry = useRegistry();
76
75
  const space = getSpace(companionTo);
77
- const feedTarget = chat?.feed.target;
76
+ const [feedSnapshot] = useObject(chat?.feed);
77
+ const feedTarget = Obj.getReactiveOrUndefined(feedSnapshot);
78
78
  const binder = useContextBinder(space, feedTarget);
79
79
 
80
- const blueprintKeys = useMemo(() => {
80
+ const skillKeys = useMemo(() => {
81
81
  const schema = companionTo ? Obj.getType(companionTo) : undefined;
82
82
  if (!schema) {
83
83
  return [] as string[];
84
84
  }
85
85
 
86
- return Option.getOrElse(() => [] as string[])(AppAnnotation.BlueprintsAnnotation.get(Type.getSchema(schema)));
86
+ return Option.getOrElse(() => [] as string[])(AppAnnotation.SkillsAnnotation.get(Type.getSchema(schema)));
87
87
  }, [companionTo]);
88
88
 
89
- const existingBlueprints = useQuery(space?.db, Filter.type(Blueprint.Blueprint));
90
- const pluginBlueprints = useMemo(
89
+ const existingSkills = useQuery(space?.db, Filter.type(Skill.Skill));
90
+ const pluginSkills = useMemo(
91
91
  () =>
92
- existingBlueprints.filter((blueprint) => {
93
- const key = Obj.getMeta(blueprint).key;
94
- return key !== undefined && blueprintKeys.includes(key);
92
+ existingSkills.filter((skill) => {
93
+ const key = Obj.getMeta(skill).key;
94
+ return key !== undefined && skillKeys.includes(key);
95
95
  }),
96
- [existingBlueprints, blueprintKeys],
96
+ [existingSkills, skillKeys],
97
97
  );
98
98
 
99
99
  useAsyncEffect(async () => {
@@ -101,27 +101,27 @@ const useBlueprints = ({ subject: chat, companionTo }: Pick<ChatCompanionProps,
101
101
  return;
102
102
  }
103
103
 
104
- // Bind annotated blueprints: use key URI for registry blueprints (no DB clone needed).
105
- if (blueprintKeys.length > 0) {
106
- const registryKeys = blueprintKeys.filter((key) => {
104
+ // Bind annotated skills: use key URI for registry skills (no DB clone needed).
105
+ if (skillKeys.length > 0) {
106
+ const registryKeys = skillKeys.filter((key) => {
107
107
  const candidate = registry.list().find((e) => Entity.getMeta(e)?.key === key);
108
- return candidate != null && Obj.instanceOf(Blueprint.Blueprint, candidate);
108
+ return candidate != null && Obj.instanceOf(Skill.Skill, candidate);
109
109
  });
110
110
 
111
- // DB-forked blueprints (in space but not in registry).
112
- const dbForks = pluginBlueprints.filter((bp) => !registryKeys.includes(Obj.getMeta(bp).key ?? ''));
111
+ // DB-forked skills (in space but not in registry).
112
+ const dbForks = pluginSkills.filter((bp) => !registryKeys.includes(Obj.getMeta(bp).key ?? ''));
113
113
  if (registryKeys.length > 0) {
114
- await binder.bind({ blueprints: registryKeys.map((key) => Ref.fromURI(Blueprint.registryURI(key))) });
114
+ await binder.bind({ skills: registryKeys.map((key) => Ref.fromURI(Skill.registryURI(key))) });
115
115
  }
116
116
  if (dbForks.length > 0) {
117
- await binder.bind({ blueprints: dbForks.map((blueprint) => Ref.make(blueprint)) });
117
+ await binder.bind({ skills: dbForks.map((skill) => Ref.make(skill)) });
118
118
  }
119
119
  }
120
120
 
121
- if (Obj.instanceOf(Blueprint.Blueprint, companionTo)) {
122
- await binder.bind({ blueprints: [Ref.make(companionTo)] });
121
+ if (Obj.instanceOf(Skill.Skill, companionTo)) {
122
+ await binder.bind({ skills: [Ref.make(companionTo)] });
123
123
  } else {
124
124
  await binder.bind({ objects: [Ref.make(companionTo)] });
125
125
  }
126
- }, [binder, blueprintKeys, pluginBlueprints, companionTo]);
126
+ }, [binder, skillKeys, pluginSkills, companionTo]);
127
127
  };
@@ -4,6 +4,7 @@
4
4
 
5
5
  import React, { useCallback, useState } from 'react';
6
6
 
7
+ import { Provider } from '@dxos/ai';
7
8
  import { useAtomCapability } from '@dxos/app-framework/ui';
8
9
  import { type Chat as ChatTypes } from '@dxos/assistant-toolkit';
9
10
  import { Obj } from '@dxos/echo';
@@ -12,7 +13,7 @@ import { useTranslation } from '@dxos/react-ui';
12
13
  import { ChatDialog as NaturalChatDialog } from '@dxos/react-ui-chat';
13
14
 
14
15
  import { Chat, type ChatRootProps } from '#components';
15
- import { useChatProcessor, useChatServices, useOnline, usePresets } from '#hooks';
16
+ import { useChatProcessor, useChatServices, usePresets } from '#hooks';
16
17
  import { meta } from '#meta';
17
18
  import { type Assistant, AssistantCapabilities } from '#types';
18
19
 
@@ -26,8 +27,8 @@ export const ChatDialog = ({ chat }: ChatDialogProps) => {
26
27
  const db = chat && Obj.getDatabase(chat);
27
28
  const settings = useAtomCapability(AssistantCapabilities.Settings);
28
29
  const runtime = useChatServices({ id: db?.spaceId });
29
- const [online, setOnline] = useOnline();
30
- const { preset, ...chatProps } = usePresets(online);
30
+ const { preset, ...chatProps } = usePresets(settings);
31
+ const online = preset?.provider === Provider.edge.id;
31
32
  const registry = useRegistry();
32
33
  const processor = useChatProcessor({ chat, preset, runtime, registry, settings });
33
34
  // Subscribe via `useObject` so the thread re-renders when ChatOptions changes the view type.
@@ -61,7 +62,7 @@ export const ChatDialog = ({ chat }: ChatDialogProps) => {
61
62
  <Chat.Thread viewType={(chatViewType as Assistant.ChatView | undefined) ?? settings.chatView} />
62
63
  </NaturalChatDialog.Content>
63
64
  <NaturalChatDialog.Footer classNames='p-1.5'>
64
- <Chat.Prompt {...chatProps} preset={preset?.id} online={online} onOnlineChange={setOnline} expandable />
65
+ <Chat.Prompt {...chatProps} preset={preset?.id} online={online} expandable />
65
66
  </NaturalChatDialog.Footer>
66
67
  </NaturalChatDialog.Root>
67
68
  </Chat.Root>