@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
@@ -110,7 +110,6 @@
110
110
  "ai.claude.model.claude-3-5-haiku-20241022",
111
111
  "ai.claude.model.claude-3-5-sonnet-20241022",
112
112
  "ai.claude.model.claude-haiku-4-5",
113
- "ai.claude.model.claude-sonnet-4-0",
114
113
  "ai.claude.model.claude-sonnet-4-5",
115
114
  "ai.claude.model.claude-opus-4-0",
116
115
  "ai.claude.model.claude-opus-4-5",
@@ -52,15 +52,15 @@ export const translations: Resource[] = [
52
52
  'object-deleted.label': 'Sequence deleted',
53
53
  },
54
54
  [Type.getTypename(Chat.Chat)]: {
55
- 'typename.label': 'AI Chat',
56
- 'typename.label_zero': 'AI Chats',
57
- 'typename.label_one': 'AI Chat',
58
- 'typename.label_other': 'AI Chats',
59
- 'object-name.placeholder': 'New AI Chat',
60
- 'add-object.label': 'Add AI chat',
61
- 'rename-object.label': 'Rename AI Chat',
62
- 'delete-object.label': 'Delete AI Chat',
63
- 'object-deleted.label': 'AI Chat deleted',
55
+ 'typename.label': 'AI Conversation',
56
+ 'typename.label_zero': 'AI Conversations',
57
+ 'typename.label_one': 'AI Conversation',
58
+ 'typename.label_other': 'AI Conversations',
59
+ 'object-name.placeholder': 'New AI conversation',
60
+ 'add-object.label': 'Add AI conversation',
61
+ 'rename-object.label': 'Rename AI conversation',
62
+ 'delete-object.label': 'Delete AI conversation',
63
+ 'object-deleted.label': 'AI conversation deleted',
64
64
  },
65
65
  [Type.getTypename(McpServer.McpServer)]: {
66
66
  'typename.label': 'MCP Server',
@@ -80,7 +80,7 @@ export const translations: Resource[] = [
80
80
  'object-deleted.label': 'Agent deleted',
81
81
  },
82
82
  // TODO(burdon): Reconcile with react-ui-chat.
83
- [meta.id]: {
83
+ [meta.profile.key]: {
84
84
  'templates.label': 'Templates',
85
85
  'open-ambient-chat.label': 'Open Assistant',
86
86
  'assistant-chat.label': 'Assistant',
@@ -156,6 +156,7 @@ export const translations: Resource[] = [
156
156
  'mcp-server-api-key.placeholder': 'API key (optional)',
157
157
  'mcp-server-error.label': 'MCP server unavailable',
158
158
  'ai-service-error.label': 'AI service error',
159
+ 'view-usage.label': 'View usage',
159
160
 
160
161
  'debug.button': 'Debug',
161
162
  'online-switch.label': 'Online',
@@ -186,6 +187,13 @@ export const translations: Resource[] = [
186
187
  'instructions.placeholder': 'Enter instructions, goals, and constraints for the assistant.',
187
188
  'reset-history.button': 'Reset',
188
189
  'subscriptions.label': 'Subscriptions',
190
+
191
+ // Per-space Home article: starter-prompt cards + the pinned assistant prompt.
192
+ 'space-home.suggestions.heading': 'Get started',
193
+ 'space-home.suggestion-draft-doc.label': 'Draft a new document',
194
+ 'space-home.suggestion-data-type.label': 'Create a new data type',
195
+ 'space-home.suggestion-ideas.label': 'Suggest some ideas to work on',
196
+ 'space-home.prompt.placeholder': 'Ask the assistant anything…',
189
197
  },
190
198
  },
191
199
  },
@@ -14,7 +14,7 @@ import { meta } from '#meta';
14
14
 
15
15
  import * as Assistant from './Assistant';
16
16
 
17
- export const Settings = Capability.make<Atom.Writable<Assistant.Settings>>(`${meta.id}.capability.settings`);
17
+ export const Settings = Capability.make<Atom.Writable<Assistant.Settings>>(`${meta.profile.key}.capability.settings`);
18
18
 
19
19
  export const StateSchema = Schema.mutable(
20
20
  Schema.Struct({
@@ -27,9 +27,9 @@ export const StateSchema = Schema.mutable(
27
27
 
28
28
  export type AssistantState = Schema.Schema.Type<typeof StateSchema>;
29
29
 
30
- export const State = Capability.make<Atom.Writable<AssistantState>>(`${meta.id}.capability.state`);
30
+ export const State = Capability.make<Atom.Writable<AssistantState>>(`${meta.profile.key}.capability.state`);
31
31
 
32
32
  /** Session-scoped cache of transient (not yet persisted) companion chats keyed by companion DXN string. */
33
33
  export const CompanionChatCache = Capability.make<Atom.Writable<Record<string, Obj.Unknown | undefined>>>(
34
- `${meta.id}.capability.companion-chat-cache`,
34
+ `${meta.profile.key}.capability.companion-chat-cache`,
35
35
  );
@@ -8,4 +8,4 @@ import { ActivationEvent } from '@dxos/app-framework';
8
8
 
9
9
  import { meta } from '#meta';
10
10
 
11
- export const SetupAiServiceProviders = ActivationEvent.make(`${meta.id}.event.setup-ai-service-providers`);
11
+ export const SetupAiServiceProviders = ActivationEvent.make(`${meta.profile.key}.event.setupAiServiceProviders`);
@@ -15,7 +15,7 @@ import { DXN } from '@dxos/keys';
15
15
 
16
16
  import { meta } from '#meta';
17
17
 
18
- const makeKey = (name: string) => DXN.make(`${meta.id}.operation.${name}`);
18
+ const makeKey = (name: string) => DXN.make(`${meta.profile.key}.operation.${name}`);
19
19
 
20
20
  export const CreateChat = Operation.make({
21
21
  meta: { key: makeKey('createChat'), name: 'Create Chat', icon: 'ph--chat-text--regular' },
@@ -0,0 +1,21 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ /** Walk an error's `cause` chain and return the first value matching `predicate`. */
6
+ export const findInCause = <T>(error: unknown, predicate: (value: unknown) => value is T): T | undefined => {
7
+ let current: unknown = error;
8
+ // Guard against self-referential / cyclic `cause` chains so traversal always terminates.
9
+ const visited = new Set<unknown>();
10
+ while (current) {
11
+ if (visited.has(current)) {
12
+ break;
13
+ }
14
+ visited.add(current);
15
+ if (predicate(current)) {
16
+ return current;
17
+ }
18
+ current = current instanceof Error ? current.cause : undefined;
19
+ }
20
+ return undefined;
21
+ };
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/AgentArticle/AgentArticle.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport { Atom, useAtomValue } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\nimport React, { forwardRef, useCallback, useMemo, useState } from 'react';\n\nimport { Surface, useSpaceCallback } from '@dxos/app-framework/ui';\nimport { AppSurface, useObjectMenuItems } from '@dxos/app-toolkit/ui';\nimport { Agent } from '@dxos/assistant-toolkit';\nimport { Database, Feed, Filter, Obj, Query, Ref } from '@dxos/echo';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { Card, Message, Panel, ScrollArea, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { composable } from '@dxos/react-ui';\nimport { Masonry } from '@dxos/react-ui-masonry';\nimport { Menu } from '@dxos/react-ui-menu';\nimport { Focus, Mosaic, type MosaicTileProps } from '@dxos/react-ui-mosaic';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta } from '#meta';\n\ntype Tab = 'artifacts' | 'inputs';\n\nexport type AgentArticleProps = AppSurface.ObjectArticleProps<Agent.Agent>;\n\nexport const AgentArticle = ({ role, subject: agent }: AgentArticleProps) => {\n const { t } = useTranslation(meta.id);\n const [tab, setTab] = useState<Tab>('artifacts');\n const [viewport, setViewport] = useState<HTMLElement | null>(null);\n\n const spaceId = Obj.getDatabase(agent)?.spaceId;\n // TODO(burdon): Clear input feed also.\n const resetHistory = useSpaceCallback(\n spaceId,\n [Feed.FeedService, Database.Service] as const,\n Effect.fnUntraced(function* () {\n yield* Agent.resetChatHistory(agent);\n if (!agent.feed) {\n const feed = yield* Database.add(Feed.make());\n Obj.update(agent, (agent) => {\n agent.feed = Ref.make(feed);\n });\n }\n }),\n [agent],\n );\n const handleResetHistory = useCallback(async () => {\n await resetHistory();\n }, [resetHistory]);\n\n const artifacts = useAtomValue(\n useMemo(\n () =>\n Obj.atom(agent).pipe((agent) =>\n Atom.make((get) => {\n return get(agent)\n .artifacts.map((artifact) => get(artifact.data.atom))\n .filter(isNonNullable);\n }),\n ),\n [agent],\n ),\n );\n\n const inputFeed = useAtomValue(\n Obj.atom(agent).pipe((_) =>\n Atom.make((get) =>\n Option.fromNullable(get(_).feed).pipe(\n Option.map((ref) => ref.atom),\n Option.map(get),\n Option.getOrUndefined,\n ),\n ),\n ),\n );\n\n const db = Obj.getDatabase(agent);\n const inputObjects = useQuery(\n db,\n inputFeed ? Query.select(Filter.everything()).from(inputFeed) : Query.select(Filter.nothing()),\n );\n\n return (\n <Panel.Root role={role}>\n <Panel.Toolbar asChild>\n <Toolbar.Root>\n <Toolbar.ToggleGroup type='single' value={tab} onValueChange={(value) => value && setTab(value as Tab)}>\n <Toolbar.ToggleGroupIconItem value='artifacts' label={t('artifacts.label')} icon='ph--cube--regular' />\n <Toolbar.ToggleGroupIconItem value='inputs' label={t('inputs.label')} icon='ph--queue--regular' />\n </Toolbar.ToggleGroup>\n <Toolbar.Separator />\n <Toolbar.IconButton\n icon='ph--trash--regular'\n label={t('reset-history.button')}\n onCanPlay={handleResetHistory}\n />\n </Toolbar.Root>\n </Panel.Toolbar>\n <Panel.Content className='dx-container flex flex-col'>\n {tab === 'artifacts' && (\n <>\n {artifacts.length === 0 && (\n <Message.Root classNames='m-2' valence='info'>\n <Message.Title>{t('project-empty-spec.message')}</Message.Title>\n <Message.Content>{t('project-empty-spec.description')}</Message.Content>\n </Message.Root>\n )}\n\n <Masonry.Root Tile={MasonryArtifactTile}>\n <Masonry.Content padding thin centered>\n <Masonry.Viewport items={artifacts} getId={(item: Obj.Unknown) => item.id} />\n </Masonry.Content>\n </Masonry.Root>\n </>\n )}\n\n {tab === 'inputs' && (\n <Mosaic.Container asChild withFocus autoScroll={viewport} classNames='dx-document'>\n <ScrollArea.Root orientation='vertical' padding thin centered>\n <ScrollArea.Viewport ref={setViewport}>\n <Mosaic.VirtualStack\n Tile={StackTile}\n classNames='gap-2'\n draggable={false}\n estimateSize={() => 160}\n gap={8}\n getId={(item: Obj.Unknown) => item.id}\n getScrollElement={() => viewport}\n items={inputObjects}\n />\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </Mosaic.Container>\n )}\n </Panel.Content>\n </Panel.Root>\n );\n};\n\nconst ArtifactTileCard = composable<HTMLDivElement, { data: Obj.Unknown }>(({ data, ...props }, forwardedRef) => {\n const objectMenuItems = useObjectMenuItems(data);\n const icon = Obj.getIcon(data)?.icon ?? 'ph--circle-dashed--regular';\n\n return (\n <Card.Root {...props} ref={forwardedRef} data-testid='board-item' fullWidth>\n <Card.Header>\n <Card.IconBlock>\n <Card.Icon icon={icon} />\n </Card.IconBlock>\n <Card.Title>{Obj.getLabel(data, { fallback: 'typename' })}</Card.Title>\n {/* TODO(wittjosiah): Reconcile with Card.Menu. */}\n <Card.IconBlock>\n <Menu.Trigger asChild disabled={!objectMenuItems?.length}>\n <Toolbar.IconButton iconOnly variant='ghost' icon='ph--dots-three-vertical--regular' label='Actions' />\n </Menu.Trigger>\n <Menu.Content items={objectMenuItems} />\n </Card.IconBlock>\n </Card.Header>\n <Card.Body>\n <Surface.Surface\n type={AppSurface.Card}\n limit={1}\n data={{ subject: data } satisfies AppSurface.ObjectCardData}\n />\n </Card.Body>\n </Card.Root>\n );\n});\n\nArtifactTileCard.displayName = 'ArtifactTileCard';\n\nconst MasonryArtifactTile = ({ data }: { data: Obj.Unknown; index: number }) => (\n <Menu.Root>\n <ArtifactTileCard data={data} />\n </Menu.Root>\n);\n\nconst StackTile = forwardRef<HTMLDivElement, MosaicTileProps<Obj.Unknown>>(\n ({ data, location, debug, current }, forwardedRef) => (\n <Menu.Root>\n <Mosaic.Tile asChild id={data.id} data={data} location={location} debug={debug}>\n <Focus.Item asChild current={current}>\n <ArtifactTileCard ref={forwardedRef} data={data} />\n </Focus.Item>\n </Mosaic.Tile>\n </Menu.Root>\n ),\n);\n\nStackTile.displayName = 'StackTile';\n"],
5
- "mappings": "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",
6
- "names": ["Atom", "useAtomValue", "Effect", "Option", "React", "forwardRef", "useCallback", "useMemo", "useState", "Surface", "useSpaceCallback", "AppSurface", "useObjectMenuItems", "Agent", "Database", "Feed", "Filter", "Obj", "Query", "Ref", "useQuery", "Card", "Message", "Panel", "ScrollArea", "Toolbar", "useTranslation", "composable", "Masonry", "Menu", "Focus", "Mosaic", "isNonNullable", "meta", "AgentArticle", "role", "subject", "agent", "t", "id", "tab", "setTab", "viewport", "setViewport", "spaceId", "getDatabase", "resetHistory", "FeedService", "Service", "fnUntraced", "resetChatHistory", "feed", "add", "make", "update", "handleResetHistory", "artifacts", "atom", "pipe", "get", "map", "artifact", "data", "filter", "inputFeed", "_", "fromNullable", "ref", "getOrUndefined", "db", "inputObjects", "select", "everything", "from", "nothing", "Root", "asChild", "ToggleGroup", "type", "value", "onValueChange", "ToggleGroupIconItem", "label", "icon", "Separator", "IconButton", "onCanPlay", "Content", "className", "length", "classNames", "valence", "Title", "Tile", "MasonryArtifactTile", "padding", "thin", "centered", "Viewport", "items", "getId", "item", "Container", "withFocus", "autoScroll", "orientation", "VirtualStack", "StackTile", "draggable", "estimateSize", "gap", "getScrollElement", "ArtifactTileCard", "props", "forwardedRef", "objectMenuItems", "getIcon", "data-testid", "fullWidth", "Header", "IconBlock", "Icon", "getLabel", "fallback", "Trigger", "disabled", "iconOnly", "variant", "Body", "limit", "displayName", "location", "debug", "current", "Item"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/AssistantSettings/AssistantSettings.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { DEFAULT_EDGE_MODELS, DEFAULT_LMSTUDIO_MODELS, DEFAULT_OLLAMA_MODELS } from '@dxos/ai';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { useTranslation } from '@dxos/react-ui';\nimport { Settings as SettingsForm, createSelectField } from '@dxos/react-ui-form';\n\nimport { meta } from '#meta';\nimport { Assistant } from '#types';\n\nexport type AssistantSettingsProps = AppSurface.SettingsArticleProps<Assistant.Settings>;\n\nexport const AssistantSettings = ({ settings, onSettingsChange }: AssistantSettingsProps) => {\n const { t } = useTranslation(meta.id);\n const fieldMap = useMemo(\n () => ({\n modelDefaults: {\n edge: createSelectField({ options: DEFAULT_EDGE_MODELS }),\n ollama: createSelectField({ options: DEFAULT_OLLAMA_MODELS }),\n lmstudio: createSelectField({ options: DEFAULT_LMSTUDIO_MODELS }),\n },\n }),\n [],\n );\n\n return (\n <SettingsForm.Viewport>\n <SettingsForm.Section title={t('settings.title', { ns: meta.id })}>\n <SettingsForm.FieldSet<Assistant.Settings>\n readonly={!onSettingsChange}\n schema={Assistant.Settings}\n fieldMap={fieldMap}\n values={settings}\n onValuesChanged={(values) => onSettingsChange?.(() => values)}\n />\n </SettingsForm.Section>\n </SettingsForm.Viewport>\n );\n};\n"],
5
- "mappings": ";;;AAIA,OAAOA,SAASC,eAAe;AAE/B,SAASC,qBAAqBC,yBAAyBC,6BAA6B;AAEpF,SAASC,sBAAsB;AAC/B,SAASC,YAAYC,cAAcC,yBAAyB;AAE5D,SAASC,YAAY;AACrB,SAASC,iBAAiB;AAInB,IAAMC,oBAAoB,CAAC,EAAEC,UAAUC,iBAAgB,MAA0B;AACtF,QAAM,EAAEC,EAAC,IAAKT,eAAeI,KAAKM,EAAE;AACpC,QAAMC,WAAWf,QACf,OAAO;IACLgB,eAAe;MACbC,MAAMV,kBAAkB;QAAEW,SAASjB;MAAoB,CAAA;MACvDkB,QAAQZ,kBAAkB;QAAEW,SAASf;MAAsB,CAAA;MAC3DiB,UAAUb,kBAAkB;QAAEW,SAAShB;MAAwB,CAAA;IACjE;EACF,IACA,CAAA,CAAE;AAGJ,SACE,sBAAA,cAACI,aAAae,UAAQ,MACpB,sBAAA,cAACf,aAAagB,SAAO;IAACC,OAAOV,EAAE,kBAAkB;MAAEW,IAAIhB,KAAKM;IAAG,CAAA;KAC7D,sBAAA,cAACR,aAAamB,UAAQ;IACpBC,UAAU,CAACd;IACXe,QAAQlB,UAAUJ;IAClBU;IACAa,QAAQjB;IACRkB,iBAAiB,CAACD,WAAWhB,mBAAmB,MAAMgB,MAAAA;;AAKhE;",
6
- "names": ["React", "useMemo", "DEFAULT_EDGE_MODELS", "DEFAULT_LMSTUDIO_MODELS", "DEFAULT_OLLAMA_MODELS", "useTranslation", "Settings", "SettingsForm", "createSelectField", "meta", "Assistant", "AssistantSettings", "settings", "onSettingsChange", "t", "id", "fieldMap", "modelDefaults", "edge", "options", "ollama", "lmstudio", "Viewport", "Section", "title", "ns", "FieldSet", "readonly", "schema", "values", "onValuesChanged"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/ChatCompanion/ChatCompanion.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport React, { forwardRef, useCallback, useMemo } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { BlueprintsAnnotation } from '@dxos/app-toolkit';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { Chat } from '@dxos/assistant-toolkit';\nimport { getSpace } from '@dxos/client/echo';\nimport { Blueprint } from '@dxos/compute';\nimport { Entity, Filter, Obj, Ref, Type } from '@dxos/echo';\nimport { SpaceOperation } from '@dxos/plugin-space';\nimport { useQuery, useRegistry } from '@dxos/react-client/echo';\nimport { useAsyncEffect } from '@dxos/react-ui';\n\nimport { useContextBinder } from '#hooks';\nimport { AssistantOperation } from '#types';\n\nimport ChatArticle from '../ChatArticle';\n\nexport type ChatCompanionProps = AppSurface.ArticleProps<Chat.Chat, {}, Obj.Unknown>;\n\nexport const ChatCompanion = forwardRef<HTMLDivElement, ChatCompanionProps>(\n ({ role = 'article', subject: chat, companionTo, attendableId }, forwardedRef) => {\n const { invokePromise } = useOperationInvoker();\n const space = getSpace(companionTo);\n useBlueprints({ subject: chat, companionTo });\n\n // Persist (and flush) a transient chat before the first request so the agent can resolve\n // the now-durable conversation feed; subsequent submits are a no-op once persisted.\n const handleSubmit = useCallback(async () => {\n if (!space || !chat || Obj.getDatabase(chat)) {\n return;\n }\n\n await invokePromise(SpaceOperation.AddObject, {\n object: chat,\n target: space.db,\n hidden: true,\n });\n await invokePromise(SpaceOperation.AddRelation, {\n db: space.db,\n schema: Chat.CompanionTo,\n source: chat,\n target: companionTo,\n });\n await invokePromise(AssistantOperation.SetCurrentChat, {\n companionTo,\n chat,\n });\n await space.db.flush();\n }, [space, chat, companionTo, invokePromise]);\n\n return (\n <ChatArticle\n role={role}\n subject={chat}\n attendableId={attendableId}\n companionTo={companionTo}\n onSubmit={handleSubmit}\n ref={forwardedRef}\n />\n );\n },\n);\n\n/**\n * Bind blueprints to the context.\n */\n// TODO(burdon): Why is this only in the companion?\nconst useBlueprints = ({ subject: chat, companionTo }: Pick<ChatCompanionProps, 'subject' | 'companionTo'>) => {\n const registry = useRegistry();\n const space = getSpace(companionTo);\n const feedTarget = chat?.feed.target;\n const binder = useContextBinder(space, feedTarget);\n\n const blueprintKeys = useMemo(() => {\n const schema = companionTo ? Obj.getType(companionTo) : undefined;\n if (!schema) {\n return [] as string[];\n }\n\n return Option.getOrElse(() => [] as string[])(BlueprintsAnnotation.get(Type.getSchema(schema)));\n }, [companionTo]);\n\n const existingBlueprints = useQuery(space?.db, Filter.type(Blueprint.Blueprint));\n const pluginBlueprints = useMemo(\n () =>\n existingBlueprints.filter((blueprint) => {\n const key = Obj.getMeta(blueprint).key;\n return key !== undefined && blueprintKeys.includes(key);\n }),\n [existingBlueprints, blueprintKeys],\n );\n\n useAsyncEffect(async () => {\n if (!binder?.isOpen) {\n return;\n }\n\n // Bind annotated blueprints: use key URI for registry blueprints (no DB clone needed).\n if (blueprintKeys.length > 0) {\n const registryKeys = blueprintKeys.filter((key) => {\n const candidate = registry.list().find((e) => Entity.getMeta(e)?.key === key);\n return candidate != null && Obj.instanceOf(Blueprint.Blueprint, candidate);\n });\n\n // DB-forked blueprints (in space but not in registry).\n const dbForks = pluginBlueprints.filter((bp) => !registryKeys.includes(Obj.getMeta(bp).key ?? ''));\n if (registryKeys.length > 0) {\n await binder.bind({ blueprints: registryKeys.map((key) => Ref.fromURI(Blueprint.registryURI(key))) });\n }\n if (dbForks.length > 0) {\n await binder.bind({ blueprints: dbForks.map((blueprint) => Ref.make(blueprint)) });\n }\n }\n\n if (Obj.instanceOf(Blueprint.Blueprint, companionTo)) {\n await binder.bind({ blueprints: [Ref.make(companionTo)] });\n } else {\n await binder.bind({ objects: [Ref.make(companionTo)] });\n }\n }, [binder, blueprintKeys, pluginBlueprints, companionTo]);\n};\n"],
5
- "mappings": "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",
6
- "names": ["Option", "React", "forwardRef", "useCallback", "useMemo", "useOperationInvoker", "BlueprintsAnnotation", "Chat", "getSpace", "Blueprint", "Entity", "Filter", "Obj", "Ref", "Type", "SpaceOperation", "useQuery", "useRegistry", "useAsyncEffect", "useContextBinder", "AssistantOperation", "ChatCompanion", "forwardRef", "role", "subject", "chat", "companionTo", "attendableId", "forwardedRef", "invokePromise", "useOperationInvoker", "space", "getSpace", "useBlueprints", "handleSubmit", "useCallback", "Obj", "getDatabase", "SpaceOperation", "AddObject", "object", "target", "db", "hidden", "AddRelation", "schema", "Chat", "CompanionTo", "source", "AssistantOperation", "SetCurrentChat", "flush", "ChatArticle", "onSubmit", "ref", "registry", "useRegistry", "feedTarget", "feed", "binder", "useContextBinder", "blueprintKeys", "useMemo", "getType", "undefined", "getOrElse", "BlueprintsAnnotation", "get", "Type", "getSchema", "existingBlueprints", "useQuery", "Filter", "type", "Blueprint", "pluginBlueprints", "filter", "blueprint", "key", "getMeta", "includes", "useAsyncEffect", "isOpen", "length", "registryKeys", "candidate", "list", "find", "e", "Entity", "instanceOf", "dbForks", "bp", "bind", "blueprints", "map", "Ref", "fromURI", "registryURI", "make", "objects"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/ChatDialog/ChatDialog.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useState } from 'react';\n\nimport { useAtomCapability } from '@dxos/app-framework/ui';\nimport { type Chat as ChatTypes } from '@dxos/assistant-toolkit';\nimport { Obj } from '@dxos/echo';\nimport { useRegistry } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { ChatDialog as NaturalChatDialog } from '@dxos/react-ui-chat';\n\nimport { Chat, type ChatRootProps } from '#components';\nimport { useChatProcessor, useChatServices, useOnline, usePresets } from '#hooks';\nimport { meta } from '#meta';\nimport { type Assistant, AssistantCapabilities } from '#types';\n\nexport type ChatDialogProps = {\n chat?: ChatTypes.Chat;\n};\n\nexport const ChatDialog = ({ chat }: ChatDialogProps) => {\n const { t } = useTranslation(meta.id);\n\n const db = chat && Obj.getDatabase(chat);\n const settings = useAtomCapability(AssistantCapabilities.Settings);\n const runtime = useChatServices({ id: db?.spaceId });\n const [online, setOnline] = useOnline();\n const { preset, ...chatProps } = usePresets(online);\n const registry = useRegistry();\n const processor = useChatProcessor({ chat, preset, runtime, registry, settings });\n\n // TODO(burdon): Refocus when open.\n const [open, setOpen] = useState(true);\n const [expanded, setExpanded] = useState(false);\n const handleEvent = useCallback<NonNullable<ChatRootProps['onEvent']>>((event) => {\n switch (event.type) {\n case 'submit':\n case 'thread-open':\n setOpen(true);\n setExpanded(true);\n break;\n case 'thread-close':\n setOpen(false);\n break;\n }\n }, []);\n\n if (!chat || !processor) {\n return null;\n }\n\n return (\n <Chat.Root chat={chat} processor={processor} onEvent={handleEvent}>\n <NaturalChatDialog.Root open={open} expanded={expanded} onOpenChange={setOpen}>\n <NaturalChatDialog.Header title={t('assistant-dialog.title')} />\n <NaturalChatDialog.Content>\n <Chat.Thread viewType={(chat.view as Assistant.ChatView | undefined) ?? settings.chatView} />\n </NaturalChatDialog.Content>\n <NaturalChatDialog.Footer classNames='p-1.5'>\n <Chat.Prompt {...chatProps} preset={preset?.id} online={online} onOnlineChange={setOnline} expandable />\n </NaturalChatDialog.Footer>\n </NaturalChatDialog.Root>\n </Chat.Root>\n );\n};\n"],
5
- "mappings": ";;;AAIA,OAAOA,SAASC,aAAaC,gBAAgB;AAE7C,SAASC,yBAAyB;AAElC,SAASC,WAAW;AACpB,SAASC,mBAAmB;AAC5B,SAASC,sBAAsB;AAC/B,SAASC,cAAcC,yBAAyB;AAEhD,SAASC,YAAgC;AACzC,SAASC,kBAAkBC,iBAAiBC,WAAWC,kBAAkB;AACzE,SAASC,YAAY;AACrB,SAAyBC,6BAA6B;AAM/C,IAAMR,aAAa,CAAC,EAAES,KAAI,MAAmB;AAClD,QAAM,EAAEC,EAAC,IAAKX,eAAeQ,KAAKI,EAAE;AAEpC,QAAMC,KAAKH,QAAQZ,IAAIgB,YAAYJ,IAAAA;AACnC,QAAMK,WAAWlB,kBAAkBY,sBAAsBO,QAAQ;AACjE,QAAMC,UAAUZ,gBAAgB;IAAEO,IAAIC,IAAIK;EAAQ,CAAA;AAClD,QAAM,CAACC,QAAQC,SAAAA,IAAad,UAAAA;AAC5B,QAAM,EAAEe,QAAQ,GAAGC,UAAAA,IAAcf,WAAWY,MAAAA;AAC5C,QAAMI,WAAWxB,YAAAA;AACjB,QAAMyB,YAAYpB,iBAAiB;IAAEM;IAAMW;IAAQJ;IAASM;IAAUR;EAAS,CAAA;AAG/E,QAAM,CAACU,MAAMC,OAAAA,IAAW9B,SAAS,IAAA;AACjC,QAAM,CAAC+B,UAAUC,WAAAA,IAAehC,SAAS,KAAA;AACzC,QAAMiC,cAAclC,YAAmD,CAACmC,UAAAA;AACtE,YAAQA,MAAMC,MAAI;MAChB,KAAK;MACL,KAAK;AACHL,gBAAQ,IAAA;AACRE,oBAAY,IAAA;AACZ;MACF,KAAK;AACHF,gBAAQ,KAAA;AACR;IACJ;EACF,GAAG,CAAA,CAAE;AAEL,MAAI,CAAChB,QAAQ,CAACc,WAAW;AACvB,WAAO;EACT;AAEA,SACE,sBAAA,cAACrB,KAAK6B,MAAI;IAACtB;IAAYc;IAAsBS,SAASJ;KACpD,sBAAA,cAAC3B,kBAAkB8B,MAAI;IAACP;IAAYE;IAAoBO,cAAcR;KACpE,sBAAA,cAACxB,kBAAkBiC,QAAM;IAACC,OAAOzB,EAAE,wBAAA;MACnC,sBAAA,cAACT,kBAAkBmC,SAAO,MACxB,sBAAA,cAAClC,KAAKmC,QAAM;IAACC,UAAW7B,KAAK8B,QAA2CzB,SAAS0B;OAEnF,sBAAA,cAACvC,kBAAkBwC,QAAM;IAACC,YAAW;KACnC,sBAAA,cAACxC,KAAKyC,QAAM;IAAE,GAAGtB;IAAWD,QAAQA,QAAQT;IAAIO;IAAgB0B,gBAAgBzB;IAAW0B,YAAAA;;AAKrG;",
6
- "names": ["React", "useCallback", "useState", "useAtomCapability", "Obj", "useRegistry", "useTranslation", "ChatDialog", "NaturalChatDialog", "Chat", "useChatProcessor", "useChatServices", "useOnline", "usePresets", "meta", "AssistantCapabilities", "chat", "t", "id", "db", "getDatabase", "settings", "Settings", "runtime", "spaceId", "online", "setOnline", "preset", "chatProps", "registry", "processor", "open", "setOpen", "expanded", "setExpanded", "handleEvent", "event", "type", "Root", "onEvent", "onOpenChange", "Header", "title", "Content", "Thread", "viewType", "view", "chatView", "Footer", "classNames", "Prompt", "onOnlineChange", "expandable"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/PlanArticle/PlanArticle.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { type Plan } from '@dxos/assistant-toolkit';\nimport { Panel, ScrollArea, Toolbar } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\n\nimport { TaskList } from '#components';\n\nexport type PlanArticleProps = AppSurface.ObjectArticleProps<Plan.Plan>;\n\nexport const PlanArticle = ({ role, attendableId, subject }: PlanArticleProps) => {\n const { hasAttention } = useAttention(attendableId);\n\n return (\n <Panel.Root role={role} classNames='dx-document'>\n <Panel.Toolbar asChild>\n <Toolbar.Root disabled={!hasAttention} />\n </Panel.Toolbar>\n <Panel.Content asChild>\n <ScrollArea.Root orientation='vertical'>\n <ScrollArea.Viewport>\n <TaskList plan={subject} />\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </Panel.Content>\n </Panel.Root>\n );\n};\n"],
5
- "mappings": ";;;AAIA,OAAOA,WAAW;AAIlB,SAASC,OAAOC,YAAYC,eAAe;AAC3C,SAASC,oBAAoB;AAE7B,SAASC,gBAAgB;AAIlB,IAAMC,cAAc,CAAC,EAAEC,MAAMC,cAAcC,QAAO,MAAoB;AAC3E,QAAM,EAAEC,aAAY,IAAKN,aAAaI,YAAAA;AAEtC,SACE,sBAAA,cAACP,MAAMU,MAAI;IAACJ;IAAYK,YAAW;KACjC,sBAAA,cAACX,MAAME,SAAO;IAACU,SAAAA;KACb,sBAAA,cAACV,QAAQQ,MAAI;IAACG,UAAU,CAACJ;OAE3B,sBAAA,cAACT,MAAMc,SAAO;IAACF,SAAAA;KACb,sBAAA,cAACX,WAAWS,MAAI;IAACK,aAAY;KAC3B,sBAAA,cAACd,WAAWe,UAAQ,MAClB,sBAAA,cAACZ,UAAAA;IAASa,MAAMT;;AAM5B;",
6
- "names": ["React", "Panel", "ScrollArea", "Toolbar", "useAttention", "TaskList", "PlanArticle", "role", "attendableId", "subject", "hasAttention", "Root", "classNames", "asChild", "disabled", "Content", "orientation", "Viewport", "plan"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/RoutineArticle/RoutineArticle.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useSpaceCallback } from '@dxos/app-framework/ui';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { AgentPrompt } from '@dxos/assistant-toolkit';\nimport { Operation, type Routine } from '@dxos/compute';\nimport { Database, Feed, Obj } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { Panel, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';\n\nimport { TemplateEditor } from '#components';\nimport { meta } from '#meta';\n\nexport type RoutineArticleProps = AppSurface.ObjectArticleProps<Routine.Routine>;\n\ntype RunState =\n | { status: 'idle' }\n | { status: 'running' }\n | { status: 'success'; result: unknown }\n | { status: 'error'; error: Error };\n\n// TODO(burdon): Trigger editor.\nexport const RoutineArticle = ({ role, attendableId, subject }: RoutineArticleProps) => {\n const { t } = useTranslation(meta.id);\n const { hasAttention } = useAttention(attendableId);\n const invoke = usePromptHandler(subject);\n const [state, setState] = useState<RunState>({ status: 'idle' });\n const mountedRef = useRef(true);\n useEffect(() => {\n return () => {\n mountedRef.current = false;\n };\n }, []);\n\n const handleRun = useCallback(async () => {\n setState({ status: 'running' });\n try {\n const result = await invoke();\n if (mountedRef.current) {\n setState({ status: 'success', result });\n }\n } catch (err) {\n if (mountedRef.current) {\n setState({ status: 'error', error: err instanceof Error ? err : new Error(String(err)) });\n }\n }\n }, [invoke]);\n\n return (\n <Panel.Root role={role} className='dx-document'>\n <Panel.Toolbar asChild>\n <Toolbar.Root disabled={!hasAttention || state.status === 'running'}>\n <Toolbar.IconButton\n iconOnly\n icon={state.status === 'running' ? 'ph--spinner-gap--regular' : 'ph--play--regular'}\n label={t('run-prompt.label')}\n onClick={handleRun}\n />\n </Toolbar.Root>\n </Panel.Toolbar>\n <Panel.Content classNames='flex flex-col gap-2'>\n <TemplateEditor id={subject.id} source={subject.instructions} />\n <RoutineResult state={state} />\n </Panel.Content>\n </Panel.Root>\n );\n};\n\nconst RoutineResult = ({ state }: { state: RunState }) => {\n const { t } = useTranslation(meta.id);\n switch (state.status) {\n case 'idle':\n return null;\n case 'running':\n return <div className='p-2 text-sm text-subdued'>{t('routine-running.label')}</div>;\n case 'error':\n return <div className='p-2 text-sm text-error'>{state.error.message}</div>;\n case 'success':\n return <JsonHighlighter classNames='p-2! text-sm' data={state.result} />;\n }\n};\n\nconst usePromptHandler = (routine: Routine.Routine) => {\n const db = Obj.getDatabase(routine);\n const data = useMemo<Operation.Definition.Input<typeof AgentPrompt> | undefined>(() => {\n if (db && routine) {\n return {\n prompt: db.makeRef(Obj.getURI(routine)),\n input: {},\n };\n }\n }, [routine, db]);\n\n return useSpaceCallback(\n db?.spaceId,\n [Database.Service, Feed.FeedService] as const,\n () => {\n invariant(data);\n return Operation.invoke(AgentPrompt, data);\n },\n [data],\n );\n};\n"],
5
- "mappings": ";;;AAIA,OAAOA,SAASC,aAAaC,WAAWC,SAASC,QAAQC,gBAAgB;AAEzE,SAASC,wBAAwB;AAEjC,SAASC,mBAAmB;AAC5B,SAASC,iBAA+B;AACxC,SAASC,UAAUC,MAAMC,WAAW;AACpC,SAASC,iBAAiB;AAC1B,SAASC,OAAOC,SAASC,sBAAsB;AAC/C,SAASC,oBAAoB;AAC7B,SAASC,uBAAuB;AAEhC,SAASC,sBAAsB;AAC/B,SAASC,YAAY;AAUrB,IAAA,eAAA;AAGE,IAAQC,iBAAiBJ,CAAAA,EAAAA,MAAAA,cAAaK,QAAAA,MAAAA;AACtC,QAAMC,EAAAA,EAAAA,IAAAA,eAASC,KAAiBC,EAAAA;AAChC,QAAM,EAACC,aAAOC,IAAS,aAAsB,YAAA;QAAEC,SAAQ,iBAAA,OAAA;AAAO,QAAA,CAAA,OAAA,QAAA,IAAA,SAAA;IAC9D,QAAMC;EACN1B,CAAAA;QACE,aAAO,OAAA,IAAA;YACL0B,MAAAA;AACF,WAAA,MAAA;AACG,iBAAA,UAAA;IAEL;MACEF,CAAAA;oBAAmB,YAAA,YAAA;AAAU,aAAA;MACzB,QAAA;;QAEF;YACEA,SAAS,MAAA,OAAA;qBAAEC,SAAQ;iBAAWE;UAAO,QAAA;UACvC;QACA,CAAOC;MACP;aACEJ,KAAAA;qBAAWC,SAAQ;iBAASI;UAA2D,QAAA;UACzF,OAAA,eAAA,QAAA,MAAA,IAAA,MAAA,OAAA,GAAA,CAAA;QACF,CAAA;MACC;IAACT;KAAO;IAEX;;SACoC,sBAAA,cAAA,MAAA,MAAA;;IACjBU,WAAAA;KACb,sBAAA,cAAClB,MAAAA,SAAY;IAACmB,SAAAA;KACZ,sBAAA,cAACnB,QAAQoB,MAAAA;IACPC,UAAAA,CAAAA,gBAAAA,MAAAA,WAAAA;KACYR,sBAAM,cAAK,QAAY,YAAA;IACnCS,UAAS;IACTC,MAAAA,MAASC,WAAAA,YAAAA,6BAAAA;+BAIf;IAAeC,SAAAA;QACb,sBAAA,cAACrB,MAAAA,SAAAA;IAAesB,YAAYA;KAAYhB,sBAAQiB,cAAY,gBAAA;;IAC7ChB,QAAOA,QAAAA;;IAI5B;EAEF,CAAA,CAAMiB,CAAAA;;IAEJ,gBAAcf,CAAM,EAAA,MAAA,MAAA;QAClB,EAAA,EAAK,IAAA,eAAA,KAAA,EAAA;gBACH,QAAO;IACT,KAAK;AACH,aAAA;;aAAoD,sBAAA,cAAA,OAAA;QACjD,WAAA;MACH,GAAA,EAAA,uBAAO,CAAA;;aAAqDgB,sBAAO,cAAA,OAAA;QAChE,WAAA;MACH,GAAA,MAAA,MAAA,OAAO;;aAAuDd,sBAAM,cAAA,iBAAA;;QACxE,MAAA,MAAA;MACF,CAAA;EAEA;;IAEE,mBAAiF,CAAA,YAAA;QAC/E,KAAIe,IAAMC,YAAS,OAAA;eACjB,QAAO,MAAA;cACLC,SAAWC;aACXC;QACF,QAAA,GAAA,QAAA,IAAA,OAAA,OAAA,CAAA;QACF,OAAA,CAAA;MACC;IAACH;;IAAY;IAEhB;;SAEqBnC,iBAAgB,IAAA,SAAA;IACnC,SAAA;IACEE,KAAAA;WACA;AAEF,cAAA,MAAA,QAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,KAAA,GAAA,QAAA,GAAA,CAAA,QAAA,EAAA,EAAA,CAAA;AAACqC,WAAAA,UAAAA,OAAAA,aAAAA,IAAAA;KAAK;IAEV;;;",
6
- "names": ["React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "useSpaceCallback", "AgentPrompt", "Operation", "Database", "Feed", "Obj", "invariant", "Panel", "Toolbar", "useTranslation", "useAttention", "JsonHighlighter", "TemplateEditor", "meta", "hasAttention", "attendableId", "invoke", "usePromptHandler", "subject", "state", "setState", "status", "mountedRef", "result", "err", "error", "asChild", "disabled", "IconButton", "iconOnly", "label", "onClick", "handleRun", "classNames", "id", "instructions", "RoutineResult", "message", "db", "routine", "prompt", "makeRef", "input", "data"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/TracePanel/TracePanel.tsx", "../../../src/containers/TracePanel/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom';\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport * as Data from 'effect/Data';\nimport * as Duration from 'effect/Duration';\nimport { pipe } from 'effect/Function';\nimport React, { useCallback, useDeferredValue, useEffect, useMemo, useState } from 'react';\n\nimport { Capabilities } from '@dxos/app-framework';\nimport { useCapability, useAtomCapability, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { Process, Trace } from '@dxos/compute';\nimport { Filter, Query } from '@dxos/echo';\nimport { FeedTraceSink } from '@dxos/functions-runtime';\nimport { EID } from '@dxos/keys';\nimport { type Space } from '@dxos/react-client/echo';\nimport { ScrollContainer } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { useAttentionAttributes } from '@dxos/react-ui-attention';\nimport { Timeline, type Commit } from '@dxos/react-ui-components';\nimport { Syntax } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/ui-theme';\n\nimport { ProcessTree, ProcessTreeProps } from '#components';\nimport { buildExecutionGraph, type ExecutionGraph } from '#execution-graph';\nimport { AssistantCapabilities } from '#types';\n\nexport type TracePanelProps = AppSurface.SpaceArticleProps<Pick<ProcessTreeProps, 'onProcessTerminate'>>;\n\nexport const TracePanel = composable<HTMLDivElement, TracePanelProps>(\n ({ space, attendableId, onProcessTerminate, ...props }, forwardedRef) => {\n const attentionAttrs = useAttentionAttributes(attendableId);\n const { invokePromise } = useOperationInvoker();\n const settings = useAtomCapability(AssistantCapabilities.Settings);\n const tracePanelDebug = settings.tracePanelDebug ?? false;\n\n // `useDeferredValue` batches update bursts, works together with `React.memo`.\n // See the comment in `ProcessTreeContainer` for more details.\n const { branches, commits, spanTree, details } = useDeferredValue(useExecutionGraph(space));\n\n // Debug hatch (dev builds only): expose the raw trace messages (the exact `buildExecutionGraph`\n // input) so a real trace can be captured as a test fixture. While the TracePanel is mounted, run\n // `dxosDumpTrace()` in the console — it copies the serialized `Trace.Message[]` to the clipboard\n // (and logs it). Gated on `import.meta.env.DEV` so it's stripped from production builds.\n const traceMessages = useTraceMessages(space);\n useEffect(() => {\n if (!import.meta.env.DEV) {\n return;\n }\n // Attach a debug hatch to the global object (a genuine global-augmentation boundary).\n const debugGlobal = globalThis as typeof globalThis & { dxosDumpTrace?: () => string };\n debugGlobal.dxosDumpTrace = () => {\n const data = traceMessages.map((message) => ({\n meta: message.meta,\n isEphemeral: message.isEphemeral,\n events: message.events,\n }));\n const json = JSON.stringify(data, null, 2);\n // eslint-disable-next-line no-console\n console.log(json);\n void navigator.clipboard?.writeText(json);\n return `dxosDumpTrace: ${data.length} message(s) copied to clipboard`;\n };\n return () => {\n delete debugGlobal.dxosDumpTrace;\n };\n }, [traceMessages]);\n\n const [selectedCommit, setSelectedCommit] = useState<Commit | undefined>();\n const handleCommitSelect = useCallback(\n (commit: Commit | undefined) => {\n setSelectedCommit(commit);\n if (commit?.link) {\n const echoUri = EID.tryParse(commit.link);\n const spaceId = echoUri ? EID.getSpaceId(echoUri) : undefined;\n const objectId = echoUri ? EID.getEntityId(echoUri) : undefined;\n if (spaceId && objectId) {\n // TODO(dmaretskyi): Navigates, but fails to open.\n void invokePromise(LayoutOperation.Open, {\n subject: [`${spaceId}:${objectId}`],\n });\n }\n }\n },\n [invokePromise, setSelectedCommit],\n );\n\n // Select current branch.\n const [currentBranch, setCurrentBranch] = useState<string | null>(null);\n const handleProcessSelect = useCallback(\n (process: Process.Info) => {\n const branch = branches.find((branch) => branch === process.pid.toString());\n if (branch) {\n setCurrentBranch(branch);\n }\n },\n [branches],\n );\n\n return (\n <div\n {...composableProps(props, {\n ...attentionAttrs,\n classNames: mx(\n 'h-full grid divide-y divide-separator',\n !tracePanelDebug && selectedCommit\n ? 'grid-rows-[minmax(0,160px)_1fr_minmax(0,206px)]'\n : 'grid-rows-[minmax(0,160px)_1fr]',\n ),\n })}\n ref={forwardedRef}\n >\n <ProcessTreeContainer onProcessSelect={handleProcessSelect} onProcessTerminate={onProcessTerminate} />\n\n <ScrollContainer.Root pin>\n <ScrollContainer.Content thin>\n <ScrollContainer.Fade />\n <ScrollContainer.Viewport>\n {tracePanelDebug ? (\n <Syntax.Root data={spanTree}>\n <Syntax.Content>\n <Syntax.Viewport>\n <Syntax.Code className='text-xs' />\n </Syntax.Viewport>\n </Syntax.Content>\n </Syntax.Root>\n ) : (\n <Timeline\n compact\n commits={commits}\n branches={branches}\n currentBranch={currentBranch}\n onSelect={handleCommitSelect}\n />\n )}\n </ScrollContainer.Viewport>\n <ScrollContainer.ScrollDownButton />\n </ScrollContainer.Content>\n </ScrollContainer.Root>\n\n {!tracePanelDebug && selectedCommit && (\n <Syntax.Root data={details[selectedCommit.id] ?? selectedCommit}>\n <Syntax.Content>\n <Syntax.Viewport>\n <Syntax.Code className='text-xs' />\n </Syntax.Viewport>\n </Syntax.Content>\n </Syntax.Root>\n )}\n </div>\n );\n },\n);\n\n// Stable ref.\nconst atomEmpty = Atom.make(() => [] as const);\n\ntype UseExecutionGraphOptions = {\n eventLimit?: number;\n};\n\nconst useExecutionGraph = (space: Space, { eventLimit }: UseExecutionGraphOptions = {}): ExecutionGraph => {\n const monitor = useCapability(Capabilities.ProcessMonitor);\n const processesAtom = monitor?.processTreeAtom ?? atomEmpty;\n\n const atom = useMemo(\n () => getExecutionGraph(space, processesAtom, { eventLimit }),\n [space, processesAtom, eventLimit],\n );\n\n return useAtomValue(atom);\n};\n\n/**\n * Atom of the raw trace messages for a space — the exact `Trace.Message[]` fed into\n * `buildExecutionGraph`. Shared by the execution graph and the debug trace export.\n */\nconst 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): This should be possible in a single query with properly working limit(1) and feed > feed contents traversal.\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 * Returns the raw trace messages for a space (used by the debug trace export).\n */\nconst useTraceMessages = (space: Space): readonly Trace.Message[] => {\n const atom = useMemo(() => getTraceMessagesAtom(space), [space]);\n return useAtomValue(atom);\n};\n\nconst getExecutionGraph = (\n space: Space,\n processesAtom: Atom.Atom<readonly Process.Info[]>,\n { eventLimit = 100 }: UseExecutionGraphOptions = {},\n): Atom.Atom<ExecutionGraph> => {\n const traceMessages = getTraceMessagesAtom(space);\n\n const activeProcesses = pipe(\n processesAtom,\n Atom.debounce(Duration.millis(500)),\n Atom.map((processes) =>\n // `Data.array` does structural comparison on the array elements.\n Data.array(\n processes\n .filter((process) => process.state === Process.State.RUNNING || process.state === Process.State.HYBERNATING)\n .map(Data.struct),\n ),\n ),\n );\n\n return Atom.make((get) =>\n buildExecutionGraph({\n traceMessages: get(traceMessages),\n activeProcesses: get(activeProcesses),\n eventLimit,\n }),\n );\n};\nTracePanel.displayName = 'TracePanel';\n\n// Isolate `ProcessTree` updates from the rest of the panel.\n// TODO(dmaretskyi): Currently not useful since `useExecutionGraph` also pulls in the updates.\nconst ProcessTreeContainer = ({\n onProcessSelect,\n onProcessTerminate,\n}: Pick<ProcessTreeProps, 'onProcessSelect' | 'onProcessTerminate'>) => {\n const monitor = useCapability(Capabilities.ProcessMonitor);\n const processes = useAtomValue(\n useMemo(() => monitor?.processTreeAtom.pipe(Atom.debounce(Duration.millis(500))) ?? atomEmpty, [monitor]),\n );\n\n // `processes` updates in bursts (about 14 updates per navigation).\n // `useDeferredValue` will debounce update propagation, returning stale value for short periods.\n // NOTE: `ProcessTree` MUST use `React.memo`, otherwise this will not work.\n const processesDeferred = useDeferredValue(processes);\n return (\n <ProcessTree\n processes={processesDeferred}\n onProcessSelect={onProcessSelect}\n onProcessTerminate={onProcessTerminate}\n />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { TracePanel } from './TracePanel';\n\nexport * from './TracePanel';\n\nexport default TracePanel;\n"],
5
- "mappings": "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",
6
- "names": ["Atom", "useAtomValue", "Data", "Duration", "pipe", "React", "useCallback", "useDeferredValue", "useEffect", "useMemo", "useState", "Capabilities", "useCapability", "useAtomCapability", "useOperationInvoker", "LayoutOperation", "Process", "Trace", "Filter", "Query", "FeedTraceSink", "EID", "ScrollContainer", "composable", "composableProps", "useAttentionAttributes", "Timeline", "Syntax", "mx", "ProcessTree", "buildExecutionGraph", "AssistantCapabilities", "TracePanel", "space", "attendableId", "onProcessTerminate", "props", "forwardedRef", "attentionAttrs", "invokePromise", "settings", "Settings", "tracePanelDebug", "branches", "commits", "spanTree", "details", "useExecutionGraph", "traceMessages", "useTraceMessages", "env", "DEV", "debugGlobal", "globalThis", "dxosDumpTrace", "data", "map", "message", "meta", "isEphemeral", "events", "json", "JSON", "stringify", "console", "log", "navigator", "clipboard", "writeText", "length", "selectedCommit", "setSelectedCommit", "handleCommitSelect", "commit", "link", "echoUri", "tryParse", "spaceId", "getSpaceId", "undefined", "objectId", "getEntityId", "Open", "subject", "currentBranch", "setCurrentBranch", "handleProcessSelect", "process", "branch", "find", "pid", "toString", "div", "classNames", "ref", "ProcessTreeContainer", "onProcessSelect", "Root", "pin", "Content", "thin", "Fade", "Viewport", "Code", "className", "compact", "onSelect", "ScrollDownButton", "id", "atomEmpty", "make", "eventLimit", "monitor", "ProcessMonitor", "processesAtom", "processTreeAtom", "atom", "getExecutionGraph", "getTraceMessagesAtom", "db", "query", "feeds", "type", "Message", "from", "select", "nothing", "get", "activeProcesses", "debounce", "millis", "processes", "array", "filter", "state", "State", "RUNNING", "HYBERNATING", "struct", "displayName", "processesDeferred", "TracePanel"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/TriggerStatus/TriggerStatus.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { type InvocationsState } from '@dxos/functions-runtime';\nimport { useTriggerRuntimeControls } from '@dxos/plugin-automation/hooks';\nimport { StatusBar } from '@dxos/plugin-status-bar/components';\nimport { useObject } from '@dxos/react-client/echo';\nimport { IconButton, Popover, useTranslation } from '@dxos/react-ui';\n\nimport { meta } from '#meta';\n\ntype TriggerStatusState = 'disabled' | 'idle' | 'running' | 'edge' | 'error';\n\nconst getIcon = (state: TriggerStatusState): string => {\n switch (state) {\n case 'disabled':\n return 'ph--lightning-slash--regular';\n case 'idle':\n return 'ph--lightning--regular';\n case 'edge':\n return 'ph--lightning--regular';\n case 'running':\n return 'ph--lightning--fill';\n case 'error':\n return 'ph--warning--regular';\n }\n};\n\nconst getIconClassNames = (state: TriggerStatusState): string | undefined => {\n switch (state) {\n case 'running':\n return 'animate-pulse text-accent-text';\n case 'error':\n return 'text-error-text';\n default:\n return undefined;\n }\n};\n\nexport type SpaceStatusProps = AppSurface.SpaceArticleProps;\n\nexport const SpaceStatus = ({ space }: SpaceStatusProps) => {\n const { t } = useTranslation(meta.id);\n const { state } = useTriggerRuntimeControls(space.db);\n const isEnabled = state?.enabled ?? false;\n const [properties] = useObject(space.properties);\n const computeEnvironment = properties.computeEnvironment ?? 'local';\n\n // Determine the current trigger status state.\n const triggerState: TriggerStatusState = useMemo(() => {\n if (computeEnvironment === 'edge') {\n return 'edge';\n }\n\n if (!isEnabled) {\n return 'disabled';\n }\n\n // Check if there's any pending invocation.\n const hasPending = state?.invocations.some((invocation) => invocation.result === null);\n if (hasPending) {\n return 'running';\n }\n\n // Check if the last invocation failed.\n const lastInvocation = state?.invocations.at(-1);\n if (lastInvocation?.result?._tag === 'Failure') {\n return 'error';\n }\n\n return 'idle';\n }, [computeEnvironment, isEnabled, state?.invocations]);\n\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <StatusBar.Item>\n <IconButton\n variant='ghost'\n icon={getIcon(triggerState)}\n iconOnly\n label={t(`trigger-status-${triggerState}.label`)}\n classNames={getIconClassNames(triggerState)}\n />\n </StatusBar.Item>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content side='left'>\n <TriggerStatusPopover\n state={triggerState}\n currentFunctionName={\n state?.invocations.at(-1)?.function?.meta.name ?? state?.invocations.at(-1)?.function?.meta.key\n }\n lastInvocation={state?.invocations.at(-1)}\n />\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n\ntype TriggerStatusPopoverProps = {\n state: TriggerStatusState;\n currentFunctionName?: string;\n lastInvocation?: InvocationsState;\n};\n\nconst TriggerStatusPopover = ({\n state,\n currentFunctionName,\n lastInvocation, // TODO(burdon): Show.\n}: TriggerStatusPopoverProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <div className='flex flex-col gap-2 p-2 w-[240px]'>\n <div className='flex flex-col gap-1'>\n <div className='text-sm'>{t(`trigger-status-${state}.label`)}</div>\n {currentFunctionName && state === 'running' && (\n <div className='text-xs text-description'>{currentFunctionName}</div>\n )}\n </div>\n </div>\n );\n};\n"],
5
- "mappings": ";;;AAIA,OAAOA,SAASC,eAAe;AAI/B,SAASC,iCAAiC;AAC1C,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAC1B,SAASC,YAAYC,SAASC,sBAAsB;AAEpD,SAASC,YAAY;AAIrB,IAAMC,UAAU,CAACC,UAAAA;AACf,UAAQA,OAAAA;IACN,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;EACX;AACF;AAEA,IAAMC,oBAAoB,CAACD,UAAAA;AACzB,UAAQA,OAAAA;IACN,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT;AACE,aAAOE;EACX;AACF;AAIO,IAAMC,cAAc,CAAC,EAAEC,MAAK,MAAoB;AACrD,QAAM,EAAEC,EAAC,IAAKR,eAAeC,KAAKQ,EAAE;AACpC,QAAM,EAAEN,MAAK,IAAKR,0BAA0BY,MAAMG,EAAE;AACpD,QAAMC,YAAYR,OAAOS,WAAW;AACpC,QAAM,CAACC,UAAAA,IAAchB,UAAUU,MAAMM,UAAU;AAC/C,QAAMC,qBAAqBD,WAAWC,sBAAsB;AAG5D,QAAMC,eAAmCrB,QAAQ,MAAA;AAC/C,QAAIoB,uBAAuB,QAAQ;AACjC,aAAO;IACT;AAEA,QAAI,CAACH,WAAW;AACd,aAAO;IACT;AAGA,UAAMK,aAAab,OAAOc,YAAYC,KAAK,CAACC,eAAeA,WAAWC,WAAW,IAAA;AACjF,QAAIJ,YAAY;AACd,aAAO;IACT;AAGA,UAAMK,iBAAiBlB,OAAOc,YAAYK,GAAG,EAAC;AAC9C,QAAID,gBAAgBD,QAAQG,SAAS,WAAW;AAC9C,aAAO;IACT;AAEA,WAAO;EACT,GAAG;IAACT;IAAoBH;IAAWR,OAAOc;GAAY;AAEtD,SACE,sBAAA,cAAClB,QAAQyB,MAAI,MACX,sBAAA,cAACzB,QAAQ0B,SAAO;IAACC,SAAAA;KACf,sBAAA,cAAC9B,UAAU+B,MAAI,MACb,sBAAA,cAAC7B,YAAAA;IACC8B,SAAQ;IACRC,MAAM3B,QAAQa,YAAAA;IACde,UAAAA;IACAC,OAAOvB,EAAE,kBAAkBO,YAAAA,QAAoB;IAC/CiB,YAAY5B,kBAAkBW,YAAAA;QAIpC,sBAAA,cAAChB,QAAQkC,QAAM,MACb,sBAAA,cAAClC,QAAQmC,SAAO;IAACC,MAAK;KACpB,sBAAA,cAACC,sBAAAA;IACCjC,OAAOY;IACPsB,qBACElC,OAAOc,YAAYK,GAAG,EAAC,GAAIgB,UAAUrC,KAAKsC,QAAQpC,OAAOc,YAAYK,GAAG,EAAC,GAAIgB,UAAUrC,KAAKuC;IAE9FnB,gBAAgBlB,OAAOc,YAAYK,GAAG,EAAC;MAEzC,sBAAA,cAACvB,QAAQ0C,OAAK,IAAA,CAAA,CAAA,CAAA;AAKxB;AAQA,IAAML,uBAAuB,CAAC,EAC5BjC,OACAkC,qBACAhB,eAAc,MACY;AAC1B,QAAM,EAAEb,EAAC,IAAKR,eAAeC,KAAKQ,EAAE;AAEpC,SACE,sBAAA,cAACiC,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACD,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACD,OAAAA;IAAIC,WAAU;KAAWnC,EAAE,kBAAkBL,KAAAA,QAAa,CAAA,GAC1DkC,uBAAuBlC,UAAU,aAChC,sBAAA,cAACuC,OAAAA;IAAIC,WAAU;KAA4BN,mBAAAA,CAAAA,CAAAA;AAKrD;",
6
- "names": ["React", "useMemo", "useTriggerRuntimeControls", "StatusBar", "useObject", "IconButton", "Popover", "useTranslation", "meta", "getIcon", "state", "getIconClassNames", "undefined", "SpaceStatus", "space", "t", "id", "db", "isEnabled", "enabled", "properties", "computeEnvironment", "triggerState", "hasPending", "invocations", "some", "invocation", "result", "lastInvocation", "at", "_tag", "Root", "Trigger", "asChild", "Item", "variant", "icon", "iconOnly", "label", "classNames", "Portal", "Content", "side", "TriggerStatusPopover", "currentFunctionName", "function", "name", "key", "Arrow", "div", "className"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport { pipe } from 'effect/Function';\nimport * as Option from 'effect/Option';\n\nimport { Capability } from '@dxos/app-framework';\nimport {\n AppCapabilities,\n AppNode,\n LayoutOperation,\n createTypeSectionExtension,\n createTypeSectionPathResolver,\n getActiveSpace,\n getPersonalSpace,\n} from '@dxos/app-toolkit';\nimport { AgentPrompt, Chat } from '@dxos/assistant-toolkit';\nimport { isSpace } from '@dxos/client/echo';\nimport { Operation, Routine } from '@dxos/compute';\nimport { Sequence } from '@dxos/conductor';\nimport { DXN, Database, Filter, Obj, Query, Type, type Ref } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { GraphBuilder, Node, NodeMatcher } from '@dxos/plugin-graph';\nimport { SpaceOperation } from '@dxos/plugin-space';\nimport { linkedSegment } from '@dxos/react-ui-attention';\n\nimport { ASSISTANT_COMPANION_VARIANT, meta } from '#meta';\nimport { AssistantCapabilities, AssistantOperation } from '#types';\n\nimport { getChatsPath } from '../paths';\n\n/** Operation definitions to seed as `PersistentOperation` records for automation / triggers. */\nconst computeOperationsToImport = [AgentPrompt] as const;\n\n/** Match ECHO objects that are NOT chats. */\nconst whenNonChatObject = NodeMatcher.whenAll(\n NodeMatcher.whenEchoObject,\n NodeMatcher.whenNot(NodeMatcher.whenEchoTypeMatches(Chat.Chat)),\n);\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n\n const extensions = yield* Effect.all([\n GraphBuilder.createTypeExtension({\n id: 'root',\n type: Chat.Chat,\n actions: (chat) => {\n return Effect.succeed([\n Node.makeAction({\n id: AssistantOperation.UpdateChatName.meta.key,\n data: () =>\n Effect.gen(function* () {\n // TODO(dmaretskyi): This goes away when composer will have unified operation invocations.\n const db = Obj.getDatabase(chat);\n invariant(db);\n yield* Operation.invoke(AssistantOperation.UpdateChatName, { chat }, { spaceId: db.spaceId });\n }),\n properties: {\n label: ['chat-update-name.label', { ns: meta.id }],\n icon: 'ph--magic-wand--regular',\n disposition: 'list-item',\n },\n }),\n ]);\n },\n }),\n\n GraphBuilder.createExtension({\n id: 'assistant',\n match: NodeMatcher.whenRoot,\n actions: () =>\n Effect.succeed([\n Node.makeAction({\n id: 'importComputeOperations',\n data: Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n const client = yield* Capability.get(ClientCapabilities.Client);\n const space = getActiveSpace(client, capabilities) ?? getPersonalSpace(client);\n if (!space) {\n return;\n }\n for (const definition of computeOperationsToImport) {\n const key = definition.meta.key;\n if (!key) {\n continue;\n }\n const existing = yield* Effect.promise(\n (): Promise<Operation.PersistentOperation[]> =>\n space.db.query(Filter.and(Filter.type(Operation.PersistentOperation), Filter.key(key))).run(),\n );\n if (existing.length === 0) {\n space.db.add(Operation.serialize(definition));\n }\n }\n yield* Database.flush();\n }),\n properties: {\n label: ['import-compute-operations.label', { ns: meta.id }],\n icon: 'ph--download-simple--regular',\n },\n }),\n Node.makeAction({\n id: AssistantOperation.ToggleTracePanelDebug.meta.key,\n data: () => Operation.invoke(AssistantOperation.ToggleTracePanelDebug, {}),\n properties: {\n label: ['toggle-trace-panel-debug.label', { ns: meta.id }],\n icon: 'ph--brackets-curly--regular',\n },\n }),\n ]),\n }),\n\n // Don't show assistant companion when a chat is already the primary object.\n GraphBuilder.createExtension({\n id: 'companionChat',\n match: whenNonChatObject,\n connector: (object, get) =>\n Effect.gen(function* () {\n const state = get(yield* Capability.get(AssistantCapabilities.State));\n const cache = get(yield* Capability.get(AssistantCapabilities.CompanionChatCache));\n const objectUri = Obj.getURI(object);\n\n // Resolve chat from persisted state or transient cache.\n const chat = pipe(\n Option.fromNullable(state.currentChat[objectUri]),\n Option.flatMap((dxnStr) => Option.fromNullable(DXN.tryMake(dxnStr))),\n Option.flatMap((dxn) => Option.fromNullable(Obj.getDatabase(object)?.makeRef(dxn))),\n Option.map((ref) => get(Obj.atom(ref as Ref.Ref<Obj.Unknown>))),\n Option.filter(Obj.isObject),\n Option.orElse(() => pipe(Option.fromNullable(cache[objectUri]), Option.filter(Obj.isObject))),\n Option.getOrNull,\n );\n\n return [\n AppNode.makeCompanion({\n id: linkedSegment(ASSISTANT_COMPANION_VARIANT),\n label: ['assistant-chat.label', { ns: meta.id }],\n icon: 'ph--sparkle--regular',\n data: chat,\n position: 'first',\n }),\n ];\n }),\n }),\n\n GraphBuilder.createExtension({\n id: 'invocations',\n match: NodeMatcher.whenAny(\n NodeMatcher.whenEchoTypeMatches(Sequence.Sequence),\n NodeMatcher.whenEchoTypeMatches(Routine.Routine),\n ),\n connector: () =>\n Effect.succeed([\n AppNode.makeCompanion({\n id: 'invocations',\n label: ['invocations.label', { ns: meta.id }],\n icon: 'ph--clock-countdown--regular',\n data: 'invocations',\n }),\n ]),\n }),\n\n GraphBuilder.createExtension({\n id: 'trace',\n match: NodeMatcher.whenRoot,\n connector: () =>\n Effect.succeed([\n AppNode.makeDeckCompanion({\n id: linkedSegment('trace'),\n label: ['trace.label', { ns: meta.id }],\n icon: 'ph--line-segments--regular',\n data: 'trace' as const,\n position: 'last',\n }),\n ]),\n }),\n\n // Section node: standalone Chat.Chat objects per space (companions are excluded).\n createTypeSectionExtension(Chat.Chat, {\n // Exclude chats that are the source of a CompanionTo relation; those belong to\n // their primary object's companion panel and should not appear in the top-level list.\n query: Query.without(\n Query.select(Filter.type(Chat.Chat)),\n Query.select(Filter.type(Chat.Chat)).sourceOf(Chat.CompanionTo).source(),\n ),\n }),\n\n // Create-chat action on the Chats section header.\n GraphBuilder.createExtension({\n id: 'chatsSectionActions',\n match: (node) => {\n const space = isSpace(node.properties.space) ? node.properties.space : undefined;\n return node.type === Type.getTypename(Chat.Chat) && space ? Option.some(space) : Option.none();\n },\n actions: (space) =>\n Effect.succeed([\n Node.makeAction({\n id: 'create-chat',\n data: () =>\n Effect.gen(function* () {\n const { object: chat } = yield* Operation.invoke(\n AssistantOperation.CreateChat,\n { db: space.db },\n { spaceId: space.db.spaceId },\n );\n const { subject } = yield* Operation.invoke(\n SpaceOperation.AddObject,\n { object: chat, target: space.db, hidden: true, targetNodeId: getChatsPath(space.db.spaceId) },\n { spaceId: space.db.spaceId },\n );\n yield* Operation.invoke(\n LayoutOperation.Open,\n { subject: [...subject] },\n { spaceId: space.db.spaceId },\n );\n }),\n properties: {\n label: ['create-chat.label', { ns: meta.id }],\n icon: 'ph--plus--regular',\n disposition: 'list-item-primary',\n },\n }),\n ]),\n }),\n ]);\n\n return [\n Capability.contributes(AppCapabilities.AppGraphBuilder, extensions),\n Capability.contributes(AppCapabilities.NavigationPathResolver, createTypeSectionPathResolver(Chat.Chat)),\n ];\n }),\n);\n"],
5
- "mappings": "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",
6
- "names": ["Effect", "pipe", "Option", "Capability", "AppCapabilities", "AppNode", "LayoutOperation", "createTypeSectionExtension", "createTypeSectionPathResolver", "getActiveSpace", "getPersonalSpace", "AgentPrompt", "Chat", "isSpace", "Operation", "Routine", "Sequence", "DXN", "Database", "Filter", "Obj", "Query", "Type", "invariant", "ClientCapabilities", "GraphBuilder", "Node", "NodeMatcher", "SpaceOperation", "linkedSegment", "ASSISTANT_COMPANION_VARIANT", "meta", "AssistantCapabilities", "AssistantOperation", "Service", "extensions", "GraphBuilder", "createTypeExtension", "Chat", "actions", "Effect", "Node", "makeAction", "AssistantOperation", "data", "db", "Obj", "getDatabase", "Operation", "chat", "spaceId", "properties", "label", "icon", "disposition", "NodeMatcher", "whenRoot", "client", "Capability", "space", "getActiveSpace", "capabilities", "key", "serialize", "definition", "whenNonChatObject", "connector", "cache", "AssistantCapabilities", "objectUri", "getURI", "object", "Option", "fromNullable", "AppNode", "makeCompanion", "position", "whenAny", "makeDeckCompanion", "linkedSegment", "createTypeSectionExtension", "node", "succeed", "subject", "target", "hidden", "targetNodeId", "getChatsPath", "invoke"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/blueprint-definition.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 { AppCapabilities } from '@dxos/app-toolkit';\nimport {\n AgentBlueprint,\n AgentBlueprintHandlers,\n AgentHandlers,\n AgentWizardBlueprint,\n AgentWizardHandlers,\n BlueprintManagerBlueprint,\n BlueprintManagerHandlers,\n BrowserBlueprint,\n DatabaseBlueprint,\n DatabaseHandlers,\n DiscordBlueprint,\n LinearBlueprint,\n PlanningBlueprint,\n WebSearchBlueprint,\n WebSearchHandlers,\n MemoryBlueprint,\n AutomationBlueprint,\n DelegationBlueprint,\n DelegationHandlers,\n makeDelegationStrategy,\n} from '@dxos/assistant-toolkit';\nimport { AutomationCapabilities } from '@dxos/plugin-automation';\n\nimport { AssistantBlueprint } from '#blueprints';\n\n// NOTE: Explicit annotation required: d.ts emit cannot portably name the inferred @dxos/compute types (TS2883).\nconst blueprintDefinition: () => Effect.Effect<Capability.Capability<unknown>[]> = () =>\n Effect.succeed([\n Capability.contributes(AppCapabilities.BlueprintDefinition, AssistantBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, BrowserBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, DatabaseBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, WebSearchBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, DiscordBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, LinearBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, AgentBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, PlanningBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, MemoryBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, AutomationBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, BlueprintManagerBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, AgentWizardBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, DelegationBlueprint),\n\n Capability.contributes(Capabilities.OperationHandler, AgentHandlers),\n Capability.contributes(Capabilities.OperationHandler, AgentBlueprintHandlers),\n Capability.contributes(Capabilities.OperationHandler, BlueprintManagerHandlers),\n Capability.contributes(Capabilities.OperationHandler, DatabaseHandlers),\n Capability.contributes(Capabilities.OperationHandler, WebSearchHandlers),\n Capability.contributes(Capabilities.OperationHandler, AgentWizardHandlers),\n Capability.contributes(Capabilities.OperationHandler, DelegationHandlers),\n\n // Run the conversational agent as a supervisor: delegate in-progress plan tasks to sub-agents\n // and fold their results back into the conversation (consumed by the AgentService LayerSpec).\n Capability.contributes(AutomationCapabilities.AgentDelegationStrategy, makeDelegationStrategy()),\n ]);\n\nexport default blueprintDefinition;\n"],
5
- "mappings": ";;;AAIA,YAAYA,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,uBAAuB;AAChC,SACEC,gBACAC,wBACAC,eACAC,sBACAC,qBACAC,2BACAC,0BACAC,kBACAC,mBACAC,kBACAC,kBACAC,iBACAC,mBACAC,oBACAC,mBACAC,iBACAC,qBACAC,qBACAC,oBACAC,8BACK;AACP,SAASC,8BAA8B;AAEvC,SAASC,0BAA0B;AAGnC,IAAMC,sBAA6E,MAC1EC,eAAQ;EACbzB,WAAW0B,YAAYzB,gBAAgB0B,qBAAqBJ,kBAAAA;EAC5DvB,WAAW0B,YAAYzB,gBAAgB0B,qBAAqBlB,gBAAAA;EAC5DT,WAAW0B,YAAYzB,gBAAgB0B,qBAAqBjB,iBAAAA;EAC5DV,WAAW0B,YAAYzB,gBAAgB0B,qBAAqBZ,kBAAAA;EAC5Df,WAAW0B,YAAYzB,gBAAgB0B,qBAAqBf,gBAAAA;EAC5DZ,WAAW0B,YAAYzB,gBAAgB0B,qBAAqBd,eAAAA;EAC5Db,WAAW0B,YAAYzB,gBAAgB0B,qBAAqBzB,cAAAA;EAC5DF,WAAW0B,YAAYzB,gBAAgB0B,qBAAqBb,iBAAAA;EAC5Dd,WAAW0B,YAAYzB,gBAAgB0B,qBAAqBV,eAAAA;EAC5DjB,WAAW0B,YAAYzB,gBAAgB0B,qBAAqBT,mBAAAA;EAC5DlB,WAAW0B,YAAYzB,gBAAgB0B,qBAAqBpB,yBAAAA;EAC5DP,WAAW0B,YAAYzB,gBAAgB0B,qBAAqBtB,oBAAAA;EAC5DL,WAAW0B,YAAYzB,gBAAgB0B,qBAAqBR,mBAAAA;EAE5DnB,WAAW0B,YAAY3B,aAAa6B,kBAAkBxB,aAAAA;EACtDJ,WAAW0B,YAAY3B,aAAa6B,kBAAkBzB,sBAAAA;EACtDH,WAAW0B,YAAY3B,aAAa6B,kBAAkBpB,wBAAAA;EACtDR,WAAW0B,YAAY3B,aAAa6B,kBAAkBjB,gBAAAA;EACtDX,WAAW0B,YAAY3B,aAAa6B,kBAAkBZ,iBAAAA;EACtDhB,WAAW0B,YAAY3B,aAAa6B,kBAAkBtB,mBAAAA;EACtDN,WAAW0B,YAAY3B,aAAa6B,kBAAkBR,kBAAAA;;;EAItDpB,WAAW0B,YAAYJ,uBAAuBO,yBAAyBR,uBAAAA,CAAAA;CACxE;AAEH,IAAA,+BAAeG;",
6
- "names": ["Effect", "Capabilities", "Capability", "AppCapabilities", "AgentBlueprint", "AgentBlueprintHandlers", "AgentHandlers", "AgentWizardBlueprint", "AgentWizardHandlers", "BlueprintManagerBlueprint", "BlueprintManagerHandlers", "BrowserBlueprint", "DatabaseBlueprint", "DatabaseHandlers", "DiscordBlueprint", "LinearBlueprint", "PlanningBlueprint", "WebSearchBlueprint", "WebSearchHandlers", "MemoryBlueprint", "AutomationBlueprint", "DelegationBlueprint", "DelegationHandlers", "makeDelegationStrategy", "AutomationCapabilities", "AssistantBlueprint", "blueprintDefinition", "succeed", "contributes", "BlueprintDefinition", "OperationHandler", "AgentDelegationStrategy"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/paths.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { createTypeSectionPaths } from '@dxos/app-toolkit';\nimport { Chat } from '@dxos/assistant-toolkit';\n\nconst { getSectionPath: getChatsPath, getObjectPath: getChatPath } = createTypeSectionPaths(Chat.Chat);\n\nexport { getChatsPath, getChatPath };\n"],
5
- "mappings": ";AAIA,SAASA,8BAA8B;AACvC,SAASC,YAAY;AAErB,IAAM,EAAEC,gBAAgBC,cAAcC,eAAeC,YAAW,IAAKL,uBAAuBC,KAAKA,IAAI;",
6
- "names": ["createTypeSectionPaths", "Chat", "getSectionPath", "getChatsPath", "getObjectPath", "getChatPath"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/AssistantPlugin.ts", "raw-loader:/__w/dxos/dxos/packages/plugins/plugin-assistant/PLUGIN.mdl?raw"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { ActivationEvent, ActivationEvents, Capability, Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\nimport { AiContext } from '@dxos/assistant';\nimport { Agent, Chat, McpServer, Memory, Plan } from '@dxos/assistant-toolkit';\nimport { Blueprint, Routine } from '@dxos/compute';\nimport { Sequence } from '@dxos/conductor';\nimport { Feed } from '@dxos/echo';\nimport { ClientEvents } from '@dxos/plugin-client';\nimport { DeckEvents } from '@dxos/plugin-deck';\nimport { MarkdownEvents } from '@dxos/plugin-markdown';\nimport { Text } from '@dxos/schema';\nimport { HasSubject, Message } from '@dxos/types';\n\nimport {\n AgentHydrator,\n AgentRuntime,\n AiContext as AiContextCapability,\n AiService,\n IntegrationProvider,\n AppGraphBuilder,\n AutomationTemplates,\n AssistantState,\n BlueprintDefinition,\n CompanionChatProvisioner,\n CreateObject,\n EdgeModelResolver,\n LocalModelResolver,\n MarkdownExtension,\n Migrations,\n OperationHandler,\n ReactSurface,\n Settings,\n Toolkit,\n} from '#capabilities';\nimport { meta } from '#meta';\nimport { translations } from '#translations';\nimport { AssistantEvents, type AssistantPluginOptions } from '#types';\n\n// eslint-disable-next-line import/no-relative-packages\nimport pluginSpec from '../PLUGIN.mdl?raw';\n\nconst StateReady = AppActivationEvents.createStateEvent(meta.id);\n\nexport const AssistantPlugin = Plugin.define<AssistantPluginOptions | void>(meta)\n .pipe(\n AppPlugin.addAppGraphModule({ activate: AppGraphBuilder }),\n AppPlugin.addBlueprintDefinitionModule({ activate: BlueprintDefinition }),\n AppPlugin.addCreateObjectModule({ activate: CreateObject }),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n AppPlugin.addSchemaModule({\n schema: [\n Chat.Chat,\n Chat.CompanionTo,\n Blueprint.Blueprint,\n AiContext.Binding,\n Feed.Feed,\n HasSubject.HasSubject,\n Message.Message,\n Routine.Routine,\n Agent.Agent,\n McpServer.McpServer,\n Plan.Plan,\n Sequence.Sequence,\n Memory.Memory,\n Text.Text,\n ],\n }),\n AppPlugin.addSettingsModule({ activate: Settings }),\n AppPlugin.addSurfaceModule({\n activate: ReactSurface,\n firesBeforeActivation: [AppActivationEvents.SetupArtifactDefinition],\n }),\n AppPlugin.addTranslationsModule({ translations }),\n Plugin.addModule({\n id: 'automation-templates',\n activatesOn: AppActivationEvents.SetupSchema,\n activate: AutomationTemplates,\n }),\n Plugin.addModule({\n id: 'markdown',\n activatesOn: MarkdownEvents.SetupExtensions,\n activate: MarkdownExtension,\n }),\n Plugin.addModule({\n // TODO(wittjosiah): Does not integrate with settings store.\n // Should this be a different event?\n // Should settings store be renamed to be more generic?\n activatesOn: AppActivationEvents.SetupSettings,\n firesAfterActivation: [StateReady],\n activate: AssistantState,\n }),\n Plugin.addModule({\n activatesOn: AssistantEvents.SetupAiServiceProviders,\n activate: EdgeModelResolver,\n }),\n Plugin.addModule({\n activatesOn: AssistantEvents.SetupAiServiceProviders,\n activate: LocalModelResolver,\n }),\n Plugin.addModule((options) => ({\n id: Capability.getModuleTag(AiService),\n firesBeforeActivation: [AssistantEvents.SetupAiServiceProviders],\n // TODO(dmaretskyi): This should activate lazily when the AI chat is used.\n activatesOn: ActivationEvents.SetupProcessManager,\n activate: () => AiService(options),\n })),\n Plugin.addModule({\n // Process-affinity `AiContext.Service` LayerSpec — needed so operations\n // dispatched as their own processes (e.g. via `Operation.invoke` from\n // `AiSession.createRequest` or `TriggerDispatcher`) can resolve\n // conversation-scoped services without an inline `Effect.provideService`\n // upstream. See `capabilities/ai-context.ts` for the rationale.\n activatesOn: ActivationEvents.SetupProcessManager,\n activate: AiContextCapability,\n }),\n Plugin.addModule({\n activatesOn: ActivationEvents.SetupProcessManager,\n activate: AgentRuntime,\n }),\n )\n .pipe(\n Plugin.addModule({\n // TODO(wittjosiah): Use a different event.\n activatesOn: ActivationEvents.Startup,\n activate: Toolkit,\n }),\n Plugin.addModule({\n activatesOn: ActivationEvents.ProcessManagerReady,\n activate: AgentHydrator,\n }),\n Plugin.addModule({\n activatesOn: ActivationEvent.allOf(\n ActivationEvents.ProcessManagerReady,\n AppActivationEvents.AppGraphReady,\n DeckEvents.StateReady,\n StateReady,\n ),\n activate: CompanionChatProvisioner,\n }),\n Plugin.addModule({\n activatesOn: ClientEvents.SetupMigration,\n activate: Migrations,\n }),\n Plugin.addModule({\n activatesOn: AppActivationEvents.SetupIntegrationProviders,\n activate: IntegrationProvider,\n }),\n AppPlugin.addPluginAssetModule({\n asset: { pluginId: meta.id, path: 'PLUGIN.mdl', content: pluginSpec, mimeType: 'application/x-mdl' },\n }),\n Plugin.make,\n );\n\nexport default AssistantPlugin;\n", "---\nid: org.dxos.plugin.assistant\nname: AssistantPlugin\nversion: 0.1.0\n---\n\nAn AI assistant plugin for DXOS Composer that provides conversational AI, blueprint-driven automation,\nmulti-provider LLM support, and deep ECHO integration.\n\n## Extensions\n\nThe following extension dialects are used in this document.\nEach extension is defined in the Appendix or resolved via its URI.\n\n| Term | URI |\n|-------------|-------------------------------|\n| `type` | `org.dxos.mdl.type@1.0` |\n| `feat` | `org.dxos.mdl.feat@1.0` |\n| `test` | `org.dxos.mdl.test@1.0` |\n| `component` | `org.dxos.mdl.component@1.0` |\n| `op` | `org.dxos.mdl.op@1.0` |\n\n## Types\n\n```mdl\ntype ModelProvider\n literals: edge | ollama | lmstudio\n```\n\n```mdl\ntype ChatView\n literals: normal | summary | thinking | debug\n```\n\n```mdl\ntype ModelDefaults\n fields:\n edge?: string\n ollama?: string\n lmstudio?: string\n```\n\n```mdl\ntype Settings\n fields:\n customPrompts?: boolean\n chatView?: ChatView\n modelProvider?: ModelProvider\n modelDefaults?: ModelDefaults\n tracePanelDebug?: boolean\n```\n\n```mdl\ntype Chat\n fields:\n id: string\n name?: string\n messages: Message[]\n```\n\n```mdl\ntype Message\n fields:\n id: string\n role: user | assistant | system\n content: string\n timestamp: string\n```\n\n```mdl\ntype NavigationTarget\n fields:\n path: string\n label: string\n type: string\n```\n\n```mdl\ntype BlueprintForm\n fields:\n key: string\n name: string\n description?: string\n```\n\n## Components\n\n```mdl\ncomponent ChatPanel\n desc: Main conversational interface for interacting with the AI assistant.\n props:\n chat: Chat\n companionTo?: Obj\n state:\n messages: Message[]\n pending: boolean\n view: ChatView\n slots:\n toolbar?: ReactNode\n empty?: ReactNode\n actions:\n sendMessage(content: string)\n clearHistory()\n switchView(view: ChatView)\n emits:\n onMessage(message: Message)\n layout: |\n \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 [toolbar slot] \u2502\n \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502 \u2502\n \u2502 message list \u2502\n \u2502 [empty slot] \u2502\n \u2502 \u2502\n \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502 input + send \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n```mdl\ncomponent TracePanel\n desc: Displays the execution trace of an AI operation as a commit graph or raw JSON.\n props:\n chat: Chat\n state:\n debug: boolean\n actions:\n toggleDebug()\n layout: |\n \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 trace / span tree \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n```mdl\ncomponent AssistantSettings\n desc: Settings panel for configuring the AI model provider, model defaults, and chat view.\n props:\n settings: Settings\n emits:\n onChange(settings: Settings)\n```\n\n## Operations\n\n```mdl\nop CreateChat\n desc: Creates a new Chat object and optionally adds it to the active space.\n input:\n db: Database\n name?: string\n addToSpace?: boolean\n output: Chat\n effects: [echo:write]\n```\n\n```mdl\nop UpdateChatName\n desc: Automatically derives and updates the name of a chat using the AI service.\n input:\n chat: Chat\n output: void\n effects: [echo:write, ai:infer]\n```\n\n```mdl\nop SetCurrentChat\n desc: Associates a primary object with a specific companion chat in session state.\n input:\n companionTo: Obj\n chat?: Chat\n output: void\n```\n\n```mdl\nop RunPromptInNewChat\n desc: Creates a new chat, binds context objects and blueprints, then runs a prompt.\n input:\n db: Database\n objects?: Obj[]\n blueprints?: string[]\n prompt: string | RoutineRef\n background?: boolean\n output: Chat\n effects: [echo:write, ai:infer]\n note: |\n When background is true, the prompt runs via the compute runtime without\n opening the chat UI. The returned Chat can be used to track progress.\n```\n\n```mdl\nop EnsureCompanionChat\n desc: Returns the companion chat for an object, creating one if none exists.\n input:\n db: Database\n companionTo: Obj\n output:\n chat: Chat\n persisted: boolean\n effects: [echo:write]\n```\n\n```mdl\nop ResolveNavigationTargets\n desc: Returns navigation paths for objects in the active space, optionally filtered by DXN.\n input:\n query?:\n dxn?: DXN\n output:\n targets: NavigationTarget[]\n```\n\n```mdl\nop OnCreateSpace\n desc: Provisions initial assistant objects when a new space is created.\n input:\n space: Space\n rootCollection: Collection\n output: void\n effects: [echo:write]\n```\n\n```mdl\nop ToggleTracePanelDebug\n desc: Toggles the trace panel between commit-graph and raw JSON debug view.\n input:\n state?: boolean\n output: boolean\n```\n\n## Features\n\n```mdl\nfeat F-1: AI Chat\n\n req F-1.1: User can create a new Chat object in any space.\n req F-1.2: User can type a message and receive a streamed AI response.\n req F-1.3: Chat history is persisted to ECHO and replicated to all peers.\n req F-1.4:\n when: chat has enough messages\n then: chat name is automatically derived from the conversation\n```\n\n```mdl\nfeat F-2: Companion Chat\n\n req F-2.1:\n when: user opens an object that supports companions\n then: a companion chat panel is shown alongside the object\n req F-2.2:\n when: companion chat does not yet exist\n then: op:EnsureCompanionChat creates one and optionally persists it\n req F-2.3:\n when: user sends a message in the companion chat\n then: the primary object is automatically bound as AI context\n```\n\n```mdl\nfeat F-3: Blueprint System\n\n req F-3.1: Blueprints define named AI configurations (instructions, tools, model).\n req F-3.2: Built-in blueprints include: Assistant, Browser, Database, WebSearch, Discord, Linear, Agent, Planning, Memory, Automation, BlueprintManager, AgentWizard.\n req F-3.3:\n when: user selects a blueprint for a chat\n then: chat uses that blueprint's instructions and tool set\n req F-3.4: op:RunPromptInNewChat accepts blueprint keys to bind before sending the prompt.\n```\n\n```mdl\nfeat F-4: Multi-Provider LLM\n\n req F-4.1: Supported providers: DXOS Edge (remote), Ollama (local), LM Studio (local).\n req F-4.2: User can configure the active provider and per-provider default model in Settings.\n req F-4.3:\n when: the active provider is unavailable\n then: AiService falls back to the next registered resolver\n```\n\n```mdl\nfeat F-5: Tool Execution\n\n req F-5.1: The assistant blueprint exposes LayoutOperation.Open and ResolveNavigationTargets as tools.\n req F-5.2: Web search tool is registered via WebSearchToolkit.\n req F-5.3:\n when: AI invokes a tool during a conversation\n then: operation is dispatched via the compute runtime and result returned to the model\n```\n\n```mdl\nfeat F-6: ECHO Integration\n\n req F-6.1: Chat, CompanionTo, Blueprint, Feed, Message, Memory, Plan, Routine, Agent, McpServer, and Sequence schemas are registered with ECHO.\n req F-6.2:\n when: a new space is created\n then: op:OnCreateSpace provisions default assistant objects\n req F-6.3: AiContext.Binding schema supports binding ECHO objects as named context variables in a conversation.\n```\n\n```mdl\nfeat F-7: Execution Trace\n\n req F-7.1: Every AI operation produces a structured span tree captured in the TracePanel.\n req F-7.2: User can toggle between commit-graph and raw JSON views via op:ToggleTracePanelDebug.\n```\n\n## Acceptance\n\n```mdl\ntest T-1: Create chat and send message\n given: a space is open and the assistant plugin is active\n when: user creates a new Chat and sends \"Hello\"\n then:\n - Chat object appears in the space\n - AI response is appended to Chat.messages\n - Chat is persisted to ECHO\n```\n\n```mdl\ntest T-2: Companion chat provisioning\n given: user opens a document with no companion chat\n when: companion panel initializes\n then:\n - op:EnsureCompanionChat creates a new Chat\n - persisted === false until user sends a message\n```\n\n```mdl\ntest T-3: Blueprint binding\n given: a chat exists\n when: user binds the \"WebSearch\" blueprint key\n then:\n - blueprint instructions are applied to the next AI request\n - web search tool is available in the tool list\n```\n\n```mdl\ntest T-4: Model provider switch\n given: assistant settings are open\n when: user switches provider from edge to ollama\n then:\n - Settings.modelProvider === ollama\n - next AI request is routed to the Ollama resolver\n```\n\n```mdl\ntest T-5: Run prompt in background\n given: a database and a prompt string are available\n when: op:RunPromptInNewChat is called with background: true\n then:\n - a new Chat is created and returned\n - the prompt runs via compute runtime without opening the UI\n```\n\n```mdl\ntest T-6: Navigation target resolution\n given: active space contains documents and collections\n when: op:ResolveNavigationTargets is called with no query\n then:\n - returned targets include paths for all top-level navigable objects\n - each target has a non-empty label and type\n```\n\n```mdl\ntest T-7: Trace panel debug toggle\n given: trace panel is showing commit-graph view\n when: op:ToggleTracePanelDebug is invoked with no argument\n then:\n - tracePanelDebug setting flips to true\n - trace panel switches to raw JSON view\n```\n\n---\n\n## Appendix: Extension Definitions\n\nExtension block types used in this document are defined below using\nthe core `ext` primitive \u2014 the only construct the base language provides.\n\n```mdl\next type\n uri: org.dxos.mdl.type@1.0\n desc: A named data structure with typed fields and optional literals.\n fields:\n desc?: Prose\n fields?: FieldMap\n literals?: UnionList\n extends?: TypeRef[]\n```\n\n```mdl\next feat\n uri: org.dxos.mdl.feat@1.0\n desc: A named feature grouping one or more requirements.\n fields:\n desc?: Prose\n req: RequirementList\n nesting: self\n```\n\n```mdl\next test\n uri: org.dxos.mdl.test@1.0\n desc: An acceptance scenario expressed as given / when / then steps.\n fields:\n given?: Step | Step[]\n when?: Step | Step[]\n then: Step | Step[]\n tags?: TagList\n```\n\n```mdl\next component\n uri: org.dxos.mdl.component@1.0\n desc: A UI component with props, internal state, slots, actions, and events.\n fields:\n desc?: Prose\n props?: FieldMap\n state?: FieldMap\n slots?: FieldMap\n actions?: ActionMap\n emits?: EventMap\n layout?: CodeBlock\n```\n\n```mdl\next op\n uri: org.dxos.mdl.op@1.0\n desc: |\n A named operation with typed inputs, outputs, and declared errors.\n Pure ops have no effects or requires. Effectful ops declare both.\n fields:\n desc?: Prose\n input?: FieldMap\n output?: TypeExpr\n errors?: ErrorMap\n effects?: EffectList\n requires?: ServiceList\n note?: Prose\n```\n"],
5
- "mappings": "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",
6
- "names": ["ActivationEvent", "ActivationEvents", "Capability", "Plugin", "AppActivationEvents", "AppPlugin", "AiContext", "Agent", "Chat", "McpServer", "Memory", "Plan", "Blueprint", "Routine", "Sequence", "Feed", "ClientEvents", "DeckEvents", "MarkdownEvents", "Text", "HasSubject", "Message", "AgentHydrator", "AgentRuntime", "AiContextCapability", "AiService", "IntegrationProvider", "AppGraphBuilder", "AutomationTemplates", "AssistantState", "BlueprintDefinition", "CompanionChatProvisioner", "CreateObject", "EdgeModelResolver", "LocalModelResolver", "MarkdownExtension", "Migrations", "OperationHandler", "ReactSurface", "Settings", "Toolkit", "meta", "translations", "AssistantEvents", "StateReady", "AppActivationEvents", "createStateEvent", "meta", "id", "AssistantPlugin", "Plugin", "define", "pipe", "AppPlugin", "addAppGraphModule", "activate", "AppGraphBuilder", "addBlueprintDefinitionModule", "BlueprintDefinition", "addCreateObjectModule", "CreateObject", "addOperationHandlerModule", "OperationHandler", "addSchemaModule", "schema", "Chat", "CompanionTo", "Blueprint", "AiContext", "Binding", "Feed", "HasSubject", "Message", "Routine", "Agent", "McpServer", "Plan", "Sequence", "Memory", "Text", "addSettingsModule", "Settings", "addSurfaceModule", "ReactSurface", "firesBeforeActivation", "SetupArtifactDefinition", "addTranslationsModule", "translations", "addModule", "activatesOn", "SetupSchema", "AutomationTemplates", "MarkdownEvents", "SetupExtensions", "MarkdownExtension", "SetupSettings", "firesAfterActivation", "AssistantState", "AssistantEvents", "SetupAiServiceProviders", "EdgeModelResolver", "LocalModelResolver", "options", "Capability", "getModuleTag", "AiService", "ActivationEvents", "SetupProcessManager", "AiContextCapability", "AgentRuntime", "Startup", "Toolkit", "ProcessManagerReady", "AgentHydrator", "ActivationEvent", "allOf", "AppGraphReady", "DeckEvents", "CompanionChatProvisioner", "ClientEvents", "SetupMigration", "Migrations", "SetupIntegrationProviders", "IntegrationProvider", "addPluginAssetModule", "asset", "pluginId", "path", "content", "pluginSpec", "mimeType", "make"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/ChatArticle/ChatArticle.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef, useEffect, useRef } from 'react';\n\nimport { Capabilities } from '@dxos/app-framework';\nimport { useAtomCapability, useCapability } from '@dxos/app-framework/ui';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { getSpace } from '@dxos/client/echo';\nimport { type Obj } from '@dxos/echo';\nimport { useRegistry } from '@dxos/react-client/echo';\nimport { Panel } from '@dxos/react-ui';\n\nimport { Chat as ChatComponent, type ChatRootProps } from '#components';\nimport { useChatProcessor, useChatServices, useOnline, usePresets } from '#hooks';\nimport { type Assistant, AssistantCapabilities, type ChatType } from '#types';\n\nexport type ChatArticleProps = AppSurface.ObjectSectionProps<ChatType.Chat> & {\n companionTo?: Obj.Unknown;\n} & Pick<ChatRootProps, 'onEvent' | 'onSubmit'>;\n\nexport const ChatArticle = forwardRef<HTMLDivElement, ChatArticleProps>(\n ({ role, attendableId, subject: chat, companionTo, onEvent, onSubmit }, forwardedRef) => {\n const registry = useRegistry();\n const settings = useAtomCapability(AssistantCapabilities.Settings);\n const atomRegistry = useCapability(Capabilities.AtomRegistry);\n const stateAtom = useCapability(AssistantCapabilities.State);\n // Transient (pre-submit) chats have no database; fall back to the companion's space.\n const space = getSpace(chat) ?? getSpace(companionTo);\n const runtime = useChatServices({ id: space?.id });\n\n const [online, setOnline] = useOnline();\n const { preset, ...chatProps } = usePresets(online);\n const processor = useChatProcessor({ space, chat, preset, runtime, registry, settings });\n const pendingSubmitted = useRef(false);\n\n // Reset the one-shot guard when the target conversation changes, so a pending prompt for a new\n // `attendableId` is still auto-submitted within the same mount.\n useEffect(() => {\n pendingSubmitted.current = false;\n }, [attendableId]);\n\n useEffect(() => {\n if (!processor || !attendableId || pendingSubmitted.current) {\n return;\n }\n\n const state = atomRegistry.get(stateAtom);\n const pendingPrompt = state.pendingPrompts[attendableId];\n if (pendingPrompt) {\n pendingSubmitted.current = true;\n atomRegistry.update(stateAtom, (current) => {\n const { [attendableId]: _, ...rest } = current.pendingPrompts;\n return { ...current, pendingPrompts: rest };\n });\n\n void processor.request({ message: pendingPrompt });\n }\n }, [processor, attendableId, atomRegistry, stateAtom]);\n\n const feedTarget = chat?.feed.target;\n const view = (chat?.view as Assistant.ChatView | undefined) ?? settings.chatView;\n\n if (!processor) {\n return null;\n }\n\n return (\n <ChatComponent.Root\n chat={chat}\n feed={feedTarget}\n db={space?.db}\n processor={processor}\n onEvent={onEvent}\n onSubmit={onSubmit}\n >\n <Panel.Root role={role} ref={forwardedRef}>\n <Panel.Toolbar className='bg-toolbar-surface'>\n <ChatComponent.Toolbar classNames='dx-document' attendableId={attendableId} companionTo={companionTo} />\n </Panel.Toolbar>\n <Panel.Content>\n <ChatComponent.Content>\n <div className='dx-container relative'>\n <ChatComponent.Thread viewType={view} />\n {view !== 'summary' && (\n <div className='absolute bottom-2 left-0 right-0'>\n <div className='dx-document px-4'>\n <ChatComponent.Status classNames='px-3 rounded-sm bg-group-surface' />\n </div>\n </div>\n )}\n </div>\n <div className='dx-document px-4 pb-4'>\n <div className='flex flex-col items-center py-2 overflow-hidden'>\n <ChatComponent.TaskList classNames='max-h-[120px] border border-separator rounded-sm text-description' />\n </div>\n <ChatComponent.Prompt\n {...chatProps}\n outline\n preset={preset?.id}\n online={online}\n onOnlineChange={setOnline}\n />\n </div>\n </ChatComponent.Content>\n </Panel.Content>\n </Panel.Root>\n </ChatComponent.Root>\n );\n },\n);\n"],
5
- "mappings": "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",
6
- "names": ["React", "forwardRef", "useEffect", "useRef", "Capabilities", "useAtomCapability", "useCapability", "getSpace", "useRegistry", "Panel", "Chat", "ChatComponent", "useChatProcessor", "useChatServices", "useOnline", "usePresets", "AssistantCapabilities", "ChatArticle", "role", "attendableId", "subject", "chat", "companionTo", "onEvent", "onSubmit", "forwardedRef", "registry", "settings", "Settings", "atomRegistry", "AtomRegistry", "stateAtom", "State", "space", "runtime", "id", "online", "setOnline", "preset", "chatProps", "processor", "pendingSubmitted", "current", "state", "get", "pendingPrompt", "pendingPrompts", "update", "_", "rest", "request", "message", "feedTarget", "feed", "target", "view", "chatView", "Root", "db", "ref", "Toolbar", "className", "classNames", "Content", "div", "Thread", "viewType", "Status", "TaskList", "Prompt", "outline", "onOnlineChange"]
7
- }
@@ -1,9 +0,0 @@
1
- // src/components/Chat/context.ts
2
- import { createContext } from "@radix-ui/react-context";
3
- var [ChatContextProvider, useChatContext] = createContext("Chat");
4
-
5
- export {
6
- ChatContextProvider,
7
- useChatContext
8
- };
9
- //# sourceMappingURL=chunk-VTK5R4H3.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/Chat/context.ts"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\n\nimport { type Chat as ChatModule } from '@dxos/assistant-toolkit';\nimport { type Event } from '@dxos/async';\nimport { type Database } from '@dxos/echo';\nimport { type Message } from '@dxos/types';\n\nimport { type AiChatProcessor } from '../../processor';\nimport { type ChatEvent } from './events';\n\n/**\n * Wall-clock timestamps for the most-recent (or in-flight) request, lifted out of\n * `ChatStreamStatus` so the elapsed value survives across re-mounts triggered when wire's\n * drip queue toggles `wireDrainingEffect` (which removes/restores the footer block widget).\n * `endedAt` is `null` while the request is still active.\n */\nexport type ChatRequestTiming = {\n startedAt: number;\n endedAt: number | null;\n};\n\nexport type ChatContextValue = {\n debug?: boolean;\n event: Event<ChatEvent>;\n db?: Database.Database;\n chat?: ChatModule.Chat;\n messages: Message.Message[];\n processor: AiChatProcessor;\n requestTiming: ChatRequestTiming | null;\n};\n\n// Internal: not re-exported from `Chat/index.ts`. Accessed by sibling components in this\n// package (e.g. `ChatStreamStatus`) without dragging in `Chat.tsx`'s heavy transitive\n// imports (transcription, etc.).\nexport const [ChatContextProvider, useChatContext] = createContext<ChatContextValue>('Chat');\n"],
5
- "mappings": ";AAIA,SAASA,qBAAqB;AAkCvB,IAAM,CAACC,qBAAqBC,cAAAA,IAAkBF,cAAgC,MAAA;",
6
- "names": ["createContext", "ChatContextProvider", "useChatContext"]
7
- }
@@ -1,43 +0,0 @@
1
- // src/meta.ts
2
- import { Plugin } from "@dxos/app-framework";
3
- import { DXN } from "@dxos/keys";
4
- import { trim } from "@dxos/util";
5
- var meta = Plugin.makeMeta({
6
- key: DXN.make("org.dxos.plugin.assistant"),
7
- name: "Assistant",
8
- author: "DXOS",
9
- description: trim`
10
- AssistantPlugin brings a conversational AI assistant into DXOS Composer, letting users chat naturally
11
- with objects in their spaces. Every Chat is a first-class ECHO object — messages are persisted,
12
- replicated across peers in real time, and can be bound to any document or collection as a companion
13
- panel that appears alongside the primary view.
14
-
15
- AI capabilities are delivered through a flexible multi-provider model layer. Users can route requests
16
- to the DXOS Edge service, a locally running Ollama instance, or LM Studio, and switch providers at
17
- any time in Settings. Each provider can be configured with a preferred model, and the runtime
18
- automatically falls back when a provider is unavailable.
19
-
20
- Blueprints give every chat a specialised identity. Built-in blueprints cover general assistance,
21
- web browsing, database interaction, web search, Discord and Linear integration, autonomous agents,
22
- planning, memory, automation, and a wizard for authoring new blueprints. Binding a blueprint
23
- changes the system instructions and the tool set exposed to the model in a single step.
24
-
25
- Tool execution runs through the DXOS compute runtime so every AI action — opening a document,
26
- searching the web, querying a database — produces a structured execution trace. The optional
27
- TracePanel visualises that trace as a commit graph or raw JSON, giving developers full observability
28
- into what the model did and why.
29
- `,
30
- icon: "ph--sparkle--regular",
31
- iconHue: "sky",
32
- source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-assistant",
33
- spec: "PLUGIN.mdl"
34
- });
35
- var ASSISTANT_DIALOG = DXN.make(`${meta.id}.assistantDialog`);
36
- var ASSISTANT_COMPANION_VARIANT = "assistant-chat";
37
-
38
- export {
39
- meta,
40
- ASSISTANT_DIALOG,
41
- ASSISTANT_COMPANION_VARIANT
42
- };
43
- //# sourceMappingURL=chunk-XYHPOGTK.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { DXN } from '@dxos/keys';\nimport { trim } from '@dxos/util';\n\nexport const meta = Plugin.makeMeta({\n key: DXN.make('org.dxos.plugin.assistant'),\n name: 'Assistant',\n author: 'DXOS',\n description: trim`\n AssistantPlugin brings a conversational AI assistant into DXOS Composer, letting users chat naturally\n with objects in their spaces. Every Chat is a first-class ECHO object — messages are persisted,\n replicated across peers in real time, and can be bound to any document or collection as a companion\n panel that appears alongside the primary view.\n\n AI capabilities are delivered through a flexible multi-provider model layer. Users can route requests\n to the DXOS Edge service, a locally running Ollama instance, or LM Studio, and switch providers at\n any time in Settings. Each provider can be configured with a preferred model, and the runtime\n automatically falls back when a provider is unavailable.\n\n Blueprints give every chat a specialised identity. Built-in blueprints cover general assistance,\n web browsing, database interaction, web search, Discord and Linear integration, autonomous agents,\n planning, memory, automation, and a wizard for authoring new blueprints. Binding a blueprint\n changes the system instructions and the tool set exposed to the model in a single step.\n\n Tool execution runs through the DXOS compute runtime so every AI action — opening a document,\n searching the web, querying a database — produces a structured execution trace. The optional\n TracePanel visualises that trace as a commit graph or raw JSON, giving developers full observability\n into what the model did and why.\n `,\n icon: 'ph--sparkle--regular',\n iconHue: 'sky',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-assistant',\n spec: 'PLUGIN.mdl',\n});\n\nexport const ASSISTANT_DIALOG = DXN.make(`${meta.id}.assistantDialog`);\n\n/** Companion variant identifier for the assistant chat panel. */\nexport const ASSISTANT_COMPANION_VARIANT = 'assistant-chat';\n"],
5
- "mappings": ";AAIA,SAASA,cAAc;AACvB,SAASC,WAAW;AACpB,SAASC,YAAY;AAEd,IAAMC,OAAOH,OAAOI,SAAS;EAClCC,KAAKJ,IAAIK,KAAK,2BAAA;EACdC,MAAM;EACNC,QAAQ;EACRC,aAAaP;;;;;;;;;;;;;;;;;;;;;EAqBbQ,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,MAAM;AACR,CAAA;AAEO,IAAMC,mBAAmBb,IAAIK,KAAK,GAAGH,KAAKY,EAAE,kBAAkB;AAG9D,IAAMC,8BAA8B;",
6
- "names": ["Plugin", "DXN", "trim", "meta", "makeMeta", "key", "make", "name", "author", "description", "icon", "iconHue", "source", "spec", "ASSISTANT_DIALOG", "id", "ASSISTANT_COMPANION_VARIANT"]
7
- }