@dxos/plugin-assistant 0.8.4-staging.60fe92afc8 → 0.9.1-main.c7dcc2e112

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 (254) hide show
  1. package/dist/lib/neutral/{AgentArticle-K7XM46OQ.mjs → AgentArticle-2BEPWUMN.mjs} +9 -7
  2. package/dist/lib/neutral/AgentArticle-2BEPWUMN.mjs.map +7 -0
  3. package/dist/lib/neutral/AssistantPlugin.mjs +1 -1
  4. package/dist/lib/neutral/{AssistantSettings-GG52BLKS.mjs → AssistantSettings-7ALY4BMS.mjs} +3 -3
  5. package/dist/lib/neutral/AssistantSettings-7ALY4BMS.mjs.map +7 -0
  6. package/dist/lib/neutral/{ChatArticle-VNVZCDUR.mjs → ChatArticle-KT46SUFU.mjs} +2 -2
  7. package/dist/lib/neutral/{ChatCompanion-LBUHYWQG.mjs → ChatCompanion-YHC43RYQ.mjs} +4 -4
  8. package/dist/lib/neutral/ChatCompanion-YHC43RYQ.mjs.map +7 -0
  9. package/dist/lib/neutral/{ChatDialog-DCA6FLOV.mjs → ChatDialog-YZDZLIQA.mjs} +5 -4
  10. package/dist/lib/neutral/ChatDialog-YZDZLIQA.mjs.map +7 -0
  11. package/dist/lib/neutral/{PlanArticle-TS5ULWYS.mjs → PlanArticle-VPK2IYWU.mjs} +8 -2
  12. package/dist/lib/neutral/PlanArticle-VPK2IYWU.mjs.map +7 -0
  13. package/dist/lib/neutral/{RoutineArticle-5NYXHRG6.mjs → RoutineArticle-FK5BXQN5.mjs} +3 -3
  14. package/dist/lib/neutral/RoutineArticle-FK5BXQN5.mjs.map +7 -0
  15. package/dist/lib/neutral/SpaceHomePrompt-HTWQKLGI.mjs +113 -0
  16. package/dist/lib/neutral/SpaceHomePrompt-HTWQKLGI.mjs.map +7 -0
  17. package/dist/lib/neutral/SpaceHomeSuggestions-6G4E7GNJ.mjs +50 -0
  18. package/dist/lib/neutral/SpaceHomeSuggestions-6G4E7GNJ.mjs.map +7 -0
  19. package/dist/lib/neutral/TracePanel-T552TAOH.mjs +12 -0
  20. package/dist/lib/neutral/TracePanel-T552TAOH.mjs.map +7 -0
  21. package/dist/lib/neutral/{TriggerStatus-X7Y5JFZJ.mjs → TriggerStatus-RBOHHDOK.mjs} +3 -3
  22. package/dist/lib/neutral/TriggerStatus-RBOHHDOK.mjs.map +7 -0
  23. package/dist/lib/neutral/{agent-service-WCAP5MLI.mjs → agent-service-WV5CSHAG.mjs} +4 -2
  24. package/dist/lib/neutral/{agent-service-WCAP5MLI.mjs.map → agent-service-WV5CSHAG.mjs.map} +3 -3
  25. package/dist/lib/neutral/{app-graph-builder-WUFHQH3Y.mjs → app-graph-builder-PTSRZXRN.mjs} +13 -13
  26. package/dist/lib/neutral/app-graph-builder-PTSRZXRN.mjs.map +7 -0
  27. package/dist/lib/neutral/{blueprint-definition-MH2QLYQH.mjs → blueprint-definition-2XPYI35X.mjs} +4 -3
  28. package/dist/lib/neutral/blueprint-definition-2XPYI35X.mjs.map +7 -0
  29. package/dist/lib/neutral/capabilities/index.mjs +8 -8
  30. package/dist/lib/neutral/capabilities/index.mjs.map +2 -2
  31. package/dist/lib/neutral/{chunk-HLANPOBA.mjs → chunk-35EL65O4.mjs} +3 -3
  32. package/dist/lib/neutral/chunk-35EL65O4.mjs.map +7 -0
  33. package/dist/lib/neutral/chunk-54W7N6M6.mjs +445 -0
  34. package/dist/lib/neutral/chunk-54W7N6M6.mjs.map +7 -0
  35. package/dist/lib/neutral/{chunk-YXRGZYYH.mjs → chunk-5KB2WRI2.mjs} +6 -6
  36. package/dist/lib/neutral/chunk-5KB2WRI2.mjs.map +7 -0
  37. package/dist/lib/neutral/{TracePanel-KTZJ6JNR.mjs → chunk-5LKNH7FD.mjs} +5 -20
  38. package/dist/lib/neutral/chunk-5LKNH7FD.mjs.map +7 -0
  39. package/dist/lib/neutral/{chunk-SMFJD7BP.mjs → chunk-7FQT4XMI.mjs} +2 -2
  40. package/dist/lib/neutral/{chunk-RKVVK3R3.mjs → chunk-H77JTXAN.mjs} +17 -9
  41. package/dist/lib/neutral/chunk-H77JTXAN.mjs.map +7 -0
  42. package/dist/lib/neutral/{chunk-QAZMOFPI.mjs → chunk-IQZJ5TTM.mjs} +4 -4
  43. package/dist/lib/neutral/chunk-IQZJ5TTM.mjs.map +7 -0
  44. package/dist/lib/neutral/chunk-ZNDQVYUN.mjs +53 -0
  45. package/dist/lib/neutral/chunk-ZNDQVYUN.mjs.map +7 -0
  46. package/dist/lib/neutral/components/index.mjs +296 -109
  47. package/dist/lib/neutral/components/index.mjs.map +3 -3
  48. package/dist/lib/neutral/containers/index.mjs +12 -8
  49. package/dist/lib/neutral/containers/index.mjs.map +3 -3
  50. package/dist/lib/neutral/{create-chat-SGGQ6HVN.mjs → create-chat-Z3FNA6OJ.mjs} +2 -2
  51. package/dist/lib/neutral/{create-chat-SGGQ6HVN.mjs.map → create-chat-Z3FNA6OJ.mjs.map} +2 -2
  52. package/dist/lib/neutral/{create-object-U2SOFZLR.mjs → create-object-BJUDDKQQ.mjs} +2 -2
  53. package/dist/lib/neutral/execution-graph/index.mjs +156 -0
  54. package/dist/lib/neutral/execution-graph/index.mjs.map +4 -4
  55. package/dist/lib/neutral/{fork-chat-34KEF4ZJ.mjs → fork-chat-UYXYT6BT.mjs} +4 -4
  56. package/dist/lib/neutral/fork-chat-UYXYT6BT.mjs.map +7 -0
  57. package/dist/lib/neutral/hooks/index.mjs +233 -438
  58. package/dist/lib/neutral/hooks/index.mjs.map +4 -4
  59. package/dist/lib/neutral/index.mjs +3 -3
  60. package/dist/lib/neutral/markdown-extension-IJ5RQMQ4.mjs +126 -0
  61. package/dist/lib/neutral/markdown-extension-IJ5RQMQ4.mjs.map +7 -0
  62. package/dist/lib/neutral/meta.json +1 -1
  63. package/dist/lib/neutral/meta.mjs +1 -1
  64. package/dist/lib/neutral/operations/index.mjs +1 -1
  65. package/dist/lib/neutral/plugin.mjs +2 -2
  66. package/dist/lib/neutral/{react-surface-XRTBW5OJ.mjs → react-surface-ES7UHZ65.mjs} +29 -17
  67. package/dist/lib/neutral/react-surface-ES7UHZ65.mjs.map +7 -0
  68. package/dist/lib/neutral/{run-prompt-in-new-chat-D5IIE2C7.mjs → run-prompt-in-new-chat-NIAGCKQV.mjs} +11 -8
  69. package/dist/lib/neutral/run-prompt-in-new-chat-NIAGCKQV.mjs.map +7 -0
  70. package/dist/lib/neutral/{settings-W4BLWQ53.mjs → settings-7Q3RITIT.mjs} +3 -3
  71. package/dist/lib/neutral/{settings-W4BLWQ53.mjs.map → settings-7Q3RITIT.mjs.map} +3 -3
  72. package/dist/lib/neutral/{state-H3G7QCU6.mjs → state-XO2UYSSG.mjs} +2 -2
  73. package/dist/lib/neutral/{state-H3G7QCU6.mjs.map → state-XO2UYSSG.mjs.map} +3 -3
  74. package/dist/lib/neutral/testing.mjs +1 -1
  75. package/dist/lib/neutral/translations.mjs +18 -11
  76. package/dist/lib/neutral/translations.mjs.map +3 -3
  77. package/dist/lib/neutral/types/index.mjs +1 -1
  78. package/dist/types/dx.config.d.ts +28 -0
  79. package/dist/types/dx.config.d.ts.map +1 -0
  80. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/index.d.ts +17 -57
  83. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  84. package/dist/types/src/capabilities/react-surface.d.ts +2 -2
  85. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  86. package/dist/types/src/components/Chat/Chat.d.ts +6 -3
  87. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  88. package/dist/types/src/components/Chat/Chat.stories.d.ts +32 -0
  89. package/dist/types/src/components/Chat/Chat.stories.d.ts.map +1 -0
  90. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  91. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
  92. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts +6 -0
  93. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -1
  94. package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts +1 -0
  95. package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts.map +1 -1
  96. package/dist/types/src/components/TaskList/TaskList.d.ts +8 -0
  97. package/dist/types/src/components/TaskList/TaskList.d.ts.map +1 -1
  98. package/dist/types/src/components/TaskList/TaskList.stories.d.ts +3 -0
  99. package/dist/types/src/components/TaskList/TaskList.stories.d.ts.map +1 -1
  100. package/dist/types/src/components/index.d.ts +1 -0
  101. package/dist/types/src/components/index.d.ts.map +1 -1
  102. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts +2 -2
  103. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts.map +1 -1
  104. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts +2 -2
  105. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -1
  106. package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts.map +1 -1
  107. package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts +15 -0
  108. package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts.map +1 -0
  109. package/dist/types/src/containers/SpaceHomePrompt/index.d.ts +2 -0
  110. package/dist/types/src/containers/SpaceHomePrompt/index.d.ts.map +1 -0
  111. package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts +13 -0
  112. package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts.map +1 -0
  113. package/dist/types/src/containers/SpaceHomeSuggestions/index.d.ts +2 -0
  114. package/dist/types/src/containers/SpaceHomeSuggestions/index.d.ts.map +1 -0
  115. package/dist/types/src/containers/TracePanel/TracePanel.d.ts.map +1 -1
  116. package/dist/types/src/containers/index.d.ts +2 -0
  117. package/dist/types/src/containers/index.d.ts.map +1 -1
  118. package/dist/types/src/execution-graph/execution-graph.d.ts +18 -0
  119. package/dist/types/src/execution-graph/execution-graph.d.ts.map +1 -1
  120. package/dist/types/src/execution-graph/index.d.ts +2 -1
  121. package/dist/types/src/execution-graph/index.d.ts.map +1 -1
  122. package/dist/types/src/execution-graph/pending-block-status.d.ts +26 -0
  123. package/dist/types/src/execution-graph/pending-block-status.d.ts.map +1 -0
  124. package/dist/types/src/execution-graph/pending-block-status.test.d.ts +2 -0
  125. package/dist/types/src/execution-graph/pending-block-status.test.d.ts.map +1 -0
  126. package/dist/types/src/extensions/prompt-extension.d.ts +1 -1
  127. package/dist/types/src/extensions/prompt-extension.d.ts.map +1 -1
  128. package/dist/types/src/feed-logger.d.ts +3 -2
  129. package/dist/types/src/feed-logger.d.ts.map +1 -1
  130. package/dist/types/src/hooks/index.d.ts +2 -0
  131. package/dist/types/src/hooks/index.d.ts.map +1 -1
  132. package/dist/types/src/hooks/useProcessEphemeralStatus.d.ts +10 -0
  133. package/dist/types/src/hooks/useProcessEphemeralStatus.d.ts.map +1 -0
  134. package/dist/types/src/hooks/useTraceMessages.d.ts +12 -0
  135. package/dist/types/src/hooks/useTraceMessages.d.ts.map +1 -0
  136. package/dist/types/src/meta.d.ts +28 -2
  137. package/dist/types/src/meta.d.ts.map +1 -1
  138. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts.map +1 -1
  139. package/dist/types/src/paths.d.ts.map +1 -1
  140. package/dist/types/src/processor/processor.d.ts +23 -0
  141. package/dist/types/src/processor/processor.d.ts.map +1 -1
  142. package/dist/types/src/translations.d.ts.map +1 -1
  143. package/dist/types/src/types/Assistant.d.ts +1 -1
  144. package/dist/types/src/types/AssistantCapabilities.d.ts.map +1 -1
  145. package/dist/types/src/types/AssistantEvents.d.ts.map +1 -1
  146. package/dist/types/src/types/AssistantOperation.d.ts +7 -7
  147. package/dist/types/src/util/error-cause.d.ts +3 -0
  148. package/dist/types/src/util/error-cause.d.ts.map +1 -0
  149. package/dist/types/tsconfig.tsbuildinfo +1 -1
  150. package/dx.config.ts +38 -0
  151. package/package.json +71 -70
  152. package/src/AssistantPlugin.conversations.json +1 -1
  153. package/src/AssistantPlugin.test.ts +1 -1
  154. package/src/AssistantPlugin.ts +2 -2
  155. package/src/capabilities/agent-service.ts +5 -1
  156. package/src/capabilities/app-graph-builder.ts +15 -20
  157. package/src/capabilities/blueprint-definition.ts +2 -0
  158. package/src/capabilities/index.ts +1 -7
  159. package/src/capabilities/markdown-extension.ts +5 -1
  160. package/src/capabilities/react-surface.tsx +38 -23
  161. package/src/capabilities/settings.ts +2 -2
  162. package/src/capabilities/state.ts +1 -1
  163. package/src/components/AgentProperties/AgentProperties.tsx +1 -1
  164. package/src/components/AssistantSettings/AssistantSettings.tsx +2 -2
  165. package/src/components/Chat/Chat.stories.tsx +94 -0
  166. package/src/components/Chat/Chat.tsx +39 -6
  167. package/src/components/ChatPrompt/ChatActions.tsx +4 -2
  168. package/src/components/ChatPrompt/ChatMcpErrors.tsx +1 -1
  169. package/src/components/ChatPrompt/ChatOptions.tsx +26 -29
  170. package/src/components/ChatPrompt/ChatPrompt.tsx +1 -1
  171. package/src/components/ChatPrompt/ChatReferences.tsx +1 -1
  172. package/src/components/ChatThread/Anchor.stories.tsx +1 -1
  173. package/src/components/ChatThread/ChatThread.stories.tsx +1 -1
  174. package/src/components/ChatThread/DEBUG.md +23 -0
  175. package/src/components/ChatThread/widgets/SummaryWidget.tsx +1 -1
  176. package/src/components/ChatThread/widgets/ToolWidget.tsx +1 -1
  177. package/src/components/ProcessTree/ProcessTree.stories.tsx +7 -0
  178. package/src/components/ProcessTree/ProcessTree.tsx +191 -88
  179. package/src/components/TaskList/TaskList.stories.tsx +23 -2
  180. package/src/components/TaskList/TaskList.tsx +122 -28
  181. package/src/components/TemplateEditor/TemplateEditor.tsx +1 -1
  182. package/src/components/TemplateEditor/TemplateForm.tsx +1 -1
  183. package/src/components/ToolBlock/ToolBlock.tsx +1 -1
  184. package/src/components/index.ts +1 -0
  185. package/src/containers/AgentArticle/AgentArticle.stories.tsx +4 -4
  186. package/src/containers/AgentArticle/AgentArticle.tsx +9 -9
  187. package/src/containers/ChatArticle/ChatArticle.tsx +18 -10
  188. package/src/containers/ChatCompanion/ChatCompanion.tsx +2 -2
  189. package/src/containers/ChatDialog/ChatDialog.tsx +5 -3
  190. package/src/containers/PlanArticle/PlanArticle.tsx +5 -1
  191. package/src/containers/RoutineArticle/RoutineArticle.tsx +2 -2
  192. package/src/containers/SpaceHomePrompt/SpaceHomePrompt.tsx +105 -0
  193. package/src/containers/SpaceHomePrompt/index.ts +5 -0
  194. package/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.tsx +69 -0
  195. package/src/containers/SpaceHomeSuggestions/index.ts +5 -0
  196. package/src/containers/TracePanel/TracePanel.tsx +3 -30
  197. package/src/containers/TriggerStatus/TriggerStatus.tsx +2 -2
  198. package/src/containers/index.ts +2 -0
  199. package/src/execution-graph/execution-graph.ts +130 -0
  200. package/src/execution-graph/index.ts +10 -0
  201. package/src/execution-graph/pending-block-status.test.ts +114 -0
  202. package/src/execution-graph/pending-block-status.ts +88 -0
  203. package/src/execution-graph/sub-agent-delegation.test.ts +16 -1
  204. package/src/extensions/prompt-extension.ts +102 -73
  205. package/src/feed-logger.ts +21 -19
  206. package/src/hooks/index.ts +2 -0
  207. package/src/hooks/useChatProcessor.ts +1 -1
  208. package/src/hooks/useChatServices.ts +2 -2
  209. package/src/hooks/useChatToolbarActions.ts +5 -5
  210. package/src/hooks/useContextBinder.ts +1 -1
  211. package/src/hooks/useProcessEphemeralStatus.ts +192 -0
  212. package/src/hooks/useTraceMessages.ts +41 -0
  213. package/src/meta.ts +3 -31
  214. package/src/operations/create-chat.ts +1 -1
  215. package/src/operations/fork-chat.ts +3 -3
  216. package/src/operations/run-prompt-in-new-chat.ts +5 -3
  217. package/src/paths.ts +2 -2
  218. package/src/processor/processor.node.test.ts +71 -1
  219. package/src/processor/processor.ts +58 -2
  220. package/src/testing/data/trace-timeline-multiple.dx.json +1 -1
  221. package/src/testing/data/trace-timeline-remote.dx.json +1 -1
  222. package/src/testing/data/trace-timeline.dx.json +0 -1
  223. package/src/translations.ts +18 -10
  224. package/src/types/AssistantCapabilities.ts +3 -3
  225. package/src/types/AssistantEvents.ts +1 -1
  226. package/src/types/AssistantOperation.ts +1 -1
  227. package/src/util/error-cause.ts +21 -0
  228. package/dist/lib/neutral/AgentArticle-K7XM46OQ.mjs.map +0 -7
  229. package/dist/lib/neutral/AssistantSettings-GG52BLKS.mjs.map +0 -7
  230. package/dist/lib/neutral/ChatCompanion-LBUHYWQG.mjs.map +0 -7
  231. package/dist/lib/neutral/ChatDialog-DCA6FLOV.mjs.map +0 -7
  232. package/dist/lib/neutral/PlanArticle-TS5ULWYS.mjs.map +0 -7
  233. package/dist/lib/neutral/RoutineArticle-5NYXHRG6.mjs.map +0 -7
  234. package/dist/lib/neutral/TracePanel-KTZJ6JNR.mjs.map +0 -7
  235. package/dist/lib/neutral/TriggerStatus-X7Y5JFZJ.mjs.map +0 -7
  236. package/dist/lib/neutral/app-graph-builder-WUFHQH3Y.mjs.map +0 -7
  237. package/dist/lib/neutral/blueprint-definition-MH2QLYQH.mjs.map +0 -7
  238. package/dist/lib/neutral/chunk-HLANPOBA.mjs.map +0 -7
  239. package/dist/lib/neutral/chunk-QAZMOFPI.mjs.map +0 -7
  240. package/dist/lib/neutral/chunk-RKVVK3R3.mjs.map +0 -7
  241. package/dist/lib/neutral/chunk-VTK5R4H3.mjs +0 -9
  242. package/dist/lib/neutral/chunk-VTK5R4H3.mjs.map +0 -7
  243. package/dist/lib/neutral/chunk-XYHPOGTK.mjs +0 -43
  244. package/dist/lib/neutral/chunk-XYHPOGTK.mjs.map +0 -7
  245. package/dist/lib/neutral/chunk-YXRGZYYH.mjs.map +0 -7
  246. package/dist/lib/neutral/fork-chat-34KEF4ZJ.mjs.map +0 -7
  247. package/dist/lib/neutral/markdown-extension-YMIFDMYF.mjs +0 -110
  248. package/dist/lib/neutral/markdown-extension-YMIFDMYF.mjs.map +0 -7
  249. package/dist/lib/neutral/react-surface-XRTBW5OJ.mjs.map +0 -7
  250. package/dist/lib/neutral/run-prompt-in-new-chat-D5IIE2C7.mjs.map +0 -7
  251. package/src/testing/trace-timeline.node.conversations.json +0 -1
  252. /package/dist/lib/neutral/{ChatArticle-VNVZCDUR.mjs.map → ChatArticle-KT46SUFU.mjs.map} +0 -0
  253. /package/dist/lib/neutral/{chunk-SMFJD7BP.mjs.map → chunk-7FQT4XMI.mjs.map} +0 -0
  254. /package/dist/lib/neutral/{create-object-U2SOFZLR.mjs.map → create-object-BJUDDKQQ.mjs.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../src/hooks/useBlueprintRegistry.ts", "../../../../src/hooks/useChatKeymap.ts", "../../../../src/hooks/useChatProcessor.ts", "../../../../src/processor/presets.ts", "../../../../src/processor/processor.ts", "../../../../src/hooks/useChatServices.ts", "../../../../src/hooks/useChatToolbarActions.ts", "../../../../src/hooks/useContextBinder.ts", "../../../../src/hooks/useContextObjects.ts", "../../../../src/hooks/useDebug.ts", "../../../../src/hooks/useFilteredTypes.ts", "../../../../src/hooks/useFlush.ts", "../../../../src/hooks/useOnline.ts", "../../../../src/hooks/usePresets.ts", "../../../../src/hooks/useReferencesProvider.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { type AiContext } from '@dxos/assistant';\nimport { Blueprint } from '@dxos/compute';\nimport { type Database, Filter, Obj, Ref, type Registry } from '@dxos/echo';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { distinctBy } from '@dxos/util';\n\nexport const useBlueprints = ({ registry, db }: { registry?: Registry.Registry; db?: Database.Database }) => {\n const [registryBlueprints, setRegistryBlueprints] = useState<Blueprint.Blueprint[]>(\n () => registry?.query(Filter.type(Blueprint.Blueprint)).runSync() ?? [],\n );\n\n useEffect(() => {\n if (!registry) {\n setRegistryBlueprints([]);\n return;\n }\n setRegistryBlueprints(registry.query(Filter.type(Blueprint.Blueprint)).runSync());\n return registry.changed.on(() => {\n setRegistryBlueprints(registry.query(Filter.type(Blueprint.Blueprint)).runSync());\n });\n }, [registry]);\n\n const spaceBlueprints = useQuery(db, Filter.type(Blueprint.Blueprint));\n return useMemo(() => {\n const blueprints = distinctBy([...registryBlueprints, ...spaceBlueprints], (b) => Obj.getMeta(b).key);\n blueprints.sort(({ name: a }, { name: b }) => a.localeCompare(b));\n return blueprints;\n }, [registryBlueprints, spaceBlueprints]);\n};\n\n/**\n * Create reactive map of active blueprints (by key).\n */\nexport const useActiveBlueprints = ({ context }: { context?: AiContext.Binder }) => {\n const [active, setActive] = useState<Map<string, Blueprint.Blueprint>>(new Map());\n\n useEffect(() => {\n if (!context) {\n setActive(new Map());\n return;\n }\n\n const updateActive = () => {\n const blueprints = context.getBlueprints();\n setActive(\n new Map(\n blueprints\n .map((blueprint) => [Obj.getMeta(blueprint).key, blueprint] as const)\n .filter((entry): entry is readonly [string, Blueprint.Blueprint] => entry[0] !== undefined),\n ),\n );\n };\n\n // Set initial value.\n updateActive();\n\n // Subscribe to changes.\n return context.subscribeBlueprints(updateActive);\n }, [context]);\n\n return active;\n};\n\n// TODO(burdon): Move logic into binder.\nexport const useBlueprintHandlers = ({\n db,\n context,\n registry,\n}: {\n db: Database.Database;\n context?: AiContext.Binder;\n registry?: Registry.Registry;\n}) => {\n const onUpdateBlueprint = useCallback(\n async (key: string, checked: boolean) => {\n if (!context) {\n return;\n }\n\n if (checked) {\n // Check if the blueprint is in the registry — if so, bind via its key URI directly\n // (no DB clone needed). Fall back to an existing DB copy for user-forked blueprints.\n const registryBlueprint = registry\n ?.query(Filter.type(Blueprint.Blueprint))\n .runSync()\n .find((b) => Obj.getMeta(b).key === key);\n\n if (registryBlueprint) {\n await context.bind({ blueprints: [Ref.fromURI(Blueprint.registryURI(key))] });\n } else {\n // User-forked blueprint (in DB but not in registry): bind via DB ref.\n const objects = await db.query(Filter.type(Blueprint.Blueprint)).run();\n const storedBlueprint = objects.find((blueprint) => Obj.getMeta(blueprint).key === key);\n if (storedBlueprint) {\n await context.bind({ blueprints: [Ref.make(storedBlueprint)] });\n }\n }\n } else {\n // Unbind: try registry ref first, then DB ref.\n const registryBlueprint = registry\n ?.query(Filter.type(Blueprint.Blueprint))\n .runSync()\n .find((b) => Obj.getMeta(b).key === key);\n if (registryBlueprint) {\n await context.unbind({ blueprints: [Ref.fromURI(Blueprint.registryURI(key))] });\n } else {\n const objects = await db.query(Filter.type(Blueprint.Blueprint)).run();\n const storedBlueprint = objects.find((blueprint) => Obj.getMeta(blueprint).key === key);\n if (storedBlueprint) {\n await context.unbind({ blueprints: [Ref.make(storedBlueprint)] });\n }\n }\n }\n },\n [db, context, registry],\n );\n\n return { onUpdateBlueprint };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Extension, Prec } from '@codemirror/state';\nimport { keymap } from '@codemirror/view';\nimport { useMemo } from 'react';\n\nimport { type Event } from '@dxos/async';\nimport { isTruthy } from '@dxos/util';\n\nimport { type ChatEvent } from '../components/Chat/events';\n\n/**\n * CodeMirror keymap shared by the chat document (Thread) and the prompt editor — pressing\n * Mod-Arrow keys when either editor is focused emits the corresponding `ChatEvent` on the\n * shared event bus.\n */\nexport const useChatKeymapExtensions = ({ event }: { event: Event<ChatEvent> }): Extension[] => {\n return useMemo<Extension[]>(() => {\n return [\n Prec.highest(\n keymap.of([\n {\n key: 'Mod-ArrowUp',\n preventDefault: true,\n run: () => {\n event.emit({ type: 'nav-previous' });\n return true;\n },\n shift: () => {\n event.emit({ type: 'thread-open' });\n return true;\n },\n },\n {\n key: 'Mod-ArrowDown',\n preventDefault: true,\n run: () => {\n event.emit({ type: 'nav-next' });\n return true;\n },\n shift: () => {\n event.emit({ type: 'thread-close' });\n return true;\n },\n },\n ]),\n ),\n ].filter(isTruthy);\n }, [event]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { RegistryContext } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport { useContext, useMemo, useState } from 'react';\n\nimport { AiService, OpaqueToolkit } from '@dxos/ai';\nimport { Capabilities } from '@dxos/app-framework';\nimport { useCapability } from '@dxos/app-framework/ui';\nimport { AiSession } from '@dxos/assistant';\nimport { type Chat } from '@dxos/assistant-toolkit';\nimport { Credential, ServiceResolver } from '@dxos/compute';\nimport { Database, Feed, Ref, Registry } from '@dxos/echo';\nimport { createFeedServiceLayer } from '@dxos/echo-client';\nimport { EffectEx } from '@dxos/effect';\nimport { AgentService } from '@dxos/functions-runtime';\nimport { log } from '@dxos/log';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useAsyncEffect } from '@dxos/react-ui';\n\nimport { type Assistant } from '#types';\n\nimport { AiChatProcessor, type AiServicePreset } from '../processor';\n\nexport type UseChatProcessorProps = {\n space?: Space;\n chat?: Chat.Chat;\n preset?: AiServicePreset;\n runtime?: Capabilities.ProcessManagerRuntime;\n registry?: Registry.Registry;\n settings?: Assistant.Settings;\n};\n\n/**\n * Configure and create AiChatProcessor.\n */\nexport const useChatProcessor = ({\n space,\n chat,\n preset,\n runtime,\n registry,\n settings,\n}: UseChatProcessorProps): AiChatProcessor | undefined => {\n const observableRegistry = useContext(RegistryContext);\n\n const [session, setSession] = useState<AiSession.Session>();\n useAsyncEffect(async () => {\n if (!space || !chat) {\n return;\n }\n\n const feedTarget = chat.feed.target;\n if (!feedTarget) {\n return;\n }\n const feedServiceLayer = createFeedServiceLayer(space.queues);\n const runtime = await EffectEx.runAndForwardErrors(\n Effect.runtime<Feed.FeedService>().pipe(Effect.provide(feedServiceLayer)),\n );\n const session = new AiSession.Session({\n feed: feedTarget,\n runtime,\n registry: observableRegistry,\n });\n await session.open();\n setSession(session);\n return () => {\n void session.close();\n setSession(undefined);\n };\n }, [space, chat?.feed.target]);\n\n const feed = chat?.feed.target;\n const serviceResolver = useCapability(Capabilities.ServiceResolver);\n\n const processor = useMemo(() => {\n if (!runtime || !session || !chat || !feed || !space) {\n return undefined;\n }\n\n const spaceLayer = ServiceResolver.provide(\n { space: space.id },\n Database.Service,\n Feed.FeedService,\n Credential.CredentialsService,\n AiService.AiService,\n AgentService.AgentService,\n Registry.Service,\n OpaqueToolkit.OpaqueToolkitProvider,\n ).pipe(Layer.provide(Layer.succeed(ServiceResolver.ServiceResolver, serviceResolver)));\n\n log('creating processor', { preset, model: preset?.model, settings });\n return new AiChatProcessor(session, runtime, feed, spaceLayer, {\n chat: chat ? Ref.make(chat) : undefined,\n observableRegistry,\n registry,\n model: preset?.model,\n });\n }, [runtime, session, registry, preset, chat, feed, space?.id]);\n\n return processor;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { type ModelName } from '@dxos/ai';\n\nconst ModelProviders = ['dxos-local', 'dxos-remote', 'lm-studio', 'ollama'] as const;\n\nconst ModelProvider = Schema.Literal(...ModelProviders);\ntype ModelProvider = Schema.Schema.Type<typeof ModelProvider>;\n\nexport type AiServicePreset = {\n id: string;\n provider: ModelProvider;\n model: ModelName;\n label?: string;\n};\n\nconst createModelLabel = (model: ModelName) => {\n const parts = model.split('.');\n return parts[parts.length - 1];\n};\n\n// TODO(burdon): Users should be able to create and edit presets.\nexport const AiServicePresets: AiServicePreset[] = [\n // Sonnet is first so it is the default selection.\n {\n provider: 'dxos-remote' as const,\n model: 'ai.claude.model.claude-sonnet-4-6' as const,\n label: 'Claude Sonnet',\n },\n {\n provider: 'dxos-remote' as const,\n model: 'ai.claude.model.claude-opus-4-8' as const,\n label: 'Claude Opus',\n },\n {\n provider: 'dxos-remote' as const,\n model: 'ai.claude.model.claude-haiku-4-5' as const,\n label: 'Claude Haiku',\n },\n {\n provider: 'ollama' as const,\n model: 'ai.ollama.model.gpt-oss:20b' as const,\n },\n {\n provider: 'ollama' as const,\n model: 'ai.ollama.model.gemma4:latest' as const,\n },\n {\n provider: 'lm-studio' as const,\n model: 'ai.google.model.gemma-3-27b' as const,\n },\n {\n provider: 'lm-studio' as const,\n model: 'ai.meta.model.llama-3.2-3b-instruct' as const,\n },\n {\n model: 'ai.ollama.model.deepseek-r1:latest' as const,\n provider: 'dxos-local' as const,\n },\n].map(\n ({ model, provider, label }, i) =>\n ({\n id: `preset-${i}`,\n provider,\n model,\n label: label ?? createModelLabel(model),\n }) satisfies AiServicePreset,\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom, Registry as AtomRegistry } from '@effect-atom/atom-react';\nimport * as AiError from '@effect/ai/AiError';\nimport * as Cause from 'effect/Cause';\nimport * as Effect from 'effect/Effect';\nimport * as Exit from 'effect/Exit';\nimport * as Fiber from 'effect/Fiber';\nimport * as Layer from 'effect/Layer';\nimport * as Option from 'effect/Option';\nimport * as Stream from 'effect/Stream';\n\nimport { type AiService, DEFAULT_EDGE_MODEL, type ModelName, type ModelRegistry, type OpaqueToolkit } from '@dxos/ai';\nimport { Capabilities } from '@dxos/app-framework';\nimport {\n AiContext,\n AiSession,\n createSystemPrompt,\n formatSystemPrompt,\n McpServerError,\n PartialBlock,\n ToolExecutionServices,\n} from '@dxos/assistant';\nimport { type Chat } from '@dxos/assistant-toolkit';\nimport { type Credential, Operation, type ServiceNotAvailableError, Trace } from '@dxos/compute';\nimport { type Database, Feed, Obj, Ref, type Registry } from '@dxos/echo';\nimport { EffectEx } from '@dxos/effect';\nimport { AgentService } from '@dxos/functions-runtime';\nimport { log } from '@dxos/log';\nimport { Message } from '@dxos/types';\n\nimport { AssistantOperation } from '#types';\n\n/**\n * @deprecated Services type for the old direct-conversation processor path.\n * Retained for backward compatibility with CLI and update-name.\n */\nexport type AiChatServices =\n | Credential.CredentialsService\n | Database.Service\n | AiService.AiService\n | Trace.TraceService;\n\n/**\n * Space-scoped services materialised by the layer passed into\n * {@link AiChatProcessor}. Mirrors the tag list that\n * {@link useChatProcessor} passes to {@link ServiceResolver.provide}.\n */\nexport type SpaceServices =\n | Database.Service\n | Feed.FeedService\n | Credential.CredentialsService\n | AiService.AiService\n | AgentService.AgentService\n | Registry.Service\n | OpaqueToolkit.OpaqueToolkitProvider;\n\nexport type AiChatProcessorOptions = {\n model?: ModelName;\n modelRegistry?: ModelRegistry;\n registry?: Registry.Registry;\n observableRegistry?: AtomRegistry.Registry;\n /**\n * For tracing.\n */\n chat?: Ref.Ref<Chat.Chat>;\n system?: string;\n};\n\nconst defaultOptions: Partial<AiChatProcessorOptions> = {\n model: DEFAULT_EDGE_MODEL,\n};\n\nexport type ProcessorRequestOptions = {};\n\nexport type ProcessorRequest = {\n message: string;\n options?: ProcessorRequestOptions;\n};\n\n/**\n * Maps a failure from the agent fiber to an error suitable for display.\n * {@link AiError}s originate from the AI service and are actionable by the user\n * (e.g., \"model 'x' not found\", \"Connection refused\"), so their detail is propagated.\n * Any other failure is treated as an internal/unexpected error and reported generically\n * to avoid leaking implementation detail.\n */\nconst parseError = (err: unknown): Error => {\n let message: string | undefined;\n if (AiError.isAiError(err)) {\n message = err.description?.trim() || err.message;\n } else if (typeof err === 'string') {\n // TODO(burdon): This is brittle.\n // UnknownError: ChatCompletionsClient.streamText: model 'gemma3:27b' not found\n const [, model] = err.match(/model\\s+'([^']+)'\\s+not\\s+found/i) || [];\n if (model) {\n message = `The model is not available: ${model}`;\n }\n }\n\n if (!message) {\n message = 'An unexpected error occurred.';\n }\n\n return new Error(message, { cause: err });\n};\n\n/**\n * Handles interactions with the AI service.\n * Uses AgentService to spawn a process-backed agent and subscribes to ephemeral trace events for streaming.\n */\nexport class AiChatProcessor {\n readonly #registry: AtomRegistry.Registry;\n\n /** Pending messages (finalized, non-streaming). */\n readonly #pending = Atom.make<Message.Message[]>([]);\n\n /** Currently streaming messages (from ephemeral trace events). */\n readonly #streaming = Atom.make<Message.Message[]>([]);\n\n /** Set of message IDs that have been finalized (non-pending delivered via ephemeral). */\n readonly #finalizedIds = new Set<string>();\n\n /** Currently active request fiber. */\n #requestFiber: Fiber.RuntimeFiber<void, unknown> | undefined;\n\n /** Last request (for retries). */\n #lastRequest: ProcessorRequest | undefined;\n\n /** Streaming state. */\n public readonly streaming = Atom.make<boolean>((get) => get(this.#streaming).length > 0);\n\n /** Active state. */\n public readonly active = Atom.make(false);\n\n /** Array of Messages (incl. the current message being streamed). */\n public readonly messages = Atom.make<Message.Message[]>((get) => [...get(this.#pending), ...get(this.#streaming)]);\n\n /** Last error. */\n public readonly error = Atom.make<Option.Option<Error>>(Option.none());\n\n /**\n * MCP server connection errors observed during the most recent request.\n * Misconfigured/unreachable servers are dropped from the toolkit so the chat\n * keeps working; the entries here let the UI display which servers failed.\n */\n public readonly mcpErrors = Atom.make<readonly Trace.PayloadType<typeof McpServerError>[]>([]);\n\n constructor(\n private readonly _conversation: AiSession.Session,\n private readonly _runtime: Capabilities.ProcessManagerRuntime,\n private readonly _feed: Feed.Feed,\n /**\n * Pre-built layer that materialises {@link SpaceServices}. Built via\n * {@link ServiceResolver.provide} with the {@link ServiceResolver} already\n * supplied (hence `RIn = never`); the {@link ServiceNotAvailableError}\n * error channel surfaces when a tag is not available for the space.\n * Provided to every effect run by the processor so the underlying\n * {@link ProcessManagerRuntime} has access to space-affinity services.\n */\n private readonly _spaceLayer: Layer.Layer<SpaceServices, ServiceNotAvailableError, never>,\n private readonly _options: AiChatProcessorOptions = defaultOptions,\n ) {\n this.#registry = this._options.observableRegistry ?? AtomRegistry.make();\n if (this._options.model && !this._options.system) {\n const capabilities = this._options.modelRegistry?.getCapabilities(this._options.model) ?? {};\n this._options.system = createSystemPrompt(capabilities);\n }\n }\n\n get context() {\n return this._conversation.context;\n }\n\n get conversation() {\n return this._conversation;\n }\n\n get registry() {\n return this._options.registry;\n }\n\n get system(): string {\n return this._options.system ?? '';\n }\n\n async getTools(): Promise<Record<string, any>> {\n return this._runtime.runPromise(\n Effect.provide(this._conversation.getTools(), ToolExecutionServices).pipe(Effect.provide(this._spaceLayer)),\n );\n }\n\n async getSystemPrompt(): Promise<string> {\n return this._runtime.runPromise(\n Effect.gen(this, function* () {\n const blueprints = this.context.getBlueprints();\n const objects = this.context.getObjects();\n return yield* formatSystemPrompt({ system: this._options.system, blueprints, objects });\n }).pipe(\n Effect.provideService(AiContext.Service, { binder: this.context }),\n Effect.provide(this._spaceLayer),\n Effect.orDie,\n ),\n );\n }\n\n /**\n * Initiates a new request via AgentService.\n */\n async request(requestProp: ProcessorRequest): Promise<void> {\n if (this.#requestFiber) {\n await this.cancel();\n }\n\n try {\n this.#lastRequest = requestProp;\n this.#registry.set(this.error, Option.none());\n this.#registry.set(this.mcpErrors, []);\n this.#registry.set(this.active, true);\n\n const effect = Effect.gen(this, function* () {\n // NOTE: Gets or creates a session for the feed.\n log.info('init agent session', { feed: Obj.getURI(this._feed), model: this._options.model });\n const session = yield* AgentService.getSession(this._feed, { model: this._options.model });\n const ephemeralStream = session.subscribeEphemeral();\n yield* ephemeralStream.pipe(\n Stream.runForEach((message) =>\n Effect.sync(() => {\n for (const event of message.events) {\n if (Trace.isOfType(PartialBlock, event)) {\n this.#handleEphemeralMessage(event.data);\n } else if (Trace.isOfType(McpServerError, event)) {\n this.#handleMcpError(event.data);\n }\n }\n }),\n ),\n Effect.fork,\n );\n\n log('chat processor submitting prompt', { length: requestProp.message.length });\n yield* session.submitPrompt(requestProp.message);\n log('chat processor submitPrompt returned, waiting for agent', {});\n\n // On the first message (no name yet), schedule rename immediately so it\n // runs concurrently with the AI response rather than waiting for completion.\n if (!this._options.chat?.target?.name) {\n yield* this.#updateChatName(requestProp.message);\n }\n\n yield* session.waitForCompletion();\n log.info('session complete');\n\n this.#flushStreaming();\n });\n\n this.#requestFiber = this._runtime.runFork(effect.pipe(Effect.provide(this._spaceLayer)));\n\n // Inspect the fiber's exit so the underlying failure (e.g. \"model 'x' not found\") is\n // preserved as a clean Error rather than an opaque FiberFailure.\n const exit = await this._runtime.runPromise(Fiber.await(this.#requestFiber));\n if (Exit.isFailure(exit)) {\n if (Cause.isInterruptedOnly(exit.cause)) {\n return;\n }\n\n throw EffectEx.causeToError(exit.cause);\n }\n\n this.#registry.set(this.error, Option.none());\n this.#lastRequest = undefined;\n this.#requestFiber = undefined;\n } catch (err) {\n // `EffectEx.causeToError` above unwraps the fiber failure into the underlying error (e.g. an AiError\n // carrying \"model 'x' not found\"); `parseError` decides what to surface to the user.\n log.error('request failed', { error: err });\n this.#registry.set(this.error, Option.some(parseError(err)));\n } finally {\n log.info('setting active to false');\n this.#registry.set(this.active, false);\n this.#requestFiber = undefined;\n }\n }\n\n /**\n * Cancels the current request.\n */\n async cancel(): Promise<void> {\n await EffectEx.runAndForwardErrors(\n Effect.gen(this, function* () {\n log.info('cancelling request', { fiber: this.#requestFiber });\n if (this.#requestFiber) {\n yield* Fiber.interrupt(this.#requestFiber);\n }\n const session = yield* AgentService.getSession(this._feed);\n yield* session.terminate();\n }).pipe(Effect.provide(this._spaceLayer)),\n );\n\n this.#requestFiber = undefined;\n this.#registry.set(this.active, false);\n }\n\n /**\n * Retry last failed request.\n */\n async retry(): Promise<void> {\n if (this.#lastRequest) {\n return this.request(this.#lastRequest);\n }\n }\n\n /**\n * Clears the recorded MCP server errors (e.g. after the user dismisses the warning banner).\n */\n dismissMcpErrors(): void {\n this.#registry.set(this.mcpErrors, []);\n }\n\n /**\n * Update the current chat's name.\n */\n async updateName(chat: Chat.Chat): Promise<void> {\n const spaceId = Obj.getDatabase(chat)?.spaceId;\n if (!spaceId) {\n return;\n }\n EffectEx.unwrapExit(\n await this._runtime.runPromiseExit(\n Operation.invoke(AssistantOperation.UpdateChatName, { chat }, { spaceId }).pipe(\n Effect.provide(this._spaceLayer),\n ),\n ),\n );\n }\n\n /**\n * Handles an ephemeral message from the agent process.\n * Both pending and completed blocks arrive here. Completed blocks are deduped\n * against messages already written to the feed queue to handle the race between\n * ephemeral delivery and feed replication.\n */\n #handleEphemeralMessage(event: Trace.PayloadType<typeof PartialBlock>) {\n const isPending = event.block.pending;\n const message = Obj.make(Message.Message, {\n id: event.messageId,\n created: new Date().toISOString(),\n sender: { role: event.role },\n blocks: [event.block],\n });\n\n if (isPending) {\n if (this.#finalizedIds.has(event.messageId)) {\n return;\n }\n this.#registry.update(this.#streaming, (streaming) => {\n const idx = streaming.findIndex((existing) => existing.id === event.messageId);\n if (idx >= 0) {\n const updated = [...streaming];\n updated[idx] = message;\n return updated;\n }\n return [...streaming, message];\n });\n } else {\n this.#finalizedIds.add(event.messageId);\n this.#registry.update(this.#streaming, (streaming) => streaming.filter((existing) => existing.id !== message.id));\n this.#registry.update(this.#pending, (pending) => {\n if (pending.some((existing) => existing.id === message.id)) {\n return pending;\n }\n return [...pending, message];\n });\n }\n }\n\n /**\n * Records a per-server MCP failure, deduped by url+protocol so repeat misconfigurations\n * across turns do not spam the UI.\n */\n #handleMcpError(event: Trace.PayloadType<typeof McpServerError>) {\n log.warn('MCP server error', event);\n this.#registry.update(this.mcpErrors, (errors) => {\n if (errors.some((existing) => existing.url === event.url && existing.protocol === event.protocol)) {\n return errors;\n }\n return [...errors, event];\n });\n }\n\n /**\n * Move remaining streaming messages to pending (called when agent completes).\n */\n #flushStreaming() {\n const remaining = this.#registry.get(this.#streaming);\n if (remaining.length > 0) {\n this.#registry.update(this.#pending, (pending) => [...pending, ...remaining]);\n this.#registry.set(this.#streaming, []);\n }\n this.#finalizedIds.clear();\n }\n\n /**\n * Schedule a chat name update as a detached (fire-and-forget) operation.\n * Called automatically on the first message; can also be invoked manually via the toolbar.\n */\n #updateChatName(prompt?: string): Effect.Effect<void, never, Operation.Service> {\n const chat = this._options.chat?.target;\n if (!chat) {\n return Effect.void;\n }\n\n const spaceId = Obj.getDatabase(chat)?.spaceId;\n if (!spaceId) {\n return Effect.void;\n }\n\n log.info('scheduling chat name update');\n return Operation.schedule(AssistantOperation.UpdateChatName, { chat, prompt }, { spaceId });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities } from '@dxos/app-framework';\nimport { useCapability } from '@dxos/app-framework/ui';\nimport { getPersonalSpace } from '@dxos/app-toolkit';\nimport { type Key } from '@dxos/echo';\nimport { useClient } from '@dxos/react-client';\n\nexport type UseChatServicesProps = {\n id?: Key.SpaceId;\n};\n\n/**\n * Resolves the shared {@link Capabilities.ProcessManagerRuntime} for the given space.\n *\n * The runtime itself is space-agnostic; the returned value can be used to run\n * effects that pipe through {@link ServiceResolver.provide} (or the\n * `useSpaceCallback`/`useSpaceService` hooks) with the resolved {@link Key.SpaceId}.\n */\nexport const useChatServices = ({ id }: UseChatServicesProps) => {\n const client = useClient();\n id ??= getPersonalSpace(client)?.id;\n\n const runtime = useCapability(Capabilities.ProcessManagerRuntime);\n return id ? runtime : undefined;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { Chat } from '@dxos/assistant-toolkit';\nimport { Filter, Obj, Query, Type } from '@dxos/echo';\nimport { EffectEx } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\nimport { MenuBuilder, useMenuBuilder } from '@dxos/react-ui-menu';\n\nimport { meta } from '#meta';\nimport { AssistantOperation } from '#types';\n\nimport { useChatContext } from '../components/Chat/context';\n\nexport type ChatToolbarActionsProps = {\n chat?: Chat.Chat;\n companionTo?: Obj.Unknown;\n};\n\nexport const useChatToolbarActions = ({ chat, companionTo }: ChatToolbarActionsProps) => {\n const { invoke } = useOperationInvoker();\n const { db } = useChatContext('useChatToolbarActions');\n\n // Stable references in deps avoid circular reference issues.\n return useMenuBuilder(\n (get) => {\n const chats =\n companionTo && db\n ? get(db.query(Query.select(Filter.id(companionTo.id)).targetOf(Chat.CompanionTo).source()).atom)\n : [];\n\n const builder = MenuBuilder.make()\n .root({\n label: ['chat-toolbar.title', { ns: meta.id }],\n })\n .action(\n 'new',\n {\n label: ['new-thread.button', { ns: meta.id }],\n icon: 'ph--plus--regular',\n type: 'new',\n disabled: !companionTo,\n },\n () => {\n invariant(companionTo);\n return invoke(AssistantOperation.SetCurrentChat, {\n companionTo,\n chat: undefined,\n }).pipe(EffectEx.runAndForwardErrors);\n },\n )\n .action(\n 'rename',\n {\n label: ['rename-thread.button', { ns: meta.id }],\n icon: 'ph--magic-wand--regular',\n type: 'rename',\n disabled: !chat,\n },\n () =>\n Effect.gen(function* () {\n invariant(chat);\n yield* invoke(AssistantOperation.UpdateChatName, { chat }, { spaceId: db?.spaceId });\n }).pipe(EffectEx.runAndForwardErrors),\n )\n .action(\n 'branch',\n {\n label: ['branch-thread.menu', { ns: meta.id }],\n icon: 'ph--git-branch--regular',\n type: 'branch',\n disabled: !chat || !db,\n },\n () =>\n Effect.gen(function* () {\n invariant(chat);\n yield* invoke(AssistantOperation.ForkChat, { chat, companionTo }, { spaceId: db?.spaceId });\n }).pipe(EffectEx.runAndForwardErrors),\n );\n\n if (chats.length > 0) {\n builder.group(\n 'chats',\n {\n label: ['chat-history.label', { ns: meta.id }],\n icon: 'ph--clock-counter-clockwise--regular',\n selectCardinality: 'single',\n variant: 'dropdownMenu',\n },\n (builder) => {\n chats\n // TODO(wittjosiah): This should be the default sort order.\n .toSorted((a, b) => a.id.localeCompare(b.id))\n .forEach((chat) => {\n get(Obj.atomProperty(chat, 'name'));\n\n builder.action(\n chat.id,\n {\n label: Obj.getLabel(chat) ?? ['object-name.placeholder', { ns: Type.getTypename(Chat.Chat) }],\n },\n () =>\n Effect.gen(function* () {\n invariant(companionTo);\n yield* invoke(AssistantOperation.SetCurrentChat, {\n companionTo,\n chat,\n });\n }).pipe(EffectEx.runAndForwardErrors),\n );\n });\n },\n );\n }\n\n return builder.build();\n },\n [db?.spaceId, companionTo?.id, chat?.id, invoke],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Registry, RegistryContext } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport { useContext, useState } from 'react';\n\nimport { AiContext } from '@dxos/assistant';\nimport { Feed } from '@dxos/echo';\nimport { createFeedServiceLayer } from '@dxos/echo-client';\nimport { EffectEx } from '@dxos/effect';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useAsyncEffect } from '@dxos/react-ui';\n\nexport const useContextBinder = (\n space: Space | undefined,\n feed: Feed.Feed | undefined,\n): AiContext.Binder | undefined => {\n const registry = useContext(RegistryContext) as Registry.Registry;\n const [binder, setBinder] = useState<AiContext.Binder>();\n\n useAsyncEffect(async () => {\n setBinder(undefined);\n if (!space || !feed) {\n return;\n }\n\n const feedServiceLayer = createFeedServiceLayer(space.queues);\n const runtime = await EffectEx.runAndForwardErrors(\n Effect.runtime<Feed.FeedService>().pipe(Effect.provide(feedServiceLayer)),\n );\n const binder = new AiContext.Binder({ feed, runtime, registry });\n await binder.open();\n setBinder(binder);\n\n return () => {\n void binder.close();\n };\n }, [space, feed]);\n\n return binder;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom, useAtomValue } from '@effect-atom/atom-react';\nimport { useCallback } from 'react';\n\nimport { type AiContext } from '@dxos/assistant';\nimport { type Database, type Obj } from '@dxos/echo';\nimport { type URI } from '@dxos/keys';\n\nexport type UseContextObjectsProps = {\n db?: Database.Database;\n context?: AiContext.Binder;\n};\n\nexport type UseContextObjects = {\n objects: Obj.Unknown[];\n onUpdateObject: (dxn: URI.URI, checked: boolean) => Promise<void>;\n};\n\nconst emptyObjectsAtom = Atom.make<Obj.Unknown[]>([]);\n\n/**\n * Create reactive map of active object references (by DXN string).\n */\nexport const useContextObjects = ({ db, context }: UseContextObjectsProps): UseContextObjects => {\n const objects = useAtomValue(context?.objects ?? emptyObjectsAtom);\n\n const handleUpdateObject = useCallback<UseContextObjects['onUpdateObject']>(\n async (dxn: URI.URI, checked: boolean) => {\n if (!db || !context) {\n return;\n }\n\n const ref = db.makeRef<Obj.Unknown>(dxn);\n await ref.load();\n if (checked) {\n await context.bind({ objects: [ref] });\n } else {\n await context.unbind({ objects: [ref] });\n }\n },\n [db, context],\n );\n\n return {\n objects,\n onUpdateObject: handleUpdateObject,\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { trim } from '@dxos/util';\n\nimport { type AiChatProcessor } from '../processor';\n\n/**\n * Returns an async callback that logs the chat's current context, system prompt,\n * and resolved tools to the browser console under a collapsible group.\n * Used by the chat's debug-toggle event handler.\n */\nexport const useDebug = ({ processor }: { processor: AiChatProcessor }) => {\n return useCallback(async () => {\n const objects = processor.context.getObjects();\n const blueprints = processor.context.getBlueprints();\n const system = await processor.getSystemPrompt();\n const tools = (await processor.getTools()) ?? {};\n console.group('Chat', { objects, blueprints });\n try {\n console.log(trim`\n System Prompt:\n ${system}\n `);\n console.log(trim`\n Tools:\n ${Object.values(tools)\n .map((tool) => JSON.stringify(tool, null, 2))\n .join('\\n')}\n `);\n } finally {\n console.groupEnd();\n }\n }, [processor]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport { useEffect, useState } from 'react';\n\nimport { type Database, Type } from '@dxos/echo';\nimport { HiddenAnnotation, getTypeAnnotation } from '@dxos/echo/Annotation';\nimport { Kind as EntityKind } from '@dxos/echo/Entity';\n\nconst getFilteredTypes = (db: Database.Database): Type.AnyEntity[] =>\n Array.from(\n new Set(\n db.graph.registry\n .list()\n .filter(Type.isType)\n .filter((schema) => getTypeAnnotation(Type.getSchema(schema))?.kind !== EntityKind.Relation)\n .filter((schema) => !HiddenAnnotation.get(Type.getSchema(schema)).pipe(Option.getOrElse(() => false))),\n ),\n );\n\n// TODO(burdon): Pass in filter.\n// TODO(wittjosiah): Factor out.\nexport const useFilteredTypes = (db?: Database.Database): Type.AnyEntity[] => {\n const [types, setTypes] = useState<Type.AnyEntity[]>([]);\n useEffect(() => {\n if (!db) {\n return;\n }\n\n setTypes(getFilteredTypes(db));\n return db.graph.registry.changed.on(() => {\n setTypes(getFilteredTypes(db));\n });\n }, [db]);\n\n return types;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useRef, useState } from 'react';\n\nimport { type Space } from '@dxos/client/echo';\n\nexport const useFlush = (space?: Space) => {\n const [state, setState] = useState<'idle' | 'flushing' | 'flushed'>('idle');\n const resetTimer = useRef<NodeJS.Timeout | null>(null);\n\n const handleFlush = useCallback(() => {\n if (!space) {\n return;\n }\n\n queueMicrotask(async () => {\n if (resetTimer.current) {\n clearTimeout(resetTimer.current);\n }\n\n setState('flushing');\n await space.db.flush();\n setState('flushed');\n\n resetTimer.current = setTimeout(() => {\n setState('idle');\n resetTimer.current = null;\n }, 1_000);\n });\n }, [space]);\n\n return { state, handleFlush };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Dispatch, type SetStateAction, useState } from 'react';\n\nexport const useOnline = (): [boolean, Dispatch<SetStateAction<boolean>>] => {\n const [online, setOnline] = useState(true);\n return [online, setOnline];\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { type ChatPresetProps } from '#types';\n\nimport { type AiServicePreset, AiServicePresets } from '../processor';\n\nexport type UsePresets = {\n preset: AiServicePreset | undefined;\n} & Pick<ChatPresetProps, 'presets' | 'onPresetChange'>;\n\nexport const usePresets = (online: boolean): UsePresets => {\n // TODO(burdon): Memo preset for provider.\n const [preset, setPreset] = useState<AiServicePreset>();\n const presets = useMemo(\n () => AiServicePresets.filter((preset) => online === (preset.provider === 'dxos-remote')),\n [online],\n );\n\n const presetOptions = useMemo(\n () => presets.map(({ id, model, label }) => ({ id, label: label ?? model })),\n [presets],\n );\n\n useEffect(() => {\n setPreset(presets[0]);\n }, [presets]);\n\n const handlePresetChange = useCallback<NonNullable<ChatPresetProps['onPresetChange']>>(\n (id) => {\n const preset = presets.find((preset) => preset.id === id);\n if (preset) {\n setPreset(preset);\n }\n },\n [presets],\n );\n\n return {\n preset: preset,\n presets: presetOptions,\n onPresetChange: handlePresetChange,\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { type Space } from '@dxos/client/echo';\nimport { Filter, Obj } from '@dxos/echo';\nimport { type ReferencesProvider } from '@dxos/react-ui-chat';\n\n/**\n * Resolve references to objects in the space.\n */\nexport const useReferencesProvider = (space?: Space): ReferencesProvider | undefined => {\n return useMemo<ReferencesProvider | undefined>((): ReferencesProvider | undefined => {\n if (!space) {\n return undefined;\n }\n\n return {\n getReferences: async ({ query }) => {\n // TODO(burdon): Previously we filtered by types declared by the artifact definitions.\n // const schemas = blueprints.map((blueprint) => blueprint.schema).flat();\n // const objects = await space.db\n // .query(Filter.or(...schemas.map((schema) => Filter.type(schema as Type.Schema))))\n // .run();\n\n const objects = await space.db.query(Filter.everything()).run();\n\n return objects\n .filter(Obj.isObject)\n .filter((object) => stringMatch(query, Obj.getLabel(object) ?? ''))\n .map((object) => ({\n uri: Obj.getURI(object),\n label: Obj.getLabel(object) ?? '',\n }));\n },\n resolveReference: async ({ uri }) => {\n const object = await space.db.query(Filter.id(uri)).first();\n return { uri, label: Obj.getLabel(object) ?? '' };\n },\n } satisfies ReferencesProvider;\n }, [space]);\n};\n\nconst stringMatch = (query: string, label: string) => label.toLowerCase().startsWith(query.toLowerCase());\n"],
5
- "mappings": "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",
6
- "names": ["useCallback", "useEffect", "useMemo", "useState", "Blueprint", "Filter", "Obj", "Ref", "useQuery", "distinctBy", "useBlueprints", "registry", "db", "registryBlueprints", "setRegistryBlueprints", "query", "type", "runSync", "changed", "on", "spaceBlueprints", "blueprints", "b", "getMeta", "key", "sort", "name", "a", "localeCompare", "useActiveBlueprints", "context", "active", "setActive", "Map", "updateActive", "getBlueprints", "map", "blueprint", "filter", "entry", "undefined", "subscribeBlueprints", "useBlueprintHandlers", "onUpdateBlueprint", "checked", "registryBlueprint", "find", "bind", "fromURI", "registryURI", "objects", "run", "storedBlueprint", "make", "unbind", "Prec", "keymap", "useMemo", "isTruthy", "useChatKeymapExtensions", "event", "highest", "of", "key", "preventDefault", "run", "emit", "type", "shift", "filter", "RegistryContext", "Effect", "Layer", "useContext", "useMemo", "useState", "AiService", "OpaqueToolkit", "Capabilities", "useCapability", "AiSession", "Credential", "ServiceResolver", "Database", "Feed", "Ref", "Registry", "createFeedServiceLayer", "EffectEx", "AgentService", "log", "useAsyncEffect", "Schema", "ModelProviders", "ModelProvider", "Literal", "createModelLabel", "model", "parts", "split", "length", "AiServicePresets", "provider", "label", "map", "i", "id", "Atom", "Registry", "AtomRegistry", "AiError", "Cause", "Effect", "Exit", "Fiber", "Option", "Stream", "DEFAULT_EDGE_MODEL", "AiContext", "createSystemPrompt", "formatSystemPrompt", "McpServerError", "PartialBlock", "ToolExecutionServices", "Operation", "Trace", "Obj", "EffectEx", "AgentService", "log", "Message", "AssistantOperation", "defaultOptions", "isAiError", "err", "message", "Error", "make", "messages", "error", "_runtime", "_feed", "_spaceLayer", "_options", "capabilities", "getCapabilities", "system", "context", "conversation", "registry", "getTools", "getSystemPrompt", "blueprints", "objects", "getObjects", "binder", "provide", "orDie", "set", "active", "gen", "model", "session", "ephemeralStream", "event", "isOfType", "data", "length", "requestProp", "submitPrompt", "waitForCompletion", "isInterruptedOnly", "exit", "undefined", "info", "interrupt", "getSession", "pipe", "spaceId", "id", "messageId", "created", "Date", "toISOString", "sender", "role", "blocks", "isPending", "updated", "streaming", "update", "pending", "existing", "errors", "protocol", "remaining", "clear", "void", "chat", "prompt", "__dxlog_file", "session", "useState", "useAsyncEffect", "space", "AiSession", "feed", "feedTarget", "runtime", "registry", "open", "setSession", "close", "chat", "processor", "useMemo", "undefined", "spaceLayer", "Database", "FeedService", "Credential", "preset", "model", "settings", "observableRegistry", "Capabilities", "useCapability", "getPersonalSpace", "useClient", "useChatServices", "id", "client", "runtime", "ProcessManagerRuntime", "undefined", "Effect", "useOperationInvoker", "Chat", "Filter", "Obj", "Query", "Type", "EffectEx", "invariant", "MenuBuilder", "useMenuBuilder", "meta", "AssistantOperation", "__dxlog_file", "useChatToolbarActions", "db", "useMenuBuilder", "get", "MenuBuilder", "label", "Filter", "action", "icon", "type", "disabled", "invariant", "companionTo", "chat", "undefined", "pipe", "EffectEx", "Effect", "invoke", "AssistantOperation", "spaceId", "runAndForwardErrors", "chats", "builder", "group", "selectCardinality", "variant", "getLabel", "Obj", "RegistryContext", "Effect", "useContext", "useState", "AiContext", "createFeedServiceLayer", "EffectEx", "useAsyncEffect", "useContextBinder", "space", "feed", "registry", "binder", "setBinder", "undefined", "feedServiceLayer", "queues", "runtime", "runAndForwardErrors", "pipe", "provide", "Binder", "open", "close", "Atom", "useAtomValue", "useCallback", "emptyObjectsAtom", "make", "useContextObjects", "db", "context", "objects", "handleUpdateObject", "dxn", "checked", "ref", "makeRef", "load", "bind", "unbind", "onUpdateObject", "useCallback", "trim", "useDebug", "processor", "objects", "context", "getObjects", "blueprints", "getBlueprints", "system", "getSystemPrompt", "tools", "getTools", "console", "group", "log", "Object", "values", "map", "tool", "JSON", "stringify", "join", "groupEnd", "Option", "useEffect", "useState", "Type", "HiddenAnnotation", "getTypeAnnotation", "Kind", "EntityKind", "getFilteredTypes", "db", "Array", "from", "Set", "graph", "registry", "list", "filter", "isType", "schema", "getSchema", "kind", "Relation", "get", "pipe", "getOrElse", "useFilteredTypes", "types", "setTypes", "changed", "on", "useCallback", "useRef", "useState", "useFlush", "space", "state", "setState", "resetTimer", "handleFlush", "queueMicrotask", "current", "clearTimeout", "db", "flush", "setTimeout", "useState", "useOnline", "online", "setOnline", "useCallback", "useEffect", "useMemo", "useState", "usePresets", "online", "preset", "setPreset", "useState", "presets", "useMemo", "AiServicePresets", "filter", "provider", "presetOptions", "map", "id", "model", "label", "useEffect", "handlePresetChange", "useCallback", "find", "onPresetChange", "useMemo", "Filter", "Obj", "useReferencesProvider", "space", "undefined", "getReferences", "query", "objects", "db", "everything", "run", "filter", "isObject", "object", "stringMatch", "getLabel", "map", "uri", "getURI", "label", "resolveReference", "id", "first", "toLowerCase", "startsWith"]
3
+ "sources": ["../../../../src/hooks/useBlueprintRegistry.ts", "../../../../src/hooks/useChatKeymap.ts", "../../../../src/hooks/useChatProcessor.ts", "../../../../src/hooks/useChatServices.ts", "../../../../src/hooks/useChatToolbarActions.ts", "../../../../src/hooks/useContextBinder.ts", "../../../../src/hooks/useContextObjects.ts", "../../../../src/hooks/useDebug.ts", "../../../../src/hooks/useFilteredTypes.ts", "../../../../src/hooks/useFlush.ts", "../../../../src/hooks/useOnline.ts", "../../../../src/hooks/usePresets.ts", "../../../../src/hooks/useReferencesProvider.ts", "../../../../src/hooks/useTraceMessages.ts", "../../../../src/hooks/useProcessEphemeralStatus.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { type AiContext } from '@dxos/assistant';\nimport { Blueprint } from '@dxos/compute';\nimport { type Database, Filter, Obj, Ref, type Registry } from '@dxos/echo';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { distinctBy } from '@dxos/util';\n\nexport const useBlueprints = ({ registry, db }: { registry?: Registry.Registry; db?: Database.Database }) => {\n const [registryBlueprints, setRegistryBlueprints] = useState<Blueprint.Blueprint[]>(\n () => registry?.query(Filter.type(Blueprint.Blueprint)).runSync() ?? [],\n );\n\n useEffect(() => {\n if (!registry) {\n setRegistryBlueprints([]);\n return;\n }\n setRegistryBlueprints(registry.query(Filter.type(Blueprint.Blueprint)).runSync());\n return registry.changed.on(() => {\n setRegistryBlueprints(registry.query(Filter.type(Blueprint.Blueprint)).runSync());\n });\n }, [registry]);\n\n const spaceBlueprints = useQuery(db, Filter.type(Blueprint.Blueprint));\n return useMemo(() => {\n const blueprints = distinctBy([...registryBlueprints, ...spaceBlueprints], (b) => Obj.getMeta(b).key);\n blueprints.sort(({ name: a }, { name: b }) => a.localeCompare(b));\n return blueprints;\n }, [registryBlueprints, spaceBlueprints]);\n};\n\n/**\n * Create reactive map of active blueprints (by key).\n */\nexport const useActiveBlueprints = ({ context }: { context?: AiContext.Binder }) => {\n const [active, setActive] = useState<Map<string, Blueprint.Blueprint>>(new Map());\n\n useEffect(() => {\n if (!context) {\n setActive(new Map());\n return;\n }\n\n const updateActive = () => {\n const blueprints = context.getBlueprints();\n setActive(\n new Map(\n blueprints\n .map((blueprint) => [Obj.getMeta(blueprint).key, blueprint] as const)\n .filter((entry): entry is readonly [string, Blueprint.Blueprint] => entry[0] !== undefined),\n ),\n );\n };\n\n // Set initial value.\n updateActive();\n\n // Subscribe to changes.\n return context.subscribeBlueprints(updateActive);\n }, [context]);\n\n return active;\n};\n\n// TODO(burdon): Move logic into binder.\nexport const useBlueprintHandlers = ({\n db,\n context,\n registry,\n}: {\n db: Database.Database;\n context?: AiContext.Binder;\n registry?: Registry.Registry;\n}) => {\n const onUpdateBlueprint = useCallback(\n async (key: string, checked: boolean) => {\n if (!context) {\n return;\n }\n\n if (checked) {\n // Check if the blueprint is in the registry — if so, bind via its key URI directly\n // (no DB clone needed). Fall back to an existing DB copy for user-forked blueprints.\n const registryBlueprint = registry\n ?.query(Filter.type(Blueprint.Blueprint))\n .runSync()\n .find((b) => Obj.getMeta(b).key === key);\n\n if (registryBlueprint) {\n await context.bind({ blueprints: [Ref.fromURI(Blueprint.registryURI(key))] });\n } else {\n // User-forked blueprint (in DB but not in registry): bind via DB ref.\n const objects = await db.query(Filter.type(Blueprint.Blueprint)).run();\n const storedBlueprint = objects.find((blueprint) => Obj.getMeta(blueprint).key === key);\n if (storedBlueprint) {\n await context.bind({ blueprints: [Ref.make(storedBlueprint)] });\n }\n }\n } else {\n // Unbind: try registry ref first, then DB ref.\n const registryBlueprint = registry\n ?.query(Filter.type(Blueprint.Blueprint))\n .runSync()\n .find((b) => Obj.getMeta(b).key === key);\n if (registryBlueprint) {\n await context.unbind({ blueprints: [Ref.fromURI(Blueprint.registryURI(key))] });\n } else {\n const objects = await db.query(Filter.type(Blueprint.Blueprint)).run();\n const storedBlueprint = objects.find((blueprint) => Obj.getMeta(blueprint).key === key);\n if (storedBlueprint) {\n await context.unbind({ blueprints: [Ref.make(storedBlueprint)] });\n }\n }\n }\n },\n [db, context, registry],\n );\n\n return { onUpdateBlueprint };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Extension, Prec } from '@codemirror/state';\nimport { keymap } from '@codemirror/view';\nimport { useMemo } from 'react';\n\nimport { type Event } from '@dxos/async';\nimport { isTruthy } from '@dxos/util';\n\nimport { type ChatEvent } from '../components/Chat/events';\n\n/**\n * CodeMirror keymap shared by the chat document (Thread) and the prompt editor — pressing\n * Mod-Arrow keys when either editor is focused emits the corresponding `ChatEvent` on the\n * shared event bus.\n */\nexport const useChatKeymapExtensions = ({ event }: { event: Event<ChatEvent> }): Extension[] => {\n return useMemo<Extension[]>(() => {\n return [\n Prec.highest(\n keymap.of([\n {\n key: 'Mod-ArrowUp',\n preventDefault: true,\n run: () => {\n event.emit({ type: 'nav-previous' });\n return true;\n },\n shift: () => {\n event.emit({ type: 'thread-open' });\n return true;\n },\n },\n {\n key: 'Mod-ArrowDown',\n preventDefault: true,\n run: () => {\n event.emit({ type: 'nav-next' });\n return true;\n },\n shift: () => {\n event.emit({ type: 'thread-close' });\n return true;\n },\n },\n ]),\n ),\n ].filter(isTruthy);\n }, [event]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { RegistryContext } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport { useContext, useMemo, useState } from 'react';\n\nimport { AiService, OpaqueToolkit } from '@dxos/ai';\nimport { Capabilities } from '@dxos/app-framework';\nimport { useCapability } from '@dxos/app-framework/ui';\nimport { AiSession } from '@dxos/assistant';\nimport { type Chat } from '@dxos/assistant-toolkit';\nimport { Credential, ServiceResolver } from '@dxos/compute';\nimport { Database, Feed, Ref, Registry } from '@dxos/echo';\nimport { createFeedServiceLayer } from '@dxos/echo-client';\nimport { EffectEx } from '@dxos/effect';\nimport { AgentService } from '@dxos/functions-runtime';\nimport { log } from '@dxos/log';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useAsyncEffect } from '@dxos/react-ui';\n\nimport { type Assistant } from '#types';\n\nimport { AiChatProcessor, type AiServicePreset } from '../processor';\n\nexport type UseChatProcessorProps = {\n space?: Space;\n chat?: Chat.Chat;\n preset?: AiServicePreset;\n runtime?: Capabilities.ProcessManagerRuntime;\n registry?: Registry.Registry;\n settings?: Assistant.Settings;\n};\n\n/**\n * Configure and create AiChatProcessor.\n */\nexport const useChatProcessor = ({\n space,\n chat,\n preset,\n runtime,\n registry,\n settings,\n}: UseChatProcessorProps): AiChatProcessor | undefined => {\n const observableRegistry = useContext(RegistryContext);\n\n const [session, setSession] = useState<AiSession.Session>();\n useAsyncEffect(async () => {\n if (!space || !chat) {\n return;\n }\n\n const feedTarget = chat.feed.target;\n if (!feedTarget) {\n return;\n }\n const feedServiceLayer = createFeedServiceLayer(space.db);\n const runtime = await EffectEx.runAndForwardErrors(\n Effect.runtime<Feed.FeedService>().pipe(Effect.provide(feedServiceLayer)),\n );\n const session = new AiSession.Session({\n feed: feedTarget,\n runtime,\n registry: observableRegistry,\n });\n await session.open();\n setSession(session);\n return () => {\n void session.close();\n setSession(undefined);\n };\n }, [space, chat?.feed.target]);\n\n const feed = chat?.feed.target;\n const serviceResolver = useCapability(Capabilities.ServiceResolver);\n\n const processor = useMemo(() => {\n if (!runtime || !session || !chat || !feed || !space) {\n return undefined;\n }\n\n const spaceLayer = ServiceResolver.provide(\n { space: space.id },\n Database.Service,\n Feed.FeedService,\n Credential.CredentialsService,\n AiService.AiService,\n AgentService.AgentService,\n Registry.Service,\n OpaqueToolkit.OpaqueToolkitProvider,\n ).pipe(Layer.provide(Layer.succeed(ServiceResolver.ServiceResolver, serviceResolver)));\n\n log('creating processor', { preset, model: preset?.model, settings });\n return new AiChatProcessor(session, runtime, feed, spaceLayer, {\n chat: chat ? Ref.make(chat) : undefined,\n observableRegistry,\n registry,\n model: preset?.model,\n });\n }, [runtime, session, registry, preset, chat, feed, space?.id]);\n\n return processor;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities } from '@dxos/app-framework';\nimport { useCapability } from '@dxos/app-framework/ui';\nimport { AppSpace } from '@dxos/app-toolkit';\nimport { type Key } from '@dxos/echo';\nimport { useClient } from '@dxos/react-client';\n\nexport type UseChatServicesProps = {\n id?: Key.SpaceId;\n};\n\n/**\n * Resolves the shared {@link Capabilities.ProcessManagerRuntime} for the given space.\n *\n * The runtime itself is space-agnostic; the returned value can be used to run\n * effects that pipe through {@link ServiceResolver.provide} (or the\n * `useSpaceCallback`/`useSpaceService` hooks) with the resolved {@link Key.SpaceId}.\n */\nexport const useChatServices = ({ id }: UseChatServicesProps) => {\n const client = useClient();\n id ??= AppSpace.getPersonalSpace(client)?.id;\n\n const runtime = useCapability(Capabilities.ProcessManagerRuntime);\n return id ? runtime : undefined;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { Chat } from '@dxos/assistant-toolkit';\nimport { Filter, Obj, Query, Type } from '@dxos/echo';\nimport { EffectEx } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\nimport { MenuBuilder, useMenuBuilder } from '@dxos/react-ui-menu';\n\nimport { meta } from '#meta';\nimport { AssistantOperation } from '#types';\n\nimport { useChatContext } from '../components/Chat/context';\n\nexport type ChatToolbarActionsProps = {\n chat?: Chat.Chat;\n companionTo?: Obj.Unknown;\n};\n\nexport const useChatToolbarActions = ({ chat, companionTo }: ChatToolbarActionsProps) => {\n const { invoke } = useOperationInvoker();\n const { db } = useChatContext('useChatToolbarActions');\n\n // Stable references in deps avoid circular reference issues.\n return useMenuBuilder(\n (get) => {\n const chats =\n companionTo && db\n ? get(db.query(Query.select(Filter.id(companionTo.id)).targetOf(Chat.CompanionTo).source()).atom)\n : [];\n\n const builder = MenuBuilder.make()\n .root({\n label: ['chat-toolbar.title', { ns: meta.profile.key }],\n })\n .action(\n 'new',\n {\n label: ['new-thread.button', { ns: meta.profile.key }],\n icon: 'ph--plus--regular',\n type: 'new',\n disabled: !companionTo,\n },\n () => {\n invariant(companionTo);\n return invoke(AssistantOperation.SetCurrentChat, {\n companionTo,\n chat: undefined,\n }).pipe(EffectEx.runAndForwardErrors);\n },\n )\n .action(\n 'rename',\n {\n label: ['rename-thread.button', { ns: meta.profile.key }],\n icon: 'ph--magic-wand--regular',\n type: 'rename',\n disabled: !chat,\n },\n () =>\n Effect.gen(function* () {\n invariant(chat);\n yield* invoke(AssistantOperation.UpdateChatName, { chat }, { spaceId: db?.spaceId });\n }).pipe(EffectEx.runAndForwardErrors),\n )\n .action(\n 'branch',\n {\n label: ['branch-thread.menu', { ns: meta.profile.key }],\n icon: 'ph--git-branch--regular',\n type: 'branch',\n disabled: !chat || !db,\n },\n () =>\n Effect.gen(function* () {\n invariant(chat);\n yield* invoke(AssistantOperation.ForkChat, { chat, companionTo }, { spaceId: db?.spaceId });\n }).pipe(EffectEx.runAndForwardErrors),\n );\n\n if (chats.length > 0) {\n builder.group(\n 'chats',\n {\n label: ['chat-history.label', { ns: meta.profile.key }],\n icon: 'ph--clock-counter-clockwise--regular',\n selectCardinality: 'single',\n variant: 'dropdownMenu',\n },\n (builder) => {\n chats\n // TODO(wittjosiah): This should be the default sort order.\n .toSorted((a, b) => a.id.localeCompare(b.id))\n .forEach((chat) => {\n get(Obj.atomProperty(chat, 'name'));\n\n builder.action(\n chat.id,\n {\n label: Obj.getLabel(chat) ?? ['object-name.placeholder', { ns: Type.getTypename(Chat.Chat) }],\n },\n () =>\n Effect.gen(function* () {\n invariant(companionTo);\n yield* invoke(AssistantOperation.SetCurrentChat, {\n companionTo,\n chat,\n });\n }).pipe(EffectEx.runAndForwardErrors),\n );\n });\n },\n );\n }\n\n return builder.build();\n },\n [db?.spaceId, companionTo?.id, chat?.id, invoke],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Registry, RegistryContext } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport { useContext, useState } from 'react';\n\nimport { AiContext } from '@dxos/assistant';\nimport { Feed } from '@dxos/echo';\nimport { createFeedServiceLayer } from '@dxos/echo-client';\nimport { EffectEx } from '@dxos/effect';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useAsyncEffect } from '@dxos/react-ui';\n\nexport const useContextBinder = (\n space: Space | undefined,\n feed: Feed.Feed | undefined,\n): AiContext.Binder | undefined => {\n const registry = useContext(RegistryContext) as Registry.Registry;\n const [binder, setBinder] = useState<AiContext.Binder>();\n\n useAsyncEffect(async () => {\n setBinder(undefined);\n if (!space || !feed) {\n return;\n }\n\n const feedServiceLayer = createFeedServiceLayer(space.db);\n const runtime = await EffectEx.runAndForwardErrors(\n Effect.runtime<Feed.FeedService>().pipe(Effect.provide(feedServiceLayer)),\n );\n const binder = new AiContext.Binder({ feed, runtime, registry });\n await binder.open();\n setBinder(binder);\n\n return () => {\n void binder.close();\n };\n }, [space, feed]);\n\n return binder;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom, useAtomValue } from '@effect-atom/atom-react';\nimport { useCallback } from 'react';\n\nimport { type AiContext } from '@dxos/assistant';\nimport { type Database, type Obj } from '@dxos/echo';\nimport { type URI } from '@dxos/keys';\n\nexport type UseContextObjectsProps = {\n db?: Database.Database;\n context?: AiContext.Binder;\n};\n\nexport type UseContextObjects = {\n objects: Obj.Unknown[];\n onUpdateObject: (dxn: URI.URI, checked: boolean) => Promise<void>;\n};\n\nconst emptyObjectsAtom = Atom.make<Obj.Unknown[]>([]);\n\n/**\n * Create reactive map of active object references (by DXN string).\n */\nexport const useContextObjects = ({ db, context }: UseContextObjectsProps): UseContextObjects => {\n const objects = useAtomValue(context?.objects ?? emptyObjectsAtom);\n\n const handleUpdateObject = useCallback<UseContextObjects['onUpdateObject']>(\n async (dxn: URI.URI, checked: boolean) => {\n if (!db || !context) {\n return;\n }\n\n const ref = db.makeRef<Obj.Unknown>(dxn);\n await ref.load();\n if (checked) {\n await context.bind({ objects: [ref] });\n } else {\n await context.unbind({ objects: [ref] });\n }\n },\n [db, context],\n );\n\n return {\n objects,\n onUpdateObject: handleUpdateObject,\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { trim } from '@dxos/util';\n\nimport { type AiChatProcessor } from '../processor';\n\n/**\n * Returns an async callback that logs the chat's current context, system prompt,\n * and resolved tools to the browser console under a collapsible group.\n * Used by the chat's debug-toggle event handler.\n */\nexport const useDebug = ({ processor }: { processor: AiChatProcessor }) => {\n return useCallback(async () => {\n const objects = processor.context.getObjects();\n const blueprints = processor.context.getBlueprints();\n const system = await processor.getSystemPrompt();\n const tools = (await processor.getTools()) ?? {};\n console.group('Chat', { objects, blueprints });\n try {\n console.log(trim`\n System Prompt:\n ${system}\n `);\n console.log(trim`\n Tools:\n ${Object.values(tools)\n .map((tool) => JSON.stringify(tool, null, 2))\n .join('\\n')}\n `);\n } finally {\n console.groupEnd();\n }\n }, [processor]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport { useEffect, useState } from 'react';\n\nimport { type Database, Type } from '@dxos/echo';\nimport { HiddenAnnotation, getTypeAnnotation } from '@dxos/echo/Annotation';\nimport { Kind as EntityKind } from '@dxos/echo/Entity';\n\nconst getFilteredTypes = (db: Database.Database): Type.AnyEntity[] =>\n Array.from(\n new Set(\n db.graph.registry\n .list()\n .filter(Type.isType)\n .filter((schema) => getTypeAnnotation(Type.getSchema(schema))?.kind !== EntityKind.Relation)\n .filter((schema) => !HiddenAnnotation.get(Type.getSchema(schema)).pipe(Option.getOrElse(() => false))),\n ),\n );\n\n// TODO(burdon): Pass in filter.\n// TODO(wittjosiah): Factor out.\nexport const useFilteredTypes = (db?: Database.Database): Type.AnyEntity[] => {\n const [types, setTypes] = useState<Type.AnyEntity[]>([]);\n useEffect(() => {\n if (!db) {\n return;\n }\n\n setTypes(getFilteredTypes(db));\n return db.graph.registry.changed.on(() => {\n setTypes(getFilteredTypes(db));\n });\n }, [db]);\n\n return types;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useRef, useState } from 'react';\n\nimport { type Space } from '@dxos/client/echo';\n\nexport const useFlush = (space?: Space) => {\n const [state, setState] = useState<'idle' | 'flushing' | 'flushed'>('idle');\n const resetTimer = useRef<NodeJS.Timeout | null>(null);\n\n const handleFlush = useCallback(() => {\n if (!space) {\n return;\n }\n\n queueMicrotask(async () => {\n if (resetTimer.current) {\n clearTimeout(resetTimer.current);\n }\n\n setState('flushing');\n await space.db.flush();\n setState('flushed');\n\n resetTimer.current = setTimeout(() => {\n setState('idle');\n resetTimer.current = null;\n }, 1_000);\n });\n }, [space]);\n\n return { state, handleFlush };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Dispatch, type SetStateAction, useState } from 'react';\n\nexport const useOnline = (): [boolean, Dispatch<SetStateAction<boolean>>] => {\n const [online, setOnline] = useState(true);\n return [online, setOnline];\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { type ChatPresetProps } from '#types';\n\nimport { type AiServicePreset, AiServicePresets } from '../processor';\n\nexport type UsePresets = {\n preset: AiServicePreset | undefined;\n} & Pick<ChatPresetProps, 'presets' | 'onPresetChange'>;\n\nexport const usePresets = (online: boolean): UsePresets => {\n // TODO(burdon): Memo preset for provider.\n const [preset, setPreset] = useState<AiServicePreset>();\n const presets = useMemo(\n () => AiServicePresets.filter((preset) => online === (preset.provider === 'dxos-remote')),\n [online],\n );\n\n const presetOptions = useMemo(\n () => presets.map(({ id, model, label }) => ({ id, label: label ?? model })),\n [presets],\n );\n\n useEffect(() => {\n setPreset(presets[0]);\n }, [presets]);\n\n const handlePresetChange = useCallback<NonNullable<ChatPresetProps['onPresetChange']>>(\n (id) => {\n const preset = presets.find((preset) => preset.id === id);\n if (preset) {\n setPreset(preset);\n }\n },\n [presets],\n );\n\n return {\n preset: preset,\n presets: presetOptions,\n onPresetChange: handlePresetChange,\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { type Space } from '@dxos/client/echo';\nimport { Filter, Obj } from '@dxos/echo';\nimport { type ReferencesProvider } from '@dxos/react-ui-chat';\n\n/**\n * Resolve references to objects in the space.\n */\nexport const useReferencesProvider = (space?: Space): ReferencesProvider | undefined => {\n return useMemo<ReferencesProvider | undefined>((): ReferencesProvider | undefined => {\n if (!space) {\n return undefined;\n }\n\n return {\n getReferences: async ({ query }) => {\n // TODO(burdon): Previously we filtered by types declared by the artifact definitions.\n // const schemas = blueprints.map((blueprint) => blueprint.schema).flat();\n // const objects = await space.db\n // .query(Filter.or(...schemas.map((schema) => Filter.type(schema as Type.Schema))))\n // .run();\n\n const objects = await space.db.query(Filter.everything()).run();\n\n return objects\n .filter(Obj.isObject)\n .filter((object) => stringMatch(query, Obj.getLabel(object) ?? ''))\n .map((object) => ({\n uri: Obj.getURI(object),\n label: Obj.getLabel(object) ?? '',\n }));\n },\n resolveReference: async ({ uri }) => {\n const object = await space.db.query(Filter.id(uri)).first();\n return { uri, label: Obj.getLabel(object) ?? '' };\n },\n } satisfies ReferencesProvider;\n }, [space]);\n};\n\nconst stringMatch = (query: string, label: string) => label.toLowerCase().startsWith(query.toLowerCase());\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom';\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport { pipe } from 'effect/Function';\nimport { useMemo } from 'react';\n\nimport { Trace } from '@dxos/compute';\nimport { Filter, Query } from '@dxos/echo';\nimport { FeedTraceSink } from '@dxos/functions-runtime';\nimport { type Space } from '@dxos/react-client/echo';\n\nconst atomEmpty = Atom.make(() => [] as const);\n\n/**\n * Atom of raw trace messages for a space — the input to `buildExecutionGraph`.\n */\nexport const getTraceMessagesAtom = (space: Space): Atom.Atom<readonly Trace.Message[]> =>\n pipe(\n space.db.query(FeedTraceSink.query).atom,\n Atom.map(\n (feeds) =>\n // TODO(dmaretskyi): Single query with limit(1) and feed traversal when query supports it.\n space.db.query(\n feeds.length > 0\n ? Query.type(Trace.Message).from(feeds[0])\n : (Query.select(Filter.nothing()) as Query.Query<never>),\n ).atom,\n ),\n (atom) => Atom.make((get) => get(get(atom))),\n );\n\n/**\n * Subscribes to the space invocation trace feed.\n */\nexport const useTraceMessages = (space?: Space): readonly Trace.Message[] => {\n const atom = useMemo(() => (space ? getTraceMessagesAtom(space) : atomEmpty), [space]);\n return useAtomValue(atom);\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom';\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport * as Fiber from 'effect/Fiber';\nimport * as Stream from 'effect/Stream';\nimport { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Capabilities } from '@dxos/app-framework';\nimport { useOptionalCapability } from '@dxos/app-framework/ui';\nimport { Process, ServiceResolver, type Trace } from '@dxos/compute';\nimport { ProcessManager } from '@dxos/compute-runtime';\nimport { type Space } from '@dxos/react-client/echo';\n\nimport { resolveEphemeralStatusUpdate } from '#execution-graph';\n\nconst atomEmpty = Atom.make(() => [] as const);\n\nconst ACTIVE_PROCESS_STATES = new Set<Process.State>([Process.State.RUNNING, Process.State.HYBERNATING]);\n\n/** Durable trace lines that represent finished work, not in-flight status. */\nexport const isTerminalActivityLine = (line: string): boolean =>\n line.endsWith(' - Success') || line.endsWith(' - Error') || line === 'Agent completed request';\n\nconst collectDescendantPids = (processes: readonly Process.Info[], rootPid: string): Set<string> => {\n const pids = new Set([rootPid]);\n let expanded = true;\n while (expanded) {\n expanded = false;\n for (const process of processes) {\n const pid = String(process.pid);\n const parentPid = process.parentPid ? String(process.parentPid) : undefined;\n if (parentPid && pids.has(parentPid) && !pids.has(pid)) {\n pids.add(pid);\n expanded = true;\n }\n }\n }\n return pids;\n};\n\nconst resolveSubscribePids = (agentPid: Process.ID, processes: readonly Process.Info[]): Process.ID[] => {\n const rootPid = String(agentPid);\n const descendants = collectDescendantPids(processes, rootPid);\n const activePids = processes\n .filter((process) => descendants.has(String(process.pid)) && ACTIVE_PROCESS_STATES.has(process.state))\n .map((process) => process.pid);\n\n if (activePids.length > 0) {\n return activePids;\n }\n\n return [agentPid];\n};\n\nconst attachActiveHandle = (\n processManager: ProcessManager.Manager,\n pid: Process.ID,\n): Effect.Effect<ProcessManager.Handle<any, any> | undefined> =>\n Effect.gen(function* () {\n const maxAttempts = 15;\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n const handle = yield* processManager.attach(pid).pipe(Effect.catchAll(() => Effect.succeed(undefined)));\n if (handle && ACTIVE_PROCESS_STATES.has(handle.status.state)) {\n return handle;\n }\n if (handle) {\n return undefined;\n }\n yield* Effect.sleep(100);\n }\n return undefined;\n });\n\n/**\n * Subscribes to ephemeral trace events for a delegated sub-agent process subtree\n * and surfaces the latest pending text or tool-call block as a status line.\n */\nexport const useProcessEphemeralStatus = (\n agentPid: Process.ID | undefined,\n space: Space | undefined,\n): string | undefined => {\n // Optional capabilities: the live status is a progressive enhancement, so the component still\n // renders (e.g. in standalone stories) when there is no plugin manager / process runtime.\n const runtime = useOptionalCapability(Capabilities.ProcessManagerRuntime);\n const monitor = useOptionalCapability(Capabilities.ProcessMonitor);\n const processes = useAtomValue(monitor?.processTreeAtom ?? atomEmpty);\n const [status, setStatus] = useState<string | undefined>();\n const fibersRef = useRef<Fiber.RuntimeFiber<void, unknown>[]>([]);\n\n const subscribePidsKey = useMemo(() => {\n if (!agentPid) {\n return '';\n }\n return resolveSubscribePids(agentPid, processes)\n .map((pid) => String(pid))\n .sort()\n .join('|');\n }, [agentPid, processes]);\n\n useEffect(() => {\n if (!agentPid || !space?.id || !runtime || !subscribePidsKey) {\n setStatus(undefined);\n return;\n }\n\n const pids = subscribePidsKey.split('|').map((pid) => Process.ID.make(pid));\n let disposed = false;\n let replaying = true;\n let replayStatus: string | undefined;\n const endReplay = () => {\n replaying = false;\n if (!disposed) {\n setStatus(replayStatus);\n }\n };\n queueMicrotask(endReplay);\n fibersRef.current = [];\n\n const handleEphemeralMessage = (message: Trace.Message) => {\n const update = resolveEphemeralStatusUpdate(message);\n if (update === 'unchanged') {\n return;\n }\n\n if (replaying) {\n replayStatus = update.line;\n return;\n }\n setStatus(update.line);\n };\n\n const layer = ServiceResolver.provide({ space: space.id }, ProcessManager.ProcessManagerService);\n\n const subscribe = (pid: Process.ID) =>\n Effect.gen(function* () {\n // `attachActiveHandle` polls, so a teardown can land mid-resolve; bail before forking a\n // daemon that the cleanup pass below would never see (and thus never interrupt).\n if (disposed) {\n return;\n }\n const processManager = yield* ProcessManager.ProcessManagerService;\n const handle = yield* attachActiveHandle(processManager, pid);\n if (!handle || disposed) {\n return;\n }\n\n // `forkDaemon` keeps the stream fiber alive after `runPromise(forEach)` returns;\n // scoped `fork` is interrupted when the subscribe effect's parent scope closes.\n const fiber = yield* handle.subscribeEphemeral().pipe(\n Stream.runForEach((message) =>\n Effect.sync(() => {\n if (disposed) {\n return;\n }\n handleEphemeralMessage(message);\n }),\n ),\n Effect.forkDaemon,\n );\n if (disposed) {\n yield* Fiber.interrupt(fiber);\n return;\n }\n fibersRef.current.push(fiber);\n });\n\n void runtime\n .runPromise(\n Effect.forEach(pids, subscribe, { concurrency: 'unbounded', discard: true }).pipe(Effect.provide(layer)),\n )\n .catch(() => {\n if (!disposed) {\n setStatus(undefined);\n }\n });\n\n return () => {\n disposed = true;\n const fibers = fibersRef.current;\n fibersRef.current = [];\n for (const fiber of fibers) {\n void runtime.runPromise(Fiber.interrupt(fiber).pipe(Effect.provide(layer)));\n }\n };\n }, [agentPid, runtime, space?.id, subscribePidsKey]);\n\n return status;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["useCallback", "useEffect", "useMemo", "useState", "Blueprint", "Filter", "Obj", "Ref", "useQuery", "distinctBy", "useBlueprints", "registry", "db", "registryBlueprints", "setRegistryBlueprints", "query", "type", "runSync", "changed", "on", "spaceBlueprints", "blueprints", "b", "getMeta", "key", "sort", "name", "a", "localeCompare", "useActiveBlueprints", "context", "active", "setActive", "Map", "updateActive", "getBlueprints", "map", "blueprint", "filter", "entry", "undefined", "subscribeBlueprints", "useBlueprintHandlers", "onUpdateBlueprint", "checked", "registryBlueprint", "find", "bind", "fromURI", "registryURI", "objects", "run", "storedBlueprint", "make", "unbind", "Prec", "keymap", "useMemo", "isTruthy", "useChatKeymapExtensions", "event", "highest", "of", "key", "preventDefault", "run", "emit", "type", "shift", "filter", "RegistryContext", "Effect", "Layer", "useContext", "useMemo", "useState", "AiService", "OpaqueToolkit", "Capabilities", "useCapability", "AiSession", "Credential", "ServiceResolver", "Database", "Feed", "Ref", "Registry", "createFeedServiceLayer", "EffectEx", "AgentService", "log", "useAsyncEffect", "session", "useState", "useAsyncEffect", "space", "AiSession", "feed", "feedTarget", "runtime", "registry", "open", "setSession", "close", "chat", "processor", "useMemo", "undefined", "spaceLayer", "Database", "FeedService", "Credential", "preset", "model", "settings", "observableRegistry", "Capabilities", "useCapability", "AppSpace", "useClient", "useChatServices", "id", "client", "getPersonalSpace", "runtime", "ProcessManagerRuntime", "undefined", "Effect", "useOperationInvoker", "Chat", "Filter", "Obj", "Query", "Type", "EffectEx", "invariant", "MenuBuilder", "useMenuBuilder", "meta", "AssistantOperation", "__dxlog_file", "useChatToolbarActions", "db", "useMenuBuilder", "get", "MenuBuilder", "label", "Filter", "action", "icon", "type", "disabled", "invariant", "companionTo", "chat", "undefined", "pipe", "EffectEx", "Effect", "invoke", "AssistantOperation", "spaceId", "runAndForwardErrors", "chats", "builder", "group", "selectCardinality", "variant", "getLabel", "Obj", "RegistryContext", "Effect", "useContext", "useState", "AiContext", "createFeedServiceLayer", "EffectEx", "useAsyncEffect", "useContextBinder", "space", "feed", "registry", "binder", "setBinder", "undefined", "feedServiceLayer", "db", "runtime", "runAndForwardErrors", "pipe", "provide", "Binder", "open", "close", "Atom", "useAtomValue", "useCallback", "emptyObjectsAtom", "make", "useContextObjects", "db", "context", "objects", "handleUpdateObject", "dxn", "checked", "ref", "makeRef", "load", "bind", "unbind", "onUpdateObject", "useCallback", "trim", "useDebug", "processor", "objects", "context", "getObjects", "blueprints", "getBlueprints", "system", "getSystemPrompt", "tools", "getTools", "console", "group", "log", "Object", "values", "map", "tool", "JSON", "stringify", "join", "groupEnd", "Option", "useEffect", "useState", "Type", "HiddenAnnotation", "getTypeAnnotation", "Kind", "EntityKind", "getFilteredTypes", "db", "Array", "from", "Set", "graph", "registry", "list", "filter", "isType", "schema", "getSchema", "kind", "Relation", "get", "pipe", "getOrElse", "useFilteredTypes", "types", "setTypes", "changed", "on", "useCallback", "useRef", "useState", "useFlush", "space", "state", "setState", "resetTimer", "handleFlush", "queueMicrotask", "current", "clearTimeout", "db", "flush", "setTimeout", "useState", "useOnline", "online", "setOnline", "useCallback", "useEffect", "useMemo", "useState", "usePresets", "online", "preset", "setPreset", "useState", "presets", "useMemo", "AiServicePresets", "filter", "provider", "presetOptions", "map", "id", "model", "label", "useEffect", "handlePresetChange", "useCallback", "find", "onPresetChange", "useMemo", "Filter", "Obj", "useReferencesProvider", "space", "undefined", "getReferences", "query", "objects", "db", "everything", "run", "filter", "isObject", "object", "stringMatch", "getLabel", "map", "uri", "getURI", "label", "resolveReference", "id", "first", "toLowerCase", "startsWith", "Atom", "useAtomValue", "pipe", "useMemo", "Trace", "Filter", "Query", "FeedTraceSink", "atomEmpty", "make", "getTraceMessagesAtom", "space", "db", "query", "atom", "map", "feeds", "length", "type", "Message", "from", "select", "nothing", "get", "useTraceMessages", "Atom", "useAtomValue", "Effect", "Fiber", "Stream", "useEffect", "useMemo", "useRef", "useState", "Capabilities", "useOptionalCapability", "Process", "ServiceResolver", "ProcessManager", "resolveEphemeralStatusUpdate", "atomEmpty", "make", "ACTIVE_PROCESS_STATES", "Set", "State", "RUNNING", "HYBERNATING", "isTerminalActivityLine", "line", "endsWith", "collectDescendantPids", "processes", "rootPid", "pids", "expanded", "process", "pid", "String", "parentPid", "undefined", "has", "add", "resolveSubscribePids", "agentPid", "descendants", "activePids", "filter", "state", "map", "length", "attachActiveHandle", "processManager", "gen", "maxAttempts", "attempt", "handle", "attach", "pipe", "catchAll", "succeed", "status", "sleep", "useProcessEphemeralStatus", "space", "runtime", "ProcessManagerRuntime", "monitor", "ProcessMonitor", "processTreeAtom", "setStatus", "fibersRef", "subscribePidsKey", "sort", "join", "id", "split", "ID", "disposed", "replaying", "replayStatus", "endReplay", "queueMicrotask", "current", "handleEphemeralMessage", "message", "update", "layer", "provide", "ProcessManagerService", "subscribe", "fiber", "subscribeEphemeral", "runForEach", "sync", "forkDaemon", "interrupt", "push", "runPromise", "forEach", "concurrency", "discard", "catch", "fibers"]
7
7
  }
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  getChatPath,
3
3
  getChatsPath
4
- } from "./chunk-HLANPOBA.mjs";
4
+ } from "./chunk-35EL65O4.mjs";
5
5
  import {
6
6
  ASSISTANT_COMPANION_VARIANT,
7
7
  ASSISTANT_DIALOG,
8
8
  meta
9
- } from "./chunk-XYHPOGTK.mjs";
9
+ } from "./chunk-ZNDQVYUN.mjs";
10
10
  import {
11
11
  ApiAuthorization,
12
12
  AssistantCapabilities_exports,
@@ -15,7 +15,7 @@ import {
15
15
  Assistant_exports,
16
16
  ServiceType,
17
17
  categoryIcons
18
- } from "./chunk-YXRGZYYH.mjs";
18
+ } from "./chunk-5KB2WRI2.mjs";
19
19
  import {
20
20
  blueprint_default
21
21
  } from "./chunk-5H6UJHLF.mjs";
@@ -0,0 +1,126 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/capabilities/markdown-extension.ts
4
+ import * as Effect from "effect/Effect";
5
+ import { Capabilities, Capability } from "@dxos/app-framework";
6
+ import { Obj } from "@dxos/echo";
7
+ import { MarkdownCapabilities } from "@dxos/plugin-markdown/types";
8
+ import { AssistantOperation } from "#types";
9
+
10
+ // src/extensions/prompt-extension.ts
11
+ import { syntaxTree } from "@codemirror/language";
12
+ import { Facet } from "@codemirror/state";
13
+ import { Decoration, EditorView, ViewPlugin, WidgetType } from "@codemirror/view";
14
+ import { Domino } from "@dxos/ui";
15
+ var promptHandlerFacet = Facet.define({
16
+ combine: (handlers) => handlers[0] ?? null
17
+ });
18
+ var promptPlugin = ViewPlugin.fromClass(class {
19
+ decorations;
20
+ constructor(view) {
21
+ this.decorations = this.buildDecorations(view);
22
+ }
23
+ update(update) {
24
+ if (update.docChanged || update.viewportChanged || update.selectionSet || update.focusChanged || update.startState.facet(promptHandlerFacet) !== update.state.facet(promptHandlerFacet)) {
25
+ this.decorations = this.buildDecorations(update.view);
26
+ }
27
+ }
28
+ buildDecorations(view) {
29
+ const onRun = view.state.facet(promptHandlerFacet);
30
+ if (!onRun) {
31
+ return Decoration.none;
32
+ }
33
+ const ranges = [];
34
+ syntaxTree(view.state).iterate({
35
+ enter: (node) => {
36
+ if (node.name === "FencedCode") {
37
+ const info = node.node.getChild("CodeInfo");
38
+ if (info) {
39
+ const type = view.state.sliceDoc(info.from, info.to);
40
+ const text = node.node.getChild("CodeText");
41
+ if (type === "prompt" && text) {
42
+ const content = view.state.sliceDoc(text.from, text.to).trim();
43
+ if (content.length > 0) {
44
+ ranges.push(Decoration.line({
45
+ class: "cm-prompt-header"
46
+ }).range(node.from, node.from));
47
+ ranges.push(Decoration.widget({
48
+ widget: new PromptRunWidget(content, onRun),
49
+ side: -1
50
+ }).range(node.from, node.from));
51
+ }
52
+ }
53
+ }
54
+ }
55
+ }
56
+ });
57
+ return Decoration.set(ranges, true);
58
+ }
59
+ }, {
60
+ decorations: (v) => v.decorations
61
+ });
62
+ var promptTheme = EditorView.baseTheme({
63
+ ".cm-prompt-header": {
64
+ position: "relative",
65
+ overflow: "visible"
66
+ }
67
+ });
68
+ var promptRunExtension = ({ onRun }) => [
69
+ promptHandlerFacet.of(onRun),
70
+ promptPlugin,
71
+ promptTheme
72
+ ];
73
+ var PromptRunWidget = class extends WidgetType {
74
+ prompt;
75
+ onClick;
76
+ constructor(prompt, onClick) {
77
+ super(), this.prompt = prompt, this.onClick = onClick;
78
+ }
79
+ eq(other) {
80
+ return this.prompt === other.prompt && this.onClick === other.onClick;
81
+ }
82
+ ignoreEvent() {
83
+ return false;
84
+ }
85
+ toDOM() {
86
+ return Domino.of("button").classNames("dx-button h-6 w-6 min-h-0 p-1 absolute top-0 right-0 bg-green-bg hover:bg-green-surface text-green-fg").on("mousedown", (event) => {
87
+ event.preventDefault();
88
+ event.stopPropagation();
89
+ this.onClick(this.prompt);
90
+ }).append(Domino.of("svg", Domino.SVG).classNames("w-4 h-4 cursor-pointer").append(Domino.of("use", Domino.SVG).attributes({
91
+ href: Domino.icon("ph--sparkle--regular")
92
+ }))).root;
93
+ }
94
+ };
95
+
96
+ // src/capabilities/markdown-extension.ts
97
+ var markdown_extension_default = Capability.makeModule(Effect.fnUntraced(function* () {
98
+ const capabilities = yield* Capability.Service;
99
+ return Capability.contributes(MarkdownCapabilities.ExtensionProvider, [
100
+ ({ document: doc, viewMode }) => {
101
+ if (viewMode === "source") {
102
+ return void 0;
103
+ }
104
+ if (!doc) {
105
+ return void 0;
106
+ }
107
+ const db = Obj.getDatabase(doc);
108
+ if (!db) {
109
+ return void 0;
110
+ }
111
+ const { invokePromise } = capabilities.get(Capabilities.OperationInvoker);
112
+ return promptRunExtension({
113
+ onRun: (promptText) => {
114
+ void invokePromise(AssistantOperation.RunPromptInNewChat, {
115
+ db,
116
+ prompt: promptText
117
+ });
118
+ }
119
+ });
120
+ }
121
+ ]);
122
+ }));
123
+ export {
124
+ markdown_extension_default as default
125
+ };
126
+ //# sourceMappingURL=markdown-extension-IJ5RQMQ4.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/markdown-extension.ts", "../../../src/extensions/prompt-extension.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { MarkdownCapabilities } from '@dxos/plugin-markdown/types';\n\nimport { AssistantOperation } from '#types';\n\nimport { promptRunExtension } from '../extensions';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n\n return Capability.contributes(MarkdownCapabilities.ExtensionProvider, [\n ({ document: doc, viewMode }) => {\n if (viewMode === 'source') {\n return undefined;\n }\n\n if (!doc) {\n return undefined;\n }\n\n const db = Obj.getDatabase(doc);\n if (!db) {\n return undefined;\n }\n\n const { invokePromise } = capabilities.get(Capabilities.OperationInvoker);\n\n return promptRunExtension({\n onRun: (promptText) => {\n void invokePromise(AssistantOperation.RunPromptInNewChat, { db, prompt: promptText });\n },\n });\n },\n ]);\n }),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { syntaxTree } from '@codemirror/language';\nimport { Facet, type Extension, type Range } from '@codemirror/state';\nimport { Decoration, type DecorationSet, EditorView, ViewPlugin, type ViewUpdate, WidgetType } from '@codemirror/view';\n\nimport { Domino } from '@dxos/ui';\n\nexport type PromptExtensionOptions = {\n /** Called when the user clicks the run button on a prompt code block. */\n onRun: (promptText: string) => void;\n};\n\ntype OnRun = (text: string) => void;\n\n// Module-level facet so the plugin singleton can read the latest handler.\nconst promptHandlerFacet = Facet.define<OnRun, OnRun | null>({\n combine: (handlers) => handlers[0] ?? null,\n});\n\n// Module-level singleton — CM6 deduplicates by reference equality, preventing duplicate buttons\n// when the extension is contributed more than once.\nconst promptPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = this.buildDecorations(view);\n }\n\n update(update: ViewUpdate) {\n if (\n update.docChanged ||\n update.viewportChanged ||\n update.selectionSet ||\n update.focusChanged ||\n update.startState.facet(promptHandlerFacet) !== update.state.facet(promptHandlerFacet)\n ) {\n this.decorations = this.buildDecorations(update.view);\n }\n }\n\n buildDecorations(view: EditorView): DecorationSet {\n const onRun = view.state.facet(promptHandlerFacet);\n if (!onRun) {\n return Decoration.none;\n }\n\n const ranges: Range<Decoration>[] = [];\n\n syntaxTree(view.state).iterate({\n enter: (node) => {\n if (node.name === 'FencedCode') {\n const info = node.node.getChild('CodeInfo');\n if (info) {\n const type = view.state.sliceDoc(info.from, info.to);\n const text = node.node.getChild('CodeText');\n if (type === 'prompt' && text) {\n const content = view.state.sliceDoc(text.from, text.to).trim();\n if (content.length > 0) {\n // Mark the header line as a positioned container for the button overlay.\n ranges.push(Decoration.line({ class: 'cm-prompt-header' }).range(node.from, node.from));\n ranges.push(\n Decoration.widget({ widget: new PromptRunWidget(content, onRun), side: -1 }).range(\n node.from,\n node.from,\n ),\n );\n }\n }\n }\n }\n },\n });\n\n // sort=true lets CM6 order by startSide (line decorations before widgets at the same position).\n return Decoration.set(ranges, true);\n }\n },\n {\n decorations: (v) => v.decorations,\n },\n);\n\n// Base theme wires up the positioned container on the header line.\nconst promptTheme = EditorView.baseTheme({\n '.cm-prompt-header': {\n position: 'relative',\n overflow: 'visible',\n },\n});\n\n/**\n * CodeMirror extension that adds a \"run\" button to ```prompt fenced code blocks.\n */\nexport const promptRunExtension = ({ onRun }: PromptExtensionOptions): Extension => [\n promptHandlerFacet.of(onRun),\n promptPlugin,\n promptTheme,\n];\n\nclass PromptRunWidget extends WidgetType {\n constructor(\n private readonly prompt: string,\n private readonly onClick: OnRun,\n ) {\n super();\n }\n\n override eq(other: this) {\n return this.prompt === other.prompt && this.onClick === other.onClick;\n }\n\n override ignoreEvent() {\n return false;\n }\n\n override toDOM() {\n return Domino.of('button')\n .classNames(\n 'dx-button h-6 w-6 min-h-0 p-1 absolute top-0 right-0 bg-green-bg hover:bg-green-surface text-green-fg',\n )\n .on('mousedown', (event) => {\n event.preventDefault();\n event.stopPropagation();\n this.onClick(this.prompt);\n })\n .append(\n Domino.of('svg', Domino.SVG)\n .classNames('w-4 h-4 cursor-pointer')\n .append(\n Domino.of('use', Domino.SVG).attributes({\n href: Domino.icon('ph--sparkle--regular'),\n }),\n ),\n ).root;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["Effect", "Capabilities", "Capability", "Obj", "MarkdownCapabilities", "AssistantOperation", "syntaxTree", "Facet", "Decoration", "EditorView", "ViewPlugin", "WidgetType", "Domino", "promptHandlerFacet", "define", "combine", "handlers", "promptPlugin", "fromClass", "decorations", "view", "buildDecorations", "update", "docChanged", "viewportChanged", "selectionSet", "focusChanged", "startState", "facet", "state", "onRun", "none", "ranges", "iterate", "enter", "node", "name", "info", "getChild", "type", "sliceDoc", "from", "to", "text", "content", "trim", "length", "push", "line", "class", "range", "widget", "PromptRunWidget", "side", "set", "v", "promptTheme", "baseTheme", "position", "overflow", "promptRunExtension", "of", "prompt", "onClick", "eq", "other", "ignoreEvent", "toDOM", "classNames", "on", "event", "preventDefault", "stopPropagation", "append", "SVG", "attributes", "href", "icon", "root", "Capability", "makeModule", "fnUntraced", "capabilities", "Service", "contributes", "MarkdownCapabilities", "ExtensionProvider", "document", "doc", "viewMode", "undefined", "db", "Obj", "getDatabase", "invokePromise", "get", "Capabilities", "OperationInvoker", "promptRunExtension", "onRun", "promptText", "AssistantOperation", "RunPromptInNewChat", "prompt"]
7
+ }