@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
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/AssistantSettings/AssistantSettings.tsx", "../../../src/containers/AssistantSettings/OllamaModels.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport React, { useMemo } from 'react';\n\nimport { Provider } from '@dxos/ai';\nimport { useOptionalCapability } from '@dxos/app-framework/ui';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { type DXN } from '@dxos/keys';\nimport { useTranslation } from '@dxos/react-ui';\nimport { Form, type FormFieldMap, createSelectField } from '@dxos/react-ui-form';\n\nimport { meta } from '#meta';\nimport { Assistant, AssistantCapabilities, Ollama } from '#types';\n\nimport { presetsForProvider, resolveProvider } from '../../processor';\nimport { OllamaModels } from './OllamaModels';\n\nexport type AssistantSettingsProps = AppSurface.SettingsProps<Assistant.Settings>;\n\n// The per-provider model-default options must match the chat picker (usePresets): the catalog models\n// served by the provider, restricted to installed models when `installed` is supplied (local sidecar).\nconst presetOptions = (provider: DXN.DXN, installed?: ReadonlySet<string>) =>\n presetsForProvider(provider)\n .filter((preset) => !installed || installed.has(preset.backend))\n .map((preset) => ({ value: preset.model, label: preset.label }));\n\nexport const AssistantSettings = ({ settings, onSettingsChange }: AssistantSettingsProps) => {\n const { t } = useTranslation(meta.profile.key);\n\n // The Ollama manager is the bundled sidecar (desktop only). Its presence selects the local\n // provider: the managed `built-in` vs. an external `ollama` server.\n const ollamaManager = useOptionalCapability(AssistantCapabilities.OllamaManager);\n const localProvider = ollamaManager ? Provider.builtIn : Provider.ollama;\n const localProviderKey = ollamaManager ? 'built-in' : 'ollama';\n\n // Installed models reported by the bundled sidecar; restricts the local default to present models.\n const localModels = useAtomValue(ollamaManager?.state ?? Ollama.emptyState);\n const installed = useMemo(() => new Set(localModels.models.map((model) => model.name)), [localModels]);\n\n // Reconcile a stored provider with the runtime (`ollama` → `built-in` on desktop) so the\n // dropdown shows a concrete, available selection rather than blank.\n const values = useMemo(\n () => ({ ...settings, modelProvider: resolveProvider(settings.modelProvider, !!ollamaManager) }),\n [settings, ollamaManager],\n );\n\n // Form `fieldMap` is keyed by dotted JSON path, so nested struct leaves are addressed directly.\n const fieldMap = useMemo<FormFieldMap>(\n () => ({\n // `defaultLabel: null` drops the sentinel \"Default\" option — a provider is always concrete.\n 'modelProvider': createSelectField({\n defaultLabel: null,\n options: [\n { value: Provider.edge.id, label: t('settings.provider.edge.label') },\n { value: localProvider.id, label: t(`settings.provider.${localProviderKey}.label`) },\n { value: Provider.lmStudio.id, label: t('settings.provider.lmstudio.label') },\n ],\n }),\n 'modelDefaults.edge': createSelectField({ options: presetOptions(Provider.edge.id) }),\n // `built-in` and `ollama` share the `ollama` default key; the managed sidecar restricts to installed.\n 'modelDefaults.ollama': createSelectField({\n options: presetOptions(localProvider.id, ollamaManager ? installed : undefined),\n }),\n 'modelDefaults.lmstudio': createSelectField({ options: presetOptions(Provider.lmStudio.id) }),\n }),\n [t, localProvider, localProviderKey, ollamaManager, installed],\n );\n\n return (\n <Form.Root\n variant='settings'\n schema={Assistant.Settings}\n readonly={!onSettingsChange}\n values={values}\n onValuesChanged={(values) => onSettingsChange?.(() => values)}\n >\n <Form.Viewport scroll>\n <Form.Content>\n <Form.Section title={meta.profile.name ?? meta.profile.key}>\n <Form.FieldSet fieldMap={fieldMap} />\n </Form.Section>\n <OllamaModels />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { Model, Provider } from '@dxos/ai';\nimport { useOptionalCapability } from '@dxos/app-framework/ui';\nimport { EffectEx } from '@dxos/effect';\nimport { List, ListItem } from '@dxos/react-list';\nimport { IconButton, useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\nimport { Combobox } from '@dxos/react-ui-list';\n\nimport { meta } from '#meta';\nimport { AssistantCapabilities, type Ollama } from '#types';\n\n/** Quick-pick model names (Ollama pull tags) sourced from the curated catalog. */\nconst QUICK_PICKS = Model.forProvider(Provider.ollama.id).map((model) => model.backend);\n\n/** Poll interval for the loaded-into-memory set while the settings panel is open. */\nconst LOADED_POLL_INTERVAL = 3_000;\n\n/**\n * Manage locally-installed Ollama models. The {@link AssistantCapabilities.OllamaManager}\n * capability is only contributed by the native (desktop) runtime, so this renders nothing in the\n * browser/mobile. Split from the section body so hooks are never called conditionally.\n */\nexport const OllamaModels = () => {\n const manager = useOptionalCapability(AssistantCapabilities.OllamaManager);\n if (!manager) {\n return null;\n }\n\n return <OllamaModelsSection manager={manager} />;\n};\n\nexport const OllamaModelsSection = ({ manager }: { manager: Ollama.Manager }) => {\n const { t } = useTranslation(meta.profile.key);\n // Explicit subscription: the list and badges must re-render as pulls/installs/loads land.\n const state = useAtomValue(manager.state);\n const [query, setQuery] = useState('');\n const [open, setOpen] = useState(false);\n // UI-level gate keyed by model name, guaranteeing a visible busy state across the click handler.\n const [pending, setPending] = useState<Record<string, boolean>>({});\n\n // Ensure the sidecar is up and list installed models on mount.\n useEffect(() => {\n void EffectEx.runPromise(manager.refresh);\n }, [manager]);\n\n // Poll the loaded-into-memory set so the panel reflects which model is resident in real time.\n useEffect(() => {\n const interval = setInterval(() => void EffectEx.runPromise(manager.refreshLoaded), LOADED_POLL_INTERVAL);\n return () => clearInterval(interval);\n }, [manager]);\n\n const installed = new Set(state.models.map((model) => model.name));\n const loaded = new Map(state.loaded.map((model) => [model.name, model]));\n const pulling = Object.keys(state.pulls).filter((name) => !installed.has(name));\n\n const withPending = useCallback(\n (key: string, action: () => Promise<void>) => async () => {\n setPending((prev) => ({ ...prev, [key]: true }));\n try {\n await action();\n } finally {\n setPending((prev) => ({ ...prev, [key]: false }));\n }\n },\n [],\n );\n\n const handlePull = useCallback(\n (target: string) => {\n const trimmed = target.trim();\n if (trimmed.length === 0) {\n return;\n }\n setQuery('');\n setOpen(false);\n void withPending(trimmed, () => EffectEx.runPromise(manager.pull(trimmed)))();\n },\n [manager, withPending],\n );\n\n // Caller-driven filtering: curated picks not yet installed, matching the typed query.\n const filter = query.trim();\n const suggestions = QUICK_PICKS.filter((pick) => !installed.has(pick) && (filter === '' || pick.includes(filter)));\n const offerCustom = filter.length > 0 && !installed.has(filter) && !suggestions.includes(filter);\n const empty = state.models.length === 0 && pulling.length === 0;\n\n return (\n <Form.Section title={t('settings.ollama.title')}>\n <Form.Row label={t('settings.ollama.installed.label')}>\n {state.kind === 'failed' && state.error ? (\n // Connection-level failure has no associated model, so it shows inline as the row content.\n <p className='text-sm text-error-text'>{t('settings.ollama.failed.message', { error: state.error })}</p>\n ) : empty ? (\n <p className='text-sm text-description'>{t('settings.ollama.empty.message')}</p>\n ) : (\n // Plain `List`/`ListItem` (non-select), with the trigger editor's \"fatter\" two-line row\n // treatment: a name line plus a secondary meta line, on a surface-styled row. Rows are\n // actioned via their trailing buttons (no selection semantics).\n <List variant='unordered' className='flex flex-col gap-1 grow is-full text-left'>\n {state.models.map((model) => {\n const running = loaded.get(model.name);\n const error = state.errors[model.name];\n const size = model.size != null ? formatBytes(model.size) : undefined;\n const loadedLabel = running\n ? running.sizeVram\n ? t('settings.ollama.loaded.vram', { size: formatBytes(running.sizeVram) })\n : t('settings.ollama.loaded.label')\n : undefined;\n return (\n <ListItem\n key={model.name}\n className='flex flex-col gap-0.5 rounded-sm bg-input-surface px-2 py-1.5 is-full'\n >\n <div className='flex items-center gap-2'>\n <span className='grow truncate font-medium'>{model.name}</span>\n <IconButton\n icon={running ? 'ph--eject--regular' : 'ph--play--regular'}\n iconOnly\n label={running ? t('settings.ollama.unload.label') : t('settings.ollama.load.label')}\n disabled={pending[model.name]}\n onClick={() =>\n void withPending(model.name, () =>\n EffectEx.runPromise(running ? manager.unload(model.name) : manager.load(model.name)),\n )()\n }\n />\n <IconButton\n icon='ph--trash--regular'\n iconOnly\n label={t('settings.ollama.remove.label')}\n disabled={pending[model.name]}\n onClick={() =>\n void withPending(model.name, () => EffectEx.runPromise(manager.remove(model.name)))()\n }\n />\n </div>\n {(size || loadedLabel || error) && (\n <div className='flex items-center gap-2 text-sm'>\n {size && <span className='text-description'>{size}</span>}\n {loadedLabel && <span className='text-success-text'>{loadedLabel}</span>}\n {error && <span className='truncate text-error-text'>{shortError(error)}</span>}\n </div>\n )}\n </ListItem>\n );\n })}\n {pulling.map((name) => {\n const progress = state.pulls[name];\n const status = progress?.total\n ? t('settings.ollama.pulling.message', { percent: percentOf(progress) })\n : (progress?.status ?? t('settings.ollama.pulling.label'));\n return (\n <ListItem key={name} className='flex flex-col gap-0.5 rounded-sm bg-input-surface px-2 py-1.5 is-full'>\n <div className='flex items-center gap-2'>\n <span className='grow truncate font-medium text-description'>{name}</span>\n <IconButton\n icon='ph--x--regular'\n iconOnly\n label={t('settings.ollama.cancel.label')}\n onClick={() => void EffectEx.runPromise(manager.cancel(name))}\n />\n </div>\n <span className='text-sm text-description'>{status}</span>\n </ListItem>\n );\n })}\n </List>\n )}\n </Form.Row>\n\n <Form.Row label={t('settings.ollama.pull.label')}>\n {/* Pull failures for not-yet-installed models surface here (no model row to attach to). */}\n {Object.entries(state.errors)\n .filter(([name]) => !installed.has(name))\n .map(([name, error]) => (\n <p key={name} className='text-xs text-error-text'>\n {name}: {shortError(error)}\n </p>\n ))}\n {/* Root value is held empty so the trigger always shows the placeholder; the live text is\n the separate `query` driving the input and suggestion filter. */}\n <Combobox.Root\n open={open}\n onOpenChange={setOpen}\n value=''\n onValueChange={() => {}}\n placeholder={t('settings.ollama.pull.placeholder')}\n >\n <Combobox.Trigger classNames='is-full' />\n <Combobox.Portal>\n <Combobox.Content>\n <Combobox.Input\n value={query}\n onValueChange={setQuery}\n placeholder={t('settings.ollama.pull.placeholder')}\n onKeyDown={(event) => {\n if (event.key === 'Enter' && filter.length > 0) {\n handlePull(filter);\n }\n }}\n />\n <Combobox.List>\n {offerCustom && (\n <Combobox.Item\n value={filter}\n label={t('settings.ollama.pull-custom.label', { name: filter })}\n icon='ph--download-simple--regular'\n onSelect={() => handlePull(filter)}\n />\n )}\n {suggestions.map((pick) => (\n <Combobox.Item key={pick} value={pick} label={pick} onSelect={() => handlePull(pick)} />\n ))}\n </Combobox.List>\n <Combobox.Arrow />\n </Combobox.Content>\n </Combobox.Portal>\n </Combobox.Root>\n </Form.Row>\n </Form.Section>\n );\n};\n\n/**\n * Condense a verbose service error for inline display: drop Ollama's \"(checked: <paths>)\" path dump\n * and cap the length. The full message is still logged to the console.\n */\nconst shortError = (error: string): string => {\n const head = error.split(/\\s*\\(checked:/)[0].trim();\n return head.length > 160 ? `${head.slice(0, 160)}…` : head;\n};\n\n/** Percent complete for an in-flight pull, or 0 when totals are not yet known. */\nconst percentOf = (progress: Ollama.ModelsState['pulls'][string] | undefined): number =>\n progress && progress.total && progress.total > 0 ? Math.round(((progress.completed ?? 0) / progress.total) * 100) : 0;\n\nconst UNITS = ['B', 'KB', 'MB', 'GB', 'TB'];\n\n/** Human-readable byte size (binary units). */\nconst formatBytes = (bytes: number): string => {\n let value = bytes;\n let unit = 0;\n while (value >= 1024 && unit < UNITS.length - 1) {\n value /= 1024;\n unit += 1;\n }\n return `${value.toFixed(unit === 0 ? 0 : 1)} ${UNITS[unit]}`;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["useAtomValue", "React", "useMemo", "Provider", "useOptionalCapability", "useTranslation", "Form", "createSelectField", "meta", "Assistant", "AssistantCapabilities", "Ollama", "useAtomValue", "React", "useCallback", "useEffect", "useState", "Model", "Provider", "useOptionalCapability", "EffectEx", "List", "ListItem", "IconButton", "useTranslation", "Form", "Combobox", "meta", "AssistantCapabilities", "QUICK_PICKS", "forProvider", "ollama", "id", "map", "model", "backend", "LOADED_POLL_INTERVAL", "OllamaModels", "manager", "OllamaManager", "OllamaModelsSection", "t", "profile", "key", "state", "query", "setQuery", "open", "setOpen", "pending", "setPending", "runPromise", "refresh", "interval", "setInterval", "refreshLoaded", "clearInterval", "installed", "Set", "models", "name", "loaded", "Map", "pulling", "Object", "keys", "pulls", "filter", "has", "withPending", "action", "prev", "handlePull", "target", "trimmed", "trim", "length", "pull", "suggestions", "pick", "includes", "offerCustom", "empty", "Section", "title", "Row", "label", "kind", "error", "p", "className", "variant", "running", "get", "errors", "size", "formatBytes", "undefined", "loadedLabel", "sizeVram", "div", "span", "icon", "iconOnly", "disabled", "onClick", "unload", "load", "remove", "shortError", "progress", "status", "total", "percent", "percentOf", "cancel", "entries", "Root", "onOpenChange", "value", "onValueChange", "placeholder", "Trigger", "classNames", "Portal", "Content", "Input", "onKeyDown", "event", "Item", "onSelect", "Arrow", "head", "split", "slice", "Math", "round", "completed", "UNITS", "bytes", "unit", "toFixed", "presetOptions", "provider", "installed", "presetsForProvider", "filter", "preset", "has", "backend", "map", "value", "model", "label", "AssistantSettings", "settings", "onSettingsChange", "t", "useTranslation", "meta", "profile", "key", "ollamaManager", "useOptionalCapability", "AssistantCapabilities", "OllamaManager", "localProvider", "Provider", "builtIn", "ollama", "localProviderKey", "localModels", "useAtomValue", "state", "Ollama", "emptyState", "useMemo", "Set", "models", "name", "values", "modelProvider", "resolveProvider", "fieldMap", "createSelectField", "defaultLabel", "options", "edge", "id", "lmStudio", "undefined", "React", "Form", "Root", "variant", "schema", "Assistant", "Settings", "readonly", "onValuesChanged", "Viewport", "scroll", "Content", "Section", "title", "FieldSet", "OllamaModels"]
7
+ }
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  ChatArticle
3
- } from "./chunk-RKVVK3R3.mjs";
3
+ } from "./chunk-UPKFUZ6V.mjs";
4
4
  import "./chunk-J5LGTIGS.mjs";
5
5
  export {
6
6
  ChatArticle as default
7
7
  };
8
- //# sourceMappingURL=ChatArticle-VNVZCDUR.mjs.map
8
+ //# sourceMappingURL=ChatArticle-OO7GGEFW.mjs.map
@@ -1,26 +1,26 @@
1
1
  import {
2
2
  ChatArticle
3
- } from "./chunk-RKVVK3R3.mjs";
3
+ } from "./chunk-UPKFUZ6V.mjs";
4
4
  import "./chunk-J5LGTIGS.mjs";
5
5
 
6
6
  // src/containers/ChatCompanion/ChatCompanion.tsx
7
7
  import * as Option from "effect/Option";
8
8
  import React, { forwardRef, useCallback, useMemo } from "react";
9
9
  import { useOperationInvoker } from "@dxos/app-framework/ui";
10
- import { BlueprintsAnnotation } from "@dxos/app-toolkit";
10
+ import { AppAnnotation } from "@dxos/app-toolkit";
11
11
  import { Chat } from "@dxos/assistant-toolkit";
12
12
  import { getSpace } from "@dxos/client/echo";
13
- import { Blueprint } from "@dxos/compute";
13
+ import { Skill } from "@dxos/compute";
14
14
  import { Entity, Filter, Obj, Ref, Type } from "@dxos/echo";
15
15
  import { SpaceOperation } from "@dxos/plugin-space";
16
- import { useQuery, useRegistry } from "@dxos/react-client/echo";
16
+ import { useObject, useQuery, useRegistry } from "@dxos/react-client/echo";
17
17
  import { useAsyncEffect } from "@dxos/react-ui";
18
18
  import { useContextBinder } from "#hooks";
19
19
  import { AssistantOperation } from "#types";
20
20
  var ChatCompanion = /* @__PURE__ */ forwardRef(({ role = "article", subject: chat, companionTo, attendableId }, forwardedRef) => {
21
21
  const { invokePromise } = useOperationInvoker();
22
22
  const space = getSpace(companionTo);
23
- useBlueprints({
23
+ useSkills({
24
24
  subject: chat,
25
25
  companionTo
26
26
  });
@@ -30,8 +30,7 @@ var ChatCompanion = /* @__PURE__ */ forwardRef(({ role = "article", subject: cha
30
30
  }
31
31
  await invokePromise(SpaceOperation.AddObject, {
32
32
  object: chat,
33
- target: space.db,
34
- hidden: true
33
+ target: space.db
35
34
  });
36
35
  await invokePromise(SpaceOperation.AddRelation, {
37
36
  db: space.db,
@@ -59,52 +58,53 @@ var ChatCompanion = /* @__PURE__ */ forwardRef(({ role = "article", subject: cha
59
58
  ref: forwardedRef
60
59
  });
61
60
  });
62
- var useBlueprints = ({ subject: chat, companionTo }) => {
61
+ var useSkills = ({ subject: chat, companionTo }) => {
63
62
  const registry = useRegistry();
64
63
  const space = getSpace(companionTo);
65
- const feedTarget = chat?.feed.target;
64
+ const [feedSnapshot] = useObject(chat?.feed);
65
+ const feedTarget = Obj.getReactiveOrUndefined(feedSnapshot);
66
66
  const binder = useContextBinder(space, feedTarget);
67
- const blueprintKeys = useMemo(() => {
67
+ const skillKeys = useMemo(() => {
68
68
  const schema = companionTo ? Obj.getType(companionTo) : void 0;
69
69
  if (!schema) {
70
70
  return [];
71
71
  }
72
- return Option.getOrElse(() => [])(BlueprintsAnnotation.get(Type.getSchema(schema)));
72
+ return Option.getOrElse(() => [])(AppAnnotation.SkillsAnnotation.get(Type.getSchema(schema)));
73
73
  }, [
74
74
  companionTo
75
75
  ]);
76
- const existingBlueprints = useQuery(space?.db, Filter.type(Blueprint.Blueprint));
77
- const pluginBlueprints = useMemo(() => existingBlueprints.filter((blueprint) => {
78
- const key = Obj.getMeta(blueprint).key;
79
- return key !== void 0 && blueprintKeys.includes(key);
76
+ const existingSkills = useQuery(space?.db, Filter.type(Skill.Skill));
77
+ const pluginSkills = useMemo(() => existingSkills.filter((skill) => {
78
+ const key = Obj.getMeta(skill).key;
79
+ return key !== void 0 && skillKeys.includes(key);
80
80
  }), [
81
- existingBlueprints,
82
- blueprintKeys
81
+ existingSkills,
82
+ skillKeys
83
83
  ]);
84
84
  useAsyncEffect(async () => {
85
85
  if (!binder?.isOpen) {
86
86
  return;
87
87
  }
88
- if (blueprintKeys.length > 0) {
89
- const registryKeys = blueprintKeys.filter((key) => {
88
+ if (skillKeys.length > 0) {
89
+ const registryKeys = skillKeys.filter((key) => {
90
90
  const candidate = registry.list().find((e) => Entity.getMeta(e)?.key === key);
91
- return candidate != null && Obj.instanceOf(Blueprint.Blueprint, candidate);
91
+ return candidate != null && Obj.instanceOf(Skill.Skill, candidate);
92
92
  });
93
- const dbForks = pluginBlueprints.filter((bp) => !registryKeys.includes(Obj.getMeta(bp).key ?? ""));
93
+ const dbForks = pluginSkills.filter((bp) => !registryKeys.includes(Obj.getMeta(bp).key ?? ""));
94
94
  if (registryKeys.length > 0) {
95
95
  await binder.bind({
96
- blueprints: registryKeys.map((key) => Ref.fromURI(Blueprint.registryURI(key)))
96
+ skills: registryKeys.map((key) => Ref.fromURI(Skill.registryURI(key)))
97
97
  });
98
98
  }
99
99
  if (dbForks.length > 0) {
100
100
  await binder.bind({
101
- blueprints: dbForks.map((blueprint) => Ref.make(blueprint))
101
+ skills: dbForks.map((skill) => Ref.make(skill))
102
102
  });
103
103
  }
104
104
  }
105
- if (Obj.instanceOf(Blueprint.Blueprint, companionTo)) {
105
+ if (Obj.instanceOf(Skill.Skill, companionTo)) {
106
106
  await binder.bind({
107
- blueprints: [
107
+ skills: [
108
108
  Ref.make(companionTo)
109
109
  ]
110
110
  });
@@ -117,12 +117,12 @@ var useBlueprints = ({ subject: chat, companionTo }) => {
117
117
  }
118
118
  }, [
119
119
  binder,
120
- blueprintKeys,
121
- pluginBlueprints,
120
+ skillKeys,
121
+ pluginSkills,
122
122
  companionTo
123
123
  ]);
124
124
  };
125
125
  export {
126
126
  ChatCompanion as default
127
127
  };
128
- //# sourceMappingURL=ChatCompanion-LBUHYWQG.mjs.map
128
+ //# sourceMappingURL=ChatCompanion-GIFJRY6I.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/ChatCompanion/ChatCompanion.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport React, { forwardRef, useCallback, useMemo } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { AppAnnotation } from '@dxos/app-toolkit';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { Chat } from '@dxos/assistant-toolkit';\nimport { getSpace } from '@dxos/client/echo';\nimport { Skill } from '@dxos/compute';\nimport { Entity, Filter, Obj, Ref, Type } from '@dxos/echo';\nimport { SpaceOperation } from '@dxos/plugin-space';\nimport { useObject, useQuery, useRegistry } from '@dxos/react-client/echo';\nimport { useAsyncEffect } from '@dxos/react-ui';\n\nimport { useContextBinder } from '#hooks';\nimport { AssistantOperation } from '#types';\n\nimport ChatArticle from '../ChatArticle';\n\nexport type ChatCompanionProps = AppSurface.ArticleProps<Chat.Chat, {}, Obj.Unknown>;\n\nexport const ChatCompanion = forwardRef<HTMLDivElement, ChatCompanionProps>(\n ({ role = 'article', subject: chat, companionTo, attendableId }, forwardedRef) => {\n const { invokePromise } = useOperationInvoker();\n const space = getSpace(companionTo);\n useSkills({ subject: chat, companionTo });\n\n // Persist (and flush) a transient chat before the first request so the agent can resolve\n // the now-durable conversation feed; subsequent submits are a no-op once persisted.\n const handleSubmit = useCallback(async () => {\n if (!space || !chat || Obj.getDatabase(chat)) {\n return;\n }\n\n await invokePromise(SpaceOperation.AddObject, {\n object: chat,\n target: space.db,\n });\n await invokePromise(SpaceOperation.AddRelation, {\n db: space.db,\n schema: Chat.CompanionTo,\n source: chat,\n target: companionTo,\n });\n await invokePromise(AssistantOperation.SetCurrentChat, {\n companionTo,\n chat,\n });\n await space.db.flush();\n }, [space, chat, companionTo, invokePromise]);\n\n return (\n <ChatArticle\n role={role}\n subject={chat}\n attendableId={attendableId}\n companionTo={companionTo}\n onSubmit={handleSubmit}\n ref={forwardedRef}\n />\n );\n },\n);\n\n/**\n * Bind skills to the context.\n */\n// TODO(burdon): Why is this only in the companion?\nconst useSkills = ({ subject: chat, companionTo }: Pick<ChatCompanionProps, 'subject' | 'companionTo'>) => {\n const registry = useRegistry();\n const space = getSpace(companionTo);\n const [feedSnapshot] = useObject(chat?.feed);\n const feedTarget = Obj.getReactiveOrUndefined(feedSnapshot);\n const binder = useContextBinder(space, feedTarget);\n\n const skillKeys = useMemo(() => {\n const schema = companionTo ? Obj.getType(companionTo) : undefined;\n if (!schema) {\n return [] as string[];\n }\n\n return Option.getOrElse(() => [] as string[])(AppAnnotation.SkillsAnnotation.get(Type.getSchema(schema)));\n }, [companionTo]);\n\n const existingSkills = useQuery(space?.db, Filter.type(Skill.Skill));\n const pluginSkills = useMemo(\n () =>\n existingSkills.filter((skill) => {\n const key = Obj.getMeta(skill).key;\n return key !== undefined && skillKeys.includes(key);\n }),\n [existingSkills, skillKeys],\n );\n\n useAsyncEffect(async () => {\n if (!binder?.isOpen) {\n return;\n }\n\n // Bind annotated skills: use key URI for registry skills (no DB clone needed).\n if (skillKeys.length > 0) {\n const registryKeys = skillKeys.filter((key) => {\n const candidate = registry.list().find((e) => Entity.getMeta(e)?.key === key);\n return candidate != null && Obj.instanceOf(Skill.Skill, candidate);\n });\n\n // DB-forked skills (in space but not in registry).\n const dbForks = pluginSkills.filter((bp) => !registryKeys.includes(Obj.getMeta(bp).key ?? ''));\n if (registryKeys.length > 0) {\n await binder.bind({ skills: registryKeys.map((key) => Ref.fromURI(Skill.registryURI(key))) });\n }\n if (dbForks.length > 0) {\n await binder.bind({ skills: dbForks.map((skill) => Ref.make(skill)) });\n }\n }\n\n if (Obj.instanceOf(Skill.Skill, companionTo)) {\n await binder.bind({ skills: [Ref.make(companionTo)] });\n } else {\n await binder.bind({ objects: [Ref.make(companionTo)] });\n }\n }, [binder, skillKeys, pluginSkills, companionTo]);\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Option", "React", "forwardRef", "useCallback", "useMemo", "useOperationInvoker", "AppAnnotation", "Chat", "getSpace", "Skill", "Entity", "Filter", "Obj", "Ref", "Type", "SpaceOperation", "useObject", "useQuery", "useRegistry", "useAsyncEffect", "useContextBinder", "AssistantOperation", "ChatCompanion", "forwardRef", "role", "subject", "chat", "companionTo", "attendableId", "forwardedRef", "invokePromise", "useOperationInvoker", "space", "getSpace", "useSkills", "handleSubmit", "useCallback", "Obj", "getDatabase", "SpaceOperation", "AddObject", "object", "target", "db", "AddRelation", "schema", "Chat", "CompanionTo", "source", "AssistantOperation", "SetCurrentChat", "flush", "ChatArticle", "onSubmit", "ref", "registry", "useRegistry", "feedSnapshot", "useObject", "feed", "feedTarget", "getReactiveOrUndefined", "binder", "useContextBinder", "skillKeys", "useMemo", "getType", "undefined", "getOrElse", "AppAnnotation", "SkillsAnnotation", "get", "Type", "getSchema", "existingSkills", "useQuery", "Filter", "type", "Skill", "pluginSkills", "filter", "skill", "key", "getMeta", "includes", "useAsyncEffect", "isOpen", "length", "registryKeys", "candidate", "list", "find", "e", "Entity", "instanceOf", "dbForks", "bp", "bind", "skills", "map", "Ref", "fromURI", "registryURI", "make", "objects"]
7
+ }
@@ -2,24 +2,25 @@ import "./chunk-J5LGTIGS.mjs";
2
2
 
3
3
  // src/containers/ChatDialog/ChatDialog.tsx
4
4
  import React, { useCallback, useState } from "react";
5
+ import { Provider } from "@dxos/ai";
5
6
  import { useAtomCapability } from "@dxos/app-framework/ui";
6
7
  import { Obj } from "@dxos/echo";
7
- import { useRegistry } from "@dxos/react-client/echo";
8
+ import { useObject, useRegistry } from "@dxos/react-client/echo";
8
9
  import { useTranslation } from "@dxos/react-ui";
9
10
  import { ChatDialog as NaturalChatDialog } from "@dxos/react-ui-chat";
10
11
  import { Chat } from "#components";
11
- import { useChatProcessor, useChatServices, useOnline, usePresets } from "#hooks";
12
+ import { useChatProcessor, useChatServices, usePresets } from "#hooks";
12
13
  import { meta } from "#meta";
13
14
  import { AssistantCapabilities } from "#types";
14
15
  var ChatDialog = ({ chat }) => {
15
- const { t } = useTranslation(meta.id);
16
+ const { t } = useTranslation(meta.profile.key);
16
17
  const db = chat && Obj.getDatabase(chat);
17
18
  const settings = useAtomCapability(AssistantCapabilities.Settings);
18
19
  const runtime = useChatServices({
19
20
  id: db?.spaceId
20
21
  });
21
- const [online, setOnline] = useOnline();
22
- const { preset, ...chatProps } = usePresets(online);
22
+ const { preset, ...chatProps } = usePresets(settings);
23
+ const online = preset?.provider === Provider.edge.id;
23
24
  const registry = useRegistry();
24
25
  const processor = useChatProcessor({
25
26
  chat,
@@ -28,6 +29,7 @@ var ChatDialog = ({ chat }) => {
28
29
  registry,
29
30
  settings
30
31
  });
32
+ const [chatViewType] = useObject(chat, "viewType");
31
33
  const [open, setOpen] = useState(true);
32
34
  const [expanded, setExpanded] = useState(false);
33
35
  const handleEvent = useCallback((event) => {
@@ -56,18 +58,17 @@ var ChatDialog = ({ chat }) => {
56
58
  }, /* @__PURE__ */ React.createElement(NaturalChatDialog.Header, {
57
59
  title: t("assistant-dialog.title")
58
60
  }), /* @__PURE__ */ React.createElement(NaturalChatDialog.Content, null, /* @__PURE__ */ React.createElement(Chat.Thread, {
59
- viewType: chat.view ?? settings.chatView
61
+ viewType: chatViewType ?? settings.chatView
60
62
  })), /* @__PURE__ */ React.createElement(NaturalChatDialog.Footer, {
61
63
  classNames: "p-1.5"
62
64
  }, /* @__PURE__ */ React.createElement(Chat.Prompt, {
63
65
  ...chatProps,
64
66
  preset: preset?.id,
65
67
  online,
66
- onOnlineChange: setOnline,
67
68
  expandable: true
68
69
  }))));
69
70
  };
70
71
  export {
71
72
  ChatDialog as default
72
73
  };
73
- //# sourceMappingURL=ChatDialog-DCA6FLOV.mjs.map
74
+ //# sourceMappingURL=ChatDialog-5MXN4MXS.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/ChatDialog/ChatDialog.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useState } from 'react';\n\nimport { Provider } from '@dxos/ai';\nimport { useAtomCapability } from '@dxos/app-framework/ui';\nimport { type Chat as ChatTypes } from '@dxos/assistant-toolkit';\nimport { Obj } from '@dxos/echo';\nimport { useObject, useRegistry } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { ChatDialog as NaturalChatDialog } from '@dxos/react-ui-chat';\n\nimport { Chat, type ChatRootProps } from '#components';\nimport { useChatProcessor, useChatServices, usePresets } from '#hooks';\nimport { meta } from '#meta';\nimport { type Assistant, AssistantCapabilities } from '#types';\n\nexport type ChatDialogProps = {\n chat?: ChatTypes.Chat;\n};\n\nexport const ChatDialog = ({ chat }: ChatDialogProps) => {\n const { t } = useTranslation(meta.profile.key);\n\n const db = chat && Obj.getDatabase(chat);\n const settings = useAtomCapability(AssistantCapabilities.Settings);\n const runtime = useChatServices({ id: db?.spaceId });\n const { preset, ...chatProps } = usePresets(settings);\n const online = preset?.provider === Provider.edge.id;\n const registry = useRegistry();\n const processor = useChatProcessor({ chat, preset, runtime, registry, settings });\n // Subscribe via `useObject` so the thread re-renders when ChatOptions changes the view type.\n const [chatViewType] = useObject(chat, 'viewType');\n\n // TODO(burdon): Refocus when open.\n const [open, setOpen] = useState(true);\n const [expanded, setExpanded] = useState(false);\n const handleEvent = useCallback<NonNullable<ChatRootProps['onEvent']>>((event) => {\n switch (event.type) {\n case 'submit':\n case 'thread-open':\n setOpen(true);\n setExpanded(true);\n break;\n case 'thread-close':\n setOpen(false);\n break;\n }\n }, []);\n\n if (!chat || !processor) {\n return null;\n }\n\n return (\n <Chat.Root chat={chat} processor={processor} onEvent={handleEvent}>\n <NaturalChatDialog.Root open={open} expanded={expanded} onOpenChange={setOpen}>\n <NaturalChatDialog.Header title={t('assistant-dialog.title')} />\n <NaturalChatDialog.Content>\n <Chat.Thread viewType={(chatViewType as Assistant.ChatView | undefined) ?? settings.chatView} />\n </NaturalChatDialog.Content>\n <NaturalChatDialog.Footer classNames='p-1.5'>\n <Chat.Prompt {...chatProps} preset={preset?.id} online={online} expandable />\n </NaturalChatDialog.Footer>\n </NaturalChatDialog.Root>\n </Chat.Root>\n );\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,SAASC,aAAaC,gBAAgB;AAE7C,SAASC,gBAAgB;AACzB,SAASC,yBAAyB;AAElC,SAASC,WAAW;AACpB,SAASC,WAAWC,mBAAmB;AACvC,SAASC,sBAAsB;AAC/B,SAASC,cAAcC,yBAAyB;AAEhD,SAASC,YAAgC;AACzC,SAASC,kBAAkBC,iBAAiBC,kBAAkB;AAC9D,SAASC,YAAY;AACrB,SAAyBC,6BAA6B;AAM/C,IAAMP,aAAa,CAAC,EAAEQ,KAAI,MAAmB;AAClD,QAAM,EAAEC,EAAC,IAAKV,eAAeO,KAAKI,QAAQC,GAAG;AAE7C,QAAMC,KAAKJ,QAAQZ,IAAIiB,YAAYL,IAAAA;AACnC,QAAMM,WAAWnB,kBAAkBY,sBAAsBQ,QAAQ;AACjE,QAAMC,UAAUZ,gBAAgB;IAAEa,IAAIL,IAAIM;EAAQ,CAAA;AAClD,QAAM,EAAEC,QAAQ,GAAGC,UAAAA,IAAcf,WAAWS,QAAAA;AAC5C,QAAMO,SAASF,QAAQG,aAAa5B,SAAS6B,KAAKN;AAClD,QAAMO,WAAW1B,YAAAA;AACjB,QAAM2B,YAAYtB,iBAAiB;IAAEK;IAAMW;IAAQH;IAASQ;IAAUV;EAAS,CAAA;AAE/E,QAAM,CAACY,YAAAA,IAAgB7B,UAAUW,MAAM,UAAA;AAGvC,QAAM,CAACmB,MAAMC,OAAAA,IAAWnC,SAAS,IAAA;AACjC,QAAM,CAACoC,UAAUC,WAAAA,IAAerC,SAAS,KAAA;AACzC,QAAMsC,cAAcvC,YAAmD,CAACwC,UAAAA;AACtE,YAAQA,MAAMC,MAAI;MAChB,KAAK;MACL,KAAK;AACHL,gBAAQ,IAAA;AACRE,oBAAY,IAAA;AACZ;MACF,KAAK;AACHF,gBAAQ,KAAA;AACR;IACJ;EACF,GAAG,CAAA,CAAE;AAEL,MAAI,CAACpB,QAAQ,CAACiB,WAAW;AACvB,WAAO;EACT;AAEA,SACE,sBAAA,cAACvB,KAAKgC,MAAI;IAAC1B;IAAYiB;IAAsBU,SAASJ;KACpD,sBAAA,cAAC9B,kBAAkBiC,MAAI;IAACP;IAAYE;IAAoBO,cAAcR;KACpE,sBAAA,cAAC3B,kBAAkBoC,QAAM;IAACC,OAAO7B,EAAE,wBAAA;MACnC,sBAAA,cAACR,kBAAkBsC,SAAO,MACxB,sBAAA,cAACrC,KAAKsC,QAAM;IAACC,UAAWf,gBAAmDZ,SAAS4B;OAEtF,sBAAA,cAACzC,kBAAkB0C,QAAM;IAACC,YAAW;KACnC,sBAAA,cAAC1C,KAAK2C,QAAM;IAAE,GAAGzB;IAAWD,QAAQA,QAAQF;IAAII;IAAgByB,YAAAA;;AAK1E;",
6
+ "names": ["React", "useCallback", "useState", "Provider", "useAtomCapability", "Obj", "useObject", "useRegistry", "useTranslation", "ChatDialog", "NaturalChatDialog", "Chat", "useChatProcessor", "useChatServices", "usePresets", "meta", "AssistantCapabilities", "chat", "t", "profile", "key", "db", "getDatabase", "settings", "Settings", "runtime", "id", "spaceId", "preset", "chatProps", "online", "provider", "edge", "registry", "processor", "chatViewType", "open", "setOpen", "expanded", "setExpanded", "handleEvent", "event", "type", "Root", "onEvent", "onOpenChange", "Header", "title", "Content", "Thread", "viewType", "chatView", "Footer", "classNames", "Prompt", "expandable"]
7
+ }
@@ -0,0 +1,72 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/containers/IntegrationPrompt/IntegrationPrompt.tsx
4
+ import React, { useMemo } from "react";
5
+ import { Surface, useCapabilities } from "@dxos/app-framework/ui";
6
+ import { useActiveSpace } from "@dxos/app-toolkit/ui";
7
+ import { Connector, ConnectorAuth } from "@dxos/plugin-connector";
8
+ import { Icon, useTranslation } from "@dxos/react-ui";
9
+ import { meta } from "#meta";
10
+ var IntegrationPrompt = ({ service }) => {
11
+ const { t } = useTranslation(meta.profile.key);
12
+ const space = useActiveSpace();
13
+ const connectors = useCapabilities(Connector).flat();
14
+ const matched = useMemo(() => service ? matchConnectors(connectors, service) : [], [
15
+ connectors,
16
+ service
17
+ ]);
18
+ if (!service) {
19
+ return null;
20
+ }
21
+ const label = matched[0]?.label ?? service;
22
+ const connectorIds = matched.map((connector) => connector.id);
23
+ return /* @__PURE__ */ React.createElement("div", {
24
+ role: "group",
25
+ className: "flex flex-col gap-2 my-2 p-3 border border-subdued-separator rounded-sm"
26
+ }, /* @__PURE__ */ React.createElement("div", {
27
+ className: "flex items-center gap-2"
28
+ }, /* @__PURE__ */ React.createElement(Icon, {
29
+ icon: "ph--plugs--regular",
30
+ size: 5,
31
+ classNames: "shrink-0 text-subdued"
32
+ }), /* @__PURE__ */ React.createElement("div", {
33
+ className: "flex flex-col min-w-0"
34
+ }, /* @__PURE__ */ React.createElement("p", {
35
+ className: "text-sm font-medium truncate"
36
+ }, t("integration-prompt.title", {
37
+ service: label
38
+ })), /* @__PURE__ */ React.createElement("p", {
39
+ className: "text-sm text-subdued"
40
+ }, connectorIds.length > 0 ? t("integration-prompt.description", {
41
+ service: label
42
+ }) : t("integration-prompt.unavailable", {
43
+ service: label
44
+ })))), connectorIds.length > 0 && space && /* @__PURE__ */ React.createElement("div", {
45
+ className: "flex justify-end"
46
+ }, /* @__PURE__ */ React.createElement(Surface.Surface, {
47
+ type: ConnectorAuth,
48
+ data: {
49
+ connectorIds
50
+ },
51
+ limit: 1
52
+ })));
53
+ };
54
+ var matchConnectors = (connectors, service) => {
55
+ const needle = service.trim().toLowerCase();
56
+ const base = needle.split(/[.@/]/)[0];
57
+ if (!needle || !base) {
58
+ return [];
59
+ }
60
+ return connectors.filter((connector) => {
61
+ const candidates = [
62
+ connector.id,
63
+ connector.source,
64
+ connector.label
65
+ ].filter((value) => typeof value === "string").map((value) => value.toLowerCase());
66
+ return candidates.some((value) => value === needle || value === base || value.includes(base));
67
+ });
68
+ };
69
+ export {
70
+ IntegrationPrompt as default
71
+ };
72
+ //# sourceMappingURL=IntegrationPrompt-2HJQFYJE.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/IntegrationPrompt/IntegrationPrompt.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Surface, useCapabilities } from '@dxos/app-framework/ui';\nimport { useActiveSpace } from '@dxos/app-toolkit/ui';\nimport { Connector, ConnectorAuth, type ConnectorEntry } from '@dxos/plugin-connector';\nimport { Icon, useTranslation } from '@dxos/react-ui';\n\nimport { meta } from '#meta';\n\nexport type IntegrationPromptProps = {\n /** Service the agent needs access to, e.g. `gmail.com`. */\n service?: string;\n};\n\n/**\n * Agent-facing connector prompt: rendered when the assistant needs a service the user has not yet\n * connected. Resolves the matching {@link Connector} entries for `service` and offers to connect via\n * the shared connector-auth surface, so the user can grant access inline instead of the agent failing\n * silently.\n */\nexport const IntegrationPrompt = ({ service }: IntegrationPromptProps) => {\n const { t } = useTranslation(meta.profile.key);\n const space = useActiveSpace();\n const connectors = useCapabilities(Connector).flat();\n const matched = useMemo(() => (service ? matchConnectors(connectors, service) : []), [connectors, service]);\n\n if (!service) {\n return null;\n }\n\n const label = matched[0]?.label ?? service;\n const connectorIds = matched.map((connector) => connector.id);\n\n return (\n <div role='group' className='flex flex-col gap-2 my-2 p-3 border border-subdued-separator rounded-sm'>\n <div className='flex items-center gap-2'>\n <Icon icon='ph--plugs--regular' size={5} classNames='shrink-0 text-subdued' />\n <div className='flex flex-col min-w-0'>\n <p className='text-sm font-medium truncate'>{t('integration-prompt.title', { service: label })}</p>\n <p className='text-sm text-subdued'>\n {connectorIds.length > 0\n ? t('integration-prompt.description', { service: label })\n : t('integration-prompt.unavailable', { service: label })}\n </p>\n </div>\n </div>\n {connectorIds.length > 0 && space && (\n <div className='flex justify-end'>\n <Surface.Surface type={ConnectorAuth} data={{ connectorIds }} limit={1} />\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Connectors whose id, source, or label relate to the requested service. Matches on the service's\n * leading token (e.g. `gmail` from `gmail.com`) so model-supplied hostnames resolve to connectors\n * keyed by short id or provider domain.\n */\nconst matchConnectors = (connectors: ConnectorEntry[], service: string): ConnectorEntry[] => {\n const needle = service.trim().toLowerCase();\n // A malformed service (e.g. `.gmail.com` or `/`) can yield an empty base token, which would make\n // `value.includes(base)` match every connector; bail so the unavailable state is shown instead.\n const base = needle.split(/[.@/]/)[0];\n if (!needle || !base) {\n return [];\n }\n return connectors.filter((connector) => {\n const candidates = [connector.id, connector.source, connector.label]\n .filter((value): value is string => typeof value === 'string')\n .map((value) => value.toLowerCase());\n return candidates.some((value) => value === needle || value === base || value.includes(base));\n });\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,SAASC,eAAe;AAE/B,SAASC,SAASC,uBAAuB;AACzC,SAASC,sBAAsB;AAC/B,SAASC,WAAWC,qBAA0C;AAC9D,SAASC,MAAMC,sBAAsB;AAErC,SAASC,YAAY;AAad,IAAMC,oBAAoB,CAAC,EAAEC,QAAO,MAA0B;AACnE,QAAM,EAAEC,EAAC,IAAKJ,eAAeC,KAAKI,QAAQC,GAAG;AAC7C,QAAMC,QAAQX,eAAAA;AACd,QAAMY,aAAab,gBAAgBE,SAAAA,EAAWY,KAAI;AAClD,QAAMC,UAAUjB,QAAQ,MAAOU,UAAUQ,gBAAgBH,YAAYL,OAAAA,IAAW,CAAA,GAAK;IAACK;IAAYL;GAAQ;AAE1G,MAAI,CAACA,SAAS;AACZ,WAAO;EACT;AAEA,QAAMS,QAAQF,QAAQ,CAAA,GAAIE,SAAST;AACnC,QAAMU,eAAeH,QAAQI,IAAI,CAACC,cAAcA,UAAUC,EAAE;AAE5D,SACE,sBAAA,cAACC,OAAAA;IAAIC,MAAK;IAAQC,WAAU;KAC1B,sBAAA,cAACF,OAAAA;IAAIE,WAAU;KACb,sBAAA,cAACpB,MAAAA;IAAKqB,MAAK;IAAqBC,MAAM;IAAGC,YAAW;MACpD,sBAAA,cAACL,OAAAA;IAAIE,WAAU;KACb,sBAAA,cAACI,KAAAA;IAAEJ,WAAU;KAAgCf,EAAE,4BAA4B;IAAED,SAASS;EAAM,CAAA,CAAA,GAC5F,sBAAA,cAACW,KAAAA;IAAEJ,WAAU;KACVN,aAAaW,SAAS,IACnBpB,EAAE,kCAAkC;IAAED,SAASS;EAAM,CAAA,IACrDR,EAAE,kCAAkC;IAAED,SAASS;EAAM,CAAA,CAAA,CAAA,CAAA,GAI9DC,aAAaW,SAAS,KAAKjB,SAC1B,sBAAA,cAACU,OAAAA;IAAIE,WAAU;KACb,sBAAA,cAACzB,QAAQA,SAAO;IAAC+B,MAAM3B;IAAe4B,MAAM;MAAEb;IAAa;IAAGc,OAAO;;AAK/E;AAOA,IAAMhB,kBAAkB,CAACH,YAA8BL,YAAAA;AACrD,QAAMyB,SAASzB,QAAQ0B,KAAI,EAAGC,YAAW;AAGzC,QAAMC,OAAOH,OAAOI,MAAM,OAAA,EAAS,CAAA;AACnC,MAAI,CAACJ,UAAU,CAACG,MAAM;AACpB,WAAO,CAAA;EACT;AACA,SAAOvB,WAAWyB,OAAO,CAAClB,cAAAA;AACxB,UAAMmB,aAAa;MAACnB,UAAUC;MAAID,UAAUoB;MAAQpB,UAAUH;MAC3DqB,OAAO,CAACG,UAA2B,OAAOA,UAAU,QAAA,EACpDtB,IAAI,CAACsB,UAAUA,MAAMN,YAAW,CAAA;AACnC,WAAOI,WAAWG,KAAK,CAACD,UAAUA,UAAUR,UAAUQ,UAAUL,QAAQK,MAAME,SAASP,IAAAA,CAAAA;EACzF,CAAA;AACF;",
6
+ "names": ["React", "useMemo", "Surface", "useCapabilities", "useActiveSpace", "Connector", "ConnectorAuth", "Icon", "useTranslation", "meta", "IntegrationPrompt", "service", "t", "profile", "key", "space", "connectors", "flat", "matched", "matchConnectors", "label", "connectorIds", "map", "connector", "id", "div", "role", "className", "icon", "size", "classNames", "p", "length", "type", "data", "limit", "needle", "trim", "toLowerCase", "base", "split", "filter", "candidates", "source", "value", "some", "includes"]
7
+ }
@@ -2,11 +2,15 @@ import "./chunk-J5LGTIGS.mjs";
2
2
 
3
3
  // src/containers/PlanArticle/PlanArticle.tsx
4
4
  import React from "react";
5
+ import { getSpace } from "@dxos/client/echo";
5
6
  import { Panel, ScrollArea, Toolbar } from "@dxos/react-ui";
6
7
  import { useAttention } from "@dxos/react-ui-attention";
7
8
  import { TaskList } from "#components";
9
+ import { useTraceMessages } from "#hooks";
8
10
  var PlanArticle = ({ role, attendableId, subject }) => {
9
11
  const { hasAttention } = useAttention(attendableId);
12
+ const space = getSpace(subject);
13
+ const traceMessages = useTraceMessages(space);
10
14
  return /* @__PURE__ */ React.createElement(Panel.Root, {
11
15
  role,
12
16
  classNames: "dx-document"
@@ -19,10 +23,12 @@ var PlanArticle = ({ role, attendableId, subject }) => {
19
23
  }, /* @__PURE__ */ React.createElement(ScrollArea.Root, {
20
24
  orientation: "vertical"
21
25
  }, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, null, /* @__PURE__ */ React.createElement(TaskList, {
22
- plan: subject
26
+ plan: subject,
27
+ space,
28
+ traceMessages
23
29
  })))));
24
30
  };
25
31
  export {
26
32
  PlanArticle as default
27
33
  };
28
- //# sourceMappingURL=PlanArticle-TS5ULWYS.mjs.map
34
+ //# sourceMappingURL=PlanArticle-VPK2IYWU.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/PlanArticle/PlanArticle.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { type Plan } from '@dxos/assistant-toolkit';\nimport { getSpace } from '@dxos/client/echo';\nimport { Panel, ScrollArea, Toolbar } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\n\nimport { TaskList } from '#components';\nimport { useTraceMessages } from '#hooks';\n\nexport type PlanArticleProps = AppSurface.ObjectArticleProps<Plan.Plan>;\n\nexport const PlanArticle = ({ role, attendableId, subject }: PlanArticleProps) => {\n const { hasAttention } = useAttention(attendableId);\n const space = getSpace(subject);\n const traceMessages = useTraceMessages(space);\n\n return (\n <Panel.Root role={role} classNames='dx-document'>\n <Panel.Toolbar asChild>\n <Toolbar.Root disabled={!hasAttention} />\n </Panel.Toolbar>\n <Panel.Content asChild>\n <ScrollArea.Root orientation='vertical'>\n <ScrollArea.Viewport>\n <TaskList plan={subject} space={space} traceMessages={traceMessages} />\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </Panel.Content>\n </Panel.Root>\n );\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,WAAW;AAIlB,SAASC,gBAAgB;AACzB,SAASC,OAAOC,YAAYC,eAAe;AAC3C,SAASC,oBAAoB;AAE7B,SAASC,gBAAgB;AACzB,SAASC,wBAAwB;AAI1B,IAAMC,cAAc,CAAC,EAAEC,MAAMC,cAAcC,QAAO,MAAoB;AAC3E,QAAM,EAAEC,aAAY,IAAKP,aAAaK,YAAAA;AACtC,QAAMG,QAAQZ,SAASU,OAAAA;AACvB,QAAMG,gBAAgBP,iBAAiBM,KAAAA;AAEvC,SACE,sBAAA,cAACX,MAAMa,MAAI;IAACN;IAAYO,YAAW;KACjC,sBAAA,cAACd,MAAME,SAAO;IAACa,SAAAA;KACb,sBAAA,cAACb,QAAQW,MAAI;IAACG,UAAU,CAACN;OAE3B,sBAAA,cAACV,MAAMiB,SAAO;IAACF,SAAAA;KACb,sBAAA,cAACd,WAAWY,MAAI;IAACK,aAAY;KAC3B,sBAAA,cAACjB,WAAWkB,UAAQ,MAClB,sBAAA,cAACf,UAAAA;IAASgB,MAAMX;IAASE;IAAcC;;AAMnD;",
6
+ "names": ["React", "getSpace", "Panel", "ScrollArea", "Toolbar", "useAttention", "TaskList", "useTraceMessages", "PlanArticle", "role", "attendableId", "subject", "hasAttention", "space", "traceMessages", "Root", "classNames", "asChild", "disabled", "Content", "orientation", "Viewport", "plan"]
7
+ }
@@ -0,0 +1,114 @@
1
+ import {
2
+ getChatPath
3
+ } from "./chunk-OZWZGIV2.mjs";
4
+ import "./chunk-J5LGTIGS.mjs";
5
+
6
+ // src/containers/SpaceHomePrompt/SpaceHomePrompt.tsx
7
+ import React, { useEffect, useMemo, useState } from "react";
8
+ import { Provider } from "@dxos/ai";
9
+ import { Capabilities } from "@dxos/app-framework";
10
+ import { useAtomCapability, useCapability, useOperationInvoker } from "@dxos/app-framework/ui";
11
+ import { LayoutOperation } from "@dxos/app-toolkit";
12
+ import { Event } from "@dxos/async";
13
+ import { useRegistry } from "@dxos/react-client/echo";
14
+ import { useTranslation } from "@dxos/react-ui";
15
+ import { ChatPrompt } from "#components";
16
+ import { useChatProcessor, useChatServices, usePresets } from "#hooks";
17
+ import { meta } from "#meta";
18
+ import { AssistantCapabilities, AssistantOperation } from "#types";
19
+ var SpaceHomePrompt = ({ space }) => {
20
+ const { t } = useTranslation(meta.profile.key);
21
+ const { invokePromise } = useOperationInvoker();
22
+ const registry = useRegistry();
23
+ const atomRegistry = useCapability(Capabilities.AtomRegistry);
24
+ const stateAtom = useCapability(AssistantCapabilities.State);
25
+ const runtime = useChatServices({
26
+ id: space?.id
27
+ });
28
+ const settings = useAtomCapability(AssistantCapabilities.Settings);
29
+ const { preset, ...presetProps } = usePresets(settings);
30
+ const online = preset?.provider === Provider.edge.id;
31
+ const [chat, setChat] = useState();
32
+ const [nonce, setNonce] = useState(0);
33
+ useEffect(() => {
34
+ if (!space) {
35
+ setChat(void 0);
36
+ return;
37
+ }
38
+ let cancelled = false;
39
+ void invokePromise(AssistantOperation.CreateChat, {
40
+ db: space.db,
41
+ addToSpace: false
42
+ }).then((result) => {
43
+ if (!cancelled) {
44
+ setChat(result.data?.object);
45
+ }
46
+ });
47
+ return () => {
48
+ cancelled = true;
49
+ };
50
+ }, [
51
+ space,
52
+ nonce,
53
+ invokePromise
54
+ ]);
55
+ const processor = useChatProcessor({
56
+ space,
57
+ chat,
58
+ preset,
59
+ runtime,
60
+ registry
61
+ });
62
+ const event = useMemo(() => new Event(), []);
63
+ useEffect(() => {
64
+ return event.on((ev) => {
65
+ if (ev.type !== "submit") {
66
+ return;
67
+ }
68
+ const text = ev.text.trim();
69
+ if (!space || !chat || text.length === 0) {
70
+ return;
71
+ }
72
+ space.db.add(chat);
73
+ const chatPath = getChatPath(space.db.spaceId, chat.id);
74
+ atomRegistry.update(stateAtom, (current) => ({
75
+ ...current,
76
+ pendingPrompts: {
77
+ ...current.pendingPrompts,
78
+ [chatPath]: text
79
+ }
80
+ }));
81
+ void invokePromise(LayoutOperation.Open, {
82
+ subject: [
83
+ chatPath
84
+ ]
85
+ });
86
+ setNonce((current) => current + 1);
87
+ });
88
+ }, [
89
+ event,
90
+ space,
91
+ chat,
92
+ atomRegistry,
93
+ stateAtom,
94
+ invokePromise
95
+ ]);
96
+ if (!processor || !chat || !space) {
97
+ return null;
98
+ }
99
+ return /* @__PURE__ */ React.createElement(ChatPrompt, {
100
+ ...presetProps,
101
+ outline: true,
102
+ chat,
103
+ db: space.db,
104
+ processor,
105
+ event,
106
+ preset: preset?.id,
107
+ online,
108
+ placeholder: t("space-home.prompt.placeholder")
109
+ });
110
+ };
111
+ export {
112
+ SpaceHomePrompt as default
113
+ };
114
+ //# sourceMappingURL=SpaceHomePrompt-ISAB76LD.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/SpaceHomePrompt/SpaceHomePrompt.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { Provider } from '@dxos/ai';\nimport { Capabilities } from '@dxos/app-framework';\nimport { useAtomCapability, useCapability, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { Event } from '@dxos/async';\nimport { type Space, useRegistry } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\n\nimport { type ChatEvent, ChatPrompt } from '#components';\nimport { useChatProcessor, useChatServices, usePresets } from '#hooks';\nimport { meta } from '#meta';\nimport { AssistantCapabilities, AssistantOperation, type ChatType } from '#types';\n\nimport { getChatPath } from '../../paths';\n\ntype SpaceScopedProps = {\n space?: Space;\n};\n\n/**\n * Home article pinned-bottom contributor: the assistant prompt. Backed by an ephemeral in-memory\n * chat whose sole responsibility is to collect the user's text, context bindings, and preset\n * choice, then on submit: persist the chat to the space, queue the text as a pending prompt, and\n * navigate to it. AI generation runs in the opened chat view — the processor here exists only to\n * back the context-binder UI.\n */\nexport const SpaceHomePrompt = ({ space }: SpaceScopedProps) => {\n const { t } = useTranslation(meta.profile.key);\n const { invokePromise } = useOperationInvoker();\n\n const registry = useRegistry();\n const atomRegistry = useCapability(Capabilities.AtomRegistry);\n const stateAtom = useCapability(AssistantCapabilities.State);\n const runtime = useChatServices({ id: space?.id });\n const settings = useAtomCapability(AssistantCapabilities.Settings);\n const { preset, ...presetProps } = usePresets(settings);\n // The remote (online) service is the edge provider; the resolved preset carries the active provider.\n const online = preset?.provider === Provider.edge.id;\n\n // In-memory backing chat (not yet added to the space). `nonce` forces a fresh chat after submit.\n const [chat, setChat] = useState<ChatType.Chat>();\n const [nonce, setNonce] = useState(0);\n useEffect(() => {\n if (!space) {\n setChat(undefined);\n return;\n }\n let cancelled = false;\n void invokePromise(AssistantOperation.CreateChat, { db: space.db, addToSpace: false }).then((result) => {\n if (!cancelled) {\n setChat(result.data?.object);\n }\n });\n return () => {\n cancelled = true;\n };\n }, [space, nonce, invokePromise]);\n\n const processor = useChatProcessor({ space, chat, preset, runtime, registry });\n\n const event = useMemo(() => new Event<ChatEvent>(), []);\n useEffect(() => {\n return event.on((ev) => {\n if (ev.type !== 'submit') {\n return;\n }\n const text = ev.text.trim();\n if (!space || !chat || text.length === 0) {\n return;\n }\n\n // Persist the in-memory chat, queue the prompt, and open the chat (which submits it).\n space.db.add(chat);\n const chatPath = getChatPath(space.db.spaceId, chat.id);\n atomRegistry.update(stateAtom, (current) => ({\n ...current,\n pendingPrompts: { ...current.pendingPrompts, [chatPath]: text },\n }));\n void invokePromise(LayoutOperation.Open, { subject: [chatPath] });\n setNonce((current) => current + 1);\n });\n }, [event, space, chat, atomRegistry, stateAtom, invokePromise]);\n\n if (!processor || !chat || !space) {\n return null;\n }\n\n return (\n <ChatPrompt\n {...presetProps}\n outline\n chat={chat}\n db={space.db}\n processor={processor}\n event={event}\n preset={preset?.id}\n online={online}\n placeholder={t('space-home.prompt.placeholder')}\n />\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useEffect", "useMemo", "useState", "Provider", "Capabilities", "useAtomCapability", "useCapability", "useOperationInvoker", "LayoutOperation", "Event", "useRegistry", "useTranslation", "ChatPrompt", "useChatProcessor", "useChatServices", "usePresets", "meta", "AssistantCapabilities", "AssistantOperation", "SpaceHomePrompt", "space", "t", "useTranslation", "meta", "profile", "key", "invokePromise", "useOperationInvoker", "registry", "useRegistry", "atomRegistry", "useCapability", "Capabilities", "AtomRegistry", "stateAtom", "AssistantCapabilities", "State", "runtime", "useChatServices", "id", "settings", "useAtomCapability", "Settings", "preset", "presetProps", "usePresets", "online", "provider", "Provider", "edge", "chat", "setChat", "useState", "nonce", "setNonce", "useEffect", "undefined", "cancelled", "AssistantOperation", "CreateChat", "db", "addToSpace", "then", "result", "data", "object", "processor", "useChatProcessor", "event", "useMemo", "Event", "on", "ev", "type", "text", "trim", "length", "add", "chatPath", "getChatPath", "spaceId", "update", "current", "pendingPrompts", "LayoutOperation", "Open", "subject", "ChatPrompt", "outline", "placeholder"]
7
+ }