@dxos/plugin-assistant 0.9.0 → 0.9.1-staging.ee54ba693a

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 (619) hide show
  1. package/PLUGIN.mdl +18 -24
  2. package/dist/lib/neutral/{AgentArticle-K7XM46OQ.mjs → AgentArticle-GV6EEW3I.mjs} +9 -8
  3. package/dist/lib/neutral/AgentArticle-GV6EEW3I.mjs.map +7 -0
  4. package/dist/lib/neutral/AssistantPlugin.mjs +1 -1
  5. package/dist/lib/neutral/AssistantPlugin.node.mjs +6 -6
  6. package/dist/lib/neutral/AssistantPlugin.node.mjs.map +3 -3
  7. package/dist/lib/neutral/AssistantPlugin.workerd.mjs +7 -34
  8. package/dist/lib/neutral/AssistantPlugin.workerd.mjs.map +4 -4
  9. package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs +302 -0
  10. package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs.map +7 -0
  11. package/dist/lib/neutral/{ChatArticle-VNVZCDUR.mjs → ChatArticle-OO7GGEFW.mjs} +2 -2
  12. package/dist/lib/neutral/{ChatCompanion-LBUHYWQG.mjs → ChatCompanion-GIFJRY6I.mjs} +28 -28
  13. package/dist/lib/neutral/ChatCompanion-GIFJRY6I.mjs.map +7 -0
  14. package/dist/lib/neutral/{ChatDialog-DCA6FLOV.mjs → ChatDialog-5MXN4MXS.mjs} +9 -8
  15. package/dist/lib/neutral/ChatDialog-5MXN4MXS.mjs.map +7 -0
  16. package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs +72 -0
  17. package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs.map +7 -0
  18. package/dist/lib/neutral/{PlanArticle-TS5ULWYS.mjs → PlanArticle-VPK2IYWU.mjs} +8 -2
  19. package/dist/lib/neutral/PlanArticle-VPK2IYWU.mjs.map +7 -0
  20. package/dist/lib/neutral/SpaceHomePrompt-ISAB76LD.mjs +114 -0
  21. package/dist/lib/neutral/SpaceHomePrompt-ISAB76LD.mjs.map +7 -0
  22. package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs +63 -0
  23. package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs.map +7 -0
  24. package/dist/lib/neutral/TracePanel-JKNWADJ4.mjs +12 -0
  25. package/dist/lib/neutral/TracePanel-JKNWADJ4.mjs.map +7 -0
  26. package/dist/lib/neutral/{TriggerStatus-X7Y5JFZJ.mjs → TriggerStatus-FURRBHYA.mjs} +9 -7
  27. package/dist/lib/neutral/TriggerStatus-FURRBHYA.mjs.map +7 -0
  28. package/dist/lib/neutral/{agent-hydrator-PJBYVMBW.mjs → agent-hydrator-OBO3RHLO.mjs} +3 -4
  29. package/dist/lib/neutral/agent-hydrator-OBO3RHLO.mjs.map +7 -0
  30. package/dist/lib/neutral/{agent-service-WCAP5MLI.mjs → agent-service-XFJ4VQMT.mjs} +6 -6
  31. package/dist/lib/neutral/agent-service-XFJ4VQMT.mjs.map +7 -0
  32. package/dist/lib/neutral/ai-context-LIKJYMIN.mjs +14 -0
  33. package/dist/lib/neutral/ai-context-LIKJYMIN.mjs.map +7 -0
  34. package/dist/lib/neutral/{ai-service-AADUIKBY.mjs → ai-service-DM6YXWUC.mjs} +9 -5
  35. package/dist/lib/neutral/ai-service-DM6YXWUC.mjs.map +7 -0
  36. package/dist/lib/neutral/{app-graph-builder-WUFHQH3Y.mjs → app-graph-builder-OPVOEQY7.mjs} +45 -28
  37. package/dist/lib/neutral/app-graph-builder-OPVOEQY7.mjs.map +7 -0
  38. package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs +97 -0
  39. package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs.map +7 -0
  40. package/dist/lib/neutral/capabilities/index.mjs +21 -19
  41. package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
  42. package/dist/lib/neutral/{chunk-KLYLW4WH.mjs → chunk-5IHQ52KJ.mjs} +1 -1
  43. package/dist/lib/neutral/chunk-5IHQ52KJ.mjs.map +7 -0
  44. package/dist/lib/neutral/{chunk-YXRGZYYH.mjs → chunk-6Q4OBGIK.mjs} +87 -59
  45. package/dist/lib/neutral/chunk-6Q4OBGIK.mjs.map +7 -0
  46. package/dist/lib/neutral/chunk-BXI2R4OO.mjs +410 -0
  47. package/dist/lib/neutral/chunk-BXI2R4OO.mjs.map +7 -0
  48. package/dist/lib/neutral/{chunk-5H6UJHLF.mjs → chunk-CMPLPDYE.mjs} +12 -12
  49. package/dist/lib/neutral/chunk-CMPLPDYE.mjs.map +7 -0
  50. package/dist/lib/neutral/chunk-GPHT3HYS.mjs +8 -0
  51. package/dist/lib/neutral/{chunk-SMFJD7BP.mjs.map → chunk-GPHT3HYS.mjs.map} +2 -2
  52. package/dist/lib/neutral/chunk-HKLSFB5I.mjs +90 -0
  53. package/dist/lib/neutral/chunk-HKLSFB5I.mjs.map +7 -0
  54. package/dist/lib/neutral/chunk-L7AR4VTA.mjs +53 -0
  55. package/dist/lib/neutral/chunk-L7AR4VTA.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-LS72HWMM.mjs +42 -0
  57. package/dist/lib/neutral/chunk-LS72HWMM.mjs.map +7 -0
  58. package/dist/lib/neutral/{chunk-HLANPOBA.mjs → chunk-OZWZGIV2.mjs} +5 -3
  59. package/dist/lib/neutral/chunk-OZWZGIV2.mjs.map +7 -0
  60. package/dist/lib/neutral/{toolkit-GVWXPDLJ.mjs → chunk-QOKLFHUS.mjs} +3 -4
  61. package/dist/lib/neutral/{toolkit-GVWXPDLJ.mjs.map → chunk-QOKLFHUS.mjs.map} +1 -1
  62. package/dist/lib/neutral/{TracePanel-KTZJ6JNR.mjs → chunk-SCTHQVIJ.mjs} +11 -23
  63. package/dist/lib/neutral/chunk-SCTHQVIJ.mjs.map +7 -0
  64. package/dist/lib/neutral/chunk-U4LTLBAX.mjs +56 -0
  65. package/dist/lib/neutral/chunk-U4LTLBAX.mjs.map +7 -0
  66. package/dist/lib/neutral/{chunk-RKVVK3R3.mjs → chunk-UPKFUZ6V.mjs} +22 -17
  67. package/dist/lib/neutral/chunk-UPKFUZ6V.mjs.map +7 -0
  68. package/dist/lib/neutral/{operation-handler-SF36MOB5.mjs → chunk-V2Y4XE3O.mjs} +3 -4
  69. package/dist/lib/neutral/{operation-handler-SF36MOB5.mjs.map → chunk-V2Y4XE3O.mjs.map} +1 -1
  70. package/dist/lib/neutral/chunk-XVGEJWJX.mjs +133 -0
  71. package/dist/lib/neutral/chunk-XVGEJWJX.mjs.map +7 -0
  72. package/dist/lib/neutral/{companion-chat-provisioner-YZZ73P6E.mjs → companion-chat-provisioner-IQV5VIVE.mjs} +14 -8
  73. package/dist/lib/neutral/companion-chat-provisioner-IQV5VIVE.mjs.map +7 -0
  74. package/dist/lib/neutral/components/index.mjs +749 -632
  75. package/dist/lib/neutral/components/index.mjs.map +4 -4
  76. package/dist/lib/neutral/{integration-provider-RBD3AFJU.mjs → connector-ITLLTBPZ.mjs} +13 -14
  77. package/dist/lib/neutral/connector-ITLLTBPZ.mjs.map +7 -0
  78. package/dist/lib/neutral/containers/index.mjs +15 -13
  79. package/dist/lib/neutral/containers/index.mjs.map +3 -3
  80. package/dist/lib/neutral/{create-chat-SGGQ6HVN.mjs → create-chat-YGVZZYGP.mjs} +18 -16
  81. package/dist/lib/neutral/create-chat-YGVZZYGP.mjs.map +7 -0
  82. package/dist/lib/neutral/{create-object-U2SOFZLR.mjs → create-object-5PAEJ6KM.mjs} +11 -27
  83. package/dist/lib/neutral/create-object-5PAEJ6KM.mjs.map +7 -0
  84. package/dist/lib/neutral/{edge-model-resolver-BBVOJBGJ.mjs → edge-model-resolver-WDJWDZTT.mjs} +2 -2
  85. package/dist/lib/neutral/execution-graph/index.mjs +336 -62
  86. package/dist/lib/neutral/execution-graph/index.mjs.map +4 -4
  87. package/dist/lib/neutral/extensions/index.mjs +8 -0
  88. package/dist/lib/neutral/{fork-chat-34KEF4ZJ.mjs → fork-chat-RMAAYYQF.mjs} +16 -19
  89. package/dist/lib/neutral/fork-chat-RMAAYYQF.mjs.map +7 -0
  90. package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs +93 -0
  91. package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs.map +7 -0
  92. package/dist/lib/neutral/hooks/index.mjs +393 -508
  93. package/dist/lib/neutral/hooks/index.mjs.map +4 -4
  94. package/dist/lib/neutral/index.mjs +14 -10
  95. package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs +41 -0
  96. package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs.map +7 -0
  97. package/dist/lib/neutral/meta.json +1 -1
  98. package/dist/lib/neutral/meta.mjs +1 -1
  99. package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs +18 -0
  100. package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs.map +7 -0
  101. package/dist/lib/neutral/operation-handler-2LEN45GP.mjs +8 -0
  102. package/dist/lib/neutral/operation-handler-2LEN45GP.mjs.map +7 -0
  103. package/dist/lib/neutral/operations/index.mjs +1 -1
  104. package/dist/lib/neutral/plugin.mjs +2 -2
  105. package/dist/lib/neutral/plugin.workerd.mjs +13 -0
  106. package/dist/lib/neutral/plugin.workerd.mjs.map +7 -0
  107. package/dist/lib/neutral/{react-surface-XRTBW5OJ.mjs → react-surface-HEJEK44F.mjs} +42 -45
  108. package/dist/lib/neutral/react-surface-HEJEK44F.mjs.map +7 -0
  109. package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs +28 -0
  110. package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs.map +7 -0
  111. package/dist/lib/neutral/{run-prompt-in-new-chat-D5IIE2C7.mjs → run-prompt-in-new-chat-RNUJE2FM.mjs} +31 -31
  112. package/dist/lib/neutral/run-prompt-in-new-chat-RNUJE2FM.mjs.map +7 -0
  113. package/dist/lib/neutral/{settings-W4BLWQ53.mjs → settings-7Q3RITIT.mjs} +3 -3
  114. package/dist/lib/neutral/{settings-W4BLWQ53.mjs.map → settings-7Q3RITIT.mjs.map} +3 -3
  115. package/dist/lib/neutral/skill-definition-553MQRTR.mjs +8 -0
  116. package/dist/lib/neutral/skill-definition-553MQRTR.mjs.map +7 -0
  117. package/dist/lib/neutral/skills/index.mjs +8 -0
  118. package/dist/lib/neutral/skills/index.mjs.map +7 -0
  119. package/dist/lib/neutral/{state-H3G7QCU6.mjs → state-4LGAKSSD.mjs} +9 -3
  120. package/dist/lib/neutral/state-4LGAKSSD.mjs.map +7 -0
  121. package/dist/lib/neutral/testing.mjs +1 -1
  122. package/dist/lib/neutral/toolkit-ETWLG5NT.mjs +8 -0
  123. package/dist/lib/neutral/toolkit-ETWLG5NT.mjs.map +7 -0
  124. package/dist/lib/neutral/translations.mjs +69 -31
  125. package/dist/lib/neutral/translations.mjs.map +3 -3
  126. package/dist/lib/neutral/types/index.mjs +5 -1
  127. package/dist/lib/neutral/{update-chat-name-Y7JWIP64.mjs → update-chat-name-IJJELRR6.mjs} +3 -3
  128. package/dist/lib/neutral/{update-chat-name-Y7JWIP64.mjs.map → update-chat-name-IJJELRR6.mjs.map} +2 -2
  129. package/dist/types/dx.config.d.ts +28 -0
  130. package/dist/types/dx.config.d.ts.map +1 -0
  131. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  132. package/dist/types/src/AssistantPlugin.workerd.d.ts.map +1 -1
  133. package/dist/types/src/capabilities/agent-hydrator.d.ts +1 -1
  134. package/dist/types/src/capabilities/agent-service.d.ts +1 -2
  135. package/dist/types/src/capabilities/agent-service.d.ts.map +1 -1
  136. package/dist/types/src/capabilities/ai-context.d.ts +1 -2
  137. package/dist/types/src/capabilities/ai-context.d.ts.map +1 -1
  138. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -3
  139. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  140. package/dist/types/src/capabilities/automation-templates.d.ts +1 -2
  141. package/dist/types/src/capabilities/automation-templates.d.ts.map +1 -1
  142. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts +1 -1
  143. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts.map +1 -1
  144. package/dist/types/src/capabilities/{integration-provider.d.ts → connector.d.ts} +2 -2
  145. package/dist/types/src/capabilities/connector.d.ts.map +1 -0
  146. package/dist/types/src/capabilities/create-object.d.ts +1 -27
  147. package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
  148. package/dist/types/src/capabilities/index.d.ts +18 -57
  149. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  150. package/dist/types/src/capabilities/markdown-extension.d.ts +1 -1
  151. package/dist/types/src/capabilities/migrations.d.ts +1 -2
  152. package/dist/types/src/capabilities/migrations.d.ts.map +1 -1
  153. package/dist/types/src/capabilities/navigation-resolver.d.ts +5 -0
  154. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -0
  155. package/dist/types/src/capabilities/react-surface.d.ts +2 -2
  156. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  157. package/dist/types/src/capabilities/settings.d.ts +1 -2
  158. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  159. package/dist/types/src/capabilities/skill-definition.d.ts +5 -0
  160. package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -0
  161. package/dist/types/src/capabilities/state.d.ts +1 -17
  162. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  163. package/dist/types/src/capabilities/toolkit.d.ts +1 -2
  164. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -1
  165. package/dist/types/src/components/AgentProperties/AgentProperties.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/Chat/Chat.d.ts +10 -8
  167. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  168. package/dist/types/src/components/Chat/Chat.stories.d.ts +32 -0
  169. package/dist/types/src/components/Chat/Chat.stories.d.ts.map +1 -0
  170. package/dist/types/src/components/Chat/events.d.ts +0 -4
  171. package/dist/types/src/components/Chat/events.d.ts.map +1 -1
  172. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts +2 -2
  173. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  174. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
  175. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts +2 -2
  176. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts.map +1 -1
  177. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts +5 -5
  178. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts.map +1 -1
  179. package/dist/types/src/components/ChatPrompt/useChatVoiceInput.d.ts +9 -0
  180. package/dist/types/src/components/ChatPrompt/useChatVoiceInput.d.ts.map +1 -0
  181. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +4 -4
  182. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  183. package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts +2 -2
  184. package/dist/types/src/components/ChatThread/MarkdownStream.stories.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/widgets/ReasoningWidget.stories.d.ts +2 -2
  187. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts.map +1 -1
  188. package/dist/types/src/components/ChatThread/widgets/SurfaceWidget.d.ts +11 -0
  189. package/dist/types/src/components/ChatThread/widgets/SurfaceWidget.d.ts.map +1 -0
  190. package/dist/types/src/components/ChatThread/widgets/index.d.ts +1 -0
  191. package/dist/types/src/components/ChatThread/widgets/index.d.ts.map +1 -1
  192. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts +6 -0
  193. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -1
  194. package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts +1 -0
  195. package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts.map +1 -1
  196. package/dist/types/src/components/TaskList/TaskList.d.ts +8 -0
  197. package/dist/types/src/components/TaskList/TaskList.d.ts.map +1 -1
  198. package/dist/types/src/components/TaskList/TaskList.stories.d.ts +5 -2
  199. package/dist/types/src/components/TaskList/TaskList.stories.d.ts.map +1 -1
  200. package/dist/types/src/components/Toolbox/Toolbox.d.ts +3 -3
  201. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  202. package/dist/types/src/components/index.d.ts +1 -4
  203. package/dist/types/src/components/index.d.ts.map +1 -1
  204. package/dist/types/src/constants.d.ts +1 -1
  205. package/dist/types/src/constants.d.ts.map +1 -1
  206. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts +2 -2
  207. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts.map +1 -1
  208. package/dist/types/src/{components → containers}/AssistantSettings/AssistantSettings.d.ts +1 -1
  209. package/dist/types/src/containers/AssistantSettings/AssistantSettings.d.ts.map +1 -0
  210. package/dist/types/src/{components → containers}/AssistantSettings/AssistantSettings.stories.d.ts.map +1 -1
  211. package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts +12 -0
  212. package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts.map +1 -0
  213. package/dist/types/src/{components/TemplateEditor/TemplateEditor.stories.d.ts → containers/AssistantSettings/OllamaModels.stories.d.ts} +9 -7
  214. package/dist/types/src/containers/AssistantSettings/OllamaModels.stories.d.ts.map +1 -0
  215. package/dist/types/src/{components → containers}/AssistantSettings/index.d.ts.map +1 -1
  216. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts +3 -10
  217. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts.map +1 -1
  218. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts +4 -11
  219. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -1
  220. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -1
  221. package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts +13 -0
  222. package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts.map +1 -0
  223. package/dist/types/src/containers/IntegrationPrompt/index.d.ts +2 -0
  224. package/dist/types/src/{components/RoutineProperties → containers/IntegrationPrompt}/index.d.ts.map +1 -1
  225. package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts.map +1 -1
  226. package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts +15 -0
  227. package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts.map +1 -0
  228. package/dist/types/src/containers/SpaceHomePrompt/index.d.ts +2 -0
  229. package/dist/types/src/containers/SpaceHomePrompt/index.d.ts.map +1 -0
  230. package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts +13 -0
  231. package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts.map +1 -0
  232. package/dist/types/src/containers/SpaceHomeSuggestions/index.d.ts +2 -0
  233. package/dist/types/src/containers/SpaceHomeSuggestions/index.d.ts.map +1 -0
  234. package/dist/types/src/containers/TracePanel/TracePanel.d.ts.map +1 -1
  235. package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts.map +1 -1
  236. package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts +1 -1
  237. package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts.map +1 -1
  238. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -1
  239. package/dist/types/src/containers/index.d.ts +4 -3
  240. package/dist/types/src/containers/index.d.ts.map +1 -1
  241. package/dist/types/src/execution-graph/execution-graph.d.ts +20 -1
  242. package/dist/types/src/execution-graph/execution-graph.d.ts.map +1 -1
  243. package/dist/types/src/execution-graph/index.d.ts +3 -2
  244. package/dist/types/src/execution-graph/index.d.ts.map +1 -1
  245. package/dist/types/src/execution-graph/pending-block-status.d.ts +26 -0
  246. package/dist/types/src/execution-graph/pending-block-status.d.ts.map +1 -0
  247. package/dist/types/src/execution-graph/pending-block-status.test.d.ts +2 -0
  248. package/dist/types/src/execution-graph/pending-block-status.test.d.ts.map +1 -0
  249. package/dist/types/src/execution-graph/span-tree.d.ts +13 -0
  250. package/dist/types/src/execution-graph/span-tree.d.ts.map +1 -1
  251. package/dist/types/src/extensions/index.d.ts +1 -1
  252. package/dist/types/src/extensions/index.d.ts.map +1 -1
  253. package/dist/types/src/extensions/prompt-extension.d.ts +1 -1
  254. package/dist/types/src/extensions/prompt-extension.d.ts.map +1 -1
  255. package/dist/types/src/feed-logger.d.ts +3 -2
  256. package/dist/types/src/feed-logger.d.ts.map +1 -1
  257. package/dist/types/src/hooks/index.d.ts +4 -2
  258. package/dist/types/src/hooks/index.d.ts.map +1 -1
  259. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  260. package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -1
  261. package/dist/types/src/hooks/useHomeSuggestions.d.ts +8 -0
  262. package/dist/types/src/hooks/useHomeSuggestions.d.ts.map +1 -0
  263. package/dist/types/src/hooks/usePresets.d.ts +6 -2
  264. package/dist/types/src/hooks/usePresets.d.ts.map +1 -1
  265. package/dist/types/src/hooks/useProcessEphemeralStatus.d.ts +10 -0
  266. package/dist/types/src/hooks/useProcessEphemeralStatus.d.ts.map +1 -0
  267. package/dist/types/src/hooks/useSkillRegistry.d.ts +21 -0
  268. package/dist/types/src/hooks/useSkillRegistry.d.ts.map +1 -0
  269. package/dist/types/src/hooks/useTraceMessages.d.ts +12 -0
  270. package/dist/types/src/hooks/useTraceMessages.d.ts.map +1 -0
  271. package/dist/types/src/index.d.ts +1 -1
  272. package/dist/types/src/index.d.ts.map +1 -1
  273. package/dist/types/src/meta.d.ts +32 -2
  274. package/dist/types/src/meta.d.ts.map +1 -1
  275. package/dist/types/src/operations/create-chat.d.ts.map +1 -1
  276. package/dist/types/src/operations/fork-chat.d.ts.map +1 -1
  277. package/dist/types/src/operations/generate-home-suggestions.d.ts +5 -0
  278. package/dist/types/src/operations/generate-home-suggestions.d.ts.map +1 -0
  279. package/dist/types/src/operations/generate-home-suggestions.test.d.ts +2 -0
  280. package/dist/types/src/operations/generate-home-suggestions.test.d.ts.map +1 -0
  281. package/dist/types/src/operations/index.d.ts.map +1 -1
  282. package/dist/types/src/operations/resolve-navigation-targets.d.ts +3 -15
  283. package/dist/types/src/operations/resolve-navigation-targets.d.ts.map +1 -1
  284. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts +2 -2
  285. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts.map +1 -1
  286. package/dist/types/src/paths.d.ts +1 -1
  287. package/dist/types/src/paths.d.ts.map +1 -1
  288. package/dist/types/src/plugin.workerd.d.ts +2 -0
  289. package/dist/types/src/plugin.workerd.d.ts.map +1 -0
  290. package/dist/types/src/processor/presets.d.ts +20 -9
  291. package/dist/types/src/processor/presets.d.ts.map +1 -1
  292. package/dist/types/src/processor/processor.d.ts +33 -209
  293. package/dist/types/src/processor/processor.d.ts.map +1 -1
  294. package/dist/types/src/skills/assistant/index.d.ts +2 -0
  295. package/dist/types/src/skills/assistant/index.d.ts.map +1 -0
  296. package/dist/types/src/skills/assistant/skill.d.ts +4 -0
  297. package/dist/types/src/skills/assistant/skill.d.ts.map +1 -0
  298. package/dist/types/src/skills/assistant/skill.node.test.d.ts +2 -0
  299. package/dist/types/src/skills/assistant/skill.node.test.d.ts.map +1 -0
  300. package/dist/types/src/skills/index.d.ts.map +1 -0
  301. package/dist/types/src/templates/daily-digest.d.ts +2 -2
  302. package/dist/types/src/templates/daily-digest.d.ts.map +1 -1
  303. package/dist/types/src/templates/index.d.ts +3 -3
  304. package/dist/types/src/templates/index.d.ts.map +1 -1
  305. package/dist/types/src/templates/research-brief.d.ts +2 -2
  306. package/dist/types/src/templates/research-brief.d.ts.map +1 -1
  307. package/dist/types/src/templates/routine-templates.test.d.ts +2 -0
  308. package/dist/types/src/templates/routine-templates.test.d.ts.map +1 -0
  309. package/dist/types/src/templates/scaffold.d.ts +9 -9
  310. package/dist/types/src/templates/scaffold.d.ts.map +1 -1
  311. package/dist/types/src/testing/test-generator.d.ts +1 -1
  312. package/dist/types/src/testing/test-generator.d.ts.map +1 -1
  313. package/dist/types/src/testing/test-sequence.d.ts +1 -8
  314. package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
  315. package/dist/types/src/testing/test-trace.d.ts.map +1 -1
  316. package/dist/types/src/translations.d.ts.map +1 -1
  317. package/dist/types/src/types/Assistant.d.ts +5 -12
  318. package/dist/types/src/types/Assistant.d.ts.map +1 -1
  319. package/dist/types/src/types/AssistantCapabilities.d.ts +21 -0
  320. package/dist/types/src/types/AssistantCapabilities.d.ts.map +1 -1
  321. package/dist/types/src/types/AssistantEvents.d.ts.map +1 -1
  322. package/dist/types/src/types/AssistantOperation.d.ts +17 -110
  323. package/dist/types/src/types/AssistantOperation.d.ts.map +1 -1
  324. package/dist/types/src/types/ChatSurface.d.ts +12 -0
  325. package/dist/types/src/types/ChatSurface.d.ts.map +1 -0
  326. package/dist/types/src/types/Ollama.d.ts +44 -0
  327. package/dist/types/src/types/Ollama.d.ts.map +1 -0
  328. package/dist/types/src/types/Settings.d.ts +5 -4
  329. package/dist/types/src/types/Settings.d.ts.map +1 -1
  330. package/dist/types/src/types/index.d.ts +2 -0
  331. package/dist/types/src/types/index.d.ts.map +1 -1
  332. package/dist/types/src/types/service.d.ts +4 -3
  333. package/dist/types/src/types/service.d.ts.map +1 -1
  334. package/dist/types/src/util/error-cause.d.ts +3 -0
  335. package/dist/types/src/util/error-cause.d.ts.map +1 -0
  336. package/dist/types/src/util/suggestions.d.ts +1 -1
  337. package/dist/types/tsconfig.tsbuildinfo +1 -1
  338. package/dx.config.ts +38 -0
  339. package/package.json +103 -90
  340. package/src/AssistantPlugin.conversations.json +1 -1
  341. package/src/AssistantPlugin.node.ts +5 -5
  342. package/src/AssistantPlugin.test.ts +27 -41
  343. package/src/AssistantPlugin.ts +14 -12
  344. package/src/AssistantPlugin.workerd.ts +15 -6
  345. package/src/capabilities/agent-hydrator.ts +1 -2
  346. package/src/capabilities/agent-service.ts +7 -5
  347. package/src/capabilities/ai-context.ts +7 -32
  348. package/src/capabilities/ai-service.ts +3 -2
  349. package/src/capabilities/app-graph-builder.ts +43 -28
  350. package/src/capabilities/automation-templates.ts +3 -3
  351. package/src/capabilities/companion-chat-provisioner.ts +22 -6
  352. package/src/capabilities/{integration-provider.ts → connector.ts} +7 -12
  353. package/src/capabilities/create-object.ts +9 -26
  354. package/src/capabilities/index.ts +4 -12
  355. package/src/capabilities/markdown-extension.ts +7 -4
  356. package/src/capabilities/navigation-resolver.ts +20 -0
  357. package/src/capabilities/react-surface.tsx +55 -52
  358. package/src/capabilities/settings.ts +2 -2
  359. package/src/capabilities/skill-definition.ts +72 -0
  360. package/src/capabilities/state.ts +8 -1
  361. package/src/components/AgentProperties/AgentProperties.stories.tsx +1 -2
  362. package/src/components/AgentProperties/AgentProperties.tsx +1 -1
  363. package/src/components/Chat/Chat.stories.tsx +94 -0
  364. package/src/components/Chat/Chat.tsx +67 -16
  365. package/src/components/Chat/events.ts +0 -6
  366. package/src/components/ChatPrompt/ChatActions.tsx +185 -20
  367. package/src/components/ChatPrompt/ChatMcpErrors.tsx +1 -1
  368. package/src/components/ChatPrompt/ChatOptions.stories.tsx +3 -3
  369. package/src/components/ChatPrompt/ChatOptions.tsx +43 -50
  370. package/src/components/ChatPrompt/ChatPrompt.tsx +31 -47
  371. package/src/components/ChatPrompt/ChatReferences.tsx +1 -1
  372. package/src/components/ChatPrompt/useChatVoiceInput.ts +103 -0
  373. package/src/components/ChatThread/Anchor.stories.tsx +1 -1
  374. package/src/components/ChatThread/ChatThread.stories.tsx +7 -16
  375. package/src/components/ChatThread/DEBUG.md +23 -0
  376. package/src/components/ChatThread/MarkdownStream.stories.tsx +3 -3
  377. package/src/components/ChatThread/registry.tsx +43 -17
  378. package/src/components/ChatThread/widgets/ReasoningWidget.stories.tsx +2 -2
  379. package/src/components/ChatThread/widgets/SummaryWidget.tsx +1 -1
  380. package/src/components/ChatThread/widgets/SurfaceWidget.tsx +41 -0
  381. package/src/components/ChatThread/widgets/ToolWidget.tsx +1 -1
  382. package/src/components/ChatThread/widgets/index.ts +1 -0
  383. package/src/components/ProcessTree/ProcessTree.stories.tsx +7 -0
  384. package/src/components/ProcessTree/ProcessTree.tsx +183 -88
  385. package/src/components/TaskList/TaskList.stories.tsx +24 -3
  386. package/src/components/TaskList/TaskList.tsx +122 -28
  387. package/src/components/ToolBlock/ToolBlock.tsx +1 -1
  388. package/src/components/Toolbox/Toolbox.tsx +11 -11
  389. package/src/components/index.ts +1 -6
  390. package/src/constants.ts +1 -1
  391. package/src/containers/AgentArticle/AgentArticle.stories.tsx +12 -13
  392. package/src/containers/AgentArticle/AgentArticle.tsx +10 -10
  393. package/src/{components → containers}/AssistantSettings/AssistantSettings.stories.tsx +3 -2
  394. package/src/containers/AssistantSettings/AssistantSettings.tsx +90 -0
  395. package/src/containers/AssistantSettings/OllamaModels.stories.tsx +108 -0
  396. package/src/containers/AssistantSettings/OllamaModels.tsx +255 -0
  397. package/src/containers/ChatArticle/ChatArticle.stories.tsx +3 -3
  398. package/src/containers/ChatArticle/ChatArticle.tsx +25 -28
  399. package/src/containers/ChatCompanion/ChatCompanion.tsx +27 -27
  400. package/src/containers/ChatDialog/ChatDialog.tsx +10 -7
  401. package/src/containers/IntegrationPrompt/IntegrationPrompt.tsx +79 -0
  402. package/src/containers/IntegrationPrompt/index.ts +5 -0
  403. package/src/containers/PlanArticle/PlanArticle.tsx +5 -1
  404. package/src/containers/SpaceHomePrompt/SpaceHomePrompt.tsx +107 -0
  405. package/src/containers/SpaceHomePrompt/index.ts +5 -0
  406. package/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.tsx +83 -0
  407. package/src/containers/SpaceHomeSuggestions/index.ts +5 -0
  408. package/src/containers/TracePanel/TracePanel.stories.tsx +89 -47
  409. package/src/containers/TracePanel/TracePanel.tsx +15 -37
  410. package/src/containers/TracePanel/dxn-extractor.test.ts +2 -2
  411. package/src/containers/TriggerStatus/TriggerStatus.tsx +10 -6
  412. package/src/containers/index.ts +4 -3
  413. package/src/execution-graph/SPEC.md +1 -1
  414. package/src/execution-graph/execution-graph.test.ts +213 -25
  415. package/src/execution-graph/execution-graph.ts +337 -70
  416. package/src/execution-graph/index.ts +15 -5
  417. package/src/execution-graph/pending-block-status.test.ts +114 -0
  418. package/src/execution-graph/pending-block-status.ts +88 -0
  419. package/src/execution-graph/span-tree.test.ts +33 -1
  420. package/src/execution-graph/span-tree.ts +43 -2
  421. package/src/execution-graph/sub-agent-delegation.test.ts +34 -19
  422. package/src/extensions/index.ts +1 -1
  423. package/src/extensions/prompt-extension.ts +102 -73
  424. package/src/feed-logger.ts +24 -22
  425. package/src/functions/services.test.ts +4 -4
  426. package/src/hooks/index.ts +4 -2
  427. package/src/hooks/useChatProcessor.ts +12 -16
  428. package/src/hooks/useChatServices.ts +2 -2
  429. package/src/hooks/useChatToolbarActions.ts +5 -5
  430. package/src/hooks/useContextBinder.ts +2 -4
  431. package/src/hooks/useDebug.ts +2 -2
  432. package/src/hooks/useHomeSuggestions.ts +55 -0
  433. package/src/hooks/usePresets.ts +80 -11
  434. package/src/hooks/useProcessEphemeralStatus.ts +192 -0
  435. package/src/hooks/useReferencesProvider.ts +1 -1
  436. package/src/hooks/useSkillRegistry.ts +125 -0
  437. package/src/hooks/useTraceMessages.ts +41 -0
  438. package/src/index.ts +1 -1
  439. package/src/meta.ts +3 -31
  440. package/src/operations/create-chat.ts +11 -12
  441. package/src/operations/fork-chat.ts +15 -20
  442. package/src/operations/generate-home-suggestions.test.ts +103 -0
  443. package/src/operations/generate-home-suggestions.ts +116 -0
  444. package/src/operations/index.ts +1 -0
  445. package/src/operations/prompt.node.test.ts +14 -17
  446. package/src/operations/resolve-navigation-targets.ts +32 -19
  447. package/src/operations/run-prompt-in-new-chat.ts +34 -35
  448. package/src/operations/update-chat-name.ts +2 -2
  449. package/src/paths.ts +5 -3
  450. package/src/plugin.workerd.ts +5 -0
  451. package/src/processor/presets.ts +38 -61
  452. package/src/processor/processor.node.test.ts +72 -2
  453. package/src/processor/processor.ts +91 -21
  454. package/src/skills/assistant/index.ts +5 -0
  455. package/src/{blueprints/assistant/blueprint.node.test.ts → skills/assistant/skill.node.test.ts} +8 -8
  456. package/src/{blueprints/assistant/blueprint.ts → skills/assistant/skill.ts} +9 -9
  457. package/src/templates/daily-digest.ts +10 -12
  458. package/src/templates/index.ts +3 -3
  459. package/src/templates/research-brief.ts +15 -13
  460. package/src/templates/routine-templates.test.ts +55 -0
  461. package/src/templates/scaffold.ts +22 -57
  462. package/src/testing/data/trace-timeline-multiple.dx.json +1 -1
  463. package/src/testing/data/trace-timeline-remote.dx.json +1 -1
  464. package/src/testing/data/trace-timeline.dx.json +3430 -1093
  465. package/src/testing/test-generator.test.ts +26 -22
  466. package/src/testing/test-generator.ts +4 -8
  467. package/src/testing/test-trace.ts +2 -1
  468. package/src/testing/trace-timeline.node.test.ts +14 -14
  469. package/src/translations.ts +74 -31
  470. package/src/types/Assistant.ts +3 -1
  471. package/src/types/AssistantCapabilities.ts +24 -3
  472. package/src/types/AssistantEvents.ts +1 -1
  473. package/src/types/AssistantOperation.ts +22 -33
  474. package/src/types/ChatSurface.ts +16 -0
  475. package/src/types/Ollama.ts +59 -0
  476. package/src/types/Settings.ts +12 -10
  477. package/src/types/index.ts +3 -0
  478. package/src/types/service.ts +14 -14
  479. package/src/util/error-cause.ts +21 -0
  480. package/src/util/suggestions.ts +1 -1
  481. package/dist/lib/neutral/AgentArticle-K7XM46OQ.mjs.map +0 -7
  482. package/dist/lib/neutral/AssistantSettings-GG52BLKS.mjs +0 -40
  483. package/dist/lib/neutral/AssistantSettings-GG52BLKS.mjs.map +0 -7
  484. package/dist/lib/neutral/BlueprintArticle-ZBOZNZM7.mjs +0 -27
  485. package/dist/lib/neutral/BlueprintArticle-ZBOZNZM7.mjs.map +0 -7
  486. package/dist/lib/neutral/ChatCompanion-LBUHYWQG.mjs.map +0 -7
  487. package/dist/lib/neutral/ChatDialog-DCA6FLOV.mjs.map +0 -7
  488. package/dist/lib/neutral/PlanArticle-TS5ULWYS.mjs.map +0 -7
  489. package/dist/lib/neutral/RoutineArticle-5NYXHRG6.mjs +0 -119
  490. package/dist/lib/neutral/RoutineArticle-5NYXHRG6.mjs.map +0 -7
  491. package/dist/lib/neutral/RoutineList-SO5ETHNT.mjs +0 -48
  492. package/dist/lib/neutral/RoutineList-SO5ETHNT.mjs.map +0 -7
  493. package/dist/lib/neutral/RoutineProperties-FISLMW2R.mjs +0 -17
  494. package/dist/lib/neutral/RoutineProperties-FISLMW2R.mjs.map +0 -7
  495. package/dist/lib/neutral/TracePanel-KTZJ6JNR.mjs.map +0 -7
  496. package/dist/lib/neutral/TriggerStatus-X7Y5JFZJ.mjs.map +0 -7
  497. package/dist/lib/neutral/agent-hydrator-PJBYVMBW.mjs.map +0 -7
  498. package/dist/lib/neutral/agent-service-WCAP5MLI.mjs.map +0 -7
  499. package/dist/lib/neutral/ai-context-7WRHWYXY.mjs +0 -42
  500. package/dist/lib/neutral/ai-context-7WRHWYXY.mjs.map +0 -7
  501. package/dist/lib/neutral/ai-service-AADUIKBY.mjs.map +0 -7
  502. package/dist/lib/neutral/app-graph-builder-WUFHQH3Y.mjs.map +0 -7
  503. package/dist/lib/neutral/automation-templates-M2XQWGR6.mjs +0 -115
  504. package/dist/lib/neutral/automation-templates-M2XQWGR6.mjs.map +0 -7
  505. package/dist/lib/neutral/blueprint-definition-MH2QLYQH.mjs +0 -39
  506. package/dist/lib/neutral/blueprint-definition-MH2QLYQH.mjs.map +0 -7
  507. package/dist/lib/neutral/blueprints/index.mjs +0 -8
  508. package/dist/lib/neutral/chunk-5H6UJHLF.mjs.map +0 -7
  509. package/dist/lib/neutral/chunk-HLANPOBA.mjs.map +0 -7
  510. package/dist/lib/neutral/chunk-KLYLW4WH.mjs.map +0 -7
  511. package/dist/lib/neutral/chunk-QAZMOFPI.mjs +0 -130
  512. package/dist/lib/neutral/chunk-QAZMOFPI.mjs.map +0 -7
  513. package/dist/lib/neutral/chunk-RKVVK3R3.mjs.map +0 -7
  514. package/dist/lib/neutral/chunk-SMFJD7BP.mjs +0 -8
  515. package/dist/lib/neutral/chunk-XYHPOGTK.mjs +0 -43
  516. package/dist/lib/neutral/chunk-XYHPOGTK.mjs.map +0 -7
  517. package/dist/lib/neutral/chunk-YXRGZYYH.mjs.map +0 -7
  518. package/dist/lib/neutral/companion-chat-provisioner-YZZ73P6E.mjs.map +0 -7
  519. package/dist/lib/neutral/create-chat-SGGQ6HVN.mjs.map +0 -7
  520. package/dist/lib/neutral/create-object-U2SOFZLR.mjs.map +0 -7
  521. package/dist/lib/neutral/fork-chat-34KEF4ZJ.mjs.map +0 -7
  522. package/dist/lib/neutral/integration-provider-RBD3AFJU.mjs.map +0 -7
  523. package/dist/lib/neutral/markdown-extension-YMIFDMYF.mjs +0 -110
  524. package/dist/lib/neutral/markdown-extension-YMIFDMYF.mjs.map +0 -7
  525. package/dist/lib/neutral/react-surface-XRTBW5OJ.mjs.map +0 -7
  526. package/dist/lib/neutral/resolve-navigation-targets-ZHIMMH7L.mjs +0 -22
  527. package/dist/lib/neutral/resolve-navigation-targets-ZHIMMH7L.mjs.map +0 -7
  528. package/dist/lib/neutral/run-prompt-in-new-chat-D5IIE2C7.mjs.map +0 -7
  529. package/dist/lib/neutral/state-H3G7QCU6.mjs.map +0 -7
  530. package/dist/types/src/blueprints/assistant/blueprint.d.ts +0 -4
  531. package/dist/types/src/blueprints/assistant/blueprint.d.ts.map +0 -1
  532. package/dist/types/src/blueprints/assistant/blueprint.node.test.d.ts +0 -2
  533. package/dist/types/src/blueprints/assistant/blueprint.node.test.d.ts.map +0 -1
  534. package/dist/types/src/blueprints/assistant/index.d.ts +0 -2
  535. package/dist/types/src/blueprints/assistant/index.d.ts.map +0 -1
  536. package/dist/types/src/blueprints/index.d.ts.map +0 -1
  537. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -5
  538. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  539. package/dist/types/src/capabilities/integration-provider.d.ts.map +0 -1
  540. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +0 -1
  541. package/dist/types/src/components/RoutineProperties/RoutineProperties.d.ts +0 -7
  542. package/dist/types/src/components/RoutineProperties/RoutineProperties.d.ts.map +0 -1
  543. package/dist/types/src/components/RoutineProperties/RoutineProperties.stories.d.ts +0 -15
  544. package/dist/types/src/components/RoutineProperties/RoutineProperties.stories.d.ts.map +0 -1
  545. package/dist/types/src/components/RoutineProperties/index.d.ts +0 -2
  546. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +0 -13
  547. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +0 -1
  548. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +0 -1
  549. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +0 -21
  550. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +0 -1
  551. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +0 -16
  552. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +0 -1
  553. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts +0 -12
  554. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +0 -1
  555. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts +0 -3
  556. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts.map +0 -1
  557. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts +0 -8
  558. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts.map +0 -1
  559. package/dist/types/src/components/TemplateEditor/index.d.ts +0 -2
  560. package/dist/types/src/components/TemplateEditor/index.d.ts.map +0 -1
  561. package/dist/types/src/components/TemplateEditor/types.d.ts +0 -18
  562. package/dist/types/src/components/TemplateEditor/types.d.ts.map +0 -1
  563. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts +0 -6
  564. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts.map +0 -1
  565. package/dist/types/src/containers/BlueprintArticle/index.d.ts +0 -2
  566. package/dist/types/src/containers/BlueprintArticle/index.d.ts.map +0 -1
  567. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts +0 -6
  568. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts.map +0 -1
  569. package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts +0 -15
  570. package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts.map +0 -1
  571. package/dist/types/src/containers/RoutineArticle/index.d.ts +0 -2
  572. package/dist/types/src/containers/RoutineArticle/index.d.ts.map +0 -1
  573. package/dist/types/src/containers/RoutineList/RoutineList.d.ts +0 -6
  574. package/dist/types/src/containers/RoutineList/RoutineList.d.ts.map +0 -1
  575. package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts +0 -21
  576. package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts.map +0 -1
  577. package/dist/types/src/containers/RoutineList/index.d.ts +0 -2
  578. package/dist/types/src/containers/RoutineList/index.d.ts.map +0 -1
  579. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +0 -66
  580. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +0 -1
  581. package/dist/types/src/hooks/useOnline.d.ts +0 -3
  582. package/dist/types/src/hooks/useOnline.d.ts.map +0 -1
  583. package/dist/types/src/templates/automation-templates.test.d.ts +0 -2
  584. package/dist/types/src/templates/automation-templates.test.d.ts.map +0 -1
  585. package/src/blueprints/assistant/index.ts +0 -5
  586. package/src/capabilities/blueprint-definition.ts +0 -65
  587. package/src/components/AssistantSettings/AssistantSettings.tsx +0 -43
  588. package/src/components/RoutineProperties/RoutineProperties.stories.tsx +0 -59
  589. package/src/components/RoutineProperties/RoutineProperties.tsx +0 -23
  590. package/src/components/RoutineProperties/index.ts +0 -5
  591. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +0 -95
  592. package/src/components/TemplateEditor/TemplateEditor.tsx +0 -80
  593. package/src/components/TemplateEditor/TemplateForm.stories.tsx +0 -76
  594. package/src/components/TemplateEditor/TemplateForm.tsx +0 -204
  595. package/src/components/TemplateEditor/extensions/handlebars-extension.ts +0 -274
  596. package/src/components/TemplateEditor/extensions/index.ts +0 -6
  597. package/src/components/TemplateEditor/extensions/xml-extension.ts +0 -64
  598. package/src/components/TemplateEditor/index.ts +0 -5
  599. package/src/components/TemplateEditor/types.tsx +0 -28
  600. package/src/containers/BlueprintArticle/BlueprintArticle.tsx +0 -29
  601. package/src/containers/BlueprintArticle/index.ts +0 -5
  602. package/src/containers/RoutineArticle/RoutineArticle.stories.tsx +0 -75
  603. package/src/containers/RoutineArticle/RoutineArticle.tsx +0 -109
  604. package/src/containers/RoutineArticle/index.ts +0 -5
  605. package/src/containers/RoutineList/RoutineList.stories.tsx +0 -130
  606. package/src/containers/RoutineList/RoutineList.tsx +0 -50
  607. package/src/containers/RoutineList/index.ts +0 -5
  608. package/src/hooks/useBlueprintRegistry.ts +0 -125
  609. package/src/hooks/useOnline.ts +0 -10
  610. package/src/templates/automation-templates.test.ts +0 -66
  611. package/src/testing/trace-timeline.node.conversations.json +0 -1
  612. /package/dist/lib/neutral/{ChatArticle-VNVZCDUR.mjs.map → ChatArticle-OO7GGEFW.mjs.map} +0 -0
  613. /package/dist/lib/neutral/{edge-model-resolver-BBVOJBGJ.mjs.map → edge-model-resolver-WDJWDZTT.mjs.map} +0 -0
  614. /package/dist/lib/neutral/{blueprints → extensions}/index.mjs.map +0 -0
  615. /package/dist/types/src/{components → containers}/AssistantSettings/AssistantSettings.stories.d.ts +0 -0
  616. /package/dist/types/src/{components → containers}/AssistantSettings/index.d.ts +0 -0
  617. /package/dist/types/src/{blueprints → skills}/index.d.ts +0 -0
  618. /package/src/{components → containers}/AssistantSettings/index.ts +0 -0
  619. /package/src/{blueprints → skills}/index.ts +0 -0
@@ -1,42 +1,48 @@
1
1
  import {
2
2
  useChatContext
3
3
  } from "../chunk-VTK5R4H3.mjs";
4
+ import {
5
+ AiChatProcessor,
6
+ defaultsKeyForProvider,
7
+ presetsForProvider,
8
+ resolveProvider
9
+ } from "../chunk-BXI2R4OO.mjs";
4
10
  import "../chunk-J5LGTIGS.mjs";
5
11
 
6
- // src/hooks/useBlueprintRegistry.ts
12
+ // src/hooks/useSkillRegistry.ts
7
13
  import { useCallback, useEffect, useMemo, useState } from "react";
8
- import { Blueprint } from "@dxos/compute";
14
+ import { Skill } from "@dxos/compute";
9
15
  import { Filter, Obj, Ref } from "@dxos/echo";
10
16
  import { useQuery } from "@dxos/react-client/echo";
11
17
  import { distinctBy } from "@dxos/util";
12
- var useBlueprints = ({ registry, db }) => {
13
- const [registryBlueprints, setRegistryBlueprints] = useState(() => registry?.query(Filter.type(Blueprint.Blueprint)).runSync() ?? []);
18
+ var useSkills = ({ registry, db }) => {
19
+ const [registrySkills, setRegistrySkills] = useState(() => registry?.query(Filter.type(Skill.Skill)).runSync() ?? []);
14
20
  useEffect(() => {
15
21
  if (!registry) {
16
- setRegistryBlueprints([]);
22
+ setRegistrySkills([]);
17
23
  return;
18
24
  }
19
- setRegistryBlueprints(registry.query(Filter.type(Blueprint.Blueprint)).runSync());
25
+ setRegistrySkills(registry.query(Filter.type(Skill.Skill)).runSync());
20
26
  return registry.changed.on(() => {
21
- setRegistryBlueprints(registry.query(Filter.type(Blueprint.Blueprint)).runSync());
27
+ setRegistrySkills(registry.query(Filter.type(Skill.Skill)).runSync());
22
28
  });
23
29
  }, [
24
30
  registry
25
31
  ]);
26
- const spaceBlueprints = useQuery(db, Filter.type(Blueprint.Blueprint));
32
+ const spaceSkills = useQuery(db, Filter.type(Skill.Skill));
27
33
  return useMemo(() => {
28
- const blueprints = distinctBy([
29
- ...registryBlueprints,
30
- ...spaceBlueprints
34
+ const skills = distinctBy([
35
+ ...registrySkills,
36
+ ...spaceSkills
31
37
  ], (b) => Obj.getMeta(b).key);
32
- blueprints.sort(({ name: a }, { name: b }) => a.localeCompare(b));
33
- return blueprints;
38
+ skills.sort(({ name: a }, { name: b }) => a.localeCompare(b));
39
+ return skills;
34
40
  }, [
35
- registryBlueprints,
36
- spaceBlueprints
41
+ registrySkills,
42
+ spaceSkills
37
43
  ]);
38
44
  };
39
- var useActiveBlueprints = ({ context }) => {
45
+ var useActiveSkills = ({ context }) => {
40
46
  const [active, setActive] = useState(/* @__PURE__ */ new Map());
41
47
  useEffect(() => {
42
48
  if (!context) {
@@ -44,58 +50,58 @@ var useActiveBlueprints = ({ context }) => {
44
50
  return;
45
51
  }
46
52
  const updateActive = () => {
47
- const blueprints = context.getBlueprints();
48
- setActive(new Map(blueprints.map((blueprint) => [
49
- Obj.getMeta(blueprint).key,
50
- blueprint
53
+ const skills = context.getSkills();
54
+ setActive(new Map(skills.map((skill) => [
55
+ Obj.getMeta(skill).key,
56
+ skill
51
57
  ]).filter((entry) => entry[0] !== void 0)));
52
58
  };
53
59
  updateActive();
54
- return context.subscribeBlueprints(updateActive);
60
+ return context.subscribeSkills(updateActive);
55
61
  }, [
56
62
  context
57
63
  ]);
58
64
  return active;
59
65
  };
60
- var useBlueprintHandlers = ({ db, context, registry }) => {
61
- const onUpdateBlueprint = useCallback(async (key, checked) => {
66
+ var useSkillHandlers = ({ db, context, registry }) => {
67
+ const onUpdateSkill = useCallback(async (key, checked) => {
62
68
  if (!context) {
63
69
  return;
64
70
  }
65
71
  if (checked) {
66
- const registryBlueprint = registry?.query(Filter.type(Blueprint.Blueprint)).runSync().find((b) => Obj.getMeta(b).key === key);
67
- if (registryBlueprint) {
72
+ const registrySkill = registry?.query(Filter.type(Skill.Skill)).runSync().find((b) => Obj.getMeta(b).key === key);
73
+ if (registrySkill) {
68
74
  await context.bind({
69
- blueprints: [
70
- Ref.fromURI(Blueprint.registryURI(key))
75
+ skills: [
76
+ Ref.fromURI(Skill.registryURI(key))
71
77
  ]
72
78
  });
73
79
  } else {
74
- const objects = await db.query(Filter.type(Blueprint.Blueprint)).run();
75
- const storedBlueprint = objects.find((blueprint) => Obj.getMeta(blueprint).key === key);
76
- if (storedBlueprint) {
80
+ const objects = await db.query(Filter.type(Skill.Skill)).run();
81
+ const storedSkill = objects.find((skill) => Obj.getMeta(skill).key === key);
82
+ if (storedSkill) {
77
83
  await context.bind({
78
- blueprints: [
79
- Ref.make(storedBlueprint)
84
+ skills: [
85
+ Ref.make(storedSkill)
80
86
  ]
81
87
  });
82
88
  }
83
89
  }
84
90
  } else {
85
- const registryBlueprint = registry?.query(Filter.type(Blueprint.Blueprint)).runSync().find((b) => Obj.getMeta(b).key === key);
86
- if (registryBlueprint) {
91
+ const registrySkill = registry?.query(Filter.type(Skill.Skill)).runSync().find((b) => Obj.getMeta(b).key === key);
92
+ if (registrySkill) {
87
93
  await context.unbind({
88
- blueprints: [
89
- Ref.fromURI(Blueprint.registryURI(key))
94
+ skills: [
95
+ Ref.fromURI(Skill.registryURI(key))
90
96
  ]
91
97
  });
92
98
  } else {
93
- const objects = await db.query(Filter.type(Blueprint.Blueprint)).run();
94
- const storedBlueprint = objects.find((blueprint) => Obj.getMeta(blueprint).key === key);
95
- if (storedBlueprint) {
99
+ const objects = await db.query(Filter.type(Skill.Skill)).run();
100
+ const storedSkill = objects.find((skill) => Obj.getMeta(skill).key === key);
101
+ if (storedSkill) {
96
102
  await context.unbind({
97
- blueprints: [
98
- Ref.make(storedBlueprint)
103
+ skills: [
104
+ Ref.make(storedSkill)
99
105
  ]
100
106
  });
101
107
  }
@@ -107,7 +113,7 @@ var useBlueprintHandlers = ({ db, context, registry }) => {
107
113
  registry
108
114
  ]);
109
115
  return {
110
- onUpdateBlueprint
116
+ onUpdateSkill
111
117
  };
112
118
  };
113
119
 
@@ -161,420 +167,32 @@ var useChatKeymapExtensions = ({ event }) => {
161
167
 
162
168
  // src/hooks/useChatProcessor.ts
163
169
  import { RegistryContext } from "@effect-atom/atom-react";
164
- import * as Effect2 from "effect/Effect";
170
+ import * as Effect from "effect/Effect";
165
171
  import * as Layer from "effect/Layer";
166
172
  import { useContext, useMemo as useMemo3, useState as useState2 } from "react";
167
173
  import { AiService, OpaqueToolkit } from "@dxos/ai";
168
174
  import { Capabilities } from "@dxos/app-framework";
169
175
  import { useCapability } from "@dxos/app-framework/ui";
170
176
  import { AiSession } from "@dxos/assistant";
171
- import { Credential, ServiceResolver } from "@dxos/compute";
172
- import { Database, Feed, Ref as Ref2, Registry } from "@dxos/echo";
173
- import { createFeedServiceLayer } from "@dxos/echo-client";
174
- import { EffectEx as EffectEx2 } from "@dxos/effect";
175
- import { AgentService as AgentService2 } from "@dxos/functions-runtime";
176
- import { log as log2 } from "@dxos/log";
177
- import { useAsyncEffect } from "@dxos/react-ui";
178
-
179
- // src/processor/presets.ts
180
- import * as Schema from "effect/Schema";
181
- var ModelProviders = [
182
- "dxos-local",
183
- "dxos-remote",
184
- "lm-studio",
185
- "ollama"
186
- ];
187
- var ModelProvider = Schema.Literal(...ModelProviders);
188
- var createModelLabel = (model) => {
189
- const parts = model.split(".");
190
- return parts[parts.length - 1];
191
- };
192
- var AiServicePresets = [
193
- // Sonnet is first so it is the default selection.
194
- {
195
- provider: "dxos-remote",
196
- model: "ai.claude.model.claude-sonnet-4-6",
197
- label: "Claude Sonnet"
198
- },
199
- {
200
- provider: "dxos-remote",
201
- model: "ai.claude.model.claude-opus-4-8",
202
- label: "Claude Opus"
203
- },
204
- {
205
- provider: "dxos-remote",
206
- model: "ai.claude.model.claude-haiku-4-5",
207
- label: "Claude Haiku"
208
- },
209
- {
210
- provider: "ollama",
211
- model: "ai.ollama.model.gpt-oss:20b"
212
- },
213
- {
214
- provider: "ollama",
215
- model: "ai.ollama.model.gemma4:latest"
216
- },
217
- {
218
- provider: "lm-studio",
219
- model: "ai.google.model.gemma-3-27b"
220
- },
221
- {
222
- provider: "lm-studio",
223
- model: "ai.meta.model.llama-3.2-3b-instruct"
224
- },
225
- {
226
- model: "ai.ollama.model.deepseek-r1:latest",
227
- provider: "dxos-local"
228
- }
229
- ].map(({ model, provider, label }, i) => ({
230
- id: `preset-${i}`,
231
- provider,
232
- model,
233
- label: label ?? createModelLabel(model)
234
- }));
235
-
236
- // src/processor/processor.ts
237
- import { Atom, Registry as AtomRegistry } from "@effect-atom/atom-react";
238
- import * as AiError from "@effect/ai/AiError";
239
- import * as Cause from "effect/Cause";
240
- import * as Effect from "effect/Effect";
241
- import * as Exit from "effect/Exit";
242
- import * as Fiber from "effect/Fiber";
243
- import * as Option from "effect/Option";
244
- import * as Stream from "effect/Stream";
245
- import { DEFAULT_EDGE_MODEL } from "@dxos/ai";
246
- import { AiContext, createSystemPrompt, formatSystemPrompt, McpServerError, PartialBlock, ToolExecutionServices } from "@dxos/assistant";
247
- import { Operation, Trace } from "@dxos/compute";
248
- import { Obj as Obj2 } from "@dxos/echo";
177
+ import { AgentService, Credential, ServiceResolver } from "@dxos/compute";
178
+ import { Database, Obj as Obj2, Ref as Ref2, Registry } from "@dxos/echo";
249
179
  import { EffectEx } from "@dxos/effect";
250
- import { AgentService } from "@dxos/functions-runtime";
251
180
  import { log } from "@dxos/log";
252
- import { Message } from "@dxos/types";
253
- import { AssistantOperation } from "#types";
254
- var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/processor/processor.ts";
255
- var defaultOptions = {
256
- model: DEFAULT_EDGE_MODEL
257
- };
258
- var parseError = (err) => {
259
- let message;
260
- if (AiError.isAiError(err)) {
261
- message = err.description?.trim() || err.message;
262
- } else if (typeof err === "string") {
263
- const [, model] = err.match(/model\s+'([^']+)'\s+not\s+found/i) || [];
264
- if (model) {
265
- message = `The model is not available: ${model}`;
266
- }
267
- }
268
- if (!message) {
269
- message = "An unexpected error occurred.";
270
- }
271
- return new Error(message, {
272
- cause: err
273
- });
274
- };
275
- var AiChatProcessor = class {
276
- _conversation;
277
- _runtime;
278
- _feed;
279
- _spaceLayer;
280
- _options;
281
- #registry;
282
- /** Pending messages (finalized, non-streaming). */
283
- #pending = Atom.make([]);
284
- /** Currently streaming messages (from ephemeral trace events). */
285
- #streaming = Atom.make([]);
286
- /** Set of message IDs that have been finalized (non-pending delivered via ephemeral). */
287
- #finalizedIds = /* @__PURE__ */ new Set();
288
- /** Currently active request fiber. */
289
- #requestFiber;
290
- /** Last request (for retries). */
291
- #lastRequest;
292
- /** Streaming state. */
293
- streaming = Atom.make((get) => get(this.#streaming).length > 0);
294
- /** Active state. */
295
- active = Atom.make(false);
296
- /** Array of Messages (incl. the current message being streamed). */
297
- messages = Atom.make((get) => [
298
- ...get(this.#pending),
299
- ...get(this.#streaming)
300
- ]);
301
- /** Last error. */
302
- error = Atom.make(Option.none());
303
- /**
304
- * MCP server connection errors observed during the most recent request.
305
- * Misconfigured/unreachable servers are dropped from the toolkit so the chat
306
- * keeps working; the entries here let the UI display which servers failed.
307
- */
308
- mcpErrors = Atom.make([]);
309
- constructor(_conversation, _runtime, _feed, _spaceLayer, _options = defaultOptions) {
310
- this._conversation = _conversation;
311
- this._runtime = _runtime;
312
- this._feed = _feed;
313
- this._spaceLayer = _spaceLayer;
314
- this._options = _options;
315
- this.#registry = this._options.observableRegistry ?? AtomRegistry.make();
316
- if (this._options.model && !this._options.system) {
317
- const capabilities = this._options.modelRegistry?.getCapabilities(this._options.model) ?? {};
318
- this._options.system = createSystemPrompt(capabilities);
319
- }
320
- }
321
- get context() {
322
- return this._conversation.context;
323
- }
324
- get conversation() {
325
- return this._conversation;
326
- }
327
- get registry() {
328
- return this._options.registry;
329
- }
330
- get system() {
331
- return this._options.system ?? "";
332
- }
333
- async getTools() {
334
- return this._runtime.runPromise(Effect.provide(this._conversation.getTools(), ToolExecutionServices).pipe(Effect.provide(this._spaceLayer)));
335
- }
336
- async getSystemPrompt() {
337
- return this._runtime.runPromise(Effect.gen(this, function* () {
338
- const blueprints = this.context.getBlueprints();
339
- const objects = this.context.getObjects();
340
- return yield* formatSystemPrompt({
341
- system: this._options.system,
342
- blueprints,
343
- objects
344
- });
345
- }).pipe(Effect.provideService(AiContext.Service, {
346
- binder: this.context
347
- }), Effect.provide(this._spaceLayer), Effect.orDie));
348
- }
349
- /**
350
- * Initiates a new request via AgentService.
351
- */
352
- async request(requestProp) {
353
- if (this.#requestFiber) {
354
- await this.cancel();
355
- }
356
- try {
357
- this.#lastRequest = requestProp;
358
- this.#registry.set(this.error, Option.none());
359
- this.#registry.set(this.mcpErrors, []);
360
- this.#registry.set(this.active, true);
361
- const effect = Effect.gen(this, function* () {
362
- log.info("init agent session", {
363
- feed: Obj2.getURI(this._feed),
364
- model: this._options.model
365
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 136, S: this });
366
- const session = yield* AgentService.getSession(this._feed, {
367
- model: this._options.model
368
- });
369
- const ephemeralStream = session.subscribeEphemeral();
370
- yield* ephemeralStream.pipe(Stream.runForEach((message) => Effect.sync(() => {
371
- for (const event of message.events) {
372
- if (Trace.isOfType(PartialBlock, event)) {
373
- this.#handleEphemeralMessage(event.data);
374
- } else if (Trace.isOfType(McpServerError, event)) {
375
- this.#handleMcpError(event.data);
376
- }
377
- }
378
- })), Effect.fork);
379
- log("chat processor submitting prompt", {
380
- length: requestProp.message.length
381
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 153, S: this });
382
- yield* session.submitPrompt(requestProp.message);
383
- log("chat processor submitPrompt returned, waiting for agent", {}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 157, S: this });
384
- if (!this._options.chat?.target?.name) {
385
- yield* this.#updateChatName(requestProp.message);
386
- }
387
- yield* session.waitForCompletion();
388
- log.info("session complete", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 164, S: this });
389
- this.#flushStreaming();
390
- });
391
- this.#requestFiber = this._runtime.runFork(effect.pipe(Effect.provide(this._spaceLayer)));
392
- const exit = await this._runtime.runPromise(Fiber.await(this.#requestFiber));
393
- if (Exit.isFailure(exit)) {
394
- if (Cause.isInterruptedOnly(exit.cause)) {
395
- return;
396
- }
397
- throw EffectEx.causeToError(exit.cause);
398
- }
399
- this.#registry.set(this.error, Option.none());
400
- this.#lastRequest = void 0;
401
- this.#requestFiber = void 0;
402
- } catch (err) {
403
- log.error("request failed", {
404
- error: err
405
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 183, S: this });
406
- this.#registry.set(this.error, Option.some(parseError(err)));
407
- } finally {
408
- log.info("setting active to false", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 188, S: this });
409
- this.#registry.set(this.active, false);
410
- this.#requestFiber = void 0;
411
- }
412
- }
413
- /**
414
- * Cancels the current request.
415
- */
416
- async cancel() {
417
- await EffectEx.runAndForwardErrors(Effect.gen(this, function* () {
418
- log.info("cancelling request", {
419
- fiber: this.#requestFiber
420
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 197, S: this });
421
- if (this.#requestFiber) {
422
- yield* Fiber.interrupt(this.#requestFiber);
423
- }
424
- const session = yield* AgentService.getSession(this._feed);
425
- yield* session.terminate();
426
- }).pipe(Effect.provide(this._spaceLayer)));
427
- this.#requestFiber = void 0;
428
- this.#registry.set(this.active, false);
429
- }
430
- /**
431
- * Retry last failed request.
432
- */
433
- async retry() {
434
- if (this.#lastRequest) {
435
- return this.request(this.#lastRequest);
436
- }
437
- }
438
- /**
439
- * Clears the recorded MCP server errors (e.g. after the user dismisses the warning banner).
440
- */
441
- dismissMcpErrors() {
442
- this.#registry.set(this.mcpErrors, []);
443
- }
444
- /**
445
- * Update the current chat's name.
446
- */
447
- async updateName(chat) {
448
- const spaceId = Obj2.getDatabase(chat)?.spaceId;
449
- if (!spaceId) {
450
- return;
451
- }
452
- EffectEx.unwrapExit(await this._runtime.runPromiseExit(Operation.invoke(AssistantOperation.UpdateChatName, {
453
- chat
454
- }, {
455
- spaceId
456
- }).pipe(Effect.provide(this._spaceLayer))));
457
- }
458
- /**
459
- * Handles an ephemeral message from the agent process.
460
- * Both pending and completed blocks arrive here. Completed blocks are deduped
461
- * against messages already written to the feed queue to handle the race between
462
- * ephemeral delivery and feed replication.
463
- */
464
- #handleEphemeralMessage(event) {
465
- const isPending = event.block.pending;
466
- const message = Obj2.make(Message.Message, {
467
- id: event.messageId,
468
- created: (/* @__PURE__ */ new Date()).toISOString(),
469
- sender: {
470
- role: event.role
471
- },
472
- blocks: [
473
- event.block
474
- ]
475
- });
476
- if (isPending) {
477
- if (this.#finalizedIds.has(event.messageId)) {
478
- return;
479
- }
480
- this.#registry.update(this.#streaming, (streaming) => {
481
- const idx = streaming.findIndex((existing) => existing.id === event.messageId);
482
- if (idx >= 0) {
483
- const updated = [
484
- ...streaming
485
- ];
486
- updated[idx] = message;
487
- return updated;
488
- }
489
- return [
490
- ...streaming,
491
- message
492
- ];
493
- });
494
- } else {
495
- this.#finalizedIds.add(event.messageId);
496
- this.#registry.update(this.#streaming, (streaming) => streaming.filter((existing) => existing.id !== message.id));
497
- this.#registry.update(this.#pending, (pending) => {
498
- if (pending.some((existing) => existing.id === message.id)) {
499
- return pending;
500
- }
501
- return [
502
- ...pending,
503
- message
504
- ];
505
- });
506
- }
507
- }
508
- /**
509
- * Records a per-server MCP failure, deduped by url+protocol so repeat misconfigurations
510
- * across turns do not spam the UI.
511
- */
512
- #handleMcpError(event) {
513
- log.warn("MCP server error", event, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 287, S: this });
514
- this.#registry.update(this.mcpErrors, (errors) => {
515
- if (errors.some((existing) => existing.url === event.url && existing.protocol === event.protocol)) {
516
- return errors;
517
- }
518
- return [
519
- ...errors,
520
- event
521
- ];
522
- });
523
- }
524
- /**
525
- * Move remaining streaming messages to pending (called when agent completes).
526
- */
527
- #flushStreaming() {
528
- const remaining = this.#registry.get(this.#streaming);
529
- if (remaining.length > 0) {
530
- this.#registry.update(this.#pending, (pending) => [
531
- ...pending,
532
- ...remaining
533
- ]);
534
- this.#registry.set(this.#streaming, []);
535
- }
536
- this.#finalizedIds.clear();
537
- }
538
- /**
539
- * Schedule a chat name update as a detached (fire-and-forget) operation.
540
- * Called automatically on the first message; can also be invoked manually via the toolbar.
541
- */
542
- #updateChatName(prompt) {
543
- const chat = this._options.chat?.target;
544
- if (!chat) {
545
- return Effect.void;
546
- }
547
- const spaceId = Obj2.getDatabase(chat)?.spaceId;
548
- if (!spaceId) {
549
- return Effect.void;
550
- }
551
- log.info("scheduling chat name update", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 323, S: this });
552
- return Operation.schedule(AssistantOperation.UpdateChatName, {
553
- chat,
554
- prompt
555
- }, {
556
- spaceId
557
- });
558
- }
559
- };
560
-
561
- // src/hooks/useChatProcessor.ts
562
- var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/hooks/useChatProcessor.ts";
181
+ import { useObject } from "@dxos/react-client/echo";
182
+ import { useAsyncEffect } from "@dxos/react-ui";
183
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/hooks/useChatProcessor.ts";
563
184
  var useChatProcessor = ({ space, chat, preset, runtime: runtime3, registry, settings }) => {
564
185
  const observableRegistry = useContext(RegistryContext);
186
+ const [feedSnapshot] = useObject(chat?.feed);
187
+ const feed = Obj2.getReactiveOrUndefined(feedSnapshot);
565
188
  const [session, setSession] = useState2();
566
189
  useAsyncEffect(async () => {
567
- if (!space || !chat) {
568
- return;
569
- }
570
- const feedTarget = chat.feed.target;
571
- if (!feedTarget) {
190
+ if (!space || !chat || !feed) {
572
191
  return;
573
192
  }
574
- const feedServiceLayer = createFeedServiceLayer(space.queues);
575
- const runtime4 = await EffectEx2.runAndForwardErrors(Effect2.runtime().pipe(Effect2.provide(feedServiceLayer)));
193
+ const runtime4 = await EffectEx.runAndForwardErrors(Effect.runtime().pipe(Effect.provide(Database.layer(space.db))));
576
194
  const session2 = new AiSession.Session({
577
- feed: feedTarget,
195
+ feed,
578
196
  runtime: runtime4,
579
197
  registry: observableRegistry
580
198
  });
@@ -586,9 +204,9 @@ var useChatProcessor = ({ space, chat, preset, runtime: runtime3, registry, sett
586
204
  };
587
205
  }, [
588
206
  space,
589
- chat?.feed.target
207
+ chat,
208
+ feed
590
209
  ]);
591
- const feed = chat?.feed.target;
592
210
  const serviceResolver = useCapability(Capabilities.ServiceResolver);
593
211
  const processor = useMemo3(() => {
594
212
  if (!runtime3 || !session || !chat || !feed || !space) {
@@ -596,17 +214,18 @@ var useChatProcessor = ({ space, chat, preset, runtime: runtime3, registry, sett
596
214
  }
597
215
  const spaceLayer = ServiceResolver.provide({
598
216
  space: space.id
599
- }, Database.Service, Feed.FeedService, Credential.CredentialsService, AiService.AiService, AgentService2.AgentService, Registry.Service, OpaqueToolkit.OpaqueToolkitProvider).pipe(Layer.provide(Layer.succeed(ServiceResolver.ServiceResolver, serviceResolver)));
600
- log2("creating processor", {
217
+ }, Database.Service, Credential.CredentialsService, AiService.AiService, AgentService.AgentService, Registry.Service, OpaqueToolkit.OpaqueToolkitProvider).pipe(Layer.provide(Layer.succeed(ServiceResolver.ServiceResolver, serviceResolver)));
218
+ log("creating processor", {
601
219
  preset,
602
220
  model: preset?.model,
603
221
  settings
604
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 59, S: void 0 });
222
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 56, S: void 0 });
605
223
  return new AiChatProcessor(session, runtime3, feed, spaceLayer, {
606
224
  chat: chat ? Ref2.make(chat) : void 0,
607
225
  observableRegistry,
608
226
  registry,
609
- model: preset?.model
227
+ model: preset?.model,
228
+ provider: preset?.provider
610
229
  });
611
230
  }, [
612
231
  runtime3,
@@ -623,26 +242,26 @@ var useChatProcessor = ({ space, chat, preset, runtime: runtime3, registry, sett
623
242
  // src/hooks/useChatServices.ts
624
243
  import { Capabilities as Capabilities2 } from "@dxos/app-framework";
625
244
  import { useCapability as useCapability2 } from "@dxos/app-framework/ui";
626
- import { getPersonalSpace } from "@dxos/app-toolkit";
245
+ import { AppSpace } from "@dxos/app-toolkit";
627
246
  import { useClient } from "@dxos/react-client";
628
247
  var useChatServices = ({ id }) => {
629
248
  const client = useClient();
630
- id ??= getPersonalSpace(client)?.id;
249
+ id ??= AppSpace.getPersonalSpace(client)?.id;
631
250
  const runtime3 = useCapability2(Capabilities2.ProcessManagerRuntime);
632
251
  return id ? runtime3 : void 0;
633
252
  };
634
253
 
635
254
  // src/hooks/useChatToolbarActions.ts
636
- import * as Effect3 from "effect/Effect";
255
+ import * as Effect2 from "effect/Effect";
637
256
  import { useOperationInvoker } from "@dxos/app-framework/ui";
638
257
  import { Chat } from "@dxos/assistant-toolkit";
639
258
  import { Filter as Filter2, Obj as Obj3, Query, Type } from "@dxos/echo";
640
- import { EffectEx as EffectEx3 } from "@dxos/effect";
259
+ import { EffectEx as EffectEx2 } from "@dxos/effect";
641
260
  import { invariant } from "@dxos/invariant";
642
261
  import { MenuBuilder, useMenuBuilder } from "@dxos/react-ui-menu";
643
262
  import { meta } from "#meta";
644
- import { AssistantOperation as AssistantOperation2 } from "#types";
645
- var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/hooks/useChatToolbarActions.ts";
263
+ import { AssistantOperation } from "#types";
264
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/hooks/useChatToolbarActions.ts";
646
265
  var useChatToolbarActions = ({ chat, companionTo }) => {
647
266
  const { invoke } = useOperationInvoker();
648
267
  const { db } = useChatContext("useChatToolbarActions");
@@ -652,67 +271,67 @@ var useChatToolbarActions = ({ chat, companionTo }) => {
652
271
  label: [
653
272
  "chat-toolbar.title",
654
273
  {
655
- ns: meta.id
274
+ ns: meta.profile.key
656
275
  }
657
276
  ]
658
277
  }).action("new", {
659
278
  label: [
660
279
  "new-thread.button",
661
280
  {
662
- ns: meta.id
281
+ ns: meta.profile.key
663
282
  }
664
283
  ],
665
284
  icon: "ph--plus--regular",
666
285
  type: "new",
667
286
  disabled: !companionTo
668
287
  }, () => {
669
- invariant(companionTo, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 38, S: void 0, A: ["companionTo", ""] });
670
- return invoke(AssistantOperation2.SetCurrentChat, {
288
+ invariant(companionTo, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 38, S: void 0, A: ["companionTo", ""] });
289
+ return invoke(AssistantOperation.SetCurrentChat, {
671
290
  companionTo,
672
291
  chat: void 0
673
- }).pipe(EffectEx3.runAndForwardErrors);
292
+ }).pipe(EffectEx2.runAndForwardErrors);
674
293
  }).action("rename", {
675
294
  label: [
676
295
  "rename-thread.button",
677
296
  {
678
- ns: meta.id
297
+ ns: meta.profile.key
679
298
  }
680
299
  ],
681
300
  icon: "ph--magic-wand--regular",
682
301
  type: "rename",
683
302
  disabled: !chat
684
- }, () => Effect3.gen(function* () {
685
- invariant(chat, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 54, S: this, A: ["chat", ""] });
686
- yield* invoke(AssistantOperation2.UpdateChatName, {
303
+ }, () => Effect2.gen(function* () {
304
+ invariant(chat, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 54, S: this, A: ["chat", ""] });
305
+ yield* invoke(AssistantOperation.UpdateChatName, {
687
306
  chat
688
307
  }, {
689
308
  spaceId: db?.spaceId
690
309
  });
691
- }).pipe(EffectEx3.runAndForwardErrors)).action("branch", {
310
+ }).pipe(EffectEx2.runAndForwardErrors)).action("branch", {
692
311
  label: [
693
312
  "branch-thread.menu",
694
313
  {
695
- ns: meta.id
314
+ ns: meta.profile.key
696
315
  }
697
316
  ],
698
317
  icon: "ph--git-branch--regular",
699
318
  type: "branch",
700
319
  disabled: !chat || !db
701
- }, () => Effect3.gen(function* () {
702
- invariant(chat, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 71, S: this, A: ["chat", ""] });
703
- yield* invoke(AssistantOperation2.ForkChat, {
320
+ }, () => Effect2.gen(function* () {
321
+ invariant(chat, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 71, S: this, A: ["chat", ""] });
322
+ yield* invoke(AssistantOperation.ForkChat, {
704
323
  chat,
705
324
  companionTo
706
325
  }, {
707
326
  spaceId: db?.spaceId
708
327
  });
709
- }).pipe(EffectEx3.runAndForwardErrors));
328
+ }).pipe(EffectEx2.runAndForwardErrors));
710
329
  if (chats.length > 0) {
711
330
  builder.group("chats", {
712
331
  label: [
713
332
  "chat-history.label",
714
333
  {
715
- ns: meta.id
334
+ ns: meta.profile.key
716
335
  }
717
336
  ],
718
337
  icon: "ph--clock-counter-clockwise--regular",
@@ -728,13 +347,13 @@ var useChatToolbarActions = ({ chat, companionTo }) => {
728
347
  ns: Type.getTypename(Chat.Chat)
729
348
  }
730
349
  ]
731
- }, () => Effect3.gen(function* () {
732
- invariant(companionTo, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 102, S: this, A: ["companionTo", ""] });
733
- yield* invoke(AssistantOperation2.SetCurrentChat, {
350
+ }, () => Effect2.gen(function* () {
351
+ invariant(companionTo, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 102, S: this, A: ["companionTo", ""] });
352
+ yield* invoke(AssistantOperation.SetCurrentChat, {
734
353
  companionTo,
735
354
  chat: chat2
736
355
  });
737
- }).pipe(EffectEx3.runAndForwardErrors));
356
+ }).pipe(EffectEx2.runAndForwardErrors));
738
357
  });
739
358
  });
740
359
  }
@@ -749,11 +368,11 @@ var useChatToolbarActions = ({ chat, companionTo }) => {
749
368
 
750
369
  // src/hooks/useContextBinder.ts
751
370
  import { RegistryContext as RegistryContext2 } from "@effect-atom/atom-react";
752
- import * as Effect4 from "effect/Effect";
371
+ import * as Effect3 from "effect/Effect";
753
372
  import { useContext as useContext2, useState as useState3 } from "react";
754
- import { AiContext as AiContext2 } from "@dxos/assistant";
755
- import { createFeedServiceLayer as createFeedServiceLayer2 } from "@dxos/echo-client";
756
- import { EffectEx as EffectEx4 } from "@dxos/effect";
373
+ import { AiContext } from "@dxos/assistant";
374
+ import { Database as Database2 } from "@dxos/echo";
375
+ import { EffectEx as EffectEx3 } from "@dxos/effect";
757
376
  import { useAsyncEffect as useAsyncEffect2 } from "@dxos/react-ui";
758
377
  var useContextBinder = (space, feed) => {
759
378
  const registry = useContext2(RegistryContext2);
@@ -763,9 +382,8 @@ var useContextBinder = (space, feed) => {
763
382
  if (!space || !feed) {
764
383
  return;
765
384
  }
766
- const feedServiceLayer = createFeedServiceLayer2(space.queues);
767
- const runtime3 = await EffectEx4.runAndForwardErrors(Effect4.runtime().pipe(Effect4.provide(feedServiceLayer)));
768
- const binder2 = new AiContext2.Binder({
385
+ const runtime3 = await EffectEx3.runAndForwardErrors(Effect3.runtime().pipe(Effect3.provide(Database2.layer(space.db))));
386
+ const binder2 = new AiContext.Binder({
769
387
  feed,
770
388
  runtime: runtime3,
771
389
  registry
@@ -783,9 +401,9 @@ var useContextBinder = (space, feed) => {
783
401
  };
784
402
 
785
403
  // src/hooks/useContextObjects.ts
786
- import { Atom as Atom2, useAtomValue } from "@effect-atom/atom-react";
404
+ import { Atom, useAtomValue } from "@effect-atom/atom-react";
787
405
  import { useCallback as useCallback2 } from "react";
788
- var emptyObjectsAtom = Atom2.make([]);
406
+ var emptyObjectsAtom = Atom.make([]);
789
407
  var useContextObjects = ({ db, context }) => {
790
408
  const objects = useAtomValue(context?.objects ?? emptyObjectsAtom);
791
409
  const handleUpdateObject = useCallback2(async (dxn, checked) => {
@@ -823,12 +441,12 @@ import { trim } from "@dxos/util";
823
441
  var useDebug = ({ processor }) => {
824
442
  return useCallback3(async () => {
825
443
  const objects = processor.context.getObjects();
826
- const blueprints = processor.context.getBlueprints();
444
+ const skills = processor.context.getSkills();
827
445
  const system = await processor.getSystemPrompt();
828
446
  const tools = await processor.getTools() ?? {};
829
447
  console.group("Chat", {
830
448
  objects,
831
- blueprints
449
+ skills
832
450
  });
833
451
  try {
834
452
  console.log(trim`
@@ -848,12 +466,12 @@ var useDebug = ({ processor }) => {
848
466
  };
849
467
 
850
468
  // src/hooks/useFilteredTypes.ts
851
- import * as Option2 from "effect/Option";
469
+ import * as Option from "effect/Option";
852
470
  import { useEffect as useEffect2, useState as useState4 } from "react";
853
471
  import { Type as Type2 } from "@dxos/echo";
854
472
  import { HiddenAnnotation, getTypeAnnotation } from "@dxos/echo/Annotation";
855
473
  import { Kind as EntityKind } from "@dxos/echo/Entity";
856
- var getFilteredTypes = (db) => Array.from(new Set(db.graph.registry.list().filter(Type2.isType).filter((schema) => getTypeAnnotation(Type2.getSchema(schema))?.kind !== EntityKind.Relation).filter((schema) => !HiddenAnnotation.get(Type2.getSchema(schema)).pipe(Option2.getOrElse(() => false)))));
474
+ var getFilteredTypes = (db) => Array.from(new Set(db.graph.registry.list().filter(Type2.isType).filter((schema) => getTypeAnnotation(Type2.getSchema(schema))?.kind !== EntityKind.Relation).filter((schema) => !HiddenAnnotation.get(Type2.getSchema(schema)).pipe(Option.getOrElse(() => false)))));
857
475
  var useFilteredTypes = (db) => {
858
476
  const [types, setTypes] = useState4([]);
859
477
  useEffect2(() => {
@@ -900,22 +518,45 @@ var useFlush = (space) => {
900
518
  };
901
519
  };
902
520
 
903
- // src/hooks/useOnline.ts
904
- import { useState as useState6 } from "react";
905
- var useOnline = () => {
906
- const [online, setOnline] = useState6(true);
907
- return [
908
- online,
909
- setOnline
910
- ];
911
- };
912
-
913
521
  // src/hooks/usePresets.ts
914
- import { useCallback as useCallback5, useEffect as useEffect3, useMemo as useMemo4, useState as useState7 } from "react";
915
- var usePresets = (online) => {
916
- const [preset, setPreset] = useState7();
917
- const presets = useMemo4(() => AiServicePresets.filter((preset2) => online === (preset2.provider === "dxos-remote")), [
918
- online
522
+ import { useAtomValue as useAtomValue2 } from "@effect-atom/atom-react";
523
+ import { useCallback as useCallback5, useEffect as useEffect3, useMemo as useMemo4, useState as useState6 } from "react";
524
+ import { Provider } from "@dxos/ai";
525
+ import { useOptionalCapability } from "@dxos/app-framework/ui";
526
+ import { EffectEx as EffectEx4 } from "@dxos/effect";
527
+ import { AssistantCapabilities, Ollama } from "#types";
528
+ var usePresets = (settings) => {
529
+ const [preset, setPreset] = useState6();
530
+ const ollamaManager = useOptionalCapability(AssistantCapabilities.OllamaManager);
531
+ const provider = resolveProvider(settings.modelProvider, !!ollamaManager);
532
+ const defaultModel = settings.modelDefaults?.[defaultsKeyForProvider(provider)];
533
+ const localModels = useAtomValue2(ollamaManager?.state ?? Ollama.emptyState);
534
+ useEffect3(() => {
535
+ if (provider === Provider.builtIn.id && ollamaManager && localModels.kind === "idle") {
536
+ void EffectEx4.runPromise(ollamaManager.refresh);
537
+ }
538
+ }, [
539
+ provider,
540
+ ollamaManager,
541
+ localModels.kind
542
+ ]);
543
+ const lmStudioProbeUrl = provider === Provider.lmStudio.id && ollamaManager ? `${Provider.lmStudio.endpoint}/v1/models` : void 0;
544
+ const lmStudioReachable = useEndpointReachable(lmStudioProbeUrl);
545
+ const presets = useMemo4(() => {
546
+ const base = presetsForProvider(provider);
547
+ if (provider === Provider.lmStudio.id && ollamaManager) {
548
+ return lmStudioReachable ? base : [];
549
+ }
550
+ if (provider === Provider.builtIn.id && ollamaManager) {
551
+ const installed = new Set(localModels.models.map((model) => model.name));
552
+ return base.filter((preset2) => installed.has(preset2.backend));
553
+ }
554
+ return base;
555
+ }, [
556
+ provider,
557
+ ollamaManager,
558
+ lmStudioReachable,
559
+ localModels
919
560
  ]);
920
561
  const presetOptions = useMemo4(() => presets.map(({ id, model, label }) => ({
921
562
  id,
@@ -924,9 +565,11 @@ var usePresets = (online) => {
924
565
  presets
925
566
  ]);
926
567
  useEffect3(() => {
927
- setPreset(presets[0]);
568
+ const configured = defaultModel ? presets.find((preset2) => preset2.model === defaultModel) : void 0;
569
+ setPreset(configured ?? presets[0]);
928
570
  }, [
929
- presets
571
+ presets,
572
+ defaultModel
930
573
  ]);
931
574
  const handlePresetChange = useCallback5((id) => {
932
575
  const preset2 = presets.find((preset3) => preset3.id === id);
@@ -942,6 +585,29 @@ var usePresets = (online) => {
942
585
  onPresetChange: handlePresetChange
943
586
  };
944
587
  };
588
+ var useEndpointReachable = (url) => {
589
+ const [reachable, setReachable] = useState6(false);
590
+ useEffect3(() => {
591
+ if (!url) {
592
+ setReachable(false);
593
+ return;
594
+ }
595
+ let active = true;
596
+ const controller = new AbortController();
597
+ const timer = setTimeout(() => controller.abort(), 1500);
598
+ fetch(url, {
599
+ signal: controller.signal
600
+ }).then((response) => active && setReachable(response.ok)).catch(() => active && setReachable(false)).finally(() => clearTimeout(timer));
601
+ return () => {
602
+ active = false;
603
+ controller.abort();
604
+ clearTimeout(timer);
605
+ };
606
+ }, [
607
+ url
608
+ ]);
609
+ return reachable;
610
+ };
945
611
 
946
612
  // src/hooks/useReferencesProvider.ts
947
613
  import { useMemo as useMemo5 } from "react";
@@ -972,10 +638,225 @@ var useReferencesProvider = (space) => {
972
638
  ]);
973
639
  };
974
640
  var stringMatch = (query, label) => label.toLowerCase().startsWith(query.toLowerCase());
641
+
642
+ // src/hooks/useTraceMessages.ts
643
+ import { Atom as Atom2 } from "@effect-atom/atom";
644
+ import { useAtomValue as useAtomValue3 } from "@effect-atom/atom-react";
645
+ import { pipe } from "effect/Function";
646
+ import { useMemo as useMemo6 } from "react";
647
+ import { Trace } from "@dxos/compute";
648
+ import { Filter as Filter4, Query as Query2 } from "@dxos/echo";
649
+ import { FeedTraceSink } from "@dxos/functions-runtime";
650
+ var atomEmpty = Atom2.make(() => []);
651
+ var getTraceMessagesAtom = (space) => pipe(space.db.query(FeedTraceSink.query).atom, Atom2.map((feeds) => (
652
+ // TODO(dmaretskyi): Single query with limit(1) and feed traversal when query supports it.
653
+ space.db.query(feeds.length > 0 ? Query2.type(Trace.Message).from(feeds[0]) : Query2.select(Filter4.nothing())).atom
654
+ )), (atom) => Atom2.make((get) => get(get(atom))));
655
+ var useTraceMessages = (space) => {
656
+ const atom = useMemo6(() => space ? getTraceMessagesAtom(space) : atomEmpty, [
657
+ space
658
+ ]);
659
+ return useAtomValue3(atom);
660
+ };
661
+
662
+ // src/hooks/useHomeSuggestions.ts
663
+ import { useMemo as useMemo7, useState as useState7 } from "react";
664
+ import { useOperationInvoker as useOperationInvoker2 } from "@dxos/app-framework/ui";
665
+ import { useAsyncEffect as useAsyncEffect3, useTranslation } from "@dxos/react-ui";
666
+ import { meta as meta2 } from "#meta";
667
+ import { AssistantOperation as AssistantOperation2 } from "#types";
668
+ var FALLBACK_SUGGESTION_KEYS = [
669
+ "space-home.suggestion-magazine.label",
670
+ "space-home.suggestion-spreadsheet.label",
671
+ "space-home.suggestion-kanban.label"
672
+ ];
673
+ var useHomeSuggestions = (space) => {
674
+ const { t } = useTranslation(meta2.profile.key);
675
+ const { invokePromise } = useOperationInvoker2();
676
+ const fallbacks = useMemo7(() => FALLBACK_SUGGESTION_KEYS.map((key) => t(key, {
677
+ year: (/* @__PURE__ */ new Date()).getFullYear()
678
+ })), [
679
+ t
680
+ ]);
681
+ const [suggestions, setSuggestions] = useState7(void 0);
682
+ useAsyncEffect3(async (controller) => {
683
+ setSuggestions(void 0);
684
+ if (!space) {
685
+ return;
686
+ }
687
+ const result = await invokePromise(AssistantOperation2.GenerateHomeSuggestions, {
688
+ db: space.db
689
+ }, {
690
+ spaceId: space.db.spaceId
691
+ });
692
+ if (controller.signal.aborted) {
693
+ return;
694
+ }
695
+ const prompts = result.data?.prompts;
696
+ setSuggestions(prompts && prompts.length > 0 ? prompts : fallbacks);
697
+ }, [
698
+ space,
699
+ invokePromise
700
+ ]);
701
+ return suggestions;
702
+ };
703
+
704
+ // src/hooks/useProcessEphemeralStatus.ts
705
+ import { Atom as Atom3 } from "@effect-atom/atom";
706
+ import { useAtomValue as useAtomValue4 } from "@effect-atom/atom-react";
707
+ import * as Effect4 from "effect/Effect";
708
+ import * as Fiber from "effect/Fiber";
709
+ import * as Stream from "effect/Stream";
710
+ import { useEffect as useEffect4, useMemo as useMemo8, useRef as useRef2, useState as useState8 } from "react";
711
+ import { Capabilities as Capabilities3 } from "@dxos/app-framework";
712
+ import { useOptionalCapability as useOptionalCapability2 } from "@dxos/app-framework/ui";
713
+ import { Process, ServiceResolver as ServiceResolver2 } from "@dxos/compute";
714
+ import { ProcessManager } from "@dxos/compute-runtime";
715
+ import { resolveEphemeralStatusUpdate } from "#execution-graph";
716
+ var atomEmpty2 = Atom3.make(() => []);
717
+ var ACTIVE_PROCESS_STATES = /* @__PURE__ */ new Set([
718
+ Process.State.RUNNING,
719
+ Process.State.HYBERNATING
720
+ ]);
721
+ var isTerminalActivityLine = (line) => line.endsWith(" - Success") || line.endsWith(" - Error") || line === "Agent completed request";
722
+ var collectDescendantPids = (processes, rootPid) => {
723
+ const pids = /* @__PURE__ */ new Set([
724
+ rootPid
725
+ ]);
726
+ let expanded = true;
727
+ while (expanded) {
728
+ expanded = false;
729
+ for (const process of processes) {
730
+ const pid = String(process.pid);
731
+ const parentPid = process.parentPid ? String(process.parentPid) : void 0;
732
+ if (parentPid && pids.has(parentPid) && !pids.has(pid)) {
733
+ pids.add(pid);
734
+ expanded = true;
735
+ }
736
+ }
737
+ }
738
+ return pids;
739
+ };
740
+ var resolveSubscribePids = (agentPid, processes) => {
741
+ const rootPid = String(agentPid);
742
+ const descendants = collectDescendantPids(processes, rootPid);
743
+ const activePids = processes.filter((process) => descendants.has(String(process.pid)) && ACTIVE_PROCESS_STATES.has(process.state)).map((process) => process.pid);
744
+ if (activePids.length > 0) {
745
+ return activePids;
746
+ }
747
+ return [
748
+ agentPid
749
+ ];
750
+ };
751
+ var attachActiveHandle = (processManager, pid) => Effect4.gen(function* () {
752
+ const maxAttempts = 15;
753
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
754
+ const handle = yield* processManager.attach(pid).pipe(Effect4.catchAll(() => Effect4.succeed(void 0)));
755
+ if (handle && ACTIVE_PROCESS_STATES.has(handle.status.state)) {
756
+ return handle;
757
+ }
758
+ if (handle) {
759
+ return void 0;
760
+ }
761
+ yield* Effect4.sleep(100);
762
+ }
763
+ return void 0;
764
+ });
765
+ var useProcessEphemeralStatus = (agentPid, space) => {
766
+ const runtime3 = useOptionalCapability2(Capabilities3.ProcessManagerRuntime);
767
+ const monitor = useOptionalCapability2(Capabilities3.ProcessMonitor);
768
+ const processes = useAtomValue4(monitor?.processTreeAtom ?? atomEmpty2);
769
+ const [status, setStatus] = useState8();
770
+ const fibersRef = useRef2([]);
771
+ const subscribePidsKey = useMemo8(() => {
772
+ if (!agentPid) {
773
+ return "";
774
+ }
775
+ return resolveSubscribePids(agentPid, processes).map((pid) => String(pid)).sort().join("|");
776
+ }, [
777
+ agentPid,
778
+ processes
779
+ ]);
780
+ useEffect4(() => {
781
+ if (!agentPid || !space?.id || !runtime3 || !subscribePidsKey) {
782
+ setStatus(void 0);
783
+ return;
784
+ }
785
+ const pids = subscribePidsKey.split("|").map((pid) => Process.ID.make(pid));
786
+ let disposed = false;
787
+ let replaying = true;
788
+ let replayStatus;
789
+ const endReplay = () => {
790
+ replaying = false;
791
+ if (!disposed) {
792
+ setStatus(replayStatus);
793
+ }
794
+ };
795
+ queueMicrotask(endReplay);
796
+ fibersRef.current = [];
797
+ const handleEphemeralMessage = (message) => {
798
+ const update = resolveEphemeralStatusUpdate(message);
799
+ if (update === "unchanged") {
800
+ return;
801
+ }
802
+ if (replaying) {
803
+ replayStatus = update.line;
804
+ return;
805
+ }
806
+ setStatus(update.line);
807
+ };
808
+ const layer = ServiceResolver2.provide({
809
+ space: space.id
810
+ }, ProcessManager.ProcessManagerService);
811
+ const subscribe = (pid) => Effect4.gen(function* () {
812
+ if (disposed) {
813
+ return;
814
+ }
815
+ const processManager = yield* ProcessManager.ProcessManagerService;
816
+ const handle = yield* attachActiveHandle(processManager, pid);
817
+ if (!handle || disposed) {
818
+ return;
819
+ }
820
+ const fiber = yield* handle.subscribeEphemeral().pipe(Stream.runForEach((message) => Effect4.sync(() => {
821
+ if (disposed) {
822
+ return;
823
+ }
824
+ handleEphemeralMessage(message);
825
+ })), Effect4.forkDaemon);
826
+ if (disposed) {
827
+ yield* Fiber.interrupt(fiber);
828
+ return;
829
+ }
830
+ fibersRef.current.push(fiber);
831
+ });
832
+ void runtime3.runPromise(Effect4.forEach(pids, subscribe, {
833
+ concurrency: "unbounded",
834
+ discard: true
835
+ }).pipe(Effect4.provide(layer))).catch(() => {
836
+ if (!disposed) {
837
+ setStatus(void 0);
838
+ }
839
+ });
840
+ return () => {
841
+ disposed = true;
842
+ const fibers = fibersRef.current;
843
+ fibersRef.current = [];
844
+ for (const fiber of fibers) {
845
+ void runtime3.runPromise(Fiber.interrupt(fiber).pipe(Effect4.provide(layer)));
846
+ }
847
+ };
848
+ }, [
849
+ agentPid,
850
+ runtime3,
851
+ space?.id,
852
+ subscribePidsKey
853
+ ]);
854
+ return status;
855
+ };
975
856
  export {
976
- useActiveBlueprints,
977
- useBlueprintHandlers,
978
- useBlueprints,
857
+ getTraceMessagesAtom,
858
+ isTerminalActivityLine,
859
+ useActiveSkills,
979
860
  useChatKeymapExtensions,
980
861
  useChatProcessor,
981
862
  useChatServices,
@@ -985,8 +866,12 @@ export {
985
866
  useDebug,
986
867
  useFilteredTypes,
987
868
  useFlush,
988
- useOnline,
869
+ useHomeSuggestions,
989
870
  usePresets,
990
- useReferencesProvider
871
+ useProcessEphemeralStatus,
872
+ useReferencesProvider,
873
+ useSkillHandlers,
874
+ useSkills,
875
+ useTraceMessages
991
876
  };
992
877
  //# sourceMappingURL=index.mjs.map