@dxos/plugin-assistant 0.8.4-main.c1de068 → 0.8.4-main.fd6878d

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 (350) hide show
  1. package/dist/lib/browser/{TemplateContainer-RPJ2LBOB.mjs → BlueprintContainer-H7H4BQ2C.mjs} +11 -9
  2. package/dist/lib/browser/BlueprintContainer-H7H4BQ2C.mjs.map +7 -0
  3. package/dist/lib/browser/{ChatContainer-M3IHQLRS.mjs → ChatContainer-OUVSX5V5.mjs} +35 -13
  4. package/dist/lib/browser/ChatContainer-OUVSX5V5.mjs.map +7 -0
  5. package/dist/lib/browser/{ChatDialog-X6VN6QZI.mjs → ChatDialog-P4FLEOHG.mjs} +21 -7
  6. package/dist/lib/browser/ChatDialog-P4FLEOHG.mjs.map +7 -0
  7. package/dist/lib/browser/{SequenceContainer-3UDVKWPA.mjs → SequenceContainer-627OQ557.mjs} +3 -2
  8. package/dist/lib/browser/SequenceContainer-627OQ557.mjs.map +7 -0
  9. package/dist/lib/browser/ai-service-7KJ5LXBT.mjs +22 -0
  10. package/dist/lib/browser/ai-service-7KJ5LXBT.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-builder-JTXBKE7O.mjs → app-graph-builder-AVHHQ3KV.mjs} +17 -74
  12. package/dist/lib/browser/app-graph-builder-AVHHQ3KV.mjs.map +7 -0
  13. package/dist/lib/browser/blueprint-definition-CMGIZAOW.mjs +146 -0
  14. package/dist/lib/browser/blueprint-definition-CMGIZAOW.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-BRLHDHOF.mjs +244 -0
  16. package/dist/lib/browser/chunk-BRLHDHOF.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-HRLMD35M.mjs +191 -0
  18. package/dist/lib/browser/chunk-HRLMD35M.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  20. package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-LKP65RPA.mjs +20 -0
  22. package/dist/lib/browser/{chunk-FDCJSQYF.mjs.map → chunk-LKP65RPA.mjs.map} +1 -1
  23. package/dist/lib/browser/{chunk-AEAEKWOC.mjs → chunk-NZDCKQ6W.mjs} +12 -21
  24. package/dist/lib/browser/chunk-NZDCKQ6W.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-QB7OVS6Z.mjs +16 -0
  26. package/dist/lib/browser/chunk-QB7OVS6Z.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-OWY4CUQY.mjs → chunk-VEBVAHNM.mjs} +799 -813
  28. package/dist/lib/browser/chunk-VEBVAHNM.mjs.map +7 -0
  29. package/dist/lib/browser/edge-model-resolver-2HB4PCWH.mjs +24 -0
  30. package/dist/lib/browser/edge-model-resolver-2HB4PCWH.mjs.map +7 -0
  31. package/dist/lib/browser/index.mjs +96 -51
  32. package/dist/lib/browser/index.mjs.map +4 -4
  33. package/dist/lib/browser/{intent-resolver-5RMMCMXG.mjs → intent-resolver-MVOIEJXZ.mjs} +33 -12
  34. package/dist/lib/browser/intent-resolver-MVOIEJXZ.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/{react-surface-66VY37YQ.mjs → react-surface-4HXS3YLT.mjs} +45 -32
  37. package/dist/lib/browser/react-surface-4HXS3YLT.mjs.map +7 -0
  38. package/dist/lib/browser/{settings-2DGP3UTS.mjs → settings-G2EZXMWT.mjs} +6 -5
  39. package/dist/lib/{node-esm/settings-47RYZOU4.mjs.map → browser/settings-G2EZXMWT.mjs.map} +1 -1
  40. package/dist/lib/browser/toolkit-IW4FBLLB.mjs +105 -0
  41. package/dist/lib/browser/toolkit-IW4FBLLB.mjs.map +7 -0
  42. package/dist/lib/browser/types/index.mjs +7 -4
  43. package/dist/lib/node-esm/{TemplateContainer-A3NAQCZE.mjs → BlueprintContainer-VH4EE4CM.mjs} +11 -9
  44. package/dist/lib/node-esm/BlueprintContainer-VH4EE4CM.mjs.map +7 -0
  45. package/dist/lib/node-esm/{ChatContainer-VZT74PO2.mjs → ChatContainer-D5FABDNE.mjs} +35 -13
  46. package/dist/lib/node-esm/ChatContainer-D5FABDNE.mjs.map +7 -0
  47. package/dist/lib/node-esm/{ChatDialog-RJ6FDX4Q.mjs → ChatDialog-NKWVXHJP.mjs} +21 -7
  48. package/dist/lib/node-esm/ChatDialog-NKWVXHJP.mjs.map +7 -0
  49. package/dist/lib/node-esm/{SequenceContainer-RQQH5XOC.mjs → SequenceContainer-EQ5NP2PG.mjs} +3 -2
  50. package/dist/lib/node-esm/SequenceContainer-EQ5NP2PG.mjs.map +7 -0
  51. package/dist/lib/node-esm/ai-service-LDD32477.mjs +23 -0
  52. package/dist/lib/node-esm/ai-service-LDD32477.mjs.map +7 -0
  53. package/dist/lib/node-esm/{app-graph-builder-OWSOXFTD.mjs → app-graph-builder-RMOUJMMG.mjs} +17 -74
  54. package/dist/lib/node-esm/app-graph-builder-RMOUJMMG.mjs.map +7 -0
  55. package/dist/lib/node-esm/blueprint-definition-AEWYMW6I.mjs +147 -0
  56. package/dist/lib/node-esm/blueprint-definition-AEWYMW6I.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-SENTQAEO.mjs → chunk-3SOC5GOP.mjs} +799 -813
  58. package/dist/lib/node-esm/chunk-3SOC5GOP.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-F7RXCX5Y.mjs +192 -0
  60. package/dist/lib/node-esm/chunk-F7RXCX5Y.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-2XL6MNPE.mjs → chunk-GAWXJ7K5.mjs} +12 -21
  62. package/dist/lib/node-esm/chunk-GAWXJ7K5.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  64. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-KOC6ESG7.mjs +22 -0
  66. package/dist/lib/node-esm/{chunk-QN2H2EHV.mjs.map → chunk-KOC6ESG7.mjs.map} +1 -1
  67. package/dist/lib/node-esm/chunk-RD755HN3.mjs +245 -0
  68. package/dist/lib/node-esm/chunk-RD755HN3.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-X6AANUHZ.mjs +17 -0
  70. package/dist/lib/node-esm/chunk-X6AANUHZ.mjs.map +7 -0
  71. package/dist/lib/node-esm/edge-model-resolver-UDDR2IA6.mjs +25 -0
  72. package/dist/lib/node-esm/edge-model-resolver-UDDR2IA6.mjs.map +7 -0
  73. package/dist/lib/node-esm/index.mjs +96 -51
  74. package/dist/lib/node-esm/index.mjs.map +4 -4
  75. package/dist/lib/node-esm/{intent-resolver-YPPYELY3.mjs → intent-resolver-DTDNCX3C.mjs} +33 -12
  76. package/dist/lib/node-esm/intent-resolver-DTDNCX3C.mjs.map +7 -0
  77. package/dist/lib/node-esm/meta.json +1 -1
  78. package/dist/lib/node-esm/{react-surface-RJMRBR2M.mjs → react-surface-V6JNEZVO.mjs} +45 -32
  79. package/dist/lib/node-esm/react-surface-V6JNEZVO.mjs.map +7 -0
  80. package/dist/lib/node-esm/{settings-47RYZOU4.mjs → settings-AIP5FOJG.mjs} +6 -5
  81. package/dist/lib/{browser/settings-2DGP3UTS.mjs.map → node-esm/settings-AIP5FOJG.mjs.map} +1 -1
  82. package/dist/lib/node-esm/toolkit-2VNUL77B.mjs +106 -0
  83. package/dist/lib/node-esm/toolkit-2VNUL77B.mjs.map +7 -0
  84. package/dist/lib/node-esm/types/index.mjs +7 -4
  85. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  86. package/dist/types/src/capabilities/ai-service.d.ts +5 -0
  87. package/dist/types/src/capabilities/ai-service.d.ts.map +1 -0
  88. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/blueprint-definition.d.ts +3 -0
  90. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  91. package/dist/types/src/capabilities/capabilities.d.ts +11 -0
  92. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  93. package/dist/types/src/capabilities/edge-model-resolver.d.ts +5 -0
  94. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -0
  95. package/dist/types/src/capabilities/index.d.ts +5 -0
  96. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  98. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/toolkit.d.ts +5 -0
  100. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  101. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  102. package/dist/types/src/components/BlueprintContainer.d.ts +8 -0
  103. package/dist/types/src/components/BlueprintContainer.d.ts.map +1 -0
  104. package/dist/types/src/components/Chat/Chat.d.ts +6 -8
  105. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  106. package/dist/types/src/components/ChatContainer.d.ts +5 -4
  107. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  108. package/dist/types/src/components/ChatDialog.d.ts.map +1 -1
  109. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts +13 -0
  110. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -0
  111. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +3 -3
  112. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -1
  113. package/dist/types/src/components/ChatPrompt/index.d.ts +1 -1
  114. package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -1
  115. package/dist/types/src/components/ChatThread/ChatMessage.d.ts +4 -3
  116. package/dist/types/src/components/ChatThread/ChatMessage.d.ts.map +1 -1
  117. package/dist/types/src/components/ChatThread/ChatThread.d.ts +2 -2
  118. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  119. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +33 -48
  120. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/ChatThread/Link.d.ts +9 -0
  122. package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -0
  123. package/dist/types/src/components/ChatThread/ToolBlock.d.ts.map +1 -1
  124. package/dist/types/src/components/SequenceContainer.d.ts.map +1 -1
  125. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts.map +1 -1
  126. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts +1 -1
  127. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts.map +1 -1
  128. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +2 -1
  129. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  130. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +2 -1
  132. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  133. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  134. package/dist/types/src/components/Timeline/Timeline.d.ts +24 -0
  135. package/dist/types/src/components/Timeline/Timeline.d.ts.map +1 -0
  136. package/dist/types/src/components/Timeline/Timeline.stories.d.ts +9 -0
  137. package/dist/types/src/components/Timeline/Timeline.stories.d.ts.map +1 -0
  138. package/dist/types/src/components/Timeline/index.d.ts +2 -0
  139. package/dist/types/src/components/Timeline/index.d.ts.map +1 -0
  140. package/dist/types/src/components/Toolbox/Toolbox.d.ts +4 -7
  141. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  142. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +1 -2
  143. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  144. package/dist/types/src/components/index.d.ts +3 -2
  145. package/dist/types/src/components/index.d.ts.map +1 -1
  146. package/dist/types/src/events.d.ts +1 -1
  147. package/dist/types/src/events.d.ts.map +1 -1
  148. package/dist/types/src/functions/analysis.d.ts +5 -0
  149. package/dist/types/src/functions/analysis.d.ts.map +1 -0
  150. package/dist/types/src/functions/index.d.ts +4 -0
  151. package/dist/types/src/functions/index.d.ts.map +1 -0
  152. package/dist/types/src/functions/list.d.ts +10 -0
  153. package/dist/types/src/functions/list.d.ts.map +1 -0
  154. package/dist/types/src/functions/load.d.ts +8 -0
  155. package/dist/types/src/functions/load.d.ts.map +1 -0
  156. package/dist/types/src/hooks/chat-processor.d.ts +28 -42
  157. package/dist/types/src/hooks/chat-processor.d.ts.map +1 -1
  158. package/dist/types/src/hooks/errors.d.ts +4 -0
  159. package/dist/types/src/hooks/errors.d.ts.map +1 -0
  160. package/dist/types/src/hooks/index.d.ts +5 -1
  161. package/dist/types/src/hooks/index.d.ts.map +1 -1
  162. package/dist/types/src/hooks/presets.d.ts +2 -2
  163. package/dist/types/src/hooks/presets.d.ts.map +1 -1
  164. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +21 -0
  165. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -0
  166. package/dist/types/src/hooks/useChatProcessor.d.ts +7 -14
  167. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  168. package/dist/types/src/hooks/useChatServices.d.ts +3 -4
  169. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
  170. package/dist/types/src/hooks/useOnline.d.ts +3 -0
  171. package/dist/types/src/hooks/useOnline.d.ts.map +1 -0
  172. package/dist/types/src/hooks/usePresets.d.ts +7 -0
  173. package/dist/types/src/hooks/usePresets.d.ts.map +1 -0
  174. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -1
  175. package/dist/types/src/hooks/useResolveRef.d.ts +4 -0
  176. package/dist/types/src/hooks/useResolveRef.d.ts.map +1 -0
  177. package/dist/types/src/parser/filter-generator.d.ts.map +1 -1
  178. package/dist/types/src/parser/query-parser.d.ts.map +1 -1
  179. package/dist/types/src/stories/Chat.stories.d.ts +68 -49
  180. package/dist/types/src/stories/Chat.stories.d.ts.map +1 -1
  181. package/dist/types/src/stories/components/BlueprintContainer.d.ts +5 -0
  182. package/dist/types/src/stories/components/BlueprintContainer.d.ts.map +1 -0
  183. package/dist/types/src/stories/components/ChatContainer.d.ts +5 -0
  184. package/dist/types/src/stories/components/ChatContainer.d.ts.map +1 -0
  185. package/dist/types/src/stories/components/GraphContainer.d.ts +6 -0
  186. package/dist/types/src/stories/components/GraphContainer.d.ts.map +1 -0
  187. package/dist/types/src/stories/components/LoggingContainer.d.ts +5 -0
  188. package/dist/types/src/stories/components/LoggingContainer.d.ts.map +1 -0
  189. package/dist/types/src/stories/components/SurfaceContainer.d.ts +8 -0
  190. package/dist/types/src/stories/components/SurfaceContainer.d.ts.map +1 -0
  191. package/dist/types/src/stories/components/TasksContainer.d.ts +5 -0
  192. package/dist/types/src/stories/components/TasksContainer.d.ts.map +1 -0
  193. package/dist/types/src/stories/components/index.d.ts +8 -0
  194. package/dist/types/src/stories/components/index.d.ts.map +1 -0
  195. package/dist/types/src/stories/components/types.d.ts +7 -0
  196. package/dist/types/src/stories/components/types.d.ts.map +1 -0
  197. package/dist/types/src/stories/hooks/index.d.ts +3 -0
  198. package/dist/types/src/stories/hooks/index.d.ts.map +1 -0
  199. package/dist/types/src/stories/hooks/useFlush.d.ts +6 -0
  200. package/dist/types/src/stories/hooks/useFlush.d.ts.map +1 -0
  201. package/dist/types/src/stories/hooks/useMatcherExtension.d.ts +3 -0
  202. package/dist/types/src/stories/hooks/useMatcherExtension.d.ts.map +1 -0
  203. package/dist/types/src/stories/testing/data.d.ts +142 -0
  204. package/dist/types/src/stories/testing/data.d.ts.map +1 -0
  205. package/dist/types/src/stories/testing/index.d.ts +3 -0
  206. package/dist/types/src/stories/testing/index.d.ts.map +1 -0
  207. package/dist/types/src/stories/testing/testing.d.ts +26 -0
  208. package/dist/types/src/stories/testing/testing.d.ts.map +1 -0
  209. package/dist/types/src/testing/test-functions.d.ts +5 -2
  210. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  211. package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
  212. package/dist/types/src/tools/function.d.ts.map +1 -1
  213. package/dist/types/src/tools/openapi.d.ts.map +1 -1
  214. package/dist/types/src/translations.d.ts +6 -10
  215. package/dist/types/src/translations.d.ts.map +1 -1
  216. package/dist/types/src/types/Assistant.d.ts +40 -0
  217. package/dist/types/src/types/Assistant.d.ts.map +1 -0
  218. package/dist/types/src/types/AssistantAction.d.ts +90 -0
  219. package/dist/types/src/types/AssistantAction.d.ts.map +1 -0
  220. package/dist/types/src/types/defs.d.ts +2 -0
  221. package/dist/types/src/types/defs.d.ts.map +1 -0
  222. package/dist/types/src/types/index.d.ts +3 -1
  223. package/dist/types/src/types/index.d.ts.map +1 -1
  224. package/dist/types/src/types/service.d.ts +6 -6
  225. package/dist/types/src/types/service.d.ts.map +1 -1
  226. package/dist/types/tsconfig.tsbuildinfo +1 -1
  227. package/package.json +81 -75
  228. package/src/AssistantPlugin.tsx +59 -12
  229. package/src/capabilities/ai-service.ts +28 -0
  230. package/src/capabilities/app-graph-builder.ts +9 -93
  231. package/src/capabilities/blueprint-definition.ts +32 -0
  232. package/src/capabilities/capabilities.ts +22 -0
  233. package/src/capabilities/edge-model-resolver.ts +29 -0
  234. package/src/capabilities/index.ts +6 -0
  235. package/src/capabilities/intent-resolver.ts +24 -9
  236. package/src/capabilities/react-surface.tsx +29 -22
  237. package/src/capabilities/toolkit.ts +106 -0
  238. package/src/components/AssistantSettings/AssistantSettings.tsx +1 -1
  239. package/src/components/BlueprintContainer.tsx +24 -0
  240. package/src/components/Chat/Chat.tsx +77 -64
  241. package/src/components/ChatContainer.tsx +37 -13
  242. package/src/components/ChatDialog.tsx +9 -5
  243. package/src/components/ChatPrompt/ChatOptions.tsx +59 -0
  244. package/src/components/ChatPrompt/ChatReferences.tsx +11 -9
  245. package/src/components/ChatPrompt/index.ts +1 -1
  246. package/src/components/ChatThread/ChatMessage.tsx +132 -118
  247. package/src/components/ChatThread/ChatThread.stories.tsx +220 -103
  248. package/src/components/ChatThread/ChatThread.tsx +2 -2
  249. package/src/components/ChatThread/Link.tsx +39 -0
  250. package/src/components/ChatThread/ToolBlock.tsx +20 -16
  251. package/src/components/SequenceContainer.tsx +2 -1
  252. package/src/components/SequenceEditor/SequenceEditor.stories.tsx +3 -2
  253. package/src/components/SequenceEditor/SequenceEditor.tsx +1 -1
  254. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +12 -5
  255. package/src/components/TemplateEditor/TemplateEditor.tsx +15 -12
  256. package/src/components/TemplateEditor/TemplateForm.stories.tsx +12 -5
  257. package/src/components/TemplateEditor/TemplateForm.tsx +5 -3
  258. package/src/components/Timeline/Timeline.stories.tsx +53 -0
  259. package/src/components/Timeline/Timeline.tsx +159 -0
  260. package/src/components/Timeline/index.ts +5 -0
  261. package/src/components/Toolbox/Toolbox.stories.tsx +6 -12
  262. package/src/components/Toolbox/Toolbox.tsx +16 -40
  263. package/src/components/index.ts +2 -5
  264. package/src/events.ts +2 -2
  265. package/src/functions/analysis.ts +20 -0
  266. package/src/functions/index.ts +7 -0
  267. package/src/functions/list.ts +42 -0
  268. package/src/functions/load.ts +43 -0
  269. package/src/hooks/chat-processor.ts +123 -177
  270. package/src/hooks/errors.ts +8 -0
  271. package/src/hooks/index.ts +5 -1
  272. package/src/hooks/presets.ts +6 -5
  273. package/src/hooks/useBlueprintRegistry.ts +79 -0
  274. package/src/hooks/useChatProcessor.ts +21 -83
  275. package/src/hooks/useChatServices.ts +35 -54
  276. package/src/hooks/useOnline.ts +10 -0
  277. package/src/hooks/usePresets.ts +45 -0
  278. package/src/hooks/useReferencesProvider.ts +11 -9
  279. package/src/hooks/useResolveRef.ts +33 -0
  280. package/src/parser/filter-generator.ts +6 -13
  281. package/src/parser/query-parser.ts +1 -1
  282. package/src/queue-logger.ts +5 -5
  283. package/src/stories/Chat.stories.tsx +238 -299
  284. package/src/stories/components/BlueprintContainer.tsx +34 -0
  285. package/src/stories/components/ChatContainer.tsx +80 -0
  286. package/src/stories/components/GraphContainer.tsx +118 -0
  287. package/src/stories/components/LoggingContainer.tsx +22 -0
  288. package/src/stories/components/SurfaceContainer.tsx +62 -0
  289. package/src/stories/components/TasksContainer.tsx +51 -0
  290. package/src/stories/components/index.ts +12 -0
  291. package/src/stories/components/types.ts +11 -0
  292. package/src/stories/hooks/index.ts +6 -0
  293. package/src/stories/hooks/useFlush.ts +35 -0
  294. package/src/stories/hooks/useMatcherExtension.ts +45 -0
  295. package/src/stories/testing/data.ts +130 -0
  296. package/src/stories/testing/index.ts +6 -0
  297. package/src/stories/testing/testing.tsx +162 -0
  298. package/src/testing/test-functions.ts +8 -3
  299. package/src/testing/test-sequence.ts +1 -1
  300. package/src/tools/function.ts +4 -1
  301. package/src/tools/openapi.test.ts +7 -5
  302. package/src/tools/openapi.ts +4 -1
  303. package/src/translations.ts +8 -10
  304. package/src/types/Assistant.ts +59 -0
  305. package/src/types/AssistantAction.ts +54 -0
  306. package/src/types/defs.ts +5 -0
  307. package/src/types/index.ts +4 -1
  308. package/dist/lib/browser/ChatContainer-M3IHQLRS.mjs.map +0 -7
  309. package/dist/lib/browser/ChatDialog-X6VN6QZI.mjs.map +0 -7
  310. package/dist/lib/browser/SequenceContainer-3UDVKWPA.mjs.map +0 -7
  311. package/dist/lib/browser/TemplateContainer-RPJ2LBOB.mjs.map +0 -7
  312. package/dist/lib/browser/app-graph-builder-JTXBKE7O.mjs.map +0 -7
  313. package/dist/lib/browser/chunk-AEAEKWOC.mjs.map +0 -7
  314. package/dist/lib/browser/chunk-EQDW6BYQ.mjs +0 -108
  315. package/dist/lib/browser/chunk-EQDW6BYQ.mjs.map +0 -7
  316. package/dist/lib/browser/chunk-FDCJSQYF.mjs +0 -40
  317. package/dist/lib/browser/chunk-JQBVLTM5.mjs +0 -158
  318. package/dist/lib/browser/chunk-JQBVLTM5.mjs.map +0 -7
  319. package/dist/lib/browser/chunk-OWY4CUQY.mjs.map +0 -7
  320. package/dist/lib/browser/intent-resolver-5RMMCMXG.mjs.map +0 -7
  321. package/dist/lib/browser/react-surface-66VY37YQ.mjs.map +0 -7
  322. package/dist/lib/node-esm/ChatContainer-VZT74PO2.mjs.map +0 -7
  323. package/dist/lib/node-esm/ChatDialog-RJ6FDX4Q.mjs.map +0 -7
  324. package/dist/lib/node-esm/SequenceContainer-RQQH5XOC.mjs.map +0 -7
  325. package/dist/lib/node-esm/TemplateContainer-A3NAQCZE.mjs.map +0 -7
  326. package/dist/lib/node-esm/app-graph-builder-OWSOXFTD.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-2XL6MNPE.mjs.map +0 -7
  328. package/dist/lib/node-esm/chunk-BISJDTBK.mjs +0 -159
  329. package/dist/lib/node-esm/chunk-BISJDTBK.mjs.map +0 -7
  330. package/dist/lib/node-esm/chunk-E33DNNDW.mjs +0 -109
  331. package/dist/lib/node-esm/chunk-E33DNNDW.mjs.map +0 -7
  332. package/dist/lib/node-esm/chunk-QN2H2EHV.mjs +0 -41
  333. package/dist/lib/node-esm/chunk-SENTQAEO.mjs.map +0 -7
  334. package/dist/lib/node-esm/intent-resolver-YPPYELY3.mjs.map +0 -7
  335. package/dist/lib/node-esm/react-surface-RJMRBR2M.mjs.map +0 -7
  336. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts +0 -9
  337. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts.map +0 -1
  338. package/dist/types/src/components/TemplateContainer.d.ts +0 -8
  339. package/dist/types/src/components/TemplateContainer.d.ts.map +0 -1
  340. package/dist/types/src/hooks/chat-processor.test.d.ts +0 -2
  341. package/dist/types/src/hooks/chat-processor.test.d.ts.map +0 -1
  342. package/dist/types/src/hooks/useBlueprints.d.ts +0 -9
  343. package/dist/types/src/hooks/useBlueprints.d.ts.map +0 -1
  344. package/dist/types/src/types/schema.d.ts +0 -88
  345. package/dist/types/src/types/schema.d.ts.map +0 -1
  346. package/src/components/ChatPrompt/ChatOptionsMenu.tsx +0 -52
  347. package/src/components/TemplateContainer.tsx +0 -24
  348. package/src/hooks/chat-processor.test.ts +0 -16
  349. package/src/hooks/useBlueprints.ts +0 -57
  350. package/src/types/schema.ts +0 -95
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/hooks/useChatProcessor.ts", "../../../src/hooks/index.ts", "../../../src/hooks/chat-processor.ts", "../../../src/hooks/presets.ts", "../../../src/hooks/useBlueprints.ts", "../../../src/hooks/useChatServices.ts", "../../../src/hooks/useReferencesProvider.ts", "../../../src/tools/function.ts", "../../../src/tools/openapi.ts", "../../../src/components/Toolbox/Toolbox.tsx", "../../../src/components/Chat/Chat.tsx", "../../../src/components/ChatPrompt/ChatActions.tsx", "../../../src/components/ChatPrompt/ChatOptionsMenu.tsx", "../../../src/components/ChatPrompt/ChatPresets.tsx", "../../../src/components/ChatPrompt/ChatReferences.tsx", "../../../src/components/ChatPrompt/ChatStatusIndicator.tsx", "../../../src/components/ChatThread/ChatThread.tsx", "../../../src/components/ChatThread/ChatMessage.tsx", "../../../src/components/ChatThread/ToolBlock.tsx", "../../../src/components/ChatThread/reducer.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Layer } from 'effect';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { type ExecutableTool } from '@dxos/ai';\nimport { Capabilities, useCapabilities, useIntentDispatcher } from '@dxos/app-framework';\nimport { Conversation, createSystemPrompt } from '@dxos/assistant';\nimport { type ArtifactDefinition, type AssociatedArtifact, type Blueprint } from '@dxos/blueprints';\nimport { FunctionType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { useConfig } from '@dxos/react-client';\nimport { Filter, fullyQualifiedId, type Queue, type Space, useQuery } from '@dxos/react-client/echo';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type AiServicePreset, ChatProcessor, type ChatServices } from '../hooks';\nimport { convertFunctionToTool, createToolsFromService } from '../tools';\nimport { type Assistant, ServiceType } from '../types';\n\ntype UseChatProcessorProps = {\n preset?: AiServicePreset;\n space?: Space;\n chat?: Assistant.Chat;\n\n // TODO(burdon): Move into layer?\n services?: Layer.Layer<ChatServices>;\n blueprintRegistry?: Blueprint.Registry;\n // TODO(burdon): Not currently used.\n settings?: Assistant.Settings;\n\n /** @deprecated */\n instructions?: string;\n /** @deprecated */\n artifact?: AssociatedArtifact;\n /** @deprecated */\n noPluginArtifacts?: boolean;\n};\n\n/**\n * Configure and create ChatProcessor.\n */\nexport const useChatProcessor = ({\n preset,\n space,\n chat,\n services,\n blueprintRegistry,\n settings,\n instructions,\n artifact,\n noPluginArtifacts,\n}: UseChatProcessorProps): ChatProcessor | undefined => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const globalTools = useCapabilities(Capabilities.Tools);\n\n // TODO(burdon): Spec artifacts.\n let artifacts: readonly ArtifactDefinition[] = useCapabilities(Capabilities.ArtifactDefinition);\n if (noPluginArtifacts) {\n artifacts = Stable.array;\n }\n\n // Services.\n const remoteServices = useQuery(space, Filter.type(ServiceType));\n const [serviceTools, setServiceTools] = useState<ExecutableTool[]>([]);\n useEffect(() => {\n log('creating service tools...');\n queueMicrotask(async () => {\n const tools = await Promise.all(remoteServices.map((service) => createToolsFromService(service)));\n setServiceTools(tools.flat());\n });\n }, [remoteServices]);\n\n // Tools and context.\n const config = useConfig();\n const functions = useQuery(space, Filter.type(FunctionType));\n const chatId = useMemo(() => (chat ? fullyQualifiedId(chat) : undefined), [chat]);\n const [tools, extensions] = useMemo(() => {\n log('creating tools...');\n const tools: ExecutableTool[] = [\n ...globalTools.flat(),\n ...serviceTools,\n ...functions\n .map((fn) => convertFunctionToTool(fn, config.values.runtime?.services?.edge?.url ?? '', space?.id))\n .filter(isNonNullable),\n ];\n const extensions = { space, dispatch, pivotId: chatId };\n return [tools, extensions];\n }, [dispatch, globalTools, space, chatId, serviceTools, functions]);\n\n // TODO(burdon): Create from template.\n const systemPrompt = useMemo(\n () =>\n createSystemPrompt({\n artifacts: artifacts.map((definition) => `${definition.name}\\n${definition.instructions}`),\n artifact,\n instructions,\n }),\n [artifacts, artifact, instructions],\n );\n\n const conversation = useMemo(() => {\n if (!chat?.queue.target) {\n return;\n }\n\n return new Conversation({ queue: chat.queue.target as Queue<any> });\n }, [chat?.queue.target]);\n\n // Create processor.\n // TODO(burdon): Updated on each query update above; should just update current processor?\n const processor = useMemo(() => {\n if (!services || !conversation) {\n return undefined;\n }\n\n log.info('creating processor', {\n preset,\n artifacts: artifacts.length,\n systemPrompt: systemPrompt.length,\n model: preset?.model,\n settings,\n });\n\n return new ChatProcessor(services, conversation, {\n tools,\n extensions,\n blueprintRegistry,\n artifacts,\n systemPrompt,\n model: preset?.model,\n });\n }, [services, conversation, tools, blueprintRegistry, artifacts, extensions, systemPrompt, preset]);\n\n return processor;\n};\n\n// TODO(dmaretskyi): Extract.\nexport const Stable = Object.freeze({\n array: [] as readonly never[],\n object: {} as {},\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport * from './chat-processor';\nexport * from './presets';\n\nexport * from './useBlueprints';\nexport * from './useChatProcessor';\nexport * from './useChatServices';\nexport * from './useReferencesProvider';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Signal, batch, computed, signal } from '@preact/signals-core';\nimport { Effect, type Layer } from 'effect';\n\nimport { AiService, DEFAULT_EDGE_MODEL, type ExecutableTool, type GenerateRequest } from '@dxos/ai';\nimport { type PromiseIntentDispatcher } from '@dxos/app-framework';\nimport { type AiSession, ArtifactDiffResolver, type ContextBinder, type Conversation } from '@dxos/assistant';\nimport { type ArtifactDefinition, type Blueprint } from '@dxos/blueprints';\nimport { Context } from '@dxos/context';\nimport { Obj } from '@dxos/echo';\nimport { runAndForwardErrors } from '@dxos/effect';\nimport { log } from '@dxos/log';\nimport { Filter, type Space, getVersion } from '@dxos/react-client/echo';\nimport { DataType } from '@dxos/schema';\n\nimport type { ChatServices } from './useChatServices';\n\n// TODO(burdon): Factor out.\ndeclare global {\n interface ToolContextExtensions {\n space?: Space;\n dispatch?: PromiseIntentDispatcher;\n }\n}\n\ntype RequestOptions = {\n // Empty for now.\n};\n\nexport type ChatProcessorOptions = {\n // TODO(burdon): Change to AiToolkit.\n tools?: readonly ExecutableTool[];\n blueprintRegistry?: Blueprint.Registry;\n\n // TODO(dmaretskyi): Remove.\n artifacts?: readonly ArtifactDefinition[];\n extensions?: ToolContextExtensions;\n // TODO(burdon): Remove systemPrompt -- should come from blueprint.\n} & Pick<GenerateRequest, 'model' | 'systemPrompt'>;\n\nconst defaultOptions: Partial<ChatProcessorOptions> = {\n model: DEFAULT_EDGE_MODEL,\n systemPrompt: 'you are a helpful assistant',\n};\n\n/**\n * Handles interactions with the AI service.\n * Maintains a queue of messages and handles streaming responses from the AI service.\n * Executes tools based on AI responses.\n * Supports cancellation of in-progress requests.\n */\n// TODO(burdon): Rename ChatContext?\nexport class ChatProcessor {\n /**\n * Pending messages (incl. the current user request).\n * @reactive\n */\n private readonly _pending: Signal<DataType.Message[]> = signal([]);\n\n /**\n * Current streaming message (from the AI service).\n * @reactive\n */\n private readonly _streaming: Signal<DataType.Message | undefined> = signal(undefined);\n\n /**\n * Streaming state.\n * @reactive\n */\n public readonly streaming: Signal<boolean> = computed(() => this._streaming.value !== undefined);\n\n /**\n * Last error.\n * @reactive\n */\n public readonly error: Signal<Error | undefined> = signal(undefined);\n\n /**\n * Array of Messages (incl. the current message being streamed).\n * @reactive\n */\n public readonly messages: Signal<DataType.Message[]> = computed(() => {\n const messages = [...this._pending.value];\n if (this._streaming.value) {\n // TODO(dmaretskyi): Replace with Obj.clone.\n // NOTE: We have to clone the message here so that react will re-render.\n messages.push(Obj.make(DataType.Message, this._streaming.value));\n }\n\n return messages;\n });\n\n // TODO(burdon): Replace with Toolkit.\n private _tools?: ExecutableTool[];\n\n /** Current session. */\n private _session: AiSession | undefined = undefined;\n\n constructor(\n // TODO(dmaretskyi): Replace this with effect's ManagedRuntime wrapping this layer.\n private readonly _services: Layer.Layer<ChatServices>,\n private readonly _conversation: Conversation,\n private readonly _options: ChatProcessorOptions = defaultOptions,\n ) {\n this._tools = [...(_options.tools ?? [])];\n }\n\n get conversation() {\n return this._conversation;\n }\n\n get context(): ContextBinder {\n return this._conversation.context;\n }\n\n get blueprintRegistry() {\n return this._options.blueprintRegistry;\n }\n\n get tools() {\n return this._tools;\n }\n\n /**\n * @deprecated Replace with blueprints\n */\n setTools(tools: ExecutableTool[]): void {\n this._tools = tools;\n }\n\n /**\n * Make GPT request.\n */\n async request(message: string, options: RequestOptions = {}): Promise<DataType.Message[]> {\n await using ctx = Context.default(); // Auto-disposed at the end of this block.\n\n this._conversation.onBegin.on(ctx, (session) => {\n log.info('onBegin', { session, isDisposed: ctx.disposed });\n\n this._session = session;\n ctx.onDispose(() => {\n log.info('onDispose', { session, isDisposed: ctx.disposed });\n if (this._session === session) {\n this._session = undefined;\n }\n });\n\n // User message.\n session.userMessage.on((message) => {\n log.info('userMessage', { message });\n this._pending.value = [...this._pending.value, message];\n });\n\n // Message complete.\n session.message.on((message) => {\n batch(() => {\n this._pending.value = [...this._pending.value, message];\n this._streaming.value = undefined;\n });\n });\n\n // Streaming update (happens before message complete).\n session.update.on((block) => {\n batch(() => {\n if (!this._streaming.value) {\n // TODO(burdon): Hack to create temp message; better for session to send initial partial object?\n this._streaming.value = Obj.make(DataType.Message, {\n created: new Date().toISOString(),\n sender: { role: 'assistant' },\n blocks: [block],\n });\n } else if (this._streaming.value.blocks.at(-1)?.pending === true) {\n this._streaming.value.blocks[this._streaming.value.blocks.length - 1] = block;\n } else {\n this._streaming.value.blocks.push(block);\n }\n });\n });\n\n session.block.on((block) => {\n if (!this._streaming.value) {\n // TODO(burdon): Hack to create temp message; better for session to send initial partial object?\n this._streaming.value = Obj.make(DataType.Message, {\n created: new Date().toISOString(),\n sender: { role: 'assistant' },\n blocks: [block],\n });\n } else if (this._streaming.value.blocks.at(-1)?.pending === true) {\n this._streaming.value.blocks[this._streaming.value.blocks.length - 1] = block;\n } else {\n this._streaming.value.blocks.push(block);\n }\n });\n\n // TODO(dmaretskyi): Handle tool status reports.\n // session.toolStatusReport.on(({ message, status }) => {\n // const msg = this._pending.peek().find((m) => m.id === message.id);\n // const toolUse = msg?.content.find((block) => block.type === 'tool_use');\n // if (!toolUse) {\n // return;\n // }\n\n // const block = msg?.content.find(\n // (block): block is ToolUseContentBlock => block.type === 'tool_use' && block.id === toolUse.id,\n // );\n // if (block) {\n // this._pending.value = this._pending.value.map((m) => {\n // if (m.id === message.id) {\n // return {\n // ...m,\n // content: m.content.map((block) =>\n // block.type === 'tool_use' && block.id === toolUse.id ? { ...block, currentStatus: status } : block,\n // ),\n // };\n // }\n\n // return m;\n // });\n // } else {\n // log.warn('no block for status report');\n // }\n // });\n });\n\n try {\n const messages = await runAndForwardErrors(\n this._conversation\n .run({\n prompt: message,\n // TODO(burdon): Construct from blueprints?\n systemPrompt: this._options.systemPrompt,\n })\n .pipe(\n //\n Effect.provide(AiService.model(this._options.model ?? DEFAULT_EDGE_MODEL)),\n // TODO(dmaretskyi): Move ArtifactDiffResolver upstream.\n Effect.provideService(ArtifactDiffResolver, this._artifactDiffResolver),\n Effect.provide(this._services),\n Effect.tapErrorCause((cause) => {\n log.error('error', { cause });\n return Effect.void;\n }),\n ),\n );\n\n log('completed', { messages });\n } catch (err) {\n log.catch(err);\n if (err instanceof Error && err.message.includes('Overloaded')) {\n this.error.value = new AiServiceOverloadedError('AI service overloaded', { cause: err });\n } else {\n this.error.value = new Error('AI service error', { cause: err });\n }\n }\n\n return this._reset();\n }\n\n /**\n * Cancel pending requests.\n * @returns Pending requests (incl. the request message).\n */\n async cancel(): Promise<DataType.Message[]> {\n log.info('cancelling...');\n\n // TODO(dmaretskyi): Conversation should handle aborting.\n this._session?.abort();\n return this._reset();\n }\n\n private async _reset(): Promise<DataType.Message[]> {\n const messages = this._pending.value;\n batch(() => {\n this._pending.value = [];\n this._streaming.value = undefined;\n });\n\n return messages;\n }\n\n private _artifactDiffResolver: ArtifactDiffResolver.Service = {\n resolve: async (artifacts) => {\n const space = this._options.extensions?.space;\n if (!space) {\n return new Map();\n }\n\n const versions = new Map();\n await Promise.all(\n artifacts.map(async (artifact) => {\n const {\n objects: [object],\n } = await space.db.query(Filter.ids(artifact.id)).run();\n if (!object) {\n return;\n }\n versions.set(artifact.id, {\n version: getVersion(object),\n diff: `Current state: ${JSON.stringify(object)}`,\n });\n }),\n );\n return versions;\n },\n };\n}\n\n// TODO(wittjosiah): Move to ai-service-client.\nexport class AiServiceOverloadedError extends Error {\n code = 'AI_SERVICE_OVERLOADED';\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { type LLMModel } from '@dxos/ai';\n\nconst ModelProviders = ['dxos-local', 'dxos-remote', 'lm-studio'] as const;\n\nconst ModelProvider = Schema.Literal(...ModelProviders);\ntype ModelProvider = Schema.Schema.Type<typeof ModelProvider>;\n\nexport type AiServicePreset = {\n id: string;\n provider: ModelProvider;\n model: LLMModel;\n label?: string;\n};\n\nconst createModelLabel = (model: LLMModel) => {\n const parts = model.split('/');\n return parts[parts.length - 1];\n};\n\n// TODO(burdon): Users should be able to create and edit presets.\nexport const AiServicePresets: AiServicePreset[] = [\n {\n provider: 'dxos-remote' as const,\n model: '@anthropic/claude-3-5-haiku-20241022' as const,\n },\n {\n provider: 'dxos-remote' as const,\n model: '@anthropic/claude-opus-4-0' as const,\n },\n {\n provider: 'lm-studio' as const,\n model: '@google/gemma-3-12b' as const,\n },\n {\n provider: 'lm-studio' as const,\n model: '@mlx-community/llama-3.2-3b-instruct' as const,\n },\n].map(\n ({ model, provider }, i) =>\n ({\n id: `preset-${i}`,\n provider,\n model,\n label: createModelLabel(model),\n }) satisfies AiServicePreset,\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { effect } from '@preact/signals-react';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { type ContextBinder } from '@dxos/assistant';\nimport { Blueprint } from '@dxos/blueprints';\nimport { type Space } from '@dxos/client/echo';\nimport { Obj, Ref } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { isNonNullable } from '@dxos/util';\n\nexport type UpdateCallback = (key: string, active: boolean) => void;\n\n/**\n * Get collection of active blueprints based on the context.\n */\nexport const useBlueprints = (\n space: Space,\n context: ContextBinder,\n blueprintRegistry?: Blueprint.Registry,\n): [Blueprint.Blueprint[], UpdateCallback] => {\n const [blueprints, setBlueprints] = useState<Blueprint.Blueprint[]>([]);\n useEffect(() => {\n let t: NodeJS.Timeout;\n effect(() => {\n const refs = [...(context.blueprints.value ?? [])];\n t = setTimeout(async () => {\n const blueprints = (await Ref.Array.loadAll(refs)).filter(isNonNullable);\n setBlueprints(blueprints);\n });\n });\n\n return () => clearTimeout(t);\n }, [context]);\n\n const handleUpdate = useCallback<UpdateCallback>(\n (key: string, active: boolean) => {\n log.info('update', { key, active });\n if (active) {\n // TODO(burdon): Check if already in space.\n const blueprint = blueprintRegistry?.getByKey(key);\n if (blueprint) {\n // TODO(dmaretskyi): This should be done by Obj.clone.\n const { id: _id, ...data } = blueprint;\n const obj = space.db.add(Obj.make(Blueprint.Blueprint, data));\n void context.bind({ blueprints: [Ref.make(obj)] });\n }\n }\n },\n [space, context],\n );\n\n return [blueprints, handleUpdate] as const;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Layer } from 'effect';\nimport { useMemo } from 'react';\nimport { useDeepCompareMemoize } from 'use-deep-compare-effect';\n\nimport { type AiService, type ToolExecutionService, ToolRegistry, type ToolResolverService } from '@dxos/ai';\nimport { AiServiceTestingPreset } from '@dxos/ai/testing';\nimport { Capabilities, useCapabilities } from '@dxos/app-framework';\nimport { makeToolExecutionServiceFromFunctions, makeToolResolverFromFunctions } from '@dxos/assistant';\nimport { type Space } from '@dxos/client/echo';\nimport {\n ConfiguredCredentialsService,\n CredentialsService,\n DatabaseService,\n EventLogger,\n FunctionCallService,\n QueueService,\n TracingService,\n} from '@dxos/functions';\n\nexport * from '@dxos/assistant';\n\n// TODO(burdon): Deconstruct into separate layers?\nexport type ChatServices =\n | AiService\n | CredentialsService\n | DatabaseService\n | QueueService\n | FunctionCallService\n | ToolResolverService\n | ToolExecutionService\n | TracingService\n | EventLogger;\n\nexport type UseChatServicesProps = {\n space?: Space;\n};\n\n/**\n * Construct service layer.\n */\nexport const useChatServices = ({ space }: UseChatServicesProps): Layer.Layer<ChatServices> | undefined => {\n const toolRegistry = useToolRegistry();\n // TODO(dmaretskyi): We can provide the plugin registry as a layer and then build the entire layer stack from there. We need to think how plugin reactivity affect our layer structure.\n const toolResolver = useToolResolver();\n const toolExecutionService = useToolExecutionService();\n\n return useMemo(() => {\n return Layer.mergeAll(\n AiServiceTestingPreset('edge-remote').pipe(Layer.orDie), // TODO(burdon): Error management?\n Layer.succeed(CredentialsService, new ConfiguredCredentialsService()),\n space ? Layer.succeed(DatabaseService, DatabaseService.make(space.db)) : DatabaseService.notAvailable,\n space ? Layer.succeed(QueueService, QueueService.make(space.queues)) : QueueService.notAvailable,\n Layer.succeed(FunctionCallService, FunctionCallService.mock()),\n Layer.succeed(TracingService, TracingService.noop),\n Layer.succeed(EventLogger, EventLogger.noop),\n toolResolver,\n toolExecutionService,\n );\n }, [space, toolRegistry, toolResolver]);\n};\n\nconst useToolResolver = (): Layer.Layer<ToolResolverService> => {\n const functions = useCapabilities(Capabilities.Functions).flat();\n return useMemo(() => makeToolResolverFromFunctions(functions), [useDeepCompareMemoize(functions.map((f) => f.name))]);\n};\n\nconst useToolExecutionService = (): Layer.Layer<ToolExecutionService> => {\n const functions = useCapabilities(Capabilities.Functions).flat();\n return useMemo(\n () => makeToolExecutionServiceFromFunctions(functions),\n [useDeepCompareMemoize(functions.map((f) => f.name))],\n );\n};\n\n// TODO(burdon): Factor out.\nconst useToolRegistry = (): ToolRegistry => {\n const tools = useCapabilities(Capabilities.Tools).flat();\n return useMemo(() => {\n const toolRegistry = new ToolRegistry([]);\n for (const tool of tools) {\n if (!toolRegistry.has(tool)) {\n toolRegistry.register(tool);\n }\n }\n return toolRegistry;\n }, [useDeepCompareMemoize(tools)]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { Capabilities, useCapabilities } from '@dxos/app-framework';\nimport { type Space } from '@dxos/client/echo';\nimport { Filter, Obj, type Type } from '@dxos/echo';\nimport { type ReferencesProvider } from '@dxos/react-ui-chat';\n\n/**\n * Resolve references to objects in the space.\n */\nexport const useReferencesProvider = (space?: Space): ReferencesProvider | undefined => {\n // TODO(burdon): Pass in.\n const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);\n\n return useMemo<ReferencesProvider | undefined>((): ReferencesProvider | undefined => {\n if (!space) {\n return undefined;\n }\n\n return {\n getReferences: async ({ query }) => {\n const schemas = artifactDefinitions.map((artifact) => artifact.schema);\n const { objects } = await space.db\n .query(Filter.or(...schemas.map((schema) => Filter.type(schema as Type.Schema))))\n .run();\n\n return (\n objects\n // TODO(burdon): Remove cast ??? (+ two instances below).\n // .map((object) => {\n // log.info('object', { object, label: Obj.getLabel(object as any) });\n // return object;\n // })\n .filter((object) => stringMatch(query, Obj.getLabel(object as any) ?? ''))\n // TODO(dmaretskyi): `Type.getDXN` (at the point of writing) didn't work here as it was schema-only.\n .filter((object) => !!Obj.getDXN(object as Obj.Any))\n .map((object) => ({\n uri: Obj.getDXN(object as any)!.toString(),\n label: Obj.getLabel(object as any) ?? '',\n }))\n );\n },\n resolveReference: async ({ uri }) => {\n const object = await space.db.query(Filter.ids(uri)).first();\n return { uri, label: Obj.getLabel(object) ?? '' };\n },\n } satisfies ReferencesProvider;\n }, [space, artifactDefinitions]);\n};\n\nconst stringMatch = (query: string, label: string) => label.toLowerCase().startsWith(query.toLowerCase());\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createTool, type ExecutableTool, ToolResult } from '@dxos/ai';\nimport { Type } from '@dxos/echo';\nimport { getInvocationUrl, getUserFunctionUrlInMetadata } from '@dxos/functions';\nimport { type FunctionType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { type SpaceId } from '@dxos/react-client/echo';\nimport { getMeta } from '@dxos/react-client/echo';\n\n// TODO(burdon): Move to @dxos/ai.\nexport const convertFunctionToTool = (\n fn: FunctionType,\n edgeUrl: string,\n spaceId?: SpaceId | undefined,\n): ExecutableTool | undefined => {\n if (!fn.description || !fn.inputSchema) {\n return undefined;\n }\n const existingFunctionUrl = getUserFunctionUrlInMetadata(getMeta(fn));\n if (!existingFunctionUrl) {\n return undefined;\n }\n\n const url = getInvocationUrl(existingFunctionUrl, edgeUrl, { spaceId });\n\n return createTool('user-function', {\n name: fn.name,\n description: fn.description,\n schema: Type.toEffectSchema(fn.inputSchema),\n execute: async (input) => {\n log.info('execute function tool', { name: fn.name, url, input });\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(input),\n });\n\n return ToolResult.Success(await response.text());\n },\n });\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\nimport jsonpointer from 'jsonpointer';\nimport { type OpenAPIV2, type OpenAPIV3_1 } from 'openapi-types';\n\nimport { type ExecutableTool, ToolResult, createRawTool } from '@dxos/ai';\nimport { Type } from '@dxos/echo';\nimport { normalizeSchema } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { deepMapValues } from '@dxos/util';\n\nimport type { ApiAuthorization, ServiceType } from '../types';\n\nexport type CreateToolsFromApiOptions = {\n authorization?: ApiAuthorization;\n instructions?: string;\n};\n\nexport const createToolsFromService = async (service: ServiceType): Promise<ExecutableTool[]> => {\n invariant(service.interfaces?.length === 1 && service.interfaces[0].kind === 'api');\n const iface = service.interfaces[0];\n invariant(iface.schemaUrl);\n invariant(iface.schemaUrl);\n return createToolsFromApi(iface.schemaUrl, { authorization: iface.authorization });\n};\n\nexport const createToolsFromApi = async (\n url: string,\n options?: CreateToolsFromApiOptions,\n): Promise<ExecutableTool[]> => {\n const res = await fetch(url);\n const spec = (await res.json()) as OpenAPIV2.Document;\n log('spec', { spec });\n\n const tools: ExecutableTool[] = [];\n for (const [path, pathItem] of Object.entries(spec.paths)) {\n if (typeof pathItem !== 'object') {\n continue;\n }\n\n const { ...methods } = pathItem;\n for (const [method, m] of Object.entries(methods)) {\n const methodItem: OpenAPIV2.OperationObject = m as OpenAPIV2.OperationObject;\n log('methodItem', { path, method, methodItem });\n\n const parametersResolved: OpenAPIV2.ParameterObject[] =\n methodItem.parameters?.map((parameter: any) => {\n const resolved = resolveJsonSchema(parameter, spec);\n return resolved;\n }) ?? [];\n\n const inputSchema: Type.JsonSchema = {\n type: 'object',\n properties: {},\n };\n\n const endpointParameters: OpenAPIV2.ParameterObject[] = [];\n for (const parameter of parametersResolved) {\n log('parameter', { parameter });\n\n if (\n options?.authorization?.type === 'api-key' &&\n options.authorization.placement.type === 'query' &&\n parameter.in === 'query' &&\n parameter.name === options.authorization.placement.name\n ) {\n continue;\n }\n\n endpointParameters.push(parameter);\n\n if (parameter.schema) {\n inputSchema.properties![parameter.name] = normalizeSchema(parameter.schema);\n } else if (typeof parameter.type === 'string') {\n const { name, in: _in, required, ...schema } = parameter;\n inputSchema.properties![name] = normalizeSchema(schema);\n if (required) {\n inputSchema.required ??= [];\n inputSchema.required!.push(name);\n }\n }\n }\n\n log('inputSchema', { inputSchema });\n Schema.validateSync(Type.JsonSchema)(inputSchema);\n\n const description = methodItem.description ?? methodItem.summary;\n if (!description) {\n log.warn('no description', { path, method });\n continue;\n }\n\n const endpoint: EndpointDescriptor = {\n document: spec,\n path,\n method,\n parameters: endpointParameters,\n authorization: options?.authorization,\n };\n\n tools.push(\n // TODO(burdon): Namespace?\n createRawTool('openapi', {\n name: getToolName(path, method, methodItem),\n description: options?.instructions ? `${options.instructions}\\n\\n${description}` : description,\n parameters: inputSchema,\n execute: async (input) => {\n const response = await callApiEndpoint(endpoint, input);\n return ToolResult.Success(response);\n },\n }),\n );\n }\n }\n\n return tools;\n};\n\nconst getToolName = (path: string, method: string, methodItem: OpenAPIV2.OperationObject) => {\n if (methodItem.operationId) {\n return methodItem.operationId;\n }\n\n // Generate a name from the path and method.\n let name = `${method.toLowerCase()}_${path.replaceAll(/[{}/]/g, '_')}`;\n while (name.length > MAX_TOOL_NAME_LENGTH) {\n const lengthBefore = name.length;\n\n for (const word of GENERIC_WORDS) {\n if (name.includes(word)) {\n name = name.replace(word, '');\n break;\n }\n }\n name = name.replaceAll('__', '_').replace(/_$/, '');\n\n const lengthAfter = name.length;\n if (lengthBefore === lengthAfter) {\n break;\n }\n }\n name = name.replaceAll('__', '_').replace(/_$/, '').replace(/^_/, '');\n\n return name.slice(0, MAX_TOOL_NAME_LENGTH);\n};\n\nconst MAX_TOOL_NAME_LENGTH = 64;\nconst GENERIC_WORDS = [\n 'services',\n 'service',\n 'api',\n 'rest',\n 'endpoint',\n 'get',\n 'post',\n 'put',\n 'delete',\n 'patch',\n 'head',\n 'options',\n 'trace',\n 'service',\n 'api',\n 'endpoint',\n];\n\ntype EndpointDescriptor = {\n document: OpenAPIV3_1.Document | OpenAPIV2.Document;\n path: string;\n method: string;\n parameters: OpenAPIV2.ParameterObject[];\n authorization?: ApiAuthorization;\n};\n\nconst callApiEndpoint = async (endpoint: EndpointDescriptor, input: any) => {\n log.info('endpoint', { method: endpoint.method, name: endpoint.path, input });\n\n let url = getEndpointUrl(endpoint);\n const request: RequestInit = {\n method: endpoint.method,\n headers: {},\n };\n const query = new URLSearchParams();\n let body: any;\n for (const parameter of endpoint.parameters) {\n if (input[parameter.name] === undefined) {\n continue;\n }\n\n switch (parameter.in) {\n case 'header': {\n if (parameter.example) {\n (request.headers as any)[parameter.name] = parameter.default;\n }\n break;\n }\n case 'path': {\n url = url.replace(`{${parameter.name}}`, encodeURIComponent(input[parameter.name]));\n break;\n }\n case 'body': {\n const value = input[parameter.name];\n\n // Client-side validation\n const effectSchema = Type.toEffectSchema(parameter.schema);\n Schema.validateSync(effectSchema)(value);\n\n if (body) {\n throw new Error(`Duplicate body parameter: ${parameter.name}`);\n }\n body = value;\n break;\n }\n case 'query': {\n query.set(parameter.name, input[parameter.name]);\n break;\n }\n }\n }\n\n if (\n (endpoint.authorization?.type === 'api-key' && endpoint.authorization.placement.type === 'authorization-header') ||\n endpoint.authorization?.type === 'oauth'\n ) {\n (request.headers as any).Authorization = await resolveAuthorization(endpoint.authorization);\n } else if (endpoint.authorization?.type === 'api-key' && endpoint.authorization.placement.type === 'query') {\n query.set(endpoint.authorization.placement.name, endpoint.authorization.key);\n }\n\n if (query.size > 0) {\n url += `?${query.toString()}`;\n }\n\n if (body) {\n request.body = JSON.stringify(body);\n (request.headers as any)['Content-Type'] = 'application/json';\n }\n\n log.info('request', { url, request });\n const response = await fetch(url, request);\n\n log.info('response', { ok: response.ok, status: response.status, statusText: response.statusText });\n\n if (response.ok) {\n const contentType = response.headers.get('Content-Type');\n if (contentType?.includes('application/json')) {\n return await response.json();\n } else {\n return await response.text();\n }\n } else {\n if (response.headers.get('Content-Type')?.includes('application/json')) {\n const responseBody = await response.text();\n let error: any;\n try {\n error = JSON.parse(responseBody);\n } catch {\n error = responseBody;\n }\n log.error('error', { error });\n throw new Error(error.message);\n } else {\n const error = await response.text();\n log.error('error', { error });\n throw new Error(error);\n }\n }\n};\n\nconst getEndpointUrl = (endpoint: EndpointDescriptor) => {\n let url = '';\n if (isV3_1(endpoint.document) && endpoint.document.servers && endpoint.document.servers.length > 0) {\n url = endpoint.document.servers[0].url;\n } else {\n invariant(!isV3_1(endpoint.document));\n url = `${endpoint.document.schemes?.[0] ?? 'https'}://${endpoint.document.host}`;\n }\n\n if (!isV3_1(endpoint.document) && endpoint.document.basePath) {\n url += endpoint.document.basePath;\n }\n\n url += endpoint.path;\n\n return url;\n};\n\nexport const resolveAuthorization = async (authorization: ApiAuthorization): Promise<string> => {\n switch (authorization.type) {\n case 'api-key': {\n invariant(authorization.placement.type === 'authorization-header');\n return `Bearer ${authorization.key}`;\n }\n case 'oauth': {\n const response = await fetch(authorization.tokenUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: `grant_type=${authorization.grantType}&client_id=${authorization.clientId}&client_secret=${authorization.clientSecret}`,\n });\n const data = await response.json();\n return `Bearer ${data.access_token}`;\n }\n default: {\n throw new Error(`Unknown authorization type: ${(authorization as any).type}`);\n }\n }\n};\n\n/**\n * Resolves all $ref properties in a JSON schema.\n * Doesn't assume the structure of the schema.\n * The function looks from $ref properties in the schema and resolves them to their values in the base object.\n */\nconst resolveJsonSchema = (schema: any, base: any) => {\n return deepMapValues(schema, (value, recurse) => {\n if (typeof value === 'object' && value !== null && '$ref' in value && typeof value.$ref === 'string') {\n if (value.$ref.startsWith('#')) {\n const resolved = jsonpointer.get(base, value.$ref.slice(1));\n if (resolved) {\n return recurse(resolved);\n } else {\n log.warn('unresolved', { ref: value.$ref, base });\n }\n }\n }\n return recurse(value);\n });\n};\n\nconst isV3_1 = (document: OpenAPIV3_1.Document | OpenAPIV2.Document): document is OpenAPIV3_1.Document => {\n return (document as any).openapi === '3.0.1';\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useState, useEffect, Fragment, type FC } from 'react';\n\nimport { parseToolName, type Tool } from '@dxos/ai';\nimport { Capabilities, useCapabilities } from '@dxos/app-framework';\nimport { type ArtifactDefinition } from '@dxos/blueprints';\nimport { type Blueprint } from '@dxos/blueprints';\nimport { type Ref } from '@dxos/echo';\nimport { FunctionType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { Filter, type Space, useQuery } from '@dxos/react-client/echo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type ChatProcessor } from '../../hooks';\nimport { meta } from '../../meta';\nimport { createToolsFromService } from '../../tools';\nimport { ServiceType } from '../../types';\n\nexport type ToolboxProps = ThemedClassName<{\n blueprints?: readonly Ref.Ref<Blueprint.Blueprint>[];\n artifacts?: ArtifactDefinition[];\n services?: { service: ServiceType; tools: Tool[] }[];\n functions?: FunctionType[];\n activeBlueprints?: readonly Ref.Ref<Blueprint.Blueprint>[];\n striped?: boolean;\n}>;\n\nexport const Toolbox = ({\n classNames,\n artifacts,\n functions,\n services,\n blueprints,\n activeBlueprints,\n striped,\n}: ToolboxProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <div className={mx('flex flex-col overflow-y-auto box-content', classNames)}>\n {blueprints && blueprints.length > 0 && (\n <Section\n title='Blueprints'\n items={blueprints.map(({ target }) => ({\n name: target?.name ?? '',\n description: target?.description ?? '',\n subitems: target?.tools.map((toolId) => ({ name: `∙ ${parseToolName(toolId)}` })),\n }))}\n />\n )}\n\n {activeBlueprints && activeBlueprints.length > 0 && (\n <Section\n title='Blueprints'\n items={activeBlueprints.map(({ target }) => ({\n name: target?.name ?? '',\n description: target?.description ?? '',\n subitems: target?.tools.map((toolId) => ({ name: `∙ ${parseToolName(toolId)}` })),\n }))}\n />\n )}\n\n {artifacts && artifacts.length > 0 && (\n <Section\n title='Artifacts'\n items={artifacts.map(({ name, description, tools }) => ({\n name,\n description,\n subitems: tools.map(({ name, description }) => ({ name: `∙ ${parseToolName(name)}`, description })),\n }))}\n />\n )}\n\n {services && services.length > 0 && (\n <Section\n title='Services'\n items={services.map(({ service: { serviceId, name, description }, tools }) => ({\n name: name ?? serviceId,\n description,\n subitems: tools.map(({ name, description }) => ({ name: `∙ ${name}`, description })),\n }))}\n />\n )}\n\n {functions && functions.length > 0 && (\n <Section title='Functions' items={functions.map(({ name, description }) => ({ name, description }))} />\n )}\n\n {!blueprints?.length &&\n !activeBlueprints?.length &&\n !artifacts?.length &&\n !services?.length &&\n !functions?.length && <div>{t('no tools')}</div>}\n </div>\n );\n};\n\nconst Section: FC<{\n title: string;\n items: { name: string; description?: string; subitems?: { name: string; description?: string }[] }[];\n striped?: boolean;\n}> = ({ title, items, striped }) => {\n const stripeClassNames = 'odd:bg-neutral-50 dark:odd:bg-neutral-800';\n const gridClassNames = 'grid grid-cols-[8rem_1fr]';\n const subGridClassNames = mx('col-span-full grid grid-cols-subgrid text-xs px-2', striped && stripeClassNames);\n\n return (\n <div>\n <h1 className='px-2 text-sm'>{title}</h1>\n <div className={gridClassNames}>\n {items.map(({ name, description, subitems }, i) => (\n <Fragment key={i}>\n {name && (\n <div className={subGridClassNames}>\n <div className='truncate text-primary-500'>{name}</div>\n <div className='line-clamp-2'>{description}</div>\n </div>\n )}\n {subitems?.map(({ name, description }, i) => (\n <div key={i} className={mx(subGridClassNames, striped && stripeClassNames)}>\n <div className='truncate'>{name}</div>\n <div className='line-clamp-3 text-subdued'>{description}</div>\n </div>\n ))}\n </Fragment>\n ))}\n </div>\n </div>\n );\n};\n\nexport type ToolboxContainerProps = ThemedClassName<{\n space?: Space;\n processor?: ChatProcessor;\n}>;\n\nexport const ToolboxContainer = ({ classNames, space, processor }: ToolboxContainerProps) => {\n // Plugin artifacts.\n const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);\n\n // Registered services.\n const services = useQuery(space, Filter.type(ServiceType));\n const [serviceTools, setServiceTools] = useState<{ service: ServiceType; tools: Tool[] }[]>([]);\n useEffect(() => {\n log('creating service tools...', { services: services.length });\n queueMicrotask(async () => {\n const tools = await Promise.all(\n services.map(async (service) => ({ service, tools: await createToolsFromService(service) })),\n );\n\n setServiceTools(tools);\n });\n }, [services]);\n\n // Deployed functions.\n const functions = useQuery(space, Filter.type(FunctionType));\n\n return (\n <Toolbox\n classNames={classNames}\n blueprints={processor?.context.blueprints.value}\n artifacts={artifactDefinitions}\n services={serviceTools}\n functions={functions}\n />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Extension, Prec } from '@codemirror/state';\nimport { keymap } from '@codemirror/view';\nimport { createContext } from '@radix-ui/react-context';\nimport { dedupeWith } from 'effect/Array';\nimport React, { type PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { CollaborationActions, createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Event } from '@dxos/async';\nimport { DXN, Obj, Ref } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { useVoiceInput } from '@dxos/plugin-transcription';\nimport { type Expando, getSpace, useQueue, type Space } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Input, useTranslation, type ThemedClassName } from '@dxos/react-ui';\nimport { ChatEditor, type ChatEditorController, type ChatEditorProps, references } from '@dxos/react-ui-chat';\nimport { type ScrollController } from '@dxos/react-ui-components';\nimport { mx } from '@dxos/react-ui-theme';\nimport { DataType } from '@dxos/schema';\nimport { isNotFalsy } from '@dxos/util';\n\nimport { type ChatEvent } from './events';\nimport { type ChatProcessor, useBlueprints, useReferencesProvider } from '../../hooks';\nimport { meta } from '../../meta';\nimport { type Assistant } from '../../types';\nimport {\n ChatActions,\n type ChatActionsProps,\n ChatOptionsMenu,\n ChatPresets,\n type ChatPresetsProps,\n ChatReferences,\n type ChatReferencesProps,\n ChatStatusIndicator,\n} from '../ChatPrompt';\nimport { ChatThread as NativeChatThread, type ChatThreadProps as NativeChatThreadProps } from '../ChatThread';\n\n// TODO(burdon): Factor out.\nconst Endcap = ({ children }: PropsWithChildren) => {\n return (\n <div className='grid w-[var(--rail-action)] h-[var(--rail-action)] items-center justify-center'>{children}</div>\n );\n};\n\n//\n// Context\n// NOTE: The context should not be exported. It is only used internally.\n// Components outside of this Radix-style group shuld define their own APIs.\n//\n\n// TODO(burdon): Inject via effect layer.\ntype ChatContextValue = {\n debug?: boolean;\n event: Event<ChatEvent>;\n space: Space;\n chat: Assistant.Chat;\n processor: ChatProcessor;\n messages: DataType.Message[];\n\n /** @deprecated Remove and replace with context. */\n artifact?: Expando;\n};\n\n// NOTE: Do not export.\nconst [ChatContextProvider, useChatContext] = createContext<ChatContextValue>('Chat');\n\n//\n// Root\n//\n\ntype ChatRootProps = ThemedClassName<\n PropsWithChildren<\n Pick<ChatContextValue, 'chat' | 'processor' | 'artifact'> & {\n onEvent?: (event: ChatEvent) => void;\n }\n >\n>;\n\nconst ChatRoot = ({ classNames, children, chat, processor, artifact, onEvent, ...props }: ChatRootProps) => {\n const [debug, setDebug] = useState(false);\n const space = getSpace(chat);\n\n // Messages.\n const queue = useQueue<DataType.Message>(chat?.queue.dxn);\n const messages = useMemo(\n () =>\n dedupeWith(\n [...(queue?.objects?.filter(Obj.instanceOf(DataType.Message)) ?? []), ...(processor?.messages.value ?? [])],\n (a, b) => a.id === b.id,\n ),\n [queue?.objects, processor?.messages.value],\n );\n\n // TODO(burdon): Replace with tool.\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n useEffect(() => {\n if (!processor?.streaming.value && queue?.objects && artifact) {\n const message = queue.objects[queue.objects.length - 1];\n if (dispatch && space && chat && message) {\n void dispatch(\n createIntent(CollaborationActions.InsertContent, {\n target: artifact,\n object: Ref.fromDXN(new DXN(DXN.kind.QUEUE, [...chat.queue.dxn.parts, message.id])),\n label: 'View proposal',\n }),\n );\n }\n }\n }, [queue, processor?.streaming.value]);\n\n // Events.\n const event = useMemo(() => new Event<ChatEvent>(), []);\n useEffect(() => {\n return event.on((event) => {\n switch (event.type) {\n case 'toggle-debug': {\n setDebug((debug) => !debug);\n break;\n }\n\n case 'submit': {\n if (!processor.streaming.value) {\n void processor.request(event.text);\n }\n break;\n }\n\n case 'cancel': {\n void processor.cancel();\n break;\n }\n\n default: {\n onEvent?.(event);\n }\n }\n });\n }, [event, onEvent]);\n\n if (!space) {\n return null;\n }\n\n return (\n <ChatContextProvider\n debug={debug}\n event={event}\n chat={chat}\n space={space}\n processor={processor}\n messages={messages}\n {...props}\n >\n <div role='none' className={mx('flex flex-col h-full overflow-hidden', classNames)}>\n {children}\n </div>\n </ChatContextProvider>\n );\n};\n\nChatRoot.displayName = 'Chat.Root';\n\n//\n// Thread\n//\n\ntype ChatThreadProps = Omit<NativeChatThreadProps, 'identity' | 'space' | 'messages' | 'tools' | 'onEvent'>;\n\nconst ChatThread = (props: ChatThreadProps) => {\n const { debug, event, space, processor, messages } = useChatContext(ChatThread.displayName);\n const identity = useIdentity();\n\n const scrollerRef = useRef<ScrollController>(null);\n useEffect(() => {\n return event.on((event) => {\n switch (event.type) {\n case 'submit':\n case 'scroll-to-bottom':\n scrollerRef.current?.scrollToBottom('smooth');\n break;\n }\n });\n }, [event]);\n\n if (!identity) {\n return null;\n }\n\n return (\n <NativeChatThread\n {...props}\n ref={scrollerRef}\n debug={debug}\n identity={identity}\n space={space}\n messages={messages}\n tools={processor?.tools}\n onEvent={(ev) => event.emit(ev)}\n />\n );\n};\n\nChatThread.displayName = 'Chat.Thread';\n\n//\n// Prompt\n//\n\ntype ChatPromptProps = ThemedClassName<\n Pick<ChatEditorProps, 'placeholder'> &\n Omit<ChatPresetsProps, 'onChange'> & {\n expandable?: boolean;\n online?: boolean;\n onChangeOnline?: (online: boolean) => void;\n onChangePreset?: ChatPresetsProps['onChange'];\n }\n>;\n\nconst ChatPrompt = ({\n classNames,\n placeholder,\n expandable,\n online,\n presets,\n preset,\n onChangePreset,\n onChangeOnline,\n}: ChatPromptProps) => {\n const { t } = useTranslation(meta.id);\n const { space, event, processor } = useChatContext(ChatPrompt.displayName);\n\n const [active, setActive] = useState(false);\n useEffect(() => {\n return event.on((event) => {\n switch (event.type) {\n case 'record-start':\n setActive(true);\n break;\n case 'record-stop':\n setActive(false);\n break;\n }\n });\n }, [event]);\n\n const editorRef = useRef<ChatEditorController>(null);\n\n // TODO(burdon): Configure capability in TranscriptionPlugin.\n const { recording } = useVoiceInput({\n active,\n onUpdate: (text) => {\n editorRef.current?.setText(text);\n editorRef.current?.focus();\n },\n });\n\n const [blueprints, handleUpdateBlueprints] = useBlueprints(space, processor.context, processor.blueprintRegistry);\n\n // TODO(burdon): Reconcile with object tags.\n const contextProvider = useReferencesProvider(space);\n const extensions = useMemo<Extension[]>(() => {\n return [\n contextProvider && references({ provider: contextProvider }),\n expandable &&\n Prec.highest(\n keymap.of([\n {\n key: 'cmd-d',\n preventDefault: true,\n run: () => {\n event.emit({ type: 'toggle-debug' });\n return true;\n },\n },\n {\n key: 'cmd-ArrowUp',\n preventDefault: true,\n run: () => {\n event.emit({ type: 'thread-open' });\n return true;\n },\n },\n {\n key: 'cmd-ArrowDown',\n preventDefault: true,\n run: () => {\n event.emit({ type: 'thread-close' });\n return true;\n },\n },\n ]),\n ),\n ].filter(isNotFalsy);\n }, [event, expandable, contextProvider]);\n\n const handleSubmit = useCallback<NonNullable<ChatEditorProps['onSubmit']>>(\n (text) => {\n if (!processor.streaming.value) {\n event.emit({ type: 'submit', text });\n return true;\n }\n },\n [processor, event],\n );\n\n const handleEvent = useCallback<NonNullable<ChatActionsProps['onEvent']>>(\n (ev) => {\n event.emit(ev);\n },\n [event],\n );\n\n // TODO(burdon): Update context.\n const handleUpdateReferences = useCallback<NonNullable<ChatReferencesProps['onUpdate']>>((ids) => {\n log.info('update', { ids });\n }, []);\n\n return (\n <div\n className={mx(\n 'is-full grid grid-cols-[var(--rail-action)_1fr_var(--rail-action)] grid-rows-[min-content_min-content_min-content]',\n classNames,\n )}\n >\n <Endcap>\n <ChatStatusIndicator preset={preset} error={processor.error.value} processing={processor.streaming.value} />\n </Endcap>\n\n <ChatEditor\n ref={editorRef}\n autoFocus\n lineWrapping\n classNames='col-span-2 pis-1 pbs-2'\n placeholder={placeholder ?? t('prompt placeholder')}\n extensions={extensions}\n onSubmit={handleSubmit}\n />\n\n <div />\n <ChatReferences\n classNames='col-span-2 flex pis-1 items-center'\n space={space}\n context={processor.context}\n onUpdate={handleUpdateReferences}\n />\n\n <ChatOptionsMenu\n blueprintRegistry={processor.blueprintRegistry}\n blueprints={blueprints}\n onChange={handleUpdateBlueprints}\n />\n <ChatActions\n classNames='col-span-2'\n microphone={true}\n recording={recording}\n processing={processor.streaming.value}\n onEvent={handleEvent}\n >\n <>\n <div className='grow' />\n {presets && <ChatPresets preset={preset} presets={presets} onChange={onChangePreset} />}\n {online !== undefined && (\n <Input.Root>\n <Input.Switch classNames='mis-2 mie-2' checked={online} onCheckedChange={onChangeOnline} />\n </Input.Root>\n )}\n </>\n </ChatActions>\n </div>\n );\n};\n\nChatPrompt.displayName = 'Chat.Prompt';\n\n//\n// Chat\n//\n\nexport const Chat = {\n Root: ChatRoot,\n Thread: ChatThread,\n Prompt: ChatPrompt,\n};\n\nexport type { ChatRootProps, ChatThreadProps, ChatPromptProps, ChatEvent };\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\nimport { type ChatEvent } from '../Chat';\n\nexport type ChatActionsProps = ThemedClassName<\n PropsWithChildren<{\n microphone?: boolean;\n recording?: boolean;\n processing?: boolean;\n onEvent?: (event: ChatEvent) => void;\n }>\n>;\n\nexport const ChatActions = ({ classNames, children, microphone, recording, processing, onEvent }: ChatActionsProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <div className={mx('flex items-center mie-1', classNames)}>\n {children}\n\n {(processing && (\n <IconButton\n disabled={!processing}\n classNames='px-1.5'\n variant='ghost'\n size={5}\n icon='ph--x--regular'\n iconOnly\n label={t('button cancel processing')}\n onClick={() => onEvent?.({ type: 'cancel' })}\n />\n )) || (\n <IconButton\n disabled\n classNames='px-1.5'\n variant='ghost'\n size={5}\n icon='ph--arrow-down--regular'\n iconOnly\n label={t('button scroll down')}\n onClick={() => onEvent?.({ type: 'scroll-to-bottom' })}\n />\n )}\n\n {microphone && (\n <IconButton\n disabled={!processing}\n classNames={mx('px-1.5', recording && 'bg-primary-500')}\n variant='ghost'\n size={5}\n icon='ph--microphone--regular'\n iconOnly\n noTooltip\n label={t('button microphone')}\n onMouseDown={() => onEvent?.({ type: 'record-start' })}\n onMouseUp={() => onEvent?.({ type: 'record-stop' })}\n onTouchStart={() => onEvent?.({ type: 'record-start' })}\n onTouchEnd={() => onEvent?.({ type: 'record-stop' })}\n />\n )}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type Blueprint } from '@dxos/blueprints';\nimport { DropdownMenu, IconButton, Input, useTranslation } from '@dxos/react-ui';\n\nimport { meta } from '../../meta';\n\nexport type ChatOptionsMenuProps = {\n blueprintRegistry?: Blueprint.Registry;\n blueprints?: Blueprint.Blueprint[];\n onChange?: (key: string, active: boolean) => void;\n};\n\nexport const ChatOptionsMenu = ({ blueprintRegistry, blueprints, onChange }: ChatOptionsMenuProps) => {\n const { t } = useTranslation(meta.id);\n const blueprintOptions = useMemo(\n () => blueprintRegistry?.query().map((blueprint) => ({ key: blueprint.key, label: blueprint.name })),\n [blueprintRegistry],\n );\n\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild disabled={!blueprintOptions?.length}>\n <IconButton icon='ph--plus--regular' variant='ghost' size={5} iconOnly label={t('button add blueprint')} />\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content side='left'>\n <DropdownMenu.Viewport>\n {blueprintOptions?.map((option) => (\n <DropdownMenu.Item key={option.key}>\n <Input.Root>\n <Input.Checkbox\n checked={!!blueprints?.find((blueprint) => blueprint.key === option.key)}\n onCheckedChange={(checked) => onChange?.(option.key, !!checked)}\n />\n {/* TODO(burdon): Remove need for custom margin. */}\n {/* TODO(burdon): Clicking on label doesn't toggle checkbox. */}\n <Input.Label classNames='m-0'>{option.label}</Input.Label>\n </Input.Root>\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Select } from '@dxos/react-ui';\n\nexport type ChatPresetsProps = {\n presets?: { id: string; label: string }[];\n preset?: string;\n onChange?: (id: string) => void;\n};\n\nexport const ChatPresets = ({ presets, preset, onChange }: ChatPresetsProps) => {\n return (\n <Select.Root value={preset} onValueChange={onChange}>\n <Select.TriggerButton classNames='text-sm' />\n <Select.Content>\n {presets?.map(({ id, label }) => (\n <Select.Option key={id} value={id} classNames='text-sm'>\n {label}\n </Select.Option>\n ))}\n </Select.Content>\n </Select.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { type ContextBinder } from '@dxos/assistant';\nimport { type Space } from '@dxos/client/echo';\nimport { Filter, Obj, Ref } from '@dxos/echo';\nimport { type ThemedClassName, useAsyncState, useTranslation } from '@dxos/react-ui';\nimport { TagPicker, type TagPickerItemData, type TagPickerOptions } from '@dxos/react-ui-tag-picker';\nimport { mx } from '@dxos/react-ui-theme';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta } from '../../meta';\n\nexport type ChatReferencesProps = ThemedClassName<{\n space: Space;\n context: ContextBinder;\n onUpdate?: (ids: string[]) => void;\n}>;\n\nexport const ChatReferences = ({ classNames, space, context, onUpdate }: ChatReferencesProps) => {\n const { t: _t } = useTranslation(meta.id);\n\n const [items] = useAsyncState<TagPickerItemData[]>(async () => {\n const objects = await Ref.Array.loadAll(context.objects.value ?? []);\n return objects.filter(isNonNullable).map((obj) => ({ id: obj.id, label: Obj.getLabel(obj) ?? obj.id }));\n }, [context]);\n\n const handleSearch = useCallback<NonNullable<TagPickerOptions['onSearch']>>(\n (text, ids) => {\n // TODO(burdon): Filter by Item tag (e.g., exclude \"contacts\") and Query by object label.\n // TODO(burdon): Change to Filter.text().\n const objects = space.db.query(Filter.everything()).runSync();\n return objects\n .map(({ object }) => ({ id: object.id, label: Obj.getLabel(object) ?? '' }))\n .filter(({ id, label }) => !ids.includes(id) && label.toLocaleLowerCase().includes(text.toLocaleLowerCase()));\n },\n [space],\n );\n\n return (\n <TagPicker\n classNames={mx('h-[1.75rem] text-sm', classNames)}\n mode='multi-select'\n // placeholder={t('context objects placeholder')}\n items={items}\n onSearch={handleSearch}\n onUpdate={onUpdate}\n />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { Icon, Tooltip, useTimeout } from '@dxos/react-ui';\nimport { Spinner } from '@dxos/react-ui-sfx';\nimport { errorText } from '@dxos/react-ui-theme';\n\nexport type ChatStatusIndicatorProps = {\n preset?: string;\n error?: Error;\n processing?: boolean;\n};\n\nexport const ChatStatusIndicator = ({ preset, error, processing }: ChatStatusIndicatorProps) => {\n const [init, setInit] = useState(false);\n useEffect(() => {\n setInit(false);\n }, [preset]);\n useTimeout(\n async () => {\n setInit(true);\n },\n 1_500,\n [preset],\n );\n\n if (error) {\n return (\n <Tooltip.Trigger content={error.message} delayDuration={0}>\n <Icon icon='ph--warning-circle--regular' classNames={errorText} size={5} />\n </Tooltip.Trigger>\n );\n }\n\n return <Spinner state={!init ? 'flash' : processing ? 'spin' : 'pulse'} />;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type CSSProperties, forwardRef, useMemo } from 'react';\n\nimport { PublicKey } from '@dxos/keys';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { ScrollContainer, type ScrollController } from '@dxos/react-ui-components';\nimport { mx } from '@dxos/react-ui-theme';\nimport { type DataType } from '@dxos/schema';\nimport { keyToFallback } from '@dxos/util';\n\nimport { ChatMessage, type ChatMessageProps } from './ChatMessage';\nimport { messageReducer } from './reducer';\n\nexport type ChatThreadProps = ThemedClassName<\n {\n identity?: Identity;\n messages?: DataType.Message[];\n collapse?: boolean;\n } & Pick<ChatMessageProps, 'debug' | 'space' | 'processor' | 'tools' | 'onEvent'>\n>;\n\nexport const ChatThread = forwardRef<ScrollController, ChatThreadProps>(\n ({ classNames, identity, messages, collapse = true, ...props }, forwardedRef) => {\n const userHue = useMemo(() => {\n return identity?.profile?.data?.hue || keyToFallback(identity?.identityKey ?? PublicKey.random()).hue;\n }, [identity]);\n\n // TODO(dmaretskyi): This needs to be a separate type: `id` is not a valid ObjectId, this needs to accommodate messageId for deletion.\n const { messages: filteredMessages = [] } = useMemo(() => {\n if (collapse) {\n return (messages ?? []).reduce<{ messages: DataType.Message[]; current?: DataType.Message }>(messageReducer, {\n messages: [],\n });\n } else {\n return { messages: messages ?? [] };\n }\n }, [messages, collapse]);\n\n return (\n <ScrollContainer ref={forwardedRef} classNames={classNames} fade>\n <div\n role='none'\n className={mx(filteredMessages.length > 0 && 'pbs-4 pbe-4')}\n style={{ '--user-fill': `var(--dx-${userHue}Fill)` } as CSSProperties}\n >\n {filteredMessages.map((message) => (\n <ChatMessage key={message.id} message={message} {...props} />\n ))}\n </div>\n </ScrollContainer>\n );\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { Fragment, type FC, type PropsWithChildren } from 'react';\n\nimport { type Tool } from '@dxos/ai';\nimport { Surface } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { type Space } from '@dxos/react-client/echo';\nimport { Button, Icon, IconButton, useTranslation, type ThemedClassName } from '@dxos/react-ui';\nimport {\n MarkdownViewer,\n ToggleContainer as NativeToggleContainer,\n type ToggleContainerProps,\n} from '@dxos/react-ui-components';\nimport { mx } from '@dxos/react-ui-theme';\nimport { type ContentBlock, type DataType } from '@dxos/schema';\nimport { safeParseJson } from '@dxos/util';\n\nimport { Json, ToolBlock, isToolMessage } from './ToolBlock';\nimport { type ChatProcessor } from '../../hooks';\nimport { meta } from '../../meta';\nimport { type ChatEvent } from '../Chat';\nimport { ToolboxContainer } from '../Toolbox';\n\nexport type ChatMessageProps = ThemedClassName<{\n debug?: boolean;\n space?: Space;\n message: DataType.Message;\n // TODO(burdon): Move to context.\n processor?: ChatProcessor;\n tools?: Tool[];\n onEvent?: (event: ChatEvent) => void;\n}>;\n\nexport const ChatMessage = ({ classNames, debug, space, message, processor, tools, onEvent }: ChatMessageProps) => {\n const { t } = useTranslation(meta.id);\n const {\n sender: { role },\n blocks,\n } = message;\n\n // TODO(burdon): Restructure types to make check unnecessary.\n if (isToolMessage(message)) {\n return (\n <MessageContainer classNames={mx(classNames, 'animate-[fadeIn_0.5s]')}>\n <ToolBlock classNames={panelClasses} message={message} tools={tools} />\n </MessageContainer>\n );\n }\n\n return (\n <>\n {debug && (\n <div className={mx('flex justify-end text-subdued', marginClasses)}>\n <pre className='text-xs'>{JSON.stringify({ created: message.created })}</pre>\n </div>\n )}\n\n {blocks.map((block, idx) => {\n // TODO(burdon): Filter empty messages.\n if (block._tag === 'text' && block.text.replaceAll(/\\s+/g, '').length === 0) {\n return null;\n }\n\n const Component: BlockComponent = components[block._tag] ?? components.default!;\n if (!Component) {\n return null;\n }\n\n return (\n <Fragment key={idx}>\n <MessageContainer classNames={classNames} user={block._tag === 'text' && role === 'user'}>\n <Component space={space} processor={processor} block={block} onEvent={onEvent} />\n </MessageContainer>\n {debug && (\n <div className={mx('flex justify-end text-subdued', marginClasses)}>\n <pre className='text-xs'>{JSON.stringify({ block: block._tag })}</pre>\n </div>\n )}\n </Fragment>\n );\n })}\n <div className={mx('flex justify-end pbs-2 pbe-2 opacity-50 hover:opacity-100', marginClasses)}>\n <IconButton\n classNames='animate-[fadeIn_0.5s]'\n icon='ph--trash--regular'\n iconOnly\n label={t('button delete message')}\n onClick={() => onEvent?.({ type: 'delete', id: message.id })}\n />\n </div>\n </>\n );\n};\n\ntype BlockComponentProps = {\n space?: Space;\n block: ContentBlock.Any;\n /** @deprecated Replace with context */\n processor?: ChatProcessor;\n onEvent?: (event: ChatEvent) => void;\n};\n\ntype BlockComponent = FC<BlockComponentProps>;\n\nconst components: Partial<Record<ContentBlock.Any['_tag'] | 'default', BlockComponent>> = {\n //\n // Text\n //\n ['text' as const]: ({ block }) => {\n invariant(block._tag === 'text');\n // const [open, setOpen] = useState(block.disposition === 'cot' && block.pending);\n const title = block.disposition ? titles[block.disposition] : undefined;\n if (!title) {\n return <MarkdownViewer content={block.text} />;\n }\n\n // TOOD(burdon): Store last time user opened/closed COT.\n // Autoclose when streaming ends.\n // useEffect(() => {\n // if (block.disposition === 'cot' && !block.pending) {\n // setOpen(false);\n // }\n // }, [block.disposition, block.pending]);\n\n return (\n <ToggleContainer\n // open={open}\n defaultOpen={systemDispositions.includes(block.disposition ?? '') && block.pending}\n title={title}\n icon={\n block.pending ? (\n <Icon icon={'ph--circle-notch--regular'} classNames='text-subdued animate-spin' size={4} />\n ) : undefined\n }\n >\n <MarkdownViewer\n content={block.text}\n classNames={['pbe-2', systemDispositions.includes(block.disposition ?? '') && 'text-sm text-subdued']}\n />\n </ToggleContainer>\n );\n },\n\n //\n // JSON\n //\n ['json' as const]: ({ space, processor, block, onEvent }) => {\n invariant(block._tag === 'json');\n\n switch (block.disposition) {\n case 'tool_list': {\n return (\n <ToggleContainer title={titles[block.disposition]} defaultOpen={true}>\n <ToolboxContainer space={space} processor={processor} classNames='pbe-2' />\n </ToggleContainer>\n );\n }\n\n case 'suggest': {\n const { text = '' }: { text: string } = safeParseJson(block.data ?? '{}') ?? ({} as any);\n return (\n <IconButton icon='ph--lightning--regular' label={text} onClick={() => onEvent?.({ type: 'submit', text })} />\n );\n }\n\n case 'select': {\n const { options = [] }: { options: string[] } = safeParseJson(block.data ?? '{}') ?? ({} as any);\n return (\n <div className='flex flex-wrap gap-1'>\n {options.map((text, idx) => (\n <Button\n classNames={'animate-[fadeIn_0.5s] rounded-sm text-sm'}\n key={idx}\n onClick={() => onEvent?.({ type: 'submit', text })}\n >\n {text}\n </Button>\n ))}\n </div>\n );\n }\n\n case 'graph': {\n return (\n <div className='flex flex-wrap gap-1'>\n <Surface\n role='card'\n data={{ subject: JSON.parse(block.data ?? '{}') }}\n limit={1}\n fallback={<div className='font-mono text-xs text-pre'>{block.data}</div>}\n />\n {onEvent && (\n <IconButton\n icon='ph--plus--regular'\n label='Add to graph'\n onClick={() => onEvent?.({ type: 'add', object: JSON.parse(block.data ?? '{}') })}\n />\n )}\n </div>\n );\n }\n\n default: {\n const title = block.disposition ? titles[block.disposition] : undefined;\n return (\n <ToggleContainer title={title ?? 'JSON'}>\n <Json data={safeParseJson(block.data ?? block)} />\n </ToggleContainer>\n );\n }\n }\n },\n\n //\n // Default\n //\n default: ({ block }) => {\n let title = titles[block._tag];\n if (block._tag === 'toolCall') {\n title = `Tool [${block.name}]`; // TODO(burdon): Get label from tool.\n } else {\n title = block._tag;\n }\n\n return (\n <ToggleContainer title={title ?? 'JSON'}>\n <Json data={block} />\n </ToggleContainer>\n );\n },\n};\n\n// TODO(burdon): Translations.\nconst titles: Record<string, string> = {\n ['cot' as const]: 'Chain of thought',\n ['artifact' as const]: 'Artifact',\n ['tool_use' as const]: 'Tool request',\n ['tool_result' as const]: 'Tool result',\n ['tool_list' as const]: 'Tools',\n ['artifact-update' as const]: 'Artifact(s) changed',\n};\n\nconst systemDispositions: string[] = ['cot', 'artifact-update'];\n\nconst panelClasses = 'flex flex-col is-full bg-activeSurface rounded-sm';\nconst marginClasses = 'pie-4 pis-4';\nconst paddingClasses = 'pis-2 pie-2 pbs-0.5 pbe-0.5';\n\nconst MessageContainer = ({ classNames, children, user }: ThemedClassName<PropsWithChildren<{ user?: boolean }>>) => {\n if (!children) {\n return null;\n }\n\n return (\n <div role='list-item' className={mx('flex is-full', user && 'justify-end', marginClasses, classNames)}>\n <div className={mx(user ? ['rounded-sm', 'bg-[--user-fill] text-accentSurfaceText', paddingClasses] : 'is-full')}>\n {children}\n </div>\n </div>\n );\n};\n\nconst ToggleContainer = (props: ToggleContainerProps) => {\n return <NativeToggleContainer {...props} classNames={mx(panelClasses, props.classNames)} />;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { type AgentStatus, type Tool } from '@dxos/ai';\nimport { log } from '@dxos/log';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { NumericTabs, StatusRoll, ToggleContainer } from '@dxos/react-ui-components';\nimport { type JsonProps, Json as NativeJson } from '@dxos/react-ui-syntax-highlighter';\nimport { type DataType } from '@dxos/schema';\nimport { isNonNullable, isNotFalsy } from '@dxos/util';\n\nexport const isToolMessage = (message: DataType.Message) => {\n return message.blocks.some((block) => block._tag === 'toolCall' || block._tag === 'toolResult');\n};\n\nconst getToolName = (tool: Tool) => {\n return tool.namespace && tool.function ? `${tool.namespace}:${tool.function}` : tool.name.split('_').pop();\n};\n\nconst getToolCaption = (tool: Tool | undefined, status: AgentStatus | undefined) => {\n if (!tool) {\n return 'Calling tool...';\n }\n\n return status?.message ?? tool.caption ?? `Calling ${getToolName(tool)}...`;\n};\n\nexport type ToolBlockProps = ThemedClassName<{\n message: DataType.Message;\n tools?: Tool[];\n}>;\n\nexport const ToolBlock: FC<ToolBlockProps> = ({ classNames, message, tools }) => {\n const { blocks = [] } = message;\n\n let request: { tool: Tool | undefined; block: any } | undefined;\n const toolBlocks = blocks.filter((block) => block._tag === 'toolCall' || block._tag === 'toolResult');\n const items = toolBlocks\n .map((block) => {\n switch (block._tag) {\n case 'toolCall': {\n // TODO(burdon): Skip these updates?\n if (block.pending && request?.block.toolCallId === block.toolCallId) {\n return null;\n }\n\n request = { tool: tools?.find((tool) => tool.name === block.name), block };\n return {\n title: getToolCaption(request.tool, undefined), // block.status), // TODO(burdon): Get status?\n block,\n };\n }\n\n case 'toolResult': {\n if (!request) {\n log.warn('unexpected message', { block });\n return { title: 'Error', block };\n }\n\n return {\n title: `${getToolCaption(request.tool, undefined)} (Success)`,\n block,\n };\n }\n\n default: {\n request = undefined;\n return {\n title: 'Error',\n block,\n };\n }\n }\n })\n .filter(isNonNullable);\n\n return <ToolContainer classNames={classNames} items={items} />;\n};\n\nexport const ToolContainer: FC<ThemedClassName<{ items: { title: string; block: any }[] }>> = ({\n classNames,\n items,\n}) => {\n const tabsRef = useRef<HTMLDivElement>(null);\n const [selected, setSelected] = useState(0);\n const [open, setOpen] = useState(false);\n useEffect(() => {\n if (open) {\n tabsRef.current?.focus();\n }\n }, [open]);\n\n const handleSelect = (index: number) => {\n if (index === selected) {\n setOpen(false);\n } else {\n setSelected(index);\n }\n };\n\n const title = useMemo(() => {\n const lines = items.map((item) => item.title).filter(isNotFalsy);\n return <StatusRoll key='status-roll' lines={lines} duration={1_000} autoAdvance />;\n }, [items]);\n\n return (\n <ToggleContainer classNames={['flex flex-col', classNames]} title={title} open={open} onChangeOpen={setOpen}>\n <div className='w-full grid grid-cols-[32px_1fr]'>\n <NumericTabs ref={tabsRef} length={items.length} selected={selected} onSelect={handleSelect} />\n <Json data={items[selected].block} />\n </div>\n </ToggleContainer>\n );\n};\n\nexport const Json = ({ data }: Pick<JsonProps, 'data'>) => (\n <NativeJson data={data} classNames='!p-1 text-xs bg-transparent' />\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type DataType } from '@dxos/schema';\n\n// TODO(burdon): Move to util?\ntype Reducer<R, I> = (acc: R, value: I) => R;\n\n/**\n * Reducer that collapses related message blocks into single messages.\n * For example, combines tool request/response pairs into a single message.\n */\nexport const messageReducer: Reducer<{ messages: DataType.Message[]; current?: DataType.Message }, DataType.Message> = (\n { current, messages },\n message,\n) => {\n let i = 0;\n for (const block of message.blocks) {\n switch (block._tag) {\n case 'toolCall':\n case 'toolResult': {\n if (current) {\n current.blocks.push(block);\n } else {\n current = {\n ...message,\n id: [message.id, i].join('_'),\n blocks: [block],\n };\n messages.push(current);\n }\n break;\n }\n\n case 'text':\n default: {\n current = undefined;\n messages.push({\n ...message,\n id: [message.id, i].join('_'),\n blocks: [block],\n });\n break;\n }\n }\n\n i++;\n }\n\n return { current, messages };\n};\n"],
5
- "mappings": "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",
6
- "names": ["useEffect", "useMemo", "useState", "Capabilities", "useCapabilities", "useIntentDispatcher", "Conversation", "createSystemPrompt", "FunctionType", "log", "useConfig", "Filter", "fullyQualifiedId", "useQuery", "isNonNullable", "batch", "computed", "signal", "Effect", "AiService", "DEFAULT_EDGE_MODEL", "ArtifactDiffResolver", "Context", "Obj", "runAndForwardErrors", "log", "Filter", "getVersion", "DataType", "defaultOptions", "model", "systemPrompt", "ChatProcessor", "_services", "_conversation", "_options", "_pending", "_streaming", "undefined", "streaming", "value", "error", "messages", "push", "make", "Message", "_session", "_artifactDiffResolver", "resolve", "artifacts", "space", "extensions", "Map", "versions", "Promise", "all", "map", "artifact", "objects", "object", "db", "query", "ids", "id", "run", "set", "version", "diff", "JSON", "stringify", "_tools", "tools", "conversation", "context", "blueprintRegistry", "setTools", "request", "message", "options", "ctx", "default", "onBegin", "on", "session", "info", "isDisposed", "disposed", "onDispose", "userMessage", "update", "block", "created", "Date", "toISOString", "sender", "role", "blocks", "at", "pending", "length", "prompt", "pipe", "provide", "provideService", "tapErrorCause", "cause", "void", "err", "catch", "Error", "includes", "AiServiceOverloadedError", "_reset", "cancel", "abort", "code", "Schema", "ModelProviders", "ModelProvider", "Schema", "Literal", "createModelLabel", "model", "parts", "split", "length", "AiServicePresets", "provider", "map", "i", "id", "label", "effect", "useCallback", "useEffect", "useState", "Blueprint", "Obj", "Ref", "log", "isNonNullable", "useBlueprints", "space", "context", "blueprintRegistry", "blueprints", "setBlueprints", "t", "refs", "value", "setTimeout", "Array", "loadAll", "filter", "clearTimeout", "handleUpdate", "key", "active", "info", "blueprint", "getByKey", "id", "_id", "data", "obj", "db", "add", "make", "bind", "Layer", "useMemo", "useDeepCompareMemoize", "ToolRegistry", "AiServiceTestingPreset", "Capabilities", "useCapabilities", "makeToolExecutionServiceFromFunctions", "makeToolResolverFromFunctions", "ConfiguredCredentialsService", "CredentialsService", "DatabaseService", "EventLogger", "FunctionCallService", "QueueService", "TracingService", "useChatServices", "space", "toolRegistry", "useToolRegistry", "toolResolver", "useToolResolver", "toolExecutionService", "useToolExecutionService", "useMemo", "Layer", "mergeAll", "AiServiceTestingPreset", "pipe", "orDie", "succeed", "CredentialsService", "ConfiguredCredentialsService", "DatabaseService", "make", "db", "notAvailable", "QueueService", "queues", "FunctionCallService", "mock", "TracingService", "noop", "EventLogger", "functions", "useCapabilities", "Capabilities", "Functions", "flat", "makeToolResolverFromFunctions", "useDeepCompareMemoize", "map", "f", "name", "makeToolExecutionServiceFromFunctions", "tools", "Tools", "ToolRegistry", "tool", "has", "register", "useMemo", "Capabilities", "useCapabilities", "Filter", "Obj", "useReferencesProvider", "space", "artifactDefinitions", "useCapabilities", "Capabilities", "ArtifactDefinition", "useMemo", "undefined", "getReferences", "query", "schemas", "map", "artifact", "schema", "objects", "db", "Filter", "or", "type", "run", "filter", "object", "stringMatch", "Obj", "getLabel", "getDXN", "uri", "toString", "label", "resolveReference", "ids", "first", "toLowerCase", "startsWith", "createTool", "ToolResult", "Type", "getInvocationUrl", "getUserFunctionUrlInMetadata", "log", "getMeta", "convertFunctionToTool", "fn", "edgeUrl", "spaceId", "description", "inputSchema", "undefined", "existingFunctionUrl", "url", "name", "schema", "toEffectSchema", "execute", "input", "info", "response", "fetch", "method", "headers", "body", "JSON", "stringify", "Success", "text", "Schema", "jsonpointer", "ToolResult", "createRawTool", "Type", "normalizeSchema", "invariant", "log", "deepMapValues", "createToolsFromService", "service", "interfaces", "length", "kind", "iface", "schemaUrl", "createToolsFromApi", "authorization", "url", "options", "res", "fetch", "spec", "json", "tools", "path", "pathItem", "Object", "entries", "paths", "methods", "method", "m", "methodItem", "parametersResolved", "parameters", "map", "parameter", "resolved", "resolveJsonSchema", "inputSchema", "type", "properties", "endpointParameters", "placement", "in", "name", "push", "schema", "_in", "required", "validateSync", "JsonSchema", "description", "summary", "warn", "endpoint", "document", "getToolName", "instructions", "execute", "input", "response", "callApiEndpoint", "Success", "operationId", "toLowerCase", "replaceAll", "MAX_TOOL_NAME_LENGTH", "lengthBefore", "word", "GENERIC_WORDS", "includes", "replace", "lengthAfter", "slice", "info", "getEndpointUrl", "request", "headers", "query", "URLSearchParams", "body", "undefined", "example", "default", "encodeURIComponent", "value", "effectSchema", "toEffectSchema", "Error", "set", "Authorization", "resolveAuthorization", "key", "size", "toString", "JSON", "stringify", "ok", "status", "statusText", "contentType", "get", "text", "responseBody", "error", "parse", "message", "isV3_1", "servers", "schemes", "host", "basePath", "tokenUrl", "grantType", "clientId", "clientSecret", "data", "access_token", "base", "recurse", "$ref", "startsWith", "ref", "openapi", "useChatProcessor", "preset", "space", "chat", "services", "blueprintRegistry", "settings", "instructions", "artifact", "noPluginArtifacts", "dispatchPromise", "dispatch", "useIntentDispatcher", "globalTools", "useCapabilities", "Capabilities", "Tools", "artifacts", "ArtifactDefinition", "Stable", "array", "remoteServices", "useQuery", "Filter", "type", "ServiceType", "serviceTools", "setServiceTools", "useState", "useEffect", "log", "queueMicrotask", "tools", "Promise", "all", "map", "service", "createToolsFromService", "flat", "config", "useConfig", "functions", "FunctionType", "chatId", "useMemo", "fullyQualifiedId", "undefined", "extensions", "fn", "convertFunctionToTool", "values", "runtime", "edge", "url", "id", "filter", "isNonNullable", "pivotId", "systemPrompt", "createSystemPrompt", "definition", "name", "conversation", "queue", "target", "Conversation", "processor", "info", "length", "model", "ChatProcessor", "Object", "freeze", "object", "React", "useState", "useEffect", "Fragment", "parseToolName", "Capabilities", "useCapabilities", "FunctionType", "log", "Filter", "useQuery", "useTranslation", "mx", "Toolbox", "classNames", "artifacts", "functions", "services", "blueprints", "activeBlueprints", "striped", "t", "useTranslation", "meta", "id", "div", "className", "mx", "length", "Section", "title", "items", "map", "target", "name", "description", "subitems", "tools", "toolId", "parseToolName", "service", "serviceId", "stripeClassNames", "gridClassNames", "subGridClassNames", "h1", "i", "Fragment", "key", "ToolboxContainer", "space", "processor", "artifactDefinitions", "useCapabilities", "Capabilities", "ArtifactDefinition", "useQuery", "Filter", "type", "ServiceType", "serviceTools", "setServiceTools", "useState", "useEffect", "log", "queueMicrotask", "Promise", "all", "createToolsFromService", "FunctionType", "context", "value", "Prec", "keymap", "createContext", "dedupeWith", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "CollaborationActions", "createIntent", "useIntentDispatcher", "Event", "DXN", "Obj", "Ref", "log", "useVoiceInput", "getSpace", "useQueue", "useIdentity", "Input", "useTranslation", "ChatEditor", "references", "mx", "DataType", "isNotFalsy", "React", "IconButton", "useTranslation", "mx", "ChatActions", "classNames", "children", "microphone", "recording", "processing", "onEvent", "t", "useTranslation", "meta", "id", "React", "div", "className", "mx", "IconButton", "disabled", "variant", "size", "icon", "iconOnly", "label", "onClick", "type", "noTooltip", "onMouseDown", "onMouseUp", "onTouchStart", "onTouchEnd", "React", "useMemo", "DropdownMenu", "IconButton", "Input", "useTranslation", "ChatOptionsMenu", "blueprintRegistry", "blueprints", "onChange", "t", "useTranslation", "meta", "id", "blueprintOptions", "useMemo", "query", "map", "blueprint", "key", "label", "name", "React", "DropdownMenu", "Root", "Trigger", "asChild", "disabled", "length", "IconButton", "icon", "variant", "size", "iconOnly", "Portal", "Content", "side", "Viewport", "option", "Item", "Input", "Checkbox", "checked", "find", "onCheckedChange", "Label", "classNames", "Arrow", "React", "Select", "ChatPresets", "presets", "preset", "onChange", "React", "Select", "Root", "value", "onValueChange", "TriggerButton", "classNames", "Content", "map", "id", "label", "Option", "key", "React", "useCallback", "Filter", "Obj", "Ref", "useAsyncState", "useTranslation", "TagPicker", "mx", "isNonNullable", "ChatReferences", "classNames", "space", "context", "onUpdate", "t", "_t", "useTranslation", "meta", "id", "items", "useAsyncState", "objects", "Ref", "Array", "loadAll", "value", "filter", "isNonNullable", "map", "obj", "label", "Obj", "getLabel", "handleSearch", "useCallback", "text", "ids", "db", "query", "Filter", "everything", "runSync", "object", "includes", "toLocaleLowerCase", "React", "TagPicker", "mx", "mode", "onSearch", "React", "useEffect", "useState", "Icon", "Tooltip", "useTimeout", "Spinner", "errorText", "ChatStatusIndicator", "preset", "error", "processing", "init", "setInit", "useState", "useEffect", "useTimeout", "React", "Tooltip", "Trigger", "content", "message", "delayDuration", "Icon", "icon", "classNames", "errorText", "size", "Spinner", "state", "React", "forwardRef", "useMemo", "PublicKey", "ScrollContainer", "mx", "keyToFallback", "React", "Fragment", "Surface", "invariant", "Button", "Icon", "IconButton", "useTranslation", "MarkdownViewer", "ToggleContainer", "NativeToggleContainer", "mx", "safeParseJson", "React", "useEffect", "useMemo", "useRef", "useState", "log", "NumericTabs", "StatusRoll", "ToggleContainer", "Json", "NativeJson", "isNonNullable", "isNotFalsy", "isToolMessage", "message", "blocks", "some", "block", "_tag", "getToolName", "tool", "namespace", "function", "name", "split", "pop", "getToolCaption", "status", "caption", "ToolBlock", "classNames", "tools", "request", "toolBlocks", "filter", "items", "map", "pending", "toolCallId", "find", "title", "undefined", "warn", "ToolContainer", "tabsRef", "selected", "setSelected", "open", "setOpen", "current", "focus", "handleSelect", "index", "lines", "item", "key", "duration", "autoAdvance", "onChangeOpen", "div", "className", "ref", "length", "onSelect", "data", "ChatMessage", "classNames", "debug", "space", "message", "processor", "tools", "onEvent", "t", "useTranslation", "meta", "id", "sender", "role", "blocks", "isToolMessage", "React", "MessageContainer", "mx", "ToolBlock", "panelClasses", "div", "className", "marginClasses", "pre", "JSON", "stringify", "created", "map", "block", "idx", "_tag", "text", "replaceAll", "length", "Component", "components", "default", "Fragment", "key", "user", "IconButton", "icon", "iconOnly", "label", "onClick", "type", "invariant", "title", "disposition", "titles", "undefined", "MarkdownViewer", "content", "ToggleContainer", "defaultOpen", "systemDispositions", "includes", "pending", "Icon", "size", "ToolboxContainer", "safeParseJson", "data", "options", "Button", "Surface", "subject", "parse", "limit", "fallback", "object", "Json", "name", "paddingClasses", "children", "props", "NativeToggleContainer", "messageReducer", "current", "messages", "message", "i", "block", "blocks", "_tag", "push", "id", "join", "undefined", "ChatThread", "forwardRef", "classNames", "identity", "messages", "collapse", "props", "forwardedRef", "userHue", "useMemo", "profile", "data", "hue", "keyToFallback", "identityKey", "PublicKey", "random", "filteredMessages", "reduce", "messageReducer", "React", "ScrollContainer", "ref", "fade", "div", "role", "className", "mx", "length", "style", "map", "message", "ChatMessage", "key", "id", "Endcap", "children", "React", "div", "className", "ChatContextProvider", "useChatContext", "createContext", "ChatRoot", "classNames", "chat", "processor", "artifact", "onEvent", "props", "debug", "setDebug", "useState", "space", "getSpace", "queue", "useQueue", "dxn", "messages", "useMemo", "dedupeWith", "objects", "filter", "Obj", "instanceOf", "DataType", "Message", "value", "a", "b", "id", "dispatchPromise", "dispatch", "useIntentDispatcher", "useEffect", "streaming", "message", "length", "createIntent", "CollaborationActions", "InsertContent", "target", "object", "Ref", "fromDXN", "DXN", "kind", "QUEUE", "parts", "label", "event", "Event", "on", "type", "request", "text", "cancel", "role", "mx", "displayName", "ChatThread", "identity", "useIdentity", "scrollerRef", "useRef", "current", "scrollToBottom", "NativeChatThread", "ref", "tools", "ev", "emit", "ChatPrompt", "placeholder", "expandable", "online", "presets", "preset", "onChangePreset", "onChangeOnline", "t", "useTranslation", "meta", "active", "setActive", "editorRef", "recording", "useVoiceInput", "onUpdate", "setText", "focus", "blueprints", "handleUpdateBlueprints", "useBlueprints", "context", "blueprintRegistry", "contextProvider", "useReferencesProvider", "extensions", "references", "provider", "Prec", "highest", "keymap", "of", "key", "preventDefault", "run", "isNotFalsy", "handleSubmit", "useCallback", "handleEvent", "handleUpdateReferences", "ids", "log", "info", "ChatStatusIndicator", "error", "processing", "ChatEditor", "autoFocus", "lineWrapping", "onSubmit", "ChatReferences", "ChatOptionsMenu", "onChange", "ChatActions", "microphone", "ChatPresets", "undefined", "Input", "Root", "Switch", "checked", "onCheckedChange", "Chat", "Thread", "Prompt"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/intent-resolver.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Effect } from 'effect';\n\nimport { Capabilities, contributes, createIntent, createResolver, type PluginContext } from '@dxos/app-framework';\nimport { Sequence } from '@dxos/conductor';\nimport { Key, Obj, Ref } from '@dxos/echo';\nimport { CollectionAction } from '@dxos/plugin-space/types';\n\nimport { Assistant } from '../types';\n\nexport default (context: PluginContext) => [\n contributes(Capabilities.IntentResolver, [\n createResolver({\n intent: Assistant.OnSpaceCreated,\n resolve: ({ space, rootCollection }) =>\n Effect.gen(function* () {\n const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const { object: collection } = yield* dispatch(\n createIntent(CollectionAction.CreateQueryCollection, { typename: Assistant.Chat.typename }),\n );\n rootCollection.objects.push(Ref.make(collection));\n\n const { object: chat } = yield* dispatch(createIntent(Assistant.CreateChat, { space }));\n space.db.add(chat);\n }),\n }),\n createResolver({\n intent: Assistant.CreateChat,\n resolve: ({ space, name }) => ({\n data: {\n object: Obj.make(Assistant.Chat, {\n name,\n queue: Ref.fromDXN(space.queues.create().dxn),\n }),\n },\n }),\n }),\n createResolver({\n intent: Assistant.CreateSequence,\n resolve: ({ name }) => ({\n data: {\n object: Obj.make(Sequence, {\n name,\n steps: [\n {\n id: Key.ObjectId.random(),\n instructions: 'You are a helpful assistant.',\n },\n ],\n }),\n },\n }),\n }),\n ]),\n];\n"],
5
- "mappings": ";;;;;;AAIA,SAASA,cAAc;AAEvB,SAASC,cAAcC,aAAaC,cAAcC,sBAA0C;AAC5F,SAASC,gBAAgB;AACzB,SAASC,KAAKC,KAAKC,WAAW;AAC9B,SAASC,wBAAwB;AAIjC,IAAA,0BAAe,CAACC,YAA2B;EACzCC,YAAYC,aAAaC,gBAAgB;IACvCC,eAAe;MACbC,QAAQC,UAAUC;MAClBC,SAAS,CAAC,EAAEC,OAAOC,eAAc,MAC/BC,OAAOC,IAAI,aAAA;AACT,cAAM,EAAEC,SAAQ,IAAKb,QAAQc,cAAcZ,aAAaa,gBAAgB;AACxE,cAAM,EAAEC,QAAQC,WAAU,IAAK,OAAOJ,SACpCK,aAAaC,iBAAiBC,uBAAuB;UAAEC,UAAUf,UAAUgB,KAAKD;QAAS,CAAA,CAAA;AAE3FX,uBAAea,QAAQC,KAAKC,IAAIC,KAAKT,UAAAA,CAAAA;AAErC,cAAM,EAAED,QAAQW,KAAI,IAAK,OAAOd,SAASK,aAAaZ,UAAUsB,YAAY;UAAEnB;QAAM,CAAA,CAAA;AACpFA,cAAMoB,GAAGC,IAAIH,IAAAA;MACf,CAAA;IACJ,CAAA;IACAvB,eAAe;MACbC,QAAQC,UAAUsB;MAClBpB,SAAS,CAAC,EAAEC,OAAOsB,KAAI,OAAQ;QAC7BC,MAAM;UACJhB,QAAQiB,IAAIP,KAAKpB,UAAUgB,MAAM;YAC/BS;YACAG,OAAOT,IAAIU,QAAQ1B,MAAM2B,OAAOC,OAAM,EAAGC,GAAG;UAC9C,CAAA;QACF;MACF;IACF,CAAA;IACAlC,eAAe;MACbC,QAAQC,UAAUiC;MAClB/B,SAAS,CAAC,EAAEuB,KAAI,OAAQ;QACtBC,MAAM;UACJhB,QAAQiB,IAAIP,KAAKc,UAAU;YACzBT;YACAU,OAAO;cACL;gBACEC,IAAIC,IAAIC,SAASC,OAAM;gBACvBC,cAAc;cAChB;;UAEJ,CAAA;QACF;MACF;IACF,CAAA;GACD;;",
6
- "names": ["Effect", "Capabilities", "contributes", "createIntent", "createResolver", "Sequence", "Key", "Obj", "Ref", "CollectionAction", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "Assistant", "OnSpaceCreated", "resolve", "space", "rootCollection", "Effect", "gen", "dispatch", "getCapability", "IntentDispatcher", "object", "collection", "createIntent", "CollectionAction", "CreateQueryCollection", "typename", "Chat", "objects", "push", "Ref", "make", "chat", "CreateChat", "db", "add", "name", "data", "Obj", "queue", "fromDXN", "queues", "create", "dxn", "CreateSequence", "Sequence", "steps", "id", "Key", "ObjectId", "random", "instructions"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Effect } from 'effect';\nimport React, { useEffect, useMemo } from 'react';\n\nimport { Capabilities, contributes, createIntent, createSurface, useIntentDispatcher } from '@dxos/app-framework';\nimport { Template } from '@dxos/blueprints';\nimport { fullyQualifiedId, getSpace, getTypename } from '@dxos/client/echo';\nimport { Sequence } from '@dxos/conductor';\nimport { InvocationTraceContainer } from '@dxos/devtools';\nimport { Filter, type Key, Obj, Query } from '@dxos/echo';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport {\n AssistantSettings,\n ChatContainer,\n ChatDialog,\n PromptSettings,\n SequenceContainer,\n TemplateContainer,\n} from '../components';\nimport { meta, ASSISTANT_DIALOG } from '../meta';\nimport { Assistant } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${meta.id}/plugin-settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<Assistant.Settings> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === meta.id,\n component: ({ data: { subject } }) => <AssistantSettings settings={subject.value} />,\n }),\n createSurface({\n id: `${meta.id}/chat`,\n role: 'article',\n filter: (data): data is { subject: Assistant.Chat; variant: undefined } =>\n Obj.instanceOf(Assistant.Chat, data.subject) && data.variant !== 'assistant-chat',\n component: ({ data, role }) => <ChatContainer role={role} chat={data.subject} />,\n }),\n createSurface({\n id: `${meta.id}/object-chat`,\n role: 'article',\n filter: (data): data is { companionTo: Obj.Any; subject: Assistant.Chat | 'assistant-chat' } =>\n Obj.isObject(data.companionTo) &&\n (Obj.instanceOf(Assistant.Chat, data.subject) || data.subject === 'assistant-chat'),\n component: ({ data, role }) => {\n const { dispatch } = useIntentDispatcher();\n const associatedArtifact = useMemo(\n () => ({\n id: fullyQualifiedId(data.companionTo),\n typename: getTypename(data.companionTo) ?? 'unknown',\n spaceId: (getSpace(data.companionTo)?.id ?? 'unknown') as Key.SpaceId,\n }),\n [data.companionTo],\n );\n\n // TODO(wittjosiah): Factor out to container.\n useEffect(() => {\n const timeout = setTimeout(async () => {\n const space = getSpace(data.companionTo);\n if (space && data.subject === 'assistant-chat') {\n const result = await space.db\n .query(Query.select(Filter.ids(data.companionTo.id)).targetOf(Assistant.CompanionTo).source())\n .run();\n if (result.objects.length > 0) {\n return;\n }\n\n const program = Effect.gen(function* () {\n const { object } = yield* dispatch(createIntent(Assistant.CreateChat, { space }));\n yield* dispatch(createIntent(SpaceAction.AddObject, { object, target: space, hidden: true }));\n yield* dispatch(\n createIntent(SpaceAction.AddRelation, {\n space,\n schema: Assistant.CompanionTo,\n source: object,\n target: data.companionTo,\n }),\n );\n });\n void Effect.runPromise(program);\n }\n });\n\n return () => clearTimeout(timeout);\n }, [data.subject]);\n\n if (data.subject === 'assistant-chat') {\n return null;\n }\n\n return <ChatContainer role={role} chat={data.subject} artifact={associatedArtifact} />;\n },\n }),\n createSurface({\n id: `${meta.id}/sequence`,\n role: 'article',\n filter: (data): data is { subject: Sequence } => Obj.instanceOf(Sequence, data.subject),\n component: ({ data }) => <SequenceContainer sequence={data.subject} />,\n }),\n createSurface({\n id: `${meta.id}/companion/logs`,\n role: 'article',\n filter: (data): data is { companionTo: Sequence } =>\n Obj.instanceOf(Sequence, data.companionTo) && data.subject === 'logs',\n component: ({ data, role }) => {\n const space = getSpace(data.companionTo);\n return (\n <StackItem.Content>\n <InvocationTraceContainer space={space} target={data.companionTo} detailAxis='block' />\n </StackItem.Content>\n );\n },\n }),\n createSurface({\n id: `${meta.id}/template`,\n role: 'article',\n filter: (data): data is { subject: Template.Template } => Obj.instanceOf(Template.Template, data.subject),\n component: ({ data }) => <TemplateContainer template={data.subject} />,\n }),\n createSurface({\n id: `${meta.id}/prompt-settings`,\n role: 'object-settings',\n filter: (data): data is { subject: Template.Template } => Obj.instanceOf(Template.Template, data.subject),\n component: ({ data }) => <PromptSettings template={data.subject} />,\n }),\n createSurface({\n id: ASSISTANT_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: { chat: Assistant.Chat } } => data.component === ASSISTANT_DIALOG,\n component: ({ data }) => <ChatDialog {...data.props} />,\n }),\n ]);\n"],
5
- "mappings": "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",
6
- "names": ["Effect", "React", "useEffect", "useMemo", "Capabilities", "contributes", "createIntent", "createSurface", "useIntentDispatcher", "Template", "fullyQualifiedId", "getSpace", "getTypename", "Sequence", "InvocationTraceContainer", "Filter", "Obj", "Query", "SettingsStore", "SpaceAction", "StackItem", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "meta", "role", "filter", "data", "subject", "SettingsStore", "prefix", "component", "AssistantSettings", "settings", "value", "Obj", "instanceOf", "Assistant", "Chat", "variant", "ChatContainer", "chat", "isObject", "companionTo", "dispatch", "useIntentDispatcher", "associatedArtifact", "useMemo", "fullyQualifiedId", "typename", "getTypename", "spaceId", "getSpace", "useEffect", "timeout", "setTimeout", "space", "result", "db", "query", "Query", "select", "Filter", "ids", "targetOf", "CompanionTo", "source", "run", "objects", "length", "program", "Effect", "gen", "object", "createIntent", "CreateChat", "SpaceAction", "AddObject", "target", "hidden", "AddRelation", "schema", "runPromise", "clearTimeout", "artifact", "Sequence", "SequenceContainer", "sequence", "StackItem", "Content", "InvocationTraceContainer", "detailAxis", "Template", "TemplateContainer", "template", "PromptSettings", "ASSISTANT_DIALOG", "ChatDialog", "props"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/ChatContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, useCapability } from '@dxos/app-framework';\nimport { type AssociatedArtifact } from '@dxos/blueprints';\nimport { getSpace } from '@dxos/client/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { Chat } from './Chat';\nimport { useChatProcessor, useChatServices } from '../hooks';\nimport { meta } from '../meta';\nimport { type Assistant } from '../types';\n\nexport type ChatContainerProps = {\n role: string;\n chat: Assistant.Chat;\n artifact?: AssociatedArtifact;\n};\n\nexport const ChatContainer = ({ role, chat, artifact }: ChatContainerProps) => {\n const space = getSpace(chat);\n const settings = useCapability(Capabilities.SettingsStore).getStore<Assistant.Settings>(meta.id)?.value;\n const services = useChatServices({ space });\n const processor = useChatProcessor({ chat, services, settings });\n if (!processor) {\n return null;\n }\n\n // TODO(burdon): Add attention attributes.\n return (\n <StackItem.Content classNames='container-max-width'>\n <Chat.Root chat={chat} processor={processor} artifact={artifact}>\n <Chat.Thread />\n <div className='pbe-4 pis-2 pie-2'>\n <Chat.Prompt classNames='border border-subduedSeparator rounded-md' />\n </div>\n </Chat.Root>\n </StackItem.Content>\n );\n};\n\nexport default ChatContainer;\n"],
5
- "mappings": ";;;;;;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,qBAAqB;AAE5C,SAASC,gBAAgB;AACzB,SAASC,iBAAiB;AAanB,IAAMC,gBAAgB,CAAC,EAAEC,MAAMC,MAAMC,SAAQ,MAAsB;;;AACxE,UAAMC,QAAQC,SAASH,IAAAA;AACvB,UAAMI,WAAWC,cAAcC,aAAaC,aAAa,EAAEC,SAA6BC,KAAKC,EAAE,GAAGC;AAClG,UAAMC,WAAWC,gBAAgB;MAAEX;IAAM,CAAA;AACzC,UAAMY,YAAYC,iBAAiB;MAAEf;MAAMY;MAAUR;IAAS,CAAA;AAC9D,QAAI,CAACU,WAAW;AACd,aAAO;IACT;AAGA,WACE,sBAAA,cAACE,UAAUC,SAAO;MAACC,YAAW;OAC5B,sBAAA,cAACC,KAAKC,MAAI;MAACpB;MAAYc;MAAsBb;OAC3C,sBAAA,cAACkB,KAAKE,QAAM,IAAA,GACZ,sBAAA,cAACC,OAAAA;MAAIC,WAAU;OACb,sBAAA,cAACJ,KAAKK,QAAM;MAACN,YAAW;;;;;AAKlC;AAEA,IAAA,wBAAepB;",
6
- "names": ["React", "Capabilities", "useCapability", "getSpace", "StackItem", "ChatContainer", "role", "chat", "artifact", "space", "getSpace", "settings", "useCapability", "Capabilities", "SettingsStore", "getStore", "meta", "id", "value", "services", "useChatServices", "processor", "useChatProcessor", "StackItem", "Content", "classNames", "Chat", "Root", "Thread", "div", "className", "Prompt"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/ChatDialog.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useState } from 'react';\n\nimport { useCapability, Capabilities } from '@dxos/app-framework';\nimport { getSpace } from '@dxos/client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { ChatDialog as NativeChatDialog } from '@dxos/react-ui-chat';\n\nimport { Chat, type ChatRootProps } from './Chat';\nimport { useChatProcessor, useChatServices } from '../hooks';\nimport { meta } from '../meta';\nimport { type Assistant } from '../types';\n\nexport type ChatDialogProps = {\n chat?: Assistant.Chat;\n};\n\nexport const ChatDialog = ({ chat }: ChatDialogProps) => {\n const { t } = useTranslation(meta.id);\n\n const space = getSpace(chat);\n const settings = useCapability(Capabilities.SettingsStore).getStore<Assistant.Settings>(meta.id)?.value;\n const services = useChatServices({ space });\n const processor = useChatProcessor({ chat, services, 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 <NativeChatDialog.Root open={open} expanded={expanded} onOpenChange={setOpen}>\n <NativeChatDialog.Header title={t('assistant dialog title')} />\n <NativeChatDialog.Content>\n <Chat.Thread />\n </NativeChatDialog.Content>\n <NativeChatDialog.Footer>\n <Chat.Prompt expandable />\n </NativeChatDialog.Footer>\n </NativeChatDialog.Root>\n </Chat.Root>\n );\n};\n\nexport default ChatDialog;\n"],
5
- "mappings": ";;;;;;;;;;;;;;AAIA,OAAOA,SAASC,aAAaC,gBAAgB;AAE7C,SAASC,eAAeC,oBAAoB;AAC5C,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,cAAcC,wBAAwB;AAWxC,IAAMC,aAAa,CAAC,EAAEC,KAAI,MAAmB;;;AAClD,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AAEpC,UAAMC,QAAQC,SAASN,IAAAA;AACvB,UAAMO,WAAWC,cAAcC,aAAaC,aAAa,EAAEC,SAA6BR,KAAKC,EAAE,GAAGQ;AAClG,UAAMC,WAAWC,gBAAgB;MAAET;IAAM,CAAA;AACzC,UAAMU,YAAYC,iBAAiB;MAAEhB;MAAMa;MAAUN;IAAS,CAAA;AAG9D,UAAM,CAACU,MAAMC,OAAAA,IAAWC,SAAS,IAAA;AACjC,UAAM,CAACC,UAAUC,WAAAA,IAAeF,SAAS,KAAA;AACzC,UAAMG,cAAcC,YAAmD,CAACC,UAAAA;AACtE,cAAQA,MAAMC,MAAI;QAChB,KAAK;QACL,KAAK;AACHP,kBAAQ,IAAA;AACRG,sBAAY,IAAA;AACZ;QACF,KAAK;AACHH,kBAAQ,KAAA;AACR;MACJ;IACF,GAAG,CAAA,CAAE;AAEL,QAAI,CAAClB,QAAQ,CAACe,WAAW;AACvB,aAAO;IACT;AAEA,WACE,sBAAA,cAACW,KAAKC,MAAI;MAAC3B;MAAYe;MAAsBa,SAASN;OACpD,sBAAA,cAACO,iBAAiBF,MAAI;MAACV;MAAYG;MAAoBU,cAAcZ;OACnE,sBAAA,cAACW,iBAAiBE,QAAM;MAACC,OAAO/B,EAAE,wBAAA;QAClC,sBAAA,cAAC4B,iBAAiBI,SAAO,MACvB,sBAAA,cAACP,KAAKQ,QAAM,IAAA,CAAA,GAEd,sBAAA,cAACL,iBAAiBM,QAAM,MACtB,sBAAA,cAACT,KAAKU,QAAM;MAACC,YAAAA;;;;;AAKvB;AAEA,IAAA,qBAAetC;",
6
- "names": ["React", "useCallback", "useState", "useCapability", "Capabilities", "getSpace", "useTranslation", "ChatDialog", "NativeChatDialog", "ChatDialog", "chat", "t", "useTranslation", "meta", "id", "space", "getSpace", "settings", "useCapability", "Capabilities", "SettingsStore", "getStore", "value", "services", "useChatServices", "processor", "useChatProcessor", "open", "setOpen", "useState", "expanded", "setExpanded", "handleEvent", "useCallback", "event", "type", "Chat", "Root", "onEvent", "NativeChatDialog", "onOpenChange", "Header", "title", "Content", "Thread", "Footer", "Prompt", "expandable"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/SequenceContainer.tsx", "../../../src/components/SequenceEditor/SequenceEditor.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport JSON5 from 'json5';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { ToolRegistry } from '@dxos/ai';\nimport { getSpace } from '@dxos/client/echo';\nimport { type Sequence, type SequenceDefinition } from '@dxos/conductor';\nimport { Key } from '@dxos/echo';\nimport { Toolbar, useTranslation } from '@dxos/react-ui';\nimport { useSelectionManager } from '@dxos/react-ui-attention';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { SequenceEditor } from './SequenceEditor';\nimport { meta } from '../meta';\n\n// TODO(burdon): Move to config.\nexport const EXA_API_KEY = '9c7e17ff-0c85-4cd5-827a-8b489f139e03';\n\n// TODO(burdon): Validate.\nconst parseSequence = (text: string): SequenceDefinition | undefined => {\n try {\n const json = JSON5.parse(text);\n const { steps } = json;\n return { steps };\n } catch (error) {\n // Ignore.\n }\n};\n\nexport const SequenceContainer = ({ sequence }: { sequence: Sequence }) => {\n const { t } = useTranslation(meta.id);\n const selectionManager = useSelectionManager();\n const [definition, setDefinition] = useState<SequenceDefinition>();\n useEffect(() => {\n setDefinition({\n steps: sequence.steps.map(({ instructions, tools }) => ({ instructions, tools })),\n });\n }, [sequence]);\n\n const editorRef = useRef<EditorView | undefined>(undefined);\n\n // TODO(burdon): Factor out.\n const toolRegistry = useMemo(() => {\n const space = getSpace(sequence);\n if (!space) {\n return;\n }\n\n // TODO(burdon): How should the queue be created?\n // eslint-disable-next-line no-unused-vars\n const _queue = space.queues.create();\n\n return new ToolRegistry([\n // createExaTool({ apiKey: EXA_API_KEY }),\n // createLocalSearchTool(space.db, queue),\n // createGraphWriterTool({\n // db: space.db,\n // queue,\n // schema: [], // TODO(burdon): Get schema from client/sequence?\n // onDone: async (objects) => {\n // await queue.append(objects);\n // },\n // }),\n ]);\n }, [sequence]);\n\n const formatAndSave = useCallback((): SequenceDefinition | undefined => {\n if (!sequence) {\n return;\n }\n\n const text = editorRef.current?.state.doc.toString();\n if (!text) {\n return;\n }\n\n const definition = parseSequence(text);\n if (!definition) {\n return;\n }\n\n setDefinition(definition);\n const formatted = JSON.stringify(definition, null, 2);\n editorRef.current?.dispatch({\n changes: { from: 0, to: text.length, insert: formatted },\n });\n\n sequence.steps.length = 0;\n for (const step of definition.steps) {\n sequence.steps.push({\n id: Key.ObjectId.random(),\n instructions: step.instructions,\n tools: step.tools,\n });\n }\n\n return sequence;\n }, [sequence]);\n\n // TODO(burdon): Save raw sequence separately from parsed sequence? (like Script).\n const handleSave = useCallback(() => formatAndSave(), [formatAndSave]);\n\n const handleRun = useCallback(async () => {\n // if (!aiClient?.value || !toolRegistry) {\n // return;\n // }\n // formatAndSave();\n // // Get input from selection.\n // const input = Array.from(getSelectionSet(selectionManager)).map((id) => DXN.fromLocalObjectId(id));\n // if (!input.length) {\n // return;\n // }\n // const machine = new SequenceMachine(toolRegistry, sequence).setLogger(new QueueLogger(sequence));\n // await machine.runToCompletion({ aiClient: aiClient.value, input });\n }, [sequence, formatAndSave, selectionManager, toolRegistry]);\n\n return (\n <StackItem.Content toolbar>\n <Toolbar.Root>\n <Toolbar.Button onClick={handleSave}>{t('button save')}</Toolbar.Button>\n <Toolbar.Button onClick={handleRun}>{t('button run')}</Toolbar.Button>\n </Toolbar.Root>\n {definition && <SequenceEditor ref={editorRef} sequence={definition} />}\n </StackItem.Content>\n );\n};\n\nexport default SequenceContainer;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef, useImperativeHandle } from 'react';\n\nimport { SequenceDefinition } from '@dxos/conductor';\nimport { Type } from '@dxos/echo';\nimport { useThemeContext, type ThemedClassName } from '@dxos/react-ui';\nimport {\n type EditorView,\n createBasicExtensions,\n createJsonExtensions,\n createThemeExtensions,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport type SequenceEditorProps = ThemedClassName<{\n sequence: SequenceDefinition;\n}>;\n\n// TODO(burdon): Factor out JsonEditor.\nexport const SequenceEditor = forwardRef<EditorView | undefined, SequenceEditorProps>(\n ({ classNames, sequence }, forwardedRef) => {\n const { themeMode } = useThemeContext();\n const { parentRef, view } = useTextEditor({\n initialValue: JSON.stringify(sequence, null, 2),\n extensions: [\n createBasicExtensions({\n lineNumbers: true,\n lineWrapping: false,\n monospace: true,\n scrollPastEnd: true,\n }),\n createThemeExtensions({\n themeMode,\n syntaxHighlighting: true,\n }),\n createJsonExtensions({\n schema: Type.toJsonSchema(SequenceDefinition, { strict: true }),\n }),\n ],\n });\n\n useImperativeHandle(forwardedRef, () => view, [view]);\n\n return <div ref={parentRef} className={mx('overflow-hidden', classNames)} />;\n },\n);\n"],
5
- "mappings": "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",
6
- "names": ["JSON5", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "ToolRegistry", "getSpace", "Key", "Toolbar", "useTranslation", "useSelectionManager", "StackItem", "React", "forwardRef", "useImperativeHandle", "SequenceDefinition", "Type", "useThemeContext", "createBasicExtensions", "createJsonExtensions", "createThemeExtensions", "useTextEditor", "mx", "SequenceEditor", "forwardRef", "classNames", "sequence", "forwardedRef", "themeMode", "useThemeContext", "parentRef", "view", "useTextEditor", "initialValue", "JSON", "stringify", "extensions", "createBasicExtensions", "lineNumbers", "lineWrapping", "monospace", "scrollPastEnd", "createThemeExtensions", "syntaxHighlighting", "createJsonExtensions", "schema", "Type", "toJsonSchema", "SequenceDefinition", "strict", "useImperativeHandle", "div", "ref", "className", "mx", "EXA_API_KEY", "parseSequence", "text", "json", "JSON5", "parse", "steps", "error", "SequenceContainer", "sequence", "t", "useTranslation", "meta", "id", "selectionManager", "useSelectionManager", "definition", "setDefinition", "useState", "useEffect", "map", "instructions", "tools", "editorRef", "useRef", "undefined", "toolRegistry", "useMemo", "space", "getSpace", "_queue", "queues", "create", "ToolRegistry", "formatAndSave", "useCallback", "current", "state", "doc", "toString", "formatted", "JSON", "stringify", "dispatch", "changes", "from", "to", "length", "insert", "step", "push", "Key", "ObjectId", "random", "handleSave", "handleRun", "React", "StackItem", "Content", "toolbar", "Toolbar", "Root", "Button", "onClick", "SequenceEditor", "ref"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/TemplateContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Template } from '@dxos/blueprints';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { TemplateEditor } from './TemplateEditor';\n\nexport type TemplateContainerProps = {\n template: Template.Template;\n};\n\nexport const TemplateContainer = ({ template }: TemplateContainerProps) => {\n return (\n <StackItem.Content classNames='container-max-width'>\n <TemplateEditor template={template} />\n </StackItem.Content>\n );\n};\n\nexport default TemplateContainer;\n"],
5
- "mappings": ";;;;;;;;AAIA,OAAOA,WAAW;AAGlB,SAASC,iBAAiB;AAQnB,IAAMC,oBAAoB,CAAC,EAAEC,SAAQ,MAA0B;;;AACpE,WACE,sBAAA,cAACC,UAAUC,SAAO;MAACC,YAAW;OAC5B,sBAAA,cAACC,gBAAAA;MAAeJ;;;;;AAGtB;AAEA,IAAA,4BAAeD;",
6
- "names": ["React", "StackItem", "TemplateContainer", "template", "StackItem", "Content", "classNames", "TemplateEditor"]
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 { Rx } from '@effect-rx/rx-react';\nimport { Option, pipe } from 'effect';\n\nimport {\n Capabilities,\n contributes,\n createIntent,\n LayoutAction,\n type PromiseIntentDispatcher,\n type PluginContext,\n} from '@dxos/app-framework';\nimport { Template } from '@dxos/blueprints';\nimport { Sequence } from '@dxos/conductor';\nimport { Obj } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';\nimport { createExtension, ROOT_ID } from '@dxos/plugin-graph';\nimport { getActiveSpace, rxFromQuery } from '@dxos/plugin-space';\nimport { SPACE_TYPE, SpaceAction } from '@dxos/plugin-space/types';\nimport {\n type Space,\n Filter,\n Query,\n type QueryResult,\n fullyQualifiedId,\n getSpace,\n isSpace,\n} from '@dxos/react-client/echo';\n\nimport { ASSISTANT_DIALOG, meta } from '../meta';\nimport { Assistant } from '../types';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${meta.id}/assistant`,\n actions: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),\n Option.map(() => [\n {\n id: `${LayoutAction.UpdateDialog._tag}/assistant/open`,\n data: async () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const client = context.getCapability(ClientCapabilities.Client);\n const space = getActiveSpace(context) ?? client.spaces.default;\n const chat = await getOrCreateChat(dispatch, space);\n if (!chat) {\n return;\n }\n\n await dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: ASSISTANT_DIALOG,\n options: {\n state: true,\n blockAlign: 'end',\n props: {\n chat,\n },\n },\n }),\n );\n },\n properties: {\n label: ['open assistant label', { ns: meta.id }],\n icon: 'ph--sparkle--regular',\n disposition: 'pin-end',\n position: 'hoist',\n keyBinding: {\n macos: 'shift+meta+k',\n windows: 'shift+ctrl+k',\n },\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n\n createExtension({\n id: `${meta.id}/object-chat-companion`,\n connector: (node) => {\n let query: QueryResult<Assistant.Chat> | undefined;\n return Rx.make((get) => {\n const nodeOption = get(node);\n if (Option.isNone(nodeOption)) {\n return [];\n }\n\n const object = nodeOption.value.data;\n if (!Obj.isObject(object)) {\n return [];\n }\n\n const space = getSpace(object);\n if (!space) {\n return [];\n }\n\n if (!query) {\n query = space.db.query(Query.select(Filter.ids(object.id)).targetOf(Assistant.CompanionTo).source());\n }\n\n const chat = get(rxFromQuery(query))[0];\n return [\n {\n id: [fullyQualifiedId(object), 'assistant-chat'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: chat ?? 'assistant-chat',\n properties: {\n label: ['assistant chat label', { ns: meta.id }],\n icon: 'ph--sparkle--regular',\n position: 'hoist',\n disposition: 'hidden',\n },\n },\n ];\n });\n },\n }),\n\n createExtension({\n id: `${meta.id}/sequence-logs`,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (Obj.instanceOf(Sequence, node.data) ? Option.some(node) : Option.none())),\n Option.map((node) => [\n {\n id: [node.id, 'logs'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'logs',\n properties: {\n label: ['sequence logs label', { ns: meta.id }],\n icon: 'ph--clock-countdown--regular',\n disposition: 'hidden',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n\n createExtension({\n id: `${meta.id}/root`,\n connector: (node) => {\n let query: QueryResult<Template.Template> | undefined;\n return Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) =>\n node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none(),\n ),\n Option.map((space) => {\n if (!query) {\n query = space.db.query(Query.type(Template.Template));\n }\n\n const templates = get(rxFromQuery(query));\n return templates.length > 0\n ? [\n {\n id: `${meta.id}/templates`,\n type: `${meta.id}/templates`,\n data: null,\n properties: {\n label: ['templates label', { ns: meta.id }],\n icon: 'ph--file-code--regular',\n space,\n },\n },\n ]\n : [];\n }),\n Option.getOrElse(() => []),\n ),\n );\n },\n }),\n\n createExtension({\n id: `${meta.id}/templates`,\n connector: (node) => {\n let query: QueryResult<Template.Template> | undefined;\n return Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) =>\n node.id === `${meta.id}/templates` && isSpace(node.properties.space)\n ? Option.some(node.properties.space)\n : Option.none(),\n ),\n Option.map((space) => {\n if (!query) {\n query = space.db.query(Query.type(Template.Template));\n }\n return get(rxFromQuery(query))\n .toSorted((a, b) => {\n const nameA = a.name ?? '';\n const nameB = b.name ?? '';\n return nameA.localeCompare(nameB);\n })\n .map((template) => ({\n id: fullyQualifiedId(template),\n type: `${meta.id}/template`,\n data: template,\n properties: {\n label: template.name ?? ['object placeholder', { ns: meta.id }],\n icon: 'ph--file-code--regular',\n },\n }));\n }),\n Option.getOrElse(() => []),\n ),\n );\n },\n }),\n ]);\n\n// TODO(burdon): Factor out.\nconst getOrCreateChat = async (\n dispatch: PromiseIntentDispatcher,\n space: Space,\n): Promise<Assistant.Chat | undefined> => {\n // TODO(wittjosiah): This should be possible with a single query.\n const { objects: allChats } = await space.db.query(Query.type(Assistant.Chat)).run();\n const { objects: relatedChats } = await space.db\n .query(Query.type(Assistant.Chat).sourceOf(Assistant.CompanionTo).source())\n .run();\n const chats = allChats.filter((chat) => !relatedChats.includes(chat));\n // console.log('objects', JSON.stringify(objects, null, 2));\n if (chats.length > 0) {\n // TODO(burdon): Is this the most recent?\n return chats[chats.length - 1];\n }\n\n const { data } = await dispatch(createIntent(Assistant.CreateChat, { space }));\n invariant(Obj.instanceOf(Assistant.Chat, data?.object));\n await dispatch(createIntent(SpaceAction.AddObject, { target: space, object: data.object }));\n return data.object;\n};\n"],
5
- "mappings": "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",
6
- "names": ["Rx", "Option", "pipe", "Capabilities", "contributes", "createIntent", "LayoutAction", "Template", "Sequence", "Obj", "invariant", "ClientCapabilities", "PLANK_COMPANION_TYPE", "ATTENDABLE_PATH_SEPARATOR", "createExtension", "ROOT_ID", "getActiveSpace", "rxFromQuery", "SPACE_TYPE", "SpaceAction", "Filter", "Query", "fullyQualifiedId", "getSpace", "isSpace", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "meta", "actions", "node", "Rx", "make", "get", "pipe", "Option", "flatMap", "ROOT_ID", "some", "none", "map", "LayoutAction", "UpdateDialog", "_tag", "data", "dispatchPromise", "dispatch", "getCapability", "IntentDispatcher", "client", "ClientCapabilities", "Client", "space", "getActiveSpace", "spaces", "default", "chat", "getOrCreateChat", "createIntent", "part", "subject", "ASSISTANT_DIALOG", "options", "state", "blockAlign", "props", "properties", "label", "ns", "icon", "disposition", "position", "keyBinding", "macos", "windows", "getOrElse", "connector", "query", "nodeOption", "isNone", "object", "value", "Obj", "isObject", "getSpace", "db", "Query", "select", "Filter", "ids", "targetOf", "Assistant", "CompanionTo", "source", "rxFromQuery", "fullyQualifiedId", "join", "ATTENDABLE_PATH_SEPARATOR", "type", "PLANK_COMPANION_TYPE", "instanceOf", "Sequence", "SPACE_TYPE", "isSpace", "Template", "templates", "length", "toSorted", "a", "b", "nameA", "name", "nameB", "localeCompare", "template", "objects", "allChats", "Chat", "run", "relatedChats", "sourceOf", "chats", "filter", "includes", "CreateChat", "invariant", "SpaceAction", "AddObject", "target"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/TemplateEditor/TemplateEditor.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { HighlightStyle, LanguageSupport, syntaxHighlighting } from '@codemirror/language';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { handlebarsLanguage } from '@xiechao/codemirror-lang-handlebars';\nimport React from 'react';\n\nimport { type Template } from '@dxos/blueprints';\nimport { invariant } from '@dxos/invariant';\nimport { createDocAccessor } from '@dxos/react-client/echo';\nimport { useThemeContext, useTranslation, type ThemedClassName } from '@dxos/react-ui';\nimport {\n createBasicExtensions,\n createDataExtensions,\n createThemeExtensions,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\n\nhandlebarsLanguage.configure({\n props: [\n styleTags({\n '---': tags.lineComment,\n }),\n ],\n});\n\nexport type TemplateEditorProps = ThemedClassName<{\n template: Template.Template;\n}>;\n\nexport const TemplateEditor = ({ classNames, template }: TemplateEditorProps) => {\n const { t } = useTranslation(meta.id);\n const { themeMode } = useThemeContext();\n const { parentRef } = useTextEditor(() => {\n invariant(template.source.target);\n return {\n initialValue: template.source.target.content,\n extensions: [\n createDataExtensions({\n id: template.id,\n text: createDocAccessor(template.source.target, ['content']),\n }),\n createBasicExtensions({\n bracketMatching: false,\n lineNumbers: true,\n lineWrapping: true,\n monospace: true,\n placeholder: t('template placeholder'),\n }),\n createThemeExtensions({\n themeMode,\n }),\n\n // https://github.com/xiechao/lang-handlebars\n new LanguageSupport(handlebarsLanguage, syntaxHighlighting(handlebarsHighlightStyle)),\n ],\n };\n }, [themeMode, template]);\n\n return <div ref={parentRef} className={mx('h-full', classNames)} />;\n};\n\n/**\n * https://github.com/xiechao/lang-handlebars/blob/direct/src/highlight.js\n */\nexport const handlebarsHighlightStyle = HighlightStyle.define([\n {\n // Braces.\n tag: tags.tagName,\n class: 'text-redText',\n },\n {\n tag: tags.variableName,\n class: 'text-blueText',\n },\n {\n tag: tags.keyword,\n class: 'text-greenText',\n },\n {\n tag: tags.comment,\n class: 'text-subdued',\n },\n]);\n"],
5
- "mappings": ";;;;;;;AAIA,SAASA,gBAAgBC,iBAAiBC,0BAA0B;AACpE,SAASC,WAAWC,YAAY;AAChC,SAASC,0BAA0B;AACnC,OAAOC,WAAW;AAGlB,SAASC,iBAAiB;AAC1B,SAASC,yBAAyB;AAClC,SAASC,iBAAiBC,sBAA4C;AACtE,SACEC,uBACAC,sBACAC,uBACAC,qBACK;AACP,SAASC,UAAU;;AAInBC,mBAAmBC,UAAU;EAC3BC,OAAO;IACLC,UAAU;MACR,OAAOC,KAAKC;IACd,CAAA;;AAEJ,CAAA;AAMO,IAAMC,iBAAiB,CAAC,EAAEC,YAAYC,SAAQ,MAAuB;;;AAC1E,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,UAAM,EAAEC,UAAS,IAAKC,gBAAAA;AACtB,UAAM,EAAEC,UAAS,IAAKC,cAAc,MAAA;AAClCC,gBAAUT,SAASU,OAAOC,QAAM,QAAA;;;;;;;;;AAChC,aAAO;QACLC,cAAcZ,SAASU,OAAOC,OAAOE;QACrCC,YAAY;UACVC,qBAAqB;YACnBX,IAAIJ,SAASI;YACbY,MAAMC,kBAAkBjB,SAASU,OAAOC,QAAQ;cAAC;aAAU;UAC7D,CAAA;UACAO,sBAAsB;YACpBC,iBAAiB;YACjBC,aAAa;YACbC,cAAc;YACdC,WAAW;YACXC,aAAatB,EAAE,sBAAA;UACjB,CAAA;UACAuB,sBAAsB;YACpBnB;UACF,CAAA;;UAGA,IAAIoB,gBAAgBjC,oBAAoBkC,mBAAmBC,wBAAAA,CAAAA;;MAE/D;IACF,GAAG;MAACtB;MAAWL;KAAS;AAExB,WAAO,sBAAA,cAAC4B,OAAAA;MAAIC,KAAKtB;MAAWuB,WAAWC,GAAG,UAAUhC,UAAAA;;;;;AACtD;AAKO,IAAM4B,2BAA2BK,eAAeC,OAAO;EAC5D;;IAEEC,KAAKtC,KAAKuC;IACVC,OAAO;EACT;EACA;IACEF,KAAKtC,KAAKyC;IACVD,OAAO;EACT;EACA;IACEF,KAAKtC,KAAK0C;IACVF,OAAO;EACT;EACA;IACEF,KAAKtC,KAAK2C;IACVH,OAAO;EACT;CACD;",
6
- "names": ["HighlightStyle", "LanguageSupport", "syntaxHighlighting", "styleTags", "tags", "handlebarsLanguage", "React", "invariant", "createDocAccessor", "useThemeContext", "useTranslation", "createBasicExtensions", "createDataExtensions", "createThemeExtensions", "useTextEditor", "mx", "handlebarsLanguage", "configure", "props", "styleTags", "tags", "lineComment", "TemplateEditor", "classNames", "template", "t", "useTranslation", "meta", "id", "themeMode", "useThemeContext", "parentRef", "useTextEditor", "invariant", "source", "target", "initialValue", "content", "extensions", "createDataExtensions", "text", "createDocAccessor", "createBasicExtensions", "bracketMatching", "lineNumbers", "lineWrapping", "monospace", "placeholder", "createThemeExtensions", "LanguageSupport", "syntaxHighlighting", "handlebarsHighlightStyle", "div", "ref", "className", "mx", "HighlightStyle", "define", "tag", "tagName", "class", "variableName", "keyword", "comment"]
7
- }