@dxos/plugin-assistant 0.10.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/PLUGIN.mdl +3 -28
  2. package/dist/lib/AssistantPlugin.mjs +2 -0
  3. package/dist/lib/AssistantPlugin.node.mjs +55 -0
  4. package/dist/lib/AssistantPlugin.node.mjs.map +1 -0
  5. package/dist/lib/AssistantPlugin.workerd.mjs +43 -0
  6. package/dist/lib/AssistantPlugin.workerd.mjs.map +1 -0
  7. package/dist/lib/capabilities.mjs +24 -0
  8. package/dist/lib/capabilities.mjs.map +1 -0
  9. package/dist/lib/chunk-AgentArticle.mjs +52 -0
  10. package/dist/lib/chunk-AgentArticle.mjs.map +1 -0
  11. package/dist/lib/chunk-AgentProperties.mjs +35 -0
  12. package/dist/lib/chunk-AgentProperties.mjs.map +1 -0
  13. package/dist/lib/chunk-AssistantPlugin.mjs +88 -0
  14. package/dist/lib/chunk-AssistantPlugin.mjs.map +1 -0
  15. package/dist/lib/chunk-AssistantSettings.mjs +285 -0
  16. package/dist/lib/chunk-AssistantSettings.mjs.map +1 -0
  17. package/dist/lib/chunk-ChatArticle.mjs +121 -0
  18. package/dist/lib/chunk-ChatArticle.mjs.map +1 -0
  19. package/dist/lib/chunk-ChatCompanion.mjs +116 -0
  20. package/dist/lib/chunk-ChatCompanion.mjs.map +1 -0
  21. package/dist/lib/chunk-ChatDialog.mjs +73 -0
  22. package/dist/lib/chunk-ChatDialog.mjs.map +1 -0
  23. package/dist/lib/chunk-IntegrationPrompt.mjs +73 -0
  24. package/dist/lib/chunk-IntegrationPrompt.mjs.map +1 -0
  25. package/dist/lib/chunk-SpaceHomePrompt.mjs +104 -0
  26. package/dist/lib/chunk-SpaceHomePrompt.mjs.map +1 -0
  27. package/dist/lib/chunk-SpaceHomeSuggestions.mjs +60 -0
  28. package/dist/lib/chunk-SpaceHomeSuggestions.mjs.map +1 -0
  29. package/dist/lib/chunk-TracePanel.mjs +127 -0
  30. package/dist/lib/chunk-TracePanel.mjs.map +1 -0
  31. package/dist/lib/chunk-TracePanel2.mjs +7 -0
  32. package/dist/lib/chunk-TracePanel2.mjs.map +1 -0
  33. package/dist/lib/chunk-TriggerStatus.mjs +72 -0
  34. package/dist/lib/chunk-TriggerStatus.mjs.map +1 -0
  35. package/dist/lib/chunk-agent-hydrator.mjs +22 -0
  36. package/dist/lib/chunk-agent-hydrator.mjs.map +1 -0
  37. package/dist/lib/chunk-agent-service.mjs +21 -0
  38. package/dist/lib/chunk-agent-service.mjs.map +1 -0
  39. package/dist/lib/{neutral/ai-context-LIKJYMIN.mjs → chunk-ai-context.mjs} +8 -12
  40. package/dist/lib/chunk-ai-context.mjs.map +1 -0
  41. package/dist/lib/chunk-ai-service.mjs +27 -0
  42. package/dist/lib/chunk-ai-service.mjs.map +1 -0
  43. package/dist/lib/chunk-app-graph-builder.mjs +179 -0
  44. package/dist/lib/chunk-app-graph-builder.mjs.map +1 -0
  45. package/dist/lib/chunk-automation-templates.mjs +99 -0
  46. package/dist/lib/chunk-automation-templates.mjs.map +1 -0
  47. package/dist/lib/chunk-companion-chat-provisioner.mjs +123 -0
  48. package/dist/lib/chunk-companion-chat-provisioner.mjs.map +1 -0
  49. package/dist/lib/chunk-connector.mjs +60 -0
  50. package/dist/lib/chunk-connector.mjs.map +1 -0
  51. package/dist/lib/chunk-constants.mjs +9 -0
  52. package/dist/lib/chunk-constants.mjs.map +1 -0
  53. package/dist/lib/chunk-context.mjs +7 -0
  54. package/dist/lib/chunk-context.mjs.map +1 -0
  55. package/dist/lib/chunk-create-chat.mjs +53 -0
  56. package/dist/lib/chunk-create-chat.mjs.map +1 -0
  57. package/dist/lib/chunk-create-object.mjs +70 -0
  58. package/dist/lib/chunk-create-object.mjs.map +1 -0
  59. package/dist/lib/chunk-edge-model-resolver.mjs +64 -0
  60. package/dist/lib/chunk-edge-model-resolver.mjs.map +1 -0
  61. package/dist/lib/chunk-ensure-companion-chat.mjs +49 -0
  62. package/dist/lib/chunk-ensure-companion-chat.mjs.map +1 -0
  63. package/dist/lib/chunk-extensions.mjs +78 -0
  64. package/dist/lib/chunk-extensions.mjs.map +1 -0
  65. package/dist/lib/chunk-fork-chat.mjs +83 -0
  66. package/dist/lib/chunk-fork-chat.mjs.map +1 -0
  67. package/dist/lib/chunk-generate-home-suggestions.mjs +71 -0
  68. package/dist/lib/chunk-generate-home-suggestions.mjs.map +1 -0
  69. package/dist/lib/chunk-local-model-resolver.mjs +25 -0
  70. package/dist/lib/chunk-local-model-resolver.mjs.map +1 -0
  71. package/dist/lib/chunk-markdown-extension.mjs +27 -0
  72. package/dist/lib/chunk-markdown-extension.mjs.map +1 -0
  73. package/dist/lib/{neutral/chunk-L7AR4VTA.mjs → chunk-meta.mjs} +20 -25
  74. package/dist/lib/chunk-meta.mjs.map +1 -0
  75. package/dist/lib/chunk-operation-handler.mjs +13 -0
  76. package/dist/lib/chunk-operation-handler.mjs.map +1 -0
  77. package/dist/lib/chunk-paths.mjs +8 -0
  78. package/dist/lib/chunk-paths.mjs.map +1 -0
  79. package/dist/lib/chunk-processor.mjs +432 -0
  80. package/dist/lib/chunk-processor.mjs.map +1 -0
  81. package/dist/lib/chunk-react-surface.mjs +177 -0
  82. package/dist/lib/chunk-react-surface.mjs.map +1 -0
  83. package/dist/lib/chunk-run-prompt-in-new-chat.mjs +96 -0
  84. package/dist/lib/chunk-run-prompt-in-new-chat.mjs.map +1 -0
  85. package/dist/lib/chunk-set-current-chat.mjs +43 -0
  86. package/dist/lib/chunk-set-current-chat.mjs.map +1 -0
  87. package/dist/lib/chunk-settings.mjs +23 -0
  88. package/dist/lib/chunk-settings.mjs.map +1 -0
  89. package/dist/lib/chunk-skill-definition.mjs +42 -0
  90. package/dist/lib/chunk-skill-definition.mjs.map +1 -0
  91. package/dist/lib/chunk-skills.mjs +19 -0
  92. package/dist/lib/chunk-skills.mjs.map +1 -0
  93. package/dist/lib/chunk-state.mjs +32 -0
  94. package/dist/lib/chunk-state.mjs.map +1 -0
  95. package/dist/lib/chunk-toggle-trace-panel-debug.mjs +18 -0
  96. package/dist/lib/chunk-toggle-trace-panel-debug.mjs.map +1 -0
  97. package/dist/lib/chunk-toolkit.mjs +12 -0
  98. package/dist/lib/chunk-toolkit.mjs.map +1 -0
  99. package/dist/lib/chunk-types.mjs +332 -0
  100. package/dist/lib/chunk-types.mjs.map +1 -0
  101. package/dist/lib/chunk-update-chat-name.mjs +63 -0
  102. package/dist/lib/chunk-update-chat-name.mjs.map +1 -0
  103. package/dist/lib/components.mjs +2616 -0
  104. package/dist/lib/components.mjs.map +1 -0
  105. package/dist/lib/containers.mjs +17 -0
  106. package/dist/lib/containers.mjs.map +1 -0
  107. package/dist/lib/execution-graph.mjs +961 -0
  108. package/dist/lib/execution-graph.mjs.map +1 -0
  109. package/dist/lib/extensions.mjs +2 -0
  110. package/dist/lib/hooks.mjs +674 -0
  111. package/dist/lib/hooks.mjs.map +1 -0
  112. package/dist/lib/index.mjs +5 -0
  113. package/dist/lib/meta.mjs +2 -0
  114. package/dist/lib/operations.mjs +7 -0
  115. package/dist/lib/operations.mjs.map +1 -0
  116. package/dist/lib/plugin.mjs +9 -0
  117. package/dist/lib/plugin.mjs.map +1 -0
  118. package/dist/lib/plugin.workerd.mjs +2 -0
  119. package/dist/lib/skills.mjs +2 -0
  120. package/dist/lib/testing.mjs +2 -0
  121. package/dist/lib/translations.mjs +207 -0
  122. package/dist/lib/translations.mjs.map +1 -0
  123. package/dist/lib/types.mjs +2 -0
  124. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  125. package/dist/types/src/AssistantPlugin.node.d.ts.map +1 -1
  126. package/dist/types/src/AssistantPlugin.workerd.d.ts.map +1 -1
  127. package/dist/types/src/capabilities/AssistantSurfaces.d.ts +22 -0
  128. package/dist/types/src/capabilities/AssistantSurfaces.d.ts.map +1 -0
  129. package/dist/types/src/capabilities/agent-hydrator.d.ts +1 -1
  130. package/dist/types/src/capabilities/agent-service.d.ts +1 -1
  131. package/dist/types/src/capabilities/agent-service.d.ts.map +1 -1
  132. package/dist/types/src/capabilities/ai-context.d.ts +1 -1
  133. package/dist/types/src/capabilities/ai-service.d.ts +1 -1
  134. package/dist/types/src/capabilities/app-graph-builder.d.ts +12 -1
  135. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  136. package/dist/types/src/capabilities/automation-templates.d.ts +1 -1
  137. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts +1 -1
  138. package/dist/types/src/capabilities/connector.d.ts +1 -1
  139. package/dist/types/src/capabilities/create-object.d.ts +1 -1
  140. package/dist/types/src/capabilities/edge-model-resolver.d.ts +1 -1
  141. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -1
  142. package/dist/types/src/capabilities/index.d.ts +0 -2
  143. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  144. package/dist/types/src/capabilities/local-model-resolver.d.ts +1 -1
  145. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -1
  146. package/dist/types/src/capabilities/markdown-extension.d.ts +1 -1
  147. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  148. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  149. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  150. package/dist/types/src/capabilities/settings.d.ts +1 -1
  151. package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -1
  152. package/dist/types/src/capabilities/standalone-chats-query.test.d.ts +2 -0
  153. package/dist/types/src/capabilities/standalone-chats-query.test.d.ts.map +1 -0
  154. package/dist/types/src/capabilities/state.d.ts +1 -1
  155. package/dist/types/src/capabilities/toolkit.d.ts +1 -1
  156. package/dist/types/src/components/AgentProperties/AgentProperties.d.ts +4 -1
  157. package/dist/types/src/components/AgentProperties/AgentProperties.d.ts.map +1 -1
  158. package/dist/types/src/components/AgentProperties/AgentProperties.stories.d.ts.map +1 -1
  159. package/dist/types/src/components/Chat/Chat.d.ts +21 -8
  160. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  161. package/dist/types/src/components/Chat/{Chat.stories.d.ts → Error.stories.d.ts} +1 -1
  162. package/dist/types/src/components/Chat/Error.stories.d.ts.map +1 -0
  163. package/dist/types/src/components/Chat/context.d.ts +8 -0
  164. package/dist/types/src/components/Chat/context.d.ts.map +1 -1
  165. package/dist/types/src/components/Chat/events.d.ts +5 -0
  166. package/dist/types/src/components/Chat/events.d.ts.map +1 -1
  167. package/dist/types/src/components/Chat/thread.d.ts +42 -0
  168. package/dist/types/src/components/Chat/thread.d.ts.map +1 -0
  169. package/dist/types/src/components/Chat/thread.test.d.ts +2 -0
  170. package/dist/types/src/components/Chat/thread.test.d.ts.map +1 -0
  171. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  172. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts.map +1 -1
  173. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts +5 -3
  174. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts.map +1 -1
  175. package/dist/types/src/components/ChatPrompt/index.d.ts +0 -1
  176. package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -1
  177. package/dist/types/src/components/ChatThread/Anchor.stories.d.ts.map +1 -1
  178. package/dist/types/src/components/ChatThread/ChatThread.d.ts +8 -3
  179. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  180. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +30 -2
  181. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  182. package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -1
  183. package/dist/types/src/components/ChatThread/index.d.ts +1 -0
  184. package/dist/types/src/components/ChatThread/index.d.ts.map +1 -1
  185. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
  186. package/dist/types/src/components/ChatThread/sync/index.d.ts +3 -0
  187. package/dist/types/src/components/ChatThread/sync/index.d.ts.map +1 -0
  188. package/dist/types/src/components/ChatThread/{sync.d.ts → sync/sync.d.ts} +46 -2
  189. package/dist/types/src/components/ChatThread/sync/sync.d.ts.map +1 -0
  190. package/dist/types/src/components/ChatThread/sync/sync.test.d.ts.map +1 -0
  191. package/dist/types/src/components/ChatThread/sync/tool-widget-state.d.ts.map +1 -0
  192. package/dist/types/src/components/ChatThread/sync/tool-widget-state.test.d.ts.map +1 -0
  193. package/dist/types/src/components/ChatThread/widgets/BranchWidget.d.ts +15 -0
  194. package/dist/types/src/components/ChatThread/widgets/BranchWidget.d.ts.map +1 -0
  195. package/dist/types/src/components/ChatThread/widgets/BranchWidget.stories.d.ts +21 -0
  196. package/dist/types/src/components/ChatThread/widgets/BranchWidget.stories.d.ts.map +1 -0
  197. package/dist/types/src/components/ChatThread/widgets/BranchWidget.test.d.ts +2 -0
  198. package/dist/types/src/components/ChatThread/widgets/BranchWidget.test.d.ts.map +1 -0
  199. package/dist/types/src/components/ChatThread/widgets/ReferenceWidget.d.ts.map +1 -1
  200. package/dist/types/src/components/ChatThread/widgets/SuggestionWidget.d.ts.map +1 -1
  201. package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts +1 -2
  202. package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts.map +1 -1
  203. package/dist/types/src/components/ChatThread/widgets/defaults.d.ts +6 -0
  204. package/dist/types/src/components/ChatThread/widgets/defaults.d.ts.map +1 -1
  205. package/dist/types/src/components/ChatThread/widgets/format-time.d.ts +2 -0
  206. package/dist/types/src/components/ChatThread/widgets/format-time.d.ts.map +1 -0
  207. package/dist/types/src/components/ChatThread/widgets/index.d.ts +4 -1
  208. package/dist/types/src/components/ChatThread/widgets/index.d.ts.map +1 -1
  209. package/dist/types/src/components/ChatThread/widgets/is-tool-message.d.ts +3 -0
  210. package/dist/types/src/components/ChatThread/widgets/is-tool-message.d.ts.map +1 -0
  211. package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.d.ts +16 -0
  212. package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.d.ts.map +1 -0
  213. package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.stories.d.ts +210 -0
  214. package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.stories.d.ts.map +1 -0
  215. package/dist/types/src/components/ConnectorAuthMenu/index.d.ts +2 -0
  216. package/dist/types/src/components/ConnectorAuthMenu/index.d.ts.map +1 -0
  217. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts +1 -1
  218. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -1
  219. package/dist/types/src/components/TaskList/TaskList.d.ts +9 -11
  220. package/dist/types/src/components/TaskList/TaskList.d.ts.map +1 -1
  221. package/dist/types/src/components/TaskList/TaskList.stories.d.ts +3 -4
  222. package/dist/types/src/components/TaskList/TaskList.stories.d.ts.map +1 -1
  223. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +1 -2
  224. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -1
  225. package/dist/types/src/components/ToolBlock/index.d.ts +1 -0
  226. package/dist/types/src/components/ToolBlock/index.d.ts.map +1 -1
  227. package/dist/types/src/components/ToolBlock/is-tool-message.d.ts +3 -0
  228. package/dist/types/src/components/ToolBlock/is-tool-message.d.ts.map +1 -0
  229. package/dist/types/src/components/Toolbox/Toolbox.d.ts +1 -1
  230. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  231. package/dist/types/src/components/index.d.ts +1 -0
  232. package/dist/types/src/components/index.d.ts.map +1 -1
  233. package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts +5 -2
  234. package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts.map +1 -1
  235. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts.map +1 -1
  236. package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts +4 -1
  237. package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts.map +1 -1
  238. package/dist/types/src/containers/AssistantSettings/AssistantSettings.d.ts +4 -1
  239. package/dist/types/src/containers/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  240. package/dist/types/src/containers/AssistantSettings/AssistantSettings.stories.d.ts +4 -1
  241. package/dist/types/src/containers/AssistantSettings/AssistantSettings.stories.d.ts.map +1 -1
  242. package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts +4 -6
  243. package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts.map +1 -1
  244. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts.map +1 -1
  245. package/dist/types/src/containers/ChatArticle/ChatArticle.stories.d.ts +22 -1
  246. package/dist/types/src/containers/ChatArticle/ChatArticle.stories.d.ts.map +1 -1
  247. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -1
  248. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts +4 -1
  249. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -1
  250. package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts +4 -7
  251. package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts.map +1 -1
  252. package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts +4 -9
  253. package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts.map +1 -1
  254. package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts +5 -7
  255. package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts.map +1 -1
  256. package/dist/types/src/containers/TracePanel/TracePanel.d.ts +1 -1
  257. package/dist/types/src/containers/TracePanel/TracePanel.d.ts.map +1 -1
  258. package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts.map +1 -1
  259. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts +15 -1
  260. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -1
  261. package/dist/types/src/containers/index.d.ts +0 -1
  262. package/dist/types/src/containers/index.d.ts.map +1 -1
  263. package/dist/types/src/execution-graph/execution-graph.d.ts +12 -1
  264. package/dist/types/src/execution-graph/execution-graph.d.ts.map +1 -1
  265. package/dist/types/src/execution-graph/index.d.ts +1 -1
  266. package/dist/types/src/execution-graph/index.d.ts.map +1 -1
  267. package/dist/types/src/execution-graph/pending-block-status.d.ts.map +1 -1
  268. package/dist/types/src/execution-graph/span-tree.d.ts +17 -0
  269. package/dist/types/src/execution-graph/span-tree.d.ts.map +1 -1
  270. package/dist/types/src/feed-logger.d.ts +1 -1
  271. package/dist/types/src/feed-logger.d.ts.map +1 -1
  272. package/dist/types/src/hooks/index.d.ts +1 -1
  273. package/dist/types/src/hooks/index.d.ts.map +1 -1
  274. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  275. package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -1
  276. package/dist/types/src/hooks/useContextObjects.d.ts +1 -1
  277. package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -1
  278. package/dist/types/src/hooks/useSelectionContext.d.ts +13 -0
  279. package/dist/types/src/hooks/useSelectionContext.d.ts.map +1 -0
  280. package/dist/types/src/hooks/useSelectionContext.test.d.ts +2 -0
  281. package/dist/types/src/hooks/useSelectionContext.test.d.ts.map +1 -0
  282. package/dist/types/src/hooks/useTraceMessages.d.ts.map +1 -1
  283. package/dist/types/src/operations/index.d.ts.map +1 -1
  284. package/dist/types/src/processor/index.d.ts +1 -0
  285. package/dist/types/src/processor/index.d.ts.map +1 -1
  286. package/dist/types/src/processor/processor.d.ts +5 -2
  287. package/dist/types/src/processor/processor.d.ts.map +1 -1
  288. package/dist/types/src/processor/prompt.d.ts +18 -0
  289. package/dist/types/src/processor/prompt.d.ts.map +1 -0
  290. package/dist/types/src/processor/prompt.test.d.ts +2 -0
  291. package/dist/types/src/processor/prompt.test.d.ts.map +1 -0
  292. package/dist/types/src/processor/streaming.node.test.d.ts +2 -0
  293. package/dist/types/src/processor/streaming.node.test.d.ts.map +1 -0
  294. package/dist/types/src/skills/assistant/skill.d.ts.map +1 -1
  295. package/dist/types/src/templates/scaffold.d.ts +1 -1
  296. package/dist/types/src/templates/scaffold.d.ts.map +1 -1
  297. package/dist/types/src/translations.d.ts.map +1 -1
  298. package/dist/types/src/types/AssistantCapabilities.d.ts +1 -1
  299. package/dist/types/src/types/AssistantCapabilities.d.ts.map +1 -1
  300. package/dist/types/src/types/AssistantOperation.d.ts +2 -13
  301. package/dist/types/src/types/AssistantOperation.d.ts.map +1 -1
  302. package/dist/types/src/types/ChatSurface.d.ts +2 -2
  303. package/dist/types/src/types/ChatSurface.d.ts.map +1 -1
  304. package/dist/types/src/types/Ollama.d.ts +1 -1
  305. package/dist/types/src/types/Ollama.d.ts.map +1 -1
  306. package/dist/types/tsconfig.tsbuildinfo +1 -1
  307. package/dx.config.ts +1 -0
  308. package/package.json +106 -105
  309. package/src/AssistantPlugin.node.ts +1 -2
  310. package/src/AssistantPlugin.test.ts +60 -62
  311. package/src/AssistantPlugin.ts +1 -10
  312. package/src/AssistantPlugin.workerd.ts +1 -2
  313. package/src/capabilities/AssistantSurfaces.tsx +86 -0
  314. package/src/capabilities/agent-service.ts +1 -1
  315. package/src/capabilities/app-graph-builder.ts +31 -17
  316. package/src/capabilities/companion-chat-provisioner.ts +12 -11
  317. package/src/capabilities/connector.ts +3 -3
  318. package/src/capabilities/edge-model-resolver.ts +5 -2
  319. package/src/capabilities/index.ts +0 -2
  320. package/src/capabilities/react-surface.ts +135 -0
  321. package/src/capabilities/skill-definition.ts +4 -0
  322. package/src/capabilities/standalone-chats-query.test.ts +51 -0
  323. package/src/capabilities/state.ts +1 -1
  324. package/src/components/AgentProperties/AgentProperties.stories.tsx +6 -7
  325. package/src/components/AgentProperties/AgentProperties.tsx +37 -30
  326. package/src/components/Chat/Chat.tsx +275 -59
  327. package/src/components/Chat/{Chat.stories.tsx → Error.stories.tsx} +1 -1
  328. package/src/components/Chat/context.ts +8 -0
  329. package/src/components/Chat/events.ts +5 -0
  330. package/src/components/Chat/thread.test.ts +127 -0
  331. package/src/components/Chat/thread.ts +87 -0
  332. package/src/components/ChatPrompt/ChatActions.tsx +8 -8
  333. package/src/components/ChatPrompt/ChatMcpErrors.tsx +2 -2
  334. package/src/components/ChatPrompt/ChatOptions.stories.tsx +2 -1
  335. package/src/components/ChatPrompt/ChatOptions.tsx +5 -5
  336. package/src/components/ChatPrompt/ChatPrompt.tsx +33 -6
  337. package/src/components/ChatPrompt/index.ts +0 -1
  338. package/src/components/ChatThread/Anchor.stories.tsx +2 -1
  339. package/src/components/ChatThread/ChatThread.stories.tsx +99 -4
  340. package/src/components/ChatThread/ChatThread.tsx +34 -6
  341. package/src/components/ChatThread/Link.tsx +1 -0
  342. package/src/components/ChatThread/index.ts +2 -0
  343. package/src/components/ChatThread/registry.tsx +28 -4
  344. package/src/components/ChatThread/sync/index.ts +6 -0
  345. package/src/components/ChatThread/{sync.test.ts → sync/sync.test.ts} +167 -7
  346. package/src/components/ChatThread/{sync.ts → sync/sync.ts} +97 -3
  347. package/src/components/ChatThread/{tool-widget-state.ts → sync/tool-widget-state.ts} +1 -3
  348. package/src/components/ChatThread/widgets/BranchWidget.stories.tsx +83 -0
  349. package/src/components/ChatThread/widgets/BranchWidget.test.ts +55 -0
  350. package/src/components/ChatThread/widgets/BranchWidget.tsx +61 -0
  351. package/src/components/ChatThread/widgets/FallbackWidget.tsx +2 -2
  352. package/src/components/ChatThread/widgets/ReasoningWidget.ts +1 -1
  353. package/src/components/ChatThread/widgets/ReferenceWidget.ts +1 -6
  354. package/src/components/ChatThread/widgets/SuggestionWidget.ts +12 -3
  355. package/src/components/ChatThread/widgets/SummaryWidget.tsx +1 -1
  356. package/src/components/ChatThread/widgets/ToolWidget.tsx +15 -9
  357. package/src/components/ChatThread/widgets/defaults.ts +7 -1
  358. package/src/components/ChatThread/widgets/format-time.ts +45 -0
  359. package/src/components/ChatThread/widgets/index.ts +4 -1
  360. package/src/components/ChatThread/widgets/is-tool-message.ts +13 -0
  361. package/src/components/ConnectorAuthMenu/ConnectorAuthMenu.stories.tsx +177 -0
  362. package/src/components/ConnectorAuthMenu/ConnectorAuthMenu.tsx +82 -0
  363. package/src/components/ConnectorAuthMenu/index.ts +5 -0
  364. package/src/components/ProcessTree/ProcessTree.stories.tsx +1 -1
  365. package/src/components/TaskList/TaskList.stories.tsx +19 -26
  366. package/src/components/TaskList/TaskList.tsx +32 -104
  367. package/src/components/ToolBlock/ToolBlock.tsx +1 -5
  368. package/src/components/ToolBlock/index.ts +1 -0
  369. package/src/components/ToolBlock/is-tool-message.ts +13 -0
  370. package/src/components/Toolbox/Toolbox.tsx +1 -1
  371. package/src/components/index.ts +1 -0
  372. package/src/containers/AgentArticle/AgentArticle.stories.tsx +18 -11
  373. package/src/containers/AgentArticle/AgentArticle.tsx +27 -151
  374. package/src/containers/AgentProperties/AgentProperties.tsx +21 -17
  375. package/src/containers/AssistantSettings/AssistantSettings.tsx +2 -0
  376. package/src/containers/AssistantSettings/OllamaModels.tsx +6 -4
  377. package/src/containers/ChatArticle/ChatArticle.stories.tsx +200 -27
  378. package/src/containers/ChatArticle/ChatArticle.tsx +25 -5
  379. package/src/containers/ChatCompanion/ChatCompanion.tsx +45 -10
  380. package/src/containers/ChatDialog/ChatDialog.tsx +4 -1
  381. package/src/containers/IntegrationPrompt/IntegrationPrompt.tsx +9 -6
  382. package/src/containers/SpaceHomePrompt/SpaceHomePrompt.tsx +2 -0
  383. package/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.tsx +40 -39
  384. package/src/containers/TracePanel/TracePanel.stories.tsx +9 -4
  385. package/src/containers/TracePanel/TracePanel.tsx +22 -6
  386. package/src/containers/TriggerStatus/TriggerStatus.tsx +9 -16
  387. package/src/containers/index.ts +0 -1
  388. package/src/execution-graph/SPEC.md +60 -2
  389. package/src/execution-graph/execution-graph.ts +15 -2
  390. package/src/execution-graph/index.ts +1 -0
  391. package/src/execution-graph/pending-block-status.ts +3 -2
  392. package/src/execution-graph/span-tree.test.ts +87 -1
  393. package/src/execution-graph/span-tree.ts +95 -0
  394. package/src/feed-logger.ts +6 -6
  395. package/src/hooks/index.ts +1 -1
  396. package/src/hooks/useChatProcessor.ts +2 -1
  397. package/src/hooks/useChatToolbarActions.ts +22 -19
  398. package/src/hooks/useContextObjects.ts +9 -3
  399. package/src/hooks/useSelectionContext.test.ts +93 -0
  400. package/src/hooks/useSelectionContext.ts +72 -0
  401. package/src/hooks/useSkillRegistry.ts +1 -1
  402. package/src/hooks/useTraceMessages.ts +5 -3
  403. package/src/operations/create-chat.ts +2 -2
  404. package/src/operations/fork-chat.ts +2 -2
  405. package/src/operations/generate-home-suggestions.test.ts +2 -2
  406. package/src/operations/index.ts +0 -1
  407. package/src/operations/prompt.node.test.ts +1 -1
  408. package/src/paths.ts +3 -3
  409. package/src/processor/index.ts +1 -0
  410. package/src/processor/processor.node.test.ts +1 -1
  411. package/src/processor/processor.ts +33 -5
  412. package/src/processor/prompt.test.ts +37 -0
  413. package/src/processor/prompt.ts +42 -0
  414. package/src/processor/streaming.node.test.ts +196 -0
  415. package/src/skills/assistant/skill.node.test.ts +2 -2
  416. package/src/skills/assistant/skill.ts +3 -5
  417. package/src/templates/routine-templates.test.ts +1 -2
  418. package/src/templates/scaffold.ts +3 -3
  419. package/src/testing/data/trace-timeline-multiple.dx.json +1 -1
  420. package/src/testing/data/trace-timeline-remote.dx.json +1 -1
  421. package/src/testing/data/trace-timeline.dx.json +1 -2
  422. package/src/testing/trace-timeline.node.test.ts +3 -3
  423. package/src/translations.ts +11 -10
  424. package/src/types/AssistantCapabilities.ts +1 -1
  425. package/src/types/AssistantOperation.ts +8 -31
  426. package/src/types/ChatSurface.ts +3 -3
  427. package/src/types/Ollama.ts +1 -1
  428. package/dist/lib/neutral/AgentArticle-GV6EEW3I.mjs +0 -161
  429. package/dist/lib/neutral/AgentArticle-GV6EEW3I.mjs.map +0 -7
  430. package/dist/lib/neutral/AgentProperties-LFTEYJ54.mjs +0 -40
  431. package/dist/lib/neutral/AgentProperties-LFTEYJ54.mjs.map +0 -7
  432. package/dist/lib/neutral/AssistantPlugin.mjs +0 -10
  433. package/dist/lib/neutral/AssistantPlugin.mjs.map +0 -7
  434. package/dist/lib/neutral/AssistantPlugin.node.mjs +0 -72
  435. package/dist/lib/neutral/AssistantPlugin.node.mjs.map +0 -7
  436. package/dist/lib/neutral/AssistantPlugin.workerd.mjs +0 -13
  437. package/dist/lib/neutral/AssistantPlugin.workerd.mjs.map +0 -7
  438. package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs +0 -302
  439. package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs.map +0 -7
  440. package/dist/lib/neutral/ChatArticle-OO7GGEFW.mjs +0 -8
  441. package/dist/lib/neutral/ChatArticle-OO7GGEFW.mjs.map +0 -7
  442. package/dist/lib/neutral/ChatCompanion-GIFJRY6I.mjs +0 -128
  443. package/dist/lib/neutral/ChatCompanion-GIFJRY6I.mjs.map +0 -7
  444. package/dist/lib/neutral/ChatDialog-5MXN4MXS.mjs +0 -74
  445. package/dist/lib/neutral/ChatDialog-5MXN4MXS.mjs.map +0 -7
  446. package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs +0 -72
  447. package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs.map +0 -7
  448. package/dist/lib/neutral/PlanArticle-VPK2IYWU.mjs +0 -34
  449. package/dist/lib/neutral/PlanArticle-VPK2IYWU.mjs.map +0 -7
  450. package/dist/lib/neutral/SpaceHomePrompt-ISAB76LD.mjs +0 -114
  451. package/dist/lib/neutral/SpaceHomePrompt-ISAB76LD.mjs.map +0 -7
  452. package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs +0 -63
  453. package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs.map +0 -7
  454. package/dist/lib/neutral/TracePanel-JKNWADJ4.mjs +0 -12
  455. package/dist/lib/neutral/TracePanel-JKNWADJ4.mjs.map +0 -7
  456. package/dist/lib/neutral/TriggerStatus-FURRBHYA.mjs +0 -95
  457. package/dist/lib/neutral/TriggerStatus-FURRBHYA.mjs.map +0 -7
  458. package/dist/lib/neutral/agent-hydrator-OBO3RHLO.mjs +0 -23
  459. package/dist/lib/neutral/agent-hydrator-OBO3RHLO.mjs.map +0 -7
  460. package/dist/lib/neutral/agent-service-XFJ4VQMT.mjs +0 -32
  461. package/dist/lib/neutral/agent-service-XFJ4VQMT.mjs.map +0 -7
  462. package/dist/lib/neutral/ai-context-LIKJYMIN.mjs.map +0 -7
  463. package/dist/lib/neutral/ai-service-DM6YXWUC.mjs +0 -44
  464. package/dist/lib/neutral/ai-service-DM6YXWUC.mjs.map +0 -7
  465. package/dist/lib/neutral/app-graph-builder-OPVOEQY7.mjs +0 -249
  466. package/dist/lib/neutral/app-graph-builder-OPVOEQY7.mjs.map +0 -7
  467. package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs +0 -97
  468. package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs.map +0 -7
  469. package/dist/lib/neutral/capabilities/index.mjs +0 -47
  470. package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
  471. package/dist/lib/neutral/chunk-5IHQ52KJ.mjs +0 -9
  472. package/dist/lib/neutral/chunk-5IHQ52KJ.mjs.map +0 -7
  473. package/dist/lib/neutral/chunk-6Q4OBGIK.mjs +0 -420
  474. package/dist/lib/neutral/chunk-6Q4OBGIK.mjs.map +0 -7
  475. package/dist/lib/neutral/chunk-BXI2R4OO.mjs +0 -410
  476. package/dist/lib/neutral/chunk-BXI2R4OO.mjs.map +0 -7
  477. package/dist/lib/neutral/chunk-CMPLPDYE.mjs +0 -30
  478. package/dist/lib/neutral/chunk-CMPLPDYE.mjs.map +0 -7
  479. package/dist/lib/neutral/chunk-GPHT3HYS.mjs +0 -8
  480. package/dist/lib/neutral/chunk-GPHT3HYS.mjs.map +0 -7
  481. package/dist/lib/neutral/chunk-HKLSFB5I.mjs +0 -90
  482. package/dist/lib/neutral/chunk-HKLSFB5I.mjs.map +0 -7
  483. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
  484. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
  485. package/dist/lib/neutral/chunk-L7AR4VTA.mjs.map +0 -7
  486. package/dist/lib/neutral/chunk-LS72HWMM.mjs +0 -42
  487. package/dist/lib/neutral/chunk-LS72HWMM.mjs.map +0 -7
  488. package/dist/lib/neutral/chunk-OZWZGIV2.mjs +0 -12
  489. package/dist/lib/neutral/chunk-OZWZGIV2.mjs.map +0 -7
  490. package/dist/lib/neutral/chunk-QOKLFHUS.mjs +0 -13
  491. package/dist/lib/neutral/chunk-QOKLFHUS.mjs.map +0 -7
  492. package/dist/lib/neutral/chunk-SCTHQVIJ.mjs +0 -155
  493. package/dist/lib/neutral/chunk-SCTHQVIJ.mjs.map +0 -7
  494. package/dist/lib/neutral/chunk-U4LTLBAX.mjs +0 -56
  495. package/dist/lib/neutral/chunk-U4LTLBAX.mjs.map +0 -7
  496. package/dist/lib/neutral/chunk-UPKFUZ6V.mjs +0 -115
  497. package/dist/lib/neutral/chunk-UPKFUZ6V.mjs.map +0 -7
  498. package/dist/lib/neutral/chunk-V2Y4XE3O.mjs +0 -12
  499. package/dist/lib/neutral/chunk-V2Y4XE3O.mjs.map +0 -7
  500. package/dist/lib/neutral/chunk-VTK5R4H3.mjs +0 -9
  501. package/dist/lib/neutral/chunk-VTK5R4H3.mjs.map +0 -7
  502. package/dist/lib/neutral/chunk-XVGEJWJX.mjs +0 -133
  503. package/dist/lib/neutral/chunk-XVGEJWJX.mjs.map +0 -7
  504. package/dist/lib/neutral/companion-chat-provisioner-IQV5VIVE.mjs +0 -126
  505. package/dist/lib/neutral/companion-chat-provisioner-IQV5VIVE.mjs.map +0 -7
  506. package/dist/lib/neutral/components/index.mjs +0 -2527
  507. package/dist/lib/neutral/components/index.mjs.map +0 -7
  508. package/dist/lib/neutral/connector-ITLLTBPZ.mjs +0 -70
  509. package/dist/lib/neutral/connector-ITLLTBPZ.mjs.map +0 -7
  510. package/dist/lib/neutral/containers/index.mjs +0 -31
  511. package/dist/lib/neutral/containers/index.mjs.map +0 -7
  512. package/dist/lib/neutral/create-chat-YGVZZYGP.mjs +0 -56
  513. package/dist/lib/neutral/create-chat-YGVZZYGP.mjs.map +0 -7
  514. package/dist/lib/neutral/create-object-5PAEJ6KM.mjs +0 -76
  515. package/dist/lib/neutral/create-object-5PAEJ6KM.mjs.map +0 -7
  516. package/dist/lib/neutral/edge-model-resolver-WDJWDZTT.mjs +0 -55
  517. package/dist/lib/neutral/edge-model-resolver-WDJWDZTT.mjs.map +0 -7
  518. package/dist/lib/neutral/ensure-companion-chat-AMOF3C66.mjs +0 -58
  519. package/dist/lib/neutral/ensure-companion-chat-AMOF3C66.mjs.map +0 -7
  520. package/dist/lib/neutral/execution-graph/index.mjs +0 -977
  521. package/dist/lib/neutral/execution-graph/index.mjs.map +0 -7
  522. package/dist/lib/neutral/extensions/index.mjs +0 -8
  523. package/dist/lib/neutral/extensions/index.mjs.map +0 -7
  524. package/dist/lib/neutral/fork-chat-RMAAYYQF.mjs +0 -92
  525. package/dist/lib/neutral/fork-chat-RMAAYYQF.mjs.map +0 -7
  526. package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs +0 -93
  527. package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs.map +0 -7
  528. package/dist/lib/neutral/hooks/index.mjs +0 -877
  529. package/dist/lib/neutral/hooks/index.mjs.map +0 -7
  530. package/dist/lib/neutral/index.mjs +0 -42
  531. package/dist/lib/neutral/index.mjs.map +0 -7
  532. package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs +0 -24
  533. package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs.map +0 -7
  534. package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs +0 -41
  535. package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs.map +0 -7
  536. package/dist/lib/neutral/meta.json +0 -1
  537. package/dist/lib/neutral/meta.mjs +0 -12
  538. package/dist/lib/neutral/meta.mjs.map +0 -7
  539. package/dist/lib/neutral/migrations-7DEMVBOG.mjs +0 -28
  540. package/dist/lib/neutral/migrations-7DEMVBOG.mjs.map +0 -7
  541. package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs +0 -18
  542. package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs.map +0 -7
  543. package/dist/lib/neutral/operation-handler-2LEN45GP.mjs +0 -8
  544. package/dist/lib/neutral/operation-handler-2LEN45GP.mjs.map +0 -7
  545. package/dist/lib/neutral/operations/index.mjs +0 -8
  546. package/dist/lib/neutral/operations/index.mjs.map +0 -7
  547. package/dist/lib/neutral/plugin.mjs +0 -16
  548. package/dist/lib/neutral/plugin.mjs.map +0 -7
  549. package/dist/lib/neutral/plugin.workerd.mjs +0 -13
  550. package/dist/lib/neutral/plugin.workerd.mjs.map +0 -7
  551. package/dist/lib/neutral/react-surface-HEJEK44F.mjs +0 -171
  552. package/dist/lib/neutral/react-surface-HEJEK44F.mjs.map +0 -7
  553. package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs +0 -28
  554. package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs.map +0 -7
  555. package/dist/lib/neutral/run-prompt-in-new-chat-RNUJE2FM.mjs +0 -102
  556. package/dist/lib/neutral/run-prompt-in-new-chat-RNUJE2FM.mjs.map +0 -7
  557. package/dist/lib/neutral/set-current-chat-VWBPSIMZ.mjs +0 -48
  558. package/dist/lib/neutral/set-current-chat-VWBPSIMZ.mjs.map +0 -7
  559. package/dist/lib/neutral/settings-7Q3RITIT.mjs +0 -28
  560. package/dist/lib/neutral/settings-7Q3RITIT.mjs.map +0 -7
  561. package/dist/lib/neutral/skill-definition-553MQRTR.mjs +0 -8
  562. package/dist/lib/neutral/skill-definition-553MQRTR.mjs.map +0 -7
  563. package/dist/lib/neutral/skills/index.mjs +0 -8
  564. package/dist/lib/neutral/skills/index.mjs.map +0 -7
  565. package/dist/lib/neutral/state-4LGAKSSD.mjs +0 -34
  566. package/dist/lib/neutral/state-4LGAKSSD.mjs.map +0 -7
  567. package/dist/lib/neutral/testing.mjs +0 -8
  568. package/dist/lib/neutral/testing.mjs.map +0 -7
  569. package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs +0 -21
  570. package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs.map +0 -7
  571. package/dist/lib/neutral/toolkit-ETWLG5NT.mjs +0 -8
  572. package/dist/lib/neutral/toolkit-ETWLG5NT.mjs.map +0 -7
  573. package/dist/lib/neutral/translations.mjs +0 -217
  574. package/dist/lib/neutral/translations.mjs.map +0 -7
  575. package/dist/lib/neutral/types/index.mjs +0 -24
  576. package/dist/lib/neutral/types/index.mjs.map +0 -7
  577. package/dist/lib/neutral/update-chat-name-IJJELRR6.mjs +0 -61
  578. package/dist/lib/neutral/update-chat-name-IJJELRR6.mjs.map +0 -7
  579. package/dist/types/src/capabilities/migrations.d.ts +0 -5
  580. package/dist/types/src/capabilities/migrations.d.ts.map +0 -1
  581. package/dist/types/src/capabilities/navigation-resolver.d.ts +0 -5
  582. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +0 -1
  583. package/dist/types/src/components/Chat/Chat.stories.d.ts.map +0 -1
  584. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts +0 -10
  585. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +0 -1
  586. package/dist/types/src/components/ChatThread/sync.d.ts.map +0 -1
  587. package/dist/types/src/components/ChatThread/sync.test.d.ts.map +0 -1
  588. package/dist/types/src/components/ChatThread/tool-widget-state.d.ts.map +0 -1
  589. package/dist/types/src/components/ChatThread/tool-widget-state.test.d.ts.map +0 -1
  590. package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts +0 -6
  591. package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts.map +0 -1
  592. package/dist/types/src/containers/PlanArticle/index.d.ts +0 -2
  593. package/dist/types/src/containers/PlanArticle/index.d.ts.map +0 -1
  594. package/dist/types/src/hooks/useFlush.d.ts +0 -6
  595. package/dist/types/src/hooks/useFlush.d.ts.map +0 -1
  596. package/dist/types/src/operations/resolve-navigation-targets.d.ts +0 -5
  597. package/dist/types/src/operations/resolve-navigation-targets.d.ts.map +0 -1
  598. package/src/AssistantPlugin.conversations.json +0 -1
  599. package/src/capabilities/migrations.ts +0 -28
  600. package/src/capabilities/navigation-resolver.ts +0 -20
  601. package/src/capabilities/react-surface.tsx +0 -177
  602. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +0 -42
  603. package/src/components/ChatThread/DEBUG.md +0 -64
  604. package/src/containers/PlanArticle/PlanArticle.tsx +0 -37
  605. package/src/containers/PlanArticle/index.ts +0 -5
  606. package/src/hooks/useFlush.ts +0 -35
  607. package/src/operations/resolve-navigation-targets.ts +0 -44
  608. /package/dist/types/src/components/ChatThread/{sync.test.d.ts → sync/sync.test.d.ts} +0 -0
  609. /package/dist/types/src/components/ChatThread/{tool-widget-state.d.ts → sync/tool-widget-state.d.ts} +0 -0
  610. /package/dist/types/src/components/ChatThread/{tool-widget-state.test.d.ts → sync/tool-widget-state.test.d.ts} +0 -0
  611. /package/src/components/ChatThread/{tool-widget-state.test.ts → sync/tool-widget-state.test.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-agent-hydrator.mjs","names":[],"sources":["../../src/capabilities/agent-hydrator.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Cause from 'effect/Cause';\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { AgentService, ServiceResolver } from '@dxos/compute';\nimport { log } from '@dxos/log';\n\n//\n// Capability Module\n//\n// Rehydrates durable agent processes once {@link ActivationEvents.ProcessManagerReady} fires.\n//\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const runtime = yield* Capability.get(Capabilities.ProcessManagerRuntime);\n\n runtime.runFork(\n Effect.gen(function* () {\n const service = yield* AgentService.AgentService;\n yield* service.hydrate();\n }).pipe(\n Effect.provide(ServiceResolver.provide({}, AgentService.AgentService)),\n Effect.catchAllCause((cause) =>\n Effect.sync(() => log.warn('agent hydrate failed', { cause: Cause.pretty(cause) })),\n ),\n ),\n );\n\n return Capability.contributes(Capabilities.Null, null);\n }),\n);\n"],"mappings":";;;;;;;AAiBA,IAAA,yBAAe,WAAW,WACxB,OAAO,WAAW,aAAa;CAG7B,CAAA,OAFuB,WAAW,IAAI,aAAa,qBAAqB,EAAA,CAEhE,QACN,OAAO,IAAI,aAAa;EAEtB,QAAO,OADgB,aAAa,aAAA,CACrB,QAAQ;CACzB,CAAC,CAAC,CAAC,KACD,OAAO,QAAQ,gBAAgB,QAAQ,CAAC,GAAG,aAAa,YAAY,CAAC,GACrE,OAAO,eAAe,UACpB,OAAO,WAAW,IAAI,KAAK,wBAAwB,EAAE,OAAO,MAAM,OAAO,KAAK,EAAE,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC,CAAC,CACpF,CACF,CACF;CAEA,OAAO,WAAW,YAAY,aAAa,MAAM,IAAI;AACvD,CAAC,CACH"}
@@ -0,0 +1,21 @@
1
+ import { AgentService, LayerSpec } from "@dxos/compute";
2
+ import { Capabilities, Capability } from "@dxos/app-framework";
3
+ import * as Effect from "effect/Effect";
4
+ import { RoutineCapabilities } from "@dxos/plugin-routine";
5
+ import { AgentService as AgentService$1 } from "@dxos/agent-runtime";
6
+ import * as Layer from "effect/Layer";
7
+ import { ProcessManager } from "@dxos/compute-runtime";
8
+ //#region src/capabilities/agent-service.ts
9
+ var AgentServiceSpec = LayerSpec.make({
10
+ affinity: "application",
11
+ requires: [ProcessManager.ProcessManagerService, Capability.Service],
12
+ provides: [AgentService.AgentService]
13
+ }, () => Layer.unwrapEffect(Effect.gen(function* () {
14
+ const strategies = yield* Capability.getAll(RoutineCapabilities.AgentDelegationStrategy);
15
+ return AgentService$1.layer({ delegationStrategy: strategies[0] });
16
+ })));
17
+ var agent_service_default = Capability.makeModule(() => Effect.succeed([Capability.contributes(Capabilities.LayerSpec, AgentServiceSpec)]));
18
+ //#endregion
19
+ export { agent_service_default as default };
20
+
21
+ //# sourceMappingURL=chunk-agent-service.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-agent-service.mjs","names":[],"sources":["../../src/capabilities/agent-service.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\n\nimport { AgentService as AgentServiceRuntime } from '@dxos/agent-runtime';\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { AgentService, LayerSpec } from '@dxos/compute';\nimport { ProcessManager } from '@dxos/compute-runtime';\nimport { RoutineCapabilities } from '@dxos/plugin-routine';\n\n//\n// Capability Module\n//\n// Owns the application-affinity {@link AgentService} layer for process-backed agents.\n//\n\nconst AgentServiceSpec = LayerSpec.make(\n {\n affinity: 'application',\n requires: [ProcessManager.ProcessManagerService, Capability.Service],\n provides: [AgentService.AgentService],\n },\n () =>\n Layer.unwrapEffect(\n Effect.gen(function* () {\n // Optional supervisor behaviour, contributed by a plugin that knows the agent/plan model.\n const strategies = yield* Capability.getAll(RoutineCapabilities.AgentDelegationStrategy);\n return AgentServiceRuntime.layer({\n delegationStrategy: strategies[0],\n });\n }),\n ),\n);\n\nexport default Capability.makeModule(() =>\n Effect.succeed([Capability.contributes(Capabilities.LayerSpec, AgentServiceSpec)]),\n);\n"],"mappings":";;;;;;;;AAmBA,IAAM,mBAAmB,UAAU,KACjC;CACE,UAAU;CACV,UAAU,CAAC,eAAe,uBAAuB,WAAW,OAAO;CACnE,UAAU,CAAC,aAAa,YAAY;AACtC,SAEE,MAAM,aACJ,OAAO,IAAI,aAAa;CAEtB,MAAM,aAAa,OAAO,WAAW,OAAO,oBAAoB,uBAAuB;CACvF,OAAO,eAAoB,MAAM,EAC/B,oBAAoB,WAAW,GACjC,CAAC;AACH,CAAC,CACH,CACJ;AAEA,IAAA,wBAAe,WAAW,iBACxB,OAAO,QAAQ,CAAC,WAAW,YAAY,aAAa,WAAW,gBAAgB,CAAC,CAAC,CACnF"}
@@ -1,14 +1,10 @@
1
- import "./chunk-J5LGTIGS.mjs";
2
-
3
- // src/capabilities/ai-context.ts
4
- import * as Effect from "effect/Effect";
5
- import { Capabilities, Capability } from "@dxos/app-framework";
6
1
  import { Harness } from "@dxos/assistant";
2
+ import { Capabilities, Capability } from "@dxos/app-framework";
3
+ import * as Effect from "effect/Effect";
4
+ //#region src/capabilities/ai-context.ts
7
5
  var harnessSpec = Harness.layerSpec;
8
- var ai_context_default = Capability.makeModule(() => Effect.succeed([
9
- Capability.contributes(Capabilities.LayerSpec, harnessSpec)
10
- ]));
11
- export {
12
- ai_context_default as default
13
- };
14
- //# sourceMappingURL=ai-context-LIKJYMIN.mjs.map
6
+ var ai_context_default = Capability.makeModule(() => Effect.succeed([Capability.contributes(Capabilities.LayerSpec, harnessSpec)]));
7
+ //#endregion
8
+ export { ai_context_default as default };
9
+
10
+ //# sourceMappingURL=chunk-ai-context.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-ai-context.mjs","names":[],"sources":["../../src/capabilities/ai-context.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Harness } from '@dxos/assistant';\nimport { type LayerSpec } from '@dxos/compute';\n\n//\n// Capability Module\n//\n// Contributes the process-affinity `LayerSpec` that materialises\n// {@link Harness.HarnessService} from the resolution context's `conversation` DXN.\n//\n\n// Annotated so the contributed `LayerSpec` type is nameable in the emitted declaration.\nconst harnessSpec: LayerSpec.LayerSpec = Harness.layerSpec;\n\nexport default Capability.makeModule(() =>\n Effect.succeed([Capability.contributes(Capabilities.LayerSpec, harnessSpec)]),\n);\n"],"mappings":";;;;AAkBA,IAAM,cAAmC,QAAQ;AAEjD,IAAA,qBAAe,WAAW,iBACxB,OAAO,QAAQ,CAAC,WAAW,YAAY,aAAa,WAAW,WAAW,CAAC,CAAC,CAC9E"}
@@ -0,0 +1,27 @@
1
+ import { AppCapabilities } from "@dxos/app-toolkit";
2
+ import { Credential, LayerSpec } from "@dxos/compute";
3
+ import { Capabilities, Capability } from "@dxos/app-framework";
4
+ import { AiModelResolver, AiService, Provider } from "@dxos/ai";
5
+ import * as Effect from "effect/Effect";
6
+ import * as Layer from "effect/Layer";
7
+ import * as Context from "effect/Context";
8
+ //#region src/capabilities/ai-service.ts
9
+ var ai_service_default = Capability.makeModule(Effect.fnUntraced(function* (options) {
10
+ const combinedLayer = (yield* Capability.getAll(AppCapabilities.AiModelResolver)).reduce((acc, resolver) => resolver.pipe(Layer.provide(acc)), AiModelResolver.AiModelResolver.fromModelMap({ name: "Fallback" }, Provider.edge.id, Effect.succeed({})));
11
+ let aiServiceLayer = AiModelResolver.AiModelResolver.buildAiService.pipe(Layer.provide(combinedLayer));
12
+ const aiServiceMiddleware = options?.aiServiceMiddleware;
13
+ if (aiServiceMiddleware) aiServiceLayer = aiServiceLayer.pipe(Layer.map((context) => {
14
+ const aiService = Context.get(context, AiService.AiService);
15
+ return Context.make(AiService.AiService, aiServiceMiddleware(aiService));
16
+ }));
17
+ const aiServiceSpec = LayerSpec.make({
18
+ affinity: "space",
19
+ requires: [Credential.CredentialsService],
20
+ provides: [AiService.AiService]
21
+ }, () => aiServiceLayer);
22
+ return [Capability.contributes(Capabilities.LayerSpec, aiServiceSpec)];
23
+ }));
24
+ //#endregion
25
+ export { ai_service_default as default };
26
+
27
+ //# sourceMappingURL=chunk-ai-service.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-ai-service.mjs","names":[],"sources":["../../src/capabilities/ai-service.ts"],"sourcesContent":["//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\n\nimport { AiModelResolver, AiService, Provider } from '@dxos/ai';\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { Credential, LayerSpec } from '@dxos/compute';\n\nimport type { AssistantPluginOptions } from '#types';\n\nexport default Capability.makeModule<AssistantPluginOptions | void, Capability.Any[]>(\n Effect.fnUntraced(function* (options) {\n const resolvers = yield* Capability.getAll(AppCapabilities.AiModelResolver);\n\n // TODO(dmaretskyi): Extract function to reduce them.\n const combinedLayer = resolvers.reduce(\n (acc, resolver) => resolver.pipe(Layer.provide(acc)),\n // Empty resolver as the terminal fallback (provider is irrelevant — the map is empty).\n AiModelResolver.AiModelResolver.fromModelMap({ name: 'Fallback' }, Provider.edge.id, Effect.succeed({})),\n );\n\n let aiServiceLayer: Layer.Layer<AiService.AiService, never, Credential.CredentialsService> =\n AiModelResolver.AiModelResolver.buildAiService.pipe(Layer.provide(combinedLayer));\n\n const aiServiceMiddleware = options?.aiServiceMiddleware;\n if (aiServiceMiddleware) {\n aiServiceLayer = aiServiceLayer.pipe(\n Layer.map((context) => {\n const aiService = Context.get(context, AiService.AiService);\n return Context.make(AiService.AiService, aiServiceMiddleware(aiService));\n }),\n );\n }\n\n const aiServiceSpec = LayerSpec.make(\n {\n affinity: 'space',\n requires: [Credential.CredentialsService],\n provides: [AiService.AiService],\n },\n () => aiServiceLayer,\n );\n\n return [Capability.contributes(Capabilities.LayerSpec, aiServiceSpec)];\n }),\n);\n"],"mappings":";;;;;;;;AAeA,IAAA,qBAAe,WAAW,WACxB,OAAO,WAAW,WAAW,SAAS;CAIpC,MAAM,iBAAgB,OAHG,WAAW,OAAO,gBAAgB,eAAe,EAAA,CAG1C,QAC7B,KAAK,aAAa,SAAS,KAAK,MAAM,QAAQ,GAAG,CAAC,GAEnD,gBAAgB,gBAAgB,aAAa,EAAE,MAAM,WAAW,GAAG,SAAS,KAAK,IAAI,OAAO,QAAQ,CAAC,CAAC,CAAC,CACzG;CAEA,IAAI,iBACF,gBAAgB,gBAAgB,eAAe,KAAK,MAAM,QAAQ,aAAa,CAAC;CAElF,MAAM,sBAAsB,SAAS;CACrC,IAAI,qBACF,iBAAiB,eAAe,KAC9B,MAAM,KAAK,YAAY;EACrB,MAAM,YAAY,QAAQ,IAAI,SAAS,UAAU,SAAS;EAC1D,OAAO,QAAQ,KAAK,UAAU,WAAW,oBAAoB,SAAS,CAAC;CACzE,CAAC,CACH;CAGF,MAAM,gBAAgB,UAAU,KAC9B;EACE,UAAU;EACV,UAAU,CAAC,WAAW,kBAAkB;EACxC,UAAU,CAAC,UAAU,SAAS;CAChC,SACM,cACR;CAEA,OAAO,CAAC,WAAW,YAAY,aAAa,WAAW,aAAa,CAAC;AACvE,CAAC,CACH"}
@@ -0,0 +1,179 @@
1
+ import { n as getChatsPath } from "./chunk-paths.mjs";
2
+ import { AppCapabilities, AppNode, AppNodeMatcher, AppSpace, GraphPath, LayoutOperation, TypeSection } from "@dxos/app-toolkit";
3
+ import { Instructions, Operation, Project } from "@dxos/compute";
4
+ import { Capability } from "@dxos/app-framework";
5
+ import { Position } from "@dxos/util";
6
+ import { Chat, RunInstructions } from "@dxos/assistant-toolkit";
7
+ import { DXN, Database, Filter, Obj, Query, Type } from "@dxos/echo";
8
+ import { ASSISTANT_COMPANION_VARIANT, meta } from "#meta";
9
+ import { Sequence } from "@dxos/conductor";
10
+ import { AssistantCapabilities, AssistantOperation } from "#types";
11
+ import * as Effect from "effect/Effect";
12
+ import * as Option from "effect/Option";
13
+ import { GraphBuilder, Node, NodeMatcher } from "@dxos/plugin-graph";
14
+ import { pipe } from "effect/Function";
15
+ import { Attention } from "@dxos/react-ui-attention";
16
+ import { invariant } from "@dxos/invariant";
17
+ import { isSpace } from "@dxos/client/echo";
18
+ import { ClientCapabilities } from "@dxos/plugin-client";
19
+ import { SpaceOperation } from "@dxos/plugin-space";
20
+ //#region src/capabilities/app-graph-builder.ts
21
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/capabilities/app-graph-builder.ts";
22
+ /** Operation definitions to seed as `PersistentOperation` records for automation / triggers. */
23
+ var computeOperationsToImport = [RunInstructions];
24
+ /**
25
+ * Chats belonging to the top-level Chats section: every chat minus the two kinds that already appear
26
+ * elsewhere in the tree. A chat sourcing a `CompanionTo` relation belongs to its primary object's
27
+ * companion panel; a chat parented to a `Project` is that project's navtree child (plugin-projects
28
+ * `projectChats`). Without the second exclusion a project chat appears twice.
29
+ *
30
+ * The project exclusion subtracts every project child rather than just chats — `children()` takes no
31
+ * type filter, and subtracting a non-chat from a chat-typed source is a no-op.
32
+ */
33
+ var standaloneChatsQuery = Query.without(Query.without(Query.select(Filter.type(Chat.Chat)), Query.select(Filter.type(Chat.Chat)).sourceOf(Chat.CompanionTo).source()), Query.select(Filter.type(Project.Project)).children());
34
+ /** Match ECHO objects that are NOT chats. */
35
+ var whenNonChatObject = NodeMatcher.whenAll(NodeMatcher.whenEchoObject, NodeMatcher.whenNot(NodeMatcher.whenEchoTypeMatches(Chat.Chat)));
36
+ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function* () {
37
+ yield* Capability.Service;
38
+ const extensions = yield* Effect.all([
39
+ GraphBuilder.createExtension({
40
+ id: GraphPath.GroupSegments.ai,
41
+ match: AppNodeMatcher.whenSpace,
42
+ connector: (space) => Effect.succeed([AppNode.makeGroup({
43
+ id: GraphPath.GroupSegments.ai,
44
+ type: GraphPath.GroupTypes.ai,
45
+ label: ["nav-tree-group-ai.label", { ns: meta.profile.key }],
46
+ space,
47
+ position: 300
48
+ })])
49
+ }),
50
+ GraphBuilder.createTypeExtension({
51
+ id: "root",
52
+ type: Chat.Chat,
53
+ actions: (chat) => {
54
+ return Effect.succeed([Node.makeAction({
55
+ id: AssistantOperation.UpdateChatName.meta.key,
56
+ data: () => Effect.gen(function* () {
57
+ const db = Obj.getDatabase(chat);
58
+ invariant(db, void 0, {
59
+ "~LogMeta": "~LogMeta",
60
+ F: __dxlog_file,
61
+ L: 94,
62
+ S: this,
63
+ A: ["db", ""]
64
+ });
65
+ yield* Operation.invoke(AssistantOperation.UpdateChatName, { chat }, { spaceId: db.spaceId });
66
+ }),
67
+ properties: {
68
+ label: ["chat-update-name.label", { ns: meta.profile.key }],
69
+ icon: "ph--magic-wand--regular",
70
+ disposition: "list-item"
71
+ }
72
+ })]);
73
+ }
74
+ }),
75
+ GraphBuilder.createExtension({
76
+ id: "assistant",
77
+ match: NodeMatcher.whenRoot,
78
+ actions: () => Effect.succeed([Node.makeAction({
79
+ id: "importComputeOperations",
80
+ data: Effect.fnUntraced(function* () {
81
+ const capabilities = yield* Capability.Service;
82
+ const client = yield* Capability.get(ClientCapabilities.Client);
83
+ const space = AppSpace.getActiveSpace(client, capabilities) ?? AppSpace.getPersonalSpace(client);
84
+ if (!space) return;
85
+ for (const definition of computeOperationsToImport) {
86
+ const key = definition.meta.key;
87
+ if (!key) continue;
88
+ if ((yield* Effect.promise(() => space.db.query(Filter.and(Filter.type(Operation.PersistentOperation), Filter.key(key))).run())).length === 0) space.db.add(Operation.serialize(definition));
89
+ }
90
+ yield* Database.flush();
91
+ }),
92
+ properties: {
93
+ label: ["import-compute-operations.label", { ns: meta.profile.key }],
94
+ icon: "ph--download-simple--regular"
95
+ }
96
+ }), Node.makeAction({
97
+ id: AssistantOperation.ToggleTracePanelDebug.meta.key,
98
+ data: () => Operation.invoke(AssistantOperation.ToggleTracePanelDebug, {}),
99
+ properties: {
100
+ label: ["toggle-trace-panel-debug.label", { ns: meta.profile.key }],
101
+ icon: "ph--brackets-curly--regular"
102
+ }
103
+ })])
104
+ }),
105
+ GraphBuilder.createExtension({
106
+ id: "companionChat",
107
+ match: whenNonChatObject,
108
+ connector: (object, get) => Effect.gen(function* () {
109
+ const state = get(yield* Capability.get(AssistantCapabilities.State));
110
+ const cache = get(yield* Capability.get(AssistantCapabilities.CompanionChatCache));
111
+ const objectUri = Obj.getURI(object);
112
+ const chat = pipe(Option.fromNullable(state.currentChat[objectUri]), Option.flatMap((dxnStr) => Option.fromNullable(DXN.tryMake(dxnStr))), Option.flatMap((dxn) => Option.fromNullable(Obj.getDatabase(object)?.makeRef(dxn))), Option.map((ref) => get(Obj.atom(ref))), Option.filter(Obj.isObject), Option.orElse(() => pipe(Option.fromNullable(cache[objectUri]), Option.filter(Obj.isObject))), Option.getOrNull);
113
+ return [AppNode.makeCompanion({
114
+ variant: ASSISTANT_COMPANION_VARIANT,
115
+ label: ["assistant-chat.label", { ns: meta.profile.key }],
116
+ icon: "ph--sparkle--regular",
117
+ data: chat,
118
+ position: Position.first
119
+ })];
120
+ }).pipe(Effect.orDie)
121
+ }),
122
+ GraphBuilder.createExtension({
123
+ id: "invocations",
124
+ match: NodeMatcher.whenAny(NodeMatcher.whenEchoTypeMatches(Sequence.Sequence), NodeMatcher.whenEchoTypeMatches(Instructions.Instructions)),
125
+ connector: () => Effect.succeed([AppNode.makeCompanion({
126
+ variant: "invocations",
127
+ label: ["invocations.label", { ns: meta.profile.key }],
128
+ icon: "ph--clock-countdown--regular",
129
+ data: "invocations"
130
+ })])
131
+ }),
132
+ GraphBuilder.createExtension({
133
+ id: "trace",
134
+ match: NodeMatcher.whenRoot,
135
+ connector: () => Effect.succeed([AppNode.makeDeckCompanion({
136
+ id: Attention.linkedSegment("trace"),
137
+ label: ["trace.label", { ns: meta.profile.key }],
138
+ icon: "ph--line-segments--regular",
139
+ data: "trace",
140
+ position: Position.last
141
+ })])
142
+ }),
143
+ TypeSection.createTypeSectionExtension(Chat.Chat, {
144
+ query: standaloneChatsQuery,
145
+ match: AppNodeMatcher.whenNavTreeGroup(GraphPath.GroupTypes.ai),
146
+ groupSegment: GraphPath.GroupSegments.ai,
147
+ urlKey: "chat"
148
+ }),
149
+ GraphBuilder.createExtension({
150
+ id: "chatsSectionActions",
151
+ match: (node) => {
152
+ const space = isSpace(node.properties.space) ? node.properties.space : void 0;
153
+ return node.type === Type.getTypename(Chat.Chat) && space ? Option.some(space) : Option.none();
154
+ },
155
+ actions: (space) => Effect.succeed([Node.makeAction({
156
+ id: "create-chat",
157
+ data: () => Effect.gen(function* () {
158
+ const { object: chat } = yield* Operation.invoke(AssistantOperation.CreateChat, { db: space.db }, { spaceId: space.db.spaceId });
159
+ const { subject } = yield* Operation.invoke(SpaceOperation.AddObject, {
160
+ object: chat,
161
+ target: space.db,
162
+ targetNodeId: getChatsPath(space.db.spaceId)
163
+ }, { spaceId: space.db.spaceId });
164
+ yield* Operation.invoke(LayoutOperation.Open, { subject: [...subject] }, { spaceId: space.db.spaceId });
165
+ }),
166
+ properties: {
167
+ label: ["create-chat.label", { ns: meta.profile.key }],
168
+ icon: "ph--plus--regular",
169
+ disposition: "list-item-primary"
170
+ }
171
+ })])
172
+ })
173
+ ]);
174
+ return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);
175
+ }));
176
+ //#endregion
177
+ export { app_graph_builder_default as default, standaloneChatsQuery };
178
+
179
+ //# sourceMappingURL=chunk-app-graph-builder.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-app-graph-builder.mjs","names":[],"sources":["../../src/capabilities/app-graph-builder.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport { pipe } from 'effect/Function';\nimport * as Option from 'effect/Option';\n\nimport { Capability } from '@dxos/app-framework';\nimport {\n AppCapabilities,\n AppNode,\n AppNodeMatcher,\n AppSpace,\n GraphPath,\n LayoutOperation,\n TypeSection,\n} from '@dxos/app-toolkit';\nimport { Chat, RunInstructions } from '@dxos/assistant-toolkit';\nimport { isSpace } from '@dxos/client/echo';\nimport { Instructions, Operation, Project } from '@dxos/compute';\nimport { Sequence } from '@dxos/conductor';\nimport { Database, DXN, Filter, Obj, Query, type Ref, Type } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { GraphBuilder, Node, NodeMatcher } from '@dxos/plugin-graph';\nimport { SpaceOperation } from '@dxos/plugin-space';\nimport { Attention } from '@dxos/react-ui-attention';\nimport { Position } from '@dxos/util';\n\nimport { ASSISTANT_COMPANION_VARIANT, meta } from '#meta';\nimport { AssistantCapabilities, AssistantOperation } from '#types';\n\nimport { getChatsPath } from '../paths';\n\n/** Operation definitions to seed as `PersistentOperation` records for automation / triggers. */\nconst computeOperationsToImport = [RunInstructions] as const;\n\n/**\n * Chats belonging to the top-level Chats section: every chat minus the two kinds that already appear\n * elsewhere in the tree. A chat sourcing a `CompanionTo` relation belongs to its primary object's\n * companion panel; a chat parented to a `Project` is that project's navtree child (plugin-projects\n * `projectChats`). Without the second exclusion a project chat appears twice.\n *\n * The project exclusion subtracts every project child rather than just chats — `children()` takes no\n * type filter, and subtracting a non-chat from a chat-typed source is a no-op.\n */\nexport const standaloneChatsQuery = Query.without(\n Query.without(\n Query.select(Filter.type(Chat.Chat)),\n Query.select(Filter.type(Chat.Chat)).sourceOf(Chat.CompanionTo).source(),\n ),\n Query.select(Filter.type(Project.Project)).children(),\n);\n\n/** Match ECHO objects that are NOT chats. */\nconst whenNonChatObject = NodeMatcher.whenAll(\n NodeMatcher.whenEchoObject,\n NodeMatcher.whenNot(NodeMatcher.whenEchoTypeMatches(Chat.Chat)),\n);\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n\n const extensions = yield* Effect.all([\n // AI section group — created here so it shows only when the assistant plugin is active.\n GraphBuilder.createExtension({\n id: GraphPath.GroupSegments.ai,\n match: AppNodeMatcher.whenSpace,\n connector: (space) =>\n Effect.succeed([\n AppNode.makeGroup({\n id: GraphPath.GroupSegments.ai,\n type: GraphPath.GroupTypes.ai,\n label: ['nav-tree-group-ai.label', { ns: meta.profile.key }],\n space,\n position: 300,\n }),\n ]),\n }),\n\n GraphBuilder.createTypeExtension({\n id: 'root',\n type: Chat.Chat,\n actions: (chat) => {\n return Effect.succeed([\n Node.makeAction({\n id: AssistantOperation.UpdateChatName.meta.key,\n data: () =>\n Effect.gen(function* () {\n // TODO(dmaretskyi): This goes away when composer will have unified operation invocations.\n const db = Obj.getDatabase(chat);\n invariant(db);\n yield* Operation.invoke(AssistantOperation.UpdateChatName, { chat }, { spaceId: db.spaceId });\n }),\n properties: {\n label: ['chat-update-name.label', { ns: meta.profile.key }],\n icon: 'ph--magic-wand--regular',\n disposition: 'list-item',\n },\n }),\n ]);\n },\n }),\n\n GraphBuilder.createExtension({\n id: 'assistant',\n match: NodeMatcher.whenRoot,\n actions: () =>\n Effect.succeed([\n Node.makeAction({\n id: 'importComputeOperations',\n data: Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n const client = yield* Capability.get(ClientCapabilities.Client);\n const space = AppSpace.getActiveSpace(client, capabilities) ?? AppSpace.getPersonalSpace(client);\n if (!space) {\n return;\n }\n for (const definition of computeOperationsToImport) {\n const key = definition.meta.key;\n if (!key) {\n continue;\n }\n const existing = yield* Effect.promise(\n (): Promise<Operation.PersistentOperation[]> =>\n space.db.query(Filter.and(Filter.type(Operation.PersistentOperation), Filter.key(key))).run(),\n );\n if (existing.length === 0) {\n space.db.add(Operation.serialize(definition));\n }\n }\n yield* Database.flush();\n }),\n properties: {\n label: ['import-compute-operations.label', { ns: meta.profile.key }],\n icon: 'ph--download-simple--regular',\n },\n }),\n Node.makeAction({\n id: AssistantOperation.ToggleTracePanelDebug.meta.key,\n data: () => Operation.invoke(AssistantOperation.ToggleTracePanelDebug, {}),\n properties: {\n label: ['toggle-trace-panel-debug.label', { ns: meta.profile.key }],\n icon: 'ph--brackets-curly--regular',\n },\n }),\n ]),\n }),\n\n // Don't show assistant companion when a chat is already the primary object.\n GraphBuilder.createExtension({\n id: 'companionChat',\n match: whenNonChatObject,\n connector: (object, get) =>\n Effect.gen(function* () {\n const state = get(yield* Capability.get(AssistantCapabilities.State));\n const cache = get(yield* Capability.get(AssistantCapabilities.CompanionChatCache));\n const objectUri = Obj.getURI(object);\n\n // Resolve chat from persisted state or transient cache.\n const chat = pipe(\n Option.fromNullable(state.currentChat[objectUri]),\n Option.flatMap((dxnStr) => Option.fromNullable(DXN.tryMake(dxnStr))),\n Option.flatMap((dxn) => Option.fromNullable(Obj.getDatabase(object)?.makeRef(dxn))),\n Option.map((ref) => get(Obj.atom(ref as Ref.Ref<Obj.Unknown>))),\n Option.filter(Obj.isObject),\n Option.orElse(() => pipe(Option.fromNullable(cache[objectUri]), Option.filter(Obj.isObject))),\n Option.getOrNull,\n );\n\n return [\n AppNode.makeCompanion({\n variant: ASSISTANT_COMPANION_VARIANT,\n label: ['assistant-chat.label', { ns: meta.profile.key }],\n icon: 'ph--sparkle--regular',\n data: chat,\n position: Position.first,\n }),\n ];\n }).pipe(Effect.orDie),\n }),\n\n GraphBuilder.createExtension({\n id: 'invocations',\n match: NodeMatcher.whenAny(\n NodeMatcher.whenEchoTypeMatches(Sequence.Sequence),\n NodeMatcher.whenEchoTypeMatches(Instructions.Instructions),\n ),\n connector: () =>\n Effect.succeed([\n AppNode.makeCompanion({\n variant: 'invocations',\n label: ['invocations.label', { ns: meta.profile.key }],\n icon: 'ph--clock-countdown--regular',\n data: 'invocations',\n }),\n ]),\n }),\n\n GraphBuilder.createExtension({\n id: 'trace',\n match: NodeMatcher.whenRoot,\n connector: () =>\n Effect.succeed([\n AppNode.makeDeckCompanion({\n id: Attention.linkedSegment('trace'),\n label: ['trace.label', { ns: meta.profile.key }],\n icon: 'ph--line-segments--regular',\n data: 'trace',\n position: Position.last,\n }),\n ]),\n }),\n\n // Section node: standalone Chat.Chat objects per AI group (companions and project chats excluded).\n TypeSection.createTypeSectionExtension(Chat.Chat, {\n query: standaloneChatsQuery,\n match: AppNodeMatcher.whenNavTreeGroup(GraphPath.GroupTypes.ai),\n groupSegment: GraphPath.GroupSegments.ai,\n urlKey: 'chat',\n }),\n\n // Create-chat action on the Chats section header.\n GraphBuilder.createExtension({\n id: 'chatsSectionActions',\n match: (node) => {\n const space = isSpace(node.properties.space) ? node.properties.space : undefined;\n return node.type === Type.getTypename(Chat.Chat) && space ? Option.some(space) : Option.none();\n },\n actions: (space) =>\n Effect.succeed([\n Node.makeAction({\n id: 'create-chat',\n data: () =>\n Effect.gen(function* () {\n const { object: chat } = yield* Operation.invoke(\n AssistantOperation.CreateChat,\n { db: space.db },\n { spaceId: space.db.spaceId },\n );\n const { subject } = yield* Operation.invoke(\n SpaceOperation.AddObject,\n { object: chat, target: space.db, targetNodeId: getChatsPath(space.db.spaceId) },\n { spaceId: space.db.spaceId },\n );\n yield* Operation.invoke(\n LayoutOperation.Open,\n { subject: [...subject] },\n { spaceId: space.db.spaceId },\n );\n }),\n properties: {\n label: ['create-chat.label', { ns: meta.profile.key }],\n icon: 'ph--plus--regular',\n disposition: 'list-item-primary',\n },\n }),\n ]),\n }),\n ]);\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);\n }),\n);\n"],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import { Instructions, Skill, Trigger } from "@dxos/compute";
2
+ import { Capability } from "@dxos/app-framework";
3
+ import { Ref } from "@dxos/echo";
4
+ import * as Effect from "effect/Effect";
5
+ import { RoutineCapabilities, makeRoutine } from "@dxos/plugin-routine";
6
+ //#region src/templates/scaffold.ts
7
+ /**
8
+ * Scaffold a timer-driven routine as an in-memory {@link Routine.Routine} draft graph. The caller's save
9
+ * flow (the companion's Save button) persists it; nothing is added to the database here, so the function is
10
+ * always safe to call without DB access.
11
+ *
12
+ * The trigger starts disabled so the user can review the schedule and instructions before activating.
13
+ */
14
+ var makeScheduledRoutine = ({ name, text, skillKeys, cron }) => {
15
+ const skills = skillKeys.map((key) => Ref.fromURI(Skill.registryURI(key)));
16
+ return Effect.succeed(makeRoutine({
17
+ name,
18
+ instructions: Instructions.make({
19
+ name,
20
+ text,
21
+ skills
22
+ }),
23
+ trigger: Trigger.make({
24
+ spec: Trigger.specTimer(cron),
25
+ enabled: false
26
+ })
27
+ }));
28
+ };
29
+ //#endregion
30
+ //#region src/templates/daily-digest.ts
31
+ /** Inbox supplies new messages; database queries recent objects; markdown writes the digest document. */
32
+ var SKILL_KEYS$1 = [
33
+ "org.dxos.skill.inbox",
34
+ "org.dxos.skill.database",
35
+ "org.dxos.skill.markdown"
36
+ ];
37
+ /** Runs daily by default; the user edits the schedule and the scope by opening the trigger and routine. */
38
+ var DEFAULT_CRON$1 = "0 9 * * *";
39
+ var DEFAULT_INSTRUCTIONS$1 = `\
40
+ Summarize recent activity in this space into a markdown document.
41
+
42
+ Review new messages in the inbox and recently changed objects. Produce a short digest grouped by theme,
43
+ highlight anything that needs attention, and write it to a markdown document titled with the current date.
44
+ `;
45
+ var dailyDigest = {
46
+ id: "org.dxos.routine.dailyDigest",
47
+ label: "Daily Digest",
48
+ icon: "ph--list-bullets--regular",
49
+ appliesTo: (subject) => subject == null,
50
+ scaffold: ({ name }) => makeScheduledRoutine({
51
+ name: name ?? "Daily Digest",
52
+ text: DEFAULT_INSTRUCTIONS$1,
53
+ skillKeys: SKILL_KEYS$1,
54
+ cron: DEFAULT_CRON$1
55
+ })
56
+ };
57
+ //#endregion
58
+ //#region src/templates/research-brief.ts
59
+ /** The research skill drives the brief; web-search, markdown, and database tools support it. */
60
+ var SKILL_KEYS = [
61
+ "org.dxos.skill.research",
62
+ "org.dxos.skill.webSearch",
63
+ "org.dxos.skill.markdown",
64
+ "org.dxos.skill.database"
65
+ ];
66
+ /** Runs weekly by default; the user edits the schedule and the topic by opening the trigger and routine. */
67
+ var DEFAULT_CRON = "0 9 * * 1";
68
+ var DEFAULT_INSTRUCTIONS = `\
69
+ Research the topic below and write a concise brief to a new markdown document.
70
+
71
+ Topic: (replace with the topic you want tracked)
72
+
73
+ Gather current information with the web-search and research tools. Summarize the key developments, link the
74
+ sources you used, and create a markdown document titled with the topic and the current date.
75
+ `;
76
+ //#endregion
77
+ //#region src/templates/index.ts
78
+ /** Generic, subject-less routine templates contributed alongside plugin-routine's Blank. */
79
+ var routineTemplates = [{
80
+ id: "org.dxos.routine.researchBrief",
81
+ label: "Research Brief",
82
+ icon: "ph--newspaper--regular",
83
+ appliesTo: (subject) => subject == null,
84
+ scaffold: ({ name }) => makeScheduledRoutine({
85
+ name: name ?? "Research Brief",
86
+ text: DEFAULT_INSTRUCTIONS,
87
+ skillKeys: SKILL_KEYS,
88
+ cron: DEFAULT_CRON
89
+ })
90
+ }, dailyDigest];
91
+ //#endregion
92
+ //#region src/capabilities/automation-templates.ts
93
+ var automation_templates_default = Capability.makeModule(Effect.fnUntraced(function* () {
94
+ return routineTemplates.map((template) => Capability.contributes(RoutineCapabilities.Template, template));
95
+ }));
96
+ //#endregion
97
+ export { automation_templates_default as default };
98
+
99
+ //# sourceMappingURL=chunk-automation-templates.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-automation-templates.mjs","names":[],"sources":["../../src/templates/scaffold.ts","../../src/templates/daily-digest.ts","../../src/templates/research-brief.ts","../../src/templates/index.ts","../../src/capabilities/automation-templates.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Instructions, type Routine, Skill, Trigger } from '@dxos/compute';\nimport { Ref } from '@dxos/echo';\nimport { makeRoutine } from '@dxos/plugin-routine';\n\nexport type ScheduledRoutineOptions = {\n name: string;\n text: string;\n skillKeys: readonly string[];\n cron: string;\n};\n\n/**\n * Scaffold a timer-driven routine as an in-memory {@link Routine.Routine} draft graph. The caller's save\n * flow (the companion's Save button) persists it; nothing is added to the database here, so the function is\n * always safe to call without DB access.\n *\n * The trigger starts disabled so the user can review the schedule and instructions before activating.\n */\nexport const makeScheduledRoutine = ({\n name,\n text,\n skillKeys,\n cron,\n}: ScheduledRoutineOptions): Effect.Effect<Routine.Routine, never, never> => {\n const skills = skillKeys.map((key) => Ref.fromURI(Skill.registryURI(key)));\n return Effect.succeed(\n makeRoutine({\n name,\n instructions: Instructions.make({ name, text, skills }),\n trigger: Trigger.make({ spec: Trigger.specTimer(cron), enabled: false }),\n }),\n );\n};\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport { type RoutineCapabilities } from '@dxos/plugin-routine';\n\nimport { makeScheduledRoutine } from './scaffold';\n\n/** Inbox supplies new messages; database queries recent objects; markdown writes the digest document. */\nconst SKILL_KEYS = ['org.dxos.skill.inbox', 'org.dxos.skill.database', 'org.dxos.skill.markdown'] as const;\n\n/** Runs daily by default; the user edits the schedule and the scope by opening the trigger and routine. */\nconst DEFAULT_CRON = '0 9 * * *';\n\nconst DEFAULT_INSTRUCTIONS = `\\\nSummarize recent activity in this space into a markdown document.\n\nReview new messages in the inbox and recently changed objects. Produce a short digest grouped by theme,\nhighlight anything that needs attention, and write it to a markdown document titled with the current date.\n`;\n\nexport const dailyDigest: RoutineCapabilities.Template = {\n id: 'org.dxos.routine.dailyDigest',\n label: 'Daily Digest',\n icon: 'ph--list-bullets--regular',\n // Scheduled space-level digest — not meaningful for a specific object companion.\n appliesTo: (subject) => subject == null,\n scaffold: ({ name }) =>\n makeScheduledRoutine({\n name: name ?? 'Daily Digest',\n text: DEFAULT_INSTRUCTIONS,\n skillKeys: SKILL_KEYS,\n cron: DEFAULT_CRON,\n }),\n};\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport { type RoutineCapabilities } from '@dxos/plugin-routine';\n\nimport { makeScheduledRoutine } from './scaffold';\n\n/** The research skill drives the brief; web-search, markdown, and database tools support it. */\nconst SKILL_KEYS = [\n 'org.dxos.skill.research',\n 'org.dxos.skill.webSearch',\n 'org.dxos.skill.markdown',\n 'org.dxos.skill.database',\n] as const;\n\n/** Runs weekly by default; the user edits the schedule and the topic by opening the trigger and routine. */\nconst DEFAULT_CRON = '0 9 * * 1';\n\nconst DEFAULT_INSTRUCTIONS = `\\\nResearch the topic below and write a concise brief to a new markdown document.\n\nTopic: (replace with the topic you want tracked)\n\nGather current information with the web-search and research tools. Summarize the key developments, link the\nsources you used, and create a markdown document titled with the topic and the current date.\n`;\n\nexport const researchBrief: RoutineCapabilities.Template = {\n id: 'org.dxos.routine.researchBrief',\n label: 'Research Brief',\n icon: 'ph--newspaper--regular',\n // Scheduled space-level research — not meaningful for a specific object companion.\n appliesTo: (subject) => subject == null,\n scaffold: ({ name }) =>\n makeScheduledRoutine({\n name: name ?? 'Research Brief',\n text: DEFAULT_INSTRUCTIONS,\n skillKeys: SKILL_KEYS,\n cron: DEFAULT_CRON,\n }),\n};\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport { type RoutineCapabilities } from '@dxos/plugin-routine';\n\nimport { dailyDigest } from './daily-digest';\nimport { researchBrief } from './research-brief';\n\n/** Generic, subject-less routine templates contributed alongside plugin-routine's Blank. */\nexport const routineTemplates: RoutineCapabilities.Template[] = [researchBrief, dailyDigest];\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { RoutineCapabilities } from '@dxos/plugin-routine';\n\nimport { routineTemplates } from '../templates';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n return routineTemplates.map((template) => Capability.contributes(RoutineCapabilities.Template, template));\n }),\n);\n"],"mappings":";;;;;;;;;;;;;AAwBA,IAAa,wBAAwB,EACnC,MACA,MACA,WACA,WAC2E;CAC3E,MAAM,SAAS,UAAU,KAAK,QAAQ,IAAI,QAAQ,MAAM,YAAY,GAAG,CAAC,CAAC;CACzE,OAAO,OAAO,QACZ,YAAY;EACV;EACA,cAAc,aAAa,KAAK;GAAE;GAAM;GAAM;EAAO,CAAC;EACtD,SAAS,QAAQ,KAAK;GAAE,MAAM,QAAQ,UAAU,IAAI;GAAG,SAAS;EAAM,CAAC;CACzE,CAAC,CACH;AACF;;;;AC7BA,IAAM,eAAa;CAAC;CAAwB;CAA2B;AAAyB;;AAGhG,IAAM,iBAAe;AAErB,IAAM,yBAAuB;;;;;;AAO7B,IAAa,cAA4C;CACvD,IAAI;CACJ,OAAO;CACP,MAAM;CAEN,YAAY,YAAY,WAAW;CACnC,WAAW,EAAE,WACX,qBAAqB;EACnB,MAAM,QAAQ;EACd,MAAM;EACN,WAAW;EACX,MAAM;CACR,CAAC;AACL;;;;ACzBA,IAAM,aAAa;CACjB;CACA;CACA;CACA;AACF;;AAGA,IAAM,eAAe;AAErB,IAAM,uBAAuB;;;;;;;;;;;ACT7B,IAAa,mBAAmD,CAAC;CDmB/D,IAAI;CACJ,OAAO;CACP,MAAM;CAEN,YAAY,YAAY,WAAW;CACnC,WAAW,EAAE,WACX,qBAAqB;EACnB,MAAM,QAAQ;EACd,MAAM;EACN,WAAW;EACX,MAAM;CACR,CAAC;AC9B4D,GAAe,WAAW;;;ACC3F,IAAA,+BAAe,WAAW,WACxB,OAAO,WAAW,aAAa;CAC7B,OAAO,iBAAiB,KAAK,aAAa,WAAW,YAAY,oBAAoB,UAAU,QAAQ,CAAC;AAC1G,CAAC,CACH"}
@@ -0,0 +1,123 @@
1
+ import { AppCapabilities } from "@dxos/app-toolkit";
2
+ import { Capabilities, Capability } from "@dxos/app-framework";
3
+ import { Position } from "@dxos/util";
4
+ import { Chat } from "@dxos/assistant-toolkit";
5
+ import { Obj } from "@dxos/echo";
6
+ import { ASSISTANT_COMPANION_VARIANT } from "#meta";
7
+ import { Atom } from "@effect-atom/atom";
8
+ import { COMPANION_VIEW_STATE_CONTEXT, DeckCapabilities, PLANK_COMPANION_TYPE, companionAspect } from "@dxos/plugin-deck";
9
+ import { AssistantCapabilities, AssistantOperation } from "#types";
10
+ import * as Effect from "effect/Effect";
11
+ import * as Option from "effect/Option";
12
+ import { log } from "@dxos/log";
13
+ import { Attention } from "@dxos/react-ui-attention";
14
+ import { AttentionCapabilities } from "@dxos/plugin-attention";
15
+ import { Graph } from "@dxos/app-graph";
16
+ //#region src/capabilities/companion-chat-provisioner.ts
17
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/capabilities/companion-chat-provisioner.ts";
18
+ /**
19
+ * Non-React capability that watches deck companion state and provisions transient chats
20
+ * for active planks when the assistant companion is selected.
21
+ */
22
+ var companion_chat_provisioner_default = Capability.makeModule(Effect.fnUntraced(function* () {
23
+ const operationInvoker = yield* Capability.get(Capabilities.OperationInvoker);
24
+ const { graph } = yield* Capability.get(AppCapabilities.AppGraph);
25
+ const registry = yield* Capability.get(Capabilities.AtomRegistry);
26
+ const deckStateAtom = yield* Capability.get(DeckCapabilities.State);
27
+ const cacheAtom = yield* Capability.get(AssistantCapabilities.CompanionChatCache);
28
+ const stateAtom = yield* Capability.get(AssistantCapabilities.State);
29
+ const viewState = yield* Capability.get(AttentionCapabilities.ViewState);
30
+ const variantAtom = Atom.make((get) => get(viewState.atom(companionAspect, COMPANION_VIEW_STATE_CONTEXT)).variant);
31
+ const plankSubs = /* @__PURE__ */ new Map();
32
+ /** Unsubscribe a single plank and remove it from the map. */
33
+ const unsubPlank = (plankId) => {
34
+ plankSubs.get(plankId)?.();
35
+ plankSubs.delete(plankId);
36
+ };
37
+ /** Unsubscribe all per-plank subscriptions. */
38
+ const unsubAllPlanks = () => {
39
+ for (const unsub of plankSubs.values()) unsub();
40
+ plankSubs.clear();
41
+ };
42
+ /**
43
+ * Attempt to provision for a single plank.
44
+ * Returns true when the plank is resolved (provisioned or already cached)
45
+ * so the caller can tear down the connection subscription.
46
+ */
47
+ const provisionForPlank = (plankId, companionVariant) => {
48
+ const node = Graph.getNode(graph, plankId).pipe(Option.getOrNull);
49
+ if (!node || !Obj.isObject(node.data) || Obj.instanceOf(Chat.Chat, node.data)) return false;
50
+ if (resolveEffectiveVariant(graph, plankId, companionVariant) !== ASSISTANT_COMPANION_VARIANT) return false;
51
+ const object = node.data;
52
+ const companionUri = Obj.getURI(object);
53
+ if (registry.get(cacheAtom)[companionUri]) return true;
54
+ const db = Obj.getDatabase(object);
55
+ if (!db) {
56
+ log.warn("No db for object", {
57
+ plankId,
58
+ companionUri
59
+ }, {
60
+ "~LogMeta": "~LogMeta",
61
+ F: __dxlog_file,
62
+ L: 87,
63
+ S: this
64
+ });
65
+ return false;
66
+ }
67
+ operationInvoker.invokePromise(AssistantOperation.EnsureCompanionChat, {
68
+ db,
69
+ companionTo: object
70
+ }).catch((error) => log.warn("Failed to provision companion chat", {
71
+ plankId,
72
+ error
73
+ }, {
74
+ "~LogMeta": "~LogMeta",
75
+ F: __dxlog_file,
76
+ L: 93,
77
+ S: this
78
+ }));
79
+ return false;
80
+ };
81
+ const provision = () => {
82
+ const deckState = registry.get(deckStateAtom);
83
+ const deck = deckState.decks[deckState.activeDeck];
84
+ if (!deck?.companionPlanks.length) {
85
+ unsubAllPlanks();
86
+ return;
87
+ }
88
+ const companionVariant = registry.get(variantAtom);
89
+ const plankIds = new Set(deck.active);
90
+ for (const trackedId of plankSubs.keys()) if (!plankIds.has(trackedId)) unsubPlank(trackedId);
91
+ for (const plankId of plankIds) if (provisionForPlank(plankId, companionVariant)) unsubPlank(plankId);
92
+ else if (!plankSubs.has(plankId)) plankSubs.set(plankId, registry.subscribe(graph.connections(plankId, "child"), () => {
93
+ if (provisionForPlank(plankId, registry.get(variantAtom))) unsubPlank(plankId);
94
+ }));
95
+ };
96
+ provision();
97
+ const unsub1 = registry.subscribe(deckStateAtom, provision);
98
+ const unsub2 = registry.subscribe(stateAtom, provision);
99
+ const unsub3 = registry.subscribe(variantAtom, provision);
100
+ return Capability.contributes(Capabilities.Null, null, () => Effect.sync(() => {
101
+ unsub1();
102
+ unsub2();
103
+ unsub3();
104
+ unsubAllPlanks();
105
+ }));
106
+ }));
107
+ /**
108
+ * Mirrors useSelectedCompanion fallback logic outside of React.
109
+ * Returns the variant that would actually be rendered for a given plank.
110
+ */
111
+ var resolveEffectiveVariant = (graph, plankId, preferredVariant) => {
112
+ const companions = Graph.getConnections(graph, plankId, "child").filter((node) => node.type === PLANK_COMPANION_TYPE).toSorted((a, b) => Position.compare(a.properties, b.properties));
113
+ if (companions.length === 0) return;
114
+ if (preferredVariant) {
115
+ const preferred = companions.find((companion) => Attention.getLinkedVariant(companion.id) === preferredVariant);
116
+ if (preferred) return Attention.getLinkedVariant(preferred.id);
117
+ }
118
+ return Attention.getLinkedVariant(companions[0].id);
119
+ };
120
+ //#endregion
121
+ export { companion_chat_provisioner_default as default };
122
+
123
+ //# sourceMappingURL=chunk-companion-chat-provisioner.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-companion-chat-provisioner.mjs","names":[],"sources":["../../src/capabilities/companion-chat-provisioner.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom, type Registry } from '@effect-atom/atom';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Graph, type Node } from '@dxos/app-graph';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { Chat } from '@dxos/assistant-toolkit';\nimport { Obj } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport {\n COMPANION_VIEW_STATE_CONTEXT,\n DeckCapabilities,\n PLANK_COMPANION_TYPE,\n type StoredDeckState,\n companionAspect,\n} from '@dxos/plugin-deck';\nimport { Attention } from '@dxos/react-ui-attention';\nimport { Position } from '@dxos/util';\n\nimport { ASSISTANT_COMPANION_VARIANT } from '#meta';\nimport { AssistantCapabilities, AssistantOperation } from '#types';\n\n/**\n * Non-React capability that watches deck companion state and provisions transient chats\n * for active planks when the assistant companion is selected.\n */\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const operationInvoker = yield* Capability.get(Capabilities.OperationInvoker);\n const { graph } = yield* Capability.get(AppCapabilities.AppGraph);\n const registry: Registry.Registry = yield* Capability.get(Capabilities.AtomRegistry);\n const deckStateAtom = yield* Capability.get(DeckCapabilities.State);\n const cacheAtom = yield* Capability.get(AssistantCapabilities.CompanionChatCache);\n const stateAtom = yield* Capability.get(AssistantCapabilities.State);\n // The selected companion variant moved off deck state into a global view-state aspect; read and\n // observe it directly so a tab switch (which no longer touches deck state) still re-provisions.\n // Project just the variant so a companion resize (same aspect) does not re-fire provisioning.\n const viewState = yield* Capability.get(AttentionCapabilities.ViewState);\n const variantAtom = Atom.make((get) => get(viewState.atom(companionAspect, COMPANION_VIEW_STATE_CONTEXT)).variant);\n\n const plankSubs = new Map<string, () => void>();\n\n /** Unsubscribe a single plank and remove it from the map. */\n const unsubPlank = (plankId: string) => {\n plankSubs.get(plankId)?.();\n plankSubs.delete(plankId);\n };\n\n /** Unsubscribe all per-plank subscriptions. */\n const unsubAllPlanks = () => {\n for (const unsub of plankSubs.values()) {\n unsub();\n }\n plankSubs.clear();\n };\n\n /**\n * Attempt to provision for a single plank.\n * Returns true when the plank is resolved (provisioned or already cached)\n * so the caller can tear down the connection subscription.\n */\n const provisionForPlank = (plankId: string, companionVariant: string | undefined): boolean => {\n const node: Node.Node | null = Graph.getNode(graph, plankId).pipe(Option.getOrNull);\n if (!node || !Obj.isObject(node.data) || Obj.instanceOf(Chat.Chat, node.data)) {\n return false;\n }\n\n if (resolveEffectiveVariant(graph, plankId, companionVariant) !== ASSISTANT_COMPANION_VARIANT) {\n return false;\n }\n\n const object = node.data;\n const companionUri = Obj.getURI(object);\n const cache = registry.get(cacheAtom);\n if (cache[companionUri]) {\n return true;\n }\n\n const db = Obj.getDatabase(object);\n if (!db) {\n log.warn('No db for object', { plankId, companionUri });\n return false;\n }\n\n void operationInvoker\n .invokePromise(AssistantOperation.EnsureCompanionChat, { db, companionTo: object })\n .catch((error) => log.warn('Failed to provision companion chat', { plankId, error }));\n\n return false;\n };\n\n const provision = () => {\n const deckState: StoredDeckState = registry.get(deckStateAtom);\n const deck = deckState.decks[deckState.activeDeck];\n if (!deck?.companionPlanks.length) {\n unsubAllPlanks();\n return;\n }\n\n const companionVariant = registry.get(variantAtom);\n const plankIds = new Set(deck.active);\n\n // Remove subscriptions for planks that are no longer active.\n for (const trackedId of plankSubs.keys()) {\n if (!plankIds.has(trackedId)) {\n unsubPlank(trackedId);\n }\n }\n\n for (const plankId of plankIds) {\n const resolved = provisionForPlank(plankId, companionVariant);\n\n if (resolved) {\n // Already provisioned — no need to watch connections.\n unsubPlank(plankId);\n } else if (!plankSubs.has(plankId)) {\n // Not yet resolved — subscribe to child connections so we re-try\n // when graph builder extensions add companion nodes (after expand). This subscription\n // outlives the current `provision()` run, so re-read the latest variant at callback time\n // rather than closing over the one captured here.\n plankSubs.set(\n plankId,\n registry.subscribe(graph.connections(plankId, 'child'), () => {\n if (provisionForPlank(plankId, registry.get(variantAtom))) {\n unsubPlank(plankId);\n }\n }),\n );\n }\n }\n };\n\n provision();\n\n const unsub1 = registry.subscribe(deckStateAtom, provision);\n const unsub2 = registry.subscribe(stateAtom, provision);\n const unsub3 = registry.subscribe(variantAtom, provision);\n\n return Capability.contributes(Capabilities.Null, null, () =>\n Effect.sync(() => {\n unsub1();\n unsub2();\n unsub3();\n unsubAllPlanks();\n }),\n );\n }),\n);\n\n/**\n * Mirrors useSelectedCompanion fallback logic outside of React.\n * Returns the variant that would actually be rendered for a given plank.\n */\nconst resolveEffectiveVariant = (\n graph: Graph.BaseGraph,\n plankId: string,\n preferredVariant: string | undefined,\n): string | undefined => {\n const companions = Graph.getConnections(graph, plankId, 'child')\n .filter((node) => node.type === PLANK_COMPANION_TYPE)\n .toSorted((a, b) => Position.compare(a.properties, b.properties));\n\n if (companions.length === 0) {\n return undefined;\n }\n\n if (preferredVariant) {\n const preferred = companions.find((companion) => Attention.getLinkedVariant(companion.id) === preferredVariant);\n if (preferred) {\n return Attention.getLinkedVariant(preferred.id);\n }\n }\n\n return Attention.getLinkedVariant(companions[0].id);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAgCA,IAAA,qCAAe,WAAW,WACxB,OAAO,WAAW,aAAa;CAC7B,MAAM,mBAAmB,OAAO,WAAW,IAAI,aAAa,gBAAgB;CAC5E,MAAM,EAAE,UAAU,OAAO,WAAW,IAAI,gBAAgB,QAAQ;CAChE,MAAM,WAA8B,OAAO,WAAW,IAAI,aAAa,YAAY;CACnF,MAAM,gBAAgB,OAAO,WAAW,IAAI,iBAAiB,KAAK;CAClE,MAAM,YAAY,OAAO,WAAW,IAAI,sBAAsB,kBAAkB;CAChF,MAAM,YAAY,OAAO,WAAW,IAAI,sBAAsB,KAAK;CAInE,MAAM,YAAY,OAAO,WAAW,IAAI,sBAAsB,SAAS;CACvE,MAAM,cAAc,KAAK,MAAM,QAAQ,IAAI,UAAU,KAAK,iBAAiB,4BAA4B,CAAC,CAAC,CAAC,OAAO;CAEjH,MAAM,4BAAY,IAAI,IAAwB;;CAG9C,MAAM,cAAc,YAAoB;EACtC,UAAU,IAAI,OAAO,CAAC,GAAG;EACzB,UAAU,OAAO,OAAO;CAC1B;;CAGA,MAAM,uBAAuB;EAC3B,KAAK,MAAM,SAAS,UAAU,OAAO,GACnC,MAAM;EAER,UAAU,MAAM;CAClB;;;;;;CAOA,MAAM,qBAAqB,SAAiB,qBAAkD;EAC5F,MAAM,OAAyB,MAAM,QAAQ,OAAO,OAAO,CAAC,CAAC,KAAK,OAAO,SAAS;EAClF,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAS,KAAK,IAAI,KAAK,IAAI,WAAW,KAAK,MAAM,KAAK,IAAI,GAC1E,OAAO;EAGT,IAAI,wBAAwB,OAAO,SAAS,gBAAgB,MAAM,6BAChE,OAAO;EAGT,MAAM,SAAS,KAAK;EACpB,MAAM,eAAe,IAAI,OAAO,MAAM;EAEtC,IADc,SAAS,IAAI,SACvB,CAAA,CAAM,eACR,OAAO;EAGT,MAAM,KAAK,IAAI,YAAY,MAAM;EACjC,IAAI,CAAC,IAAI;GACP,IAAI,KAAK,oBAAoB;IAAE;IAAS;GAAa,GAAA;IAAA,YAAA;IAAA,GAAA;IAAA,GAAA;IAAA,GAAA;GAAA,CAAC;GACtD,OAAO;EACT;EAEA,iBACG,cAAc,mBAAmB,qBAAqB;GAAE;GAAI,aAAa;EAAO,CAAC,CAAA,CACjF,OAAO,UAAU,IAAI,KAAK,sCAAsC;GAAE;GAAS;EAAM,GAAA;GAAA,YAAA;GAAA,GAAA;GAAA,GAAA;GAAA,GAAA;EAAA,CAAC,CAAC;EAEtF,OAAO;CACT;CAEA,MAAM,kBAAkB;EACtB,MAAM,YAA6B,SAAS,IAAI,aAAa;EAC7D,MAAM,OAAO,UAAU,MAAM,UAAU;EACvC,IAAI,CAAC,MAAM,gBAAgB,QAAQ;GACjC,eAAe;GACf;EACF;EAEA,MAAM,mBAAmB,SAAS,IAAI,WAAW;EACjD,MAAM,WAAW,IAAI,IAAI,KAAK,MAAM;EAGpC,KAAK,MAAM,aAAa,UAAU,KAAK,GACrC,IAAI,CAAC,SAAS,IAAI,SAAS,GACzB,WAAW,SAAS;EAIxB,KAAK,MAAM,WAAW,UAGpB,IAFiB,kBAAkB,SAAS,gBAExC,GAEF,WAAW,OAAO;OACb,IAAI,CAAC,UAAU,IAAI,OAAO,GAK/B,UAAU,IACR,SACA,SAAS,UAAU,MAAM,YAAY,SAAS,OAAO,SAAS;GAC5D,IAAI,kBAAkB,SAAS,SAAS,IAAI,WAAW,CAAC,GACtD,WAAW,OAAO;EAEtB,CAAC,CACH;CAGN;CAEA,UAAU;CAEV,MAAM,SAAS,SAAS,UAAU,eAAe,SAAS;CAC1D,MAAM,SAAS,SAAS,UAAU,WAAW,SAAS;CACtD,MAAM,SAAS,SAAS,UAAU,aAAa,SAAS;CAExD,OAAO,WAAW,YAAY,aAAa,MAAM,YAC/C,OAAO,WAAW;EAChB,OAAO;EACP,OAAO;EACP,OAAO;EACP,eAAe;CACjB,CAAC,CACH;AACF,CAAC,CACH;;;;;AAMA,IAAM,2BACJ,OACA,SACA,qBACuB;CACvB,MAAM,aAAa,MAAM,eAAe,OAAO,SAAS,OAAO,CAAA,CAC5D,QAAQ,SAAS,KAAK,SAAS,oBAAoB,CAAA,CACnD,UAAU,GAAG,MAAM,SAAS,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC;CAElE,IAAI,WAAW,WAAW,GACxB;CAGF,IAAI,kBAAkB;EACpB,MAAM,YAAY,WAAW,MAAM,cAAc,UAAU,iBAAiB,UAAU,EAAE,MAAM,gBAAgB;EAC9G,IAAI,WACF,OAAO,UAAU,iBAAiB,UAAU,EAAE;CAElD;CAEA,OAAO,UAAU,iBAAiB,WAAW,EAAE,CAAC,EAAE;AACpD"}
@@ -0,0 +1,60 @@
1
+ import { n as ANTHROPIC_SOURCE, t as ANTHROPIC_PROVIDER_ID } from "./chunk-constants.mjs";
2
+ import { Capability } from "@dxos/app-framework";
3
+ import * as Schema from "effect/Schema";
4
+ import { Format, Obj, Ref } from "@dxos/echo";
5
+ import * as Effect from "effect/Effect";
6
+ import { Connection, Connector } from "@dxos/plugin-connector";
7
+ import { AccessToken } from "@dxos/link";
8
+ //#region src/capabilities/connector.ts
9
+ /** API-key form for the Anthropic BYOK provider; key is best-effort validated against `/v1/models`. */
10
+ var AnthropicTokenForm = Schema.Struct({ token: Schema.String.pipe(Format.FormatAnnotation.set(Format.TypeFormat.Password)).annotations({
11
+ title: "API key",
12
+ description: "Your Anthropic API key — find it at https://console.anthropic.com/settings/keys."
13
+ }) });
14
+ /**
15
+ * Best-effort validation: 401/403 from Anthropic blocks the save; CORS/network failures
16
+ * are tolerated so the form still works in environments where the direct browser call is blocked.
17
+ */
18
+ var validateAnthropicKey = (apiKey) => Effect.tryPromise({
19
+ try: () => fetch("https://api.anthropic.com/v1/models", { headers: {
20
+ "x-api-key": apiKey,
21
+ "anthropic-version": "2023-06-01",
22
+ "anthropic-dangerous-direct-browser-access": "true"
23
+ } }),
24
+ catch: (cause) => cause
25
+ }).pipe(Effect.matchEffect({
26
+ onSuccess: (response) => response.status === 401 || response.status === 403 ? Effect.fail(/* @__PURE__ */ new Error("Invalid Anthropic API key. Check it at https://console.anthropic.com/settings/keys.")) : Effect.void,
27
+ onFailure: () => Effect.void
28
+ }));
29
+ var credentialForm = {
30
+ schema: AnthropicTokenForm,
31
+ defaultValues: { token: "" },
32
+ onValidate: ({ values }) => validateAnthropicKey(values.token.trim()),
33
+ onSubmit: ({ values, connector }) => Effect.sync(() => {
34
+ const accessToken = Obj.make(AccessToken.AccessToken, {
35
+ source: ANTHROPIC_SOURCE,
36
+ token: values.token.trim()
37
+ });
38
+ return {
39
+ kind: "complete",
40
+ accessToken,
41
+ connection: Obj.make(Connection.Connection, {
42
+ name: connector.label ?? "Anthropic",
43
+ connectorId: connector.id,
44
+ accessToken: Ref.make(accessToken)
45
+ })
46
+ };
47
+ })
48
+ };
49
+ var connector_default = Capability.makeModule(Effect.fnUntraced(function* () {
50
+ return Capability.contributes(Connector, [{
51
+ id: ANTHROPIC_PROVIDER_ID,
52
+ source: ANTHROPIC_SOURCE,
53
+ label: "Anthropic",
54
+ credentialForm
55
+ }]);
56
+ }));
57
+ //#endregion
58
+ export { connector_default as default };
59
+
60
+ //# sourceMappingURL=chunk-connector.mjs.map